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.Util; using WX.CRM.Common; using WX.CRM.IBLL.Ord; using WX.CRM.Model.Entity; using WX.CRM.Model.Enum; using WX.CRM.Model.MAP; using WX.CRM.BLL.Application.UserComBox; using WX.CRM.Model.QueryMap; namespace WX.CRM.BLL.Ord { public class ORD_PURPOSEMEMO_BL : IORD_PURPOSEMEMO_Q, IORD_PURPOSEMEMO { private readonly RedisBL.ReadOrWriteFromRedis_BL redisBl = new RedisBL.ReadOrWriteFromRedis_BL(); #region 意向工单 /// /// 新增销售单 /// /// 错误信息 /// 销售工单信息 /// 工单内容 /// public bool Create(ref ValidationErrors errors, ORD_PURPOSEMEMO 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_PURPOSEMEMO.Add(model);//--新增工单 CACHE_ORD_MEMO cacheOrd = new CACHE_ORD_MEMO(); cacheOrd.MTYPEID = (decimal)EnumMemoType.意向工单; cacheOrd.MEMOID = model.MEMOID; cacheOrd.MEMOCONTENTID = model.MEMOCONTENTID; cacheOrd.MEMOSTYLEID = model.MEMOSTYLEID; cacheOrd.MEMOTYPEID = model.MEMOTYPEID; cacheOrd.MEMOSUBTYPEID = model.MEMOSUBTYPEID; cacheOrd.ISCHECKED = model.ISCHECKED; cacheOrd.INNERUSERID = model.INNERUSERID; cacheOrd.CALLTIME = model.CALLTIME; cacheOrd.CALLTIMEEND = model.CALLTIMEEND; cacheOrd.CTIME = model.CTIME; cacheOrd.BUSINESSID = model.BUSINESSID; cacheOrd.RESID = model.RESID; cacheOrd.COID = model.COID; db.CACHE_ORD_MEMO.Add(cacheOrd); bool result2 = db.SaveChanges().GetResult(); //if (result2) // AddToRedis(entry, cacheOrd); return result2; } } catch (Exception ex) { LogHelper.Error("ORD_PURPOSEMEMO_BL ---> public bool Create(ref ValidationErrors errors, ORD_PURPOSEMEMO 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_PURPOSEMEMO.AsQueryable(); queryData = GetQuery(queryData, db, memoId, stime, etime,resid, MemoType, MemoSubtype, null, userComboDto); //return queryData.Select(m => m.RESID).Distinct().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 }; 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_PURPOSEMEMO.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_PURPOSEMEMO.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; } } public ORD_PURPOSEMEMO GetModelByResId(int memosubtypeid, string ResId) { using (var db = new WX.CRM.Model.Entity.crmContext()) { var queryData = db.ORD_PURPOSEMEMO. Where(m => m.RESID == ResId && m.MEMOSUBTYPEID == memosubtypeid).OrderByDescending(p => p.CTIME).FirstOrDefault(); return queryData; } } public ORD_PURPOSEMEMO GetModelByMemoTypeAndResId(int memoTypeId, string ResId) { using (var db = new WX.CRM.Model.Entity.crmContext()) { var queryData = db.ORD_PURPOSEMEMO. Where(m => m.RESID == ResId && m.MEMOTYPEID == memoTypeId).OrderByDescending(p => p.CTIME).FirstOrDefault(); return queryData; } } public ORD_PURPOSEMEMO GetModelForSuccess(int memosubtypeid, string ResId, DateTime applytime, DateTime Opentime) { using (var db = new WX.CRM.Model.Entity.crmContext()) { var queryData = db.ORD_PURPOSEMEMO. Where(m => m.RESID == ResId && m.MEMOSUBTYPEID == memosubtypeid && m.CTIME >= applytime && m.CTIME < Opentime).OrderByDescending(p => p.CTIME).FirstOrDefault(); return queryData; } } public ORD_PURPOSEMEMO GetModelForSuccessbyUnInAmt(int memosubtypeid, string ResId, DateTime Opentime) { using (var db = new WX.CRM.Model.Entity.crmContext()) { var queryData = db.ORD_PURPOSEMEMO. Where(m => m.RESID == ResId && m.MEMOSUBTYPEID == memosubtypeid && m.CTIME > Opentime).OrderByDescending(p => p.CTIME).FirstOrDefault(); return queryData; } } #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_PURPOSEMEMO.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_PURPOSEMEMO.Where(p => MemoIds.Contains(p.MEMOID) && (!p.CALLTIME.HasValue || !p.CALLTIMEEND.HasValue)).ToList(); } } #endregion public bool Delete_PurposeMemo(ref ValidationErrors errors, decimal memoId) { try { using (var db = new crmContext()) { ORD_PURPOSEMEMO entity = db.ORD_PURPOSEMEMO.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_PURPOSEMEMO.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 GetHgPuposeMemo(decimal Memoid, decimal memosubtypeId) { using (var db = new crmContext()) { return db.ORD_PURPOSEMEMO.Where(p => p.MEMOSUBTYPEID == memosubtypeId && p.MEMOID > Memoid).ToList(); } } #endregion } }