using OASystem.Domain.Dtos.Financial; using OASystem.Domain.Entities.Financial; using OASystem.Domain.Entities.Groups; using OASystem.Domain.ViewModels.Financial; using OASystem.Domain.ViewModels.Groups; using OASystem.Infrastructure.Repositories.Financial; using OASystem.Infrastructure.Repositories.Groups; namespace OASystem.API.OAMethodLib { /// <summary> /// 团组提成 /// 雷怡 2023-08-14 16:04 /// </summary> public static class GroupCommission { //团组信息 private readonly static DelegationInfoRepository _dirRep = AutofacIocManager.Instance.GetService<DelegationInfoRepository>(); //团组实付金额 private readonly static CreditCardPaymentRepository _ccpRep = AutofacIocManager.Instance.GetService<CreditCardPaymentRepository>(); //团组应收款项 private readonly static ForeignReceivablesRepository _frRep = AutofacIocManager.Instance.GetService<ForeignReceivablesRepository>(); //团组已收款项 private readonly static ProceedsReceivedRepository _prRep = AutofacIocManager.Instance.GetService<ProceedsReceivedRepository>(); //团组其他款项 private readonly static OtherPriceRepository _opRep = AutofacIocManager.Instance.GetService<OtherPriceRepository>(); /// <summary> /// 获取团组提成 Page List /// </summary> public static async Task<Result> GetCommissionPageList(GroupCommissionDto dto) { Result result = new Result() { Code = -1 }; var groupResult = await _dirRep.GetGroupPageList(dto); if (groupResult.Code != 0) { result.Code = groupResult.Code; result.Msg = groupResult.Msg; return result; } if (groupResult.Data == null) { } // ListViewBase<DelegationPageListView> groupData = JsonConvert.DeserializeObject<ListViewBase<DelegationPageListView>>(groupResult.Data); result.Data = groupResult.Data; List<int> diids = new List<int>(); foreach (var item in result.Data.DataList) { diids.Add(item.Id); } await GetCommissionByDiids(diids.ToArray()); return result; } /// <summary> /// 根据团组Id计算 团组利润 /// </summary> /// <param name="DiId">团组Id</param> public static async Task<Fin_GroupProfitInfoView> GetCommissionByDiid(int DiId) { int[] ints = new int[DiId]; decimal sumFr = 0.00M, //团组 应收款项 sumPr = 0.00M, //团组 已收款项 refund = 0.00M, //团组 退款和其他费用 cost = 0.00M; //团组 成本费用 if (DiId == 0) return new Fin_GroupProfitInfoView(); #region 计算各项费用 //应收款项 Result frData = await _frRep.GetGroupReceivablesByDiid(DiId); if (frData.Code == 0 && frData.Data != null) { foreach (var item in frData.Data) { sumFr += item.Price; } } //已收款项 Result prData = await _prRep.GetGroupReceivedByDiid(DiId); if (frData.Code == 0 && frData.Data != null) { foreach (var item in prData.Data) { sumPr += item.Price; } } //收款退还费用 Result ccpData = await _ccpRep.GetGroupRefundByDiid(DiId, true); if (ccpData.Code == 0 && ccpData.Data != null) { foreach (var item in ccpData.Data) { refund += item.Price; } } //实际的团组类型已收金额需除去退款 sumPr = sumPr - refund; //团组与非团组产生的成本费用数据 Result _ccpData = await _ccpRep.GetGroupPaymentInfoByDiid(DiId, true); if (_ccpData.Code == 0 && _ccpData.Data != null) { foreach (Grp_Fin_CreditCardPaymentView item in _ccpData.Data) { if (item.PayThenMoney != 0M) cost += item.PayThenMoney * item.DayRate; else cost += item.PayMoney * (item.PayPercentage * 0.01M) * item.DayRate; } //实际的团组成本需除去退款 cost -= refund; } #endregion //团组净利润=已收金额-成本 decimal groupProfit = sumPr - cost; //团组尾款=应收款项-已收款项 decimal groupRatainage = sumPr - sumPr; return new Fin_GroupProfitInfoView() { ReceivableFund = sumFr, ReceivedFund = sumPr, Refund = refund, Cost = cost, RetainedProfits = groupProfit, FinalPayment = groupRatainage }; } /// <summary> /// 根据团组 Ids 计算 团组利润 /// </summary> /// <param name="DiIds"></param> /// <returns></returns> public static async Task<List<Fin_GroupProfitInfoView>> GetCommissionByDiids(int[] DiIds) { if (DiIds.Length <= 0) return new List<Fin_GroupProfitInfoView>(); List<Fin_GroupProfitInfoView> fin_GroupProfitInfoViews = new List<Fin_GroupProfitInfoView>(); #region string //string _diidsStr = string.Empty; //#region 处理Diid //StringBuilder diidSb = new StringBuilder(); //for (int i = 0; i < DiIds.Length; i++) //{ // if (i == DiIds.Length - 1) // { // diidSb.Append(DiIds[i]); // } // else // { // diidSb.Append(DiIds[i]).Append(","); // } //} //_diidsStr = diidSb.ToString().Trim(); //#endregion #endregion #region 计算各项费用 //应收款项 Result frData = await _frRep.GetGroupReceivablesByDiids(DiIds); //已收款项 Result prData = await _prRep.GetGroupReceivedByDiids(DiIds); //收款退还费用 Result ccpData = await _ccpRep.GetGroupRefundByDiids(DiIds, true); //团组与非团组产生的成本费用数据 Result ccpData1 = await _ccpRep.GetGroupPaymentInfoByDiids(DiIds, true); foreach (int item in DiIds) { decimal sumFr = 0.00M, //团组 应收款项 sumPr = 0.00M, //团组 已收款项 refund = 0.00M, //团组 退款和其他费用 cost = 0.00M; //团组 成本费用 //团组 应收款项 if (frData.Code == 0 && frData.Data != null) { List<Fin_ForeignReceivables> _frData = JsonConvert.DeserializeObject<List<Fin_ForeignReceivables>> (JsonConvert.SerializeObject(frData.Data)); _frData = _frData.Where(fr => item == fr.Diid).ToList(); foreach (Fin_ForeignReceivables itemFr in _frData) { sumPr += itemFr.Price; } } //团组 已收款项 if (prData.Code == 0 && prData.Data != null) { List<Fin_ProceedsReceived> _prData = JsonConvert.DeserializeObject<List<Fin_ProceedsReceived>> (JsonConvert.SerializeObject(prData.Data)); _prData = _prData.Where(pr => item == pr.Diid).ToList(); foreach (var itemPr in _prData) { sumFr += itemPr.Price; } } //团组 退款和其他费用 if (ccpData.Code == 0 && ccpData.Data != null) { List<GroupRefundView> _ccpData = JsonConvert.DeserializeObject<List<GroupRefundView>> (JsonConvert.SerializeObject(ccpData.Data)); _ccpData = _ccpData.Where(ccp => item == ccp.DIId).ToList(); foreach (var itemCcp in _ccpData) { refund += itemCcp.Price; } } //实际的团组类型已收金额需除去退款 sumPr = sumPr - refund; if (ccpData1.Code == 0 && ccpData1.Data != null) { List<Grp_CreditCardPayment> _ccpData1 = JsonConvert.DeserializeObject<List<Grp_CreditCardPayment>> (JsonConvert.SerializeObject(ccpData1.Data)); _ccpData1 = _ccpData1.Where(ccp => item == ccp.DIId).ToList(); foreach (Grp_CreditCardPayment itemCcp in _ccpData1) { if (itemCcp.PayThenMoney != 0M) cost += itemCcp.PayThenMoney * itemCcp.DayRate; else cost += itemCcp.PayMoney * (itemCcp.PayPercentage * 0.01M) * itemCcp.DayRate; } //实际的团组成本需除去退款 cost -= refund; } #endregion decimal groupProfit = 0.00M, //团组净利润=已收金额-成本 groupRatainage = 0.00M; //团组尾款=应收款项-已收款项 groupProfit = sumPr - cost; groupRatainage = sumPr - sumPr; fin_GroupProfitInfoViews.Add(new Fin_GroupProfitInfoView() { Diid = item, ReceivableFund = sumFr, ReceivedFund = sumPr, Refund = refund, Cost = cost, RetainedProfits = groupProfit, FinalPayment = groupRatainage }); } return fin_GroupProfitInfoViews; } } }