using AutoMapper; using AutoMapper.Execution; using MySqlX.XDevAPI.Relational; using OASystem.Domain; using OASystem.Domain.Dtos; using OASystem.Domain.Dtos.CRM; using OASystem.Domain.Entities.Customer; using OASystem.Domain.Entities.Resource; using OASystem.Domain.ViewModels.CRM; using SqlSugar; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; using static OASystem.Domain.Dtos.CRM.NewClientDataQueryDto; namespace OASystem.Infrastructure.Repositories.CRM { public class NewClientDataRepository : BaseRepository { private readonly IMapper _mapper; public NewClientDataRepository(SqlSugarClient sqlSugar, IMapper mapper) : base(sqlSugar) { _mapper = mapper; } /// /// 客户资料初识初始化 /// /// /// public async Task QueryNewClientData(NewClientDataQueryDto dto) { Result result = new Result() { Code = -2, Msg = "未知错误" }; try { #region 交集 List NewClientDataId1 = new List(); List NewClientDataId2 = new List(); string NewClientDataId = ""; int state = 0; #region 负责人 if (!string.IsNullOrWhiteSpace(dto.Userid)) { string sql = string.Format(@"select u1.UsersId as UserId,u2.CnName,u1.NewClientDataId from Crm_ClientDataAndUser u1,Sys_Users u2 where u1.UsersId=u2.Id and u1.UsersId in ({0}) and u1.IsDel = 0", dto.Userid); List ascribedUsers = await _sqlSugar.SqlQueryable(sql).ToListAsync(); if (ascribedUsers.Count != 0) { foreach (var ascribedUser in ascribedUsers) { if (ascribedUser.NewClientDataId != 0) { NewClientDataId1.Add(ascribedUser.NewClientDataId); } } } else { result = new Result() { Code = -1, Msg = "暂无数据" }; } state = -1; } #endregion #region 业务归属 if (!string.IsNullOrWhiteSpace(dto.Business)) { string sql = string.Format(@"select d2.Id,d2.Name,d1.NewClientDataId from Crm_ClientDataAndBusiness d1,Sys_SetData d2 where d1.SetDataId=d2.Id and d1.SetDataId in ({0}) and d1.isdel = 0", dto.Business); List AscribedDepartment = await _sqlSugar.SqlQueryable(sql).ToListAsync(); if (AscribedDepartment.Count != 0) { foreach (var item in AscribedDepartment) { if (item.NewClientDataId != 0) { NewClientDataId2.Add(item.NewClientDataId); } } } else { result = new Result() { Code = -1, Msg = "暂无数据" }; } state = -1; } #endregion List intList = new List(); if (NewClientDataId1.Count != 0 && NewClientDataId2.Count != 0) { intList = NewClientDataId1.Intersect(NewClientDataId2).ToList(); } else if (NewClientDataId1.Count != 0) { intList = NewClientDataId1; } else if (NewClientDataId2.Count != 0) { intList = NewClientDataId2; } #endregion foreach (var item in intList) { NewClientDataId += item + ","; } if (!string.IsNullOrWhiteSpace(NewClientDataId)) { NewClientDataId = NewClientDataId.Substring(0, NewClientDataId.Length - 1); } string sqlWhere = string.Empty; #region 联系人条件 if (!string.IsNullOrWhiteSpace(dto.Contact)) { sqlWhere += string.Format(@" And s.Contact like '%{0}%'", dto.Contact); } #endregion #region 地区条件 if (!string.IsNullOrWhiteSpace(dto.Location)) { sqlWhere += string.Format(@" And s.Location like '%{0}%'", dto.Location); } #endregion #region 单位条件 if (!string.IsNullOrWhiteSpace(dto.Client)) { sqlWhere += string.Format(@" And s.Client like '%{0}%'", dto.Client); } #endregion if (state == -1) { if (string.IsNullOrWhiteSpace(NewClientDataId)) { NewClientDataId = "0"; } sqlWhere += string.Format(@" And s.Id in({0})", NewClientDataId); } #region 地市州条件 if (dto.Lvlid != 0) { sqlWhere += string.Format(@" And s.Lvlid={0}", dto.Lvlid); } #endregion #region 省域条件 if (dto.Range != 0) { string setDataSql = "select * from Sys_SetData where STid = 33 and isdel = 0 "; switch (dto.Range) { case 419: setDataSql += " and (Name like '%四%川%' or Name like '%成%都%')"; break; case 421: setDataSql += " and (Name like '%贵%州%' or Name like '%贵%阳%')"; break; case 420: setDataSql += " and (Name like '%云%南%' or Name like '%昆%明%')"; break; case 423: setDataSql += " and (Name like '%重庆%')"; break; case 422: setDataSql += " and (Name like '%西%藏%' or Name like '%拉%萨%')"; break; case 578: setDataSql += " and (Name like '%青%海%' or Name like '%西%宁%')"; break; case 605: setDataSql += " and (Name like '%陕%西%' or Name like '%西%安%')"; break; case 606: setDataSql += " and (Name like '%宁%夏%' or Name like '%银%川%')"; break; case 625: setDataSql += " and (Name like '%甘%肃%' or Name like '%兰%州%')"; break; case 634: setDataSql += " and (Name like '%新%疆%' or Name like '%乌%鲁%木%齐%')"; break; } var RangeSetDataList = _sqlSugar.SqlQueryable(setDataSql).Select(x => x.Id).ToList(); string lvlds = string.Join(',', RangeSetDataList).TrimEnd(','); if (!string.IsNullOrEmpty(lvlds)) { sqlWhere += string.Format(@" And s.Lvlid in ({0}) ", lvlds); } } #endregion #region 客户类别 if (dto.Category != 0) { sqlWhere += string.Format(@" And s.Category = {0}", dto.Category); } #endregion sqlWhere += string.Format(@" And s.Lvlid=s1.Id And s.IsDel={0} ", 0); if (!string.IsNullOrEmpty(sqlWhere.Trim())) { Regex r = new Regex("And"); sqlWhere = r.Replace(sqlWhere, "Where", 1); } int pIndex = dto.PageIndex * dto.PageSize - dto.PageSize + 1; int pSize = dto.PageIndex * dto.PageSize; string sqlNew = string.Format(@"select (SELECT COUNT(1) FROM Crm_NewClientData s left Join Sys_SetData s1 On s.Lvlid=s1.Id {0}) AS countPage,* from (select ROW_NUMBER() over(order by s.CreateTime desc) RowNumber,s.*,s1.Name as 'LvlName' from Crm_NewClientData s left Join Sys_SetData s1 On s.Lvlid=s1.Id {0}) as co where RowNumber between {1} and {2} ", sqlWhere, pIndex, pSize); List NewClientDataView = await _sqlSugar.SqlQueryable(sqlNew).ToListAsync(); foreach (var item in NewClientDataView) { Sys_SetData CategoryStr = _sqlSugar.Queryable().Single(it => it.Id == item.Category); item.CategoryStr = CategoryStr != null ? CategoryStr.Name : null; Sys_SetData lvlStr = _sqlSugar.Queryable().Single(it => it.Id == item.Lvlid); item.LvlidStr = lvlStr != null ? lvlStr.Name : null; } if (NewClientDataView.Count > 0) { int count = NewClientDataView[0].countPage; float totalPage = (float)count / dto.PageSize;//总页数 if (totalPage == 0) totalPage = 1; else totalPage = (int)Math.Ceiling((double)totalPage); if (dto.PortType == 1) { #region 下拉框初始化数据 //负责人下拉框 List _Users = new List(); List users = _sqlSugar.Queryable() .Where(u => (u.CnName == "张海麟" || u.CnName == "安宁" || u.CnName == "李彩娟" || u.CnName == "舒庆" || u.CnName == "李媛媛") && u.IsDel == 0).ToList(); foreach (Sys_Users user in users) { var data = new { Id = user.Id, Name = user.CnName }; _Users.Add(data); }; //省域数据 List _Province = new List(); List province = _sqlSugar.Queryable() .Where(u => u.STid == 42 && u.IsDel == 0).ToList(); foreach (Sys_SetData item in province) { var data = new { Id = item.Id, Name = item.Name }; _Province.Add(data); }; //客户级别数据 List _level = new List(); List level = _sqlSugar.Queryable() .Where(u => u.STid == 33 && u.IsDel == 0).ToList(); foreach (Sys_SetData item in level) { var data = new { Id = item.Id, Name = item.Name }; _level.Add(data); }; //客户类别 List _CustomerClass = new List(); List CustomerClass = _sqlSugar.Queryable() .Where(u => u.STid == 37 && u.IsDel == 0).ToList(); foreach (Sys_SetData item in CustomerClass) { var data = new { Id = item.Id, Name = item.Name }; _CustomerClass.Add(data); }; //业务分类 List _ServiceClass = new List(); List ServiceClass = _sqlSugar.Queryable() .Where(u => u.STid == 36 && u.IsDel == 0).ToList(); foreach (Sys_SetData item in ServiceClass) { var data = new { Id = item.Id, Name = item.Name }; _ServiceClass.Add(data); }; #endregion foreach (var item in NewClientDataView) { List AscribedUser = await _sqlSugar.SqlQueryable ("select u1.UsersId as UserId ,u2.CnName,u1.NewClientDataId from Crm_ClientDataAndUser u1,Sys_Users u2 where u1.UsersId=u2.Id and NewClientDataId=" + item.Id + " AND u1.ISDEL = 0").ToListAsync(); item.AscribedUser = AscribedUser; List AscribedDepartment = await _sqlSugar.SqlQueryable ("select d2.Id,d2.Name,d1.NewClientDataId from Crm_ClientDataAndBusiness d1,Sys_SetData d2 where d1.SetDataId=d2.Id and NewClientDataId=" + item.Id + " AND d1.ISDEL = 0").ToListAsync(); item.AscribedDepartment = AscribedDepartment; } var groupNumber = await QueryNumberGroups(); var Data = new { ClientTableData = new { pageCount = count, totalPage = (int)totalPage, pageIndex = dto.PageIndex, pageSize = dto.PageSize, pageSource = NewClientDataView }, Users = _Users, Province = _Province, level = _level, CustomerClass = _CustomerClass, ServiceClass = _ServiceClass, groupNumber = groupNumber.Data, }; return result = new Result() { Code = 0, Msg = "查询成功", Data = Data }; } else if (dto.PortType == 2) { foreach (var item in NewClientDataView) { List AscribedUser = await _sqlSugar.SqlQueryable ("select u1.UsersId as UserId ,u2.CnName,u1.NewClientDataId from Crm_ClientDataAndUser u1,Sys_Users u2 where u1.UsersId=u2.Id and NewClientDataId=" + item.Id + " AND u1.ISDEL = 0").ToListAsync(); item.AscribedUser = AscribedUser.Select(x=> x.UserId); List AscribedDepartment = await _sqlSugar.SqlQueryable ("select d2.Id,d2.Name,d1.NewClientDataId from Crm_ClientDataAndBusiness d1,Sys_SetData d2 where d1.SetDataId=d2.Id and NewClientDataId=" + item.Id + " AND d1.ISDEL = 0").ToListAsync(); item.AscribedDepartment = AscribedDepartment.Select(x => x.Id); } result = new Result() { Code = 0, Msg = "查询成功", Data = new { pageCount = count, totalPage = (int)totalPage, pageIndex = dto.PageIndex, pageSize = dto.PageSize, pageSource = NewClientDataView }, }; } } else { result = new Result() { Code = -1, Msg = "暂无数据!" }; } } catch (Exception ex) { result = new Result() { Code = -2, Msg = "未知错误" }; } return result; } public Result QueryUserSelect() { Result result = new Result() { Code = -2, Msg = "未知错误" }; try { //负责人下拉框 List _Users = new List(); List users = _sqlSugar.Queryable() .Where(u => (u.CnName == "张海麟" || u.CnName == "安宁" || u.CnName == "李彩娟" || u.CnName == "舒庆" || u.CnName == "李媛媛") && u.IsDel == 0).ToList(); foreach (Sys_Users user in users) { var data = new { Id = user.Id, Name = user.CnName }; _Users.Add(data); }; if (_Users.Count == 0) { result = new Result() { Code = -1, Msg = "暂无数据" }; } result = new Result() { Code = 0, Msg = "查询成功!", Data = _Users }; } catch (Exception) { result = new Result() { Code = -2, Msg = "未知错误" }; } return result; } public async Task NewClientOp(NewClientOpDto dto) { Result result = new Result() { Code = -2, Msg = "未知错误" }; bool istrue = false; int AddReturnId = -1; string BirthdayStr = string.Empty; if (!string.IsNullOrWhiteSpace(dto.Birthday)) { DateTime Birthday = new DateTime(); var isParse = DateTime.TryParse(dto.Birthday, out Birthday); BirthdayStr = isParse ? Birthday.ToString("yyyy-MM-dd") : ""; } try { BeginTran(); if (dto.Status == 1)//添加 { string selectSql = string.Format(@"select * from Crm_NewClientData where Client='{0}' And Contact='{1}' And IsDel={2}" , dto.Client, dto.Contact, 0); var NewClientData = await _sqlSugar.SqlQueryable(selectSql).FirstAsync();//查询是否存在 if (NewClientData == null) { if (string.IsNullOrWhiteSpace(dto.PassportDate)) { dto.PassportDate = null; } Crm_NewClientData _NewClientData = _mapper.Map(dto); _NewClientData.Birthday = BirthdayStr; int id = await AddAsyncReturnId(_NewClientData); //添加市场客户资料表数据 if (id == 0) { result = new Result() { Code = -1, Msg = "添加失败!" }; } else { result = new Result() { Code = 0, Msg = "添加成功!"}; istrue = true; AddReturnId = id; CommitTran(); } } else { result = new Result() { Code = -1, Msg = "该信息已存在,请勿重复添加!" }; } } else if (dto.Status == 2)//修改 { DateTime? PassportDate = null; try { PassportDate = DateTime.Parse(dto.PassportDate); } catch (Exception) { PassportDate = null; } bool res = await UpdateAsync(a => a.Id == dto.Id, a => new Crm_NewClientData { Number = dto.Number, Lvlid = dto.Lvlid, Client = dto.Client, Weight = dto.Weight, ClientShort = dto.Clientshort, Contact = dto.Contact, Gender = dto.Gender, Passport = dto.Passport, PassportDate = PassportDate, Job = dto.Job, Telephone = dto.Telephone, Phone = dto.Phone, Email = dto.Email, Location = dto.Location, Address = dto.Address, Birthday = BirthdayStr, OtherInfo = dto.Otherinfo, Wechat = dto.Wechat, Category = dto.Category, PreDele = dto.Predele, FinlishedDele = dto.FinlishedDele, Remark = dto.Remark, }); if (res) { istrue = true; AddReturnId = dto.Id == 0 ? -1 : dto.Id; if (AddReturnId != -1) { await _sqlSugar.Updateable().Where(x=>x.NewClientDataId == AddReturnId).SetColumns(a => new Crm_ClientDataAndUser() { IsDel = 1, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }).ExecuteCommandAsync(); await _sqlSugar.Updateable().Where(x => x.NewClientDataId == AddReturnId).SetColumns(a => new Crm_ClientDataAndBusiness() { IsDel = 1, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }).ExecuteCommandAsync(); } result = new Result() { Code = 0, Msg = "修改成功!" }; } else { result = new Result() { Code = -1, Msg = "修改失败!" }; } } else { result = new Result() { Code = -1, Msg = "请传入Status参数,1添加 2修改!" }; } if (istrue) { Adds(dto.AscribedUser.Select(x => new Crm_ClientDataAndUser { CreateTime = DateTime.Now, CreateUserId = dto.CreateUserId, IsDel = 0, NewClientDataId = AddReturnId, usersId = x }).ToList()); Adds(dto.AscribedDepartment.Select(x => new Crm_ClientDataAndBusiness { CreateUserId = dto.CreateUserId, IsDel = 0, CreateTime = DateTime.Now, NewClientDataId = AddReturnId, SetDataId = x, }).ToList()); CommitTran(); result.Data = new { Id = AddReturnId }; } else { RollbackTran(); } } catch (Exception) { RollbackTran(); result = new Result() { Code = -2, Msg = "未知错误" }; } return result; } public async Task QueryNumberGroups() { Result result = new Result(); //preDeleAll 预计总量 //finlishedDeleAll 已出总量 DataTable preDeleAndfinlishedDeleAll = await GetDataTableAsync("select SUM(PreDele) as PreDeleAll ,SUM(FinlishedDele) as FinlishedDeleAll from Crm_NewClientData"); var preDeleAll = preDeleAndfinlishedDeleAll.Rows[0]["PreDeleAll"].ToString(); var finlishedDeleAll = preDeleAndfinlishedDeleAll.Rows[0]["finlishedDeleAll"].ToString(); result.Code = 0; result.Msg = "成功!"; result.Data = new { preDeleAll, finlishedDeleAll }; return result; } /// /// 获取下拉列表数据和单条数据信息 /// /// public async Task QuerySelectAndSingleData(QuerySingleDto dto) { Result rest = new Result(); var QueryData = await GetAsync(x => x.Id == dto.Id); NewClientDataView MapQueryData = null; if (QueryData != null) { MapQueryData = _mapper.Map(QueryData); MapQueryData.AscribedUser = await _sqlSugar.SqlQueryable ("select u1.UsersId as UserId,u2.CnName,u1.NewClientDataId from Crm_ClientDataAndUser u1,Sys_Users u2 where u1.UsersId=u2.Id and NewClientDataId=" + dto.Id + " and u1.isdel = 0").ToListAsync(); MapQueryData.AscribedDepartment = await _sqlSugar.SqlQueryable ("select d2.Id,d2.Name,d1.NewClientDataId from Crm_ClientDataAndBusiness d1,Sys_SetData d2 where d1.SetDataId=d2.Id and NewClientDataId=" + dto.Id + " and d1.isdel = 0").ToListAsync(); } #region 下拉框初始化数据 //负责人下拉框 List _Users = new List(); List users = _sqlSugar.Queryable() .Where(u => (u.CnName == "张海麟" || u.CnName == "安宁" || u.CnName == "李彩娟" || u.CnName == "舒庆" || u.CnName == "李媛媛") && u.IsDel == 0).ToList(); foreach (Sys_Users user in users) { var data = new { Id = user.Id, Name = user.CnName }; _Users.Add(data); }; //客户级别数据 List _level = new List(); List level = _sqlSugar.Queryable() .Where(u => u.STid == 33 && u.IsDel == 0).ToList(); foreach (Sys_SetData item in level) { var data = new { Id = item.Id, Name = item.Name }; _level.Add(data); }; //客户类别 List _CustomerClass = new List(); List CustomerClass = _sqlSugar.Queryable() .Where(u => u.STid == 37 && u.IsDel == 0).ToList(); foreach (Sys_SetData item in CustomerClass) { var data = new { Id = item.Id, Name = item.Name }; _CustomerClass.Add(data); }; //业务分类 List _ServiceClass = new List(); List ServiceClass = _sqlSugar.Queryable() .Where(u => u.STid == 36 && u.IsDel == 0).ToList(); foreach (Sys_SetData item in ServiceClass) { var data = new { Id = item.Id, Name = item.Name }; _ServiceClass.Add(data); }; #endregion rest.Code = 0; rest.Data = new { data = MapQueryData, Users = _Users, level = _level, CustomerClass = _CustomerClass, ServiceClass = _ServiceClass, }; rest.Msg = "获取成功!"; return rest; } /// /// 删除市场客户资料数据 /// /// /// public async Task DelNewClientData(DelBaseDto dto) { Result AcrionResult = new Result(); BeginTran(); var DBresult = await SoftDeleteByIdAsync(dto.Id.ToString(), dto.DeleteUserId); try { if (DBresult) { AcrionResult.Code = 0; string sqlSet = $"isdel = 1, DeleteUserId = {dto.DeleteUserId} ,DeleteTime = '{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}'"; string sql = $" update Crm_ClientDataAndUser set {sqlSet} where NewClientDataId = {dto.Id} "; await ExecuteCommandAsync(sql); sql = $" update Crm_ClientDataAndBusiness set {sqlSet} where NewClientDataId = {dto.Id} "; await ExecuteCommandAsync(sql); CommitTran(); AcrionResult.Code = 0; } } catch (Exception ex) { RollbackTran(); AcrionResult.Msg = ex.Message; AcrionResult.Code = -1; } return AcrionResult; } } }