using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Linq; using WX.CRM.BLL.Base; using WX.CRM.BLL.RedisBL; using WX.CRM.BLL.Util; using WX.CRM.BLL.Wx; using WX.CRM.Common; using WX.CRM.IBLL.Ord; using WX.CRM.Model.Entity; using WX.CRM.Model.EntitySync; using WX.CRM.Model.Enum; using WX.CRM.Model.MAP; using WX.CRM.BLL.Wx; using WX.CRM.BLL.Application.UserComBox; using WX.CRM.Model.QueryMap; namespace WX.CRM.BLL.Ord { public class ORD_SPECIALMEMO_BL : IORD_SPECIALMEMO_Q, IORD_SPECIALMEMO { private readonly RedisBL.ReadOrWriteFromRedis_BL redisBl = new RedisBL.ReadOrWriteFromRedis_BL(); private readonly WX_AFTERSALES2_BL _aftersales = new WX_AFTERSALES2_BL(); #region 新增特殊订单 /// /// 新增销售单 /// /// 错误信息 /// 销售工单信息 /// 工单内容 /// public bool Create(ref ValidationErrors errors, ORD_SPECIALMEMO model) { try { using (crmContext db = new crmContext()) { SEQUENCES_BL pkidBll = new SEQUENCES_BL(); ORD_MEMOCONTENT entry = new ORD_MEMOCONTENT(); entry.CONTENTID = pkidBll.Seq_base_get(PKIDType.LargeTable); entry.STRCONTENT = model.STRCONTENT; entry.CTIME = DateTime.Now; db.ORD_MEMOCONTENT.Add(entry);//--新增工单内容 model.MEMOCONTENTID = entry.CONTENTID; model.MEMOID = pkidBll.Seq_base_get(PKIDType.LargeTable); db.ORD_SPECIALMEMO.Add(model);//--新增工单 var cacheOrd = new CACHE_ORD_MEMO { MTYPEID = (decimal)EnumMemoType.特殊订单, MEMOID = model.MEMOID, MEMOCONTENTID = model.MEMOCONTENTID, MEMOSTYLEID = model.MEMOSTYLEID, MEMOTYPEID = model.MEMOTYPEID, MEMOSUBTYPEID = model.MEMOSUBTYPEID, ISCHECKED = model.ISCHECKED, INNERUSERID = model.INNERUSERID, CALLTIME = model.CALLTIME, CALLTIMEEND = model.CALLTIMEEND, CTIME = model.CTIME, BUSINESSID = model.BUSINESSID, RESID = model.RESID, COID = model.COID }; db.CACHE_ORD_MEMO.Add(cacheOrd); //转客服部工单,北一才有的功能 //自动写一条记录到客服部 if (model.MEMOSUBTYPEID == 3015) { var kfbDefault = new CACHE_BL().GetValue_Parameter("kfbDefault"); if (!string.IsNullOrEmpty(kfbDefault)) { var arr = kfbDefault.Split(','); var dto = new WX_AFTERSALES2(model.RESID, int.Parse(arr[0]), int.Parse(arr[1]), arr[2], string.Empty); _aftersales.Save(dto); } } bool result2 = db.SaveChanges().GetResult(); //if (result2) // AddToRedis(entry, cacheOrd); return result2; } } catch (Exception ex) { LogHelper.Error("ORD_SPECIALMEMO_BL ---> public bool Create(ref ValidationErrors errors, ORD_SPECIALMEMO model) 错误信息:" + ex.ToString()); errors.Add(ex.Message); return false; } } #endregion #region 获取条件后的queryData /// /// 获取条件后的queryData /// /// /// /// /// /// /// /// /// /// /// private IQueryable GetQuery(IQueryable queryData, WX.CRM.Model.Entity.crmContext db, string memoId, string stime, string etime,string resid, decimal MemoType, decimal MemoSubtype, string content, QueryUserComboDto userComboDto) { if (!string.IsNullOrEmpty(memoId)) { decimal _memoId = Convert.ToDecimal(memoId); queryData = queryData.Where(m => m.MEMOID == _memoId); } DateTime dt; if (!string.IsNullOrWhiteSpace(stime) && DateTime.TryParse(stime, out dt)) queryData = queryData.Where(a => a.CTIME >= dt); DateTime dt2; if (!string.IsNullOrWhiteSpace(etime) && DateTime.TryParse(etime, out dt2)) { queryData = queryData.Where(a => a.CTIME <= dt2); } if (!string.IsNullOrWhiteSpace(resid)) queryData = queryData.Where(a => a.RESID == resid); if (!string.IsNullOrEmpty(content)) { var contentids = db.ORD_MEMOCONTENT.Where(x => x.STRCONTENT.Contains(content)).Select(x => x.CONTENTID).ToList(); queryData = queryData.Where(x => contentids.Contains(x.MEMOCONTENTID.Value)); } if (MemoType != 0) queryData = queryData.Where(a => a.MEMOTYPEID == MemoType); if (MemoSubtype != 0) queryData = queryData.Where(a => a.MEMOSUBTYPEID == MemoSubtype); if (userComboDto.userId.HasValue) { queryData = queryData.Where(m => m.INNERUSERID == userComboDto.userId.Value); } else if (!string.IsNullOrEmpty(userComboDto.groupIds)) { decimal[] _groupids = OperationUtil.ConvertToDecimal(userComboDto.groupIds.Split(',')); var userIds = db.BAS_INNERUSERGROUP.Where(m => _groupids.Contains(m.GID.Value)).Select(m => m.INNERUSERID); queryData = queryData.Where(m => userIds.Contains(m.INNERUSERID.Value)); } else if (!string.IsNullOrEmpty(userComboDto.deptId)) { //decimal[] _saleDeptId = OperationUtil.ConvertToDecimal(userComboDto.deptId.Split(',')); //var groupIds = db.BAS_INNERGROUP.Where(m => _saleDeptId.Contains(m.SALEDEPTID.Value)).Select(p => p.GID).ToList(); //var userIds = (from a in db.BAS_INNERUSERGROUP where groupIds.Contains(a.GID.Value) select a.INNERUSERID); //queryData = queryData.Where(a => userIds.Contains(a.INNERUSERID.Value)); var depts = OperationUtil.ConvertToDecimal(userComboDto.deptId.Split(',')); List ALLdeptIDS = new List(); List ALLgidS = new List(); 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); } queryData = (from a in queryData join b in db.BAS_INNERUSERGROUP on a.INNERUSERID equals b.INNERUSERID //join g in db.BAS_INNERGROUP on b.GID equals g.GID where ALLdeptIDS.Contains(b.DEPTID.Value) || ALLgidS.Contains(b.GID.Value) select a); } else if (userComboDto.companyId.HasValue) { queryData = from a in queryData join u in db.BAS_INNERUSER on a.INNERUSERID equals u.PKID join ug in db.BAS_INNERUSERGROUP on u.PKID equals ug.INNERUSERID join g in db.BAS_INNERGROUP on ug.GID equals g.GID join d in db.BAS_SALESDEPARTMENT on g.SALEDEPTID equals d.SALEDEPTID where d.COMPANYID == userComboDto.companyId.Value select a; } return queryData; } #endregion #region 获取客户ID public List GetMemoResId(string memoId, string stime, string etime,string resid, decimal MemoType, decimal MemoSubtype, QueryUserComboDto userComboDto) { using (var db = new WX.CRM.Model.Entity.crmContext()) { var queryData = db.ORD_SPECIALMEMO.AsQueryable(); queryData = GetQuery(queryData, db, memoId, stime, etime, resid, MemoType, MemoSubtype, null, userComboDto); //return queryData.Select(m => m.RESID).GroupBy(m => new { RESID = m }).Select(m => m.Key.RESID).ToList(); //var q = //from p in queryData //group p by p.RESID into g //select new //{ // g.Key, // ncount = g.Count() //}; //var nlist = q.ToList(); //return nlist.Select(m => m.Key).ToList(); var q = from a in queryData join b in db.RES_CUSTOMER on a.RESID equals b.RESID join c in db.RES_CUSTOMER on b.CUSTOMERID equals c.CUSTOMERID join d in db.RES_ACTIVITY on c.CUSTOMERFROM equals d.RESOURCETAG into tempD from d in tempD.DefaultIfEmpty() join e in db.RES_CUSTOMERDETAIL on a.RESID equals e.RESID select new ord_memoExport() { resid = a.RESID, otherResid = c.RESID, resAscription = d.ACTIVITYCODE.Substring(0, 1), innerUserId = a.INNERUSERID, name = e.CNAME, ctime = a.CTIME, callTime = a.CALLTIME }; //var d = from a in q // group a by new {a.resid,a.otherResid} into g // select new // { // resid=g.Key.resid, // otherResid=g.Key.otherResid // }; return q.OrderBy(m => m.resid).ToList(); } } #endregion #region 获取分页数据列表 public List GetList(ref Pager pager, string memoId, string stime, string etime, string resid, decimal MemoType, decimal MemoSubtype, string content, QueryUserComboDto userComboDto) { using (var db = new WX.CRM.Model.Entity.crmContext()) { var queryData = db.ORD_SPECIALMEMO.AsQueryable(); queryData = GetQuery(queryData, db, memoId, stime, etime, resid, MemoType, MemoSubtype, content, userComboDto); queryData = queryData.OrderByDescending(m => m.MEMOID); PagerUtil.SetPager(ref queryData, ref pager); var data = new List(); data = (from a in queryData join b in db.ORD_MEMOCONTENT on a.MEMOCONTENTID equals b.CONTENTID join c in db.RES_CUSTOMERDETAIL on a.RESID equals c.RESID select new ORD_MemoQuery() { BUSINESSID = a.BUSINESSID, CALLTIME = a.CALLTIME, CALLTIMEEND = a.CALLTIMEEND, CNAME = c.CNAME, CTIME = a.CTIME, INNERUSERID = a.INNERUSERID, MEMOCONTENTID = a.MEMOCONTENTID, MEMOID = a.MEMOID, MEMOSTYLEID = a.MEMOSTYLEID, MEMOSUBTYPEID = a.MEMOSUBTYPEID, MEMOTYPEID = a.MEMOTYPEID, RESID = a.RESID, STRCONTENT = b.STRCONTENT }).ToList(); return data; } } #endregion #region 获取客户工单信息 public List GetListByResId(ref Pager pager, string ResId) { using (var db = new WX.CRM.Model.Entity.crmContext()) { var queryData = db.ORD_SPECIALMEMO.AsQueryable(); //queryData = queryData.OrderByDescending(m => m.MEMOID); queryData = queryData.Where(m => m.RESID == ResId); PagerUtil.SetPager(ref queryData, ref pager); var obj = (from a in queryData join b in db.ORD_MEMOCONTENT on a.MEMOCONTENTID equals b.CONTENTID join c in db.RES_CUSTOMERDETAIL on a.RESID equals c.RESID select new ORD_MemoQuery() { BUSINESSID = a.BUSINESSID, CALLTIME = a.CALLTIME, CALLTIMEEND = a.CALLTIMEEND, CNAME = c.CNAME, CTIME = a.CTIME, INNERUSERID = a.INNERUSERID, MEMOCONTENTID = a.MEMOCONTENTID, MEMOID = a.MEMOID, MEMOSTYLEID = a.MEMOSTYLEID, MEMOSUBTYPEID = a.MEMOSUBTYPEID, MEMOTYPEID = a.MEMOTYPEID, RESID = a.RESID, STRCONTENT = b.STRCONTENT } ).OrderByDescending(m => m.CTIME).ToList(); return obj; } } #endregion #region 通话录音 public bool updateList(ref ValidationErrors errors, List models) { try { using (WX.CRM.Model.Entity.crmContext db = new WX.CRM.Model.Entity.crmContext()) { foreach (var model in models) { db.ORD_SPECIALMEMO.Attach(model); db.Entry(model).State = EntityState.Modified; } db.SaveChanges(); return true; } } catch (Exception ex) { errors.Add(ex.Message); return false; } } public List GetNoCallTimeByMemoId(decimal[] MemoIds) { using (var db = new WX.CRM.Model.Entity.crmContext()) { return db.ORD_SPECIALMEMO.Where(p => MemoIds.Contains(p.MEMOID) && (!p.CALLTIME.HasValue || !p.CALLTIMEEND.HasValue)).ToList(); } } #endregion public bool Delete_SpecialMemo(ref ValidationErrors errors, decimal memoId) { try { using (var db = new crmContext()) { ORD_SPECIALMEMO entity = db.ORD_SPECIALMEMO.FirstOrDefault(m => m.MEMOID == memoId); CACHE_ORD_MEMO cache_Memo = db.CACHE_ORD_MEMO.FirstOrDefault(m => m.MEMOID == memoId); if (entity == null) { errors.Add("数据不存在!"); return false; } db.ORD_SPECIALMEMO.Remove(entity); if (cache_Memo != null) { db.CACHE_ORD_MEMO.Remove(cache_Memo); } return db.SaveChanges().GetResult(); } } catch (Exception ex) { errors.Add(ex.Message); return false; } } #region 合规工单 public List GetHgSpecialMemo(decimal Memoid, decimal memosubtypeId) { using (var db = new crmContext()) { return db.ORD_SPECIALMEMO.Where(p => p.MEMOSUBTYPEID == memosubtypeId && p.MEMOID > Memoid).ToList(); } } #endregion #region addtoRedis private void AddToRedis(ORD_MEMOCONTENT entry, CACHE_ORD_MEMO cacheOrd, bool result = true) { redisBl.AddRedis_Ord_Memocontent(entry, out result); redisBl.AddRedis_Resid_Memoid(cacheOrd.RESID, cacheOrd.MEMOID, out result); redisBl.AddRedis_CacheOrdMemo(cacheOrd, 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 = "ord_memocontent"; redisMoel1.KEYS = entry.CONTENTID.ToString(); redisMoel1.OPTYPE = "A"; redisMoel1.TIME = DateTime.Now; redisMoel1.LASTSYNCTIME = DateTime.Now; redisMoel1.ERRNUM = 0; redisMoel1.ERRMSG = ""; cacheBL.Create_RedisCacheSSODataSYNC(redisMoel1); REDIS_CACHE_SSODATASYNC redisMoel2 = new REDIS_CACHE_SSODATASYNC(); redisMoel2.TABLETYPE = "cache_ord_memo"; redisMoel2.KEYS = cacheOrd.MEMOID.ToString(); redisMoel2.OPTYPE = "A"; redisMoel2.TIME = DateTime.Now; redisMoel2.LASTSYNCTIME = DateTime.Now; redisMoel2.ERRNUM = 0; redisMoel2.ERRMSG = ""; cacheBL.Create_RedisCacheSSODataSYNC(redisMoel2); REDIS_CACHE_SSODATASYNC redisMoel3 = new REDIS_CACHE_SSODATASYNC(); redisMoel3.TABLETYPE = "resid_memoid_redis"; redisMoel3.KEYS = cacheOrd.MEMOID.ToString(); redisMoel3.OPTYPE = "A"; redisMoel3.TIME = DateTime.Now; redisMoel3.LASTSYNCTIME = DateTime.Now; redisMoel3.ERRNUM = 0; redisMoel3.ERRMSG = ""; cacheBL.Create_RedisCacheSSODataSYNC(redisMoel3); #endregion } } #endregion } }