using System; using System.Collections.Generic; using System.Data; using System.Linq; using WX.CRM.BLL.Base; using WX.CRM.BLL.RedisBL; using WX.CRM.Common; using WX.CRM.DAL.Csvr; using WX.CRM.DAL.QH; using WX.CRM.IBLL.Csvr; using WX.CRM.Model.Entity; using WX.CRM.Model.EntitySync; using WX.CRM.Model.MAP; using WX.CRM.BLL.Application.UserComBox; using System.Data.Entity; namespace WX.CRM.BLL.Csvr { public class CSVR_CALLRECORD_BL : DbContextRepository, ICSVR_CALLRECORD, ICSVR_CALLRECORD_Q { private readonly RedisBL.ReadOrWriteFromRedis_BL redisBl = new RedisBL.ReadOrWriteFromRedis_BL(); public DataSet GetCallRecord(ref Pager pager, QueryUserComboDto usercomboDto, DateTime? V_STIME, DateTime? V_ETIME, int? V_MAXLENGTH, int? V_MINLENGHT, string V_RESID, string V_RECORDID, decimal V_CALLTYPE, decimal V_ISCHECKED, string procedureName = "PACK_CSVR.CSVR_CALLRECORDQUERY") { List ALLdeptIDS = new List(); List ALLgidS = new List(); if (string.IsNullOrEmpty(usercomboDto.groupIds) && !string.IsNullOrEmpty(usercomboDto.deptId)) { var depts = OperationUtil.ConvertToDecimal(usercomboDto.deptId.Split(',')); UserServices userservices = new UserServices(); foreach (var item in depts) { List deptIDS = new List(); List gidS = new List(); userservices.GetAllDeptIDOrGidByDeptId(item, ref deptIDS, ref gidS);//获取所有的组别和gid ALLdeptIDS.AddRange(deptIDS); ALLgidS.AddRange(gidS); } ALLdeptIDS.AddRange(ALLgidS); usercomboDto.groupIds = string.Join(",", ALLdeptIDS);//所有的部门ID和销售组ID } return new CALLRECORD_DAL().GetCallRecord(ref pager, usercomboDto, V_STIME, V_ETIME, V_MAXLENGTH, V_MINLENGHT, V_RESID, V_RECORDID, V_CALLTYPE, V_ISCHECKED, procedureName); } public DataSet GetUnCallRecord(ref Pager pager, QueryUserComboDto usercomboDto, DateTime? V_STIME, DateTime? V_ETIME, int? V_MAXLENGTH, int? V_MINLENGHT, string V_RESID,string V_UMID, string V_RECORDID, decimal V_CALLTYPE, decimal V_ISCHECKED, string V_EIDS) { List ALLdeptIDS = new List(); List ALLgidS = new List(); if (string.IsNullOrEmpty(usercomboDto.groupIds) && !string.IsNullOrEmpty(usercomboDto.deptId)) { var depts = OperationUtil.ConvertToDecimal(usercomboDto.deptId.Split(',')); UserServices userservices = new UserServices(); foreach (var item in depts) { List deptIDS = new List(); List gidS = new List(); userservices.GetAllDeptIDOrGidByDeptId(item, ref deptIDS, ref gidS);//获取所有的组别和gid ALLdeptIDS.AddRange(deptIDS); ALLgidS.AddRange(gidS); } ALLdeptIDS.AddRange(ALLgidS); usercomboDto.groupIds = string.Join(",", ALLdeptIDS);//所有的部门ID和销售组ID } return new CALLRECORD_DAL().GetUnCallRecord(ref pager, usercomboDto, V_STIME, V_ETIME, V_MAXLENGTH, V_MINLENGHT, V_RESID,V_UMID, V_RECORDID, V_CALLTYPE, V_ISCHECKED, usercomboDto.isCallBack,V_EIDS); } public List GetUNCallRemindList(DateTime startTime, int daysAgo) { return new CALLRECORD_DAL().GetUNCallRemindList(startTime, daysAgo); } public DataSet GetOrderCallRecord(ref Pager pager, string V_DEPTID, string V_GROUPID, string V_USERID, DateTime? V_STIME, DateTime? V_ETIME, int? V_MAXLENGTH, int? V_MINLENGHT, string V_RESID, string V_RECORDID, decimal V_CALLTYPE) { return new CALLRECORD_DAL().GetOrderCallRecord(ref pager, V_DEPTID, V_GROUPID, V_USERID, V_STIME, V_ETIME, V_MAXLENGTH, V_MINLENGHT, V_RESID, V_RECORDID, V_CALLTYPE); } /// /// 未接电话回拨 事件 /// public void ReCallRecordUn(string resid, string coid) { using (var db = new WX.CRM.Model.Entity.crmContext()) { var myRecordUn = db.CSVR_CALLRECORDUN.Where(m => m.RESID == resid); if (myRecordUn.Any())//查找到需要回拨的未接记录 { foreach (var unItem in myRecordUn) { unItem.RECALLCOID = coid;//绑定回拨录音 } db.SaveChanges(); } } } /// /// 获取没有通话时间的工单 /// /// public IEnumerable GetNoEndTime() { return new CALLRECORD_DAL().GetNoEndTime(); } public CSVR_TODAYRECORD GetNewestCallRecord(string resid, decimal salerid, DateTime ctime) { return new CALLRECORD_DAL().GetNewestCallRecord(resid, salerid, ctime); } public void InitOrderCallTime() { new CALLRECORD_DAL().InitOrderCallTime(); } public List getCallRecordByTimestart(DateTime timestart) { using (var db = new WX.CRM.Model.Entity.crmContext()) { return db.CSVR_CALLRECORD.Where(p => p.TIMESTART > timestart).ToList(); } } /// /// 更新工单通话时间 /// /// public void UpdateEndTime(IEnumerable list) { using (var db = new WX.CRM.Model.Entity.crmContext()) { foreach (var row in list) { if (row.CALLTIME == null || row.CALLTIMEEND == null) continue; decimal orderid = row.ORDERID; if (row.TYP == "ORD_SALEMEMO") { var memo = db.ORD_SALEMEMO.FirstOrDefault(o => o.MEMOID == orderid); if (null != memo) { memo.ISCHECKED = 1; memo.CALLTIME = row.CALLTIME; memo.CALLTIMEEND = row.CALLTIMEEND; } } if (row.TYP == "ORD_SERVICEMEMO") { var memo = db.ORD_SERVICEMEMO.FirstOrDefault(o => o.MEMOID == orderid); if (null != memo) { memo.ISCHECKED = 1; memo.CALLTIME = row.CALLTIME; memo.CALLTIMEEND = row.CALLTIMEEND; } } if (row.TYP == "ORD_PURPOSEMEMO") { var memo = db.ORD_PURPOSEMEMO.FirstOrDefault(o => o.MEMOID == orderid); if (null != memo) { memo.ISCHECKED = 1; memo.CALLTIME = row.CALLTIME; memo.CALLTIMEEND = row.CALLTIMEEND; } } if (row.TYP == "ORD_SPECIALMEMO") { var memo = db.ORD_SPECIALMEMO.FirstOrDefault(o => o.MEMOID == orderid); if (null != memo) { memo.ISCHECKED = 1; memo.CALLTIME = row.CALLTIME; memo.CALLTIMEEND = row.CALLTIMEEND; } } } try { db.Configuration.ValidateOnSaveEnabled = false; db.SaveChanges(); } catch (Exception ex) { foreach (var error in db.GetValidationErrors()) { LogHelper.Error(error.ToString()); } } } } public decimal? GetLastCallRecord() { using (var db = new WX.CRM.Model.Entity.crmContext()) { decimal? resid = db.CSVR_CALLRECORD.Max(m => m.RECORDID); return resid; } } public string GetLastCoid() { using (var db = new WX.CRM.Model.Entity.crmContext()) { string coid = db.CSVR_CALLRECORD.Max(p => p.COID); return coid; } } public DateTime GetLastStartTime() { using (var db = new WX.CRM.Model.Entity.crmContext()) { DateTime? timestart = db.CSVR_CALLRECORD.Max(p => p.TIMESTART); return timestart.Value; } } public void AddListRecord(List listModel) { using (var db = new WX.CRM.Model.Entity.crmContext()) { var pkid = new SEQUENCES_BL(); foreach (var model in listModel) { model.PKID = pkid.Seq_base_get(); if (model.RECORDID == 0) model.RECORDID = model.PKID; db.CSVR_CALLRECORD.Add(model); } db.SaveChanges(); } } public void AddListRecordUN(List listModel) { using (var db = new WX.CRM.Model.Entity.crmContext()) { var pkid = new SEQUENCES_BL(); foreach (var model in listModel) { model.PKID = pkid.Seq_base_get(); if (model.RECORDID == 0) model.RECORDID = model.PKID; db.CSVR_CALLRECORDUN.Add(model); } db.SaveChanges(); } } public void AddListRecord2(List listModel) { using (var db = new WX.CRM.Model.Entity.crmContext()) { var pkid = new SEQUENCES_BL(); foreach (var model in listModel) { var m = new CSVR_CALLRECORD2() { PKID = pkid.Seq_base_get(), RECORDID = model.RECORDID, SERVERID = model.SERVERID, FILENAME = model.FILENAME, RESID = model.RESID, SERVICENUMBER = model.SERVICENUMBER, TELNUMBERLAST4 = model.TELNUMBERLAST4, TIMELENGTH = model.TIMELENGTH, CALLTYPE = model.CALLTYPE, SALESEID = model.SALESEID, TIMESTART = model.TIMESTART, CTIME = model.CTIME, TIMEEND = model.TIMEEND, COID = model.COID }; if (m.RECORDID == 0) m.RECORDID = m.PKID; db.CSVR_CALLRECORD2.Add(m); } db.SaveChanges(); } } /// /// 获取未回访的 未接电话记录 /// /// 未回访时间 /// 获取条数 /// public IList GetUNCallBackList(int TimeOut = 3600, int? limit = null) { using (var db = new WX.CRM.Model.Entity.crmContext()) { var limitTime = DateTime.Now.AddSeconds(-TimeOut); var list = db.CSVR_CALLRECORDUN.Where(m => string.IsNullOrEmpty(m.RECALLCOID) && m.TIMEEND.HasValue && m.TIMEEND.Value <= limitTime//超过 TimeOut 秒未电话回访 ).OrderByDescending(m => m.CTIME); if (limit.HasValue) return list.Take(limit.Value).ToList(); else return list.ToList(); } } /// /// 批量修改数据 /// /// public void BathUpdateReCallRecordUn(IList list) { using (var db = new WX.CRM.Model.Entity.crmContext()) { foreach (var item in list) { var entry = db.Entry(item); db.Set().Attach(item); entry.State = EntityState.Modified; } db.SaveChanges(); } } public void UpdateNoTimeBymemoids(string Memoids) { new CALLRECORD_DAL().UpdateNoTimeBymemoids(Memoids); } /// /// 质检录音查询 /// /// /// /// /// /// /// /// /// /// /// public DataSet GetOACallRecord(ref Pager pager, string V_GROUPNAME, decimal? V_USEREID, DateTime? V_STIME, DateTime? V_ETIME, int? V_MAXLENGTH, int? V_MINLENGHT, string V_RESID, decimal? V_RECORDID, decimal? V_TYPE) { return new CALLRECORD_DAL().GetOACallRecord(ref pager, V_GROUPNAME, V_USEREID, V_STIME, V_ETIME, V_MAXLENGTH, V_MINLENGHT, V_RESID, V_RECORDID, V_TYPE); } public CSVR_CALLRECORD GetModel_CallRecord(decimal pkid) { using (var db = new crmContext()) { return db.CSVR_CALLRECORD.Where(m => m.PKID == pkid).FirstOrDefault(); } } public void UpdateCallTime(decimal memoid) { using (var db = new crmContext()) { CACHE_ORD_MEMO cacheMemo = db.CACHE_ORD_MEMO.FirstOrDefault(m => m.MEMOID == memoid); if (null != cacheMemo) { CSVR_TODAYRECORD record = new CALLRECORD_DAL().GetNewestCallRecord(cacheMemo.RESID, cacheMemo.INNERUSERID.Value, cacheMemo.CTIME.Value); if (null != record) { cacheMemo.CALLTIME = record.TIMESTART; cacheMemo.CALLTIMEEND = record.TIMEEND; switch (Convert.ToInt32(cacheMemo.MTYPEID)) { case 0: ORD_SALEMEMO salememo = db.ORD_SALEMEMO.FirstOrDefault(p => p.MEMOID == cacheMemo.MEMOID); salememo.STRCONTENT = "-1"; salememo.CALLTIME = record.TIMESTART; salememo.CALLTIMEEND = record.TIMEEND; break; case 1: ORD_SERVICEMEMO servicememo = db.ORD_SERVICEMEMO.FirstOrDefault(p => p.MEMOID == cacheMemo.MEMOID); servicememo.STRCONTENT = "-1"; servicememo.CALLTIME = record.TIMESTART; servicememo.CALLTIMEEND = record.TIMEEND; break; case 2: ORD_PURPOSEMEMO purposememo = db.ORD_PURPOSEMEMO.FirstOrDefault(p => p.MEMOID == cacheMemo.MEMOID); purposememo.STRCONTENT = "-1"; purposememo.CALLTIME = record.TIMESTART; purposememo.CALLTIMEEND = record.TIMEEND; break; case 3: ORD_SPECIALMEMO specialmemo = db.ORD_SPECIALMEMO.FirstOrDefault(p => p.MEMOID == cacheMemo.MEMOID); specialmemo.STRCONTENT = "-1"; specialmemo.CALLTIME = record.TIMESTART; specialmemo.CALLTIMEEND = record.TIMEEND; break; } db.SaveChanges(); //UpdateToRedis(memoid, cacheMemo.CALLTIME, cacheMemo.CALLTIMEEND); } } else { throw new Exception("工单不存在"); } } } public void DeleteByCOID(string coid) { using (var db = new WX.CRM.Model.Entity.crmContext()) { var d = db.CSVR_CALLRECORD.FirstOrDefault(p => p.COID == coid); if (null != d) db.CSVR_CALLRECORD.Remove(d); var d2 = db.CSVR_TODAYRECORD.FirstOrDefault(p => p.COID == coid); if (null != d2) db.CSVR_TODAYRECORD.Remove(d2); db.SaveChanges(); } } public string Sys_Environment_CTI_VER() { var rst = Utility.GetSettingByKey("Sys_Environment_CTI_VER"); if (string.IsNullOrEmpty(rst)) { var rstmodel = new BAS_PARAMETER_BL().GetModel_Patameter("Sys_Environment_CTI_VER"); if (null != rstmodel) rst = rstmodel.PARAVALUE; } return rst; } public DataSet GetCallRecordHis(string V_RESID, decimal? V_RECORDID) { return new CALLRECORD_DAL().GetCallRecordHis(V_RESID, V_RECORDID); } public int RestoreCallRecord(string resid, DateTime? dtstart, DateTime? dtend) { if (dtstart != null && dtend != null) { return new CALLRECORD_DAL().RestoreCallRecord(resid, dtstart.Value, dtend.Value); } return 0; } /// /// 重新手动分配eid /// /// /// /// public void ReAllocationRecord(decimal eid, string ename, string pkids) { using (var db = new WX.CRM.Model.Entity.crmContext()) { var ids = pkids.Split(',').Select(m=>Convert.ToDecimal(m)).ToList(); var d = db.CSVR_CALLRECORDUN.Where(m=> ids.Contains(m.PKID)); if (d.Any()) { foreach (var item in d) { item.EID = eid; item.ENAME = ename; } } db.SaveChanges(); } } public DataTable GetRecordByEID(decimal? v_recordid, decimal v_eid, string v_resid, ref Pager pager) { return new AccountApply_DAL().GetRecordByEID(v_recordid, v_eid, v_resid, ref pager); } #region UpdateRedis private void UpdateToRedis(decimal memoid, DateTime? calltime, DateTime? calltimeend, bool result = true) { redisBl.UpdateCallTime(memoid, calltime, calltimeend, out result); if (!result) { REDIS_CACHE_SSODATASYNC_BL cacheBL = new REDIS_CACHE_SSODATASYNC_BL(); #region redis 添加到待打包表 REDIS_CACHE_SSODATASYNC redisMoel1 = new REDIS_CACHE_SSODATASYNC(); redisMoel1.TABLETYPE = "cache_ord_memo"; redisMoel1.KEYS = memoid.ToString(); redisMoel1.OPTYPE = "U"; redisMoel1.TIME = DateTime.Now; redisMoel1.LASTSYNCTIME = DateTime.Now; redisMoel1.ERRNUM = 0; redisMoel1.ERRMSG = ""; cacheBL.Create_RedisCacheSSODataSYNC(redisMoel1); #endregion } } #endregion public List GetListByResIds(List resids) { using (var db = new WX.CRM.Model.Entity.crmContext()) { var query = db.CSVR_CALLRECORD.AsQueryable(); query = query.Where(m => resids.Contains(m.RESID)); query = query.OrderByDescending(m => m.CTIME); return query.ToList(); } } public CSVR_CALLRECORDUN GetUnRecordHF(string resId) { using (var db = new WX.CRM.Model.Entity.crmContext()) { //最新的回访成功工单 //var memo = db.CACHE_ORD_MEMO.OrderByDescending(x => x.CTIME).FirstOrDefault(x => x.RESID == resId && x.MEMOSUBTYPEID == 1091); //var query = db.CSVR_CALLRECORDUN.OrderByDescending(x => x.CTIME).AsQueryable().Where(x => x.RESID == resId); //if(memo != null) // query = query.Where(x=> x.TIMESTART > memo.CTIME); //var result = query.FirstOrDefault(); //return result; var query = db.CSVR_CALLRECORDUN.OrderByDescending(x => x.CTIME).FirstOrDefault(x => x.RESID == resId && x.ISHF == 0 && x.CALLTYPE == 0); return query; } } public int GetNotHFCount(string resid, DateTime startTime, int daysAgo) { using (var db = new WX.CRM.Model.Entity.crmContext()) { var timeAgo = DateTime.Now.Date.AddDays(-daysAgo); var query = db.CSVR_CALLRECORDUN.Count(x => x.RESID == resid && x.ISHF == 0 && x.CALLTYPE == 0 && x.TIMESTART >= startTime && x.TIMESTART >= timeAgo); return query; } } } }