Jelajahi Sumber

新版施釉车间看板

李士越 1 tahun lalu
induk
melakukan
8730b6a822
1 mengubah file dengan 358 tambahan dan 18 penghapusan
  1. 358 18
      wwwroot/main/Procedure/test14/demo.ashx

+ 358 - 18
wwwroot/main/Procedure/test14/demo.ashx

@@ -8,10 +8,12 @@ using System.Collections.Generic;
 using System.Data;
 using System.Web;
 using System.Web.SessionState;
+using System.Linq;
+public class demo : IHttpHandler
+{
 
-public class demo : IHttpHandler {
-
-    public void ProcessRequest (HttpContext context) {
+    public void ProcessRequest(HttpContext context)
+    {
         context.Response.ContentType = "text/plain";
         context.Response.ContentType = "text/plain";
         using (IDataAccess conn = DataAccess.Create())
@@ -42,8 +44,8 @@ public class demo : IHttpHandler {
             }
         }
         using (IDataAccess conn = DataAccess.Create())
-			{
-				//吹尘工号产量柱状图
+        {
+            //吹尘工号产量柱状图
             if (context.Request["m"].ToString() == "cc")
             {
                 string sqlStr = @"	SELECT
@@ -74,7 +76,7 @@ public class demo : IHttpHandler {
                 string jsonStr = new JsonResult(dt).ToJson();
                 context.Response.Write(jsonStr);
             }
-			}
+        }
         using (IDataAccess conn = DataAccess.Create())
         {
             //施釉工号产量柱状图
@@ -103,17 +105,19 @@ public class demo : IHttpHandler {
 
         using (IDataAccess conn = DataAccess.Create())
         {
-            //归属施釉缺陷扇形图
+            //归属施釉缺陷(今日TOP3) 
             if (context.Request["m"].ToString() == "defect")
             {
                 string sqlStr = @"SELECT
 										T.S_NAME AS 缺陷名称,
-										T.数量 
+										T.数量 ,
+										 T.缺陷工序编码
 									FROM
 										(
 										SELECT
 											TMD.S_NAME,
-											count( DISTINCT TPD.BARCODE ) AS 数量 
+											count( DISTINCT TPD.BARCODE ) AS 数量 ,
+											TPD.DEFECTUSERCODE AS 缺陷工序编码
 										FROM
 											TP_PM_DEFECT TPD
 											LEFT JOIN TP_MST_DEFECT TMD ON TPD.DEFECTID = TMD.DEFECTID
@@ -126,17 +130,160 @@ public class demo : IHttpHandler {
 											AND TPGL.TESTFLAG = 0 
 											AND TPD.DEFECTDEDUCTIONNUM >=1
 											AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' ) 
-											AND TPPD.CHECKBATCHNO = 1
+											AND TPPD.CHECKBATCHNO = 1 
+											AND TPD.VALUEFLAG = 1
+											AND TPD.DEFECTUSERCODE NOT IN('YL1')
 										GROUP BY
-											TMD.S_NAME 
+											TMD.S_NAME ,TPD.DEFECTUSERCODE
 										ORDER BY
-											count( * ) DESC 
-										) T 
-									WHERE
-										ROWNUM < 4";
+											COUNT( * ) DESC 
+										) T ";
                 //直接获取不分页数据
                 DataTable dt = conn.ExecuteDatatable(sqlStr);
-                string jsonStr = new JsonResult(dt).ToJson();
+                //创建返回值
+                DataTable dt归属施釉缺陷 = new DataTable();
+                DataTable dt月成品缺陷0105 = new DataTable();
+                DataTable dt月成品缺陷0204 = new DataTable();
+                //所需缺陷代码
+                List<String> S0105 = new List<string>() { "SSY001", "SSY005" };
+                List<String> S0204 = new List<string>() { "SSY002", "SSY004" };
+                //添加表头
+                for (int i = 0; i < 2; i++)
+                {
+                    dt归属施釉缺陷.Columns.Add(dt.Columns[i].ColumnName);
+                    dt月成品缺陷0105.Columns.Add(dt.Columns[i].ColumnName);
+                    dt月成品缺陷0204.Columns.Add(dt.Columns[i].ColumnName);
+                }
+                //创建归属施釉缺陷所需数据
+                var aaa = dt.AsEnumerable().GroupBy(row => row.Field<string>("缺陷名称")).Select(group =>
+                new { 缺陷名称 = group.Key, 数量 = group.Sum(row => row.Field<decimal>("数量")) }).
+                OrderByDescending(ex => ex.数量).Take(3);
+                //添加表体
+                foreach (var item in aaa)
+                {
+                    var dr归属施釉缺陷 = dt归属施釉缺陷.NewRow();
+                    dr归属施釉缺陷["缺陷名称"] = item.缺陷名称;
+                    dr归属施釉缺陷["数量"] = item.数量;
+                    dt归属施釉缺陷.Rows.Add(dr归属施釉缺陷);
+                }
+                //创建月成品缺陷0105所需数据
+                var bbb = dt.AsEnumerable().Where(ex => S0105.Contains(ex.Field<string>("缺陷工序编码")))
+                           .GroupBy(row => row.Field<string>("缺陷名称")).Select(group =>
+                     new { 缺陷名称 = group.Key, 数量 = group.Sum(row => row.Field<decimal>("数量")) }).
+                     OrderByDescending(ex => ex.数量).Take(5);
+
+                //添加表体
+                foreach (var item in bbb)
+                {
+                    var dr月成品缺陷0105 = dt月成品缺陷0105.NewRow();
+                    dr月成品缺陷0105["缺陷名称"] = item.缺陷名称;
+                    dr月成品缺陷0105["数量"] = item.数量;
+                    dt月成品缺陷0105.Rows.Add(dr月成品缺陷0105);
+                }
+                //创建月成品缺陷0204所需数据
+                var ccc = dt.AsEnumerable().Where(ex => S0204.Contains(ex.Field<string>("缺陷工序编码")))
+                .GroupBy(row => row.Field<string>("缺陷名称")).Select(group =>
+                 new { 缺陷名称 = group.Key, 数量 = group.Sum(row => row.Field<decimal>("数量")) }).
+                OrderByDescending(ex => ex.数量).Take(5);
+                //添加表体
+                foreach (var item in ccc)
+                {
+                    var dr月成品缺陷0204 = dt月成品缺陷0204.NewRow();
+                    dr月成品缺陷0204["缺陷名称"] = item.缺陷名称;
+                    dr月成品缺陷0204["数量"] = item.数量;
+                    dt月成品缺陷0204.Rows.Add(dr月成品缺陷0204);
+                }
+                //返回值对象
+                DataSet result = new DataSet();
+                result.Tables.Add(dt归属施釉缺陷);
+                result.Tables.Add(dt月成品缺陷0105);
+                result.Tables.Add(dt月成品缺陷0204);
+                string jsonStr = new JsonResult(result).ToJson();
+                context.Response.Write(jsonStr);
+            }
+        }
+        using (IDataAccess conn = DataAccess.Create())
+        {
+            //月成品缺陷(每月TOP5)
+            //SSY001 SSY002 SSY004 SSY005
+            if (context.Request["m"].ToString() == "defectMonth")
+            {
+                string sqlStr = @"SELECT
+										T.S_NAME AS 缺陷名称,
+										T.数量 ,
+										 T.缺陷工序编码
+									FROM
+										(
+										SELECT
+											TMD.S_NAME,
+											count( DISTINCT TPD.BARCODE ) AS 数量 ,
+											TPD.DEFECTUSERCODE AS 缺陷工序编码
+										FROM
+											TP_PM_DEFECT TPD
+											LEFT JOIN TP_MST_DEFECT TMD ON TPD.DEFECTID = TMD.DEFECTID
+											LEFT JOIN TP_PM_PRODUCTIONDATA TPPD ON TPD.BARCODE = TPPD.BARCODE
+											LEFT JOIN TP_PM_GROUTINGDAILYDETAIL PGD ON PGD.BARCODE = TPD.BARCODE
+											LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPGL.GROUTINGLINEID = PGD.GROUTINGLINEID 
+										WHERE
+											TPD.CREATETIME >= TRUNC(SYSDATE, 'MM') 
+											AND TMD.DEFECTTYPEID IN ( 17, 5 )
+											AND TPGL.TESTFLAG = 0 
+											AND TPD.DEFECTDEDUCTIONNUM >=1
+											AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' ) 
+											AND TPPD.CHECKBATCHNO = 1 
+											AND TPD.VALUEFLAG = 1
+											AND TPD.DEFECTUSERCODE NOT IN('YL1')
+										GROUP BY
+											TMD.S_NAME ,TPD.DEFECTUSERCODE
+										ORDER BY
+											COUNT( * ) DESC 
+										) T ";
+                //直接获取不分页数据
+                DataTable dt = conn.ExecuteDatatable(sqlStr);
+                //创建返回值 
+                DataTable dt月成品缺陷0105 = new DataTable();
+                DataTable dt月成品缺陷0204 = new DataTable();
+                //所需缺陷代码
+                List<String> S0105 = new List<string>() { "SSY001", "SSY005" };
+                List<String> S0204 = new List<string>() { "SSY002", "SSY004" };
+                //添加表头
+                for (int i = 0; i < 2; i++)
+                {
+                    dt月成品缺陷0105.Columns.Add(dt.Columns[i].ColumnName);
+                    dt月成品缺陷0204.Columns.Add(dt.Columns[i].ColumnName);
+                }
+                //创建月成品缺陷0105所需数据
+                var bbb = dt.AsEnumerable().Where(ex => S0105.Contains(ex.Field<string>("缺陷工序编码")))
+                           .GroupBy(row => row.Field<string>("缺陷名称")).Select(group =>
+                     new { 缺陷名称 = group.Key, 数量 = group.Sum(row => row.Field<decimal>("数量")) }).
+                     OrderByDescending(ex => ex.数量).Take(5);
+
+                //添加表体
+                foreach (var item in bbb)
+                {
+                    var dr月成品缺陷0105 = dt月成品缺陷0105.NewRow();
+                    dr月成品缺陷0105["缺陷名称"] = item.缺陷名称;
+                    dr月成品缺陷0105["数量"] = item.数量;
+                    dt月成品缺陷0105.Rows.Add(dr月成品缺陷0105);
+                }
+                //创建月成品缺陷0204所需数据
+                var ccc = dt.AsEnumerable().Where(ex => S0204.Contains(ex.Field<string>("缺陷工序编码")))
+                .GroupBy(row => row.Field<string>("缺陷名称")).Select(group =>
+                 new { 缺陷名称 = group.Key, 数量 = group.Sum(row => row.Field<decimal>("数量")) }).
+                OrderByDescending(ex => ex.数量).Take(5);
+                //添加表体
+                foreach (var item in ccc)
+                {
+                    var dr月成品缺陷0204 = dt月成品缺陷0204.NewRow();
+                    dr月成品缺陷0204["缺陷名称"] = item.缺陷名称;
+                    dr月成品缺陷0204["数量"] = item.数量;
+                    dt月成品缺陷0204.Rows.Add(dr月成品缺陷0204);
+                }
+                //返回值对象
+                DataSet result = new DataSet();
+                result.Tables.Add(dt月成品缺陷0105);
+                result.Tables.Add(dt月成品缺陷0204);
+                string jsonStr = new JsonResult(result).ToJson();
                 context.Response.Write(jsonStr);
             }
         }
@@ -520,6 +667,197 @@ public class demo : IHttpHandler {
 
         using (IDataAccess conn = DataAccess.Create())
         {
+            //施釉每日成品合格率(前7日)&&施釉每月成品合格率(前7月)&&施釉每日成品冷补缺陷率(前7日)
+            if (context.Request["m"].ToString() == "Dailypassrate")
+            {
+                string type = context.Request["type"].ToString() == "day" ? "yyyymmdd" : "yyyymm";
+                //判断是否开启施釉每日成品冷补缺陷率(前7日)
+                string repair = context.Request["repair"].ToString();
+                //出窑数 
+                string sqlStr1 = "SELECT " +
+                    "DISTINCT CASE WHEN  COUNT( TPPD.BARCODE ) IS NULL THEN 0 ELSE COUNT( TPPD.BARCODE ) END 出窑数," +
+                    "to_char( temp.CREATETIME, '"+type+"' ) AS CREATETIME " +
+                    "FROM " +
+                    "TP_PM_ProductionData TPPD " +
+                    "INNER JOIN tp_mst_goods ON tp_mst_goods.goodsid = TPPD.Goodsid " +
+                    "INNER JOIN tp_mst_goodstype ON tp_mst_goodstype.goodstypeid = tp_mst_goods.goodstypeid " +
+                    "INNER JOIN TP_MST_RptTProcedure ON TP_MST_RptTProcedure.Procedureid = TPPD.Procedureid " +
+                    "INNER JOIN tp_pc_procedure pcp ON pcp.procedureid = TPPD.Procedureid " +
+                    "INNER JOIN ( " +
+                                  "SELECT pd.Barcode, pd.Createtime " +
+                                  "FROM TP_PM_ProductionData pd " +
+                                  "INNER JOIN tp_pm_groutingdailydetail gdd ON gdd.groutingdailydetailid = pd.groutingdailydetailid " +
+                                  "WHERE pd.Accountid = 1 " +
+                                  "AND pd.isrefire = '0' " +
+                                  "AND pd.islengbu = '0' " +
+                                  "AND ( " +
+                                  "( pd.procedureid = 11 AND pd.valueflag = '1' AND ( pd.checkflag = '1' OR pd.checkflag IS NULL ) ) " +
+                                  "OR ( pd.procedureid = 104 AND pd.checkflag = '1' ) " +
+                                  ") " +
+                                  "AND PD.KILNID IN ( 1, 2, 5 )  " +
+                                  "AND PD.CREATETIME >=  CASE WHEN '"+type+"' = 'yyyymm' THEN TRUNC(ADD_MONTHS(SYSDATE, -6), 'MM')" +
+                                  "ELSE TRUNC(SYSDATE - 6) END  "+
+                                  ") temp ON TPPD.Barcode = temp.barcode " +
+                    "AND TPPD.createtime <= temp.createtime " +
+                    "WHERE TPPD.Valueflag = '1' " +
+                    "AND TP_MST_RptTProcedure.Rptprocedureid = 1 " +
+                    "AND instr( ',' || '98' || ',', ',' || TP_MST_RptTProcedure.ProcedureId || ',' ) > 0 " +
+                    "AND TPPD.usercode IN ( 'SSY001', 'SSY002', 'SSY004', 'SSY005' ) "+
+                    "GROUP BY to_char( temp.CREATETIME, '"+type+"') " +
+                    "ORDER BY to_char( temp.CREATETIME, '"+type+"' ) DESC ";
+
+                //直接获取不分页数据
+                DataTable dt1 = conn.ExecuteDatatable(sqlStr1);
+                //成检不合格数 
+                string sqlStr2 = "SELECT DISTINCT " +
+                    "NVL( COUNT( DISTINCT pmd.BARCODE ), 0 ) 成检不合格数, " +
+                    "to_char( pmd.CREATETIME, '"+type+"' ) AS CREATETIME " +
+                    "FROM " +
+                    "tp_pm_defect pmd " +
+                    "INNER JOIN TP_PM_PRODUCTIONDATA PD ON PMD.PRODUCTIONDATAID = PD.PRODUCTIONDATAID " +
+                    "AND PD.MODELTYPE IN ( - 1, - 4, - 5 ) " +
+                    "AND PD.VALUEFLAG = '1' " +
+                    "AND PD.CHECKBATCHNO = 1 " +
+                    "AND PD.ISREFIRE = '0' " +
+                    "LEFT JOIN TP_MST_Defect mstd ON pmd.DefectID = mstd.DefectID " +
+                    "LEFT JOIN TP_MST_DefectType dt ON mstd.DefectTypeID = dt.DefectTypeID " +
+                    "LEFT JOIN TP_PM_GroutingDailyDetail gdd ON gdd.Groutingdailydetailid = pd.Groutingdailydetailid " +
+                    "INNER JOIN tp_pm_productiondata hopd ON hopd.kilncarbatchno = pd.kilncarbatchno " +
+                    "AND hopd.barcode = pd.barcode " +
+                    "AND ( ( hopd.procedureid = 11 AND hopd.valueflag = '1' ) " +
+                          "OR ( hopd.procedureid = 104 AND hopd.isrefire = '0' AND hopd.checkflag = '1' ))  " +
+                    "WHERE pmd.valueflag = '1' " +
+                    "AND instr( pd.KilnCode, '3' ) > 0 " +
+                    "AND dt.DefectTypeID IN(5) " +
+                    "AND gdd.RECYCLINGFLAG = '0' " +
+                    "AND pmd.CREATETIME >= CASE WHEN '"+type+"' = 'yyyymm' THEN TRUNC( ADD_MONTHS( SYSDATE, - 6 ), 'MM' ) " +
+                         "ELSE TRUNC( SYSDATE - 6 )  END " +
+                    "AND (  ( '"+repair+"' = 'true' AND pd.GOODSLEVELID = 16 ) " +
+                         "OR ( '"+repair+"' <> 'true' AND pd.GOODSLEVELID IN ( 6, 7 ) AND pmd.DefectDeductionNum = 1" +
+                              "AND pmd.DEFECTUSERCODE IN ( 'SSY001', 'SSY002', 'SSY004', 'SSY005' ) ) )  " +
+                    "GROUP BY to_char( pmd.CREATETIME, '"+type+"' ) " +
+                    "ORDER BY to_char( pmd.CREATETIME, '"+type+"' ) DESC";
+                //直接获取不分页数据
+                DataTable dt2 = conn.ExecuteDatatable(sqlStr2);
+                DataTable restultDay = new DataTable();
+                restultDay.Columns.Add("出窑数");
+                restultDay.Columns.Add("施釉合格率");
+                restultDay.Columns.Add("日期");
+                DateTime dateTime = DateTime.Now;
+                //创建施釉缺陷所需数据
+                for (int i = 6; i >= 0; i--)
+                { 
+					string day=dateTime.AddDays(-i).ToString("yyyyMMdd");
+                    string month = dateTime.AddMonths(-i).ToString("yyyyMM");
+
+                    //出窑数
+                    var kilnexits = dt1.AsEnumerable().
+                            Where(ex => ex.Field<string>("CREATETIME") == (type == "yyyymmdd" ? day : month)).
+                            Select(ex => ex.Field<decimal>("出窑数")).FirstOrDefault();
+                    //成检不合格数
+                    var unqualified = dt2.AsEnumerable().
+                            Where(ex => ex.Field<string>("CREATETIME") == (type == "yyyymmdd" ? day : month)).
+                            Select(ex => ex.Field<decimal>("成检不合格数")).FirstOrDefault();
+                    DataRow dr = restultDay.NewRow();
+                    dr["出窑数"] = kilnexits;
+                    dr["施釉合格率"] = ((kilnexits - unqualified) / kilnexits).ToString("p2");
+                    dr["日期"] = type == "yyyymmdd" ? dateTime.ToString("MM") + "." + dateTime.AddDays(-i).ToString("dd") :
+                            dateTime.ToString("yy") + "." + dateTime.AddMonths(-i).ToString("MM");
+                    restultDay.Rows.Add(dr);
+                }
+                string jsonStr = new JsonResult(restultDay).ToJson();
+                context.Response.Write(jsonStr);
+            }
+        }
+        using (IDataAccess conn = DataAccess.Create())
+        {
+            /**摘取自zx方法**/
+            //施釉每日半成品损坯率
+            if (context.Request["m"].ToString() == "DailypassrateSemifinished")
+            {
+                //出窑数 
+                string sqlStr1 = @" SELECT DISTINCT
+											CASE
+												WHEN
+													COUNT( TPPD.BARCODE ) IS NULL THEN
+														0 ELSE COUNT( TPPD.BARCODE ) 
+													END 出窑数,
+										to_char( TPPD.CREATETIME, 'yyyymmdd' ) AS CREATETIME 
+												FROM
+													TP_PM_PRODUCTIONDATA TPPD
+													LEFT JOIN TP_PM_GROUTINGDAILYDETAIL PGD ON PGD.BARCODE = TPPD.BARCODE
+													LEFT JOIN TP_PC_GROUTINGLINE TPGL ON TPGL.GROUTINGLINEID = PGD.GROUTINGLINEID 
+												WHERE
+													TPPD.PROCEDUREID IN (98) 
+													AND TPPD.CREATETIME >= trunc( SYSDATE - 6 ) 
+													AND TPPD.VALUEFLAG = 1
+													AND ( SUBSTR( TPGL.GROUTINGLINENAME, 1, 3 ) = 'C05' OR SUBSTR( TPGL.GROUTINGLINECODE, 1, 3 ) = 'C06' ) 
+													AND TPGL.TESTFLAG = 0 
+													AND TPPD.ISREFIRE = 0
+														GROUP BY
+										to_char( TPPD.CREATETIME, 'yyyymmdd' ) 
+									ORDER BY
+										to_char( TPPD.CREATETIME, 'yyyymmdd' ) DESC ";
+
+                //直接获取不分页数据
+                DataTable dt1 = conn.ExecuteDatatable(sqlStr1);
+                //损坏数当日损毁且走过3#施釉并且损毁工序为30014,30020,30021(119, 115, 98)
+                string sqlStr2 = @"SELECT DISTINCT
+								   COUNT(a.BARCODE)AS 损坯数 ,
+								  a.CREATETIME 	 
+                                   FROM
+                	              (
+                	             SELECT DISTINCT sp.BARCODE , to_char( 	sp.CREATETIME , 'yyyymmdd' ) AS CREATETIME  
+								 FROM
+                		         tp_pm_scrapproduct sp
+                		         LEFT JOIN TP_PM_ResponProcedure rp ON rp.scrapproductid = sp.scrapproductid
+                		         LEFT JOIN tp_pc_procedure p ON p.procedureid = sp.procedureid 
+                	             WHERE
+                		         sp.valueflag = '1' 
+                		         AND sp.AuditStatus = '1' 
+                		         AND sp.accountid = 1 
+                		         AND sp.GoodsLevelTypeID IN ( 8, 9 ) -- 8损坯、9干补
+                		         AND sp.CREATETIME>= trunc( SYSDATE - 6 )
+                		         AND sp.IsReFire <> '6' 
+                		         AND sp.ScrapType = '0' 
+                		         AND rp.ProcedureID IN ( 119, 115, 98 )
+								 ) a
+                	            INNER JOIN  TP_PM_PRODUCTIONDATA TPPD ON TPPD.BARCODE = a.BARCODE 
+                	            WHERE 	TPPD.PROCEDUREID = 98 
+                		        GROUP BY a.CREATETIME
+                		        ORDER BY a.CREATETIME DESC";
+                DataTable dt2 = conn.ExecuteDatatable(sqlStr2);
+                DataTable restultDay = new DataTable();
+                restultDay.Columns.Add("出窑数");
+                restultDay.Columns.Add("损坯率");
+                restultDay.Columns.Add("日期");
+                DateTime dateTime = DateTime.Now;
+                //创建施釉半成品损坯所需数据
+                for (int i = 6; i >= 0; i--)
+                {
+                    string day = dateTime.AddDays(-i).ToString("yyyyMMdd");
+
+                    //出窑数
+                    var kilnexits = dt1.AsEnumerable().
+                            Where(ex => ex.Field<string>("CREATETIME") == day).
+                            Select(ex => ex.Field<decimal>("出窑数")).FirstOrDefault();
+                    //损坯数
+                    var unqualified = dt2.AsEnumerable().
+                            Where(ex => ex.Field<string>("CREATETIME") == day).
+                            Select(ex => ex.Field<decimal>("损坯数")).FirstOrDefault();
+                    DataRow dr = restultDay.NewRow();
+                    dr["出窑数"] = kilnexits;
+                    dr["损坯率"] = ((kilnexits - unqualified) / kilnexits).ToString("p2");
+                    dr["日期"] = dateTime.ToString("MM") + "." + dateTime.AddDays(-i).ToString("dd");
+
+                    restultDay.Rows.Add(dr);
+                }
+                string jsonStr = new JsonResult(restultDay).ToJson();
+                context.Response.Write(jsonStr);
+            }
+        }
+        using (IDataAccess conn = DataAccess.Create())
+        {
             //产线信息
 
             if (context.Request["m"].ToString() == "MonthTable")
@@ -772,8 +1110,10 @@ public class demo : IHttpHandler {
         }
     }
 
-    public bool IsReusable {
-        get {
+    public bool IsReusable
+    {
+        get
+        {
             return false;
         }
     }