|
|
@@ -1,4 +1,5 @@
|
|
|
using Aspose.Cells;
|
|
|
+using Aspose.Cells.Drawing;
|
|
|
using Aspose.Words;
|
|
|
using Aspose.Words.Drawing;
|
|
|
using Aspose.Words.Tables;
|
|
|
@@ -67,6 +68,7 @@ using System.Text.Json;
|
|
|
using System.Text.RegularExpressions;
|
|
|
using System.Threading.Tasks;
|
|
|
using System.Web;
|
|
|
+using YamlDotNet.Core;
|
|
|
using static OASystem.API.OAMethodLib.JWTHelper;
|
|
|
using static OASystem.Infrastructure.Repositories.Groups.AirTicketResRepository;
|
|
|
using static OpenAI.GPT3.ObjectModels.SharedModels.IOpenAiModels;
|
|
|
@@ -10981,7 +10983,24 @@ FROM
|
|
|
|
|
|
var sysUers = await _sqlSugar.Queryable<Sys_Users>().Where(x => x.IsDel == 0).ToListAsync();
|
|
|
|
|
|
- var overseaVehicleCityDatas = new List<dynamic>();
|
|
|
+ var overseaVehicleCityDatas = new List<dynamic>() {
|
|
|
+ new
|
|
|
+ {
|
|
|
+ Id = 0,
|
|
|
+ area= "未选择",
|
|
|
+ CarTypeName = "",
|
|
|
+ serviceType = "",
|
|
|
+ Price = 0.00M,
|
|
|
+ guidePrice = 0.00M,
|
|
|
+ otherPrice = 0.00M,
|
|
|
+ currency = 0,
|
|
|
+ currencyName = "",
|
|
|
+ currRate = 1.0000M,
|
|
|
+ LastUpdateUserName = "",
|
|
|
+ LastUpdateTime = "",
|
|
|
+ Remark = ""
|
|
|
+ }};
|
|
|
+
|
|
|
foreach (var item in overseaVehicleTypes)
|
|
|
{
|
|
|
var parentInfo = overseaVehicles.FirstOrDefault(x => x.Id == item.OvId);
|
|
|
@@ -11158,7 +11177,87 @@ FROM
|
|
|
return Ok(JsonView(false));
|
|
|
}
|
|
|
|
|
|
- return Ok(JsonView(true));
|
|
|
+ //返回数据处理
|
|
|
+ var label = new StringBuilder();
|
|
|
+
|
|
|
+ //接送机
|
|
|
+ if (dto.APTFeeDetails?.Any() == true)
|
|
|
+ {
|
|
|
+ var ovIds = dto.APTFeeDetails.Select(x => x.OvId).ToList();
|
|
|
+
|
|
|
+ var areas = await _sqlSugar.Queryable<Res_OverseaVehicleTypePrice>()
|
|
|
+ .LeftJoin<Res_OverseaVehicle>((ovtp, ov) => ovtp.OvId == ov.Id)
|
|
|
+ .Where((ovtp, ov) => ovtp.IsDel == 0 && ovIds.Contains(ovtp.Id))
|
|
|
+ .Select((ovtp, ov) => new
|
|
|
+ {
|
|
|
+ ovtp.Id,
|
|
|
+ ov.CountryName,
|
|
|
+ ov.CityName
|
|
|
+ }).ToListAsync();
|
|
|
+
|
|
|
+ var items = dto.APTFeeDetails
|
|
|
+ .Select(item =>
|
|
|
+ {
|
|
|
+ var areaInfo = areas.FirstOrDefault(x => x.Id == item.OvId);
|
|
|
+ if (areaInfo == null) return null;
|
|
|
+
|
|
|
+ return areaInfo.CountryName == areaInfo.CityName
|
|
|
+ ? $"{areaInfo.CountryName}({item.Quote:#0.00} CNY)"
|
|
|
+ : $"{areaInfo.CountryName}-{areaInfo.CityName}({item.Quote:#0.00} CNY)";
|
|
|
+ })
|
|
|
+ .Where(item => item != null)
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ label.AppendLine($"接送机({string.Join("、", items)});");
|
|
|
+ }
|
|
|
+
|
|
|
+ //拉车
|
|
|
+ if (dto.PullCartFeeDetails?.Any() == true)
|
|
|
+ {
|
|
|
+ var feeLabel = string.Join("、",
|
|
|
+ dto.PullCartFeeDetails.Select(x =>
|
|
|
+ $"{x.Quote:#0.00} CNY"
|
|
|
+ ));
|
|
|
+
|
|
|
+ label.AppendLine($"拉车({feeLabel});");
|
|
|
+ }
|
|
|
+
|
|
|
+ //火车
|
|
|
+ if (dto.TrainFeeDetails?.Any() == true)
|
|
|
+ {
|
|
|
+ var feeLabel = string.Join("、",
|
|
|
+ dto.TrainFeeDetails.Select(x =>
|
|
|
+ $"{x.Quote:#0.00} CNY"
|
|
|
+ ));
|
|
|
+
|
|
|
+ label.AppendLine($"火车票({feeLabel});");
|
|
|
+ }
|
|
|
+
|
|
|
+ //城市机票
|
|
|
+ if (dto.CityAirTicketFeeDetails?.Any() == true)
|
|
|
+ {
|
|
|
+ var feeLabel = string.Join("、",
|
|
|
+ dto.CityAirTicketFeeDetails.Select(x =>
|
|
|
+ $"{x.Quote:#0.00} CNY"
|
|
|
+ ));
|
|
|
+
|
|
|
+ label.AppendLine($"城市机票({feeLabel});");
|
|
|
+ }
|
|
|
+
|
|
|
+ //费用
|
|
|
+ decimal quote = (dto.APTFeeTotal + dto.PullCartFeeTotal + dto.TrainFeeTotal + dto.CityAirTicketFeeTotal).ConvertToDecimal1();
|
|
|
+ decimal jjcQuote = quote;
|
|
|
+ decimal gwcQuote = quote;
|
|
|
+ decimal tdcQuote = quote;
|
|
|
+
|
|
|
+ var view = new {
|
|
|
+ label = label.ToString(),
|
|
|
+ jjcQuote,
|
|
|
+ gwcQuote,
|
|
|
+ tdcQuote
|
|
|
+ };
|
|
|
+
|
|
|
+ return Ok(JsonView(view));
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
@@ -13500,6 +13599,323 @@ FROM
|
|
|
}));
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ #region 城市区间交通费
|
|
|
+ /// <summary>
|
|
|
+ /// 团组模块 - 出入境费用 - 草稿 - 基础数据源(境外用车)
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="draftId">草稿Id</param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("{darfId}")]
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
+ public async Task<IActionResult> EnterExitCostDraftOVByGroupId(int draftId)
|
|
|
+ {
|
|
|
+ var groupInfo = await _sqlSugar.Queryable<Grp_EnterExitCostDraft>().Where(x => x.Id == draftId).FirstAsync();
|
|
|
+ if (groupInfo == null)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "三公费用草稿信息为空"));
|
|
|
+ }
|
|
|
+
|
|
|
+ var cityIds = await _sqlSugar.Queryable<Grp_DayAndCostDraft>()
|
|
|
+ .Where(x => x.IsDel == 0 && x.ParentId == draftId)
|
|
|
+ .Select(x => x.NationalTravelFeeId)
|
|
|
+ .Distinct()
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ var countries = await _sqlSugar.Queryable<Grp_NationalTravelFee>()
|
|
|
+ .Where(x => x.IsDel == 0 && cityIds.Contains(x.Id))
|
|
|
+ .Select(x => x.Country)
|
|
|
+ .Distinct()
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ if (countries?.Any() != true)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "草稿选择城市信息为空"));
|
|
|
+ }
|
|
|
+
|
|
|
+ var currencies = await GeneralMethod.EnterExitCostDrafOVFeeUsedCurrencyAsync(draftId);
|
|
|
+
|
|
|
+ var currencyData = await _sqlSugar.Queryable<Sys_SetData>()
|
|
|
+ .Where(x => x.IsDel == 0 && x.STid == 66)
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ var overseaVehicles = await _sqlSugar.Queryable<Res_OverseaVehicle>()
|
|
|
+ .Where(x => x.IsDel == 0 && countries.Contains(x.CountryName))
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ var overseaVehicleIds = overseaVehicles.Select(x => x.Id).ToList();
|
|
|
+
|
|
|
+ //只返回接送机的数据
|
|
|
+ var overseaVehicleTypes = await _sqlSugar.Queryable<Res_OverseaVehicleTypePrice>()
|
|
|
+ .Where(x => x.IsDel == 0 && x.ServiceType == VehicleServiceTypeEnum.TransferService && overseaVehicleIds.Contains(x.OvId))
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ var sysUers = await _sqlSugar.Queryable<Sys_Users>().Where(x => x.IsDel == 0).ToListAsync();
|
|
|
+
|
|
|
+ var overseaVehicleCityDatas = new List<dynamic>() {
|
|
|
+ new
|
|
|
+ {
|
|
|
+ Id = 0,
|
|
|
+ area= "未选择",
|
|
|
+ CarTypeName = "",
|
|
|
+ serviceType = "",
|
|
|
+ Price = 0.00M,
|
|
|
+ guidePrice = 0.00M,
|
|
|
+ otherPrice = 0.00M,
|
|
|
+ currency = 0,
|
|
|
+ currencyName = "",
|
|
|
+ currRate = 1.0000M,
|
|
|
+ LastUpdateUserName = "",
|
|
|
+ LastUpdateTime = "",
|
|
|
+ Remark = ""
|
|
|
+ }};
|
|
|
+
|
|
|
+ foreach (var item in overseaVehicleTypes)
|
|
|
+ {
|
|
|
+ var parentInfo = overseaVehicles.FirstOrDefault(x => x.Id == item.OvId);
|
|
|
+ string area = string.Empty,
|
|
|
+ serviceType = "未设置",
|
|
|
+ currencyName = string.Empty;
|
|
|
+ decimal otherPrice = 0.00M;
|
|
|
+ if (parentInfo != null)
|
|
|
+ {
|
|
|
+ if (parentInfo.CountryName == parentInfo.CityName) area = parentInfo.CountryName;
|
|
|
+ else area = $"{parentInfo.CountryName}-{parentInfo.CityName}";
|
|
|
+
|
|
|
+ serviceType = item.ServiceType.GetDescription();
|
|
|
+ currencyName = currencyData.FirstOrDefault(x => x.Id == parentInfo.Currency)?.Name ?? "-";
|
|
|
+ otherPrice = parentInfo.OtherPrice1 + parentInfo.OtherPrice2;
|
|
|
+ }
|
|
|
+
|
|
|
+ //当前币种汇率值
|
|
|
+ var currRate = 1.0000M;
|
|
|
+ var currencyInfo = currencies.FirstOrDefault(x => x.CurrencyCode == currencyName);
|
|
|
+ if (currencyInfo != null) currRate = currencyInfo.Rate;
|
|
|
+
|
|
|
+ overseaVehicleCityDatas.add(new
|
|
|
+ {
|
|
|
+ item.Id,
|
|
|
+ area,
|
|
|
+ item.CarTypeName,
|
|
|
+ serviceType,
|
|
|
+ item.Price,
|
|
|
+ guidePrice = parentInfo?.GuidePrice ?? 0.00M,
|
|
|
+ otherPrice,
|
|
|
+ currency = parentInfo?.Currency ?? 0,
|
|
|
+ currencyName,
|
|
|
+ currRate,
|
|
|
+ LastUpdateUserName = sysUers.FirstOrDefault(x => x.Id == item.LastUpdateUserId)?.CnName ?? "-",
|
|
|
+ item.LastUpdateTime,
|
|
|
+ item.Remark
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ var total = overseaVehicleCityDatas.Count;
|
|
|
+ var view = new
|
|
|
+ {
|
|
|
+ visitCountries = string.Join("、", countries),
|
|
|
+ groupSize = 0, //出访人数
|
|
|
+ defAirportTransferCoeff = Def_AirportTransferCoeff, //接送机默认报价系数
|
|
|
+ defServiceCount = Def_ServiceCount, //接送机默认服务次数
|
|
|
+ defTrainCoeff = Def_TrainCoeff, //火车默认报价系数
|
|
|
+ defPullCartCoeff = Def_PullCartCoeff, //拉车默认报价系数
|
|
|
+ defCityFlightCoeff = Def_CityFlightCoeff, //城市机票默认报价系数
|
|
|
+ Currencies = currencies,
|
|
|
+ data = overseaVehicleCityDatas
|
|
|
+ };
|
|
|
+
|
|
|
+ if (overseaVehicleCityDatas.Count == 0)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(true, "暂无数据!", view));
|
|
|
+ }
|
|
|
+
|
|
|
+ return Ok(JsonView(true, "查询成功!", view, total));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 团组模块 - 出入境费用 - 境外用车计算详细信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="groupId"></param>
|
|
|
+ /// <param name="currUserId"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("{groupId}")]
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
+ public async Task<IActionResult> EnterExitCostDraftOVFeeDetails(int groupId, int currUserId)
|
|
|
+ {
|
|
|
+ var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().Where(x => x.Id == groupId).FirstAsync();
|
|
|
+ if (groupInfo == null)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "团组信息为空"));
|
|
|
+ }
|
|
|
+
|
|
|
+ var eecInfo = await _sqlSugar.Queryable<Grp_EnterExitCost>().Where(x => x.IsDel == 0 && x.DiId == groupId).FirstAsync();
|
|
|
+
|
|
|
+ //CityIntervalInfo
|
|
|
+ var info = new CityIntervalInfo();
|
|
|
+
|
|
|
+ if (eecInfo != null && !string.IsNullOrEmpty(eecInfo.CityIntervalFeeDetails))
|
|
|
+ {
|
|
|
+ info = JsonConvert.DeserializeObject<CityIntervalInfo>(eecInfo.CityIntervalFeeDetails);
|
|
|
+ return Ok(JsonView(true, "查询成功!", info));
|
|
|
+ }
|
|
|
+
|
|
|
+ var userInfo = await _sqlSugar.Queryable<Sys_Users>().Where(x => x.IsDel == 0 && x.Id == currUserId).FirstAsync();
|
|
|
+ var userName = userInfo?.CnName ?? "-";
|
|
|
+ var nowTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
+
|
|
|
+ //返回默认数据
|
|
|
+ info = new CityIntervalInfo()
|
|
|
+ {
|
|
|
+ APTFeeDetails = new List<RoundTripTransferInfo>() { new() { No = 1, Coefficient = Def_AirportTransferCoeff, ServiceCount = Def_ServiceCount } },
|
|
|
+ PullCartFeeDetails = new List<PullCartInfo>() { new() { No = 1, Coefficient = Def_PullCartCoeff } },
|
|
|
+ TrainFeeDetails = new List<TrainInfo>() { new() { No = 1, Coefficient = Def_TrainCoeff } },
|
|
|
+ CityAirTicketFeeDetails = new List<CityAirTicketInfo>() { new() { No = 1, Coefficient = Def_CityFlightCoeff } },
|
|
|
+ LastUpdateUserName = userName,
|
|
|
+ LastUpdateTime = nowTime,
|
|
|
+ CreateUserName = userName,
|
|
|
+ Currencies = await GeneralMethod.EnterExitCostOVFeeUsedCurrencyAsync(groupId),
|
|
|
+ CreateTime = nowTime
|
|
|
+ };
|
|
|
+
|
|
|
+ return Ok(JsonView(true, "查询成功!", info));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 团组模块 - 出入境费用 - 境外用车计算 保存
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost]
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
+ public async Task<IActionResult> EnterExitCostDraftOVFeeSave(GetEnterExitCostOVFeeSaveDto dto)
|
|
|
+ {
|
|
|
+ var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().Where(x => x.Id == dto.GroupId).FirstAsync();
|
|
|
+ if (groupInfo == null)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "团组信息为空"));
|
|
|
+ }
|
|
|
+
|
|
|
+ var userInfo = await _sqlSugar.Queryable<Sys_Users>().Where(x => x.IsDel == 0 && x.Id == dto.CurrUserId).FirstAsync();
|
|
|
+ if (userInfo == null)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "员工信息为空"));
|
|
|
+ }
|
|
|
+
|
|
|
+ var eecInfo = await _sqlSugar.Queryable<Grp_EnterExitCost>().Where(x => x.IsDel == 0 && x.DiId == dto.GroupId).FirstAsync();
|
|
|
+
|
|
|
+ if (eecInfo == null)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "出入境费用信息为空"));
|
|
|
+ }
|
|
|
+ var oldData = new CityIntervalInfo();
|
|
|
+ if (!string.IsNullOrEmpty(eecInfo.CityIntervalFeeDetails))
|
|
|
+ {
|
|
|
+ oldData = JsonConvert.DeserializeObject<CityIntervalInfo>(eecInfo.CityIntervalFeeDetails);
|
|
|
+ }
|
|
|
+
|
|
|
+ var userName = userInfo?.CnName ?? "-";
|
|
|
+ var nowTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
+
|
|
|
+ var info = new CityIntervalInfo()
|
|
|
+ {
|
|
|
+ APTFeeTotal = dto.APTFeeTotal,
|
|
|
+ APTFeeDetails = dto.APTFeeDetails,
|
|
|
+ PullCartFeeTotal = dto.PullCartFeeTotal,
|
|
|
+ PullCartFeeDetails = dto.PullCartFeeDetails,
|
|
|
+ TrainFeeTotal = dto.TrainFeeTotal,
|
|
|
+ TrainFeeDetails = dto.TrainFeeDetails,
|
|
|
+ CityAirTicketFeeTotal = dto.CityAirTicketFeeTotal,
|
|
|
+ CityAirTicketFeeDetails = dto.CityAirTicketFeeDetails,
|
|
|
+ Currencies = dto.Currencies,
|
|
|
+ LastUpdateUserName = userName,
|
|
|
+ LastUpdateTime = nowTime,
|
|
|
+ CreateUserName = oldData?.CreateUserName ?? userName,
|
|
|
+ CreateTime = oldData?.CreateTime ?? nowTime
|
|
|
+ };
|
|
|
+
|
|
|
+ eecInfo.CityIntervalFeeDetails = JsonConvert.SerializeObject(info);
|
|
|
+
|
|
|
+ var upd = await _sqlSugar.Updateable<Grp_EnterExitCost>()
|
|
|
+ .SetColumns(it => it.CityIntervalFeeDetails == eecInfo.CityIntervalFeeDetails)
|
|
|
+ .SetColumns(it => it.LastUpdateUserId == dto.CurrUserId)
|
|
|
+ .SetColumns(it => it.LastUpdateTime == nowTime)
|
|
|
+ .Where(x => x.Id == eecInfo.Id)
|
|
|
+ .ExecuteCommandAsync();
|
|
|
+ if (upd < 1)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false));
|
|
|
+ }
|
|
|
+
|
|
|
+ //返回参数处理
|
|
|
+ var label = new StringBuilder();
|
|
|
+ if (dto.APTFeeDetails.Any())
|
|
|
+ {
|
|
|
+ var ovIds = dto.APTFeeDetails.Select(x => x.OvId).ToList();
|
|
|
+ var areas = await _sqlSugar.Queryable<Res_OverseaVehicleTypePrice>()
|
|
|
+ .LeftJoin<Res_OverseaVehicle>((ovtp, ov) => ovtp.OvId == ov.Id)
|
|
|
+ .Where((ovtp, ov) => ovtp.IsDel == 0 && ovIds.Contains(ovtp.Id))
|
|
|
+ .Select((ovtp, ov) => new
|
|
|
+ {
|
|
|
+ ovtp.Id,
|
|
|
+ ov.CountryName,
|
|
|
+ ov.CityName
|
|
|
+ })
|
|
|
+ .ToListAsync();
|
|
|
+ if (areas.Any())
|
|
|
+ {
|
|
|
+ var items = dto.APTFeeDetails
|
|
|
+ .Select(item =>
|
|
|
+ {
|
|
|
+ var areaInfo = areas.FirstOrDefault(x => x.Id == item.OvId);
|
|
|
+ if (areaInfo == null) return null;
|
|
|
+
|
|
|
+ return areaInfo.CountryName == areaInfo.CityName
|
|
|
+ ? $"{areaInfo.CountryName}({item.Quote:#0.00} CNY)"
|
|
|
+ : $"{areaInfo.CountryName}-{areaInfo.CityName}({item.Quote:#0.00} CNY)";
|
|
|
+ })
|
|
|
+ .Where(item => item != null)
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ string areaLabel = $"接送机({string.Join("、", items)});";
|
|
|
+
|
|
|
+ label.AppendLine(areaLabel);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (dto.PullCartFeeDetails.Any())
|
|
|
+ {
|
|
|
+ var amounts = dto.PullCartFeeDetails.Select(item => $"{item.Quote:#0.00}");
|
|
|
+ string subLabel = $"拉车({string.Join("、", amounts)});";
|
|
|
+ label.AppendLine(subLabel);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (dto.TrainFeeDetails.Any())
|
|
|
+ {
|
|
|
+ var amounts = dto.TrainFeeDetails.Select(item => $"{item.Quote:#0.00}");
|
|
|
+ string subLabel = $"火车票({string.Join("、", amounts)});";
|
|
|
+ label.AppendLine(subLabel);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (dto.CityAirTicketFeeDetails.Any())
|
|
|
+ {
|
|
|
+ var amounts = dto.TrainFeeDetails.Select(item => $"{item.Quote:#0.00}");
|
|
|
+ string subLabel = $"城市机票({string.Join("、", amounts)});";
|
|
|
+ label.AppendLine(subLabel);
|
|
|
+ }
|
|
|
+
|
|
|
+ decimal total = dto.APTFeeTotal + dto.PullCartFeeTotal + dto.TrainFeeTotal + dto.CityAirTicketFeeTotal;
|
|
|
+ decimal jjcTotal = total;
|
|
|
+ decimal gwcTotal = total;
|
|
|
+ decimal tdcTotal = total;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ return Ok(JsonView(true));
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 团组模块 - 出入境费用-草稿 - Info
|
|
|
/// </summary>
|
|
|
@@ -14896,6 +15312,248 @@ FROM
|
|
|
|
|
|
#region 团组经理模块 出入境费用 移动端(Android/IOS)
|
|
|
|
|
|
+ #region 城市区间交通费
|
|
|
+ /// <summary>
|
|
|
+ /// 团组模块 - 出入境费用 - 移动端 - 基础数据源(境外用车)
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="groupId"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("{groupId}")]
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
+ public async Task<IActionResult> EnterExitCostMobileOVByGroupId(int groupId)
|
|
|
+ {
|
|
|
+ var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().Where(x => x.Id == groupId).FirstAsync();
|
|
|
+ if (groupInfo == null)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "团组信息为空"));
|
|
|
+ }
|
|
|
+
|
|
|
+ var countryies = _groupRepository.GroupSplitCountry(groupInfo.VisitCountry);
|
|
|
+ if (countryies?.Any() != true)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "团组出访国家信息为空"));
|
|
|
+ }
|
|
|
+
|
|
|
+ var currencies = await GeneralMethod.EnterExitCostOVFeeUsedCurrencyAsync(groupId);
|
|
|
+
|
|
|
+ var currencyData = await _sqlSugar.Queryable<Sys_SetData>()
|
|
|
+ .Where(x => x.IsDel == 0 && x.STid == 66)
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ var overseaVehicles = await _sqlSugar.Queryable<Res_OverseaVehicle>()
|
|
|
+ .Where(x => x.IsDel == 0 && countryies.Contains(x.CountryName))
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ var overseaVehicleIds = overseaVehicles.Select(x => x.Id).ToList();
|
|
|
+
|
|
|
+ //只返回接送机的数据
|
|
|
+ var overseaVehicleTypes = await _sqlSugar.Queryable<Res_OverseaVehicleTypePrice>()
|
|
|
+ .Where(x => x.IsDel == 0 && x.ServiceType == VehicleServiceTypeEnum.TransferService && overseaVehicleIds.Contains(x.OvId))
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ var sysUers = await _sqlSugar.Queryable<Sys_Users>().Where(x => x.IsDel == 0).ToListAsync();
|
|
|
+
|
|
|
+ var overseaVehicleCityDatas = new List<dynamic>() {
|
|
|
+ new
|
|
|
+ {
|
|
|
+ Id = 0,
|
|
|
+ area= "未选择",
|
|
|
+ CarTypeName = "",
|
|
|
+ serviceType = "",
|
|
|
+ Price = 0.00M,
|
|
|
+ guidePrice = 0.00M,
|
|
|
+ otherPrice = 0.00M,
|
|
|
+ currency = 0,
|
|
|
+ currencyName = "",
|
|
|
+ currRate = 1.0000M,
|
|
|
+ LastUpdateUserName = "",
|
|
|
+ LastUpdateTime = "",
|
|
|
+ Remark = ""
|
|
|
+ }};
|
|
|
+
|
|
|
+ foreach (var item in overseaVehicleTypes)
|
|
|
+ {
|
|
|
+ var parentInfo = overseaVehicles.FirstOrDefault(x => x.Id == item.OvId);
|
|
|
+ string area = string.Empty,
|
|
|
+ serviceType = "未设置",
|
|
|
+ currencyName = string.Empty;
|
|
|
+ decimal otherPrice = 0.00M;
|
|
|
+ if (parentInfo != null)
|
|
|
+ {
|
|
|
+ if (parentInfo.CountryName == parentInfo.CityName) area = parentInfo.CountryName;
|
|
|
+ else area = $"{parentInfo.CountryName}-{parentInfo.CityName}";
|
|
|
+
|
|
|
+ serviceType = item.ServiceType.GetDescription();
|
|
|
+ currencyName = currencyData.FirstOrDefault(x => x.Id == parentInfo.Currency)?.Name ?? "-";
|
|
|
+ otherPrice = parentInfo.OtherPrice1 + parentInfo.OtherPrice2;
|
|
|
+ }
|
|
|
+
|
|
|
+ //当前币种汇率值
|
|
|
+ var currRate = 1.0000M;
|
|
|
+ var currencyInfo = currencies.FirstOrDefault(x => x.CurrencyCode == currencyName);
|
|
|
+ if (currencyInfo != null) currRate = currencyInfo.Rate;
|
|
|
+
|
|
|
+ overseaVehicleCityDatas.add(new
|
|
|
+ {
|
|
|
+ item.Id,
|
|
|
+ area,
|
|
|
+ item.CarTypeName,
|
|
|
+ serviceType,
|
|
|
+ item.Price,
|
|
|
+ guidePrice = parentInfo?.GuidePrice ?? 0.00M,
|
|
|
+ otherPrice,
|
|
|
+ currency = parentInfo?.Currency ?? 0,
|
|
|
+ currencyName,
|
|
|
+ currRate,
|
|
|
+ LastUpdateUserName = sysUers.FirstOrDefault(x => x.Id == item.LastUpdateUserId)?.CnName ?? "-",
|
|
|
+ item.LastUpdateTime,
|
|
|
+ item.Remark
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ var total = overseaVehicleCityDatas.Count;
|
|
|
+ var view = new
|
|
|
+ {
|
|
|
+ visitCountries = string.Join("、", countryies),
|
|
|
+ groupSize = groupInfo.VisitPNumber, //出访人数
|
|
|
+ defAirportTransferCoeff = Def_AirportTransferCoeff, //接送机默认报价系数
|
|
|
+ defServiceCount = Def_ServiceCount, //接送机默认服务次数
|
|
|
+ defTrainCoeff = Def_TrainCoeff, //火车默认报价系数
|
|
|
+ defPullCartCoeff = Def_PullCartCoeff, //拉车默认报价系数
|
|
|
+ defCityFlightCoeff = Def_CityFlightCoeff, //城市机票默认报价系数
|
|
|
+ Currencies = currencies,
|
|
|
+ data = overseaVehicleCityDatas
|
|
|
+ };
|
|
|
+
|
|
|
+ if (overseaVehicleCityDatas.Count == 0)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(true, "暂无数据!", view));
|
|
|
+ }
|
|
|
+
|
|
|
+ return Ok(JsonView(true, "查询成功!", view, total));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 团组模块 - 出入境费用 - 移动端 - 境外用车计算详细信息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="groupId"></param>
|
|
|
+ /// <param name="currUserId"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpGet("{groupId}")]
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
+ public async Task<IActionResult> EnterExitCostMobileOVFeeDetails(int groupId, int currUserId)
|
|
|
+ {
|
|
|
+ var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().Where(x => x.Id == groupId).FirstAsync();
|
|
|
+ if (groupInfo == null)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "团组信息为空"));
|
|
|
+ }
|
|
|
+
|
|
|
+ var eecInfo = await _sqlSugar.Queryable<Grp_EnterExitCost>().Where(x => x.IsDel == 0 && x.DiId == groupId).FirstAsync();
|
|
|
+
|
|
|
+ //CityIntervalInfo
|
|
|
+ var info = new CityIntervalInfo();
|
|
|
+
|
|
|
+ if (eecInfo != null && !string.IsNullOrEmpty(eecInfo.CityIntervalFeeDetails))
|
|
|
+ {
|
|
|
+ info = JsonConvert.DeserializeObject<CityIntervalInfo>(eecInfo.CityIntervalFeeDetails);
|
|
|
+ return Ok(JsonView(true, "查询成功!", info));
|
|
|
+ }
|
|
|
+
|
|
|
+ var userInfo = await _sqlSugar.Queryable<Sys_Users>().Where(x => x.IsDel == 0 && x.Id == currUserId).FirstAsync();
|
|
|
+ var userName = userInfo?.CnName ?? "-";
|
|
|
+ var nowTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
+
|
|
|
+ //返回默认数据
|
|
|
+ info = new CityIntervalInfo()
|
|
|
+ {
|
|
|
+ APTFeeDetails = new List<RoundTripTransferInfo>() { new() { No = 1, Coefficient = Def_AirportTransferCoeff, ServiceCount = Def_ServiceCount } },
|
|
|
+ PullCartFeeDetails = new List<PullCartInfo>() { new() { No = 1, Coefficient = Def_PullCartCoeff } },
|
|
|
+ TrainFeeDetails = new List<TrainInfo>() { new() { No = 1, Coefficient = Def_TrainCoeff } },
|
|
|
+ CityAirTicketFeeDetails = new List<CityAirTicketInfo>() { new() { No = 1, Coefficient = Def_CityFlightCoeff } },
|
|
|
+ LastUpdateUserName = userName,
|
|
|
+ LastUpdateTime = nowTime,
|
|
|
+ CreateUserName = userName,
|
|
|
+ Currencies = await GeneralMethod.EnterExitCostOVFeeUsedCurrencyAsync(groupId),
|
|
|
+ CreateTime = nowTime
|
|
|
+ };
|
|
|
+
|
|
|
+ return Ok(JsonView(true, "查询成功!", info));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 团组模块 - 出入境费用 - 移动端 - 境外用车计算 保存
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost]
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
+ public async Task<IActionResult> EnterExitCostMobileOVFeeSave(GetEnterExitCostOVFeeSaveDto dto)
|
|
|
+ {
|
|
|
+ var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().Where(x => x.Id == dto.GroupId).FirstAsync();
|
|
|
+ if (groupInfo == null)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "团组信息为空"));
|
|
|
+ }
|
|
|
+
|
|
|
+ var userInfo = await _sqlSugar.Queryable<Sys_Users>().Where(x => x.IsDel == 0 && x.Id == dto.CurrUserId).FirstAsync();
|
|
|
+ if (userInfo == null)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "员工信息为空"));
|
|
|
+ }
|
|
|
+
|
|
|
+ var eecInfo = await _sqlSugar.Queryable<Grp_EnterExitCost>().Where(x => x.IsDel == 0 && x.DiId == dto.GroupId).FirstAsync();
|
|
|
+
|
|
|
+ if (eecInfo == null)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "出入境费用信息为空"));
|
|
|
+ }
|
|
|
+ var oldData = new CityIntervalInfo();
|
|
|
+ if (!string.IsNullOrEmpty(eecInfo.CityIntervalFeeDetails))
|
|
|
+ {
|
|
|
+ oldData = JsonConvert.DeserializeObject<CityIntervalInfo>(eecInfo.CityIntervalFeeDetails);
|
|
|
+ }
|
|
|
+
|
|
|
+ var userName = userInfo?.CnName ?? "-";
|
|
|
+ var nowTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
+
|
|
|
+ var info = new CityIntervalInfo()
|
|
|
+ {
|
|
|
+ APTFeeTotal = dto.APTFeeTotal,
|
|
|
+ APTFeeDetails = dto.APTFeeDetails,
|
|
|
+ PullCartFeeTotal = dto.PullCartFeeTotal,
|
|
|
+ PullCartFeeDetails = dto.PullCartFeeDetails,
|
|
|
+ TrainFeeTotal = dto.TrainFeeTotal,
|
|
|
+ TrainFeeDetails = dto.TrainFeeDetails,
|
|
|
+ CityAirTicketFeeTotal = dto.CityAirTicketFeeTotal,
|
|
|
+ CityAirTicketFeeDetails = dto.CityAirTicketFeeDetails,
|
|
|
+ Currencies = dto.Currencies,
|
|
|
+ LastUpdateUserName = userName,
|
|
|
+ LastUpdateTime = nowTime,
|
|
|
+ CreateUserName = oldData?.CreateUserName ?? userName,
|
|
|
+ CreateTime = oldData?.CreateTime ?? nowTime
|
|
|
+ };
|
|
|
+
|
|
|
+ eecInfo.CityIntervalFeeDetails = JsonConvert.SerializeObject(info);
|
|
|
+
|
|
|
+ var upd = await _sqlSugar.Updateable<Grp_EnterExitCost>()
|
|
|
+ .SetColumns(it => it.CityIntervalFeeDetails == eecInfo.CityIntervalFeeDetails)
|
|
|
+ .SetColumns(it => it.LastUpdateUserId == dto.CurrUserId)
|
|
|
+ .SetColumns(it => it.LastUpdateTime == nowTime)
|
|
|
+ .Where(x => x.Id == eecInfo.Id)
|
|
|
+ .ExecuteCommandAsync();
|
|
|
+ if (upd < 1)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false));
|
|
|
+ }
|
|
|
+
|
|
|
+ return Ok(JsonView(true));
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 获取币种基础数据(含逻辑处理)
|
|
|
/// </summary>
|