|
|
@@ -1,4 +1,5 @@
|
|
1
|
1
|
using CallCenter.Utility;
|
|
|
2
|
+using CallCenter.Utility.Time;
|
|
2
|
3
|
using CallCenterApi.DB;
|
|
3
|
4
|
using CallCenterApi.Interface.Controllers.Base;
|
|
4
|
5
|
using CallCenterApi.Interface.Models.Dto;
|
|
|
@@ -347,23 +348,26 @@ namespace CallCenterApi.Interface.Controllers.callout
|
|
347
|
348
|
}
|
|
348
|
349
|
break;
|
|
349
|
350
|
case 4: //从Excel中导入
|
|
350
|
|
- string[] strArr = input.SelectIds.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
|
|
351
|
|
- var idArr = strArr.Select(x => Convert.ToInt32(x)).ToArray();
|
|
352
|
|
- var fieldList = pageFieldBLL.DataTableToList(pageFieldBLL.GetList($"F_ID in ({string.Join(",", idArr)})").Tables[0]);
|
|
353
|
|
- NPOIHelper npoi = new NPOIHelper();
|
|
354
|
|
- var dtExcel = npoi.ExcelToTable(input.FilePath, 0);
|
|
355
|
|
- for (int i = 0; i < dtExcel.Rows.Count; i++)
|
|
|
351
|
+ if (!string.IsNullOrWhiteSpace(input.SelectIds))
|
|
356
|
352
|
{
|
|
357
|
|
- var row = dt.NewRow();
|
|
358
|
|
- for (int j = 0; j < dtExcel.Columns.Count; j++)
|
|
|
353
|
+ string[] strArr = input.SelectIds.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
|
|
|
354
|
+ var idArr = strArr.Select(x => Convert.ToInt32(x)).ToArray();
|
|
|
355
|
+ var fieldList = pageFieldBLL.DataTableToList(pageFieldBLL.GetList($"F_ID in ({string.Join(",", idArr)})").Tables[0]);
|
|
|
356
|
+ NPOIHelper npoi = new NPOIHelper();
|
|
|
357
|
+ var dtExcel = npoi.ExcelToTable(input.FilePath, 0);
|
|
|
358
|
+ for (int i = 0; i < dtExcel.Rows.Count; i++)
|
|
359
|
359
|
{
|
|
360
|
|
- if (fieldList.Count < (j + 1))
|
|
361
|
|
- break;
|
|
362
|
|
- row["F_TaskId"] = model.TaskID;
|
|
363
|
|
- var field = fieldList.SingleOrDefault(x => x.F_Id == idArr[j]);
|
|
364
|
|
- row[field.F_DBFieldlName] = dtExcel.Rows[i][j];
|
|
|
360
|
+ var row = dt.NewRow();
|
|
|
361
|
+ for (int j = 0; j < dtExcel.Columns.Count; j++)
|
|
|
362
|
+ {
|
|
|
363
|
+ if (fieldList.Count < (j + 1))
|
|
|
364
|
+ break;
|
|
|
365
|
+ row["F_TaskId"] = model.TaskID;
|
|
|
366
|
+ var field = fieldList.SingleOrDefault(x => x.F_Id == idArr[j]);
|
|
|
367
|
+ row[field.F_DBFieldlName] = dtExcel.Rows[i][j];
|
|
|
368
|
+ }
|
|
|
369
|
+ dt.Rows.Add(row);
|
|
365
|
370
|
}
|
|
366
|
|
- dt.Rows.Add(row);
|
|
367
|
371
|
}
|
|
368
|
372
|
break;
|
|
369
|
373
|
}
|
|
|
@@ -689,7 +693,7 @@ namespace CallCenterApi.Interface.Controllers.callout
|
|
689
|
693
|
sql += $" and F_HJJGID={filter.HJJGID} ";
|
|
690
|
694
|
}
|
|
691
|
695
|
|
|
692
|
|
- var field = "F_Id,t.TaskName,F_Phone,F_FPState,F_HCState,F_YJState,F_Username,tn.F_CreateTime,F_HJJGName,F_YHFKName";
|
|
|
696
|
+ var field = "F_Id,t.TaskName,F_Phone,F_FPState,F_HCState,F_YJState,F_Username,tn.F_CreateTime,F_HJJGName,F_YHFKName,F_LastCallTime";
|
|
693
|
697
|
|
|
694
|
698
|
|
|
695
|
699
|
var recordCount = 0;
|
|
|
@@ -933,10 +937,10 @@ namespace CallCenterApi.Interface.Controllers.callout
|
|
933
|
937
|
sb.Append(item.F_DBFieldlName + ",");
|
|
934
|
938
|
dicTitle.Add(item.F_DBFieldlName, item.F_Name);
|
|
935
|
939
|
}
|
|
|
940
|
+ Dictionary<string, string> dic = new Dictionary<string, string>();
|
|
936
|
941
|
if (!string.IsNullOrWhiteSpace(sb.ToString()))
|
|
937
|
942
|
{
|
|
938
|
943
|
var callNum = DbHelperSQL.Query($"SELECT {sb.ToString().Trim(',')} FROM T_Call_TaskTelNum WHERE F_ID={id}").Tables[0];
|
|
939
|
|
- Dictionary<string, string> dic = new Dictionary<string, string>();
|
|
940
|
944
|
for (int j = 0; j < callNum.Columns.Count; j++)
|
|
941
|
945
|
{
|
|
942
|
946
|
dic.Add(callNum.Columns[j].ColumnName, callNum.Rows[0][j].ToString());
|
|
|
@@ -955,7 +959,28 @@ namespace CallCenterApi.Interface.Controllers.callout
|
|
955
|
959
|
|
|
956
|
960
|
});
|
|
957
|
961
|
}
|
|
958
|
|
- return Success("");
|
|
|
962
|
+ else
|
|
|
963
|
+ {
|
|
|
964
|
+ var callNum = DbHelperSQL.Query($"SELECT F_Phone FROM T_Call_TaskTelNum WHERE F_ID={id}").Tables[0];
|
|
|
965
|
+ for (int j = 0; j < callNum.Columns.Count; j++)
|
|
|
966
|
+ {
|
|
|
967
|
+ dic.Add(callNum.Columns[j].ColumnName, callNum.Rows[0][j].ToString());
|
|
|
968
|
+ }
|
|
|
969
|
+ return Success("获取成功", new
|
|
|
970
|
+ {
|
|
|
971
|
+ detail = dic.Select(x => new
|
|
|
972
|
+ {
|
|
|
973
|
+ field = x.Key,
|
|
|
974
|
+ text = "电话号码",
|
|
|
975
|
+ value = x.Value,
|
|
|
976
|
+ }),
|
|
|
977
|
+ pagerid = task.y_TkModelId ?? 0,
|
|
|
978
|
+ taskid = task.TaskID,
|
|
|
979
|
+ id = id
|
|
|
980
|
+
|
|
|
981
|
+ });
|
|
|
982
|
+ }
|
|
|
983
|
+
|
|
959
|
984
|
}
|
|
960
|
985
|
/// <summary>
|
|
961
|
986
|
/// 更新拨出号码的 呼叫状态
|
|
|
@@ -1094,57 +1119,63 @@ namespace CallCenterApi.Interface.Controllers.callout
|
|
1094
|
1119
|
paperid = (int)tmodel.y_TkModelId.Value;
|
|
1095
|
1120
|
#region 获取问卷试题信息以及答案
|
|
1096
|
1121
|
var pmodel = pagerInfoBLL.GetModel(paperid);
|
|
1097
|
|
- var qlist = questionBLL.GetModelList(" F_DeleteFlag=0 and F_QuestionId in (select F_QuestionId from T_Ask_PagerItems where F_PagerId=" + paperid + ") order by F_QuestionId ");
|
|
1098
|
|
- var qilist = questionItemBLL.GetModelList(" F_QuestionId in (select F_QuestionId from T_Ask_PagerItems where F_PagerId=" + paperid + ") order by F_ItemId ");
|
|
1099
|
|
- var newmodel = new
|
|
|
1122
|
+ if (pmodel != null)
|
|
1100
|
1123
|
{
|
|
1101
|
|
- F_Title = pmodel.F_Title,
|
|
1102
|
|
- F_Remark = pmodel.F_Remark,
|
|
1103
|
|
- F_Questions = qlist.Select(q =>
|
|
|
1124
|
+ var qlist = questionBLL.GetModelList(" F_DeleteFlag=0 and F_QuestionId in (select F_QuestionId from T_Ask_PagerItems where F_PagerId=" + paperid + ") order by F_QuestionId ");
|
|
|
1125
|
+ var qilist = questionItemBLL.GetModelList(" F_QuestionId in (select F_QuestionId from T_Ask_PagerItems where F_PagerId=" + paperid + ") order by F_ItemId ");
|
|
|
1126
|
+ var newmodel = new
|
|
1104
|
1127
|
{
|
|
1105
|
|
- var answers = "";
|
|
1106
|
|
- var qalist = anslist.Where(al => al.F_QID.Value == q.F_QuestionId).ToList<Model.T_Call_Answers>();
|
|
1107
|
|
- if (qalist.Count > 0)
|
|
|
1128
|
+ F_Title = pmodel.F_Title,
|
|
|
1129
|
+ F_Remark = pmodel.F_Remark,
|
|
|
1130
|
+ F_Questions = qlist.Select(q =>
|
|
1108
|
1131
|
{
|
|
1109
|
|
- if (q.F_Type > 1)
|
|
|
1132
|
+ var answers = "";
|
|
|
1133
|
+ var qalist = anslist.Where(al => al.F_QID.Value == q.F_QuestionId).ToList<Model.T_Call_Answers>();
|
|
|
1134
|
+ if (qalist.Count > 0)
|
|
1110
|
1135
|
{
|
|
1111
|
|
- foreach (var item in qalist)
|
|
|
1136
|
+ if (q.F_Type > 1)
|
|
1112
|
1137
|
{
|
|
1113
|
|
- answers += item.F_QIID + "|";
|
|
|
1138
|
+ foreach (var item in qalist)
|
|
|
1139
|
+ {
|
|
|
1140
|
+ answers += item.F_QIID + "|";
|
|
|
1141
|
+ }
|
|
|
1142
|
+ }
|
|
|
1143
|
+ else
|
|
|
1144
|
+ {
|
|
|
1145
|
+ answers = qalist[0].F_Answer;
|
|
1114
|
1146
|
}
|
|
1115
|
1147
|
}
|
|
1116
|
|
- else
|
|
1117
|
|
- {
|
|
1118
|
|
- answers = qalist[0].F_Answer;
|
|
1119
|
|
- }
|
|
1120
|
|
- }
|
|
1121
|
|
- return new
|
|
1122
|
|
- {
|
|
1123
|
|
- quesid = q.F_QuestionId,
|
|
1124
|
|
- questitle = q.F_Title,
|
|
1125
|
|
- questype = q.F_Type,
|
|
1126
|
|
- quescontent = q.F_Content,
|
|
1127
|
|
- quesremark = q.F_Remark,
|
|
1128
|
|
- quesanswers = answers.Trim('|'),
|
|
1129
|
|
- quesitems = qilist.Where(qq => qq.F_QuestionId == q.F_QuestionId).Select(qi =>
|
|
|
1148
|
+ return new
|
|
1130
|
1149
|
{
|
|
1131
|
|
- return new
|
|
|
1150
|
+ quesid = q.F_QuestionId,
|
|
|
1151
|
+ questitle = q.F_Title,
|
|
|
1152
|
+ questype = q.F_Type,
|
|
|
1153
|
+ quescontent = q.F_Content,
|
|
|
1154
|
+ quesremark = q.F_Remark,
|
|
|
1155
|
+ quesanswers = answers.Trim('|'),
|
|
|
1156
|
+ quesitems = qilist.Where(qq => qq.F_QuestionId == q.F_QuestionId).Select(qi =>
|
|
1132
|
1157
|
{
|
|
1133
|
|
- itemid = qi.F_ItemId,
|
|
1134
|
|
- itemname = qi.F_ItemName,
|
|
1135
|
|
- itemremark = qi.F_Remark,
|
|
1136
|
|
- };
|
|
1137
|
|
- })
|
|
1138
|
|
- };
|
|
1139
|
|
- })
|
|
1140
|
|
- };
|
|
|
1158
|
+ return new
|
|
|
1159
|
+ {
|
|
|
1160
|
+ itemid = qi.F_ItemId,
|
|
|
1161
|
+ itemname = qi.F_ItemName,
|
|
|
1162
|
+ itemremark = qi.F_Remark,
|
|
|
1163
|
+ };
|
|
|
1164
|
+ })
|
|
|
1165
|
+ };
|
|
|
1166
|
+ })
|
|
|
1167
|
+ };
|
|
|
1168
|
+ return Success("获取详情成功", new
|
|
|
1169
|
+ {
|
|
|
1170
|
+ taskModel = model,
|
|
|
1171
|
+ paperModel = newmodel
|
|
|
1172
|
+ });
|
|
|
1173
|
+ }
|
|
1141
|
1174
|
#endregion
|
|
1142
|
|
- var objy = new
|
|
|
1175
|
+ return Success("获取详情成功", new
|
|
1143
|
1176
|
{
|
|
1144
|
|
- taskModel = model,
|
|
1145
|
|
- paperModel = newmodel
|
|
1146
|
|
- };
|
|
1147
|
|
- return Success("获取详情成功", objy);
|
|
|
1177
|
+ taskModel = model
|
|
|
1178
|
+ });
|
|
1148
|
1179
|
}
|
|
1149
|
1180
|
}
|
|
1150
|
1181
|
return Error("获取详情失败");
|
|
|
@@ -1407,10 +1438,9 @@ namespace CallCenterApi.Interface.Controllers.callout
|
|
1407
|
1438
|
/// 获取通话记录列表
|
|
1408
|
1439
|
/// </summary>
|
|
1409
|
1440
|
/// <returns></returns>
|
|
|
1441
|
+ //[Authority]
|
|
1410
|
1442
|
public ActionResult GetTalkRecords(FilterTalkRecord filter)
|
|
1411
|
1443
|
{
|
|
1412
|
|
- //if (!Request.IsAuthenticated)
|
|
1413
|
|
- // return NoToken("未知错误,请重新登录");
|
|
1414
|
1444
|
var sort = "ORDER BY startdate desc";
|
|
1415
|
1445
|
if (!string.IsNullOrWhiteSpace(filter.SortField))
|
|
1416
|
1446
|
{
|
|
|
@@ -1432,9 +1462,17 @@ namespace CallCenterApi.Interface.Controllers.callout
|
|
1432
|
1462
|
{
|
|
1433
|
1463
|
where.Append(" and callee like '%" + filter.Phone + "%'");
|
|
1434
|
1464
|
}
|
|
|
1465
|
+
|
|
|
1466
|
+ //全部=0
|
|
|
1467
|
+ //未转坐席 = 1,
|
|
|
1468
|
+ //被叫接通转坐席未接 = 2,
|
|
|
1469
|
+ //转坐席且接通 = 3,
|
|
1435
|
1470
|
if (filter.CallType != 0)
|
|
1436
|
1471
|
{
|
|
1437
|
|
- where.Append(" and calltype=" + filter.CallType);
|
|
|
1472
|
+ EnumTalkRecordsCallType calltype;
|
|
|
1473
|
+ if (!Enum.TryParse(filter.CallType.ToString(), out calltype))
|
|
|
1474
|
+ return Error("通话类型字段参数错误");
|
|
|
1475
|
+ where.Append(" and calltype=" + (int)calltype);
|
|
1438
|
1476
|
}
|
|
1439
|
1477
|
|
|
1440
|
1478
|
if (!string.IsNullOrWhiteSpace(filter.TalkTime))
|
|
|
@@ -1460,25 +1498,21 @@ namespace CallCenterApi.Interface.Controllers.callout
|
|
1460
|
1498
|
|
|
1461
|
1499
|
if (filter.StartTime == null || filter.EndTime == null)
|
|
1462
|
1500
|
{
|
|
1463
|
|
- filter.StartTime = DateTime.Now.AddDays(-3);
|
|
1464
|
|
- filter.EndTime = DateTime.Now;
|
|
|
1501
|
+ filter.StartTime = DateTools.FirstSecondOfOneDay(DateTime.Now);
|
|
|
1502
|
+ filter.EndTime = DateTools.LastSecondOfOneDay(DateTime.Now);
|
|
1465
|
1503
|
}
|
|
1466
|
|
- where.Append(" and datediff(s,'" + filter.StartTime + "',getdate())>=0 and datediff(s,getdate(),'" + filter.EndTime + "')>=0 ");
|
|
|
1504
|
+ where.Append(" and datediff(s,'" + filter.StartTime + "',StartDate)>=0 and datediff(s,EndDate,'" + filter.EndTime + "')>=0 ");
|
|
|
1505
|
+
|
|
1467
|
1506
|
|
|
1468
|
1507
|
|
|
1469
|
1508
|
|
|
1470
|
|
- // 全部=0
|
|
1471
|
|
- // 未接通=1
|
|
1472
|
|
- // 接通排队=2
|
|
1473
|
|
- // 接通未转入坐席=3
|
|
1474
|
|
- // 接通且分配坐席=4
|
|
1475
|
1509
|
int recordCount = 0;
|
|
1476
|
1510
|
Model.PageData<Model.CallResult> pageModel = new Model.PageData<Model.CallResult>();
|
|
1477
|
1511
|
StringBuilder fields = new StringBuilder();
|
|
1478
|
1512
|
var dt = BLL.PagerBLL.GetListPager(
|
|
1479
|
1513
|
"V_AutoCallResult",
|
|
1480
|
|
- "V_AutoCallResult.id",
|
|
1481
|
|
- "V_AutoCallResult.id,itemid, callee, agentid, username,startdate,enddate,getinagentdate,calltype,talktime,RecordPath",
|
|
|
1514
|
+ "Id",
|
|
|
1515
|
+ "id,itemid, callee, agentid, username,startdate,enddate,getinagentdate,calltype,talktime,RecordPath",
|
|
1482
|
1516
|
where.ToString(),
|
|
1483
|
1517
|
sort,
|
|
1484
|
1518
|
filter.PageSize,
|
|
|
@@ -1512,8 +1546,8 @@ namespace CallCenterApi.Interface.Controllers.callout
|
|
1512
|
1546
|
enddate = x.EndDate?.ToString("yyyy-MM-dd HH:mm:ss") ?? "",
|
|
1513
|
1547
|
recordpath = recordPath,
|
|
1514
|
1548
|
username = x.Username,
|
|
1515
|
|
- state = x.State,
|
|
1516
|
|
- talktime = x.TalkTime > 0 ? x.TalkTime.ToString() : ""
|
|
|
1549
|
+ calltype = Enum.Parse(typeof(EnumTalkRecordsCallType), x.CallType.ToString()).ToString(),
|
|
|
1550
|
+ talktime = x.TalkTime > 0 ? x.TalkTime.ToString() : "0"
|
|
1517
|
1551
|
});
|
|
1518
|
1552
|
});
|
|
1519
|
1553
|
|
|
|
@@ -1524,6 +1558,21 @@ namespace CallCenterApi.Interface.Controllers.callout
|
|
1524
|
1558
|
};
|
|
1525
|
1559
|
return Content(obj.ToJson());
|
|
1526
|
1560
|
}
|
|
|
1561
|
+
|
|
|
1562
|
+ public ActionResult GetCallType()
|
|
|
1563
|
+ {
|
|
|
1564
|
+ Dictionary<string, string> dic = new Dictionary<string, string>();
|
|
|
1565
|
+ foreach (int item in Enum.GetValues(typeof(EnumTalkRecordsCallType)))
|
|
|
1566
|
+ {
|
|
|
1567
|
+ dic.Add(((EnumTalkRecordsCallType)item).ToString(), item.ToString());
|
|
|
1568
|
+ }
|
|
|
1569
|
+ return Success("", dic.Select(x => new
|
|
|
1570
|
+ {
|
|
|
1571
|
+ text = x.Key,
|
|
|
1572
|
+ value = x.Value
|
|
|
1573
|
+ }));
|
|
|
1574
|
+ }
|
|
|
1575
|
+
|
|
1527
|
1576
|
#endregion
|
|
1528
|
1577
|
|
|
1529
|
1578
|
#region 过滤号码
|