rpt.ashx 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  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() == "master")
  22. {
  23. //获取查询条件
  24. DateTime dateBegin = Convert.ToDateTime(context.Request["datebeginMaster"]);
  25. DateTime dateEnd = Convert.ToDateTime(context.Request["dateendMaster"]).AddDays(1);
  26. List<CDAParameter> sqlPara = new List<CDAParameter>();
  27. sqlPara.Add(new CDAParameter("accountid", context.Session["accountId"] is object ? Convert.ToInt32(context.Session["accountId"]) : 1));
  28. sqlPara.Add(new CDAParameter("datebegin", dateBegin, DataType.DateTime));
  29. sqlPara.Add(new CDAParameter("dateend", dateEnd, DataType.DateTime));
  30. //主表
  31. if (context.Request["n"].ToString() == "0")
  32. {
  33. //读取报表数据
  34. string sqlStr = @"
  35. SELECT
  36. g.goodscode AS 产品编码,
  37. tt.d_num AS 交坯数,
  38. tt.x_num AS 干补数,
  39. tt.b_num AS 半检不合格数,
  40. tt.f_num AS 复检不合格数,
  41. tt.s_num AS 损坯数,
  42. CASE
  43. WHEN ( tt.b_num + tt.f_num + tt.s_num - tt.x_num ) < 0 THEN
  44. '100%' ELSE to_char(decode(tt.d_num,0,to_number( 0 ),round( ( tt.b_num + tt.f_num + tt.s_num - tt.x_num ) / tt.d_num, 4 ) * 100.00 ),'fm99990.09' ) || '%'
  45. END 报废率,
  46. CASE
  47. WHEN 1- ( tt.b_num + tt.f_num + tt.s_num - tt.x_num ) > 0 THEN
  48. '100%' ELSE to_char(decode(tt.d_num,0,to_number( 0 ),round( 1- ( tt.b_num + tt.f_num + tt.s_num - tt.x_num ) / tt.d_num, 4 ) * 100.00 ),'fm99990.09' ) || '%'
  49. END 合格率
  50. FROM
  51. (
  52. SELECT
  53. t.goodsid,
  54. nvl( sum( decode( t.numtype, 'A', t.id_num, 0 ) ), 0 ) d_num,-- 交坯
  55. nvl( sum( decode( t.numtype, 'B', t.id_num, 0 ) ), 0 ) x_num,-- 干补数
  56. nvl( sum( decode( t.numtype, '2', t.id_num, 0 ) ), 0 ) b_num,-- 半检不合格数
  57. nvl( sum( decode( t.numtype, '3', t.id_num, 0 ) ), 0 ) f_num,-- 复检不合格数
  58. nvl( sum( decode( t.numtype, '0', t.id_num, 0 ) ), 0 ) s_num -- 损坯数
  59. FROM
  60. (
  61. SELECT
  62. gdd.goodsid,
  63. 'A' numtype,
  64. count( gdd.groutingdailydetailid ) id_num
  65. FROM
  66. tp_pm_groutingdailydetail gdd
  67. LEFT JOIN TP_PC_GROUTINGLINE gl on gl.GROUTINGLINEID=gdd.GROUTINGLINEID
  68. WHERE
  69. gdd.groutingflag = '1'
  70. AND gdd.valueflag = '1'
  71. AND gdd.accountid = 1
  72. AND gdd.deliverflag = '1'
  73. AND gdd.delivertime >= @datebegin@
  74. AND gdd.delivertime < @dateend@
  75. AND (@BUILDINGNO@ IS NULL OR instr(gl.BUILDINGNO , @BUILDINGNO@) > 0)
  76. AND (@HIGHPRESSUREFLAG@ IS NULL OR instr(gl.HIGHPRESSUREFLAG , @HIGHPRESSUREFLAG@) > 0)
  77. AND (@LOGOID@ IS NULL OR instr(gdd.logoid , @LOGOID@) > 0)
  78. GROUP BY
  79. gdd.goodsid
  80. UNION ALL-- 干补数
  81. SELECT
  82. p.goodsid,
  83. 'B' numtype,
  84. count( p.productiondataid ) id_num
  85. FROM
  86. TP_PM_PRODUCTIONDATA p
  87. LEFT JOIN TP_PC_GROUTINGLINE gl on gl.GROUTINGLINEID=p.GROUTINGLINEID
  88. left join tp_pm_groutingdailydetail gdd on gdd.groutingdailydetailid = p.groutingdailydetailid
  89. WHERE
  90. p.VALUEFLAG = 1
  91. AND p.accountid = 1
  92. AND p.PROCEDUREID = 18
  93. AND p.createtime >= @datebegin@
  94. AND p.createtime < @dateend@
  95. AND (@BUILDINGNO@ IS NULL OR instr(gl.BUILDINGNO , @BUILDINGNO@) > 0)
  96. AND (@HIGHPRESSUREFLAG@ IS NULL OR instr(gl.HIGHPRESSUREFLAG , @HIGHPRESSUREFLAG@) > 0)
  97. AND (@LOGOID@ IS NULL OR instr(gdd.logoid , @LOGOID@) > 0)
  98. GROUP BY
  99. p.goodsid
  100. UNION ALL-- 半检不合格数 复检不合格数 损坯数
  101. SELECT
  102. sp.goodsid,
  103. sp.SCRAPTYPE numtype,
  104. count( sp.scrapproductid ) id_num
  105. FROM
  106. tp_pm_scrapproduct sp
  107. LEFT JOIN TP_PC_GROUTINGLINE gl on gl.GROUTINGLINEID=sp.GROUTINGLINEID
  108. left join tp_pm_groutingdailydetail gdd on gdd.groutingdailydetailid = sp.groutingdailydetailid
  109. WHERE
  110. sp.valueflag = '1'
  111. AND sp.accountid = 1
  112. AND sp.auditstatus = 1
  113. AND sp.KILNID IS NULL
  114. AND sp.SCRAPTYPE <> '1'
  115. AND sp.AUDITDATE >= @datebegin@
  116. AND sp.AUDITDATE < @dateend@
  117. AND (@BUILDINGNO@ IS NULL OR instr(gl.BUILDINGNO , @BUILDINGNO@) > 0)
  118. AND (@HIGHPRESSUREFLAG@ IS NULL OR instr(gl.HIGHPRESSUREFLAG , @HIGHPRESSUREFLAG@) > 0)
  119. AND (@LOGOID@ IS NULL OR instr(gdd.logoid , @LOGOID@) > 0)
  120. GROUP BY
  121. sp.goodsid,
  122. sp.SCRAPTYPE
  123. ) t
  124. GROUP BY
  125. t.goodsid
  126. ) tt
  127. INNER JOIN tp_mst_goods g ON tt.goodsid = g.goodsid
  128. LEFT JOIN TP_MST_GOODSTYPE GT ON g.GOODSTYPEID=GT.GOODSTYPEID
  129. WHERE (@goodstypecode@ IS NULL OR instr(gt.goodstypecode,@goodstypecode@) = 1) ";
  130. if (!string.IsNullOrWhiteSpace(context.Request["goodscode"] + ""))
  131. {
  132. sqlStr += " AND instr(g.goodscode, @goodscode@) > 0 \n";
  133. sqlPara.Add(new CDAParameter("goodscode", context.Request["goodscode"]));
  134. }
  135. sqlStr += " order by g.goodscode";
  136. sqlPara.Add(new CDAParameter("BUILDINGNO", context.Request["workshopcodeMaster"].ToString()));
  137. sqlPara.Add(new CDAParameter("LOGOID", context.Request["LOGONAME"].ToString()));
  138. sqlPara.Add(new CDAParameter("HIGHPRESSUREFLAG", context.Request["HIGHPRESSUREFLAG"]));
  139. sqlPara.Add(new CDAParameter("goodstypecode", context.Request["goodstypecode"].ToString()));
  140. //直接获取不分页数据
  141. JsonResult jsonresult = Easyui.ExecuteJsonResult(conn, sqlStr, sqlPara);
  142. context.Response.Write(jsonresult.ToJson());
  143. }
  144. //子表
  145. if (context.Request["n"].ToString() == "1")
  146. {
  147. string sqlStr = "WITH ppp_details AS ( " +
  148. "select TO_CHAR(g.goodscode) 产品编码\n" +
  149. " ,ppp.b_out_num 本烧出窑数\n" +
  150. " ,(ppp.b_out_num - ppp.b_bad_num) 本烧合格数\n" +
  151. " ,(ppp.c_out_num - ppp.c_bad_num) 重烧合格数\n" +
  152. " ,decode(ppp.b_out_num,0,to_number( 0 ),round( ( ppp.b_out_num - ppp.b_bad_num + ppp.c_out_num - ppp.c_bad_num ) / ppp.b_out_num, 4 ) ) *100 ||'%' 综合合格率\n" +
  153. "from (\n" +
  154. " SELECT pp.goodsid ,\n" +
  155. " nvl(sum(decode(pp.OUTflag, 1, b_out_num, 0)), 0) b_out_num,\n" +
  156. " nvl(sum(decode(pp.OUTflag, 0, b_bad_num, 0)), 0) b_bad_num,\n" +
  157. " nvl(sum(decode(pp.OUTflag, 1, c_out_num, 0)), 0) c_out_num,\n" +
  158. " nvl(sum(decode(pp.OUTflag, 0, c_bad_num, 0)), 0) c_bad_num\n" +
  159. " FROM (\n" +
  160. " select p.goodsid\n" +
  161. " ,1 AS OUTflag\n" +
  162. " ,nvl(sum(case when ((p.procedureid = 11 AND p.valueflag = '1') OR (p.procedureid =104 AND p.isrefire = '0' AND p.checkflag = '1')) then 1 else 0 end), 0) b_out_num -- 本烧出窑数\n" +
  163. " ,0 b_bad_num -- 本烧不合格数\n" +
  164. " ,nvl(sum(case when ((p.procedureid = 58 AND p.valueflag = '1') OR (p.procedureid =104 AND p.isrefire = '6' AND p.checkflag = '1')) then 1 else 0 end), 0) c_out_num -- 重烧出窑数\n" +
  165. " ,0 c_bad_num -- 重烧不合格数\n" +
  166. " from tp_pm_productiondata p\n" +
  167. " INNER JOIN tp_mst_goods g ON p.goodsid = g.goodsid\n" +
  168. " LEFT JOIN TP_MST_GOODSTYPE GT ON g.GOODSTYPEID=GT.GOODSTYPEID\n" +
  169. " LEFT JOIN TP_PC_GROUTINGLINE gl on gl.GROUTINGLINEID=p.GROUTINGLINEID\n" +
  170. " LEFT JOIN tp_pm_groutingdailydetail gdd on gdd.groutingdailydetailid = p.groutingdailydetailid\n" +
  171. " where p.accountid = @accountid@\n" +
  172. " and p.procedureid in (11, 58, 104)\n" +
  173. " and p.createtime >= @datebegin@\n" +
  174. " and p.createtime < @dateend@\n" +
  175. " AND (@BUILDINGNO@ IS NULL OR instr(gl.BUILDINGNO , @BUILDINGNO@) > 0) " +
  176. " AND (@LOGOID@ IS NULL OR instr(gdd.LOGOID , @LOGOID@) > 0) " +
  177. " AND (@HIGHPRESSUREFLAG@ IS NULL OR instr(gl.HIGHPRESSUREFLAG , @HIGHPRESSUREFLAG@) > 0)" +
  178. " AND (@groutinglineMaster@ IS NULL OR instr(gl.GROUTINGLINEID , @groutinglineMaster@) > 0)" +
  179. " AND (@goodstypecode@ IS NULL OR instr(gt.goodstypecode,@goodstypecode@) = 1)";
  180. // 产品编码条件修正 fenglinyong modify 2022-05-10
  181. if (!string.IsNullOrWhiteSpace(context.Request["goodscode"] + ""))
  182. {
  183. sqlStr += " and instr(p.goodscode,@GOODSCODE@) > 0 \n";
  184. sqlPara.Add(new CDAParameter("GOODSCODE", context.Request["goodscode"]));
  185. }
  186. sqlStr += @" GROUP BY p.goodsid
  187. UNION ALL
  188. select p.goodsid
  189. ,0 AS OUTflag
  190. ,0 b_out_num
  191. ,nvl(sum(case when p.goodsleveltypeid in(6,7) and p.isrefire='0' then 1 else 0 end), 0) b_bad_num -- 本烧不合格数
  192. ,0 c_out_num
  193. ,nvl(sum(case when p.goodsleveltypeid in(6,7)and p.isrefire='6' then 1 else 0 end), 0) c_bad_num -- 重烧不合格数
  194. from (
  195. select distinct p.goodsleveltypeid
  196. ,p.barcode
  197. ,p.goodsid
  198. ,p.ISREFIRE
  199. from tp_pm_productiondata p
  200. inner join tp_pm_groutingdailydetail gdd on gdd.groutingdailydetailid = p.groutingdailydetailid
  201. LEFT JOIN TP_PC_GROUTINGLINE gl on gl.GROUTINGLINEID=p.GROUTINGLINEID
  202. INNER JOIN TP_PM_DEFECT dfc on dfc.productiondataid=p.productiondataid
  203. INNER JOIN tp_mst_goods g ON p.goodsid = g.goodsid
  204. LEFT JOIN TP_MST_GOODSTYPE GT ON g.GOODSTYPEID=GT.GOODSTYPEID
  205. where p.accountid = @accountid@
  206. AND P.VALUEFLAG = 1
  207. and p.modeltype IN (-1, -4, -5)
  208. and p.CHECKBATCHNO = 1
  209. and length(p.kilncarbatchno) > 0
  210. and p.createtime >= @datebegin@
  211. and p.createtime < @dateend@
  212. AND (@BUILDINGNO@ IS NULL OR instr(gl.BUILDINGNO , @BUILDINGNO@) > 0)
  213. AND (@LOGOID@ IS NULL OR instr(gdd.LOGOID , @LOGOID@) > 0)
  214. AND (@HIGHPRESSUREFLAG@ IS NULL OR instr(gl.HIGHPRESSUREFLAG , @HIGHPRESSUREFLAG@) > 0)
  215. AND (@groutinglineMaster@ IS NULL OR instr(gl.GROUTINGLINEID , @groutinglineMaster@) > 0)
  216. AND (@goodstypecode@ IS NULL OR instr(gt.goodstypecode,@goodstypecode@) = 1) ";
  217. // 产品编码条件修正 fenglinyong modify 2022-05-10
  218. if (!string.IsNullOrWhiteSpace(context.Request["goodscode"] + ""))
  219. {
  220. sqlStr += " and instr(p.goodscode,@GOODSCODE@) > 0 \n";
  221. sqlPara.Add(new CDAParameter("GOODSCODE", context.Request["goodscode"]));
  222. }
  223. sqlStr += " )P GROUP BY p.goodsid ) pp group by pp.goodsid) ppp\n" +
  224. " inner join tp_mst_goods g\n" +
  225. " on g.goodsid = ppp.goodsid\n" +
  226. " order by g.goodscode) ";
  227. sqlStr += "SELECT * FROM ppp_details\n" +
  228. "UNION ALL\n" +
  229. "SELECT '合计' AS 产品编码," +
  230. "SUM(本烧出窑数) AS 本烧出窑数," +
  231. "SUM(本烧合格数) AS 本烧合格数," +
  232. "SUM(重烧合格数) AS 重烧合格数," +
  233. "ROUND((SUM(本烧合格数) + SUM(重烧合格数)) / NULLIF(SUM(本烧出窑数), 0), 4) * 100 || '%' AS 综合合格率\n " +
  234. "FROM ppp_details ";
  235. sqlPara.Add(new CDAParameter("BUILDINGNO", context.Request["workshopcodeMaster"].ToString()));
  236. sqlPara.Add(new CDAParameter("LOGOID", context.Request["LOGONAME"].ToString()));
  237. sqlPara.Add(new CDAParameter("HIGHPRESSUREFLAG", context.Request["HIGHPRESSUREFLAG"]));
  238. sqlPara.Add(new CDAParameter("groutinglineMaster", context.Request["groutinglineMaster"]));
  239. sqlPara.Add(new CDAParameter("goodstypecode", context.Request["goodstypecode"].ToString()));
  240. //直接获取不分页数据
  241. JsonResult jsonresult = Easyui.ExecuteJsonResult(conn, sqlStr, sqlPara);
  242. context.Response.Write(jsonresult.ToJson());
  243. }
  244. }
  245. }
  246. }
  247. public bool IsReusable
  248. {
  249. get
  250. {
  251. return false;
  252. }
  253. }
  254. }