using AutoMapper; using OASystem.Domain; using OASystem.Domain.Dtos.Groups; using OASystem.Domain.Entities.Groups; using OASystem.Domain.Entities.Resource; using OASystem.Domain.ViewModels.Groups; using OASystem.Infrastructure.Repositories.Resource; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OASystem.Infrastructure.Repositories.Groups { /// /// 团组签证费用详情 info /// 仓储 /// public class VisaFeeInfoRepository:BaseRepository { private readonly IMapper _mapper; private Result _result; private readonly CountryFeeRepository _countryFeeRep; private readonly DelegationInfoRepository _groupRep; public VisaFeeInfoRepository(SqlSugarClient sqlSugar, IMapper mapper, CountryFeeRepository countryFeeRep, DelegationInfoRepository groupRep) : base(sqlSugar) { _mapper = mapper; _result = new Result() { Code = -2,Msg = "操作失败!"}; _countryFeeRep = countryFeeRep; _groupRep = groupRep; } /// /// Init /// /// /// /// public async Task _Init() { var data = await _sqlSugar.Queryable().Where(it => it.IsDel == 0).ToListAsync(); _result.Code = 0; _result.Data = data; _result.Msg = "操作成功!"; return _result; } /// /// List /// /// /// /// public async Task _List(int portType, int diId) { if (diId < 0) return _result = new Result() { Code = -1, Msg = "请传入有效的DiId参数" }; if (portType < 1 || portType > 3) return _result = new Result() { Code = -1, Msg = "请传入有效的portType参数" }; string sql = string.Format($@"Select vfi.Id,vfi.IsChecked,cfc.VisaCountry AS Country,cfc.VisaPrice As VisaFee, vfi.OBType,vfi.AgencyFee,vfi.OtherFee,vfi.Remark From Grp_VisaFeeInfo vfi Left Join Res_CountryFeeCost cfc On vfi.CountryVisaFeeId = cfc.Id Where vfi.Isdel = 0 And vfi.Diid = {diId}"); var data = await _sqlSugar.SqlQueryable(sql).ToListAsync(); //默认十行 雷怡 2024-26-08 11:26:40 if (data.Count == 0) { var groupInfo = await _groupRep.PostShareGroupInfo(new ShareGroupInfoDto() { PortType = 1, Id = diId }); List countrys = new List(); if (groupInfo.Code == 0) { countrys = _groupRep.GroupSplitCountry((groupInfo.Data as Web_ShareGroupInfoView)?.VisitCountry ?? ""); } if (countrys.Count > 0) { //int dataRow = 0; foreach (var country in countrys) { var countryInfo = _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.VisaCountry.Equals(country)).First(); if (countryInfo != null) { data.Add(new VisaFeeInfosView() { IsChecked = 0, Country = country, VisaFee = countryInfo.VisaPrice, OBType = 1, AgencyFee = countryInfo.GrandBusinessAgencyFee }); data.Add(new VisaFeeInfosView() { IsChecked = 0, Country = country, VisaFee = countryInfo.VisaPrice, OBType = 2, AgencyFee = countryInfo.PettyBusinessAgencyFee }); } else { data.Add(new VisaFeeInfosView() { IsChecked = 0, Country = country, OBType = 1, }); data.Add(new VisaFeeInfosView() { IsChecked = 0, Country = country, OBType = 2, }); } } if (data.Count < 10) { int defaultRow = 10 - data.Count; for (int i = 0; i < defaultRow; i++) { data.Add(new VisaFeeInfosView() { Id = 0, OBType = 1 }); } } } else { for (int i = 0; i < 10; i++) { data.Add(new VisaFeeInfosView() { Id = 0, OBType = 1 }); } } } else if (data.Count <= 10) { int defaultRow = 10 - data.Count; for (int i = 0; i < defaultRow; i++) { data.Add(new VisaFeeInfosView() { Id = 0, OBType = 1 }); } } _result.Code = 0; _result.Data = data; _result.Msg = "操作成功!"; return _result; } /// /// List /// /// /// /// public async Task _Update(VisaFeeAddAndUpdateDto dto) { if (dto.VisaFeeInfos.Count < 1) return _result = new Result() { Code = -1, Msg = "请传入有效的签证费用集合参数" }; if (dto.PortType < 1 || dto.PortType > 3) return _result = new Result() { Code = -1, Msg = "请传入有效的portType参数" }; List visaInfos = new List(); BeginTran(); bool visaFeeUpdate = false; var countrys = dto.VisaFeeInfos.GroupBy(x => x.Country); foreach (var country in countrys) { int countryVisaFeeId = 0; decimal _grandBusinessAgencyFee = 0; decimal _pettyBusinessAgencyFee = 0; decimal _visaFee = 0; foreach (var item in country.ToList()) { _visaFee = item.VisaFee; if (item.OBType == 1) _grandBusinessAgencyFee = item.AgencyFee; else if (item.OBType == 2) _pettyBusinessAgencyFee = item.AgencyFee; } var info = await _countryFeeRep._InfoByCountryName(country.Key); if (info == null) //添加 { int addId = _sqlSugar.Insertable( new Res_CountryFeeCost() { VisaCountry = country.Key, VisaPrice = _visaFee, GrandBusinessAgencyFee = _grandBusinessAgencyFee, PettyBusinessAgencyFee = _pettyBusinessAgencyFee, LastUpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), CreateUserId = dto.OpUserId, }).ExecuteReturnIdentity(); if (addId > 0) countryVisaFeeId = addId; } else //修改 { countryVisaFeeId = info.Id; if (_visaFee != info.VisaPrice) //价格不同的时候执行修改 { Res_CountryFeeCost _CountryFeeCost = new Res_CountryFeeCost() { Id = info.Id, VisaPrice = _visaFee, GrandBusinessAgencyFee = _grandBusinessAgencyFee, PettyBusinessAgencyFee = _pettyBusinessAgencyFee, LastUpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), }; int update1 = _sqlSugar.Updateable(_CountryFeeCost).UpdateColumns(it => new { it.VisaPrice, it.LastUpdateTime }).WhereColumns(it => it.Id).ExecuteCommand(); if (update1 > 0) { visaFeeUpdate = true; } } } foreach (var item in country.ToList()) { visaInfos.Add(new Grp_VisaFeeInfo() { Id = item.Id, DiId = dto.DiId, IsChecked = item.IsChecked, CountryVisaFeeId = countryVisaFeeId, OBType = item.OBType, AgencyFee = item.AgencyFee, OtherFee = item.OtherFee }); } } //执行删除 var update = _sqlSugar.Updateable().SetColumns(it => new Grp_VisaFeeInfo() { DeleteUserId = dto.OpUserId, DeleteTime = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"), IsDel = 1 }).Where(it => it.DiId == dto.DiId).ExecuteCommand(); var add = _sqlSugar.Insertable(visaInfos).ExecuteCommand(); if (add > 0) { CommitTran(); return new Result() {Code = 0 ,Msg = "操作成功!" }; } RollbackTran(); return _result; } /// /// 三公费用签证费用提示 /// /// /// /// public async Task EntryAndExitTips(int diId) { if (diId < 1) return _result = new Result() { Code = -1, Msg = "请传入有效的DiId参数" }; var visaData = await _sqlSugar.Queryable().Where(it => it.IsDel == 0 && it.DiId == diId).ToListAsync(); List ids = visaData.Select (it => it.CountryVisaFeeId).ToList(); var visaCountryDatas = await _sqlSugar.Queryable().Where(it => ids.Contains(it.Id)).ToListAsync(); List datas = new List(); string remark = ""; decimal feeTotal = 0.00M; visaData = visaData.Where(it => it.IsChecked == 1).ToList(); var visaData1 = visaData.GroupBy(it => it.CountryVisaFeeId); foreach (var kvp in visaData1) { var countryData = visaCountryDatas.Find(it => it.Id == kvp.Key); decimal _otherFee = kvp.FirstOrDefault()?.OtherFee ?? 0; decimal _visaFee = Convert.ToDecimal(countryData?.VisaPrice ?? 0.00M); decimal visaFeeTotal = _visaFee + _otherFee; decimal _agencyFee = 0; decimal _GrandBusinessAgencyFee = 0; decimal _PettyBusinessAgencyFee = 0; string remark1 = $"签证费:{_visaFee.ToString("#0.00")}元、"; foreach (var item in kvp.ToList()) { if (item.OBType == 1) { if (item.AgencyFee > 0) { remark1 += $@"大公务代办费:{item.AgencyFee.ToString("#0.00")}元、"; _agencyFee += item.AgencyFee; _GrandBusinessAgencyFee = item.AgencyFee; } } else if (item.OBType == 1) { if (item.AgencyFee > 0) { remark1 += $@"小公务代办费:{item.AgencyFee.ToString("#0.00")}元、"; _agencyFee += item.AgencyFee; _PettyBusinessAgencyFee = item.AgencyFee; } } } if (remark1.Length > 0) remark1 = remark1.Substring(0, remark1.Length - 1); if (_otherFee > 0) remark1 += $@"其他费用:{_otherFee.ToString("#0.00")}元"; visaFeeTotal += (_GrandBusinessAgencyFee + _PettyBusinessAgencyFee); remark += $@"{countryData?.VisaCountry ?? ""}:签证总费用:{visaFeeTotal}元/人 其中({remark1});"; feeTotal += visaFeeTotal; datas.Add(new { Country = countryData?.VisaCountry ?? "", visaFeeTotal = visaFeeTotal, VisaFee = countryData?.VisaPrice ?? 0.00M, GrandBusinessAgencyFee = _GrandBusinessAgencyFee, PettyBusinessAgencyFee = _PettyBusinessAgencyFee, OtherFee = _otherFee }); } _result.Code = 0; _result.Data = new { feeTotal = feeTotal, data = datas, remark = remark }; return _result; } } }