Просмотр исходного кода

修改新加工单处理效率报表(列表,导出)

lihai лет назад: 7
Родитель
Сommit
5fb17bbcef

+ 155 - 71
codegit/CallCenterApi/CallCenterApi.Interface/CallCenterApi.Interface/Controllers/report/BusinessController.cs

@@ -12,8 +12,11 @@ namespace CallCenterApi.Interface.Controllers.report
12 12
     //[Authority]
13 13
     public class BusinessController : BaseController
14 14
     {
15
+        BLL.T_Wo_WorkOrderItem bllWoItem = new BLL.T_Wo_WorkOrderItem();
16
+
17
+        #region 工单处理效率
15 18
         /// <summary>
16
-        /// 工单流程执行效率分析
19
+        /// 工单处理效率
17 20
         /// </summary>
18 21
         /// <returns></returns>
19 22
         public ActionResult GetWorkEfficiency()
@@ -21,95 +24,174 @@ namespace CallCenterApi.Interface.Controllers.report
21 24
             ActionResult res = NoToken("未知错误,请重新登录");
22 25
             if (Request.IsAuthenticated)
23 26
             {
24
-                string strstarttime = HttpUtility.UrlDecode(RequestString.GetQueryString("starttime"));
25
-                string strendtime = HttpUtility.UrlDecode(RequestString.GetQueryString("endtime"));
27
+                DataTable dt = new DataTable();
28
+                string stime = HttpUtility.UrlDecode(RequestString.GetQueryString("starttime"));
29
+                string endtime = HttpUtility.UrlDecode(RequestString.GetQueryString("endtime"));
30
+                string dpt = HttpUtility.UrlDecode(RequestString.GetQueryString("dpt"));
31
+                
32
+                dt = getData(stime, endtime, dpt);
33
+                res = Success("成功", dt);
34
+            }
35
+            return res;
36
+        }
26 37
 
27
-                string sql = " IsDel=0 and State=2 ";
38
+        /// <summary>
39
+        /// 工单处理效率 - 方法
40
+        /// </summary>
41
+        /// <param name="strstarttime"></param>
42
+        /// <param name="strendtime"></param>
43
+        /// <param name="dpt"></param>
44
+        /// <returns></returns>
45
+        private DataTable getData(string stime, string endtime, string dpt)
46
+        {
47
+            DataTable dt = new DataTable();
48
+            string sql = " IsDel=0 and State=1 ";
28 49
 
29
-                if (strstarttime != null && strstarttime.Trim() != "")
30
-                {
31
-                    sql += " and CreateTime>='" + strstarttime + " 00:00:00' ";
32
-                }
33
-                if (strendtime != null && strendtime.Trim() != "")
50
+            if (stime != null && stime.Trim() != "")
51
+            {
52
+                sql += " and CreateTime>='" + stime + " 00:00:00' ";
53
+            }
54
+            if (endtime != null && endtime.Trim() != "")
55
+            {
56
+                sql += " and CreateTime<='" + endtime + " 23:59:59' ";
57
+            }
58
+
59
+            if (string.IsNullOrEmpty(stime) && string.IsNullOrEmpty(endtime))
60
+            {
61
+                string strDate = DateTime.Now.ToString("yyyy-MM");
62
+                sql += " and CONVERT(varchar(7),CreateTime, 23)='" + strDate + "'";
63
+            }
64
+            //部门搜索
65
+            if (dpt != null && dpt.Trim() != "")
66
+            {
67
+                sql += $" AND CreateUser IN (SELECT F_UserCode FROM dbo.T_Sys_UserAccount WHERE F_DeptId = {dpt}) ";
68
+            }
69
+
70
+            var list = new BLL.T_Wo_WorkOrder().GetModelList(sql);
71
+            var datelist = list.Select(p => p.CreateTime.Value.ToString("yyyy-MM-dd")).Distinct();
72
+
73
+            dt.Columns.Add("Date", typeof(string));
74
+            dt.Columns.Add("Count", typeof(int));
75
+            dt.Columns.Add("TotalTime", typeof(decimal));
76
+            dt.Columns.Add("AvgTime", typeof(decimal));
77
+            //dt.Columns.Add("ZPTotalTime", typeof(decimal));
78
+            //dt.Columns.Add("ZPAvgTime", typeof(decimal));
79
+            //dt.Columns.Add("JDTotalTime", typeof(decimal));
80
+            //dt.Columns.Add("JDAvgTime", typeof(decimal));
81
+            //dt.Columns.Add("CLTotalTime", typeof(decimal));
82
+            //dt.Columns.Add("CLAvgTime", typeof(decimal));
83
+            //处理列表(已处理)
84
+            //var listItem = bllWoItem.GetList(" 1=1 AND Type = 1 ");
85
+            foreach (var date in datelist)
86
+            {
87
+                var everylist = list.Where(p => p.CreateTime.Value.ToString("yyyy-MM-dd") == date);
88
+
89
+                string ids = string.Empty;
90
+                foreach (var l in everylist.Select(p => p.WorkOrderID))
34 91
                 {
35
-                    sql += " and CreateTime<='" + strendtime + " 23:59:59' ";
92
+                    if (string.IsNullOrEmpty(ids))
93
+                    {
94
+                        ids = l;
95
+                    }
96
+                    else
97
+                    {
98
+                        ids = ids + "','" + l;
99
+                    }
100
+
36 101
                 }
37 102
 
38
-                if (string.IsNullOrEmpty(strstarttime) && string.IsNullOrEmpty(strendtime))
103
+                //var itemlist = new BLL.T_Wo_WorkOrderItem().GetModelList(" IsDel=0 and Type=1 and WorkOrderID in ('" + ids + "')");
104
+                //var TotalTimelist = everylist.Where(p => p.LastDealTime != null).Select(p => new { totaltime = p.LastDealTime.Value.Subtract(p.CreateTime.Value).TotalHours });
105
+                var TotalTimelist = everylist.Where(p => p.ReturnBakTime != null).Select(p => new { totaltime = p.ReturnBakTime.Value.Subtract(p.CreateTime.Value).TotalHours });
106
+
107
+                //var ZPList = everylist.Where(p => p.AppointTime != null).Select(p => new { totaltime = p.AppointTime.Value.Subtract(p.CreateTime.Value).TotalHours });
108
+                //var JDList = itemlist.Where(p => p.SureTime != null && p.DealTime != null).Select(p => new { totaltime = p.SureTime.Value.Subtract(p.CreateTime.Value).TotalHours });
109
+                //var CLList = itemlist.Where(p => p.SureTime != null).Select(p => new { totaltime = p.DealTime.Value.Subtract(p.SureTime.Value).TotalHours });
110
+                DataRow dr = dt.NewRow();
111
+                dr["Date"] = date;
112
+                dr["Count"] = everylist.Count();
113
+                if (TotalTimelist.Count() > 0)
39 114
                 {
40
-                    string strDate = DateTime.Now.ToString("yyyy-MM");
41
-                    sql += " and CONVERT(varchar(7),CreateTime, 23)='" + strDate + "'";
115
+                    dr["TotalTime"] = TotalTimelist.Sum(p => p.totaltime).ToString("f2");
116
+                    dr["AvgTime"] = TotalTimelist.Average(p => p.totaltime).ToString("f2");
42 117
                 }
118
+                //if (ZPList.Count() > 0)
119
+                //{
120
+                //    dr["ZPTotalTime"] = ZPList.Sum(p => p.totaltime).ToString("f2");
121
+                //    dr["ZPAvgTime"] = ZPList.Average(p => p.totaltime).ToString("f2");
122
+                //}
123
+                //if (JDList.Count() > 0)
124
+                //{
125
+                //    dr["JDTotalTime"] = JDList.Sum(p => p.totaltime).ToString("f2");
126
+                //    dr["JDAvgTime"] = JDList.Average(p => p.totaltime).ToString("f2");
127
+                //}
128
+                //if (CLList.Count() > 0)
129
+                //{
130
+                //    dr["CLTotalTime"] = CLList.Sum(p => p.totaltime).ToString("f2");
131
+                //    dr["CLAvgTime"] = CLList.Average(p => p.totaltime).ToString("f2");
132
+                //}
133
+
134
+                dt.Rows.Add(dr);
135
+            }
43 136
 
44
-                var list = new BLL.T_Wo_WorkOrder().GetModelList(sql);
45
-                var datelist = list.Select(p => p.CreateTime.Value.ToString("yyyy-MM-dd")).Distinct();
46
-
47
-                DataTable dt = new DataTable();
48
-                dt.Columns.Add("Date", typeof(string));
49
-                dt.Columns.Add("Count", typeof(int));
50
-                dt.Columns.Add("TotalTime", typeof(decimal));
51
-                dt.Columns.Add("AvgTime", typeof(decimal));
52
-                //dt.Columns.Add("ZPTotalTime", typeof(decimal));
53
-                //dt.Columns.Add("ZPAvgTime", typeof(decimal));
54
-                //dt.Columns.Add("JDTotalTime", typeof(decimal));
55
-                //dt.Columns.Add("JDAvgTime", typeof(decimal));
56
-                //dt.Columns.Add("CLTotalTime", typeof(decimal));
57
-                //dt.Columns.Add("CLAvgTime", typeof(decimal));
137
+            DataRow drsum = dt.NewRow();
138
+            drsum[0] = "总计";
58 139
 
59
-                foreach (var date in datelist)
140
+            for (int i = 1; i < dt.Columns.Count; i++)
141
+            {
142
+                decimal ecount = 0;
143
+                decimal sum = 0;
144
+                for (int j = 0; j < dt.Rows.Count; j++)
60 145
                 {
61
-                    var everylist = list.Where(p => p.CreateTime.Value.ToString("yyyy-MM-dd") == date);
62
-
63
-                    string ids = string.Empty;
64
-                    foreach (var l in everylist.Select(p => p.WorkOrderID))
146
+                    if (dt.Rows[j][i] != null)
65 147
                     {
66
-                        if (string.IsNullOrEmpty(ids))
67
-                        {
68
-                            ids = l;
69
-                        }
70
-                        else
71
-                        {
72
-                            ids = ids + "','" + l;
73
-                        }
148
+                        ecount = Convert.ToDecimal(dt.Rows[j][i].ToString());
149
+                        sum += ecount;
74 150
                     }
75
-
76
-                    var itemlist = new BLL.T_Wo_WorkOrderItem().GetModelList(" IsDel=0 and Type=1 and WorkOrderID in ('" + ids + "')");
77
-
78
-                    var TotalTimelist = everylist.Where(p => p.LastDealTime != null).Select(p => new { totaltime = p.LastDealTime.Value.Subtract(p.CreateTime.Value).TotalHours });
79
-                    //var ZPList = everylist.Where(p => p.AppointTime != null).Select(p => new { totaltime = p.AppointTime.Value.Subtract(p.CreateTime.Value).TotalHours });
80
-                    //var JDList = itemlist.Where(p => p.SureTime != null && p.DealTime != null).Select(p => new { totaltime = p.SureTime.Value.Subtract(p.CreateTime.Value).TotalHours });
81
-                    var CLList = itemlist.Where(p => p.SureTime != null).Select(p => new { totaltime = p.DealTime.Value.Subtract(p.SureTime.Value).TotalHours });
82
-                    DataRow dr = dt.NewRow();
83
-                    dr["Date"] = date;
84
-                    dr["Count"] = everylist.Count();
85
-                    if (TotalTimelist.Count() > 0)
151
+                }
152
+                if (dt.Columns.Count - 1 == i)
153
+                {
154
+                    if (dt.Rows.Count > 0)
86 155
                     {
87
-                        dr["TotalTime"] = TotalTimelist.Sum(p => p.totaltime).ToString("f2");
88
-                        dr["AvgTime"] = TotalTimelist.Average(p => p.totaltime).ToString("f2");
156
+                        drsum[i] = (sum / dt.Rows.Count).ToString("f2");
157
+                    }
158
+                    else {
159
+                        drsum[i] = 0;
89 160
                     }
90
-                    //if (ZPList.Count() > 0)
91
-                    //{
92
-                    //    dr["ZPTotalTime"] = ZPList.Sum(p => p.totaltime).ToString("f2");
93
-                    //    dr["ZPAvgTime"] = ZPList.Average(p => p.totaltime).ToString("f2");
94
-                    //}
95
-                    //if (JDList.Count() > 0)
96
-                    //{
97
-                    //    dr["JDTotalTime"] = JDList.Sum(p => p.totaltime).ToString("f2");
98
-                    //    dr["JDAvgTime"] = JDList.Average(p => p.totaltime).ToString("f2");
99
-                    //}
100
-                    //if (CLList.Count() > 0)
101
-                    //{
102
-                    //    dr["CLTotalTime"] = CLList.Sum(p => p.totaltime).ToString("f2");
103
-                    //    dr["CLAvgTime"] = CLList.Average(p => p.totaltime).ToString("f2");
104
-                    //}
105
-
106
-                    dt.Rows.Add(dr);
107 161
                 }
108
-                res = Success("成功", dt);
162
+                else
163
+                {
164
+                    drsum[i] = sum;
165
+                }
109 166
             }
167
+            dt.Rows.Add(drsum);
168
+            return dt;
169
+        }
110 170
 
171
+        /// <summary>
172
+        /// 工单处理效率导出excel
173
+        /// </summary>
174
+        /// <returns></returns>
175
+        public ActionResult ExportExcel(string stime, string endtime, string dpt)
176
+        {
177
+            ActionResult res = NoToken("未知错误,请重新登录");
178
+            if (Request.IsAuthenticated)
179
+            {
180
+                //导出dtnew
181
+                NPOIHelper npoi = new NPOIHelper();
182
+                DataTable dt = getData(stime, endtime, dpt);
183
+                if (npoi.ExportToExcel("工单地区数据报表", dt, new string[] { "日期", "工单总量", "工单总用时/时", "工单平均用时/时" }) == "")
184
+                {
185
+                    return Success("导出成功");
186
+                }
187
+                else
188
+                {
189
+                    return Error("导出失败");
190
+                }
191
+            }
111 192
             return res;
112 193
         }
194
+        #endregion
113 195
 
114 196
         /// <summary>
115 197
         /// 工单部门分布情况
@@ -250,5 +332,7 @@ namespace CallCenterApi.Interface.Controllers.report
250 332
 
251 333
             return res;
252 334
         }
335
+
336
+       
253 337
     }
254 338
 }

+ 5 - 1
codegit/CallCenterApi/CallCenterApi.Interface/CallCenterApi.Interface/Controllers/tel/CallInScreenController.cs

@@ -642,8 +642,12 @@ namespace CallCenterApi.Interface.Controllers.tel
642 642
                                 gdstate = 1;
643 643
                         }
644 644
                         model.State = gdstate;
645
-                        if (gdstate == 1)//如果直接为已处理 需要将lastdealuser改为当前坐席
645
+                        if (gdstate == 1)
646
+                        {
647
+                            //如果直接为已处理 需要将lastdealuser改为当前坐席
646 648
                             model.LastDealUser = ua.F_UserCode;
649
+                            model.ReturnBakTime = DateTime.Now;
650
+                        }
647 651
                         model.IsDel = 0;
648 652
                         model.IsReturn = 0;
649 653
                         model.IsReturnBak = 0;

+ 2 - 0
codegit/CallCenterApi/CallCenterApi.Interface/CallCenterApi.Interface/Controllers/workorder/WorkOrderController.cs

@@ -1022,6 +1022,7 @@ namespace CallCenterApi.Interface.Controllers.workorder
1022 1022
                                     {
1023 1023
                                         ordermodel.LastDealUser = ua.F_UserCode;
1024 1024
                                         ordermodel.State = 1;
1025
+                                        ordermodel.ReturnBakTime = DateTime.Now;
1025 1026
                                     }
1026 1027
                                 }
1027 1028
                                 if(!string.IsNullOrEmpty(customer))
@@ -1777,6 +1778,7 @@ namespace CallCenterApi.Interface.Controllers.workorder
1777 1778
                                 //工单完结要更新工单的状态
1778 1779
                                 model.State = 1;
1779 1780
                                 model.LastDealUser = ua.F_UserCode;
1781
+                                model.ReturnBakTime = DateTime.Now;
1780 1782
                                 model.Clcontent = cont;
1781 1783
                                 //处理工单时,反馈内容可以编辑
1782 1784
                                 //if (Convert.ToDateTime(model.CreateTime) <= Convert.ToDateTime(stop_datetime))

+ 2 - 2
codegit/CallCenterApi/CallCenterApi.Model/T_Wo_WorkOrder.cs

@@ -221,7 +221,7 @@ namespace CallCenterApi.Model
221 221
             get { return _lastdealuser; }
222 222
         }
223 223
         /// <summary>
224
-        /// 最后处理时间
224
+        /// 最后处理时间 -  安图特殊用(工单处理内容编码问题,根据日期判断:时间为空值时UrlDecode,不为空值时HtmlDecode)
225 225
         /// </summary>
226 226
         public DateTime? LastDealTime
227 227
         {
@@ -253,7 +253,7 @@ namespace CallCenterApi.Model
253 253
             get { return _isreturnbak; }
254 254
         }
255 255
         /// <summary>
256
-        /// 回访时间
256
+        /// 回访时间 - 处理时间(处理时间被占用)
257 257
         /// </summary>
258 258
         public DateTime? ReturnBakTime
259 259
         {