ComplianceServer/oldcode/Core.Web/Controllers/AiRecordController.cs

589 lines
21 KiB
C#

using Core.Web.App_Start;
using Core.Web.WebHelper;
using CRM.Core.BLL.Application.SoftProduct;
using CRM.Core.BLL.Csvr;
using CRM.Core.BLL.Util;
using CRM.Core.Common;
using CRM.Core.Common.Layui;
using CRM.Core.Common.WebHelper;
using CRM.Core.Model.Entity;
using CRM.Core.Model.Enum;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WX.CRM.Common;
using WX.CRM.WebHelper;
namespace Core.Web.Controllers
{
public class AiRecordController : BaseController
{
private Csvr_AiCallTask_BL _task = new Csvr_AiCallTask_BL();
private CACHE_BL cache_BL = new CACHE_BL();
private WX.CRM.Common.ValidationErrors errors = new WX.CRM.Common.ValidationErrors();
private readonly SoftProductService _softProductService = new SoftProductService();
public AiRecordController()
{
}
[AuthorizeRedirect(RightsConfig.CONST_自动外呼日志, ToolBarConfig.CONST_NotButton, true)]
[HttpGet]
public ActionResult Index(int type = -1, string robotId = "")
{
ViewBag.rightCode = RightsConfig.CONST_自动外呼日志;
List<int> containState = new List<int>() {
(int) EnumAiCallState.AI外呼成功,
(int) EnumAiCallState.AI外呼失败未答完,
(int) EnumAiCallState.AI外呼未接通,
(int) EnumAiCallState.AI外呼失败挂断,
};
List<SelectListItem> aiCallType = new List<SelectListItem>();
var dicType = cache_BL.GetAiStatus(1).Select(n => new SelectListItem { Text = n.Text, Value = n.Value.ToString() }).ToList();
foreach (var item in dicType)
{
if (containState.Contains(Convert.ToInt32(item.Value.ToString())))
{
aiCallType.Add(new SelectListItem
{
Text = item.Text,
Value = item.Value
});
}
}
List<SelectListItem> robotSelect = new List<SelectListItem>();
var robotList = cache_BL.GetAiRobotList();
foreach (var item in robotList)
{
robotSelect.Add(new SelectListItem { Text = item.RobotName, Value = item.Robot });
}
ViewBag.robotList = robotSelect;
ViewBag.aiCallType = aiCallType;
ViewBag.companyList = cache_BL.GetCompanyVirtual();
ViewBag.type = type;
ViewBag.robotId = robotId;
return View();
}
[HttpPost]
[AuthorizeRedirect(RightsConfig.CONST_自动外呼日志, ToolBarConfig.CONST_NotButton, false)]
public JsonResult Index(Laypage pager, string columns, AiRecordQueryDto dto)
{
try
{
var list = _task.GetList(ref pager, dto);
list.ForEach(l => l.sid = AESHelper.encyptData(l.Id.ToString(), "UPWEBSITE"));
var data = new LayuiData<AiCallTask_View>()
{
msg = "数据加载成功!",
count = pager.count,
code = 0,
data = list
};
return Json(data, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
CRM.Core.Common.LogHelper.Error(ex.ToString());
return Json(new { }, JsonRequestBehavior.AllowGet);
}
}
[AuthorizeRedirect(RightsConfig.CONST_自动外呼明细, ToolBarConfig.CONST_NotButton, true)]
[HttpGet]
public ActionResult RecordDetail(int type = 2, string robotId = "")
{
ViewBag.rightCode = RightsConfig.CONST_自动外呼明细;
List<SelectListItem> aiCallType = new List<SelectListItem>();
var dicType = cache_BL.GetAiStatus(1).Select(n => new SelectListItem { Text = n.Text, Value = n.Value.ToString() }).ToList();
foreach (var item in dicType)
{
aiCallType.Add(new SelectListItem
{
Text = item.Text,
Value = item.Value
});
}
var robotList = cache_BL.GetAiRobotList();
List<SelectListItem> robotSelect = new List<SelectListItem>();
foreach(var item in robotList)
{
robotSelect.Add(new SelectListItem {Text = item.RobotName,Value = item.Robot });
}
ViewBag.robotList = robotSelect;
ViewBag.aiCallType = aiCallType;
ViewBag.companyList = cache_BL.GetCompanyVirtual();
ViewBag.type = type;
ViewBag.robotId = robotId;
return View();
}
[HttpPost]
[AuthorizeRedirect(RightsConfig.CONST_自动外呼明细, ToolBarConfig.CONST_NotButton, false)]
public JsonResult RecordDetail(Laypage pager, string columns, AiRecordQueryDto dto)
{
try
{
var list = _task.GetList(ref pager, dto);
list.ForEach(l => l.sid = AESHelper.encyptData(l.Id.ToString(), "UPWEBSITE"));
var data = new LayuiData<AiCallTask_View>()
{
msg = "数据加载成功!",
count = pager.count,
code = 0,
data = list
};
return Json(data, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
CRM.Core.Common.LogHelper.Error(ex.ToString());
return Json(new { }, JsonRequestBehavior.AllowGet);
}
}
[HttpGet]
[AuthorizeRedirect(RightsConfig.CONST_自动外呼日志, ToolBarConfig.CONST_NotButton, false)]
public FileResult ExportData(string Channel, string resId, decimal? orderId, string cname, int aistatus,int hasCall,DateTime? xstime, DateTime? xetime,string robot,int type = 0)
{
Laypage pager = new Laypage
{
limit = 100000,
page = 1
};
AiRecordQueryDto dto = new AiRecordQueryDto
{
channel = Channel ,
resId = resId,
orderId = orderId,
cname = cname,
aistatus = aistatus,
hasCall = hasCall,
xstime = xstime,
xetime = xetime,
robot = robot,
type = type
};
var list = _task.GetList(ref pager, dto);
if(type == -1)
{
List<AiCallTaskExportView> res = new List<AiCallTaskExportView>();
foreach (var item in list)
{
res.Add(new AiCallTaskExportView
{
RobotName = item.RobotName,
Id = item.Id,
Remark = item.Remark,
RESID = item.RESID,
CallNo = item.CallNo,
CNAME = item.CNAME,
AiStatusName = item.AiStatusName,
StartTime = item.StartTime,
EndTime = item.EndTime,
Audio = item.Audio,
SvcTime = item.SvcTime,
ORDERID = item.ORDERID,
CHANNELNAME = item.CHANNELNAME,
HasCallName = item.HasCallName,
Rounds = item.Rounds
});
}
String file = string.Format("AiCallTaskExport{0}.xls", DateTime.Now.ToLocalTime().ToString("yyyyMMddHHmmssfffff"));
return File(ExcelHelper.ExportListModelToExcel<AiCallTaskExportView>(res, "AiCallTask", 30000, null), "application/ms-excel", file);
}
else
{
List<AiCallTaskDetailExportView> res = new List<AiCallTaskDetailExportView>();
foreach (var item in list)
{
res.Add(new AiCallTaskDetailExportView
{
RESID = item.RESID,
CallNo = item.CallNo,
CNAME = item.CNAME,
AiStatusName = item.AiStatusName,
StartTime = item.StartTime,
Id = item.Id,
EndTime = item.EndTime,
Audio = item.Audio,
SvcTime = item.SvcTime,
ORDERID = item.ORDERID,
CHANNELNAME = item.CHANNELNAME,
HasCallName = item.HasCallName,
Rounds = item.Rounds
});
}
String file = string.Format("AiCallTaskExport{0}.xls", DateTime.Now.ToLocalTime().ToString("yyyyMMddHHmmssfffff"));
return File(ExcelHelper.ExportListModelToExcel<AiCallTaskDetailExportView>(res, "AiCallTaskDetail", 30000, null), "application/ms-excel", file);
}
}
[AuthorizeRedirect(RightsConfig.CONST_自动外呼服务, ToolBarConfig.CONST_NotButton, true)]
public ActionResult AiService()
{
ViewBag.rightCode = RightsConfig.CONST_自动外呼服务;
ViewBag.companyList = cache_BL.GetCompanyVirtual();
var robotList = cache_BL.GetAiRobotList();
List<SelectListItem> robotSelect = new List<SelectListItem>();
foreach (var item in robotList)
{
robotSelect.Add(new SelectListItem { Text = item.RobotName, Value = item.Robot });
}
ViewBag.robotList = robotSelect;
return View();
}
[HttpPost]
[AuthorizeRedirect(RightsConfig.CONST_自动外呼服务, ToolBarConfig.CONST_NotButton, false)]
public JsonResult AiService(Laypage pager, AiRecordQueryDto dto)
{
try
{
var list = _task.GetAiRecordSum(ref pager, dto);
var data = new LayuiData<AiRecordSumView>()
{
msg = "数据加载成功!",
count = pager.count,
code = 0,
data = list
};
return Json(data, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
CRM.Core.Common.LogHelper.Error(ex.ToString());
return Json(new { }, JsonRequestBehavior.AllowGet);
}
}
[AuthorizeRedirect(RightsConfig.CONST_自动外呼服务, ToolBarConfig.CONST_Add, true)]
public ActionResult AiServiceAdd()
{
return View();
}
[AuthorizeRedirect(RightsConfig.CONST_自动外呼服务, ToolBarConfig.CONST_Edit, true)]
public ActionResult AiServiceEdit()
{
var list = cache_BL.GetAICallTaskConfigList();
var model = list.FirstOrDefault();
var noContainChannel = model.IgnoreHitConfigs.Where(x => x.HitKey == "Channel").Select(x => x.NoContain).FirstOrDefault();
var allChannel = GetAllChannel();
var noContainSubproductid = model.IgnoreHitConfigs.Where(x => x.HitKey == "Subproductid").Select(x => x.NoContain).FirstOrDefault();
var serviceModel = new AiServiceModel
{
RobotName = model.RobotName,
Remark = model.Remark,
Channel = noContainChannel,
Subproductid = string.Join(",", noContainSubproductid),
Sms = model.Sms
};
ViewBag.AllChannel = JsonHelper.ToJson(allChannel);
ViewBag.ModelJson = JsonHelper.ToJson(serviceModel);
return View();
}
[AuthorizeRedirect(RightsConfig.CONST_自动外呼服务, ToolBarConfig.CONST_Edit, false)]
public JsonResult EditSave(AiServiceModel model)
{
var list = cache_BL.GetAICallTaskConfigList();
var config = list.FirstOrDefault();
var noContainChannel = config.IgnoreHitConfigs.Where(x => x.HitKey == "Channel").FirstOrDefault();
var noContainSubproductid = config.IgnoreHitConfigs.Where(x => x.HitKey == "Subproductid").FirstOrDefault();
config.RobotName = model.RobotName;
config.Remark = model.Remark;
noContainChannel.NoContain = model.Channel.FirstOrDefault().Split(',').ToList();
noContainSubproductid.NoContain = string.IsNullOrEmpty(model.Subproductid) ? new List<string>()
: model.Subproductid.Split(',').ToList();
config.Sms = model.Sms;
var result = cache_BL.UpdateAICallTaskConfigList(ref errors, list);
return JsonResult(errors);
}
[AuthorizeRedirect(RightsConfig.CONST_自动外呼服务, ToolBarConfig.CONST_Edit, false)]
public JsonResult EditSaveRule(AiServiceRuleModel model)
{
var list = cache_BL.GetAICallTaskConfigList();
var config = list.FirstOrDefault();
var noContainChannel = config.IgnoreHitConfigs.Where(x => x.HitKey == "Channel").FirstOrDefault();
var noContainSubproductid = config.IgnoreHitConfigs.Where(x => x.HitKey == "Subproductid").FirstOrDefault();
var reCallMins = new List<int>();
for (var i = 1; model.ReCallCount > i; i++)
{
reCallMins.Add(model.ReCallMin);
}
config.ReCallMins = reCallMins;
if (model.ReCall)
{
config.ReCallStatus.Add(7);
}
else
{
config.ReCallStatus.Remove(7);
}
config.HgrecordEtime = model.HgrecordEtime;
config.HgrecordStime = model.HgrecordStime;
var result = cache_BL.UpdateAICallTaskConfigList(ref errors, list);
return JsonResult(errors);
}
[AuthorizeRedirect(RightsConfig.CONST_自动外呼服务, ToolBarConfig.CONST_NotButton, true)]
public ActionResult AiServiceRule()
{
var list = cache_BL.GetAICallTaskConfigList();
var model = list.FirstOrDefault();
var hgrecordStime = DateTime.Parse(model.HgrecordStime).ToString("HH:mm:ss");
var hgrecordEtime = DateTime.Parse(model.HgrecordEtime).ToString("HH:mm:ss");
var serviceModel = new AiServiceRuleModel
{
ReCallCount = model.ReCallMins.Count + 1,
ReCallMin = model.ReCallMins.FirstOrDefault(),
ReCall = model.ReCallStatus.Any(x => x == 7),
HgrecordEtime = hgrecordEtime,
HgrecordStime = hgrecordStime
};
ViewBag.ModelJson = JsonHelper.ToJson(serviceModel);
return View();
}
/// <summary>
/// 获取channelItem
/// </summary>
/// <param name="ChannelStr"></param>
/// <returns></returns>
private static ChannelItem GetChannelItem(string ChannelStr)
{
ChannelItem channelItem = new ChannelItem { Max = 0, Min = 0 };
try
{
int min = 0;
int max = 0;
var c = ChannelStr.Split('|');
int.TryParse(c[0], out min);
int.TryParse(c[1], out max);
channelItem.Max = max;
channelItem.Min = min;
}
catch (Exception ex)
{
return channelItem;
}
return channelItem;
}
private List<Dictionary<string, string>> GetAllChannel()
{
var list = new List<Dictionary<string, string>>();
var channel = new Dictionary<string, string>
{
{ "name", "北京软件一中心" },
{ "value", "2000|2199" }
};
list.Add(channel);
var channel2 = new Dictionary<string, string>
{
{ "name", "北京软件二中心" },
{ "value", "2200|2399" }
};
list.Add(channel2);
var channel3 = new Dictionary<string, string>
{
{ "name", "东方平台运营中心" },
{ "value", "25000|26199" }
};
list.Add(channel3);
var channel4 = new Dictionary<string, string>
{
{ "name", "新媒体一部" },
{ "value", "26200|26299" }
};
list.Add(channel4);
var channel5 = new Dictionary<string, string>
{
{ "name", "投顾联邦事业部" },
{ "value", "1100|1100" }
};
list.Add(channel5);
var channel6 = new Dictionary<string, string>
{
{ "name", "投顾联邦事业部" },
{ "value", "26600|26699" }
};
list.Add(channel6);
var channel7 = new Dictionary<string, string>
{
{ "name", "投顾联邦事业部" },
{ "value", "26700|26799" }
};
list.Add(channel7);
var channel8 = new Dictionary<string, string>
{
{ "name", "呱呱平台运营中心" },
{ "value", "26800|26899" }
};
list.Add(channel8);
var channel9 = new Dictionary<string, string>
{
{ "name", "投顾联邦事业部" },
{ "value", "26900|26999" }
};
list.Add(channel9);
var channel10 = new Dictionary<string, string>
{
{ "name", "软件业务三中心" },
{ "value", "1000|1099" }
};
list.Add(channel10);
var channel11 = new Dictionary<string, string>
{
{ "name", "东方软件一中心" },
{ "value", "2500|2599" }
};
list.Add(channel11);
var channel12 = new Dictionary<string, string>
{
{ "name", "东方软件一中心" },
{ "value", "3000|3099" }
};
list.Add(channel12);
var channel13 = new Dictionary<string, string>
{
{ "name", "首华平台运营中心" },
{ "value", "27100|27199" }
};
list.Add(channel13);
var channel14 = new Dictionary<string, string>
{
{ "name", "新媒体四部" },
{ "value", "27200|27299" }
};
list.Add(channel14);
var channel15 = new Dictionary<string, string>
{
{ "name", "东方软件三中心" },
{ "value", "4000|4999" }
};
list.Add(channel15);
var channel16 = new Dictionary<string, string>
{
{ "name", "东方软件二中心" },
{ "value", "5000|5999" }
};
list.Add(channel16);
var channel17 = new Dictionary<string, string>
{
{ "name", "六合软件一中心" },
{ "value", "7000|7299" }
};
list.Add(channel17);
var channel18 = new Dictionary<string, string>
{
{ "name", "六合软件二中心" },
{ "value", "7300|7599" }
};
list.Add(channel18);
var channel19 = new Dictionary<string, string>
{
{ "name", "新媒体运营二中心" },
{ "value", "7600|7999" }
};
list.Add(channel19);
var channel20 = new Dictionary<string, string>
{
{ "name", "新媒体一部" },
{ "value", "28000|28999" }
};
list.Add(channel20);
var channel21 = new Dictionary<string, string>
{
{ "name", "通联" },
{ "value", "3900|3999" }
};
list.Add(channel21);
return list;
}
}
public class AiServiceModel
{
public string RobotName { get; set; }
public string Remark { get; set; }
public List<string> Channel { get; set; }
public string Subproductid { get; set; }
public int Sms { get; set; }
}
public class AiServiceRuleModel
{
/// <summary>
/// 重拨次数
/// </summary>
public int ReCallCount { get; set; }
/// <summary>
/// 重拨时间间隔
/// </summary>
public int ReCallMin { get; set; }
/// <summary>
/// 外呼挂断是否启动外呼
/// </summary>
public bool ReCall { get; set; }
/// <summary>
/// 允许外拨时间段
/// </summary>
public string HgrecordStime { get; set; }
/// <summary>
/// 允许外拨时间段
/// </summary>
public string HgrecordEtime { get; set; }
}
}