demo.ashx 45 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121
  1. <%@ WebHandler Language="C#" Class="demo" %>
  2. using Curtain.DataAccess;
  3. using DK.XuWei.WebMes;
  4. using Newtonsoft.Json.Linq;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Data;
  8. using System.Web;
  9. using System.Web.SessionState;
  10. using System.Linq;
  11. public class demo : IHttpHandler
  12. {
  13. public void ProcessRequest(HttpContext context)
  14. {
  15. context.Response.ContentType = "text/plain";
  16. context.Response.ContentType = "text/plain";
  17. using (IDataAccess conn = DataAccess.Create())
  18. {
  19. //毛坯库库存
  20. if (context.Request["m"].ToString() == "kc")
  21. {
  22. string sqlStr = @"SELECT
  23. CASE WHEN T.GOODSTYPEID = 3 THEN '连体'
  24. WHEN T.GOODSTYPEID = 18 THEN '智能'
  25. ELSE '其他' END AS 产品类别,
  26. T.count 数量
  27. FROM (
  28. SELECT
  29. GOODSTYPEID,
  30. COUNT( * ) count
  31. FROM
  32. TP_PM_INPRODUCTION TPI
  33. LEFT JOIN TP_MST_GOODS TMG ON TPI.GOODSCODE = TMG.GOODSCODE
  34. WHERE
  35. TPI.PROCEDUREID = 97
  36. GROUP BY
  37. TMG.GOODSTYPEID) T";
  38. //直接获取不分页数据
  39. DataTable dt = conn.ExecuteDatatable(sqlStr);
  40. string jsonStr = new JsonResult(dt).ToJson();
  41. context.Response.Write(jsonStr);
  42. }
  43. }
  44. using (IDataAccess conn = DataAccess.Create())
  45. {
  46. //吹尘工号产量柱状图
  47. if (context.Request["m"].ToString() == "cc")
  48. {
  49. string sqlStr = @" SELECT
  50. SUBSTR( T.日期, 6, 2 ) || '-' || SUBSTR( T.日期, 9, 2 ) 日期,
  51. T.产量
  52. FROM
  53. (
  54. SELECT
  55. SUBSTR( TO_CHAR( TPP.CREATETIME, 'yyyy-mm-dd hh24:mi:ss' ), 0, 10 ) 日期,
  56. COUNT( * ) 产量
  57. FROM
  58. TP_PM_PRODUCTIONDATA TPP
  59. LEFT JOIN TP_MST_WORKSTATIONUSER TMWU ON TPP.USERCODE = TMWU.USERCODE
  60. LEFT JOIN TP_PM_GROUTINGDAILYDETAIL PGD ON PGD.BARCODE = TPP.BARCODE
  61. LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPGL.GROUTINGLINEID = PGD.GROUTINGLINEID
  62. WHERE
  63. TPP.PROCEDUREID IN ( 98 )
  64. AND TPP.VALUEFLAG = 1
  65. AND TPGL.TESTFLAG = 0
  66. AND TPP.CREATETIME >= trunc( SYSDATE - 7 )
  67. GROUP BY
  68. SUBSTR( TO_CHAR( TPP.CREATETIME, 'yyyy-mm-dd hh24:mi:ss' ), 0, 10 )
  69. ORDER BY
  70. SUBSTR( TO_CHAR( TPP.CREATETIME, 'yyyy-mm-dd hh24:mi:ss' ), 0, 10 ) ASC
  71. ) T";
  72. //直接获取不分页数据
  73. DataTable dt = conn.ExecuteDatatable(sqlStr);
  74. string jsonStr = new JsonResult(dt).ToJson();
  75. context.Response.Write(jsonStr);
  76. }
  77. }
  78. using (IDataAccess conn = DataAccess.Create())
  79. {
  80. //施釉工号产量柱状图
  81. if (context.Request["m"].ToString() == "cl")
  82. {
  83. string sqlStr = @" SELECT
  84. TPP.USERCODE 工号,
  85. COUNT(*) 产量
  86. FROM
  87. TP_PM_PRODUCTIONDATA TPP
  88. LEFT JOIN TP_MST_WORKSTATIONUSER TMWU ON TPP.USERCODE = TMWU.USERCODE
  89. LEFT JOIN TP_PM_GROUTINGDAILYDETAIL PGD ON PGD.BARCODE = TPP.BARCODE
  90. LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPGL.GROUTINGLINEID = PGD.GROUTINGLINEID
  91. WHERE
  92. TPP.PROCEDUREID IN ( 98 )
  93. AND TPP.VALUEFLAG = 1
  94. AND TPGL.TESTFLAG = 0
  95. AND TPP.CREATETIME >= trunc( SYSDATE )
  96. GROUP BY TPP.USERCODE";
  97. //直接获取不分页数据
  98. DataTable dt = conn.ExecuteDatatable(sqlStr);
  99. string jsonStr = new JsonResult(dt).ToJson();
  100. context.Response.Write(jsonStr);
  101. }
  102. }
  103. using (IDataAccess conn = DataAccess.Create())
  104. {
  105. //归属施釉缺陷(今日TOP3)
  106. if (context.Request["m"].ToString() == "defect")
  107. {
  108. string sqlStr = @"SELECT
  109. T.S_NAME AS 缺陷名称,
  110. T.数量 ,
  111. T.缺陷工序编码
  112. FROM
  113. (
  114. SELECT
  115. TMD.S_NAME,
  116. count( DISTINCT TPD.BARCODE ) AS 数量 ,
  117. TPD.DEFECTUSERCODE AS 缺陷工序编码
  118. FROM
  119. TP_PM_DEFECT TPD
  120. LEFT JOIN TP_MST_DEFECT TMD ON TPD.DEFECTID = TMD.DEFECTID
  121. LEFT JOIN TP_PM_PRODUCTIONDATA TPPD ON TPD.BARCODE = TPPD.BARCODE
  122. LEFT JOIN TP_PM_GROUTINGDAILYDETAIL PGD ON PGD.BARCODE = TPD.BARCODE
  123. LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPGL.GROUTINGLINEID = PGD.GROUTINGLINEID
  124. WHERE
  125. TPD.CREATETIME >= TRUNC( SYSDATE )
  126. AND TMD.DEFECTTYPEID IN ( 17, 5 )
  127. AND TPGL.TESTFLAG = 0
  128. AND TPD.DEFECTDEDUCTIONNUM >=1
  129. AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' )
  130. AND TPPD.CHECKBATCHNO = 1
  131. AND TPD.VALUEFLAG = 1
  132. AND TPD.DEFECTUSERCODE NOT IN('YL1')
  133. GROUP BY
  134. TMD.S_NAME ,TPD.DEFECTUSERCODE
  135. ORDER BY
  136. COUNT( * ) DESC
  137. ) T ";
  138. //直接获取不分页数据
  139. DataTable dt = conn.ExecuteDatatable(sqlStr);
  140. //创建返回值
  141. DataTable dt归属施釉缺陷 = new DataTable();
  142. DataTable dt月成品缺陷0105 = new DataTable();
  143. DataTable dt月成品缺陷0204 = new DataTable();
  144. //所需缺陷代码
  145. List<String> S0105 = new List<string>() { "SSY001", "SSY005" };
  146. List<String> S0204 = new List<string>() { "SSY002", "SSY004" };
  147. //添加表头
  148. for (int i = 0; i < 2; i++)
  149. {
  150. dt归属施釉缺陷.Columns.Add(dt.Columns[i].ColumnName);
  151. dt月成品缺陷0105.Columns.Add(dt.Columns[i].ColumnName);
  152. dt月成品缺陷0204.Columns.Add(dt.Columns[i].ColumnName);
  153. }
  154. //创建归属施釉缺陷所需数据
  155. var aaa = dt.AsEnumerable().GroupBy(row => row.Field<string>("缺陷名称")).Select(group =>
  156. new { 缺陷名称 = group.Key, 数量 = group.Sum(row => row.Field<decimal>("数量")) }).
  157. OrderByDescending(ex => ex.数量).Take(3);
  158. //添加表体
  159. foreach (var item in aaa)
  160. {
  161. var dr归属施釉缺陷 = dt归属施釉缺陷.NewRow();
  162. dr归属施釉缺陷["缺陷名称"] = item.缺陷名称;
  163. dr归属施釉缺陷["数量"] = item.数量;
  164. dt归属施釉缺陷.Rows.Add(dr归属施釉缺陷);
  165. }
  166. //创建月成品缺陷0105所需数据
  167. var bbb = dt.AsEnumerable().Where(ex => S0105.Contains(ex.Field<string>("缺陷工序编码")))
  168. .GroupBy(row => row.Field<string>("缺陷名称")).Select(group =>
  169. new { 缺陷名称 = group.Key, 数量 = group.Sum(row => row.Field<decimal>("数量")) }).
  170. OrderByDescending(ex => ex.数量).Take(5);
  171. //添加表体
  172. foreach (var item in bbb)
  173. {
  174. var dr月成品缺陷0105 = dt月成品缺陷0105.NewRow();
  175. dr月成品缺陷0105["缺陷名称"] = item.缺陷名称;
  176. dr月成品缺陷0105["数量"] = item.数量;
  177. dt月成品缺陷0105.Rows.Add(dr月成品缺陷0105);
  178. }
  179. //创建月成品缺陷0204所需数据
  180. var ccc = dt.AsEnumerable().Where(ex => S0204.Contains(ex.Field<string>("缺陷工序编码")))
  181. .GroupBy(row => row.Field<string>("缺陷名称")).Select(group =>
  182. new { 缺陷名称 = group.Key, 数量 = group.Sum(row => row.Field<decimal>("数量")) }).
  183. OrderByDescending(ex => ex.数量).Take(5);
  184. //添加表体
  185. foreach (var item in ccc)
  186. {
  187. var dr月成品缺陷0204 = dt月成品缺陷0204.NewRow();
  188. dr月成品缺陷0204["缺陷名称"] = item.缺陷名称;
  189. dr月成品缺陷0204["数量"] = item.数量;
  190. dt月成品缺陷0204.Rows.Add(dr月成品缺陷0204);
  191. }
  192. //返回值对象
  193. DataSet result = new DataSet();
  194. result.Tables.Add(dt归属施釉缺陷);
  195. result.Tables.Add(dt月成品缺陷0105);
  196. result.Tables.Add(dt月成品缺陷0204);
  197. string jsonStr = new JsonResult(result).ToJson();
  198. context.Response.Write(jsonStr);
  199. }
  200. }
  201. using (IDataAccess conn = DataAccess.Create())
  202. {
  203. //月成品缺陷(每月TOP5)
  204. //SSY001 SSY002 SSY004 SSY005
  205. if (context.Request["m"].ToString() == "defectMonth")
  206. {
  207. string sqlStr = @"SELECT
  208. T.S_NAME AS 缺陷名称,
  209. T.数量 ,
  210. T.缺陷工序编码
  211. FROM
  212. (
  213. SELECT
  214. TMD.S_NAME,
  215. count( DISTINCT TPD.BARCODE ) AS 数量 ,
  216. TPD.DEFECTUSERCODE AS 缺陷工序编码
  217. FROM
  218. TP_PM_DEFECT TPD
  219. LEFT JOIN TP_MST_DEFECT TMD ON TPD.DEFECTID = TMD.DEFECTID
  220. LEFT JOIN TP_PM_PRODUCTIONDATA TPPD ON TPD.BARCODE = TPPD.BARCODE
  221. LEFT JOIN TP_PM_GROUTINGDAILYDETAIL PGD ON PGD.BARCODE = TPD.BARCODE
  222. LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPGL.GROUTINGLINEID = PGD.GROUTINGLINEID
  223. WHERE
  224. TPD.CREATETIME >= TRUNC(SYSDATE, 'MM')
  225. AND TMD.DEFECTTYPEID IN ( 17, 5 )
  226. AND TPGL.TESTFLAG = 0
  227. AND TPD.DEFECTDEDUCTIONNUM >=1
  228. AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' )
  229. AND TPPD.CHECKBATCHNO = 1
  230. AND TPD.VALUEFLAG = 1
  231. AND TPD.DEFECTUSERCODE NOT IN('YL1')
  232. GROUP BY
  233. TMD.S_NAME ,TPD.DEFECTUSERCODE
  234. ORDER BY
  235. COUNT( * ) DESC
  236. ) T ";
  237. //直接获取不分页数据
  238. DataTable dt = conn.ExecuteDatatable(sqlStr);
  239. //创建返回值
  240. DataTable dt月成品缺陷0105 = new DataTable();
  241. DataTable dt月成品缺陷0204 = new DataTable();
  242. //所需缺陷代码
  243. List<String> S0105 = new List<string>() { "SSY001", "SSY005" };
  244. List<String> S0204 = new List<string>() { "SSY002", "SSY004" };
  245. //添加表头
  246. for (int i = 0; i < 2; i++)
  247. {
  248. dt月成品缺陷0105.Columns.Add(dt.Columns[i].ColumnName);
  249. dt月成品缺陷0204.Columns.Add(dt.Columns[i].ColumnName);
  250. }
  251. //创建月成品缺陷0105所需数据
  252. var bbb = dt.AsEnumerable().Where(ex => S0105.Contains(ex.Field<string>("缺陷工序编码")))
  253. .GroupBy(row => row.Field<string>("缺陷名称")).Select(group =>
  254. new { 缺陷名称 = group.Key, 数量 = group.Sum(row => row.Field<decimal>("数量")) }).
  255. OrderByDescending(ex => ex.数量).Take(5);
  256. //添加表体
  257. foreach (var item in bbb)
  258. {
  259. var dr月成品缺陷0105 = dt月成品缺陷0105.NewRow();
  260. dr月成品缺陷0105["缺陷名称"] = item.缺陷名称;
  261. dr月成品缺陷0105["数量"] = item.数量;
  262. dt月成品缺陷0105.Rows.Add(dr月成品缺陷0105);
  263. }
  264. //创建月成品缺陷0204所需数据
  265. var ccc = dt.AsEnumerable().Where(ex => S0204.Contains(ex.Field<string>("缺陷工序编码")))
  266. .GroupBy(row => row.Field<string>("缺陷名称")).Select(group =>
  267. new { 缺陷名称 = group.Key, 数量 = group.Sum(row => row.Field<decimal>("数量")) }).
  268. OrderByDescending(ex => ex.数量).Take(5);
  269. //添加表体
  270. foreach (var item in ccc)
  271. {
  272. var dr月成品缺陷0204 = dt月成品缺陷0204.NewRow();
  273. dr月成品缺陷0204["缺陷名称"] = item.缺陷名称;
  274. dr月成品缺陷0204["数量"] = item.数量;
  275. dt月成品缺陷0204.Rows.Add(dr月成品缺陷0204);
  276. }
  277. //返回值对象
  278. DataSet result = new DataSet();
  279. result.Tables.Add(dt月成品缺陷0105);
  280. result.Tables.Add(dt月成品缺陷0204);
  281. string jsonStr = new JsonResult(result).ToJson();
  282. context.Response.Write(jsonStr);
  283. }
  284. }
  285. using (IDataAccess conn = DataAccess.Create())
  286. {
  287. //半检缺陷扇形图
  288. if (context.Request["m"].ToString() == "defectb")
  289. {
  290. string sqlStr = @"SELECT
  291. CASE WHEN T.GOODSTYPEID = 3 THEN '连体'
  292. WHEN T.GOODSTYPEID = 18 THEN '智能'
  293. ELSE '其他' END AS 产品类别,
  294. T.count 数量
  295. FROM (
  296. SELECT
  297. GOODSTYPEID,
  298. COUNT( * ) count
  299. FROM
  300. TP_PM_INPRODUCTION TPI
  301. LEFT JOIN TP_MST_GOODS TMG ON TPI.GOODSCODE = TMG.GOODSCODE
  302. WHERE
  303. TPI.PROCEDUREID = 99
  304. GROUP BY
  305. TMG.GOODSTYPEID) T";
  306. //直接获取不分页数据
  307. DataTable dt = conn.ExecuteDatatable(sqlStr);
  308. string jsonStr = new JsonResult(dt).ToJson();
  309. context.Response.Write(jsonStr);
  310. }
  311. }
  312. using (IDataAccess conn = DataAccess.Create())
  313. {
  314. //每小时产量折线图
  315. if (context.Request["m"].ToString() == "h")
  316. {
  317. string sqlStr = @"SELECT
  318. T.CREATETIME AS 日期,
  319. CASE
  320. WHEN TT.施釉数量 IS NULL THEN
  321. 0 ELSE TT.施釉数量
  322. END AS 二线施釉数量,
  323. CASE
  324. WHEN TT1.施釉数量 IS NULL THEN
  325. 0 ELSE TT1.施釉数量
  326. END AS 一线施釉数量
  327. FROM
  328. (
  329. SELECT
  330. 0 施釉数量,
  331. '00' AS CREATETIME
  332. FROM
  333. DUAL UNION ALL
  334. SELECT
  335. 0 施釉数量,
  336. '01' AS CREATETIME
  337. FROM
  338. DUAL UNION ALL
  339. SELECT
  340. 0 施釉数量,
  341. '02' AS CREATETIME
  342. FROM
  343. DUAL UNION ALL
  344. SELECT
  345. 0 施釉数量,
  346. '03' AS CREATETIME
  347. FROM
  348. DUAL UNION ALL
  349. SELECT
  350. 0 施釉数量,
  351. '04' AS CREATETIME
  352. FROM
  353. DUAL UNION ALL
  354. SELECT
  355. 0 施釉数量,
  356. '05' AS CREATETIME
  357. FROM
  358. DUAL UNION ALL
  359. SELECT
  360. 0 施釉数量,
  361. '06' AS CREATETIME
  362. FROM
  363. DUAL UNION ALL
  364. SELECT
  365. 0 施釉数量,
  366. '07' AS CREATETIME
  367. FROM
  368. DUAL UNION ALL
  369. SELECT
  370. 0 施釉数量,
  371. '08' AS CREATETIME
  372. FROM
  373. DUAL UNION ALL
  374. SELECT
  375. 0 施釉数量,
  376. '09' AS CREATETIME
  377. FROM
  378. DUAL UNION ALL
  379. SELECT
  380. 0 施釉数量,
  381. '10' AS CREATETIME
  382. FROM
  383. DUAL UNION ALL
  384. SELECT
  385. 0 施釉数量,
  386. '11' AS CREATETIME
  387. FROM
  388. DUAL UNION ALL
  389. SELECT
  390. 0 施釉数量,
  391. '12' AS CREATETIME
  392. FROM
  393. DUAL UNION ALL
  394. SELECT
  395. 0 施釉数量,
  396. '13' AS CREATETIME
  397. FROM
  398. DUAL UNION ALL
  399. SELECT
  400. 0 施釉数量,
  401. '14' AS CREATETIME
  402. FROM
  403. DUAL UNION ALL
  404. SELECT
  405. 0 施釉数量,
  406. '15' AS CREATETIME
  407. FROM
  408. DUAL UNION ALL
  409. SELECT
  410. 0 施釉数量,
  411. '16' AS CREATETIME
  412. FROM
  413. DUAL UNION ALL
  414. SELECT
  415. 0 施釉数量,
  416. '17' AS CREATETIME
  417. FROM
  418. DUAL UNION ALL
  419. SELECT
  420. 0 施釉数量,
  421. '18' AS CREATETIME
  422. FROM
  423. DUAL UNION ALL
  424. SELECT
  425. 0 施釉数量,
  426. '19' AS CREATETIME
  427. FROM
  428. DUAL UNION ALL
  429. SELECT
  430. 0 施釉数量,
  431. '20' AS CREATETIME
  432. FROM
  433. DUAL UNION ALL
  434. SELECT
  435. 0 施釉数量,
  436. '21' AS CREATETIME
  437. FROM
  438. DUAL UNION ALL
  439. SELECT
  440. 0 施釉数量,
  441. '22' AS CREATETIME
  442. FROM
  443. DUAL UNION ALL
  444. SELECT
  445. 0 施釉数量,
  446. '23' AS CREATETIME
  447. FROM
  448. DUAL
  449. ) T
  450. FULL JOIN (
  451. SELECT
  452. T2.CREATETIME,
  453. COUNT( * ) 施釉数量
  454. FROM
  455. (
  456. SELECT
  457. SUBSTR( TO_CHAR( TPP.CREATETIME, 'yyyy-mm-dd hh24:mi:ss' ), 12, 2 ) AS CREATETIME
  458. FROM
  459. TP_PM_PRODUCTIONDATA TPP
  460. LEFT JOIN TP_MST_WORKSTATIONUSER TMWU ON TPP.USERCODE = TMWU.USERCODE
  461. LEFT JOIN TP_PM_GROUTINGDAILYDETAIL PGD ON PGD.BARCODE = TPP.BARCODE
  462. LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPGL.GROUTINGLINEID = PGD.GROUTINGLINEID
  463. WHERE
  464. TPP.PROCEDUREID IN ( 98 )
  465. AND TPP.VALUEFLAG = 1
  466. AND TPGL.TESTFLAG = 0
  467. AND TMWU.WORKSTATIONID IN ( 37 )
  468. AND TPP.CREATETIME >= trunc( SYSDATE )
  469. ) T2
  470. GROUP BY
  471. T2.CREATETIME
  472. ORDER BY
  473. T2.CREATETIME
  474. ) TT ON T.CREATETIME = TT.CREATETIME
  475. FULL JOIN (
  476. SELECT
  477. T2.CREATETIME,
  478. COUNT( * ) 施釉数量
  479. FROM
  480. (
  481. SELECT
  482. SUBSTR( TO_CHAR( TPP.CREATETIME, 'yyyy-mm-dd hh24:mi:ss' ), 12, 2 ) AS CREATETIME
  483. FROM
  484. TP_PM_PRODUCTIONDATA TPP
  485. LEFT JOIN TP_MST_WORKSTATIONUSER TMWU ON TPP.USERCODE = TMWU.USERCODE
  486. LEFT JOIN TP_PM_GROUTINGDAILYDETAIL PGD ON PGD.BARCODE = TPP.BARCODE
  487. LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPGL.GROUTINGLINEID = PGD.GROUTINGLINEID
  488. WHERE
  489. TPP.PROCEDUREID IN ( 98 )
  490. AND TPP.VALUEFLAG = 1
  491. AND TPGL.TESTFLAG = 0
  492. AND TMWU.WORKSTATIONID IN ( 38 )
  493. AND TPP.CREATETIME >= trunc( SYSDATE )
  494. ) T2
  495. GROUP BY
  496. T2.CREATETIME
  497. ORDER BY
  498. T2.CREATETIME
  499. ) TT1 ON T.CREATETIME = TT1.CREATETIME";
  500. //直接获取不分页数据
  501. DataTable dt = conn.ExecuteDatatable(sqlStr);
  502. string jsonStr = new JsonResult(dt).ToJson();
  503. context.Response.Write(jsonStr);
  504. }
  505. }
  506. using (IDataAccess conn = DataAccess.Create())
  507. {
  508. //施釉折线图
  509. if (context.Request["m"].ToString() == "zx")
  510. {
  511. string sqlStr = @"SELECT
  512. CASE
  513. WHEN
  514. T4.出窑数 = 0 THEN
  515. '100%' ELSE TO_CHAR( TRUNC( T4.成检合格 / T4.出窑数, 4 ) * 100, '990.00' ) || '%'
  516. END AS 施釉合格率,
  517. T4.出窑数,
  518. SUBSTR( T4.CREATETIME, 5, 2 )||'.'||SUBSTR( T4.CREATETIME, 7, 2 ) AS 日期
  519. FROM
  520. (
  521. SELECT
  522. T.出窑数,
  523. T.出窑数 - ( CASE WHEN T2.成检不合格数 IS NULL THEN 0 ELSE T2.成检不合格数 END ) AS 成检合格,
  524. T.CREATETIME
  525. FROM
  526. (--出窑数
  527. SELECT
  528. CASE
  529. WHEN
  530. T2.出窑数 IS NULL THEN
  531. 0 ELSE T2.出窑数
  532. END 出窑数,
  533. T1.CREATETIME CREATETIME
  534. FROM
  535. (
  536. SELECT
  537. 0 出窑数,
  538. to_char( ( TRUNC( SYSDATE - 6 ) + ROWNUM - 1 ), 'yyyymmdd' ) AS CREATETIME
  539. FROM
  540. DUAL CONNECT BY ROWNUM <= 7
  541. ORDER BY
  542. to_char( ( TRUNC( SYSDATE - 6 ) + ROWNUM - 1 ), 'yyyymmdd' ) DESC
  543. ) T1
  544. LEFT JOIN (
  545. SELECT
  546. 出窑数,
  547. CREATETIME
  548. FROM
  549. (
  550. SELECT DISTINCT
  551. CASE
  552. WHEN
  553. COUNT( TPPD.BARCODE ) IS NULL THEN
  554. 0 ELSE COUNT( TPPD.BARCODE )
  555. END 出窑数,
  556. to_char( TPPD.CREATETIME, 'yyyymmdd' ) AS CREATETIME
  557. FROM
  558. TP_PM_PRODUCTIONDATA TPPD
  559. LEFT JOIN (
  560. SELECT
  561. TPPD.BARCODE,TPPD.CREATETIME
  562. FROM
  563. TP_PM_PRODUCTIONDATA TPPD
  564. LEFT JOIN TP_PM_GROUTINGDAILYDETAIL PGD ON PGD.BARCODE = TPPD.BARCODE
  565. LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPGL.GROUTINGLINEID = PGD.GROUTINGLINEID
  566. WHERE
  567. TPPD.PROCEDUREID IN (98)
  568. --AND TPPD.CREATETIME >= trunc( SYSDATE - 6 )
  569. AND TPPD.VALUEFLAG = 1
  570. AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' )
  571. AND TPGL.TESTFLAG = 0
  572. AND TPPD.ISREFIRE = 0
  573. ) TPPB
  574. ON TPPB.BARCODE = TPPD.BARCODE
  575. LEFT JOIN TP_PM_GROUTINGDAILYDETAIL PGD ON PGD.BARCODE = TPPD.BARCODE
  576. LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPGL.GROUTINGLINEID = PGD.GROUTINGLINEID
  577. WHERE
  578. TPPD.PROCEDUREID IN ( 104 )
  579. AND PGD.TESTFLAG = 0
  580. AND TPPD.ISREFIRE = 0
  581. AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' )
  582. AND TPPD.CREATETIME >= trunc( SYSDATE - 6 )
  583. AND TPPD.VALUEFLAG = 1
  584. GROUP BY
  585. to_char( TPPD.CREATETIME, 'yyyymmdd' )
  586. ORDER BY
  587. to_char( TPPD.CREATETIME, 'yyyymmdd' ) DESC
  588. )
  589. ) T2 ON T1.CREATETIME = T2.CREATETIME
  590. ORDER BY
  591. T1.CREATETIME DESC
  592. ) T
  593. LEFT JOIN (
  594. SELECT
  595. CASE
  596. WHEN
  597. T2.成检不合格数 IS NULL THEN
  598. 0 ELSE T2.成检不合格数
  599. END 成检不合格数,
  600. T1.CREATETIME CREATETIME
  601. FROM
  602. (
  603. SELECT
  604. 0 成检不合格数,
  605. to_char( ( TRUNC( SYSDATE - 6 ) + ROWNUM - 1 ), 'yyyymmdd' ) AS CREATETIME
  606. FROM
  607. DUAL CONNECT BY ROWNUM <= 7
  608. ORDER BY
  609. to_char( ( TRUNC( SYSDATE - 6 ) + ROWNUM - 1 ), 'yyyymmdd' ) DESC
  610. ) T1
  611. LEFT JOIN (
  612. SELECT
  613. 成检不合格数,
  614. CREATETIME
  615. FROM
  616. (
  617. SELECT DISTINCT
  618. NVL( COUNT( DISTINCT TPPD.BARCODE ), 0 ) 成检不合格数,--成检本烧最后一次检验判断为次品和重烧数
  619. to_char( TPPD.CREATETIME, 'yyyymmdd' ) AS CREATETIME
  620. FROM
  621. TP_PM_PRODUCTIONDATA TPPD
  622. LEFT JOIN TP_PM_DEFECT TPD ON TPPD.BARCODE = TPD.BARCODE
  623. LEFT JOIN TP_PM_GROUTINGDAILYDETAIL PGD ON PGD.BARCODE = TPPD.BARCODE
  624. LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPGL.GROUTINGLINEID = PGD.GROUTINGLINEID
  625. WHERE
  626. TPD.DEFECTPROCEDUREID = 98
  627. AND TPPD.CHECKBATCHNO = 1
  628. AND TPPD.ISREFIRE IN (0)
  629. AND TPPD.GOODSLEVELID IN (6,7)
  630. AND TPD.DEFECTDEDUCTIONNUM >=1
  631. AND TPD.DEFECTNAME IS NOT NULL
  632. AND TPPD.CREATETIME >= trunc( SYSDATE - 6 )
  633. AND TPPD.VALUEFLAG = 1
  634. AND TPGL.TESTFLAG = 0
  635. AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' )
  636. GROUP BY
  637. to_char( TPPD.CREATETIME, 'yyyymmdd' )
  638. ORDER BY
  639. to_char( TPPD.CREATETIME, 'yyyymmdd' ) DESC
  640. )
  641. ) T2 ON T1.CREATETIME = T2.CREATETIME
  642. ORDER BY
  643. T1.CREATETIME DESC
  644. ) T2 ON T2.CREATETIME = T.CREATETIME
  645. ORDER BY
  646. T2.CREATETIME DESC
  647. ) T4
  648. ORDER BY
  649. CREATETIME";
  650. //直接获取不分页数据
  651. DataTable dt = conn.ExecuteDatatable(sqlStr);
  652. string jsonStr = new JsonResult(dt).ToJson();
  653. context.Response.Write(jsonStr);
  654. }
  655. }
  656. using (IDataAccess conn = DataAccess.Create())
  657. {
  658. //施釉每日成品合格率(前7日)&&施釉每月成品合格率(前7月)&&施釉每日成品冷补缺陷率(前7日)
  659. if (context.Request["m"].ToString() == "Dailypassrate")
  660. {
  661. string type = context.Request["type"].ToString() == "day" ? "yyyymmdd" : "yyyymm";
  662. //判断是否开启施釉每日成品冷补缺陷率(前7日)
  663. string repair = context.Request["repair"].ToString();
  664. //出窑数
  665. string sqlStr1 = "SELECT " +
  666. "DISTINCT CASE WHEN COUNT( TPPD.BARCODE ) IS NULL THEN 0 ELSE COUNT( TPPD.BARCODE ) END 出窑数," +
  667. "to_char( temp.CREATETIME, '"+type+"' ) AS CREATETIME " +
  668. "FROM " +
  669. "TP_PM_ProductionData TPPD " +
  670. "INNER JOIN tp_mst_goods ON tp_mst_goods.goodsid = TPPD.Goodsid " +
  671. "INNER JOIN tp_mst_goodstype ON tp_mst_goodstype.goodstypeid = tp_mst_goods.goodstypeid " +
  672. "INNER JOIN TP_MST_RptTProcedure ON TP_MST_RptTProcedure.Procedureid = TPPD.Procedureid " +
  673. "INNER JOIN tp_pc_procedure pcp ON pcp.procedureid = TPPD.Procedureid " +
  674. "INNER JOIN ( " +
  675. "SELECT pd.Barcode, pd.Createtime " +
  676. "FROM TP_PM_ProductionData pd " +
  677. "INNER JOIN tp_pm_groutingdailydetail gdd ON gdd.groutingdailydetailid = pd.groutingdailydetailid " +
  678. "WHERE pd.Accountid = 1 " +
  679. "AND pd.isrefire = '0' " +
  680. "AND pd.islengbu = '0' " +
  681. "AND ( " +
  682. "( pd.procedureid = 11 AND pd.valueflag = '1' AND ( pd.checkflag = '1' OR pd.checkflag IS NULL ) ) " +
  683. "OR ( pd.procedureid = 104 AND pd.checkflag = '1' ) " +
  684. ") " +
  685. "AND PD.KILNID IN ( 1, 2, 5 ) " +
  686. "AND PD.CREATETIME >= CASE WHEN '"+type+"' = 'yyyymm' THEN TRUNC(ADD_MONTHS(SYSDATE, -6), 'MM')" +
  687. "ELSE TRUNC(SYSDATE - 6) END "+
  688. ") temp ON TPPD.Barcode = temp.barcode " +
  689. "AND TPPD.createtime <= temp.createtime " +
  690. "WHERE TPPD.Valueflag = '1' " +
  691. "AND TP_MST_RptTProcedure.Rptprocedureid = 1 " +
  692. "AND instr( ',' || '98' || ',', ',' || TP_MST_RptTProcedure.ProcedureId || ',' ) > 0 " +
  693. "AND TPPD.usercode IN ( 'SSY001', 'SSY002', 'SSY004', 'SSY005' ) "+
  694. "GROUP BY to_char( temp.CREATETIME, '"+type+"') " +
  695. "ORDER BY to_char( temp.CREATETIME, '"+type+"' ) DESC ";
  696. //直接获取不分页数据
  697. DataTable dt1 = conn.ExecuteDatatable(sqlStr1);
  698. //成检不合格数
  699. string sqlStr2 = "SELECT DISTINCT " +
  700. "NVL( COUNT( DISTINCT pmd.BARCODE ), 0 ) 成检不合格数, " +
  701. "to_char( pmd.CREATETIME, '"+type+"' ) AS CREATETIME " +
  702. "FROM " +
  703. "tp_pm_defect pmd " +
  704. "INNER JOIN TP_PM_PRODUCTIONDATA PD ON PMD.PRODUCTIONDATAID = PD.PRODUCTIONDATAID " +
  705. "AND PD.MODELTYPE IN ( - 1, - 4, - 5 ) " +
  706. "AND PD.VALUEFLAG = '1' " +
  707. "AND PD.CHECKBATCHNO = 1 " +
  708. "AND PD.ISREFIRE = '0' " +
  709. "LEFT JOIN TP_MST_Defect mstd ON pmd.DefectID = mstd.DefectID " +
  710. "LEFT JOIN TP_MST_DefectType dt ON mstd.DefectTypeID = dt.DefectTypeID " +
  711. "LEFT JOIN TP_PM_GroutingDailyDetail gdd ON gdd.Groutingdailydetailid = pd.Groutingdailydetailid " +
  712. "INNER JOIN tp_pm_productiondata hopd ON hopd.kilncarbatchno = pd.kilncarbatchno " +
  713. "AND hopd.barcode = pd.barcode " +
  714. "AND ( ( hopd.procedureid = 11 AND hopd.valueflag = '1' ) " +
  715. "OR ( hopd.procedureid = 104 AND hopd.isrefire = '0' AND hopd.checkflag = '1' )) " +
  716. "WHERE pmd.valueflag = '1' " +
  717. "AND instr( pd.KilnCode, '3' ) > 0 " +
  718. "AND dt.DefectTypeID IN(5) " +
  719. "AND gdd.RECYCLINGFLAG = '0' " +
  720. "AND pmd.CREATETIME >= CASE WHEN '"+type+"' = 'yyyymm' THEN TRUNC( ADD_MONTHS( SYSDATE, - 6 ), 'MM' ) " +
  721. "ELSE TRUNC( SYSDATE - 6 ) END " +
  722. "AND ( ( '"+repair+"' = 'true' AND pd.GOODSLEVELID = 16 ) " +
  723. "OR ( '"+repair+"' <> 'true' AND pd.GOODSLEVELID IN ( 6, 7 ) AND pmd.DefectDeductionNum = 1" +
  724. "AND pmd.DEFECTUSERCODE IN ( 'SSY001', 'SSY002', 'SSY004', 'SSY005' ) ) ) " +
  725. "GROUP BY to_char( pmd.CREATETIME, '"+type+"' ) " +
  726. "ORDER BY to_char( pmd.CREATETIME, '"+type+"' ) DESC";
  727. //直接获取不分页数据
  728. DataTable dt2 = conn.ExecuteDatatable(sqlStr2);
  729. DataTable restultDay = new DataTable();
  730. restultDay.Columns.Add("出窑数");
  731. restultDay.Columns.Add("施釉合格率");
  732. restultDay.Columns.Add("日期");
  733. DateTime dateTime = DateTime.Now;
  734. //创建施釉缺陷所需数据
  735. for (int i = 6; i >= 0; i--)
  736. {
  737. string day=dateTime.AddDays(-i).ToString("yyyyMMdd");
  738. string month = dateTime.AddMonths(-i).ToString("yyyyMM");
  739. //出窑数
  740. var kilnexits = dt1.AsEnumerable().
  741. Where(ex => ex.Field<string>("CREATETIME") == (type == "yyyymmdd" ? day : month)).
  742. Select(ex => ex.Field<decimal>("出窑数")).FirstOrDefault();
  743. //成检不合格数
  744. var unqualified = dt2.AsEnumerable().
  745. Where(ex => ex.Field<string>("CREATETIME") == (type == "yyyymmdd" ? day : month)).
  746. Select(ex => ex.Field<decimal>("成检不合格数")).FirstOrDefault();
  747. DataRow dr = restultDay.NewRow();
  748. dr["出窑数"] = kilnexits;
  749. dr["施釉合格率"] = ((kilnexits - unqualified) / kilnexits).ToString("p2");
  750. dr["日期"] = type == "yyyymmdd" ? dateTime.ToString("MM") + "." + dateTime.AddDays(-i).ToString("dd") :
  751. dateTime.ToString("yy") + "." + dateTime.AddMonths(-i).ToString("MM");
  752. restultDay.Rows.Add(dr);
  753. }
  754. string jsonStr = new JsonResult(restultDay).ToJson();
  755. context.Response.Write(jsonStr);
  756. }
  757. }
  758. using (IDataAccess conn = DataAccess.Create())
  759. {
  760. /**摘取自zx方法**/
  761. //施釉每日半成品损坯率
  762. if (context.Request["m"].ToString() == "DailypassrateSemifinished")
  763. {
  764. //出窑数
  765. string sqlStr1 = @" SELECT DISTINCT
  766. CASE
  767. WHEN
  768. COUNT( TPPD.BARCODE ) IS NULL THEN
  769. 0 ELSE COUNT( TPPD.BARCODE )
  770. END 出窑数,
  771. to_char( TPPD.CREATETIME, 'yyyymmdd' ) AS CREATETIME
  772. FROM
  773. TP_PM_PRODUCTIONDATA TPPD
  774. LEFT JOIN TP_PM_GROUTINGDAILYDETAIL PGD ON PGD.BARCODE = TPPD.BARCODE
  775. LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPGL.GROUTINGLINEID = PGD.GROUTINGLINEID
  776. WHERE
  777. TPPD.PROCEDUREID IN (98)
  778. AND TPPD.CREATETIME >= trunc( SYSDATE - 6 )
  779. AND TPPD.VALUEFLAG = 1
  780. AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' )
  781. AND TPGL.TESTFLAG = 0
  782. AND TPPD.ISREFIRE = 0
  783. GROUP BY
  784. to_char( TPPD.CREATETIME, 'yyyymmdd' )
  785. ORDER BY
  786. to_char( TPPD.CREATETIME, 'yyyymmdd' ) DESC ";
  787. //直接获取不分页数据
  788. DataTable dt1 = conn.ExecuteDatatable(sqlStr1);
  789. //损坏数当日损毁且走过3#施釉并且损毁工序为30014,30020,30021(119, 115, 98)
  790. string sqlStr2 = @"SELECT DISTINCT
  791. COUNT(a.BARCODE)AS 损坯数 ,
  792. a.CREATETIME
  793. FROM
  794. (
  795. SELECT DISTINCT sp.BARCODE , to_char( sp.CREATETIME , 'yyyymmdd' ) AS CREATETIME
  796. FROM
  797. tp_pm_scrapproduct sp
  798. LEFT JOIN TP_PM_ResponProcedure rp ON rp.scrapproductid = sp.scrapproductid
  799. LEFT JOIN tp_pc_procedure p ON p.procedureid = sp.procedureid
  800. WHERE
  801. sp.valueflag = '1'
  802. AND sp.AuditStatus = '1'
  803. AND sp.accountid = 1
  804. AND sp.GoodsLevelTypeID IN ( 8, 9 ) -- 8损坯、9干补
  805. AND sp.CREATETIME>= trunc( SYSDATE - 6 )
  806. AND sp.IsReFire <> '6'
  807. AND sp.ScrapType = '0'
  808. AND rp.ProcedureID IN ( 119, 115, 98 )
  809. ) a
  810. INNER JOIN TP_PM_PRODUCTIONDATA TPPD ON TPPD.BARCODE = a.BARCODE
  811. WHERE TPPD.PROCEDUREID = 98
  812. GROUP BY a.CREATETIME
  813. ORDER BY a.CREATETIME DESC";
  814. DataTable dt2 = conn.ExecuteDatatable(sqlStr2);
  815. DataTable restultDay = new DataTable();
  816. restultDay.Columns.Add("出窑数");
  817. restultDay.Columns.Add("损坯率");
  818. restultDay.Columns.Add("日期");
  819. DateTime dateTime = DateTime.Now;
  820. //创建施釉半成品损坯所需数据
  821. for (int i = 6; i >= 0; i--)
  822. {
  823. string day = dateTime.AddDays(-i).ToString("yyyyMMdd");
  824. //出窑数
  825. var kilnexits = dt1.AsEnumerable().
  826. Where(ex => ex.Field<string>("CREATETIME") == day).
  827. Select(ex => ex.Field<decimal>("出窑数")).FirstOrDefault();
  828. //损坯数
  829. var unqualified = dt2.AsEnumerable().
  830. Where(ex => ex.Field<string>("CREATETIME") == day).
  831. Select(ex => ex.Field<decimal>("损坯数")).FirstOrDefault();
  832. DataRow dr = restultDay.NewRow();
  833. dr["出窑数"] = kilnexits;
  834. dr["损坯率"] = ((kilnexits - unqualified) / kilnexits).ToString("p2");
  835. dr["日期"] = dateTime.ToString("MM") + "." + dateTime.AddDays(-i).ToString("dd");
  836. restultDay.Rows.Add(dr);
  837. }
  838. string jsonStr = new JsonResult(restultDay).ToJson();
  839. context.Response.Write(jsonStr);
  840. }
  841. }
  842. using (IDataAccess conn = DataAccess.Create())
  843. {
  844. //产线信息
  845. if (context.Request["m"].ToString() == "MonthTable")
  846. {
  847. string sqlStr = @"SELECT
  848. TPPD.BARCODE 产品条码,
  849. TPGL.GOODSCODE 产品型号,
  850. SUBSTR(TMW.WORKSTATIONNAME,0,4) 施釉产线,
  851. TPGL.GLAZE1_WEIGHT 施釉前重,
  852. TPGL.GLAZE2_WEIGHT 施釉后重,
  853. TPGL.GLAZINGROOM 施釉房号,
  854. TPGZ.G_FLOW 施釉流量,
  855. TPGZ.G_SPRAY 施釉喷幅,
  856. TO_CHAR(TPGZ.G_TEMP, '990.00' ) 釉浆温度,
  857. TPGZ.G_PRESSURE 施釉压力
  858. FROM
  859. TP_PM_PRODUCTIONDATA TPPD
  860. LEFT JOIN TP_PM_GROUTINGDAILYDETAIL TPGL ON TPPD.BARCODE = TPGL.BARCODE
  861. LEFT JOIN TP_PM_GOODSGLAZING TPGZ ON TPPD.BARCODE = TPGZ.BARCODE
  862. LEFT JOIN TP_MST_WORKSTATIONUSER TMWU ON TPPD.USERCODE = TMWU.USERCODE
  863. LEFT JOIN TP_MST_WORKSTATION TMW ON TMWU.WORKSTATIONID = TMW.WORKSTATIONID
  864. WHERE
  865. TPPD.CREATETIME >= TRUNC( SYSDATE )
  866. AND TPPD.PROCEDUREID = 98
  867. ";
  868. //直接获取不分页数据
  869. DataTable dt = conn.ExecuteDatatable(sqlStr);
  870. int a = 1;
  871. string jsonStr = new JsonResult(dt).ToJson();
  872. context.Response.Write(jsonStr);
  873. }
  874. }
  875. using (IDataAccess conn = DataAccess.Create())
  876. {
  877. //二检产线信息
  878. if (context.Request["m"].ToString() == "MonthTabletwo")
  879. {
  880. string sqlStr = @" SELECT
  881. B.产品型号 AS 产品型号,
  882. B.成型产线 AS 成型产线,
  883. B.检验数量 AS 检验数量,
  884. B.合格品数 AS 合格品数,
  885. B.返工品数 AS 返工品数,
  886. B.返工合格数 AS 返工合格数,
  887. B.综合合格数 AS 综合合格数,
  888. TO_CHAR((B.合格品数/B.检验数量)* 100,'9,990.00') || '%' AS 一次合格率,
  889. CASE WHEN B.返工合格数 = 0 AND B.返工品数 > 0 THEN '0%'
  890. WHEN B.返工合格数 > 0 AND B.返工品数 = 0 THEN '100%'
  891. WHEN B.返工合格数 > 0 AND B.返工品数 > 0 THEN TO_CHAR((B.返工合格数/B.返工品数)* 100,'9,990.00') || '%' ELSE '0%' END AS 返工合格率,
  892. TO_CHAR((B.综合合格数/B.检验数量)* 100,'9,990.00') || '%' AS 综合合格率
  893. FROM(
  894. SELECT
  895. --decode( H.gid, 7, '总计', 3, '合计【' || H.产品型号 || '】', 0, H.产品型号, '--' ) 产品型号,
  896. decode( H.gid, 1, '小计', 0, H.产品型号, '总计' ) 产品型号,
  897. decode( H.gid, 1, '--', 0, H.成型产线, '--' ) 成型产线,
  898. decode( H.gid, 1, H.检验数量, 0, H.检验数量, H.检验数量 ) 检验数量,
  899. decode( H.gid, 1, H.合格品数, 0, H.合格品数, H.合格品数 ) 合格品数,
  900. decode( H.gid, 1, H.返工品数, 0, H.返工品数, H.返工品数 ) 返工品数,
  901. decode( H.gid, 1, H.返工合格数, 0, H.返工合格数, H.返工合格数 ) 返工合格数,
  902. decode( H.gid, 1, H.综合合格数, 0, H.综合合格数, H.综合合格数 ) 综合合格数
  903. FROM
  904. (
  905. SELECT
  906. grouping_id(Z.产品型号, Z.成型产线) gid,
  907. Z.产品型号,
  908. Z.成型产线,
  909. SUM(Z.检验数量) 检验数量,
  910. SUM(Z.合格品数) 合格品数,
  911. SUM(Z.返工品数) 返工品数,
  912. SUM(Z.返工合格数) 返工合格数,
  913. SUM(Z.综合合格数) 综合合格数
  914. FROM
  915. (
  916. SELECT
  917. B.GOODSCODE AS 产品型号,
  918. B.GROUTINGLINECODE AS 成型产线,
  919. B.检验 AS 检验数量,
  920. B.检验 - B.返工 - B.一次不合格 AS 合格品数,
  921. B.返工 AS 返工品数,
  922. B.返工 - B.二次不合格 AS 返工合格数,
  923. B.检验 - B.一次不合格 - B.二次不合格 AS 综合合格数
  924. FROM
  925. (
  926. SELECT
  927. TPPD.GOODSCODE,
  928. TPGL.GROUTINGLINECODE,
  929. COUNT( TPPD.BARCODE ) 检验,
  930. CASE
  931. WHEN BJFG.count IS NULL THEN
  932. 0 ELSE BJFG.count
  933. END 返工,
  934. CASE
  935. WHEN BJFP.count IS NULL THEN
  936. 0 ELSE BJFP.count
  937. END 一次不合格,
  938. CASE
  939. WHEN BJFGH.count IS NULL THEN
  940. 0 ELSE BJFGH.count
  941. END 返工合格,
  942. CASE
  943. WHEN BJFFP.count IS NULL THEN
  944. 0 ELSE BJFFP.count
  945. END 二次不合格
  946. FROM
  947. TP_PM_PRODUCTIONDATA TPPD
  948. LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPPD.GROUTINGLINEID = TPGL.GROUTINGLINEID
  949. LEFT JOIN (--半检一检返工数
  950. SELECT
  951. T.GOODSCODE,
  952. T.GROUTINGLINECODE,
  953. COUNT( T.BARCODE ) count
  954. FROM
  955. (
  956. SELECT DISTINCT
  957. TPPD.GOODSCODE,
  958. TPGL.GROUTINGLINECODE,
  959. TPS.BARCODE
  960. FROM
  961. TP_PM_SEMICHECK TPS
  962. LEFT JOIN TP_PM_PRODUCTIONDATA TPPD ON TPS.BARCODE = TPPD.BARCODE
  963. LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPPD.GROUTINGLINEID = TPGL.GROUTINGLINEID
  964. WHERE
  965. TPS.SEMICHECKTYPE = 1
  966. AND TPS.PROCEDUREID IN ( 117 )
  967. AND TPS.CREATETIME >= TRUNC( SYSDATE )
  968. AND TPGL.TESTFLAG = 0
  969. AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' )
  970. AND TPS.VALUEFLAG = 1
  971. ) T
  972. GROUP BY
  973. T.GOODSCODE,
  974. T.GROUTINGLINECODE
  975. ) BJFG ON BJFG.GOODSCODE = TPPD.GOODSCODE
  976. AND BJFG.GROUTINGLINECODE = TPGL.GROUTINGLINECODE
  977. LEFT JOIN (--半检二检返工合格数
  978. SELECT
  979. T.GOODSCODE,
  980. T.GROUTINGLINECODE,
  981. COUNT( T.BARCODE ) count
  982. FROM
  983. (
  984. SELECT DISTINCT
  985. TPPD.GOODSCODE,
  986. TPGL.GROUTINGLINECODE,
  987. TPS.BARCODE
  988. FROM
  989. TP_PM_SEMICHECK TPS
  990. LEFT JOIN TP_PM_PRODUCTIONDATA TPPD ON TPS.BARCODE = TPPD.BARCODE
  991. LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPPD.GROUTINGLINEID = TPGL.GROUTINGLINEID
  992. WHERE
  993. TPS.RESEMICHECKTYPE = 1
  994. AND TPS.PROCEDUREID IN ( 117 )
  995. AND TPS.CREATETIME >= TRUNC( SYSDATE )
  996. AND TPGL.TESTFLAG = 0
  997. AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' )
  998. ) T
  999. GROUP BY
  1000. T.GOODSCODE,
  1001. T.GROUTINGLINECODE
  1002. ORDER BY
  1003. T.GOODSCODE
  1004. ) BJFGH ON BJFGH.GOODSCODE = TPPD.GOODSCODE
  1005. AND BJFGH.GROUTINGLINECODE = TPGL.GROUTINGLINECODE
  1006. LEFT JOIN (--半检一次不合格
  1007. SELECT
  1008. T.GOODSCODE,
  1009. T.GROUTINGLINECODE,
  1010. COUNT( T.BARCODE ) count
  1011. FROM
  1012. (
  1013. SELECT DISTINCT
  1014. TPPD.GOODSCODE,
  1015. TPGL.GROUTINGLINECODE,
  1016. TPS.BARCODE
  1017. FROM
  1018. TP_PM_SEMICHECK TPS
  1019. FULL JOIN TP_PM_PRODUCTIONDATA TPPD ON TPS.BARCODE = TPPD.BARCODE
  1020. LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPPD.GROUTINGLINEID = TPGL.GROUTINGLINEID
  1021. WHERE
  1022. TPS.SEMICHECKTYPE =2
  1023. AND TPS.PROCEDUREID IN ( 117 )
  1024. AND TPS.CREATETIME >= TRUNC( SYSDATE )
  1025. AND TPGL.TESTFLAG = 0
  1026. AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' )
  1027. AND TPS.VALUEFLAG = 1
  1028. ) T
  1029. GROUP BY
  1030. T.GOODSCODE,
  1031. T.GROUTINGLINECODE
  1032. ) BJFP ON BJFP.GOODSCODE = TPPD.GOODSCODE
  1033. AND BJFP.GROUTINGLINECODE = TPGL.GROUTINGLINECODE
  1034. LEFT JOIN (--半检二次不合格
  1035. SELECT
  1036. T.GOODSCODE,
  1037. T.GROUTINGLINECODE,
  1038. COUNT( T.BARCODE ) count
  1039. FROM
  1040. (
  1041. SELECT DISTINCT
  1042. TPPD.GOODSCODE,
  1043. TPGL.GROUTINGLINECODE,
  1044. TPS.BARCODE
  1045. FROM
  1046. TP_PM_SEMICHECK TPS
  1047. FULL JOIN TP_PM_PRODUCTIONDATA TPPD ON TPS.BARCODE = TPPD.BARCODE
  1048. LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPPD.GROUTINGLINEID = TPGL.GROUTINGLINEID
  1049. WHERE--TPS.GOODSLEVELID IN (13)
  1050. TPS.RESEMICHECKTYPE = 2
  1051. AND TPS.PROCEDUREID IN ( 117 )
  1052. AND TPS.CREATETIME >= TRUNC( SYSDATE )
  1053. AND TPGL.TESTFLAG = 0
  1054. AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' )
  1055. AND TPS.VALUEFLAG = 1
  1056. ) T
  1057. GROUP BY
  1058. T.GOODSCODE,
  1059. T.GROUTINGLINECODE
  1060. ) BJFFP ON BJFP.GOODSCODE = TPPD.GOODSCODE
  1061. AND BJFFP.GROUTINGLINECODE = TPGL.GROUTINGLINECODE
  1062. WHERE
  1063. TPPD.CREATETIME >= TRUNC( SYSDATE )
  1064. AND TPPD.PROCEDUREID IN ( 117 )
  1065. AND TPGL.TESTFLAG = 0
  1066. AND TPPD.VALUEFLAG = 1
  1067. AND ( SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' )
  1068. GROUP BY
  1069. TPPD.GOODSCODE,
  1070. TPGL.GROUTINGLINECODE,
  1071. BJFG.count,
  1072. BJFP.count,
  1073. BJFGH.count,
  1074. BJFFP.count
  1075. ORDER BY
  1076. TPPD.GOODSCODE
  1077. ) B
  1078. ) Z
  1079. GROUP BY GROUPING SETS((Z.产品型号),(Z.产品型号,Z.成型产线, Z.检验数量,Z.合格品数, Z.返工品数, Z.返工合格数,Z.综合合格数),())
  1080. )H) B
  1081. ";
  1082. //直接获取不分页数据
  1083. DataTable dt = conn.ExecuteDatatable(sqlStr);
  1084. string jsonStr = new JsonResult(dt).ToJson();
  1085. context.Response.Write(jsonStr);
  1086. }
  1087. }
  1088. }
  1089. public bool IsReusable
  1090. {
  1091. get
  1092. {
  1093. return false;
  1094. }
  1095. }
  1096. }