using System; using System.Collections.Generic; using System.Linq; using System.Text; using AutoMapper; using CommonToolsCore; using DTO; using IServices; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.EntityFrameworkCore; using zhengcaioa.Models; namespace Services { public class IntentionCustomerService : IIntentionCustomerService { private readonly zhengcaioaContext _context; private readonly IMapper _mapper; public IntentionCustomerService(zhengcaioaContext context, IMapper mapper) { _context = context; _mapper = mapper; } public ResultEntity save(IntentionCustomerDTO intentionCustomerDTO) { ResultEntity resultEntity = new ResultEntity(); try { var checkUserSn = _context.IntentionCustomers.Where(x => x.Name == intentionCustomerDTO.Name && x.RecStatus == "A" && x.Id != intentionCustomerDTO.Id).FirstOrDefault(); if (checkUserSn != null && (string.IsNullOrWhiteSpace(intentionCustomerDTO.Id) || (!string.IsNullOrWhiteSpace(intentionCustomerDTO.Id) && checkUserSn.Id != intentionCustomerDTO.Id))) { resultEntity.Result = false; resultEntity.Message = "客户单位重复"; return resultEntity; } var checkcooper = _context.CooperatecustomCustomers.Where(x => x.Name == intentionCustomerDTO.Name && x.RecStatus == "A" ).FirstOrDefault(); if (checkcooper != null ) { resultEntity.Result = false; resultEntity.Message = "已存在合作客户"; return resultEntity; } var intentionCustomer = _mapper.Map(intentionCustomerDTO); if (String.IsNullOrEmpty(intentionCustomer.Id)) { if (!string.IsNullOrEmpty(intentionCustomer.Ywjl)) { intentionCustomer.Ywjltime = DateTime.Now; var Cooper = _context.CooperatecustomCustomers.Count(x => x.RecStatus == "A" && x.Ywjl == intentionCustomer.Ywjl); var Inten = _context.IntentionCustomers.Count(x => x.RecStatus == "A" && x.Ywjl == intentionCustomer.Ywjl); if(Cooper+ Inten > 2000) { resultEntity.Result = false; resultEntity.Message = "该业务经理,客户单位和合作客户合计超过2000!"; return resultEntity; } } intentionCustomer.Id = Guid.NewGuid().ToString(); _context.IntentionCustomers.Add(intentionCustomer); } else { var updateproject = _context.IntentionCustomers.Find(intentionCustomer.Id); if (!string.IsNullOrEmpty(intentionCustomer.Ywjl) && (string.IsNullOrEmpty(updateproject.Ywjl) || !string.IsNullOrEmpty(updateproject.Ywjl) && intentionCustomer.Ywjl!= updateproject.Ywjl )) { updateproject.Ywjltime = DateTime.Now; var Cooper = _context.CooperatecustomCustomers.Count(x => x.RecStatus == "A" && x.Ywjl == intentionCustomer.Ywjl); var Inten = _context.IntentionCustomers.Count(x => x.RecStatus == "A" && x.Ywjl == intentionCustomer.Ywjl); if (Cooper + Inten >= 2000) { resultEntity.Result = false; resultEntity.Message = "该业务经理,客户单位和合作客户合计超过2000!"; return resultEntity; } } if (string.IsNullOrEmpty(intentionCustomer.Ywjl)){ updateproject.Ywjltime = null; } updateproject.Sheng = intentionCustomer.Sheng; updateproject.City = intentionCustomer.City; updateproject.AreaId = intentionCustomer.AreaId; updateproject.Khly = intentionCustomer.Khly; updateproject.Hyfl = intentionCustomer.Hyfl; updateproject.Khlx = intentionCustomer.Khlx; updateproject.Ywjl = intentionCustomer.Ywjl; updateproject.Name = intentionCustomer.Name; updateproject.Postal = intentionCustomer.Postal; updateproject.Address = intentionCustomer.Address; updateproject.Url = intentionCustomer.Url; updateproject.Tel = intentionCustomer.Tel; updateproject.Phone = intentionCustomer.Phone; updateproject.Qq = intentionCustomer.Qq; updateproject.Email = intentionCustomer.Email; updateproject.FName = intentionCustomer.FName; updateproject.FTel = intentionCustomer.FTel; updateproject.FQq = intentionCustomer.FQq; updateproject.YwName = intentionCustomer.YwName; updateproject.YwTel = intentionCustomer.YwTel; updateproject.YwQq = intentionCustomer.YwQq; updateproject.JgCode = intentionCustomer.JgCode; updateproject.Khh = intentionCustomer.Khh; updateproject.Count = intentionCustomer.Count; updateproject.ShrName = intentionCustomer.ShrName; updateproject.ShrTel = intentionCustomer.ShrTel; updateproject.ShrAddress = intentionCustomer.ShrAddress; updateproject.Remark = intentionCustomer.Remark; updateproject.RecStatus = intentionCustomer.RecStatus; updateproject.Modifier = intentionCustomer.Modifier; updateproject.Modifytime = intentionCustomer.Modifytime; updateproject.Yixiangtime = intentionCustomer.Yixiangtime; updateproject.Yixiang = intentionCustomer.Yixiang; updateproject.Dianxiaozhuanyuan = intentionCustomer.Dianxiaozhuanyuan; updateproject.Zuijinzhuizongtime = intentionCustomer.Zuijinzhuizongtime; updateproject.Weixin = intentionCustomer.Weixin; updateproject.Shifoutianjiaweixin = intentionCustomer.Shifoutianjiaweixin; updateproject.Weixiner = intentionCustomer.Weixiner; updateproject.Weixintime = intentionCustomer.Weixintime; if (!string.IsNullOrEmpty(intentionCustomer.HuiyuanId)) { updateproject.HuiyuanId = intentionCustomer.HuiyuanId; } } _context.SaveChanges(); var listPosition = _context.IntentionCustomers.Where(r => r.RecStatus == "A").ToList(); // var intentionCustomerDTOs = _mapper.Map>(listPosition); //CacheHelperNetCore.CacheInsert("intentionCustomerDTOs", intentionCustomerDTOs); resultEntity.ReturnID = intentionCustomer.Id; resultEntity.Result = true; } catch (Exception ex) { resultEntity.Result = false; resultEntity.Message = "保存失败,请联系管理员"; } return resultEntity; } public IntentionCustomerDTO Get(string id) { var entity = _context.IntentionCustomers.Find(id); if (entity ==null || entity.RecStatus != "A") { entity = new IntentionCustomer(); } var intentionCustomerDTO = _mapper.Map(entity); return intentionCustomerDTO; } public IntentionCustomerDTO GetByName(string name) { var entity = _context.IntentionCustomers.Where(x=>x.Name == name).FirstOrDefault(); if (entity==null || entity.RecStatus != "A") { entity = new IntentionCustomer(); } var intentionCustomerDTO = _mapper.Map(entity); return intentionCustomerDTO; } public ResultDataEntity SearchByPaging(IntentionCustomerDTOSearch searchEntity) { ResultDataEntity data = new ResultDataEntity(); List list = new List(); var listCode = (from a in _context.SysCodeDtls join b in _context.SysCodes on a.CodeId equals b.Id where a.RecStatus == "A" && b.RecStatus == "A" select new CodeDataEntity() { CodeId = b.Id, CodeTable = b.CodeTable, CodeField = b.CodeField, CodeSn = a.CodeSn, Comments = a.Comments, Contents = a.Contents, RecStatus = a.RecStatus, Sort = a.Sort } ); DateTime Createtimestart = DateTime.Now; DateTime Createtimeend = DateTime.Now; if (!string.IsNullOrWhiteSpace(searchEntity.Createtime)) { string[] Createtimes = searchEntity.Createtime.Split("|"); DateTime.TryParse(Createtimes[0], out Createtimestart); DateTime.TryParse(Createtimes[1], out Createtimeend); Createtimeend = Createtimeend.AddDays(1); } DateTime Yixiangtimestart = DateTime.Now; DateTime Yixiangtimeend = DateTime.Now; if (!string.IsNullOrWhiteSpace(searchEntity.Yixiangtime)) { string[] Yixiangtimes = searchEntity.Yixiangtime.Split("|"); DateTime.TryParse(Yixiangtimes[0], out Yixiangtimestart); DateTime.TryParse(Yixiangtimes[1], out Yixiangtimeend); // Yixiangtimeend = Yixiangtimeend.AddDays(1); } int aaaa = 0; if (!string.IsNullOrWhiteSpace(searchEntity.Visittimes)) { int.TryParse(searchEntity.Visittimes, out aaaa); } var query = (from a in _context.IntentionCustomers // join b in listCode.Where(x => x.CodeTable == "IntentionCustomer" && x.CodeField == "khly") // on a.Khly equals b.CodeSn // join c in listCode.Where(x => x.CodeTable == "CooperatecustomCustomer" && x.CodeField == "hyfl") // on a.Hyfl equals c.CodeSn // join d in listCode.Where(x => x.CodeTable == "CooperatecustomCustomer" && x.CodeField == "khlx") //on a.Khlx equals d.CodeSn // join e in _context.PltUsers.Where(x => x.RecStatus == "A" && x.Zhiwustatus == "A" && x.IsYwjl == "A") // on a.Ywjl equals e.Id // into esss // from abi in esss.DefaultIfEmpty() // join f in _context.PltUsers.Where(x => x.RecStatus == "A" && x.Zhiwustatus == "A" ) // on a.Dianxiaozhuanyuan equals f.Id // into fsss // from fff in fsss.DefaultIfEmpty() // join f in _context.Areas on a.Sheng equals f.CodeId // join g in _context.Areas on a.City equals g.CodeId // join h in _context.Areas on a.AreaId equals h.CodeId join l in _context.IntentionVisits.Where(x => x.RecStatus == "A").GroupBy(q => new { q.Viscustomer }).Select(q => new { Viscustomer = q.Key.Viscustomer, Visittimes = q.Count(), }) on a.Id equals l.Viscustomer into lsss from lll in lsss.DefaultIfEmpty() where a.RecStatus == "A" && (string.IsNullOrWhiteSpace(searchEntity.Createtime) || (a.Createtime >= Createtimestart && a.Createtime <= Createtimeend)) && (string.IsNullOrWhiteSpace(searchEntity.Name) || a.Name.Contains(searchEntity.Name.Trim())) && (string.IsNullOrWhiteSpace(searchEntity.Khly) || a.Khly == searchEntity.Khly.Trim()) && (string.IsNullOrWhiteSpace(searchEntity.Hyfl) || a.Hyfl == searchEntity.Hyfl.Trim()) && (string.IsNullOrWhiteSpace(searchEntity.Khlx) || a.Khlx == searchEntity.Khlx.Trim()) //&& (string.IsNullOrWhiteSpace(searchEntity.Ywjl) || a.Ywjl == searchEntity.Ywjl.Trim()) && (string.IsNullOrWhiteSpace(searchEntity.Sheng) || a.Sheng == searchEntity.Sheng.Trim()) && (string.IsNullOrWhiteSpace(searchEntity.City) || a.City == searchEntity.City.Trim()) && (string.IsNullOrWhiteSpace(searchEntity.AreaId) || a.AreaId == searchEntity.AreaId.Trim()) && (string.IsNullOrWhiteSpace(searchEntity.Creater) || a.Creater == searchEntity.Creater.Trim()) && (string.IsNullOrWhiteSpace(searchEntity.Dianxiaozhuanyuan) || a.Dianxiaozhuanyuan == searchEntity.Dianxiaozhuanyuan.Trim()) && (string.IsNullOrWhiteSpace(searchEntity.Yixiangtime) || (a.Yixiangtime >= Yixiangtimestart && a.Yixiangtime <= Yixiangtimeend)) && (string.IsNullOrWhiteSpace(searchEntity.Yixiang) || ( a.Yixiang == searchEntity.Yixiang.Trim() && (a.Ywjl == null || a.Ywjl == searchEntity.YwjlYx) )) && (aaaa <= 0 || lll.Visittimes >= aaaa) //&& (string.IsNullOrWhiteSpace(searchEntity.Shifouweixin) || a.Shifoutianjiaweixin == searchEntity.Shifouweixin.Trim()) select new IntentionCustomerDTO { Id = a.Id, Sheng = a.Sheng, City = a.City, AreaId = a.AreaId, Khly = a.Khly, Hyfl = a.Hyfl, Khlx = a.Khlx, Ywjl = a.Ywjl, //ShengName = f.Name + "-" + g.Name + "-" + h.Name, //CityName = g.Name, //AreaIdName = h.Name, //KhlyName = b.Comments, //HyflName = c.Comments, //KhlxName = d.Comments, //YwjlName = abi.UserName, Name = a.Name, Postal = a.Postal, Address = a.Address, Url = a.Url, Tel = a.Tel, Phone = a.Phone, Qq = a.Qq, Email = a.Email, FName = a.FName, FTel = a.FTel, FQq = a.FQq, YwName = a.YwName, YwTel = a.YwTel, YwQq = a.YwQq, JgCode = a.JgCode, Khh = a.Khh, Count = a.Count, ShrName = a.ShrName, ShrTel = a.ShrTel, ShrAddress = a.ShrAddress, Remark = a.Remark, Weixin = a.Weixin, Shifoutianjiaweixin = a.Shifoutianjiaweixin, Weixiner = a.Weixiner, Weixintime = a.Weixintime, RecStatus = a.RecStatus, Modifier = a.Modifier, Modifytime = a.Modifytime, CreatetimeName = a.Createtime.ToString("yyyy-MM-dd"), Customertype = "档案客户", Yixiangtime = a.Yixiangtime, YixiangtimeName = a.Yixiangtime.HasValue? a.Yixiangtime.Value.ToString("yyyy-MM-dd"):"", Yixiang = a.Yixiang, Dianxiaozhuanyuan = a.Dianxiaozhuanyuan, //DianxiaozhuanyuanName = fff.UserName, Zuijinzhuizongtime = a.Zuijinzhuizongtime, ZuijinzhuizongtimeName = a.Zuijinzhuizongtime.HasValue ? a.Zuijinzhuizongtime.Value.ToString("yyyy-MM-dd") : "", Visittimes = lll.Visittimes, Kuaidistatus = a.Kuaidistatus, Kuaiditime = a.Kuaiditime, } ); if (!string.IsNullOrWhiteSpace(searchEntity.Shifouweixin)) { query = query.Where( a=>a.Shifoutianjiaweixin == searchEntity.Shifouweixin.Trim()); } if (!string.IsNullOrWhiteSpace(searchEntity.Kuaidistatus)) { if (searchEntity.Kuaidistatus == "A") { query = query.Where(a => a.Kuaidistatus == searchEntity.Kuaidistatus.Trim()); } else { query = query.Where(a => a.Kuaidistatus == searchEntity.Kuaidistatus.Trim() || a.Kuaidistatus == null); } } if (!string.IsNullOrWhiteSpace(searchEntity.Ywjl)) { if(searchEntity.Ywjl != "11111") { query = query.Where(a => a.Ywjl == searchEntity.Ywjl.Trim()); }else { query = query.Where(a => a.Ywjl == null ); } } if (!string.IsNullOrWhiteSpace(searchEntity.ShifouDianhua)) { if (searchEntity.ShifouDianhua != "A") { query = query.Where(a => a.Tel == null || a.Tel == ""); } else { query = query.Where(a => a.Tel != null && a.Tel != ""); } } if (!string.IsNullOrWhiteSpace(searchEntity.Visittimes)) { if (searchEntity.ShifouDianhua != "A") { query = query.Where(a => a.Tel == null || a.Tel == ""); } else { query = query.Where(a => a.Tel != null && a.Tel != ""); } } //if (searchEntity.totalrows == 0) searchEntity.totalrows = query.Count(); var lianlist = query.OrderByDescending(x => x.Modifytime).Skip((searchEntity.page - 1) * searchEntity.rows).Take(searchEntity.rows).ToList(); if(lianlist!=null && lianlist.Count > 0) { var areas = _context.Areas; var pltUsers = _context.PltUsers.Where(x => x.RecStatus == "A" && x.Zhiwustatus == "A"); var khly = listCode.Where(x => x.CodeTable == "IntentionCustomer" && x.CodeField == "khly"); var hyfl = listCode.Where(x => x.CodeTable == "CooperatecustomCustomer" && x.CodeField == "hyfl"); var khlx = listCode.Where(x => x.CodeTable == "CooperatecustomCustomer" && x.CodeField == "khlx"); foreach (var intentionCustomerDTO in lianlist) { var sheng = areas.Where(x => x.CodeId == intentionCustomerDTO.Sheng).FirstOrDefault(); var city = areas.Where(x => x.CodeId == intentionCustomerDTO.City).FirstOrDefault(); var Area = areas.Where(x => x.CodeId == intentionCustomerDTO.AreaId).FirstOrDefault(); if (sheng != null) { intentionCustomerDTO.ShengName = sheng.Name; } if (city != null) { intentionCustomerDTO.CityName = city.Name; intentionCustomerDTO.ShengName += "-" + city.Name; } if (Area != null) { intentionCustomerDTO.AreaIdName = Area.Name; intentionCustomerDTO.ShengName += "-" + Area.Name; } var ywjl = pltUsers.Where(x => x.Id == intentionCustomerDTO.Ywjl).FirstOrDefault(); if (ywjl != null) { intentionCustomerDTO.YwjlName = ywjl.UserName; } var Dianxiaozhuanyuan = pltUsers.Where(x => x.Id == intentionCustomerDTO.Dianxiaozhuanyuan).FirstOrDefault(); if (Dianxiaozhuanyuan != null) { intentionCustomerDTO.DianxiaozhuanyuanName = Dianxiaozhuanyuan.UserName; } var KhlyName = khly.Where(x => x.CodeSn == intentionCustomerDTO.Khly).FirstOrDefault(); if (KhlyName != null) { intentionCustomerDTO.KhlyName = KhlyName.Comments; } var HyflName = hyfl.Where(x => x.CodeSn == intentionCustomerDTO.Hyfl).FirstOrDefault(); if (HyflName != null) { intentionCustomerDTO.HyflName = HyflName.Comments; } var KhlxName = khlx.Where(x => x.CodeSn == intentionCustomerDTO.Khlx).FirstOrDefault(); if (KhlxName != null) { intentionCustomerDTO.KhlxName = KhlxName.Comments; } intentionCustomerDTO.Guanliankehushu = _context.CustomerGuanlians.Count(x => x.CustomerId == intentionCustomerDTO.Id); } } //foreach (var intentionCustomerDTO in lianlist) //{ // intentionCustomerDTO.Visittimes = _context.IntentionVisits.Count(x => x.RecStatus == "A" && x.Viscustomer == intentionCustomerDTO.Id); //} data.LoadData(searchEntity, lianlist); return data; } /// /// 修改主表状态 /// /// 主id /// 用户 /// public ResultEntity ModifyStatus(string id, string userid) { ResultEntity result = new ResultEntity(); result.Result = true; var model = _context.IntentionCustomers.Find(id); if (model != null) { model.RecStatus = "D"; model.Modifier = userid; model.Modifytime = DateTime.Now; _context.SaveChanges(); } return result; } /// /// 获取所有有效意向客户 /// /// public List GetList(string huiyuanId = null) { var listPosition = _context.IntentionCustomers.Where(r => r.RecStatus == "A").ToList(); if (!string.IsNullOrEmpty(huiyuanId)) { listPosition = listPosition.Where(x => x.HuiyuanId == huiyuanId).ToList(); } var intentionCustomerDTOs = _mapper.Map>(listPosition); return intentionCustomerDTOs; } /// /// 获取所有有效意向客户 /// /// public List GetList(string[] id) { List result = new List(); if (id != null) { var listPosition = _context.IntentionCustomers.Where(r => id.Contains(r.Id) && r.RecStatus == "A").ToList(); result = _mapper.Map>(listPosition); } return result; } public List GetListsalary(string userid, DateTime datemin, DateTime datemax) { var listPosition = _context.IntentionCustomers.Where(r => r.RecStatus == "A" && r.Creater == userid && r.Createtime >= datemin && r.Createtime < datemax).ToList(); var list = _mapper.Map>(listPosition); return list; } public List GetListsalaryweixin(string userid, DateTime datemin, DateTime datemax) { var listPosition = _context.IntentionCustomers.Where(r => r.RecStatus == "A" && r.Weixiner == userid && r.Weixintime >= datemin && r.Weixintime < datemax).ToList(); var list = _mapper.Map>(listPosition); return list; } public List GetListsalaryyixiang(string userid, DateTime datemin, DateTime datemax) { var listPosition = _context.IntentionCustomers.Where(r => r.RecStatus == "A" && r.Dianxiaozhuanyuan == userid && r.Yixiangtime >= datemin && r.Yixiangtime < datemax).ToList(); var list = _mapper.Map>(listPosition); return list; } public ResultEntity saveKhlx(CooperatecustomCustomerDTO cooperatecustomCustomerDTO) { ResultEntity resultEntity = new ResultEntity(); try { var updateproject = _context.IntentionCustomers.Find(cooperatecustomCustomerDTO.Id); updateproject.Khlx = cooperatecustomCustomerDTO.Khlx; updateproject.Modifier = cooperatecustomCustomerDTO.Modifier; updateproject.Modifytime = cooperatecustomCustomerDTO.Modifytime; _context.SaveChanges(); resultEntity.ReturnID = cooperatecustomCustomerDTO.Id; resultEntity.Result = true; } catch (Exception ex) { resultEntity.Result = false; resultEntity.Message = "保存失败,请联系管理员"; } return resultEntity; } public ResultEntity GetZhengfuProjectDTOByTitle(string Name, string Id) { ResultEntity resultEntity = new ResultEntity(); resultEntity.Result = true; if (!string.IsNullOrWhiteSpace(Name)) { var checkUserSn = _context.IntentionCustomers.Where(r => r.RecStatus == "A" && r.Name == Name).FirstOrDefault(); if (checkUserSn != null && (string.IsNullOrWhiteSpace(Id) || (!string.IsNullOrWhiteSpace(Id) && checkUserSn.Id != Id))) { resultEntity.Result = false; resultEntity.Message = "该档案客户已经存在"; } var checkUserSncooper = _context.CooperatecustomCustomers.Where(r => r.RecStatus == "A" && r.Name == Name).FirstOrDefault(); if (checkUserSncooper != null && (string.IsNullOrWhiteSpace(Id) || (!string.IsNullOrWhiteSpace(Id) && checkUserSncooper.Id != Id))) { resultEntity.Result = false; resultEntity.Message = "该合作客户已经存在"; } } return resultEntity; } } }