|
|
@@ -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
|
}
|