Bladeren bron

质量报表 综合合计

姜永辉 3 dagen geleden
bovenliggende
commit
d5e74a7787
1 gewijzigde bestanden met toevoegingen van 235 en 1 verwijderingen
  1. 235 1
      DK.Service/ReportModuleLogic/ReportModuleLogic.cs

+ 235 - 1
DK.Service/ReportModuleLogic/ReportModuleLogic.cs

@@ -4316,12 +4316,32 @@ namespace Dongke.IBOSS.PRD.Service.ReportModuleLogic
                     return sre;
                 }
 
+                // 增加三行综合数据,出窑量取本烧出窑量,后边合格品、正品……数据和现在总计数据一致,合格率、正品率……以本烧数据做分母 260401
+                parameters.Clear();
+                sql = ReportModuleLogic.GetRPT040105S1SQLNew(user, se, ref parameters);
+                DataTable datanew = conn.GetSqlResultToDt(sql, parameters.ToArray()); 
+                DataRow[] drs1 = datanew.Select("goodstypecode2 = '001001'"); //大件
+                int outkilncount1 = 0;
+                if (drs1 != null && drs1.Length > 0)
+                {
+                    outkilncount1 = Convert.ToInt32(drs1[0]["outkilncount"]); // 出窑数
+                }
+                DataRow[] drs2 = datanew.Select("goodstypecode2 = '001002'"); //小件
+                int outkilncount2 = 0;
+                if (drs2 != null && drs2.Length > 0)
+                {
+                    outkilncount2 = Convert.ToInt32(drs2[0]["outkilncount"]); // 出窑数
+                }
                 data.Columns.Add("GCount", typeof(int));
                 //data.Columns.Add("OutGCount", typeof(string));
                 //data.Columns.Add("GoodGCount", typeof(string));
                 data.Columns.Add("OutGCount", typeof(decimal));
                 data.Columns.Add("GoodGCount", typeof(decimal));
 
+                int outkilncountnew = 0;
+                string goodstypename2new = "";
+                sre.Data = new DataSet();
+                List<DataRow> newRows = new List<DataRow>();
                 foreach (DataRow item in data.Rows)
                 {
                     int gid = Convert.ToInt32(item["gid"]);
@@ -4335,10 +4355,22 @@ namespace Dongke.IBOSS.PRD.Service.ReportModuleLogic
                     if (gid == 2)
                     {
                         drs = dataCount.Select("goodstypecode2 = '" + item["goodstypecode2"].ToString() + "'");
+                        if (drs1[0]["goodstypecode2"] +"" == item["goodstypecode2"].ToString())
+                        {
+                            outkilncountnew = outkilncount1;
+                            goodstypename2new = "大件综合";
+                        }
+                        else
+                        {
+                            outkilncountnew = outkilncount2;
+                            goodstypename2new = "小件综合";
+                        }
                     }
                     else if (gid == 3)
                     {
                         drs = dataCount.Select("goodstypecode2 is null");
+                        outkilncountnew = outkilncount1 + outkilncount2;
+                        goodstypename2new = "综合总计";
                     }
                     if (drs != null && drs.Length > 0)
                     {
@@ -4357,9 +4389,51 @@ namespace Dongke.IBOSS.PRD.Service.ReportModuleLogic
                         item["OutGCount"] = DBNull.Value;
                         item["GoodGCount"] = DBNull.Value;
                     }
+
+                   
+                    // 新增三行数据
+                    DataRow drowRow = data.NewRow();
+                    drowRow["productionlinename"] = item["productionlinename"];
+                    drowRow["goodstypename2"] = goodstypename2new;
+                    drowRow["goodstypecode2"] = item["goodstypecode2"];
+                    drowRow["OutKilnCount"] = outkilncountnew; 
+                    drowRow["GoodCount"] = item["GoodCount"];
+                    drowRow["SubstandardCount"] = item["SubstandardCount"];
+                    drowRow["Qualified"] = item["Qualified"];
+                    drowRow["BadCount"] = item["BadCount"];
+                    drowRow["ReFireCount"] = item["ReFireCount"]; 
+                    drowRow["GCount"] = item["GCount"];
+                    if (drs != null && drs.Length > 0 && outkilncountnew > 0)
+                    { 
+                        drowRow["OutGCount"] = Math.Round(outkilncountnew * 1.0 / Convert.ToInt32(item["GCount"]), 4);
+                        drowRow["GoodGCount"] = Math.Round(goodCount * 1.0 / Convert.ToInt32(item["GCount"]), 4);
+                        drowRow["GoodPercent"] = Math.Round(Convert.ToInt32(item["GoodCount"]) * 1.0 / outkilncountnew, 4);
+                        drowRow["SubstandardPercent"] = Math.Round(Convert.ToInt32(item["SubstandardCount"]) * 1.0 / outkilncountnew, 4);
+                        drowRow["QualifiedPercent"] = Math.Round(Convert.ToInt32(item["Qualified"]) * 1.0 / outkilncountnew, 4);
+                        drowRow["BadPercent"] = Math.Round(Convert.ToInt32(item["BadCount"]) * 1.0 / outkilncountnew, 4);
+                        drowRow["ReFirePercent"] = Math.Round(Convert.ToInt32(item["ReFireCount"]) * 1.0 / outkilncountnew, 4);
+                    }
+                    else
+                    { 
+                        drowRow["OutGCount"] = DBNull.Value;
+                        drowRow["GoodGCount"] = DBNull.Value;
+                        drowRow["GoodPercent"] = DBNull.Value;
+                        drowRow["SubstandardPercent"] = DBNull.Value;
+                        drowRow["QualifiedPercent"] = DBNull.Value;
+                        drowRow["BadPercent"] = DBNull.Value;
+                        drowRow["ReFirePercent"] = DBNull.Value;
+                    }
+
+                    // 添加到临时集合
+                    newRows.Add(drowRow); 
+                }
+
+                // 遍历结束后,统一把新行添加到DataTable
+                foreach (DataRow row in newRows)
+                {
+                    data.Rows.Add(row);
                 }
 
-                sre.Data = new DataSet();
                 sre.Data.Tables.Add(data);
                 return sre;
             }
@@ -4866,6 +4940,166 @@ namespace Dongke.IBOSS.PRD.Service.ReportModuleLogic
         }
 
         /// <summary>
+        /// 获取RPT040105画面(质量报表-)的查询sql-本烧的数据260402
+        /// </summary>
+        /// <returns>sql</returns>
+        private static string GetRPT040105S1SQLNew(SUserInfo user, RPT040105_SE se, ref List<OracleParameter> parameters)
+        {
+            parameters.Add(new OracleParameter(":in_AccountID", OracleDbType.Int32, user.AccountID, ParameterDirection.Input));
+            parameters.Add(new OracleParameter(":in_OutProcedureIDS", OracleDbType.Varchar2, se.OutProcedureIDS, ParameterDirection.Input));
+            parameters.Add(new OracleParameter(":in_rptSprocedureId", OracleDbType.Int32, se.RptSProcedureID, ParameterDirection.Input));
+            // 202603604              
+            StringBuilder selSql = new StringBuilder();
+
+            string sqlString =
+            @"   SELECT pcpl.productionlinename 
+                  ,mstgoodstype2.goodstypename goodstypename2
+                  ,mstgoodstype2.goodstypecode goodstypecode2
+                  ,ppcc.dtsource   ,COUNT(DISTINCT ppcc.barcode) outkilncount
+                FROM ( SELECT DISTINCT nvl(pd61.goodsleveltypeid, pd.goodsleveltypeid) goodsleveltypeid
+                               ,pd.barcode
+                               ,pd.productionlineid
+                               ,pd.goodsid
+                               ,pd.kilnid
+                               ,pd.kilncarbatchno
+                               ,1 cc  
+                                 ,CASE
+                                    WHEN pd.procedureid IN (55, 13) THEN
+                                     '本烧'
+                                    WHEN pd.procedureid IN (24) THEN
+                                     '重烧'
+                                    ELSE
+                                     '冷修'
+                                END dtsource
+                  FROM(SELECT *
+                          FROM(SELECT pd28.productionlineid
+                                      , pd28.goodsid
+                                      , pd28.goodscode
+                                      , pd28.goodsleveltypeid
+                                      , pd28.groutingdailydetailid
+                                      , pd28.kilnid
+                                      , pd24.procedureid
+                                      , pd28.kilncarbatchno
+                                      , pd28.barcode
+                                      , pd28.productiondataid
+                                      , row_number() over(PARTITION BY pd28.productiondataid ORDER BY pd24.productiondataid DESC) AS rownums
+                                  FROM tp_pm_productiondata pd28-- 重烧质量登记
+                                 INNER JOIN tp_pm_productiondata pd24-- 重烧修补24 / 冷补42
+                                    ON pd24.groutingdailydetailid = pd28.groutingdailydetailid
+                                 INNER JOIN tp_pm_groutingdailydetail gdd
+                                    ON gdd.groutingdailydetailid = pd28.groutingdailydetailid
+                                 WHERE pd28.procedureid in (16 )  
+                                   AND pd28.valueflag = 1
+                                   AND pd24.valueflag = 1 ";
+            selSql.Append(sqlString); 
+            // 试验标识
+            if (!string.IsNullOrEmpty(se.TestMouldFlag))
+            {
+                selSql.Append("  AND gdd.TestMouldFlag = :TestMouldFlag  ");
+                parameters.Add(new OracleParameter(":TestMouldFlag", OracleDbType.Char, se.TestMouldFlag, ParameterDirection.Input));
+            }
+            if (se.CreateTimeStart.HasValue)
+            {
+                //selSql.Append("    AND pd.checktime >= :checktimeStart\n");
+                selSql.Append("    AND pd28.checktime >= :CreateTimeStart\n");
+                parameters.Add(new OracleParameter(":CreateTimeStart", OracleDbType.Date, se.CreateTimeStart.Value, ParameterDirection.Input));
+            }
+            if (se.CreateTimeEnd.HasValue)
+            {
+                //selSql.Append("    AND pd.checktime < :checktimeEnd\n");
+                selSql.Append("    AND pd28.checktime < :CreateTimeEnd\n");
+                parameters.Add(new OracleParameter(":CreateTimeEnd", OracleDbType.Date, se.CreateTimeEnd.Value, ParameterDirection.Input));
+            }
+            if (!string.IsNullOrEmpty(se.GoodsIDS))
+            {
+                selSql.Append("    AND instr(','||:GoodsIDS||',', ','||pd28.GoodsId||',') > 0\n");
+                parameters.Add(new OracleParameter(":GoodsIDS", OracleDbType.NVarchar2, se.GoodsIDS, ParameterDirection.Input));
+            }
+            if (se.ProductionLineID.HasValue)
+            {
+                selSql.Append("    AND pd28.ProductionLineId = :ProductionLineID\n");
+                parameters.Add(new OracleParameter(":ProductionLineID", OracleDbType.Int32, se.ProductionLineID, ParameterDirection.Input));
+            }
+            if (!string.IsNullOrEmpty(se.GroutingUserIDS))
+            {
+                selSql.Append("    AND instr(','||:GroutingUserIDS||',', ','||pd28.groutinguserid||',') > 0\n");
+                parameters.Add(new OracleParameter(":GroutingUserIDS", OracleDbType.NVarchar2, se.GroutingUserIDS, ParameterDirection.Input));
+            }
+            if (!string.IsNullOrEmpty(se.GroutingLineIDS))
+            {
+                selSql.Append("    AND instr(','||:GroutingLineIDS||',', ','||pd28.groutinglineid||',') > 0\n");
+                parameters.Add(new OracleParameter(":GroutingLineIDS", OracleDbType.NVarchar2, se.GroutingLineIDS, ParameterDirection.Input));
+            }
+            if (se.KilnID.HasValue)
+            {
+                selSql.Append("    AND pd28.KilnID = :KilnID\n");
+                parameters.Add(new OracleParameter(":KilnID", OracleDbType.Int32, se.KilnID, ParameterDirection.Input));
+            }
+            sqlString = @"  AND pd24.procedureid IN (55, 13, 42)
+                          AND pd24.productiondataid < pd28.productiondataid) t
+                         WHERE rownums = 1
+                           AND t.procedureid IN (55, 13)) pd
+                  LEFT JOIN tp_pm_productiondata pd61 -- 重烧质量检测
+                    ON pd61.procedureid in ( 60 )
+                   AND pd61.valueflag = 1
+                   AND pd61.groutingdailydetailid = pd.groutingdailydetailid
+                   AND pd61.kilncarbatchno = pd.kilncarbatchno
+                   AND pd61.productiondataid > pd.productiondataid
+                      -- 取最近的数据
+                   AND NOT EXISTS (SELECT 1
+                          FROM tp_pm_productiondata pd28c -- 重烧质量登记 重复的
+                         WHERE pd28c.procedureid in ( 16  )  
+                           AND pd28c.valueflag = 1
+                           AND pd28c.groutingdailydetailid = pd.groutingdailydetailid
+                           AND pd28c.kilncarbatchno = pd.kilncarbatchno
+                           AND pd28c.productiondataid > pd.productiondataid
+                           AND pd28c.productiondataid < pd61.productiondataid) ";
+            selSql.Append(sqlString);
+
+            sqlString =
+            "             ) ppcc\n" +
+            "         inner join tp_pc_productionline pcpl\n" +
+            "            on pcpl.productionlineid = ppcc.productionlineid\n" +
+            "         inner join tp_mst_kiln mstkiln\n" +
+            "            on mstkiln.kilnid = ppcc.kilnid\n" +
+            "         inner join tp_mst_goods mstgoods\n" +
+            "            on mstgoods.goodsid = ppcc.goodsid\n" +
+            "         inner join tp_mst_goodstype mstgoodstype\n" +
+            "            on mstgoodstype.goodstypeid = mstgoods.goodstypeid\n" +
+            "           and mstgoodstype.accountid = mstgoods.accountid\n" +
+            "         inner join tp_mst_goodstype mstgoodstype2\n" +
+            "            on mstgoodstype2.goodstypecode =\n" +
+            "               substr(mstgoodstype.goodstypecode, 0, 6)\n" +
+            "           and :in_AccountID = mstgoodstype2.accountid\n";
+            // 产品类别
+            selSql.Append(sqlString);
+            if (!string.IsNullOrEmpty(se.GoodsTypeIDS))
+            {
+                selSql.Append("    AND instr(mstgoodstype.GOODSTYPECode,:GoodsTypeIDS)=1\n");
+                parameters.Add(new OracleParameter(":GoodsTypeIDS", OracleDbType.NVarchar2, se.GoodsTypeIDS, ParameterDirection.Input));
+            }
+            if (!string.IsNullOrEmpty(se.GoodsTypeCode))
+            {
+                selSql.Append("    AND mstgoodstype.GOODSTYPECode LIKE :GoodsTypeCode\n");
+                parameters.Add(new OracleParameter(":GoodsTypeCode", OracleDbType.NVarchar2, se.GoodsTypeCode + "%", ParameterDirection.Input));
+            }
+            else
+            {
+                selSql.Append("    AND mstgoodstype.GOODSTYPECode LIKE '%' \n");
+            }
+            sqlString = @"GROUP BY pcpl.productionlinename 
+                         ,mstgoodstype2.goodstypename
+                         ,mstgoodstype2.goodstypecode
+                         ,ppcc.dtsource
+                 ORDER BY pcpl.productionlinename
+                         ,ppcc.dtsource
+                         ,mstgoodstype2.goodstypecode ";
+
+            selSql.Append(sqlString);
+            return selSql.ToString();
+        }
+
+        /// <summary>
         /// 取得RPT040106画面(缺陷报表)的查询数据
         /// </summary>
         /// <param name="user">登录用户信息</param>