Jelajahi Sumber

修改售后统计,修改查询商品

zhuyiyi 2 minggu lalu
induk
melakukan
25b638cf75

+ 1 - 0
SiteCore/Handler/sync.getbase.cs

@@ -211,6 +211,7 @@ namespace SiteCore.Handler
                     return;
                 }
             }
+            where.Add(" isDel = 0");
             if (where.Count > 0)
             {
                 sql += "where " + string.Join(" and ", where);

+ 1 - 0
SiteCore/Handler/sync.order.cs

@@ -65,6 +65,7 @@ namespace SiteCore.Handler
             string poscode = CurrentUser.UserPost.Post.Code;
 
             DataStruct dStruct = GetPostStruct();
+            //commonHelper.setDeliveryUnusualOrder2();
             //string a = SecurityHelper.DecryptSymmetric("kncY+n90QZs=");
             //apiHelper.API_GetWaybill("ZTO-CAINIAO-TZJK", "4233447147588233939");
             //apiHelper.API_LogisticsOnlineSend("2460807662231834875", "yujia", "YTO-GDCYT", "YT7524607355919");

+ 92 - 3
SiteCore/Handler/sync.orderReport.cs

@@ -1702,7 +1702,7 @@ namespace SiteCore.Handler
             }
 
             StringBuilder sql = new StringBuilder();
-            sql.AppendFormat("SELECT o.AfterSaleUserId AS UserId, u.name AS UserName, COUNT(*) AS Total, COUNT(CASE WHEN o.AfterSaleState IN (2, 3) THEN 1 END) AS InProgress, COUNT(CASE WHEN o.AfterSaleState >= 4 THEN 1 END) AS Completed,COUNT ( CASE WHEN o.AfterSaleBackReason != '' THEN 1 END ) AS back, SUM ( a.ChangeNum ) AS ChangeNum ,SUM ( a.ReprintOut ) AS ReprintOut,SUM ( a.PreTimeOut ) AS PreTimeOut,SUM ( a.DisagreeTimeOut ) AS DisagreeTime  ,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 Ce_ErpTradeAfterSaleExtend a ON a.tid = o.ctid INNER JOIN CE_ErpUser u ON o.AfterSaleUserId = u.ID WHERE   o.AfterSaleState >= 1 ");
+            sql.AppendFormat("SELECT o.AfterSaleUserId AS UserId, u.name AS UserName, COUNT(*) AS Total, SUM(CASE WHEN TextResult in ('联系不上客户','待处理') THEN 1 ELSE 0 END) AS InProgress, SUM(CASE WHEN TextResult in ('联系不上客户','待处理') THEN 0 ELSE 1 END) AS Completed,COUNT ( CASE WHEN o.AfterSaleBackReason != '' THEN 1 END ) AS back, SUM ( a.ChangeNum ) AS ChangeNum ,SUM ( a.ReprintOut ) AS ReprintOut,SUM ( a.PreTimeOut ) AS PreTimeOut,SUM ( a.DisagreeTimeOut ) AS DisagreeTime  ,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 Ce_ErpTradeAfterSaleExtend a ON a.tid = o.ctid INNER JOIN CE_ErpUser u ON o.AfterSaleUserId = u.ID WHERE   o.AfterSaleState >= 1 ");
             if (date1.Length > 0)
             {
                 sql.AppendFormat(" AND o.HandleTime >= '{0}'  AND o.HandleTime < '{1}'", date1, date2);
@@ -2036,6 +2036,95 @@ namespace SiteCore.Handler
 
             }
 
+            sql.AppendFormat("SELECT o.AfterSaleReason, COUNT ( * ) AS total ,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 Ce_ErpTradeAfterSaleExtend a ON o.ctid = a.tid  WHERE o.AfterSaleState >= 1  {0} GROUP BY o.AfterSaleReason", sqlDate);
+            DataTable dtafter = DbHelper.DbConn.ExecuteDataset(sql.ToString()).Tables[0];
+
+            DataTable dt = new DataTable();
+            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)));
+            dt.Columns.Add(new DataColumn("isComplain", typeof(string)));
+            DataRow dr_he = dt.NewRow();
+            dr_he[0] = "合计";
+            dr_he[1] = 0;
+            dr_he[2] = 0;
+            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();
+                string[] reason_list = reason.Split(new char[] { '|' });
+                DataRow dr = dt.NewRow();
+                if (reason_list.Length > 0)
+                {
+                    dr[0] = reason_list[0];
+                }
+                if (reason_list.Length > 1)
+                {
+                    dr[1] = reason_list[1];
+                }
+                if (reason_list.Length > 2)
+                {
+                    dr[2] = reason_list[2];
+                }
+                if (reason_list.Length > 3)
+                {
+                    dr[3] = reason_list[3];
+                }
+                dr[4] = row["total"];
+                dr[5] = 0;
+                dr[6] = row["isBad"];
+                dr[7] = row["isComplain"];
+
+                dt.Rows.Add(dr);
+                dr_he[4] = Convert.ToDecimal(dr_he[4]) + Convert.ToDecimal(dr[4]);
+            }
+            foreach (DataRow row in dt.Rows)
+            {
+                row[5] = Math.Round(Math.Round(Convert.ToDecimal(row[4]) / Convert.ToDecimal(dr_he[4]), 4) * 100, 2);
+            }
+            dr_he[5] = 100;
+            DataView dv = new DataView(dt);
+            //dv.Sort = "AllOrder desc";
+            DataTable dtNew = dv.ToTable();
+            writeGridDataTableJson(dtNew.Rows.Count, dtNew);
+
+        }
+        public void get_erp_aftersale_product_reason_gather()
+        {
+            string date1 = GetPostString("date1");
+            string date2 = GetPostString("date2");
+            string pay_date1 = GetPostString("pay_date1");
+            string pay_date2 = GetPostString("pay_date2");
+
+            if (date1.Length <= 0 && pay_date1.Length <= 0)
+            {
+                pay_date1 = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0).ToString("yyyy-MM-dd HH:mm:ss");
+                pay_date2 = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59).ToString("yyyy-MM-dd HH:mm:ss");
+            }
+
+            StringBuilder sql = new StringBuilder();
+
+            StringBuilder sqlDate = new StringBuilder();
+
+            if (date1.Length > 0)
+            {
+                sqlDate.AppendFormat("and o.HandleTime >= '{0}' AND o.HandleTime < '{1}'", date1, date2);
+
+            }
+            if (pay_date1.Length > 0)
+            {
+                sqlDate.AppendFormat("and o.pay_time >= '{0}' AND o.pay_time < '{1}'", pay_date1, pay_date2);
+
+            }
+
             sql.AppendFormat("SELECT o.AfterSaleReason,p.PType, COUNT ( * ) AS total ,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 CE_ErpProduct p ON o.ProductId = p.id LEFT JOIN Ce_ErpTradeAfterSaleExtend a ON o.ctid = a.tid  WHERE o.AfterSaleState >= 1  {0} GROUP BY o.AfterSaleReason,p.PType", sqlDate);
             DataTable dtafter = DbHelper.DbConn.ExecuteDataset(sql.ToString()).Tables[0];
 
@@ -2439,7 +2528,7 @@ namespace SiteCore.Handler
                 }
             }
             decimal chushu = Convert.ToDecimal(dr_he[2]) == 0 ? 1 : Convert.ToDecimal(dr_he[2]);
-            decimal pgrate = Math.Round(Convert.ToDecimal(dr_he[1]) / Convert.ToDecimal(dr_he[2]), 4);
+            decimal pgrate = Convert.ToDecimal(dr_he[2]) == 0 ? 0 : Math.Round(Convert.ToDecimal(dr_he[1]) / Convert.ToDecimal(dr_he[2]), 4);
             dr_he[3] = Math.Round(pgrate * 100, 2);
             dt.Rows.Add(dr_he);
             DataView dv = new DataView(dt);
@@ -2535,7 +2624,7 @@ namespace SiteCore.Handler
                     row[4] = Math.Round(Math.Round(Convert.ToDecimal(row[1]) / Convert.ToDecimal(totalAfter), 4) * 100, 2);
                 }
             }
-            decimal pgrate = Math.Round(Convert.ToDecimal(dr_he[1]) / Convert.ToDecimal(dr_he[2]), 4);
+            decimal pgrate = Convert.ToDecimal(dr_he[2]) == 0 ? 0 : Math.Round(Convert.ToDecimal(dr_he[1]) / Convert.ToDecimal(dr_he[2]), 4);
             dr_he[3] = Math.Round(pgrate * 100, 2);
             dt.Rows.Add(dr_he);
             DataView dv = new DataView(dt);

+ 1 - 1
SiteCore/taobao/commonHelper.cs

@@ -499,7 +499,7 @@ namespace SiteCore
                             continue;
                         }
                         StringBuilder timerSql = new StringBuilder();
-                        timerSql.AppendFormat("SELECT * FROM CE_ErpSupplierProductTime WHERE supplierId={0}", supplierId);
+                        timerSql.AppendFormat("SELECT * FROM CE_ErpSupplierProductTime WHERE supplierId={0} order by quantity", supplierId);
                         DataTable timerTable = DbHelper.DbConn.ExecuteDataset(timerSql.ToString()).Tables[0];
                         //没配置时间
                         if (timerTable == null || timerTable.Rows.Count == 0)

+ 17 - 1
Web/ECharts/AfterSaleGather.aspx

@@ -376,6 +376,7 @@
                                 <div field="AllOrder" datatype="int" width="60" align="center" headeralign="center" allowsort="true">总数量</div>
                                 <div field="Handling" datatype="int" width="60" align="center" headeralign="center" allowsort="true">处理中</div>
                                 <div field="Finish" datatype="int" width="60" align="center" headeralign="center" allowsort="true">已完成</div>
+                                <div field="FinishRate" datatype="int" width="60" align="center" headeralign="center" allowsort="true">解决率</div>
                                 <div field="ChangeNum" datatype="int" width="60" align="center" headeralign="center" allowsort="true">判责错误数</div>
                                 <div field="DisagreeTime" datatype="int" width="60" align="center" headeralign="center" allowsort="true">打回超时</div>
                                 <div field="PreTimeOut" datatype="int" width="60" align="center" headeralign="center" allowsort="true">未处理超时</div>
@@ -421,11 +422,26 @@
                     </div>
                 </div>
                 <div style="display: flex; gap: 10px">
+                    <div id="total_product_reason_grid_panel" class="mini-panel mini-panel-info" title="产品原因" style="width: 50%; padding: 0px">
+                        <div id="total_product_reason_grid" class="mini-datagrid panel" sortmode="client" style="width: 100%; height: 300px;" showemptytext="true" showpager="false" ondrawsummarycell="onDrawSummaryCell"
+                            emptytext="暂无记录" url="../handler/sync.ashx?t=get_erp_aftersale_product_reason_gather">
+                            <div property="columns">
+                                <div field="PType" name="PType" width="60" align="center" headeralign="center" allowsort="true">品类</div>
+                                <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>
+                                <div field="isComplain" datatype="int" width="60" align="center" headeralign="center" allowsort="true">投诉</div>
+                            </div>
+                        </div>
+                    </div>
                     <div id="total_reason_grid_panel" class="mini-panel mini-panel-info" title="原因" style="width: 50%; padding: 0px">
                         <div id="total_reason_grid" class="mini-datagrid panel" sortmode="client" style="width: 100%; height: 300px;" showemptytext="true" showpager="false" ondrawsummarycell="onDrawSummaryCell"
                             emptytext="暂无记录" url="../handler/sync.ashx?t=get_erp_aftersale_reason_gather">
                             <div property="columns">
-                                <div field="PType" name="PType" width="60" align="center" headeralign="center" allowsort="true">品类</div>
                                 <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>