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

3 days ago
  1. using Newtonsoft.Json;
  2. using NFine.Code;
  3. using NFine.Data.Extensions;
  4. using NFine.Domain._03_Entity.SRM;
  5. using NFine.Repository;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Data;
  9. using System.Data.Common;
  10. using System.Globalization;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. namespace NFine.Application.SRM
  15. {
  16. public class EcharsPerFormApp : RepositoryFactory<ICSVendor>
  17. {
  18. public static int GetWeekOfYear(DateTime dt)
  19. {
  20. GregorianCalendar gc = new GregorianCalendar();
  21. return gc.GetWeekOfYear(dt, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
  22. }
  23. private DataTable ReSet_PurDT(DataTable dt, int maxweek, int Year)
  24. {
  25. try
  26. {
  27. if (Year == DateTime.Now.Year)
  28. {
  29. int CurrentWeek = GetWeekOfYear(DateTime.Now);
  30. if (dt != null && dt.Columns.Count > 0 && dt.Columns.Contains("Week"))
  31. {
  32. List<string> colNames = new List<string>();
  33. for (int j = 0; j < dt.Columns.Count; j++)
  34. {
  35. if (dt.Columns[j].ColumnName != "Week")
  36. {
  37. colNames.Add(dt.Columns[j].ColumnName);
  38. }
  39. }
  40. for (int i = CurrentWeek; i <= maxweek; i++)
  41. {
  42. if (dt.Select("Week=" + i).Length == 0)
  43. {
  44. DataRow dr = dt.NewRow();
  45. dr["Week"] = i;
  46. foreach (string name in colNames)
  47. {
  48. dr[name] = 0;
  49. }
  50. dt.Rows.Add(dr);
  51. }
  52. }
  53. DataView dv = dt.DefaultView;
  54. dv.Sort = " Week ";
  55. return dv.ToTable();
  56. }
  57. return dt;
  58. }
  59. else
  60. {
  61. return dt;
  62. }
  63. }
  64. catch (Exception ex)
  65. {
  66. return dt;
  67. }
  68. }
  69. #region JQDC
  70. public DataTable GetJQDC(string Year)
  71. {
  72. try
  73. {
  74. int MaxWeek = GetMaxWeek(Year);
  75. string sql = @"
  76. DECLARE @YearStr varchar(10) ='{0}'
  77. DECLARE @YearStrNext varchar(10) = ''
  78. set @YearStrNext =Convert(decimal(18,0),@YearStr) +1
  79. if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#TempSS'))
  80. drop table #TempSS
  81. if exists(select * from tempdb..sysobjects where id=object_id('tempdb..##Days'))
  82. drop table ##Days
  83. SELECT DATEADD(wk, DATEDIFF(wk,0,dateadd(wk , 1 , @YearStr+'-01-01')), 0) - 7 StartDay into #TempSS
  84. select week,
  85. case when week=1 and DayFrom<@YearStr+'-01-01' then @YearStr+'-01-01' else DayFrom end DayFrom,
  86. case when week>=52 and DayTo>=@YearStrNext+'-01-01' then DATEADD(ss,-1,@YearStrNext+'-01-01') else DayTo end DayTo
  87. into ##Days
  88. from(
  89. 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
  90. LEFT JOIN #TempSS SS ON 1=1
  91. where vv.type='p'
  92. and vv.number<=52
  93. ) ff
  94. select sum(Num)as PoSum,gg.weekStr,isnull(SUM(ss.Nums),0)as prsum, CASE WHEN ISNULL(SUM(ss.Nums),0)>0 THEN
  95. 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
  96. 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
  97. from (
  98. select a.*,dd.[week] weekStr ,case when a.PreArriveDate is not null then 1 else 0 end Num
  99. from ##Days dd
  100. left join icspo_pomain a on dd.DayFrom<=a.PreArriveDate and dd.DayTo>=a.PreArriveDate
  101. ) gg
  102. left join
  103. (
  104. select a.*,dd.[week] weekStr ,case when a.MTime is not null then 1 else 0 end Nums
  105. from ##Days dd
  106. left join ICSPOArrive a on dd.DayFrom<=a.MTime and dd.DayTo>=a.MTime
  107. ) ss on gg.POCode=ss.POCode
  108. and gg.weekStr<=24
  109. LEFT JOIN (
  110. select a.*,dd.[week] weekStr ,case when a.MTime is not null then 1 else 0 end Numss
  111. from ##Days dd
  112. left join ICSPOArrive a on dd.DayFrom<=DATEADD( DAY,7,a.MTime) and dd.DayTo>=DATEADD( DAY,7,a.MTime)
  113. ) hh on gg.POCode=hh.POCode
  114. and gg.weekStr<=" + MaxWeek + @"
  115. group by gg.weekStr ORDER BY gg.weekStr
  116. ";
  117. sql = string.Format(sql, Year);
  118. DataTable dt = Repository().FindTableBySql(sql.ToString());
  119. dt = ReSet_PurDT(dt, MaxWeek, Convert.ToInt32(Year));
  120. if (dt != null && dt.Rows.Count > 0)
  121. {
  122. return dt;
  123. }
  124. else
  125. { return null; }
  126. }
  127. catch (Exception ex)
  128. {
  129. return null;
  130. }
  131. }
  132. #endregion
  133. #region X轴上不同维度的日期,列表中的动态列头
  134. public DataTable GetPoQuantity(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios)
  135. {
  136. try
  137. {
  138. string sql = string.Empty;
  139. if (radios == "周")
  140. {
  141. sql = @"DECLARE @StartDate DATE = '{0}'
  142. DECLARE @EndDate DATE = '{1}'
  143. ;WITH DateRanges AS (
  144. SELECT
  145. WeekStart = @StartDate,
  146. WeekEnd = DATEADD(DAY, 7, @StartDate) --
  147. UNION ALL
  148. SELECT
  149. DATEADD(WEEK, 1, WeekStart),
  150. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart))
  151. FROM DateRanges
  152. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  153. )
  154. SELECT
  155. WeekStart,
  156. WeekEnd,
  157. WeekNumber = DATEPART(WEEK, WeekStart) --
  158. INTO #Days
  159. FROM DateRanges
  160. OPTION (MAXRECURSION 0) -- 使 CTE MAXRECURSION
  161. SELECT a.WeekNumber FROM #Days a
  162. ORDER BY CAST(a.WeekNumber AS int) ASC DROP TABLE #Days";
  163. }
  164. else if (radios == "月")
  165. {
  166. sql = @"DECLARE @StartDate DATE = '{0}'
  167. DECLARE @EndDate DATE = '{1}'
  168. ;WITH MonthRanges AS (
  169. SELECT
  170. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  171. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  172. UNION ALL
  173. SELECT
  174. DATEADD(MONTH, 1, MonthStart),
  175. DATEADD(MONTH, 1, MonthEnd)
  176. FROM MonthRanges
  177. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  178. )
  179. SELECT
  180. MonthStart,
  181. MonthEnd,
  182. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  183. INTO #Months
  184. FROM MonthRanges
  185. OPTION (MAXRECURSION 0)
  186. SELECT * FROM #Months
  187. DROP TABLE #Months";
  188. }
  189. else if (radios == "日")
  190. {
  191. sql = @"DECLARE @StartDate DATE = '{0}' -- 请用实际值替换这里
  192. DECLARE @EndDate DATE = '{1}' --
  193. ;WITH DateRanges AS (
  194. SELECT
  195. DateValue = @StartDate
  196. UNION ALL
  197. SELECT
  198. DATEADD(DAY, 1, DateValue)
  199. FROM DateRanges
  200. WHERE DateValue < @EndDate
  201. )
  202. SELECT
  203. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  204. INTO #AllDates
  205. FROM DateRanges
  206. OPTION (MAXRECURSION 0)
  207. SELECT * FROM #AllDates
  208. DROP TABLE #AllDates";
  209. }
  210. sql = string.Format(sql, BegionDate, EndDate);
  211. DataTable dt = Repository().FindTableBySql(sql.ToString());
  212. if (dt != null && dt.Rows.Count > 0)
  213. {
  214. return dt;
  215. }
  216. else
  217. { return null; }
  218. }
  219. catch (Exception ex)
  220. {
  221. return null;
  222. }
  223. }
  224. #endregion
  225. #region 实际采购数量柱状体显示
  226. public DataTable GetPoSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios)
  227. {
  228. try
  229. {
  230. string sql = string.Empty;
  231. if (radios == "日")
  232. {
  233. sql = @"DECLARE @StartDate DATE = '{0}'
  234. DECLARE @EndDate DATE = '{1}'
  235. DECLARE @cols AS NVARCHAR(MAX),
  236. @query AS NVARCHAR(MAX);
  237. ;WITH DateRanges AS (
  238. SELECT
  239. DateValue = @StartDate
  240. UNION ALL
  241. SELECT
  242. DATEADD(DAY, 1, DateValue)
  243. FROM DateRanges
  244. WHERE DateValue < @EndDate
  245. )
  246. SELECT
  247. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  248. INTO #AllDates
  249. FROM DateRanges
  250. OPTION (MAXRECURSION 0);
  251. SELECT ISNULL(SUM(quantity),0) AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #AllDates a
  252. LEFT JOIN ICSPurchaseOrder b ON a.WeekNumber=CONVERT(NVARCHAR(20),b.mtime,23) ";
  253. if (!string.IsNullOrWhiteSpace(VenName))
  254. {
  255. sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") ";
  256. }
  257. if (!string.IsNullOrWhiteSpace(InvName))
  258. {
  259. sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") ";
  260. }
  261. sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY a.WeekNumber ASC " + "" +
  262. " 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" + "" +
  263. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  264. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates";
  265. }
  266. else if (radios == "周")
  267. {
  268. sql = @"DECLARE @StartDate DATE = '{0}'
  269. DECLARE @EndDate DATE = '{1}'
  270. ;WITH DateRanges AS (
  271. SELECT
  272. WeekStart = @StartDate,
  273. WeekEnd = DATEADD(DAY, 7, @StartDate) --
  274. UNION ALL
  275. SELECT
  276. DATEADD(WEEK, 1, WeekStart),
  277. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart))
  278. FROM DateRanges
  279. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  280. )
  281. SELECT
  282. WeekStart,
  283. WeekEnd,
  284. WeekNumber = DATEPART(WEEK, WeekStart) --
  285. INTO #Days
  286. FROM DateRanges
  287. OPTION (MAXRECURSION 0) -- 使 CTE MAXRECURSION
  288. SELECT ISNULL(SUM(quantity),0) AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #Days a
  289. LEFT JOIN ICSPurchaseOrder b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime ";
  290. if (!string.IsNullOrWhiteSpace(VenName))
  291. {
  292. sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") ";
  293. }
  294. if (!string.IsNullOrWhiteSpace(InvName))
  295. {
  296. sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") ";
  297. }
  298. sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
  299. " 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" + "" +
  300. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  301. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days";
  302. }
  303. else if (radios == "月")
  304. {
  305. sql = @"DECLARE @StartDate DATE = '{0}'
  306. DECLARE @EndDate DATE = '{1}'
  307. ;WITH MonthRanges AS (
  308. SELECT
  309. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  310. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  311. UNION ALL
  312. SELECT
  313. DATEADD(MONTH, 1, MonthStart),
  314. DATEADD(MONTH, 1, MonthEnd)
  315. FROM MonthRanges
  316. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  317. )
  318. SELECT
  319. MonthStart,
  320. MonthEnd,
  321. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  322. INTO #Months
  323. FROM MonthRanges
  324. OPTION (MAXRECURSION 0)
  325. SELECT ISNULL(SUM(quantity),0) AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #Months a
  326. LEFT JOIN ICSPurchaseOrder b ON a.MonthStart<=b.mtime and a.MonthEnd>=b.mtime ";
  327. if (!string.IsNullOrWhiteSpace(VenName))
  328. {
  329. sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") ";
  330. }
  331. if (!string.IsNullOrWhiteSpace(InvName))
  332. {
  333. sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") ";
  334. }
  335. sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
  336. " 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" + "" +
  337. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  338. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months";
  339. }
  340. sql = string.Format(sql, BegionDate, EndDate);
  341. DataTable dt = Repository().FindTableBySql(sql.ToString());
  342. if (dt != null && dt.Rows.Count > 0)
  343. {
  344. return dt;
  345. }
  346. else
  347. { return null; }
  348. }
  349. catch (Exception ex)
  350. {
  351. return null;
  352. }
  353. }
  354. #endregion
  355. #region 实际到货数量柱状体显示
  356. public DataTable GetPorSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios)
  357. {
  358. try
  359. {
  360. string sql = string.Empty;
  361. if (radios == "日")
  362. {
  363. sql = @"DECLARE @StartDate DATE = '{0}'
  364. DECLARE @EndDate DATE = '{1}'
  365. DECLARE @cols AS NVARCHAR(MAX),
  366. @query AS NVARCHAR(MAX);
  367. ;WITH DateRanges AS (
  368. SELECT
  369. DateValue = @StartDate
  370. UNION ALL
  371. SELECT
  372. DATEADD(DAY, 1, DateValue)
  373. FROM DateRanges
  374. WHERE DateValue < @EndDate
  375. )
  376. SELECT
  377. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  378. INTO #AllDates
  379. FROM DateRanges
  380. OPTION (MAXRECURSION 0);
  381. SELECT ISNULL(SUM(quantity),0) AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #AllDates a
  382. LEFT JOIN ICSDeliveryNotice b ON a.WeekNumber=CONVERT(NVARCHAR(20),b.mtime,23) ";
  383. if (!string.IsNullOrWhiteSpace(VenName))
  384. {
  385. sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") ";
  386. }
  387. if (!string.IsNullOrWhiteSpace(InvName))
  388. {
  389. sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") ";
  390. }
  391. sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY a.WeekNumber ASC " + "" +
  392. " 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" + "" +
  393. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  394. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates";
  395. }
  396. else if (radios == "周")
  397. {
  398. sql = @"DECLARE @StartDate DATE = '{0}'
  399. DECLARE @EndDate DATE = '{1}'
  400. ;WITH DateRanges AS (
  401. SELECT
  402. WeekStart = @StartDate,
  403. WeekEnd = DATEADD(DAY, 7, @StartDate) --
  404. UNION ALL
  405. SELECT
  406. DATEADD(WEEK, 1, WeekStart),
  407. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart))
  408. FROM DateRanges
  409. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  410. )
  411. SELECT
  412. WeekStart,
  413. WeekEnd,
  414. WeekNumber = DATEPART(WEEK, WeekStart) --
  415. INTO #Days
  416. FROM DateRanges
  417. OPTION (MAXRECURSION 0) -- 使 CTE MAXRECURSION
  418. SELECT ISNULL(SUM(quantity),0) AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #Days a
  419. LEFT JOIN ICSDeliveryNotice b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime ";
  420. if (!string.IsNullOrWhiteSpace(VenName))
  421. {
  422. sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") ";
  423. }
  424. if (!string.IsNullOrWhiteSpace(InvName))
  425. {
  426. sql += " and b.InvCode like '%" + InvName + "%'";
  427. }
  428. sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
  429. " 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" + "" +
  430. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  431. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days";
  432. }
  433. else if (radios == "月")
  434. {
  435. sql = @"DECLARE @StartDate DATE = '{0}'
  436. DECLARE @EndDate DATE = '{1}'
  437. ;WITH MonthRanges AS (
  438. SELECT
  439. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  440. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  441. UNION ALL
  442. SELECT
  443. DATEADD(MONTH, 1, MonthStart),
  444. DATEADD(MONTH, 1, MonthEnd)
  445. FROM MonthRanges
  446. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  447. )
  448. SELECT
  449. MonthStart,
  450. MonthEnd,
  451. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  452. INTO #Months
  453. FROM MonthRanges
  454. OPTION (MAXRECURSION 0)
  455. SELECT ISNULL(SUM(quantity),0) AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #Months a
  456. LEFT JOIN ICSDeliveryNotice b ON a.MonthStart<=b.mtime and a.MonthEnd>=b.mtime ";
  457. if (!string.IsNullOrWhiteSpace(VenName))
  458. {
  459. sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") ";
  460. }
  461. if (!string.IsNullOrWhiteSpace(InvName))
  462. {
  463. sql += " and b.InvCode like '%" + InvName + "%'";
  464. }
  465. sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
  466. " 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" + "" +
  467. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  468. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months";
  469. }
  470. sql = string.Format(sql, BegionDate, EndDate);
  471. DataTable dt = Repository().FindTableBySql(sql.ToString());
  472. if (dt != null && dt.Rows.Count > 0)
  473. {
  474. //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
  475. // .Select(g => new EChartsSeries
  476. // {
  477. // name = g.Key,
  478. // data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
  479. // })
  480. // .ToList();
  481. //// 创建 ECharts 数据结构并添加系列
  482. //var echartsData = new EChartsData { series = groupedData };
  483. //// 序列化 ECharts 数据为 JSON 字符串
  484. //string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
  485. return dt;
  486. }
  487. else
  488. { return null; }
  489. }
  490. catch (Exception ex)
  491. {
  492. return null;
  493. }
  494. }
  495. #endregion
  496. #region 开票金额柱状显示
  497. public DataTable GetInvoicePriceSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios)
  498. {
  499. try
  500. {
  501. string sql = string.Empty;
  502. if (radios == "日")
  503. {
  504. sql = @"DECLARE @StartDate DATE = '{0}'
  505. DECLARE @EndDate DATE = '{1}'
  506. DECLARE @cols AS NVARCHAR(MAX),
  507. @query AS NVARCHAR(MAX);
  508. ;WITH DateRanges AS (
  509. SELECT
  510. DateValue = @StartDate
  511. UNION ALL
  512. SELECT
  513. DATEADD(DAY, 1, DateValue)
  514. FROM DateRanges
  515. WHERE DateValue < @EndDate
  516. )
  517. SELECT
  518. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  519. INTO #AllDates
  520. FROM DateRanges
  521. OPTION (MAXRECURSION 0);
  522. SELECT SUM(isnull(c.Qty,0)* isnull(c.TaxPriceSell,0)) as quantity,b.SupplierCode VenCode,a.WeekNumber INTO #tempcccc FROM #AllDates a
  523. LEFT JOIN ICSInvoiceNew b ON a.WeekNumber=CONVERT(NVARCHAR(20),b.mtime,23) ";
  524. if (!string.IsNullOrWhiteSpace(VenName))
  525. {
  526. sql += " and b.SupplierCode in (" + VenName.TrimEnd(',') + ") ";
  527. }
  528. if (!string.IsNullOrWhiteSpace(InvName))
  529. {
  530. sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") ";
  531. }
  532. 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 " + "" +
  533. " 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" + "" +
  534. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  535. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates";
  536. }
  537. if (radios == "周")
  538. {
  539. sql = @"DECLARE @StartDate DATE = '{0}'
  540. DECLARE @EndDate DATE = '{1}'
  541. ;WITH DateRanges AS (
  542. SELECT
  543. WeekStart = @StartDate,
  544. WeekEnd = DATEADD(DAY, 7, @StartDate) --
  545. UNION ALL
  546. SELECT
  547. DATEADD(WEEK, 1, WeekStart),
  548. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart))
  549. FROM DateRanges
  550. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  551. )
  552. SELECT
  553. WeekStart,
  554. WeekEnd,
  555. WeekNumber = DATEPART(WEEK, WeekStart) --
  556. INTO #Days
  557. FROM DateRanges
  558. OPTION (MAXRECURSION 0) -- 使 CTE MAXRECURSION
  559. SELECT SUM(isnull(c.Qty,0)* isnull(c.TaxPriceSell,0)) as quantity,b.SupplierCode VenCode,a.WeekNumber INTO #tempcccc FROM #Days a
  560. LEFT JOIN ICSInvoiceNew b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime ";
  561. if (!string.IsNullOrWhiteSpace(VenName))
  562. {
  563. sql += " and b.SupplierCode in (" + VenName.TrimEnd(',') + ") ";
  564. }
  565. if (!string.IsNullOrWhiteSpace(InvName))
  566. {
  567. sql += " and b.InvCode like '%" + InvName + "%'";
  568. }
  569. 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 " + "" +
  570. " 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" + "" +
  571. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  572. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days";
  573. }
  574. else if (radios == "月")
  575. {
  576. sql = @"DECLARE @StartDate DATE = '{0}'
  577. DECLARE @EndDate DATE = '{1}'
  578. ;WITH MonthRanges AS (
  579. SELECT
  580. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  581. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  582. UNION ALL
  583. SELECT
  584. DATEADD(MONTH, 1, MonthStart),
  585. DATEADD(MONTH, 1, MonthEnd)
  586. FROM MonthRanges
  587. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  588. )
  589. SELECT
  590. MonthStart,
  591. MonthEnd,
  592. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  593. INTO #Months
  594. FROM MonthRanges
  595. OPTION (MAXRECURSION 0)
  596. SELECT SUM(isnull(c.Qty,0)* isnull(c.TaxPriceSell,0)) as quantity,b.SupplierCode VenCode,a.WeekNumber INTO #tempcccc FROM #Days a
  597. LEFT JOIN ICSInvoiceNew b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime";
  598. if (!string.IsNullOrWhiteSpace(VenName))
  599. {
  600. sql += " and b.SupplierCode in (" + VenName.TrimEnd(',') + ") ";
  601. }
  602. if (!string.IsNullOrWhiteSpace(InvName))
  603. {
  604. sql += " and b.InvCode like '%" + InvName + "%'";
  605. }
  606. sql += @"LEFT JOIN dbo.ICSInvoiceNewDetail c ON b.DocNo=c.DocNo AND b.WorkPoint=c.WorkPoint
  607. GROUP BY a.WeekNumber,b.SupplierCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
  608. " 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" + "" +
  609. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  610. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months";
  611. }
  612. sql = string.Format(sql, BegionDate, EndDate);
  613. DataTable dt = Repository().FindTableBySql(sql.ToString());
  614. if (dt != null && dt.Rows.Count > 0)
  615. {
  616. //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
  617. // .Select(g => new EChartsSeries
  618. // {
  619. // name = g.Key,
  620. // data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
  621. // })
  622. // .ToList();
  623. //// 创建 ECharts 数据结构并添加系列
  624. //var echartsData = new EChartsData { series = groupedData };
  625. //// 序列化 ECharts 数据为 JSON 字符串
  626. //string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
  627. return dt;
  628. }
  629. else
  630. { return null; }
  631. }
  632. catch (Exception ex)
  633. {
  634. return null;
  635. }
  636. }
  637. #endregion
  638. #region 采购周期柱状显示
  639. public DataTable GetProcurementcycle(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios)
  640. {
  641. try
  642. {
  643. string sql = string.Empty;
  644. if (radios == "周")
  645. {
  646. sql = @"DECLARE @StartDate DATE = '{0}'
  647. DECLARE @EndDate DATE = '{1}'
  648. ;WITH DateRanges AS (
  649. SELECT
  650. WeekStart = @StartDate,
  651. WeekEnd = DATEADD(DAY, 7, @StartDate) --
  652. UNION ALL
  653. SELECT
  654. DATEADD(WEEK, 1, WeekStart),
  655. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart))
  656. FROM DateRanges
  657. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  658. )
  659. SELECT
  660. WeekStart,
  661. WeekEnd,
  662. WeekNumber = DATEPART(WEEK, WeekStart) --
  663. INTO #Days
  664. FROM DateRanges
  665. OPTION (MAXRECURSION 0) -- 使 CTE MAXRECURSION
  666. SELECT a.WeekNumber FROM #Days a
  667. ORDER BY CAST(a.WeekNumber AS int) ASC DROP TABLE #Days";
  668. }
  669. else if (radios == "月")
  670. {
  671. sql = @"DECLARE @StartDate DATE = '{0}'
  672. DECLARE @EndDate DATE = '{1}'
  673. ;WITH MonthRanges AS (
  674. SELECT
  675. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  676. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  677. UNION ALL
  678. SELECT
  679. DATEADD(MONTH, 1, MonthStart),
  680. DATEADD(MONTH, 1, MonthEnd)
  681. FROM MonthRanges
  682. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  683. )
  684. SELECT
  685. MonthStart,
  686. MonthEnd,
  687. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  688. INTO #Months
  689. FROM MonthRanges
  690. OPTION (MAXRECURSION 0)
  691. SELECT * FROM #Months
  692. DROP TABLE #Months";
  693. }
  694. else if (radios == "日")
  695. {
  696. sql = @"DECLARE @StartDate DATE = '{0}' -- 请用实际值替换这里
  697. DECLARE @EndDate DATE = '{1}' --
  698. ;WITH DateRanges AS (
  699. SELECT
  700. DateValue = @StartDate
  701. UNION ALL
  702. SELECT
  703. DATEADD(DAY, 1, DateValue)
  704. FROM DateRanges
  705. WHERE DateValue < @EndDate
  706. )
  707. SELECT
  708. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  709. INTO #AllDates
  710. FROM DateRanges
  711. OPTION (MAXRECURSION 0)
  712. SELECT * FROM #AllDates
  713. DROP TABLE #AllDates";
  714. }
  715. sql = string.Format(sql, BegionDate, EndDate);
  716. DataTable dt = Repository().FindTableBySql(sql.ToString());
  717. if (dt != null && dt.Rows.Count > 0)
  718. {
  719. return dt;
  720. }
  721. else
  722. { return null; }
  723. }
  724. catch (Exception ex)
  725. {
  726. return null;
  727. }
  728. }
  729. #endregion
  730. #region 采购订单单价柱状显示
  731. public DataTable GetJHImplementSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios)
  732. {
  733. try
  734. {
  735. string sql = string.Empty;
  736. if (radios == "日")
  737. {
  738. sql = @"DECLARE @StartDate DATE = '{0}'
  739. DECLARE @EndDate DATE = '{1}'
  740. DECLARE @cols AS NVARCHAR(MAX),
  741. @query AS NVARCHAR(MAX);
  742. ;WITH DateRanges AS (
  743. SELECT
  744. DateValue = @StartDate
  745. UNION ALL
  746. SELECT
  747. DATEADD(DAY, 1, DateValue)
  748. FROM DateRanges
  749. WHERE DateValue < @EndDate
  750. )
  751. SELECT
  752. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  753. INTO #AllDates
  754. FROM DateRanges
  755. OPTION (MAXRECURSION 0);
  756. SELECT ISNULL(SUM(UnitPrice),0) AS UnitPrice,b.VenCode,a.WeekNumber INTO #tempcccc FROM #AllDates a
  757. LEFT JOIN ICSPurchaseOrder b ON a.WeekNumber=CONVERT(NVARCHAR(20),b.mtime,23) ";
  758. if (!string.IsNullOrWhiteSpace(InvName))
  759. {
  760. sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") ";
  761. }
  762. sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY a.WeekNumber ASC " + "" +
  763. " 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" + "" +
  764. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  765. " GROUP BY kk.VenCode,cc.UnitPrice,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates";
  766. }
  767. else if (radios == "周")
  768. {
  769. sql = @"DECLARE @StartDate DATE = '{0}'
  770. DECLARE @EndDate DATE = '{1}'
  771. ;WITH DateRanges AS (
  772. SELECT
  773. WeekStart = @StartDate,
  774. WeekEnd = DATEADD(DAY, 7, @StartDate) --
  775. UNION ALL
  776. SELECT
  777. DATEADD(WEEK, 1, WeekStart),
  778. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart))
  779. FROM DateRanges
  780. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  781. )
  782. SELECT
  783. WeekStart,
  784. WeekEnd,
  785. WeekNumber = DATEPART(WEEK, WeekStart) --
  786. INTO #Days
  787. FROM DateRanges
  788. OPTION (MAXRECURSION 0) -- 使 CTE MAXRECURSION
  789. SELECT ISNULL(SUM(UnitPrice),0) AS UnitPrice,b.InvCode,a.WeekNumber INTO #tempcccc FROM #Days a
  790. LEFT JOIN ICSPurchaseOrder b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime ";
  791. if (!string.IsNullOrWhiteSpace(InvName))
  792. {
  793. sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") ";
  794. }
  795. sql += " GROUP BY a.WeekNumber,b.InvCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
  796. " 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" + "" +
  797. " LEFT JOIN #tempcccc cc ON cc.InvCode=kk.InvCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.InvCode IS NOT null" +
  798. " GROUP BY kk.InvCode,cc.UnitPrice,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days";
  799. }
  800. else if (radios == "月")
  801. {
  802. sql = @"DECLARE @StartDate DATE = '{0}'
  803. DECLARE @EndDate DATE = '{1}'
  804. ;WITH MonthRanges AS (
  805. SELECT
  806. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  807. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  808. UNION ALL
  809. SELECT
  810. DATEADD(MONTH, 1, MonthStart),
  811. DATEADD(MONTH, 1, MonthEnd)
  812. FROM MonthRanges
  813. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  814. )
  815. SELECT
  816. MonthStart,
  817. MonthEnd,
  818. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  819. INTO #Months
  820. FROM MonthRanges
  821. OPTION (MAXRECURSION 0)
  822. SELECT ISNULL(SUM(UnitPrice),0) AS UnitPrice,b.InvCode,a.WeekNumber INTO #tempcccc FROM #Months a
  823. LEFT JOIN ICSPurchaseOrder b ON a.MonthStart<=b.mtime and a.MonthEnd>=b.mtime ";
  824. if (!string.IsNullOrWhiteSpace(InvName))
  825. {
  826. sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") ";
  827. }
  828. sql += " GROUP BY a.WeekNumber,b.InvCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
  829. " 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" + "" +
  830. " LEFT JOIN #tempcccc cc ON cc.InvCode=kk.InvCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.InvCode IS NOT null" +
  831. " GROUP BY kk.InvCode,cc.UnitPrice,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months";
  832. }
  833. sql = string.Format(sql, BegionDate, EndDate);
  834. DataTable dt = Repository().FindTableBySql(sql.ToString());
  835. if (dt != null && dt.Rows.Count > 0)
  836. {
  837. //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
  838. // .Select(g => new EChartsSeries
  839. // {
  840. // name = g.Key,
  841. // data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
  842. // })
  843. // .ToList();
  844. //// 创建 ECharts 数据结构并添加系列
  845. //var echartsData = new EChartsData { series = groupedData };
  846. //// 序列化 ECharts 数据为 JSON 字符串
  847. //string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
  848. return dt;
  849. }
  850. else
  851. { return null; }
  852. }
  853. catch (Exception ex)
  854. {
  855. return null;
  856. }
  857. }
  858. #endregion
  859. #region 采购金额(订单金额)占比
  860. public DataTable GetPoPriceSumSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios)
  861. {
  862. try
  863. {
  864. string sql = string.Empty;
  865. if (radios == "日")
  866. {
  867. sql = @"DECLARE @StartDate DATE = '{0}'
  868. DECLARE @EndDate DATE = '{1}'
  869. DECLARE @cols AS NVARCHAR(MAX),
  870. @query AS NVARCHAR(MAX);
  871. ;WITH DateRanges AS (
  872. SELECT
  873. DateValue = @StartDate
  874. UNION ALL
  875. SELECT
  876. DATEADD(DAY, 1, DateValue)
  877. FROM DateRanges
  878. WHERE DateValue < @EndDate
  879. )
  880. SELECT
  881. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  882. INTO #AllDates
  883. FROM DateRanges
  884. OPTION (MAXRECURSION 0);
  885. SELECT ISNULL(SUM(UnitPrice*b.Quantity),0) AS UnitPrice,b.VenCode,a.WeekNumber INTO #tempcccc FROM #AllDates a
  886. LEFT JOIN ICSPurchaseOrder b ON a.WeekNumber=CONVERT(NVARCHAR(20),b.mtime,23) ";
  887. if (!string.IsNullOrWhiteSpace(InvName))
  888. {
  889. sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") ";
  890. }
  891. sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY a.WeekNumber ASC " + "" +
  892. " 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" + "" +
  893. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  894. " GROUP BY kk.VenCode,cc.UnitPrice,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates";
  895. }
  896. else if (radios == "周")
  897. {
  898. sql = @"DECLARE @StartDate DATE = '{0}'
  899. DECLARE @EndDate DATE = '{1}'
  900. ;WITH DateRanges AS (
  901. SELECT
  902. WeekStart = @StartDate,
  903. WeekEnd = DATEADD(DAY, 7, @StartDate) --
  904. UNION ALL
  905. SELECT
  906. DATEADD(WEEK, 1, WeekStart),
  907. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart))
  908. FROM DateRanges
  909. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  910. )
  911. SELECT
  912. WeekStart,
  913. WeekEnd,
  914. WeekNumber = DATEPART(WEEK, WeekStart) --
  915. INTO #Days
  916. FROM DateRanges
  917. OPTION (MAXRECURSION 0) -- 使 CTE MAXRECURSION
  918. SELECT ISNULL(SUM(UnitPrice*b.Quantity),0) AS UnitPrice,b.InvCode,a.WeekNumber INTO #tempcccc FROM #Days a
  919. LEFT JOIN ICSPurchaseOrder b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime ";
  920. if (!string.IsNullOrWhiteSpace(InvName))
  921. {
  922. sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") ";
  923. }
  924. sql += " GROUP BY a.WeekNumber,b.InvCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
  925. " 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" + "" +
  926. " LEFT JOIN #tempcccc cc ON cc.InvCode=kk.InvCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.InvCode IS NOT null" +
  927. " GROUP BY kk.InvCode,cc.UnitPrice,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days";
  928. }
  929. else if (radios == "月")
  930. {
  931. sql = @"DECLARE @StartDate DATE = '{0}'
  932. DECLARE @EndDate DATE = '{1}'
  933. ;WITH MonthRanges AS (
  934. SELECT
  935. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  936. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  937. UNION ALL
  938. SELECT
  939. DATEADD(MONTH, 1, MonthStart),
  940. DATEADD(MONTH, 1, MonthEnd)
  941. FROM MonthRanges
  942. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  943. )
  944. SELECT
  945. MonthStart,
  946. MonthEnd,
  947. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  948. INTO #Months
  949. FROM MonthRanges
  950. OPTION (MAXRECURSION 0)
  951. SELECT ISNULL(SUM(UnitPrice*b.Quantity),0) AS UnitPrice,b.InvCode,a.WeekNumber INTO #tempcccc FROM #Months a
  952. LEFT JOIN ICSPurchaseOrder b ON a.MonthStart<=b.mtime and a.MonthEnd>=b.mtime ";
  953. if (!string.IsNullOrWhiteSpace(InvName))
  954. {
  955. sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") ";
  956. }
  957. sql += " GROUP BY a.WeekNumber,b.InvCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
  958. " 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" + "" +
  959. " LEFT JOIN #tempcccc cc ON cc.InvCode=kk.InvCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.InvCode IS NOT null" +
  960. " GROUP BY kk.InvCode,cc.UnitPrice,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months";
  961. }
  962. sql = string.Format(sql, BegionDate, EndDate);
  963. DataTable dt = Repository().FindTableBySql(sql.ToString());
  964. if (dt != null && dt.Rows.Count > 0)
  965. {
  966. //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
  967. // .Select(g => new EChartsSeries
  968. // {
  969. // name = g.Key,
  970. // data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
  971. // })
  972. // .ToList();
  973. //// 创建 ECharts 数据结构并添加系列
  974. //var echartsData = new EChartsData { series = groupedData };
  975. //// 序列化 ECharts 数据为 JSON 字符串
  976. //string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
  977. return dt;
  978. }
  979. else
  980. { return null; }
  981. }
  982. catch (Exception ex)
  983. {
  984. return null;
  985. }
  986. }
  987. #endregion
  988. #region 供应商数量
  989. public DataTable GetVendorQuantitySearcs()
  990. {
  991. try
  992. {
  993. string sql = string.Empty;
  994. sql = "SELECT COUNT(*) AS Venqty FROM dbo.ICSVendor ";
  995. DataTable dt = Repository().FindTableBySql(sql.ToString());
  996. if (dt != null && dt.Rows.Count > 0)
  997. {
  998. //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
  999. // .Select(g => new EChartsSeries
  1000. // {
  1001. // name = g.Key,
  1002. // data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
  1003. // })
  1004. // .ToList();
  1005. //// 创建 ECharts 数据结构并添加系列
  1006. //var echartsData = new EChartsData { series = groupedData };
  1007. //// 序列化 ECharts 数据为 JSON 字符串
  1008. //string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
  1009. return dt;
  1010. }
  1011. else
  1012. { return null; }
  1013. }
  1014. catch (Exception ex)
  1015. {
  1016. return null;
  1017. }
  1018. }
  1019. #endregion
  1020. #region 交期一致率
  1021. public DataTable GetPOMaintenanceSearcs()
  1022. {
  1023. try
  1024. {
  1025. string sql = string.Empty;
  1026. sql = @"
  1027. SELECT
  1028. CAST(
  1029. (SELECT COUNT(*) * 1.0
  1030. FROM dbo.ICSPurchaseOrder
  1031. WHERE CONVERT(NVARCHAR(20), PlanArriveDate, 23) = CONVERT(NVARCHAR(20), ArriveDate, 23)
  1032. AND ArriveDate IS NOT NULL) /
  1033. (SELECT COUNT(*) * 1.0
  1034. FROM dbo.ICSPurchaseOrder
  1035. WHERE ArriveDate IS NOT NULL) AS DECIMAL(16,2)
  1036. ) AS Ratio
  1037. ";
  1038. DataTable dt = Repository().FindTableBySql(sql.ToString());
  1039. if (dt != null && dt.Rows.Count > 0)
  1040. {
  1041. //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
  1042. // .Select(g => new EChartsSeries
  1043. // {
  1044. // name = g.Key,
  1045. // data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
  1046. // })
  1047. // .ToList();
  1048. //// 创建 ECharts 数据结构并添加系列
  1049. //var echartsData = new EChartsData { series = groupedData };
  1050. //// 序列化 ECharts 数据为 JSON 字符串
  1051. //string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
  1052. return dt;
  1053. }
  1054. else
  1055. { return null; }
  1056. }
  1057. catch (Exception ex)
  1058. {
  1059. return null;
  1060. }
  1061. }
  1062. #endregion
  1063. #region 不良次数柱状图显示
  1064. public DataTable GetVendorQualifiedQuantitySearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios)
  1065. {
  1066. try
  1067. {
  1068. string sql = string.Empty;
  1069. if (radios == "日")
  1070. {
  1071. sql = @"DECLARE @StartDate DATE = '{0}'
  1072. DECLARE @EndDate DATE = '{1}'
  1073. DECLARE @cols AS NVARCHAR(MAX),
  1074. @query AS NVARCHAR(MAX);
  1075. ;WITH DateRanges AS (
  1076. SELECT
  1077. DateValue = @StartDate
  1078. UNION ALL
  1079. SELECT
  1080. DATEADD(DAY, 1, DateValue)
  1081. FROM DateRanges
  1082. WHERE DateValue < @EndDate
  1083. )
  1084. SELECT
  1085. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  1086. INTO #AllDates
  1087. FROM DateRanges
  1088. OPTION (MAXRECURSION 0);
  1089. SELECT COUNT(*) as quantity,d.VenCode,a.WeekNumber INTO #tempcccc FROM #AllDates a
  1090. LEFT JOIN ICSInspection b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime
  1091. inner JOIN dbo.ICSInventoryLotDetail c ON b.LotNo=c.LotNo AND b.WorkPoint=b.WorkPoint
  1092. inner JOIN dbo.ICSPurchaseOrder d ON c.TransCode=d.POCode AND c.TransSequence=d.Sequence
  1093. WHERE b.QualifiedQuantity>0 ";
  1094. if (!string.IsNullOrWhiteSpace(VenName))
  1095. {
  1096. sql += " and d.VenCode in (" + VenName.TrimEnd(',') + ") ";
  1097. }
  1098. if (!string.IsNullOrWhiteSpace(InvName))
  1099. {
  1100. sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") ";
  1101. }
  1102. sql += " GROUP BY a.WeekNumber,d.VenCode ORDER BY a.WeekNumber ASC " + "" +
  1103. " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + "" +
  1104. " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " " +
  1105. " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) " +
  1106. " FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " +
  1107. "" + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" +
  1108. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  1109. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates";
  1110. }
  1111. else if (radios == "周")
  1112. {
  1113. sql = @"DECLARE @StartDate DATE = '{0}'
  1114. DECLARE @EndDate DATE = '{1}'
  1115. ;WITH DateRanges AS (
  1116. SELECT
  1117. WeekStart = @StartDate,
  1118. WeekEnd = DATEADD(DAY, 7, @StartDate) --
  1119. UNION ALL
  1120. SELECT
  1121. DATEADD(WEEK, 1, WeekStart),
  1122. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart))
  1123. FROM DateRanges
  1124. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  1125. )
  1126. SELECT
  1127. WeekStart,
  1128. WeekEnd,
  1129. WeekNumber = DATEPART(WEEK, WeekStart) --
  1130. INTO #Days
  1131. FROM DateRanges
  1132. OPTION (MAXRECURSION 0) -- 使 CTE MAXRECURSION
  1133. SELECT COUNT(*) as quantity,d.VenCode,a.WeekNumber INTO #tempcccc FROM #Days a
  1134. LEFT JOIN ICSInspection b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime
  1135. inner JOIN dbo.ICSInventoryLotDetail c ON b.LotNo=c.LotNo AND b.WorkPoint=b.WorkPoint
  1136. inner JOIN dbo.ICSPurchaseOrder d ON c.TransCode=d.POCode AND c.TransSequence=d.Sequence
  1137. WHERE b.QualifiedQuantity>0 ";
  1138. if (!string.IsNullOrWhiteSpace(VenName))
  1139. {
  1140. sql += " and d.VenCode in (" + VenName.TrimEnd(',') + ") ";
  1141. }
  1142. if (!string.IsNullOrWhiteSpace(InvName))
  1143. {
  1144. sql += " and b.InvCode like '%" + InvName + "%'";
  1145. }
  1146. sql += " GROUP BY a.WeekNumber,d.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
  1147. " 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" + "" +
  1148. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  1149. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days";
  1150. }
  1151. else if (radios == "月")
  1152. {
  1153. sql = @"DECLARE @StartDate DATE = '{0}'
  1154. DECLARE @EndDate DATE = '{1}'
  1155. ;WITH MonthRanges AS (
  1156. SELECT
  1157. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  1158. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  1159. UNION ALL
  1160. SELECT
  1161. DATEADD(MONTH, 1, MonthStart),
  1162. DATEADD(MONTH, 1, MonthEnd)
  1163. FROM MonthRanges
  1164. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  1165. )
  1166. SELECT
  1167. MonthStart,
  1168. MonthEnd,
  1169. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  1170. INTO #Months
  1171. FROM MonthRanges
  1172. OPTION (MAXRECURSION 0)
  1173. SELECT COUNT(*) as quantity,d.VenCode,a.WeekNumber INTO #tempcccc FROM #Months a
  1174. LEFT JOIN ICSInspection b ON a.MonthStart<=b.mtime and a.MonthEnd>=b.mtime
  1175. inner JOIN dbo.ICSInventoryLotDetail c ON b.LotNo=c.LotNo AND b.WorkPoint=b.WorkPoint
  1176. inner JOIN dbo.ICSPurchaseOrder d ON c.TransCode=d.POCode AND c.TransSequence=d.Sequence
  1177. WHERE b.QualifiedQuantity>0 ";
  1178. if (!string.IsNullOrWhiteSpace(VenName))
  1179. {
  1180. sql += " and d.VenCode in (" + VenName.TrimEnd(',') + ") ";
  1181. }
  1182. if (!string.IsNullOrWhiteSpace(InvName))
  1183. {
  1184. sql += " and b.InvCode like '%" + InvName + "%'";
  1185. }
  1186. sql += " GROUP BY a.WeekNumber,d.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
  1187. " 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" + "" +
  1188. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  1189. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months";
  1190. }
  1191. sql = string.Format(sql, BegionDate, EndDate);
  1192. DataTable dt = Repository().FindTableBySql(sql.ToString());
  1193. if (dt != null && dt.Rows.Count > 0)
  1194. {
  1195. //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
  1196. // .Select(g => new EChartsSeries
  1197. // {
  1198. // name = g.Key,
  1199. // data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
  1200. // })
  1201. // .ToList();
  1202. //// 创建 ECharts 数据结构并添加系列
  1203. //var echartsData = new EChartsData { series = groupedData };
  1204. //// 序列化 ECharts 数据为 JSON 字符串
  1205. //string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
  1206. return dt;
  1207. }
  1208. else
  1209. { return null; }
  1210. }
  1211. catch (Exception ex)
  1212. {
  1213. return null;
  1214. }
  1215. }
  1216. #endregion
  1217. #region 退货次数柱状图显示
  1218. public DataTable GetDeliveryNoticeSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios)
  1219. {
  1220. try
  1221. {
  1222. string sql = string.Empty;
  1223. if (radios == "日")
  1224. {
  1225. sql = @"DECLARE @StartDate DATE = '{0}'
  1226. DECLARE @EndDate DATE = '{1}'
  1227. DECLARE @cols AS NVARCHAR(MAX),
  1228. @query AS NVARCHAR(MAX);
  1229. ;WITH DateRanges AS (
  1230. SELECT
  1231. DateValue = @StartDate
  1232. UNION ALL
  1233. SELECT
  1234. DATEADD(DAY, 1, DateValue)
  1235. FROM DateRanges
  1236. WHERE DateValue < @EndDate
  1237. )
  1238. SELECT
  1239. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  1240. INTO #AllDates
  1241. FROM DateRanges
  1242. OPTION (MAXRECURSION 0);
  1243. SELECT COUNT(*) as quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #AllDates a
  1244. LEFT JOIN ICSDeliveryNotice b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime
  1245. WHERE DNType='2'";
  1246. if (!string.IsNullOrWhiteSpace(VenName))
  1247. {
  1248. sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") ";
  1249. }
  1250. if (!string.IsNullOrWhiteSpace(InvName))
  1251. {
  1252. sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") ";
  1253. }
  1254. sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY a.WeekNumber ASC " + "" +
  1255. " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + "" +
  1256. " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " " +
  1257. " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) " +
  1258. " FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " +
  1259. "" + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" +
  1260. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  1261. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates";
  1262. }
  1263. else if (radios == "周")
  1264. {
  1265. sql = @"DECLARE @StartDate DATE = '{0}'
  1266. DECLARE @EndDate DATE = '{1}'
  1267. ;WITH DateRanges AS (
  1268. SELECT
  1269. WeekStart = @StartDate,
  1270. WeekEnd = DATEADD(DAY, 7, @StartDate) --
  1271. UNION ALL
  1272. SELECT
  1273. DATEADD(WEEK, 1, WeekStart),
  1274. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart))
  1275. FROM DateRanges
  1276. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  1277. )
  1278. SELECT
  1279. WeekStart,
  1280. WeekEnd,
  1281. WeekNumber = DATEPART(WEEK, WeekStart) --
  1282. INTO #Days
  1283. FROM DateRanges
  1284. OPTION (MAXRECURSION 0) -- 使 CTE MAXRECURSION
  1285. SELECT COUNT(*) as quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #Days a
  1286. LEFT JOIN ICSDeliveryNotice b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime
  1287. WHERE DNType='2' ";
  1288. if (!string.IsNullOrWhiteSpace(VenName))
  1289. {
  1290. sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") ";
  1291. }
  1292. if (!string.IsNullOrWhiteSpace(InvName))
  1293. {
  1294. sql += " and b.InvCode like '%" + InvName + "%'";
  1295. }
  1296. sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
  1297. " 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" + "" +
  1298. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  1299. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days";
  1300. }
  1301. else if (radios == "月")
  1302. {
  1303. sql = @"DECLARE @StartDate DATE = '{0}'
  1304. DECLARE @EndDate DATE = '{1}'
  1305. ;WITH MonthRanges AS (
  1306. SELECT
  1307. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  1308. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  1309. UNION ALL
  1310. SELECT
  1311. DATEADD(MONTH, 1, MonthStart),
  1312. DATEADD(MONTH, 1, MonthEnd)
  1313. FROM MonthRanges
  1314. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  1315. )
  1316. SELECT
  1317. MonthStart,
  1318. MonthEnd,
  1319. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  1320. INTO #Months
  1321. FROM MonthRanges
  1322. OPTION (MAXRECURSION 0)
  1323. SELECT COUNT(*) as quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #Months a
  1324. LEFT JOIN ICSDeliveryNotice b ON a.MonthStart<=b.mtime and a.MonthEnd>=b.mtime
  1325. WHERE DNType='2' ";
  1326. if (!string.IsNullOrWhiteSpace(VenName))
  1327. {
  1328. sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") ";
  1329. }
  1330. if (!string.IsNullOrWhiteSpace(InvName))
  1331. {
  1332. sql += " and b.InvCode like '%" + InvName + "%'";
  1333. }
  1334. sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
  1335. " 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" + "" +
  1336. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  1337. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months";
  1338. }
  1339. sql = string.Format(sql, BegionDate, EndDate);
  1340. DataTable dt = Repository().FindTableBySql(sql.ToString());
  1341. if (dt != null && dt.Rows.Count > 0)
  1342. {
  1343. //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
  1344. // .Select(g => new EChartsSeries
  1345. // {
  1346. // name = g.Key,
  1347. // data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
  1348. // })
  1349. // .ToList();
  1350. //// 创建 ECharts 数据结构并添加系列
  1351. //var echartsData = new EChartsData { series = groupedData };
  1352. //// 序列化 ECharts 数据为 JSON 字符串
  1353. //string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
  1354. return dt;
  1355. }
  1356. else
  1357. { return null; }
  1358. }
  1359. catch (Exception ex)
  1360. {
  1361. return null;
  1362. }
  1363. }
  1364. #endregion
  1365. #region 退货率数柱状图显示
  1366. public DataTable GetDeliveryNoticeType2Searcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios)
  1367. {
  1368. try
  1369. {
  1370. string sql = string.Empty;
  1371. if (radios == "日")
  1372. {
  1373. sql = @"DECLARE @StartDate DATE = '{0}'
  1374. DECLARE @EndDate DATE = '{1}'
  1375. DECLARE @cols AS NVARCHAR(MAX),
  1376. @query AS NVARCHAR(MAX);
  1377. ;WITH DateRanges AS (
  1378. SELECT
  1379. DateValue = @StartDate
  1380. UNION ALL
  1381. SELECT
  1382. DATEADD(DAY, 1, DateValue)
  1383. FROM DateRanges
  1384. WHERE DateValue < @EndDate
  1385. )
  1386. SELECT
  1387. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  1388. INTO #AllDates
  1389. FROM DateRanges
  1390. OPTION (MAXRECURSION 0);
  1391. SELECT CASE
  1392. WHEN SUM(CASE WHEN DNType = '1' THEN Quantity ELSE 0 END) = 0
  1393. THEN NULL
  1394. ELSE SUM(CASE WHEN DNType = '2' THEN Quantity ELSE 0 END) * 1.0 / SUM(CASE WHEN DNType = '1'THEN Quantity ELSE 0 END)
  1395. END AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #AllDates a
  1396. LEFT JOIN ICSDeliveryNotice b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime
  1397. WHERE 1=1";
  1398. if (!string.IsNullOrWhiteSpace(VenName))
  1399. {
  1400. sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") ";
  1401. }
  1402. if (!string.IsNullOrWhiteSpace(InvName))
  1403. {
  1404. sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") ";
  1405. }
  1406. sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY a.WeekNumber ASC " + "" +
  1407. " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + "" +
  1408. " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " " +
  1409. " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) " +
  1410. " FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " +
  1411. "" + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" +
  1412. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  1413. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates";
  1414. }
  1415. else if (radios == "周")
  1416. {
  1417. sql = @"DECLARE @StartDate DATE = '{0}'
  1418. DECLARE @EndDate DATE = '{1}'
  1419. ;WITH DateRanges AS (
  1420. SELECT
  1421. WeekStart = @StartDate,
  1422. WeekEnd = DATEADD(DAY, 7, @StartDate) --
  1423. UNION ALL
  1424. SELECT
  1425. DATEADD(WEEK, 1, WeekStart),
  1426. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart))
  1427. FROM DateRanges
  1428. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  1429. )
  1430. SELECT
  1431. WeekStart,
  1432. WeekEnd,
  1433. WeekNumber = DATEPART(WEEK, WeekStart) --
  1434. INTO #Days
  1435. FROM DateRanges
  1436. OPTION (MAXRECURSION 0) -- 使 CTE MAXRECURSION
  1437. SELECT CASE
  1438. WHEN SUM(CASE WHEN DNType = '1' THEN Quantity ELSE 0 END) = 0
  1439. THEN NULL
  1440. ELSE SUM(CASE WHEN DNType = '2' THEN Quantity ELSE 0 END) * 1.0 / SUM(CASE WHEN DNType = '1' THEN Quantity ELSE 0 END)
  1441. END AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #Days a
  1442. LEFT JOIN ICSDeliveryNotice b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime
  1443. WHERE 1=1 ";
  1444. if (!string.IsNullOrWhiteSpace(VenName))
  1445. {
  1446. sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") ";
  1447. }
  1448. if (!string.IsNullOrWhiteSpace(InvName))
  1449. {
  1450. sql += " and b.InvCode like '%" + InvName + "%'";
  1451. }
  1452. sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
  1453. " 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" + "" +
  1454. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  1455. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days";
  1456. }
  1457. else if (radios == "月")
  1458. {
  1459. sql = @"DECLARE @StartDate DATE = '{0}'
  1460. DECLARE @EndDate DATE = '{1}'
  1461. ;WITH MonthRanges AS (
  1462. SELECT
  1463. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  1464. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  1465. UNION ALL
  1466. SELECT
  1467. DATEADD(MONTH, 1, MonthStart),
  1468. DATEADD(MONTH, 1, MonthEnd)
  1469. FROM MonthRanges
  1470. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  1471. )
  1472. SELECT
  1473. MonthStart,
  1474. MonthEnd,
  1475. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  1476. INTO #Months
  1477. FROM MonthRanges
  1478. OPTION (MAXRECURSION 0)
  1479. SELECT CASE
  1480. WHEN SUM(CASE WHEN DNType = '1' THEN Quantity ELSE 0 END) = 0
  1481. THEN NULL
  1482. ELSE SUM(CASE WHEN DNType = '2' THEN Quantity ELSE 0 END) * 1.0 / SUM(CASE WHEN DNType = '1'THEN Quantity ELSE 0 END)
  1483. END AS quantity,b.VenCode,a.WeekNumber INTO #tempcccc FROM #Months a
  1484. LEFT JOIN ICSDeliveryNotice b ON a.MonthStart<=b.mtime and a.MonthEnd>=b.mtime
  1485. WHERE 1=1 ";
  1486. if (!string.IsNullOrWhiteSpace(VenName))
  1487. {
  1488. sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") ";
  1489. }
  1490. if (!string.IsNullOrWhiteSpace(InvName))
  1491. {
  1492. sql += " and b.InvCode like '%" + InvName + "%'";
  1493. }
  1494. sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
  1495. " 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" + "" +
  1496. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  1497. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months";
  1498. }
  1499. sql = string.Format(sql, BegionDate, EndDate);
  1500. DataTable dt = Repository().FindTableBySql(sql.ToString());
  1501. if (dt != null && dt.Rows.Count > 0)
  1502. {
  1503. //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
  1504. // .Select(g => new EChartsSeries
  1505. // {
  1506. // name = g.Key,
  1507. // data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
  1508. // })
  1509. // .ToList();
  1510. //// 创建 ECharts 数据结构并添加系列
  1511. //var echartsData = new EChartsData { series = groupedData };
  1512. //// 序列化 ECharts 数据为 JSON 字符串
  1513. //string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
  1514. return dt;
  1515. }
  1516. else
  1517. { return null; }
  1518. }
  1519. catch (Exception ex)
  1520. {
  1521. return null;
  1522. }
  1523. }
  1524. #endregion
  1525. #region 交期及时率数柱状图显示
  1526. public DataTable GetDeliveryNoticeType2JQSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios)
  1527. {
  1528. try
  1529. {
  1530. string sql = string.Empty;
  1531. if (radios == "日")
  1532. {
  1533. sql = @"DECLARE @StartDate DATE = '{0}'
  1534. DECLARE @EndDate DATE = '{1}'
  1535. DECLARE @cols AS NVARCHAR(MAX),
  1536. @query AS NVARCHAR(MAX);
  1537. ;WITH DateRanges AS (
  1538. SELECT
  1539. DateValue = @StartDate
  1540. UNION ALL
  1541. SELECT
  1542. DATEADD(DAY, 1, DateValue)
  1543. FROM DateRanges
  1544. WHERE DateValue < @EndDate
  1545. )
  1546. SELECT
  1547. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  1548. INTO #AllDates
  1549. FROM DateRanges
  1550. OPTION (MAXRECURSION 0);
  1551. 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
  1552. LEFT JOIN ICSDeliveryNotice b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime
  1553. WHERE 1=1";
  1554. if (!string.IsNullOrWhiteSpace(VenName))
  1555. {
  1556. sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") ";
  1557. }
  1558. if (!string.IsNullOrWhiteSpace(InvName))
  1559. {
  1560. sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") ";
  1561. }
  1562. sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY a.WeekNumber ASC " + "" +
  1563. " SELECT DISTINCT VenCode INTO #tEMPDDDD FROM #tempcccc WHERE VenCode IS NOT NULL " + "" +
  1564. " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " " +
  1565. " SELECT kk.VenCode AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) " +
  1566. " FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " +
  1567. "" + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" +
  1568. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  1569. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates";
  1570. }
  1571. else if (radios == "周")
  1572. {
  1573. sql = @"DECLARE @StartDate DATE = '{0}'
  1574. DECLARE @EndDate DATE = '{1}'
  1575. ;WITH DateRanges AS (
  1576. SELECT
  1577. WeekStart = @StartDate,
  1578. WeekEnd = DATEADD(DAY, 7, @StartDate) --
  1579. UNION ALL
  1580. SELECT
  1581. DATEADD(WEEK, 1, WeekStart),
  1582. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart))
  1583. FROM DateRanges
  1584. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  1585. )
  1586. SELECT
  1587. WeekStart,
  1588. WeekEnd,
  1589. WeekNumber = DATEPART(WEEK, WeekStart) --
  1590. INTO #Days
  1591. FROM DateRanges
  1592. OPTION (MAXRECURSION 0) -- 使 CTE MAXRECURSION
  1593. 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
  1594. LEFT JOIN ICSDeliveryNotice b ON a.WeekStart<=b.mtime and a.WeekEnd>=b.mtime
  1595. WHERE 1=1 ";
  1596. if (!string.IsNullOrWhiteSpace(VenName))
  1597. {
  1598. sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") ";
  1599. }
  1600. if (!string.IsNullOrWhiteSpace(InvName))
  1601. {
  1602. sql += " and b.InvCode like '%" + InvName + "%'";
  1603. }
  1604. sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
  1605. " 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" + "" +
  1606. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  1607. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days";
  1608. }
  1609. else if (radios == "月")
  1610. {
  1611. sql = @"DECLARE @StartDate DATE = '{0}'
  1612. DECLARE @EndDate DATE = '{1}'
  1613. ;WITH MonthRanges AS (
  1614. SELECT
  1615. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  1616. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  1617. UNION ALL
  1618. SELECT
  1619. DATEADD(MONTH, 1, MonthStart),
  1620. DATEADD(MONTH, 1, MonthEnd)
  1621. FROM MonthRanges
  1622. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  1623. )
  1624. SELECT
  1625. MonthStart,
  1626. MonthEnd,
  1627. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  1628. INTO #Months
  1629. FROM MonthRanges
  1630. OPTION (MAXRECURSION 0)
  1631. 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
  1632. LEFT JOIN ICSDeliveryNotice b ON a.MonthStart<=b.mtime and a.MonthEnd>=b.mtime
  1633. WHERE 1=1 ";
  1634. if (!string.IsNullOrWhiteSpace(VenName))
  1635. {
  1636. sql += " and b.VenCode in (" + VenName.TrimEnd(',') + ") ";
  1637. }
  1638. if (!string.IsNullOrWhiteSpace(InvName))
  1639. {
  1640. sql += " and b.InvCode like '%" + InvName + "%'";
  1641. }
  1642. sql += " GROUP BY a.WeekNumber,b.VenCode ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
  1643. " 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" + "" +
  1644. " LEFT JOIN #tempcccc cc ON cc.VenCode=kk.VenCode AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VenCode IS NOT null" +
  1645. " GROUP BY kk.VenCode,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months";
  1646. }
  1647. sql = string.Format(sql, BegionDate, EndDate);
  1648. DataTable dt = Repository().FindTableBySql(sql.ToString());
  1649. if (dt != null && dt.Rows.Count > 0)
  1650. {
  1651. //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
  1652. // .Select(g => new EChartsSeries
  1653. // {
  1654. // name = g.Key,
  1655. // data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
  1656. // })
  1657. // .ToList();
  1658. //// 创建 ECharts 数据结构并添加系列
  1659. //var echartsData = new EChartsData { series = groupedData };
  1660. //// 序列化 ECharts 数据为 JSON 字符串
  1661. //string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
  1662. return dt;
  1663. }
  1664. else
  1665. { return null; }
  1666. }
  1667. catch (Exception ex)
  1668. {
  1669. return null;
  1670. }
  1671. }
  1672. #endregion
  1673. #region 退货次数柱状图显示
  1674. public DataTable GetVendorSORQUOTATIONSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios)
  1675. {
  1676. try
  1677. {
  1678. string sql = string.Empty;
  1679. if (radios == "日")
  1680. {
  1681. sql = @"DECLARE @StartDate DATE = '{0}'
  1682. DECLARE @EndDate DATE = '{1}'
  1683. DECLARE @cols AS NVARCHAR(MAX),
  1684. @query AS NVARCHAR(MAX);
  1685. ;WITH DateRanges AS (
  1686. SELECT
  1687. DateValue = @StartDate
  1688. UNION ALL
  1689. SELECT
  1690. DATEADD(DAY, 1, DateValue)
  1691. FROM DateRanges
  1692. WHERE DateValue < @EndDate
  1693. )
  1694. SELECT
  1695. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  1696. INTO #AllDates
  1697. FROM DateRanges
  1698. OPTION (MAXRECURSION 0);
  1699. SELECT COUNT(*) as quantity,b.VENDORCODE,a.WeekNumber INTO #tempcccc FROM #AllDates a
  1700. LEFT JOIN ICSSORQUOTATION b ON a.WeekStart<=b.CREATETIME and a.WeekEnd>=b.CREATETIME
  1701. WHERE 1=1";
  1702. if (!string.IsNullOrWhiteSpace(VenName))
  1703. {
  1704. sql += " and b.VENDORCODE in (" + VenName.TrimEnd(',') + ") ";
  1705. }
  1706. if (!string.IsNullOrWhiteSpace(InvName))
  1707. {
  1708. sql += " and b.InvCode in (" + InvName.TrimEnd(',') + ") ";
  1709. }
  1710. sql += " GROUP BY a.WeekNumber,b.VENDORCODE ORDER BY a.WeekNumber ASC " + "" +
  1711. " SELECT DISTINCT VENDORCODE INTO #tEMPDDDD FROM #tempcccc WHERE VENDORCODE IS NOT NULL " + "" +
  1712. " SELECT DISTINCT WeekNumber INTO #tEMPEEE FROM #tempcccc WHERE WeekNumber IS NOT NULL " + " " +
  1713. " SELECT kk.VENDORCODE AS Type,kk2.WeekNumber,ISNULL(cc.quantity,0)quantity, (SELECT COUNT(1) " +
  1714. " FROM #tEMPDDDD KK ) TypeCount,(SELECT COUNT(1) FROM #tEMPEEE KK ) WeekCount " +
  1715. "" + "FROM #tEMPDDDD kk " + "LEFT JOIN #tEMPEEE kk2 ON 1=1" + "" +
  1716. " LEFT JOIN #tempcccc cc ON cc.VENDORCODE=kk.VENDORCODE AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VENDORCODE IS NOT null" +
  1717. " GROUP BY kk.VENDORCODE,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #AllDates";
  1718. }
  1719. else if (radios == "周")
  1720. {
  1721. sql = @"DECLARE @StartDate DATE = '{0}'
  1722. DECLARE @EndDate DATE = '{1}'
  1723. ;WITH DateRanges AS (
  1724. SELECT
  1725. WeekStart = @StartDate,
  1726. WeekEnd = DATEADD(DAY, 7, @StartDate) --
  1727. UNION ALL
  1728. SELECT
  1729. DATEADD(WEEK, 1, WeekStart),
  1730. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart))
  1731. FROM DateRanges
  1732. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  1733. )
  1734. SELECT
  1735. WeekStart,
  1736. WeekEnd,
  1737. WeekNumber = DATEPART(WEEK, WeekStart) --
  1738. INTO #Days
  1739. FROM DateRanges
  1740. OPTION (MAXRECURSION 0) -- 使 CTE MAXRECURSION
  1741. SELECT COUNT(*) as quantity,b.VENDORCODE,a.WeekNumber INTO #tempcccc FROM #Days a
  1742. LEFT JOIN ICSSORQUOTATION b ON a.WeekStart<=b.CREATETIME and a.WeekEnd>=b.CREATETIME
  1743. WHERE 1=1 ";
  1744. if (!string.IsNullOrWhiteSpace(VenName))
  1745. {
  1746. sql += " and b.VENDORCODE in (" + VenName.TrimEnd(',') + ") ";
  1747. }
  1748. if (!string.IsNullOrWhiteSpace(InvName))
  1749. {
  1750. sql += " and b.InvCode like '%" + InvName + "%'";
  1751. }
  1752. sql += " GROUP BY a.WeekNumber,b.VENDORCODE ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
  1753. " 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" + "" +
  1754. " LEFT JOIN #tempcccc cc ON cc.VENDORCODE=kk.VENDORCODE AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VENDORCODE IS NOT null" +
  1755. " GROUP BY kk.VENDORCODE,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Days";
  1756. }
  1757. else if (radios == "月")
  1758. {
  1759. sql = @"DECLARE @StartDate DATE = '{0}'
  1760. DECLARE @EndDate DATE = '{1}'
  1761. ;WITH MonthRanges AS (
  1762. SELECT
  1763. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  1764. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  1765. UNION ALL
  1766. SELECT
  1767. DATEADD(MONTH, 1, MonthStart),
  1768. DATEADD(MONTH, 1, MonthEnd)
  1769. FROM MonthRanges
  1770. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  1771. )
  1772. SELECT
  1773. MonthStart,
  1774. MonthEnd,
  1775. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  1776. INTO #Months
  1777. FROM MonthRanges
  1778. OPTION (MAXRECURSION 0)
  1779. SELECT COUNT(*) as quantity,b.VENDORCODE,a.WeekNumber INTO #tempcccc FROM #Months a
  1780. LEFT JOIN ICSSORQUOTATION b ON a.MonthStart<=b.CREATETIME and a.MonthEnd>=b.CREATETIME
  1781. WHERE 1=1 ";
  1782. if (!string.IsNullOrWhiteSpace(VenName))
  1783. {
  1784. sql += " and b.VENDORCODE in (" + VenName.TrimEnd(',') + ") ";
  1785. }
  1786. if (!string.IsNullOrWhiteSpace(InvName))
  1787. {
  1788. sql += " and b.InvCode like '%" + InvName + "%'";
  1789. }
  1790. sql += " GROUP BY a.WeekNumber,b.VENDORCODE ORDER BY CAST(a.WeekNumber AS int) ASC " + "" +
  1791. " 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" + "" +
  1792. " LEFT JOIN #tempcccc cc ON cc.VENDORCODE=kk.VENDORCODE AND cc.WeekNumber=kk2.WeekNumber WHERE kk.VENDORCODE IS NOT null" +
  1793. " GROUP BY kk.VENDORCODE,cc.quantity,kk2.WeekNumber ORDER BY 1,2 DROP TABLE #tempcccc drop table #tEMPDDDD drop Table #tEMPEEE DROP TABLE #Months";
  1794. }
  1795. sql = string.Format(sql, BegionDate, EndDate);
  1796. DataTable dt = Repository().FindTableBySql(sql.ToString());
  1797. if (dt != null && dt.Rows.Count > 0)
  1798. {
  1799. //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
  1800. // .Select(g => new EChartsSeries
  1801. // {
  1802. // name = g.Key,
  1803. // data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
  1804. // })
  1805. // .ToList();
  1806. //// 创建 ECharts 数据结构并添加系列
  1807. //var echartsData = new EChartsData { series = groupedData };
  1808. //// 序列化 ECharts 数据为 JSON 字符串
  1809. //string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
  1810. return dt;
  1811. }
  1812. else
  1813. { return null; }
  1814. }
  1815. catch (Exception ex)
  1816. {
  1817. return null;
  1818. }
  1819. }
  1820. #endregion
  1821. #region 退货次数柱状图显示
  1822. public DataTable GetPoJBPriceSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios)
  1823. {
  1824. try
  1825. {
  1826. DataTable dt = new DataTable();
  1827. List<DbParameter> parameter = new List<DbParameter>();
  1828. string sql = "";
  1829. if (radios == "月")
  1830. {
  1831. sql = @"DECLARE @StartDate DATE = '{0}'; -- 替换为您的开始日期
  1832. DECLARE @EndDate DATE = '{1}'; --
  1833. --
  1834. WITH MonthlyCosts AS (
  1835. SELECT InvCode,
  1836. DATEADD(MONTH, DATEDIFF(MONTH, 0, MTIME), 0) AS month,
  1837. SUM(UnitPrice*Quantity) AS total_cost
  1838. FROM dbo.ICSPurchaseOrder
  1839. WHERE MTIME BETWEEN @StartDate AND @EndDate";
  1840. if (!string.IsNullOrWhiteSpace(InvName))
  1841. {
  1842. sql += " and InvCode like '%" + InvName + "%'";
  1843. }
  1844. sql += @" GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, MTIME), 0), invCode
  1845. ),
  1846. --
  1847. YearOverYear AS (
  1848. SELECT
  1849. bbb.InvCode,
  1850. bbb.month,
  1851. bbb.total_cost AS current_month_cost,
  1852. COALESCE(previous.total_cost, 0) AS previous_month_cost,
  1853. bbb.total_cost - COALESCE(previous.total_cost, 0) AS cost_reduction_mom
  1854. FROM MonthlyCosts bbb
  1855. inner JOIN MonthlyCosts previous ON bbb.month = DATEADD(MONTH, 1, previous.month) AND previous.InvCode = bbb.InvCode
  1856. WHERE DATEADD(MONTH, -1, bbb.month) BETWEEN @StartDate AND @EndDate --
  1857. )
  1858. --
  1859. SELECT
  1860. mom.InvCode,
  1861. mom.month,
  1862. mom.current_month_cost,
  1863. mom.previous_month_cost,
  1864. mom.cost_reduction_mom AS monthly_cost_reduction
  1865. FROM YearOverYear mom
  1866. ORDER BY mom.month;
  1867. ";
  1868. }
  1869. else if (radios == "年")
  1870. {
  1871. sql = @"DECLARE @StartDate DATE = '{0}'; -- 替换为您的开始日期
  1872. DECLARE @EndDate DATE = '{1}'; --
  1873. --
  1874. WITH MonthlyCosts AS (
  1875. SELECT
  1876. DATEADD(MONTH, DATEDIFF(MONTH, 0, MTIME), 0) AS month,
  1877. SUM(UnitPrice*Quantity) AS total_cost
  1878. FROM dbo.ICSPurchaseOrder
  1879. WHERE MTIME BETWEEN @StartDate AND @EndDate";
  1880. if (!string.IsNullOrWhiteSpace(InvName))
  1881. {
  1882. sql += " and InvCode like '%" + InvName + "%'";
  1883. }
  1884. sql += @" GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, MTIME), 0)
  1885. ),
  1886. --
  1887. YearOverYear AS (
  1888. SELECT
  1889. bbb.month,
  1890. bbb.total_cost AS current_year_cost,
  1891. COALESCE(previous.total_cost, 0) AS previous_year_cost,
  1892. bbb.total_cost - COALESCE(previous.total_cost, 0) AS cost_reduction_yoy
  1893. FROM MonthlyCosts bbb
  1894. LEFT JOIN MonthlyCosts previous ON bbb.month = DATEADD(YEAR, 1, previous.month)
  1895. WHERE DATEADD(YEAR, -1, bbb.month) BETWEEN @StartDate AND @EndDate --
  1896. )
  1897. --
  1898. SELECT
  1899. YEAR(yoy.month) AS month,
  1900. SUM(yoy.current_year_cost) AS current_month_cost,
  1901. SUM(yoy.previous_year_cost) AS previous_year_total_cost,
  1902. SUM(yoy.cost_reduction_yoy) AS yearly_cost_reduction
  1903. FROM YearOverYear yoy
  1904. GROUP BY YEAR(yoy.month)
  1905. ORDER BY month;";
  1906. }
  1907. sql = string.Format(sql, BegionDate, EndDate);
  1908. DataTable dtr = SqlHelper.GetDataTableBySql(sql);
  1909. if (dtr != null && dtr.Rows.Count > 0)
  1910. {
  1911. //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
  1912. // .Select(g => new EChartsSeries
  1913. // {
  1914. // name = g.Key,
  1915. // data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
  1916. // })
  1917. // .ToList();
  1918. //// 创建 ECharts 数据结构并添加系列
  1919. //var echartsData = new EChartsData { series = groupedData };
  1920. //// 序列化 ECharts 数据为 JSON 字符串
  1921. //string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
  1922. return dtr;
  1923. }
  1924. else
  1925. { return null; }
  1926. }
  1927. catch (Exception ex)
  1928. {
  1929. return null;
  1930. }
  1931. }
  1932. #endregion
  1933. #region 投标周期柱状图显示
  1934. public DataTable GetBidChartsTBSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios)
  1935. {
  1936. try
  1937. {
  1938. DataTable dt = new DataTable();
  1939. List<DbParameter> parameter = new List<DbParameter>();
  1940. string sql = "";
  1941. if (radios == "月")
  1942. {
  1943. sql = @"
  1944. SELECT
  1945. a.SupplierCode,
  1946. YEAR(d.StarTime)+ MONTH(d.StarTime) AS BidYear,
  1947. AVG(DATEDIFF(DAY, d.StarTime, b.MTIME)) AS average_bid_cycle_days
  1948. FROM
  1949. ICSBidInfo a
  1950. LEFT JOIN
  1951. ICSBidInfoDetail b ON b.InfoID = a.ID AND a.WorkPoint = b.WorkPoint AND b.MTIME IS NOT NULL
  1952. LEFT JOIN ICSBidDoc d ON d.BidCode = a.BidCode and d.WorkPoint=a.WorkPoint
  1953. WHERE
  1954. b.MTIME IS NOT NULL
  1955. ";
  1956. if (!string.IsNullOrWhiteSpace(InvName))
  1957. {
  1958. sql += " and a.InvCode like '%" + InvName + "%'";
  1959. }
  1960. if (!string.IsNullOrWhiteSpace(VenName))
  1961. {
  1962. sql += " and a.SupplierCode like '%" + VenName + "%'";
  1963. }
  1964. sql += @" GROUP BY
  1965. a.SupplierCode,
  1966. YEAR(d.StarTime),
  1967. MONTH(d.StarTime)
  1968. ORDER BY
  1969. a.SupplierCode,
  1970. BidYear ";
  1971. }
  1972. else if (radios == "年")
  1973. {
  1974. sql = @" SELECT
  1975. a.SupplierCode,
  1976. YEAR(d.StarTime) AS BidYear,
  1977. AVG(DATEDIFF(DAY, d.StarTime, b.MTIME)) AS average_bid_cycle_days
  1978. FROM
  1979. ICSBidInfo a
  1980. LEFT JOIN
  1981. ICSBidInfoDetail b ON b.InfoID = a.ID AND a.WorkPoint = b.WorkPoint AND b.MTIME IS NOT NULL
  1982. LEFT JOIN ICSBidDoc d ON d.BidCode = a.BidCode and d.WorkPoint=a.WorkPoint
  1983. WHERE
  1984. b.MTIME IS NOT NULL ";
  1985. if (!string.IsNullOrWhiteSpace(InvName))
  1986. {
  1987. sql += " and a.InvCode like '%" + InvName + "%'";
  1988. }
  1989. if (!string.IsNullOrWhiteSpace(VenName))
  1990. {
  1991. sql += " and a.SupplierCode like '%" + VenName + "%'";
  1992. }
  1993. sql += @" GROUP BY
  1994. a.SupplierCode,
  1995. YEAR(d.StarTime),
  1996. MONTH(d.StarTime)
  1997. ORDER BY
  1998. a.SupplierCode,
  1999. BidYear ";
  2000. }
  2001. sql = string.Format(sql, BegionDate, EndDate);
  2002. DataTable dtr = SqlHelper.GetDataTableBySql(sql);
  2003. if (dtr != null && dtr.Rows.Count > 0)
  2004. {
  2005. //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
  2006. // .Select(g => new EChartsSeries
  2007. // {
  2008. // name = g.Key,
  2009. // data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
  2010. // })
  2011. // .ToList();
  2012. //// 创建 ECharts 数据结构并添加系列
  2013. //var echartsData = new EChartsData { series = groupedData };
  2014. //// 序列化 ECharts 数据为 JSON 字符串
  2015. //string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
  2016. return dtr;
  2017. }
  2018. else
  2019. { return null; }
  2020. }
  2021. catch (Exception ex)
  2022. {
  2023. return null;
  2024. }
  2025. }
  2026. #endregion
  2027. #region 决标周期柱状图显示
  2028. public DataTable GetBidChartsJBSearcs(string VenName, string InvName, string BegionDate, string EndDate, string DETP, string selectedValue, string radios)
  2029. {
  2030. try
  2031. {
  2032. DataTable dt = new DataTable();
  2033. List<DbParameter> parameter = new List<DbParameter>();
  2034. string sql = "";
  2035. if (radios == "月")
  2036. {
  2037. sql = @"
  2038. SELECT
  2039. a.SupplierCode,
  2040. CONVERT(NVARCHAR(20),YEAR(b.MTIME)) +'年'+ CONVERT(NVARCHAR(20), MONTH(b.MTIME))+'月' AS BidYear,
  2041. AVG(DATEDIFF(DAY, b.MTIME, d.BidTime)) AS average_bid_cycle_days
  2042. FROM
  2043. ICSBidInfo a
  2044. LEFT JOIN
  2045. ICSBidInfoDetail b ON b.InfoID = a.ID AND a.WorkPoint = b.WorkPoint AND b.MTIME IS NOT NULL
  2046. LEFT JOIN ICSBidDoc d ON d.BidCode = a.BidCode and d.WorkPoint=a.WorkPoint
  2047. WHERE
  2048. b.MTIME IS NOT NULL
  2049. ";
  2050. if (!string.IsNullOrWhiteSpace(InvName))
  2051. {
  2052. sql += " and a.InvCode like '%" + InvName + "%'";
  2053. }
  2054. if (!string.IsNullOrWhiteSpace(VenName))
  2055. {
  2056. sql += " and a.SupplierCode like '%" + VenName + "%'";
  2057. }
  2058. sql += @" GROUP BY
  2059. a.SupplierCode,
  2060. YEAR(b.MTIME),
  2061. MONTH(b.MTIME)
  2062. ORDER BY
  2063. a.SupplierCode,
  2064. BidYear ";
  2065. }
  2066. else if (radios == "年")
  2067. {
  2068. sql = @" SELECT
  2069. a.SupplierCode,
  2070. YEAR(b.MTIME) AS BidYear,
  2071. AVG(DATEDIFF(DAY, b.MTIME, d.BidTime)) AS average_bid_cycle_days
  2072. FROM
  2073. ICSBidInfo a
  2074. LEFT JOIN
  2075. ICSBidInfoDetail b ON b.InfoID = a.ID AND a.WorkPoint = b.WorkPoint AND b.MTIME IS NOT NULL
  2076. LEFT JOIN ICSBidDoc d ON d.BidCode = a.BidCode and d.WorkPoint=a.WorkPoint
  2077. WHERE
  2078. b.MTIME IS NOT NULL ";
  2079. if (!string.IsNullOrWhiteSpace(InvName))
  2080. {
  2081. sql += " and a.InvCode like '%" + InvName + "%'";
  2082. }
  2083. if (!string.IsNullOrWhiteSpace(VenName))
  2084. {
  2085. sql += " and a.SupplierCode like '%" + VenName + "%'";
  2086. }
  2087. sql += @" GROUP BY
  2088. a.SupplierCode,
  2089. YEAR(b.MTIME)
  2090. ORDER BY
  2091. a.SupplierCode,
  2092. BidYear ";
  2093. }
  2094. sql = string.Format(sql, BegionDate, EndDate);
  2095. DataTable dtr = SqlHelper.GetDataTableBySql(sql);
  2096. if (dtr != null && dtr.Rows.Count > 0)
  2097. {
  2098. //var groupedData = dt.AsEnumerable() .GroupBy(row => row.Field<string>("VenCode"))
  2099. // .Select(g => new EChartsSeries
  2100. // {
  2101. // name = g.Key,
  2102. // data = g.Select(row => row.Field<decimal>("quantity")).ToList() // 假设每个 invcode 只有一周的数据
  2103. // })
  2104. // .ToList();
  2105. //// 创建 ECharts 数据结构并添加系列
  2106. //var echartsData = new EChartsData { series = groupedData };
  2107. //// 序列化 ECharts 数据为 JSON 字符串
  2108. //string jsonData = JsonConvert.SerializeObject(echartsData, Newtonsoft.Json.Formatting.Indented);
  2109. return dtr;
  2110. }
  2111. else
  2112. { return null; }
  2113. }
  2114. catch (Exception ex)
  2115. {
  2116. return null;
  2117. }
  2118. }
  2119. #endregion
  2120. #region 获取实际采购数量列表信息
  2121. public DataTable GetGridJsonByLB(string queryJson, ref Pagination jqgridparam)
  2122. {
  2123. DataTable dt = new DataTable();
  2124. var queryParam = queryJson.ToJObject();
  2125. List<DbParameter> parameter = new List<DbParameter>();
  2126. string sql = "";
  2127. if (queryParam["radios"].ToString() == "日")
  2128. {
  2129. sql = @"DECLARE @StartDate DATE = '{0}'
  2130. DECLARE @EndDate DATE = '{1}'
  2131. DECLARE @cols AS NVARCHAR(MAX),
  2132. @query AS NVARCHAR(MAX);
  2133. ;WITH DateRanges AS (
  2134. SELECT
  2135. DateValue = @StartDate
  2136. UNION ALL
  2137. SELECT
  2138. DATEADD(DAY, 1, DateValue)
  2139. FROM DateRanges
  2140. WHERE DateValue < @EndDate
  2141. )
  2142. SELECT
  2143. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  2144. INTO #AllDates
  2145. FROM DateRanges
  2146. OPTION (MAXRECURSION 0);
  2147. -- PIVOT的列标题
  2148. SELECT @cols =
  2149. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  2150. FROM #AllDates dr
  2151. LEFT JOIN ICSPurchaseOrder p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber
  2152. FOR XML PATH(''), TYPE
  2153. ).value('.', 'NVARCHAR(MAX)')
  2154. ,1,1,'')
  2155. -- PIVOT查询
  2156. SET @query = '
  2157. SELECT *
  2158. FROM (
  2159. SELECT
  2160. dr.WeekNumber,
  2161. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  2162. isnull(quantity,0) as quantity
  2163. FROM #AllDates dr
  2164. LEFT JOIN ICSPurchaseOrder p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber WHERE 1=1";
  2165. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  2166. {
  2167. sql += " and VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  2168. }
  2169. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  2170. {
  2171. sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") ";
  2172. }
  2173. sql += @" ) x
  2174. PIVOT (
  2175. SUM(quantity)
  2176. FOR WeekNumber IN (' + @cols + ')
  2177. ) p
  2178. ';
  2179. EXEC sp_executesql @query;
  2180. DROP TABLE #AllDates";
  2181. }
  2182. else if (queryParam["radios"].ToString() == "周")
  2183. {
  2184. sql = @"DECLARE @StartDate DATE = '{0}'
  2185. DECLARE @EndDate DATE = '{1}'
  2186. DECLARE @cols AS NVARCHAR(MAX),
  2187. @query AS NVARCHAR(MAX);
  2188. ;WITH DateRanges AS (
  2189. SELECT
  2190. WeekStart = @StartDate,
  2191. WeekEnd = DATEADD(DAY, 7, @StartDate), --
  2192. WeekNumber = DATEPART(WEEK, @StartDate) --
  2193. UNION ALL
  2194. SELECT
  2195. DATEADD(WEEK, 1, WeekStart),
  2196. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)),
  2197. DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart))
  2198. FROM DateRanges
  2199. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  2200. )
  2201. SELECT WeekStart, WeekEnd, WeekNumber
  2202. INTO #Days
  2203. FROM DateRanges
  2204. OPTION (MAXRECURSION 0);
  2205. -- PIVOT的列标题
  2206. SELECT @cols =
  2207. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  2208. FROM #Days dr
  2209. LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd
  2210. FOR XML PATH(''), TYPE
  2211. ).value('.', 'NVARCHAR(MAX)')
  2212. ,1,1,'')
  2213. -- PIVOT查询
  2214. SET @query = '
  2215. SELECT *
  2216. FROM (
  2217. SELECT
  2218. dr.WeekNumber,
  2219. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  2220. isnull(quantity,0) as quantity
  2221. FROM #Days dr
  2222. LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd WHERE 1=1";
  2223. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  2224. {
  2225. sql += " and VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  2226. }
  2227. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  2228. {
  2229. sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") ";
  2230. }
  2231. sql += @" ) x
  2232. PIVOT (
  2233. SUM(quantity)
  2234. FOR WeekNumber IN (' + @cols + ')
  2235. ) p
  2236. ';
  2237. EXEC sp_executesql @query;
  2238. DROP TABLE #Days";
  2239. }
  2240. else if (queryParam["radios"].ToString() == "月")
  2241. {
  2242. sql = @"DECLARE @StartDate DATE = '{0}'
  2243. DECLARE @EndDate DATE = '{1}'
  2244. DECLARE @cols AS NVARCHAR(MAX),
  2245. @query AS NVARCHAR(MAX);
  2246. ;WITH MonthRanges AS (
  2247. SELECT
  2248. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  2249. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  2250. UNION ALL
  2251. SELECT
  2252. DATEADD(MONTH, 1, MonthStart),
  2253. DATEADD(MONTH, 1, MonthEnd)
  2254. FROM MonthRanges
  2255. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  2256. )
  2257. SELECT
  2258. MonthStart,
  2259. MonthEnd,
  2260. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  2261. INTO #Months
  2262. FROM MonthRanges
  2263. OPTION (MAXRECURSION 0)
  2264. -- PIVOT的列标题
  2265. SELECT @cols =
  2266. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  2267. FROM #Months dr
  2268. LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd
  2269. FOR XML PATH(''), TYPE
  2270. ).value('.', 'NVARCHAR(MAX)')
  2271. ,1,1,'')
  2272. -- PIVOT查询
  2273. SET @query = '
  2274. SELECT *
  2275. FROM (
  2276. SELECT
  2277. dr.WeekNumber,
  2278. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  2279. isnull(quantity,0) as quantity
  2280. FROM #Months dr
  2281. LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd WHERE 1=1";
  2282. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  2283. {
  2284. sql += " and VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  2285. }
  2286. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  2287. {
  2288. sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") ";
  2289. }
  2290. sql += @") x
  2291. PIVOT (
  2292. SUM(quantity)
  2293. FOR WeekNumber IN (' + @cols + ')
  2294. ) p
  2295. ';
  2296. EXEC sp_executesql @query;
  2297. DROP TABLE #Months";
  2298. }
  2299. sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString());
  2300. DataTable dtr = SqlHelper.GetDataTableBySql(sql);
  2301. return dtr;
  2302. }
  2303. #endregion
  2304. #region 获取实际到货数量列表信息
  2305. public DataTable GetPorGridJsonByLB(string queryJson, ref Pagination jqgridparam)
  2306. {
  2307. DataTable dt = new DataTable();
  2308. var queryParam = queryJson.ToJObject();
  2309. List<DbParameter> parameter = new List<DbParameter>();
  2310. string sql = "";
  2311. if (queryParam["radios"].ToString() == "日")
  2312. {
  2313. sql = @"DECLARE @StartDate DATE = '{0}'
  2314. DECLARE @EndDate DATE = '{1}'
  2315. DECLARE @cols AS NVARCHAR(MAX),
  2316. @query AS NVARCHAR(MAX);
  2317. ;WITH DateRanges AS (
  2318. SELECT
  2319. DateValue = @StartDate
  2320. UNION ALL
  2321. SELECT
  2322. DATEADD(DAY, 1, DateValue)
  2323. FROM DateRanges
  2324. WHERE DateValue < @EndDate
  2325. )
  2326. SELECT
  2327. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  2328. INTO #AllDates
  2329. FROM DateRanges
  2330. OPTION (MAXRECURSION 0);
  2331. -- PIVOT的列标题
  2332. SELECT @cols =
  2333. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  2334. FROM #AllDates dr
  2335. LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber
  2336. FOR XML PATH(''), TYPE
  2337. ).value('.', 'NVARCHAR(MAX)')
  2338. ,1,1,'')
  2339. -- PIVOT查询
  2340. SET @query = '
  2341. SELECT *
  2342. FROM (
  2343. SELECT
  2344. dr.WeekNumber,
  2345. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  2346. isnull(quantity,0) as quantity
  2347. FROM #AllDates dr
  2348. LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber WHERE 1=1";
  2349. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  2350. {
  2351. sql += " and VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  2352. }
  2353. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  2354. {
  2355. sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") ";
  2356. }
  2357. sql += @" ) x
  2358. PIVOT (
  2359. SUM(quantity)
  2360. FOR WeekNumber IN (' + @cols + ')
  2361. ) p
  2362. ';
  2363. EXEC sp_executesql @query;
  2364. DROP TABLE #AllDates";
  2365. }
  2366. else if (queryParam["radios"].ToString() == "周")
  2367. {
  2368. sql = @"DECLARE @StartDate DATE = '{0}'
  2369. DECLARE @EndDate DATE = '{1}'
  2370. DECLARE @cols AS NVARCHAR(MAX),
  2371. @query AS NVARCHAR(MAX);
  2372. ;WITH DateRanges AS (
  2373. SELECT
  2374. WeekStart = @StartDate,
  2375. WeekEnd = DATEADD(DAY, 7, @StartDate), --
  2376. WeekNumber = DATEPART(WEEK, @StartDate) --
  2377. UNION ALL
  2378. SELECT
  2379. DATEADD(WEEK, 1, WeekStart),
  2380. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)),
  2381. DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart))
  2382. FROM DateRanges
  2383. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  2384. )
  2385. SELECT WeekStart, WeekEnd, WeekNumber
  2386. INTO #Days
  2387. FROM DateRanges
  2388. OPTION (MAXRECURSION 0);
  2389. -- PIVOT的列标题
  2390. SELECT @cols =
  2391. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  2392. FROM #Days dr
  2393. LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd
  2394. FOR XML PATH(''), TYPE
  2395. ).value('.', 'NVARCHAR(MAX)')
  2396. ,1,1,'')
  2397. -- PIVOT查询
  2398. SET @query = '
  2399. SELECT *
  2400. FROM (
  2401. SELECT
  2402. dr.WeekNumber,
  2403. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  2404. isnull(quantity,0) as quantity
  2405. FROM #Days dr
  2406. LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd WHERE 1=1";
  2407. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  2408. {
  2409. sql += " and VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  2410. }
  2411. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  2412. {
  2413. sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'";
  2414. }
  2415. sql += @" ) x
  2416. PIVOT (
  2417. SUM(quantity)
  2418. FOR WeekNumber IN (' + @cols + ')
  2419. ) p
  2420. ';
  2421. EXEC sp_executesql @query;
  2422. DROP TABLE #Days";
  2423. }
  2424. else if (queryParam["radios"].ToString() == "月")
  2425. {
  2426. sql = @"DECLARE @StartDate DATE = '{0}'
  2427. DECLARE @EndDate DATE = '{1}'
  2428. DECLARE @cols AS NVARCHAR(MAX),
  2429. @query AS NVARCHAR(MAX);
  2430. ;WITH MonthRanges AS (
  2431. SELECT
  2432. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  2433. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  2434. UNION ALL
  2435. SELECT
  2436. DATEADD(MONTH, 1, MonthStart),
  2437. DATEADD(MONTH, 1, MonthEnd)
  2438. FROM MonthRanges
  2439. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  2440. )
  2441. SELECT
  2442. MonthStart,
  2443. MonthEnd,
  2444. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  2445. INTO #Months
  2446. FROM MonthRanges
  2447. OPTION (MAXRECURSION 0)
  2448. -- PIVOT的列标题
  2449. SELECT @cols =
  2450. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  2451. FROM #Months dr
  2452. LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd
  2453. FOR XML PATH(''), TYPE
  2454. ).value('.', 'NVARCHAR(MAX)')
  2455. ,1,1,'')
  2456. -- PIVOT查询
  2457. SET @query = '
  2458. SELECT *
  2459. FROM (
  2460. SELECT
  2461. dr.WeekNumber,
  2462. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  2463. isnull(quantity,0) as quantity
  2464. FROM #Months dr
  2465. LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd WHERE 1=1";
  2466. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  2467. {
  2468. sql += " and VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  2469. }
  2470. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  2471. {
  2472. sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'";
  2473. }
  2474. sql += @") x
  2475. PIVOT (
  2476. SUM(quantity)
  2477. FOR WeekNumber IN (' + @cols + ')
  2478. ) p
  2479. ';
  2480. EXEC sp_executesql @query;
  2481. DROP TABLE #Months";
  2482. }
  2483. sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString());
  2484. DataTable dtr = SqlHelper.GetDataTableBySql(sql);
  2485. return dtr;
  2486. }
  2487. #endregion
  2488. #region 获取开票数量列表信息
  2489. public DataTable GetInvoicePriceByLB(string queryJson, ref Pagination jqgridparam)
  2490. {
  2491. DataTable dt = new DataTable();
  2492. var queryParam = queryJson.ToJObject();
  2493. List<DbParameter> parameter = new List<DbParameter>();
  2494. string sql = "";
  2495. if (queryParam["radios"].ToString() == "日")
  2496. {
  2497. sql = @"DECLARE @StartDate DATE = '{0}'
  2498. DECLARE @EndDate DATE = '{1}'
  2499. DECLARE @cols AS NVARCHAR(MAX),
  2500. @query AS NVARCHAR(MAX);
  2501. ;WITH DateRanges AS (
  2502. SELECT
  2503. DateValue = @StartDate
  2504. UNION ALL
  2505. SELECT
  2506. DATEADD(DAY, 1, DateValue)
  2507. FROM DateRanges
  2508. WHERE DateValue < @EndDate
  2509. )
  2510. SELECT
  2511. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  2512. INTO #AllDates
  2513. FROM DateRanges
  2514. OPTION (MAXRECURSION 0);
  2515. -- PIVOT的列标题
  2516. SELECT @cols =
  2517. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  2518. FROM #AllDates dr
  2519. LEFT JOIN ICSInvoiceNew p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber
  2520. FOR XML PATH(''), TYPE
  2521. ).value('.', 'NVARCHAR(MAX)')
  2522. ,1,1,'')
  2523. -- PIVOT查询
  2524. SET @query = '
  2525. SELECT *
  2526. FROM (
  2527. SELECT
  2528. dr.WeekNumber,
  2529. CONVERT(NVARCHAR, p.SupplierCode) AS VenCode,
  2530. SUM(isnull(detail.Qty,0)* isnull(detail.TaxPriceSell,0)) as quantity
  2531. FROM #AllDates dr
  2532. LEFT JOIN ICSInvoiceNew p ON CONVERT(NVARCHAR(20),p.mtime,23) BETWEEN dr.WeekStart AND dr.WeekEnd
  2533. LEFT JOIN ICSInvoiceNewDetail detail ON p.DocNo=detail.DocNo WHERE 1=1";
  2534. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  2535. {
  2536. sql += " and p.SupplierCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  2537. }
  2538. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  2539. {
  2540. sql += " and p.InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") ";
  2541. }
  2542. sql += @" group by dr.WeekNumber,p.SupplierCode ) x
  2543. PIVOT (
  2544. SUM(quantity)
  2545. FOR WeekNumber IN (' + @cols + ')
  2546. ) p
  2547. ';
  2548. EXEC sp_executesql @query;
  2549. DROP TABLE #AllDates";
  2550. }
  2551. else if (queryParam["radios"].ToString() == "周")
  2552. {
  2553. sql = @"DECLARE @StartDate DATE = '{0}'
  2554. DECLARE @EndDate DATE = '{1}'
  2555. DECLARE @cols AS NVARCHAR(MAX),
  2556. @query AS NVARCHAR(MAX);
  2557. ;WITH DateRanges AS (
  2558. SELECT
  2559. WeekStart = @StartDate,
  2560. WeekEnd = DATEADD(DAY, 7, @StartDate), --
  2561. WeekNumber = DATEPART(WEEK, @StartDate) --
  2562. UNION ALL
  2563. SELECT
  2564. DATEADD(WEEK, 1, WeekStart),
  2565. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)),
  2566. DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart))
  2567. FROM DateRanges
  2568. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  2569. )
  2570. SELECT WeekStart, WeekEnd, WeekNumber
  2571. INTO #Days
  2572. FROM DateRanges
  2573. OPTION (MAXRECURSION 0);
  2574. -- PIVOT的列标题
  2575. SELECT @cols =
  2576. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  2577. FROM #Days dr
  2578. LEFT JOIN ICSInvoiceNew p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd
  2579. FOR XML PATH(''), TYPE
  2580. ).value('.', 'NVARCHAR(MAX)')
  2581. ,1,1,'')
  2582. -- PIVOT查询
  2583. SET @query = '
  2584. SELECT *
  2585. FROM (
  2586. SELECT
  2587. dr.WeekNumber,
  2588. CONVERT(NVARCHAR, p.SupplierCode) AS VenCode,
  2589. SUM(isnull(detail.Qty,0)* isnull(detail.TaxPriceSell,0)) as quantity
  2590. FROM #Days dr
  2591. LEFT JOIN ICSInvoiceNew p ON CONVERT(NVARCHAR(20),p.mtime,23) BETWEEN dr.WeekStart AND dr.WeekEnd
  2592. LEFT JOIN ICSInvoiceNewDetail detail ON p.DocNo=detail.DocNo WHERE 1=1";
  2593. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  2594. {
  2595. sql += " and VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  2596. }
  2597. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  2598. {
  2599. sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'";
  2600. }
  2601. sql += @" group by dr.WeekNumber,p.SupplierCode) x
  2602. PIVOT (
  2603. SUM(quantity)
  2604. FOR WeekNumber IN (' + @cols + ')
  2605. ) p
  2606. ';
  2607. EXEC sp_executesql @query;
  2608. DROP TABLE #Days";
  2609. }
  2610. else if (queryParam["radios"].ToString() == "月")
  2611. {
  2612. sql = @"DECLARE @StartDate DATE = '{0}'
  2613. DECLARE @EndDate DATE = '{1}'
  2614. DECLARE @cols AS NVARCHAR(MAX),
  2615. @query AS NVARCHAR(MAX);
  2616. ;WITH MonthRanges AS (
  2617. SELECT
  2618. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  2619. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  2620. UNION ALL
  2621. SELECT
  2622. DATEADD(MONTH, 1, MonthStart),
  2623. DATEADD(MONTH, 1, MonthEnd)
  2624. FROM MonthRanges
  2625. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  2626. )
  2627. SELECT
  2628. MonthStart,
  2629. MonthEnd,
  2630. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  2631. INTO #Months
  2632. FROM MonthRanges
  2633. OPTION (MAXRECURSION 0)
  2634. -- PIVOT的列标题
  2635. SELECT @cols =
  2636. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  2637. FROM #Months dr
  2638. LEFT JOIN ICSInvoiceNew p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd
  2639. FOR XML PATH(''), TYPE
  2640. ).value('.', 'NVARCHAR(MAX)')
  2641. ,1,1,'')
  2642. -- PIVOT查询
  2643. SET @query = '
  2644. SELECT *
  2645. FROM (
  2646. SELECT
  2647. dr.WeekNumber,
  2648. CONVERT(NVARCHAR, p.SupplierCode) AS VenCode,
  2649. SUM(isnull(detail.Qty,0)* isnull(detail.TaxPriceSell,0)) as quantity
  2650. FROM #Days dr
  2651. LEFT JOIN ICSInvoiceNew p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd
  2652. LEFT JOIN ICSInvoiceNewDetail detail ON p.DocNo=detail.DocNo WHERE 1=1";
  2653. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  2654. {
  2655. sql += " and p.SupplierCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  2656. }
  2657. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  2658. {
  2659. sql += " and detail.InvCode like '%" + queryParam["InvName"].ToString() + "%'";
  2660. }
  2661. sql += @" group by dr.WeekNumber,p.SupplierCode) x
  2662. PIVOT (
  2663. SUM(quantity)
  2664. FOR WeekNumber IN (' + @cols + ')
  2665. ) p
  2666. ';
  2667. EXEC sp_executesql @query;
  2668. DROP TABLE #Months";
  2669. }
  2670. sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString());
  2671. DataTable dtr = SqlHelper.GetDataTableBySql(sql);
  2672. return dtr;
  2673. }
  2674. #endregion
  2675. #region 获取采购单价列表信息
  2676. public DataTable GetJHImplementByLB(string queryJson, ref Pagination jqgridparam)
  2677. {
  2678. DataTable dt = new DataTable();
  2679. var queryParam = queryJson.ToJObject();
  2680. List<DbParameter> parameter = new List<DbParameter>();
  2681. string sql = "";
  2682. if (queryParam["radios"].ToString() == "日")
  2683. {
  2684. sql = @"DECLARE @StartDate DATE = '{0}'
  2685. DECLARE @EndDate DATE = '{1}'
  2686. DECLARE @cols AS NVARCHAR(MAX),
  2687. @query AS NVARCHAR(MAX);
  2688. ;WITH DateRanges AS (
  2689. SELECT
  2690. DateValue = @StartDate
  2691. UNION ALL
  2692. SELECT
  2693. DATEADD(DAY, 1, DateValue)
  2694. FROM DateRanges
  2695. WHERE DateValue < @EndDate
  2696. )
  2697. SELECT
  2698. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  2699. INTO #AllDates
  2700. FROM DateRanges
  2701. OPTION (MAXRECURSION 0);
  2702. -- PIVOT的列标题
  2703. SELECT @cols =
  2704. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  2705. FROM #AllDates dr
  2706. LEFT JOIN ICSPurchaseOrder p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber
  2707. FOR XML PATH(''), TYPE
  2708. ).value('.', 'NVARCHAR(MAX)')
  2709. ,1,1,'')
  2710. -- PIVOT查询
  2711. SET @query = '
  2712. SELECT *
  2713. FROM (
  2714. SELECT
  2715. dr.WeekNumber,
  2716. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  2717. isnull(UnitPrice,0) as UnitPrice
  2718. FROM #AllDates dr
  2719. LEFT JOIN ICSPurchaseOrder p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber WHERE 1=1";
  2720. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  2721. {
  2722. sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") ";
  2723. }
  2724. sql += @" ) x
  2725. PIVOT (
  2726. SUM(UnitPrice)
  2727. FOR WeekNumber IN (' + @cols + ')
  2728. ) p
  2729. ';
  2730. EXEC sp_executesql @query;
  2731. DROP TABLE #AllDates";
  2732. }
  2733. else if (queryParam["radios"].ToString() == "周")
  2734. {
  2735. sql = @"DECLARE @StartDate DATE = '{0}'
  2736. DECLARE @EndDate DATE = '{1}'
  2737. DECLARE @cols AS NVARCHAR(MAX),
  2738. @query AS NVARCHAR(MAX);
  2739. ;WITH DateRanges AS (
  2740. SELECT
  2741. WeekStart = @StartDate,
  2742. WeekEnd = DATEADD(DAY, 7, @StartDate), --
  2743. WeekNumber = DATEPART(WEEK, @StartDate) --
  2744. UNION ALL
  2745. SELECT
  2746. DATEADD(WEEK, 1, WeekStart),
  2747. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)),
  2748. DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart))
  2749. FROM DateRanges
  2750. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  2751. )
  2752. SELECT WeekStart, WeekEnd, WeekNumber
  2753. INTO #Days
  2754. FROM DateRanges
  2755. OPTION (MAXRECURSION 0);
  2756. -- PIVOT的列标题
  2757. SELECT @cols =
  2758. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  2759. FROM #Days dr
  2760. LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd
  2761. FOR XML PATH(''), TYPE
  2762. ).value('.', 'NVARCHAR(MAX)')
  2763. ,1,1,'')
  2764. -- PIVOT查询
  2765. SET @query = '
  2766. SELECT *
  2767. FROM (
  2768. SELECT
  2769. dr.WeekNumber,
  2770. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  2771. isnull(UnitPrice,0) as UnitPrice
  2772. FROM #Days dr
  2773. LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd WHERE 1=1";
  2774. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  2775. {
  2776. sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") ";
  2777. }
  2778. sql += @" ) x
  2779. PIVOT (
  2780. SUM(UnitPrice)
  2781. FOR WeekNumber IN (' + @cols + ')
  2782. ) p
  2783. ';
  2784. EXEC sp_executesql @query;
  2785. DROP TABLE #Days";
  2786. }
  2787. else if (queryParam["radios"].ToString() == "月")
  2788. {
  2789. sql = @"DECLARE @StartDate DATE = '{0}'
  2790. DECLARE @EndDate DATE = '{1}'
  2791. DECLARE @cols AS NVARCHAR(MAX),
  2792. @query AS NVARCHAR(MAX);
  2793. ;WITH MonthRanges AS (
  2794. SELECT
  2795. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  2796. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  2797. UNION ALL
  2798. SELECT
  2799. DATEADD(MONTH, 1, MonthStart),
  2800. DATEADD(MONTH, 1, MonthEnd)
  2801. FROM MonthRanges
  2802. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  2803. )
  2804. SELECT
  2805. MonthStart,
  2806. MonthEnd,
  2807. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  2808. INTO #Months
  2809. FROM MonthRanges
  2810. OPTION (MAXRECURSION 0)
  2811. -- PIVOT的列标题
  2812. SELECT @cols =
  2813. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  2814. FROM #Months dr
  2815. LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd
  2816. FOR XML PATH(''), TYPE
  2817. ).value('.', 'NVARCHAR(MAX)')
  2818. ,1,1,'')
  2819. -- PIVOT查询
  2820. SET @query = '
  2821. SELECT *
  2822. FROM (
  2823. SELECT
  2824. dr.WeekNumber,
  2825. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  2826. isnull(UnitPrice,0) as UnitPrice
  2827. FROM #Months dr
  2828. LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd WHERE 1=1";
  2829. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  2830. {
  2831. sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") ";
  2832. }
  2833. sql += @") x
  2834. PIVOT (
  2835. SUM(UnitPrice)
  2836. FOR WeekNumber IN (' + @cols + ')
  2837. ) p
  2838. ';
  2839. EXEC sp_executesql @query;
  2840. DROP TABLE #Months";
  2841. }
  2842. sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString());
  2843. DataTable dtr = SqlHelper.GetDataTableBySql(sql);
  2844. return dtr;
  2845. }
  2846. #endregion
  2847. #region 采购金额(订单金额)占比
  2848. public DataTable GetPoPriceSumGridJsonByLB(string queryJson, ref Pagination jqgridparam)
  2849. {
  2850. DataTable dt = new DataTable();
  2851. var queryParam = queryJson.ToJObject();
  2852. List<DbParameter> parameter = new List<DbParameter>();
  2853. string sql = "";
  2854. if (queryParam["radios"].ToString() == "日")
  2855. {
  2856. sql = @"DECLARE @StartDate DATE = '{0}'
  2857. DECLARE @EndDate DATE = '{1}'
  2858. DECLARE @cols AS NVARCHAR(MAX),
  2859. @query AS NVARCHAR(MAX);
  2860. ;WITH DateRanges AS (
  2861. SELECT
  2862. DateValue = @StartDate
  2863. UNION ALL
  2864. SELECT
  2865. DATEADD(DAY, 1, DateValue)
  2866. FROM DateRanges
  2867. WHERE DateValue < @EndDate
  2868. )
  2869. SELECT
  2870. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  2871. INTO #AllDates
  2872. FROM DateRanges
  2873. OPTION (MAXRECURSION 0);
  2874. -- PIVOT的列标题
  2875. SELECT @cols =
  2876. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  2877. FROM #AllDates dr
  2878. LEFT JOIN ICSPurchaseOrder p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber
  2879. FOR XML PATH(''), TYPE
  2880. ).value('.', 'NVARCHAR(MAX)')
  2881. ,1,1,'')
  2882. -- PIVOT查询
  2883. SET @query = '
  2884. SELECT *
  2885. FROM (
  2886. SELECT
  2887. dr.WeekNumber,
  2888. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  2889. isnull(UnitPrice,0)*p.Quantity as UnitPrice
  2890. FROM #AllDates dr
  2891. LEFT JOIN ICSPurchaseOrder p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber WHERE 1=1";
  2892. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  2893. {
  2894. sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") ";
  2895. }
  2896. sql += @" ) x
  2897. PIVOT (
  2898. SUM(UnitPrice)
  2899. FOR WeekNumber IN (' + @cols + ')
  2900. ) p
  2901. ';
  2902. EXEC sp_executesql @query;
  2903. DROP TABLE #AllDates";
  2904. }
  2905. else if (queryParam["radios"].ToString() == "周")
  2906. {
  2907. sql = @"DECLARE @StartDate DATE = '{0}'
  2908. DECLARE @EndDate DATE = '{1}'
  2909. DECLARE @cols AS NVARCHAR(MAX),
  2910. @query AS NVARCHAR(MAX);
  2911. ;WITH DateRanges AS (
  2912. SELECT
  2913. WeekStart = @StartDate,
  2914. WeekEnd = DATEADD(DAY, 7, @StartDate), --
  2915. WeekNumber = DATEPART(WEEK, @StartDate) --
  2916. UNION ALL
  2917. SELECT
  2918. DATEADD(WEEK, 1, WeekStart),
  2919. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)),
  2920. DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart))
  2921. FROM DateRanges
  2922. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  2923. )
  2924. SELECT WeekStart, WeekEnd, WeekNumber
  2925. INTO #Days
  2926. FROM DateRanges
  2927. OPTION (MAXRECURSION 0);
  2928. -- PIVOT的列标题
  2929. SELECT @cols =
  2930. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  2931. FROM #Days dr
  2932. LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd
  2933. FOR XML PATH(''), TYPE
  2934. ).value('.', 'NVARCHAR(MAX)')
  2935. ,1,1,'')
  2936. -- PIVOT查询
  2937. SET @query = '
  2938. SELECT *
  2939. FROM (
  2940. SELECT
  2941. dr.WeekNumber,
  2942. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  2943. isnull(UnitPrice,0)*p.Quantity as UnitPrice
  2944. FROM #Days dr
  2945. LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd WHERE 1=1";
  2946. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  2947. {
  2948. sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") ";
  2949. }
  2950. sql += @" ) x
  2951. PIVOT (
  2952. SUM(UnitPrice)
  2953. FOR WeekNumber IN (' + @cols + ')
  2954. ) p
  2955. ';
  2956. EXEC sp_executesql @query;
  2957. DROP TABLE #Days";
  2958. }
  2959. else if (queryParam["radios"].ToString() == "月")
  2960. {
  2961. sql = @"DECLARE @StartDate DATE = '{0}'
  2962. DECLARE @EndDate DATE = '{1}'
  2963. DECLARE @cols AS NVARCHAR(MAX),
  2964. @query AS NVARCHAR(MAX);
  2965. ;WITH MonthRanges AS (
  2966. SELECT
  2967. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  2968. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  2969. UNION ALL
  2970. SELECT
  2971. DATEADD(MONTH, 1, MonthStart),
  2972. DATEADD(MONTH, 1, MonthEnd)
  2973. FROM MonthRanges
  2974. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  2975. )
  2976. SELECT
  2977. MonthStart,
  2978. MonthEnd,
  2979. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  2980. INTO #Months
  2981. FROM MonthRanges
  2982. OPTION (MAXRECURSION 0)
  2983. -- PIVOT的列标题
  2984. SELECT @cols =
  2985. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  2986. FROM #Months dr
  2987. LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd
  2988. FOR XML PATH(''), TYPE
  2989. ).value('.', 'NVARCHAR(MAX)')
  2990. ,1,1,'')
  2991. -- PIVOT查询
  2992. SET @query = '
  2993. SELECT *
  2994. FROM (
  2995. SELECT
  2996. dr.WeekNumber,
  2997. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  2998. isnull(UnitPrice,0)*p.Quantity as UnitPrice
  2999. FROM #Months dr
  3000. LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd WHERE 1=1";
  3001. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  3002. {
  3003. sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") ";
  3004. }
  3005. sql += @") x
  3006. PIVOT (
  3007. SUM(UnitPrice)
  3008. FOR WeekNumber IN (' + @cols + ')
  3009. ) p
  3010. ';
  3011. EXEC sp_executesql @query;
  3012. DROP TABLE #Months";
  3013. }
  3014. sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString());
  3015. DataTable dtr = SqlHelper.GetDataTableBySql(sql);
  3016. return dtr;
  3017. }
  3018. #endregion
  3019. #region 采购周期
  3020. public DataTable GetProcurementcycleJsonByLB(string queryJson, ref Pagination jqgridparam)
  3021. {
  3022. DataTable dt = new DataTable();
  3023. var queryParam = queryJson.ToJObject();
  3024. List<DbParameter> parameter = new List<DbParameter>();
  3025. string sql = "";
  3026. if (queryParam["radios"].ToString() == "日")
  3027. {
  3028. sql = @"DECLARE @StartDate DATE = '{0}'
  3029. DECLARE @EndDate DATE = '{1}'
  3030. DECLARE @cols AS NVARCHAR(MAX),
  3031. @query AS NVARCHAR(MAX);
  3032. ;WITH DateRanges AS (
  3033. SELECT
  3034. DateValue = @StartDate
  3035. UNION ALL
  3036. SELECT
  3037. DATEADD(DAY, 1, DateValue)
  3038. FROM DateRanges
  3039. WHERE DateValue < @EndDate
  3040. )
  3041. SELECT
  3042. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  3043. INTO #AllDates
  3044. FROM DateRanges
  3045. OPTION (MAXRECURSION 0);
  3046. -- PIVOT的列标题
  3047. SELECT @cols =
  3048. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  3049. FROM #AllDates dr
  3050. LEFT JOIN ICSPurchaseOrder p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber
  3051. FOR XML PATH(''), TYPE
  3052. ).value('.', 'NVARCHAR(MAX)')
  3053. ,1,1,'')
  3054. -- PIVOT查询
  3055. SET @query = '
  3056. SELECT *
  3057. FROM (
  3058. SELECT
  3059. dr.WeekNumber,
  3060. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  3061. isnull(UnitPrice,0)*p.Quantity as UnitPrice
  3062. FROM #AllDates dr
  3063. LEFT JOIN ICSPurchaseOrder p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber WHERE 1=1";
  3064. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  3065. {
  3066. sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") ";
  3067. }
  3068. sql += @" ) x
  3069. PIVOT (
  3070. SUM(UnitPrice)
  3071. FOR WeekNumber IN (' + @cols + ')
  3072. ) p
  3073. ';
  3074. EXEC sp_executesql @query;
  3075. DROP TABLE #AllDates";
  3076. }
  3077. else if (queryParam["radios"].ToString() == "周")
  3078. {
  3079. sql = @"DECLARE @StartDate DATE = '{0}'
  3080. DECLARE @EndDate DATE = '{1}'
  3081. DECLARE @cols AS NVARCHAR(MAX),
  3082. @query AS NVARCHAR(MAX);
  3083. ;WITH DateRanges AS (
  3084. SELECT
  3085. WeekStart = @StartDate,
  3086. WeekEnd = DATEADD(DAY, 7, @StartDate), --
  3087. WeekNumber = DATEPART(WEEK, @StartDate) --
  3088. UNION ALL
  3089. SELECT
  3090. DATEADD(WEEK, 1, WeekStart),
  3091. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)),
  3092. DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart))
  3093. FROM DateRanges
  3094. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  3095. )
  3096. SELECT WeekStart, WeekEnd, WeekNumber
  3097. INTO #Days
  3098. FROM DateRanges
  3099. OPTION (MAXRECURSION 0);
  3100. -- PIVOT的列标题
  3101. SELECT @cols =
  3102. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  3103. FROM #Days dr
  3104. LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd
  3105. FOR XML PATH(''), TYPE
  3106. ).value('.', 'NVARCHAR(MAX)')
  3107. ,1,1,'')
  3108. -- PIVOT查询
  3109. SET @query = '
  3110. SELECT *
  3111. FROM (
  3112. SELECT
  3113. dr.WeekNumber,
  3114. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  3115. isnull(UnitPrice,0)*p.Quantity as UnitPrice
  3116. FROM #Days dr
  3117. LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd WHERE 1=1";
  3118. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  3119. {
  3120. sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") ";
  3121. }
  3122. sql += @" ) x
  3123. PIVOT (
  3124. SUM(UnitPrice)
  3125. FOR WeekNumber IN (' + @cols + ')
  3126. ) p
  3127. ';
  3128. EXEC sp_executesql @query;
  3129. DROP TABLE #Days";
  3130. }
  3131. else if (queryParam["radios"].ToString() == "月")
  3132. {
  3133. sql = @"DECLARE @StartDate DATE = '{0}'
  3134. DECLARE @EndDate DATE = '{1}'
  3135. DECLARE @cols AS NVARCHAR(MAX),
  3136. @query AS NVARCHAR(MAX);
  3137. ;WITH MonthRanges AS (
  3138. SELECT
  3139. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  3140. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  3141. UNION ALL
  3142. SELECT
  3143. DATEADD(MONTH, 1, MonthStart),
  3144. DATEADD(MONTH, 1, MonthEnd)
  3145. FROM MonthRanges
  3146. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  3147. )
  3148. SELECT
  3149. MonthStart,
  3150. MonthEnd,
  3151. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  3152. INTO #Months
  3153. FROM MonthRanges
  3154. OPTION (MAXRECURSION 0)
  3155. -- PIVOT的列标题
  3156. SELECT @cols =
  3157. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  3158. FROM #Months dr
  3159. LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd
  3160. FOR XML PATH(''), TYPE
  3161. ).value('.', 'NVARCHAR(MAX)')
  3162. ,1,1,'')
  3163. -- PIVOT查询
  3164. SET @query = '
  3165. SELECT *
  3166. FROM (
  3167. SELECT
  3168. dr.WeekNumber,
  3169. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  3170. isnull(UnitPrice,0)*p.Quantity as UnitPrice
  3171. FROM #Months dr
  3172. LEFT JOIN ICSPurchaseOrder p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd WHERE 1=1";
  3173. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  3174. {
  3175. sql += " and InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") ";
  3176. }
  3177. sql += @") x
  3178. PIVOT (
  3179. SUM(UnitPrice)
  3180. FOR WeekNumber IN (' + @cols + ')
  3181. ) p
  3182. ';
  3183. EXEC sp_executesql @query;
  3184. DROP TABLE #Months";
  3185. }
  3186. sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString());
  3187. DataTable dtr = SqlHelper.GetDataTableBySql(sql);
  3188. return dtr;
  3189. }
  3190. #endregion
  3191. #region 供应商不合格次数
  3192. public DataTable GetVendorQualifiedQuantityByLB(string queryJson, ref Pagination jqgridparam)
  3193. {
  3194. DataTable dt = new DataTable();
  3195. var queryParam = queryJson.ToJObject();
  3196. List<DbParameter> parameter = new List<DbParameter>();
  3197. string sql = "";
  3198. if (queryParam["radios"].ToString() == "日")
  3199. {
  3200. sql = @"DECLARE @StartDate DATE = '{0}'
  3201. DECLARE @EndDate DATE = '{1}'
  3202. DECLARE @cols AS NVARCHAR(MAX),
  3203. @query AS NVARCHAR(MAX);
  3204. ;WITH DateRanges AS (
  3205. SELECT
  3206. DateValue = @StartDate
  3207. UNION ALL
  3208. SELECT
  3209. DATEADD(DAY, 1, DateValue)
  3210. FROM DateRanges
  3211. WHERE DateValue < @EndDate
  3212. )
  3213. SELECT
  3214. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  3215. INTO #AllDates
  3216. FROM DateRanges
  3217. OPTION (MAXRECURSION 0);
  3218. -- PIVOT的列标题
  3219. SELECT @cols =
  3220. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  3221. FROM #AllDates dr
  3222. LEFT JOIN ICSInspection p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber
  3223. inner JOIN dbo.ICSInventoryLotDetail b ON p.LotNo=b.LotNo AND p.WorkPoint=b.WorkPoint
  3224. inner JOIN dbo.ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence
  3225. WHERE p.QualifiedQuantity>0
  3226. FOR XML PATH(''), TYPE
  3227. ).value('.', 'NVARCHAR(MAX)')
  3228. ,1,1,'')
  3229. -- PIVOT查询
  3230. SET @query = '
  3231. SELECT *
  3232. FROM (
  3233. SELECT
  3234. dr.WeekNumber,
  3235. CONVERT(NVARCHAR, c.VenCode) AS VenCode,
  3236. COUNT(*) as quantity
  3237. FROM #AllDates dr
  3238. LEFT JOIN ICSInspection p ON CONVERT(NVARCHAR(20),p.mtime,23) BETWEEN dr.WeekStart AND dr.WeekEnd
  3239. inner JOIN dbo.ICSInventoryLotDetail b ON p.LotNo=b.LotNo AND p.WorkPoint=b.WorkPoint
  3240. inner JOIN dbo.ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence
  3241. WHERE p.QualifiedQuantity>0 ";
  3242. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  3243. {
  3244. sql += " and c.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  3245. }
  3246. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  3247. {
  3248. sql += " and b.InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") ";
  3249. }
  3250. sql += @" group by dr.WeekNumber,c.VenCode) x
  3251. PIVOT (
  3252. sum( quantity)
  3253. FOR WeekNumber IN (' + @cols + ')
  3254. ) p
  3255. ';
  3256. EXEC sp_executesql @query;
  3257. DROP TABLE #AllDates";
  3258. }
  3259. else if (queryParam["radios"].ToString() == "周")
  3260. {
  3261. sql = @"DECLARE @StartDate DATE = '{0}'
  3262. DECLARE @EndDate DATE = '{1}'
  3263. DECLARE @cols AS NVARCHAR(MAX),
  3264. @query AS NVARCHAR(MAX);
  3265. ;WITH DateRanges AS (
  3266. SELECT
  3267. WeekStart = @StartDate,
  3268. WeekEnd = DATEADD(DAY, 7, @StartDate), --
  3269. WeekNumber = DATEPART(WEEK, @StartDate) --
  3270. UNION ALL
  3271. SELECT
  3272. DATEADD(WEEK, 1, WeekStart),
  3273. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)),
  3274. DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart))
  3275. FROM DateRanges
  3276. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  3277. )
  3278. SELECT WeekStart, WeekEnd, WeekNumber
  3279. INTO #Days
  3280. FROM DateRanges
  3281. OPTION (MAXRECURSION 0);
  3282. -- PIVOT的列标题
  3283. SELECT @cols =
  3284. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  3285. FROM #Days dr
  3286. LEFT JOIN ICSInspection p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd
  3287. inner JOIN dbo.ICSInventoryLotDetail b ON p.LotNo=b.LotNo AND p.WorkPoint=b.WorkPoint
  3288. inner JOIN dbo.ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence
  3289. WHERE p.QualifiedQuantity>0
  3290. FOR XML PATH(''), TYPE
  3291. ).value('.', 'NVARCHAR(MAX)')
  3292. ,1,1,'')
  3293. -- PIVOT查询
  3294. SET @query = '
  3295. SELECT *
  3296. FROM (
  3297. SELECT
  3298. dr.WeekNumber,
  3299. CONVERT(NVARCHAR, c.VenCode) AS VenCode,
  3300. COUNT(*) as quantity
  3301. FROM #Days dr
  3302. LEFT JOIN ICSInspection p ON CONVERT(NVARCHAR(20),p.mtime,23) BETWEEN dr.WeekStart AND dr.WeekEnd
  3303. inner JOIN dbo.ICSInventoryLotDetail b ON p.LotNo=b.LotNo AND p.WorkPoint=b.WorkPoint
  3304. inner JOIN dbo.ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence
  3305. WHERE p.QualifiedQuantity>0 ";
  3306. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  3307. {
  3308. sql += " and c.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  3309. }
  3310. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  3311. {
  3312. sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'";
  3313. }
  3314. sql += @" group by dr.WeekNumber,c.VenCode) x
  3315. PIVOT (
  3316. sum( quantity)
  3317. FOR WeekNumber IN (' + @cols + ')
  3318. ) p
  3319. ';
  3320. EXEC sp_executesql @query;
  3321. DROP TABLE #Days";
  3322. }
  3323. else if (queryParam["radios"].ToString() == "月")
  3324. {
  3325. sql = @"DECLARE @StartDate DATE = '{0}'
  3326. DECLARE @EndDate DATE = '{1}'
  3327. DECLARE @cols AS NVARCHAR(MAX),
  3328. @query AS NVARCHAR(MAX);
  3329. ;WITH MonthRanges AS (
  3330. SELECT
  3331. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  3332. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  3333. UNION ALL
  3334. SELECT
  3335. DATEADD(MONTH, 1, MonthStart),
  3336. DATEADD(MONTH, 1, MonthEnd)
  3337. FROM MonthRanges
  3338. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  3339. )
  3340. SELECT
  3341. MonthStart,
  3342. MonthEnd,
  3343. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  3344. INTO #Months
  3345. FROM MonthRanges
  3346. OPTION (MAXRECURSION 0)
  3347. -- PIVOT的列标题
  3348. SELECT @cols =
  3349. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  3350. FROM #Months dr
  3351. LEFT JOIN ICSInspection p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd
  3352. inner JOIN dbo.ICSInventoryLotDetail b ON p.LotNo=b.LotNo AND p.WorkPoint=b.WorkPoint
  3353. inner JOIN dbo.ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence
  3354. WHERE p.QualifiedQuantity>0
  3355. FOR XML PATH(''), TYPE
  3356. ).value('.', 'NVARCHAR(MAX)')
  3357. ,1,1,'')
  3358. -- PIVOT查询
  3359. SET @query = '
  3360. SELECT *
  3361. FROM (
  3362. SELECT
  3363. dr.WeekNumber,
  3364. CONVERT(NVARCHAR, c.VenCode) AS VenCode,
  3365. COUNT(*) as quantity
  3366. FROM #Months dr
  3367. LEFT JOIN ICSInspection p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd
  3368. inner JOIN dbo.ICSInventoryLotDetail b ON p.LotNo=b.LotNo AND p.WorkPoint=b.WorkPoint
  3369. inner JOIN dbo.ICSPurchaseOrder c ON b.TransCode=c.POCode AND b.TransSequence=c.Sequence
  3370. WHERE p.QualifiedQuantity>0";
  3371. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  3372. {
  3373. sql += " and c.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  3374. }
  3375. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  3376. {
  3377. sql += " and detail.InvCode like '%" + queryParam["InvName"].ToString() + "%'";
  3378. }
  3379. sql += @" group by dr.WeekNumber,c.VenCode) x
  3380. PIVOT (
  3381. sum( quantity)
  3382. FOR WeekNumber IN (' + @cols + ')
  3383. ) p
  3384. ';
  3385. EXEC sp_executesql @query;
  3386. DROP TABLE #Months";
  3387. }
  3388. sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString());
  3389. DataTable dtr = SqlHelper.GetDataTableBySql(sql);
  3390. return dtr;
  3391. }
  3392. #endregion
  3393. #region 供应商退货次数
  3394. public DataTable GetDeliveryNoticeByLB(string queryJson, ref Pagination jqgridparam)
  3395. {
  3396. DataTable dt = new DataTable();
  3397. var queryParam = queryJson.ToJObject();
  3398. List<DbParameter> parameter = new List<DbParameter>();
  3399. string sql = "";
  3400. if (queryParam["radios"].ToString() == "日")
  3401. {
  3402. sql = @"DECLARE @StartDate DATE = '{0}'
  3403. DECLARE @EndDate DATE = '{1}'
  3404. DECLARE @cols AS NVARCHAR(MAX),
  3405. @query AS NVARCHAR(MAX);
  3406. ;WITH DateRanges AS (
  3407. SELECT
  3408. DateValue = @StartDate
  3409. UNION ALL
  3410. SELECT
  3411. DATEADD(DAY, 1, DateValue)
  3412. FROM DateRanges
  3413. WHERE DateValue < @EndDate
  3414. )
  3415. SELECT
  3416. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  3417. INTO #AllDates
  3418. FROM DateRanges
  3419. OPTION (MAXRECURSION 0);
  3420. -- PIVOT的列标题
  3421. SELECT @cols =
  3422. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  3423. FROM #AllDates dr
  3424. LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber
  3425. WHERE DNType='2'
  3426. FOR XML PATH(''), TYPE
  3427. ).value('.', 'NVARCHAR(MAX)')
  3428. ,1,1,'')
  3429. -- PIVOT查询
  3430. SET @query = '
  3431. SELECT *
  3432. FROM (
  3433. SELECT
  3434. dr.WeekNumber,
  3435. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  3436. COUNT(*) as quantity
  3437. FROM #AllDates dr
  3438. LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20),p.mtime,23) BETWEEN dr.WeekStart AND dr.WeekEnd
  3439. WHERE DNType=''2''";
  3440. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  3441. {
  3442. sql += " and p.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  3443. }
  3444. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  3445. {
  3446. sql += " and b.InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") ";
  3447. }
  3448. sql += @" group by dr.WeekNumber,p.VenCode) x
  3449. PIVOT (
  3450. sum( quantity)
  3451. FOR WeekNumber IN (' + @cols + ')
  3452. ) p
  3453. ';
  3454. EXEC sp_executesql @query;
  3455. DROP TABLE #AllDates";
  3456. }
  3457. else if (queryParam["radios"].ToString() == "周")
  3458. {
  3459. sql = @"DECLARE @StartDate DATE = '{0}'
  3460. DECLARE @EndDate DATE = '{1}'
  3461. DECLARE @cols AS NVARCHAR(MAX),
  3462. @query AS NVARCHAR(MAX);
  3463. ;WITH DateRanges AS (
  3464. SELECT
  3465. WeekStart = @StartDate,
  3466. WeekEnd = DATEADD(DAY, 7, @StartDate), --
  3467. WeekNumber = DATEPART(WEEK, @StartDate) --
  3468. UNION ALL
  3469. SELECT
  3470. DATEADD(WEEK, 1, WeekStart),
  3471. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)),
  3472. DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart))
  3473. FROM DateRanges
  3474. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  3475. )
  3476. SELECT WeekStart, WeekEnd, WeekNumber
  3477. INTO #Days
  3478. FROM DateRanges
  3479. OPTION (MAXRECURSION 0);
  3480. -- PIVOT的列标题
  3481. SELECT @cols =
  3482. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  3483. FROM #Days dr
  3484. LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd
  3485. WHERE DNType='2'
  3486. FOR XML PATH(''), TYPE
  3487. ).value('.', 'NVARCHAR(MAX)')
  3488. ,1,1,'')
  3489. -- PIVOT查询
  3490. SET @query = '
  3491. SELECT *
  3492. FROM (
  3493. SELECT
  3494. dr.WeekNumber,
  3495. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  3496. COUNT(*) as quantity
  3497. FROM #Days dr
  3498. LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20),p.mtime,23) BETWEEN dr.WeekStart AND dr.WeekEnd
  3499. WHERE DNType=''2'' ";
  3500. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  3501. {
  3502. sql += " and p.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  3503. }
  3504. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  3505. {
  3506. sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'";
  3507. }
  3508. sql += @" group by dr.WeekNumber,p.VenCode) x
  3509. PIVOT (
  3510. sum( quantity)
  3511. FOR WeekNumber IN (' + @cols + ')
  3512. ) p
  3513. ';
  3514. EXEC sp_executesql @query;
  3515. DROP TABLE #Days";
  3516. }
  3517. else if (queryParam["radios"].ToString() == "月")
  3518. {
  3519. sql = @"DECLARE @StartDate DATE = '{0}'
  3520. DECLARE @EndDate DATE = '{1}'
  3521. DECLARE @cols AS NVARCHAR(MAX),
  3522. @query AS NVARCHAR(MAX);
  3523. ;WITH MonthRanges AS (
  3524. SELECT
  3525. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  3526. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  3527. UNION ALL
  3528. SELECT
  3529. DATEADD(MONTH, 1, MonthStart),
  3530. DATEADD(MONTH, 1, MonthEnd)
  3531. FROM MonthRanges
  3532. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  3533. )
  3534. SELECT
  3535. MonthStart,
  3536. MonthEnd,
  3537. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  3538. INTO #Months
  3539. FROM MonthRanges
  3540. OPTION (MAXRECURSION 0)
  3541. -- PIVOT的列标题
  3542. SELECT @cols =
  3543. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  3544. FROM #Months dr
  3545. LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd
  3546. WHERE DNType='2'
  3547. FOR XML PATH(''), TYPE
  3548. ).value('.', 'NVARCHAR(MAX)')
  3549. ,1,1,'')
  3550. -- PIVOT查询
  3551. SET @query = '
  3552. SELECT *
  3553. FROM (
  3554. SELECT
  3555. dr.WeekNumber,
  3556. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  3557. COUNT(*) as quantity
  3558. FROM #Months dr
  3559. LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd
  3560. WHERE DNType=''2''";
  3561. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  3562. {
  3563. sql += " and p.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  3564. }
  3565. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  3566. {
  3567. sql += " and detail.InvCode like '%" + queryParam["InvName"].ToString() + "%'";
  3568. }
  3569. sql += @" group by dr.WeekNumber,p.VenCode) x
  3570. PIVOT (
  3571. sum( quantity)
  3572. FOR WeekNumber IN (' + @cols + ')
  3573. ) p
  3574. ';
  3575. EXEC sp_executesql @query;
  3576. DROP TABLE #Months";
  3577. }
  3578. sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString());
  3579. DataTable dtr = SqlHelper.GetDataTableBySql(sql);
  3580. return dtr;
  3581. }
  3582. #endregion
  3583. #region 供应商退货率
  3584. public DataTable GetDeliveryNoticeType2ByLB(string queryJson, ref Pagination jqgridparam)
  3585. {
  3586. DataTable dt = new DataTable();
  3587. var queryParam = queryJson.ToJObject();
  3588. List<DbParameter> parameter = new List<DbParameter>();
  3589. string sql = "";
  3590. if (queryParam["radios"].ToString() == "日")
  3591. {
  3592. sql = @"DECLARE @StartDate DATE = '{0}'
  3593. DECLARE @EndDate DATE = '{1}'
  3594. DECLARE @cols AS NVARCHAR(MAX),
  3595. @query AS NVARCHAR(MAX);
  3596. ;WITH DateRanges AS (
  3597. SELECT
  3598. DateValue = @StartDate
  3599. UNION ALL
  3600. SELECT
  3601. DATEADD(DAY, 1, DateValue)
  3602. FROM DateRanges
  3603. WHERE DateValue < @EndDate
  3604. )
  3605. SELECT
  3606. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  3607. INTO #AllDates
  3608. FROM DateRanges
  3609. OPTION (MAXRECURSION 0);
  3610. -- PIVOT的列标题
  3611. SELECT @cols =
  3612. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  3613. FROM #AllDates dr
  3614. LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber
  3615. FOR XML PATH(''), TYPE
  3616. ).value('.', 'NVARCHAR(MAX)')
  3617. ,1,1,'')
  3618. -- PIVOT查询
  3619. SET @query = '
  3620. SELECT *
  3621. FROM (
  3622. SELECT
  3623. dr.WeekNumber,
  3624. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  3625. CASE
  3626. WHEN SUM(CASE WHEN DNType = ''1'' THEN Quantity ELSE 0 END) = 0
  3627. THEN NULL
  3628. 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
  3629. FROM #Days dr
  3630. LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20), p.mtime, 23) BETWEEN dr.WeekStart AND dr.WeekEnd
  3631. WHERE 1=1";
  3632. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  3633. {
  3634. sql += " and p.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  3635. }
  3636. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  3637. {
  3638. sql += " and b.InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") ";
  3639. }
  3640. sql += @" group by dr.WeekNumber,p.VenCode) x
  3641. PIVOT (
  3642. sum( quantity)
  3643. FOR WeekNumber IN (' + @cols + ')
  3644. ) p
  3645. ';
  3646. EXEC sp_executesql @query;
  3647. DROP TABLE #AllDates";
  3648. }
  3649. else if (queryParam["radios"].ToString() == "周")
  3650. {
  3651. sql = @"DECLARE @StartDate DATE = '{0}'
  3652. DECLARE @EndDate DATE = '{1}'
  3653. DECLARE @cols AS NVARCHAR(MAX),
  3654. @query AS NVARCHAR(MAX);
  3655. ;WITH DateRanges AS (
  3656. SELECT
  3657. WeekStart = @StartDate,
  3658. WeekEnd = DATEADD(DAY, 7, @StartDate), --
  3659. WeekNumber = DATEPART(WEEK, @StartDate) --
  3660. UNION ALL
  3661. SELECT
  3662. DATEADD(WEEK, 1, WeekStart),
  3663. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)),
  3664. DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart))
  3665. FROM DateRanges
  3666. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  3667. )
  3668. SELECT WeekStart, WeekEnd, WeekNumber
  3669. INTO #Days
  3670. FROM DateRanges
  3671. OPTION (MAXRECURSION 0);
  3672. -- PIVOT的列标题
  3673. SELECT @cols =
  3674. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  3675. FROM #Days dr
  3676. LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd
  3677. FOR XML PATH(''), TYPE
  3678. ).value('.', 'NVARCHAR(MAX)')
  3679. ,1,1,'')
  3680. -- PIVOT查询
  3681. SET @query = '
  3682. SELECT *
  3683. FROM (
  3684. SELECT
  3685. dr.WeekNumber,
  3686. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  3687. CASE
  3688. WHEN SUM(CASE WHEN DNType = ''1'' THEN Quantity ELSE 0 END) = 0
  3689. THEN NULL
  3690. ELSE SUM(CASE WHEN DNType = ''2'' THEN Quantity ELSE 0 END) * 1.0 / SUM(CASE WHEN DNType = ''1'' THEN Quantity ELSE 0 END)
  3691. END AS quantity
  3692. FROM #Days dr
  3693. LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20), p.mtime, 23) BETWEEN dr.WeekStart AND dr.WeekEnd
  3694. WHERE 1=1 ";
  3695. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  3696. {
  3697. sql += " and p.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  3698. }
  3699. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  3700. {
  3701. sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'";
  3702. }
  3703. sql += @" group by dr.WeekNumber,p.VenCode) x
  3704. PIVOT (
  3705. sum( quantity)
  3706. FOR WeekNumber IN (' + @cols + ')
  3707. ) p
  3708. ';
  3709. EXEC sp_executesql @query;
  3710. DROP TABLE #Days";
  3711. }
  3712. else if (queryParam["radios"].ToString() == "月")
  3713. {
  3714. sql = @"DECLARE @StartDate DATE = '{0}'
  3715. DECLARE @EndDate DATE = '{1}'
  3716. DECLARE @cols AS NVARCHAR(MAX),
  3717. @query AS NVARCHAR(MAX);
  3718. ;WITH MonthRanges AS (
  3719. SELECT
  3720. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  3721. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  3722. UNION ALL
  3723. SELECT
  3724. DATEADD(MONTH, 1, MonthStart),
  3725. DATEADD(MONTH, 1, MonthEnd)
  3726. FROM MonthRanges
  3727. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  3728. )
  3729. SELECT
  3730. MonthStart,
  3731. MonthEnd,
  3732. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  3733. INTO #Months
  3734. FROM MonthRanges
  3735. OPTION (MAXRECURSION 0)
  3736. -- PIVOT的列标题
  3737. SELECT @cols =
  3738. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  3739. FROM #Months dr
  3740. LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd
  3741. FOR XML PATH(''), TYPE
  3742. ).value('.', 'NVARCHAR(MAX)')
  3743. ,1,1,'')
  3744. -- PIVOT查询
  3745. SET @query = '
  3746. SELECT *
  3747. FROM (
  3748. SELECT
  3749. dr.WeekNumber,
  3750. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  3751. CASE
  3752. WHEN SUM(CASE WHEN DNType = ''1'' THEN Quantity ELSE 0 END) = 0
  3753. THEN NULL
  3754. ELSE SUM(CASE WHEN DNType = ''2'' THEN Quantity ELSE 0 END) * 1.0 / SUM(CASE WHEN DNType = ''1'' THEN Quantity ELSE 0 END)
  3755. END AS quantity
  3756. FROM #Days dr
  3757. LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20), p.mtime, 23) BETWEEN dr.WeekStart AND dr.WeekEnd
  3758. WHERE 1=1";
  3759. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  3760. {
  3761. sql += " and p.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  3762. }
  3763. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  3764. {
  3765. sql += " and detail.InvCode like '%" + queryParam["InvName"].ToString() + "%'";
  3766. }
  3767. sql += @" group by dr.WeekNumber,p.VenCode) x
  3768. PIVOT (
  3769. sum( quantity)
  3770. FOR WeekNumber IN (' + @cols + ')
  3771. ) p
  3772. ';
  3773. EXEC sp_executesql @query;
  3774. DROP TABLE #Months";
  3775. }
  3776. sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString());
  3777. DataTable dtr = SqlHelper.GetDataTableBySql(sql);
  3778. return dtr;
  3779. }
  3780. #endregion
  3781. #region 供应商交期及时率
  3782. public DataTable GetDeliveryNoticeTypeJQ2ByLB(string queryJson, ref Pagination jqgridparam)
  3783. {
  3784. DataTable dt = new DataTable();
  3785. var queryParam = queryJson.ToJObject();
  3786. List<DbParameter> parameter = new List<DbParameter>();
  3787. string sql = "";
  3788. if (queryParam["radios"].ToString() == "日")
  3789. {
  3790. sql = @"DECLARE @StartDate DATE = '{0}'
  3791. DECLARE @EndDate DATE = '{1}'
  3792. DECLARE @cols AS NVARCHAR(MAX),
  3793. @query AS NVARCHAR(MAX);
  3794. ;WITH DateRanges AS (
  3795. SELECT
  3796. DateValue = @StartDate
  3797. UNION ALL
  3798. SELECT
  3799. DATEADD(DAY, 1, DateValue)
  3800. FROM DateRanges
  3801. WHERE DateValue < @EndDate
  3802. )
  3803. SELECT
  3804. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  3805. INTO #AllDates
  3806. FROM DateRanges
  3807. OPTION (MAXRECURSION 0);
  3808. -- PIVOT的列标题
  3809. SELECT @cols =
  3810. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  3811. FROM #AllDates dr
  3812. LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20),p.mtime,23)= dr.WeekNumber
  3813. FOR XML PATH(''), TYPE
  3814. ).value('.', 'NVARCHAR(MAX)')
  3815. ,1,1,'')
  3816. -- PIVOT查询
  3817. SET @query = '
  3818. SELECT *
  3819. FROM (
  3820. SELECT
  3821. dr.WeekNumber,
  3822. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  3823. CAST((1.0 * (SELECT COUNT(*) FROM ICSPurchaseOrder WHERE mtime <= ArriveDate)) / (SELECT COUNT(*) FROM ICSDeliveryNotice) AS DECIMAL(11, 4)) AS quantity
  3824. FROM #Days dr
  3825. LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20), p.mtime, 23) BETWEEN dr.WeekStart AND dr.WeekEnd
  3826. WHERE 1=1";
  3827. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  3828. {
  3829. sql += " and p.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  3830. }
  3831. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  3832. {
  3833. sql += " and b.InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") ";
  3834. }
  3835. sql += @" group by dr.WeekNumber,p.VenCode) x
  3836. PIVOT (
  3837. sum( quantity)
  3838. FOR WeekNumber IN (' + @cols + ')
  3839. ) p
  3840. ';
  3841. EXEC sp_executesql @query;
  3842. DROP TABLE #AllDates";
  3843. }
  3844. else if (queryParam["radios"].ToString() == "周")
  3845. {
  3846. sql = @"DECLARE @StartDate DATE = '{0}'
  3847. DECLARE @EndDate DATE = '{1}'
  3848. DECLARE @cols AS NVARCHAR(MAX),
  3849. @query AS NVARCHAR(MAX);
  3850. ;WITH DateRanges AS (
  3851. SELECT
  3852. WeekStart = @StartDate,
  3853. WeekEnd = DATEADD(DAY, 7, @StartDate), --
  3854. WeekNumber = DATEPART(WEEK, @StartDate) --
  3855. UNION ALL
  3856. SELECT
  3857. DATEADD(WEEK, 1, WeekStart),
  3858. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)),
  3859. DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart))
  3860. FROM DateRanges
  3861. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  3862. )
  3863. SELECT WeekStart, WeekEnd, WeekNumber
  3864. INTO #Days
  3865. FROM DateRanges
  3866. OPTION (MAXRECURSION 0);
  3867. -- PIVOT的列标题
  3868. SELECT @cols =
  3869. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  3870. FROM #Days dr
  3871. LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.WeekStart AND dr.WeekEnd
  3872. FOR XML PATH(''), TYPE
  3873. ).value('.', 'NVARCHAR(MAX)')
  3874. ,1,1,'')
  3875. -- PIVOT查询
  3876. SET @query = '
  3877. SELECT *
  3878. FROM (
  3879. SELECT
  3880. dr.WeekNumber,
  3881. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  3882. CAST((1.0 * (SELECT COUNT(*) FROM ICSPurchaseOrder WHERE mtime <= ArriveDate)) / (SELECT COUNT(*) FROM ICSDeliveryNotice) AS DECIMAL(11, 4)) AS quantity
  3883. FROM #Days dr
  3884. LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20), p.mtime, 23) BETWEEN dr.WeekStart AND dr.WeekEnd
  3885. WHERE 1=1 ";
  3886. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  3887. {
  3888. sql += " and p.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  3889. }
  3890. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  3891. {
  3892. sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'";
  3893. }
  3894. sql += @" group by dr.WeekNumber,p.VenCode) x
  3895. PIVOT (
  3896. sum( quantity)
  3897. FOR WeekNumber IN (' + @cols + ')
  3898. ) p
  3899. ';
  3900. EXEC sp_executesql @query;
  3901. DROP TABLE #Days";
  3902. }
  3903. else if (queryParam["radios"].ToString() == "月")
  3904. {
  3905. sql = @"DECLARE @StartDate DATE = '{0}'
  3906. DECLARE @EndDate DATE = '{1}'
  3907. DECLARE @cols AS NVARCHAR(MAX),
  3908. @query AS NVARCHAR(MAX);
  3909. ;WITH MonthRanges AS (
  3910. SELECT
  3911. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  3912. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  3913. UNION ALL
  3914. SELECT
  3915. DATEADD(MONTH, 1, MonthStart),
  3916. DATEADD(MONTH, 1, MonthEnd)
  3917. FROM MonthRanges
  3918. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  3919. )
  3920. SELECT
  3921. MonthStart,
  3922. MonthEnd,
  3923. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  3924. INTO #Months
  3925. FROM MonthRanges
  3926. OPTION (MAXRECURSION 0)
  3927. -- PIVOT的列标题
  3928. SELECT @cols =
  3929. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  3930. FROM #Months dr
  3931. LEFT JOIN ICSDeliveryNotice p ON p.mtime BETWEEN dr.MonthStart AND dr.MonthEnd
  3932. FOR XML PATH(''), TYPE
  3933. ).value('.', 'NVARCHAR(MAX)')
  3934. ,1,1,'')
  3935. -- PIVOT查询
  3936. SET @query = '
  3937. SELECT *
  3938. FROM (
  3939. SELECT
  3940. dr.WeekNumber,
  3941. CONVERT(NVARCHAR, p.VenCode) AS VenCode,
  3942. CAST((1.0 * (SELECT COUNT(*) FROM ICSPurchaseOrder WHERE mtime <= ArriveDate)) / (SELECT COUNT(*) FROM ICSDeliveryNotice) AS DECIMAL(11, 4)) AS quantity
  3943. FROM #Days dr
  3944. LEFT JOIN ICSDeliveryNotice p ON CONVERT(NVARCHAR(20), p.mtime, 23) BETWEEN dr.WeekStart AND dr.WeekEnd
  3945. WHERE 1=1";
  3946. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  3947. {
  3948. sql += " and p.VenCode in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  3949. }
  3950. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  3951. {
  3952. sql += " and detail.InvCode like '%" + queryParam["InvName"].ToString() + "%'";
  3953. }
  3954. sql += @" group by dr.WeekNumber,p.VenCode) x
  3955. PIVOT (
  3956. sum( quantity)
  3957. FOR WeekNumber IN (' + @cols + ')
  3958. ) p
  3959. ';
  3960. EXEC sp_executesql @query;
  3961. DROP TABLE #Months";
  3962. }
  3963. sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString());
  3964. DataTable dtr = SqlHelper.GetDataTableBySql(sql);
  3965. return dtr;
  3966. }
  3967. #endregion
  3968. #region 供应商报价次数
  3969. public DataTable GetVendorSORQUOTATIONByLB(string queryJson, ref Pagination jqgridparam)
  3970. {
  3971. DataTable dt = new DataTable();
  3972. var queryParam = queryJson.ToJObject();
  3973. List<DbParameter> parameter = new List<DbParameter>();
  3974. string sql = "";
  3975. if (queryParam["radios"].ToString() == "日")
  3976. {
  3977. sql = @"DECLARE @StartDate DATE = '{0}'
  3978. DECLARE @EndDate DATE = '{1}'
  3979. DECLARE @cols AS NVARCHAR(MAX),
  3980. @query AS NVARCHAR(MAX);
  3981. ;WITH DateRanges AS (
  3982. SELECT
  3983. DateValue = @StartDate
  3984. UNION ALL
  3985. SELECT
  3986. DATEADD(DAY, 1, DateValue)
  3987. FROM DateRanges
  3988. WHERE DateValue < @EndDate
  3989. )
  3990. SELECT
  3991. CONVERT(NVARCHAR(20),DateValue,23) AS WeekNumber
  3992. INTO #AllDates
  3993. FROM DateRanges
  3994. OPTION (MAXRECURSION 0);
  3995. -- PIVOT的列标题
  3996. SELECT @cols =
  3997. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  3998. FROM #AllDates dr
  3999. inner JOIN ICSSORQUOTATION p ON CONVERT(NVARCHAR(20),p.CREATETIME,23)= dr.WeekNumber
  4000. FOR XML PATH(''), TYPE
  4001. ).value('.', 'NVARCHAR(MAX)')
  4002. ,1,1,'')
  4003. -- PIVOT查询
  4004. SET @query = '
  4005. SELECT *
  4006. FROM (
  4007. SELECT
  4008. dr.WeekNumber,
  4009. CONVERT(NVARCHAR, p.VENDORCODE) AS VenCode,
  4010. COUNT(*) as quantity
  4011. FROM #AllDates dr
  4012. LEFT JOIN ICSSORQUOTATION p ON CONVERT(NVARCHAR(20),p.CREATETIME,23) BETWEEN dr.WeekStart AND dr.WeekEnd
  4013. WHERE 1=1";
  4014. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  4015. {
  4016. sql += " and p.VENDORCODE in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  4017. }
  4018. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  4019. {
  4020. sql += " and b.InvCode in (" + queryParam["InvName"].ToString().TrimEnd(',') + ") ";
  4021. }
  4022. sql += @" group by dr.WeekNumber,p.VENDORCODE) x
  4023. PIVOT (
  4024. sum( quantity)
  4025. FOR WeekNumber IN (' + @cols + ')
  4026. ) p
  4027. ';
  4028. EXEC sp_executesql @query;
  4029. DROP TABLE #AllDates";
  4030. }
  4031. else if (queryParam["radios"].ToString() == "周")
  4032. {
  4033. sql = @"DECLARE @StartDate DATE = '{0}'
  4034. DECLARE @EndDate DATE = '{1}'
  4035. DECLARE @cols AS NVARCHAR(MAX),
  4036. @query AS NVARCHAR(MAX);
  4037. ;WITH DateRanges AS (
  4038. SELECT
  4039. WeekStart = @StartDate,
  4040. WeekEnd = DATEADD(DAY, 7, @StartDate), --
  4041. WeekNumber = DATEPART(WEEK, @StartDate) --
  4042. UNION ALL
  4043. SELECT
  4044. DATEADD(WEEK, 1, WeekStart),
  4045. DATEADD(DAY, 7, DATEADD(WEEK, 1, WeekStart)),
  4046. DATEPART(WEEK, DATEADD(WEEK, 1, WeekStart))
  4047. FROM DateRanges
  4048. WHERE DATEADD(WEEK, 1, WeekStart) <= @EndDate
  4049. )
  4050. SELECT WeekStart, WeekEnd, WeekNumber
  4051. INTO #Days
  4052. FROM DateRanges
  4053. OPTION (MAXRECURSION 0);
  4054. -- PIVOT的列标题
  4055. SELECT @cols =
  4056. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  4057. FROM #Days dr
  4058. inner JOIN ICSSORQUOTATION p ON p.CREATETIME BETWEEN dr.WeekStart AND dr.WeekEnd
  4059. FOR XML PATH(''), TYPE
  4060. ).value('.', 'NVARCHAR(MAX)')
  4061. ,1,1,'')
  4062. -- PIVOT查询
  4063. SET @query = '
  4064. SELECT *
  4065. FROM (
  4066. SELECT
  4067. dr.WeekNumber,
  4068. CONVERT(NVARCHAR, p.VENDORCODE) AS VenCode,
  4069. COUNT(*) as quantity
  4070. FROM #Days dr
  4071. inner JOIN ICSSORQUOTATION p ON CONVERT(NVARCHAR(20),p.CREATETIME,23) BETWEEN dr.WeekStart AND dr.WeekEnd
  4072. WHERE 1=1 ";
  4073. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  4074. {
  4075. sql += " and p.VENDORCODE in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  4076. }
  4077. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  4078. {
  4079. sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'";
  4080. }
  4081. sql += @" group by dr.WeekNumber,p.VENDORCODE) x
  4082. PIVOT (
  4083. sum( quantity)
  4084. FOR WeekNumber IN (' + @cols + ')
  4085. ) p
  4086. ';
  4087. EXEC sp_executesql @query;
  4088. DROP TABLE #Days";
  4089. }
  4090. else if (queryParam["radios"].ToString() == "月")
  4091. {
  4092. sql = @"DECLARE @StartDate DATE = '{0}'
  4093. DECLARE @EndDate DATE = '{1}'
  4094. DECLARE @cols AS NVARCHAR(MAX),
  4095. @query AS NVARCHAR(MAX);
  4096. ;WITH MonthRanges AS (
  4097. SELECT
  4098. MonthStart = DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1),
  4099. MonthEnd = DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(@StartDate), MONTH(@StartDate), 1))
  4100. UNION ALL
  4101. SELECT
  4102. DATEADD(MONTH, 1, MonthStart),
  4103. DATEADD(MONTH, 1, MonthEnd)
  4104. FROM MonthRanges
  4105. WHERE DATEADD(MONTH, 1, MonthStart) <= @EndDate
  4106. )
  4107. SELECT
  4108. MonthStart,
  4109. MonthEnd,
  4110. WeekNumber = CONVERT(NVARCHAR(30),DATEPART(MONTH, MonthStart))+'_'+CONVERT(NVARCHAR(30),DATEPART(YEAR, MonthStart))
  4111. INTO #Months
  4112. FROM MonthRanges
  4113. OPTION (MAXRECURSION 0)
  4114. -- PIVOT的列标题
  4115. SELECT @cols =
  4116. STUFF((SELECT DISTINCT ',' + QUOTENAME(CONVERT(NVARCHAR, dr.WeekNumber))
  4117. FROM #Months dr
  4118. inner JOIN ICSSORQUOTATION p ON p.CREATETIME BETWEEN dr.MonthStart AND dr.MonthEnd
  4119. FOR XML PATH(''), TYPE
  4120. ).value('.', 'NVARCHAR(MAX)')
  4121. ,1,1,'')
  4122. -- PIVOT查询
  4123. SET @query = '
  4124. SELECT *
  4125. FROM (
  4126. SELECT
  4127. dr.WeekNumber,
  4128. CONVERT(NVARCHAR, p.VENDORCODE) AS VenCode,
  4129. COUNT(*) as quantity
  4130. FROM #Months dr
  4131. inner JOIN ICSSORQUOTATION p ON p.CREATETIME BETWEEN dr.MonthStart AND dr.MonthEnd
  4132. WHERE 1=1";
  4133. if (!string.IsNullOrWhiteSpace(queryParam["VenName"].ToString()))
  4134. {
  4135. sql += " and p.VENDORCODE in (" + queryParam["VenName"].ToString().TrimEnd(',') + ") ";
  4136. }
  4137. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  4138. {
  4139. sql += " and detail.InvCode like '%" + queryParam["InvName"].ToString() + "%'";
  4140. }
  4141. sql += @" group by dr.WeekNumber,p.VENDORCODE) x
  4142. PIVOT (
  4143. sum( quantity)
  4144. FOR WeekNumber IN (' + @cols + ')
  4145. ) p
  4146. ';
  4147. EXEC sp_executesql @query;
  4148. DROP TABLE #Months";
  4149. }
  4150. sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString());
  4151. DataTable dtr = SqlHelper.GetDataTableBySql(sql);
  4152. return dtr;
  4153. }
  4154. #endregion
  4155. #region 采购降本额 同比
  4156. public DataTable GetPoJBPriceByLB(string queryJson, ref Pagination jqgridparam)
  4157. {
  4158. DataTable dt = new DataTable();
  4159. var queryParam = queryJson.ToJObject();
  4160. List<DbParameter> parameter = new List<DbParameter>();
  4161. string sql = "";
  4162. if (queryParam["radios"].ToString() == "月")
  4163. {
  4164. sql = @"DECLARE @StartDate DATE = '{0}'; -- 替换为您的开始日期
  4165. DECLARE @EndDate DATE = '{1}'; --
  4166. --
  4167. WITH MonthlyCosts AS (
  4168. SELECT
  4169. DATEADD(MONTH, DATEDIFF(MONTH, 0, MTIME), 0) AS month,
  4170. SUM(UnitPrice*Quantity) AS total_cost
  4171. FROM dbo.ICSPurchaseOrder
  4172. WHERE MTIME BETWEEN @StartDate AND @EndDate";
  4173. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  4174. {
  4175. sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'";
  4176. }
  4177. sql+=@" GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, MTIME), 0)
  4178. ),
  4179. --
  4180. YearOverYear AS (
  4181. SELECT
  4182. bbb.month,
  4183. bbb.total_cost AS current_month_cost,
  4184. COALESCE(previous.total_cost, 0) AS previous_month_cost,
  4185. bbb.total_cost - COALESCE(previous.total_cost, 0) AS cost_reduction_mom
  4186. FROM MonthlyCosts bbb
  4187. LEFT JOIN MonthlyCosts previous ON bbb.month = DATEADD(MONTH, 1, previous.month)
  4188. WHERE DATEADD(MONTH, -1, bbb.month) BETWEEN @StartDate AND @EndDate --
  4189. )
  4190. --
  4191. SELECT
  4192. mom.month,
  4193. mom.current_month_cost,
  4194. mom.previous_month_cost,
  4195. mom.cost_reduction_mom AS monthly_cost_reduction
  4196. FROM YearOverYear mom
  4197. ORDER BY mom.month;
  4198. ";
  4199. }
  4200. else if (queryParam["radios"].ToString() == "年")
  4201. {
  4202. sql = @"DECLARE @StartDate DATE = '{0}'; -- 替换为您的开始日期
  4203. DECLARE @EndDate DATE = '{1}'; --
  4204. --
  4205. WITH MonthlyCosts AS (
  4206. SELECT
  4207. DATEADD(MONTH, DATEDIFF(MONTH, 0, MTIME), 0) AS month,
  4208. SUM(UnitPrice*Quantity) AS total_cost
  4209. FROM dbo.ICSPurchaseOrder
  4210. WHERE MTIME BETWEEN @StartDate AND @EndDate";
  4211. if (!string.IsNullOrWhiteSpace(queryParam["InvName"].ToString()))
  4212. {
  4213. sql += " and InvCode like '%" + queryParam["InvName"].ToString() + "%'";
  4214. }
  4215. sql+=@" GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, MTIME), 0)
  4216. ),
  4217. --
  4218. YearOverYear AS (
  4219. SELECT
  4220. bbb.month,
  4221. bbb.total_cost AS current_year_cost,
  4222. COALESCE(previous.total_cost, 0) AS previous_year_cost,
  4223. bbb.total_cost - COALESCE(previous.total_cost, 0) AS cost_reduction_yoy
  4224. FROM MonthlyCosts bbb
  4225. LEFT JOIN MonthlyCosts previous ON bbb.month = DATEADD(YEAR, 1, previous.month)
  4226. WHERE DATEADD(YEAR, -1, bbb.month) BETWEEN @StartDate AND @EndDate --
  4227. )
  4228. --
  4229. SELECT
  4230. YEAR(yoy.month) AS year,
  4231. SUM(yoy.current_year_cost) AS current_year_total_cost,
  4232. SUM(yoy.previous_year_cost) AS previous_year_total_cost,
  4233. SUM(yoy.cost_reduction_yoy) AS yearly_cost_reduction
  4234. FROM YearOverYear yoy
  4235. GROUP BY YEAR(yoy.month)
  4236. ORDER BY year;";
  4237. }
  4238. sql = string.Format(sql, queryParam["BegionDate"].ToString(), queryParam["EndDate"].ToString());
  4239. DataTable dtr = SqlHelper.GetDataTableBySql(sql);
  4240. return dtr;
  4241. }
  4242. #endregion
  4243. #region ZL
  4244. public DataTable GetZL(string Year)
  4245. {
  4246. try
  4247. {
  4248. int MaxWeek = GetMaxWeek(Year);
  4249. string sql = @"
  4250. DECLARE @YearStr varchar(10) ='{0}'
  4251. DECLARE @YearStrNext varchar(10) = ''
  4252. set @YearStrNext =Convert(decimal(18,0),@YearStr) +1
  4253. if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#TempSS'))
  4254. drop table #TempSS
  4255. if exists(select * from tempdb..sysobjects where id=object_id('tempdb..##Days'))
  4256. drop table ##Days
  4257. SELECT DATEADD(wk, DATEDIFF(wk,0,dateadd(wk , 1 , @YearStr+'-01-01')), 0) - 7 StartDay into #TempSS
  4258. select week,
  4259. case when week=1 and DayFrom<@YearStr+'-01-01' then @YearStr+'-01-01' else DayFrom end DayFrom,
  4260. case when week>=52 and DayTo>=@YearStrNext+'-01-01' then DATEADD(ss,-1,@YearStrNext+'-01-01') else DayTo end DayTo
  4261. into ##Days
  4262. from(
  4263. 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
  4264. LEFT JOIN #TempSS SS ON 1=1
  4265. where vv.type='p'
  4266. and vv.number<=52
  4267. ) ff
  4268. 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
  4269. from (
  4270. select dd.[week] weekStr ,case when st.MTime is not null then 1 else 0 end Num,st.LOTNO
  4271. from ##Days dd
  4272. 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
  4273. ) gg
  4274. Left join
  4275. (select a.*, dd.[week] weekStr ,case when a.MTime is not null then 1 else 0 end Nums
  4276. from ##Days dd
  4277. left join ICSINSPECTION a on dd.DayFrom<=a.MTime and dd.DayTo>=a.MTime
  4278. ) sss on gg.LOTNO=sss.LotNO
  4279. and gg.weekStr<=" + MaxWeek + @"
  4280. group by gg.weekStr ORDER BY gg.weekStr
  4281. ";
  4282. sql = string.Format(sql, Year);
  4283. DataTable dt = Repository().FindTableBySql(sql.ToString());
  4284. dt = ReSet_PurDT(dt, MaxWeek, Convert.ToInt32(Year));
  4285. if (dt != null && dt.Rows.Count > 0)
  4286. {
  4287. return dt;
  4288. }
  4289. else
  4290. { return null; }
  4291. }
  4292. catch (Exception ex)
  4293. {
  4294. return null;
  4295. }
  4296. }
  4297. #endregion
  4298. #region GetDelayOrder
  4299. public DataTable GetDelayOrder(string Year)
  4300. {
  4301. try
  4302. {
  4303. int MaxWeek = GetMaxWeek(Year);
  4304. string sql = @"
  4305. DECLARE @YearStr varchar(10) ='{0}'
  4306. DECLARE @YearStrNext varchar(10) = ''
  4307. set @YearStrNext =Convert(decimal(18,0),@YearStr) +1
  4308. if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#TempSS'))
  4309. drop table #TempSS
  4310. if exists(select * from tempdb..sysobjects where id=object_id('tempdb..##Days'))
  4311. drop table ##Days
  4312. SELECT DATEADD(wk, DATEDIFF(wk,0,dateadd(wk , 1 , @YearStr+'-01-01')), 0) - 7 StartDay into #TempSS
  4313. select week,
  4314. case when week=1 and DayFrom<@YearStr+'-01-01' then @YearStr+'-01-01' else DayFrom end DayFrom,
  4315. case when week>=52 and DayTo>=@YearStrNext+'-01-01' then DATEADD(ss,-1,@YearStrNext+'-01-01') else DayTo end DayTo
  4316. into ##Days
  4317. from(
  4318. 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
  4319. LEFT JOIN #TempSS SS ON 1=1
  4320. where vv.type='p'
  4321. and vv.number<=52
  4322. ) ff
  4323. 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
  4324. from (
  4325. select a.*,dd.[week] weekStr ,case when a.PreArriveDate is not null then 1 else 0 end Num
  4326. from ##Days dd
  4327. left join icspo_pomain a on dd.DayFrom<=a.PreArriveDate
  4328. ) gg
  4329. left join
  4330. (
  4331. select a.*,dd.[week] weekStr ,case when a.MTime is not null then 1 else 0 end Nums
  4332. from ##Days dd
  4333. left join ICSPOArrive a on dd.DayFrom<=a.MTime and dd.DayTo>=a.MTime
  4334. left join icspo_pomain b on a.POCode=b.POCode and dd.DayFrom>=b.PreArriveDate
  4335. ) ss on gg.POCode=ss.POCode
  4336. and gg.weekStr<=" + MaxWeek + @"
  4337. group by gg.weekStr ORDER BY gg.weekStr
  4338. ";
  4339. sql = string.Format(sql, Year);
  4340. DataTable dt = Repository().FindTableBySql(sql.ToString());
  4341. dt = ReSet_PurDT(dt, MaxWeek, Convert.ToInt32(Year));
  4342. if (dt != null && dt.Rows.Count > 0)
  4343. {
  4344. return dt;
  4345. }
  4346. else
  4347. { return null; }
  4348. }
  4349. catch (Exception ex)
  4350. {
  4351. return null;
  4352. }
  4353. }
  4354. #endregion
  4355. private int GetMaxWeek(string Year)
  4356. {
  4357. string SQL = "";
  4358. if (Year == DateTime.Now.Year.ToString())
  4359. {
  4360. //计算当前周数+4周,若超出本年,就取本年最后一周
  4361. 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
  4362. then datepart(wk,cast(getdate() as datetime))+4
  4363. else datepart(wk,cast(dateadd(year, datediff(year, 0, dateadd(year, 1, getdate())), -1) as datetime)) end
  4364. ";
  4365. }
  4366. else
  4367. {
  4368. SQL = @"select datepart(wk,dateadd(day,-1,CONVERT(datetime, '" + (Convert.ToInt32(Year) + 1).ToString() + "'+'-01-01 00:00:00',20))) ";
  4369. }
  4370. DataTable dtweek = SqlHelper.GetDataTableBySql(SQL);
  4371. int maxweek = Convert.ToInt32(dtweek.Rows[0][0].ToString());
  4372. return maxweek;
  4373. }
  4374. #region GetPoMain
  4375. public DataTable GetPoMain()
  4376. {
  4377. try
  4378. {
  4379. string sql = @"SELECT
  4380. (SELECT COUNT(*) FROM dbo.ICSPurchaseOrder) AS TotalOrders,
  4381. (SELECT COUNT(*) FROM dbo.ICSPurchaseOrder WHERE ReleaseState = '0') AS UnreleasedOrders
  4382. UNION ALL
  4383. SELECT
  4384. (SELECT COUNT(*) FROM dbo.ICSPurchaseOrder WHERE ReleaseState = '1') AS TotalOrders,
  4385. (SELECT COUNT(*) FROM dbo.ICSPurchaseOrder WHERE SignBackStatus='2') AS UnreleasedOrders
  4386. UNION ALL
  4387. SELECT
  4388. (SELECT COUNT(*) FROM dbo.ICSASN ) AS TotalOrders,
  4389. (SELECT COUNT(*) FROM dbo.ICSASN a
  4390. LEFT JOIN dbo.ICSDeliveryNotice b ON a.ASNCode=b.ASNCode AND a.WorkPoint=b.WorkPoint
  4391. WHERE b.ASNCode IS NULL) AS UnreleasedOrders
  4392. UNION ALL
  4393. SELECT
  4394. (SELECT COUNT(*)
  4395. FROM dbo.ICSPurchaseOrder a
  4396. LEFT JOIN dbo.ICSInventoryLotDetail b ON a.POCode = b.TransCode AND a.Sequence = b.TransSequence AND a.WorkPoint = b.WorkPoint
  4397. LEFT JOIN dbo.ICSASNDetail c ON b.LotNo = c.LotNo AND b.WorkPoint = c.WorkPoint
  4398. LEFT JOIN dbo.ICSDeliveryNotice d ON c.ASNCode = d.ASNCode AND c.WorkPoint = d.WorkPoint
  4399. WHERE d.MTIME IS NOT NULL AND a.ArriveDate < d.MTIME) AS TotalOrders,
  4400. CAST((SELECT COUNT(*)
  4401. FROM dbo.ICSPurchaseOrder a
  4402. LEFT JOIN dbo.ICSInventoryLotDetail b ON a.POCode = b.TransCode AND a.Sequence = b.TransSequence AND a.WorkPoint = b.WorkPoint
  4403. LEFT JOIN dbo.ICSASNDetail c ON b.LotNo = c.LotNo AND b.WorkPoint = c.WorkPoint
  4404. LEFT JOIN dbo.ICSDeliveryNotice d ON c.ASNCode = d.ASNCode AND c.WorkPoint = d.WorkPoint
  4405. WHERE d.MTIME IS NOT NULL AND a.ArriveDate < d.MTIME) * 1.0 /
  4406. (SELECT COUNT(*) FROM dbo.ICSPurchaseOrder)AS DECIMAL(16,3)) AS UnreleasedOrders
  4407. UNION ALL
  4408. SELECT (SELECT COUNT(*) FROM dbo.ICSDeliveryNotice a
  4409. LEFT JOIN dbo.ICSASNDetail b ON a.ASNCode=b.ASNCode
  4410. LEFT JOIN dbo.ICSInspection c ON b.LotNo=c.LotNo
  4411. WHERE c.LotNo IS NULL)AS TotalOrders,
  4412. (SELECT COUNT(*) FROM dbo.ICSInspection a
  4413. LEFT JOIN dbo.ICSWareHouseLotInfoLog b ON a.LotNo=b.LotNo
  4414. WHERE b.LotNo IS NULL) AS UnreleasedOrders ";
  4415. sql = string.Format(sql);
  4416. DataTable dt = Repository().FindTableBySql(sql.ToString());
  4417. if (dt != null && dt.Rows.Count > 0)
  4418. {
  4419. return dt;
  4420. }
  4421. else
  4422. { return null; }
  4423. }
  4424. catch (Exception ex)
  4425. {
  4426. return null;
  4427. }
  4428. }
  4429. #endregion
  4430. public DataTable GetGridJson(string queryJson, ref Pagination jqgridparam)
  4431. {
  4432. DataTable dt = new DataTable();
  4433. var queryParam = queryJson.ToJObject();
  4434. List<DbParameter> parameter = new List<DbParameter>();
  4435. 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,
  4436. 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
  4437. FROM dbo.ICSPO_PoMain a
  4438. LEFT JOIN
  4439. (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
  4440. LEFT JOIN (SELECT SUM(b.PLANQTY)AS PLANQTY,c.TransNO,c.TransLine FROM dbo.ICSASN a
  4441. LEFT JOIN dbo.ICSASNDETAIL b ON a.STNO=b.STNO AND a.WorkPoint=b.WorkPoint
  4442. LEFT JOIN dbo.ICSITEMLot c ON b.LOTNO=c.LotNO AND b.WorkPoint=c.WorkPoint
  4443. GROUP BY c.TransNO,c.TransLine)c ON c.TransNO=a.poCode AND c.TransLine=a.PORow
  4444. LEFT JOIN ( SELECT SUM(iQuantity) AS iQuantity,POCode FROM dbo.ICSPOArrive GROUP BY POCode) d ON a.POCode=d.POCode
  4445. 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
  4446. LEFT JOIN ICSCADetail b ON a.DocNo = b.DocNo AND a.WorkPoint = b.WorkPoint
  4447. LEFT JOIN view_PoMain c ON b.Src_ASNDocNo =c.DNNO and b.Src_ASNDocLineNo=c.DNLine
  4448. GROUP BY c.POCode,c.PORow,a.DocNo) e ON a.POCode=e.POCode AND a.PORow=e.PORow
  4449. 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
  4450. left JOIN view_PoMain b ON a.ASNNo = b.DNNO AND a.InvCode = b.InvCode and a.ASNLine=b.DNLine
  4451. left join ICSInvoice c on a.DocNo=c.DocNo and a.WorkPoint=c.WorkPoint
  4452. GROUP BY b.POCode,b.PORow,c.DocNo,PaperNo ) f ON a.POCode=f.POCode AND a.PORow=f.PORow
  4453. Where 1=1 ";
  4454. if (!string.IsNullOrWhiteSpace(queryJson))
  4455. {
  4456. if (!string.IsNullOrWhiteSpace(queryParam["POCode"].ToString()))
  4457. {
  4458. sql += " and a.POCode like '%" + queryParam["POCode"].ToString() + "%' ";
  4459. }
  4460. if (!string.IsNullOrWhiteSpace(queryParam["STNO"].ToString()))
  4461. {
  4462. sql += " and c.STNO like '%" + queryParam["STNO"].ToString() + "%' ";
  4463. }
  4464. if (!string.IsNullOrWhiteSpace(queryParam["Ca"].ToString()))
  4465. {
  4466. sql += " and e.DocNo like '%" + queryParam["Ca"].ToString() + "%' ";
  4467. }
  4468. if (!string.IsNullOrWhiteSpace(queryParam["CreatePerson"].ToString()))
  4469. {
  4470. sql += " and a.CreatePerson like '%" + queryParam["CreatePerson"].ToString() + "%' ";
  4471. }
  4472. if (!string.IsNullOrWhiteSpace(queryParam["InvDocNo"].ToString()))
  4473. {
  4474. sql += " and f.DocNo like '%" + queryParam["InvDocNo"].ToString() + "%' ";
  4475. }
  4476. if (!string.IsNullOrWhiteSpace(queryParam["BegionTime"].ToString()))
  4477. {
  4478. sql += " and a.MTIME >= '" + queryParam["BegionTime"].ToString() + "' ";
  4479. }
  4480. if (!string.IsNullOrWhiteSpace(queryParam["EndTime"].ToString()))
  4481. {
  4482. sql += " and a.MTIME <= '" + queryParam["EndTime"].ToString() + "' ";
  4483. }
  4484. if (!string.IsNullOrWhiteSpace(queryParam["Status"].ToString()))
  4485. {
  4486. string ReleaseState = queryParam["Status"].ToString();
  4487. if (ReleaseState == "0")
  4488. sql += " and ISNULL(a.Quantity,0)-ISNULL(c.PLANQTY,0)<>0";
  4489. else if (ReleaseState == "1")
  4490. sql += " and c.STNO is not null";
  4491. else if (ReleaseState == "2")
  4492. sql += " and e.DocNo IS NOT NULL ";
  4493. else if (ReleaseState == "3")
  4494. sql += " and f.DocNo IS NOT NULL";
  4495. else if (ReleaseState == "4")
  4496. sql += " and e.DocNo is NULL";
  4497. else if (ReleaseState == "5")
  4498. sql += " and f.DocNo is NULL";
  4499. }
  4500. }
  4501. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode != "admin")
  4502. {
  4503. sql += " and a.WorkPoint in (" + NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',') + ")";
  4504. }
  4505. if (NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode.Contains("Vendor"))
  4506. {
  4507. sql += " and a.VenCode in (SELECT cVenCode FROM ICSVendor where cVenName ='" + NFine.Code.OperatorProvider.Provider.GetCurrent().UserName + "'AND WorkPoint=a.WorkPoint)";
  4508. }
  4509. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  4510. }
  4511. /// <summary>
  4512. /// 获取供应商列表
  4513. /// </summary>
  4514. /// <returns></returns>
  4515. public DataTable GetInvCode()
  4516. {
  4517. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  4518. string sql = @"select '' as InvCode,'' as InvName
  4519. union all
  4520. SELECT InvCode,InvName FROM ICSInventory";
  4521. string role = NFine.Code.OperatorProvider.Provider.GetCurrent().RoleEnCode;
  4522. if (role != "admin")
  4523. {
  4524. sql += " and b.WorkPoint in(" + WorkPoint.TrimEnd(',') + ")";
  4525. }
  4526. DataTable dt = SqlHelper.GetDataTableBySql(sql);
  4527. return dt;
  4528. }
  4529. #region 采购总金额(近四年)
  4530. public DataTable GetNCGJE()
  4531. {
  4532. try
  4533. {
  4534. string sql = @"DECLARE @CurrentYear INT = YEAR(GETDATE()); -- 获取当前年份
  4535. -- 使CTE
  4536. WITH Years AS (
  4537. SELECT @CurrentYear AS YearValue
  4538. UNION ALL
  4539. SELECT YearValue - 1 FROM Years WHERE YearValue > @CurrentYear - 3
  4540. ),
  4541. -- 使CTE来计算每年的采购金额总和
  4542. PurchaseTotals AS (
  4543. SELECT
  4544. y.YearValue,
  4545. CAST(SUM(COALESCE(p.UnitPrice*p.Quantity, 0))/10000 AS DECIMAL(16,2)) AS TotalPurchaseAmount
  4546. FROM
  4547. Years y
  4548. LEFT JOIN
  4549. ICSPurchaseOrder p ON p.MTIME >= DATEFROMPARTS(y.YearValue, 1, 1)
  4550. AND p.MTIME < DATEFROMPARTS(y.YearValue + 1, 1, 1)
  4551. GROUP BY
  4552. y.YearValue
  4553. )
  4554. --
  4555. SELECT *
  4556. FROM PurchaseTotals
  4557. ORDER BY YearValue DESC;
  4558. ";
  4559. DataTable dt = Repository().FindTableBySql(sql.ToString());
  4560. if (dt != null && dt.Rows.Count > 0)
  4561. {
  4562. return dt;
  4563. }
  4564. else
  4565. { return null; }
  4566. }
  4567. catch (Exception ex)
  4568. {
  4569. return null;
  4570. }
  4571. }
  4572. #endregion
  4573. #region 采购总金额(近六月)
  4574. public DataTable GetYCGJE()
  4575. {
  4576. try
  4577. {
  4578. string sql = @"-- 创建一个包含过去6个月(包括当前月)的月份和年份的CTE
  4579. ;WITH MonthsCTE AS (
  4580. SELECT
  4581. YEAR(DATEADD(MONTH, -6 + ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), GETDATE())) AS YearValue,
  4582. MONTH(DATEADD(MONTH, -6 + ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), GETDATE())) AS MonthValue
  4583. FROM
  4584. (SELECT TOP 6 * FROM sys.all_objects ORDER BY object_id) AS x -- 使6
  4585. )
  4586. -- CTE
  4587. SELECT
  4588. m.YearValue,
  4589. m.MonthValue,
  4590. ISNULL(ROUND(SUM(COALESCE(p.UnitPrice * p.Quantity, 0)) / 10000.0, 2), 0) AS TotalPurchaseAmountInThousands
  4591. FROM
  4592. MonthsCTE m
  4593. LEFT JOIN
  4594. ICSPurchaseOrder p ON YEAR(p.MTIME) = m.YearValue AND MONTH(p.MTIME) = m.MonthValue
  4595. GROUP BY
  4596. m.YearValue,
  4597. m.MonthValue
  4598. ORDER BY
  4599. m.YearValue,
  4600. m.MonthValue;
  4601. ";
  4602. DataTable dt = Repository().FindTableBySql(sql.ToString());
  4603. if (dt != null && dt.Rows.Count > 0)
  4604. {
  4605. return dt;
  4606. }
  4607. else
  4608. { return null; }
  4609. }
  4610. catch (Exception ex)
  4611. {
  4612. return null;
  4613. }
  4614. }
  4615. #endregion
  4616. #region 物料采购金额占比(Top10)
  4617. public DataTable GetWLCGJEZB()
  4618. {
  4619. try
  4620. {
  4621. string sql = @"WITH YearlyPurchases AS (
  4622. SELECT
  4623. b.InvName,
  4624. CAST(SUM(COALESCE(UnitPrice*Quantity, 0)) AS DECIMAL(16,2)) AS TotalPurchaseAmount
  4625. FROM
  4626. ICSPurchaseOrder a
  4627. LEFT JOIN dbo.ICSInventory b ON a.InvCode=b.InvCode AND a.WorkPoint=b.WorkPoint
  4628. WHERE
  4629. YEAR(a.MTIME) = YEAR(GETDATE())
  4630. GROUP BY
  4631. InvName
  4632. ),
  4633. TotalYearlyPurchase AS (
  4634. SELECT
  4635. SUM(TotalPurchaseAmount) AS Total
  4636. FROM
  4637. YearlyPurchases
  4638. ),
  4639. MaterialPurchaseShares AS (
  4640. SELECT
  4641. yp.InvName,
  4642. yp.TotalPurchaseAmount,
  4643. CAST((yp.TotalPurchaseAmount * 100.0) / t.Total AS DECIMAL(16,2)) AS SharePercentage
  4644. FROM
  4645. YearlyPurchases yp
  4646. CROSS JOIN
  4647. TotalYearlyPurchase t
  4648. )
  4649. SELECT TOP 10
  4650. MaterialPurchaseShares.InvName,
  4651. TotalPurchaseAmount,
  4652. SharePercentage
  4653. FROM
  4654. MaterialPurchaseShares
  4655. ORDER BY
  4656. SharePercentage DESC;
  4657. ";
  4658. DataTable dt = Repository().FindTableBySql(sql.ToString());
  4659. if (dt != null && dt.Rows.Count > 0)
  4660. {
  4661. return dt;
  4662. }
  4663. else
  4664. { return null; }
  4665. }
  4666. catch (Exception ex)
  4667. {
  4668. return null;
  4669. }
  4670. }
  4671. #endregion
  4672. #region 供应商采购金额占比(Top10)
  4673. public DataTable GetGYSCGJEZB()
  4674. {
  4675. try
  4676. {
  4677. string sql = @"WITH YearlyPurchases AS (
  4678. SELECT
  4679. b.VenName,
  4680. CAST(SUM(COALESCE(UnitPrice*Quantity, 0)) AS DECIMAL(16,2)) AS TotalPurchaseAmount
  4681. FROM
  4682. ICSPurchaseOrder a
  4683. LEFT JOIN dbo.ICSVendor b ON a.VenCode=b.VenCode AND a.WorkPoint=b.WorkPoint
  4684. WHERE
  4685. YEAR(a.MTIME) = YEAR(GETDATE())
  4686. GROUP BY
  4687. VenName
  4688. ),
  4689. TotalYearlyPurchase AS (
  4690. SELECT
  4691. SUM(TotalPurchaseAmount) AS Total
  4692. FROM
  4693. YearlyPurchases
  4694. ),
  4695. MaterialPurchaseShares AS (
  4696. SELECT
  4697. yp.VenName,
  4698. yp.TotalPurchaseAmount,
  4699. CAST((yp.TotalPurchaseAmount * 100.0) / t.Total AS DECIMAL(16,2)) AS SharePercentage
  4700. FROM
  4701. YearlyPurchases yp
  4702. CROSS JOIN
  4703. TotalYearlyPurchase t
  4704. )
  4705. SELECT TOP 10
  4706. MaterialPurchaseShares.VenName,
  4707. TotalPurchaseAmount,
  4708. SharePercentage
  4709. FROM
  4710. MaterialPurchaseShares
  4711. ORDER BY
  4712. SharePercentage DESC;
  4713. ";
  4714. DataTable dt = Repository().FindTableBySql(sql.ToString());
  4715. if (dt != null && dt.Rows.Count > 0)
  4716. {
  4717. return dt;
  4718. }
  4719. else
  4720. { return null; }
  4721. }
  4722. catch (Exception ex)
  4723. {
  4724. return null;
  4725. }
  4726. }
  4727. #endregion
  4728. #region 采购降本率(近六月)
  4729. public DataTable GetCGJBE()
  4730. {
  4731. try
  4732. {
  4733. string sql = @";WITH MonthlyPurchases AS (
  4734. SELECT
  4735. YEAR(MTIME) AS Year,
  4736. MONTH(MTIME) AS Month,
  4737. SUM(UnitPrice) AS TotalMonthlyAmount
  4738. FROM
  4739. dbo.ICSPurchaseOrder
  4740. WHERE
  4741. MTIME >= DATEADD(MONTH, -6, CAST(GETDATE() AS DATE))
  4742. GROUP BY
  4743. YEAR(MTIME),
  4744. MONTH(MTIME)
  4745. ),
  4746. MonthlySavings AS (
  4747. SELECT
  4748. a.Year,
  4749. a.Month,
  4750. a.TotalMonthlyAmount,
  4751. ISNULL((SELECT b.TotalMonthlyAmount
  4752. FROM MonthlyPurchases b
  4753. WHERE b.Year = a.Year AND b.Month = a.Month - 1), 0) AS PreviousMonthAmount,
  4754. (a.TotalMonthlyAmount - ISNULL((SELECT b.TotalMonthlyAmount
  4755. FROM MonthlyPurchases b
  4756. WHERE b.Year = a.Year AND b.Month = a.Month - 1), 0)) AS CostReduction
  4757. FROM
  4758. MonthlyPurchases a
  4759. )
  4760. SELECT
  4761. Year,
  4762. Month,
  4763. TotalMonthlyAmount,
  4764. PreviousMonthAmount,
  4765. CostReduction
  4766. FROM
  4767. MonthlySavings
  4768. ORDER BY
  4769. Year,
  4770. Month;
  4771. ";
  4772. DataTable dt = Repository().FindTableBySql(sql.ToString());
  4773. if (dt != null && dt.Rows.Count > 0)
  4774. {
  4775. return dt;
  4776. }
  4777. else
  4778. { return null; }
  4779. }
  4780. catch (Exception ex)
  4781. {
  4782. return null;
  4783. }
  4784. }
  4785. #endregion
  4786. #region 采购状态占比
  4787. public DataTable GetCGSDZT()
  4788. {
  4789. try
  4790. {
  4791. string sql = @"-- 假设您有一个名为'OrderDate'的字段来表示订单的日期
  4792. DECLARE @StartDate DATE = DATEADD(MONTH, -1, GETDATE());
  4793. -- CTE来计算每种状态在近一个月内的总订单数量
  4794. WITH StatusSums AS (
  4795. SELECT '' AS Status, ISNULL(SUM(Quantity),0) AS Quantity
  4796. FROM dbo.ICSPurchaseOrder
  4797. WHERE ReleaseState = '0' AND CreateDateTime >= @StartDate
  4798. UNION ALL
  4799. SELECT '' AS Status, ISNULL(SUM(Quantity),0)
  4800. FROM dbo.ICSPurchaseOrder
  4801. WHERE Status = '3' AND CreateDateTime >= @StartDate -- Status字段也在这个表中
  4802. UNION ALL
  4803. SELECT '' AS Status, ISNULL(SUM(a.Quantity),0)
  4804. FROM dbo.ICSPurchaseOrder a
  4805. LEFT JOIN dbo.ICSInventoryLotDetail b ON a.POCode = b.TransCode AND a.Sequence = b.TransSequence
  4806. LEFT JOIN dbo.ICSASNDetail c ON b.LotNo = c.LotNo AND b.WorkPoint = c.WorkPoint
  4807. WHERE a.ReleaseState = '1' AND c.ASNCode IS NULL AND a.CreateDateTime >= @StartDate
  4808. UNION ALL
  4809. SELECT '' AS Status, ISNULL(SUM(a.Quantity),0)
  4810. FROM dbo.ICSPurchaseOrder a
  4811. LEFT JOIN dbo.ICSInventoryLotDetail b ON a.POCode = b.TransCode AND a.Sequence = b.TransSequence
  4812. LEFT JOIN dbo.ICSASNDetail c ON b.LotNo = c.LotNo AND b.WorkPoint = c.WorkPoint
  4813. LEFT JOIN dbo.ICSDeliveryNotice d ON c.ASNCode = d.ASNCode AND c.WorkPoint = d.WorkPoint
  4814. WHERE a.ReleaseState = '1' AND d.DNCode IS NULL AND a.CreateDateTime >= @StartDate
  4815. UNION ALL
  4816. SELECT '' AS Status, ISNULL(SUM(a.Quantity),0)
  4817. FROM dbo.ICSPurchaseOrder a
  4818. LEFT JOIN dbo.ICSInventoryLotDetail b ON a.POCode = b.TransCode AND a.Sequence = b.TransSequence
  4819. LEFT JOIN dbo.ICSASNDetail c ON b.LotNo = c.LotNo AND b.WorkPoint = c.WorkPoint
  4820. LEFT JOIN dbo.ICSDeliveryNotice d ON c.ASNCode = d.ASNCode AND c.WorkPoint = d.WorkPoint
  4821. WHERE a.ReleaseState = '1' AND d.DNCode IS NOT NULL AND a.CreateDateTime >= @StartDate
  4822. ),
  4823. TotalOrders AS (
  4824. SELECT SUM(Quantity) AS TotalQuantity
  4825. FROM (
  4826. SELECT Quantity FROM dbo.ICSPurchaseOrder
  4827. WHERE CreateDateTime >= @StartDate
  4828. UNION ALL
  4829. -- Status或ReleaseState过滤
  4830. SELECT a.Quantity
  4831. FROM dbo.ICSPurchaseOrder a
  4832. LEFT JOIN dbo.ICSInventoryLotDetail b ON a.POCode = b.TransCode AND a.Sequence = b.TransSequence
  4833. LEFT JOIN dbo.ICSASNDetail c ON b.LotNo = c.LotNo AND b.WorkPoint = c.WorkPoint
  4834. WHERE a.CreateDateTime >= @StartDate AND (a.ReleaseState = '0' OR a.ReleaseState = '1')
  4835. --
  4836. ) AS AllOrders
  4837. )
  4838. --
  4839. SELECT
  4840. s.Status,
  4841. s.Quantity,
  4842. ISNULL(CAST(s.Quantity * 100.0 / t.TotalQuantity AS DECIMAL(5, 2)),0) AS Percentage
  4843. FROM
  4844. StatusSums s
  4845. CROSS JOIN
  4846. TotalOrders t
  4847. ORDER BY
  4848. s.Quantity DESC;
  4849. -- TotalOrders时
  4850. --
  4851. ";
  4852. DataTable dt = Repository().FindTableBySql(sql.ToString());
  4853. if (dt != null && dt.Rows.Count > 0)
  4854. {
  4855. return dt;
  4856. }
  4857. else
  4858. { return null; }
  4859. }
  4860. catch (Exception ex)
  4861. {
  4862. return null;
  4863. }
  4864. }
  4865. #endregion
  4866. #region 供应商新进
  4867. public DataTable GetGYSTZ()
  4868. {
  4869. try
  4870. {
  4871. string sql = @"
  4872. (SELECT COUNT(DISTINCT VenCode) AS Qty,'' AS type FROM dbo.ICSVendor WHERE MTIME >= DATEADD(MONTH, -6, GETDATE())) UNION ALL
  4873. (SELECT COUNT(DISTINCT VenCode)AS Qty,'' FROM dbo.ICSVendor WHERE MTIME >= DATEADD(MONTH, -1, GETDATE()))
  4874. ";
  4875. DataTable dt = Repository().FindTableBySql(sql.ToString());
  4876. if (dt != null && dt.Rows.Count > 0)
  4877. {
  4878. return dt;
  4879. }
  4880. else
  4881. { return null; }
  4882. }
  4883. catch (Exception ex)
  4884. {
  4885. return null;
  4886. }
  4887. }
  4888. #endregion
  4889. #region 物料反复使用次数
  4890. public DataTable GetWLCFCGBL()
  4891. {
  4892. try
  4893. {
  4894. string sql = @"SELECT VenCode,SUM( purchase_frequency) AS qty FROM ( SELECT
  4895. InvCode,
  4896. VenCode,
  4897. COUNT(*) AS purchase_frequency
  4898. FROM
  4899. dbo.ICSPurchaseOrder
  4900. WHERE
  4901. MTIME >= DATEADD(MONTH, -3, GETDATE())
  4902. GROUP BY
  4903. InvCode ,
  4904. VenCode
  4905. )aa WHERE purchase_frequency>1
  4906. GROUP BY VenCode
  4907. ";
  4908. DataTable dt = Repository().FindTableBySql(sql.ToString());
  4909. if (dt != null && dt.Rows.Count > 0)
  4910. {
  4911. return dt;
  4912. }
  4913. else
  4914. { return null; }
  4915. }
  4916. catch (Exception ex)
  4917. {
  4918. return null;
  4919. }
  4920. }
  4921. #endregion
  4922. }
  4923. }