From 441b15c101b13eb76e86343a328478ff943e72e6 Mon Sep 17 00:00:00 2001 From: "ZLRVVKA66D37PS6\\Administrator" <843336775@qq.com> Date: Tue, 13 Apr 2021 14:51:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=99=E8=82=B2=E7=95=99=E5=AD=A6=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataStatistics/RB_Edu_RevenueReport.cs | 2 +- .../ViewModel/Course/RB_Order_ViewModel.cs | 5 + .../RB_Edu_RevenueReport_Extend.cs | 4 + .../StudyAbroad/RB_StudyAbroad_ViewModel.cs | 10 ++ Edu.Module.Finance/FinanceModule.cs | 127 +++++++++++++++++- Edu.Repository/Course/RB_OrderRepository.cs | 8 ++ .../RB_Edu_RevenueReportRepository.cs | 4 + .../StudyAbroad/RB_StudyAbroadRepository.cs | 11 +- 8 files changed, 168 insertions(+), 3 deletions(-) diff --git a/Edu.Model/Entity/DataStatistics/RB_Edu_RevenueReport.cs b/Edu.Model/Entity/DataStatistics/RB_Edu_RevenueReport.cs index 8cb07517..768d68c0 100644 --- a/Edu.Model/Entity/DataStatistics/RB_Edu_RevenueReport.cs +++ b/Edu.Model/Entity/DataStatistics/RB_Edu_RevenueReport.cs @@ -181,7 +181,7 @@ namespace Edu.Model.Entity.Finance public int Rb_Group_Id { get; set; } /// <summary> - /// æ•°æ®ç±»åž‹ 1åŸ¹è® 2ç•™å¦ + /// æ•°æ®ç±»åž‹ 1åŸ¹è® 2ç•™å¦ 3就业 /// </summary> public int DateType { get; set; } diff --git a/Edu.Model/ViewModel/Course/RB_Order_ViewModel.cs b/Edu.Model/ViewModel/Course/RB_Order_ViewModel.cs index 051bc02c..e37cd51a 100644 --- a/Edu.Model/ViewModel/Course/RB_Order_ViewModel.cs +++ b/Edu.Model/ViewModel/Course/RB_Order_ViewModel.cs @@ -14,6 +14,11 @@ namespace Edu.Model.ViewModel.Course /// </summary> public string ClassIds { get; set; } + /// <summary> + /// 项目ids + /// </summary> + public string SourceIds { get; set; } + /// <summary> /// 讲师å称 /// </summary> diff --git a/Edu.Model/ViewModel/DataStatistics/RB_Edu_RevenueReport_Extend.cs b/Edu.Model/ViewModel/DataStatistics/RB_Edu_RevenueReport_Extend.cs index c358a39c..a2414704 100644 --- a/Edu.Model/ViewModel/DataStatistics/RB_Edu_RevenueReport_Extend.cs +++ b/Edu.Model/ViewModel/DataStatistics/RB_Edu_RevenueReport_Extend.cs @@ -13,6 +13,10 @@ namespace Edu.Model.ViewModel.Finance [DB(ConnectionName = "DataStatisticsConnection")] public class RB_Edu_RevenueReport_Extend : RB_Edu_RevenueReport { + /// <summary> + /// 是å¦æŸ¥è¯¢ç•™å¦ç›¸å…³ 1是 + /// </summary> + public int IsSelectStuAbroad { get; set; } /// <summary> /// 开始时间 /// </summary> diff --git a/Edu.Model/ViewModel/StudyAbroad/RB_StudyAbroad_ViewModel.cs b/Edu.Model/ViewModel/StudyAbroad/RB_StudyAbroad_ViewModel.cs index d27a5237..ae001342 100644 --- a/Edu.Model/ViewModel/StudyAbroad/RB_StudyAbroad_ViewModel.cs +++ b/Edu.Model/ViewModel/StudyAbroad/RB_StudyAbroad_ViewModel.cs @@ -74,5 +74,15 @@ namespace Edu.Model.ViewModel.StudyAbroad /// ç•™å¦å°±ä¸šç¼–å·æŸ¥è¯¢ä½¿ç”¨ /// </summary> public string QIds { get; set; } + + /// <summary> + /// 开始时间 + /// </summary> + public string StartTime { get; set; } + + /// <summary> + /// 结æŸæ—¶é—´ + /// </summary> + public string EndTime { get; set; } } } diff --git a/Edu.Module.Finance/FinanceModule.cs b/Edu.Module.Finance/FinanceModule.cs index 2c9effb6..7587f9f1 100644 --- a/Edu.Module.Finance/FinanceModule.cs +++ b/Edu.Module.Finance/FinanceModule.cs @@ -8,6 +8,7 @@ using Edu.Model.ViewModel.Course; using Edu.Model.ViewModel.Finance; using Edu.Repository.Course; using Edu.Repository.Finance; +using Edu.Repository.StudyAbroad; using Edu.Repository.User; namespace Edu.Module.Finance @@ -97,6 +98,14 @@ namespace Edu.Module.Finance /// å¦æ ¡ä»“储层对象 /// </summary> private readonly RB_SchoolRepository schoolRepository = new RB_SchoolRepository(); + /// <summary> + /// ç•™å¦å°±ä¸š + /// </summary> + private readonly RB_StudyAbroadRepository studyAbroadRepository = new RB_StudyAbroadRepository(); + /// <summary> + /// 供应商 + /// </summary> + private readonly RB_SupplierRepository supplierRepository = new RB_SupplierRepository(); @@ -295,7 +304,7 @@ namespace Edu.Module.Finance { string classIds = string.Join(",", classList.Select(x => x.ClassId)); //æ ¹æ®ç级查询所有的订å•åˆ—表 - orderAllList = orderRepository.GetList(new RB_Order_ViewModel() { Group_Id = GroupId, ClassIds = classIds, Q_OrderState = 1 }); + orderAllList = orderRepository.GetList(new RB_Order_ViewModel() { Group_Id = GroupId, ClassIds = classIds, OrderType = Common.Enum.Sale.OrderTypeEnum.CourseOrder, Q_OrderState = 1 }); //查询ç级下所有的财务å•æ® FAllList = RB_FinanceRepository.GetDataStatisticsListThree(new RB_Finance_Extend() { TCIDStr = classIds, OrderSource = OrderResourceEnum.Education }); teacherBonusList = teaching_BonusDetailRepository.GetList(new RB_Teaching_BonusDetail_ViewModel { Group_Id = GroupId, ClassIds = classIds }); @@ -403,6 +412,122 @@ namespace Edu.Module.Finance } } + + #region ç•™å¦å°±ä¸š + //查询日期范围内所有的留å¦å°±ä¸šé¡¹ç›® + var saList = studyAbroadRepository.GetStudyAbroadListExtRepository(new Model.ViewModel.StudyAbroad.RB_StudyAbroad_ViewModel() { Group_Id = GroupId, SaleState = Common.Enum.Sale.SaleStateEnum.Sell, StartTime = STime, EndTime = ETime }); + if (saList.Any()) { + string saIds = string.Join(",", saList.Select(x => x.Id)); + //æ ¹æ®ç级查询所有的订å•åˆ—表 + orderAllList = orderRepository.GetList(new RB_Order_ViewModel() { Group_Id = GroupId, SourceIds = saIds, OrderType = Common.Enum.Sale.OrderTypeEnum.StudyabroadOrder, Q_OrderState = 1 }); + //查询ç级下所有的财务å•æ® + FAllList = RB_FinanceRepository.GetDataStatisticsListThree(new RB_Finance_Extend() { TCIDStr = saIds, OrderSource = OrderResourceEnum.EducationStudy }); + } + //排除å–消/åˆ é™¤é¡¹ç›® + oldlist = edu_RevenueReportRepository.GetList(new RB_Edu_RevenueReport_Extend() { StartTime = STime, EndTime = ETime, IsSelectStuAbroad = 1, Rb_Group_Id = GroupId }); + delList = oldlist.Where(x => !saList.Select(y => y.Id).Contains(x.ClassId)).ToList(); + if (delList.Any()) + { + edu_RevenueReportRepository.DeleteBatch(delList); + } + + foreach (var item in saList) { + try + { + Console.WriteLine("ç•™å¦å°±ä¸šï¼š" + item.Name + "|" + item.Id); + bool IsNew = false;//是å¦æ–°å¢ž + var orderList = orderAllList.Where(x => x.SourceId == item.Id).ToList(); + var financeList = FAllList.Where(x => x.TCID == item.Id).ToList(); + var demodel = oldlist.Where(x => x.ClassId == item.Id).FirstOrDefault(); + if (demodel == null) + { + IsNew = true; + //新增 + demodel = new RB_Edu_RevenueReport_Extend() + { + Id = 0, + ClassId = item.Id, + Rb_Group_Id = GroupId, + SchoolId = item.School_Id, + SchoolName = item.SchoolName, + DateType = item.Type == 1 ? 2 : 3 + }; + } + #region åˆå§‹åŒ–æ•°æ® + demodel.ClassBegins = item.CreateTime; + demodel.ClassName = item.Name; + demodel.ClassState = 0; + demodel.CourseId = 0; + demodel.CourseName = item.SupplierName; + demodel.TeacherId = 0; + demodel.TeacherName = item.Type == 1 ? "ç•™å¦" : "就业"; + demodel.SchoolId = item.School_Id; + demodel.SchoolName = item.SchoolName; + #endregion + + #region ç»Ÿè®¡æ•°æ® + #region è®¢å• + demodel.YingShou = orderList.Sum(x => x.PreferPrice); + demodel.ShiShou = orderList.Sum(x => x.Income); + demodel.TuiKuan = orderList.Sum(x => x.Refund); + demodel.PingTaiShuiJin = orderList.Sum(x => x.PlatformTax); + demodel.ZaiTu = 0;//æš‚æ—¶åœ¨é€”æœªåš + demodel.YouHui = orderList.Sum(x => x.DiscountMoney); + demodel.DaiShou = (demodel.YingShou - demodel.ShiShou + demodel.TuiKuan - demodel.PingTaiShuiJin - demodel.YouHui); + demodel.YiShou = -demodel.DaiShou; + demodel.GuestNum = orderList.Sum(x => x.GuestNum); + #endregion + #region 财务å•æ® + //排åºè®¢å•å•æ® + var cfinanceList = financeList.Where(x => x.OrderID == 0 && x.Type == WFTempLateClassEnum.IN).ToList(); + demodel.QTShouRu = cfinanceList.Where(y => y.Is_Cashier == 1).Sum(x => x.Money ?? 0); + demodel.QTShouRu -= cfinanceList.Where(x => x.Is_Cashier == 1 && x.Fee > 0).GroupBy(x => new { x.FrID, x.Fee }).Sum(x => x.Key.Fee ?? 0); + //支出 + demodel.TiCheng = orderList.Where(x => x.IsCommissionGive == 1).Sum(x => x.CommissionMoney);//销售ææˆ + demodel.ClassFee = 0;//è€å¸ˆææˆ -ç•™å¦æš‚定 + demodel.JiXiaoMoney = 0;//绩效ææˆ -ç•™å¦æš‚定 + + var ofinanceList = financeList.Where(x => x.Type == WFTempLateClassEnum.OUT).ToList();// 支出包括退款 + demodel.QTZhiChu = ofinanceList.Sum(x => x.Money ?? 0); + demodel.YingFu = demodel.QTZhiChu + demodel.TiCheng + demodel.ClassFee + demodel.JiXiaoMoney; + #endregion + + demodel.MaoLi = demodel.ShiShou - demodel.YingFu; + demodel.ShiJiLiRun = demodel.MaoLi + demodel.QTShouRu; + + //毛利率 + if (demodel.ShiShou != 0) + { + demodel.MaoLiRate = Math.Round(demodel.MaoLi / demodel.ShiShou * 100, 2, MidpointRounding.AwayFromZero); + } + if (demodel.GuestNum > 0) + { + //å¹³å‡æ”¶å…¥=实收+自费收入+其他收入+佣金收入(属于佣金的所有)/å‚团+å•å›¢æŠ¥å…¥ + demodel.AverageIncome = Math.Round((demodel.ShiShou + demodel.QTShouRu) / demodel.GuestNum, 2, MidpointRounding.AwayFromZero); + //å¹³å‡æˆæœ¬=应付/å‚团+å•å›¢æŠ¥å…¥ + demodel.AverageCost = Math.Round((demodel.YingFu / demodel.GuestNum), 2, MidpointRounding.AwayFromZero); + } + //å¹³å‡åˆ©æ¶¦=å¹³å‡æ”¶å…¥-å¹³å‡æˆæœ¬ + demodel.AverageProfit = demodel.AverageIncome - demodel.AverageCost; + #endregion + + if (IsNew) + { + edu_RevenueReportRepository.Insert(demodel); + } + else + { + edu_RevenueReportRepository.Update(demodel); + } + } + catch (Exception ex) + { + Console.WriteLine("ç•™å¦å°±ä¸šï¼š" + item.Name + "|" + item.Id + ",错误:" + ex.Message); + LogHelper.Write(ex, "SetEduRevenueReport"); + } + } + #endregion + var fumodel = edu_UpdateRecordRepository.GetList(new RB_Report_UpdateRecord() { Type = 1 }).FirstOrDefault(); if (fumodel != null) { diff --git a/Edu.Repository/Course/RB_OrderRepository.cs b/Edu.Repository/Course/RB_OrderRepository.cs index 15b55851..9516adc4 100644 --- a/Edu.Repository/Course/RB_OrderRepository.cs +++ b/Edu.Repository/Course/RB_OrderRepository.cs @@ -35,6 +35,10 @@ namespace Edu.Repository.Course { where += $@" and o.{nameof(RB_Order_ViewModel.OrderId)} ={demodel.OrderId}"; } + if (demodel.OrderType > 0) + { + where += $@" and o.{nameof(RB_Order_ViewModel.OrderType)} ={(int)demodel.OrderType}"; + } if (demodel.ClassId > 0) { where += $@" and o.{nameof(RB_Order_ViewModel.ClassId)} ={demodel.ClassId}"; @@ -47,6 +51,10 @@ namespace Edu.Repository.Course { where += $@" and o.{nameof(RB_Order_ViewModel.ClassId)} in({demodel.ClassIds})"; } + if (!string.IsNullOrEmpty(demodel.SourceIds)) + { + where += $@" and o.{nameof(RB_Order_ViewModel.SourceId)} in({demodel.SourceIds})"; + } if (demodel.OrderState > 0) { where += $@" and o.{nameof(RB_Order_ViewModel.OrderState)} ={(int)demodel.OrderState}"; diff --git a/Edu.Repository/DataStatistics/RB_Edu_RevenueReportRepository.cs b/Edu.Repository/DataStatistics/RB_Edu_RevenueReportRepository.cs index 153668b5..7980a682 100644 --- a/Edu.Repository/DataStatistics/RB_Edu_RevenueReportRepository.cs +++ b/Edu.Repository/DataStatistics/RB_Edu_RevenueReportRepository.cs @@ -33,6 +33,10 @@ namespace Edu.Repository.Finance { where += string.Format(" AND A." + nameof(RB_Edu_RevenueReport_Extend.DateType) + "=" + model.DateType); } + if (model.IsSelectStuAbroad == 1) + { + where += string.Format(" AND A." + nameof(RB_Edu_RevenueReport_Extend.DateType) + " in(2,3)"); + } if (model.ClassId >0) { where += string.Format(" AND A." + nameof(RB_Edu_RevenueReport_Extend.ClassId) + "=" + model.ClassId); diff --git a/Edu.Repository/StudyAbroad/RB_StudyAbroadRepository.cs b/Edu.Repository/StudyAbroad/RB_StudyAbroadRepository.cs index 10a96f36..9f52b47b 100644 --- a/Edu.Repository/StudyAbroad/RB_StudyAbroadRepository.cs +++ b/Edu.Repository/StudyAbroad/RB_StudyAbroadRepository.cs @@ -176,8 +176,9 @@ WHERE 1=1 var parameters = new DynamicParameters(); StringBuilder builder = new StringBuilder(); builder.AppendFormat(@" -SELECT A.*,IFNULL(B.`Name`,'') AS SupplierName,IFNULL(B.ContractUrl,'') AS ContractUrl +SELECT A.*,IFNULL(B.`Name`,'') AS SupplierName,IFNULL(B.ContractUrl,'') AS ContractUrl,IFNULL(C.SName,'') AS SchoolName FROM RB_StudyAbroad AS A LEFT JOIN rb_supplier AS B ON A.SupplierId=B.Id +LEFT JOIN rb_school AS C ON A.School_Id=C.SId WHERE 1=1 "); builder.AppendFormat(" AND A.{0}={1}", nameof(RB_StudyAbroad_ViewModel.Status), (int)DateStateEnum.Normal); @@ -216,6 +217,14 @@ WHERE 1=1 { builder.AppendFormat(" AND A.{0}={1}", nameof(RB_StudyAbroad_ViewModel.Id), query.Id); } + if (!string.IsNullOrEmpty(query.StartTime)) + { + builder.AppendFormat(" AND A.{0} >='{1}'", nameof(RB_StudyAbroad_ViewModel.CreateTime), query.StartTime); + } + if (!string.IsNullOrEmpty(query.EndTime)) + { + builder.AppendFormat(" AND A.{0} <='{1} 23:59:59'", nameof(RB_StudyAbroad_ViewModel.CreateTime), query.EndTime); + } return Get<RB_StudyAbroad_ViewModel>(builder.ToString(), parameters).ToList(); } } -- 2.18.1