using CRM.Core.BLL.Base; using CRM.Core.Common.Layui; using CRM.Core.Model.Entity; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using WX.CRM.Common; namespace CRM.Core.BLL.UserProtocol { public class USER_PROTOCOL_BL { private Bas_CompanyVirtual_BL _companyvirtual = new Bas_CompanyVirtual_BL(); public List GetAll() { using (var db = new CRM.Core.Model.Entity.zxdContext()) { return db.SYS_USER_PROTOCOL.ToList(); } } public List PageList(ref Laypage pager, string resid, string UMID, string username, string softusername, int? proType, int? status, string subname, DateTime? subsdate, DateTime? subedate, string verifyname, DateTime? verifysdate, DateTime? verifyedate, string protocolno, string channel, bool isElderly = false, string orderids = "") { using (var db = new CRM.Core.Model.Entity.zxdContext()) { var list = db.SYS_USER_PROTOCOL.AsQueryable(); //UMID转RESID if (!string.IsNullOrEmpty(UMID) && string.IsNullOrEmpty(resid)) { var UMIDMain = db.RES_CUSTOMER.FirstOrDefault(m => m.UMID == UMID); if (UMIDMain != null) { resid = UMIDMain.RESID; } else { resid = "NULL_RESID";//阻止查询 } } #region 查询条件 if (!string.IsNullOrEmpty(resid)) { list = list.Where(m => m.RESID == resid); } if (!isElderly) { list = list.Where(x => new int[] { 1, 2, 3, 4, 5 }.Contains(x.PROTOCOLTYPE)); } else { list = list.Where(x => new int[] { 6 }.Contains(x.PROTOCOLTYPE)); } if (status.HasValue) { list = list.Where(m => m.STATUS == status); } if (!string.IsNullOrEmpty(username)) { list = list.Where(m => m.USERNAME.ToLower().Contains(username.ToLower())); } if (!string.IsNullOrEmpty(softusername)) { list = list.Where(m => m.USERID.ToLower().Contains(softusername.ToLower())); } if (proType.HasValue) { list = list.Where(m => m.PROTOCOLTYPE == proType); } if (!string.IsNullOrEmpty(subname)) { list = list.Where(m => m.creater.ToLower().Contains(subname.ToLower())); } if (!string.IsNullOrEmpty(verifyname)) { list = list.Where(m => m.reviewer.ToLower().Contains(verifyname.ToLower())); } if (subsdate.HasValue) { list = list.Where(m => m.CTIME >= subsdate.Value); } if (subedate.HasValue) { subedate = subedate.Value.AddDays(1).AddSeconds(-1); list = list.Where(m => m.CTIME <= subedate.Value); } if (verifysdate.HasValue) { list = list.Where(m => m.auditTime >= verifysdate.Value); } if (verifyedate.HasValue) { verifyedate = verifyedate.Value.AddDays(1).AddSeconds(-1); list = list.Where(m => m.auditTime <= verifyedate.Value); } if (!string.IsNullOrEmpty(protocolno)) { list = list.Where(m => m.PROTOCOLNO.ToLower().Contains(protocolno.ToLower())); } if (!string.IsNullOrEmpty(orderids)) { var orderidList = orderids.Split(',').Select(x => decimal.Parse(x)); list = list.Where(m => db.USER_PROTOCOL_ORDER.Where(x => orderidList.Contains(x.Orderid)).Select(x => x.ProtocolId).Contains(m.ID)); } #endregion 查询条件 var companys = _companyvirtual.GetList(); var res = new List().AsQueryable(); if (!isElderly) { res = (from m in list join b in db.Wx_SzzyOrder_HandGift on m.ORDERID equals b.orderid into gj from p in gj.DefaultIfEmpty() //join u in db.RES_CUSTOMER on m.RESID equals u.RESID into ruc //from uc in ruc.DefaultIfEmpty() select new ProListView() { ID = m.ID, RESID = m.RESID, //UMID= uc.UMID, USERNAME = m.USERNAME, USERID = m.USERID, PROTOCOLTYPE = m.PROTOCOLTYPE, PRODUCTTYPE = m.PRODUCTTYPE, ORDERSTATUS = p.orderstatus, CTIME = m.CTIME, NOTE = m.NOTE, STATUS = m.STATUS, channel = p.channel, CREATER = m.creater, REVIEWER = m.reviewer, AUDITTIME = m.auditTime, PROTOCOLNO = m.PROTOCOLNO, PRICE = m.PRICE, }); } else { res = (from m in list join b in db.Wx_SzzyOrder_HandGift on m.ORDERID equals b.orderid into gj from p in gj.DefaultIfEmpty() //join u in db.RES_CUSTOMER on m.RESID equals u.RESID into ruc //from uc in ruc.DefaultIfEmpty() select new ProListView() { ID = m.ID, RESID = m.RESID, //UMID = uc.UMID, USERNAME = m.USERNAME, USERID = m.USERID, PROTOCOLTYPE = m.PROTOCOLTYPE, PRODUCTTYPE = m.PRODUCTTYPE, ORDERSTATUS = p.orderstatus, CTIME = m.CTIME, NOTE = m.NOTE, STATUS = m.STATUS, channel = p.channel, CREATER = m.creater, REVIEWER = m.reviewer, AUDITTIME = m.auditTime, PROTOCOLNO = m.PROTOCOLNO, PRICE = m.PRICE, Orderids = db.USER_PROTOCOL_ORDER.Where(x => m.ID == x.ProtocolId).Select(x => x.Orderid).ToList() }); } if (!string.IsNullOrEmpty(channel)) { var residList = res.Select(x => x.RESID.Trim()).Distinct().ToList(); var orderQurey = db.WX_SZZYORDER.Where(x => residList.Contains(x.RESID)); if (channel.Split(',').Count() != 1) { var predicates = new List>>(); foreach (var channelitem in channel.Split(',')) { var arr0 = channelitem.Split('|'); foreach (var item in arr0) { var a = item.Split(';'); var min = Convert.ToInt32(a[0]); var max = Convert.ToInt32(a[1]); predicates.Add(m => m.CHANNEL >= min && m.CHANNEL <= max); } } orderQurey = orderQurey.WhereOR(predicates.ToArray()); } else { foreach (var channelitem in channel.Split(',')) { var arr0 = channelitem.Split('|'); if (arr0.Length > 1) { var predicates = new List>>(); foreach (var item in arr0) { var a = item.Split(';'); var min = Convert.ToInt32(a[0]); var max = Convert.ToInt32(a[1]); predicates.Add(m => m.CHANNEL >= min && m.CHANNEL <= max); } orderQurey = orderQurey.WhereOR(predicates.ToArray()); } else { var arr = channel.Split(';'); var min = Convert.ToInt32(arr[0]); var max = Convert.ToInt32(arr[1]); orderQurey = orderQurey.Where(m => m.CHANNEL >= min && m.CHANNEL <= max); } } } residList = orderQurey.Select(x => x.RESID).Distinct().ToList(); res = res.Where(x => residList.Contains(x.RESID)); } #region 分页 switch (pager.sort?.ToLower()) { case "ctime": if (pager.order.ToLower() == "desc") res = res.OrderByDescending(m => m.CTIME); else res = res.OrderBy(m => m.CTIME); break; default: res = res.OrderBy(m => m.ID); break; } pager.count = res.Count(); var pageList = res.OrderByDescending(x => x.ID).Skip(pager.limit * (pager.page - 1)).Take(pager.limit).ToList(); #endregion 分页 var resids = pageList.Select(x => x.RESID.Trim()).Distinct().ToList(); var orders = db.WX_SZZYORDER.Where(x => resids.Contains(x.RESID)).ToList(); var ruc = db.RES_CUSTOMER.Where(m => resids.Contains(m.RESID)).ToList(); //汉化 foreach (var item in pageList) { var orderList = orders.Where(x => x.RESID == item.RESID.Trim()).ToList(); foreach (var order in orderList) { foreach (var company in companys) { var channels = company.Channel.Split('|'); foreach (var subchannel in channels) { var subch = subchannel.Split(','); var min = int.Parse(subch[0].ToString()); var max = int.Parse(subch[1].ToString()); if (order.CHANNEL >= min && order.CHANNEL <= max) { item.CompanyNames.Add(company.CompanyName); } } } } item.PROTOCOLTYPENAME = ProtocolName(item.PROTOCOLTYPE); if (item.PROTOCOLTYPE == 4 || item.PROTOCOLTYPE == 5) { item.PROTOCOLTYPENAME += "(" + ProtocolFixxStr(item.PRODUCTTYPE, item.ORDERSTATUS) + ")"; } item.STATUSNAME = StatusName(item.STATUS); item.UMID = ruc.FirstOrDefault(m => item.RESID == m.RESID)?.UMID; } return pageList; } } public SYS_USER_PROTOCOL GetOne(int ID) { using (var db = new CRM.Core.Model.Entity.zxdContext()) { var res = db.SYS_USER_PROTOCOL.FirstOrDefault(m => m.ID == ID); return res; } } public bool Delete(ref ValidationErrors errors, int ID) { try { using (var db = new zxdContext()) { var model = db.SYS_USER_PROTOCOL.FirstOrDefault(x => x.ID == ID); if (model.STATUS != 0) { errors.Add("只能删除未签订状态的风险确认书!"); return false; } var orders = db.USER_PROTOCOL_ORDER.Where(x => x.ProtocolId == ID).ToList(); db.SYS_USER_PROTOCOL.Remove(model); db.USER_PROTOCOL_ORDER.RemoveRange(orders); db.SaveChanges(); return true; } } catch (Exception ex) { errors.Add(ex.Message); return false; } } public string GetOrderOne(int ID) { using (var db = new CRM.Core.Model.Entity.zxdContext()) { var res = db.USER_PROTOCOL_ORDER.Where(x => x.ProtocolId == ID).Select(x => x.Orderid).ToList(); return string.Join(",", res); } } public string GetSzzOrderOne(int ID) { using (var db = new CRM.Core.Model.Entity.zxdContext()) { var res = db.USER_PROTOCOL_ORDER.Where(x => x.ProtocolId == ID).Select(x => x.Orderid).ToList(); var orderids = db.WX_SZZYORDER.Where(x => res.Contains(x.ORDERID)).Select(x => x.SZZYORDERID).ToList(); return string.Join(",", orderids); } } public bool AuditModel(int ID, int status, string reviewer = "审核人", string orderids = "") { using (var db = new CRM.Core.Model.Entity.zxdContext()) { var res = db.SYS_USER_PROTOCOL.FirstOrDefault(m => m.ID == ID); if (!string.IsNullOrEmpty(orderids)) { var orders = orderids.Split(',').Select(x => decimal.Parse(x)); var cname = db.WX_SZZYORDER.Where(x => orders.Contains(x.ORDERID)).Select(x => x.CNAME).FirstOrDefault(); if (!string.IsNullOrEmpty(cname)) { res.USERNAME = cname; } } if (res != null) { res.STATUS = status; res.auditTime = DateTime.Now; res.reviewer = reviewer; db.SaveChanges(); return true; } return false; } } public bool EditField(int ID, string field, params decimal[] orderids) { using (var db = new CRM.Core.Model.Entity.zxdContext()) { var res = db.USER_PROTOCOL_ORDER.Where(m => m.ProtocolId == ID).ToList(); foreach (var item in res) { var order = orderids.Where(w => w == item.Orderid).FirstOrDefault(); if (order == 0) { db.USER_PROTOCOL_ORDER.Remove(item); } } foreach (var orderid in orderids) { var order = res.Where(w => w.Orderid == orderid).FirstOrDefault(); if (order == null) { db.USER_PROTOCOL_ORDER.Add(new USER_PROTOCOL_ORDER { Orderid = orderid, ProtocolId = ID }); } else { if (field == "orderids") { order.Orderid = orderid; } } } db.SaveChanges(); return true; } } public bool Create(ref ValidationErrors errors, SYS_USER_PROTOCOL model) { try { using (var db = new zxdContext()) { var cust = db.RES_CUSTOMER.FirstOrDefault(n => n.RESID == model.RESID || n.UMID == model.RESID); model.RESID = cust?.RESID; db.SYS_USER_PROTOCOL.Add(model); db.SaveChanges(); return true; } } catch (Exception ex) { errors.Add(ex.Message); return false; } } public bool CreateOrder(ref ValidationErrors errors, USER_PROTOCOL_ORDER model) { try { using (var db = new zxdContext()) { db.USER_PROTOCOL_ORDER.Add(model); db.SaveChanges(); return true; } } catch (Exception ex) { errors.Add(ex.Message); return false; } } public string GetGiftOrderStatusStr(decimal? orderId) { using (var db = new CRM.Core.Model.Entity.zxdContext()) { var order = db.Wx_SzzyOrder_HandGift.FirstOrDefault(m => m.orderid == orderId); if (order != null) { return GiftOrderStatusStr(order.orderstatus); } } return ""; } public string ProtocolName(int PROTOCOLTYPE) { switch ((ProtocolType)PROTOCOLTYPE) { case ProtocolType.退款和解协议: return "和解协议(退款)"; case ProtocolType.撤销投诉协议: return "撤销投诉协议"; case ProtocolType.不退款和解协议: return "和解协议(不退款)"; case ProtocolType.退款赠与协议: return "赠与协议(退款)"; case ProtocolType.不退款赠与协议: return "赠与协议(不退款)"; case ProtocolType.高龄人群投资风险告知确认书: return "高龄人群投资风险告知确认书"; default: return "未知协议"; } } public string ProtocolFixxStr(int? PRODUCTTYPE, int GiftOrderStatus) { var res = ""; if (PRODUCTTYPE == 1) { res = "赠送订单"; res += "-" + GiftOrderStatusStr(GiftOrderStatus); } else { res = "赠送服务"; } return res; } public string GiftOrderStatusStr(int GiftOrderStatus) { var res = ""; //0未开通、1已开通、2审核不通过,3.关闭 switch (GiftOrderStatus) { case 0: res = "未开通"; break; case 1: res = "已开通"; break; case 2: res = "审核不通过"; break; case 3: res = "关闭"; break; } return res; } public string StatusName(int STATUS) { switch (STATUS) { case 0: return "未签订"; case 1: return "已签订"; case 9: return "已确认"; case -1: return "已驳回"; default: return "未知订单"; } } } public class ProListView { public ProListView() { CompanyNames = new List(); } public int ID { get; set; } public string RESID { get; set; } public string UMID { get; set; } public string USERNAME { get; set; } public string USERID { get; set; } public string PROTOCOLTYPENAME { get; set; } public string STATUSNAME { get; set; } public string NOTE { get; set; } public string CREATER { get; set; } public string REVIEWER { get; set; } public int channel { get; set; } public int STATUS { get; set; } public int PROTOCOLTYPE { get; set; } public int? PRODUCTTYPE { get; set; } public int ORDERSTATUS { get; set; } public DateTime? CTIME { get; set; } public DateTime? AUDITTIME { get; set; } public string CompanyName { get { return CompanyNames.Any() ? string.Join(",", CompanyNames.Distinct().ToList()) : ""; } } public List CompanyNames { get; set; } public string PROTOCOLNO { get; set; } /// /// 和解协议 金额 /// public decimal? PRICE { get; set; } public List Orderids { get; set; } public string Orderid { get { return Orderids != null ? string.Join(",", Orderids) : ""; } } } }