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.

4815 lines
233 KiB

3 weeks ago
  1. using Newtonsoft.Json.Linq;
  2. using Newtonsoft.Json;
  3. using NFine.Code;
  4. using NFine.Data.Extensions;
  5. using NFine.Domain._03_Entity.SRM;
  6. using NFine.Repository;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Configuration;
  10. using System.Data.Common;
  11. using System.Data;
  12. using System.IO;
  13. using System.Linq;
  14. using System.Net;
  15. using System.Text;
  16. using System.Threading.Tasks;
  17. using NFine.Application.Entity;
  18. using NFine.Application.Models;
  19. using NFine.Application.WMS;
  20. using System.Web.UI.WebControls;
  21. using System.Net.NetworkInformation;
  22. using System.Collections;
  23. using System.Xml;
  24. using NFine.Domain._03_Entity.WMS;
  25. namespace NFine.Application.KBSWMS
  26. {
  27. public class ICSInspectionReportsApp : RepositoryFactory<ICSVendor>
  28. {
  29. public static DataTable Invmes = new DataTable();
  30. #region
  31. /// <summary>
  32. /// 月度一次检验合格率
  33. /// </summary>
  34. /// <param name="queryJson"></param>
  35. /// <param name="jqgridparam"></param>
  36. /// <returns></returns>
  37. public string GetPassFirstTime(string queryJson)
  38. {
  39. try
  40. {
  41. //站点信息
  42. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  43. DataTable dt = new DataTable();
  44. List<DbParameter> parameter = new List<DbParameter>();
  45. var queryParam = queryJson.ToJObject();
  46. object Figure = GetDecimalDigits();
  47. //获取传递的年份和月份
  48. List<PassFirstTimeModel> passFirstTimeModel = new List<PassFirstTimeModel>();
  49. PassFirstTimeModel passFirstTimeModel1 = new PassFirstTimeModel();
  50. PassFirstTimeModel passFirstTimeModel2 = new PassFirstTimeModel();
  51. PassFirstTimeModel passFirstTimeModel3 = new PassFirstTimeModel();
  52. //获取传递的年份和月份
  53. int year = queryParam["DateNow"].ToString().Substring(0, 4).ToInt();
  54. string date = queryParam["DateNow"].ToString();
  55. var dates = date.ToDate();
  56. var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).ToString("yyyy-MM-dd");
  57. var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
  58. var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
  59. var firstDayofYear = new DateTime(year, 1, 1).ToString("yyyy-MM-dd");
  60. var firstDayofNextYear = new DateTime(year+1, 1, 1).ToString("yyyy-MM-dd");
  61. #region [SQL]
  62. #region fistNGsql 一次不良数量
  63. string fistNGsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
  64. INTO #Table1
  65. FROM ( SELECT
  66. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN
  67. FROM IcsMatCheckResult a
  68. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  69. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  70. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  71. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  72. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  73. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  74. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
  75. )
  76. b where ZZJG='NG' AND CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
  77. GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
  78. order by Week
  79. SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
  80. INTO #MothTable1
  81. FROM ( SELECT
  82. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN
  83. FROM IcsMatCheckResult a
  84. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  85. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  86. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  87. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  88. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  89. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  90. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
  91. ) b where ZZJG='NG' AND CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
  92. GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
  93. SELECT SUM(FistNG) AS WeekNGCount INTO #Table2
  94. FROM #Table1
  95. SELECT SUM(FistNG) AS MonthNGCount INTO #MothTable2
  96. FROM #MothTable1
  97. SELECT b.FistNG,a.Num WeeK INTO #Table3
  98. FROM [ICSWeek] a
  99. left JOIN #Table1 b ON a.Num=b.Week
  100. UNION
  101. SELECT b.FistNG,a.ENum FROM [ICSMonth] a
  102. left JOIN #MothTable1 b ON a.ENum=b.Month
  103. DECLARE @cols AS NVARCHAR(MAX)
  104. SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
  105. FROM #Table3 dr
  106. FOR XML PATH(''), TYPE
  107. ).value('.', 'NVARCHAR(MAX)') +']'
  108. ,1,2,'')
  109. --SELECT * FROM #Table3
  110. SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
  111. PIVOT ( SUM(FistNG) FOR Week IN ('+
  112. @cols+') )a
  113. '
  114. PRINT(@cols)
  115. EXEC(@cols)
  116. DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1 ";
  117. #endregion
  118. #region IncomingMterialssql 来料数量
  119. string incomingMterialssql = $@"SELECT DISTINCT
  120. a.InvCode,
  121. COALESCE(D.ASNCode, E.OASNCode) AS ASNCode,
  122. F.BatchCode,
  123. SUM(A.Quantity) AS InvBatcgQty,
  124. COALESCE(D.MUSER, E.MUSER) AS VenCode,
  125. COALESCE(D.MUSERName, E.MUSERName) AS VENNAME,
  126. CONVERT(DATE, a.MTIME) AS CHUJIANSHIJIAN --
  127. into #tableMJ1
  128. FROM
  129. ICSWareHouseLotInfoLog a WITH (NOLOCK)
  130. INNER JOIN
  131. ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
  132. LEFT JOIN
  133. ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
  134. LEFT JOIN
  135. ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
  136. LEFT JOIN
  137. ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
  138. LEFT JOIN
  139. ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
  140. LEFT JOIN
  141. ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
  142. LEFT JOIN
  143. ICSInspection g WITH (NOLOCK) ON g.LotNo = a.LotNo AND g.WorkPoint = a.WorkPoint
  144. WHERE
  145. (a.BusinessCode = '1' OR a.BusinessCode = '9')
  146. AND g.id IS NULL
  147. AND a.MUSER <> 'admin'
  148. AND CONVERT(DATE, a.MTIME) BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
  149. GROUP BY
  150. a.InvCode,
  151. COALESCE(D.ASNCode, E.OASNCode),
  152. F.BatchCode,
  153. COALESCE(D.MUSER, E.MUSER),
  154. COALESCE(D.MUSERName, E.MUSERName),
  155. CONVERT(DATE, a.MTIME),
  156. A.MUSERName,
  157. A.TransCode
  158. SELECT DISTINCT
  159. a.InvCode,
  160. COALESCE(D.ASNCode, E.OASNCode) AS ASNCode,
  161. F.BatchCode,
  162. SUM(A.Quantity) AS InvBatcgQty,
  163. COALESCE(D.MUSER, E.MUSER) AS VenCode,
  164. COALESCE(D.MUSERName, E.MUSERName) AS VENNAME,
  165. CONVERT(DATE, a.MTIME) AS CHUJIANSHIJIAN --
  166. into #tableMJ2
  167. FROM
  168. ICSWareHouseLotInfoLog a WITH (NOLOCK)
  169. INNER JOIN
  170. ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
  171. LEFT JOIN
  172. ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
  173. LEFT JOIN
  174. ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
  175. LEFT JOIN
  176. ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
  177. LEFT JOIN
  178. ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
  179. LEFT JOIN
  180. ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
  181. LEFT JOIN
  182. ICSInspection g WITH (NOLOCK) ON g.LotNo = a.LotNo AND g.WorkPoint = a.WorkPoint
  183. WHERE
  184. (a.BusinessCode = '1' OR a.BusinessCode = '9')
  185. AND g.id IS NULL
  186. AND a.MUSER <> 'admin'
  187. AND CONVERT(DATE, a.MTIME) BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
  188. GROUP BY
  189. a.InvCode,
  190. COALESCE(D.ASNCode, E.OASNCode),
  191. F.BatchCode,
  192. COALESCE(D.MUSER, E.MUSER),
  193. COALESCE(D.MUSERName, E.MUSERName),
  194. CONVERT(DATE, a.MTIME),
  195. A.MUSERName,
  196. A.TransCode
  197. SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
  198. INTO #Table1
  199. FROM ( SELECT
  200. a.InvCode ,a.IQCGroupHeaderResult ZZJG, CONVERT(DATE, a.FirstCheckTime) CHUJIANSHIJIAN
  201. FROM IcsMatCheckResult a WITH (NOLOCK)
  202. LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  203. LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  204. LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
  205. LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
  206. LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
  207. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo WHERE CONVERT(DATE, a.FirstCheckTime) BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
  208. UNION ALL
  209. SELECT InvCode,'' ZZJG,CHUJIANSHIJIAN from #tableMJ1
  210. )
  211. b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
  212. GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
  213. order by Week
  214. SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
  215. INTO #MothTable1
  216. FROM ( SELECT
  217. a.InvCode ,a.IQCGroupHeaderResult ZZJG, CONVERT(DATE, a.FirstCheckTime) CHUJIANSHIJIAN
  218. FROM IcsMatCheckResult a WITH (NOLOCK)
  219. LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  220. LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  221. LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
  222. LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
  223. LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
  224. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
  225. WHERE CONVERT(DATE, a.FirstCheckTime) BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
  226. UNION ALL
  227. SELECT InvCode,'' ZZJG,CHUJIANSHIJIAN from #tableMJ2
  228. )
  229. b where CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
  230. GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
  231. SELECT SUM(FistNG) AS WeekNGCount INTO #Table2
  232. FROM #Table1
  233. SELECT SUM(FistNG) AS MonthNGCount INTO #MothTable2
  234. FROM #MothTable1
  235. SELECT b.FistNG,a.Num WeeK INTO #Table3
  236. FROM [ICSWeek] a
  237. left JOIN #Table1 b ON a.Num=b.Week
  238. UNION
  239. SELECT b.FistNG,a.ENum FROM [ICSMonth] a
  240. left JOIN #MothTable1 b ON a.ENum=b.Month
  241. DECLARE @cols AS NVARCHAR(MAX)
  242. SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
  243. FROM #Table3 dr
  244. FOR XML PATH(''), TYPE
  245. ).value('.', 'NVARCHAR(MAX)') +']'
  246. ,1,2,'')
  247. SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
  248. PIVOT ( SUM(FistNG) FOR Week IN ('+
  249. @cols+') )a
  250. '
  251. PRINT(@cols)
  252. EXEC(@cols)
  253. DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1 DROP TABLE #tableMJ1 DROP TABLE #tableMJ2
  254. ";
  255. #endregion
  256. #region 复判ng sencondNgsql
  257. string sencondNgsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS SecondNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
  258. INTO #Table1
  259. FROM ( SELECT
  260. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  261. case when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc
  262. FROM IcsMatCheckResult a
  263. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  264. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  265. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  266. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  267. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  268. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  269. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
  270. )
  271. b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}' and ZZJG='NG' AND BRGDesc='NG'
  272. GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
  273. order by Week
  274. SELECT DISTINCT isnull(COUNT(*),0) AS SecondNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
  275. INTO #MothTable1
  276. FROM ( SELECT
  277. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  278. case when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc
  279. FROM IcsMatCheckResult a
  280. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  281. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  282. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  283. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  284. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  285. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  286. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
  287. )
  288. b where CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}' and ZZJG='NG' AND BRGDesc='NG'
  289. GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
  290. SELECT SUM(SecondNG) AS WeekNGCount INTO #Table2
  291. FROM #Table1
  292. SELECT SUM(SecondNG) AS MonthNGCount INTO #MothTable2
  293. FROM #MothTable1
  294. SELECT b.SecondNG,a.Num WeeK INTO #Table3
  295. FROM [ICSWeek] a
  296. left JOIN #Table1 b ON a.Num=b.Week
  297. UNION
  298. SELECT b.SecondNG,a.ENum FROM [ICSMonth] a
  299. left JOIN #MothTable1 b ON a.ENum=b.Month
  300. DECLARE @cols AS NVARCHAR(MAX)
  301. SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
  302. FROM #Table3 dr
  303. FOR XML PATH(''), TYPE
  304. ).value('.', 'NVARCHAR(MAX)') +']'
  305. ,1,2,'')
  306. --SELECT * FROM #Table3
  307. SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
  308. PIVOT ( SUM(SecondNG) FOR Week IN ('+
  309. @cols+') )a
  310. '
  311. PRINT(@cols)
  312. EXEC(@cols)
  313. DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
  314. ";
  315. #endregion
  316. #region 待判中 underReRudgmentsql
  317. string underReRudgmentsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS UnderReRudgment, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
  318. INTO #Table1
  319. FROM ( SELECT
  320. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  321. case when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc,a.Result JYXJG,
  322. CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
  323. ELSE '否' END AS SFJA
  324. FROM IcsMatCheckResult a
  325. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  326. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  327. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  328. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  329. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  330. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  331. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
  332. )
  333. b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}' and ZZJG='NG' AND BRGDesc='NG' AND JYXJG='NG' AND SFJA='否'
  334. GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
  335. order by Week
  336. SELECT DISTINCT isnull(COUNT(*),0) AS UnderReRudgment, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
  337. INTO #MothTable1
  338. FROM ( SELECT
  339. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  340. case when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc,a.Result JYXJG,
  341. CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
  342. ELSE '否' END AS SFJA
  343. FROM IcsMatCheckResult a
  344. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  345. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  346. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  347. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  348. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  349. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  350. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
  351. )
  352. b where ZZJG='NG' AND BRGDesc='NG' AND JYXJG='NG' AND SFJA='否' and CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
  353. GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
  354. SELECT SUM(UnderReRudgment) AS WeekNGCount INTO #Table2
  355. FROM #Table1
  356. SELECT SUM(UnderReRudgment) AS MonthNGCount INTO #MothTable2
  357. FROM #MothTable1
  358. SELECT b.UnderReRudgment,a.Num WeeK INTO #Table3
  359. FROM [ICSWeek] a
  360. left JOIN #Table1 b ON a.Num=b.Week
  361. UNION
  362. SELECT b.UnderReRudgment,a.ENum FROM [ICSMonth] a
  363. left JOIN #MothTable1 b ON a.ENum=b.Month
  364. DECLARE @cols AS NVARCHAR(MAX)
  365. SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
  366. FROM #Table3 dr
  367. FOR XML PATH(''), TYPE
  368. ).value('.', 'NVARCHAR(MAX)') +']'
  369. ,1,2,'')
  370. --SELECT * FROM #Table3
  371. SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
  372. PIVOT ( SUM(UnderReRudgment) FOR Week IN ('+
  373. @cols+') )a
  374. '
  375. PRINT(@cols)
  376. EXEC(@cols)
  377. DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
  378. ";
  379. #endregion
  380. #endregion
  381. var dt1 = SqlHelper.CmdExecuteDataTable(incomingMterialssql);
  382. var dt2 = SqlHelper.CmdExecuteDataTable(fistNGsql);
  383. var dt3 = SqlHelper.CmdExecuteDataTable(sencondNgsql);
  384. var dt4 = SqlHelper.CmdExecuteDataTable(underReRudgmentsql);
  385. passFirstTimeModel1.Decomposition1 = "TOTAL(一次检验合格率)";
  386. passFirstTimeModel2.Decomposition1 = "不良率(对外改善)";
  387. passFirstTimeModel3.Decomposition1 = "复判合格率(对内改善)";
  388. passFirstTimeModel1.Decomposition2 = "";
  389. passFirstTimeModel2.Decomposition2 = "";
  390. passFirstTimeModel3.Decomposition2 = "";
  391. var data = PassCount(new List<string> {
  392. "Week1", "Week2", "Week3", "Week4", "Week5", "Week6",
  393. "Month1",
  394. "Month2",
  395. "Month3",
  396. "Month4",
  397. "Month5",
  398. "Month6",
  399. "Month7",
  400. "Month8",
  401. "Month9",
  402. "Month10",
  403. "Month11",
  404. "Month12","MonthlyCumulative","AnnualAccumulation"},
  405. dt1, dt2, dt3, dt4);
  406. #region 周数据
  407. passFirstTimeModel1.Week1 = data["Week1"].V1;
  408. passFirstTimeModel3.Week1 = data["Week1"].V2;
  409. passFirstTimeModel2.Week1 = data["Week1"].V3;
  410. passFirstTimeModel1.Week2 = data["Week2"].V1;
  411. passFirstTimeModel3.Week2 = data["Week2"].V2;
  412. passFirstTimeModel2.Week2 = data["Week2"].V3;
  413. passFirstTimeModel1.Week3 = data["Week3"].V1;
  414. passFirstTimeModel3.Week3 = data["Week3"].V2;
  415. passFirstTimeModel2.Week3 = data["Week3"].V3;
  416. passFirstTimeModel1.Week4 = data["Week4"].V1;
  417. passFirstTimeModel3.Week4 = data["Week4"].V2;
  418. passFirstTimeModel2.Week4 = data["Week4"].V3;
  419. passFirstTimeModel1.Week5 = data["Week5"].V1;
  420. passFirstTimeModel3.Week5 = data["Week5"].V2;
  421. passFirstTimeModel2.Week5 = data["Week5"].V3;
  422. passFirstTimeModel1.Week6 = data["Week6"].V1;
  423. passFirstTimeModel3.Week6 = data["Week6"].V2;
  424. passFirstTimeModel2.Week6 = data["Week6"].V3;
  425. #endregion
  426. #region 月数据
  427. passFirstTimeModel1.Month1 = data["Month1"].V1;
  428. passFirstTimeModel3.Month1 = data["Month1"].V2;
  429. passFirstTimeModel2.Month1 = data["Month1"].V3;
  430. passFirstTimeModel1.Month2 = data["Month2"].V1;
  431. passFirstTimeModel3.Month2 = data["Month2"].V2;
  432. passFirstTimeModel2.Month2 = data["Month2"].V3;
  433. passFirstTimeModel1.Month3 = data["Month3"].V1;
  434. passFirstTimeModel3.Month3 = data["Month3"].V2;
  435. passFirstTimeModel2.Month3 = data["Month3"].V3;
  436. passFirstTimeModel1.Month4 = data["Month4"].V1;
  437. passFirstTimeModel3.Month4 = data["Month4"].V2;
  438. passFirstTimeModel2.Month4 = data["Month4"].V3;
  439. passFirstTimeModel1.Month5 = data["Month5"].V1;
  440. passFirstTimeModel3.Month5 = data["Month5"].V2;
  441. passFirstTimeModel2.Month5 = data["Month5"].V3;
  442. passFirstTimeModel1.Month6 = data["Month6"].V1;
  443. passFirstTimeModel3.Month6 = data["Month6"].V2;
  444. passFirstTimeModel2.Month6 = data["Month6"].V3;
  445. passFirstTimeModel1.Month7 = data["Month7"].V1;
  446. passFirstTimeModel3.Month7 = data["Month7"].V2;
  447. passFirstTimeModel2.Month7 = data["Month7"].V3;
  448. passFirstTimeModel1.Month8 = data["Month8"].V1;
  449. passFirstTimeModel3.Month8 = data["Month8"].V2;
  450. passFirstTimeModel2.Month8 = data["Month8"].V3;
  451. passFirstTimeModel1.Month9 = data["Month9"].V1;
  452. passFirstTimeModel3.Month9 = data["Month9"].V2;
  453. passFirstTimeModel2.Month9 = data["Month9"].V3;
  454. passFirstTimeModel1.Month10 = data["Month10"].V1;
  455. passFirstTimeModel3.Month10 = data["Month10"].V2;
  456. passFirstTimeModel2.Month10 = data["Month10"].V3;
  457. passFirstTimeModel1.Month11 = data["Month11"].V1;
  458. passFirstTimeModel3.Month11 = data["Month11"].V2;
  459. passFirstTimeModel2.Month11 = data["Month11"].V3;
  460. passFirstTimeModel1.Month12 = data["Month12"].V1;
  461. passFirstTimeModel3.Month12 = data["Month12"].V2;
  462. passFirstTimeModel2.Month12 = data["Month12"].V3;
  463. #endregion
  464. #region 汇总
  465. passFirstTimeModel1.MonthlyCumulative = data["MonthlyCumulative"].V1;
  466. passFirstTimeModel3.MonthlyCumulative = data["MonthlyCumulative"].V2;
  467. passFirstTimeModel2.MonthlyCumulative = data["MonthlyCumulative"].V3;
  468. passFirstTimeModel1.AnnualAccumulation = data["AnnualAccumulation"].V1;
  469. passFirstTimeModel3.AnnualAccumulation = data["AnnualAccumulation"].V2;
  470. passFirstTimeModel2.AnnualAccumulation = data["AnnualAccumulation"].V3;
  471. #endregion
  472. passFirstTimeModel.Add(passFirstTimeModel1);
  473. passFirstTimeModel.Add(passFirstTimeModel2);
  474. passFirstTimeModel.Add(passFirstTimeModel3);
  475. return passFirstTimeModel.ToJson();
  476. }
  477. catch (Exception ex)
  478. {
  479. return ex.Message;
  480. }
  481. }
  482. public DataTable ExportAll1(string DateNow)
  483. {
  484. string date = DateNow;
  485. var dates = date.ToDate();
  486. var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).ToString("yyyy-MM-dd");
  487. var daysMonth = dates.ToString("MM");
  488. var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
  489. var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
  490. var firstDayofYear = new DateTime(dates.Year, 1, 1).ToString("yyyy-MM-dd");
  491. var firstDayofNextYear = new DateTime(dates.Year + 1, 1, 1).ToString("yyyy-MM-dd");
  492. #region [SQL]
  493. //获取传递的年份和月份
  494. #region [SQL]
  495. #region fistNGsql 一次不良数量
  496. string fistNGsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
  497. INTO #Table1
  498. FROM ( SELECT
  499. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN
  500. FROM IcsMatCheckResult a
  501. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  502. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  503. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  504. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  505. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  506. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  507. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
  508. )
  509. b where ZZJG='NG' AND CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
  510. GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
  511. order by Week
  512. SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
  513. INTO #MothTable1
  514. FROM ( SELECT
  515. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN
  516. FROM IcsMatCheckResult a
  517. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  518. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  519. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  520. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  521. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  522. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  523. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
  524. ) b where ZZJG='NG' AND CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
  525. GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
  526. SELECT SUM(FistNG) AS WeekNGCount INTO #Table2
  527. FROM #Table1
  528. SELECT SUM(FistNG) AS MonthNGCount INTO #MothTable2
  529. FROM #MothTable1
  530. SELECT b.FistNG,a.Num WeeK INTO #Table3
  531. FROM [ICSWeek] a
  532. left JOIN #Table1 b ON a.Num=b.Week
  533. UNION
  534. SELECT b.FistNG,a.ENum FROM [ICSMonth] a
  535. left JOIN #MothTable1 b ON a.ENum=b.Month
  536. DECLARE @cols AS NVARCHAR(MAX)
  537. SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
  538. FROM #Table3 dr
  539. FOR XML PATH(''), TYPE
  540. ).value('.', 'NVARCHAR(MAX)') +']'
  541. ,1,2,'')
  542. --SELECT * FROM #Table3
  543. SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
  544. PIVOT ( SUM(FistNG) FOR Week IN ('+
  545. @cols+') )a
  546. '
  547. PRINT(@cols)
  548. EXEC(@cols)
  549. DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1 ";
  550. #endregion
  551. #region IncomingMterialssql 来料数量
  552. string incomingMterialssql = $@"SELECT DISTINCT
  553. a.InvCode,
  554. COALESCE(D.ASNCode, E.OASNCode) AS ASNCode,
  555. F.BatchCode,
  556. SUM(A.Quantity) AS InvBatcgQty,
  557. COALESCE(D.MUSER, E.MUSER) AS VenCode,
  558. COALESCE(D.MUSERName, E.MUSERName) AS VENNAME,
  559. CONVERT(DATE, a.MTIME) AS CHUJIANSHIJIAN --
  560. into #tableMJ1
  561. FROM
  562. ICSWareHouseLotInfoLog a WITH (NOLOCK)
  563. INNER JOIN
  564. ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
  565. LEFT JOIN
  566. ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
  567. LEFT JOIN
  568. ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
  569. LEFT JOIN
  570. ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
  571. LEFT JOIN
  572. ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
  573. LEFT JOIN
  574. ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
  575. LEFT JOIN
  576. ICSInspection g WITH (NOLOCK) ON g.LotNo = a.LotNo AND g.WorkPoint = a.WorkPoint
  577. WHERE
  578. (a.BusinessCode = '1' OR a.BusinessCode = '9')
  579. AND g.id IS NULL
  580. AND a.MUSER <> 'admin'
  581. AND CONVERT(DATE, a.MTIME) BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
  582. GROUP BY
  583. a.InvCode,
  584. COALESCE(D.ASNCode, E.OASNCode),
  585. F.BatchCode,
  586. COALESCE(D.MUSER, E.MUSER),
  587. COALESCE(D.MUSERName, E.MUSERName),
  588. CONVERT(DATE, a.MTIME),
  589. A.MUSERName,
  590. A.TransCode
  591. SELECT DISTINCT
  592. a.InvCode,
  593. COALESCE(D.ASNCode, E.OASNCode) AS ASNCode,
  594. F.BatchCode,
  595. SUM(A.Quantity) AS InvBatcgQty,
  596. COALESCE(D.MUSER, E.MUSER) AS VenCode,
  597. COALESCE(D.MUSERName, E.MUSERName) AS VENNAME,
  598. CONVERT(DATE, a.MTIME) AS CHUJIANSHIJIAN --
  599. into #tableMJ2
  600. FROM
  601. ICSWareHouseLotInfoLog a WITH (NOLOCK)
  602. INNER JOIN
  603. ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
  604. LEFT JOIN
  605. ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
  606. LEFT JOIN
  607. ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
  608. LEFT JOIN
  609. ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
  610. LEFT JOIN
  611. ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
  612. LEFT JOIN
  613. ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
  614. LEFT JOIN
  615. ICSInspection g WITH (NOLOCK) ON g.LotNo = a.LotNo AND g.WorkPoint = a.WorkPoint
  616. WHERE
  617. (a.BusinessCode = '1' OR a.BusinessCode = '9')
  618. AND g.id IS NULL
  619. AND a.MUSER <> 'admin'
  620. AND CONVERT(DATE, a.MTIME) BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
  621. GROUP BY
  622. a.InvCode,
  623. COALESCE(D.ASNCode, E.OASNCode),
  624. F.BatchCode,
  625. COALESCE(D.MUSER, E.MUSER),
  626. COALESCE(D.MUSERName, E.MUSERName),
  627. CONVERT(DATE, a.MTIME),
  628. A.MUSERName,
  629. A.TransCode
  630. SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
  631. INTO #Table1
  632. FROM ( SELECT
  633. a.InvCode ,a.IQCGroupHeaderResult ZZJG, CONVERT(DATE, a.FirstCheckTime) CHUJIANSHIJIAN
  634. FROM IcsMatCheckResult a WITH (NOLOCK)
  635. LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  636. LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  637. LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
  638. LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
  639. LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
  640. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo WHERE CONVERT(DATE, a.FirstCheckTime) BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
  641. UNION ALL
  642. SELECT InvCode,'' ZZJG,CHUJIANSHIJIAN from #tableMJ1
  643. )
  644. b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
  645. GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
  646. order by Week
  647. SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
  648. INTO #MothTable1
  649. FROM ( SELECT
  650. a.InvCode ,a.IQCGroupHeaderResult ZZJG, CONVERT(DATE, a.FirstCheckTime) CHUJIANSHIJIAN
  651. FROM IcsMatCheckResult a WITH (NOLOCK)
  652. LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  653. LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  654. LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
  655. LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
  656. LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
  657. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
  658. WHERE CONVERT(DATE, a.FirstCheckTime) BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
  659. UNION ALL
  660. SELECT InvCode,'' ZZJG,CHUJIANSHIJIAN from #tableMJ2
  661. )
  662. b where CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
  663. GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
  664. SELECT SUM(FistNG) AS WeekNGCount INTO #Table2
  665. FROM #Table1
  666. SELECT SUM(FistNG) AS MonthNGCount INTO #MothTable2
  667. FROM #MothTable1
  668. SELECT b.FistNG,a.Num WeeK INTO #Table3
  669. FROM [ICSWeek] a
  670. left JOIN #Table1 b ON a.Num=b.Week
  671. UNION
  672. SELECT b.FistNG,a.ENum FROM [ICSMonth] a
  673. left JOIN #MothTable1 b ON a.ENum=b.Month
  674. DECLARE @cols AS NVARCHAR(MAX)
  675. SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
  676. FROM #Table3 dr
  677. FOR XML PATH(''), TYPE
  678. ).value('.', 'NVARCHAR(MAX)') +']'
  679. ,1,2,'')
  680. SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
  681. PIVOT ( SUM(FistNG) FOR Week IN ('+
  682. @cols+') )a
  683. '
  684. PRINT(@cols)
  685. EXEC(@cols)
  686. DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1 DROP TABLE #tableMJ1 DROP TABLE #tableMJ2
  687. ";
  688. #endregion
  689. #region 复判ng sencondNgsql
  690. string sencondNgsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS SecondNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
  691. INTO #Table1
  692. FROM ( SELECT
  693. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  694. case when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc
  695. FROM IcsMatCheckResult a
  696. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  697. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  698. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  699. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  700. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  701. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  702. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
  703. )
  704. b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}' and ZZJG='NG' AND BRGDesc='NG'
  705. GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
  706. order by Week
  707. SELECT DISTINCT isnull(COUNT(*),0) AS SecondNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
  708. INTO #MothTable1
  709. FROM ( SELECT
  710. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  711. case when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc
  712. FROM IcsMatCheckResult a
  713. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  714. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  715. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  716. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  717. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  718. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  719. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
  720. )
  721. b where CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}' and ZZJG='NG' AND BRGDesc='NG'
  722. GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
  723. SELECT SUM(SecondNG) AS WeekNGCount INTO #Table2
  724. FROM #Table1
  725. SELECT SUM(SecondNG) AS MonthNGCount INTO #MothTable2
  726. FROM #MothTable1
  727. SELECT b.SecondNG,a.Num WeeK INTO #Table3
  728. FROM [ICSWeek] a
  729. left JOIN #Table1 b ON a.Num=b.Week
  730. UNION
  731. SELECT b.SecondNG,a.ENum FROM [ICSMonth] a
  732. left JOIN #MothTable1 b ON a.ENum=b.Month
  733. DECLARE @cols AS NVARCHAR(MAX)
  734. SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
  735. FROM #Table3 dr
  736. FOR XML PATH(''), TYPE
  737. ).value('.', 'NVARCHAR(MAX)') +']'
  738. ,1,2,'')
  739. --SELECT * FROM #Table3
  740. SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
  741. PIVOT ( SUM(SecondNG) FOR Week IN ('+
  742. @cols+') )a
  743. '
  744. PRINT(@cols)
  745. EXEC(@cols)
  746. DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
  747. ";
  748. #endregion
  749. #region 待判中 underReRudgmentsql
  750. string underReRudgmentsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS UnderReRudgment, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
  751. INTO #Table1
  752. FROM ( SELECT
  753. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  754. case when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc,a.Result JYXJG,
  755. CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
  756. ELSE '否' END AS SFJA
  757. FROM IcsMatCheckResult a
  758. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  759. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  760. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  761. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  762. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  763. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  764. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
  765. )
  766. b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}' and ZZJG='NG' AND BRGDesc='NG' AND JYXJG='NG' AND SFJA='否'
  767. GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
  768. order by Week
  769. SELECT DISTINCT isnull(COUNT(*),0) AS UnderReRudgment, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
  770. INTO #MothTable1
  771. FROM ( SELECT
  772. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  773. case when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc,a.Result JYXJG,
  774. CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
  775. ELSE '否' END AS SFJA
  776. FROM IcsMatCheckResult a
  777. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  778. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  779. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  780. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  781. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  782. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  783. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
  784. )
  785. b where ZZJG='NG' AND BRGDesc='NG' AND JYXJG='NG' AND SFJA='否' and CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
  786. GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
  787. SELECT SUM(UnderReRudgment) AS WeekNGCount INTO #Table2
  788. FROM #Table1
  789. SELECT SUM(UnderReRudgment) AS MonthNGCount INTO #MothTable2
  790. FROM #MothTable1
  791. SELECT b.UnderReRudgment,a.Num WeeK INTO #Table3
  792. FROM [ICSWeek] a
  793. left JOIN #Table1 b ON a.Num=b.Week
  794. UNION
  795. SELECT b.UnderReRudgment,a.ENum FROM [ICSMonth] a
  796. left JOIN #MothTable1 b ON a.ENum=b.Month
  797. DECLARE @cols AS NVARCHAR(MAX)
  798. SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
  799. FROM #Table3 dr
  800. FOR XML PATH(''), TYPE
  801. ).value('.', 'NVARCHAR(MAX)') +']'
  802. ,1,2,'')
  803. --SELECT * FROM #Table3
  804. SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
  805. PIVOT ( SUM(UnderReRudgment) FOR Week IN ('+
  806. @cols+') )a
  807. '
  808. PRINT(@cols)
  809. EXEC(@cols)
  810. DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
  811. ";
  812. #endregion
  813. #endregion
  814. var dt1 = SqlHelper.CmdExecuteDataTable(incomingMterialssql);
  815. var dt2 = SqlHelper.CmdExecuteDataTable(fistNGsql);
  816. var dt3 = SqlHelper.CmdExecuteDataTable(sencondNgsql);
  817. var dt4 = SqlHelper.CmdExecuteDataTable(underReRudgmentsql);
  818. // 创建一个新的 DataTable
  819. DataTable table = new DataTable();
  820. // 添加列到 DataTable
  821. table.Columns.Add("分解指标", typeof(string));
  822. DataRow row1 = table.NewRow();
  823. DataRow row2 = table.NewRow();
  824. DataRow row3 = table.NewRow();
  825. row1["分解指标"] = "TOTAL(一次检验合格率)";
  826. row2["分解指标"] = "不良率(对外改善)";
  827. row3["分解指标"] = "复判合格率(对内改善)";
  828. var data = PassCount(new List<string> {
  829. "Week1", "Week2", "Week3", "Week4", "Week5", "Week6",
  830. "Month1",
  831. "Month2",
  832. "Month3",
  833. "Month4",
  834. "Month5",
  835. "Month6",
  836. "Month7",
  837. "Month8",
  838. "Month9",
  839. "Month10",
  840. "Month11",
  841. "Month12","MonthlyCumulative","AnnualAccumulation"},
  842. dt1, dt2, dt3, dt4);
  843. // 添加月份和周次的列
  844. string[] weeksInJanuary = { $"{daysMonth}月第1周", $"{daysMonth}月第2周", $"{daysMonth}月第3周", $"{daysMonth}月第4周", $"{daysMonth}月第5周", $"{daysMonth}月第6周" };
  845. for (int j = 0; j < weeksInJanuary.Length; j++)
  846. {
  847. string week = weeksInJanuary[j];
  848. int i = j + 1;
  849. table.Columns.Add(week, typeof(string));
  850. row1[week] = data["Week" + i].V1 + "%";
  851. row2[week] = data["Week" + i].V3 + "%";
  852. row3[week] = data["Week" + i].V2 + "%";
  853. }
  854. table.Columns.Add("当月累计", typeof(string));
  855. row1["当月累计"] = data["MonthlyCumulative"].V1 + "%";
  856. row2["当月累计"] = data["MonthlyCumulative"].V3 + "%";
  857. row3["当月累计"] = data["MonthlyCumulative"].V2 + "%";
  858. // 添加月份的列
  859. string[] months = { "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月" };
  860. for (int j = 0; j < months.Length; j++)
  861. {
  862. string month = months[j];
  863. int i = j + 1;
  864. table.Columns.Add(month, typeof(string));
  865. row1[month] = data["Month" + i].V1 + "%";
  866. row2[month] = data["Month" + i].V3 + "%";
  867. row3[month] = data["Month" + i].V2 + "%";
  868. }
  869. table.Columns.Add("年度累计", typeof(string));
  870. row1["年度累计"] = data["AnnualAccumulation"].V1+"%";
  871. row2["年度累计"] = data["AnnualAccumulation"].V3+"%";
  872. row3["年度累计"] = data["AnnualAccumulation"].V2 + "%";
  873. table.Rows.Add(row1);
  874. table.Rows.Add(row2);
  875. table.Rows.Add(row3);
  876. return table;
  877. #endregion
  878. }
  879. private Dictionary<string,dynamic> PassCount(List<string> weeks,
  880. DataTable dt1, DataTable dt2, DataTable dt3, DataTable dt4)
  881. {
  882. Dictionary<string, dynamic> result = new Dictionary<string, dynamic>();
  883. foreach (var item in weeks)
  884. {
  885. decimal tmp1 = dt1.Rows[0][item].ToDecimal();
  886. decimal tmp2 = dt2.Rows[0][item].ToDecimal();
  887. decimal tmp3 = dt3.Rows[0][item].ToDecimal();
  888. decimal tmp4 = dt4.Rows[0][item].ToDecimal();
  889. decimal v1 = tmp1 == 0 ? 0 : Math.Round((tmp1 - tmp2) / tmp1 * 100, 1);
  890. decimal v2 = tmp1==0?0:(tmp1 - tmp4) == 0 ? 0 : Math.Round((tmp2 - tmp3) / (tmp1 - tmp4) * 100, 1);
  891. decimal v3 = tmp1 == 0 ? 0 : 100 - v1- v2;
  892. result.Add(item,new {
  893. V1 = v1,
  894. V2 = v3,
  895. V3 = v2
  896. });
  897. }
  898. return result;
  899. }
  900. private decimal Count(string a, string b)
  901. {
  902. var x = a.ToDecimal();
  903. if (x == 0)
  904. return 0;
  905. return Math.Round((x - b.ToDecimal()) /x * 100, 1);
  906. }
  907. #endregion
  908. #region
  909. /// <summary>
  910. /// 对外改善异常追踪表
  911. /// </summary>
  912. /// <param name="queryJson"></param>
  913. /// <param name="jqgridparam"></param>
  914. /// <returns></returns>
  915. public DataTable GetPassFirstTime2(string queryJson)
  916. {
  917. //站点信息
  918. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  919. DataTable dt = new DataTable();
  920. List<DbParameter> parameter = new List<DbParameter>();
  921. var queryParam = queryJson.ToJObject();
  922. object Figure = GetDecimalDigits();
  923. //获取传递的年份和月份
  924. int year = queryParam["DateNow"].ToString().Substring(0, 4).ToInt();
  925. string date = queryParam["DateNow"].ToString();
  926. var dates = date.ToDate();
  927. var Year = new DateTime(dates.Year, 1, 1).ToString("yyyy-MM-dd") ;
  928. var WYear= new DateTime(dates.AddYears(1).Year, 1, 1).ToString("yyyy-MM-dd");
  929. var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).ToString("yyyy-MM-dd");
  930. var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
  931. var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
  932. #region [SQL]
  933. string sql = @"
  934. SELECT DISTINCT COUNT(*) AS GS, BRGDesc,A.BadReasonDesc,'周'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{0}'))+1) AS ZB
  935. INTO #Table1 FROM (SELECT DISTINCT
  936. CASE when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc,--
  937. CASE when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX1.BadReasonDesc END AS BadReasonDesc,--
  938. BLFL.BadDesc,
  939. a.IQCHeaderTime,
  940. FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  941. a.EATTRIBUTE1 SQEFA,
  942. CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
  943. ELSE '否' END AS SFJA
  944. FROM IcsMatCheckResult a
  945. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  946. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  947. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  948. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  949. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  950. UNION ALL
  951. SELECT DISTINCT
  952. '' BRGDesc,'' BadReasonDesc,'' BadDesc,NULL IQCHeaderTime,'' SQEFA,
  953. '' SFJA,'' CHUJIANSHIJIAN
  954. FROM ICSWareHouseLotInfoLog a WITH(NOLOCK)
  955. INNER JOIN ICSWareHouseLotInfo b WITH(NOLOCK) on a.LotNo=b.LotNo
  956. LEFT JOIN ICSInventory C WITH(NOLOCK) ON C.InvCode=A.InvCode
  957. LEFT JOIN ICSASNDetail D WITH(NOLOCK) ON D.LotNo=A.LotNo
  958. LEFT JOIN ICSOASNDetail E WITH(NOLOCK) ON E.LotNo=A.LotNo
  959. LEFT JOIN ICSInventoryLoT EE WITH(NOLOCK) ON EE.LotNo=A.LotNo
  960. LEFT JOIN ICSExtension F WITH(NOLOCK) ON F.ID=EE.ExtensionID
  961. LEFT JOIN ICSInspection G WITH(NOLOCK) ON a.lotno=G.lotno
  962. WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.lotno IS NOT NULL
  963. and a.MUSER<>'admin'
  964. GROUP BY a.InvCode,C.InvName,C.InvStd, REPLACE(C.ClassName, '', ''),ISNULL(D.ASNCode,E.OASNCode),F.BatchCode,
  965. ISNULL(D.MUSER,E.MUSER),ISNULL(D.MUSERName,E.MUSERName),FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy/MM/dd'),A.MUSERName,A.TransCode
  966. ) A WHERE 1=1 AND A.BRGDesc<>'' and A.BRGDesc IS NOT NULL AND A.BRGDesc<>'NG' AND A.SFJA='是' AND A.BadReasonDesc IS NOT NULL
  967. AND CHUJIANSHIJIAN BETWEEN '{0}' AND '{1}'
  968. GROUP BY BRGDesc,A.BadReasonDesc,CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{0}'))+1)
  969. SELECT DISTINCT COUNT(*) AS GS, BRGDesc,A.BadReasonDesc,'月'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS ZB
  970. INTO #MothTable1 FROM (SELECT DISTINCT
  971. CASE when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc,--
  972. CASE when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX1.BadReasonDesc END AS BadReasonDesc,--
  973. BLFL.BadDesc,
  974. a.IQCHeaderTime,
  975. FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  976. a.EATTRIBUTE1 SQEFA,
  977. CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
  978. ELSE '否' END AS SFJA
  979. FROM IcsMatCheckResult a
  980. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  981. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  982. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  983. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  984. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  985. UNION ALL
  986. SELECT DISTINCT
  987. '' BRGDesc,'' BadReasonDesc,'' BadDesc,NULL IQCHeaderTime,'' SQEFA,
  988. '' SFJA,''CHUJIANSHIJIAN
  989. FROM ICSWareHouseLotInfoLog a WITH(NOLOCK)
  990. INNER JOIN ICSWareHouseLotInfo b WITH(NOLOCK) on a.LotNo=b.LotNo
  991. LEFT JOIN ICSInventory C WITH(NOLOCK) ON C.InvCode=A.InvCode
  992. LEFT JOIN ICSASNDetail D WITH(NOLOCK) ON D.LotNo=A.LotNo
  993. LEFT JOIN ICSOASNDetail E WITH(NOLOCK) ON E.LotNo=A.LotNo
  994. LEFT JOIN ICSInventoryLoT EE WITH(NOLOCK) ON EE.LotNo=A.LotNo
  995. LEFT JOIN ICSExtension F WITH(NOLOCK) ON F.ID=EE.ExtensionID
  996. LEFT JOIN ICSInspection G WITH(NOLOCK) ON a.lotno=G.lotno
  997. WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.lotno IS NOT NULL
  998. and a.MUSER<>'admin'
  999. GROUP BY a.InvCode,C.InvName,C.InvStd, REPLACE(C.ClassName, '', ''),ISNULL(D.ASNCode,E.OASNCode),F.BatchCode,
  1000. ISNULL(D.MUSER,E.MUSER),ISNULL(D.MUSERName,E.MUSERName),FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy/MM/dd'),A.MUSERName,A.TransCode
  1001. ) A WHERE 1=1 AND A.BRGDesc<>'' and A.BRGDesc IS NOT NULL AND A.BRGDesc<>'NG' AND A.SFJA='是' AND A.BadReasonDesc IS NOT NULL
  1002. AND CHUJIANSHIJIAN BETWEEN '{2}' AND '{3}'
  1003. GROUP BY BRGDesc,A.BadReasonDesc, DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
  1004. SELECT SUM(GS) AS HZcount,BRGDesc INTO #Table2 FROM #Table1 GROUP BY BRGDesc
  1005. SELECT SUM(GS) AS HZcount,BRGDesc INTO #MothTable2 FROM #MothTable1 GROUP BY BRGDesc
  1006. SELECT * INTO #Table3 FROM #Table1
  1007. UNION
  1008. SELECT b.GS,b.BRGDesc,b.BadReasonDesc,a.Num FROM [ICSMonth] a
  1009. LEFT JOIN #MothTable1 b ON a.Num=b.ZB
  1010. DECLARE @cols AS NVARCHAR(MAX)
  1011. SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.ZB
  1012. FROM #Table3 dr
  1013. FOR XML PATH(''), TYPE
  1014. ).value('.', 'NVARCHAR(MAX)') +']'
  1015. ,1,2,'')
  1016. --SELECT * FROM #Table3
  1017. SET @cols='SELECT * INTO #Table4 FROM #Table3
  1018. PIVOT ( SUM(GS) FOR ZB IN ('+
  1019. @cols+') )a orDER BY BRGDesc
  1020. SELECT ROW_NUMBER() OVER( order by CONVERT(DECIMAL(16,1),ROUND(c.HZcount*1.0/(select sum(HZcount) from #MothTable2) * 100, 2)) desc)NUM, A.*,b.HZcount as ZBCount,C.HZcount as YBCount,CONVERT(nvarchar(20), CONVERT(DECIMAL(16,1),ROUND(c.HZcount*1.0/(select sum(HZcount) from #MothTable2) * 100, 2)))+''%''
  1021. AS Proportion,D.EATTRIBUTE1 as Improvementmeasures,D.EATTRIBUTE2 as Responsibledepartment FROM #Table4 A
  1022. LEFT JOIN #Table2 B ON A.BRGDesc=B.BRGDesc
  1023. LEFT JOIN #MothTable2 C ON A.BRGDesc=C.BRGDesc
  1024. LEFT JOIN ICSBadReason D ON A.BadReasonDesc=D.BadReasonDesc
  1025. Where A.BRGDesc is not NULL
  1026. ORDER BY CONVERT(DECIMAL(16,1),ROUND(c.HZcount*1.0/(select sum(HZcount) from #MothTable2) * 100, 2)) DESC
  1027. '
  1028. PRINT(@cols)
  1029. EXEC(@cols)
  1030. DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
  1031. ";
  1032. sql = string.Format(sql, firstDayOfMonth, lastDayOfMonth, Year,WYear);
  1033. return SqlHelper.GetDataTableBySql(sql);
  1034. #endregion
  1035. }
  1036. #endregion
  1037. #region
  1038. /// <summary>
  1039. /// 对外改善异常追踪表
  1040. /// </summary>
  1041. /// <param name="queryJson"></param>
  1042. /// <param name="jqgridparam"></param>
  1043. /// <returns></returns>
  1044. public DataTable GetPassFirstTime4(string queryJson)
  1045. {
  1046. //站点信息
  1047. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  1048. DataTable dt = new DataTable();
  1049. List<DbParameter> parameter = new List<DbParameter>();
  1050. var queryParam = queryJson.ToJObject();
  1051. object Figure = GetDecimalDigits();
  1052. //获取传递的年份和月份
  1053. int year = queryParam["DateNow"].ToString().Substring(0, 4).ToInt();
  1054. string date = queryParam["DateNow"].ToString();
  1055. var dates = date.ToDate();
  1056. var Year = new DateTime(dates.Year, 1, 1).ToString("yyyy-MM-dd");
  1057. var WYear = new DateTime(dates.AddYears(1).Year, 1, 1).ToString("yyyy-MM-dd");
  1058. var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).ToString("yyyy-MM-dd");
  1059. var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
  1060. var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
  1061. #region [SQL]
  1062. string sql = @"
  1063. SELECT DISTINCT * INTO #Temp1
  1064. FROM (SELECT DISTINCT
  1065. FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  1066. FORMAT( CONVERT( datetime,DN.MTIME), 'yyyy-MM-dd') MTIME,
  1067. CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,DN.MTIME)))+'月' AS YB,
  1068. a.InvCode,
  1069. c.VenName,
  1070. d.InvName,
  1071. b.BLMX,
  1072. CASE when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc,--
  1073. CASE when a.FinalResult IS NULL THEN a.IQCHeaderResult WHEN a.IQCHeaderResult IS NULL THEN
  1074. SQEEngineerResult WHEN SQEEngineerResult IS NULL THEN IQCGroupHeaderResult ELSE a.FinalResult END AS Result,
  1075. a.SQEEngineerRemark,
  1076. d.ClassName,
  1077. '第'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,DN.MTIME))%DATEPART(WEEK,DATEADD(DAY,-1,'{0}'))+1)+'周' AS ZB,
  1078. BLFL.BadDesc,
  1079. a.IQCHeaderTime,
  1080. a.EATTRIBUTE1 SQEFA,
  1081. CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
  1082. ELSE '否' END AS SFJA
  1083. FROM IcsMatCheckResult a
  1084. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  1085. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  1086. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  1087. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  1088. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  1089. inner JOIN ICSDeliveryNotice DN ON a.ASNCode=DN.ASNCode
  1090. LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY with (nolock) WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  1091. UNION ALL
  1092. SELECT DISTINCT
  1093. FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  1094. FORMAT( CONVERT( datetime,DN.MTIME,120), 'yyyy-MM-dd') MTIME,
  1095. '' AS ZB,
  1096. a.InvCode,
  1097. ISNULL(D.MUSERName,E.MUSERName) VENNAME,
  1098. C.InvName,
  1099. '' BLMX,
  1100. '' BRGDesc,'' BadDesc,
  1101. '' AS Result,
  1102. '' AS SQEEngineerRemark,
  1103. c.ClassName,
  1104. ''AS YB,
  1105. NULL IQCHeaderTime,'' SQEFA,
  1106. '' SFJA
  1107. FROM ICSWareHouseLotInfoLog a WITH(NOLOCK)
  1108. INNER JOIN ICSWareHouseLotInfo b WITH(NOLOCK) on a.LotNo=b.LotNo
  1109. LEFT JOIN ICSInventory C WITH(NOLOCK) ON C.InvCode=A.InvCode
  1110. LEFT JOIN ICSASNDetail D WITH(NOLOCK) ON D.LotNo=A.LotNo
  1111. LEFT JOIN ICSOASNDetail E WITH(NOLOCK) ON E.LotNo=A.LotNo
  1112. LEFT JOIN ICSInventoryLoT EE WITH(NOLOCK) ON EE.LotNo=A.LotNo
  1113. LEFT JOIN ICSExtension F WITH(NOLOCK) ON F.ID=EE.ExtensionID
  1114. LEFT JOIN ICSInspection G WITH(NOLOCK) ON a.lotno=G.lotno
  1115. inner JOIN ICSODeliveryNotice DN ON E.OASNCode=DN.OASNCode
  1116. WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.lotno IS NOT NULL
  1117. and a.MUSER<>'admin'
  1118. ) A WHERE 1=1 AND A.BRGDesc<>'' and A.BRGDesc IS NOT NULL AND A.BRGDesc='NG' AND A.SFJA='是'
  1119. AND MTIME BETWEEN '{0}' AND '{1}'
  1120. --SELECT * FROM #Temp1
  1121. SELECT DISTINCT * INTO #YearTemp1 FROM (SELECT DISTINCT
  1122. FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  1123. FORMAT( CONVERT( datetime,DN.MTIME), 'yyyy-MM-dd') MTIME,
  1124. CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,DN.MTIME)))+'月' AS YB,
  1125. a.InvCode,
  1126. c.VenName,
  1127. d.InvName,
  1128. b.BLMX,
  1129. CASE when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc,--
  1130. CASE when a.SQEEngineerResult IS NULL THEN a.IQCGroupHeaderResult WHEN a.IQCGroupHeaderResult IS NULL THEN
  1131. Result ELSE a.SQEEngineerResult END AS Result,
  1132. a.SQEEngineerRemark,
  1133. d.ClassName,
  1134. '' AS ZB,
  1135. BLFL.BadDesc,
  1136. a.IQCHeaderTime,
  1137. a.EATTRIBUTE1 SQEFA,
  1138. CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
  1139. ELSE '否' END AS SFJA
  1140. FROM IcsMatCheckResult a
  1141. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  1142. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  1143. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  1144. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  1145. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  1146. inner JOIN ICSDeliveryNotice DN ON a.ASNCode=DN.ASNCode
  1147. LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY with (nolock) WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  1148. UNION ALL
  1149. SELECT DISTINCT
  1150. FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  1151. FORMAT( CONVERT( datetime,DN.MTIME,120), 'yyyy-MM-dd') MTIME,
  1152. '' AS ZB,
  1153. a.InvCode,
  1154. ISNULL(D.MUSERName,E.MUSERName) VENNAME,
  1155. C.InvName,
  1156. '' BLMX,
  1157. '' BRGDesc,'' BadDesc,
  1158. '' AS Result,
  1159. '' AS SQEEngineerRemark,
  1160. c.ClassName,
  1161. ''AS YB,
  1162. NULL IQCHeaderTime,'' SQEFA,
  1163. '' SFJA
  1164. FROM ICSWareHouseLotInfoLog a WITH(NOLOCK)
  1165. INNER JOIN ICSWareHouseLotInfo b WITH(NOLOCK) on a.LotNo=b.LotNo
  1166. LEFT JOIN ICSInventory C WITH(NOLOCK) ON C.InvCode=A.InvCode
  1167. LEFT JOIN ICSASNDetail D WITH(NOLOCK) ON D.LotNo=A.LotNo
  1168. LEFT JOIN ICSOASNDetail E WITH(NOLOCK) ON E.LotNo=A.LotNo
  1169. LEFT JOIN ICSInventoryLoT EE WITH(NOLOCK) ON EE.LotNo=A.LotNo
  1170. LEFT JOIN ICSExtension F WITH(NOLOCK) ON F.ID=EE.ExtensionID
  1171. LEFT JOIN ICSInspection G WITH(NOLOCK) ON a.lotno=G.lotno
  1172. inner JOIN ICSODeliveryNotice DN ON E.OASNCode=DN.OASNCode
  1173. WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.lotno IS NOT NULL
  1174. and a.MUSER<>'admin'
  1175. ) A WHERE 1=1 AND A.BRGDesc<>'' and A.BRGDesc IS NOT NULL AND A.BRGDesc='NG' AND A.SFJA='是'
  1176. AND MTIME BETWEEN '{2}' AND '{3}'
  1177. --SELECT * FROM #YearTemp1
  1178. -- SELECT COUNT(*) AS cc,InvCode,MTIME INTO #Table2 FROM #Temp1 GROUP BY InvCode,MTIME
  1179. --UNION
  1180. SELECT COUNT(*) AS cc, b.InvCode,b.MTIME,a.Num INTO #Table3 FROM [ICSMonthByNew] a
  1181. LEFT JOIN #YearTemp1 b ON a.Num=b.YB
  1182. GROUP BY b.InvCode,b.MTIME,a.Num
  1183. DECLARE @cols AS NVARCHAR(MAX)
  1184. SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Num
  1185. FROM #Table3 dr
  1186. FOR XML PATH(''), TYPE
  1187. ).value('.', 'NVARCHAR(MAX)') +']'
  1188. ,1,2,'')
  1189. --SELECT * FROM #Table3
  1190. SET @cols='SELECT * INTO #Table4 FROM #Table3
  1191. PIVOT ( SUM(cc) FOR Num IN ('+
  1192. @cols+') )a orDER BY InvCode
  1193. select distinct A.*,D.* from #Temp1 A
  1194. LEFT JOIN #YearTemp1 C ON A.InvCode=C.InvCode
  1195. LEFT JOIN #Table4 D ON A.InvCode=D.InvCode
  1196. Where A.InvCode is not null
  1197. order by A.MTIME desc
  1198. '
  1199. PRINT(@cols)
  1200. EXEC(@cols)
  1201. DROP TABLE #Temp1 DROP TABLE #YearTemp1 DROP TABLE #Table3
  1202. ";
  1203. sql = string.Format(sql, firstDayOfMonth, lastDayOfMonth, Year,WYear);
  1204. return SqlHelper.GetDataTableBySql(sql);
  1205. #endregion
  1206. }
  1207. #endregion
  1208. #region
  1209. /// <summary>
  1210. /// 对外改善异常追踪表
  1211. /// </summary>
  1212. /// <param name="queryJson"></param>
  1213. /// <param name="jqgridparam"></param>
  1214. /// <returns></returns>
  1215. public DataTable GetPassFirstTime6(string queryJson)
  1216. {
  1217. //站点信息
  1218. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  1219. DataTable dt = new DataTable();
  1220. List<DbParameter> parameter = new List<DbParameter>();
  1221. var queryParam = queryJson.ToJObject();
  1222. object Figure = GetDecimalDigits();
  1223. //获取传递的年份和月份
  1224. int year = queryParam["DateNow"].ToString().Substring(0, 4).ToInt();
  1225. string date = queryParam["DateNow"].ToString();
  1226. var dates = date.ToDate();
  1227. var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).AddDays(-1).ToString("yyyy-MM-dd");
  1228. var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
  1229. var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
  1230. #region [SQL]
  1231. string sql = @"SELECT c.Num,c.[Month]
  1232. INTO #TempMonth
  1233. FROM ICSMonth c WHERE c.[Month] BETWEEN '{0}' AND '{1}'
  1234. ORDER BY c.Num
  1235. select '1' Num,'' Type INTO #TempType UNION select '2' Num,'' Type UNION select '3' Num,'' Type
  1236. SELECT
  1237. VenName,
  1238. WLFL
  1239. INTO #temp1
  1240. FROM (
  1241. SELECT
  1242. VenName,
  1243. WLFL,
  1244. ROW_NUMBER() OVER (PARTITION BY WLFL ORDER BY SL DESC) AS RowNum
  1245. FROM (
  1246. SELECT
  1247. COUNT(*) AS SL,
  1248. VenName,
  1249. WLFL
  1250. FROM (
  1251. SELECT DISTINCT
  1252. REPLACE(d.ClassName, '', '') WLFL,
  1253. c.VenName,
  1254. FORMAT(CONVERT(DATE,FirstCheckTime, 120), 'yyyy-MM') CHUJIANSHIJIAN,
  1255. a.IQCHeaderResult ZGJG
  1256. FROM IcsMatCheckResult a WITH (NOLOCK)
  1257. LEFT JOIN ICSVendor c WITH (NOLOCK) ON a.VenCode = c.VenCode AND a.WorkPoint = c.WorkPoint
  1258. LEFT JOIN ICSInventory d WITH (NOLOCK) ON a.InvCode = d.InvCode AND a.WorkPoint = d.WorkPoint
  1259. LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode = A.BCGCode
  1260. LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode = A.BadReasonCode
  1261. LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode = A.BRGCode
  1262. UNION ALL
  1263. SELECT DISTINCT
  1264. REPLACE(C.ClassName, '', '') WLFL,
  1265. ISNULL(D.MUSERName, E.MUSERName) VENNAME,
  1266. FORMAT(CONVERT(datetime, a.MTIME, 120), 'yyyy/MM/dd') CHUJIANSHIJIAN,
  1267. '' ZGJG
  1268. FROM ICSWareHouseLotInfoLog a WITH (NOLOCK)
  1269. INNER JOIN ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
  1270. LEFT JOIN ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
  1271. LEFT JOIN ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
  1272. LEFT JOIN ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
  1273. LEFT JOIN ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
  1274. LEFT JOIN ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
  1275. LEFT JOIN ICSInspection G WITH (NOLOCK) ON G.LOTNO = A.LotNo
  1276. WHERE (a.BusinessCode = '1' OR a.BusinessCode = '9')
  1277. AND G.LotNo IS NULL
  1278. AND a.MUSER <> 'admin'
  1279. ) AS A WHERE CHUJIANSHIJIAN IN (SELECT [Month] FROM #TempMonth)
  1280. GROUP BY VenName, WLFL
  1281. ) AS GroupedResults
  1282. ) AS RankedResults
  1283. WHERE RowNum <= 3
  1284. ORDER BY WLFL DESC, VenName;
  1285. SELECT COUNT(*) AS Quantity,
  1286. FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') AS CHUJIANSHIJIAN ,A.WLFL,A.VenName
  1287. INTO #TempForecast
  1288. FROM #temp1 B
  1289. INNER JOIN (SELECT DISTINCT
  1290. REPLACE(d.ClassName, '', '') WLFL,
  1291. c.VenName,
  1292. FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy/MM/dd') CHUJIANSHIJIAN
  1293. FROM IcsMatCheckResult a with (nolock)
  1294. LEFT JOIN ICSVendor c with (nolock) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  1295. LEFT JOIN ICSInventory d with (nolock) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  1296. LEFT JOIN ICSBadReasonGroup BLXX with (nolock) ON BLXX.BRGCode=A.BCGCode
  1297. LEFT JOIN ICSBadReason BLXX1 with (nolock) ON BLXX1.BadReasonCode=A.BadReasonCode
  1298. LEFT JOIN ICSBadCode BLFL with (nolock) ON BLFL.BadCode=A.BRGCode
  1299. UNION ALL
  1300. SELECT DISTINCT REPLACE(C.ClassName, '', '') WLFL,
  1301. ISNULL(D.MUSERName,E.MUSERName) VENNAME,
  1302. FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy/MM/dd') CHUJIANSHIJIAN
  1303. FROM ICSWareHouseLotInfoLog a with (nolock)
  1304. INNER JOIN ICSWareHouseLotInfo b with (nolock) on a.LotNo=b.LotNo
  1305. LEFT JOIN ICSInventory C with (nolock) ON C.InvCode=A.InvCode
  1306. LEFT JOIN ICSASNDetail D with (nolock) ON D.LotNo=A.LotNo
  1307. LEFT JOIN ICSOASNDetail E with (nolock) ON E.LotNo=A.LotNo
  1308. LEFT JOIN ICSInventoryLoT EE with (nolock) ON EE.LotNo=A.LotNo
  1309. LEFT JOIN ICSExtension F with (nolock) ON F.ID=EE.ExtensionID
  1310. LEFT JOIN ICSInspection G with (nolock) ON G.LOTNO =A.LotNo
  1311. WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.LotNo IS NULL
  1312. and a.MUSER<>'admin'
  1313. ) A ON a.WLFL=b.WLFL AND a.VenName=b.VenName WHERE 1=1 and FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') IN (SELECT [Month] FROM #TempMonth)
  1314. GROUP BY FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM'),A.WLFL,A.VenName
  1315. SELECT COUNT(*) AS Quantity,
  1316. FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') AS CHUJIANSHIJIAN ,A.WLFL,A.VenName
  1317. INTO #TempDetail
  1318. FROM #temp1 B
  1319. INNER JOIN (SELECT DISTINCT
  1320. REPLACE(d.ClassName, '', '') WLFL,
  1321. c.VenName,
  1322. FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy/MM/dd') CHUJIANSHIJIAN,
  1323. a.IQCGroupHeaderResult ZGJG
  1324. FROM IcsMatCheckResult a with (nolock)
  1325. LEFT JOIN ICSVendor c with (nolock) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  1326. LEFT JOIN ICSInventory d with (nolock) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  1327. LEFT JOIN ICSBadReasonGroup BLXX with (nolock) ON BLXX.BRGCode=A.BCGCode
  1328. LEFT JOIN ICSBadReason BLXX1 with (nolock) ON BLXX1.BadReasonCode=A.BadReasonCode
  1329. LEFT JOIN ICSBadCode BLFL with (nolock) ON BLFL.BadCode=A.BRGCode
  1330. ) A ON a.WLFL=b.WLFL AND a.VenName=b.VenName WHERE 1=1 AND a.ZGJG='NG'
  1331. AND FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') IN (SELECT [Month] FROM #TempMonth)
  1332. GROUP BY FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM'),A.WLFL,A.VenName
  1333. SELECT VenName,'1' AS Num,'' AS Type,WLFL,ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIAN
  1334. INTO #TempForecastMonth
  1335. FROM #TempForecast
  1336. UNION ALL
  1337. SELECT VenName,'2' AS Num,'' AS Type,WLFL, ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIAN
  1338. FROM #TempDetail
  1339. UNION ALL
  1340. SELECT a.VenName,'3' AS Num,'' AS Type,a.WLFL,
  1341. CONVERT(NVARCHAR(20),CONVERT(DECIMAL(16,1),ROUND(b.Quantity*1.0/(CASE WHEN ISNULL(a.Quantity, 0)=0 THEN 1 ELSE a.Quantity END) * 100, 2)))
  1342. +'%' AS Quantity,a.CHUJIANSHIJIAN
  1343. FROM #TempForecast a
  1344. LEFT JOIN #TempDetail b ON a.VenName=b.VenName AND a.WLFL=b.WLFL
  1345. SELECT ISNULL(a.VenName, b.VenName) AS VenName, ISNULL(a.Num, b.Num) AS Num,ISNULL(a.Type, b.Type) AS Type,ISNULL(a.CHUJIANSHIJIAN, b.CHUJIANSHIJIAN) AS CHUJIANSHIJIAN,b.Quantity,ISNULL(a.WLFL, b.WLFL) AS WLFL
  1346. INTO #TempForecastAll
  1347. FROM (SELECT f.VenName,WLFL, t.Num,t.Type,CHUJIANSHIJIAN,f.Quantity FROM #TempForecast f,#TempType t) a
  1348. FULL JOIN #TempForecastMonth b ON a.VenName=b.VenName AND a.Type=b.Type AND a.CHUJIANSHIJIAN=b.CHUJIANSHIJIAN
  1349. DECLARE @sql varchar(4000)
  1350. SELECT @sql=isnull(@sql+',','')+'['+[Month]+']'
  1351. FROM (SELECT [Month] FROM #TempMonth) AS a
  1352. SET @sql='SELECT Type AS , WLFL AS ,VenName AS ,'+@sql+' FROM #TempForecastAll PIVOT( MAX(Quantity) FOR CHUJIANSHIJIAN IN ('+@sql+'))a ORDER BY WLFL, VenName'
  1353. PRINT(@sql)
  1354. EXEC(@sql)
  1355. DROP TABLE #TempMonth
  1356. DROP TABLE #TempDetail
  1357. DROP TABLE #TempForecast
  1358. DROP TABLE #TempForecastMonth
  1359. DROP TABLE #TempForecastAll
  1360. DROP TABLE #TempType
  1361. DROP TABLE #temp1";
  1362. sql = string.Format(sql, firstDayOfMonth, lastDayOfMonth);
  1363. return SqlHelper.GetDataTableBySql(sql);
  1364. #endregion
  1365. }
  1366. #endregion
  1367. #region
  1368. /// <summary>
  1369. /// 对外改善异常追踪表
  1370. /// </summary>
  1371. /// <param name="queryJson"></param>
  1372. /// <param name="jqgridparam"></param>
  1373. /// <returns></returns>
  1374. public DataTable ExportAll6(string DateNow)
  1375. {
  1376. //站点信息
  1377. string date = DateNow;
  1378. var dates = date.ToDate();
  1379. var daysMonth = dates.ToString("MM");
  1380. var month = dates.ToString("yyyy-MM");
  1381. var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).AddDays(-1).ToString("yyyy-MM-dd");
  1382. var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
  1383. var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
  1384. #region [SQL]
  1385. string sql = @"SELECT c.Num,c.[Month]
  1386. INTO #TempMonth
  1387. FROM ICSMonth c WHERE c.[Month] BETWEEN '{0}' AND '{1}'
  1388. ORDER BY c.Num
  1389. select '1' Num,'' Type INTO #TempType UNION select '2' Num,'' Type UNION select '3' Num,'' Type
  1390. SELECT
  1391. VenName,
  1392. WLFL
  1393. INTO #temp1
  1394. FROM (
  1395. SELECT
  1396. VenName,
  1397. WLFL,
  1398. ROW_NUMBER() OVER (PARTITION BY WLFL ORDER BY SL DESC) AS RowNum
  1399. FROM (
  1400. SELECT
  1401. COUNT(*) AS SL,
  1402. VenName,
  1403. WLFL
  1404. FROM (
  1405. SELECT DISTINCT
  1406. REPLACE(d.ClassName, '', '') WLFL,
  1407. c.VenName,
  1408. FORMAT(CONVERT(DATE,FirstCheckTime, 120), 'yyyy-MM') CHUJIANSHIJIAN,
  1409. a.IQCHeaderResult ZGJG
  1410. FROM IcsMatCheckResult a WITH (NOLOCK)
  1411. LEFT JOIN ICSVendor c WITH (NOLOCK) ON a.VenCode = c.VenCode AND a.WorkPoint = c.WorkPoint
  1412. LEFT JOIN ICSInventory d WITH (NOLOCK) ON a.InvCode = d.InvCode AND a.WorkPoint = d.WorkPoint
  1413. LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode = A.BCGCode
  1414. LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode = A.BadReasonCode
  1415. LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode = A.BRGCode
  1416. UNION ALL
  1417. SELECT DISTINCT
  1418. REPLACE(C.ClassName, '', '') WLFL,
  1419. ISNULL(D.MUSERName, E.MUSERName) VENNAME,
  1420. FORMAT(CONVERT(datetime, a.MTIME, 120), 'yyyy/MM/dd') CHUJIANSHIJIAN,
  1421. '' ZGJG
  1422. FROM ICSWareHouseLotInfoLog a WITH (NOLOCK)
  1423. INNER JOIN ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
  1424. LEFT JOIN ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
  1425. LEFT JOIN ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
  1426. LEFT JOIN ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
  1427. LEFT JOIN ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
  1428. LEFT JOIN ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
  1429. LEFT JOIN ICSInspection G WITH (NOLOCK) ON G.LOTNO = A.LotNo
  1430. WHERE (a.BusinessCode = '1' OR a.BusinessCode = '9')
  1431. AND G.LotNo IS NULL
  1432. AND a.MUSER <> 'admin'
  1433. ) AS A WHERE CHUJIANSHIJIAN IN (SELECT [Month] FROM #TempMonth)
  1434. GROUP BY VenName, WLFL
  1435. ) AS GroupedResults
  1436. ) AS RankedResults
  1437. WHERE RowNum <= 3
  1438. ORDER BY WLFL DESC, VenName;
  1439. SELECT COUNT(*) AS Quantity,
  1440. FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') AS CHUJIANSHIJIAN ,A.WLFL,A.VenName
  1441. INTO #TempForecast
  1442. FROM #temp1 B
  1443. INNER JOIN (SELECT DISTINCT
  1444. REPLACE(d.ClassName, '', '') WLFL,
  1445. c.VenName,
  1446. FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy/MM/dd') CHUJIANSHIJIAN
  1447. FROM IcsMatCheckResult a with (nolock)
  1448. LEFT JOIN ICSVendor c with (nolock) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  1449. LEFT JOIN ICSInventory d with (nolock) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  1450. LEFT JOIN ICSBadReasonGroup BLXX with (nolock) ON BLXX.BRGCode=A.BCGCode
  1451. LEFT JOIN ICSBadReason BLXX1 with (nolock) ON BLXX1.BadReasonCode=A.BadReasonCode
  1452. LEFT JOIN ICSBadCode BLFL with (nolock) ON BLFL.BadCode=A.BRGCode
  1453. UNION ALL
  1454. SELECT DISTINCT REPLACE(C.ClassName, '', '') WLFL,
  1455. ISNULL(D.MUSERName,E.MUSERName) VENNAME,
  1456. FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy/MM/dd') CHUJIANSHIJIAN
  1457. FROM ICSWareHouseLotInfoLog a with (nolock)
  1458. INNER JOIN ICSWareHouseLotInfo b with (nolock) on a.LotNo=b.LotNo
  1459. LEFT JOIN ICSInventory C with (nolock) ON C.InvCode=A.InvCode
  1460. LEFT JOIN ICSASNDetail D with (nolock) ON D.LotNo=A.LotNo
  1461. LEFT JOIN ICSOASNDetail E with (nolock) ON E.LotNo=A.LotNo
  1462. LEFT JOIN ICSInventoryLoT EE with (nolock) ON EE.LotNo=A.LotNo
  1463. LEFT JOIN ICSExtension F with (nolock) ON F.ID=EE.ExtensionID
  1464. LEFT JOIN ICSInspection G with (nolock) ON G.LOTNO =A.LotNo
  1465. WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.LotNo IS NULL
  1466. and a.MUSER<>'admin'
  1467. ) A ON a.WLFL=b.WLFL AND a.VenName=b.VenName WHERE 1=1 and FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') IN (SELECT [Month] FROM #TempMonth)
  1468. GROUP BY FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM'),A.WLFL,A.VenName
  1469. SELECT COUNT(*) AS Quantity,
  1470. FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') AS CHUJIANSHIJIAN ,A.WLFL,A.VenName
  1471. INTO #TempDetail
  1472. FROM #temp1 B
  1473. INNER JOIN (SELECT DISTINCT
  1474. REPLACE(d.ClassName, '', '') WLFL,
  1475. c.VenName,
  1476. FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy/MM/dd') CHUJIANSHIJIAN,
  1477. a.IQCGroupHeaderResult ZGJG
  1478. FROM IcsMatCheckResult a with (nolock)
  1479. LEFT JOIN ICSVendor c with (nolock) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  1480. LEFT JOIN ICSInventory d with (nolock) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  1481. LEFT JOIN ICSBadReasonGroup BLXX with (nolock) ON BLXX.BRGCode=A.BCGCode
  1482. LEFT JOIN ICSBadReason BLXX1 with (nolock) ON BLXX1.BadReasonCode=A.BadReasonCode
  1483. LEFT JOIN ICSBadCode BLFL with (nolock) ON BLFL.BadCode=A.BRGCode
  1484. ) A ON a.WLFL=b.WLFL AND a.VenName=b.VenName WHERE 1=1 AND a.ZGJG='NG'
  1485. AND FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') IN (SELECT [Month] FROM #TempMonth)
  1486. GROUP BY FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM'),A.WLFL,A.VenName
  1487. SELECT VenName,'1' AS Num,'' AS Type,WLFL,ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIAN
  1488. INTO #TempForecastMonth
  1489. FROM #TempForecast
  1490. UNION ALL
  1491. SELECT VenName,'2' AS Num,'' AS Type,WLFL, ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIAN
  1492. FROM #TempDetail
  1493. UNION ALL
  1494. SELECT a.VenName,'3' AS Num,'' AS Type,a.WLFL,
  1495. CONVERT(NVARCHAR(20),CONVERT(DECIMAL(16,1),ROUND(b.Quantity*1.0/(CASE WHEN ISNULL(a.Quantity, 0)=0 THEN 1 ELSE a.Quantity END) * 100, 2)))
  1496. +'%' AS Quantity,a.CHUJIANSHIJIAN
  1497. FROM #TempForecast a
  1498. LEFT JOIN #TempDetail b ON a.VenName=b.VenName AND a.WLFL=b.WLFL
  1499. SELECT ISNULL(a.VenName, b.VenName) AS VenName, ISNULL(a.Num, b.Num) AS Num,ISNULL(a.Type, b.Type) AS Type,ISNULL(a.CHUJIANSHIJIAN, b.CHUJIANSHIJIAN) AS CHUJIANSHIJIAN,b.Quantity,ISNULL(a.WLFL, b.WLFL) AS WLFL
  1500. INTO #TempForecastAll
  1501. FROM (SELECT f.VenName,WLFL, t.Num,t.Type,CHUJIANSHIJIAN,f.Quantity FROM #TempForecast f,#TempType t) a
  1502. FULL JOIN #TempForecastMonth b ON a.VenName=b.VenName AND a.Type=b.Type AND a.CHUJIANSHIJIAN=b.CHUJIANSHIJIAN
  1503. DECLARE @sql varchar(4000)
  1504. SELECT @sql=isnull(@sql+',','')+'['+[Month]+']'
  1505. FROM (SELECT [Month] FROM #TempMonth) AS a
  1506. SET @sql='SELECT WLFL AS ,VenName AS TOP厂商,Type AS ,'+@sql+' FROM #TempForecastAll PIVOT( MAX(Quantity) FOR CHUJIANSHIJIAN IN ('+@sql+'))a ORDER BY WLFL, VenName'
  1507. PRINT(@sql)
  1508. EXEC(@sql)
  1509. DROP TABLE #TempMonth
  1510. DROP TABLE #TempDetail
  1511. DROP TABLE #TempForecast
  1512. DROP TABLE #TempForecastMonth
  1513. DROP TABLE #TempForecastAll
  1514. DROP TABLE #TempType
  1515. DROP TABLE #temp1";
  1516. sql = string.Format(sql, firstDayOfMonth, lastDayOfMonth);
  1517. var dt = SqlHelper.GetDataTableBySql(sql);
  1518. string[] vs = new string[] { "材料类型", "TOP厂商", "项目别", $"{month}" };
  1519. // 创建一个新的 DataTable
  1520. DataTable table = new DataTable();
  1521. for (int j = 0; j < vs.Length; j++)
  1522. {
  1523. table.Columns.Add(vs[j], typeof(string));
  1524. }
  1525. for (int i = 0; i < dt.Rows.Count; i++)
  1526. {
  1527. DataRow row1 = table.NewRow();
  1528. row1["材料类型"] = dt.Rows[i]["材料类型"].ToString();
  1529. row1["TOP厂商"] = dt.Rows[i]["TOP厂商"].ToString();
  1530. row1["项目别"] = dt.Rows[i]["项目别"].ToString();
  1531. row1[$"{month}"] = dt.Rows[i][$"{month}"].ToString();
  1532. table.Rows.Add(row1);
  1533. }
  1534. return table;
  1535. #endregion
  1536. }
  1537. #endregion
  1538. #region
  1539. /// <summary>
  1540. /// 对外改善异常追踪表
  1541. /// </summary>
  1542. /// <param name="queryJson"></param>
  1543. /// <param name="jqgridparam"></param>
  1544. /// <returns></returns>
  1545. public DataTable GetPassFirstTime5(string queryJson)
  1546. {
  1547. //站点信息
  1548. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  1549. DataTable dt = new DataTable();
  1550. List<DbParameter> parameter = new List<DbParameter>();
  1551. var queryParam = queryJson.ToJObject();
  1552. object Figure = GetDecimalDigits();
  1553. //获取传递的年份和月份
  1554. int year = queryParam["DateNow"].ToString().Substring(0, 4).ToInt();
  1555. string date = queryParam["DateNow"].ToString();
  1556. var dates = date.ToDate();
  1557. var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).AddDays(-1).ToString("yyyy-MM-dd");
  1558. var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
  1559. var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
  1560. #region [SQL]
  1561. string sql = @"SELECT top 20
  1562. Sum (count) Invcount,VenName
  1563. INTO #VanName
  1564. from
  1565. (SELECT DISTINCT
  1566. REPLACE(d.InvCode, '', '') WLFL,
  1567. c.VenName,
  1568. a.IQCHeaderResult ZGJG,
  1569. a.InvBatcgNo BatchCode,
  1570. 1 as count
  1571. FROM IcsMatCheckResult a WITH (NOLOCK)
  1572. LEFT JOIN ICSVendor c WITH (NOLOCK) ON a.VenCode = c.VenCode AND a.WorkPoint = c.WorkPoint
  1573. LEFT JOIN ICSInventory d WITH (NOLOCK) ON a.InvCode = d.InvCode AND a.WorkPoint = d.WorkPoint
  1574. LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode = A.BCGCode
  1575. LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode = A.BadReasonCode
  1576. LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode = A.BRGCode
  1577. WHERE a.FirstCheckTime>'{0}' AND a.FirstCheckTime<'{1}'
  1578. UNION ALL
  1579. SELECT DISTINCT
  1580. REPLACE(C.InvCode, '', '') WLFL,
  1581. J.VenName VENNAME,
  1582. '' ZGJG,
  1583. F.BatchCode,
  1584. 1 as count
  1585. FROM ICSWareHouseLotInfoLog a WITH (NOLOCK)
  1586. INNER JOIN ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
  1587. LEFT JOIN ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
  1588. LEFT JOIN ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
  1589. LEFT JOIN ICSASN H WITH (NOLOCK) ON H.ASNCode=D.ASNCode AND H.WorkPoint=D.WorkPoint
  1590. LEFT JOIN ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
  1591. LEFT JOIN ICSOASN I WITH (NOLOCK) ON I.OASNCode=E.OASNCode AND I.WorkPoint=E.WorkPoint
  1592. LEFT JOIN ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
  1593. LEFT JOIN ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
  1594. LEFT JOIN ICSInspection G WITH (NOLOCK) ON G.LOTNO = A.LotNo
  1595. LEFT JOIN ICSVendor J ON ISNULL(H.VenCode, I.VenCode)=J.VenCode AND J.WorkPoint=a.WorkPoint
  1596. WHERE (a.BusinessCode = '1' OR a.BusinessCode = '9') AND a.MTIME>'{0}' AND a.MTIME<'{1}'
  1597. ) a
  1598. GROUP BY a.VenName
  1599. ORDER BY Invcount DESC
  1600. SELECT c.Num,c.[Month]
  1601. INTO #TempMonth
  1602. FROM ICSMonth c WHERE c.[Month] BETWEEN '{0}' AND '{1}'
  1603. ORDER BY c.Num
  1604. select '1' Num,'' Type INTO #TempType UNION select '2' Num,'' Type UNION select '3' Num,'' Type
  1605. SELECT
  1606. VenName,
  1607. WLFL
  1608. INTO #temp1
  1609. FROM (
  1610. SELECT ROW_NUMBER() OVER (PARTITION BY VenName ORDER BY SL DESC) AS RowNum,
  1611. VenName,
  1612. WLFL,
  1613. SL
  1614. FROM (
  1615. SELECT
  1616. COUNT(*) AS SL,
  1617. VenName,
  1618. WLFL
  1619. FROM (
  1620. SELECT DISTINCT
  1621. REPLACE(d.InvCode, '', '') WLFL,
  1622. c.VenName,
  1623. a.InvBatcgNo BatchCode,
  1624. FORMAT(CONVERT(DATE,FirstCheckTime, 120), 'yyyy-MM') CHUJIANSHIJIAN,
  1625. a.IQCHeaderResult ZGJG
  1626. FROM IcsMatCheckResult a WITH (NOLOCK)
  1627. LEFT JOIN ICSVendor c WITH (NOLOCK) ON a.VenCode = c.VenCode AND a.WorkPoint = c.WorkPoint
  1628. LEFT JOIN ICSInventory d WITH (NOLOCK) ON a.InvCode = d.InvCode AND a.WorkPoint = d.WorkPoint
  1629. LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode = A.BCGCode
  1630. LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode = A.BadReasonCode
  1631. LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode = A.BRGCode
  1632. inner JOIN #VanName v ON c.VenName=v.VenName
  1633. WHERE a.FirstCheckTime>'{0}' AND a.FirstCheckTime<'{1}'
  1634. UNION ALL
  1635. SELECT DISTINCT
  1636. REPLACE(C.InvCode, '', '') WLFL,
  1637. J.VenName VENNAME,
  1638. f.BatchCode,
  1639. FORMAT(CONVERT(datetime, a.MTIME, 120), 'yyyy/MM/dd') CHUJIANSHIJIAN,
  1640. '' ZGJG
  1641. FROM ICSWareHouseLotInfoLog a WITH (NOLOCK)
  1642. INNER JOIN ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
  1643. LEFT JOIN ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
  1644. LEFT JOIN ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
  1645. LEFT JOIN ICSASN H WITH (NOLOCK) ON H.ASNCode=D.ASNCode AND H.WorkPoint=D.WorkPoint
  1646. LEFT JOIN ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
  1647. LEFT JOIN ICSOASN I WITH (NOLOCK) ON I.OASNCode=E.OASNCode AND I.WorkPoint=E.WorkPoint
  1648. LEFT JOIN ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
  1649. LEFT JOIN ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
  1650. LEFT JOIN ICSInspection G WITH (NOLOCK) ON G.LOTNO = A.LotNo
  1651. LEFT JOIN ICSVendor J ON ISNULL(H.VenCode, I.VenCode)=J.VenCode AND J.WorkPoint=a.WorkPoint
  1652. inner JOIN #VanName v ON J.VenName=v.VenName
  1653. WHERE (a.BusinessCode = '1' OR a.BusinessCode = '9') AND a.MTIME>'{0}' AND a.MTIME<'{1}'
  1654. AND G.LotNo IS NULL
  1655. AND a.MUSER <> 'admin'
  1656. ) AS A
  1657. GROUP BY VenName, WLFL
  1658. ) AS GroupedResults
  1659. ) AS RankedResults
  1660. WHERE RowNum <= 5
  1661. SELECT COUNT(*) AS Quantity,
  1662. FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') AS CHUJIANSHIJIAN ,A.WLFL,A.VenName
  1663. INTO #TempForecast
  1664. FROM #temp1 B
  1665. INNER JOIN (SELECT DISTINCT
  1666. REPLACE(d.InvCode, '', '') WLFL,
  1667. c.VenName,
  1668. a.InvBatcgNo BatchCode,
  1669. FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy/MM/dd') CHUJIANSHIJIAN
  1670. FROM IcsMatCheckResult a with (nolock)
  1671. LEFT JOIN ICSVendor c with (nolock) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  1672. LEFT JOIN ICSInventory d with (nolock) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  1673. LEFT JOIN ICSBadReasonGroup BLXX with (nolock) ON BLXX.BRGCode=A.BCGCode
  1674. LEFT JOIN ICSBadReason BLXX1 with (nolock) ON BLXX1.BadReasonCode=A.BadReasonCode
  1675. LEFT JOIN ICSBadCode BLFL with (nolock) ON BLFL.BadCode=A.BRGCode
  1676. inner JOIN #VanName v ON c.VenName=v.VenName
  1677. WHERE a.FirstCheckTime>'{0}' AND a.FirstCheckTime<'{1}'
  1678. UNION ALL
  1679. SELECT DISTINCT REPLACE(C.InvCode, '', '') WLFL,
  1680. J.VenName VENNAME,
  1681. f.BatchCode,
  1682. FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy/MM/dd') CHUJIANSHIJIAN
  1683. FROM ICSWareHouseLotInfoLog a WITH (NOLOCK)
  1684. INNER JOIN ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
  1685. LEFT JOIN ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
  1686. LEFT JOIN ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
  1687. LEFT JOIN ICSASN H WITH (NOLOCK) ON H.ASNCode=D.ASNCode AND H.WorkPoint=D.WorkPoint
  1688. LEFT JOIN ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
  1689. LEFT JOIN ICSOASN I WITH (NOLOCK) ON I.OASNCode=E.OASNCode AND I.WorkPoint=E.WorkPoint
  1690. LEFT JOIN ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
  1691. LEFT JOIN ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
  1692. LEFT JOIN ICSInspection G WITH (NOLOCK) ON G.LOTNO = A.LotNo
  1693. LEFT JOIN ICSVendor J ON ISNULL(H.VenCode, I.VenCode)=J.VenCode AND J.WorkPoint=a.WorkPoint
  1694. inner JOIN #VanName v ON J.VenName=v.VenName
  1695. WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.LotNo IS NULL
  1696. and a.MUSER<>'admin' AND a.MTIME>'{0}' AND a.MTIME<'{1}'
  1697. ) A ON a.WLFL=b.WLFL AND a.VenName=b.VenName --AND a.BatchCode=b.BatchCode
  1698. GROUP BY FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM'),A.WLFL,A.VenName
  1699. SELECT COUNT(*) AS Quantity,
  1700. FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') AS CHUJIANSHIJIAN ,A.WLFL,A.VenName
  1701. INTO #TempDetail
  1702. FROM #temp1 B
  1703. INNER JOIN (SELECT DISTINCT
  1704. REPLACE(d.InvCode, '', '') WLFL,
  1705. c.VenName,
  1706. a.InvBatcgNo BatchCode,
  1707. FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy/MM/dd') CHUJIANSHIJIAN,
  1708. a.IQCHeaderResult ZGJG
  1709. FROM IcsMatCheckResult a with (nolock)
  1710. LEFT JOIN ICSVendor c with (nolock) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  1711. LEFT JOIN ICSInventory d with (nolock) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  1712. LEFT JOIN ICSBadReasonGroup BLXX with (nolock) ON BLXX.BRGCode=A.BCGCode
  1713. LEFT JOIN ICSBadReason BLXX1 with (nolock) ON BLXX1.BadReasonCode=A.BadReasonCode
  1714. LEFT JOIN ICSBadCode BLFL with (nolock) ON BLFL.BadCode=A.BRGCode
  1715. inner JOIN #VanName v ON c.VenName=v.VenName
  1716. WHERE a.FirstCheckTime>'{0}' AND a.FirstCheckTime<'{1}' AND a.IQCHeaderResult='NG'
  1717. ) A ON a.WLFL=b.WLFL AND a.VenName=b.VenName
  1718. GROUP BY FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM'),A.WLFL,A.VenName
  1719. SELECT VenName,'1' AS Num,'' AS Type,WLFL,ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIAN
  1720. INTO #TempForecastMonth
  1721. FROM #TempForecast
  1722. UNION ALL
  1723. SELECT VenName,'2' AS Num,'' AS Type,WLFL, ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIAN
  1724. FROM #TempDetail
  1725. UNION ALL
  1726. SELECT a.VenName,'3' AS Num,'' AS Type,a.WLFL,CAST(CAST(ISNULL(b.Quantity,0)/(CASE WHEN ISNULL(a.Quantity, 0)=0 THEN 1 ELSE a.Quantity END)*100 AS DECIMAL(18,1)) AS VARCHAR(100))+'%' AS Quantity,a.CHUJIANSHIJIAN
  1727. FROM #TempForecast a
  1728. LEFT JOIN #TempDetail b ON a.VenName=b.VenName AND a.WLFL=b.WLFL
  1729. SELECT ISNULL(a.VenName, b.VenName) AS VenName, ISNULL(a.Num, b.Num) AS Num,ISNULL(a.Type, b.Type) AS Type,ISNULL(a.CHUJIANSHIJIAN, b.CHUJIANSHIJIAN) AS CHUJIANSHIJIAN,b.Quantity,ISNULL(a.WLFL, b.WLFL) AS WLFL
  1730. INTO #TempForecastAll
  1731. FROM (SELECT f.VenName,WLFL, t.Num,t.Type,CHUJIANSHIJIAN,f.Quantity FROM #TempForecast f,#TempType t) a
  1732. FULL JOIN #TempForecastMonth b ON a.VenName=b.VenName AND a.Type=b.Type AND a.CHUJIANSHIJIAN=b.CHUJIANSHIJIAN
  1733. DECLARE @sql varchar(4000)
  1734. SELECT @sql=isnull(@sql+',','')+'['+[Month]+']'
  1735. FROM (SELECT [Month] FROM #TempMonth) AS a
  1736. SET @sql='SELECT Type AS , WLFL AS ,VenName AS ,'+@sql+' FROM #TempForecastAll PIVOT( MAX(Quantity) FOR CHUJIANSHIJIAN IN ('+@sql+'))a order BY VenName,WLFL,Type '
  1737. PRINT(@sql)
  1738. EXEC(@sql)
  1739. DROP TABLE #TempMonth
  1740. DROP TABLE #TempDetail
  1741. DROP TABLE #TempForecast
  1742. DROP TABLE #TempForecastMonth
  1743. DROP TABLE #TempForecastAll
  1744. DROP TABLE #TempType
  1745. DROP TABLE #temp1
  1746. DROP TABLE #VanName
  1747. ";
  1748. sql = string.Format(sql, firstDayOfMonth, lastDayOfMonth);
  1749. return SqlHelper.GetDataTableBySql(sql);
  1750. #endregion
  1751. }
  1752. #endregion
  1753. #region 复判NG--对外改善
  1754. /// <summary>
  1755. /// 复判NG--对外改善
  1756. /// </summary>
  1757. /// <param name="queryJson"></param>
  1758. /// <param name="jqgridparam"></param>
  1759. /// <returns></returns>
  1760. public string GetPassFirstTime3(string queryJson)
  1761. {
  1762. try
  1763. {
  1764. //站点信息
  1765. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  1766. DataTable dt = new DataTable();
  1767. List<DbParameter> parameter = new List<DbParameter>();
  1768. var queryParam = queryJson.ToJObject();
  1769. object Figure = GetDecimalDigits();
  1770. //获取传递的年份和月份
  1771. List<PassFirstTimeModel> passFirstTimeModel = new List<PassFirstTimeModel>();
  1772. //获取传递的年份和月份
  1773. int year = queryParam["DateNow"].ToString().Substring(0, 4).ToInt();
  1774. string date = queryParam["DateNow"].ToString();
  1775. var dates = date.ToDate();
  1776. var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).ToString("yyyy-MM-dd");
  1777. var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
  1778. var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
  1779. var firstDayofYear = new DateTime(year, 1, 1).ToString("yyyy-MM-dd");
  1780. var firstDayofNextYear = new DateTime(year + 1, 1, 1).ToString("yyyy-MM-dd");
  1781. int month = dates.Month;
  1782. #region [SQL]
  1783. #region IncomingMterialssql 来料数量
  1784. string incomingMterialssql = $@"SELECT DISTINCT
  1785. a.InvCode,
  1786. COALESCE(D.ASNCode, E.OASNCode) AS ASNCode,
  1787. F.BatchCode,
  1788. SUM(A.Quantity) AS InvBatcgQty,
  1789. COALESCE(D.MUSER, E.MUSER) AS VenCode,
  1790. COALESCE(D.MUSERName, E.MUSERName) AS VENNAME,
  1791. CONVERT(DATE, a.MTIME) AS CHUJIANSHIJIAN --
  1792. into #tableMJ1
  1793. FROM
  1794. ICSWareHouseLotInfoLog a WITH (NOLOCK)
  1795. INNER JOIN
  1796. ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
  1797. LEFT JOIN
  1798. ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
  1799. LEFT JOIN
  1800. ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
  1801. LEFT JOIN
  1802. ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
  1803. LEFT JOIN
  1804. ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
  1805. LEFT JOIN
  1806. ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
  1807. LEFT JOIN
  1808. ICSInspection g WITH (NOLOCK) ON g.LotNo = a.LotNo AND g.WorkPoint = a.WorkPoint
  1809. WHERE
  1810. (a.BusinessCode = '1' OR a.BusinessCode = '9')
  1811. AND g.id IS NULL
  1812. AND a.MUSER <> 'admin'
  1813. AND CONVERT(DATE, a.MTIME) BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
  1814. GROUP BY
  1815. a.InvCode,
  1816. COALESCE(D.ASNCode, E.OASNCode),
  1817. F.BatchCode,
  1818. COALESCE(D.MUSER, E.MUSER),
  1819. COALESCE(D.MUSERName, E.MUSERName),
  1820. CONVERT(DATE, a.MTIME),
  1821. A.MUSERName,
  1822. A.TransCode
  1823. SELECT DISTINCT
  1824. a.InvCode,
  1825. COALESCE(D.ASNCode, E.OASNCode) AS ASNCode,
  1826. F.BatchCode,
  1827. SUM(A.Quantity) AS InvBatcgQty,
  1828. COALESCE(D.MUSER, E.MUSER) AS VenCode,
  1829. COALESCE(D.MUSERName, E.MUSERName) AS VENNAME,
  1830. CONVERT(DATE, a.MTIME) AS CHUJIANSHIJIAN --
  1831. into #tableMJ2
  1832. FROM
  1833. ICSWareHouseLotInfoLog a WITH (NOLOCK)
  1834. INNER JOIN
  1835. ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
  1836. LEFT JOIN
  1837. ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
  1838. LEFT JOIN
  1839. ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
  1840. LEFT JOIN
  1841. ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
  1842. LEFT JOIN
  1843. ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
  1844. LEFT JOIN
  1845. ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
  1846. LEFT JOIN
  1847. ICSInspection g WITH (NOLOCK) ON g.LotNo = a.LotNo AND g.WorkPoint = a.WorkPoint
  1848. WHERE
  1849. (a.BusinessCode = '1' OR a.BusinessCode = '9')
  1850. AND g.id IS NULL
  1851. AND a.MUSER <> 'admin'
  1852. AND CONVERT(DATE, a.MTIME) BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
  1853. GROUP BY
  1854. a.InvCode,
  1855. COALESCE(D.ASNCode, E.OASNCode),
  1856. F.BatchCode,
  1857. COALESCE(D.MUSER, E.MUSER),
  1858. COALESCE(D.MUSERName, E.MUSERName),
  1859. CONVERT(DATE, a.MTIME),
  1860. A.MUSERName,
  1861. A.TransCode
  1862. SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
  1863. INTO #Table1
  1864. FROM ( SELECT
  1865. a.InvCode ,a.IQCGroupHeaderResult ZZJG, CONVERT(DATE, a.FirstCheckTime) CHUJIANSHIJIAN
  1866. FROM IcsMatCheckResult a WITH (NOLOCK)
  1867. LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  1868. LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  1869. LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
  1870. LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
  1871. LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
  1872. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo WHERE CONVERT(DATE, a.FirstCheckTime ) BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
  1873. UNION ALL
  1874. SELECT InvCode,'' ZZJG,CHUJIANSHIJIAN from #tableMJ1
  1875. )
  1876. b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
  1877. GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
  1878. order by Week
  1879. SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
  1880. INTO #MothTable1
  1881. FROM ( SELECT
  1882. a.InvCode ,a.IQCGroupHeaderResult ZZJG, CONVERT(DATE, a.FirstCheckTime) CHUJIANSHIJIAN
  1883. FROM IcsMatCheckResult a WITH (NOLOCK)
  1884. LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  1885. LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  1886. LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
  1887. LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
  1888. LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
  1889. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
  1890. WHERE CONVERT(DATE, a.FirstCheckTime) BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
  1891. UNION ALL
  1892. SELECT InvCode,'' ZZJG,CHUJIANSHIJIAN from #tableMJ2
  1893. )
  1894. b where CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
  1895. GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
  1896. SELECT SUM(FistNG) AS WeekNGCount INTO #Table2
  1897. FROM #Table1
  1898. SELECT SUM(FistNG) AS MonthNGCount INTO #MothTable2
  1899. FROM #MothTable1
  1900. SELECT b.FistNG,a.Num WeeK INTO #Table3
  1901. FROM [ICSWeek] a
  1902. left JOIN #Table1 b ON a.Num=b.Week
  1903. UNION
  1904. SELECT b.FistNG,a.ENum FROM [ICSMonth] a
  1905. left JOIN #MothTable1 b ON a.ENum=b.Month
  1906. DECLARE @cols AS NVARCHAR(MAX)
  1907. SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
  1908. FROM #Table3 dr
  1909. FOR XML PATH(''), TYPE
  1910. ).value('.', 'NVARCHAR(MAX)') +']'
  1911. ,1,2,'')
  1912. SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
  1913. PIVOT ( SUM(FistNG) FOR Week IN ('+
  1914. @cols+') )a
  1915. '
  1916. PRINT(@cols)
  1917. EXEC(@cols)
  1918. DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1 DROP TABLE #tableMJ1 DROP TABLE #tableMJ2
  1919. ";
  1920. #endregion
  1921. #region 复判ng sencondNgsql
  1922. string sencondNgsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS SecondNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
  1923. INTO #Table1
  1924. FROM ( SELECT
  1925. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  1926. case when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc
  1927. FROM IcsMatCheckResult a WITH (NOLOCK)
  1928. LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  1929. LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  1930. LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
  1931. LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
  1932. LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
  1933. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  1934. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
  1935. )
  1936. b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}' and ZZJG='NG' AND BRGDesc='NG'
  1937. GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
  1938. order by Week
  1939. SELECT DISTINCT isnull(COUNT(*),0) AS SecondNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
  1940. INTO #MothTable1
  1941. FROM ( SELECT
  1942. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  1943. case when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc
  1944. FROM IcsMatCheckResult a WITH (NOLOCK)
  1945. LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  1946. LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  1947. LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
  1948. LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
  1949. LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
  1950. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  1951. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
  1952. )
  1953. b where CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}' and ZZJG='NG' AND BRGDesc='NG'
  1954. GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
  1955. SELECT SUM(SecondNG) AS WeekNGCount INTO #Table2
  1956. FROM #Table1
  1957. SELECT SUM(SecondNG) AS MonthNGCount INTO #MothTable2
  1958. FROM #MothTable1
  1959. SELECT b.SecondNG,a.Num WeeK INTO #Table3
  1960. FROM [ICSWeek] a
  1961. left JOIN #Table1 b ON a.Num=b.Week
  1962. UNION
  1963. SELECT b.SecondNG,a.ENum FROM [ICSMonth] a
  1964. left JOIN #MothTable1 b ON a.ENum=b.Month
  1965. DECLARE @cols AS NVARCHAR(MAX)
  1966. SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
  1967. FROM #Table3 dr
  1968. FOR XML PATH(''), TYPE
  1969. ).value('.', 'NVARCHAR(MAX)') +']'
  1970. ,1,2,'')
  1971. --SELECT * FROM #Table3
  1972. SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
  1973. PIVOT ( SUM(SecondNG) FOR Week IN ('+
  1974. @cols+') )a
  1975. '
  1976. PRINT(@cols)
  1977. EXEC(@cols)
  1978. DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
  1979. ";
  1980. #endregion
  1981. #region 待判中 underReRudgmentsql
  1982. string underReRudgmentsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS UnderReRudgment, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
  1983. INTO #Table1
  1984. FROM ( SELECT
  1985. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  1986. case when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc,a.Result JYXJG,
  1987. CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
  1988. ELSE '否' END AS SFJA
  1989. FROM IcsMatCheckResult a WITH (NOLOCK)
  1990. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  1991. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  1992. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  1993. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  1994. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  1995. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  1996. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
  1997. )
  1998. b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}' and ZZJG='NG' AND BRGDesc='NG' AND JYXJG='NG' AND SFJA='否'
  1999. GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
  2000. order by Week
  2001. SELECT DISTINCT isnull(COUNT(*),0) AS UnderReRudgment, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
  2002. INTO #MothTable1
  2003. FROM ( SELECT
  2004. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  2005. case when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc,a.Result JYXJG,
  2006. CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
  2007. ELSE '否' END AS SFJA
  2008. FROM IcsMatCheckResult a WITH (NOLOCK)
  2009. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  2010. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  2011. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  2012. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  2013. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  2014. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  2015. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
  2016. )
  2017. b where ZZJG='NG' AND BRGDesc='NG' AND JYXJG='NG' AND SFJA='否' and CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
  2018. GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
  2019. SELECT SUM(UnderReRudgment) AS WeekNGCount INTO #Table2
  2020. FROM #Table1
  2021. SELECT SUM(UnderReRudgment) AS MonthNGCount INTO #MothTable2
  2022. FROM #MothTable1
  2023. SELECT b.UnderReRudgment,a.Num WeeK INTO #Table3
  2024. FROM [ICSWeek] a
  2025. left JOIN #Table1 b ON a.Num=b.Week
  2026. UNION
  2027. SELECT b.UnderReRudgment,a.ENum FROM [ICSMonth] a
  2028. left JOIN #MothTable1 b ON a.ENum=b.Month
  2029. DECLARE @cols AS NVARCHAR(MAX)
  2030. SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
  2031. FROM #Table3 dr
  2032. FOR XML PATH(''), TYPE
  2033. ).value('.', 'NVARCHAR(MAX)') +']'
  2034. ,1,2,'')
  2035. --SELECT * FROM #Table3
  2036. SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
  2037. PIVOT ( SUM(UnderReRudgment) FOR Week IN ('+
  2038. @cols+') )a
  2039. '
  2040. PRINT(@cols)
  2041. EXEC(@cols)
  2042. DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
  2043. ";
  2044. #endregion
  2045. #region 分类不良数量 calssNGsql
  2046. var calssNGsql = $@"DECLARE @M int = {month}
  2047. SELECT ClassName,
  2048. '0' MonthlyCumulative,
  2049. '0' AnnualAccumulation,
  2050. sum(case when Month = 1 then Rec else 0 end) Month1Rec,
  2051. sum(case when Month = 1 then Ng else 0 end) Month1,
  2052. sum(case when Month = 2 then Rec else 0 end) Month2Rec,
  2053. sum(case when Month = 2 then Ng else 0 end) Month2,
  2054. sum(case when Month = 3 then Rec else 0 end) Month3Rec,
  2055. sum(case when Month = 3 then Ng else 0 end) Month3,
  2056. sum(case when Month = 4 then Rec else 0 end) Month4Rec,
  2057. sum(case when Month = 4 then Ng else 0 end) Month4,
  2058. sum(case when Month = 5 then Rec else 0 end) Month5Rec,
  2059. sum(case when Month = 5 then Ng else 0 end) Month5,
  2060. sum(case when Month = 6 then Rec else 0 end) Month6Rec,
  2061. sum(case when Month = 6 then Ng else 0 end) Month6,
  2062. sum(case when Month = 7 then Rec else 0 end) Month7Rec,
  2063. sum(case when Month = 7 then Ng else 0 end) Month7,
  2064. sum(case when Month = 8 then Rec else 0 end) Month8Rec,
  2065. sum(case when Month = 8 then Ng else 0 end) Month8,
  2066. sum(case when Month = 9 then Rec else 0 end) Month9Rec,
  2067. sum(case when Month = 9 then Ng else 0 end) Month9,
  2068. sum(case when Month = 10 then Rec else 0 end) Month10Rec,
  2069. sum(case when Month = 10 then Ng else 0 end) Month10,
  2070. sum(case when Month = 11 then Rec else 0 end) Month11Rec,
  2071. sum(case when Month = 11 then Ng else 0 end) Month11,
  2072. sum(case when Month = 12 then Rec else 0 end) Month12Rec,
  2073. sum(case when Month = 12 then Ng else 0 end) Month12,
  2074. sum(case when Month = @M and week = 1 then Rec else 0 end) Week1Rec,
  2075. sum(case when Month = @M and week = 1 then Ng else 0 end) Week1,
  2076. sum(case when Month = @M and week = 2 then Rec else 0 end) Week2Rec,
  2077. sum(case when Month = @M and week = 2 then Ng else 0 end) Week2,
  2078. sum(case when Month = @M and week = 3 then Rec else 0 end) Week3Rec,
  2079. sum(case when Month = @M and week = 3 then Ng else 0 end) Week3,
  2080. sum(case when Month = @M and week = 4 then Rec else 0 end) Week4Rec,
  2081. sum(case when Month = @M and week = 4 then Ng else 0 end) Week4,
  2082. sum(case when Month = @M and week = 5 then Rec else 0 end) Week5Rec,
  2083. sum(case when Month = @M and week = 5 then Ng else 0 end) Week5,
  2084. sum(case when Month = @M and week = 6 then Rec else 0 end) Week6Rec,
  2085. sum(case when Month = @M and week = 6 then Ng else 0 end) Week6
  2086. from (
  2087. SELECT ClassName,Rec,NG,
  2088. dateName(month, DT) Month,
  2089. CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,DT))%DATEPART(WEEK,DATEADD(DAY,-1,DATEADD(month, DATEDIFF(month, 0, DT), 0)))+1) Week
  2090. From(
  2091. SELECT count(1) Rec, sum((case when a.SQEEngineerResult='NG' and a.IQCGroupHeaderResult='NG' then 1 else 0 end)) as NG,
  2092. d.ClassName,
  2093. CAST(a.FirstCheckTime AS DATE) DT
  2094.       FROM IcsMatCheckResult a
  2095.       LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  2096.       LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  2097.       LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  2098.       LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  2099.       LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  2100.       LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
  2101.     WHERE a.FirstCheckTime BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'    
  2102.     GROUP BY d.ClassName, CAST(a.FirstCheckTime AS DATE)
  2103. )a)a group by classname";
  2104. #endregion
  2105. #endregion
  2106. var dt1 = SqlHelper.CmdExecuteDataTable(incomingMterialssql);
  2107. var dt2 = SqlHelper.CmdExecuteDataTable(sencondNgsql);
  2108. var dt3 = SqlHelper.CmdExecuteDataTable(underReRudgmentsql);
  2109. var dt4 = SqlHelper.CmdExecuteDataTable(calssNGsql);
  2110. for (int i=0;i<dt4.Rows.Count;i++)
  2111. {
  2112. PassFirstTimeModel passFirstTimeModel1 = new PassFirstTimeModel();
  2113. PassFirstTimeModel passFirstTimeModel2 = new PassFirstTimeModel();
  2114. passFirstTimeModel1.Decomposition1 = dt4.Rows[i]["ClassName"].ToString();
  2115. passFirstTimeModel1.Decomposition2 = "异常数量";
  2116. passFirstTimeModel1.Week1 = dt4.Rows[i]["Week1"].ToDecimal();
  2117. passFirstTimeModel1.Week2 = dt4.Rows[i]["Week2"].ToDecimal();
  2118. passFirstTimeModel1.Week3 = dt4.Rows[i]["Week3"].ToDecimal();
  2119. passFirstTimeModel1.Week4 = dt4.Rows[i]["Week4"].ToDecimal();
  2120. passFirstTimeModel1.Week5 = dt4.Rows[i]["Week5"].ToDecimal();
  2121. passFirstTimeModel1.Week6 = dt4.Rows[i]["Week6"].ToDecimal();
  2122. passFirstTimeModel1.MonthlyCumulative=dt4.Rows[i]["Week1"].ToDecimal()+dt4.Rows[i]["Week2"].ToDecimal()+
  2123. dt4.Rows[i]["Week3"].ToDecimal()+dt4.Rows[i]["Week4"].ToDecimal()+dt4.Rows[i]["Week5"].ToDecimal()+
  2124. dt4.Rows[i]["Week6"].ToDecimal();
  2125. passFirstTimeModel1.Month1 = dt4.Rows[i]["Month1"].ToDecimal();
  2126. passFirstTimeModel1.Month2 = dt4.Rows[i]["Month2"].ToDecimal();
  2127. passFirstTimeModel1.Month3 = dt4.Rows[i]["Month3"].ToDecimal();
  2128. passFirstTimeModel1.Month4 = dt4.Rows[i]["Month4"].ToDecimal();
  2129. passFirstTimeModel1.Month5 = dt4.Rows[i]["Month5"].ToDecimal();
  2130. passFirstTimeModel1.Month6 = dt4.Rows[i]["Month6"].ToDecimal();
  2131. passFirstTimeModel1.Month7 = dt4.Rows[i]["Month7"].ToDecimal();
  2132. passFirstTimeModel1.Month8 = dt4.Rows[i]["Month8"].ToDecimal();
  2133. passFirstTimeModel1.Month9 = dt4.Rows[i]["Month9"].ToDecimal();
  2134. passFirstTimeModel1.Month10 =dt4.Rows[i]["Month10"].ToDecimal();
  2135. passFirstTimeModel1.Month11 =dt4.Rows[i]["Month12"].ToDecimal();
  2136. passFirstTimeModel1.Month12 = dt4.Rows[i]["Month12"].ToDecimal();
  2137. passFirstTimeModel1.AnnualAccumulation =dt4.Rows[i]["Month1"].ToDecimal()+dt4.Rows[i]["Month2"].ToDecimal()+
  2138. dt4.Rows[i]["Month3"].ToDecimal()+dt4.Rows[i]["Month4"].ToDecimal()+dt4.Rows[i]["Month5"].ToDecimal()+
  2139. dt4.Rows[i]["Month6"].ToDecimal()+dt4.Rows[i]["Month7"].ToDecimal()+dt4.Rows[i]["Month8"].ToDecimal()+
  2140. dt4.Rows[i]["Month9"].ToDecimal()+dt4.Rows[i]["Month10"].ToDecimal()+dt4.Rows[i]["Month12"].ToDecimal()+
  2141. dt4.Rows[i]["Month12"].ToDecimal();
  2142. dt4.Rows[i]["MonthlyCumulative"] = passFirstTimeModel1.MonthlyCumulative.ToString();
  2143. dt4.Rows[i]["AnnualAccumulation"] = passFirstTimeModel1.AnnualAccumulation.ToString();
  2144. DataRow dt5 = dt4.Rows[i];
  2145. passFirstTimeModel2.Decomposition1 = dt4.Rows[i]["ClassName"].ToString();
  2146. passFirstTimeModel2.Decomposition2 = "不良率";
  2147. var data = NGCount(new List<string> {
  2148. "Week1", "Week2", "Week3", "Week4", "Week5", "Week6",
  2149. "Month1",
  2150. "Month2",
  2151. "Month3",
  2152. "Month4",
  2153. "Month5",
  2154. "Month6",
  2155. "Month7",
  2156. "Month8",
  2157. "Month9",
  2158. "Month10",
  2159. "Month11",
  2160. "Month12","MonthlyCumulative","AnnualAccumulation"},
  2161. dt1,dt3, dt5);
  2162. #region 周数据
  2163. passFirstTimeModel2.Week1 = data["Week1"].V1;
  2164. passFirstTimeModel2.Week2 = data["Week2"].V1;
  2165. passFirstTimeModel2.Week3 = data["Week3"].V1;
  2166. passFirstTimeModel2.Week4 = data["Week4"].V1;
  2167. passFirstTimeModel2.Week5 = data["Week5"].V1;
  2168. passFirstTimeModel2.Week6 = data["Week6"].V1;
  2169. #endregion
  2170. #region 月数据
  2171. passFirstTimeModel2.Month1 = data["Month1"].V1;
  2172. passFirstTimeModel2.Month2 = data["Month2"].V1;
  2173. passFirstTimeModel2.Month3 = data["Month3"].V1;
  2174. passFirstTimeModel2.Month4 = data["Month4"].V1;
  2175. passFirstTimeModel2.Month5 = data["Month5"].V1;
  2176. passFirstTimeModel2.Month6 = data["Month6"].V1;
  2177. passFirstTimeModel2.Month7 = data["Month7"].V1;
  2178. passFirstTimeModel2.Month8 = data["Month8"].V1;
  2179. passFirstTimeModel2.Month9 = data["Month9"].V1;
  2180. passFirstTimeModel2.Month10 = data["Month10"].V1;
  2181. passFirstTimeModel2.Month11 = data["Month11"].V1;
  2182. passFirstTimeModel2.Month12 = data["Month12"].V1;
  2183. #endregion
  2184. #region 汇总
  2185. passFirstTimeModel2.MonthlyCumulative = data["MonthlyCumulative"].V1;
  2186. passFirstTimeModel2.AnnualAccumulation = data["AnnualAccumulation"].V1;
  2187. passFirstTimeModel.Add(passFirstTimeModel1);
  2188. passFirstTimeModel.Add(passFirstTimeModel2);
  2189. #endregion
  2190. }
  2191. //合计信息
  2192. #region 合计信息
  2193. PassFirstTimeModel passFirstTimeModel3 = new PassFirstTimeModel();
  2194. PassFirstTimeModel passFirstTimeModel4 = new PassFirstTimeModel();
  2195. PassFirstTimeModel passFirstTimeModel5 = new PassFirstTimeModel();
  2196. PassFirstTimeModel passFirstTimeModel6 = new PassFirstTimeModel();
  2197. passFirstTimeModel3.Decomposition1 = "合计";
  2198. passFirstTimeModel3.Decomposition2 = "异常数量";
  2199. passFirstTimeModel3.Week1 = dt2.Rows[0]["Week1"].ToDecimal();
  2200. passFirstTimeModel3.Week2 = dt2.Rows[0]["Week2"].ToDecimal();
  2201. passFirstTimeModel3.Week3 = dt2.Rows[0]["Week3"].ToDecimal();
  2202. passFirstTimeModel3.Week4 = dt2.Rows[0]["Week4"].ToDecimal();
  2203. passFirstTimeModel3.Week5 = dt2.Rows[0]["Week5"].ToDecimal();
  2204. passFirstTimeModel3.Week6 = dt2.Rows[0]["Week6"].ToDecimal();
  2205. passFirstTimeModel3.MonthlyCumulative = dt2.Rows[0]["MonthlyCumulative"].ToDecimal();
  2206. passFirstTimeModel3.Month1 = dt2.Rows[0]["Month1"].ToDecimal();
  2207. passFirstTimeModel3.Month2 = dt2.Rows[0]["Month2"].ToDecimal();
  2208. passFirstTimeModel3.Month3 = dt2.Rows[0]["Month3"].ToDecimal();
  2209. passFirstTimeModel3.Month4 = dt2.Rows[0]["Month4"].ToDecimal();
  2210. passFirstTimeModel3.Month5 = dt2.Rows[0]["Month5"].ToDecimal();
  2211. passFirstTimeModel3.Month6 = dt2.Rows[0]["Month6"].ToDecimal();
  2212. passFirstTimeModel3.Month7 = dt2.Rows[0]["Month7"].ToDecimal();
  2213. passFirstTimeModel3.Month8 = dt2.Rows[0]["Month8"].ToDecimal();
  2214. passFirstTimeModel3.Month9 = dt2.Rows[0]["Month9"].ToDecimal();
  2215. passFirstTimeModel3.Month10 = dt2.Rows[0]["Month10"].ToDecimal();
  2216. passFirstTimeModel3.Month11 = dt2.Rows[0]["Month12"].ToDecimal();
  2217. passFirstTimeModel3.Month12 = dt2.Rows[0]["Month12"].ToDecimal();
  2218. passFirstTimeModel3.AnnualAccumulation = dt2.Rows[0]["AnnualAccumulation"].ToDecimal();
  2219. passFirstTimeModel4.Decomposition1 = "合计";
  2220. passFirstTimeModel4.Decomposition2 = "来料数量";
  2221. passFirstTimeModel4.Week1 = dt1.Rows[0]["Week1"].ToDecimal();
  2222. passFirstTimeModel4.Week2 = dt1.Rows[0]["Week2"].ToDecimal();
  2223. passFirstTimeModel4.Week3 = dt1.Rows[0]["Week3"].ToDecimal();
  2224. passFirstTimeModel4.Week4 = dt1.Rows[0]["Week4"].ToDecimal();
  2225. passFirstTimeModel4.Week5 = dt1.Rows[0]["Week5"].ToDecimal();
  2226. passFirstTimeModel4.Week6 = dt1.Rows[0]["Week6"].ToDecimal();
  2227. passFirstTimeModel4.MonthlyCumulative = dt1.Rows[0]["MonthlyCumulative"].ToDecimal();
  2228. passFirstTimeModel4.Month1 = dt1.Rows[0]["Month1"].ToDecimal();
  2229. passFirstTimeModel4.Month2 = dt1.Rows[0]["Month2"].ToDecimal();
  2230. passFirstTimeModel4.Month3 = dt1.Rows[0]["Month3"].ToDecimal();
  2231. passFirstTimeModel4.Month4 = dt1.Rows[0]["Month4"].ToDecimal();
  2232. passFirstTimeModel4.Month5 = dt1.Rows[0]["Month5"].ToDecimal();
  2233. passFirstTimeModel4.Month6 = dt1.Rows[0]["Month6"].ToDecimal();
  2234. passFirstTimeModel4.Month7 = dt1.Rows[0]["Month7"].ToDecimal();
  2235. passFirstTimeModel4.Month8 = dt1.Rows[0]["Month8"].ToDecimal();
  2236. passFirstTimeModel4.Month9 = dt1.Rows[0]["Month9"].ToDecimal();
  2237. passFirstTimeModel4.Month10 = dt1.Rows[0]["Month10"].ToDecimal();
  2238. passFirstTimeModel4.Month11 = dt1.Rows[0]["Month12"].ToDecimal();
  2239. passFirstTimeModel4.Month12 = dt1.Rows[0]["Month12"].ToDecimal();
  2240. passFirstTimeModel4.AnnualAccumulation = dt1.Rows[0]["AnnualAccumulation"].ToDecimal();
  2241. var data1 = NGCount(new List<string> {
  2242. "Week1", "Week2", "Week3", "Week4", "Week5", "Week6",
  2243. "Month1",
  2244. "Month2",
  2245. "Month3",
  2246. "Month4",
  2247. "Month5",
  2248. "Month6",
  2249. "Month7",
  2250. "Month8",
  2251. "Month9",
  2252. "Month10",
  2253. "Month11",
  2254. "Month12","MonthlyCumulative","AnnualAccumulation"},
  2255. dt1, dt3, dt2);
  2256. #region 周数据
  2257. passFirstTimeModel5.Decomposition1 = "合计";
  2258. passFirstTimeModel5.Decomposition2 = "不良率";
  2259. passFirstTimeModel5.Week1 = data1["Week1"].V1;
  2260. passFirstTimeModel5.Week2 = data1["Week2"].V1;
  2261. passFirstTimeModel5.Week3 = data1["Week3"].V1;
  2262. passFirstTimeModel5.Week4 = data1["Week4"].V1;
  2263. passFirstTimeModel5.Week5 = data1["Week5"].V1;
  2264. passFirstTimeModel5.Week6 = data1["Week6"].V1;
  2265. #endregion
  2266. #region 月数据
  2267. passFirstTimeModel5.Month1 = data1["Month1"].V1;
  2268. passFirstTimeModel5.Month2 = data1["Month2"].V1;
  2269. passFirstTimeModel5.Month3 = data1["Month3"].V1;
  2270. passFirstTimeModel5.Month4 = data1["Month4"].V1;
  2271. passFirstTimeModel5.Month5 = data1["Month5"].V1;
  2272. passFirstTimeModel5.Month6 = data1["Month6"].V1;
  2273. passFirstTimeModel5.Month7 = data1["Month7"].V1;
  2274. passFirstTimeModel5.Month8 = data1["Month8"].V1;
  2275. passFirstTimeModel5.Month9 = data1["Month9"].V1;
  2276. passFirstTimeModel5.Month10 = data1["Month10"].V1;
  2277. passFirstTimeModel5.Month11 = data1["Month11"].V1;
  2278. passFirstTimeModel5.Month12 = data1["Month12"].V1;
  2279. #endregion
  2280. #region 汇总
  2281. passFirstTimeModel5.MonthlyCumulative = data1["MonthlyCumulative"].V1;
  2282. passFirstTimeModel5.AnnualAccumulation = data1["AnnualAccumulation"].V1;
  2283. #endregion
  2284. passFirstTimeModel6.Decomposition1 = "";
  2285. passFirstTimeModel6.Decomposition2 = "待判数量";
  2286. passFirstTimeModel6.Week1 = dt3.Rows[0]["Week1"].ToDecimal();
  2287. passFirstTimeModel6.Week2 = dt3.Rows[0]["Week2"].ToDecimal();
  2288. passFirstTimeModel6.Week3 = dt3.Rows[0]["Week3"].ToDecimal();
  2289. passFirstTimeModel6.Week4 = dt3.Rows[0]["Week4"].ToDecimal();
  2290. passFirstTimeModel6.Week5 = dt3.Rows[0]["Week5"].ToDecimal();
  2291. passFirstTimeModel6.Week6 = dt3.Rows[0]["Week6"].ToDecimal();
  2292. passFirstTimeModel6.MonthlyCumulative = dt3.Rows[0]["MonthlyCumulative"].ToDecimal();
  2293. passFirstTimeModel6.Month1 = dt3.Rows[0]["Month1"].ToDecimal();
  2294. passFirstTimeModel6.Month2 = dt3.Rows[0]["Month2"].ToDecimal();
  2295. passFirstTimeModel6.Month3 = dt3.Rows[0]["Month3"].ToDecimal();
  2296. passFirstTimeModel6.Month4 = dt3.Rows[0]["Month4"].ToDecimal();
  2297. passFirstTimeModel6.Month5 = dt3.Rows[0]["Month5"].ToDecimal();
  2298. passFirstTimeModel6.Month6 = dt3.Rows[0]["Month6"].ToDecimal();
  2299. passFirstTimeModel6.Month7 = dt3.Rows[0]["Month7"].ToDecimal();
  2300. passFirstTimeModel6.Month8 = dt3.Rows[0]["Month8"].ToDecimal();
  2301. passFirstTimeModel6.Month9 = dt3.Rows[0]["Month9"].ToDecimal();
  2302. passFirstTimeModel6.Month10 = dt3.Rows[0]["Month10"].ToDecimal();
  2303. passFirstTimeModel6.Month11 = dt3.Rows[0]["Month12"].ToDecimal();
  2304. passFirstTimeModel6.Month12 = dt3.Rows[0]["Month12"].ToDecimal();
  2305. passFirstTimeModel6.AnnualAccumulation = dt3.Rows[0]["AnnualAccumulation"].ToDecimal();
  2306. passFirstTimeModel.Add(passFirstTimeModel3);
  2307. passFirstTimeModel.Add(passFirstTimeModel4);
  2308. passFirstTimeModel.Add(passFirstTimeModel5);
  2309. passFirstTimeModel.Add(passFirstTimeModel6);
  2310. #endregion
  2311. return passFirstTimeModel.ToJson();
  2312. }
  2313. catch (Exception ex)
  2314. {
  2315. return ex.Message;
  2316. }
  2317. }
  2318. #endregion
  2319. public DataTable ExportAll3(string DateNow)
  2320. {
  2321. string date = DateNow;
  2322. var dates = date.ToDate();
  2323. var daysMonth = dates.ToString("MM");
  2324. var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).ToString("yyyy-MM-dd");
  2325. var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
  2326. var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
  2327. var firstDayofYear = new DateTime(dates.Year, 1, 1).ToString("yyyy-MM-dd");
  2328. var firstDayofNextYear = new DateTime(dates.Year + 1, 1, 1).ToString("yyyy-MM-dd");
  2329. int month = dates.Month;
  2330. #region [SQL]
  2331. #region IncomingMterialssql 来料数量
  2332. string incomingMterialssql = $@"SELECT DISTINCT
  2333. a.InvCode,
  2334. COALESCE(D.ASNCode, E.OASNCode) AS ASNCode,
  2335. F.BatchCode,
  2336. SUM(A.Quantity) AS InvBatcgQty,
  2337. COALESCE(D.MUSER, E.MUSER) AS VenCode,
  2338. COALESCE(D.MUSERName, E.MUSERName) AS VENNAME,
  2339. CONVERT(DATE, a.MTIME) AS CHUJIANSHIJIAN --
  2340. into #tableMJ1
  2341. FROM
  2342. ICSWareHouseLotInfoLog a WITH (NOLOCK)
  2343. INNER JOIN
  2344. ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
  2345. LEFT JOIN
  2346. ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
  2347. LEFT JOIN
  2348. ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
  2349. LEFT JOIN
  2350. ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
  2351. LEFT JOIN
  2352. ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
  2353. LEFT JOIN
  2354. ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
  2355. LEFT JOIN
  2356. ICSInspection g WITH (NOLOCK) ON g.LotNo = a.LotNo AND g.WorkPoint = a.WorkPoint
  2357. WHERE
  2358. (a.BusinessCode = '1' OR a.BusinessCode = '9')
  2359. AND g.id IS NULL
  2360. AND a.MUSER <> 'admin'
  2361. AND CONVERT(DATE, a.MTIME) BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
  2362. GROUP BY
  2363. a.InvCode,
  2364. COALESCE(D.ASNCode, E.OASNCode),
  2365. F.BatchCode,
  2366. COALESCE(D.MUSER, E.MUSER),
  2367. COALESCE(D.MUSERName, E.MUSERName),
  2368. CONVERT(DATE, a.MTIME),
  2369. A.MUSERName,
  2370. A.TransCode
  2371. SELECT DISTINCT
  2372. a.InvCode,
  2373. COALESCE(D.ASNCode, E.OASNCode) AS ASNCode,
  2374. F.BatchCode,
  2375. SUM(A.Quantity) AS InvBatcgQty,
  2376. COALESCE(D.MUSER, E.MUSER) AS VenCode,
  2377. COALESCE(D.MUSERName, E.MUSERName) AS VENNAME,
  2378. CONVERT(DATE, a.MTIME) AS CHUJIANSHIJIAN --
  2379. into #tableMJ2
  2380. FROM
  2381. ICSWareHouseLotInfoLog a WITH (NOLOCK)
  2382. INNER JOIN
  2383. ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
  2384. LEFT JOIN
  2385. ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
  2386. LEFT JOIN
  2387. ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
  2388. LEFT JOIN
  2389. ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
  2390. LEFT JOIN
  2391. ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
  2392. LEFT JOIN
  2393. ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
  2394. LEFT JOIN
  2395. ICSInspection g WITH (NOLOCK) ON g.LotNo = a.LotNo AND g.WorkPoint = a.WorkPoint
  2396. WHERE
  2397. (a.BusinessCode = '1' OR a.BusinessCode = '9')
  2398. AND g.id IS NULL
  2399. AND a.MUSER <> 'admin'
  2400. AND CONVERT(DATE, a.MTIME) BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
  2401. GROUP BY
  2402. a.InvCode,
  2403. COALESCE(D.ASNCode, E.OASNCode),
  2404. F.BatchCode,
  2405. COALESCE(D.MUSER, E.MUSER),
  2406. COALESCE(D.MUSERName, E.MUSERName),
  2407. CONVERT(DATE, a.MTIME),
  2408. A.MUSERName,
  2409. A.TransCode
  2410. SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
  2411. INTO #Table1
  2412. FROM ( SELECT
  2413. a.InvCode ,a.IQCGroupHeaderResult ZZJG, CONVERT(DATE, a.FirstCheckTime) CHUJIANSHIJIAN
  2414. FROM IcsMatCheckResult a
  2415. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  2416. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  2417. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  2418. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  2419. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  2420. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo WHERE CONVERT(DATE, a.FirstCheckTime) BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
  2421. UNION ALL
  2422. SELECT InvCode,'' ZZJG,CHUJIANSHIJIAN from #tableMJ1
  2423. )
  2424. b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}'
  2425. GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
  2426. order by Week
  2427. SELECT DISTINCT isnull(COUNT(*),0) AS FistNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
  2428. INTO #MothTable1
  2429. FROM ( SELECT
  2430. a.InvCode ,a.IQCGroupHeaderResult ZZJG, CONVERT(DATE, a.FirstCheckTime) CHUJIANSHIJIAN
  2431. FROM IcsMatCheckResult a
  2432. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  2433. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  2434. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  2435. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  2436. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  2437. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
  2438. WHERE CONVERT(DATE, a.FirstCheckTime) BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
  2439. UNION ALL
  2440. SELECT InvCode,'' ZZJG,CHUJIANSHIJIAN from #tableMJ2
  2441. )
  2442. b where CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
  2443. GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
  2444. SELECT SUM(FistNG) AS WeekNGCount INTO #Table2
  2445. FROM #Table1
  2446. SELECT SUM(FistNG) AS MonthNGCount INTO #MothTable2
  2447. FROM #MothTable1
  2448. SELECT b.FistNG,a.Num WeeK INTO #Table3
  2449. FROM [ICSWeek] a
  2450. left JOIN #Table1 b ON a.Num=b.Week
  2451. UNION
  2452. SELECT b.FistNG,a.ENum FROM [ICSMonth] a
  2453. left JOIN #MothTable1 b ON a.ENum=b.Month
  2454. DECLARE @cols AS NVARCHAR(MAX)
  2455. SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
  2456. FROM #Table3 dr
  2457. FOR XML PATH(''), TYPE
  2458. ).value('.', 'NVARCHAR(MAX)') +']'
  2459. ,1,2,'')
  2460. SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
  2461. PIVOT ( SUM(FistNG) FOR Week IN ('+
  2462. @cols+') )a
  2463. '
  2464. PRINT(@cols)
  2465. EXEC(@cols)
  2466. DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1 DROP TABLE #tableMJ1 DROP TABLE #tableMJ2
  2467. ";
  2468. #endregion
  2469. #region 复判ng sencondNgsql
  2470. string sencondNgsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS SecondNG, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
  2471. INTO #Table1
  2472. FROM ( SELECT
  2473. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  2474. case when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc
  2475. FROM IcsMatCheckResult a WITH (NOLOCK)
  2476. LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  2477. LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  2478. LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
  2479. LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
  2480. LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
  2481. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  2482. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
  2483. )
  2484. b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}' and ZZJG='NG' AND BRGDesc='NG'
  2485. GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
  2486. order by Week
  2487. SELECT DISTINCT isnull(COUNT(*),0) AS SecondNG, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
  2488. INTO #MothTable1
  2489. FROM ( SELECT
  2490. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  2491. case when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc
  2492. FROM IcsMatCheckResult a WITH (NOLOCK)
  2493. LEFT JOIN ICSVendor c WITH (NOLOCK) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  2494. LEFT JOIN ICSInventory d WITH (NOLOCK) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  2495. LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode=A.BCGCode
  2496. LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode=A.BadReasonCode
  2497. LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode=A.BRGCode
  2498. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  2499. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
  2500. )
  2501. b where CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}' and ZZJG='NG' AND BRGDesc='NG'
  2502. GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
  2503. SELECT SUM(SecondNG) AS WeekNGCount INTO #Table2
  2504. FROM #Table1
  2505. SELECT SUM(SecondNG) AS MonthNGCount INTO #MothTable2
  2506. FROM #MothTable1
  2507. SELECT b.SecondNG,a.Num WeeK INTO #Table3
  2508. FROM [ICSWeek] a
  2509. left JOIN #Table1 b ON a.Num=b.Week
  2510. UNION
  2511. SELECT b.SecondNG,a.ENum FROM [ICSMonth] a
  2512. left JOIN #MothTable1 b ON a.ENum=b.Month
  2513. DECLARE @cols AS NVARCHAR(MAX)
  2514. SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
  2515. FROM #Table3 dr
  2516. FOR XML PATH(''), TYPE
  2517. ).value('.', 'NVARCHAR(MAX)') +']'
  2518. ,1,2,'')
  2519. --SELECT * FROM #Table3
  2520. SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
  2521. PIVOT ( SUM(SecondNG) FOR Week IN ('+
  2522. @cols+') )a
  2523. '
  2524. PRINT(@cols)
  2525. EXEC(@cols)
  2526. DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
  2527. ";
  2528. #endregion
  2529. #region 待判中 underReRudgmentsql
  2530. string underReRudgmentsql = $@"SELECT DISTINCT isnull(COUNT(*),0) AS UnderReRudgment, 'Week'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1) AS Week
  2531. INTO #Table1
  2532. FROM ( SELECT
  2533. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  2534. case when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc,a.Result JYXJG,
  2535. CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
  2536. ELSE '否' END AS SFJA
  2537. FROM IcsMatCheckResult a WITH (NOLOCK)
  2538. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  2539. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  2540. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  2541. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  2542. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  2543. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  2544. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
  2545. )
  2546. b where CHUJIANSHIJIAN BETWEEN '{firstDayOfMonth}' AND '{lastDayOfMonth}' and ZZJG='NG' AND BRGDesc='NG' AND JYXJG='NG' AND SFJA='否'
  2547. GROUP BY CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,CHUJIANSHIJIAN))%DATEPART(WEEK,DATEADD(DAY,-1,'{firstDayOfMonth}'))+1)
  2548. order by Week
  2549. SELECT DISTINCT isnull(COUNT(*),0) AS UnderReRudgment, 'Month'+CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))) AS Month
  2550. INTO #MothTable1
  2551. FROM ( SELECT
  2552. a.InvCode ,a.IQCGroupHeaderResult ZZJG, FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  2553. case when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc,a.Result JYXJG,
  2554. CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
  2555. ELSE '否' END AS SFJA
  2556. FROM IcsMatCheckResult a WITH (NOLOCK)
  2557. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  2558. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  2559. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  2560. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  2561. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  2562. --LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  2563. LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail WITH (NOLOCK)) ZB ON ZB.CheckNo=A.CheckNo
  2564. )
  2565. b where ZZJG='NG' AND BRGDesc='NG' AND JYXJG='NG' AND SFJA='否' and CHUJIANSHIJIAN BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'
  2566. GROUP BY DATEPART(MONTH,DATEADD(DAY,-1,CHUJIANSHIJIAN))
  2567. SELECT SUM(UnderReRudgment) AS WeekNGCount INTO #Table2
  2568. FROM #Table1
  2569. SELECT SUM(UnderReRudgment) AS MonthNGCount INTO #MothTable2
  2570. FROM #MothTable1
  2571. SELECT b.UnderReRudgment,a.Num WeeK INTO #Table3
  2572. FROM [ICSWeek] a
  2573. left JOIN #Table1 b ON a.Num=b.Week
  2574. UNION
  2575. SELECT b.UnderReRudgment,a.ENum FROM [ICSMonth] a
  2576. left JOIN #MothTable1 b ON a.ENum=b.Month
  2577. DECLARE @cols AS NVARCHAR(MAX)
  2578. SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Week
  2579. FROM #Table3 dr
  2580. FOR XML PATH(''), TYPE
  2581. ).value('.', 'NVARCHAR(MAX)') +']'
  2582. ,1,2,'')
  2583. --SELECT * FROM #Table3
  2584. SET @cols='SELECT (select * from #Table2) MonthlyCumulative,(select * from #MothTable2) AnnualAccumulation, * FROM #Table3
  2585. PIVOT ( SUM(UnderReRudgment) FOR Week IN ('+
  2586. @cols+') )a
  2587. '
  2588. PRINT(@cols)
  2589. EXEC(@cols)
  2590. DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
  2591. ";
  2592. #endregion
  2593. #region 分类不良数量 calssNGsql
  2594. var calssNGsql = $@"DECLARE @M int = {month}
  2595. SELECT ClassName,
  2596. '0' MonthlyCumulative,
  2597. '0' AnnualAccumulation,
  2598. sum(case when Month = 1 then Rec else 0 end) Month1Rec,
  2599. sum(case when Month = 1 then Ng else 0 end) Month1,
  2600. sum(case when Month = 2 then Rec else 0 end) Month2Rec,
  2601. sum(case when Month = 2 then Ng else 0 end) Month2,
  2602. sum(case when Month = 3 then Rec else 0 end) Month3Rec,
  2603. sum(case when Month = 3 then Ng else 0 end) Month3,
  2604. sum(case when Month = 4 then Rec else 0 end) Month4Rec,
  2605. sum(case when Month = 4 then Ng else 0 end) Month4,
  2606. sum(case when Month = 5 then Rec else 0 end) Month5Rec,
  2607. sum(case when Month = 5 then Ng else 0 end) Month5,
  2608. sum(case when Month = 6 then Rec else 0 end) Month6Rec,
  2609. sum(case when Month = 6 then Ng else 0 end) Month6,
  2610. sum(case when Month = 7 then Rec else 0 end) Month7Rec,
  2611. sum(case when Month = 7 then Ng else 0 end) Month7,
  2612. sum(case when Month = 8 then Rec else 0 end) Month8Rec,
  2613. sum(case when Month = 8 then Ng else 0 end) Month8,
  2614. sum(case when Month = 9 then Rec else 0 end) Month9Rec,
  2615. sum(case when Month = 9 then Ng else 0 end) Month9,
  2616. sum(case when Month = 10 then Rec else 0 end) Month10Rec,
  2617. sum(case when Month = 10 then Ng else 0 end) Month10,
  2618. sum(case when Month = 11 then Rec else 0 end) Month11Rec,
  2619. sum(case when Month = 11 then Ng else 0 end) Month11,
  2620. sum(case when Month = 12 then Rec else 0 end) Month12Rec,
  2621. sum(case when Month = 12 then Ng else 0 end) Month12,
  2622. sum(case when Month = @M and week = 1 then Rec else 0 end) Week1Rec,
  2623. sum(case when Month = @M and week = 1 then Ng else 0 end) Week1,
  2624. sum(case when Month = @M and week = 2 then Rec else 0 end) Week2Rec,
  2625. sum(case when Month = @M and week = 2 then Ng else 0 end) Week2,
  2626. sum(case when Month = @M and week = 3 then Rec else 0 end) Week3Rec,
  2627. sum(case when Month = @M and week = 3 then Ng else 0 end) Week3,
  2628. sum(case when Month = @M and week = 4 then Rec else 0 end) Week4Rec,
  2629. sum(case when Month = @M and week = 4 then Ng else 0 end) Week4,
  2630. sum(case when Month = @M and week = 5 then Rec else 0 end) Week5Rec,
  2631. sum(case when Month = @M and week = 5 then Ng else 0 end) Week5,
  2632. sum(case when Month = @M and week = 6 then Rec else 0 end) Week6Rec,
  2633. sum(case when Month = @M and week = 6 then Ng else 0 end) Week6
  2634. from (
  2635. SELECT ClassName,Rec,NG,
  2636. dateName(month, DT) Month,
  2637. CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,DT))%DATEPART(WEEK,DATEADD(DAY,-1,DATEADD(month, DATEDIFF(month, 0, DT), 0)))+1) Week
  2638. From(
  2639. SELECT count(1) Rec, sum((case when a.SQEEngineerResult='NG' and a.IQCGroupHeaderResult='NG' then 1 else 0 end)) as NG,
  2640. d.ClassName,
  2641. CAST(a.FirstCheckTime AS DATE) DT
  2642.       FROM IcsMatCheckResult a
  2643.       LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  2644.       LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  2645.       LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  2646.       LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  2647.       LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  2648.       LEFT JOIN (SELECT DISTINCT CheckNo,MUSERName,CONVERT(NVARCHAR(10),MTIME,102) TIME FROM IcsMatCheckResultDetail) ZB ON ZB.CheckNo=A.CheckNo
  2649.     WHERE a.FirstCheckTime BETWEEN '{firstDayofYear}' AND '{firstDayofNextYear}'    
  2650.     GROUP BY d.ClassName, CAST(a.FirstCheckTime AS DATE)
  2651. )a)a group by classname";
  2652. #endregion
  2653. #endregion
  2654. var dt1 = SqlHelper.CmdExecuteDataTable(incomingMterialssql);
  2655. var dt2 = SqlHelper.CmdExecuteDataTable(sencondNgsql);
  2656. var dt3 = SqlHelper.CmdExecuteDataTable(underReRudgmentsql);
  2657. var dt4 = SqlHelper.CmdExecuteDataTable(calssNGsql);
  2658. // 创建一个新的 DataTable
  2659. DataTable table = new DataTable();
  2660. #region 添加列到 DataTable
  2661. table.Columns.Add("材料类别", typeof(string));
  2662. table.Columns.Add("类别", typeof(string));
  2663. // 添加月份和周次的列
  2664. string[] weeksInJanuary = { $"{daysMonth}月第1周", $"{daysMonth}月第2周", $"{daysMonth}月第3周", $"{daysMonth}月第4周", $"{daysMonth}月第5周", $"{daysMonth}月第6周" };
  2665. for (int j = 0; j < weeksInJanuary.Length; j++)
  2666. {
  2667. table.Columns.Add(weeksInJanuary[j], typeof(string));
  2668. }
  2669. table.Columns.Add("当月累计", typeof(string));
  2670. // 添加月份的列
  2671. string[] months = { "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月" };
  2672. for (int j = 0; j < months.Length; j++)
  2673. {
  2674. table.Columns.Add(months[j], typeof(string));
  2675. }
  2676. table.Columns.Add("年度累计", typeof(string));
  2677. #endregion
  2678. #region 循环添加数据
  2679. for (int i = 0; i < dt4.Rows.Count; i++)
  2680. {
  2681. DataRow row1 = table.NewRow();
  2682. DataRow row2 = table.NewRow();
  2683. row1["材料类别"] = dt4.Rows[i]["ClassName"].ToString();
  2684. row1["类别"] = "异常数量";
  2685. row2["材料类别"] = dt4.Rows[i]["ClassName"].ToString();
  2686. row2["类别"] = "不良率";
  2687. for (int j = 0; j < weeksInJanuary.Length; j++)
  2688. {
  2689. string week = weeksInJanuary[j];
  2690. int k = j + 1;
  2691. row1[week] = dt4.Rows[i]["Week" + k] ;
  2692. }
  2693. var monthlyCumulative = dt4.Rows[i]["Week1"].ToDecimal() + dt4.Rows[i]["Week2"].ToDecimal() +
  2694. dt4.Rows[i]["Week3"].ToDecimal() + dt4.Rows[i]["Week4"].ToDecimal() + dt4.Rows[i]["Week5"].ToDecimal() +
  2695. dt4.Rows[i]["Week6"].ToDecimal();
  2696. var annualAccumulation = dt4.Rows[i]["Month1"].ToDecimal() + dt4.Rows[i]["Month2"].ToDecimal() +
  2697. dt4.Rows[i]["Month3"].ToDecimal() + dt4.Rows[i]["Month4"].ToDecimal() + dt4.Rows[i]["Month5"].ToDecimal() +
  2698. dt4.Rows[i]["Month6"].ToDecimal() + dt4.Rows[i]["Month7"].ToDecimal() + dt4.Rows[i]["Month8"].ToDecimal() +
  2699. dt4.Rows[i]["Month9"].ToDecimal() + dt4.Rows[i]["Month10"].ToDecimal() + dt4.Rows[i]["Month12"].ToDecimal() +
  2700. dt4.Rows[i]["Month12"].ToDecimal();
  2701. row1["当月累计"] = monthlyCumulative;
  2702. for (int j = 0; j < months.Length; j++)
  2703. {
  2704. string monthIndex = months[j];
  2705. int k = j + 1;
  2706. row1[monthIndex] = dt4.Rows[i]["Month" + k];
  2707. }
  2708. row1["年度累计"] = monthlyCumulative;
  2709. dt4.Rows[i]["MonthlyCumulative"] = monthlyCumulative.ToString();
  2710. dt4.Rows[i]["AnnualAccumulation"] = annualAccumulation.ToString();
  2711. DataRow dt5 = dt4.Rows[i];
  2712. var data = NGCount(new List<string> {
  2713. "Week1", "Week2", "Week3", "Week4", "Week5", "Week6",
  2714. "Month1",
  2715. "Month2",
  2716. "Month3",
  2717. "Month4",
  2718. "Month5",
  2719. "Month6",
  2720. "Month7",
  2721. "Month8",
  2722. "Month9",
  2723. "Month10",
  2724. "Month11",
  2725. "Month12","MonthlyCumulative","AnnualAccumulation"},
  2726. dt1, dt3, dt5);
  2727. #region 周数据
  2728. for (int j = 0; j < weeksInJanuary.Length; j++)
  2729. {
  2730. string week = weeksInJanuary[j];
  2731. int k = j + 1;
  2732. row2[week] = data["Week" + k].V1 + "%";
  2733. }
  2734. #endregion
  2735. row2["当月累计"] = data["MonthlyCumulative"].V1 + "%";
  2736. #region 月数据
  2737. for (int j = 0; j < months.Length; j++)
  2738. {
  2739. string monthIndex = months[j];
  2740. int k = j + 1;
  2741. row2[monthIndex] = data["Month" + k].V1 + "%";
  2742. }
  2743. #endregion
  2744. #region 汇总
  2745. row2["年度累计"] = data["AnnualAccumulation"].V1;
  2746. table.Rows.Add(row1);
  2747. table.Rows.Add(row2);
  2748. #endregion
  2749. }
  2750. #endregion
  2751. #region 合计信息
  2752. DataRow row3 = table.NewRow();
  2753. DataRow row4 = table.NewRow();
  2754. DataRow row5 = table.NewRow();
  2755. DataRow row6 = table.NewRow();
  2756. #region 合计信息
  2757. var data1 = NGCount(new List<string> {
  2758. "Week1", "Week2", "Week3", "Week4", "Week5", "Week6",
  2759. "Month1",
  2760. "Month2",
  2761. "Month3",
  2762. "Month4",
  2763. "Month5",
  2764. "Month6",
  2765. "Month7",
  2766. "Month8",
  2767. "Month9",
  2768. "Month10",
  2769. "Month11",
  2770. "Month12","MonthlyCumulative","AnnualAccumulation"},
  2771. dt1, dt3, dt2);
  2772. row3["材料类别"] = "合计";
  2773. row3["类别"] = "异常数量";
  2774. row4["材料类别"] = "合计";
  2775. row4["类别"] = "来料数量";
  2776. row5["材料类别"] = "合计";
  2777. row5["类别"] = "不良率";
  2778. row6["材料类别"] = " ";
  2779. row6["类别"] = "待判数量";
  2780. for (int j = 0; j < weeksInJanuary.Length; j++)
  2781. {
  2782. string week = weeksInJanuary[j];
  2783. int k = j + 1;
  2784. row3[week] = dt2.Rows[0]["Week" + k] ;
  2785. row4[week] = dt1.Rows[0]["Week" + k] ;
  2786. row5[week] = data1["Week" + k].V1 + "%";
  2787. row6[week] = dt3.Rows[0]["Week" + k].ToDecimal() ;
  2788. }
  2789. for (int j = 0; j < months.Length; j++)
  2790. {
  2791. string monthIndex = months[j];
  2792. int k = j + 1;
  2793. row3[monthIndex] = dt2.Rows[0]["Month" + k];
  2794. row4[monthIndex] = dt1.Rows[0]["Month" + k] ;
  2795. row5[monthIndex] = data1["Month" + k].V1 + "%";
  2796. row6[monthIndex] = dt3.Rows[0]["Month" + k].ToDecimal() ;
  2797. }
  2798. row3["当月累计"] = dt2.Rows[0]["MonthlyCumulative"].ToDecimal() ;
  2799. row3["年度累计"] = dt2.Rows[0]["AnnualAccumulation"].ToDecimal() ;
  2800. row4["当月累计"] = dt1.Rows[0]["MonthlyCumulative"].ToDecimal() ;
  2801. row4["年度累计"] = dt1.Rows[0]["AnnualAccumulation"].ToDecimal() ;
  2802. row5["当月累计"] = data1["MonthlyCumulative"].V1 + "%";
  2803. row5["年度累计"] = data1["AnnualAccumulation"].V1 + "%";
  2804. row6["当月累计"] = dt3.Rows[0]["MonthlyCumulative"].ToDecimal() ;
  2805. row6["年度累计"] = dt3.Rows[0]["AnnualAccumulation"].ToDecimal() ;
  2806. table.Rows.Add(row3);
  2807. table.Rows.Add(row4);
  2808. table.Rows.Add(row5);
  2809. table.Rows.Add(row6);
  2810. #endregion
  2811. return table;
  2812. #endregion
  2813. }
  2814. private Dictionary<string, dynamic> NGCount(List<string> weeks,
  2815. DataTable dt1, DataTable dt2, DataTable dt3)
  2816. {
  2817. Dictionary<string, dynamic> result = new Dictionary<string, dynamic>();
  2818. foreach (var item in weeks)
  2819. {
  2820. var tmp1 = dt1.Rows[0][item].ToDecimal();
  2821. var tmp2 = dt2.Rows[0][item].ToDecimal();
  2822. var tmp3 = dt3.Rows[0][item].ToDecimal();
  2823. var v1 = tmp1 == 0 ? 0 : Math.Round(tmp3/ (tmp1 - tmp2) * 100, 1);
  2824. result.Add(item, new
  2825. {
  2826. V1 = v1
  2827. });
  2828. }
  2829. return result;
  2830. }
  2831. private Dictionary<string, dynamic> NGCount(List<string> weeks,
  2832. DataTable dt1, DataTable dt2, DataRow dt3)
  2833. {
  2834. Dictionary<string, dynamic> result = new Dictionary<string, dynamic>();
  2835. foreach (var item in weeks)
  2836. {
  2837. var tmp1 = dt1.Rows[0][item].ToDecimal();
  2838. var tmp2 = dt2.Rows[0][item].ToDecimal();
  2839. var tmp3 = dt3[item].ToDecimal();
  2840. var v1 = tmp1 == 0 ? 0 : Math.Round(tmp3 / (tmp1 - tmp2) * 100, 1);
  2841. result.Add(item, new
  2842. {
  2843. V1 = v1
  2844. });
  2845. }
  2846. return result;
  2847. }
  2848. public DataTable ExportAll(string DateNow)
  2849. {
  2850. string date = DateNow;
  2851. var dates = date.ToDate();
  2852. var daysMonth = dates.ToString("MM");
  2853. var Year = new DateTime(dates.Year, 1, 1).ToString("yyyy-MM-dd");
  2854. var WYear = new DateTime(dates.AddYears(1).Year, 1, 1).ToString("yyyy-MM-dd");
  2855. var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).ToString("yyyy-MM-dd");
  2856. var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
  2857. var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
  2858. #region [SQL]
  2859. string sql = @"
  2860. SELECT DISTINCT COUNT(*) AS GS, BRGDesc, A.BadReasonDesc,'周' + CONVERT(NVARCHAR(20), DATEPART(WEEK, DATEADD(DAY, -1, CHUJIANSHIJIAN)) % DATEPART(WEEK, DATEADD(DAY, -1, '{0}')) + 1) AS ZB
  2861. INTO #Table1 FROM (SELECT DISTINCT
  2862. CASE when a.SQEEngineerResult = 'NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc,--
  2863. CASE when a.SQEEngineerResult = 'NG' THEN 'NG' ELSE BLXX1.BadReasonDesc END AS BadReasonDesc,--
  2864. BLFL.BadDesc,
  2865. a.IQCHeaderTime,
  2866. FORMAT(CONVERT(datetime, a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  2867. a.EATTRIBUTE1 SQEFA,
  2868. CASE WHEN a.Result = 'OK' OR(a.Result = 'NG' AND a.IsCheckComplete = '是') THEN '是'
  2869. ELSE '否' END AS SFJA
  2870. FROM IcsMatCheckResult a
  2871. LEFT JOIN ICSVendor c on a.VenCode = c.VenCode AND a.WorkPoint = c.WorkPoint
  2872. LEFT JOIN ICSInventory d on a.InvCode = d.InvCode AND a.WorkPoint = d.WorkPoint
  2873. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode = A.BCGCode
  2874. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode = A.BadReasonCode
  2875. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode = A.BRGCode
  2876. UNION ALL
  2877. SELECT DISTINCT
  2878. '' BRGDesc,'' BadReasonDesc,'' BadDesc,NULL IQCHeaderTime,'' SQEFA,
  2879. '' SFJA,'' CHUJIANSHIJIAN
  2880. FROM ICSWareHouseLotInfoLog a WITH(NOLOCK)
  2881. INNER JOIN ICSWareHouseLotInfo b WITH(NOLOCK) on a.LotNo = b.LotNo
  2882. LEFT JOIN ICSInventory C WITH(NOLOCK) ON C.InvCode = A.InvCode
  2883. LEFT JOIN ICSASNDetail D WITH(NOLOCK) ON D.LotNo = A.LotNo
  2884. LEFT JOIN ICSOASNDetail E WITH(NOLOCK) ON E.LotNo = A.LotNo
  2885. LEFT JOIN ICSInventoryLoT EE WITH(NOLOCK) ON EE.LotNo = A.LotNo
  2886. LEFT JOIN ICSExtension F WITH(NOLOCK) ON F.ID = EE.ExtensionID
  2887. LEFT JOIN ICSInspection G WITH(NOLOCK) ON a.lotno = G.lotno
  2888. WHERE(a.BusinessCode = '1' or a.BusinessCode = '9') AND G.lotno IS NOT NULL
  2889. and a.MUSER <> 'admin'
  2890. GROUP BY a.InvCode,C.InvName,C.InvStd, REPLACE(C.ClassName, '', ''),ISNULL(D.ASNCode, E.OASNCode),F.BatchCode,
  2891. ISNULL(D.MUSER, E.MUSER),ISNULL(D.MUSERName, E.MUSERName),FORMAT(CONVERT(datetime, a.MTIME, 120), 'yyyy/MM/dd'),A.MUSERName,A.TransCode
  2892. ) A WHERE 1 = 1 AND A.BRGDesc <> '' and A.BRGDesc IS NOT NULL AND A.BRGDesc <> 'NG' AND A.SFJA = '是' AND A.BadReasonDesc IS NOT NULL
  2893. AND CHUJIANSHIJIAN BETWEEN '{0}' AND '{1}'
  2894. GROUP BY BRGDesc,A.BadReasonDesc,CONVERT(NVARCHAR(20), DATEPART(WEEK, DATEADD(DAY, -1, CHUJIANSHIJIAN)) % DATEPART(WEEK, DATEADD(DAY, -1, '{0}')) + 1)
  2895. SELECT DISTINCT COUNT(*) AS GS, BRGDesc, A.BadReasonDesc,'月' + CONVERT(NVARCHAR(20), DATEPART(MONTH, DATEADD(DAY, -1, CHUJIANSHIJIAN))) AS ZB
  2896. INTO #MothTable1 FROM (SELECT DISTINCT
  2897. CASE when a.SQEEngineerResult = 'NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc,--
  2898. CASE when a.SQEEngineerResult = 'NG' THEN 'NG' ELSE BLXX1.BadReasonDesc END AS BadReasonDesc,--
  2899. BLFL.BadDesc,
  2900. a.IQCHeaderTime,
  2901. FORMAT(CONVERT(datetime, a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  2902. a.EATTRIBUTE1 SQEFA,
  2903. CASE WHEN a.Result = 'OK' OR(a.Result = 'NG' AND a.IsCheckComplete = '是') THEN '是'
  2904. ELSE '否' END AS SFJA
  2905. FROM IcsMatCheckResult a
  2906. LEFT JOIN ICSVendor c on a.VenCode = c.VenCode AND a.WorkPoint = c.WorkPoint
  2907. LEFT JOIN ICSInventory d on a.InvCode = d.InvCode AND a.WorkPoint = d.WorkPoint
  2908. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode = A.BCGCode
  2909. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode = A.BadReasonCode
  2910. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode = A.BRGCode
  2911. UNION ALL
  2912. SELECT DISTINCT
  2913. '' BRGDesc,'' BadReasonDesc,'' BadDesc,NULL IQCHeaderTime,'' SQEFA,
  2914. '' SFJA,''CHUJIANSHIJIAN
  2915. FROM ICSWareHouseLotInfoLog a WITH(NOLOCK)
  2916. INNER JOIN ICSWareHouseLotInfo b WITH(NOLOCK) on a.LotNo = b.LotNo
  2917. LEFT JOIN ICSInventory C WITH(NOLOCK) ON C.InvCode = A.InvCode
  2918. LEFT JOIN ICSASNDetail D WITH(NOLOCK) ON D.LotNo = A.LotNo
  2919. LEFT JOIN ICSOASNDetail E WITH(NOLOCK) ON E.LotNo = A.LotNo
  2920. LEFT JOIN ICSInventoryLoT EE WITH(NOLOCK) ON EE.LotNo = A.LotNo
  2921. LEFT JOIN ICSExtension F WITH(NOLOCK) ON F.ID = EE.ExtensionID
  2922. LEFT JOIN ICSInspection G WITH(NOLOCK) ON a.lotno = G.lotno
  2923. WHERE(a.BusinessCode = '1' or a.BusinessCode = '9') AND G.lotno IS NOT NULL
  2924. and a.MUSER <> 'admin'
  2925. GROUP BY a.InvCode,C.InvName,C.InvStd, REPLACE(C.ClassName, '', ''),ISNULL(D.ASNCode, E.OASNCode),F.BatchCode,
  2926. ISNULL(D.MUSER, E.MUSER),ISNULL(D.MUSERName, E.MUSERName),FORMAT(CONVERT(datetime, a.MTIME, 120), 'yyyy/MM/dd'),A.MUSERName,A.TransCode
  2927. ) A WHERE 1 = 1 AND A.BRGDesc <> '' and A.BRGDesc IS NOT NULL AND A.BRGDesc <> 'NG' AND A.SFJA = '是' AND A.BadReasonDesc IS NOT NULL
  2928. AND CHUJIANSHIJIAN BETWEEN '{2}' AND '{3}'
  2929. GROUP BY BRGDesc,A.BadReasonDesc, DATEPART(MONTH, DATEADD(DAY, -1, CHUJIANSHIJIAN))
  2930. SELECT SUM(GS) AS HZcount, BRGDesc INTO #Table2 FROM #Table1 GROUP BY BRGDesc
  2931. SELECT SUM(GS) AS HZcount, BRGDesc INTO #MothTable2 FROM #MothTable1 GROUP BY BRGDesc
  2932. SELECT* INTO #Table3 FROM #Table1
  2933. UNION
  2934. SELECT b.GS,b.BRGDesc,b.BadReasonDesc,a.Num FROM[ICSMonth] a
  2935. LEFT JOIN #MothTable1 b ON a.Num=b.ZB
  2936. DECLARE @cols AS NVARCHAR(MAX)
  2937. SELECT @cols = STUFF((SELECT DISTINCT '],[' + dr.ZB
  2938. FROM #Table3 dr
  2939. FOR XML PATH(''), TYPE
  2940. ).value('.', 'NVARCHAR(MAX)') + ']'
  2941. ,1,2,'')
  2942. --SELECT * FROM #Table3
  2943. SET @cols = 'SELECT * INTO #Table4 FROM #Table3
  2944. PIVOT(SUM(GS) FOR ZB IN('+
  2945. @cols + ') )a orDER BY BRGDesc
  2946. SELECT ROW_NUMBER() OVER(order by CONVERT(DECIMAL(16, 1), ROUND(c.HZcount * 1.0 / (select sum(HZcount) from #MothTable2) * 100, 2)) desc)NUM, A.*,b.HZcount as ZBCount,C.HZcount as YBCount,CONVERT(nvarchar(20), CONVERT(DECIMAL(16,1),ROUND(c.HZcount*1.0/(select sum(HZcount) from #MothTable2) * 100, 2)))+''%''
  2947. AS Proportion, D.EATTRIBUTE1 as Improvementmeasures, D.EATTRIBUTE2 as Responsibledepartment FROM #Table4 A
  2948. LEFT JOIN #Table2 B ON A.BRGDesc=B.BRGDesc
  2949. LEFT JOIN #MothTable2 C ON A.BRGDesc=C.BRGDesc
  2950. LEFT JOIN ICSBadReason D ON A.BadReasonDesc = D.BadReasonDesc
  2951. Where A.BRGDesc is not NULL
  2952. ORDER BY CONVERT(DECIMAL(16, 1), ROUND(c.HZcount * 1.0 / (select sum(HZcount) from #MothTable2) * 100, 2)) DESC
  2953. '
  2954. PRINT(@cols)
  2955. EXEC(@cols)
  2956. DROP TABLE #Table1 DROP TABLE #Table2 DROP TABLE #Table3 DROP TABLE #MothTable2 DROP TABLE #MothTable1
  2957. ";
  2958. sql = string.Format(sql, firstDayOfMonth, lastDayOfMonth, Year, WYear); ;
  2959. var dt=SqlHelper.GetDataTableBySql(sql);
  2960. string[] vs = new string[] { "不良描述", "占比(%)", "不良原因", "改善对策", "责任部门", $"{daysMonth}月第1周", $"{daysMonth}月第2周", $"{daysMonth}月第3周", $"{daysMonth}月第4周", $"{daysMonth}月第5周", $"{daysMonth}月第6周", "合计", "年度累计", "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月" };
  2961. // 创建一个新的 DataTable
  2962. DataTable table = new DataTable();
  2963. for (int j = 0; j < vs.Length; j++)
  2964. {
  2965. table.Columns.Add(vs[j], typeof(string));
  2966. }
  2967. for (int i = 0; i < dt.Rows.Count; i++)
  2968. {
  2969. DataRow row1 = table.NewRow();
  2970. row1["不良描述"] = dt.Rows[i]["BRGDesc"].ToString();
  2971. row1["占比(%)"] = dt.Rows[i]["Proportion"].ToString();
  2972. row1["不良原因"] = dt.Rows[i]["BadReasonDesc"].ToString();
  2973. row1["改善对策"] = dt.Rows[i]["Improvementmeasures"].ToString();
  2974. row1["责任部门"] = dt.Rows[i]["Responsibledepartment"].ToString();
  2975. row1[$"{daysMonth}月第1周"] = dt.Columns.Contains("周1") ==false?"": dt.Rows[i]["周1"].ToString();
  2976. row1[$"{daysMonth}月第2周"] = dt.Columns.Contains("周2") == false ? "" : dt.Rows[i]["周2"].ToString();
  2977. row1[$"{daysMonth}月第3周"] = dt.Columns.Contains("周3") == false ? "" : dt.Rows[i]["周3"].ToString();
  2978. row1[$"{daysMonth}月第4周"] = dt.Columns.Contains("周4") == false ? "" : dt.Rows[i]["周4"].ToString();
  2979. row1[$"{daysMonth}月第5周"] = dt.Columns.Contains("周5") == false ? "" : dt.Rows[i]["周5"].ToString();
  2980. row1[$"{daysMonth}月第6周"] = dt.Columns.Contains("周6") == false ? "" : dt.Rows[i]["周6"].ToString();
  2981. row1["合计"] = dt.Rows[i]["ZBCount"].ToString();
  2982. row1["年度累计"] = dt.Rows[i]["YBCount"].ToString();
  2983. row1["1月"] = dt.Rows[i]["月1"] .ToString();
  2984. row1["2月"] = dt.Rows[i]["月2"] .ToString();
  2985. row1["3月"] = dt.Rows[i]["月3"] .ToString();
  2986. row1["4月"] = dt.Rows[i]["月4"] .ToString();
  2987. row1["5月"] = dt.Rows[i]["月5"] .ToString();
  2988. row1["6月"] = dt.Rows[i]["月6"] .ToString();
  2989. row1["7月"] = dt.Rows[i]["月7"] .ToString();
  2990. row1["8月"] = dt.Rows[i]["月8"] .ToString();
  2991. row1["9月"] = dt.Rows[i]["月9"] .ToString();
  2992. row1["10月"] = dt.Rows[i]["月10"].ToString();
  2993. row1["11月"] = dt.Rows[i]["月11"].ToString();
  2994. row1["12月"] = dt.Rows[i]["月12"].ToString();
  2995. table.Rows.Add(row1);
  2996. }
  2997. return table;
  2998. #endregion
  2999. }
  3000. public DataTable ExportAll4(string DateNow)
  3001. {
  3002. string date = DateNow;
  3003. var dates = date.ToDate();
  3004. var Year = new DateTime(dates.Year, 1, 1).ToString("yyyy-MM-dd");
  3005. var WYear = new DateTime(dates.AddYears(1).Year, 1, 1).ToString("yyyy-MM-dd");
  3006. var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).ToString("yyyy-MM-dd");
  3007. var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
  3008. var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
  3009. #region [SQL]
  3010. string sql = @"
  3011. SELECT DISTINCT * INTO #Temp1
  3012. FROM (SELECT DISTINCT
  3013. FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  3014. FORMAT( CONVERT( datetime,DN.MTIME), 'yyyy-MM-dd') MTIME,
  3015. CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,DN.MTIME)))+'月' AS YB,
  3016. a.InvCode,
  3017. c.VenName,
  3018. d.InvName,
  3019. b.BLMX,
  3020. CASE when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc,--
  3021. CASE when a.FinalResult IS NULL THEN a.IQCHeaderResult WHEN a.IQCHeaderResult IS NULL THEN
  3022. SQEEngineerResult WHEN SQEEngineerResult IS NULL THEN IQCGroupHeaderResult ELSE a.FinalResult END AS Result,
  3023. a.SQEEngineerRemark,
  3024. d.ClassName,
  3025. '第'+CONVERT(NVARCHAR(20),DATEPART(WEEK,DATEADD(DAY,-1,DN.MTIME))%DATEPART(WEEK,DATEADD(DAY,-1,'{0}'))+1)+'周' AS ZB,
  3026. BLFL.BadDesc,
  3027. a.IQCHeaderTime,
  3028. a.EATTRIBUTE1 SQEFA,
  3029. CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
  3030. ELSE '否' END AS SFJA
  3031. FROM IcsMatCheckResult a
  3032. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  3033. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  3034. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  3035. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  3036. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  3037. inner JOIN ICSDeliveryNotice DN ON a.ASNCode=DN.ASNCode
  3038. LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY with (nolock) WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  3039. UNION ALL
  3040. SELECT DISTINCT
  3041. FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  3042. FORMAT( CONVERT( datetime,DN.MTIME,120), 'yyyy-MM-dd') MTIME,
  3043. '' AS ZB,
  3044. a.InvCode,
  3045. ISNULL(D.MUSERName,E.MUSERName) VENNAME,
  3046. C.InvName,
  3047. '' BLMX,
  3048. '' BRGDesc,'' BadDesc,
  3049. '' AS Result,
  3050. '' AS SQEEngineerRemark,
  3051. c.ClassName,
  3052. ''AS YB,
  3053. NULL IQCHeaderTime,'' SQEFA,
  3054. '' SFJA
  3055. FROM ICSWareHouseLotInfoLog a WITH(NOLOCK)
  3056. INNER JOIN ICSWareHouseLotInfo b WITH(NOLOCK) on a.LotNo=b.LotNo
  3057. LEFT JOIN ICSInventory C WITH(NOLOCK) ON C.InvCode=A.InvCode
  3058. LEFT JOIN ICSASNDetail D WITH(NOLOCK) ON D.LotNo=A.LotNo
  3059. LEFT JOIN ICSOASNDetail E WITH(NOLOCK) ON E.LotNo=A.LotNo
  3060. LEFT JOIN ICSInventoryLoT EE WITH(NOLOCK) ON EE.LotNo=A.LotNo
  3061. LEFT JOIN ICSExtension F WITH(NOLOCK) ON F.ID=EE.ExtensionID
  3062. LEFT JOIN ICSInspection G WITH(NOLOCK) ON a.lotno=G.lotno
  3063. inner JOIN ICSODeliveryNotice DN ON E.OASNCode=DN.OASNCode
  3064. WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.lotno IS NOT NULL
  3065. and a.MUSER<>'admin'
  3066. ) A WHERE 1=1 AND A.BRGDesc<>'' and A.BRGDesc IS NOT NULL AND A.BRGDesc='NG' AND A.SFJA='是'
  3067. AND MTIME BETWEEN '{0}' AND '{1}'
  3068. --SELECT * FROM #Temp1
  3069. SELECT DISTINCT * INTO #YearTemp1 FROM (SELECT DISTINCT
  3070. FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  3071. FORMAT( CONVERT( datetime,DN.MTIME), 'yyyy-MM-dd') MTIME,
  3072. CONVERT(NVARCHAR(20),DATEPART(MONTH,DATEADD(DAY,-1,DN.MTIME)))+'月' AS YB,
  3073. a.InvCode,
  3074. c.VenName,
  3075. d.InvName,
  3076. b.BLMX,
  3077. CASE when a.SQEEngineerResult='NG' THEN 'NG' ELSE BLXX.BRGDesc END AS BRGDesc,--
  3078. CASE when a.SQEEngineerResult IS NULL THEN a.IQCGroupHeaderResult WHEN a.IQCGroupHeaderResult IS NULL THEN
  3079. Result ELSE a.SQEEngineerResult END AS Result,
  3080. a.SQEEngineerRemark,
  3081. d.ClassName,
  3082. '' AS ZB,
  3083. BLFL.BadDesc,
  3084. a.IQCHeaderTime,
  3085. a.EATTRIBUTE1 SQEFA,
  3086. CASE WHEN a.Result='OK' OR (a.Result='NG' AND a.IsCheckComplete='是') THEN '是'
  3087. ELSE '否' END AS SFJA
  3088. FROM IcsMatCheckResult a
  3089. LEFT JOIN ICSVendor c on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  3090. LEFT JOIN ICSInventory d on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  3091. LEFT JOIN ICSBadReasonGroup BLXX ON BLXX.BRGCode=A.BCGCode
  3092. LEFT JOIN ICSBadReason BLXX1 ON BLXX1.BadReasonCode=A.BadReasonCode
  3093. LEFT JOIN ICSBadCode BLFL ON BLFL.BadCode=A.BRGCode
  3094. inner JOIN ICSDeliveryNotice DN ON a.ASNCode=DN.ASNCode
  3095. LEFT JOIN (SELECT CheckNo,STRING_AGG(BLMX, '; ') BLMX FROM VIEW_JY with (nolock) WHERE BLMX<>'' GROUP BY CheckNo) B ON a.CheckNo=b.CheckNo
  3096. UNION ALL
  3097. SELECT DISTINCT
  3098. FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy-MM-dd') CHUJIANSHIJIAN,
  3099. FORMAT( CONVERT( datetime,DN.MTIME,120), 'yyyy-MM-dd') MTIME,
  3100. '' AS ZB,
  3101. a.InvCode,
  3102. ISNULL(D.MUSERName,E.MUSERName) VENNAME,
  3103. C.InvName,
  3104. '' BLMX,
  3105. '' BRGDesc,'' BadDesc,
  3106. '' AS Result,
  3107. '' AS SQEEngineerRemark,
  3108. c.ClassName,
  3109. ''AS YB,
  3110. NULL IQCHeaderTime,'' SQEFA,
  3111. '' SFJA
  3112. FROM ICSWareHouseLotInfoLog a WITH(NOLOCK)
  3113. INNER JOIN ICSWareHouseLotInfo b WITH(NOLOCK) on a.LotNo=b.LotNo
  3114. LEFT JOIN ICSInventory C WITH(NOLOCK) ON C.InvCode=A.InvCode
  3115. LEFT JOIN ICSASNDetail D WITH(NOLOCK) ON D.LotNo=A.LotNo
  3116. LEFT JOIN ICSOASNDetail E WITH(NOLOCK) ON E.LotNo=A.LotNo
  3117. LEFT JOIN ICSInventoryLoT EE WITH(NOLOCK) ON EE.LotNo=A.LotNo
  3118. LEFT JOIN ICSExtension F WITH(NOLOCK) ON F.ID=EE.ExtensionID
  3119. LEFT JOIN ICSInspection G WITH(NOLOCK) ON a.lotno=G.lotno
  3120. inner JOIN ICSODeliveryNotice DN ON E.OASNCode=DN.OASNCode
  3121. WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.lotno IS NOT NULL
  3122. and a.MUSER<>'admin'
  3123. ) A WHERE 1=1 AND A.BRGDesc<>'' and A.BRGDesc IS NOT NULL AND A.BRGDesc='NG' AND A.SFJA='是'
  3124. AND MTIME BETWEEN '{2}' AND '{3}'
  3125. --SELECT * FROM #YearTemp1
  3126. -- SELECT COUNT(*) AS cc,InvCode,MTIME INTO #Table2 FROM #Temp1 GROUP BY InvCode,MTIME
  3127. --UNION
  3128. SELECT COUNT(*) AS cc, b.InvCode,b.MTIME,a.Num INTO #Table3 FROM [ICSMonthByNew] a
  3129. LEFT JOIN #YearTemp1 b ON a.Num=b.YB
  3130. GROUP BY b.InvCode,b.MTIME,a.Num
  3131. DECLARE @cols AS NVARCHAR(MAX)
  3132. SELECT @cols = STUFF((SELECT DISTINCT '],[' +dr.Num
  3133. FROM #Table3 dr
  3134. FOR XML PATH(''), TYPE
  3135. ).value('.', 'NVARCHAR(MAX)') +']'
  3136. ,1,2,'')
  3137. --SELECT * FROM #Table3
  3138. SET @cols='SELECT * INTO #Table4 FROM #Table3
  3139. PIVOT ( SUM(cc) FOR Num IN ('+
  3140. @cols+') )a orDER BY InvCode
  3141. select distinct A.*,D.* from #Temp1 A
  3142. LEFT JOIN #YearTemp1 C ON A.InvCode=C.InvCode
  3143. LEFT JOIN #Table4 D ON A.InvCode=D.InvCode
  3144. Where A.InvCode is not null
  3145. order by A.MTIME desc
  3146. '
  3147. PRINT(@cols)
  3148. EXEC(@cols)
  3149. DROP TABLE #Temp1 DROP TABLE #YearTemp1 DROP TABLE #Table3
  3150. ";
  3151. sql = string.Format(sql, firstDayOfMonth, lastDayOfMonth, Year, WYear);
  3152. var dt=SqlHelper.GetDataTableBySql(sql);
  3153. string[] vs = new string[] { "对外改善日期", "入料日期", "月别", "料号", "厂商", "物料名称", "不良内容详细",
  3154. "判定结果", "不良分类", "备注", "物料类别", "当月第几周", "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月" };
  3155. // 创建一个新的 DataTable
  3156. DataTable table = new DataTable();
  3157. for (int j = 0; j < vs.Length; j++)
  3158. {
  3159. table.Columns.Add(vs[j], typeof(string));
  3160. }
  3161. for (int i = 0; i < dt.Rows.Count; i++)
  3162. {
  3163. DataRow row1 = table.NewRow();
  3164. row1["对外改善日期"] = dt.Rows[i]["CHUJIANSHIJIAN"].ToString();
  3165. row1["入料日期"] = dt.Rows[i]["MTIME"].ToString();
  3166. row1["月别"] = dt.Rows[i]["YB"].ToString();
  3167. row1["料号"] = dt.Rows[i]["InvCode"].ToString();
  3168. row1["厂商"] = dt.Rows[i]["VenName"].ToString();
  3169. row1["物料名称"] = dt.Rows[i]["InvName"].ToString();
  3170. row1["不良内容详细"] = dt.Rows[i]["BLMX"].ToString();
  3171. row1["判定结果"] = dt.Rows[i]["Result"].ToString();
  3172. row1["不良分类"] = dt.Rows[i]["BadDesc"].ToString();
  3173. row1["备注"] = dt.Rows[i]["SQEEngineerRemark"].ToString();
  3174. row1["物料类别"] = dt.Rows[i]["ClassName"].ToString();
  3175. row1["当月第几周"] = dt.Rows[i]["ZB"].ToString();
  3176. row1["1月"] = dt.Rows[i]["1月"].ToString();
  3177. row1["2月"] = dt.Rows[i]["2月"].ToString();
  3178. row1["3月"] = dt.Rows[i]["3月"].ToString();
  3179. row1["4月"] = dt.Rows[i]["4月"].ToString();
  3180. row1["5月"] = dt.Rows[i]["5月"].ToString();
  3181. row1["6月"] = dt.Rows[i]["6月"].ToString();
  3182. row1["7月"] = dt.Rows[i]["7月"].ToString();
  3183. row1["8月"] = dt.Rows[i]["8月"].ToString();
  3184. row1["9月"] = dt.Rows[i]["9月"].ToString();
  3185. row1["10月"] = dt.Rows[i]["10月"].ToString();
  3186. row1["11月"] = dt.Rows[i]["11月"].ToString();
  3187. row1["12月"] = dt.Rows[i]["12月"].ToString();
  3188. table.Rows.Add(row1);
  3189. }
  3190. return table;
  3191. #endregion
  3192. }
  3193. public DataTable ExportAll5(string DateNow)
  3194. {
  3195. string date = DateNow;
  3196. var dates = date.ToDate();
  3197. var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1).AddDays(-1).ToString("yyyy-MM-dd");
  3198. var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
  3199. var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth).ToString("yyyy-MM-dd");
  3200. #region [SQL]
  3201. string sql = @"SELECT top 20
  3202. Sum (count) Invcount,VenName
  3203. INTO #VanName
  3204. from
  3205. (SELECT DISTINCT
  3206. REPLACE(d.InvCode, '', '') WLFL,
  3207. c.VenName,
  3208. a.IQCHeaderResult ZGJG,
  3209. a.InvBatcgNo BatchCode,
  3210. 1 as count
  3211. FROM IcsMatCheckResult a WITH (NOLOCK)
  3212. LEFT JOIN ICSVendor c WITH (NOLOCK) ON a.VenCode = c.VenCode AND a.WorkPoint = c.WorkPoint
  3213. LEFT JOIN ICSInventory d WITH (NOLOCK) ON a.InvCode = d.InvCode AND a.WorkPoint = d.WorkPoint
  3214. LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode = A.BCGCode
  3215. LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode = A.BadReasonCode
  3216. LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode = A.BRGCode
  3217. WHERE a.FirstCheckTime>'{0}' AND a.FirstCheckTime<'{1}'
  3218. UNION ALL
  3219. SELECT DISTINCT
  3220. REPLACE(C.InvCode, '', '') WLFL,
  3221. J.VenName VENNAME,
  3222. '' ZGJG,
  3223. F.BatchCode,
  3224. 1 as count
  3225. FROM ICSWareHouseLotInfoLog a WITH (NOLOCK)
  3226. INNER JOIN ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
  3227. LEFT JOIN ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
  3228. LEFT JOIN ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
  3229. LEFT JOIN ICSASN H WITH (NOLOCK) ON H.ASNCode=D.ASNCode AND H.WorkPoint=D.WorkPoint
  3230. LEFT JOIN ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
  3231. LEFT JOIN ICSOASN I WITH (NOLOCK) ON I.OASNCode=E.OASNCode AND I.WorkPoint=E.WorkPoint
  3232. LEFT JOIN ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
  3233. LEFT JOIN ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
  3234. LEFT JOIN ICSInspection G WITH (NOLOCK) ON G.LOTNO = A.LotNo
  3235. LEFT JOIN ICSVendor J ON ISNULL(H.VenCode, I.VenCode)=J.VenCode AND J.WorkPoint=a.WorkPoint
  3236. WHERE (a.BusinessCode = '1' OR a.BusinessCode = '9') AND a.MTIME>'{0}' AND a.MTIME<'{1}'
  3237. ) a
  3238. GROUP BY a.VenName
  3239. ORDER BY Invcount DESC
  3240. SELECT c.Num,c.[Month]
  3241. INTO #TempMonth
  3242. FROM ICSMonth c WHERE c.[Month] BETWEEN '{0}' AND '{1}'
  3243. ORDER BY c.Num
  3244. select '1' Num,'' Type INTO #TempType UNION select '2' Num,'' Type UNION select '3' Num,'' Type
  3245. SELECT
  3246. VenName,
  3247. WLFL
  3248. INTO #temp1
  3249. FROM (
  3250. SELECT ROW_NUMBER() OVER (PARTITION BY VenName ORDER BY SL DESC) AS RowNum,
  3251. VenName,
  3252. WLFL,
  3253. SL
  3254. FROM (
  3255. SELECT
  3256. COUNT(*) AS SL,
  3257. VenName,
  3258. WLFL
  3259. FROM (
  3260. SELECT DISTINCT
  3261. REPLACE(d.InvCode, '', '') WLFL,
  3262. c.VenName,
  3263. a.InvBatcgNo BatchCode,
  3264. FORMAT(CONVERT(DATE,FirstCheckTime, 120), 'yyyy-MM') CHUJIANSHIJIAN,
  3265. a.IQCHeaderResult ZGJG
  3266. FROM IcsMatCheckResult a WITH (NOLOCK)
  3267. LEFT JOIN ICSVendor c WITH (NOLOCK) ON a.VenCode = c.VenCode AND a.WorkPoint = c.WorkPoint
  3268. LEFT JOIN ICSInventory d WITH (NOLOCK) ON a.InvCode = d.InvCode AND a.WorkPoint = d.WorkPoint
  3269. LEFT JOIN ICSBadReasonGroup BLXX WITH (NOLOCK) ON BLXX.BRGCode = A.BCGCode
  3270. LEFT JOIN ICSBadReason BLXX1 WITH (NOLOCK) ON BLXX1.BadReasonCode = A.BadReasonCode
  3271. LEFT JOIN ICSBadCode BLFL WITH (NOLOCK) ON BLFL.BadCode = A.BRGCode
  3272. inner JOIN #VanName v ON c.VenName=v.VenName
  3273. WHERE a.FirstCheckTime>'{0}' AND a.FirstCheckTime<'{1}'
  3274. UNION ALL
  3275. SELECT DISTINCT
  3276. REPLACE(C.InvCode, '', '') WLFL,
  3277. J.VenName VENNAME,
  3278. f.BatchCode,
  3279. FORMAT(CONVERT(datetime, a.MTIME, 120), 'yyyy/MM/dd') CHUJIANSHIJIAN,
  3280. '' ZGJG
  3281. FROM ICSWareHouseLotInfoLog a WITH (NOLOCK)
  3282. INNER JOIN ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
  3283. LEFT JOIN ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
  3284. LEFT JOIN ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
  3285. LEFT JOIN ICSASN H WITH (NOLOCK) ON H.ASNCode=D.ASNCode AND H.WorkPoint=D.WorkPoint
  3286. LEFT JOIN ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
  3287. LEFT JOIN ICSOASN I WITH (NOLOCK) ON I.OASNCode=E.OASNCode AND I.WorkPoint=E.WorkPoint
  3288. LEFT JOIN ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
  3289. LEFT JOIN ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
  3290. LEFT JOIN ICSInspection G WITH (NOLOCK) ON G.LOTNO = A.LotNo
  3291. LEFT JOIN ICSVendor J ON ISNULL(H.VenCode, I.VenCode)=J.VenCode AND J.WorkPoint=a.WorkPoint
  3292. inner JOIN #VanName v ON J.VenName=v.VenName
  3293. WHERE (a.BusinessCode = '1' OR a.BusinessCode = '9') AND a.MTIME>'{0}' AND a.MTIME<'{1}'
  3294. AND G.LotNo IS NULL
  3295. AND a.MUSER <> 'admin'
  3296. ) AS A
  3297. GROUP BY VenName, WLFL
  3298. ) AS GroupedResults
  3299. ) AS RankedResults
  3300. WHERE RowNum <= 5
  3301. SELECT COUNT(*) AS Quantity,
  3302. FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') AS CHUJIANSHIJIAN ,A.WLFL,A.VenName
  3303. INTO #TempForecast
  3304. FROM #temp1 B
  3305. INNER JOIN (SELECT DISTINCT
  3306. REPLACE(d.InvCode, '', '') WLFL,
  3307. c.VenName,
  3308. a.InvBatcgNo BatchCode,
  3309. FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy/MM/dd') CHUJIANSHIJIAN
  3310. FROM IcsMatCheckResult a with (nolock)
  3311. LEFT JOIN ICSVendor c with (nolock) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  3312. LEFT JOIN ICSInventory d with (nolock) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  3313. LEFT JOIN ICSBadReasonGroup BLXX with (nolock) ON BLXX.BRGCode=A.BCGCode
  3314. LEFT JOIN ICSBadReason BLXX1 with (nolock) ON BLXX1.BadReasonCode=A.BadReasonCode
  3315. LEFT JOIN ICSBadCode BLFL with (nolock) ON BLFL.BadCode=A.BRGCode
  3316. inner JOIN #VanName v ON c.VenName=v.VenName
  3317. WHERE a.FirstCheckTime>'{0}' AND a.FirstCheckTime<'{1}'
  3318. UNION ALL
  3319. SELECT DISTINCT REPLACE(C.InvCode, '', '') WLFL,
  3320. J.VenName VENNAME,
  3321. f.BatchCode,
  3322. FORMAT( CONVERT( datetime,a.MTIME,120), 'yyyy/MM/dd') CHUJIANSHIJIAN
  3323. FROM ICSWareHouseLotInfoLog a WITH (NOLOCK)
  3324. INNER JOIN ICSWareHouseLotInfo b WITH (NOLOCK) ON a.LotNo = b.LotNo
  3325. LEFT JOIN ICSInventory C WITH (NOLOCK) ON C.InvCode = A.InvCode
  3326. LEFT JOIN ICSASNDetail D WITH (NOLOCK) ON D.LotNo = A.LotNo
  3327. LEFT JOIN ICSASN H WITH (NOLOCK) ON H.ASNCode=D.ASNCode AND H.WorkPoint=D.WorkPoint
  3328. LEFT JOIN ICSOASNDetail E WITH (NOLOCK) ON E.LotNo = A.LotNo
  3329. LEFT JOIN ICSOASN I WITH (NOLOCK) ON I.OASNCode=E.OASNCode AND I.WorkPoint=E.WorkPoint
  3330. LEFT JOIN ICSInventoryLoT EE WITH (NOLOCK) ON EE.LotNo = A.LotNo
  3331. LEFT JOIN ICSExtension F WITH (NOLOCK) ON F.ID = EE.ExtensionID
  3332. LEFT JOIN ICSInspection G WITH (NOLOCK) ON G.LOTNO = A.LotNo
  3333. LEFT JOIN ICSVendor J ON ISNULL(H.VenCode, I.VenCode)=J.VenCode AND J.WorkPoint=a.WorkPoint
  3334. inner JOIN #VanName v ON J.VenName=v.VenName
  3335. WHERE (a.BusinessCode='1' or a.BusinessCode='9') AND G.LotNo IS NULL
  3336. and a.MUSER<>'admin' AND a.MTIME>'{0}' AND a.MTIME<'{1}'
  3337. ) A ON a.WLFL=b.WLFL AND a.VenName=b.VenName --AND a.BatchCode=b.BatchCode
  3338. GROUP BY FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM'),A.WLFL,A.VenName
  3339. SELECT COUNT(*) AS Quantity,
  3340. FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM') AS CHUJIANSHIJIAN ,A.WLFL,A.VenName
  3341. INTO #TempDetail
  3342. FROM #temp1 B
  3343. INNER JOIN (SELECT DISTINCT
  3344. REPLACE(d.InvCode, '', '') WLFL,
  3345. c.VenName,
  3346. a.InvBatcgNo BatchCode,
  3347. FORMAT( CONVERT( datetime,a.FirstCheckTime), 'yyyy/MM/dd') CHUJIANSHIJIAN,
  3348. a.IQCHeaderResult ZGJG
  3349. FROM IcsMatCheckResult a with (nolock)
  3350. LEFT JOIN ICSVendor c with (nolock) on a.VenCode=c.VenCode AND a.WorkPoint=c.WorkPoint
  3351. LEFT JOIN ICSInventory d with (nolock) on a.InvCode=d.InvCode AND a.WorkPoint=d.WorkPoint
  3352. LEFT JOIN ICSBadReasonGroup BLXX with (nolock) ON BLXX.BRGCode=A.BCGCode
  3353. LEFT JOIN ICSBadReason BLXX1 with (nolock) ON BLXX1.BadReasonCode=A.BadReasonCode
  3354. LEFT JOIN ICSBadCode BLFL with (nolock) ON BLFL.BadCode=A.BRGCode
  3355. inner JOIN #VanName v ON c.VenName=v.VenName
  3356. WHERE a.FirstCheckTime>'{0}' AND a.FirstCheckTime<'{1}' AND a.IQCHeaderResult='NG'
  3357. ) A ON a.WLFL=b.WLFL AND a.VenName=b.VenName
  3358. GROUP BY FORMAT(CONVERT(DATE,CHUJIANSHIJIAN, 120), 'yyyy-MM'),A.WLFL,A.VenName
  3359. SELECT VenName,'1' AS Num,'' AS Type,WLFL,ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIAN
  3360. INTO #TempForecastMonth
  3361. FROM #TempForecast
  3362. UNION ALL
  3363. SELECT VenName,'2' AS Num,'' AS Type,WLFL, ISNULL(CAST(Quantity AS VARCHAR(100)),0) AS Quantity,CHUJIANSHIJIAN
  3364. FROM #TempDetail
  3365. UNION ALL
  3366. SELECT a.VenName,'3' AS Num,'' AS Type,a.WLFL,CAST(CAST(ISNULL(b.Quantity,0)/(CASE WHEN ISNULL(a.Quantity, 0)=0 THEN 1 ELSE a.Quantity END)*100 AS DECIMAL(18,1)) AS VARCHAR(100))+'%' AS Quantity,a.CHUJIANSHIJIAN
  3367. FROM #TempForecast a
  3368. LEFT JOIN #TempDetail b ON a.VenName=b.VenName AND a.WLFL=b.WLFL
  3369. SELECT ISNULL(a.VenName, b.VenName) AS VenName, ISNULL(a.Num, b.Num) AS Num,ISNULL(a.Type, b.Type) AS Type,ISNULL(a.CHUJIANSHIJIAN, b.CHUJIANSHIJIAN) AS CHUJIANSHIJIAN,b.Quantity,ISNULL(a.WLFL, b.WLFL) AS WLFL
  3370. INTO #TempForecastAll
  3371. FROM (SELECT f.VenName,WLFL, t.Num,t.Type,CHUJIANSHIJIAN,f.Quantity FROM #TempForecast f,#TempType t) a
  3372. FULL JOIN #TempForecastMonth b ON a.VenName=b.VenName AND a.Type=b.Type AND a.CHUJIANSHIJIAN=b.CHUJIANSHIJIAN
  3373. DECLARE @sql varchar(4000)
  3374. SELECT @sql=isnull(@sql+',','')+'['+[Month]+']'
  3375. FROM (SELECT [Month] FROM #TempMonth) AS a
  3376. SET @sql='SELECT VenName AS TOP厂商,Type AS , WLFL AS ,'+@sql+' FROM #TempForecastAll PIVOT( MAX(Quantity) FOR CHUJIANSHIJIAN IN ('+@sql+'))a order BY VenName,WLFL,Type '
  3377. PRINT(@sql)
  3378. EXEC(@sql)
  3379. DROP TABLE #TempMonth
  3380. DROP TABLE #TempDetail
  3381. DROP TABLE #TempForecast
  3382. DROP TABLE #TempForecastMonth
  3383. DROP TABLE #TempForecastAll
  3384. DROP TABLE #TempType
  3385. DROP TABLE #temp1
  3386. DROP TABLE #VanName
  3387. ";
  3388. sql = string.Format(sql, firstDayOfMonth, lastDayOfMonth);
  3389. return SqlHelper.GetDataTableBySql(sql);
  3390. #endregion
  3391. }
  3392. #region
  3393. public object GetDecimalDigits()
  3394. {
  3395. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location.TrimEnd(',');
  3396. try
  3397. {
  3398. string sql = string.Empty;
  3399. sql = @"select Figure from ICSConfiguration where Code='Figure001' and Enable='1' and WorkPoint='" + WorkPoint + "'";
  3400. object Figure = SqlHelper.ExecuteScalar(sql);
  3401. return Figure;
  3402. }
  3403. catch (Exception ex)
  3404. {
  3405. throw new Exception(ex.Message.ToString());
  3406. }
  3407. }
  3408. #endregion
  3409. #region 订单备料明细查询
  3410. /// <summary>
  3411. /// 订单备料明细查询
  3412. /// </summary>
  3413. /// <param name="jqgridparam"></param>
  3414. /// <returns></returns>
  3415. public DataTable GetMOIssueApplyNegDetail(string RCVCode, ref Pagination jqgridparam)
  3416. {
  3417. DataTable dt = new DataTable();
  3418. //object Figure = GetDecimalDigits();
  3419. List<DbParameter> parameter = new List<DbParameter>();
  3420. string sql = @"SELECT a.ID,a.RCVCode,a.Sequence,a.SourceSequence,a.SourceCode,a.InvCode,a.Quantity,a.Amount,a.RCVQuantity,a.WHCode,e.WarehouseName as WHName,a.Type
  3421. ,a.ExtensionID,a.MUSER,a.MUSERName,a.MTIME,a.WorkPoint,b.InvName,a.CreateDateTime,a.CreatePerson
  3422. ,f.Colspan ,f.ProjectCode ,f.BatchCode ,f.Version ,f.Brand ,f.cFree1 ,f.cFree2 ,f.cFree3 ,f.cFree4
  3423. ,f.cFree5 ,f.cFree6 ,f.cFree7 ,f.cFree8 ,f.cFree9 ,f.cFree10
  3424. ,a.EATTRIBUTE1,a.EATTRIBUTE2,a.EATTRIBUTE3,a.EATTRIBUTE4,a.EATTRIBUTE5,a.EATTRIBUTE6,a.EATTRIBUTE7,a.EATTRIBUTE8,a.EATTRIBUTE9,a.EATTRIBUTE10
  3425. from ICSManufactureReceive a
  3426. left join ICSInventory b on a.InvCode = b.InvCode and a.WorkPoint = b.WorkPoint
  3427. left join ICSExtension f on a.ExtensionID=f.ID and a.WorkPoint=f.WorkPoint
  3428. left join ICSWarehouse e on a.WHCode = e.WarehouseCode and a.WorkPoint=e.WorkPoint
  3429. where a.RCVCode = '" + RCVCode + "' ";
  3430. //sql = string.Format(sql, Figure);
  3431. DataTable dttest = Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  3432. return Repository().FindTablePageBySql(sql.ToString(), parameter.ToArray(), ref jqgridparam);
  3433. }
  3434. #endregion
  3435. public void ClearTemp()
  3436. {
  3437. Invmes.Rows.Clear();
  3438. }
  3439. public string ICSMOIssueSendBackAuditRollback(string keyValue)
  3440. {
  3441. return "";
  3442. }
  3443. #region 创建一步调拨单
  3444. /// <summary>
  3445. /// 创建一步调拨单
  3446. /// </summary>
  3447. /// <param name="keyValue"></param>
  3448. /// <returns></returns>
  3449. public string AddICSTransfer(string keyValue)
  3450. {
  3451. string returnValue = string.Empty;
  3452. string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
  3453. string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
  3454. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  3455. var sql = string.Empty;
  3456. try
  3457. {
  3458. var key = keyValue.ToJObject();
  3459. //验证是否同一个供应商
  3460. sql = $@"SELECT DISTINCT WarehouseCode FROM ICSWareHouseLotInfo where LotNo in ({key["Lots"]}) AND WorkPoint ='{WorkPoint}' ";
  3461. var dt1 = SqlHelper.CmdExecuteDataTable(sql);
  3462. if (dt1.Rows.Count > 1 || dt1.Rows.Count <= 0)
  3463. {
  3464. throw new Exception("创建调拨单的条码必须是同一个供应商的物料,操作失败");
  3465. }
  3466. TransferINHead addICSTransfer = new TransferINHead();
  3467. List<TransferINBody> transferINBodies = new List<TransferINBody>();
  3468. //查询单据信息
  3469. sql = $@"SELECT Sum(Quantity) Quantity,WarehouseCode OutWhCode,LocationCode OutBinCode,InvCode from ICSWareHouseLotInfo WHERE LotNo in ({key["Lots"]}) AND WorkPoint='{WorkPoint}' GROUP BY WarehouseCode,LocationCode,InvCode ";
  3470. var dt = SqlHelper.CmdExecuteDataTable(sql);
  3471. if (dt.Rows.Count <= 1)
  3472. {
  3473. throw new Exception("条码信息有误请确认,操作失败");
  3474. }
  3475. addICSTransfer.DocDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  3476. addICSTransfer.OrgCode = WorkPoint;
  3477. for (int i = 0; i < dt.Rows.Count; i++)
  3478. {
  3479. TransferINBody transferINBody =
  3480. new TransferINBody
  3481. {
  3482. Quantity = (dt.Rows[i]["Quantity"]).ToDecimal(),
  3483. InvCode = dt.Rows[i]["InvCode"].ToString(),
  3484. OutWhCode = dt.Rows[i]["OutWhCode"].ToString(),
  3485. OutBinCode = dt.Rows[i]["OutBinCode"].ToString(),
  3486. //SupplierCode = dt.Rows[0]["VenCode"].ToString(),
  3487. INWhCode = key["WarehouseCode"].ToString(),
  3488. INBinCode = key["LocationCode"].ToString(),
  3489. Sequence = i + 1
  3490. };
  3491. transferINBodies.Add(transferINBody);
  3492. }
  3493. addICSTransfer.details = transferINBodies;
  3494. #region 调用ERP接口
  3495. if (!addICSTransfer.IsEmpty())
  3496. {
  3497. string APIURL = ConfigurationManager.ConnectionStrings["APIURL"].ConnectionString + "U9OneStepTransferDocIn/Create";
  3498. var erpinput = JsonConvert.SerializeObject(addICSTransfer);
  3499. string result1 = HttpPost(APIURL, erpinput);
  3500. JObject Obj = (JObject)JsonConvert.DeserializeObject(result1);//或者JObject jo = JObject.Parse(jsonText);
  3501. string MessAge = Obj["Message"].ToString();
  3502. string Success = Obj["Success"].ToString();
  3503. if (Success.ToUpper() == "FALSE")
  3504. {
  3505. throw new Exception(MessAge);
  3506. }
  3507. }
  3508. #endregion
  3509. return "";
  3510. }
  3511. catch (Exception ex)
  3512. {
  3513. return ex.Message;
  3514. }
  3515. }
  3516. #endregion
  3517. #region 接口api解析
  3518. //接口api解析
  3519. public static string HttpPost(string url, string body)
  3520. {
  3521. try
  3522. {
  3523. Encoding encoding = Encoding.UTF8;
  3524. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  3525. request.Method = "POST";
  3526. request.Accept = "application/json, text/javascript, */*"; //"text/html, application/xhtml+xml, */*";
  3527. request.ContentType = "application/json; charset=utf-8";
  3528. byte[] buffer = encoding.GetBytes(body);
  3529. request.ContentLength = buffer.Length;
  3530. request.GetRequestStream().Write(buffer, 0, buffer.Length);
  3531. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  3532. using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
  3533. {
  3534. return reader.ReadToEnd();
  3535. }
  3536. }
  3537. catch (WebException ex)
  3538. {
  3539. throw new Exception(ex.Message);
  3540. }
  3541. }
  3542. #endregion
  3543. #region 获取当前月份每周的开始时间和结束时间
  3544. /// <summary>
  3545. /// 获取当前月份每周的开始时间和结束时间
  3546. /// </summary>
  3547. /// <param name="date"></param>
  3548. /// <returns></returns>
  3549. public static List<WeekRange> GetCurrentMonthWeeks(string date)
  3550. {
  3551. var dates = date.ToDate();
  3552. var firstDayOfMonth = new DateTime(dates.Year, dates.Month, 1);
  3553. var daysInMonth = DateTime.DaysInMonth(dates.Year, dates.Month);
  3554. var lastDayOfMonth = new DateTime(dates.Year, dates.Month, daysInMonth);
  3555. var weeks = new List<WeekRange>();
  3556. var currentWeekStart = GetFirstMondayOfMonth(firstDayOfMonth);
  3557. while (currentWeekStart <= lastDayOfMonth)
  3558. {
  3559. var currentWeekEnd = currentWeekStart.AddDays(7);
  3560. if (currentWeekEnd > lastDayOfMonth)
  3561. {
  3562. // 如果是这个月的最后一天,计算下月第一天
  3563. currentWeekEnd = lastDayOfMonth.Date;
  3564. }
  3565. weeks.Add(new WeekRange
  3566. {
  3567. Start = currentWeekStart.ToString("yyyy-mm-dd"),
  3568. End = currentWeekEnd.ToString("yyyy-mm-dd")
  3569. });
  3570. // Move to the next week
  3571. currentWeekStart = currentWeekStart.AddDays(7);
  3572. }
  3573. return weeks;
  3574. }
  3575. #endregion
  3576. #region 获取当年每月的开始时间和结束时间
  3577. /// <summary>
  3578. /// 获取当年每月的开始时间和结束时间
  3579. /// </summary>
  3580. /// <param name="year"></param>
  3581. /// <returns></returns>
  3582. public static List<MonthRange> GetMonthsOfYear(int year)
  3583. {
  3584. var months = new List<MonthRange>();
  3585. for (int month = 1; month <= 12; month++)
  3586. {
  3587. var firstDayOfMonth = new DateTime(year, month, 1);
  3588. DateTime lastDayOfMonth;
  3589. if (month == 12)
  3590. {
  3591. // 如果是12月,则下一个月是下一年的1月
  3592. lastDayOfMonth = new DateTime(year + 1, 1, 1);
  3593. }
  3594. else
  3595. {
  3596. // 否则,是下一个月的第一天
  3597. lastDayOfMonth = new DateTime(year, month + 1, 1);
  3598. }
  3599. months.Add(new MonthRange
  3600. {
  3601. Start = firstDayOfMonth.ToString("yyyy-mm-dd"),
  3602. End = lastDayOfMonth.ToString("yyyy-mm-dd")
  3603. });
  3604. }
  3605. return months;
  3606. }
  3607. #endregion
  3608. private static DateTime GetFirstMondayOfMonth(DateTime firstDayOfMonth)
  3609. {
  3610. var daysUntilMonday = (7 - (int)firstDayOfMonth.DayOfWeek + 7) % 7;
  3611. return firstDayOfMonth.AddDays(daysUntilMonday);
  3612. }
  3613. public DataTable SelectTableColumnName(string BeginTime, string EndTime)
  3614. {
  3615. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  3616. string sql = $@"DECLARE @StartDate DATE = '{BeginTime}';
  3617. DECLARE @EndDate DATE = '{EndTime}';
  3618. WITH DateSequence AS (
  3619. SELECT @StartDate AS DateValue
  3620. UNION ALL
  3621. SELECT DATEADD(DAY, 1, DateValue)
  3622. FROM DateSequence
  3623. WHERE DateValue < @EndDate
  3624. )
  3625. SELECT CONVERT(NVARCHAR(50),DateValue,23) DateValue
  3626. FROM DateSequence
  3627. OPTION (MAXRECURSION 0);";
  3628. DataTable dt = SqlHelper.GetDataTableBySql(sql);
  3629. return dt;
  3630. }
  3631. #region 订单所在的日期的订单未交货数量
  3632. /// <summary>
  3633. /// 订单所在的日期的订单未交货数量
  3634. /// </summary>
  3635. /// <param name="queryJson"></param>
  3636. /// <param name="jqgridparam"></param>
  3637. /// <returns></returns>
  3638. public DataTable GetPOUnarrivedQuantity(string queryJson)
  3639. {
  3640. //站点信息
  3641. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  3642. DataTable dt = new DataTable();
  3643. List<DbParameter> parameter = new List<DbParameter>();
  3644. var queryParam = queryJson.ToJObject();
  3645. object Figure = GetDecimalDigits();
  3646. //获取传递的年份和月份
  3647. string StartDate = queryParam["DateNow"].ToString();
  3648. string EndDate = queryParam["DateNow1"].ToString();
  3649. string sql = $@"
  3650. WITH PurchaseOrders AS (
  3651. SELECT
  3652. CONVERT(NVARCHAR(50), CreateDateTime, 23) AS PODate,
  3653. InvCode ,
  3654. InvName ,
  3655. VenCode ,
  3656. VenName ,
  3657. sum(Quantity) - sum(ISNULL(RECEIVEQTY, 0)) + Sum(ISNULL(NGQTY, 0)) AS QTY
  3658. FROM (
  3659. -- DISTINCT
  3660. SELECT
  3661. po.POCode,
  3662. po.Sequence,
  3663. po.CreateDateTime,
  3664. po.VenCode,
  3665. ven.VenName,
  3666. po.InvCode,
  3667. inv.InvName,
  3668. po.Quantity,
  3669. cc.RECEIVEQTY,
  3670. gg.NGQTY
  3671. FROM
  3672. dbo.ICSPurchaseOrder po WITH (NOLOCK)
  3673. LEFT JOIN dbo.ICSINVENTORY inv WITH (NOLOCK) ON po.InvCode = inv.INVCODE AND po.WorkPoint = inv.WorkPoint
  3674. LEFT JOIN dbo.ICSVendor ven WITH (NOLOCK) ON po.VenCode = ven.VenCode
  3675. LEFT JOIN (
  3676. SELECT
  3677. cc.TransCode,
  3678. cc.TransSequence,
  3679. bb.InvCode,
  3680. SUM(aa.DNQuantity) AS RECEIVEQTY
  3681. FROM
  3682. ICSASNdetail aa WITH (NOLOCK)
  3683. LEFT JOIN
  3684. ICSInventoryLot bb WITH (NOLOCK) ON aa.LotNo = bb.LotNo AND aa.WorkPoint = bb.WorkPoint
  3685. LEFT JOIN
  3686. ICSInventoryLotDetail cc WITH (NOLOCK) ON bb.LOTNO = cc.LotNO
  3687. GROUP BY
  3688. cc.TransCode,
  3689. cc.TransSequence,
  3690. bb.InvCode
  3691. ) cc ON po.POCode = cc.TransCode AND po.Sequence = cc.TransSequence
  3692. LEFT JOIN (
  3693. SELECT
  3694. c.TransCode,
  3695. c.TransSequence,
  3696. SUM(ISNULL(a.UnqualifiedQuantity, 0)) AS NGQTY
  3697. FROM
  3698. ICSInspection a WITH (NOLOCK)
  3699. LEFT JOIN
  3700. ICSInventoryLot b WITH (NOLOCK) ON a.LotNo = b.lotno
  3701. LEFT JOIN
  3702. ICSInventoryLotDetail c WITH (NOLOCK) ON b.LOTNO = c.LotNO
  3703. WHERE
  3704. b.EATTRIBUTE2 IS NULL
  3705. GROUP BY
  3706. c.TransCode,
  3707. c.TransSequence
  3708. ) gg ON po.POCode = gg.TransCode AND po.Sequence = gg.TransSequence
  3709. WHERE
  3710. po.Status = '2'
  3711. AND po.ReleaseState = '1'
  3712. AND po.WorkPoint = 'KC47'
  3713. AND po.CreateDateTime BETWEEN '{StartDate}' AND '{EndDate}'
  3714. AND (po.Quantity - ISNULL(cc.RECEIVEQTY, 0) + ISNULL(gg.NGQTY, 0)) > 0
  3715. UNION ALL
  3716. -- DISTINCT并添加了OrderType
  3717. SELECT
  3718. a.OOCode AS POCode,
  3719. a.Sequence,
  3720. a.CreateDateTime,
  3721. a.VenCode,
  3722. ven.VenName,
  3723. a.InvCode,
  3724. c.InvName,
  3725. a.Quantity,
  3726. cc.RECEIVEQTY,
  3727. gg.NGQTY
  3728. FROM
  3729. dbo.ICSOutsourcingOrder a
  3730. LEFT JOIN dbo.ICSINVENTORY c WITH (NOLOCK) ON a.InvCode = c.INVCODE AND a.WorkPoint = c.WorkPoint
  3731. LEFT JOIN dbo.ICSVendor ven WITH (NOLOCK) ON a.VenCode = ven.VenCode
  3732. LEFT JOIN (
  3733. SELECT
  3734. cc.TransCode,
  3735. cc.TransSequence,
  3736. bb.InvCode,
  3737. SUM(aa.Quantity) AS RECEIVEQTY
  3738. FROM
  3739. ICSOASNDetail aa WITH (NOLOCK)
  3740. LEFT JOIN
  3741. ICSInventoryLot bb WITH (NOLOCK) ON aa.LotNo = bb.LotNo AND aa.WorkPoint = bb.WorkPoint
  3742. LEFT JOIN
  3743. ICSInventoryLotDetail cc WITH (NOLOCK) ON bb.LOTNO = cc.LotNO
  3744. GROUP BY
  3745. cc.TransCode,
  3746. cc.TransSequence,
  3747. bb.InvCode
  3748. ) cc ON a.OOCode = cc.TransCode AND a.Sequence = cc.TransSequence
  3749. LEFT JOIN (
  3750. -- 使a.OOCode而不是cc.TransCode进行连接
  3751. SELECT
  3752. c.TransCode,
  3753. c.TransSequence,
  3754. SUM(ISNULL(a.UnqualifiedQuantity, 0)) AS NGQTY
  3755. FROM
  3756. ICSInspection a
  3757. LEFT JOIN ICSInventoryLot b ON a.LotNo = b.lotno
  3758. LEFT JOIN ICSInventoryLotDetail c ON b.LOTNO = c.LotNO
  3759. WHERE
  3760. b.EATTRIBUTE2 IS NULL
  3761. GROUP BY
  3762. c.TransCode,
  3763. c.TransSequence
  3764. ) gg ON a.OOCode = gg.TransCode AND a.Sequence = gg.TransSequence
  3765. WHERE
  3766. a.ReleaseState = '1'
  3767. AND a.WorkPoint = 'KC47'
  3768. AND a.Status = '2'
  3769. AND a.CreateDateTime BETWEEN '{StartDate}' AND '{EndDate}'
  3770. AND (a.Quantity - ISNULL(cc.RECEIVEQTY, 0) + ISNULL(gg.NGQTY, 0)) > 0
  3771. ) AS CombinedOrders
  3772. GROUP BY InvCode ,InvName,VenCode,VenName,CONVERT(NVARCHAR(50), CreateDateTime, 23)
  3773. ),
  3774. PivotData AS (
  3775. SELECT
  3776. *
  3777. FROM
  3778. PurchaseOrders
  3779. )
  3780. -- 使CTE进行PIVOT
  3781. SELECT * INTO #tempPivotData FROM PivotData
  3782. DECLARE @StartDate DATE = '{StartDate}';
  3783. DECLARE @EndDate DATE = '{EndDate}';
  3784. WITH DateSequence AS (
  3785. SELECT @StartDate AS DateValue
  3786. UNION ALL
  3787. SELECT DATEADD(DAY, 1, DateValue)
  3788. FROM DateSequence
  3789. WHERE DateValue < @EndDate
  3790. )
  3791. SELECT CONVERT(NVARCHAR(50),DateValue,23) PODate into #table1
  3792. FROM DateSequence
  3793. OPTION (MAXRECURSION 0)
  3794. -- PIVOT查询的动态SQL
  3795. DECLARE @cols AS NVARCHAR(MAX)
  3796. SELECT @cols = STRING_AGG('[' + PODate + ']', ',') WITHIN GROUP (ORDER BY PODate)
  3797. FROM (SELECT DISTINCT PODate FROM #table1) AS DateList
  3798. DECLARE @sql AS NVARCHAR(MAX)
  3799. SET @sql = '
  3800. SELECT * FROM (
  3801. SELECT
  3802. *
  3803. FROM
  3804. #tempPivotData
  3805. ) AS SourceTable
  3806. PIVOT (
  3807. SUM(QTY) FOR PODate IN (' + @cols + ')
  3808. ) AS PivotTable
  3809. '
  3810. -- SQL
  3811. EXEC sp_executesql @sql
  3812. --
  3813. DROP TABLE #tempPivotData
  3814. DROP TABLE #table1
  3815. ";
  3816. return SqlHelper.GetDataTableBySql(sql);
  3817. }
  3818. #endregion
  3819. #region 订单所在的日期的订单未交货数量导出
  3820. /// <summary>
  3821. /// 订单所在的日期的订单未交货数量导出
  3822. /// </summary>
  3823. /// <param name="beginTime"></param>
  3824. /// <param name="endTime"></param>
  3825. /// <returns></returns>
  3826. public DataTable ExportAll7(string beginTime, string endTime)
  3827. {
  3828. #region [SQL]
  3829. string sql = $@"WITH PurchaseOrders AS (
  3830. SELECT
  3831. CONVERT(NVARCHAR(50), CreateDateTime, 23) AS PODate,
  3832. InvCode as '',
  3833. InvName as '',
  3834. VenCode as '',
  3835. VenName as '',
  3836. sum(Quantity) - sum(ISNULL(RECEIVEQTY, 0)) + Sum(ISNULL(NGQTY, 0)) AS QTY
  3837. FROM (
  3838. -- DISTINCT
  3839. SELECT
  3840. po.POCode,
  3841. po.Sequence,
  3842. po.CreateDateTime,
  3843. po.VenCode,
  3844. ven.VenName,
  3845. po.InvCode,
  3846. inv.InvName,
  3847. po.Quantity,
  3848. cc.RECEIVEQTY,
  3849. gg.NGQTY
  3850. FROM
  3851. dbo.ICSPurchaseOrder po WITH (NOLOCK)
  3852. LEFT JOIN dbo.ICSINVENTORY inv WITH (NOLOCK) ON po.InvCode = inv.INVCODE AND po.WorkPoint = inv.WorkPoint
  3853. LEFT JOIN dbo.ICSVendor ven WITH (NOLOCK) ON po.VenCode = ven.VenCode
  3854. LEFT JOIN (
  3855. SELECT
  3856. cc.TransCode,
  3857. cc.TransSequence,
  3858. bb.InvCode,
  3859. SUM(aa.DNQuantity) AS RECEIVEQTY
  3860. FROM
  3861. ICSASNdetail aa WITH (NOLOCK)
  3862. LEFT JOIN
  3863. ICSInventoryLot bb WITH (NOLOCK) ON aa.LotNo = bb.LotNo AND aa.WorkPoint = bb.WorkPoint
  3864. LEFT JOIN
  3865. ICSInventoryLotDetail cc WITH (NOLOCK) ON bb.LOTNO = cc.LotNO
  3866. GROUP BY
  3867. cc.TransCode,
  3868. cc.TransSequence,
  3869. bb.InvCode
  3870. ) cc ON po.POCode = cc.TransCode AND po.Sequence = cc.TransSequence
  3871. LEFT JOIN (
  3872. SELECT
  3873. c.TransCode,
  3874. c.TransSequence,
  3875. SUM(ISNULL(a.UnqualifiedQuantity, 0)) AS NGQTY
  3876. FROM
  3877. ICSInspection a WITH (NOLOCK)
  3878. LEFT JOIN
  3879. ICSInventoryLot b WITH (NOLOCK) ON a.LotNo = b.lotno
  3880. LEFT JOIN
  3881. ICSInventoryLotDetail c WITH (NOLOCK) ON b.LOTNO = c.LotNO
  3882. WHERE
  3883. b.EATTRIBUTE2 IS NULL
  3884. GROUP BY
  3885. c.TransCode,
  3886. c.TransSequence
  3887. ) gg ON po.POCode = gg.TransCode AND po.Sequence = gg.TransSequence
  3888. WHERE
  3889. po.Status = '2'
  3890. AND po.ReleaseState = '1'
  3891. AND po.WorkPoint = 'KC47'
  3892. AND po.CreateDateTime BETWEEN '{beginTime}' AND '{endTime}'
  3893. AND (po.Quantity - ISNULL(cc.RECEIVEQTY, 0) + ISNULL(gg.NGQTY, 0)) > 0
  3894. UNION ALL
  3895. -- DISTINCT并添加了OrderType
  3896. SELECT
  3897. a.OOCode AS POCode,
  3898. a.Sequence,
  3899. a.CreateDateTime,
  3900. a.VenCode,
  3901. ven.VenName,
  3902. a.InvCode,
  3903. c.InvName,
  3904. a.Quantity,
  3905. cc.RECEIVEQTY,
  3906. gg.NGQTY
  3907. FROM
  3908. dbo.ICSOutsourcingOrder a
  3909. LEFT JOIN dbo.ICSINVENTORY c WITH (NOLOCK) ON a.InvCode = c.INVCODE AND a.WorkPoint = c.WorkPoint
  3910. LEFT JOIN dbo.ICSVendor ven WITH (NOLOCK) ON a.VenCode = ven.VenCode
  3911. LEFT JOIN (
  3912. SELECT
  3913. cc.TransCode,
  3914. cc.TransSequence,
  3915. bb.InvCode,
  3916. SUM(aa.Quantity) AS RECEIVEQTY
  3917. FROM
  3918. ICSOASNDetail aa WITH (NOLOCK)
  3919. LEFT JOIN
  3920. ICSInventoryLot bb WITH (NOLOCK) ON aa.LotNo = bb.LotNo AND aa.WorkPoint = bb.WorkPoint
  3921. LEFT JOIN
  3922. ICSInventoryLotDetail cc WITH (NOLOCK) ON bb.LOTNO = cc.LotNO
  3923. GROUP BY
  3924. cc.TransCode,
  3925. cc.TransSequence,
  3926. bb.InvCode
  3927. ) cc ON a.OOCode = cc.TransCode AND a.Sequence = cc.TransSequence
  3928. LEFT JOIN (
  3929. -- 使a.OOCode而不是cc.TransCode进行连接
  3930. SELECT
  3931. c.TransCode,
  3932. c.TransSequence,
  3933. SUM(ISNULL(a.UnqualifiedQuantity, 0)) AS NGQTY
  3934. FROM
  3935. ICSInspection a
  3936. LEFT JOIN ICSInventoryLot b ON a.LotNo = b.lotno
  3937. LEFT JOIN ICSInventoryLotDetail c ON b.LOTNO = c.LotNO
  3938. WHERE
  3939. b.EATTRIBUTE2 IS NULL
  3940. GROUP BY
  3941. c.TransCode,
  3942. c.TransSequence
  3943. ) gg ON a.OOCode = gg.TransCode AND a.Sequence = gg.TransSequence
  3944. WHERE
  3945. a.ReleaseState = '1'
  3946. AND a.WorkPoint = 'KC47'
  3947. AND a.Status = '2'
  3948. AND a.CreateDateTime BETWEEN '{beginTime}' AND '{endTime}'
  3949. AND (a.Quantity - ISNULL(cc.RECEIVEQTY, 0) + ISNULL(gg.NGQTY, 0)) > 0
  3950. ) AS CombinedOrders
  3951. GROUP BY InvCode ,InvName,VenCode,VenName,CONVERT(NVARCHAR(50), CreateDateTime, 23)
  3952. ),
  3953. PivotData AS (
  3954. SELECT
  3955. *
  3956. FROM
  3957. PurchaseOrders
  3958. )
  3959. -- 使CTE进行PIVOT
  3960. SELECT * INTO #tempPivotData FROM PivotData
  3961. DECLARE @StartDate DATE = '{beginTime}';
  3962. DECLARE @EndDate DATE = '{endTime}';
  3963. WITH DateSequence AS (
  3964. SELECT @StartDate AS DateValue
  3965. UNION ALL
  3966. SELECT DATEADD(DAY, 1, DateValue)
  3967. FROM DateSequence
  3968. WHERE DateValue < @EndDate
  3969. )
  3970. SELECT CONVERT(NVARCHAR(50),DateValue,23) PODate into #table1
  3971. FROM DateSequence
  3972. OPTION (MAXRECURSION 0)
  3973. -- PIVOT查询的动态SQL
  3974. DECLARE @cols AS NVARCHAR(MAX)
  3975. SELECT @cols = STRING_AGG('[' + PODate + ']', ',') WITHIN GROUP (ORDER BY PODate)
  3976. FROM (SELECT DISTINCT PODate FROM #table1) AS DateList
  3977. DECLARE @sql AS NVARCHAR(MAX)
  3978. SET @sql = '
  3979. SELECT * FROM (
  3980. SELECT
  3981. *
  3982. FROM
  3983. #tempPivotData
  3984. ) AS SourceTable
  3985. PIVOT (
  3986. SUM(QTY) FOR PODate IN (' + @cols + ')
  3987. ) AS PivotTable
  3988. '
  3989. -- SQL
  3990. EXEC sp_executesql @sql
  3991. --
  3992. DROP TABLE #tempPivotData
  3993. DROP TABLE #table1;";
  3994. return SqlHelper.GetDataTableBySql(sql);
  3995. #endregion
  3996. }
  3997. #endregion
  3998. #region 供应商交货的频率
  3999. /// <summary>
  4000. /// 供应商交货的频率,
  4001. /// </summary>
  4002. /// <param name="queryJson"></param>
  4003. /// <param name="jqgridparam"></param>
  4004. /// <returns></returns>
  4005. public DataTable GetVenDeliveries(string queryJson)
  4006. {
  4007. //站点信息
  4008. string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
  4009. DataTable dt = new DataTable();
  4010. List<DbParameter> parameter = new List<DbParameter>();
  4011. var queryParam = queryJson.ToJObject();
  4012. object Figure = GetDecimalDigits();
  4013. //获取传递的年份和月份
  4014. string StartDate = queryParam["DateNow"].ToString();
  4015. string EndDate = queryParam["DateNow1"].ToString();
  4016. string sql = $@"
  4017. WITH PurchaseOrders AS (
  4018. SELECT A.InvCode,A.InvName,A.InvStd,A.VenCode,A.VenName,A.MTIME,sum(GS) GS FROM (SELECT DISTINCT
  4019. a.ASNCode,a.VenCode,c.VenName, 1 GS,
  4020. a.InvCode,b.InvName,b.InvStd,CONVERT(NVARCHAR(10),a.MTIME,120) MTIME,a.WorkPoint WorkPoint
  4021. FROM ICSDeliveryNotice a WITH (NOLOCK)
  4022. inner join ICSInventory b WITH (NOLOCK) on a.InvCode=b.InvCode and b.WorkPoint=a.WorkPoint
  4023. inner join ICSVendor c WITH (NOLOCK) on c.VenCode=a.VenCode and c.WorkPoint=a.WorkPoint
  4024. where a.DNType='1' AND a.MTIME BETWEEN '{StartDate}' AND '{EndDate}'
  4025. UNION ALL
  4026. SELECT DISTINCT
  4027. a.OASNCode ASNCode,a.VenCode,c.VenName,1 GS,
  4028. a.InvCode,b.InvName,b.InvStd,CONVERT(NVARCHAR(10),a.MTIME,120) MTIME,a.WorkPoint WorkPoint
  4029. FROM ICSODeliveryNotice a WITH (NOLOCK)
  4030. inner join ICSInventory b WITH (NOLOCK) on a.InvCode=b.InvCode and b.WorkPoint=a.WorkPoint
  4031. inner join ICSVendor c WITH (NOLOCK) on c.VenCode=a.VenCode and c.WorkPoint=a.WorkPoint
  4032. where a.ODNType='1'AND a.MTIME BETWEEN '{StartDate}' AND '{EndDate}' ) A
  4033. GROUP BY A.InvCode,A.InvName,A.InvStd,A.VenCode,A.VenName,A.MTIME
  4034. ),
  4035. PivotData AS (
  4036. SELECT
  4037. InvCode,
  4038. InvName,
  4039. InvStd,
  4040. VenCode,
  4041. VenName,
  4042. MTIME,
  4043. GS
  4044. FROM
  4045. PurchaseOrders
  4046. )
  4047. -- 使CTE进行PIVOT
  4048. SELECT * INTO #tempPivotData FROM PivotData
  4049. -- PIVOT查询的动态SQL
  4050. DECLARE @cols AS NVARCHAR(MAX)
  4051. SELECT @cols = STRING_AGG('[' + MTIME + ']', ',') WITHIN GROUP (ORDER BY MTIME)
  4052. FROM (SELECT DISTINCT MTIME FROM #tempPivotData) AS DateList
  4053. DECLARE @sql AS NVARCHAR(MAX)
  4054. SET @sql = '
  4055. SELECT * FROM (
  4056. SELECT
  4057. InvCode,
  4058. InvName,
  4059. InvStd,
  4060. VenCode,
  4061. VenName,
  4062. MTIME,
  4063. GS
  4064. FROM
  4065. #tempPivotData
  4066. ) AS SourceTable
  4067. PIVOT (
  4068. SUM(GS) FOR MTIME IN (' + @cols + ')
  4069. ) AS PivotTable'
  4070. -- SQL
  4071. EXEC sp_executesql @sql
  4072. --
  4073. DROP TABLE #tempPivotData
  4074. ";
  4075. return SqlHelper.GetDataTableBySql(sql);
  4076. }
  4077. #endregion
  4078. #region 供应商交货的频率导出
  4079. /// <summary>
  4080. /// 供应商交货的频率导出
  4081. /// </summary>
  4082. /// <param name="beginTime"></param>
  4083. /// <param name="endTime"></param>
  4084. /// <returns></returns>
  4085. public DataTable ExportAll8(string beginTime, string endTime)
  4086. {
  4087. #region [SQL]
  4088. string sql = $@"WITH PurchaseOrders AS (
  4089. SELECT A.InvCode '',A.InvName '',A.VenCode '',A.VenName '',A.MTIME,sum(GS) GS FROM (SELECT DISTINCT
  4090. a.ASNCode,a.VenCode,c.VenName, 1 GS,
  4091. a.InvCode,b.InvName,b.InvStd,CONVERT(NVARCHAR(10),a.MTIME,120) MTIME,a.WorkPoint WorkPoint
  4092. FROM ICSDeliveryNotice a WITH (NOLOCK)
  4093. inner join ICSInventory b WITH (NOLOCK) on a.InvCode=b.InvCode and b.WorkPoint=a.WorkPoint
  4094. inner join ICSVendor c WITH (NOLOCK) on c.VenCode=a.VenCode and c.WorkPoint=a.WorkPoint
  4095. where a.DNType='1' AND a.MTIME BETWEEN '{beginTime}' AND '{endTime}'
  4096. UNION ALL
  4097. SELECT DISTINCT
  4098. a.OASNCode ASNCode,a.VenCode,c.VenName,1 GS,
  4099. a.InvCode,b.InvName,b.InvStd,CONVERT(NVARCHAR(10),a.MTIME,120) MTIME,a.WorkPoint WorkPoint
  4100. FROM ICSODeliveryNotice a WITH (NOLOCK)
  4101. inner join ICSInventory b WITH (NOLOCK) on a.InvCode=b.InvCode and b.WorkPoint=a.WorkPoint
  4102. inner join ICSVendor c WITH (NOLOCK) on c.VenCode=a.VenCode and c.WorkPoint=a.WorkPoint
  4103. where a.ODNType='1'AND a.MTIME BETWEEN '{beginTime}' AND '{endTime}' ) A
  4104. GROUP BY A.InvCode,A.InvName,A.VenCode,A.VenName,A.MTIME
  4105. ),
  4106. PivotData AS (
  4107. SELECT
  4108. *
  4109. FROM
  4110. PurchaseOrders
  4111. )
  4112. -- 使CTE进行PIVOT
  4113. SELECT * INTO #tempPivotData FROM PivotData
  4114. DECLARE @StartDate DATE = '{beginTime}';
  4115. DECLARE @EndDate DATE = '{endTime}';
  4116. WITH DateSequence AS (
  4117. SELECT @StartDate AS DateValue
  4118. UNION ALL
  4119. SELECT DATEADD(DAY, 1, DateValue)
  4120. FROM DateSequence
  4121. WHERE DateValue < @EndDate
  4122. )
  4123. SELECT CONVERT(NVARCHAR(50),DateValue,23) MTIME into #table1
  4124. FROM DateSequence
  4125. OPTION (MAXRECURSION 0)
  4126. -- PIVOT查询的动态SQL
  4127. DECLARE @cols AS NVARCHAR(MAX)
  4128. SELECT @cols = STRING_AGG('[' + MTIME + ']', ',') WITHIN GROUP (ORDER BY MTIME)
  4129. FROM (SELECT MTIME FROM #table1) AS DateList
  4130. DECLARE @sql AS NVARCHAR(MAX)
  4131. SET @sql = '
  4132. SELECT * FROM (
  4133. SELECT
  4134. *
  4135. FROM
  4136. #tempPivotData
  4137. ) AS SourceTable
  4138. PIVOT (
  4139. SUM(GS) FOR MTIME IN (' + @cols + ')
  4140. ) AS PivotTable'
  4141. -- SQL
  4142. EXEC sp_executesql @sql
  4143. --
  4144. DROP TABLE #tempPivotData
  4145. DROP TABLE #table1
  4146. ";
  4147. return SqlHelper.GetDataTableBySql(sql);
  4148. #endregion
  4149. }
  4150. #endregion
  4151. }
  4152. /// <summary>
  4153. /// api/Rd1011/Approve 调用产成品入库单、材料出库单审核
  4154. /// </summary>
  4155. public class ApproveInput
  4156. {
  4157. public string ID { get; set; }//ID
  4158. public string User { get; set; }//用户
  4159. public string Type { get; set; }//类型(入库,倒冲)
  4160. public string WorkPoint { get; set; }//站点
  4161. public bool UpdateStock { get; set; }//是否更新现存量
  4162. public DateTime MTime { get; set; }//时间
  4163. public bool UpdateTodoQuantity { get; set; }//更新待出入数量
  4164. }
  4165. }