ReportDetailedLogic.cs 17 KB

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