using EyeSoft.Logging; using NPOI.SS.Formula.Functions; using OASystem.Domain; using OASystem.Domain.Entities.Groups; using OASystem.Domain.ViewModels.Groups; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OASystem.Infrastructure.Repositories.Groups { /// /// 费用审核仓储 /// public class FeeAuditRepository:BaseRepository { public FeeAuditRepository(SqlSugarClient sqlSugar) : base(sqlSugar) { } /// /// 费用自动审核 /// /// /// 1.酒店 76 /// 2.op 79 /// /// 团组Id /// 数据Id(模块类型主表Id) /// public async Task FeeAutomaticAudit(int feeType, int diId, int dataId) { var _view = new JsonView() { Code = 201, Msg = "自动审核操作失败" }; if (diId < 1) { _view.Msg = MsgTips.DiId; return _view; } if (dataId < 1) { _view.Msg = MsgTips.Id; return _view; } List stids = new List() { 17, 66 }; var setData = _sqlSugar.Queryable().Where(x => x.IsDel == 0 && stids.Contains(x.STid)).ToList(); string _teamCurrency = string.Empty; var groupInfo = _sqlSugar.Queryable().Where(x => x.IsDel == 0 && x.DiId == diId).First(); if (groupInfo == null) { _view.Msg = $"团组成本信息未填写!"; return _view; } _teamCurrency = groupInfo.Currency; decimal _teamRate = groupInfo.Rate; //币种验证 统一为currencycode三字码 if (int.TryParse(_teamCurrency,out int currency)) _teamCurrency = setData.Find(x => x.Id == currency)?.Name ?? ""; string costContentSql = $"Select * From Grp_GroupCost"; var costContents = _sqlSugar.SqlQueryable(costContentSql).Where(x => x.IsDel == 0 && x.Diid == diId).ToList(); if (costContents.Count < 1) { _view.Msg = $"团组成本信息未填写!"; return _view; } //处理 成本详细信息 日期为空 for (int i = 0; i < costContents.Count; i++) { if (string.IsNullOrEmpty( costContents[i].Date)) { int index = i - 1; if (index >= 0) { costContents[i].Date = costContents[index].Date; var dtBool = DateTime.TryParse(costContents[i].Date, out DateTime _dateTime); if (dtBool) { costContents[i].CurrTime = _dateTime; } } } else { var dtBool = DateTime.TryParse(costContents[i].Date, out DateTime _dateTime); if (dtBool) { costContents[i].CurrTime = _dateTime; } } } if (feeType == 1) { //1089 对冲账或其他 不在审核范围 var hotelCostInfo = _sqlSugar.Queryable().Where(x => x.IsDel == 0 && x.DiId == diId && x.Id == dataId && x.CheckType != 1089).First(); var hotelCostDetails = _sqlSugar.Queryable().Where(x => x.IsDel == 0 && x.DiId == diId && x.HrId == dataId).ToList(); if (hotelCostInfo == null) { _view.Msg = $"酒店费用数据未填写"; QuashAudit(76, diId, dataId); return _view; } //酒店费用金额 == 0 不自动审核 if (hotelCostInfo.CardPrice == 0.0000M) { _view.Msg = $"酒店费用金额 == 0 不自动审核"; QuashAudit(76, diId, dataId); return _view; } //获取C表汇率 decimal _rate = 1.0000M; var roomFeeInfo = hotelCostDetails.Where(x => x.PriceType == 1).First(); if (roomFeeInfo == null) { _view.Msg = $"酒店房间费用付款数据未填写"; return _view; } _rate = roomFeeInfo.Rate == 0.0000M ? 1.0000M : roomFeeInfo.Rate; bool isAutoAudit = true; //是否自动审核 DateTime checkIn = Convert.ToDateTime(hotelCostInfo.CheckInDate), checkOut = Convert.ToDateTime(hotelCostInfo.CheckOutDate); if (checkOut > checkIn) checkOut = checkOut.AddDays(-1); //房费计算,结束日期为前一天 var hotelCostInfos = costContents.Where(x => x.CurrTime >= checkIn && x.CurrTime <= checkOut).ToList(); if (hotelCostInfos.Count < 1) isAutoAudit = false; decimal otherFee = hotelCostDetails.Where(x => x.PriceType != 1).Sum(x => x.Price * (x.Rate == 0.0000M ? 1.0000M : x.Rate)); if (otherFee > 0) { otherFee /= (checkOut-checkIn).Days; } var hotelCostInfosGroup = hotelCostInfos.GroupBy(x => x.Date); foreach (var item in hotelCostInfosGroup) { var hotelSingleRoomFee = item.Sum(x => x.HotelSingleRoomFee) * _teamRate; //成本单间费用 var hotelDoubleRoomFee = item.Sum(x => x.HotelDoubleRoomFee) * _teamRate; //成本双人间费用 var hotelSuiteFee = item.Sum(x => x.HotelSuiteFee) * _teamRate; //成本套房费用 var hotelSuiteRoomFee = item.Sum(x => x.HotelSuiteRoomFee) * _teamRate; //成本其他房型间费用 //1.判断费用是否 <= 成本费用 //1.1 判断单间费用 decimal singleRoomPrice = (hotelCostInfo.SingleRoomPrice + otherFee) * _rate; //酒店录入费用 if (singleRoomPrice > 0) if (singleRoomPrice > hotelSingleRoomFee) isAutoAudit = false; //1.2 判断双人间费用 decimal doubleRoomPrice = (hotelCostInfo.DoubleRoomPrice + otherFee) * _rate;//酒店录入费用 if (doubleRoomPrice > 0) if (doubleRoomPrice > hotelDoubleRoomFee) isAutoAudit = false; //1.3 判断套房费用 decimal suiteRoomPrice = (hotelCostInfo.SuiteRoomPrice + otherFee) * _rate;//酒店录入费用 if (suiteRoomPrice > 0) if (suiteRoomPrice > hotelSuiteFee) isAutoAudit = false; //1.4 判断其他房型费用 decimal otherRoomPrice = (hotelCostInfo.OtherRoomPrice + otherFee) * _rate;//酒店录入费用 if (otherRoomPrice > 0) if (otherRoomPrice > hotelSuiteRoomFee) isAutoAudit = false; } //2.判断是否自动审核 if (isAutoAudit) { var ccpUpdate = _sqlSugar.Updateable() .SetColumns(it => it.IsAuditGM == 3) .SetColumns(it => it.AuditGMOperate == 4) .SetColumns(it => it.AuditGMDate == DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")) .Where(s => s.DIId == diId && s.CTable == 76 && s.CId == dataId) .ExecuteCommand(); if (ccpUpdate > 0) { _view.Code = 200; _view.Msg = "自动审核执行成功"; return _view; } } else { //撤销该条数据的自动审核 --> 该条数据的审核状态是自动审核 3 --> 0 var quashStatus = QuashAudit(76,diId,dataId); if (quashStatus) { _view.Code = 200; _view.Msg = "费用超团组成本,自动审核撤销成功!"; return _view; } } } else if (feeType == 2) { //1.基础数据参数验证 var priceType = new List() { 1062 //1062 尾款 }; var opinfos = _sqlSugar.Queryable() .Where(x => x.IsDel == 0 && x.DiId == diId && x.Id == dataId && !priceType.Contains(x.PriceType)) .First(); //var opinfos = _sqlSugar.Queryable() // .Where(x => x.IsDel == 0 && x.DiId == diId && x.Id == dataId ) // .First(); if (opinfos == null) { _view.Msg = $"OP费用费用类型属于“尾款”或者 内容未填写"; return _view; } //1.含超时费用/超支费用 手动审核 if (opinfos.SelectCheck.Contains("超时") || opinfos.SelectCheck.Contains("超支") || opinfos.SelectCheck.Contains("尾款")) { _view.Msg = @$"OP费用含尾款/超支/超时费用,请手动审核"; return _view; } //1.参数验证 var opCheckPriceTyeps = opinfos.SelectCheck.Split(','); var opCheckPriceTyepIds = setData.Where(x => opinfos.SelectCheck.Split(',').Contains(x.Name)).Select(x=>x.Id).ToList(); var opContents = _sqlSugar.Queryable() .Where(x => x.IsDel == 0 && x.DiId == diId && x.CTGGRId == dataId && opCheckPriceTyepIds.Contains(x.SId)) .OrderBy(x => x.DatePrice, OrderByType.Asc) .ToList(); if (opContents.Count < 1) { _view.Msg = $"OP费用费用内容未填写"; return _view; } //获取C表汇率 decimal _opRate = 1.0000M; var payInfo = _sqlSugar.Queryable().Where(x => x.IsDel == 0 && x.DIId == diId && x.CTable == 79 && x.CId == dataId).First(); if (payInfo == null) { _view.Msg = $"OP费用付款数据未填写"; return _view; } _opRate = payInfo.DayRate; string opCurrencyName = setData.Find(x => x.Id == opContents[0].Currency)?.Name ?? ""; //团组、OP币种 验证是否一致 if (opCurrencyName.Equals(_teamCurrency)) { _opRate = payInfo.DayRate; _teamRate = payInfo.DayRate; } var opBasicDatas = setData.Where(x => x.STid == 17).ToList(); //费用类型基础数据 bool isAutoAudit = true; if (!DateTime.TryParse(opinfos.ServiceStartTime, out DateTime startDt1) || !DateTime.TryParse(opinfos.ServiceEndTime, out DateTime endDt1)) { _view.Msg = $"OP费用服务起止日期格式不正确!"; return _view; } DateTime startDt = startDt1; DateTime endDt = endDt1; var opCostDatas = costContents.Where(it => Convert.ToDateTime(it.Date) >= startDt && Convert.ToDateTime(it.Date) <= endDt).ToList(); if (opCostDatas.Count < 1) { _view.Msg = $"该时间段内团组成本未填写!"; return _view; } var noAuditFeeTypeIds = new List { 982 ,//982 车超时费 -- 暂无 96 ,//96 接送机费 -- 暂无 97 ,//97 其他费用 -- 暂无 992 ,//992 住补费用 -- 暂无 1059,//1059 导游超时费用 -- 暂无 1070,//1070 尾款金额 -- 暂无 1071,//1071 其他额外费用 -- 暂无 1073,//1073 翻译超时费 -- 暂无 1074,//1074 早餐超支费用 -- 暂无 1075,//1075 午餐超支费用 -- 暂无 1076,//1076 晚餐超支费用 -- 暂无 }; //费用类型筛选 包含 feeTypeIds && 包含这些类型费用大于0 var noAuditFeeContents = opContents.Where(x => x.Price > 0 && noAuditFeeTypeIds.Contains(x.SId)).ToList(); if (noAuditFeeContents.Count > 0) { _view.Msg = @$"OP费用含尾款/超支/超时费用,请手动审核"; return _view; } //2.按天按项 检查费用是否超过预算 var opDayContent = opContents.GroupBy(x => x.DatePrice); foreach (var item in opDayContent) { var opCostInfo = opCostDatas.Where(x => Convert.ToDateTime(x.Date) == item.Key).ToList(); if (opCostInfo.Count < 1) continue; //车费 91 var opCarCost = item.FirstOrDefault(x => x.SId == 91); if (opCarCost != null) if (opCarCost.Price * _opRate > _teamRate * opCostInfo.Sum(x => x.CarFee)) isAutoAudit = false; //982 车超时费 -- 暂无 //92 导游费 var opGuideCost = item.FirstOrDefault(x => x.SId == 92); if (opGuideCost != null) if (opGuideCost.Price * _opRate > _teamRate * opCostInfo.Sum(x => x.GuideFee)) isAutoAudit = false; //94 导游景点费 var opGuideScenicCost = item.FirstOrDefault(x => x.SId == 94); if (opGuideScenicCost != null) if (opGuideScenicCost.Price * _opRate > _teamRate * opCostInfo.Sum(x => x.GuideScenicFee)) isAutoAudit = false; //95 导游小费 var opGuideTipCost = item.FirstOrDefault(x => x.SId == 95); if (opGuideTipCost != null) if (opGuideTipCost.Price * _opRate > _teamRate * opCostInfo.Sum(x => x.GuideTipFee)) isAutoAudit = false; //983 导游餐补 var opGuideMealCost = item.FirstOrDefault(x => x.SId == 983); if (opGuideMealCost != null) if (opGuideMealCost.Price * _opRate > _teamRate * opCostInfo.Sum(x => x.GuideMealFee)) isAutoAudit = false; //984 导游房补 var opGuideRoomCost = item.FirstOrDefault(x => x.SId == 984); if (opGuideRoomCost != null) if (opGuideRoomCost.Price * _opRate > _teamRate * opCostInfo.Sum(x => x.GuideRoomFee)) isAutoAudit = false; //985 导游交通 var opGuideTrafficCost = item.FirstOrDefault(x => x.SId == 985); if (opGuideTrafficCost != null) if (opGuideTrafficCost.Price * _opRate > _teamRate * opCostInfo.Sum(x => x.GuideTrafficFee)) isAutoAudit = false; //96 接送机费 -- 暂无 //97 其他费用 -- 暂无 //979 司机工资 var opDriverCost = item.FirstOrDefault(x => x.SId == 979); if (opDriverCost != null) if (opDriverCost.Price * _opRate > _teamRate * opCostInfo.Sum(x => x.DriverFee)) isAutoAudit = false; //980 司机小费 var opDriverTipCost = item.FirstOrDefault(x => x.SId == 980); if (opDriverTipCost != null) if (opDriverTipCost.Price * _opRate > _teamRate * opCostInfo.Sum(x => x.DriverTipFee)) isAutoAudit = false; //981 司机餐补 var opDriverMealCost = item.FirstOrDefault(x => x.SId == 981); if (opDriverMealCost != null) if (opDriverMealCost.Price * _opRate > _teamRate * opCostInfo.Sum(x => x.DriverMealFee)) isAutoAudit = false; //988 客户早餐费用 var opClientBreakfastCost = item.FirstOrDefault(x => x.SId == 988); if (opClientBreakfastCost != null) if (opClientBreakfastCost.Price * _opRate > _teamRate * opCostInfo.Sum(x => x.ClientBreakfastFee)) isAutoAudit = false; //93 客户午餐费用 var opClientLunchCost = item.FirstOrDefault(x => x.SId == 93); if (opClientLunchCost != null) if (opClientLunchCost.Price * _opRate > _teamRate * opCostInfo.Sum(x => x.ClientLunchFee)) isAutoAudit = false; //989 客户晚餐费用 var opClientDinnerCost = item.FirstOrDefault(x => x.SId == 989); if (opClientDinnerCost != null) if (opClientDinnerCost.Price * _opRate > _teamRate * opCostInfo.Sum(x => x.ClientDinnerFee)) isAutoAudit = false; //990 景点门票费 var opScenicTicketCost = item.FirstOrDefault(x => x.SId == 990); if (opScenicTicketCost != null) if (opScenicTicketCost.Price * _opRate > _teamRate * opCostInfo.Sum(x => x.ScenicTicketFee)) isAutoAudit = false; //991 饮料/零食/水果 var opDrinkSnackFruitCost = item.FirstOrDefault(x => x.SId == 991); if (opDrinkSnackFruitCost != null) if (opDrinkSnackFruitCost.Price * _opRate > _teamRate * opCostInfo.Sum(x => x.DrinkSnackFruitFee)) isAutoAudit = false; //992 住补费用 -- 暂无 //994 翻译费 var opTranslatorCost = item.FirstOrDefault(x => x.SId == 994); if (opTranslatorCost != null) if (opTranslatorCost.Price * _opRate > _teamRate * opCostInfo.Sum(x => x.TranslatorFee)) isAutoAudit = false; //1059 导游超时费用 -- 暂无 //1070 尾款金额 -- 暂无 //1071 其他额外费用 -- 暂无 //1073 翻译超时费 -- 暂无 //1074 早餐超支费用 -- 暂无 //1075 午餐超支费用 -- 暂无 //1076 晚餐超支费用 -- 暂无 } //更改审核状态 if (isAutoAudit) { var ccpUpdate = _sqlSugar.Updateable() .SetColumns(it => it.IsAuditGM == 3) .SetColumns(it => it.AuditGMOperate == 4) .SetColumns(it => it.AuditGMDate == DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")) .Where(s => s.DIId == diId && s.CTable == 79 && s.CId == dataId) .ExecuteCommand(); if (ccpUpdate > 0) { _view.Code = 200; _view.Msg = "自动审核执行成功!"; return _view; } } else { //撤销该条数据的自动审核 --> 该条数据的审核状态是自动审核 3 --> 0 if (QuashAudit(79,diId,dataId)) { _view.Code = 200; _view.Msg = "费用超团组成本,自动审核撤销成功!"; return _view; } } } else _view.Msg = $"请传入有效的feeType参数"; return _view; } /// /// hotel、op 撤销自动审核的数据 /// /// /// 酒店 76 /// op 79 /// /// /// /// private bool QuashAudit(int type, int diId, int dataId) { //撤销该条数据的自动审核 --> 该条数据的审核状态是自动审核 3 --> 0 var ccpInfo = _sqlSugar.Queryable() .Where(s => s.DIId == diId && s.CTable == type && s.CId == dataId && s.IsAuditGM == 3) .First(); if (ccpInfo != null) { var ccpUpdate = _sqlSugar.Updateable() .SetColumns(it => it.IsAuditGM == 0) .SetColumns(it => it.AuditGMOperate == 0) .SetColumns(it => it.AuditGMDate == string.Empty) .Where(s => s.Id == ccpInfo.Id) .ExecuteCommand(); if (ccpUpdate > 0) { return true; } } return false; } // /// /// 费用自动审核 /// /// /// 1.酒店 76 /// 2.op 79 /// /// 团组Id /// 数据Id(模块类型主表Id) /// public string IsOverBudget(int feeType, int diId, int dataId) { string _view ="-"; if (diId < 1) { return _view; } if (dataId < 1) { return _view; } List stids = new List() { 17, 66 }; var setData = _sqlSugar.Queryable().Where(x => x.IsDel == 0 && stids.Contains(x.STid)).ToList(); string _teamCurrency = string.Empty; var groupInfo = _sqlSugar.Queryable().Where(x => x.IsDel == 0 && x.DiId == diId).First(); if (groupInfo == null) { return _view; } _teamCurrency = groupInfo.Currency; //币种验证 统一为currencycode三字码 if (int.TryParse(_teamCurrency, out int currency)) _teamCurrency = setData.Find(x => x.Id == currency)?.Name ?? ""; string costContentSql = $"Select * From Grp_GroupCost"; var costContents = _sqlSugar.SqlQueryable(costContentSql).Where(x => x.IsDel == 0 && x.Diid == diId).ToList(); if (costContents.Count < 1) { return _view; } //处理 成本详细信息 日期为空 for (int i = 0; i < costContents.Count; i++) { if (string.IsNullOrEmpty(costContents[i].Date)) { int index = i - 1; if (index >= 0) { costContents[i].Date = costContents[index].Date; } } } if (feeType == 1) { var hotelCostInfo = _sqlSugar.Queryable().Where(x => x.IsDel == 0 && x.DiId == diId && x.Id == dataId).First(); var hotelCostDetails = _sqlSugar.Queryable().Where(x => x.IsDel == 0 && x.DiId == diId && x.HrId == dataId).ToList(); if (hotelCostInfo == null) return _view; //获取C表汇率 decimal _rate = 1.0000M; var roomFeeInfo = hotelCostDetails.Where(x => x.PriceType == 1).First(); if (roomFeeInfo == null) return _view; _rate = roomFeeInfo.Rate == 0.0000M ? 1.0000M : roomFeeInfo.Rate; bool isAutoAudit = true; //是否自动审核 DateTime checkIn = Convert.ToDateTime(hotelCostInfo.CheckInDate), checkOut = Convert.ToDateTime(hotelCostInfo.CheckOutDate); if (checkOut > checkIn) checkOut = checkOut.AddDays(-1); //房费计算,结束日期为前一天 var hotelCostInfos = costContents.Where(x => Convert.ToDateTime(x.Date) >= checkIn && Convert.ToDateTime(x.Date) <= checkOut).ToList(); if (hotelCostInfos.Count < 1) isAutoAudit = false; decimal otherFee = hotelCostDetails.Where(x => x.PriceType != 1).Sum(x => x.Price * (x.Rate == 0.0000M ? 1.0000M : x.Rate)); if (otherFee > 0) { otherFee /= (checkOut - checkIn).Days; } var hotelCostInfosGroup = hotelCostInfos.GroupBy(x => x.Date); foreach (var item in hotelCostInfosGroup) { decimal hotelSingleRoomFee = item.Sum(x => x.HotelSingleRoomFee); decimal hotelDoubleRoomFee = item.Sum(x => x.HotelDoubleRoomFee); decimal hotelSuiteFee = item.Sum(x => x.HotelSuiteFee); decimal hotelSuiteRoomFee = item.Sum(x => x.HotelSuiteRoomFee); //1.判断费用是否 <= 成本费用 //1.1 判断单间费用 decimal singleRoomPrice = (hotelCostInfo.SingleRoomPrice + otherFee) * _rate; if (singleRoomPrice > 0) if (singleRoomPrice > hotelSingleRoomFee * _rate) isAutoAudit = false; //1.2 判断双人间费用 decimal doubleRoomPrice = (hotelCostInfo.DoubleRoomPrice + otherFee) * _rate; if (doubleRoomPrice > 0) if (doubleRoomPrice > hotelDoubleRoomFee * _rate) isAutoAudit = false; //1.3 判断套房费用 decimal suiteRoomPrice = (hotelCostInfo.SuiteRoomPrice + otherFee) * _rate; if (suiteRoomPrice > 0) if (suiteRoomPrice > hotelSuiteFee * _rate) isAutoAudit = false; //1.4 判断其他房型费用 decimal otherRoomPrice = (hotelCostInfo.OtherRoomPrice + otherFee) * _rate; if (otherRoomPrice > 0) if (otherRoomPrice > hotelSuiteRoomFee * _rate) isAutoAudit = false; } //2.判断是否自动审核 if (isAutoAudit) { return $"未超预算"; } } else if (feeType == 2) { //1.基础数据参数验证 var priceType = new List() { 1062 }; var opinfos = _sqlSugar.Queryable() .Where(x => x.IsDel == 0 && x.DiId == diId && x.Id == dataId && !priceType.Contains(x.PriceType)) .First(); //var opinfos = _sqlSugar.Queryable() // .Where(x => x.IsDel == 0 && x.DiId == diId && x.Id == dataId ) // .First(); if (opinfos == null) return _view; //1.含超时费用/超支费用 手动审核 if (opinfos.SelectCheck.Contains("超时") || opinfos.SelectCheck.Contains("超支") || opinfos.SelectCheck.Contains("尾款")) return _view; //1.参数验证 var opCheckPriceTyeps = opinfos.SelectCheck.Split(','); var opCheckPriceTyepIds = setData.Where(x => opinfos.SelectCheck.Split(',').Contains(x.Name)).Select(x => x.Id).ToList(); var opContents = _sqlSugar.Queryable() .Where(x => x.IsDel == 0 && x.DiId == diId && x.CTGGRId == dataId && opCheckPriceTyepIds.Contains(x.SId)) .OrderBy(x => x.DatePrice, OrderByType.Asc) .ToList(); if (opContents.Count < 1) return _view; //获取C表汇率 decimal _rate = 1.0000M; var payInfo = _sqlSugar.Queryable().Where(x => x.IsDel == 0 && x.DIId == diId && x.CTable == 79 && x.Id == dataId).First(); if (payInfo == null) return _view; _rate = payInfo.DayRate; string opCurrencyName = setData.Find(x => x.Id == opContents[0].Currency)?.Name ?? ""; var opBasicDatas = setData.Where(x => x.STid == 17).ToList(); //费用类型基础数据 bool isAutoAudit = true; if (!DateTime.TryParse(opinfos.ServiceStartTime, out DateTime startDt1) || !DateTime.TryParse(opinfos.ServiceEndTime, out DateTime endDt1)) return _view; DateTime startDt = startDt1; DateTime endDt = endDt1; var opCostDatas = costContents.Where(it => Convert.ToDateTime(it.Date) >= startDt && Convert.ToDateTime(it.Date) <= endDt).ToList(); if (opCostDatas.Count < 1) return _view; var noAuditFeeTypeIds = new List { 982 ,//982 车超时费 -- 暂无 96 ,//96 接送机费 -- 暂无 97 ,//97 其他费用 -- 暂无 992 ,//992 住补费用 -- 暂无 1059,//1059 导游超时费用 -- 暂无 1070,//1070 尾款金额 -- 暂无 1071,//1071 其他额外费用 -- 暂无 1073,//1073 翻译超时费 -- 暂无 1074,//1074 早餐超支费用 -- 暂无 1075,//1075 午餐超支费用 -- 暂无 1076,//1076 晚餐超支费用 -- 暂无 }; //费用类型筛选 包含 feeTypeIds && 包含这些类型费用大于0 var noAuditFeeContents = opContents.Where(x => x.Price > 0 && noAuditFeeTypeIds.Contains(x.SId)).ToList(); if (noAuditFeeContents.Count > 0) return _view; //2.按天按项 检查费用是否超过预算 var opDayContent = opContents.GroupBy(x => x.DatePrice); foreach (var item in opDayContent) { var opCostInfo = opCostDatas.Where(x => Convert.ToDateTime(x.Date) == item.Key).ToList(); if (opCostInfo.Count < 1) continue; //车费 91 var opCarCost = item.FirstOrDefault(x => x.SId == 91); if (opCarCost != null) if (opCarCost.Price * _rate > _rate * opCostInfo.Sum(x => x.CarFee)) isAutoAudit = false; //982 车超时费 -- 暂无 //92 导游费 var opGuideCost = item.FirstOrDefault(x => x.SId == 92); if (opGuideCost != null) if (opGuideCost.Price * _rate > _rate * opCostInfo.Sum(x => x.GuideFee)) isAutoAudit = false; //94 导游景点费 var opGuideScenicCost = item.FirstOrDefault(x => x.SId == 94); if (opGuideScenicCost != null) if (opGuideScenicCost.Price * _rate > _rate * opCostInfo.Sum(x => x.GuideScenicFee)) isAutoAudit = false; //95 导游小费 var opGuideTipCost = item.FirstOrDefault(x => x.SId == 95); if (opGuideTipCost != null) if (opGuideTipCost.Price * _rate > _rate * opCostInfo.Sum(x => x.GuideTipFee)) isAutoAudit = false; //983 导游餐补 var opGuideMealCost = item.FirstOrDefault(x => x.SId == 983); if (opGuideMealCost != null) if (opGuideMealCost.Price * _rate > _rate * opCostInfo.Sum(x => x.GuideMealFee)) isAutoAudit = false; //984 导游房补 var opGuideRoomCost = item.FirstOrDefault(x => x.SId == 984); if (opGuideRoomCost != null) if (opGuideRoomCost.Price * _rate > _rate * opCostInfo.Sum(x => x.GuideRoomFee)) isAutoAudit = false; //985 导游交通 var opGuideTrafficCost = item.FirstOrDefault(x => x.SId == 985); if (opGuideTrafficCost != null) if (opGuideTrafficCost.Price * _rate > _rate * opCostInfo.Sum(x => x.GuideTrafficFee)) isAutoAudit = false; //96 接送机费 -- 暂无 //97 其他费用 -- 暂无 //979 司机工资 var opDriverCost = item.FirstOrDefault(x => x.SId == 979); if (opDriverCost != null) if (opDriverCost.Price * _rate > _rate * opCostInfo.Sum(x => x.DriverFee)) isAutoAudit = false; //980 司机小费 var opDriverTipCost = item.FirstOrDefault(x => x.SId == 980); if (opDriverTipCost != null) if (opDriverTipCost.Price * _rate > _rate * opCostInfo.Sum(x => x.DriverTipFee)) isAutoAudit = false; //981 司机餐补 var opDriverMealCost = item.FirstOrDefault(x => x.SId == 981); if (opDriverMealCost != null) if (opDriverMealCost.Price * _rate > _rate * opCostInfo.Sum(x => x.DriverMealFee)) isAutoAudit = false; //988 客户早餐费用 var opClientBreakfastCost = item.FirstOrDefault(x => x.SId == 988); if (opClientBreakfastCost != null) if (opClientBreakfastCost.Price * _rate > _rate * opCostInfo.Sum(x => x.ClientBreakfastFee)) isAutoAudit = false; //93 客户午餐费用 var opClientLunchCost = item.FirstOrDefault(x => x.SId == 93); if (opClientLunchCost != null) if (opClientLunchCost.Price * _rate > _rate * opCostInfo.Sum(x => x.ClientLunchFee)) isAutoAudit = false; //989 客户晚餐费用 var opClientDinnerCost = item.FirstOrDefault(x => x.SId == 989); if (opClientDinnerCost != null) if (opClientDinnerCost.Price * _rate > _rate * opCostInfo.Sum(x => x.ClientDinnerFee)) isAutoAudit = false; //990 景点门票费 var opScenicTicketCost = item.FirstOrDefault(x => x.SId == 990); if (opScenicTicketCost != null) if (opScenicTicketCost.Price * _rate > _rate * opCostInfo.Sum(x => x.ScenicTicketFee)) isAutoAudit = false; //991 饮料/零食/水果 var opDrinkSnackFruitCost = item.FirstOrDefault(x => x.SId == 991); if (opDrinkSnackFruitCost != null) if (opDrinkSnackFruitCost.Price * _rate > _rate * opCostInfo.Sum(x => x.DrinkSnackFruitFee)) isAutoAudit = false; //992 住补费用 -- 暂无 //994 翻译费 var opTranslatorCost = item.FirstOrDefault(x => x.SId == 994); if (opTranslatorCost != null) if (opTranslatorCost.Price * _rate > _rate * opCostInfo.Sum(x => x.TranslatorFee)) isAutoAudit = false; //1059 导游超时费用 -- 暂无 //1070 尾款金额 -- 暂无 //1071 其他额外费用 -- 暂无 //1073 翻译超时费 -- 暂无 //1074 早餐超支费用 -- 暂无 //1075 午餐超支费用 -- 暂无 //1076 晚餐超支费用 -- 暂无 } //更改审核状态 if (isAutoAudit) return _view; } else return _view; return _view; } } }