Commit 6d806ddd authored by 黄奎's avatar 黄奎

拆分相关修改

parent 8fe51b5c
......@@ -75,7 +75,7 @@ namespace Edu.Model.ViewModel.Course
public int OrderStudentCount { get; set; }
/// <summary>
/// 学名称
/// 学名称
/// </summary>
public string SchoolName { get; set; }
......
using Edu.Model.Entity.EduTask;
using Edu.Model.CacheModel;
using Edu.Model.Entity.EduTask;
using System;
using System.Collections.Generic;
using System.Text;
......@@ -45,4 +46,65 @@ namespace Edu.Model.ViewModel.EduTask
/// </summary>
public string EffectiveDateStr { get { return Common.ConvertHelper.FormatDate(this.EffectiveDate); } }
}
/// <summary>
/// 订单转班分拆生成财务单据实体类
/// </summary>
public class OrderChangeFinace
{
/// <summary>
/// 更改类型(1-转班,2-分拆)
/// </summary>
public int ChangeType { get; set; }
/// <summary>
/// 应收/退款
/// </summary>
public decimal InCome { get; set; }
/// <summary>
/// 学员编号
/// </summary>
public int GuestId { get; set; }
/// <summary>
/// 学员名称
/// </summary>
public string GuestName { get; set; }
/// <summary>
/// 操作人员
/// </summary>
public UserInfo UserInfo { get; set; }
/// <summary>
/// 班级编号
/// </summary>
public int ClassId { get; set; }
/// <summary>
/// 班级所在校区编号
/// </summary>
public int Class_School_Id { get; set; }
/// <summary>
/// 校区名称
/// </summary>
public string SName { get; set; }
/// <summary>
/// 班级名称
/// </summary>
public string ClassName { get; set; }
/// <summary>
/// 订单编号
/// </summary>
public int OrderId { get; set; }
/// <summary>
/// 关联财务单号
/// </summary>
public int ReFinanceId { get; set; }
}
}
......@@ -1156,7 +1156,6 @@ namespace Edu.Module.EduTask
{
student_BackClassRepository.UpdateGuestStateRepository(receiptModel, auditModel);
}
}
return flag;
}
......
......@@ -68,11 +68,6 @@ namespace Edu.Module.EduTask
/// </summary>
private readonly RB_Order_GuestRepository guestRepository = new RB_Order_GuestRepository();
/// <summary>
/// 校区仓储层对象
/// </summary>
private readonly RB_SchoolRepository schoolRepository = new RB_SchoolRepository();
/// <summary>
/// 用户日志
/// </summary>
......@@ -201,7 +196,11 @@ namespace Edu.Module.EduTask
return false;
}
var oldOrderModel = orderRepository.GetEntity(orderChangeModel.SourceOrderId);
var newClassModel = classRepository.GetEntity(orderChangeModel.NewClassId);
var classList= classRepository.GetClassListRepository(new RB_Class_ViewModel() {
Q_ClassIds = orderChangeModel.NewClassId + "," + oldOrderModel.ClassId
});
var oldClassModel = classList?.Where(qitem => qitem.ClassId == oldOrderModel.ClassId)?.FirstOrDefault() ?? new RB_Class_ViewModel();
var newClassModel = classList?.Where(qitem => qitem.ClassId == orderChangeModel.NewClassId)?.FirstOrDefault() ?? new RB_Class_ViewModel();
var newCourseModel = courseRepository.GetEntity(orderChangeModel.NewCourseId);
var userInfo = UserReidsCache.GetUserLoginInfo(oldOrderModel.EnterID);
var guestClassHours = GetGuestFinishMinutesModule(orderChangeModel.OrderGuestId.ToString());
......@@ -292,8 +291,36 @@ namespace Edu.Module.EduTask
if (flag)
{
var RelevanceFrId = CreateExpenditure(newPreferPrice, guestModel.Id,guestModel.GuestName, userInfo, oldOrderModel.ClassId, oldOrderModel.OrderId, out string msg1);
var InCome = CreateInCome(newPreferPrice, orderModel.NewGuestId, guestModel.GuestName, userInfo, orderModel.ClassId, orderModel.OrderId, RelevanceFrId, out string msg2);
var changeModel = new OrderChangeFinace()
{
ChangeType=1,
InCome= newPreferPrice,
GuestId=guestModel.Id,
GuestName=guestModel.GuestName,
UserInfo=userInfo,
ClassId=oldOrderModel.ClassId,
ClassName=oldClassModel.ClassName,
Class_School_Id=oldClassModel.School_Id,
SName=oldClassModel.SchoolName,
OrderId=oldOrderModel.OrderId,
};
var RelevanceFrId = CreateExpenditure(changeModel, out string msg1);
var changeModel2 = new OrderChangeFinace()
{
ChangeType = 1,
InCome = newPreferPrice,
GuestId = orderModel.NewGuestId,
GuestName = guestModel.GuestName,
UserInfo = userInfo,
ClassId = orderModel.ClassId,
ClassName= newClassModel.ClassName,
Class_School_Id=newClassModel.School_Id,
SName=newClassModel.SchoolName,
OrderId = orderModel.OrderId,
ReFinanceId = RelevanceFrId
};
var InCome = CreateInCome(changeModel2, out string msg2);
flag = RelevanceFrId > 0 && InCome > 0;
}
#endregion
......@@ -313,9 +340,9 @@ namespace Edu.Module.EduTask
}
/// <summary>
/// 转班收入
/// 转班、分拆收入
/// </summary>
public int CreateInCome(decimal InCome,int guestId,string GuestName, UserInfo userInfo, int classId, int orderId, int ReFinanceId, out string msg)
public int CreateInCome(OrderChangeFinace change, out string msg)
{
msg = "";
#region 新增财务单据
......@@ -325,13 +352,12 @@ namespace Edu.Module.EduTask
{
CostTypeId=533,
Number = 1,
OriginalMoney = InCome,
UnitPrice = InCome,
Remark = "学员【"+GuestName+"】收入"
OriginalMoney = change.InCome,
UnitPrice = change.InCome,
Remark = "学员【"+change.GuestName+"】收入"
}
};
var classModel = classRepository.GetEntity(classId);
string Remark = "【" + (classModel?.ClassName ?? "") + "】下,订单" + orderId + " 客人转班";
string Remark = "【" + (change.ClassName ?? "") + "】下,订单" + change.OrderId + " 客人"+(change.ChangeType==1? "转班" : "分拆");
var financeObj = new
{
BType = 1,
......@@ -339,28 +365,28 @@ namespace Edu.Module.EduTask
IsPublic = 7,
ClientType = 3659,
CurrencyId = 1,
GuestId=guestId,
WBMoney = InCome,
GuestId=change.GuestId,
WBMoney = change.InCome,
PayDate = DateTime.Now.ToString("yyyy-MM-dd"),
TemplateId = 186,
OrderSource = 17,
OrderID = orderId,
TCIDList = new List<int>() { classId },
OrderID = change.OrderId,
TCIDList = new List<int>() { change.ClassId },
OtherType = 0,
ReFinanceId,
CallBackReFrId = ReFinanceId,
change.ReFinanceId,
CallBackReFrId = change.ReFinanceId,
Remark,
detailList,
CreateBy = userInfo.Id,
RB_Branch_Id = classModel.School_Id,
RB_Depart_Id = userInfo.DeptId,
RB_Group_Id = userInfo.Group_Id,
RB_CreateByName = userInfo.AccountName,
RB_DepartName = userInfo.DeptName,
RB_BranchName = schoolRepository.GetEntity(classModel.School_Id)?.SName ?? "",
RB_GroupName = userInfo.GroupName,
CreateBy =change.UserInfo.Id,
RB_Branch_Id = change.Class_School_Id,
RB_Depart_Id = change.UserInfo.DeptId,
RB_Group_Id = change.UserInfo.Group_Id,
RB_CreateByName = change.UserInfo.AccountName,
RB_DepartName = change.UserInfo.DeptName,
RB_BranchName = change?.SName ?? "",
RB_GroupName = change.UserInfo.GroupName,
FinanceType = 2,
RemitterName = "转班",
RemitterName =change.ChangeType==1? "转班":"分拆",
TradeDate = Common.ConvertHelper.FormatDate(DateTime.Now),
AccountNumber = Common.ConvertHelper.FormatDate(DateTime.Now),
};
......@@ -381,29 +407,31 @@ namespace Edu.Module.EduTask
{
Id = 0,
Type = 1,
CreateBy = userInfo.Id,
CreateBy = change.UserInfo.Id,
CreateTime = DateTime.Now,
Group_Id = userInfo.Group_Id,
LogContent = "生成学员转班财务单据【" + orderId + "】",
School_Id = userInfo.School_Id,
Group_Id = change.UserInfo.Group_Id,
LogContent = "生成学员"+(change.ChangeType == 1 ? "转班" : "分拆") +"财务单据【" + change.OrderId + "】",
School_Id = change.UserInfo.School_Id,
SourceId = 0
});
}
else
{
string message = parmsJob.GetStringValue("message");
LogHelper.Write("CreateInCome:" + message);
msg += orderId + "创建财务单据失败;";
msg += change.OrderId + "创建财务单据失败;";
}
#endregion
return frid;
}
/// <summary>
/// 转班支出
/// 转班、分拆支出
/// </summary>
public int CreateExpenditure(decimal BackMoney,int guestId, string GuestName, UserInfo userInfo, int classId, int orderId, out string msg)
/// <param name="change"></param>
/// <param name="msg"></param>
/// <returns></returns>
public int CreateExpenditure(OrderChangeFinace change,out string msg)
{
msg = "";
#region 新增财务单据
......@@ -413,37 +441,36 @@ namespace Edu.Module.EduTask
{
CostTypeId=533,
Number = 1,
OriginalMoney = BackMoney,
UnitPrice = BackMoney,
Remark = "学员【"+GuestName+"】转班支出"
OriginalMoney =change.InCome,
UnitPrice = change.InCome,
Remark = "学员【"+change.GuestName+"】转班支出"
}
};
var classModel = classRepository.GetEntity(classId);
string Remark = "【" + (classModel?.ClassName ?? "") + "】下,订单" + orderId + " 学员转班支出!";
string Remark = "【" + (change.ClassName) + "】下,订单" + change.OrderId + " 学员" + (change.ChangeType == 1 ? "转班" : "分拆") + "支出!";
var financeObj = new
{
IsPublic = 7,
ClientType = 10,
ClientID = 3659,
CurrencyId = 1,
GuestId=guestId,
WBMoney = BackMoney,
GuestId= change.GuestId,
WBMoney = change.InCome,
PayDate = DateTime.Now.ToString("yyyy-MM-dd"),
TemplateId = 185,
OrderSource = 17,
OrderID = orderId,
TCIDList = new List<int>() { classId },
OrderID =change.OrderId,
TCIDList = new List<int>() { change.ClassId },
OtherType = 0,
Remark,
detailList,
CreateBy = userInfo.Id,
RB_Branch_Id = classModel.School_Id,
RB_Depart_Id = userInfo.DeptId,
RB_Group_Id = userInfo.Group_Id,
RB_CreateByName = userInfo.AccountName,
RB_DepartName = userInfo.DeptName,
RB_BranchName = schoolRepository.GetEntity(classModel.School_Id)?.SName ?? "",
RB_GroupName = userInfo.GroupName,
CreateBy =change.UserInfo.Id,
RB_Branch_Id = change.Class_School_Id,
RB_Depart_Id = change.UserInfo.DeptId,
RB_Group_Id = change.UserInfo.Group_Id,
RB_CreateByName = change.UserInfo.AccountName,
RB_DepartName = change.UserInfo.DeptName,
RB_BranchName = change?.SName ?? "",
RB_GroupName = change.UserInfo.GroupName,
FinanceType = 2
};
string sign = EncryptionHelper.AesEncrypt(JsonHelper.Serialize(financeObj), Config.ReadConfigKey("FinanceKey"));
......@@ -451,7 +478,6 @@ namespace Edu.Module.EduTask
{
msg = sign
};
string apiResult = HttpHelper.HttpPost(Config.ReadConfigKey("PaymentFinanceApi"), JsonHelper.Serialize(resultInfo), "");
JObject parmsJob = JObject.Parse(apiResult);
string resultCode = parmsJob.GetStringValue("resultCode");
......@@ -463,11 +489,11 @@ namespace Edu.Module.EduTask
{
Id = 0,
Type = 1,
CreateBy = userInfo.Id,
CreateBy = change.UserInfo.Id,
CreateTime = DateTime.Now,
Group_Id = userInfo.Group_Id,
LogContent = "生成学员转班财务单据【" + orderId + "】",
School_Id = userInfo.School_Id,
Group_Id = change.UserInfo.Group_Id,
LogContent = "生成学员"+(change.ChangeType==1? "转班" : "分拆")+"财务单据【" + change.OrderId + "】",
School_Id = change.UserInfo.School_Id,
SourceId = 0
});
}
......@@ -475,7 +501,7 @@ namespace Edu.Module.EduTask
{
string message = parmsJob.GetStringValue("message");
LogHelper.Write("CreateExpenditure:" + message);
msg += orderId + "创建财务单据失败;";
msg += change.OrderId + "创建财务单据失败;";
}
#endregion
return frid;
......@@ -544,26 +570,33 @@ namespace Edu.Module.EduTask
if (orderChangeModel != null && orderChangeModel.Id > 0)
{
//计算新班级课时数
var planList = class_PlanRepository.GetClassPlanListExtRepository(new RB_Class_Plan_ViewModel()
{
ClassId = orderChangeModel.NewClassId,
StartTime = Common.ConvertHelper.FormatDate(orderChangeModel.EffectiveDate)
});
//原订单实体
var oldOrderModel = orderRepository.GetEntity(orderChangeModel.SourceOrderId);
var newClassModel = classRepository.GetEntity(orderChangeModel.NewClassId);
var classList = classRepository.GetClassListRepository(new RB_Class_ViewModel()
{
Q_ClassIds = orderChangeModel.NewClassId + "," + oldOrderModel.ClassId
});
var oldClassModel = classList?.Where(qitem => qitem.ClassId == oldOrderModel.ClassId)?.FirstOrDefault() ?? new RB_Class_ViewModel();
var newClassModel = classList?.Where(qitem => qitem.ClassId == orderChangeModel.NewClassId)?.FirstOrDefault() ?? new RB_Class_ViewModel();
//班级有效课时
var courseValidHourse = planList?.Sum(qitem => qitem.TimeHour)??0;
//课程信息
var newCourseModel = courseRepository.GetEntity(orderChangeModel.NewCourseId);
//新班级课程的应收
var newPreferPrice = Math.Round(newCourseModel.SellPrice / newCourseModel.ClassHours * courseValidHourse,2);
//原业务员
var userInfo = UserReidsCache.GetUserLoginInfo(oldOrderModel.EnterID);
var guestClassHours = GetGuestFinishMinutesModule(orderChangeModel.OrderGuestId.ToString());
//原学员信息
var guestModel = guestRepository.GetEntity(orderChangeModel.OrderGuestId);
//计算课时单价
//老订单应收
//单个人员的课时单价
var unitPrice = (oldOrderModel.Income + oldOrderModel.PlatformTax) / oldOrderModel.GuestNum / guestModel.TotalHours;
//单人已完成应收
var singleFinishPrice = Math.Round(guestClassHours.FinishClassHours * unitPrice, 2);
//单人应收
var singlePreferPrice = Math.Round(guestModel.TotalHours * unitPrice, 2);
//原订单应收=原订单应收-单人应收+单人完成
decimal oldPreferPrice = oldOrderModel.PreferPrice - singlePreferPrice + singleFinishPrice;
//新订单应收和退款一致
decimal newPreferPrice = singlePreferPrice - singleFinishPrice;
//原订单应收=原订单应收-新班级课程的应收
decimal oldPreferPrice = oldOrderModel.PreferPrice - newPreferPrice ;
#region 生成新订单
var orderModel = new RB_Order_ViewModel()
{
......@@ -589,8 +622,8 @@ namespace Edu.Module.EduTask
StartClassHours = 0,
UpOrderId = 0,
VisitorReserveId = 0,
JoinType = Common.Enum.Sale.OrderJoinTypeEnum.TransOrder,
TargetJoinType = Common.Enum.Sale.OrderJoinTypeEnum.Normal,
JoinType = Common.Enum.Sale.OrderJoinTypeEnum.SplitOrder,
TargetJoinType = oldOrderModel.JoinType,
EffectTime = orderChangeModel.EffectiveDate,
};
orderModel.SourceOrderId = orderChangeModel.SourceOrderId;
......@@ -616,7 +649,7 @@ namespace Edu.Module.EduTask
{
{nameof(RB_Order_ViewModel.TargetOrderId),orderModel.OrderId },
{nameof(RB_Order_ViewModel.PreferPrice),oldPreferPrice },
{nameof(RB_Order_ViewModel.TargetJoinType),(int) Common.Enum.Sale.OrderJoinTypeEnum.TransOrder },
{nameof(RB_Order_ViewModel.TargetJoinType),(int) Common.Enum.Sale.OrderJoinTypeEnum.SplitOrder },
};
flag = orderRepository.Update(fileds, new WhereHelper(nameof(RB_Order_ViewModel.OrderId), orderChangeModel.SourceOrderId));
#endregion
......@@ -624,7 +657,7 @@ namespace Edu.Module.EduTask
#region 修改老学员课时相关
Dictionary<string, object> guestFileds = new Dictionary<string, object>()
{
{nameof(RB_Order_Guest_ViewModel.TotalHours),guestClassHours.FinishClassHours },
{nameof(RB_Order_Guest_ViewModel.TotalHours),guestModel.TotalHours-courseValidHourse },
{nameof(RB_Order_Guest_ViewModel.GuestState),7 },
};
if (flag)
......@@ -637,9 +670,36 @@ namespace Edu.Module.EduTask
if (flag)
{
//var RelevanceFrId = CreateExpenditure(newPreferPrice, guestModel.Id, guestModel.GuestName, userInfo, oldOrderModel.ClassId, oldOrderModel.OrderId, out string msg1);
//var InCome = CreateInCome(newPreferPrice, orderModel.NewGuestId, guestModel.GuestName, userInfo, orderModel.ClassId, orderModel.OrderId, RelevanceFrId, out string msg2);
//flag = RelevanceFrId > 0 && InCome > 0;
var change1 = new OrderChangeFinace()
{
ChangeType = 2,
InCome = newPreferPrice,
GuestId = guestModel.Id,
GuestName = guestModel.GuestName,
UserInfo = userInfo,
ClassId = oldOrderModel.ClassId,
ClassName = oldClassModel.ClassName,
Class_School_Id = oldClassModel.School_Id,
SName = oldClassModel.SchoolName,
OrderId = oldOrderModel.OrderId
};
var RelevanceFrId = CreateExpenditure(change1, out string msg1);
var change2 = new OrderChangeFinace()
{
ChangeType = 2,
InCome = newPreferPrice,
GuestId = orderModel.NewGuestId,
GuestName = guestModel.GuestName,
UserInfo = userInfo,
ClassId = orderModel.ClassId,
ClassName = newClassModel.ClassName,
Class_School_Id = newClassModel.School_Id,
SName = newClassModel.SchoolName,
OrderId = orderModel.OrderId,
ReFinanceId = RelevanceFrId,
};
var InCome = CreateInCome(change2, out string msg2);
flag = RelevanceFrId > 0 && InCome > 0;
}
#endregion
}
......
......@@ -24,9 +24,10 @@ namespace Edu.Repository.Course
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.* ,IFNULL(B.CourseName,'') AS CourseName,IFNULL(C.GuestNum,0) AS GuestNum
SELECT A.* ,IFNULL(B.CourseName,'') AS CourseName,IFNULL(C.GuestNum,0) AS GuestNum,IFNULL(D.SName,'') AS SchoolName
FROM rb_class AS A LEFT JOIN rb_course AS B ON A.CouseId=B.CourseId
LEFT JOIN(SELECT ClassId,SUM(GuestNum) AS GuestNum FROM rb_order WHERE OrderState=1 GROUP BY ClassId) AS C ON A.ClassId=C.ClassId
LEFT JOIN rb_school AS D ON A.School_Id=D.SId
WHERE 1=1
");
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.Status), (int)DateStateEnum.Normal);
......
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