rpt.ashx 15 KB

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