Commit e69115bd authored by 黄奎's avatar 黄奎

Merge branch 'master' of http://gitlab.oytour.com/Kui2/education

parents 6c91c2f0 5971a274
using System;
using System.Collections.Generic;
using System.Text;
using Edu.Common.Enum;
using VT.FW.DB;
namespace Edu.Model.Entity.Course
{
/// <summary>
/// 班级实体类
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_Class_Finance
{
/// <summary>
/// 编号
/// </summary>
public int FinanceId { get; set; }
/// <summary>
/// 班级编号
/// </summary>
public int ClassId { get; set; }
/// <summary>
/// 删除状态
/// </summary>
public DateStateEnum Status { get; set; }
/// <summary>
/// 是否开启班级收支 0-是,1-否
/// </summary>
public int IsOpen { get; set; }
/// <summary>
/// 集团编号
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 学校编号
/// </summary>
public int School_Id { get; set; }
/// <summary>
/// 创建人
/// </summary>
public int CreateBy { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 修改人
/// </summary>
public int UpdateBy { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime UpdateTime { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
using Edu.Model.Entity.Course;
namespace Edu.Model.ViewModel.Course
{
/// <summary>
/// 班级收支实体表
/// </summary>
[Serializable]
public class RB_Class_Finance_ViewModel: RB_Class_Finance
{
/// <summary>
/// 创建人
/// </summary>
public string CreateByName { get; set; }
/// <summary>
/// 修改人
/// </summary>
public string UpdateByName { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public string CreateTimeStr { get { return Common.ConvertHelper.FormatTime(this.CreateTime); } }
/// <summary>
/// 更新时间
/// </summary>
public string UpdateTimeStr { get { return Common.ConvertHelper.FormatTime(this.UpdateTime); } }
}
}
......@@ -727,5 +727,9 @@ namespace Edu.Model.ViewModel.Finance
/// 审批日期
/// </summary>
public DateTime? AuditDate { get; set; }
/// <summary>
/// 审批人ID
/// </summary>
public string AuditEmName { get; set; }
}
}
......@@ -76,6 +76,13 @@ namespace Edu.Module.Course
/// </summary>
private readonly RB_TeacherRepository teacherRepository = new RB_TeacherRepository();
/// <summary>
/// 开启班级收支仓储层对象
/// </summary>
private readonly RB_Class_FinanceRepository classFinanceRepository = new RB_Class_FinanceRepository();
/// <summary>
/// 获取班级列表
/// </summary>
......@@ -87,7 +94,18 @@ namespace Edu.Module.Course
}
/// <summary>
/// 获取班级课程名称以及老师信息列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="rowsCount"></param>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Class_ViewModel> GetClassAndCourseListRepository(RB_Class_ViewModel query)
{
return classRepository.GetClassAndCourseListRepository(query);
}
/// <summary>
/// 获取班级上课时间列表
......@@ -568,9 +586,9 @@ namespace Edu.Module.Course
{
extModel.DefaultTimeList = Common.Plugin.JsonHelper.DeserializeObject<List<RB_Class_Time_ViewModel>>(extModel.DefaultTimeJson);
}
if (!string.IsNullOrEmpty(extModel.DateJson) && extModel.ClassStyle!= Common.Enum.Course.ClassStyleEnum.OnLine)
{
extModel.WeekDayList= Common.Plugin.JsonHelper.DeserializeObject<List<string>>(extModel.DateJson);
if (!string.IsNullOrEmpty(extModel.DateJson) && extModel.ClassStyle != Common.Enum.Course.ClassStyleEnum.OnLine)
{
extModel.WeekDayList = Common.Plugin.JsonHelper.DeserializeObject<List<string>>(extModel.DateJson);
}
}
return extModel;
......@@ -678,7 +696,7 @@ namespace Edu.Module.Course
/// <param name="extModel"></param>
/// <param name="createBy">操作人</param>
/// <returns></returns>
public virtual bool SetClassPlanModule(RB_Class_Plan_ViewModel extModel,int createBy)
public virtual bool SetClassPlanModule(RB_Class_Plan_ViewModel extModel, int createBy)
{
bool flag;
string logContent = "";
......@@ -691,7 +709,7 @@ namespace Edu.Module.Course
{nameof(RB_Class_Plan_ViewModel.TeacherId),extModel.TeacherId },
{nameof(RB_Class_Plan_ViewModel.ClassDate),extModel.ClassDate },
};
if (oldPlanModel.ClassRoomId != extModel.ClassRoomId)
{
string roomIds = oldPlanModel.ClassRoomId + "," + extModel.ClassRoomId;
......@@ -704,7 +722,7 @@ namespace Edu.Module.Course
if (oldPlanModel.TeacherId != extModel.TeacherId)
{
string tIds = oldPlanModel.TeacherId + "," + extModel.TeacherId;
var teacherList = teacherRepository.GetTeacherListRepository(new RB_Teacher_ViewModel() {QTIds=tIds});
var teacherList = teacherRepository.GetTeacherListRepository(new RB_Teacher_ViewModel() { QTIds = tIds });
logContent += string.Format(",讲师由【{0}】修改为【{1}】.",
(teacherList?.Where(qitem => qitem.TId == oldPlanModel.TeacherId)?.FirstOrDefault()?.TeacherName ?? ""),
(teacherList?.Where(qitem => qitem.TId == extModel.TeacherId)?.FirstOrDefault()?.TeacherName ?? "")
......@@ -712,9 +730,9 @@ namespace Edu.Module.Course
}
if (oldPlanModel.ClassDate != extModel.ClassDate)
{
logContent += string.Format(",日期由【{0}】修改为【{1}】.", Common.ConvertHelper.FormatDate(oldPlanModel.ClassDate), Common.ConvertHelper.FormatDate(extModel.ClassDate));
logContent += string.Format(",日期由【{0}】修改为【{1}】.", Common.ConvertHelper.FormatDate(oldPlanModel.ClassDate), Common.ConvertHelper.FormatDate(extModel.ClassDate));
}
flag = class_PlanRepository.Update(fileds, new WhereHelper(nameof(RB_Class_Plan_ViewModel.ClassPlanId), extModel.ClassPlanId));
}
else
......@@ -757,7 +775,7 @@ namespace Edu.Module.Course
{
if (dItem.ClassTimeId > 0)
{
logContent += string.Format(",删除{0}上课时间【{1} - {2}】", Common.ConvertHelper.FormatDate(extModel.ClassDate),dItem.StartTime, dItem.EndTime);
logContent += string.Format(",删除{0}上课时间【{1} - {2}】", Common.ConvertHelper.FormatDate(extModel.ClassDate), dItem.StartTime, dItem.EndTime);
class_TimeRepository.Delete(dItem.ClassTimeId);
}
}
......@@ -1004,5 +1022,44 @@ namespace Edu.Module.Course
return studentRepository.GetStudentListRepository(query);
}
#region 班级收支信息
/// <summary>
/// 获取班级收支信息列表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Class_Finance_ViewModel> GetClassFinanceListRepository(RB_Class_Finance_ViewModel query)
{
return classFinanceRepository.GetClassFinanceListRepository(query);
}
/// <summary>
/// 新增/修改班级收支设置
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public bool SetClassFinance(RB_Class_Finance_ViewModel model)
{
var oldModel = GetClassFinanceListRepository(model).FirstOrDefault();
if (oldModel == null || oldModel.FinanceId == 0)
{
return classFinanceRepository.Insert(model) > 0;
}
else
{
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
{nameof(RB_Class_Finance_ViewModel.IsOpen),model.IsOpen},
{nameof(RB_Class_Finance_ViewModel.UpdateBy),model.UpdateBy},
{nameof(RB_Class_Finance_ViewModel.UpdateTime),model.UpdateTime}
};
return order_GuestRepository.Update(fileds, new WhereHelper(nameof(RB_Class_Finance_ViewModel.FinanceId), oldModel.FinanceId));
}
}
#endregion
}
}
......@@ -880,6 +880,40 @@ namespace Edu.Module.Course
}
}
/// <summary>
/// 获取班级订单列表
/// </summary>
/// <param name="classId"></param>
/// <param name="groupId"></param>
/// <returns></returns>
public List<RB_Order_ViewModel> GetClassOrderList_V2(int classId, int groupId)
{
var cModel = classRepository.GetEntity(classId);
//获取订单列表
var orderList = orderRepository.GetList(new RB_Order_ViewModel() { Group_Id = groupId, ClassId = classId });
//if (orderList.Any())
//{
// string orderIds = string.Join(",", orderList.Select(x => x.OrderId));
// //获取备注列表
// var remarkList = order_RemarkRepository.GetList(new RB_Order_Remark_ViewModel() { }, orderIds);
// //获取名单列表
// var guestList = order_GuestRepository.GetList(new RB_Order_Guest_ViewModel() { OrderIds = orderIds });
// foreach (var item in orderList)
// {
// item.SaleRemarkList = remarkList.Where(x => x.OrderId == item.OrderId && x.Type == 1).ToList();
// item.TeacherRemarkList = remarkList.Where(x => x.OrderId == item.OrderId && x.Type == 2).ToList();
// item.RectorRemarkList = remarkList.Where(x => x.OrderId == item.OrderId && x.Type == 3).ToList();
// item.DirectorRemarkList = remarkList.Where(x => x.OrderId == item.OrderId && x.Type == 4).ToList();
// item.GuestList = guestList.Where(x => x.OrderId == item.OrderId).ToList();
// }
//}
return orderList;
}
#endregion
#region 学生名单
......
......@@ -60,7 +60,7 @@ namespace Edu.Module.Finance
}
walist = Finance_TemplateRepository.GetAgreeOrWaitList(new Rb_Workflow_Auditrecord() { AuditStatus = WFRrocessStatus.NotAudit }, fridStr);
// tclist = GetTCIDANDTCNUMForBatch(list.Select(x => x.FrID).ToList());
// tclist = GetTCIDANDTCNUMForBatch(list.Select(x => x.FrID).ToList());
volist = voucherRepository.GetList(new RB_Voucher_Extend() { FrIdStr = fridStr });
}
......@@ -86,7 +86,8 @@ namespace Edu.Module.Finance
AuditInfo auditInfo = new AuditInfo()
{
AuditEmId = sitem.AuditEmId,
AuditDate = null
AuditDate = null,
AuditEmName = sitem.AuditEmIdName
};
item.AuditList.Add(auditInfo);
}
......
......@@ -38,10 +38,7 @@ WHERE 1=1
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.Group_Id), query.Group_Id);
}
if (query.CouseId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.CouseId), query.CouseId);
}
if (query.ClassId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.ClassId), query.ClassId);
......@@ -54,6 +51,68 @@ WHERE 1=1
return Get<RB_Class_ViewModel>(builder.ToString()).ToList();
}
/// <summary>
/// 获取班级课程名称以及老师信息列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="rowsCount"></param>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Class_ViewModel> GetClassAndCourseListRepository(RB_Class_ViewModel query)
{
var parameters = new DynamicParameters();
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*,B.CourseName,D.TeacherName,IFNULL(D.TeacherHead,'') AS TeacherHead
FROM rb_class AS A LEFT JOIN rb_course AS B ON A.CouseId=B.CourseId
LEFT JOIN rb_teacher AS D ON A.Teacher_Id=D.TId
WHERE 1=1
");
if (query != null)
{
if (query.Group_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.Group_Id), query.Group_Id);
}
if (query.School_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.School_Id), query.School_Id);
}
if (query.ClassId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.ClassId), query.ClassId);
}
if (query.Status >= 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.Status), (int)query.Status);
}
if (query.ClassStatus > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.ClassStatus), (int)query.ClassStatus);
}
if (!string.IsNullOrWhiteSpace(query.ClassName))
{
builder.AppendFormat(" AND A.{0} LIKE @ClassName ", nameof(RB_Class_ViewModel.ClassName));
parameters.Add("ClassName", "%" + query.ClassName.Trim() + "%");
}
if (!string.IsNullOrWhiteSpace(query.CourseName))
{
builder.AppendFormat(" AND B.{0} LIKE @CourseName ", nameof(RB_Class_ViewModel.CourseName));
parameters.Add("CourseName", "%" + query.CourseName.Trim() + "%");
}
if (!string.IsNullOrWhiteSpace(query.TeacherName))
{
builder.AppendFormat(" AND D.{0} LIKE @TeacherName ", nameof(RB_Class_ViewModel.TeacherName));
parameters.Add("TeacherName", "%" + query.TeacherName.Trim() + "%");
}
}
return Get<RB_Class_ViewModel>(builder.ToString(), parameters).ToList();
}
/// <summary>
/// 获取班级分页列表
/// </summary>
......@@ -79,13 +138,13 @@ WHERE 1=1
{
if (query.Group_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.Group_Id),query.Group_Id);
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.Group_Id), query.Group_Id);
}
if (query.School_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.School_Id), query.School_Id);
}
if (query.Status >=0 )
if (query.Status >= 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.Status), (int)query.Status);
}
......@@ -114,7 +173,7 @@ WHERE 1=1
parameters.Add("TeacherName", "%" + query.TeacherName.Trim() + "%");
}
}
return GetPage<RB_Class_ViewModel>(pageIndex,pageSize,out rowsCount,builder.ToString(),parameters).ToList();
return GetPage<RB_Class_ViewModel>(pageIndex, pageSize, out rowsCount, builder.ToString(), parameters).ToList();
}
/// <summary>
......@@ -199,7 +258,7 @@ WHERE 1=1
builder.AppendFormat(" AND D.{0} LIKE @TeacherName ", nameof(RB_Class_ViewModel.TeacherName));
parameters.Add("TeacherName", "%" + query.TeacherName.Trim() + "%");
}
if (!string.IsNullOrEmpty(query.StartTime))
if (!string.IsNullOrEmpty(query.StartTime))
{
builder.AppendFormat(" AND A.{0} >='{1}' ", nameof(RB_Class_ViewModel.OpenTime), query.StartTime);
}
......@@ -236,7 +295,7 @@ FROM (
FROM rb_class WHERE `Status`=0 AND ClassStatus=3 AND ClassType IN({0})
GROUP BY ClassType
) AS B ON A.ClassType=B.ClassType
",qClassTypeIds);
", qClassTypeIds);
return Get<ClassTypeStatic_ViewModel>(builder.ToString()).ToList();
}
}
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Edu.Common.Enum;
using Edu.Model.Entity.Course;
using Edu.Model.ViewModel.Course;
namespace Edu.Repository.Course
{
public class RB_Class_FinanceRepository : BaseRepository<RB_Class_Finance>
{
/// <summary>
/// 获取班级收支信息列表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Class_Finance_ViewModel> GetClassFinanceListRepository(RB_Class_Finance_ViewModel query)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*
FROM RB_Class_Finance AS A
WHERE 1=1
");
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Finance_ViewModel.Status), (int)DateStateEnum.Normal);
if (query != null)
{
if (query.Group_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Finance_ViewModel.Group_Id), query.Group_Id);
}
if (query.School_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Finance_ViewModel.School_Id), query.School_Id);
}
if (query.ClassId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Finance_ViewModel.ClassId), query.ClassId);
}
}
return Get<RB_Class_Finance_ViewModel>(builder.ToString()).ToList();
}
}
}
......@@ -7,7 +7,7 @@ using Edu.Model.ViewModel.Finance;
namespace Edu.Repository.Finance
{
public class RB_FinanceRepository:BaseRepository<RB_Finance>
public class RB_FinanceRepository : BaseRepository<RB_Finance>
{
/// <summary>
......@@ -86,6 +86,10 @@ namespace Edu.Repository.Finance
{
where += string.Format(" AND A." + nameof(RB_Finance.Type) + " ={0}", (int)model.Type);
}
if (model.FinanceType.HasValue && model.FinanceType > 0)
{
where += string.Format(" AND A." + nameof(RB_Finance.FinanceType) + " ={0}", model.FinanceType);
}
if (model.Status > 0)
{
where += string.Format(" AND A." + nameof(RB_Finance.Status) + " ={0}", (int)model.Status);
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Edu.Common.API;
using Edu.Common.Enum.Finance;
using Edu.Common.Plugin;
using Edu.Model.ViewModel.Course;
using Edu.Model.ViewModel.Finance;
using Edu.Module.Course;
using Edu.Module.Finance;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
namespace Edu.WebApi.Controllers.Finance
{
/// <summary>
/// 系统公用接口
/// </summary>
[Route("api/[controller]/[action]")]
[ApiExceptionFilter]
[ApiController]
[EnableCors("AllowCors")]
public class FinanceController : BaseController
{
private readonly FinanceModule financeModule = AOP.AOPHelper.CreateAOPObject<FinanceModule>();
private readonly OrderModule orderModule = AOP.AOPHelper.CreateAOPObject<OrderModule>();
private readonly ClassModule classModule = AOP.AOPHelper.CreateAOPObject<ClassModule>();
/// <summary>
/// 获取班级收支明细
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public ApiResult GetClassBalanceSheet()
{
int classId = base.ParmJObj.GetInt("ClassId", 0);
int schoolId = base.ParmJObj.GetInt("School_Id");
if (classId <= 0)
{
return ApiResult.Failed("班级Id不存在");
}
RB_Finance_Extend model = new RB_Finance_Extend() { TCID = classId, OrderSource = OrderResourceEnum.Education, RB_Group_Id = base.UserInfo.Group_Id, FinanceType = 2 };
var financeList = financeModule.GetFinanceInfoList(model).Where(t => (t.Status == FinanceAuditStatus.InReview || t.Status == FinanceAuditStatus.Pass || t.Status == FinanceAuditStatus.CTemporary)).ToList();
//收入
decimal IncomeReceive = 0;//应收
decimal IncomeActual = 0;//实收
var orderList = orderModule.GetClassOrderList_V2(classId, base.UserInfo.Group_Id);
IncomeReceive = (orderList != null && orderList.Any()) ? orderList.Sum(x => x.PreferPrice) : 0;
IncomeActual = (orderList != null && orderList.Any()) ? orderList.Sum(x => x.Income) : 0;
//其他
decimal OtherIncomeReceive = 0;//应收
decimal OtherIncomeActual = 0;//实收
OtherIncomeReceive = (financeList != null && financeList.Any()) ? financeList.Where(x => x.Type == WFTempLateClassEnum.IN && x.OrderID <= 0).Sum(x => x.Money ?? 0) : 0;
OtherIncomeActual = (financeList != null && financeList.Any()) ? financeList.Where(x => x.Type == WFTempLateClassEnum.IN && x.OrderID <= 0).Sum(x => x.PayMoney ?? 0) : 0;
//支出
decimal PayReceive = 0;//应付
decimal PayActual = 0;//实付
PayReceive = (financeList != null && financeList.Any()) ? financeList.Where(x => x.Type == WFTempLateClassEnum.OUT && x.OrderID <= 0).Sum(x => x.Money ?? 0) : 0;
PayActual = (financeList != null && financeList.Any()) ? financeList.Where(x => x.Type == WFTempLateClassEnum.OUT && x.OrderID <= 0).Sum(x => x.PayMoney ?? 0) : 0;
//利润
decimal ProfitActual = 0;//实际利润
decimal ProfitNow = 0;//当前利润
ProfitActual = (IncomeActual + OtherIncomeActual) - PayReceive;
ProfitNow = (IncomeActual + OtherIncomeActual) - PayActual;
//提成
decimal SaleCommission = 0;//销售提成
decimal TeacherProfitNow = 0;//老师提成
decimal MeritsProfit = 0;//绩效提成
var classInfo = classModule.GetClassAndCourseListRepository(new Model.ViewModel.Course.RB_Class_ViewModel { Group_Id = base.UserInfo.Group_Id, ClassId = classId, School_Id = schoolId }).FirstOrDefault();
var recultFiniceList = financeList.Select(x => new
{
x.FrID,
x.Type,
x.TCID,
x.OrderID,
x.Money,
x.PayMoney,
AirTotalMoney = x.AirTotalMoney ?? 0,
AirTotalPayMoney = x.AirTotalPayMoney ?? 0,
CostTypeList = x.CostTypeList.Distinct().ToList(),
x.OrderSource,
AuditList = x.AuditList.Select(t => new { t.AuditEmId, t.AuditEmName, AuditDate = t.AuditDate.HasValue ? t.AuditDate.Value.ToString("yyyy/MM/dd") : "" }),
StatusStr = EnumHelper.ToName(x.Status.Value),
x.RB_CreateByName,
CreateDate = x.CreateDate.Value.ToString("yyyy-MM-dd"),
TradeDate = x.TradeDate.HasValue ? x.TradeDate.Value.ToString("yyyy-MM-dd") : "",
TradeWayList = x.BankList?.Select(y => new { y.AccountType, y.Alias, y.BankNo, TypeName = EnumHelper.ToName(y.Type), y.CurrencyName, y.OriginalMoney, y.Money, y.Rate })
});
var classFinanceModel = classModule.GetClassFinanceListRepository(new RB_Class_Finance_ViewModel { Group_Id = base.UserInfo.Group_Id, ClassId = classId, School_Id = schoolId }).FirstOrDefault();
if (classFinanceModel == null)
{
classFinanceModel = new RB_Class_Finance_ViewModel();
classFinanceModel.Group_Id = base.UserInfo.Group_Id;
classFinanceModel.ClassId = classId;
classFinanceModel.School_Id = schoolId;
}
var resultData = new
{
ClassFinance = new { classFinanceModel.ClassId, classFinanceModel.IsOpen, classFinanceModel.Group_Id, classFinanceModel.School_Id, classFinanceModel.FinanceId },
ClassInfo = new { classInfo.ClassName, classInfo.CourseName, classInfo.TeacherName, OpenTime = classInfo.OpenTime.ToString("yyyy-MM-dd") },
IncomeReceive,
IncomeActual,
OtherIncomeReceive,
OtherIncomeActual,
PayReceive,
PayActual,
ProfitActual,
ProfitNow,
SaleCommission,
TeacherProfitNow,
MeritsProfit,
FiniceReciveList = recultFiniceList.Where(t => t.Type == WFTempLateClassEnum.IN && t.OrderID > 0),//学费收入
OtherFiniceReciveList = recultFiniceList.Where(t => t.Type == WFTempLateClassEnum.IN && t.OrderID <= 0),//其他收入
OtherFinicePayList = recultFiniceList.Where(t => t.Type == WFTempLateClassEnum.OUT),//其他支出
//退费,班级费用(书本,房租等),提成,课时费确定 在弄
};
return ApiResult.Success("", resultData);
}
/// <summary>
/// 用户信息下载
/// </summary>
[HttpPost]
public FileContentResult GetClassBalanceSheetToExcel()
{
int classId = base.ParmJObj.GetInt("ClassId", 0);
int schoolId = base.ParmJObj.GetInt("School_Id");
List<ExcelDataSource> slist = new List<ExcelDataSource>();
string ExcelName = "用户列表" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
if (classId <= 0)
{
var byteData1 = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData1, "application/octet-stream", ExcelName);
}
#region 数据信息
RB_Finance_Extend model = new RB_Finance_Extend() { TCID = classId, OrderSource = OrderResourceEnum.Education, RB_Group_Id = base.UserInfo.Group_Id, FinanceType = 2 };
var financeList = financeModule.GetFinanceInfoList(model).Where(t => (t.Status == FinanceAuditStatus.InReview || t.Status == FinanceAuditStatus.Pass || t.Status == FinanceAuditStatus.CTemporary)).ToList();
var classInfo = classModule.GetClassAndCourseListRepository(new Model.ViewModel.Course.RB_Class_ViewModel { Group_Id = base.UserInfo.Group_Id, ClassId = classId, School_Id = schoolId }).FirstOrDefault();
//收入
decimal IncomeReceive = 0;//应收
decimal IncomeActual = 0;//实收
var orderList = orderModule.GetClassOrderList_V2(classId, base.UserInfo.Group_Id);
IncomeReceive = (orderList != null && orderList.Any()) ? orderList.Sum(x => x.PreferPrice) : 0;
IncomeActual = (orderList != null && orderList.Any()) ? orderList.Sum(x => x.Income) : 0;
//其他
decimal OtherIncomeReceive = 0;//应收
decimal OtherIncomeActual = 0;//实收
OtherIncomeReceive = (financeList != null && financeList.Any()) ? financeList.Where(x => x.Type == WFTempLateClassEnum.IN && x.OrderID <= 0).Sum(x => x.Money ?? 0) : 0;
OtherIncomeActual = (financeList != null && financeList.Any()) ? financeList.Where(x => x.Type == WFTempLateClassEnum.IN && x.OrderID <= 0).Sum(x => x.PayMoney ?? 0) : 0;
//支出
decimal PayReceive = 0;//应付
decimal PayActual = 0;//实付
PayReceive = (financeList != null && financeList.Any()) ? financeList.Where(x => x.Type == WFTempLateClassEnum.OUT && x.OrderID <= 0).Sum(x => x.Money ?? 0) : 0;
PayActual = (financeList != null && financeList.Any()) ? financeList.Where(x => x.Type == WFTempLateClassEnum.OUT && x.OrderID <= 0).Sum(x => x.PayMoney ?? 0) : 0;
//利润
decimal ProfitActual = 0;//实际利润
decimal ProfitNow = 0;//当前利润
ProfitActual = (IncomeActual + OtherIncomeActual) - PayReceive;
ProfitNow = (IncomeActual + OtherIncomeActual) - PayActual;
//提成
decimal SaleCommission = 0;//销售提成
decimal TeacherProfitNow = 0;//老师提成
decimal MeritsProfit = 0;//绩效提成
List<RB_Finance_Extend> financeReciveList = financeList.Where(t => t.Type == WFTempLateClassEnum.IN).ToList();
List<RB_Finance_Extend> financePayList = financeList.Where(t => t.Type == WFTempLateClassEnum.OUT).ToList();
//var recultFiniceList = financeList.Select(x => new
//{
// x.FrID,
// x.Type,
// x.TCID,
// x.OrderID,
// x.Money,
// x.PayMoney,
// AirTotalMoney = x.AirTotalMoney ?? 0,
// AirTotalPayMoney = x.AirTotalPayMoney ?? 0,
// CostTypeList = x.CostTypeList.Distinct().ToList(),
// x.OrderSource,
// AuditList = x.AuditList.Select(t => new { t.AuditEmId, t.AuditEmName, AuditDate = t.AuditDate.HasValue ? t.AuditDate.Value.ToString("yyyy/MM/dd") : "" }),
// StatusStr = EnumHelper.ToName(x.Status.Value),
// x.RB_CreateByName,
// CreateDate = x.CreateDate.Value.ToString("yyyy-MM-dd"),
// TradeDate = x.TradeDate.HasValue ? x.TradeDate.Value.ToString("yyyy-MM-dd") : "",
// TradeWayList = x.BankList?.Select(y => new { y.AccountType, y.Alias, y.BankNo, TypeName = EnumHelper.ToName(y.Type), y.CurrencyName, y.OriginalMoney, y.Money, y.Rate })
//});
#endregion
try
{
ExcelDataSource teamBalance = new ExcelDataSource(50)
{
ExcelRows = new List<ExcelColumn>() {
new ExcelColumn(value: "班级情况",colspan:2){
IsBold = true,
CellWidth=30,
HAlignmentEnum= HAlignmentEnum.LEFT,
},
new ExcelColumn(value:"学费收入",colspan:2)
{
IsBold = true,
CellWidth=20,
HAlignmentEnum= HAlignmentEnum.LEFT
}, new ExcelColumn(value:"其他收入",colspan:2)
{
IsBold = true,
CellWidth=20,
HAlignmentEnum= HAlignmentEnum.LEFT
},
new ExcelColumn(value:"支出",colspan:2)
{
IsBold = true,
CellWidth=20,
HAlignmentEnum= HAlignmentEnum.LEFT
},
new ExcelColumn(value:"利润",colspan:2)
{
IsBold = true,
CellWidth=20,
HAlignmentEnum= HAlignmentEnum.LEFT
}, new ExcelColumn(value:"提成",colspan:2)
{
IsBold = true,
CellWidth=20,
HAlignmentEnum= HAlignmentEnum.LEFT
},
}
};
slist.Add(teamBalance);
ExcelDataSource firstRow = new ExcelDataSource(30)
{
ExcelRows = new List<ExcelColumn>() {
new ExcelColumn(value: $"班级名称:{classInfo.ClassName}",colspan:2){
HAlignmentEnum= HAlignmentEnum.LEFT,
},
new ExcelColumn(value:$"应收:¥{IncomeReceive}",colspan:2)
{
CellWidth=15,
HAlignmentEnum= HAlignmentEnum.LEFT
}
,
new ExcelColumn(value:$"应收:¥{OtherIncomeReceive}",colspan:2)
{
HAlignmentEnum= HAlignmentEnum.LEFT
}, new ExcelColumn(value:$"应付:¥{PayReceive}",colspan:2)
{
HAlignmentEnum= HAlignmentEnum.LEFT
},
new ExcelColumn(value:$"实际利润:¥{ProfitActual}",colspan:2)
{
HAlignmentEnum= HAlignmentEnum.LEFT
}, new ExcelColumn(value:$"销售提成:¥{SaleCommission}",colspan:2)
{
HAlignmentEnum= HAlignmentEnum.LEFT
}
}
};
slist.Add(firstRow);
ExcelDataSource secondRow = new ExcelDataSource(30)
{
ExcelRows = new List<ExcelColumn>() {
new ExcelColumn(value: $"课程名称:{classInfo.CourseName}",colspan:2){
HAlignmentEnum= HAlignmentEnum.LEFT,
},
new ExcelColumn(value:$"实收:¥{IncomeActual}",colspan:2)
{
CellWidth=15,
HAlignmentEnum= HAlignmentEnum.LEFT
}
,
new ExcelColumn(value:$"实收:¥{OtherIncomeActual}",colspan:2)
{
HAlignmentEnum= HAlignmentEnum.LEFT
}, new ExcelColumn(value:$"实付:¥{PayActual}",colspan:2)
{
HAlignmentEnum= HAlignmentEnum.LEFT
},
new ExcelColumn(value:$"当前利润:¥{ProfitNow}",colspan:2)
{
HAlignmentEnum= HAlignmentEnum.LEFT
}, new ExcelColumn(value:$"课时费:¥{TeacherProfitNow}",colspan:2)
{
HAlignmentEnum= HAlignmentEnum.LEFT
}
}
};
slist.Add(secondRow);
ExcelDataSource thirdRow = new ExcelDataSource(30)
{
ExcelRows = new List<ExcelColumn>() {
new ExcelColumn(value: $"开班时间:{classInfo.OpenTime.ToString("yyyy-MM-dd")}",colspan:2){
HAlignmentEnum= HAlignmentEnum.LEFT,
},
new ExcelColumn(value:$"待收:¥{(IncomeReceive-IncomeActual)}",colspan:2)
{
CellWidth=15,
HAlignmentEnum= HAlignmentEnum.LEFT
}
,
new ExcelColumn(value:$"待收:¥{(OtherIncomeReceive-OtherIncomeActual)}",colspan:2)
{
HAlignmentEnum= HAlignmentEnum.LEFT
}, new ExcelColumn(value:$"待付:¥{(PayReceive-PayActual)}",colspan:2)
{
HAlignmentEnum= HAlignmentEnum.LEFT
},
new ExcelColumn(value:"",colspan:2)
{
HAlignmentEnum= HAlignmentEnum.LEFT
}, new ExcelColumn(value:$"绩效奖励:¥{MeritsProfit}",colspan:2)
{
HAlignmentEnum= HAlignmentEnum.LEFT
}
}
};
slist.Add(thirdRow);
ExcelDataSource fourRow = new ExcelDataSource(30)
{
ExcelRows = new List<ExcelColumn>() {
new ExcelColumn(value: $"带课老师:{classInfo.TeacherName}",colspan:2){
HAlignmentEnum= HAlignmentEnum.LEFT,
},
new ExcelColumn(value:"",colspan:2)
{
HAlignmentEnum= HAlignmentEnum.LEFT
}
,
new ExcelColumn(value:"",colspan:2)
{
HAlignmentEnum= HAlignmentEnum.LEFT
}, new ExcelColumn(value:"",colspan:2)
{
HAlignmentEnum= HAlignmentEnum.LEFT
},
new ExcelColumn(value:"",colspan:2)
{
HAlignmentEnum= HAlignmentEnum.LEFT
}, new ExcelColumn(value:"",colspan:2)
{
HAlignmentEnum= HAlignmentEnum.LEFT
}
}
};
slist.Add(fourRow);
ExcelDataSource splitRow = new ExcelDataSource(40)
{
ExcelRows = new List<ExcelColumn>()
};
slist.Add(splitRow);
#region 收支列表
ExcelDataSource reciveRow = new ExcelDataSource(40)
{
ExcelRows = new List<ExcelColumn>() {
new ExcelColumn(value: "收入",colspan:9){
IsBold = true,
IsSetBorder =false,
HAlignmentEnum= HAlignmentEnum.LEFT,
}
}
};
slist.Add(reciveRow);
GenerateTeamBalanceSheet(slist, financeReciveList, WFTempLateClassEnum.IN);
ExcelDataSource payRow = new ExcelDataSource(40)
{
ExcelRows = new List<ExcelColumn>() {
new ExcelColumn(value: "支出",colspan:9){
IsBold = true,
IsSetBorder =false,
HAlignmentEnum= HAlignmentEnum.LEFT,
}
}
};
slist.Add(payRow);
GenerateTeamBalanceSheet(slist, financePayList, WFTempLateClassEnum.OUT);
#endregion
var byteData = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData, "application/octet-stream", ExcelName);
}
catch (Exception ex)
{
LogHelper.Write(ex, string.Format("GetFileFromWebApi_requestData: {0}", JsonHelper.Serialize(RequestParm)));
var byteData1 = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData1, "application/octet-stream", ExcelName);
}
}
/// <summary>
/// 添加修改班级收支设置
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetClassFinance()
{
var extModel = Common.Plugin.JsonHelper.DeserializeObject<RB_Class_Finance_ViewModel>(RequestParm.Msg.ToString());
extModel.CreateTime = DateTime.Now;
extModel.CreateBy = UserInfo.Id;
extModel.UpdateBy = UserInfo.Id;
extModel.UpdateTime = DateTime.Now;
extModel.Group_Id = this.UserInfo.Group_Id;
bool flag = classModule.SetClassFinance(extModel);
return flag ? ApiResult.Success() : ApiResult.Failed();
}
/// <summary>
/// 生成收入支出excel内容
/// </summary>
/// <param name="list">excel容器</param>
/// <param name="financeList">收支列表</param>
/// <param name="type">收支类型</param>
private void GenerateTeamBalanceSheet(List<ExcelDataSource> excelDataSourceContainer, List<RB_Finance_Extend> financeList, WFTempLateClassEnum type)
{
ExcelDataSource title = new ExcelDataSource(35)
{
ExcelRows = new List<ExcelColumn>() {
new ExcelColumn(value: "单号"){
IsBold = true,
CellWidth = 10,
HAlignmentEnum= HAlignmentEnum.LEFT,
},
new ExcelColumn(value: "费用类型"){
IsBold = true,
CellWidth = 20,
HAlignmentEnum= HAlignmentEnum.LEFT,
},
new ExcelColumn(value: "交易信息",colspan:2){
IsBold = true,
CellWidth=30,
HAlignmentEnum= HAlignmentEnum.LEFT,
},
new ExcelColumn(value: "金额"){
IsBold = true,
CellWidth=30,
HAlignmentEnum= HAlignmentEnum.LEFT,
},
new ExcelColumn(value: "交易日期"){
IsBold = true,
CellWidth=15,
HAlignmentEnum= HAlignmentEnum.LEFT,
},
new ExcelColumn(value: "制单人员"){
IsBold = true,
CellWidth=15,
HAlignmentEnum= HAlignmentEnum.LEFT,
},
new ExcelColumn(value: "审核状态"){
IsBold = true,
CellWidth=20,
HAlignmentEnum= HAlignmentEnum.LEFT,
},
new ExcelColumn(value: "当前审核人"){
IsBold = true,
CellWidth=20,
HAlignmentEnum= HAlignmentEnum.LEFT,
}
}
};
excelDataSourceContainer.Add(title);
if (financeList != null && financeList.Count > 0)
{
foreach (var item in financeList)
{
ExcelDataSource content = new ExcelDataSource(30);
List<ExcelColumn> colums = new List<ExcelColumn>
{
new ExcelColumn(value: item.FrID.ToString())
{
HAlignmentEnum = HAlignmentEnum.LEFT
},
new ExcelColumn(value: item.CostTypeList != null ? string.Join(",", item.CostTypeList) : "")
{
HAlignmentEnum = HAlignmentEnum.LEFT
},
new ExcelColumn(value: item.BankList != null ? GetCostDetial(item.BankList) : "", colspan: 2)
{
HAlignmentEnum = HAlignmentEnum.LEFT
}
};
if (type == WFTempLateClassEnum.IN)
{
colums.Add(new ExcelColumn(value: $"应收:¥{item.Money} 实收:¥{item.PayMoney}")
{
HAlignmentEnum = HAlignmentEnum.LEFT
});
}
else
{
colums.Add(new ExcelColumn(value: $"应付:¥{item.Money} 实付:¥{item.PayMoney}")
{
HAlignmentEnum = HAlignmentEnum.LEFT
});
}
colums.Add(new ExcelColumn(value: item.TradeDate.HasValue ? item.TradeDate.Value.ToString("yyyy/MM/dd") : "")
{
HAlignmentEnum = HAlignmentEnum.LEFT
});
string EmName = item.RB_CreateByName;
colums.Add(new ExcelColumn(value: string.IsNullOrWhiteSpace(EmName) ? "" : EmName)
{
HAlignmentEnum = HAlignmentEnum.LEFT
});
colums.Add(new ExcelColumn(value: EnumHelper.ToName(item.Status.Value))
{
HAlignmentEnum = HAlignmentEnum.LEFT
});
List<string> auditNameList = new List<string>();
foreach (var audit in item.AuditList)
{
auditNameList.Add(audit.AuditEmName);
}
colums.Add(new ExcelColumn(value: string.Join(",", auditNameList))
{
HAlignmentEnum = HAlignmentEnum.LEFT
});
content.ExcelRows = colums;
excelDataSourceContainer.Add(content);
}
}
}
/// <summary>
/// 获取交易明细信息
/// </summary>
/// <param name="bankList"></param>
/// <returns></returns>
private string GetCostDetial(List<RB_TradeWay_Extend> wayList)
{
if (wayList.Count > 0)
{
List<string> wayDetialList = new List<string>();
foreach (var item in wayList)
{
wayDetialList.Add($"{item.Alias} {item.CurrencyName}:{item.OriginalMoney} 汇率:{item.Rate}");
}
return string.Join(",", wayDetialList);
}
else
{
return "";
}
}
}
}
......@@ -26,6 +26,7 @@
<ProjectReference Include="..\Edu.Common\Edu.Common.csproj" />
<ProjectReference Include="..\Edu.Model\Edu.Model.csproj" />
<ProjectReference Include="..\Edu.Module.Course\Edu.Module.Course.csproj" />
<ProjectReference Include="..\Edu.Module.Finance\Edu.Module.Finance.csproj" />
<ProjectReference Include="..\Edu.Module.Public\Edu.Module.Public.csproj" />
<ProjectReference Include="..\Edu.Module.Question\Edu.Module.Question.csproj" />
<ProjectReference Include="..\Edu.Module.System\Edu.Module.System.csproj" />
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment