using MySqlConnector; using StackExchange.Redis; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using Zxd.Core.Domain.Dto.Wework; using Zxd.EntityFramework; using static Zxd.Domain.Impl.ICustomerDomain; namespace Zxd.Domain { public class CustomerDomain : ICustomerDomain { private readonly IConfiguration _configuration; private readonly IHttpClient _httpClient; private readonly ICacheDomain _cacheDomain; private readonly IBaseRepository _repository; private readonly IBaseRepository _dncmsbaseRepository; public CustomerDomain(IConfiguration configuration, IHttpClient httpClient, ICacheDomain cacheDomain, IBaseRepository dncmsbaseRepository, IBaseRepository repository) { _configuration = configuration; _httpClient = httpClient; _cacheDomain = cacheDomain; _repository = repository; _dncmsbaseRepository = dncmsbaseRepository; } /// /// 添加标签数据 /// /// /// /// /// public async Task AddTag(string resid, string tag,int ceid) { tag = tag.Trim(); resid = resid.Trim(); if (string.IsNullOrEmpty(tag)) throw new ApiException("参数错误"); if (string.IsNullOrEmpty(resid)) throw new ApiException("参数错误"); var info = await _repository.GetRepository().Query().Where(m => m.resid == resid && m.tag == tag && m.isdelete==0).FirstOrDefaultAsync(); if (info != null) throw new ApiException("已存在此标签"); await _repository.GetRepository().InsertAsync(new Res_Tag() { resid = resid, tag = tag, ceid = ceid }); return true; } public async Task DelTag(int id,int deleteeid) { var info = await _repository.GetRepository().Query().Where(m => m.id == id).FirstOrDefaultAsync(); if (info == null) throw new ApiException("找不到这个标签"); info.deleteeid = deleteeid; info.isdelete = 1; await _repository.GetRepository().UpdateAsync(info); return true; } /// /// 获取标签列表 /// /// /// public async Task> GetTag(string resid) { resid = resid.Trim(); return await _repository.GetRepository().Query().Where(m => m.resid == resid && m.isdelete==0).ToListAsync(); } public async Task> GetUsernames(string? resid) { if (string.IsNullOrEmpty(resid)) return new List(); var usernames = await _repository.GetRepository().Query() .Where(x => x.RESID == resid) .Select(x => x.USERNAME) .ToListAsync(); return usernames; } public async Task> GetUsernamesByOrderid(string orderidListIn) { if (orderidListIn == null) return new List { }; var orderidList = orderidListIn.Split(";").ToList(); if (orderidList.Count == 0) return new List(); var usernamesList = await _repository.GetRepository().Query() .Where(x => orderidList.Contains(x.ORDERID.ToString())) .Select(x => new userRet { orderid = x.ORDERID.ToString(), softwarename = x.SOFTUSERNAME }) .ToListAsync(); var res = new List(); orderidList.ForEach(orderid => { var findOder = usernamesList.Find(u => u.orderid == orderid); if (findOder != null) { res.Add(findOder); } }); return res; } public async Task CreateCustomer(string MOBILE, string ResId, string CustomerFrom) { CreateCustomerRes res = new CreateCustomerRes(); var customer = await _repository.GetRepository().Query().FirstOrDefaultAsync(x => x.RESID == ResId); if (customer == null) { //开始创建 var mobile = MOBILE.Replace("+86", ""); if (mobile.StartsWith("01") && mobile.Length == 12) { mobile = mobile.Substring(1); } var systemConfig = _configuration.GetSection("SystemConfig").Get(); var key = systemConfig.GetAccessKey(systemConfig.CRMClientKey); var CNumber = SecurityHelper.EncyptData(mobile, key); var param = new List { new MySqlParameter() { ParameterName = "p_CNumber", DbType = DbType.String, Value =CNumber}, new MySqlParameter() { ParameterName = "p_ResId", DbType = DbType.String, Value = ResId }, new MySqlParameter() { ParameterName = "p_CustomerFrom", DbType = DbType.String, Value = CustomerFrom } }; param.Add(!string.IsNullOrEmpty(mobile) ? new MySqlParameter() { ParameterName = "p_ECNumber", DbType = DbType.String, Value = NumberFormat(mobile) } : new MySqlParameter() { ParameterName = "p_ECNumber", DbType = DbType.String, Value = DBNull.Value }); var i = await _repository.ExecuteSqlCommandNonQueryAsync(System.Data.CommandType.StoredProcedure, "res_ResgisterCustomer", param.ToArray()); res.code = CCenum.成功; } else { res.code = CCenum.客户存在; } return res; } public async Task> GetFollow(List queryList) { var extuseridList = queryList.Select(s => s.extuserid).ToList(); // 依据appid userid extuserid 找出表中对应的数据,并根据subscribe判断是否关注 var temp = await _dncmsbaseRepository.GetRepository().Query() .Where(w => extuseridList.Contains(w.Externaluserid)) .Select(x => new WwUserFollowOutDto() { appid = x.Appid, userid = x.Userid, extuserid = x.Externaluserid, isFollow = x.subscribe }) .ToListAsync(); List res = new List(); queryList.ForEach(q => { var t = temp.Find(f => f.appid == q.appid && f.userid == q.userid && f.extuserid == q.extuserid); if (t != null) { res.Add(new WwUserFollowOutDto { appid = t.appid, userid = t.userid, extuserid = t.extuserid, isFollow = t.isFollow }); } }); return res; } public async Task> GetSalesLeadList(string? resId) { var systemConfig = _configuration.GetSection("SystemConfig").Get(); var result = new List(); var url = systemConfig.SalesLeadUrl; var key = systemConfig.GetAccessKey(systemConfig.CRMClientKey); var reslist = await _repository.GetRepository().Query() .Where(x => x.RESID == resId).ToListAsync(); var mobiles = new List(); foreach (var res in reslist) { if (res == null) continue; mobiles.Add(SecurityHelper.DecyptData(res.MOBILE, key)); } if (mobiles == null || !mobiles.Any()) { throw new ApiException("暂无销售线索!", -1); } var parameter = await _cacheDomain.GetValueParameter("ISVR_Saleclus_Get"); if (string.IsNullOrEmpty(parameter)) return result; var response = await _httpClient.PostAsync>(parameter, new { mobiles }); if (response.Ret != 0 || response.List == null) { return result; } foreach (var saleRelation in response.List) { if (result.Any(x => x.Appuserid == saleRelation.Appuserid && x.Appid == saleRelation.Appid)) { continue; } var name = saleRelation.Appuserid.Length > 10 ? saleRelation.Appuserid[..10] + "*****" : saleRelation.Appuserid; result.Add(new SalesLeadDto { Name = name, Appid = saleRelation.Appid, Appuserid = saleRelation.Appuserid, Url = $"{url}?appid={saleRelation.Appid}&appuserid={saleRelation.Appuserid}" }); } return result; } public string NumberFormat(string number) { if (string.IsNullOrEmpty(number) || number.Length <= 6) { return number; } return number.Substring(0, 3) + new string('*', number.Length - 6) + number.Substring(number.Length - 3); } /// /// /// /// /// /// public async Task> GetWorkWXUserSelectAsync(string? resId, string? DeptCode) { if (string.IsNullOrEmpty(resId)) { return new List(); } var customerQuery = _repository.GetRepository().Query(); var allCustomer = (from a in customerQuery join b in customerQuery on a.CUSTOMERID equals b.CUSTOMERID where b.RESID == resId select a.RESID).ToList(); var data = await _repository.GetRepository().Query() .Where(x => allCustomer.Contains(x.Resid) || x.Resid == resId) .ToListAsync(); var result = new List(); var unameList = data.Select(n => n.Userid).Distinct().ToList(); foreach (var name in unameList) { ExUserModel newModel = new ExUserModel { Userid = name, }; var names = data.Where(n => n.Userid == name).OrderByDescending(n => n.Ctime).ToList(); var seftItem = names.FirstOrDefault(n => n.Deptcode == DeptCode); if (seftItem != null) { newModel.Ctime = seftItem.Ctime; newModel.Deptcode = seftItem.Deptcode; newModel.Resid = seftItem.Resid; } else { newModel.Ctime = names.FirstOrDefault().Ctime; newModel.Deptcode = names.FirstOrDefault().Deptcode; newModel.Resid = names.FirstOrDefault().Resid; } result.Add(newModel); } return result.OrderByDescending(n => n.Ctime).ToList(); } public async Task> ExtUserBandGetAsync(string? resId) { if (string.IsNullOrEmpty(resId)) { return new List(); } var customerQuery = _repository.GetRepository().Query(); var allCustomer = (from a in customerQuery join b in customerQuery on a.CUSTOMERID equals b.CUSTOMERID where b.RESID == resId select a.RESID).ToList(); var userList = await _repository.GetRepository().Query().Where(n => allCustomer.Contains(n.Resid) || n.Resid == resId).ToListAsync(); List result = new List(); foreach (var item in userList) { result.Add(item.Userid); } result = result.Distinct().ToList(); return result; } public async Task> GetResidByExtuser(List extUser) { if (!extUser.Any()) return new List(); var resids = await _repository.GetRepository().Query() .Where(x => extUser.Contains(x.Userid)) .Select(x => x.Userid + ":" + x.Resid) .ToListAsync(); return resids; } public async Task> GetPhoneByUnionid(string unionid) { IList mobiles = new List(); var unionlist = await _repository.GetRepository().Query() .Where(x => x.unionid == unionid || x.appuserid == unionid).ToListAsync(); if (unionlist.Any()) { mobiles = await _repository.GetRepository().Query() .Where(x => x.cid == unionlist.First().cid && !string.IsNullOrEmpty(x.mobile)).Select(m => m.mobile).Distinct().ToListAsync(); } return mobiles; } } public class ExtUserItem { public string userid { get; set; } } }