ReportDetailedLogic.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. /*******************************************************************************
  2. * Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential
  3. * 类的信息:
  4. * 1.程序名称:ReportModuleLogic.cs
  5. * 2.功能描述:生产线报表分析
  6. * 编辑履历:
  7. * 作者 日期 版本 修改内容
  8. * 宋扬 2014/11/08 1.00 新建
  9. *******************************************************************************/
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Data;
  13. using System.Text;
  14. using Curtain.DataAccess;
  15. using Dongke.IBOSS.PRD.Basics.BaseResources;
  16. using Dongke.IBOSS.PRD.Basics.DataAccess;
  17. using Dongke.IBOSS.PRD.Service.DataModels;
  18. using Dongke.IBOSS.PRD.WCF.DataModels;
  19. using Oracle.ManagedDataAccess.Client;
  20. namespace Dongke.IBOSS.PRD.Service.ReportModuleLogic
  21. {
  22. /// <summary>
  23. /// 明细报表
  24. /// </summary>
  25. public class ReportDetailedLogic
  26. {
  27. /// <summary>
  28. /// 取得RPT080109(半成检缺陷对照表)的查询数据
  29. /// </summary>
  30. /// <param name="user">登录用户信息</param>
  31. /// <param name="se">查询条件</param>
  32. /// <returns>查询结果</returns>
  33. public static ServiceResultEntity GetRPT080109DData(SUserInfo user, RPT030106_SE se)
  34. {
  35. IDataAccess dataAccess = null;
  36. try
  37. {
  38. dataAccess = DataAccess.Create();
  39. List<CDAParameter> parameters = new List<CDAParameter>();
  40. DataTable data = dataAccess.ExecuteDatatable(ReportDetailedLogic.GetRPT080109DSQL(user, se, ref parameters), parameters.ToArray());
  41. ServiceResultEntity sre = new ServiceResultEntity();
  42. if (data == null || data.Rows.Count == 0)
  43. {
  44. sre.Status = Constant.ServiceResultStatus.NoSearchResults;
  45. return sre;
  46. }
  47. sre.Data = new DataSet();
  48. sre.Data.Tables.Add(data);
  49. return sre;
  50. }
  51. catch (Exception ex)
  52. {
  53. throw ex;
  54. }
  55. finally
  56. {
  57. dataAccess?.Close();
  58. }
  59. }
  60. /// <summary>
  61. /// 获取RPT080109画面(半成检缺陷对照表)的信息查询sql
  62. /// </summary>
  63. /// <returns>sql</returns>
  64. private static string GetRPT080109DSQL(SUserInfo user, RPT030106_SE se, ref List<CDAParameter> parameters)
  65. {
  66. // 质量登记改判时,缺陷的登记时间是当前时间,不是交接或前次登记时间。
  67. // 追加交接时间,改判标识。
  68. string selSql =
  69. "SELECT pmd.productionlinename\n" +
  70. " ,pmd.procedurename\n" +
  71. " ,pmd.DefectProcedureCode\n" +
  72. " ,pmd.DefectProcedureName\n" +
  73. " ,pmd.DefectUserCode\n" +
  74. " ,pmd.defectusername\n" +
  75. " ,jobs.jobsname defectjobsname\n" +
  76. " ,dt.DefectTypeName\n" +
  77. " ,mstd.Remarks DefectRemarks\n" +
  78. " ,pd.Remarks barcodeRemarks\n" +
  79. " ,pmd.defectcode\n" +
  80. " ,d.alldefectcode\n" +
  81. " ,pmd.defectname\n" +
  82. " ,pmd.UserCode\n" +
  83. " ,pmd.username\n" +
  84. " ,gt.Goodstypename\n" +
  85. " ,pmd.goodscode\n" +
  86. " ,pmd.barcode\n" +
  87. " ,pd.groutingdate\n" +
  88. " ,pd.groutingnum\n" +
  89. " ,pd.groutingMouldCode\n" +
  90. " ,pd.GroutingLineCode\n" +
  91. " ,pd.KilnCarCode\n" +
  92. " ,pd.Procedureid\n" +
  93. " ,gl.goodslevelname Goodsleveltype\n" +
  94. " ,pmd.DefectPositionCode\n" +
  95. " ,pmd.DefectPositionName\n" +
  96. " ,pd.GroutingUserCode\n" +
  97. " , CASE\n" +
  98. " WHEN logo.logoid IS NULL THEN\n" +
  99. " NULL\n" +
  100. " ELSE\n" +
  101. " logo.Logoname || '[' || logo.Logocode || ']'\n" +
  102. " END AS LogoCodeName\n" +
  103. //" ,pmd.CreateTime\n" +
  104. " ,pd.CheckTime pdchecktime\n" +
  105. " ,pmd.CheckTime\n" +
  106. " ,mstdf.DefectFineCode\n" +
  107. " ,pmd.DefectDeductionNum\n" +
  108. //" ,to_char(pmd.DefectDeductionNum, '990.00') DefectDeductionNum\n" +
  109. " ,hopd.createtime handovertime\n" +
  110. " ,(SELECT listagg(to_char(pduc.UserCode), ',') within GROUP(ORDER BY pduc.ProductionDataID) AS WorkUserCodes\n" +
  111. " FROM tp_pm_ProductionData pduc\n" +
  112. " WHERE pduc.barcode = pmd.barcode\n" +
  113. " AND pduc.valueflag = '1') AS WorkUserCodes\n" +
  114. " ,(SELECT listagg(to_char(u.UserCode), ',') within GROUP(ORDER BY pdcu.ProductionDataID) AS CreateUserCodes\n" +
  115. " FROM tp_pm_ProductionData pdcu\n" +
  116. " Left join tp_mst_user u on u.userid = pdcu.createuserid\n" +
  117. " WHERE pdcu.barcode = pmd.barcode\n" +
  118. " AND pdcu.valueflag = '1') AS CreateUserCodes\n" +
  119. " ,(SELECT listagg(to_char(s.StaffName), ',') within GROUP(ORDER BY s.Staffid) AS DefectStaffNames\n" +
  120. " FROM TP_PM_DefectResponsible dr\n" +
  121. " Left join TP_HR_Staff s on s.Staffid = dr.Staffid\n" +
  122. " WHERE dr.ProductionDefectID = pmd.ProductionDefectID --dr pdcu.valueflag = '1'\n" +
  123. " ) AS DefectStaffNames\n" +
  124. " , CASE\n" +
  125. " WHEN pd.isrefire <> '0' THEN\n" +
  126. " (select listagg(to_char(d.defectname || '[' || d.defectpositionname || ']')\n" +
  127. " ,',') within group(order by d.productiondefectid) bsqx\n" +
  128. " from tp_pm_productiondata p\n" +
  129. " inner join tp_pm_defect d\n" +
  130. " on d.productiondataid = p.productiondataid\n" +
  131. " where p.valueflag = '1'\n" +
  132. " and d.valueflag = '1'\n" +
  133. " and p.barcode = pd.barcode\n" +
  134. " and p.modeltype = -1\n" +
  135. " and p.isrefire = '0')\n" +
  136. " ELSE\n" +
  137. " null\n" +
  138. " END AS bsqx\n" +
  139. " , CASE\n" +
  140. " WHEN EXISTS (SELECT 1\n" +
  141. " FROM tp_pm_ProductionData pdud\n" +
  142. " WHERE pdud.barcode = pmd.barcode\n" +
  143. " AND pdud.modeltype = -1\n" +
  144. " AND pdud.procedureid = pd.procedureid\n" +
  145. " AND pdud.kilncarbatchno = pd.kilncarbatchno\n" +
  146. " AND pdud.valueflag = '0') THEN\n" +
  147. " 1\n" +
  148. " ELSE\n" +
  149. " 0\n" +
  150. " END AS undoflag\n" +
  151. " ,semid.DEFECTNAME AS 半检缺陷\n" +
  152. //" ,'[' || semid.DEFECTPOSITIONCODE || ']' ||semid.DEFECTPOSITIONNAME AS 半检位置\n" +
  153. " ,semid.DEFECTPOSITIONCODE AS 位置编码\n" +
  154. " ,semid.DEFECTPOSITIONNAME AS 半检位置\n" +
  155. " ,semi.SEMIREWORKUSERCODE AS 半检工号\n" +
  156. " FROM tp_pm_defect pmd\n" +
  157. " LEFT JOIN TP_PC_Procedure p\n" +
  158. " ON p.procedureid = pmd.procedureid\n" +
  159. " LEFT JOIN TP_PC_Procedure pdd\n" +
  160. " ON pdd.procedureid = pmd.defectprocedureid\n" +
  161. " LEFT JOIN TP_MST_Goods g\n" +
  162. " ON pmd.Goodsid = g.Goodsid\n" +
  163. " LEFT JOIN TP_MST_GoodsType gt\n" +
  164. " ON g.GoodsTypeID = gt.GoodsTypeID\n" +
  165. " LEFT JOIN TP_MST_Defect mstd\n" +
  166. " ON pmd.DefectID = mstd.DefectID\n" +
  167. " LEFT JOIN TP_MST_Jobs jobs\n" +
  168. " ON jobs.jobsid = pmd.Defectjobs\n" +
  169. " LEFT JOIN TP_MST_DefectType dt\n" +
  170. " ON mstd.DefectTypeID = dt.DefectTypeID\n" +
  171. " INNER JOIN tp_pm_productiondata pd\n" +
  172. " ON pmd.ProductionDataID = pd.ProductionDataID\n" +
  173. " LEFT JOIN tp_mst_goodslevel gl\n" +
  174. " ON pd.goodslevelid = gl.goodslevelid\n" +
  175. //"-- 交接工序\n" +
  176. //" INNER JOIN tp_pm_productiondata hopd\n" +
  177. //" ON hopd.procedureid = (select procedureid from tp_mst_rptsprocedure t where t.rptprocedureid = :HandOverProcedureID) \n" +
  178. //" AND hopd.valueflag = '1'\n" +
  179. //" AND hopd.barcode = pd.barcode\n" +
  180. //" AND hopd.kilncarbatchno = pd.kilncarbatchno\n" +
  181. " INNER JOIN tp_pm_productiondata hopd\n" +
  182. " ON hopd.kilncarbatchno = pd.kilncarbatchno\n " +
  183. " AND hopd.barcode = pd.barcode\n" +
  184. " AND hopd.valueflag = '1'\n" +
  185. " AND hopd.procedureid = (select procedureid from tp_mst_rptsprocedure t where t.rptprocedureid = @HandOverProcedureID@) \n" +
  186. " LEFT JOIN TP_MST_DefectFine mstdf\n" +
  187. " ON pmd.DefectFine = mstdf.DefectFineID\n" +
  188. " LEFT JOIN tp_mst_logo logo\n" +
  189. " ON pd.logoid = logo.logoid\n" +
  190. " LEFT JOIN (SELECT def.barcode, wmsys.wm_concat( to_char(def.defectcode)) alldefectcode\n" +
  191. " FROM tp_pm_defect def\n" +
  192. " WHERE def.valueflag = '1'\n" +
  193. //def.createtime
  194. " group by def.barcode ) d\n" +
  195. " ON d.barcode = pmd.barcode\n" +
  196. " INNER JOIN TP_PM_SEMIREWORK semi ON semi.GROUTINGDAILYDETAILID = hopd.GROUTINGDAILYDETAILID AND semi.VALUEFLAG = '1' AND semi.BACKOUTFLAG = '0' \n" +
  197. " INNER JOIN TP_PM_SEMIREWORKDEFECT semid ON semi.SEMIREWORKID = semid.SEMIREWORKDEFECTID AND semid.VALUEFLAG = '1' \n" +
  198. " WHERE pmd.valueflag = '1' \n" +
  199. " AND pd.ModelType = -1\n" +
  200. " AND pmd.AccountID = @AccountID@\n";
  201. parameters.Add(new CDAParameter("@AccountID@", user.AccountID));
  202. parameters.Add(new CDAParameter("@HandOverProcedureID@", se.HandOverProcedureID));
  203. //selSql = selSql +
  204. // " Where TP_PM_Defect.valueflag='1' and tp_pm_productiondata.ModelType=-1" +
  205. // " and TP_PM_Defect.AccountID=:AccountID ";
  206. if (!string.IsNullOrEmpty(se.GoodsTypeCode))
  207. {
  208. selSql = selSql + " AND instr(gt.GOODSTYPECode,@GoodsTypeCode@)=1 ";
  209. parameters.Add(new CDAParameter("@GoodsTypeCode@", se.GoodsTypeCode));
  210. }
  211. if (!string.IsNullOrEmpty(se.LineIDS))
  212. {
  213. selSql = selSql + " AND instr(','||@ProductionLineIDS@||',',','||pmd.ProductionLineId||',')>0 ";
  214. parameters.Add(new CDAParameter("@ProductionLineIDS@", se.LineIDS));
  215. }
  216. if (!string.IsNullOrEmpty(se.DefectProcedureIDS))
  217. {
  218. //selSql = selSql + " AND (instr(','||:DefectProcedureIDS||',',','||TP_PM_Defect.DefectProcedureID||',')>0 or TP_PM_Defect.DefectProcedureID is null ) ";
  219. selSql = selSql + " AND (instr(','||@DefectProcedureIDS@||',',','||pmd.DefectProcedureID||',')>0 ) ";
  220. parameters.Add(new CDAParameter("@DefectProcedureIDS@", se.DefectProcedureIDS));
  221. }
  222. else
  223. {
  224. // modify by chenxy :没有选择时,应全查询出来。
  225. //selSql = selSql + " AND TP_PM_Defect.DefectProcedureID is null ";//因为有无责任工序
  226. }
  227. if (!string.IsNullOrEmpty(se.CheckProcedureIDS))
  228. {
  229. selSql = selSql + " AND instr(','||@ProcedureIDS@||',',','||pmd.ProcedureID||',')>0 ";
  230. parameters.Add(new CDAParameter("@ProcedureIDS@", se.CheckProcedureIDS));
  231. }
  232. if (!string.IsNullOrEmpty(se.KilnCode))
  233. {
  234. selSql = selSql + " AND instr(pd.KilnCode,@KilnCode@) >0 ";
  235. parameters.Add(new CDAParameter("@KilnCode@", se.KilnCode));
  236. }
  237. if (!string.IsNullOrEmpty(se.GoodsIDS))
  238. {
  239. selSql = selSql + " AND instr(','||@GoodsIDS@||',',','||pmd.Goodsid||',')>0 ";
  240. parameters.Add(new CDAParameter("@GoodsIDS@", se.GoodsIDS));
  241. }
  242. if (!string.IsNullOrEmpty(se.GoodsCode))
  243. {
  244. selSql = selSql + " AND instr(pmd.goodsCode,@GoodsCode@) >0 ";
  245. parameters.Add(new CDAParameter("@GoodsCode@", se.GoodsCode));
  246. }
  247. if (!string.IsNullOrEmpty(se.GoodsCodeS2D))
  248. {
  249. selSql = selSql + " AND pmd.goodsCode = @GoodsCodeS2D@ ";
  250. parameters.Add(new CDAParameter("@GoodsCodeS2D@", se.GoodsCodeS2D));
  251. }
  252. if (!string.IsNullOrEmpty(se.DefectUserCode))
  253. {
  254. selSql = selSql + " AND instr(pmd.DefectUserCode,@DefectUserCode@) >0 ";
  255. parameters.Add(new CDAParameter("@DefectUserCode@", se.DefectUserCode));
  256. }
  257. if (!string.IsNullOrEmpty(se.DefectTypeIDS))
  258. {
  259. selSql = selSql + " AND instr(','||@DefectTypeIDS@||',',','||dt.DefectTypeID||',')>0 ";
  260. parameters.Add(new CDAParameter("@DefectTypeIDS@", se.DefectTypeIDS));
  261. }
  262. if (!string.IsNullOrEmpty(se.DefectCode))
  263. {
  264. selSql = selSql + " AND instr(pmd.DefectCode,@DefectCode@) >0 ";
  265. parameters.Add(new CDAParameter("@DefectCode@", se.DefectCode));
  266. }
  267. if (!string.IsNullOrEmpty(se.DefectCodeS2D))
  268. {
  269. selSql = selSql + " AND pmd.DefectCode = @DefectCodeS2D@ ";
  270. parameters.Add(new CDAParameter("@DefectCodeS2D@", se.DefectCodeS2D));
  271. }
  272. if (!string.IsNullOrEmpty(se.DefectName))
  273. {
  274. selSql = selSql + " AND instr(pmd.DefectName,@DefectName@) >0 ";
  275. parameters.Add(new CDAParameter("@DefectName@", se.DefectName));
  276. }
  277. if (!string.IsNullOrEmpty(se.CheckUserCode))
  278. {
  279. selSql = selSql + " AND instr(pmd.UserCode,@UserCode@) >0";
  280. parameters.Add(new CDAParameter("@UserCode@", se.CheckUserCode));
  281. }
  282. if (!string.IsNullOrEmpty(se.CheckUserCodeS2D))
  283. {
  284. selSql = selSql + " AND pmd.UserCode = @CheckUserCodeS2D@ ";
  285. parameters.Add(new CDAParameter("@CheckUserCodeS2D@", se.CheckUserCodeS2D));
  286. }
  287. // 成检登记时间
  288. if (se.CreateTimeStart.HasValue)
  289. {
  290. selSql = selSql + " AND pd.checktime>= @CreateTimeStart@ ";
  291. parameters.Add(new CDAParameter("@CreateTimeStart@", se.CreateTimeStart.Value));
  292. }
  293. if (se.CreateTimeEnd.HasValue)
  294. {
  295. selSql = selSql + " AND pd.checktime<= @CreateTimeEnd@ ";
  296. parameters.Add(new CDAParameter("@CreateTimeEnd@", se.CreateTimeEnd.Value));
  297. }
  298. // 缺陷登记时间
  299. if (se.CheckTimeStart.HasValue)
  300. {
  301. selSql = selSql + " AND pmd.checktime>= @CheckTimeStart@ ";
  302. parameters.Add(new CDAParameter("@CheckTimeStart@", se.CheckTimeStart.Value));
  303. }
  304. if (se.CheckTimeEnd.HasValue)
  305. {
  306. selSql = selSql + " AND pmd.checktime<= @CheckTimeEnd@ ";
  307. parameters.Add(new CDAParameter("@CheckTimeEnd@", se.CheckTimeEnd.Value));
  308. }
  309. // 交接时间
  310. if (se.HandOverTimeStart.HasValue)
  311. {
  312. selSql = selSql + " AND hopd.CreateTime>= @HandOverTimeStart@ ";
  313. parameters.Add(new CDAParameter("@HandOverTimeStart@", se.HandOverTimeStart.Value));
  314. }
  315. if (se.HandOverTimeEnd.HasValue)
  316. {
  317. selSql = selSql + " AND hopd.CreateTime<= @HandOverTimeEnd@ ";
  318. parameters.Add(new CDAParameter("@HandOverTimeEnd@", se.HandOverTimeEnd.Value));
  319. }
  320. //selSql = selSql + " order by pmd.productionlinename,pmd.procedurename,pmd.defectprocedurename,pmd.defectusercode ";
  321. selSql = selSql + " order by pmd.productionlinename,p.DISPLAYNO,pdd.DISPLAYNO,dt.DISPLAYNO,mstd.DISPLAYNO,pmd.defectusercode,pmd.barcode ";
  322. return selSql;
  323. }
  324. }
  325. }