ソースを参照

修改售后统计

zhuyiyi 3 週間 前
コミット
82b676b9a8

+ 86 - 49
SiteCore/Handler/sync.orderReport.cs

@@ -2044,6 +2044,7 @@ namespace SiteCore.Handler
             dt.Columns.Add(new DataColumn("AfterSaleReason1", typeof(string)));
             dt.Columns.Add(new DataColumn("AfterSaleReason2", typeof(string)));
             dt.Columns.Add(new DataColumn("AfterSaleReason3", typeof(string)));
+            dt.Columns.Add(new DataColumn("AfterSaleReason4", typeof(string)));
             dt.Columns.Add(new DataColumn("total", typeof(string)));
             dt.Columns.Add(new DataColumn("rate", typeof(string)));
             dt.Columns.Add(new DataColumn("isBad", typeof(string)));
@@ -2057,6 +2058,7 @@ namespace SiteCore.Handler
             dr_he[5] = 0;
             dr_he[6] = 0;
             dr_he[7] = 0;
+            dr_he[8] = 0;
             foreach (DataRow row in dtafter.Rows)
             {
                 string reason = row["AfterSaleReason"].ToString();
@@ -2076,19 +2078,23 @@ namespace SiteCore.Handler
                 {
                     dr[3] = reason_list[2];
                 }
-                dr[4] = row["total"];
-                dr[5] = 0;
-                dr[6] = row["isBad"];
-                dr[7] = row["isComplain"];
+                if (reason_list.Length > 3)
+                {
+                    dr[4] = reason_list[3];
+                }
+                dr[5] = row["total"];
+                dr[6] = 0;
+                dr[7] = row["isBad"];
+                dr[8] = row["isComplain"];
 
                 dt.Rows.Add(dr);
-                dr_he[4] = Convert.ToDecimal(dr_he[4]) + Convert.ToDecimal(dr[4]);
+                dr_he[5] = Convert.ToDecimal(dr_he[5]) + Convert.ToDecimal(dr[5]);
             }
             foreach (DataRow row in dt.Rows)
             {
-                row[5] = Math.Round(Math.Round(Convert.ToDecimal(row[4]) / Convert.ToDecimal(dr_he[4]), 4) * 100, 2);
+                row[6] = Math.Round(Math.Round(Convert.ToDecimal(row[5]) / Convert.ToDecimal(dr_he[5]), 4) * 100, 2);
             }
-            dr_he[5] = 100;
+            dr_he[6] = 100;
             DataView dv = new DataView(dt);
             //dv.Sort = "AllOrder desc";
             DataTable dtNew = dv.ToTable();
@@ -2235,6 +2241,9 @@ namespace SiteCore.Handler
                 dt.Rows.Add(dr);
                 dr_he[1] = Convert.ToDecimal(dr_he[1]) + Convert.ToDecimal(dr[1]);
                 dr_he[2] = Convert.ToDecimal(dr_he[2]) + Convert.ToDecimal(dr[2]);
+                dr_he[5] = Convert.ToDecimal(dr_he[5]) + Convert.ToDecimal(dr[5]);
+                dr_he[6] = Convert.ToDecimal(dr_he[6]) + Convert.ToDecimal(dr[6]);
+                dr_he[7] = Convert.ToDecimal(dr_he[7]) + Convert.ToDecimal(dr[7]);
                 totalAfter += Convert.ToInt32(dr[1]);
             }
             foreach (DataRow row in dt.Rows)
@@ -2301,6 +2310,8 @@ namespace SiteCore.Handler
             dr_he[2] = 0;
             dr_he[3] = 0;
             dr_he[4] = 100;
+            dr_he[5] = 0;
+            dr_he[6] = 0;
             foreach (DataRow row in dtafter.Rows)
             {
                 DataRow dr = dt.NewRow();
@@ -2319,6 +2330,8 @@ namespace SiteCore.Handler
                 dt.Rows.Add(dr);
                 dr_he[1] = Convert.ToDecimal(dr_he[1]) + Convert.ToDecimal(dr[1]);
                 dr_he[2] = Convert.ToDecimal(dr_he[2]) + Convert.ToDecimal(dr[2]);
+                dr_he[5] = Convert.ToDecimal(dr_he[5]) + Convert.ToDecimal(dr[5]);
+                dr_he[6] = Convert.ToDecimal(dr_he[6]) + Convert.ToDecimal(dr[6]);
                 totalAfter += Convert.ToInt32(dr[1]);
             }
             foreach (DataRow row in dt.Rows)
@@ -2366,7 +2379,7 @@ namespace SiteCore.Handler
 
             }
 
-            sql.AppendFormat("SELECT u.OrgName,u.Name, COUNT ( * ) AS AllOrder, COUNT ( CASE WHEN o.AfterSaleState >= 1 THEN 1 END ) AS aftersaleOrder,COUNT ( CASE WHEN a.IsBad > 0 THEN 1 END ) AS isBad,COUNT ( CASE WHEN a.IsComplain > 0 THEN 1 END ) AS isComplain   FROM CE_ErpTradeCell o LEFT JOIN view_ErpUser u ON o.DesignUserId = u.ID LEFT JOIN Ce_ErpTradeAfterSaleExtend a ON o.ctid = a.tid  WHERE 1=1 {0}  GROUP BY u.OrgName,u.Name", sqlDate);
+            sql.AppendFormat("SELECT u.OrgName, u.Name,o.AfterSaleResponsible, COUNT ( * ) AS AllOrder, COUNT ( CASE WHEN o.AfterSaleState >= 1 THEN 1 END ) AS aftersaleOrder, COUNT ( CASE WHEN a.IsBad > 0 THEN 1 END ) AS isBad, COUNT ( CASE WHEN a.IsComplain > 0 THEN 1 END ) AS isComplain  FROM CE_ErpTradeResponsible r LEFT JOIN CE_ErpTradeCell o ON o.ctid  = r.tid LEFT JOIN view_ErpUser u ON r.UserId = u.ID LEFT JOIN Ce_ErpTradeAfterSaleExtend a ON o.ctid = a.tid  WHERE 1 = 1  AND r.type = 0  AND r.VerifyState > - 1 AND CHARINDEX( '客户问题', o.AfterSaleReason ) = 0 AND CHARINDEX( '系统问题', o.AfterSaleReason ) = 0  {0}  GROUP BY u.OrgName, o.AfterSaleResponsible,u.Name", sqlDate);
             DataTable dtafter = DbHelper.DbConn.ExecuteDataset(sql.ToString()).Tables[0];
             int totalAfter = 0;
             DataTable dt = new DataTable();
@@ -2389,24 +2402,32 @@ namespace SiteCore.Handler
             dr_he[7] = 0;
             foreach (DataRow row in dtafter.Rows)
             {
-                DataRow dr = dt.NewRow();
-                dr[0] = row["OrgName"];
-                dr[1] = row["aftersaleOrder"];
-                dr[2] = row["AllOrder"];
-                dr[4] = 0;
-                dr[5] = row["Name"];
-                dr[6] = row["isBad"];
-                dr[7] = row["isComplain"];
-                decimal rate = 0;
-                if (dr[1].ToString() != "0")
+                string afterSaleResponsible = row["AfterSaleResponsible"].ToString();
+                if (string.IsNullOrEmpty(afterSaleResponsible)) { continue; }
+                if (afterSaleResponsible.Contains("设计师"))
                 {
-                    rate = Math.Round(Convert.ToDecimal(dr[1]) / Convert.ToDecimal(dr[2]), 4);
+                    DataRow dr = dt.NewRow();
+                    dr[0] = row["OrgName"];
+                    dr[1] = row["aftersaleOrder"];
+                    dr[2] = row["AllOrder"];
+                    dr[4] = 0;
+                    dr[5] = row["Name"];
+                    dr[6] = row["isBad"];
+                    dr[7] = row["isComplain"];
+                    decimal rate = 0;
+                    if (dr[1].ToString() != "0")
+                    {
+                        rate = Math.Round(Convert.ToDecimal(dr[1]) / Convert.ToDecimal(dr[2]), 4);
+                    }
+                    dr[3] = Math.Round(rate * 100, 2);
+                    dt.Rows.Add(dr);
+                    dr_he[1] = Convert.ToDecimal(dr_he[1]) + Convert.ToDecimal(dr[1]);
+                    dr_he[2] = Convert.ToDecimal(dr_he[2]) + Convert.ToDecimal(dr[2]);
+                    dr_he[6] = Convert.ToDecimal(dr_he[6]) + Convert.ToDecimal(dr[6]);
+                    dr_he[7] = Convert.ToDecimal(dr_he[7]) + Convert.ToDecimal(dr[7]);
+                    totalAfter += Convert.ToInt32(dr[1]);
                 }
-                dr[3] = Math.Round(rate * 100, 2);
-                dt.Rows.Add(dr);
-                dr_he[1] = Convert.ToDecimal(dr_he[1]) + Convert.ToDecimal(dr[1]);
-                dr_he[2] = Convert.ToDecimal(dr_he[2]) + Convert.ToDecimal(dr[2]);
-                totalAfter += Convert.ToInt32(dr[1]);
+
             }
             foreach (DataRow row in dt.Rows)
             {
@@ -2455,7 +2476,7 @@ namespace SiteCore.Handler
 
             }
 
-            sql.AppendFormat("SELECT u.OrgName,u.Name, COUNT ( * ) AS AllOrder, COUNT ( CASE WHEN o.AfterSaleState >= 1 THEN 1 END ) AS aftersaleOrder ,COUNT ( CASE WHEN a.IsBad > 0 THEN 1 END ) AS isBad,COUNT ( CASE WHEN a.IsComplain > 0 THEN 1 END ) AS isComplain  FROM CE_ErpTradeCell o LEFT JOIN view_ErpUser u ON o.CustomerUserId = u.ID LEFT JOIN Ce_ErpTradeAfterSaleExtend a ON o.ctid = a.tid  WHERE 1=1 {0}  GROUP BY u.OrgName,u.Name", sqlDate);
+            sql.AppendFormat("SELECT u.OrgName, u.Name,o.AfterSaleResponsible, COUNT ( * ) AS AllOrder, COUNT ( CASE WHEN o.AfterSaleState >= 1 THEN 1 END ) AS aftersaleOrder, COUNT ( CASE WHEN a.IsBad > 0 THEN 1 END ) AS isBad, COUNT ( CASE WHEN a.IsComplain > 0 THEN 1 END ) AS isComplain FROM CE_ErpTradeResponsible r LEFT JOIN CE_ErpTradeCell o ON o.ctid  = r.tid LEFT JOIN view_ErpUser u ON r.UserId = u.ID LEFT JOIN Ce_ErpTradeAfterSaleExtend a ON o.ctid = a.tid WHERE 1 = 1    AND r.type = 0  AND r.VerifyState > - 1 AND CHARINDEX( '客户问题', o.AfterSaleReason ) = 0 AND CHARINDEX( '系统问题', o.AfterSaleReason ) = 0 {0} GROUP BY u.OrgName, o.AfterSaleResponsible,u.Name", sqlDate);
             DataTable dtafter = DbHelper.DbConn.ExecuteDataset(sql.ToString()).Tables[0];
             int totalAfter = 0;
             DataTable dt = new DataTable();
@@ -2474,28 +2495,35 @@ namespace SiteCore.Handler
             dr_he[3] = 0;
             dr_he[4] = 100;
             dr_he[5] = 100;
-            dr_he[6] = 100;
-            dr_he[7] = 100;
+            dr_he[6] = 0;
+            dr_he[7] = 0;
             foreach (DataRow row in dtafter.Rows)
             {
-                DataRow dr = dt.NewRow();
-                dr[0] = row["OrgName"];
-                dr[1] = row["aftersaleOrder"];
-                dr[2] = row["AllOrder"];
-                dr[4] = 0;
-                dr[5] = row["Name"];
-                dr[6] = row["isBad"];
-                dr[7] = row["isComplain"];
-                decimal rate = 0;
-                if (dr[1].ToString() != "0")
+                string afterSaleResponsible = row["AfterSaleResponsible"].ToString();
+                if (string.IsNullOrEmpty(afterSaleResponsible)) { continue; }
+                if (afterSaleResponsible.Contains("客服"))
                 {
-                    rate = Math.Round(Convert.ToDecimal(dr[1]) / Convert.ToDecimal(dr[2]), 4);
+                    DataRow dr = dt.NewRow();
+                    dr[0] = row["OrgName"];
+                    dr[1] = row["aftersaleOrder"];
+                    dr[2] = row["AllOrder"];
+                    dr[4] = 0;
+                    dr[5] = row["Name"];
+                    dr[6] = row["isBad"];
+                    dr[7] = row["isComplain"];
+                    decimal rate = 0;
+                    if (dr[1].ToString() != "0")
+                    {
+                        rate = Math.Round(Convert.ToDecimal(dr[1]) / Convert.ToDecimal(dr[2]), 4);
+                    }
+                    dr[3] = Math.Round(rate * 100, 2);
+                    dt.Rows.Add(dr);
+                    dr_he[1] = Convert.ToDecimal(dr_he[1]) + Convert.ToDecimal(dr[1]);
+                    dr_he[2] = Convert.ToDecimal(dr_he[2]) + Convert.ToDecimal(dr[2]);
+                    dr_he[6] = Convert.ToDecimal(dr_he[6]) + Convert.ToDecimal(dr[6]);
+                    dr_he[7] = Convert.ToDecimal(dr_he[7]) + Convert.ToDecimal(dr[7]);
+                    totalAfter += Convert.ToInt32(dr[1]);
                 }
-                dr[3] = Math.Round(rate * 100, 2);
-                dt.Rows.Add(dr);
-                dr_he[1] = Convert.ToDecimal(dr_he[1]) + Convert.ToDecimal(dr[1]);
-                dr_he[2] = Convert.ToDecimal(dr_he[2]) + Convert.ToDecimal(dr[2]);
-                totalAfter += Convert.ToInt32(dr[1]);
             }
             foreach (DataRow row in dt.Rows)
             {
@@ -2613,15 +2641,17 @@ namespace SiteCore.Handler
 
             }
 
-            sql.AppendFormat("SELECT s.ComName  ,o.AfterSaleReason, COUNT ( * ) AS AllOrder  FROM CE_ErpTradeCell o LEFT JOIN CE_ErpSupplier s ON s.ID = o.SupplierId   WHERE 1 = 1 AND o.AfterSaleState >= 1  AND o.AfterSaleResSupId > 0  {0}  GROUP BY o.AfterSaleReason, s.ComName   ORDER BY s.ComName DESC", sqlDate);
+            sql.AppendFormat("SELECT s.ComName  ,p.PType,o.AfterSaleReason, COUNT ( * ) AS AllOrder  FROM CE_ErpTradeCell o LEFT JOIN CE_ErpSupplier s ON s.ID = o.SupplierId LEFT JOIN CE_ErpProduct p ON o.ProductId = p.id   WHERE 1 = 1 AND o.AfterSaleState >= 1  AND o.AfterSaleResSupId > 0  {0}  GROUP BY o.AfterSaleReason, s.ComName,p.PType   ORDER BY s.ComName DESC", sqlDate);
             DataTable dtafter = DbHelper.DbConn.ExecuteDataset(sql.ToString()).Tables[0];
             DataTable dt = new DataTable();
             dt.Columns.Add(new DataColumn("ComName", typeof(string)));
             dt.Columns.Add(new DataColumn("AfterSaleReason1", typeof(string)));
             dt.Columns.Add(new DataColumn("AfterSaleReason2", typeof(string)));
             dt.Columns.Add(new DataColumn("AfterSaleReason3", typeof(string)));
+            dt.Columns.Add(new DataColumn("AfterSaleReason4", typeof(string)));
             dt.Columns.Add(new DataColumn("AllOrder", typeof(string)));
             dt.Columns.Add(new DataColumn("rate", typeof(string)));
+            dt.Columns.Add(new DataColumn("PType", typeof(string)));
             DataRow dr_he = dt.NewRow();
             dr_he[0] = "合计";
             dr_he[1] = 0;
@@ -2629,6 +2659,8 @@ namespace SiteCore.Handler
             dr_he[3] = 0;
             dr_he[4] = 0;
             dr_he[5] = 0;
+            dr_he[6] = 0;
+            dr_he[7] = 0;
             foreach (DataRow row in dtafter.Rows)
             {
                 string reason = row["AfterSaleReason"].ToString();
@@ -2647,17 +2679,22 @@ namespace SiteCore.Handler
                 {
                     dr[3] = reason_list[2];
                 }
-                dr[4] = row["AllOrder"];
-                dr[5] = 0;
+                if (reason_list.Length > 3)
+                {
+                    dr[4] = reason_list[3];
+                }
+                dr[5] = row["AllOrder"];
+                dr[6] = 0;
+                dr[7] = row["PType"];
 
                 dt.Rows.Add(dr);
-                dr_he[4] = Convert.ToDecimal(dr_he[4]) + Convert.ToDecimal(dr[4]);
+                dr_he[5] = Convert.ToDecimal(dr_he[5]) + Convert.ToDecimal(dr[5]);
             }
             foreach (DataRow row in dt.Rows)
             {
-                row[5] = Math.Round(Math.Round(Convert.ToDecimal(row[4]) / Convert.ToDecimal(dr_he[4]), 4) * 100, 2);
+                row[6] = Math.Round(Math.Round(Convert.ToDecimal(row[5]) / Convert.ToDecimal(dr_he[5]), 4) * 100, 2);
             }
-            dr_he[5] = 100;
+            dr_he[6] = 100;
             dt.Rows.Add(dr_he);
             DataView dv = new DataView(dt);
             //dv.Sort = "AllOrder desc";

+ 0 - 1
Web/EAfterSale/AllAfterSale.aspx

@@ -108,7 +108,6 @@
             <div field="AfterSaleSupplierMemo" visible="false" width="40" align="center" headeralign="center">不认可原因</div>
 
             <div field="seller_memo" width="40" visible="false" align="center" headeralign="center">文件名</div>
-            <div field="spu_id" width="40" visible="false" align="center" headeralign="center">spu</div>
             <div field="TextResult" width="40" visible="false" align="center" headeralign="center">客户售后结果</div>
             <div field="diffResultPrice" visible="false" align="center" headeralign="center">客户售后退差金额</div>
             <div field="IsBad" width="40" visible="false" align="center" headeralign="center" renderer="handIsBadRenderer">差评</div>

+ 3 - 0
Web/ECharts/AfterSaleGather.aspx

@@ -429,6 +429,7 @@
                                 <div field="AfterSaleReason1" name="AfterSaleReason1" width="60" align="center" headeralign="center" allowsort="true">一级原因</div>
                                 <div field="AfterSaleReason2" name="AfterSaleReason2" datatype="int" width="60" align="center" headeralign="center" allowsort="true">二级原因</div>
                                 <div field="AfterSaleReason3" name="AfterSaleReason3" datatype="int" width="60" align="center" headeralign="center" allowsort="true">三级原因</div>
+                                <div field="AfterSaleReason4" name="AfterSaleReason3" datatype="int" width="60" align="center" headeralign="center" allowsort="true">四级原因</div>
                                 <div field="total" datatype="int" width="60" align="center" headeralign="center" allowsort="true">售后数量</div>
                                 <div field="rate" datatype="int" width="60" align="center" headeralign="center" allowsort="true">售后占比</div>
                                 <div field="isBad" datatype="int" width="60" align="center" headeralign="center" allowsort="true">差评</div>
@@ -458,9 +459,11 @@
                         emptytext="暂无记录" url="../handler/sync.ashx?t=get_erp_aftersale_sup_gather">
                         <div property="columns">
                             <div field="ComName" name="ComName" width="60" align="center" headeralign="center">车间名称</div>
+                            <div field="PType" name="PType" width="60" align="center" headeralign="center">产品名称</div>
                             <div field="AfterSaleReason1" name="AfterSaleReason1" datatype="int" width="60" align="center" headeralign="center" allowsort="true">原因1</div>
                             <div field="AfterSaleReason2" name="AfterSaleReason2" datatype="int" width="60" align="center" headeralign="center" allowsort="true">原因2</div>
                             <div field="AfterSaleReason3" name="AfterSaleReason3" datatype="int" width="60" align="center" headeralign="center" allowsort="true">原因3</div>
+                            <div field="AfterSaleReason4" name="AfterSaleReason3" datatype="int" width="60" align="center" headeralign="center" allowsort="true">原因4</div>
                             <div field="AllOrder" datatype="int" width="60" align="center" headeralign="center" allowsort="true">售后数量</div>
                             <div field="rate" datatype="int" width="60" align="center" headeralign="center" allowsort="true">售后率</div>
                         </div>