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}"; } } }