|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+using RMYY_CallCenter_Api.DB;
|
|
|
2
|
+using RMYY_CallCenter_Api.Model;
|
|
|
3
|
+using RMYY_CallCenter_Api.Models;
|
|
|
4
|
+using RMYY_CallCenter_Api.Models.Enum;
|
|
|
5
|
+using RMYY_CallCenter_Api.Models.Input;
|
|
|
6
|
+using RMYY_CallCenter_Api.Utility;
|
|
|
7
|
+using System;
|
|
|
8
|
+using System.Collections.Generic;
|
|
|
9
|
+using System.ComponentModel;
|
|
|
10
|
+using System.Data;
|
|
|
11
|
+using System.IO;
|
|
|
12
|
+using System.Linq;
|
|
|
13
|
+using System.Reflection;
|
|
|
14
|
+using System.Web;
|
|
|
15
|
+using System.Web.Mvc;
|
|
|
16
|
+
|
|
|
17
|
+namespace RMYY_CallCenter_Api.Controllers
|
|
|
18
|
+{
|
|
|
19
|
+ public class ReportController : BaseController
|
|
|
20
|
+ {
|
|
|
21
|
+ private BLL.T_IntegratedScheduling_Base baseBll = new BLL.T_IntegratedScheduling_Base();
|
|
|
22
|
+ Bll.T_Sys_GongDan gdbll = new Bll.T_Sys_GongDan();
|
|
|
23
|
+ private Bll.T_Sys_Department departmentBLL = new Bll.T_Sys_Department();
|
|
|
24
|
+ private static BLL.T_IntegratedScheduling_OperationLog logBll = new BLL.T_IntegratedScheduling_OperationLog();
|
|
|
25
|
+ private BLL.T_IntegratedScheduling_Detail detailBll = new BLL.T_IntegratedScheduling_Detail();
|
|
|
26
|
+ private Bll.T_Sys_SystemConfig configBll = new Bll.T_Sys_SystemConfig();
|
|
|
27
|
+ private BLL.T_IntegratedScheduling_Process proBll = new BLL.T_IntegratedScheduling_Process();
|
|
|
28
|
+
|
|
|
29
|
+
|
|
|
30
|
+ private static InternalMessagesController msg = new InternalMessagesController();
|
|
|
31
|
+
|
|
|
32
|
+ // 工勤人员完工统计 综合调度类工单统计:
|
|
|
33
|
+ //1、筛选项:时间范围、部门、人员、工单类型,可设置显示字段
|
|
|
34
|
+ //2、列表项:姓名、工号、接单量、处理量、处理效率、超时量、超时率、好评量、好评率、差评量、差评率
|
|
|
35
|
+ //3、指标说明(需要在表头上增加提示标签,悬浮标签显示对应公式):
|
|
|
36
|
+ //接单量 = 当前查询范围内已接单的数量;
|
|
|
37
|
+ //处理量 = 范围内已接单工单中已处理的数量;处理效率 = 处理量/接单量;
|
|
|
38
|
+ //超时量 = 范围内接单工单并超时未处理的工单;超时率 = 超时量/接单量;
|
|
|
39
|
+ //好评量/差评量 = 范围内接单工单被好评或差评的数量;
|
|
|
40
|
+ //好评率/差评率 = 好评量/(好评量 + 差评量)
|
|
|
41
|
+
|
|
|
42
|
+ [AllowAnonymous]
|
|
|
43
|
+ public ActionResult SchedulingReport(string dealman, string starttime = "", string endtime = "", int dealdept = 0, int isdc = 0)
|
|
|
44
|
+ {
|
|
|
45
|
+
|
|
|
46
|
+ int recordCount = 0;
|
|
|
47
|
+ string sql = $" and F_IsDelete = 0 ";
|
|
|
48
|
+
|
|
|
49
|
+ if (!string.IsNullOrEmpty(starttime))
|
|
|
50
|
+ {
|
|
|
51
|
+ sql += $" and F_CreateTime>='{starttime}'";
|
|
|
52
|
+ }
|
|
|
53
|
+ if (!string.IsNullOrEmpty(endtime))
|
|
|
54
|
+ {
|
|
|
55
|
+ sql += $" and F_CreateTime<'{endtime}'";
|
|
|
56
|
+ }
|
|
|
57
|
+
|
|
|
58
|
+ if (dealdept > 0)
|
|
|
59
|
+ {
|
|
|
60
|
+ sql += $" and F_DealDept = '{ dealdept }' ";
|
|
|
61
|
+ }
|
|
|
62
|
+
|
|
|
63
|
+ if (!string.IsNullOrEmpty(dealman))
|
|
|
64
|
+ {
|
|
|
65
|
+ sql += $" and F_DealMan = '{ dealman }' ";
|
|
|
66
|
+
|
|
|
67
|
+ }
|
|
|
68
|
+
|
|
|
69
|
+ string dealmansql = "select dbo.GetUserName(F_dealman) dealusername, F_dealman,COUNT(1) allcount dealusername from [T_IntegratedScheduling_Base] where F_dealman is not null and f_dealman != ''" + sql+" group by F_dealman ";
|
|
|
70
|
+
|
|
|
71
|
+ DataTable dealmandt = DbHelperSQL.Query(dealmansql).Tables[0];
|
|
|
72
|
+ // 接单量、处理量、处理效率、超时量、超时率、好评量、好评率、差评量、差评率
|
|
|
73
|
+
|
|
|
74
|
+ string allordersql = " F_dealman is not null and f_dealman != ''"+sql;
|
|
|
75
|
+
|
|
|
76
|
+
|
|
|
77
|
+ List<Model.T_IntegratedScheduling_Base> modellist = baseBll.GetModelList(allordersql);
|
|
|
78
|
+
|
|
|
79
|
+
|
|
|
80
|
+
|
|
|
81
|
+
|
|
|
82
|
+ dealmandt.Columns.Add("jiedanliang");
|
|
|
83
|
+ dealmandt.Columns.Add("chuliliang");
|
|
|
84
|
+ //处理效率 = 处理量/接单量;
|
|
|
85
|
+
|
|
|
86
|
+ DataColumn chkColumn = new DataColumn();
|
|
|
87
|
+ chkColumn.DataType =typeof(string);
|
|
|
88
|
+ chkColumn.ColumnName = "chulixiaolv";
|
|
|
89
|
+ chkColumn.DefaultValue = "0%";
|
|
|
90
|
+ dealmandt.Columns.Add(chkColumn);
|
|
|
91
|
+
|
|
|
92
|
+
|
|
|
93
|
+ DataColumn chkColumn1 = new DataColumn();
|
|
|
94
|
+ chkColumn1.DataType = typeof(int);
|
|
|
95
|
+ chkColumn1.ColumnName = "chaoshiliang";
|
|
|
96
|
+ chkColumn1.DefaultValue = 0;
|
|
|
97
|
+ dealmandt.Columns.Add(chkColumn1);
|
|
|
98
|
+
|
|
|
99
|
+ DataColumn chkColumn2 = new DataColumn();
|
|
|
100
|
+ chkColumn2.DataType = typeof(string);
|
|
|
101
|
+ chkColumn2.ColumnName = "chaoshilv";
|
|
|
102
|
+ chkColumn2.DefaultValue = "0%";
|
|
|
103
|
+ dealmandt.Columns.Add(chkColumn2);
|
|
|
104
|
+
|
|
|
105
|
+ DataColumn chkColumn3 = new DataColumn();
|
|
|
106
|
+ chkColumn3.DataType = typeof(int);
|
|
|
107
|
+ chkColumn3.ColumnName = "haopingliang";
|
|
|
108
|
+ chkColumn3.DefaultValue = 0;
|
|
|
109
|
+ dealmandt.Columns.Add(chkColumn3);
|
|
|
110
|
+
|
|
|
111
|
+ DataColumn chkColumn4 = new DataColumn();
|
|
|
112
|
+ chkColumn4.DataType = typeof(string);
|
|
|
113
|
+ chkColumn4.ColumnName = "haopinglv";
|
|
|
114
|
+ chkColumn4.DefaultValue = "0%";
|
|
|
115
|
+ dealmandt.Columns.Add(chkColumn4);
|
|
|
116
|
+
|
|
|
117
|
+
|
|
|
118
|
+ DataColumn chkColumn5 = new DataColumn();
|
|
|
119
|
+ chkColumn5.DataType = typeof(int);
|
|
|
120
|
+ chkColumn5.ColumnName = "chapingliang";
|
|
|
121
|
+ chkColumn5.DefaultValue = 0;
|
|
|
122
|
+ dealmandt.Columns.Add(chkColumn5);
|
|
|
123
|
+
|
|
|
124
|
+
|
|
|
125
|
+ DataColumn chkColumn6 = new DataColumn();
|
|
|
126
|
+ chkColumn6.DataType = typeof(string);
|
|
|
127
|
+ chkColumn6.ColumnName = "chapinglv";
|
|
|
128
|
+ chkColumn6.DefaultValue = "0%";
|
|
|
129
|
+ dealmandt.Columns.Add(chkColumn6);
|
|
|
130
|
+
|
|
|
131
|
+
|
|
|
132
|
+ if (dealmandt != null && dealmandt.Rows.Count > 0)
|
|
|
133
|
+ {
|
|
|
134
|
+ foreach (DataRow dr in dealmandt.Rows)
|
|
|
135
|
+ {
|
|
|
136
|
+ List<string> jiedanlist = modellist.Where(x => x.F_DealMan == dr["F_DealMan"].ToString() && x.F_WorkOrderState > 1).Select(x => x.F_WorkOrderCode).ToList();
|
|
|
137
|
+ dr["jiedanliang"] = jiedanlist.Count;
|
|
|
138
|
+
|
|
|
139
|
+ List<string> chulilist = modellist.Where(x => x.F_DealMan == dr["F_DealMan"].ToString() && x.F_WorkOrderState > 2).Select(x => x.F_WorkOrderCode).ToList();
|
|
|
140
|
+ dr["chuliliang"] = chulilist.Count;
|
|
|
141
|
+
|
|
|
142
|
+ if (jiedanlist.Count != 0)
|
|
|
143
|
+ {
|
|
|
144
|
+ dr["chulixiaolv"] = Math.Round(decimal.Parse(chulilist.Count.ToString()) / jiedanlist.Count * 100, 2).ToString() + "%";
|
|
|
145
|
+ }
|
|
|
146
|
+
|
|
|
147
|
+ var chaoshilist = modellist.Where(x => x.F_Deadline < x.F_Endtime || (x.F_Endtime == null && x.F_Deadline < DateTime.Now)).ToList();
|
|
|
148
|
+ dr["chaoshiliang"] = chaoshilist.Count;
|
|
|
149
|
+ if (jiedanlist.Count != 0)
|
|
|
150
|
+ {
|
|
|
151
|
+ //超时率 = 超时量/接单量;
|
|
|
152
|
+ dr["chaoshilv"] = Math.Round(decimal.Parse(chaoshilist.Count.ToString()) / jiedanlist.Count * 100, 2).ToString() + "%";
|
|
|
153
|
+ }
|
|
|
154
|
+ //好评量/差评量 = 范围内接单工单被好评或差评的数量;
|
|
|
155
|
+ var haopinglist = modellist.Where(x => x.MYD == 1 || x.MYD == 0).ToList();
|
|
|
156
|
+
|
|
|
157
|
+ dr["haopingliang"] = haopinglist.Count;
|
|
|
158
|
+
|
|
|
159
|
+ var chapinglist= modellist.Where(x => x.MYD == 2).ToList();
|
|
|
160
|
+
|
|
|
161
|
+ dr["chapingliang"] = chapinglist.Count;
|
|
|
162
|
+
|
|
|
163
|
+
|
|
|
164
|
+ int pingjiacount= haopinglist.Count+ chapinglist.Count;
|
|
|
165
|
+ if (pingjiacount != 0)
|
|
|
166
|
+ {
|
|
|
167
|
+ //好评率/差评率 = 好评量/(好评量 + 差评量)
|
|
|
168
|
+ dr["haopinglv"] = Math.Round(decimal.Parse(haopinglist.Count.ToString()) / pingjiacount * 100, 2).ToString() + "%";
|
|
|
169
|
+
|
|
|
170
|
+ dr["chapinglv"] = Math.Round(decimal.Parse(chapinglist.Count.ToString()) / pingjiacount * 100, 2).ToString() + "%";
|
|
|
171
|
+ }
|
|
|
172
|
+
|
|
|
173
|
+
|
|
|
174
|
+
|
|
|
175
|
+
|
|
|
176
|
+
|
|
|
177
|
+ }
|
|
|
178
|
+ }
|
|
|
179
|
+
|
|
|
180
|
+
|
|
|
181
|
+ if (isdc > 0)
|
|
|
182
|
+ {
|
|
|
183
|
+
|
|
|
184
|
+ dealmandt.Columns.Remove("allcount");
|
|
|
185
|
+ // 接单量、处理量、处理效率、超时量、超时率、好评量、好评率、差评量、差评率
|
|
|
186
|
+ var msg = new NPOIHelper().ExportToExcel("工勤人员完工统计", dealmandt, new string[] { "姓名", "工号", "接单量", "处理量" , "处理效率", "超时量", "超时率", "好评量", "好评率", "差评量", "差评率" });
|
|
|
187
|
+ if (msg == "")
|
|
|
188
|
+ {
|
|
|
189
|
+ return Success("导出成功");
|
|
|
190
|
+ }
|
|
|
191
|
+ else
|
|
|
192
|
+ {
|
|
|
193
|
+ return Error("导出失败");
|
|
|
194
|
+ }
|
|
|
195
|
+ }
|
|
|
196
|
+
|
|
|
197
|
+
|
|
|
198
|
+
|
|
|
199
|
+ // DataTable datatable = Bll.PagerBll.GetListPager
|
|
|
200
|
+ // ("T_Wo_CommonBase ",
|
|
|
201
|
+ // "F_WoCode",
|
|
|
202
|
+ // "*,[dbo].[GetUserName](F_Proposer) F_ProposerName,[dbo].[GetUserName](F_DealUser) F_DealUserName, (case when MYD = 0 then '不满意' when MYD = 1 then '满意' else '' end) MYD ",
|
|
|
203
|
+ // sql,
|
|
|
204
|
+ // "order by F_CreateTime desc",
|
|
|
205
|
+ // pagesize,
|
|
|
206
|
+ // pageindex,
|
|
|
207
|
+ // true,
|
|
|
208
|
+ // out recordCount
|
|
|
209
|
+ // );
|
|
|
210
|
+
|
|
|
211
|
+ // datatable = WorkOrderBase.SetOtherField(datatable, MENUENUM.工单列表, User.F_UserCode, User.F_RoleId);
|
|
|
212
|
+
|
|
|
213
|
+ var obj = new
|
|
|
214
|
+ {
|
|
|
215
|
+ state = "success",
|
|
|
216
|
+ message = "成功",
|
|
|
217
|
+ rows = dealmandt,
|
|
|
218
|
+ total = recordCount
|
|
|
219
|
+
|
|
|
220
|
+ };
|
|
|
221
|
+ return Content(obj.ToJson());
|
|
|
222
|
+ }
|
|
|
223
|
+
|
|
|
224
|
+ }
|
|
|
225
|
+
|
|
|
226
|
+
|
|
|
227
|
+
|
|
|
228
|
+}
|