Get_Report_Defect_Detail.ashx 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. 
  2. <%@ WebHandler Language="C#" Class="Get_Report_Defect_Detail" %>
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Web;
  6. using System.Web.SessionState;
  7. using System.Configuration;
  8. using System.Data;
  9. using Newtonsoft.Json;
  10. using Curtain.DataAccess;
  11. using Curtain.Log;
  12. using DK.XuWei.WebMes;
  13. public class Get_Report_Defect_Detail : IHttpHandler,IRequiresSessionState
  14. {
  15. public void ProcessRequest(HttpContext context)
  16. {
  17. int pageNumber = context.Request["pageNumber"] is object ? Convert.ToInt32(context.Request["pageNumber"]) : 0;
  18. int pageSize = context.Request["pageSize"] is object ? Convert.ToInt32(context.Request["pageSize"]) : 10;
  19. List<CDAParameter> para = new List<CDAParameter>();
  20. if (HttpContext.Current.Session["userCode"] is object)
  21. {
  22. //统计语句
  23. string sqlStr = @"
  24. SELECT
  25. pmd.productionlinename AS 生产线,
  26. pmd.procedurename AS 检验工序,
  27. pmd.DefectProcedureCode AS 责任工序编码,
  28. pmd.DefectProcedureName AS 责任工序,
  29. pmd.DefectUserCode AS 责任工号,
  30. pmd.defectusername AS 责任工号名称,
  31. jobs.jobsname AS 责任工种,
  32. dt.DefectTypeName AS 缺陷类别,
  33. mstd.Remarks AS 缺陷备注,
  34. pd.Remarks AS 产品备注,
  35. pmd.defectcode AS 缺陷编码,
  36. d.alldefectcode AS 缺陷编码全,
  37. pmd.defectname AS 缺陷名称,
  38. pmd.UserCode AS 检验工号,
  39. pmd.username AS 工号名称,
  40. gt.Goodstypename AS 产品类别,
  41. pmd.goodscode AS 产品编码,
  42. pmd.barcode AS 产品条码,
  43. pd.groutingdate AS 注浆日期,
  44. pd.groutingnum AS 注浆次数,
  45. pd.groutingMouldCode AS 模具编码,
  46. pd.GroutingLineCode AS 成型线编码,
  47. pd.KilnCarCode AS 窑车编号,
  48. pd.Procedureid AS 工序ID,
  49. gl.goodslevelname AS 产品分级,
  50. pmd.DefectPositionCode AS 缺陷位置编码,
  51. pmd.DefectPositionName AS 缺陷位置名称,
  52. pd.GroutingUserCode AS 成型工号,
  53. CASE WHEN logo.logoid IS NULL THEN NULL ELSE logo.Logoname || '[' || logo.Logocode || ']' END AS 商标,
  54. pd.CheckTime AS 成检登记时间,
  55. pmd.CheckTime AS 缺陷登记时间,
  56. mstdf.DefectFineCode AS 缺陷扣罚,
  57. pmd.DefectDeductionNum AS 缺陷扣除数,
  58. hopd.createtime AS 交接时间,
  59. (
  60. SELECT
  61. listagg ( to_char( pduc.UserCode ), ',' ) within GROUP ( ORDER BY pduc.ProductionDataID ) AS WorkUserCodes
  62. FROM
  63. tp_pm_ProductionData pduc
  64. WHERE
  65. pduc.barcode = pmd.barcode
  66. AND pduc.valueflag = '1'
  67. ) AS 生产工号,
  68. (
  69. SELECT
  70. listagg ( to_char( u.UserCode ), ',' ) within GROUP ( ORDER BY pdcu.ProductionDataID ) AS CreateUserCodes
  71. FROM
  72. tp_pm_ProductionData pdcu
  73. LEFT JOIN tp_mst_user u ON u.userid = pdcu.createuserid
  74. WHERE
  75. pdcu.barcode = pmd.barcode
  76. AND pdcu.valueflag = '1'
  77. ) AS 操作工号,
  78. (
  79. SELECT
  80. listagg ( to_char( s.StaffName ), ',' ) within GROUP ( ORDER BY s.Staffid ) AS DefectStaffNames
  81. FROM
  82. TP_PM_DefectResponsible dr
  83. LEFT JOIN TP_HR_Staff s ON s.Staffid = dr.Staffid
  84. WHERE
  85. dr.ProductionDefectID = pmd.ProductionDefectID --dr pdcu.valueflag = '1'
  86. ) AS 责任员工,
  87. CASE
  88. WHEN pd.isrefire <> '0' THEN
  89. (
  90. SELECT
  91. listagg ( to_char( d.defectname || '[' || d.defectpositionname || ']' ), ',' ) within GROUP ( ORDER BY d.productiondefectid ) bsqx
  92. FROM
  93. tp_pm_productiondata p
  94. INNER JOIN tp_pm_defect d ON d.productiondataid = p.productiondataid
  95. WHERE
  96. p.valueflag = '1'
  97. AND d.valueflag = '1'
  98. AND p.barcode = pd.barcode
  99. AND p.modeltype = - 1
  100. AND p.isrefire = '0'
  101. ) ELSE NULL
  102. END AS 本烧缺陷,
  103. CASE
  104. WHEN EXISTS (
  105. SELECT
  106. 1
  107. FROM
  108. tp_pm_ProductionData pdud
  109. WHERE
  110. pdud.barcode = pmd.barcode
  111. AND pdud.modeltype = - 1
  112. AND pdud.procedureid = pd.procedureid
  113. AND pdud.kilncarbatchno = pd.kilncarbatchno
  114. AND pdud.valueflag = '0'
  115. ) THEN
  116. 1 ELSE 0
  117. END AS 改判标识,
  118. semid.DEFECTNAME AS 半检缺陷,
  119. semid.DEFECTPOSITIONNAME AS 半检位置,
  120. semi.SEMIREWORKUSERCODE AS 半检工号
  121. FROM
  122. tp_pm_defect pmd
  123. LEFT JOIN TP_PC_Procedure p ON p.procedureid = pmd.procedureid
  124. LEFT JOIN TP_PC_Procedure pdd ON pdd.procedureid = pmd.defectprocedureid
  125. LEFT JOIN TP_MST_Goods g ON pmd.Goodsid = g.Goodsid
  126. LEFT JOIN TP_MST_GoodsType gt ON g.GoodsTypeID = gt.GoodsTypeID
  127. LEFT JOIN TP_MST_Defect mstd ON pmd.DefectID = mstd.DefectID
  128. LEFT JOIN TP_MST_Jobs jobs ON jobs.jobsid = pmd.Defectjobs
  129. LEFT JOIN TP_MST_DefectType dt ON mstd.DefectTypeID = dt.DefectTypeID
  130. INNER JOIN tp_pm_productiondata pd ON pmd.ProductionDataID = pd.ProductionDataID
  131. LEFT JOIN tp_mst_goodslevel gl ON pd.goodslevelid = gl.goodslevelid
  132. INNER JOIN tp_pm_productiondata hopd ON hopd.kilncarbatchno = pd.kilncarbatchno
  133. AND hopd.barcode = pd.barcode
  134. AND hopd.valueflag = '1'
  135. AND hopd.procedureid = ( SELECT procedureid FROM tp_mst_rptsprocedure t WHERE t.rptprocedureid = @RPTPROCEDUREID@ )
  136. LEFT JOIN TP_MST_DefectFine mstdf ON pmd.DefectFine = mstdf.DefectFineID
  137. LEFT JOIN tp_mst_logo logo ON pd.logoid = logo.logoid
  138. LEFT JOIN (
  139. SELECT
  140. def.barcode,
  141. wmsys.wm_concat ( to_char( def.defectcode ) ) alldefectcode
  142. FROM
  143. tp_pm_defect def
  144. WHERE
  145. def.valueflag = '1'
  146. GROUP BY
  147. def.barcode
  148. ) d ON d.barcode = pmd.barcode
  149. LEFT JOIN TP_PM_SEMIREWORK semi ON semi.GROUTINGDAILYDETAILID = hopd.GROUTINGDAILYDETAILID AND semi.VALUEFLAG = '1' AND semi.BACKOUTFLAG = '0'
  150. LEFT JOIN TP_PM_SEMIREWORKDEFECT semid ON semi.SEMIREWORKID = semid.SEMIREWORKDEFECTID AND semid.VALUEFLAG = '1'
  151. --INNER JOIN TP_PM_SEMIREWORK semi ON semi.GROUTINGDAILYDETAILID = hopd.GROUTINGDAILYDETAILID AND semi.VALUEFLAG = '1' AND semi.BACKOUTFLAG = '0'
  152. --INNER JOIN TP_PM_SEMIREWORKDEFECT semid ON semi.SEMIREWORKID = semid.SEMIREWORKDEFECTID AND semid.VALUEFLAG = '1'
  153. WHERE
  154. pmd.valueflag = '1'
  155. AND pd.ModelType = - 1
  156. AND pmd.AccountID = 1
  157. ";
  158. //登记时间测试 2017-12-09 至 2017-12-10
  159. //sqlStr += @"
  160. // AND pd.CheckTime >= Date'2017-12-10'
  161. // AND pd.CheckTime <= Date'2017-12-11'
  162. //";
  163. //拼合搜索参数
  164. //此参数必选
  165. if (!string.IsNullOrEmpty(context.Request["交接工序"]))
  166. {
  167. para.Add(new CDAParameter("RPTPROCEDUREID", Convert.ToInt32(context.Request["交接工序"].ToString()), DataType.Int32, ParameterDirection.Input));
  168. }
  169. if (!string.IsNullOrEmpty(context.Request["登记时间开始"]))
  170. {
  171. sqlStr += " AND pd.CheckTime >= @登记开始时间@ ";
  172. para.Add(new CDAParameter("登记开始时间", Convert.ToDateTime(context.Request["登记时间开始"].ToString()), DataType.Date, ParameterDirection.Input));
  173. }
  174. if (!string.IsNullOrEmpty(context.Request["登记时间结束"]))
  175. {
  176. sqlStr += " AND pd.CheckTime <= @登记时间结束@ ";
  177. para.Add(new CDAParameter("登记时间结束", Convert.ToDateTime(context.Request["登记时间结束"].ToString()), DataType.Date, ParameterDirection.Input));
  178. }
  179. if (!string.IsNullOrEmpty(context.Request["窑炉编码"]))
  180. {
  181. sqlStr += " AND instr(pd.KilnCode,@窑炉编码@) >0 ";
  182. para.Add(new CDAParameter("窑炉编码", context.Request["窑炉编码"].ToString(), DataType.NVarChar, ParameterDirection.Input));
  183. }
  184. if (!string.IsNullOrEmpty(context.Request["产品类别"]))
  185. {
  186. sqlStr += " AND instr(gt.GOODSTYPECode,@产品类别@)=1 ";
  187. para.Add(new CDAParameter("产品类别", context.Request["产品类别"].ToString(), DataType.NVarChar, ParameterDirection.Input));
  188. }
  189. if (!string.IsNullOrEmpty(context.Request["缺陷位置"]))
  190. {
  191. sqlStr += " AND instr(pmd.DefectPositionName,@缺陷位置@)>0 ";
  192. para.Add(new CDAParameter("缺陷位置", context.Request["缺陷位置"].ToString(), DataType.NVarChar, ParameterDirection.Input));
  193. }
  194. if (!string.IsNullOrEmpty(context.Request["缺陷名称"]))
  195. {
  196. sqlStr += " AND instr(pmd.DefectName,@缺陷名称@)>0 ";
  197. para.Add(new CDAParameter("缺陷名称", context.Request["缺陷名称"].ToString(), DataType.NVarChar, ParameterDirection.Input));
  198. }
  199. //加排序
  200. sqlStr += @"
  201. ORDER BY
  202. pmd.productionlinename,
  203. p.DISPLAYNO,
  204. pdd.DISPLAYNO,
  205. dt.DISPLAYNO,
  206. mstd.DISPLAYNO,
  207. pmd.defectusercode,
  208. pmd.barcode
  209. ";
  210. //输出结果
  211. //context.Response.Write(sqlStr.Replace("\n","<br>"));
  212. //context.Response.Write("<br>");
  213. //for(int i=0;i<para.Count;i++)
  214. //{
  215. // context.Response.Write(para[i].ParameterName + "=" + para[i].Value + "<br>");
  216. //}
  217. using (IDataAccess conn = DataAccess.Create())
  218. {
  219. DataTable dt = conn.SelectPages(pageNumber, pageSize, sqlStr, para.ToArray());
  220. string jsonStr = new JsonResult(dt).ToJson();
  221. context.Response.AddHeader("Content-Length",jsonStr.Length.ToString());
  222. context.Response.Write(jsonStr);
  223. }
  224. }
  225. else
  226. {
  227. context.Response.Write(new JsonResult(-1).ToJson());
  228. }
  229. }
  230. public bool IsReusable
  231. {
  232. get
  233. {
  234. return false;
  235. }
  236. }
  237. }