|
@@ -18070,6 +18070,31 @@ FROM
|
|
|
designer.Workbook.Worksheets[1].Name = "费用总核算";
|
|
|
Worksheet sheet = designer.Workbook.Worksheets[0];
|
|
|
|
|
|
+ #region 隐藏舱位
|
|
|
+ var settingAir = new[]
|
|
|
+ {
|
|
|
+ new { key = "经济舱", index = 7 },
|
|
|
+ new { key = "公务舱", index = 19 },
|
|
|
+ new { key = "头等舱", index = 11 }
|
|
|
+ };
|
|
|
+
|
|
|
+ var airType = _sqlSugar.Queryable<Grp_TourClientList>()
|
|
|
+ .LeftJoin<Sys_SetData>((c, s) => s.IsDel == 0 && c.ShippingSpaceTypeId == s.Id)
|
|
|
+ .Where((c, s) => c.IsDel == 0 && c.DiId == di.Id)
|
|
|
+ .Select((c, s) => s.Name)
|
|
|
+ .ToList()
|
|
|
+ .GroupBy(x => x)
|
|
|
+ .Select(x => x.Key);
|
|
|
+
|
|
|
+ foreach (var item in settingAir)
|
|
|
+ {
|
|
|
+ if (!airType.Contains(item.key))
|
|
|
+ {
|
|
|
+ hideRowsList.Add(item.index);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
foreach (var Rowindex in hideRowsList)
|
|
|
{
|
|
|
ws.Cells.HideRows(Rowindex, 2);
|
|
@@ -19589,83 +19614,352 @@ AirHotelPrice
|
|
|
public int Count { get; set; }
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- private class HotelSum
|
|
|
+ /// <summary>
|
|
|
+ /// 团组系数设置
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost]
|
|
|
+ public async Task<IActionResult> QueryGroupCostCoefficient(QueryGroupCostCoefficientDto dto)
|
|
|
{
|
|
|
- internal decimal SGR { get; set; }
|
|
|
+ var di = await _sqlSugar.Queryable<Grp_DelegationInfo>()
|
|
|
+ .FirstAsync(x => x.Id == dto.Diid && x.IsDel == 0);
|
|
|
|
|
|
- internal decimal TBR { get; set; }
|
|
|
+ if (di == null)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "团组不存在!"));
|
|
|
+ }
|
|
|
|
|
|
- internal decimal JSES { get; set; }
|
|
|
+ //var firstExpression = Expressionable.Create<Grp_GroupCostParameter>()
|
|
|
+ // .And(x => x.CostType == "A" && x.DiId == di.Id && x.IsDel == 0);
|
|
|
+ //var groupCostMainPrice = await _sqlSugar.Queryable<Grp_GroupCostParameter>().
|
|
|
+ // FirstAsync(firstExpression.ToExpression());
|
|
|
|
|
|
- internal decimal SUITE { get; set; }
|
|
|
+ #region JSON
|
|
|
+ string hcpJson = @"
|
|
|
+ [
|
|
|
+ {
|
|
|
+ ""min"": 1,
|
|
|
+ ""max"": 500,
|
|
|
+ ""value"": 1.50
|
|
|
+ },
|
|
|
+ {
|
|
|
+ ""min"": 501,
|
|
|
+ ""max"": 1000,
|
|
|
+ ""value"": 1.40
|
|
|
+ },
|
|
|
+ {
|
|
|
+ ""min"": 1001,
|
|
|
+ ""max"": 2000,
|
|
|
+ ""value"": 1.35
|
|
|
+ }
|
|
|
+ ]";
|
|
|
+ #endregion
|
|
|
|
|
|
- internal decimal AllPrice
|
|
|
- {
|
|
|
- get { return SGR + TBR + JSES + SUITE; }
|
|
|
- }
|
|
|
- }
|
|
|
+ var hcpPriceRange = Newtonsoft.Json.JsonConvert.DeserializeObject<List<PriceRange>>(hcpJson);
|
|
|
|
|
|
+ List<(Predicate<decimal>, decimal)> hcpSwitchDictionary = hcpPriceRange
|
|
|
+ .Select(pr => (new Predicate<decimal>(x => x >= pr.Min && x <= pr.Max), pr.Value))
|
|
|
+ .ToList();
|
|
|
|
|
|
+ List<(Predicate<decimal>, List<(Predicate<decimal>, decimal)>)> jjcSwitchDictionary =
|
|
|
+ new List<(Predicate<decimal>, List<(Predicate<decimal>, decimal)>)>();
|
|
|
|
|
|
- [HttpPost]
|
|
|
- public async Task<IActionResult> QueryGroupCostCoefficient(QueryGroupCostCoefficientDto dto)
|
|
|
- {
|
|
|
- var di = await _sqlSugar.Queryable<Grp_DelegationInfo>()
|
|
|
- .FirstAsync(x => x.Id == dto.Diid && x.IsDel == 0);
|
|
|
+ //jjcSwitchDictionary.Add((new Predicate<decimal>(x => x >= 1 && x <= 3),
|
|
|
+ // new List<(Predicate<decimal>, decimal)>()
|
|
|
+ // {
|
|
|
+ // (new Predicate<decimal>(y => y >= 1000 && y <= 3000), 2.6M),
|
|
|
+ // (new Predicate<decimal>(y => y > 3000), 2.5M)
|
|
|
+ // }
|
|
|
+ // ));
|
|
|
|
|
|
- if (di == null)
|
|
|
+ #region 签证系数
|
|
|
+
|
|
|
+ var visaXS = 0.00M;
|
|
|
+ switch (dto.VisaCB)
|
|
|
{
|
|
|
- return Ok(JsonView(false, "团组不存在!"));
|
|
|
+ case decimal n when (n > 1 && n < 500):
|
|
|
+
|
|
|
+ switch (dto.VisaRS)
|
|
|
+ {
|
|
|
+ case 2 or 3:
|
|
|
+ visaXS = 1.35M;
|
|
|
+ break;
|
|
|
+ case 4 or 5:
|
|
|
+ visaXS = 1.30M;
|
|
|
+ break;
|
|
|
+ case 6 or 7:
|
|
|
+ visaXS = 1.25M;
|
|
|
+ break;
|
|
|
+ case 8 or 9 or 10:
|
|
|
+ visaXS = 1.20M;
|
|
|
+ break;
|
|
|
+ case > 10:
|
|
|
+ visaXS = 1.15M;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ visaXS = 0.00M;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case decimal n when (n >= 500 && n < 1000):
|
|
|
+
|
|
|
+ switch (dto.VisaRS)
|
|
|
+ {
|
|
|
+ case 2 or 3 or 4:
|
|
|
+ visaXS = 1.30M;
|
|
|
+ break;
|
|
|
+ case 5 or 6 or 7 or 8:
|
|
|
+ visaXS = 1.25M;
|
|
|
+ break;
|
|
|
+ case 9 or 10:
|
|
|
+ visaXS = 1.20M;
|
|
|
+ break;
|
|
|
+ case > 10:
|
|
|
+ visaXS = 1.15M;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ visaXS = 0.00M;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+
|
|
|
+ switch (dto.VisaRS)
|
|
|
+ {
|
|
|
+ case 2 or 3 or 4:
|
|
|
+ visaXS = 1.30M;
|
|
|
+ break;
|
|
|
+ case 5 or 6 or 7 or 8:
|
|
|
+ visaXS = 1.25M;
|
|
|
+ break;
|
|
|
+ case 9 or 10:
|
|
|
+ visaXS = 1.20M;
|
|
|
+ break;
|
|
|
+ case > 10:
|
|
|
+ visaXS = 1.15M;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ visaXS = 0.00M;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
- var groupCost = _sqlSugar.Queryable<Grp_GroupCost>()
|
|
|
- .Where(x => x.Diid == dto.Diid && x.IsDel == 0)
|
|
|
- .ToList();
|
|
|
+ #endregion
|
|
|
|
|
|
- var groupHotelNumber = _sqlSugar.Queryable<Grp_CostTypeHotelNumber>()
|
|
|
- .Where(x => x.Diid == dto.Diid && x.IsDel == 0)
|
|
|
- .ToList();
|
|
|
+ #region 火车系数
|
|
|
+ var hcpXS = 0.00M;
|
|
|
+ foreach (var (condition, result) in hcpSwitchDictionary)
|
|
|
+ {
|
|
|
+ if (condition(dto.HCPCB))
|
|
|
+ {
|
|
|
+ hcpXS = result;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
|
|
|
- var groupHotelNumberDefault = groupHotelNumber.FirstOrDefault(x => x.Type == "Default");
|
|
|
+ #region 机票系数
|
|
|
|
|
|
- HotelSum hotelSumP = new();
|
|
|
+ #region 经济舱系数
|
|
|
+ var jjcXS = 0.00M;
|
|
|
+ switch (dto.JJCCB)
|
|
|
+ {
|
|
|
+ case decimal x when (x >= 1000 && x <= 3000):
|
|
|
+ jjcXS = 2.6M;
|
|
|
+ break;
|
|
|
+ case decimal x when (x >= 3001 && x <= 8000):
|
|
|
+ jjcXS = 2.3M;
|
|
|
+ break;
|
|
|
+ case decimal x when (x >= 8001 && x <= 15000):
|
|
|
+ jjcXS = 2.1M;
|
|
|
+ break;
|
|
|
+ case decimal x when (x >= 15001 && x <= 30000):
|
|
|
+ jjcXS = 1.95M;
|
|
|
+ break;
|
|
|
+ case > 30000:
|
|
|
+ jjcXS = 1.8M;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
|
|
|
- if (groupCost.Any())
|
|
|
+ #region 公务舱系数
|
|
|
+ var gwcXS = 0.00M;
|
|
|
+ switch (dto.GWCCB)
|
|
|
{
|
|
|
- hotelSumP.SGR = groupHotelNumberDefault.SGR > 0 ? groupCost.Sum(x => x.SGR) * groupHotelNumberDefault.SGR : 0;
|
|
|
- hotelSumP.TBR = groupHotelNumberDefault.TBR > 0 ? groupCost.Sum(x => x.TBR) * groupHotelNumberDefault.TBR : 0;
|
|
|
- hotelSumP.JSES = groupHotelNumberDefault.JSES > 0 ? groupCost.Sum(x => x.JS_ES) * groupHotelNumberDefault.JSES : 0;
|
|
|
- hotelSumP.SUITE = groupHotelNumberDefault.SUITE > 0 ? groupCost.Sum(x => x.Suite) * groupHotelNumberDefault.SUITE : 0;
|
|
|
+ case decimal x when (x >= 1000 && x <= 3000):
|
|
|
+ gwcXS = 2.5M;
|
|
|
+ break;
|
|
|
+ case decimal x when (x >= 3001 && x <= 8000):
|
|
|
+ gwcXS = 2.2M;
|
|
|
+ break;
|
|
|
+ case decimal x when (x >= 8001 && x <= 15000):
|
|
|
+ gwcXS = 2.0M;
|
|
|
+ break;
|
|
|
+ case decimal x when (x >= 15001 && x <= 30000):
|
|
|
+ gwcXS = 1.85M;
|
|
|
+ break;
|
|
|
+ case > 30000:
|
|
|
+ gwcXS = 1.7M;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
}
|
|
|
+ #endregion
|
|
|
|
|
|
- #region 地接系数
|
|
|
- Func<int, decimal> coefficientByDJ = (number) =>
|
|
|
+ #region 头等舱系数
|
|
|
+ var tdcXS = 0.00M;
|
|
|
+ switch (dto.TDCCB)
|
|
|
{
|
|
|
- if (number < 1) return 0.00M;
|
|
|
+ case > 70000:
|
|
|
+ tdcXS = 1.5M;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ tdcXS = 1.9M;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
|
|
|
- return number switch
|
|
|
- {
|
|
|
- < 6 => 2.5M,
|
|
|
- 6 => 2.4M,
|
|
|
- 7 => 1.8M,
|
|
|
- 8 => 2.0M,
|
|
|
- 9 => 3.0M,
|
|
|
- 10 => 1.75M,
|
|
|
- > 10 => 1.9M,
|
|
|
- };
|
|
|
- };
|
|
|
#endregion
|
|
|
|
|
|
#region 酒店系数
|
|
|
|
|
|
+ Dictionary<decimal, List<string>> dic = new Dictionary<decimal, List<string>>()
|
|
|
+ {
|
|
|
+ {1.6M, new List<string>(){"新西兰","澳大利亚" }},
|
|
|
+ {1.5M, new List<string>(){"越南社会主义共和国",
|
|
|
+ "老挝",
|
|
|
+ "柬埔寨",
|
|
|
+ "泰国",
|
|
|
+ "缅甸",
|
|
|
+ "马来西亚",
|
|
|
+ //"新加坡",
|
|
|
+ "文莱达鲁萨兰",
|
|
|
+ "印度尼西亚",
|
|
|
+ "东帝汶"}},
|
|
|
+ {1.2M, new List<string>(){ "日本","新加坡","法国","意大利","荷兰"}},
|
|
|
+ };
|
|
|
+
|
|
|
+
|
|
|
+ #region SGR
|
|
|
+ var sgrXS = 1.25M;
|
|
|
#endregion
|
|
|
|
|
|
+ #region TBR
|
|
|
+ var tbrXS = 1.25M;
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region JSES
|
|
|
+ var jsesXS = 1.25M;
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region SUITE
|
|
|
+ var suiteXS = 1.25M;
|
|
|
+ #endregion
|
|
|
|
|
|
- return Ok(JsonView(true, "查询成功", new
|
|
|
+ var countryArr = di.VisitCountry.Split("|");
|
|
|
+
|
|
|
+ foreach (var item in dic)
|
|
|
+ {
|
|
|
+ var extsisCount = item.Value.Where(x => countryArr.Contains(x))
|
|
|
+ .Count();
|
|
|
+ if (extsisCount > 0)
|
|
|
+ {
|
|
|
+ jsesXS = item.Key;
|
|
|
+ sgrXS = item.Key;
|
|
|
+ tbrXS = item.Key;
|
|
|
+ suiteXS = item.Key;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 地接系数
|
|
|
+ var djXS = 0.00M;
|
|
|
+
|
|
|
+ switch (dto.DJRS)
|
|
|
+ {
|
|
|
+ case 2 or 3 :
|
|
|
+ djXS = 2.65M;
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ djXS = 2.6M;
|
|
|
+ break;
|
|
|
+ case 5 or 6:
|
|
|
+ djXS = 2.5M;
|
|
|
+ break;
|
|
|
+ case 7 or 8:
|
|
|
+ djXS = 2.4M;
|
|
|
+ break;
|
|
|
+ case 9 or 10:
|
|
|
+ djXS = 2.3M;
|
|
|
+ break;
|
|
|
+ case 11:
|
|
|
+ djXS = 2.2M;
|
|
|
+ break;
|
|
|
+ case 12:
|
|
|
+ djXS = 2.1M;
|
|
|
+ break;
|
|
|
+ case 13 or 14:
|
|
|
+ djXS = 2M;
|
|
|
+ break;
|
|
|
+ case 15:
|
|
|
+ djXS = 1.9M;
|
|
|
+ break;
|
|
|
+ case 16 or 17 or 18:
|
|
|
+ djXS = 1.8M;
|
|
|
+ break;
|
|
|
+ case 19 or 20:
|
|
|
+ djXS = 1.7M;
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 零用金系数
|
|
|
+ var lyjXS = 0.00M;
|
|
|
+ switch (dto.LYJRS)
|
|
|
{
|
|
|
- HotelSum = hotelSumP,
|
|
|
- CoefficientByDJ = coefficientByDJ(di.VisitPNumber) // 示例调用
|
|
|
+ case 2:
|
|
|
+ lyjXS = 1.25M;
|
|
|
+ break;
|
|
|
+ case 3 or 4 or 5:
|
|
|
+ lyjXS = 1.2M;
|
|
|
+ break;
|
|
|
+ case int number when (number > 5 && number < 10):
|
|
|
+ lyjXS = 1.15M;
|
|
|
+ break;
|
|
|
+ case > 10:
|
|
|
+ lyjXS = 1.1M;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ return Ok(JsonView(true, "查询成功", new ArrayList()
|
|
|
+ {
|
|
|
+ new { label = "火车票系数", value = hcpXS, key = "hcpXS" },
|
|
|
+ new { label = "经济舱系数", value = jjcXS, key = "jjcXS" },
|
|
|
+ new { label = "公务舱系数", value = gwcXS, key = "gwcXS" },
|
|
|
+ new { label = "头等舱系数", value = tdcXS, key = "tdcXS" },
|
|
|
+ new { label = "SGR系数", value = sgrXS, key = "sgrXS" },
|
|
|
+ new { label = "TBR系数", value = tbrXS, key = "tbrXS" },
|
|
|
+ new { label = "JSES系数", value = jsesXS, key = "jsesXS" },
|
|
|
+ new { label = "SUITE系数", value = suiteXS, key = "suiteXS" },
|
|
|
+ new { label = "地接系数", value = djXS, key = "djXS" },
|
|
|
+ new { label = "零用金系数", value = lyjXS, key = "lyjXS" },
|
|
|
+ new { label = "公务系数", value = 2M, key = "gwXS" }
|
|
|
}));
|
|
|
}
|
|
|
|