using CRM.Core.Model.Entity; using CRM.Core.Model.Enum; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using WX.CRM.Common; using WX.CRM.Common.StockHelper; namespace CRM.Core.BLL.Util { /// /// 缓存BL /// public class CACHE_BL { #region 根据Model.Enum.Parameter 获取参数value public string GetValue_Parameter(string key) { string cacheKey = "cache_Parameter_getList"; List modelist; if (CacheHelper.Exists(cacheKey)) modelist = CacheHelper.Get>(cacheKey); else { using (var db = new zxdContext()) { modelist = db.BAS_PARAMETER.ToList(); CacheHelper.Set(cacheKey, modelist); } } var model = modelist.FirstOrDefault(m => m.PARAKEY == key); if (model == null) return ""; return model.PARAVALUE; } /// /// 根据Model.Enum.Parameter 获取参数value /// /// public string GetValue_Parameter(CRM.Core.Model.Enum.Parameter key) { string cacheKey = "cache_Parameter_getList"; List modelist; if (CacheHelper.Exists(cacheKey)) modelist = CacheHelper.Get>(cacheKey); else { using (CRM.Core.Model.Entity.zxdContext db = new CRM.Core.Model.Entity.zxdContext()) { modelist = db.BAS_PARAMETER.ToList(); CacheHelper.Set(cacheKey, modelist); } } string sss = key.ToString(); CRM.Core.Model.Entity.BAS_PARAMETER sysConfig = modelist.FirstOrDefault(m => m.PARAKEY == "Sys_Environment_DeptCode"); CRM.Core.Model.Entity.BAS_PARAMETER model = modelist.FirstOrDefault(m => m.PARAKEY == key.ToString() && m.DEPTCDOE == sysConfig.PARAVALUE); if (model == null) model = modelist.FirstOrDefault(m => m.PARAKEY == key.ToString() && (m.DEPTCDOE == "" || m.DEPTCDOE == null)); if (model == null) return ""; return model.PARAVALUE; } public List GetDeptments() { var webapi = GetValue_Parameter(Parameter.Zxd_CoreApiUrl); var url = $"{webapi}api/deptment/Depts"; var result = Utility.GetData(url, "", Encoding.UTF8); var response = JsonConvert.DeserializeObject>>(result); if (response.code == 0 && response.data != null) { return response.data.Where(x => x.SortNo > 0).OrderBy(x => x.SortNo).ToList(); } return new List(); } /// /// 根据系统参数分类获取系统参数列表 /// /// 系统参数分类 /// public List GetList_Parameter(CRM.Core.Model.Enum.ParameterGroup type) { string cacheKey = "cache_Parameter_getList"; List modelist; if (CacheHelper.Exists(cacheKey)) modelist = CacheHelper.Get>(cacheKey); else { using (CRM.Core.Model.Entity.zxdContext db = new CRM.Core.Model.Entity.zxdContext()) { modelist = db.BAS_PARAMETER.ToList(); CacheHelper.Set(cacheKey, modelist); } } List list = modelist.Where(m => m.GROUPID.Trim() == type.ToString().Trim()).ToList(); return list; } #endregion 根据Model.Enum.Parameter 获取参数value #region 获取内部公司列表 cache_Company_getList /// /// 获取公司列表 /// /// public List GetList_innerCompany() { string cacheKey = "cache_Company_getList"; if (CacheHelper.Exists(cacheKey)) return CacheHelper.Get>(cacheKey); using (var db = new zxdContext()) { List list = db.BAS_COMPANY.ToList(); CacheHelper.Set(cacheKey, list); return list; } } public List GetCompanyCode() { string cacheKey = "cache_Company_Code"; if (CacheHelper.Exists(cacheKey)) return CacheHelper.Get>(cacheKey); using (var db = new zxdContext()) { var list = db.Bas_CompanyChannel.ToList(); CacheHelper.Set(cacheKey, list); return list; } } public List GetCompanyVirtual() { var cacheKey = "cache_comapny_virtual"; if (CacheHelper.Exists(cacheKey)) return CacheHelper.Get>(cacheKey); using (var db = new zxdContext()) { var list = db.Bas_CompanyVirtual.Where(p => p.IsDelete == 0).OrderBy(p => p.Sort).ToList(); CacheHelper.Set(cacheKey, list); return list; } } public List GetCompanyWework() { var cacheKey = "cache_comapny_wework"; if (CacheHelper.Exists(cacheKey)) return CacheHelper.Get>(cacheKey); using (var db = new zxdContext()) { var list = db.Bas_CompanyWework.ToList(); CacheHelper.Set(cacheKey, list); return list; } } public List> GetDeptDownList() { var cacheKey = "cache_deptDownList"; if (CacheHelper.Exists(cacheKey)) return CacheHelper.Get>>(cacheKey); var companyList = GetCompanyVirtual(); var channelList = companyList.Where(n => !string.IsNullOrWhiteSpace(n.Channel)).Select(n => Convert.ToInt32(n.Channel.Split(',').FirstOrDefault())).ToList(); var depts = ConvertChannelName(channelList); var allChannel = new List>(); foreach (var company in depts) { var channel = new Dictionary { { "name", company.title }, { "value", company.id.ToString() } }; allChannel.Add(channel); } CacheHelper.Set(cacheKey, allChannel, DateTime.Now.AddDays(1)); return allChannel; } #endregion 获取内部公司列表 cache_Company_getList #region 获取短信类型 public List GetSmsTypeList() { string cacheKey = "cache_smsTypeList"; if (CacheHelper.Exists(cacheKey)) return CacheHelper.Get>(cacheKey); using (var db = new zxdContext()) { List msgType = db.SMS_MSGTYPE.ToList(); CacheHelper.Set(cacheKey, msgType); return msgType; } } public List GetSmsSubTypeList() { var cacheKey = "cache_smsSubTypeList"; if (CacheHelper.Exists(cacheKey)) return CacheHelper.Get>(cacheKey); using (var db = new zxdContext()) { var msgType = db.SMS_MSGSUBTYPE.ToList(); CacheHelper.Set(cacheKey, msgType); return msgType; } } public List GetSmsClientList() { var cacheKey = "cache_smsClientList"; if (CacheHelper.Exists(cacheKey)) return CacheHelper.Get>(cacheKey); using (var db = new zxdContext()) { var msgType = db.SMS_MSGTYPE_CLIENT.ToList(); CacheHelper.Set(cacheKey, msgType); return msgType; } } /// /// 获取短信类型 树形 /// /// public object GetSmsTypeTreeList() { string cacheKey = "cache_smsType_getTreeList"; if (CacheHelper.Exists(cacheKey)) return CacheHelper.Get(cacheKey); using (var db = new zxdContext()) { List msgType = db.SMS_MSGTYPE.ToList(); List msgSubType = db.SMS_MSGSUBTYPE.ToList(); var obj = new List(); foreach (var model in msgType) { obj.Add(new { id = "-" + model.TYPECODE, text = model.TYPENAME, children = GetSmsTypeTreeChildList(msgSubType, model.TYPECODE) }); } CacheHelper.Set(cacheKey, obj); return obj; } } /// /// 获取短信crm短信类型 树形(根据短信大类) /// /// 短信大类 /// public object GetSmsCrmTreeList() { string cacheKey = "cache_smsCrmType_getTreeList"; if (CacheHelper.Exists(cacheKey)) return CacheHelper.Get(cacheKey); using (var db = new zxdContext()) { List msgType = db.SMS_MSGTYPE.Where(m => m.TYPECODE == "CRMSMS0001").ToList(); List msgSubType = db.SMS_MSGSUBTYPE.ToList(); var obj = new List(); foreach (var model in msgType) { obj.Add(new { id = "-" + model.TYPECODE, text = model.TYPENAME, children = GetSmsTypeTreeChildList(msgSubType, model.TYPECODE) }); } CacheHelper.Set(cacheKey, obj); return obj; } } private List GetSmsTypeTreeChildList(List msgSubType, string parentId) { var obj = new List(); foreach (var model in msgSubType.Where(m => m.TYPECODE == parentId)) { obj.Add(new { id = model.SUBTYPEID, typeCode = model.TYPECODE, subTypeCode = model.SUBTYPECODE, text = model.SUBTYPENAME }); } return obj; } #endregion 获取短信类型 #region 销售部列表 public List GetList_SalesDepartMent() { string cacheKey = "cache_SalesDepartMent_getList"; if (CacheHelper.Exists(cacheKey)) return CacheHelper.Get>(cacheKey); using (zxdContext db = new zxdContext()) { var list = db.BAS_SALESDEPARTMENT.ToList(); CacheHelper.Set(cacheKey, list); return list; } } #endregion 销售部列表 #region 角色查询 /// /// 获取工单小类信息 /// /// public List GetList_Role() { string cacheKey = "cache_Role_getList"; if (CacheHelper.Exists(cacheKey)) return CacheHelper.Get>(cacheKey); using (zxdContext db = new zxdContext()) { List list = db.BAS_ROLE.ToList(); CacheHelper.Set(cacheKey, list); return list; } } /// /// 获取角色编码 /// /// 角色ID数组 /// public string Get_RoleCodes(int[] roleIds) { List roleList = GetList_Role().Where(m => roleIds.Contains(m.ROLEID)).ToList(); StringBuilder codes = new StringBuilder(); foreach (BAS_ROLE role in roleList) { codes.AppendFormat("[{0}]", role.CODE); } return codes.ToString(); } #endregion 角色查询 #region 菜单缓存 /// /// 菜单缓存 /// /// public List GetList_LeftMemu() { string cacheKey = "cache_LeftMemu_getList"; if (CacheHelper.Exists(cacheKey)) return CacheHelper.Get>(cacheKey); using (var db = new zxdContext()) { var list = db.BAS_LEFTMEMU.ToList(); CacheHelper.Set(cacheKey, list); return list; } } /// /// 模块导航菜单缓存 /// /// public List GetList_ModuleMenu() { string cacheKey = "cache_ModuleMenu_getList"; if (CacheHelper.Exists(cacheKey)) return CacheHelper.Get>(cacheKey); using (var db = new zxdContext()) { var list = db.BAS_MODULEMENU.OrderBy(m => m.SORTID).ToList(); CacheHelper.Set(cacheKey, list); return list; } } #endregion 菜单缓存 #region AI机器人缓存 public List GetAiRobotList() { string cacheKey = "cache_AiRobot_getList"; if (CacheHelper.Exists(cacheKey)) return CacheHelper.Get>(cacheKey); using (var db = new zxdContext()) { var configName = Parameter.AI_CallTaskConfig.ToString(); var robot = db.BAS_PARAMETER.FirstOrDefault(n => n.PARAKEY == configName); List robotList = new List(); if (robot != null) { try { var robotModel = JsonConvert.DeserializeObject(robot.PARAVALUE); robotList.Add(robotModel); } catch (Exception ex) { LogHelper.Error(ex.Message); } } CacheHelper.Set(cacheKey, robotList); return robotList; } } /// /// 默认所有状态 -1 /// /// /// public List GetAiStatus(int type = -1) { string cacheKey = $"cache_AiStatus_{type}"; if (CacheHelper.Exists(cacheKey)) return CacheHelper.Get>(cacheKey); List res = new List(); var dic = GetAiHgrecordStatusnameKV(type); foreach (var item in dic) { AiStatus obj = new AiStatus { Text = item.Value.ToString(), Value = item.Key }; res.Add(obj); } CacheHelper.Set(cacheKey, res); return res; } public Dictionary GetAiHgrecordStatusnameKV(int type) { Dictionary Ai_hgrecord_statusnameKV = new Dictionary(); switch (type) { case 1: Ai_hgrecord_statusnameKV.Add(1, "等待AI外呼"); Ai_hgrecord_statusnameKV.Add(2, "已提交AI外呼"); Ai_hgrecord_statusnameKV.Add(3, "AI外呼失败(未答完)"); Ai_hgrecord_statusnameKV.Add(7, "AI外呼失败(挂断)"); Ai_hgrecord_statusnameKV.Add(4, "AI外呼未接通"); Ai_hgrecord_statusnameKV.Add(5, "AI外呼成功"); Ai_hgrecord_statusnameKV.Add(8, "AI外呼取消"); break; case 2: Ai_hgrecord_statusnameKV.Add(-1, "忽略不做AI外呼"); Ai_hgrecord_statusnameKV.Add(0, "尚未进行AI外呼"); Ai_hgrecord_statusnameKV.Add(1, "等待AI外呼"); Ai_hgrecord_statusnameKV.Add(2, "已提交AI外呼"); Ai_hgrecord_statusnameKV.Add(3, "AI外呼失败(未答完)"); Ai_hgrecord_statusnameKV.Add(7, "AI外呼失败(挂断)"); Ai_hgrecord_statusnameKV.Add(4, "AI外呼未接通"); Ai_hgrecord_statusnameKV.Add(5, "AI外呼成功"); Ai_hgrecord_statusnameKV.Add(6, "等待AI重拨"); Ai_hgrecord_statusnameKV.Add(-2, "AI重拨失败"); Ai_hgrecord_statusnameKV.Add(8, "AI外呼取消"); Ai_hgrecord_statusnameKV.Add(9, "人工回访成功"); Ai_hgrecord_statusnameKV.Add(10, "电子回访成功"); break; default: Ai_hgrecord_statusnameKV.Add(-1, "忽略不做AI外呼"); Ai_hgrecord_statusnameKV.Add(0, "尚未进行AI外呼"); Ai_hgrecord_statusnameKV.Add(1, "等待AI外呼"); Ai_hgrecord_statusnameKV.Add(2, "AI外呼需人工介入"); Ai_hgrecord_statusnameKV.Add(5, "AI外呼成功"); Ai_hgrecord_statusnameKV.Add(4, "电子回访成功"); Ai_hgrecord_statusnameKV.Add(9, "人工回访成功"); break; } return Ai_hgrecord_statusnameKV; } public List GetAICallTaskConfigList() { string cacheKey = "cache_AiCallTaskConfig_getList"; if (CacheHelper.Exists(cacheKey)) return CacheHelper.Get>(cacheKey); using (var db = new zxdContext()) { var configName = Parameter.AI_CallTaskConfig.ToString(); var robot = db.BAS_PARAMETER.FirstOrDefault(n => n.PARAKEY == configName); List robotList = new List(); if (robot != null) { try { var robotModel = JsonConvert.DeserializeObject(robot.PARAVALUE); robotList.Add(robotModel); } catch (Exception ex) { LogHelper.Error(ex.Message); } } CacheHelper.Set(cacheKey, robotList); return robotList; } } public bool UpdateAICallTaskConfigList(ref ValidationErrors errors, List robotList) { string cacheKey = "cache_AiCallTaskConfig_getList"; if (CacheHelper.Exists(cacheKey)) CacheHelper.Set(cacheKey, robotList); using (var db = new zxdContext()) { var configName = Parameter.AI_CallTaskConfig.ToString(); var robot = db.BAS_PARAMETER.FirstOrDefault(n => n.PARAKEY == configName); if (robot != null) { try { robot.PARAVALUE = JsonConvert.SerializeObject(robotList.FirstOrDefault()); db.SaveChanges(); return true; } catch (Exception ex) { errors.Add(ex.Message); LogHelper.Error(ex.Message); } } return true; } } #endregion AI机器人缓存 #region public List GetDeptNameMapList() { List list; string cacheKey = "cache_GetList_GetDeptNameMapList"; if (CacheHelper.Exists(cacheKey)) { list = CacheHelper.Get>(cacheKey); } else { var webapi = GetValue_Parameter(CRM.Core.Model.Enum.Parameter.Zxd_CoreApiUrl); var url = $"{webapi}Api/Deptment/Depts"; var dataJson = Utility.GetData(url, "", Encoding.UTF8); var result = JsonConvert.DeserializeObject(dataJson); CacheHelper.Set(cacheKey, result.data, DateTime.Now.AddMinutes(30)); return result.data; } return list; } public List ConvertChannelName(List channelList) { var list = GetDeptNameMapList(); List res = new List(); Dictionary res1 = new Dictionary(); channelList = channelList.Distinct().ToList(); foreach (var channel in channelList) { foreach (var item in list) { foreach (var ch in item.deptmentCampains) { if (channel >= ch.startCampainId && channel <= ch.endCampainId) { res.Add(new DeptChannelModel { channel = channel, title = item.title, code = item.code, id = item.id, }); } } } } return res; } /// /// 获取 报备流程的事业线 /// /// public List GetReportDeptments() { var data = new List(); var cacheKey = "cache_Report_dept_list"; if (CacheHelper.Exists(cacheKey)) { data = CacheHelper.Get>(cacheKey); } else { var webapi = GetValue_Parameter(Parameter.Zxd_CoreApiUrl); var url = $"{webapi.Trim('/')}/Api/Deptment/Depts"; var result = Utility.GetData(url, "", Encoding.UTF8); var response = JsonConvert.DeserializeObject>>(result); if (response.Code == 0) { var deptids = GetValue_Parameter("ReportDeptList"); if (!string.IsNullOrWhiteSpace(deptids)) { var ids = JsonConvert.DeserializeObject>(deptids); data = response.Data.Where(n => ids.Contains(n.DepartmentId)).ToList(); } else { data = response.Data; } CacheHelper.Set(cacheKey, data, DateTime.Now.AddMinutes(1)); } } return data; } /// /// 获取 报备流程的事业线 /// /// public List GetReportOperator() { var data = new List(); var cacheKey = "cache_Report_Operator_list"; if (CacheHelper.Exists(cacheKey)) { data = CacheHelper.Get>(cacheKey); } else { var webapi = GetValue_Parameter(Parameter.Hg_Core_WebApi); //webapi = "https://localhost:7090"; var url = $"{webapi.Trim('/')}/api/Live/operator/Get"; var result = Utility.GetData(url, "", Encoding.UTF8); var response = JsonConvert.DeserializeObject>>(result); if (response.Code == 0) { data = response.Data; CacheHelper.Set(cacheKey, data, DateTime.Now.AddMinutes(5)); } } return data; } #endregion } public class DeptMapApiModel { public List data { get; set; } } public class DeptMapModel { public decimal id { get; set; } public string title { get; set; } public string code { get; set; } public List deptmentCampains { get; set; } } public class channelVirtualModel { public int startCampainId { get; set; } public int endCampainId { get; set; } } public class DeptChannelModel { public int channel { get; set; } public decimal id { get; set; } public string title { get; set; } public string code { get; set; } } public class RobotModel { public string Robot { get; set; } public string RobotName { get; set; } public string Remark { get; set; } public string SMS { get; set; } public DateTime StartTime { get; set; } } /// /// 创建订单外呼任务配置 /// public class AI_CallTaskConfig { /// /// 订单外呼起始时间 /// public DateTime StartTime { get; set; } = DateTime.Parse("2021-12-01"); /// /// 仅呼叫近几天支付的订单 /// public int CallDay { get; set; } = 7; public List ReCallStatus { get; set; } /// /// //优先级别1-紧急 2-优先 /// public string Priority { get; set; } = "2"; /// /// 最小订单金额 /// public decimal MinAmount { get; set; } = 1m; public List ReCallMins { get; set; } /// /// 同人检查时间,分钟 /// public int SameUserCheckTimeSpanMin { get; set; } = 1; /// /// 呼叫忽略配置 /// public List IgnoreHitConfigs { get; set; } = new List(); /// /// 呼叫话术 /// public ProposProductConfig proposProductConfig { get; set; } = new ProposProductConfig(); /// /// 是否发短信1:发, 0:不发 /// public int Sms { get; set; } /// /// 发短信多久后外呼,分钟 /// public int SmsExprieMinCall { get; set; } = 1; public string Robot { get; set; } public string CallNo { get; set; } public string AppId { get; set; } public string RobotName { get; set; } public string Remark { get; set; } /// /// 允许外拨时间段 /// public string HgrecordStime { get; set; } /// /// 允许外拨时间段 /// public string HgrecordEtime { get; set; } /// /// 白名单 /// public List WhiteList { get; set; } = new List(); } public class HitConfig { /// /// key /// public string HitKey { get; set; } = "Channel"; /// /// 包含 /// public List Contain { get; set; } /// /// 不包含 /// public List NoContain { get; set; } } /// /// Channel 为范围,|连接,左右包含,如1000|2000 /// public enum HitKey { Channel, Subproductid, Resid } /// /// 渠道范围 /// public class ChannelItem { public int Min { get; set; } public int Max { get; set; } } /// /// 话术模板配置 /// public class ProposProductConfig { /// /// 单个订单配置 /// public string OneTemplate { get; set; } = "请问您购买的产品是@Subproductname,购买期限是【#OpenDays】天@GiftExp,您本次支付的订单金额是【#Arrivalpay】元,对吗?"; /// /// 多个订单配置 /// public string MultipleTemplate { get; set; } = "请问您购买的产品是@Subproductname,其中@PayExp,您本次支付的订单金额是【#Arrivalpay】元,对吗?"; /// /// 产品名称配置 /// public string Subproductname { get; set; } = "【#Subproductname】"; /// /// 支付信息配置 /// public string PayExp { get; set; } = "@Subproductname购买期限是【#OpenDays】天@GiftExp"; /// /// 过期时间配置 /// public string GiftExp { get; set; } = ",赠送期限是【#OpenDays】天,"; } public class AiStatus { public string Text { get; set; } public int Value { get; set; } } public class DeptmentDto { public int Id { get; set; } public string Title { get; set; } public string Code { get; set; } public string Appid { get; set; } public int DepartmentId { get; set; } public bool? IsDept { get; set; } public string CompanyCode { get; set; } public int? SortNo { get; set; } public List DeptmentCampains { get; set; } } public class DeptmentCampainDto { public int StartCampainId { get; set; } public int EndCampainId { get; set; } } public class OperatorModel { public int? Eid { get; set; } public string Ename { get; set; } } }