rpt.ashx 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  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. string procedureId = context.Request["procedureidMaster[]"] is object ? context.Request["procedureidMaster[]"].ToString() : "0";
  21. if (procedureId == "0" && context.Request["procedureidMaster"] is object) procedureId = context.Request["procedureidMaster"].ToString();
  22. if (procedureId == "") procedureId = "0";
  23. string goodstypeCode = context.Request["goodstypecodeMaster"] is object ? context.Request["goodstypecodeMaster"].ToString() : "";
  24. string goodsidMaster = context.Request["goodsidMaster[]"] is object ? context.Request["goodsidMaster[]"] : "0";
  25. if (goodsidMaster == "0" && context.Request["goodsidMaster"] is object) goodsidMaster = context.Request["goodsidMaster"].ToString();
  26. if (goodsidMaster == "") goodsidMaster = "0";
  27. string groutinglineCode = context.Request["groutinglineMaster[]"] is object ? context.Request["groutinglineMaster[]"].ToString() : "0";
  28. if (groutinglineCode == "0" && context.Request["groutinglineMaster"] is object) groutinglineCode = context.Request["groutinglineMaster"].ToString();
  29. if (groutinglineCode == "") groutinglineCode = "0";
  30. //商标id
  31. string logoId = context.Request["LOGONAME"] is object ? context.Request["LOGONAME"].ToString() : "";
  32. logoId = logoId==""?string.Empty:"AND INP.LOGOID=" + logoId;
  33. //主表
  34. if(context.Request["m"].ToString()=="0")
  35. {
  36. //DateTime dateBegin = Convert.ToDateTime(context.Request["datebeginMaster"]);
  37. //DateTime dateEnd = Convert.ToDateTime(context.Request["dateendMaster"]).AddDays(1);
  38. //拼合产品型号
  39. string sqlStr = @"
  40. SELECT DISTINCT
  41. INP.GOODSCODE
  42. FROM
  43. TP_PM_INPRODUCTION INP
  44. LEFT JOIN TP_MST_GOODS G ON INP.GOODSID = G.GOODSID
  45. LEFT JOIN TP_MST_GOODSTYPE GT ON G.GOODSTYPEID = GT.GOODSTYPEID
  46. WHERE
  47. INP.ACCOUNTID = 1
  48. AND INP.VALUEFLAG = '1'
  49. AND (INP.GOODSID IN ({GOODSID}) OR '{GOODSID}' = '0' )
  50. AND (INSTR(GT.GOODSTYPECODE,'{GOODSTYPECODE}') = 1 OR '{GOODSTYPECODE}' IS NULL)
  51. AND (INP.GROUTINGLINEID IN ({GROUTINGLINECODE}) OR '{GROUTINGLINECODE}' = '0')
  52. ORDER BY
  53. INP.GOODSCODE
  54. ".Replace("{GOODSID}", goodsidMaster)
  55. .Replace("{GOODSTYPECODE}", goodstypeCode)
  56. .Replace("{GROUTINGLINECODE}",groutinglineCode);
  57. DataTable dt = conn.ExecuteDatatable(sqlStr);
  58. //String goodscodeStr = "'H0966M' AS H0966M,'H0967L' AS H0967L,'合计' AS 合计";
  59. String goodscodeStr = "'合计' AS 合计";
  60. for(int i = 0; i < dt.Rows.Count; i++)
  61. {
  62. goodscodeStr += ",'"+ dt.Rows[i]["GOODSCODE"].ToString() +"' AS " + dt.Rows[i]["GOODSCODE"].ToString().Replace("-","_");
  63. }
  64. //读取报表数据
  65. sqlStr = @"
  66. SELECT * FROM
  67. (
  68. SELECT
  69. T.DISPLAYNO AS 序号,
  70. DECODE(T.GID,3,'0',2,'0',T.PROCEDUREID) AS 工序编号,
  71. DECODE(T.GID,3,'合计',2,'合计',T.PROCEDURENAME) AS 工序名称,
  72. DECODE(T.GID,1,'合计',3,'合计',T.GOODSCODE) AS 产品编码,
  73. T.INCOUNT AS 产量
  74. FROM
  75. (
  76. SELECT
  77. GROUPING_ID ( P.PROCEDURENAME, G.GOODSCODE ) GID,
  78. P.DISPLAYNO,
  79. P.PROCEDUREID,
  80. P.PROCEDURENAME,
  81. G.GOODSCODE,
  82. COUNT( BARCODE ) AS INCOUNT
  83. FROM
  84. TP_PM_INPRODUCTION INP
  85. INNER JOIN TP_PC_PROCEDURE P ON INP.PROCEDUREID = P.PROCEDUREID
  86. INNER JOIN TP_PC_PRODUCTIONLINE PLINE ON PLINE.PRODUCTIONLINEID = INP.PRODUCTIONLINEID
  87. INNER JOIN TP_MST_USER U ON INP.USERID = U.USERID
  88. INNER JOIN TP_MST_GOODS G ON INP.GOODSID = G.GOODSID
  89. INNER JOIN TP_MST_GOODSTYPE GT ON G.GOODSTYPEID = GT.GOODSTYPEID
  90. AND (INSTR(GT.GOODSTYPECODE,'{GOODSTYPECODE}') = 1 OR '{GOODSTYPECODE}' IS NULL)
  91. WHERE
  92. INP.ACCOUNTID = 1
  93. AND INP.VALUEFLAG = '1'
  94. AND (INP.GOODSID IN ({GOODSID}) OR '{GOODSID}' = '0' )
  95. AND (P.PROCEDUREID IN ({PROCEDUREID}) OR '{PROCEDUREID}' = '0' )
  96. AND (INP.GROUTINGLINEID IN ({GROUTINGLINECODE}) OR '{GROUTINGLINECODE}' = '0')
  97. {LOGOID}
  98. GROUP BY
  99. GROUPING SETS (
  100. (P.DISPLAYNO,P.PROCEDUREID,P.PROCEDURENAME,G.GOODSCODE ),
  101. (P.DISPLAYNO,P.PROCEDUREID,P.PROCEDURENAME),
  102. (G.GOODSCODE),
  103. ( )
  104. )
  105. ) T
  106. ORDER BY
  107. T.PROCEDURENAME,
  108. T.GOODSCODE
  109. )
  110. PIVOT
  111. (
  112. SUM(产量) FOR 产品编码 IN ({GOODSCODESTR})
  113. )
  114. ORDER BY 序号
  115. ".Replace("{GOODSCODESTR}",goodscodeStr)
  116. .Replace("{GOODSID}",goodsidMaster)
  117. .Replace("{GOODSTYPECODE}", goodstypeCode)
  118. .Replace("{PROCEDUREID}",procedureId)
  119. .Replace("{GROUTINGLINECODE}",groutinglineCode)
  120. .Replace("{LOGOID}", logoId);
  121. //获取查询条件
  122. List<CDAParameter> sqlPara = new List<CDAParameter>();
  123. //sqlPara.Add(new CDAParameter("DATEBEGIN", dateBegin, DataType.DateTime));
  124. //sqlPara.Add(new CDAParameter("DATEEND", dateEnd, DataType.DateTime));
  125. //sqlPara.Add(new CDAParameter("PROCEDUREID", context.Request["procedureidMaster"]));
  126. JsonResult data = Easyui.ExecuteJsonResult(conn, sqlStr, sqlPara);
  127. context.Response.Write(data.ToJson());
  128. }
  129. //子表1
  130. if(context.Request["m"].ToString()=="1")
  131. {
  132. //读取报表数据
  133. string sqlStr = @"
  134. SELECT
  135. P.PROCEDURENAME AS 生产工序,
  136. U.USERCODE AS 生产工号,
  137. INP.PROCEDURETIME AS 完成时间,
  138. ROUND( TO_NUMBER( SYSDATE - INP.PROCEDURETIME ), 2 ) AS 停留天数,
  139. ROUND( TO_NUMBER( SYSDATE - INP.PROCEDURETIME ) * 24 ) AS 停留小时,
  140. -- CASE
  141. --
  142. -- WHEN PAU.AUTOSCRAP = '0' THEN
  143. -- NVL(PAU.AUTOSCRAPDAYS,0) ELSE 0
  144. -- END AS 限制停留天数,
  145. NVL(PAU.AUTOSCRAPDAYS,0) AS 限制停留天数,
  146. CASE
  147. WHEN PAU.AUTOSCRAP = '0'
  148. THEN
  149. (CASE
  150. WHEN
  151. ROUND( TO_NUMBER( SYSDATE - INP.PROCEDURETIME ) - NVL(PAU.AUTOSCRAPDAYS,0) , 2 ) > 0
  152. THEN
  153. ROUND( TO_NUMBER( SYSDATE - INP.PROCEDURETIME ) - NVL(PAU.AUTOSCRAPDAYS,0) , 2 )
  154. ELSE
  155. 0
  156. END)
  157. ELSE 0
  158. END AS 超限天数,
  159. -- NVL( ROUND( TO_NUMBER( SYSDATE - INP.PROCEDURETIME, 0 ) - PAU.AUTOSCRAPDAYS ), 2 ) AS 超限天数,
  160. CASE
  161. WHEN INSTR( GT.GOODSTYPECODE, '001001' ) = 1 THEN
  162. '大件'
  163. WHEN INSTR( GT.GOODSTYPECODE, '001002' ) = 1 THEN
  164. '小件'
  165. END AS 产品类型,
  166. INP.BARCODE AS 产品条码,
  167. INP.GOODSCODE AS 产品编码,
  168. LG.LOGONAME AS 产品商标,
  169. --INP.PRODUCTIONLINECODE AS 生产线,
  170. PLINE.PRODUCTIONLINECODE AS 生产线, --生产线名称显示 xcm 2023-3-28
  171. INP.GOODSLEVELTYPEID AS 产品分级编号,
  172. GLT.GOODSLEVELTYPENAME AS 产品分级,
  173. INP.GROUTINGLINECODE AS 成型线编码,
  174. MT.GMOULDTYPENAME AS 成型线类型,
  175. INP.GROUTINGMOULDCODE AS 模具编号,
  176. GD.GROUTINGDATE AS 注浆日期,
  177. GD.SCRAPFLAG AS 损坯标识,
  178. GD.USERCODE AS 成型工号,
  179. GD.DELIVERTIME AS 交坯时间
  180. FROM
  181. TP_PM_INPRODUCTION INP
  182. INNER JOIN TP_PC_PROCEDURE P ON INP.PROCEDUREID = P.PROCEDUREID
  183. INNER JOIN TP_PC_PRODUCTIONLINE PLINE ON PLINE.PRODUCTIONLINEID = INP.PRODUCTIONLINEID
  184. INNER JOIN TP_MST_USER U ON INP.USERID = U.USERID
  185. INNER JOIN TP_MST_GOODS G ON INP.GOODSID = G.GOODSID
  186. INNER JOIN TP_MST_LOGO LG ON INP.LOGOID = LG.LOGOID
  187. INNER JOIN TP_MST_GOODSTYPE GT ON G.GOODSTYPEID = GT.GOODSTYPEID
  188. LEFT JOIN TP_MST_GMOULDTYPE MT ON INP.GMOULDTYPEID = MT.GMOULDTYPEID
  189. LEFT JOIN TP_PM_GROUTINGDAILYDETAIL GD ON INP.GROUTINGDAILYDETAILID = GD.GROUTINGDAILYDETAILID
  190. LEFT JOIN TP_SYS_GOODSLEVELTYPE GLT ON INP.GOODSLEVELTYPEID = GLT.GOODSLEVELTYPEID
  191. LEFT JOIN TP_PC_PROCEDURE_AUTOSCRAP PAU ON P.PROCEDUREID = PAU.PROCEDUREID
  192. WHERE
  193. INP.ACCOUNTID = 1
  194. AND INP.VALUEFLAG = '1'
  195. AND ( INP.PROCEDUREID = @PROCEDUREID@ OR @PROCEDUREID@ IS NULL OR @PROCEDUREID@ = 0 )
  196. AND ( INP.GOODSID IN ( {GOODSID} ) OR '{GOODSID}' = '0' )
  197. AND ( INSTR( GT.GOODSTYPECODE, '{GOODSTYPECODE}' ) = 1 OR '{GOODSTYPECODE}' IS NULL )
  198. AND ( INP.GROUTINGLINEID IN ( {GROUTINGLINECODE} ) OR '{GROUTINGLINECODE}' = '0' )
  199. {LOGOID}
  200. ".Replace("{GOODSID}", goodsidMaster)
  201. .Replace("{GOODSTYPECODE}", goodstypeCode)
  202. .Replace("{GROUTINGLINECODE}",groutinglineCode)
  203. .Replace("{LOGOID}", logoId);
  204. List<CDAParameter> sqlPara = new List<CDAParameter>();
  205. sqlPara.Add(new CDAParameter("PROCEDUREID", context.Request["id"]));
  206. JsonResult data = Easyui.ExecuteJsonResult(conn, sqlStr, sqlPara);
  207. context.Response.Write(data.ToJson());
  208. }
  209. }
  210. }
  211. public bool IsReusable
  212. {
  213. get
  214. {
  215. return false;
  216. }
  217. }
  218. }