using System;
using System.Collections.Generic;
using System.Common;
using System.IO;
using System.IRepositories;
using System.IRepositories.Bus;
using System.IRepositories.Call;
using System.IRepositories.Sys;
using System.Linq;
using System.Model;
using System.Model.Bus;
using System.Model.Call;
using System.Model.Sys;
using System.Net;
using System.Security.Claims;
using System.Threading.Tasks;
using System.Utility;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using SqlSugar;
using TVShoppingCallCenter_ZLJ.Controllers.Order;
using Utility;
namespace TVShoppingCallCenter_ZLJ.Controllers.CallCenter
{
///
/// 呼叫中心关联方法
///
// [Authorize]
[Produces("application/json")]
[Route("api/[controller]")]
public class CallFunctionController : BaseController
{
private readonly IConfiguration config;
private readonly ISys_MobileDataRepository busMobileDataRepository;
private readonly ICall_CallRecordsRepository busCallRecordsRepository;
private readonly ICall_CallOutboundRepository CallOutboundRecordsRepository;
private readonly ICDRRepository busCdrRepository;
private readonly Iauto_cdrRepository auto_cdrRepository;
private readonly ItaskRepository taskRepository;
private readonly ISys_AutoDialRepository sys_autodialrepository;
private readonly ISys_SystemConfigRepository busSystemConfigRepository;
private readonly ICus_VipInfoRepository _cus_vip_infoRepository;//客户
private readonly IBus_AfterSaleRepository busAfterSaleRepository;
private readonly ISys_UserAccountRepository sys_UserAccountRepository;
private readonly IBus_AutomaticOrderRepository bus_AutomaticOrderRepository;
private readonly IBus_ProductRepository _productRepository;
private readonly OrderFunctionController busOrderFunctionController;
private readonly IBus_OrderRepository bus_OrderRepository;
private readonly IBus_OrderDetailRepository bus_OrderDetailRepository;
private readonly IBus_OrderlogsRepository busOrderlogsRepository;
private readonly ISys_UserAccountRepository _sys_useraccountRepository;
private readonly ICall_DistributionRepository call_DistributionRepository;
private readonly ISys_MediaManagementRepository _sys_mediaManagement_Repository;
public CallFunctionController(ISys_SystemConfigRepository _busSystemConfigRepository,ICDRRepository _busCdrRepository,ICall_CallRecordsRepository _busCallRecordsRepository,IConfiguration _configuration, ISys_MobileDataRepository _busMobileDataRepository, ICus_VipInfoRepository cus_vip_infoRepository,
ICall_CallOutboundRepository _CallOutboundRecordsRepository, Iauto_cdrRepository _auto_cdrRepository
, ItaskRepository _taskRepository, ISys_AutoDialRepository _sys_autodialrepository, IBus_AfterSaleRepository _busAfterSaleRepository, ISys_UserAccountRepository _sys_UserAccountRepository, IBus_AutomaticOrderRepository _bus_AutomaticOrderRepository,
IBus_ProductRepository productRepository, OrderFunctionController _OrderFunctionController
, IBus_OrderRepository _bus_OrderRepository, IBus_OrderDetailRepository _bus_OrderDetailRepository
, IBus_OrderlogsRepository _busOrderlogsRepository,
ISys_UserAccountRepository sys_useraccountRepository
, ICall_DistributionRepository _call_DistributionRepository
, ISys_MediaManagementRepository sys_mediaManagement_Repository)
{
_sys_mediaManagement_Repository = sys_mediaManagement_Repository;
call_DistributionRepository = _call_DistributionRepository;
busOrderlogsRepository = _busOrderlogsRepository;
bus_OrderDetailRepository = _bus_OrderDetailRepository;
bus_OrderRepository = _bus_OrderRepository;
busSystemConfigRepository = _busSystemConfigRepository;
busCdrRepository = _busCdrRepository;
busCallRecordsRepository = _busCallRecordsRepository;
config = _configuration;
busMobileDataRepository = _busMobileDataRepository;
_cus_vip_infoRepository = cus_vip_infoRepository;
CallOutboundRecordsRepository = _CallOutboundRecordsRepository;
auto_cdrRepository = _auto_cdrRepository;
taskRepository = _taskRepository;
sys_autodialrepository = _sys_autodialrepository;
busAfterSaleRepository = _busAfterSaleRepository;
sys_UserAccountRepository = _sys_UserAccountRepository;
bus_AutomaticOrderRepository = _bus_AutomaticOrderRepository;
_productRepository = productRepository;
busOrderFunctionController = _OrderFunctionController;
_sys_useraccountRepository = sys_useraccountRepository;
}
///
/// 电话归属地查询
///
///
///
[HttpPost("GetTelLocation")]
public async Task GetTelLocation(string tel, int type = 0)
{
string location = await GetLocationFunc(tel, type);
return Success("归属地加载成功", location);
}
///
/// 同步通话记录
///
///
[HttpGet("GetTel")]
public async Task GetTel()
{
DateTime? dtime = DateTime.Now.AddYears(-10);
T_Call_CallRecords modelCallRecord = await busCallRecordsRepository.GetFirst(q => q.CdrId > 0 && q.IvrEndTime != null, o => new { o.IvrEndTime }, OrderByType.Desc);
if (modelCallRecord != null)
{
if (modelCallRecord.IvrEndTime != null)
dtime = modelCallRecord.IvrEndTime;
}
//modelCallRecord = await busCallRecordsRepository.GetFirst(q => q.CdrId > 0, o => new { o.IvrEndTime }, OrderByType.Desc);
//if (modelCallRecord != null)
//{
// if (modelCallRecord.EndTime != null)
// dtime = modelCallRecord.EndTime.GetValueOrDefault();
//}
List modellist = await busCdrRepository.GetListALL(q => q.hangup_time > dtime && q.hangup_time != null);
if (modellist != null && modellist.Count > 0)
{
int totle = 0;
int n = 0;
int n1 = 0;
totle = modellist.Count;
int minid = modellist[0].id;
int maxid = modellist[totle - 1].id;
var CallRecords = await busCallRecordsRepository.AddCall(minid, maxid);
string url = "请配置videoURL/";
T_Sys_SystemConfig model = await busSystemConfigRepository.GetSingle(q => q.F_ParamCode == "videoURL");
if (model != null)
{
url = model.F_ParamValue;
}
string FileUrlPath = "请配置FileUrlPath/";
T_Sys_SystemConfig models = await busSystemConfigRepository.GetSingle(q => q.F_ParamCode == "FileUrlPath");
var medias = await _sys_mediaManagement_Repository.GetListALL(x => x.F_IsDelete == 0);
if (models != null)
{
FileUrlPath = models.F_ParamValue;
}
List modelRecordList = new List();
List modelRecordLists = new List();
// List Distributions = new List();
List vips = new List();
modelRecordList = await busCallRecordsRepository.GetListALL(q => q.CdrId >= minid && q.CdrId <= maxid && q.IvrEndTime != null, o => new { o.IvrEndTime }, OrderByType.Desc);
if (modelRecordList != null || modelRecordList.Count > 0)
{
foreach (T_Call_CallRecords modelcdr in modelRecordList)
{
T_Call_CallRecords modelRecord = new T_Call_CallRecords();
modelRecord = modelcdr;
int Mediaid = 0;
// modelRecord.ActionID = modelcdr.action_id;
// modelRecord.TalkStartTime = modelcdr.answer_time;
// modelRecord.Callee = modelcdr.callee;
// modelRecord.RelayNumber = modelcdr.trunk_num;
if (!string.IsNullOrEmpty(modelRecord.RelayNumber))
{
var Media = medias.Where(x => x.F_Telephone == modelRecord.RelayNumber);
if (Media != null&& Media.Count() >0)
{
modelRecord.Media = Media.FirstOrDefault().F_Name;
Mediaid = Media.FirstOrDefault().F_ID;
}
}
if (modelRecord.CallType == 0)
{
string tel = "";
string userid = "";
if (modelRecord.Caller.Length > 11)
tel = modelRecord.Caller.TrimStart('0');
else
tel = modelRecord.Caller;
// modelcdr.UserCode = modelcdr.callee_agent;
if (!string.IsNullOrEmpty(modelRecord.UserCode))
{
var user = await sys_UserAccountRepository.GetFirst(x => x.F_UserCode == modelRecord.UserCode
&& x.F_DeleteFlag == 0);
if (user != null)
{
userid = user.F_UserId.ToString();
modelRecord.UserName = user.F_UserName;
modelRecord.Deptid = (int)user.F_DeptTeamId; ;
modelRecord.DeptName = user.F_Dept;
}
}
var cus = await _cus_vip_infoRepository.GetListVipInfo(" F_State = 1 AND (F_Phone = '" + tel + "' OR F_Mobile LIKE '" + tel + "')LIMIT 1");
if (cus != null)
{
modelRecord.CusCode = cus.F_Name;
modelRecord.CusId = cus.F_ID;
if (modelRecord.CallState == 1)
{
if (cus.F_Firstcalltime == null)
cus.F_Firstcalltime = modelRecord.EndTime;
cus.F_Lastholetime = modelRecord.EndTime;
if (!string.IsNullOrEmpty(modelRecord.Media))
{
cus.F_Media = modelRecord.Media;
cus.F_MediaId = Mediaid;
}
// var res = await _cus_vip_infoRepository.Update (cus);
}
vips.Add(cus);
// var res = await _cus_vip_infoRepository.Update(cus);
}
else
{
var Distributionlist = await call_DistributionRepository.GetFirst
(x => x.F_IsDelete == 0 && x.F_Tel == tel && x.F_Type == 1);
if (!string.IsNullOrEmpty(userid))
{
T_Cus_VipInfo vipInfo = new T_Cus_VipInfo();
vipInfo.F_Name = "新客户";
vipInfo.F_Phone = tel;
vipInfo.F_State = (int)EnumDelState.Enabled;
vipInfo.F_CreateBy = userid;
vipInfo.F_CreateOn = DateTime.Now;
vipInfo.F_Saleperson = userid;
vipInfo.F_Firstcalltime = modelRecord.EndTime;
vipInfo.F_Lastholetime = modelRecord.EndTime;
if (!string.IsNullOrEmpty(modelRecord.Media))
{
vipInfo.F_Media = modelRecord.Media;
vipInfo.F_MediaId = Mediaid;
}
var res = await _cus_vip_infoRepository.Add(vipInfo);
}
else
{
if (Distributionlist == null)
{
T_Call_Distribution t_Call_Distribution = new T_Call_Distribution();
t_Call_Distribution.F_Tel = tel;
t_Call_Distribution.F_Name = "";
t_Call_Distribution.F_Media = 0;
t_Call_Distribution.F_MediaName = "";
t_Call_Distribution.F_CrateTime = DateTime.Now;
t_Call_Distribution.F_CrateUser = "";
t_Call_Distribution.F_Type = 1;
if (Mediaid > 0)
{
t_Call_Distribution.F_Media = Mediaid;
t_Call_Distribution.F_MediaName = modelRecord.Media;
}
var res = await call_DistributionRepository.Add(t_Call_Distribution);
// Distributions.Add(t_Call_Distribution);
}
}
}
}
else
{
// modelRecord.UserCode = modelcdr.caller_agent;
var user = await sys_UserAccountRepository.GetFirst(x => x.F_UserCode == modelRecord.UserCode
&& x.F_DeleteFlag == 0);
if (user != null)
{
modelRecord.UserName = user.F_UserName;
modelRecord.Deptid = (int)user.F_DeptTeamId; ;
modelRecord.DeptName = user.F_Dept;
}
string tel = "";
if (tel.Length > 11 && tel.Length < 13)
tel = modelRecord.Caller.Substring(1, 12);
else if (tel.Length > 12)
tel = modelRecord.Callee.Substring(2, 13);
else
tel = modelRecord.Callee;
// modelRecord.UserCode = modelcdr.callee_agent;
// var cus = await _cus_vip_infoRepository.GetFirst(x => x.F_State == 1 && (x.F_Phone == tel || x.F_Mobile
//.Contains(tel)));
var cus = await _cus_vip_infoRepository.GetListVipInfo(" F_State = 1 AND (F_Phone = '" + tel + "' OR F_Mobile LIKE '" + tel + "')LIMIT 1");
if (cus != null)
{
modelRecord.CusCode = cus.F_Name;
modelRecord.CusId = cus.F_ID;
if (modelRecord.CallState == 1)
{
if (cus.F_Firstcalltime == null)
cus.F_Firstcalltime = modelRecord.EndTime;
cus.F_Lastholetime = modelRecord.EndTime;
if (!string.IsNullOrEmpty(modelRecord.Media))
{
cus.F_Media = modelRecord.Media;
cus.F_MediaId = Mediaid;
}
}
vips.Add(cus);
}
}
// modelRecord.Caller = modelcdr.caller;
// modelRecord.CallType = modelcdr.call_type;
// modelRecord.BeginTime = modelcdr.create_time;
// modelRecord.EndTime = modelcdr.end_time;
// modelRecord.CallState = modelcdr.is_answer;
// modelcdr.hangup_cause;挂机原因不赋值 HangUpReason
// modelcdr.leave_path 留言 赋值给了FilePath
// modelRecord.IvrEndTime = modelcdr.hangup_time;
// modelRecord.Id = modelcdr.id;
// modelRecord.MYD = modelcdr.myd;
// modelRecord.Remark = modelcdr.note;
// modelRecord.OperateType = modelcdr.op_type;
// modelRecord.FilePath = url+ modelcdr.record_path;
if (!string.IsNullOrEmpty(modelRecord.FilePath))
{
modelRecord.FilePath = url + modelRecord.FilePath;
}
// else if (!string.IsNullOrEmpty(modelcdr.record_path))
// {
// modelRecord.FilePath = url + modelcdr.leave_path;
// }
// modelRecord.RingStartTime = modelcdr.ring_time;
// modelRecord.IsReturnvisit = 0;
// modelRecord.CallId = modelcdr.uuid;
// modelRecord.CdrId = modelcdr.id;
modelRecord.Location = await GetLocationFunc(modelRecord.Caller, 1);
#region 计算时长
modelRecord.LongTime = (int)DateTimeConvert.DateDiff(DateInterval.Second, modelRecord.TalkStartTime.GetValueOrDefault(), modelRecord.EndTime.GetValueOrDefault());
if (modelRecord.TalkStartTime != null)
modelRecord.TalkLongTime = (int)DateTimeConvert.DateDiff(DateInterval.Second, modelRecord.TalkStartTime.GetValueOrDefault(), modelRecord.EndTime.GetValueOrDefault());
else
modelRecord.TalkLongTime = 0;
#endregion
n++;
n1++;
// await busCallRecordsRepository.Add (modelRecord);
modelRecordLists.Add(modelRecord);
if (n >= 20)
{
await busCallRecordsRepository.UpdateList(modelRecordLists);
modelRecordLists.Clear();
// await call_DistributionRepository.AddAndUpdateList(Distributions);
// Distributions.Clear();
n = 0;
}
}
}
//T_Call_CallRecords modelreturn= await busCallRecordsRepository.AddAndUpdateList(modelRecordList,s=>new {s.EndTime,s.TalkEndTime,s.IvrEndTime });
//T_Call_CallRecords modelreturn =
if (vips.Count > 0)
{
await _cus_vip_infoRepository.AddAndUpdateList(vips);
}
if (modelRecordLists.Count > 0)
{
await busCallRecordsRepository.AddAndUpdateList(modelRecordLists);
}
if (n1 == totle)
return Success ($"同步情况 成功/总数 = {n1}/{totle}");
}
return Success("");
}
///
/// 获取电话归属地
///
///
///
///
[NonAction]
internal async Task GetLocationFunc(string tel, int type = 0)
{
string location = "未知";
if (tel.Trim().Length == 12 && tel.Substring(0, 1) == "0")
{
T_Sys_MobileData mobile_Bll = new T_Sys_MobileData();
T_Sys_MobileData mobileModel = await busMobileDataRepository.GetFirst(q => q.F_MobileNum == tel.Substring(1, 8));
if (mobileModel != null)
{
location = mobileModel.F_CityDes;
if (type == 0)
{
location += mobileModel.F_CardDes;
}
}
}
if (tel.Trim().Length == 11 && tel.Substring(0, 1) != "0")
{
T_Sys_MobileData mobile_Bll = new T_Sys_MobileData();
T_Sys_MobileData mobileModel = await busMobileDataRepository.GetFirst(q => q.F_MobileNum == tel.Substring(0, 7));
if (mobileModel != null)
{
location = mobileModel.F_CityDes;
if (type == 0)
{
location += mobileModel.F_CardDes;
}
}
}
else
{
T_Sys_MobileData mobile_Bll = new T_Sys_MobileData();
T_Sys_MobileData mobileModel = await busMobileDataRepository.GetFirst(q => q.F_ZipCode == tel.Substring(0, 4));
if (mobileModel == null)
{
mobileModel = await busMobileDataRepository.GetFirst(q => q.F_ZipCode == tel.Substring(0, 3));
}
if (mobileModel != null)
{
location = mobileModel.F_CityDes;
if (type == 0)
{
location += mobileModel.F_CardDes;
}
}
}
return location;
}
#region 同步通话记录
///
/// 同步通话记录
///
///
[NonAction]
internal async Task SyncCallRecord()
{
DateTime? dtime = DateTime.Now.AddYears(-10);
T_Call_CallRecords modelCallRecord = await busCallRecordsRepository.GetFirst(q => q.CdrId > 0 && q.IvrEndTime != null, o => new { o.IvrEndTime }, OrderByType.Desc);
if (modelCallRecord != null)
{
if (modelCallRecord.IvrEndTime != null)
dtime = modelCallRecord.IvrEndTime;
}
//modelCallRecord = await busCallRecordsRepository.GetFirst(q => q.CdrId > 0, o => new { o.IvrEndTime }, OrderByType.Desc);
//if (modelCallRecord != null)
//{
// if (modelCallRecord.EndTime != null)
// dtime = modelCallRecord.EndTime.GetValueOrDefault();
//}
List modellist = await busCdrRepository.GetListALL(q => q.hangup_time > dtime && q.hangup_time != null);
if (modellist != null && modellist.Count > 0)
{
int totle = 0;
int n = 0;
int n1 = 0;
totle = modellist.Count;
int minid = modellist[0].id;
int maxid = modellist[totle - 1].id;
string url = "请配置videoURL/";
T_Sys_SystemConfig model = await busSystemConfigRepository.GetSingle(q => q.F_ParamCode == "videoURL");
if (model != null)
{
url = model.F_ParamValue;
}
string FileUrlPath = "请配置FileUrlPath/";
T_Sys_SystemConfig models = await busSystemConfigRepository.GetSingle(q => q.F_ParamCode == "FileUrlPath");
var medias = await _sys_mediaManagement_Repository.GetListALL(x => x.F_IsDelete == 0);
if (models != null)
{
FileUrlPath = models.F_ParamValue;
}
List modelRecordList = new List();
List modelRecordLists = new List();
// List Distributions = new List();
List vips = new List();
modelRecordList = await busCallRecordsRepository.GetListALL(q => q.CdrId >= minid && q.CdrId <= maxid && q.IvrEndTime != null, o => new { o.IvrEndTime }, OrderByType.Desc);
if (modelRecordList !=null || modelRecordList.Count>0)
{
foreach (T_Call_CallRecords modelcdr in modelRecordList)
{
T_Call_CallRecords modelRecord = new T_Call_CallRecords();
modelRecord = modelcdr;
int Mediaid = 0;
// modelRecord.ActionID = modelcdr.action_id;
// modelRecord.TalkStartTime = modelcdr.answer_time;
// modelRecord.Callee = modelcdr.callee;
// modelRecord.RelayNumber = modelcdr.trunk_num;
if (!string.IsNullOrEmpty(modelRecord.RelayNumber))
{
var Media = medias.Where(x => x.F_Telephone == modelRecord.RelayNumber);
if (Media != null && Media.Count() > 0)
{
modelRecord.Media = Media.FirstOrDefault ().F_Name;
Mediaid = Media.FirstOrDefault().F_ID;
}
}
if (modelRecord.CallType == 0)
{
string tel = "";
string userid = "";
if (modelRecord.Caller.Length > 11)
tel = modelRecord.Caller.TrimStart('0');
else
tel = modelRecord.Caller;
// modelcdr.UserCode = modelcdr.callee_agent;
if (!string.IsNullOrEmpty(modelRecord.UserCode))
{
var user = await sys_UserAccountRepository.GetFirst(x => x.F_UserCode == modelRecord.UserCode
&& x.F_DeleteFlag == 0);
if (user != null)
{
userid = user.F_UserId.ToString();
modelRecord.UserName = user.F_UserName;
modelRecord.Deptid = (int)user.F_DeptTeamId; ;
modelRecord.DeptName = user.F_Dept;
}
}
var cus = await _cus_vip_infoRepository.GetListVipInfo(" F_State = 1 AND (F_Phone = '" + tel + "' OR F_Mobile LIKE '" + tel + "') LIMIT 1");
if (cus.F_ID > 0)
{
modelRecord.CusCode = cus.F_Name;
modelRecord.CusId = cus.F_ID;
if (cus.F_Firstcalltime == null)
cus.F_Firstcalltime = modelRecord.EndTime;
cus.F_Lastholetime = modelRecord.EndTime;
if (modelRecord.CallState ==0)
cus.F_IsReturnvisit=0;
if (!string.IsNullOrEmpty(modelRecord.Media))
{
cus.F_Media = modelRecord.Media;
cus.F_MediaId = Mediaid;
}
vips.Add(cus);
if (string.IsNullOrEmpty(modelRecord.UserCode))
{
var user = await sys_UserAccountRepository.GetFirst(x => x.F_UserId == cus.F_Saleperson.ObjToInt()
&& x.F_DeleteFlag == 0);
if (user != null)
{
userid = user.F_UserId.ToString();
modelRecord.UserName = user.F_UserName;
modelRecord.Deptid = (int)user.F_DeptTeamId; ;
modelRecord.DeptName = user.F_Dept;
modelRecord.TeamId = (int)user.F_DeptTeamId ; ;
modelRecord.Team = user.F_Team ;
}
}
}
else
{
var Distributionlist = await call_DistributionRepository.GetFirst
(x => x.F_IsDelete == 0 && x.F_Tel == tel && x.F_Type == 1);
if (!string.IsNullOrEmpty(userid))
{
T_Cus_VipInfo vipInfo = new T_Cus_VipInfo();
vipInfo.F_Name = "新客户";
vipInfo.F_Phone = tel;
vipInfo.F_State = (int)EnumDelState.Enabled;
vipInfo.F_CreateBy = userid;
vipInfo.F_CreateOn = DateTime.Now;
vipInfo.F_Saleperson = userid;
vipInfo.F_Firstcalltime = modelRecord.EndTime;
vipInfo.F_Lastholetime = modelRecord.EndTime;
if (modelRecord.CallState == 0)
vipInfo.F_IsReturnvisit = 0;
if (!string.IsNullOrEmpty(modelRecord.Media))
{
vipInfo.F_Media = modelRecord.Media;
vipInfo.F_MediaId = Mediaid;
}
var res = await _cus_vip_infoRepository.Add(vipInfo);
if (res > 0)
{
modelRecord.CusCode = "新客户";
modelRecord.CusId = res;
// var res = await _cus_vip_infoRepository.Update(cus);
}
}
else
{
if (Distributionlist == null)
{
T_Call_Distribution t_Call_Distribution = new T_Call_Distribution();
t_Call_Distribution.F_Tel = tel;
t_Call_Distribution.F_Name = "";
t_Call_Distribution.F_Media = 0;
t_Call_Distribution.F_MediaName = "";
t_Call_Distribution.F_CrateTime = DateTime.Now;
t_Call_Distribution.F_CrateUser = "";
t_Call_Distribution.F_Type = 1;
if (Mediaid > 0)
{
t_Call_Distribution.F_Media = Mediaid;
t_Call_Distribution.F_MediaName = modelRecord.Media;
}
var res = await call_DistributionRepository.Add(t_Call_Distribution);
// Distributions.Add(t_Call_Distribution);
}
}
}
}
else
{
// modelRecord.UserCode = modelcdr.caller_agent;
var user = await sys_UserAccountRepository.GetFirst(x => x.F_UserCode == modelRecord.UserCode
&& x.F_DeleteFlag == 0);
if (user != null)
{
modelRecord.UserName = user.F_UserName;
modelRecord.Deptid = (int)user.F_DeptTeamId; ;
modelRecord.DeptName = user.F_Dept;
}
string tel = "";
if (tel.Length > 11 && tel.Length < 13)
tel = modelRecord.Caller.Substring(1, 12);
else if (tel.Length > 12)
tel = modelRecord.Callee.Substring(2, 13);
else
tel = modelRecord.Callee;
// modelRecord.UserCode = modelcdr.callee_agent;
// var cus = await _cus_vip_infoRepository.GetFirst(x => x.F_State == 1 && (x.F_Phone == tel || x.F_Mobile
//.Contains(tel)));
var cus = await _cus_vip_infoRepository.GetListVipInfo(" F_State = 1 AND (F_Phone = '" + tel + "' OR F_Mobile LIKE '" + tel + "')LIMIT 1");
if (cus.F_ID > 0)
{
modelRecord.CusCode = cus.F_Name;
modelRecord.CusId = cus.F_ID;
if (cus.F_Firstcalltime == null)
cus.F_Firstcalltime = modelRecord.EndTime;
cus.F_Lastholetime = modelRecord.EndTime;
if (!string.IsNullOrEmpty(modelRecord.Media))
{
cus.F_Media = modelRecord.Media;
cus.F_MediaId = Mediaid;
}
vips.Add(cus);
}
}
// modelRecord.Caller = modelcdr.caller;
// modelRecord.CallType = modelcdr.call_type;
// modelRecord.BeginTime = modelcdr.create_time;
// modelRecord.EndTime = modelcdr.end_time;
// modelRecord.CallState = modelcdr.is_answer;
// modelcdr.hangup_cause;挂机原因不赋值 HangUpReason
// modelcdr.leave_path 留言 赋值给了FilePath
// modelRecord.IvrEndTime = modelcdr.hangup_time;
// modelRecord.Id = modelcdr.id;
// modelRecord.MYD = modelcdr.myd;
// modelRecord.Remark = modelcdr.note;
// modelRecord.OperateType = modelcdr.op_type;
// modelRecord.FilePath = url+ modelcdr.record_path;
if (!string.IsNullOrEmpty(modelRecord.FilePath))
{
modelRecord.FilePath = url + modelRecord.FilePath;
}
// else if (!string.IsNullOrEmpty(modelcdr.record_path))
// {
// modelRecord.FilePath = url + modelcdr.leave_path;
// }
// modelRecord.RingStartTime = modelcdr.ring_time;
// modelRecord.IsReturnvisit = 0;
// modelRecord.CallId = modelcdr.uuid;
// modelRecord.CdrId = modelcdr.id;
modelRecord.Location = await GetLocationFunc(modelRecord.Caller, 1);
#region 计算时长
modelRecord.LongTime = (int)DateTimeConvert.DateDiff(DateInterval.Second, modelRecord.TalkStartTime.GetValueOrDefault(), modelRecord.EndTime.GetValueOrDefault());
if (modelRecord.TalkStartTime != null)
modelRecord.TalkLongTime = (int)DateTimeConvert.DateDiff(DateInterval.Second, modelRecord.TalkStartTime.GetValueOrDefault(), modelRecord.EndTime.GetValueOrDefault());
else
modelRecord.TalkLongTime = 0;
#endregion
n++;
n1++;
// await busCallRecordsRepository.Add (modelRecord);
modelRecordLists.Add(modelRecord);
if (n >= 20)
{
await busCallRecordsRepository.UpdateList(modelRecordLists);
modelRecordLists.Clear();
// await call_DistributionRepository.AddAndUpdateList(Distributions);
// Distributions.Clear();
n = 0;
}
}
}
if (vips.Count > 0)
{
await _cus_vip_infoRepository.AddAndUpdateList(vips);
vips.Clear();
}
//T_Call_CallRecords modelreturn= await busCallRecordsRepository.AddAndUpdateList(modelRecordList,s=>new {s.EndTime,s.TalkEndTime,s.IvrEndTime });
//T_Call_CallRecords modelreturn =
if (modelRecordLists.Count > 0)
{
await busCallRecordsRepository.AddAndUpdateList(modelRecordLists);
}
if (n1 == totle)
return $"同步情况 成功/总数 = {n1}/{totle}";
}
return "";
}
public string Upload(string pathUrl,string url )
{
//文件下载地址
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(pathUrl);
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream responseStream = response.GetResponseStream();
string path = "\\Upload\\video\\" + DateTime.Now.ToString("yyyy") + "\\" + DateTime.Now.ToString("MM") + "\\" + DateTime.Now.ToString("dd")+ "\\";
string Currentpath = Directory.GetCurrentDirectory() + path;
// 如果不存在就创建file文件夹
if (!Directory.Exists(Currentpath))
{
if (Currentpath != null) Directory.CreateDirectory(Currentpath);
}
string newFileName = Guid.NewGuid().ToString().Replace("-", "") + ".mp4"; //随机生成新的文件名
Stream stream = new FileStream(Currentpath + newFileName, FileMode.Create);
byte[] bArr = new byte[1024];
int size = responseStream.Read(bArr, 0, bArr.Length);
while (size > 0)
{
stream.Write(bArr, 0, size);
size = responseStream.Read(bArr, 0, bArr.Length);
}
stream.Close();
responseStream.Close();
return url + "/Upload/video/" +DateTime.Now.ToString("yyyy") + "/" + DateTime.Now.ToString("MM") + "/" + DateTime.Now.ToString("dd") + "/" + newFileName;
}
catch (Exception e)
{
return e.Message ;
}
}
///
/// 同步自动外呼通话记录
///
///
[NonAction]
internal async Task SyncOutbound()
{
DateTime dtime = DateTime.Now.AddYears(-10);
int maxid = 0;
T_Call_CallOutbound modelCallRecord = await CallOutboundRecordsRepository.GetFirst(q => q.CdrId > 0, o => new { o.CdrId }, OrderByType.Desc);
if (modelCallRecord != null)
{
maxid = modelCallRecord.CdrId;
}
modelCallRecord = await CallOutboundRecordsRepository.GetFirst(q => q.CdrId > 0, o => new { o.EndTime }, OrderByType.Desc);
if (modelCallRecord != null)
{
if (modelCallRecord.EndTime != null)
dtime = modelCallRecord.EndTime.GetValueOrDefault();
}
List modellist = await auto_cdrRepository.GetListALL(q => q.id > maxid );
int totle = 0;
int n = 0;
int n1 = 0;
if (modellist != null && modellist.Count > 0)
{
string url = "请配置videoURL/";
T_Sys_SystemConfig model = await busSystemConfigRepository.GetSingle(q => q.F_ParamCode == "videoURL");
if (model != null)
{
url = model.F_ParamValue;
}
totle = modellist.Count;
List modelRecordList = new List();
foreach (auto_cdr modelcdr in modellist)
{
T_Call_CallOutbound modelRecord = new T_Call_CallOutbound();
modelRecord.ActionID =1;
modelRecord.TalkStartTime = modelcdr.answer_time;
modelRecord.Callee = modelcdr.callee;
modelRecord.UserCode = modelcdr.agent;
modelRecord.Caller = modelcdr.caller;
modelRecord.CallType =1;
modelRecord.BeginTime = modelcdr.create_time;
modelRecord.EndTime = modelcdr.end_time;
// modelRecord.CallState = modelcdr.is_answer;
// modelRecord.Id =(int ) modelcdr.id;
modelRecord.FilePath = url + modelcdr.record_path;
if (string.IsNullOrEmpty(modelcdr.record_path) && !string.IsNullOrEmpty(modelcdr.record_path ))
{
modelRecord.FilePath = url + modelcdr.record_path;
}
modelRecord.RingStartTime = modelcdr.ring_time;
modelRecord.CallId = modelcdr.uuid;
modelRecord.CdrId = (int)modelcdr.id;
modelRecord.Location = await GetLocationFunc(modelcdr.caller, 1);
#region 计算时长
modelRecord.LongTime = (int)DateTimeConvert.DateDiff(DateInterval.Second, modelcdr.create_time.GetValueOrDefault(), modelcdr.end_time.GetValueOrDefault());
if (modelcdr.answer_time != null)
modelRecord.TalkLongTime = (int)DateTimeConvert.DateDiff(DateInterval.Second, modelcdr.answer_time.GetValueOrDefault(), modelcdr.end_time.GetValueOrDefault());
else
modelRecord.TalkLongTime = 0;
#endregion
n++;
n1++;
modelRecordList.Add(modelRecord);
if (n >= 2000)
{
await CallOutboundRecordsRepository.AddAndUpdateList(modelRecordList);
modelRecordList.Clear();
n = 0;
}
}
await CallOutboundRecordsRepository.AddAndUpdateList(modelRecordList);
}
return $"同步情况 成功/总数 = {n1}/{totle}";
}
///
/// 同步外呼状态
///
///
[NonAction]
internal async Task SyncAutodial()
{
List modellist = await taskRepository.GetListALL(q => q.status ==0 &&q .state ==1);
int totle = 0;
int n = 0;
int n1 = 0;
if (modellist != null && modellist.Count > 0)
{
List modelAutoDial = new List();
List taskList = new List();
foreach (task it in modellist)
{
var AutoDial = await sys_autodialrepository.GetSingle (q => q.F_ID == it.outbound_id );
if (AutoDial!=null )
{
AutoDial.F_ISOutbound = 1;
modelAutoDial.Add(AutoDial);
n++;
}
it.status = 1;
taskList.Add(it);
#endregion
n1++;
if (n >= 2000)
{
await sys_autodialrepository.AddAndUpdateList(modelAutoDial);
modelAutoDial.Clear();
n = 0;
}
if (n1 >=2000)
{
await taskRepository.UpdateList(taskList);
taskList.Clear();
n1 = 0;
}
}
await sys_autodialrepository.AddAndUpdateList(modelAutoDial);
await taskRepository.UpdateList (taskList);
}
return $"同步情况 成功/总数 = {n1}/{totle}";
}
///
/// 同步仓库
///
///
[NonAction]
internal async Task AfterSale()
{
List modellist = await busAfterSaleRepository.GetListALL(q => q.F_CheckStateSH == 0&& q.F_State ==0);
int totle = 0;
int n1 = 0;
if (modellist != null && modellist.Count > 0)
{
DateTime t1 = DateTime.Now;
List afterSales = new List();
foreach (var it in modellist)
{
try
{
if ((int)DateTimeConvert.DateDiff(DateInterval.Day, (DateTime)it.F_CheckTimeSH, DateTime.Now) > 60)
{
it.F_CheckStateKG = 3;
it.F_KGRemarks = "超过60天退回";
it.F_CheckTimeKG = DateTime.Now;
afterSales.Add(it);
n1++;
}
}
catch
{
}
totle++;
}
await busAfterSaleRepository.AddAndUpdateList(afterSales);
}
return $"同步情况 成功/总数 = {n1}/{totle}";
}
///
/// 自动下单
///
///
[NonAction]
internal async Task Automatic()
{
int count=0;
var autom =await bus_AutomaticOrderRepository.GetListALL(x => x.F_State == 1);
List vipInfos = new List();
List orders = new List();
List logs = new List();
List modelDetailList = new List();
if (autom!=null && autom.Count >0)
{
foreach (var it in autom)
{
var viplist = await _cus_vip_infoRepository.GetListALL
(x => x.F_Count >= it.F_Count && x.F_MembershipId == it.F_Grade
&& x .F_GiveTime 0)
{
foreach (var iv in viplist)
{
T_Bus_Order modelOrder = new T_Bus_Order();
#region 订单属性
//必填
modelOrder.F_ADFrom = "官网";
modelOrder.F_Type = "自动下单";
modelOrder.F_Id = "BJ" + iv.F_Saleperson + "T" + DateTimeConvert.ToTimetag(DateTime.Now); ;
modelOrder.F_Customer = iv.F_Name;
modelOrder.F_CustomerPhone = iv.F_Phone;
modelOrder.F_CustomerTel = iv.F_Phone;
modelOrder.F_Addressee = iv.F_Name;
//选填 快递属性
modelOrder.F_TrackingNo = "";
modelOrder.F_AddPhone = iv.F_Phone;
modelOrder.F_AddProvince = iv.F_Province;
modelOrder.F_AddCity = iv.F_City;
modelOrder.F_AddArea = iv.F_Area;
modelOrder.F_AddTown = iv.F_Town;
modelOrder.F_AddDes = "赠送订单";
modelOrder.F_Address = iv.F_Address;
modelOrder.F_Remark = "自动下单";
modelOrder.F_PayType = "货到付款";
modelOrder.F_VipId = iv.F_ID;
modelOrder.F_Belong = iv.F_Saleperson.ObjToInt();
var useraccount = await _sys_useraccountRepository.GetSingle(x => x.F_UserId == modelOrder.F_Belong);
if (useraccount != null)
{
modelOrder.F_Department = useraccount.F_DeptId;
modelOrder.F_Core = useraccount.F_DeptTeamId;
modelOrder.F_Group = useraccount.F_GroupId;
}
modelOrder.F_BelongName = "ID:" + iv.F_Saleperson;
modelOrder.F_ExpressFee = 0;
// modelOrder.F_Stock = input.F_Stock;
modelOrder.F_IsExpress = 0;
modelOrder.F_RealPrice = 0;
modelOrder.F_MemberNotes = "自动下单";//会员备注
modelOrder.F_UseScore = 0;
modelOrder.F_State = 1;
//选填 关联属性
modelOrder.F_Status = 0;
modelOrder.F_IsPayment = 0;
//必须属性 系统生成
modelOrder.F_AddTime = DateTime.Now;
modelOrder.F_AddUser = 0;
modelOrder.F_AddUserName = "系统";
#endregion
decimal totle = 0.00M;
// List Productlist = new List();
int n = 1;
string[] ids = it.F_ProductId.Split(',');
if (ids == null || ids.Length <= 0)
return "没有设置商品";
foreach (var m in ids)
{
T_Bus_Product modelProduct = await _productRepository.GetSingle(b => b.F_ProductId == m );
if (modelProduct == null) return "在售商品不存在";
T_Bus_OrderDetail modelDetail = new T_Bus_OrderDetail();
modelDetail.F_ProductName = modelProduct.F_ProductName;
modelDetail.F_ProductId = modelProduct.F_ProductId;
modelDetail.F_Specifications = modelProduct.F_Specifications;
modelDetail.F_ProductShortName = modelProduct.F_ProductShortName;
modelDetail.F_Id = Guid.NewGuid().ToString().Replace("-", "");
modelDetail.F_OrderId = modelOrder.F_Id;
modelDetail.F_Count = it .F_Count;
modelDetail.F_Price = modelProduct.F_MemberPrice;
modelDetail.F_DealPrice = 0;
modelOrder.F_IsZeroCommodity =0;
modelDetail.F_Sort = n;
modelDetail.F_AddTime = DateTime.Now;
if (modelProduct.F_ClassName == "袜子" && modelDetail.F_DealPrice == 0)
{
modelOrder.F_IsZeroCommodity = 1;
}
modelDetail.F_AddUser = modelOrder.F_AddUser;
modelDetail.F_AddUserName = modelOrder.F_AddUserName;
modelDetail.F_TotlePrice = modelDetail.F_DealPrice * modelDetail.F_Count;
modelDetail.F_Activity = 0;
totle += modelDetail.F_TotlePrice;
modelDetailList.Add(modelDetail);
// List listStock = await busOrderFunctionController.GetStock(it.F_ProductId, "山西仓");
// List listStock1 = await busOrderFunctionController.GetStock(it.F_ProductId, "新乡仓");
//modelProduct.F_UseNumber += it.F_Count;
//if (modelProduct.F_UseNumber > listStock[0].qty && modelProduct.F_UseNumber > listStock1[0].qty)
//{
// return "提交失败,可配量不足.";
//}
//else
//{
// Productlist.Add(modelProduct);
//}
n++;
}
// await _productRepository.UpdateList(Productlist);
modelOrder.F_SubmitTime = DateTime.Now;
if (modelOrder.F_IsPayment > 0)
modelOrder.F_State = 7;
else
modelOrder.F_State = 1;
modelOrder.F_FlowNum = DateTime.Now.ToString("yyMMddHHmmss") + "U" + UserLogin.UserId + "R" + new Random().Next(9);
modelOrder.F_TotlePrice = totle;
//订单完成后也不计算积分
T_Bus_Orderlogs t_Bus_Orderlogs = new T_Bus_Orderlogs();
modelOrder.F_TotlePrice = 0;//订单总额(包括快递费)
//modelOrder.F_RecommenderTel = iv .F_RecommenderTel;
modelOrder.F_PayState = 1;
modelOrder.F_IsZeroCommodity = 0;
t_Bus_Orderlogs.F_WoID = modelOrder.F_Id;
t_Bus_Orderlogs.F_OptContent = UserLogin.UserName + "提交订单";
t_Bus_Orderlogs.F_CreateUser = UserLogin.UserCode;
t_Bus_Orderlogs.F_CreateTime = DateTime.Now;
t_Bus_Orderlogs.F_WoState = modelOrder.F_State;
logs.Add(t_Bus_Orderlogs);
orders.Add(modelOrder);
count++;
}
}
}
}
if (await bus_OrderDetailRepository.AddMany(modelDetailList))
{
if (await bus_OrderRepository.AddMany(orders))
{
await busOrderlogsRepository.AddMany(logs);
}
else
count = 0;
}
return "添加" + count + "条";
}
///
/// 同步外呼状态
///
///
[NonAction]
internal async Task SyncArchivePool()
{
List modellist = await taskRepository.GetListALL(q => q.status == 0 && q.state == 1);
int totle = 0;
int n = 0;
int n1 = 0;
if (modellist != null && modellist.Count > 0)
{
List modelAutoDial = new List();
List taskList = new List();
foreach (task it in modellist)
{
var AutoDial = await sys_autodialrepository.GetSingle(q => q.F_ID == it.outbound_id);
if (AutoDial != null)
{
AutoDial.F_ISOutbound = 1;
modelAutoDial.Add(AutoDial);
n++;
}
it.status = 1;
taskList.Add(it);
n1++;
if (n >= 2000)
{
await sys_autodialrepository.AddAndUpdateList(modelAutoDial);
modelAutoDial.Clear();
n = 0;
}
if (n1 >= 2000)
{
await taskRepository.UpdateList(taskList);
taskList.Clear();
n1 = 0;
}
}
await sys_autodialrepository.AddAndUpdateList(modelAutoDial);
await taskRepository.UpdateList(taskList);
}
return $"同步情况 成功/总数 = {n1}/{totle}";
}
}
}