demo.ashx 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. <%@ WebHandler Language="C#" Class="rpt" %>
  2. using System;
  3. using System.Web;
  4. using System.Web.SessionState;
  5. using System.Data;
  6. using System.Text;
  7. using System.Collections;
  8. using System.Collections.Generic;
  9. using Newtonsoft.Json;
  10. using Newtonsoft.Json.Linq;
  11. using Curtain.DataAccess;
  12. using DK.XuWei.WebMes;
  13. public class rpt : IHttpHandler, IReadOnlySessionState
  14. {
  15. public void ProcessRequest(HttpContext context)
  16. {
  17. context.Response.ContentType = "text/plain";
  18. using(IDataAccess conn = DataAccess.Create())
  19. {
  20. //成型产量 日
  21. if (context.Request["m"].ToString() == "procedure")
  22. {
  23. int pid1 = 0;
  24. int pid2 = 0;
  25. String name = "";
  26. String limit = "";
  27. if (context.Request["procedure"].ToString() == "成型") {
  28. //读取报表数据
  29. string sqlStr = @"
  30. SELECT
  31. 工序,日实际生产数,计划数,
  32. ROUND( 日实际生产数/ DECODE( 计划数, 0, 1,计划数 ), 2 ) * 100 AS 完成率,
  33. ( SELECT CXLIMIT FROM TP_RPT_PROCEDURERATEWARN ) AS 预警
  34. FROM
  35. (
  36. SELECT
  37. T.工序,
  38. T.日实际生产数,
  39. (
  40. SELECT
  41. ROUND( PLANNUM / 30 )
  42. FROM
  43. TP_MST_DASHBOARD_PLAN DP
  44. INNER JOIN TP_MST_DASHBOARD D ON DP.DASHBOARDID = D.DASHBOARDID
  45. WHERE
  46. DP.PLANTYPE = 3
  47. AND DP.PLANYEAR = TO_NUMBER( TO_CHAR( SYSDATE, 'YYYY' ) )
  48. AND DP.PLANMONTH = TO_NUMBER( TO_CHAR( SYSDATE, 'MM' ) )
  49. AND D.DASHBOARDNAME = '成型'
  50. ) AS 计划数
  51. FROM
  52. (
  53. SELECT
  54. '成型' AS 工序,
  55. COUNT( DISTINCT GDD.BARCODE ) AS 日实际生产数
  56. FROM
  57. TP_PM_GROUTINGDAILYDETAIL GDD
  58. INNER JOIN TP_PC_GROUTINGLINE GL
  59. ON GDD.GROUTINGLINEID = GL.GROUTINGLINEID
  60. WHERE
  61. GDD.VALUEFLAG = 1
  62. AND GDD.GROUTINGFLAG = 1
  63. AND GDD.SCRAPFLAG = 0
  64. AND GL.WORKSHOP = 3
  65. -- AND INSTR( GROUTINGLINECODE, 'C' ) = 1
  66. AND GDD.CREATETIME >= TRUNC( SYSDATE )
  67. AND GDD.CREATETIME < TRUNC( SYSDATE ) + 1
  68. -- AND GDD.GOODSCODE IN ( 'H0962L-A', 'H0967L-W', 'H0966M-W', 'H0967M-W', 'H0966L-W', 'H0962M-A' )
  69. ) T
  70. )
  71. ";
  72. DataTable dt0 = conn.ExecuteDatatable(sqlStr);
  73. string jsonStr = new JsonResult(dt0).ToJson();
  74. context.Response.Write(jsonStr);
  75. }
  76. else
  77. {
  78. if (context.Request["procedure"].ToString() == "一检")
  79. {
  80. pid1 = 88; pid2 = 92;
  81. //读取报表数据
  82. string sqlStr = @"
  83. SELECT
  84. 工序,日实际生产数,计划数,
  85. ROUND( 日实际生产数/ DECODE( 计划数, 0, 1,计划数 ), 2 ) * 100 AS 完成率,
  86. ( SELECT YJLIMIT FROM TP_RPT_PROCEDURERATEWARN ) AS 预警
  87. FROM
  88. (
  89. SELECT
  90. T.工序,
  91. T.日实际生产数,
  92. (
  93. SELECT
  94. ROUND( PLANNUM / 30 )
  95. FROM
  96. TP_MST_DASHBOARD_PLAN DP
  97. INNER JOIN TP_MST_DASHBOARD D ON DP.DASHBOARDID = D.DASHBOARDID
  98. WHERE
  99. DP.PLANTYPE = 3
  100. AND DP.PLANYEAR = TO_NUMBER( TO_CHAR( SYSDATE, 'YYYY' ) )
  101. AND DP.PLANMONTH = TO_NUMBER( TO_CHAR( SYSDATE, 'MM' ) )
  102. AND D.DASHBOARDNAME = '半检一检'
  103. ) AS 计划数
  104. FROM
  105. (
  106. SELECT
  107. '一检' AS 工序,
  108. COUNT( DISTINCT PD.BARCODE ) AS 日实际生产数
  109. FROM
  110. TP_PM_PRODUCTIONDATA PD
  111. INNER JOIN TP_PC_GROUTINGLINE GL ON PD.GROUTINGLINEID = GL.GROUTINGLINEID
  112. WHERE
  113. PD.VALUEFLAG = 1
  114. AND ( PD.PROCEDUREID = @PID1@ OR PD.PROCEDUREID = @PID2@)
  115. AND PD.CREATETIME >= TRUNC( SYSDATE )
  116. AND PD.CREATETIME < TRUNC( SYSDATE ) + 1
  117. AND GL.WORKSHOP = 3
  118. -- AND
  119. -- GOODSCODE IN ('H0962L-A','H0967L-W','H0966M-W','H0967M-W','H0966L-W','H0962M-A')
  120. ) T
  121. )
  122. ";
  123. //获取查询条件
  124. List<CDAParameter> sqlPara = new List<CDAParameter>();
  125. sqlPara.Add(new CDAParameter("PID1", pid1));
  126. sqlPara.Add(new CDAParameter("PID2", pid2));
  127. //直接获取不分页数据
  128. DataTable dt = conn.ExecuteDatatable(sqlStr, sqlPara.ToArray());
  129. string jsonStr = new JsonResult(dt).ToJson();
  130. context.Response.Write(jsonStr);
  131. }else if (context.Request["procedure"].ToString() == "成检"){
  132. pid1 = 104;
  133. //读取报表数据
  134. string sqlStr = @"
  135. SELECT
  136. 工序,日实际生产数,计划数,
  137. ROUND( 日实际生产数/ DECODE( 计划数, 0, 1,计划数 ), 2 ) * 100 AS 完成率,
  138. (SELECT CJLIMIT FROM TP_RPT_PROCEDURERATEWARN) AS 预警
  139. FROM
  140. (
  141. SELECT
  142. T.工序,T.日实际生产数,
  143. (
  144. SELECT
  145. ROUND( PLANNUM / 30 )
  146. FROM
  147. TP_MST_DASHBOARD_PLAN DP
  148. INNER JOIN
  149. TP_MST_DASHBOARD D
  150. ON DP.DASHBOARDID = D.DASHBOARDID
  151. WHERE
  152. DP.PLANTYPE = 3
  153. AND
  154. DP.PLANYEAR = TO_NUMBER(TO_CHAR(sysdate, 'YYYY'))
  155. AND
  156. DP.PLANMONTH = TO_NUMBER(TO_CHAR(sysdate, 'MM'))
  157. AND
  158. D.DASHBOARDNAME = '分级一检'
  159. ) AS 计划数
  160. FROM
  161. (
  162. SELECT
  163. '成检' AS 工序,
  164. COUNT(DISTINCT PD.BARCODE) AS 日实际生产数
  165. FROM
  166. TP_PM_PRODUCTIONDATA PD
  167. WHERE
  168. PD.VALUEFLAG = 1
  169. AND
  170. PD.PROCEDUREID = @PID1@
  171. AND
  172. PD.CREATETIME >= TRUNC( SYSDATE )
  173. AND
  174. PD.CREATETIME < TRUNC(SYSDATE)+1
  175. )T
  176. )
  177. ";
  178. //获取查询条件
  179. List<CDAParameter> sqlPara = new List<CDAParameter>();
  180. sqlPara.Add(new CDAParameter("PID1", pid1));
  181. //直接获取不分页数据
  182. DataTable dt = conn.ExecuteDatatable(sqlStr, sqlPara.ToArray());
  183. string jsonStr = new JsonResult(dt).ToJson();
  184. context.Response.Write(jsonStr);
  185. }else if (context.Request["procedure"].ToString() == "烧成"){
  186. pid1 = 102;
  187. //读取报表数据
  188. string sqlStr = @"
  189. SELECT
  190. 工序,日实际生产数,计划数,
  191. ROUND( 日实际生产数/ DECODE( 计划数, 0, 1,计划数 ), 2 ) * 100 AS 完成率,
  192. (SELECT SCLIMIT FROM TP_RPT_PROCEDURERATEWARN) AS 预警
  193. FROM
  194. (
  195. SELECT
  196. T.工序,T.日实际生产数,
  197. (
  198. SELECT
  199. ROUND( PLANNUM / 30 )
  200. FROM
  201. TP_MST_DASHBOARD_PLAN DP
  202. INNER JOIN
  203. TP_MST_DASHBOARD D
  204. ON DP.DASHBOARDID = D.DASHBOARDID
  205. WHERE
  206. DP.PLANTYPE = 3
  207. AND
  208. DP.PLANYEAR = TO_NUMBER(TO_CHAR(sysdate, 'YYYY'))
  209. AND
  210. DP.PLANMONTH = TO_NUMBER(TO_CHAR(sysdate, 'MM'))
  211. AND
  212. D.DASHBOARDNAME = '烧成'
  213. ) AS 计划数
  214. FROM
  215. (
  216. SELECT
  217. '烧成' AS 工序,
  218. COUNT(DISTINCT PD.BARCODE) AS 日实际生产数
  219. FROM
  220. TP_PM_PRODUCTIONDATA PD
  221. WHERE
  222. PD.VALUEFLAG = 1
  223. AND
  224. PD.PROCEDUREID = @PID1@
  225. AND
  226. PD.CREATETIME >= TRUNC( SYSDATE )
  227. AND
  228. PD.CREATETIME < TRUNC(SYSDATE)+1
  229. )T
  230. )
  231. ";
  232. //获取查询条件
  233. List<CDAParameter> sqlPara = new List<CDAParameter>();
  234. sqlPara.Add(new CDAParameter("PID1", pid1));
  235. //直接获取不分页数据
  236. DataTable dt = conn.ExecuteDatatable(sqlStr, sqlPara.ToArray());
  237. string jsonStr = new JsonResult(dt).ToJson();
  238. context.Response.Write(jsonStr);
  239. }
  240. else {
  241. if (context.Request["procedure"].ToString() == "改洗") { pid1 = 94; name = "改洗"; limit = "SELECT GXLIMIT FROM TP_RPT_PROCEDURERATEWARN"; }
  242. else if (context.Request["procedure"].ToString() == "二检") { pid1 = 117; name = "半检二检"; limit = "SELECT EJLIMIT FROM TP_RPT_PROCEDURERATEWARN"; }
  243. else if (context.Request["procedure"].ToString() == "施釉") { pid1 = 98; name = "施釉"; limit = "SELECT SYLIMIT FROM TP_RPT_PROCEDURERATEWARN"; }
  244. //else if (context.Request["procedure"].ToString() == "烧成") { pid1 = 103; name = "烧成"; limit = "SELECT SCLIMIT FROM TP_RPT_PROCEDURERATEWARN"; }
  245. //else if (context.Request["procedure"].ToString() == "成检") { pid1 = 104; name = "成检"; limit = "SELECT BZLIMIT FROM TP_RPT_PROCEDURERATEWARN"; }
  246. string sqlStr = @"
  247. SELECT
  248. 工序,日实际生产数,计划数,
  249. ROUND( 日实际生产数/ DECODE( 计划数, 0, 1,计划数 ), 2 ) * 100 AS 完成率,
  250. ( {LIMIT} ) AS 预警
  251. FROM
  252. (
  253. SELECT
  254. DECODE( T.工序, '半检二检', '二检', T.工序 ) AS 工序,
  255. T.日实际生产数,
  256. (
  257. SELECT
  258. ROUND( PLANNUM / 30 )
  259. FROM
  260. TP_MST_DASHBOARD_PLAN DP
  261. INNER JOIN TP_MST_DASHBOARD D ON DP.DASHBOARDID = D.DASHBOARDID
  262. WHERE
  263. DP.PLANTYPE = 3
  264. AND DP.PLANYEAR = TO_NUMBER( TO_CHAR( SYSDATE, 'YYYY' ) )
  265. AND DP.PLANMONTH = TO_NUMBER( TO_CHAR( SYSDATE, 'MM' ) )
  266. AND D.DASHBOARDNAME = @NAME@
  267. ) AS 计划数
  268. FROM
  269. (
  270. SELECT
  271. @NAME@ AS 工序,
  272. COUNT( DISTINCT BARCODE ) AS 日实际生产数
  273. FROM
  274. TP_PM_PRODUCTIONDATA PD
  275. INNER JOIN
  276. TP_PC_GROUTINGLINE GL
  277. ON PD.GROUTINGLINEID = GL.GROUTINGLINEID
  278. WHERE
  279. PD.VALUEFLAG = 1
  280. AND PD.PROCEDUREID = @PID1@
  281. AND PD.CREATETIME >= TRUNC( SYSDATE )
  282. AND PD.CREATETIME < TRUNC( SYSDATE ) + 1
  283. AND GL.WORKSHOP = 3
  284. -- AND
  285. -- GOODSCODE IN ('H0962L-A','H0967L-W','H0966M-W','H0967M-W','H0966L-W','H0962M-A')
  286. ) T
  287. )
  288. ".Replace("{LIMIT}",limit);
  289. //获取查询条件
  290. List<CDAParameter> sqlPara = new List<CDAParameter>();
  291. sqlPara.Add(new CDAParameter("PID1", pid1));
  292. sqlPara.Add(new CDAParameter("NAME", name));
  293. sqlPara.Add(new CDAParameter("LIMIT", limit));
  294. //直接获取不分页数据
  295. DataTable dt = conn.ExecuteDatatable(sqlStr, sqlPara.ToArray());
  296. string jsonStr = new JsonResult(dt).ToJson();
  297. context.Response.Write(jsonStr);
  298. }
  299. }
  300. }
  301. else if (context.Request["m"].ToString() == "finish")
  302. {
  303. string sqlStr = @"
  304. SELECT
  305. t.型号,
  306. t.达成数,
  307. ROUND(NVL(plan.PLANFINISH,0)/30,0) AS 本日计划数,
  308. TO_CHAR(
  309. ROUND(
  310. t.达成数 / DECODE( NVL( plan.PLANFINISH, 1 ), 0, 1, NVL( plan.PLANFINISH, 1 ) ),
  311. 4
  312. ) * 30 * 100
  313. ) || '%' AS 目标达成率
  314. FROM
  315. (
  316. SELECT
  317. GOODSCODE AS 型号,
  318. COUNT( BARCODE ) AS 达成数
  319. FROM
  320. TP_PM_FINISHEDPRODUCT
  321. WHERE
  322. VALUEFLAG = 1
  323. AND GOODSCODE IN ( 'H0962L-A', 'H0967L-W', 'H0966M-W', 'H0967M-W', 'H0966L-W', 'H0962M-A' )
  324. AND FHTIME >= TRUNC(SYSDATE)
  325. AND FHTIME < SYSDATE + 1
  326. GROUP BY
  327. GOODSCODE
  328. ORDER BY
  329. GOODSCODE
  330. ) t
  331. LEFT JOIN TP_MST_HGWS_GOODS_PLAN plan ON t.型号 = plan.GOODSCODE
  332. ";
  333. //获取查询条件
  334. //直接获取不分页数据
  335. DataTable dt = conn.ExecuteDatatable(sqlStr);
  336. string jsonStr = new JsonResult(dt).ToJson();
  337. context.Response.Write(jsonStr);
  338. }
  339. }
  340. }
  341. public decimal toNumber(object o)
  342. {
  343. if (o != DBNull.Value)
  344. return Convert.ToDecimal(o);
  345. else
  346. return 0;
  347. }
  348. public bool IsReusable
  349. {
  350. get
  351. {
  352. return false;
  353. }
  354. }
  355. }