using AutoMapper; using Newtonsoft.Json; using NPOI.OpenXmlFormats.Wordprocessing; using NPOI.POIFS.Properties; using NPOI.SS.Formula.Functions; using OASystem.Domain; using OASystem.Domain.AesEncryption; using OASystem.Domain.Dtos; using OASystem.Domain.Dtos.Financial; using OASystem.Domain.Dtos.Groups; using OASystem.Domain.Dtos.UserDto; using OASystem.Domain.Entities.Customer; using OASystem.Domain.Entities.Groups; using OASystem.Domain.ViewModels.CRM; using OASystem.Domain.ViewModels.Financial; using OASystem.Domain.ViewModels.Groups; using OASystem.Infrastructure.Repositories.System; using Org.BouncyCastle.Asn1.Cms; using Org.BouncyCastle.Utilities.Collections; using Serilog; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; namespace OASystem.Infrastructure.Repositories.Groups { /// /// 接团信息 /// public class DelegationInfoRepository : BaseRepository { private readonly SetDataRepository _setDataRepository; private readonly UsersRepository _usersRepository; private readonly TaskAssignmentRepository _taskAssignmentRep; private readonly IMapper _mapper; //private readonly TeamRateRepository _teamRateRep; //public readonly Logs _logs; public DelegationInfoRepository(SqlSugarClient sqlSugar, SetDataRepository setDataRepository, UsersRepository usersRepository, TaskAssignmentRepository taskAssignmentRep, IMapper mapper) : base(sqlSugar) { _setDataRepository = setDataRepository; _usersRepository = usersRepository; _taskAssignmentRep = taskAssignmentRep; _mapper = mapper; //_teamRateRep = teamRateRep; } #region 团组信息 团组详情共享Api /// /// 查询团组简略详情列表 /// Page 根据Ctable And User 返回可操作的团 /// /// /// public async Task ListByCTableAndUserId(GroupListByCTableAndUserIdDto dto) { var view = new JsonView() { Code = StatusCodes.Status400BadRequest,Msg="操作失败!" }; if (dto.CTable < 1) { view.Msg = MsgTips.UserId; return view; } if (dto.CTable < 1) { view.Msg = "请输入正确的CTable Id !76 酒店预订
77 行程
79 车/导游地接
80 签证
81 邀请/公务活动
82 团组客户保险
85 机票预订
98 其他款项
751 酒店早餐"; return view; } if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) { //2025-02-17 更改团组列表排序功能 按照团出访时间排序(降序) string sql = string.Format(@"Select row_number() over(order by di.VisitStartDate Desc) as Row_Number, di.Id,di.TeamName,di.TourCode,di.ClientName,di.VisitCountry,di.VisitStartDate, di.VisitEndDate,di.VisitDays,di.VisitPNumber,di.CreateTime From Grp_GroupsTaskAssignment gta Inner Join Grp_DelegationInfo di On gta.DIId = di.Id Where gta.IsDel = 0 And di.IsDel = 0 And gta.IsEnable = 1 And gta.CTId = {0} And gta.UId = {1}", dto.CTable, dto.UserId); if (!string.IsNullOrEmpty(dto.TeamName)) { sql = string.Format($"{sql} And di.TeamName Like '%{dto.TeamName}%'"); } //去重 sql = $"{sql} GROUP BY di.Id,di.TeamName,di.TourCode,di.ClientName,di.VisitCountry,di.VisitStartDate,di.VisitEndDate,di.VisitDays,di.VisitPNumber,di.CreateTime"; RefAsync total = 0;//REF和OUT不支持异步,想要真的异步这是最优解 var data = await _sqlSugar.SqlQueryable(sql).ToPageListAsync(dto.PageIndex, dto.PageSize, total); //ToPageAsync foreach (var item in data) { item.VisitStartDate = item.VisitStartDate == "" ? "" : Convert.ToDateTime(item.VisitStartDate).ToString("yyyy-MM-dd"); item.VisitEndDate = item.VisitEndDate == "" ? "" : Convert.ToDateTime(item.VisitEndDate).ToString("yyyy-MM-dd"); item.VisitCountry = !string.IsNullOrEmpty(item.VisitCountry) && item.VisitCountry.Contains("|") ? item.VisitCountry.Replace("|", "、") : item.VisitCountry; } view.Code = StatusCodes.Status200OK; view.Msg = "操作成功!"; view.Data = data; view.Count = total; return view; } else { view.Msg = "请输入正确的PortType 1 Web 2 Android 3 IOS "; return view; } } /// /// 团组信息 团组预览详情共享Api /// /// /// public async Task PostShareGroupInfo(ShareGroupInfoDto dto) { var view = new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = "操作失败!" }; string sql = string.Format(@"Select Id,TeamName,TourCode,ClientName,VisitCountry,VisitStartDate,VisitEndDate,VisitDays,VisitPNumber From Grp_DelegationInfo Where Id = {0} And IsDel = 0", dto.Id); if (dto.PortType == 1) //Web { var _DelegationInfo = await _sqlSugar.SqlQueryable(sql).FirstAsync(); if (_DelegationInfo != null) { _DelegationInfo.VisitCountry = FormartTeamName(_DelegationInfo.VisitCountry); } else { view.Msg = "暂无该团组信息"; return view; } view.Data = _DelegationInfo; } else if (dto.PortType == 2 || dto.PortType == 3) //IOS Or Android { var _DelegationInfo = await _sqlSugar.SqlQueryable(sql).FirstAsync(); if (_DelegationInfo != null) { _DelegationInfo.VisitCountry = FormartTeamName(_DelegationInfo.VisitCountry); view.Data = _DelegationInfo; } else { view.Msg = "暂无该团组信息"; return view; } view.Data = _DelegationInfo; } else { view.Msg = "请输入正确的端口号。1 Web 2 Android 3 IOS"; return view; } view.Code = StatusCodes.Status200OK; view.Msg = "成功!"; return view; } /// /// 团组信息List 团组预览详情共享Api /// /// /// public async Task PostShareGroupInfos(int portType) { Result result = new Result() { Code = -2, Msg = "未知错误", Data = new List() { } }; string sql = string.Format(@"Select Id,TeamName,TourCode,ClientName,VisitCountry,VisitStartDate,VisitEndDate,VisitDays,VisitPNumber From Grp_DelegationInfo With(NoLock) Where IsDel = 0 Order By VisitStartDate Desc"); var _DelegationInfo = await _sqlSugar.SqlQueryable(sql).ToListAsync(); if (_DelegationInfo.Count > 0) { foreach (var item in _DelegationInfo) { item.VisitCountry = FormartTeamName(item.VisitCountry); } } else { result.Msg = "暂无该团组信息"; return result; } if (portType == 1) //Web { result.Data = _DelegationInfo; } else if (portType == 2 || portType == 3) //IOS Or Android { result.Data = _DelegationInfo; } else { result.Msg = "请输入正确的端口号。1 Web 2 Android 3 IOS"; return result; } result.Code = 0; result.Msg = "成功!"; return result; } #endregion /// /// 获取接团信息Info /// /// /// public async Task PostGroupInfo(GroupInfoDto dto) { Result result = new Result() { Code = -2, Msg = "未知错误" }; if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //Web Or Android { string sql = string.Format(@"Select Id,SalesQuoteNo,TourCode,JietuanOperator,TeamLevSId,TeamDid,TeamName,ClientName, ClientUnit,VisitCountry,VisitDate,VisitDays,VisitPNumber,TontractTime, PayDay,PaymentMoney,VisitPurpose,SpecialNeeds,OtherNeeds,CGRWSPBMMC,CGRWSPWH, ZZSCBMMC,ZZSCSPWH,Remark,TellPhone,Officialneeds From Grp_DelegationInfo Where Id = {0} And IsDel = 0", dto.Id); var _DelegationInfo = await _sqlSugar.SqlQueryable(sql).FirstAsync(); if (_DelegationInfo != null) { _DelegationInfo.TeamName = FormartTeamName(_DelegationInfo.TeamName); result.Code = 0; result.Msg = "成功!"; result.Data = _DelegationInfo; } else result.Msg = "暂无该团组信息"; } return result; } #region 团组 /// /// 统一团组国家分割字符 /// /// /// public string FormartTeamName(string? teamName) { string str = ""; if (!string.IsNullOrEmpty(teamName)) { str = teamName; List searchreplaces = new List() { "|", " ", "/", ",", "," }; foreach (var item in searchreplaces) { if (str.Contains(item)) { str = str.Replace(item, "、"); break; } } } return str.Trim(); } /// /// 团组国家分割字符 /// 返回 国家数组 /// /// /// public List GroupSplitCountry (string visitCountry) { List countrys = new List(); if (!string.IsNullOrEmpty(visitCountry)) { if (visitCountry.Contains("、")) countrys = visitCountry.Split("、").ToList(); else if (visitCountry.Contains("|")) countrys = visitCountry.Split("|").ToList(); else countrys.Add(visitCountry); } return countrys; } /// /// 获取接团信息 Page List /// /// /// public async Task GetGroupPageList(GroupCommissionDto dto) { Result result = new Result() { Code = -2, Msg = "未知错误" }; ListViewBase groupsInfoPageList = new ListViewBase() { ReceiveDt = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //web { int startIndex = (dto.PageIndex - 1) * dto.PageSize + 1; int endIndex = startIndex + dto.PageSize - 1; //int taskUserId = -1; string taskGroupIds = string.Empty; #region 处理用户团组操作权限 if (dto.UserId != -1) { } #endregion string sql = string.Format(@"Select * From(Select row_number() over (order by gdi.Id Desc) as RowNumber, gdi.Id,SalesQuoteNo,TourCode,ssd.Id TeamTypeId, ssd.Name TeamType,ssd1.Id TeamLevId, ssd1.Name TeamLev,TeamName,ClientName,ClientUnit,VisitDate,VisitDays,VisitPNumber, su.CnName JietuanOperator,IsSure From Grp_DelegationInfo gdi Inner Join Sys_SetData ssd On gdi.TeamDid = ssd.Id Inner Join Sys_SetData ssd1 On gdi.TeamLevSId = ssd1.Id Left Join Sys_Users su On gdi.CreateUserId = su.Id Where gdi.IsDel = 0 )temp Where RowNumber Between {0} and {1}", startIndex, endIndex); string sqlCount = string.Format(@"Select Count(1) as Count From Grp_DelegationInfo gdi Inner Join Sys_SetData ssd On gdi.TeamDid = ssd.Id Inner Join Sys_SetData ssd1 On gdi.TeamLevSId = ssd1.Id Left Join Sys_Users su On gdi.CreateUserId = su.Id Where gdi.IsDel = 0 "); List _DeleInfoList = await _sqlSugar.SqlQueryable(sql).ToListAsync(); DelegationPageCountView _DeleCount = await _sqlSugar.SqlQueryable(sqlCount).FirstAsync(); int count = _DeleCount.Count; groupsInfoPageList = new ListViewBase { CurrPageIndex = dto.PageIndex, CurrPageSize = dto.PageSize, DataCount = count, DataList = _DeleInfoList }; result.Code = 0; result.Msg = "成功!"; result.Data = groupsInfoPageList; } return result; } /// /// 获取接团信息List /// /// /// public async Task GetGroupList(GroupListDto dto) { Result result = new Result() { Code = -2, Msg = "未知错误" }; if (dto.PortType == 1) { string sql = string.Format(@"Select gdi.Id,SalesQuoteNo,TourCode,ssd.Id TeamTypeId, ssd.Name TeamType,ssd1.Id TeamLevId,ssd1.Name TeamLev,TeamName,ClientName,ClientUnit,VisitDate,VisitDays,VisitPNumber,su.CnName JietuanOperator,IsSure ,gs.Id as GrpScheduleId From Grp_DelegationInfo gdi Inner Join Sys_SetData ssd On gdi.TeamDid = ssd.Id Inner Join Sys_SetData ssd1 On gdi.TeamLevSId = ssd1.Id Left Join Sys_Users su On gdi.CreateUserId = su.Id left Join Grp_Schedule gs On gdi.Id = gs.DiId Where gdi.IsDel = 0 Order By gdi.CreateTime Desc"); var _DelegationList = await _sqlSugar.SqlQueryable(sql).ToListAsync(); if (_DelegationList.Count > 0) { result.Code = 0; result.Msg = "成功!"; result.Data = _DelegationList; } else { result.Msg = "暂无该团组信息"; } } else if (dto.PortType == 2 || dto.PortType == 3) //web { string sql = string.Format(@"Select gdi.Id,SalesQuoteNo,TourCode,ssd.Id TeamTypeId, ssd.Name TeamType,ssd1.Id TeamLevId,ssd1.Name TeamLev,TeamName,ClientName,ClientUnit,VisitDate,VisitDays,VisitPNumber,su.CnName JietuanOperator,IsSure From Grp_DelegationInfo gdi Inner Join Sys_SetData ssd On gdi.TeamDid = ssd.Id Inner Join Sys_SetData ssd1 On gdi.TeamLevSId = ssd1.Id Left Join Sys_Users su On gdi.CreateUserId = su.Id Where gdi.IsDel = 0 Order By gdi.CreateTime Desc"); var _DelegationList = await _sqlSugar.SqlQueryable(sql).ToListAsync(); if (_DelegationList.Count > 0) { result.Code = 0; result.Msg = "成功!"; result.Data = _DelegationList; } else { result.Msg = "暂无该团组信息"; } } return result; } /// /// 获取接团信息Info /// /// /// public async Task GetGroupInfo(GroupInfoDto dto) { Result result = new Result() { Code = -2, Msg = "未知错误" }; if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //Web Or Android { string sql = string.Format(@"Select Id,CityId,SalesQuoteNo,TourCode,JietuanOperator,TeamLevSId,TeamDid,TeamName,ClientName, ClientUnit,VisitCountry,VisitDate,VisitDays,VisitPNumber,TontractTime,IsBid, PayDay,PaymentMoney,VisitPurpose,SpecialNeeds,OtherNeeds,CGRWSPBMMC,CGRWSPWH, ZZSCBMMC,ZZSCSPWH,Remark,TellPhone,WeChatNo,OpRoyaltyLv,OpRoyaltyRemark,Officialneeds From Grp_DelegationInfo Where Id = {0} And IsDel = 0", dto.Id); var _DelegationInfo = await _sqlSugar.SqlQueryable(sql).FirstAsync(); if (_DelegationInfo != null) { _DelegationInfo.TeamName = FormartTeamName(_DelegationInfo.TeamName); _DelegationInfo.VisitCountry = FormartTeamName(_DelegationInfo.VisitCountry); //验证城市值 不存在则设置默认值 var cityInfo = await CityInfoById(_DelegationInfo.CityId); if (cityInfo != null) { _DelegationInfo.CityName = cityInfo.Name; } else { _DelegationInfo.CityId = 3505; _DelegationInfo.CityName = "四川-成都"; } //if (_DelegationInfo.TontractTime) //{ //} result.Code = 0; result.Msg = "成功!"; result.Data = _DelegationInfo; if (dto.PortType == 2) { var GroupProcessOperationDtoParam = new GroupProcessOperationDto(); GroupProcessOperationDtoParam = _mapper.Map(_DelegationInfo); List DeleClientArr = await _sqlSugar.Queryable().Where(it => it.IsDel == 0).ToListAsync(); //客户信息 List _DeleClients = await _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.DiId == dto.Id).ToListAsync(); // 接团客户名单 List _CustomerCerts = await _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.SdId == 773).ToListAsync(); // 身份证类型证件信息 List CompanyArr = await _sqlSugar.Queryable().Where(it => it.IsDel == 0).ToListAsync(); var TourClientListInfoArr = new List(); var timeParam = new DateTime(); foreach (var item in _DeleClients) { var param = new TourClientListProcessInfo(); var clientInfo = DeleClientArr.FirstOrDefault(x => x.Id == item.ClientId); if (clientInfo == null) clientInfo = new Crm_DeleClient(); var clientIDInfo = _CustomerCerts.FirstOrDefault(x=>x.DcId == item.ClientId); //身份证信息 if (clientIDInfo == null) clientIDInfo = new Crm_CustomerCert(); var Company = CompanyArr.FirstOrDefault(x => x.Id == clientInfo.CrmCompanyId); if(Company == null) Company = new Crm_CustomerCompany(); param.IDCardNo = clientIDInfo.CertNo; param.Remark = item.Remark; param.BirthDay = clientInfo.BirthDay == null ? "" : DateTime.TryParse(Convert.ToDateTime( clientInfo.BirthDay).ToString("yyyy-MM-dd"), out timeParam) ? timeParam.ToString("yyyy-MM-dd") : ""; param.FirstName = clientInfo.FirstName; param.LastName = clientInfo.LastName; param.CompanyFullName = Company.CompanyFullName; param.Job = clientInfo.Job; param.Sex = clientInfo.Sex; param.Phone = clientInfo.Phone; param.Pinyin = clientInfo.Pinyin; param.HotelSpecialNeeds = item.HotelSpecialNeeds; param.MealSpecialNeeds = item.MealSpecialNeeds; param.ShippingSpaceSpecialNeeds = item.ShippingSpaceSpecialNeeds; param.ShippingSpaceTypeId = item.ShippingSpaceTypeId; param.Id = clientInfo.Id; EncryptionProcessor.DecryptProperties(param); TourClientListInfoArr.Add(param); } GroupProcessOperationDtoParam.PortType = dto.PortType; GroupProcessOperationDtoParam.TourClientListInfos = TourClientListInfoArr; GroupProcessOperationDtoParam.VisitDate = DateTime.TryParse(GroupProcessOperationDtoParam.VisitDate, out timeParam) ? timeParam.ToString("yyyy-MM-dd") : ""; GroupProcessOperationDtoParam.VisitDate = DateTime.TryParse(GroupProcessOperationDtoParam.VisitDate, out timeParam) ? timeParam.ToString("yyyy-MM-dd") : ""; GroupProcessOperationDtoParam.TontractTime = DateTime.TryParse(GroupProcessOperationDtoParam.TontractTime, out timeParam) ? timeParam.ToString("yyyy-MM-dd") : ""; result.Data = GroupProcessOperationDtoParam; } else if (dto.PortType == 3) { var GroupProcessOperationDtoParam = new GroupProcessOperationDto(); GroupProcessOperationDtoParam = _mapper.Map(_DelegationInfo); List DeleClientArr = await _sqlSugar.Queryable().Where(it => it.IsDel == 0).ToListAsync(); //客户信息 List _DeleClients = await _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.DiId == dto.Id).ToListAsync(); // 接团客户名单 List _CustomerCerts = await _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.SdId == 773).ToListAsync(); // 身份证类型证件信息 List CompanyArr = await _sqlSugar.Queryable().Where(it => it.IsDel == 0).ToListAsync(); var TourClientListInfoArr = new List(); var timeParam = new DateTime(); foreach (var item in _DeleClients) { var param = new TourClientListProcessInfo(); var clientInfo = DeleClientArr.FirstOrDefault(x => x.Id == item.ClientId); if (clientInfo == null) clientInfo = new Crm_DeleClient(); var clientIDInfo = _CustomerCerts.FirstOrDefault(x => x.DcId == item.ClientId); //身份证信息 if (clientIDInfo == null) clientIDInfo = new Crm_CustomerCert(); var Company = CompanyArr.FirstOrDefault(x => x.Id == clientInfo.CrmCompanyId); if (Company == null) Company = new Crm_CustomerCompany(); param.IDCardNo = clientIDInfo.CertNo; param.Remark = item.Remark; param.BirthDay = clientInfo.BirthDay == null ? "" : DateTime.TryParse(Convert.ToDateTime(clientInfo.BirthDay).ToString("yyyy-MM-dd"), out timeParam) ? timeParam.ToString("yyyy-MM-dd") : ""; param.FirstName = clientInfo.FirstName; param.LastName = clientInfo.LastName; param.CompanyFullName = Company.CompanyFullName; param.Job = clientInfo.Job; param.Sex = clientInfo.Sex; param.Phone = clientInfo.Phone; param.Pinyin = clientInfo.Pinyin; param.HotelSpecialNeeds = item.HotelSpecialNeeds; param.MealSpecialNeeds = item.MealSpecialNeeds; param.ShippingSpaceSpecialNeeds = item.ShippingSpaceSpecialNeeds; param.ShippingSpaceTypeId = item.ShippingSpaceTypeId; param.Id = item.Id; EncryptionProcessor.DecryptProperties(param); TourClientListInfoArr.Add(param); } GroupProcessOperationDtoParam.PortType = dto.PortType; GroupProcessOperationDtoParam.TourClientListInfos = TourClientListInfoArr; GroupProcessOperationDtoParam.VisitDate = DateTime.TryParse(GroupProcessOperationDtoParam.VisitDate, out timeParam) ? timeParam.ToString("yyyy-MM-dd") : ""; GroupProcessOperationDtoParam.TontractTime = DateTime.TryParse(GroupProcessOperationDtoParam.TontractTime, out timeParam) ? timeParam.ToString("yyyy-MM-dd") : ""; result.Data = GroupProcessOperationDtoParam; } } else result.Msg = "暂无该团组信息"; } return result; } /// /// 获取接团信息 编辑 /// 城市基础 数据源 /// /// /// public async Task> ProvinceCityBasicSource() { var data = await _sqlSugar.Queryable().AS("Sys_Cities") .Where(x => x.IsDel == 0 && x.CountriesId == 44) .ToTreeAsync(it => it.Child, it => it.ParentId, 0); if (data.Any()) { //移动指定数据在最前面 data = MoveElementToFront(data, "云南"); data = MoveElementToFront(data, "贵州"); data = MoveElementToFront(data, "重庆"); data = MoveElementToFront(data, "四川"); } return data; } /// /// 获取接团信息 编辑 /// 省份基础 数据源 /// /// /// public async Task ProvinceBasicSource() { var list = Array.Empty(); var data = await ProvinceCityBasicSource(); if (data.Any()) { //移动指定数据在最前面 data = MoveElementToFront(data, "北京"); data = MoveElementToFront(data, "云南"); data = MoveElementToFront(data, "贵州"); data = MoveElementToFront(data, "重庆"); data = MoveElementToFront(data, "四川"); list = data.Select(x => new GroupCityBasicSourceView() { Id = x.Id, Name = x.Name_CN }).ToArray(); } return list; } /// /// 获取接团信息 编辑 /// 城市基础 数据源 /// /// /// public async Task CityBasicSource() { var list = new List(); var data = await ProvinceCityBasicSource(); if (data.Any()) { //移动指定数据在最前面 data = MoveElementToFront(data, "云南"); data = MoveElementToFront(data, "贵州"); data = MoveElementToFront(data, "重庆"); data = MoveElementToFront(data, "四川"); foreach (var province in data) { foreach (var city in province.Child) { list.Add(new GroupCityBasicSourceView() { Id = city.Id, Name = $"{province.Name_CN}-{city.Name_CN}" }); } } //四川成都放在最前面 var cdInfo = list.FirstOrDefault(x => x.Name.Equals("四川-成都")); if (cdInfo != null) { list.Remove(cdInfo); list.Insert(0, cdInfo); } } return list.ToArray(); } /// /// 获取接团信息 编辑 /// 基础 数据源 /// /// /// public async Task CityInfoById(int id) { var list = await CityBasicSource(); var info = list.FirstOrDefault(x => x.Id == id); return info; } private List MoveElementToFront(List list, string elementName) { var element = list.FirstOrDefault(x => x.Name_CN == elementName); if (element != null) { list.Remove(element); list.Insert(0, element); } return list; } /// /// 获取接团信息 编辑 /// 基础 数据源 /// /// /// public async Task GroupEditBasicSource(GroupListDto dto) { Result result = new Result() { Code = -2, Msg = "未知错误" }; if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //web { dynamic? teamTypeData1 = null; string teamTypeSql = string.Format(@"Select Id,Name From Sys_SetData Where STid = {0} And IsDel = {1}", 10, 0); var teamTypeData = await _sqlSugar.SqlQueryable(teamTypeSql).ToListAsync(); ; //团组分类 10 if (teamTypeData.Any()) { teamTypeData1 = teamTypeData; if (teamTypeData.Any(x => x.Name.Equals("前期沟通"))) { var info = teamTypeData.Find(x => x.Name.Equals("前期沟通")); if (info != null) { teamTypeData.Remove(info); teamTypeData.Insert(2, info); } } } dynamic? teamLevData1 = null; string teamLevSql = string.Format(@"Select Id,Name From Sys_SetData Where STid = {0} And IsDel = {1}", 56, 0); var teamLevData = await _sqlSugar.SqlQueryable(teamLevSql).ToListAsync(); ; //团组等级 56 if (teamLevData.Any()) { teamLevData1 = teamLevData; } dynamic? userData1 = null; string userSql = string.Format(@"Select Id,CnName From Sys_Users Where IsDel = {0}", 0); var userData = await _sqlSugar.SqlQueryable(userSql).ToListAsync(); if (userData.Any()) { userData1 = userData; } //客户单位数据源 来源市场客户资料 dynamic? clientData1 = null; string clientSql = $@"Select Client,Contact,Telephone,WeChat From Crm_NewClientData Where IsDel = 0"; var clientData = await _sqlSugar.SqlQueryable(clientSql).ToListAsync(); if (clientData.Any()) { clientData1 = clientData.Select(it => new { Client = AesEncryptionHelper.Decrypt(it.Client), Contact = AesEncryptionHelper.Decrypt(it.Contact), Telephone = AesEncryptionHelper.Decrypt(it.Telephone), Wechat = AesEncryptionHelper.Decrypt(it.Wechat) }).ToList(); } var userDepDatas = new List(); userDepDatas.Insert(0, new TextView() { Text = "全部", Value = "全部" }); userDepDatas.Insert(1, new TextView() { Text = "国交部", Value = "国交部" }); userDepDatas.Insert(2, new TextView() { Text = "市场部", Value = "市场部" }); userDepDatas.Insert(3, new TextView() { Text = "策划部", Value = "策划部" }); var rankDatas = await _sqlSugar.Queryable().Where(x => x.IsDel == 0 && x.STid == 56).Select(x => new TextView { Value = x.Id.ToString(), Text = x.Name }).ToListAsync(); rankDatas.Insert(0, new TextView { Value = "0", Text = "全部" }); result.Code = 0; result.Msg = "成功!"; result.Data = new { teamTypeData = teamTypeData1, teamLevData = teamLevData1, userData = userData1, clientData = clientData1, depData = userDepDatas, rankData = rankDatas, cityData = await CityBasicSource() }; } return result; } /// /// 团组信息操作 /// /// /// public async TaskGroupOperation(GroupOperationDto dto) { Result result = new Result() { Code = -2, Msg = "未知错误" }; if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //web { #region 添加出访起止时间 var startTime = new DateTime(); var endTime = new DateTime(); if (DateTime.TryParse(dto.VisitDate, out startTime)) { endTime = startTime.AddDays(dto.VisitDays - 1);//含当天 } #endregion if (dto.Status == 1) //添加 { string selectSql = string.Format(@"Select * From Grp_DelegationInfo Where IsDel = 0 And TeamName = '{0}' And ClientName = '{1}' And ClientUnit ='{2}' And VisitDate ='{3}'",dto.TeamName, dto.ClientName, dto.ClientUnit, dto.VisitDate); var selectGroupInfo = _sqlSugar.SqlQueryable(selectSql).First(); if (selectGroupInfo != null) { result.Msg = "数据已存在,请勿重复添加!"; return result; } //string teamCodeSql = string.Format("Select SalesQuoteNo From Grp_DelegationInfo"); //var teamCodeItem = await _sqlSugar.SqlQueryable(teamCodeSql).ToListAsync(); //string SalesQuoteNo = ""; //while (true) //{ // SalesQuoteNo = Tools.CommonFun.GetRandomStr(6); // if (!teamCodeItem.Equals(SalesQuoteNo)) // { // break; // } //} string countrys = string.Empty; string countryReq = dto.VisitCountry; if (!string.IsNullOrEmpty(countryReq)) { if (countryReq.Contains(",")) countrys = countryReq.Replace(',','|'); else if (countryReq.Contains(",")) countrys = countryReq.Replace(',', '|'); else if (countryReq.Contains(" ")) countrys = countryReq.Replace(' ', '|'); else if (countryReq.Contains("、")) countrys = countryReq.Replace('、', '|'); else if (countryReq.Contains(".")) countrys = countryReq.Replace('.', '|'); else countrys = countryReq; } //建团时 默认出团 设置 团组code string teamCode=""; string teamCodeSql = string.Format("Select TourCode From Grp_DelegationInfo"); var teamCodeItem = await _sqlSugar.SqlQueryable(teamCodeSql).ToListAsync(); while (true) { teamCode = Tools.CommonFun.GetRandomAllStr(6); if (!teamCodeItem.Equals(teamCode)) { break; } } Grp_DelegationInfo delegationInfo = new Grp_DelegationInfo() { CityId = dto.CityId, SalesQuoteNo = dto.SalesQuoteNo, TeamLevSId = dto.TeamLevSId, ClientName = dto.ClientName, ClientUnit = dto.ClientUnit, TeamName = dto.TeamName, TeamDid = dto.TeamDid, VisitDate = Convert.ToDateTime(dto.VisitDate), VisitCountry = countrys, VisitPurpose = dto.VisitPurpose, VisitDays = dto.VisitDays, VisitPNumber = dto.VisitPNumber, SpecialNeeds = dto.SpecialNeeds, OtherNeeds = dto.OtherNeeds, Remark = dto.Remark, JietuanOperator = dto.JietuanOperator, TellPhone = dto.TellPhone, WeChatNo = dto.WeChatNo, CGRWSPBMMC = dto.CGRWSPBMMC, CGRWSPWH = dto.CGRWSPWH, ZZSCBMMC = dto.ZZSCBMMC, ZZSCSPWH = dto.ZZSCSPWH, TontractTime = string.IsNullOrEmpty(dto.TontractTime) ? null : Convert.ToDateTime(dto.TontractTime), IsBid = dto.IsBid, PaymentMoney = dto.PaymentMoney, PayDay = dto.PayDay, TourCode = teamCode, GroupsOperator = dto.UserId, GroupsTime = DateTime.Now, SalesDate = DateTime.Now, IsState = 0, //默认团组未完成 0 JietuanTime = DateTime.Now, IsDel = 0, BudgetCost = 0.00M, HotelComplain = 0, OPComplain = 0, OAComplain = 0, AirComplain = 0, VisaComplain = 0, CreateUserId = dto.UserId, CreateTime = DateTime.Now, DeleteUserId = null, DeleteTime = new DateTime(1990, 1, 1).ToString("yyyy-MM-dd HH:mm:ss"), OpRoyaltyLv = dto.OpRoyaltyLv, OpRoyaltyRemark=dto.opRoyaltyRemark, Officialneeds = dto.Officialneeds, VisitStartDate = startTime, VisitEndDate = endTime, }; var addId = _sqlSugar.Insertable(delegationInfo).ExecuteReturnIdentity(); if (addId > 0) { result.Code = 0; result.Msg = "添加成功!"; result.Data = addId; } else { result.Msg = "添加失败!"; } } else if (dto.Status == 2) //修改 { var updateStatus = await UpdateAsync(a => a.Id == dto.Id, a => new Grp_DelegationInfo { CityId = dto.CityId, SalesQuoteNo = dto.SalesQuoteNo, TeamLevSId = dto.TeamLevSId, ClientName = dto.ClientName, ClientUnit = dto.ClientUnit, TeamName = dto.TeamName, TeamDid = dto.TeamDid, VisitDate = Convert.ToDateTime(dto.VisitDate), VisitCountry = dto.VisitCountry, VisitPurpose = dto.VisitPurpose, VisitDays = dto.VisitDays, VisitPNumber = dto.VisitPNumber, SpecialNeeds = dto.SpecialNeeds, OtherNeeds = dto.OtherNeeds, Remark = dto.Remark, JietuanOperator = dto.JietuanOperator, TellPhone = dto.TellPhone, WeChatNo = dto.WeChatNo, CGRWSPBMMC = dto.CGRWSPBMMC, CGRWSPWH = dto.CGRWSPWH, ZZSCBMMC = dto.ZZSCBMMC, ZZSCSPWH = dto.ZZSCSPWH, TontractTime = string.IsNullOrEmpty(dto.TontractTime) ? null : Convert.ToDateTime(dto.TontractTime), IsBid = dto.IsBid, PaymentMoney = dto.PaymentMoney, PayDay = dto.PayDay, OpRoyaltyLv = dto.OpRoyaltyLv, OpRoyaltyRemark = dto.opRoyaltyRemark, Officialneeds = dto.Officialneeds, VisitStartDate = startTime, VisitEndDate = endTime, }); if (updateStatus) { result.Code = 0; result.Msg = "修改成功!"; } else { result.Msg = "修改失败!"; } } else if (dto.Status == 3) //删除 { var deleteStatus = await UpdateAsync(a => a.Id == dto.Id, a => new Grp_DelegationInfo { DeleteUserId = dto.UserId, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), IsDel = 1 }); if (deleteStatus) { result.Code = 0; result.Msg = "删除成功!"; } else { result.Msg = "删除失败!"; } } } return result; } /// /// 团组信息操作 - 删除 /// /// /// public async Task GroupDel(GroupDelDto dto) { Result result = new Result() { Code = -2, Msg = "未知错误" }; if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //web { var deleteStatus = await UpdateAsync(a => a.Id == dto.Id, a => new Grp_DelegationInfo { DeleteUserId = dto.UserId, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), IsDel = 1 }); if (deleteStatus) { result.Code = 0; result.Msg = "删除成功!"; } else { result.Msg = "删除失败!"; } } return result; } /// /// 获取销售报价号 /// /// public async Task GetGroupSalesQuoteNo() { Result result = new Result() { Code = -2, Msg = "未知错误" }; string teamCodeSql = string.Format("Select SalesQuoteNo From Grp_DelegationInfo"); var teamCodeItem = await _sqlSugar.SqlQueryable(teamCodeSql).ToListAsync(); string teamCode = ""; while (true) { teamCode = Tools.CommonFun.GetRandomAllStr(6); if (!teamCodeItem.Equals(teamCode)) { break; } } result.Code = 0; result.Msg = "成功!"; result.Data = teamCode; return result; } /// /// 团组删除 /// /// public async Task GroupDeleteById() { Result result = new Result() { Code = -2, Msg = "未知错误" }; string teamCodeSql = string.Format("Select TourCode From Grp_DelegationInfo"); var teamCodeItem = await _sqlSugar.SqlQueryable(teamCodeSql).ToListAsync(); string teamCode = ""; while (true) { teamCode = Tools.CommonFun.GetRandomAllStr(6); if (!teamCodeItem.Equals(teamCode)) { break; } } result.Code = 0; result.Msg = "成功!"; result.Data = teamCode; return result; } /// /// 团组确认出团 /// /// public async Task ConfirmationGroup(ConfirmationGroupDto dto) { Result result = new Result() { Code = -2, Msg = "未知错误" }; string teamCode = ""; if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //web { string teamCodeSql = string.Format("Select TourCode From Grp_DelegationInfo"); var teamCodeItem = await _sqlSugar.SqlQueryable(teamCodeSql).ToListAsync(); while (true) { teamCode = Tools.CommonFun.GetRandomAllStr(6); if (!teamCodeItem.Equals(teamCode)) { break; } } var deleteStatus = await UpdateAsync(a => a.Id == dto.GroupId, a => new Grp_DelegationInfo { TourCode = teamCode, GroupsOperator = dto.GroupsOperator, GroupsTime = DateTime.Now }); if (deleteStatus) { result.Code = 0; result.Msg = "确认出团设置成功!"; } else { result.Msg = "确认出团设置失败!"; } } result.Code = 0; result.Msg = "成功!"; result.Data = teamCode; return result; } /// /// 获取接团名称List /// /// /// public async Task GetGroupNameList(GroupNameDto dto) { var view = new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = "操作失败!" }; if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //web { //2025-02-17 更改团组列表排序功能 按照团出访时间排序(降序) string sql = string.Format(@"Select Id,TeamName GroupName From Grp_DelegationInfo Where TeamName != '' And IsDel = 0 Order By VisitStartDate Desc"); var _groupNameList = await _sqlSugar.SqlQueryable(sql).ToListAsync(); if (_groupNameList.Any()) { for (int i = 0; i < _groupNameList.Count; i++) { var info = _groupNameList[i]; _groupNameList[i].GroupName = FormartTeamName(info.GroupName); } //_groupNameList.Insert(0, new GroupNameView() { Id = 0, GroupName = "未选择" }); view.Code = StatusCodes.Status200OK; view.Msg = "成功!"; view.Data = _groupNameList; } else { view.Msg = "暂无团组信息"; } } return view; } //PostGroupNameScreen /// /// 获取接团名称 Page List /// /// /// public async Task GetGroupNameList(int portType,int pageIndex,int pageSize, string groupName,int userId) { var _res = new JsonView() { Code = 400 , Msg = MsgTips.Fail }; string sql = ""; string sqlWhere = ""; string mobileSqlWhere = ""; if (!string.IsNullOrEmpty(groupName)) { sqlWhere += string.Format($@"And TeamName Like '%{groupName}%'"); mobileSqlWhere += string.Format($@"GroupName Like '%{groupName}%'"); } List userIds = new List() { -1, 21 }; if (!userIds.Contains(userId)) { sqlWhere += string.Format($@"And JietuanOperator = {userId}"); } sql = string.Format($@"Select ROW_NUMBER()Over(Order By Id Desc) as RowNumber,Id,TeamName GroupName From Grp_DelegationInfo Where IsDel = 0 {sqlWhere}"); if (portType == 1) //web { } else if (portType == 2 || portType == 3) { //国交部 7 (主管 22,经理 32)团操操作权限 市场部 6 接团人 var userInfo = await _sqlSugar.Queryable().Where(it => it.Id == userId && it.IsDel == 0).FirstAsync(); if (userInfo != null) { if (userInfo.DepId == 7) { if (userInfo.JobPostId != 22 || userInfo.JobPostId != 32) { if (!string.IsNullOrEmpty(mobileSqlWhere)) mobileSqlWhere = $" Where {mobileSqlWhere}"; sql = string.Format($@"Select ROW_NUMBER()Over(Order By Id Desc) as RowNumber, Id, GroupName From ( Select distinct di.Id, di.TeamName GroupName From Grp_GroupsTaskAssignment gta With(NoLock) Inner Join Grp_DelegationInfo di With(NoLock) On gta.DIId = di.Id Where gta.IsDel = 0 And di.IsDel = 0 And gta.UId = {userId} ) Temp {mobileSqlWhere}"); } } } } RefAsync total = 0; var groupNamePageData = await _sqlSugar.SqlQueryable(sql).ToPageListAsync(pageIndex, pageSize, total); _res.Code = 200; _res.Data = groupNamePageData; _res.Msg = MsgTips.Succeed; _res.Count = total; return _res; } /// /// 获取接团名称List And 签证国别 /// /// /// public async Task GetGroupNameAndVisaNationality(GroupNameDto dto) { Result result = new Result() { Code = -2, Msg = "未知错误" }; if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) //web { string sql = string.Format(@"Select Id,TeamName GroupName From Grp_DelegationInfo Where TeamName != '' And IsDel = 0 Order By Id Desc"); var _groupNameList = await _sqlSugar.SqlQueryable(sql).ToListAsync(); string visaSql = string.Format(@"Select Id,Name From Sys_SetData Where STid = 41 And IsDel = 0"); var _setDataList = await _sqlSugar.SqlQueryable(visaSql).ToListAsync(); var data = new { groupNameData = _groupNameList, visaNationalityData = _setDataList }; result.Data = data; result.Code = 0; } return result; } #endregion #region 团组&签证 /// /// 根据团组Id查询客户 /// /// /// public async Task GetCrmByGroupId(ClientByGroupIdDto dto) { Result result = new Result() { Code = -2 }; if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) { string sql = string.Format(@"Select gdjc.GrpDCId grpId,cdc.Id,cdc.LastName+cdc.FirstName clientName,cdc.Tel,ccc.CertNo CerdNo From Grp_DelegationJoinCustomer gdjc Inner join Crm_DeleClient cdc On gdjc.CrmDCId = cdc.Id Left Join Crm_CustomerCert ccc On ccc.SdId = 773 And cdc.Id = ccc.DcId Where gdjc.GrpDCId = {0}", dto.GroupId); var clientList = await _sqlSugar.SqlQueryable(sql).ToListAsync(); if (clientList.Count > 0) { result.Code = 0; result.Msg = "成功!"; result.Data = clientList; } else { result.Msg = "暂无数据!"; } } return result; } #endregion #region 团组&出入境费用 /// /// 获取单组名称并验证出入境费用明细是否填写 /// /// /// public async Task EnterExitCostGroupNameAsync() { var groupSql = string.Format(@$"SELECT Id, TeamName GroupName, CityId ProvinceId, CASE WHEN ( SELECT COUNT(*) FROM Grp_EnterExitCost WHERE IsDel = 0 AND DiId = di.Id ) > 0 THEN 'false' ELSE 'true' END AS [IsNull] FROM Grp_DelegationInfo di WHERE di.Isdel = 0 ORDER BY VisitStartDate Desc"); var groupDatas = await _sqlSugar.SqlQueryable(groupSql).ToArrayAsync(); var provCityDatas = await ProvinceCityBasicSource(); if (provCityDatas.Any() && groupDatas.Any()) { foreach (var item in groupDatas) { var provinceId = item.ProvinceId; var isDefualtVal = true; if (provinceId > 0) { var parentId = FindParentIdByChildId(provCityDatas, provinceId); if (parentId != null) { isDefualtVal = false; item.ProvinceId = (int)parentId; } } if (isDefualtVal) { item.ProvinceId = 122; //默认四川 } } } return groupDatas; } /// /// 获取单组名称并验证出入境费用明细是否填写 /// /// /// public async Task EnterExitCostGroupNameInfoAsync(int groupId) { var groupSql = string.Format(@$"SELECT Id, TeamName GroupName, CityId ProvinceId, CASE WHEN ( SELECT COUNT(*) FROM Grp_EnterExitCost WHERE IsDel = 0 AND DiId = di.Id ) > 0 THEN 'false' ELSE 'true' END AS [IsNull] FROM Grp_DelegationInfo di WHERE di.Isdel = 0 And Id = {0} ", groupId); var groupData = await _sqlSugar.SqlQueryable(groupSql).FirstAsync(); var provCityDatas = await ProvinceCityBasicSource(); if (provCityDatas.Any() && groupData != null) { var provinceId = groupData.ProvinceId; var isDefualtVal = true; if (provinceId > 0) { var parentId = FindParentIdByChildId(provCityDatas, provinceId); if (parentId != null) { isDefualtVal = false; groupData.ProvinceId = (int)parentId; } } if (isDefualtVal) { groupData.ProvinceId = 122; //默认四川 } } return groupData; } /// /// 递归地遍历树状结构,查找子项的父类 Id。 /// /// /// /// public int? FindParentIdByChildId(List tree, int childId) { foreach (var node in tree) { if (node.Child != null && node.Child.Any()) { if (node.Child.Any(c => c.Id == childId)) { return node.Id; } var parentId = FindParentIdByChildId(node.Child, childId); if (parentId.HasValue) { return parentId; } } } return null; } #endregion } }