Commit 5a997bdc authored by liudong1993's avatar liudong1993

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

parents 6a3715fa 8fe51b5c
...@@ -406,6 +406,17 @@ namespace Edu.Common ...@@ -406,6 +406,17 @@ namespace Edu.Common
} }
/// <summary>
/// 订单分拆流程编号
/// </summary>
public static int OrderSplitClassFlowId
{
get
{
int.TryParse(ReadConfigKey("OrderSplitClassFlowId"), out int OrderSplitClassFlowId);
return OrderSplitClassFlowId;
}
}
/// <summary> /// <summary>
......
...@@ -37,5 +37,11 @@ namespace Edu.Common.Enum.Finance ...@@ -37,5 +37,11 @@ namespace Edu.Common.Enum.Finance
/// </summary> /// </summary>
[EnumField("订单转班")] [EnumField("订单转班")]
OrderTransClass = 5, OrderTransClass = 5,
/// <summary>
/// 订单分拆
/// </summary>
[EnumField("订单分拆")]
OrderSplitClass = 6,
} }
} }
...@@ -44,7 +44,7 @@ namespace Edu.Model.Entity.Log ...@@ -44,7 +44,7 @@ namespace Edu.Model.Entity.Log
private int type = 1; private int type = 1;
/// <summary> /// <summary>
/// 类型 1日常日志 2订单日志 /// 类型1-日常日志;2-订单日志;3-学员日志
/// </summary> /// </summary>
public int Type { get => type; set => type = value; } public int Type { get => type; set => type = value; }
......
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using Edu.Common.Enum.Sale;
using Edu.Model.Entity.Course; using Edu.Model.Entity.Course;
namespace Edu.Model.ViewModel.Course namespace Edu.Model.ViewModel.Course
...@@ -192,5 +193,35 @@ namespace Edu.Model.ViewModel.Course ...@@ -192,5 +193,35 @@ namespace Edu.Model.ViewModel.Course
///上课时间ids ///上课时间ids
/// </summary> /// </summary>
public string ClassTimeIds { get; set; } public string ClassTimeIds { get; set; }
/// <summary>
/// 订单报入类型(1-正常报入,2-插班报入,3-续费订单,4-转班订单,5-分拆订单)
/// </summary>
public OrderJoinTypeEnum JoinType { get; set; }
/// <summary>
/// 原订单报入类型(1-正常报入,2-插班报入,3-续费订单,4-转班订单,5-分拆订单)
/// </summary>
public OrderJoinTypeEnum TargetJoinType { get; set; }
/// <summary>
/// 原订单编号
/// </summary>
public int SourceOrderId { get; set; }
/// <summary>
/// 原订单班级名称
/// </summary>
public string SourceClassName { get; set; }
/// <summary>
/// 目标订单编号
/// </summary>
public int TargetOrderId { get; set; }
/// <summary>
/// 目标订单班级名称
/// </summary>
public string TargetClassName { get; set; }
} }
} }
using Edu.Model.Entity.Course; using Edu.Common.Enum.Sale;
using Edu.Model.Entity.Course;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
...@@ -116,6 +117,38 @@ namespace Edu.Model.ViewModel.Course ...@@ -116,6 +117,38 @@ namespace Edu.Model.ViewModel.Course
public decimal UseCoursewareFee { get; set; } public decimal UseCoursewareFee { get; set; }
#endregion #endregion
#region 订单相关
/// <summary>
/// 订单报入类型(1-正常报入,2-插班报入,3-续费订单,4-转班订单,5-分拆订单)
/// </summary>
public OrderJoinTypeEnum JoinType { get; set; }
/// <summary>
/// 原订单报入类型(1-正常报入,2-插班报入,3-续费订单,4-转班订单,5-分拆订单)
/// </summary>
public OrderJoinTypeEnum TargetJoinType { get; set; }
/// <summary>
/// 原订单编号
/// </summary>
public int SourceOrderId { get; set; }
/// <summary>
/// 原订单班级名称
/// </summary>
public string SourceClassName { get; set; }
/// <summary>
/// 目标订单编号
/// </summary>
public int TargetOrderId { get; set; }
/// <summary>
/// 目标订单班级名称
/// </summary>
public string TargetClassName { get; set; }
#endregion
/// <summary> /// <summary>
/// 是否审核(1-是) /// 是否审核(1-是)
/// </summary> /// </summary>
......
...@@ -149,6 +149,11 @@ namespace Edu.Module.Course ...@@ -149,6 +149,11 @@ namespace Edu.Module.Course
/// </summary> /// </summary>
private readonly RB_Student_MakeupRepository student_MakeupRepository = new RB_Student_MakeupRepository(); private readonly RB_Student_MakeupRepository student_MakeupRepository = new RB_Student_MakeupRepository();
/// <summary>
/// 日志仓储对象
/// </summary>
private readonly RB_User_ChangeLogRepository user_ChangeLogRepository = new RB_User_ChangeLogRepository();
/// <summary> /// <summary>
/// 获取班级列表 /// 获取班级列表
/// </summary> /// </summary>
...@@ -682,7 +687,7 @@ namespace Edu.Module.Course ...@@ -682,7 +687,7 @@ namespace Edu.Module.Course
} }
} }
List<RB_Class_Plan_ViewModel> classPlanList = new List<RB_Class_Plan_ViewModel>(); List<RB_Class_Plan_ViewModel> classPlanList = new List<RB_Class_Plan_ViewModel>();
if (model.ClassHours > 0) if (model.ClassHours > 0&& defaultPlanTimeList!=null && defaultPlanTimeList.Count>0)
{ {
var srartDate = model.OpenTime; var srartDate = model.OpenTime;
//按周排课和按月排课 //按周排课和按月排课
...@@ -1298,9 +1303,9 @@ namespace Edu.Module.Course ...@@ -1298,9 +1303,9 @@ namespace Edu.Module.Course
item.RenewOrderId, item.RenewOrderId,
CheckStatus = checkStatus, CheckStatus = checkStatus,
item.JoinType, item.JoinType,
JoinTypeName=item.JoinType.ToName(), JoinTypeName = item.JoinType.ToName(),
item.TargetJoinType, item.TargetJoinType,
TargetJoinTypeName=item.TargetJoinType.ToName(), TargetJoinTypeName = item.TargetJoinType.ToName(),
item.SourceOrderId, item.SourceOrderId,
item.SourceClassName, item.SourceClassName,
item.TargetOrderId, item.TargetOrderId,
...@@ -1444,13 +1449,18 @@ namespace Edu.Module.Course ...@@ -1444,13 +1449,18 @@ namespace Edu.Module.Course
{ {
var guestModel = order_GuestRepository.GetEntity(item.OrderGuestId); var guestModel = order_GuestRepository.GetEntity(item.OrderGuestId);
item.CurrentDeductionHours = timeModel?.TimeHour ?? 0; item.CurrentDeductionHours = timeModel?.TimeHour ?? 0;
decimal currentDeductionHours = item.CurrentDeductionHours;
if (item.CheckStatus == 2)
{
currentDeductionHours = 0;
}
if (item.ClassCheckId > 0) if (item.ClassCheckId > 0)
{ {
Dictionary<string, object> fileds = new Dictionary<string, object>() Dictionary<string, object> fileds = new Dictionary<string, object>()
{ {
{ nameof(RB_Class_Check_ViewModel.CheckStatus),item.CheckStatus}, { nameof(RB_Class_Check_ViewModel.CheckStatus),item.CheckStatus},
{ nameof(RB_Class_Check_ViewModel.StudyNum),item.StudyNum}, { nameof(RB_Class_Check_ViewModel.StudyNum),item.StudyNum},
{ nameof(RB_Class_Check_ViewModel.CurrentDeductionHours),item.CurrentDeductionHours}, { nameof(RB_Class_Check_ViewModel.CurrentDeductionHours),currentDeductionHours},
}; };
List<WhereHelper> wheres = new List<WhereHelper>() List<WhereHelper> wheres = new List<WhereHelper>()
{ {
...@@ -1469,19 +1479,35 @@ namespace Edu.Module.Course ...@@ -1469,19 +1479,35 @@ namespace Edu.Module.Course
if (flag) if (flag)
{ {
//更新学员完成课时 //更新学员完成课时
decimal completeHours = (oldModel?.FinishClassHours ?? 0) + item.CurrentDeductionHours; var completeHours = (oldModel?.FinishClassHours ?? 0) + item.CurrentDeductionHours;
Dictionary<string, object> orderFileds = new Dictionary<string, object>() Dictionary<string, object> orderFileds = new Dictionary<string, object>()
{ {
{nameof(RB_Order_Guest_ViewModel.CompleteHours),completeHours } {nameof(RB_Order_Guest_ViewModel.CompleteHours),completeHours }
}; };
string LogContent = "";
//已上课时>=有效课时,如果是,修改学员状态为停课,并且备注“有效课时消耗完毕,系统自动停课” //已上课时>=有效课时,如果是,修改学员状态为停课,并且备注“有效课时消耗完毕,系统自动停课”
if (completeHours > guestModel.ValidClassHours) if (completeHours > guestModel.ValidClassHours)
{ {
orderFileds.Add(nameof(RB_Order_Guest_ViewModel.GuestState), 5); orderFileds.Add(nameof(RB_Order_Guest_ViewModel.GuestState), 5);
orderFileds.Add(nameof(RB_Order_Guest_ViewModel.ChangeEffectTime), System.DateTime.Now);
orderFileds.Add(nameof(RB_Order_Guest_ViewModel.DropOutRemark), "有效课时消耗完毕,系统自动停课"); orderFileds.Add(nameof(RB_Order_Guest_ViewModel.DropOutRemark), "有效课时消耗完毕,系统自动停课");
LogContent = guestModel.GuestName + "有效课时消耗完毕,系统自动停课!";
} }
flag = order_GuestRepository.Update(orderFileds, new WhereHelper(nameof(RB_Order_Guest_ViewModel.Id), item.OrderGuestId)); flag = order_GuestRepository.Update(orderFileds, new WhereHelper(nameof(RB_Order_Guest_ViewModel.Id), item.OrderGuestId));
if (flag && !string.IsNullOrEmpty(LogContent))
{
user_ChangeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
{
Id = 0,
Type = 3,
CreateBy = item.CreateBy,
CreateTime = DateTime.Now,
Group_Id = item.Group_Id,
LogContent = LogContent,
School_Id = item.School_Id,
SourceId = guestModel.Id
});
}
//缺勤和请假 //缺勤和请假
if (item.CheckStatus == 1 || item.CheckStatus == 2) if (item.CheckStatus == 1 || item.CheckStatus == 2)
{ {
...@@ -2667,7 +2693,7 @@ namespace Edu.Module.Course ...@@ -2667,7 +2693,7 @@ namespace Edu.Module.Course
string planIds = string.Join(",", list.Select(qitem => qitem.ClassPlanId)); string planIds = string.Join(",", list.Select(qitem => qitem.ClassPlanId));
timeList = class_TimeRepository.GetClassTimeListRepository(new RB_Class_Time_ViewModel() { QClassIds = classIds, QClassPlanIds = planIds }); timeList = class_TimeRepository.GetClassTimeListRepository(new RB_Class_Time_ViewModel() { QClassIds = classIds, QClassPlanIds = planIds });
guestList = order_GuestRepository.GetOrderGuestListRepository(new RB_Order_Guest_ViewModel() { ClassIds = classIds }); guestList = order_GuestRepository.GetOrderGuestListRepository(new RB_Order_Guest_ViewModel() { ClassIds = classIds });
tempGuestList = order_GuestRepository.GetTempInvitationGuest(new Model.ViewModel.EduTask.RB_Temporary_Invitation_ViewModel { ClassIds = classIds,ClassPlanIds=planIds }); tempGuestList = order_GuestRepository.GetTempInvitationGuest(new Model.ViewModel.EduTask.RB_Temporary_Invitation_ViewModel { ClassIds = classIds, ClassPlanIds = planIds });
} }
var visitorList = new List<RB_Visitor_Reserve_Extend>(); var visitorList = new List<RB_Visitor_Reserve_Extend>();
if (reserveList != null && reserveList.Count > 0) if (reserveList != null && reserveList.Count > 0)
...@@ -2692,7 +2718,7 @@ namespace Edu.Module.Course ...@@ -2692,7 +2718,7 @@ namespace Edu.Module.Course
tempTimeGuestList.AddRange(guestList.Where(qitem => qitem.ClassId == subItem.ClassId && (qitem.GuestState == 1 || qitem.GuestState == 6 || ((qitem.GuestState == 5 || qitem.GuestState == 7) && qitem.ChangeEffectTime.HasValue && Convert.ToDateTime(Common.ConvertHelper.FormatDate(qitem.ChangeEffectTime)) >= subItem.ClassDate)))); tempTimeGuestList.AddRange(guestList.Where(qitem => qitem.ClassId == subItem.ClassId && (qitem.GuestState == 1 || qitem.GuestState == 6 || ((qitem.GuestState == 5 || qitem.GuestState == 7) && qitem.ChangeEffectTime.HasValue && Convert.ToDateTime(Common.ConvertHelper.FormatDate(qitem.ChangeEffectTime)) >= subItem.ClassDate))));
if (tempGuestList!=null&& tempGuestList.Any()) if (tempGuestList != null && tempGuestList.Any())
{ {
tempTimeGuestList.AddRange(tempGuestList.Where(qitem => qitem.ClassId == subItem.ClassId && subItem.ClassPlanId == qitem.ClassPlanId && (qitem.GuestState == 1 || qitem.GuestState == 6 || ((qitem.GuestState == 5 || qitem.GuestState == 7) && qitem.ChangeEffectTime.HasValue && Convert.ToDateTime(Common.ConvertHelper.FormatDate(qitem.ChangeEffectTime)) >= subItem.ClassDate)))); tempTimeGuestList.AddRange(tempGuestList.Where(qitem => qitem.ClassId == subItem.ClassId && subItem.ClassPlanId == qitem.ClassPlanId && (qitem.GuestState == 1 || qitem.GuestState == 6 || ((qitem.GuestState == 5 || qitem.GuestState == 7) && qitem.ChangeEffectTime.HasValue && Convert.ToDateTime(Common.ConvertHelper.FormatDate(qitem.ChangeEffectTime)) >= subItem.ClassDate))));
...@@ -2917,7 +2943,7 @@ namespace Edu.Module.Course ...@@ -2917,7 +2943,7 @@ namespace Edu.Module.Course
{ {
var tempTimeList = timeList?.Where(qitem => qitem.ClassPlanId == subItem.ClassPlanId)?.ToList()?.OrderBy(qitem => qitem.StartTime); var tempTimeList = timeList?.Where(qitem => qitem.ClassPlanId == subItem.ClassPlanId)?.ToList()?.OrderBy(qitem => qitem.StartTime);
var currentDate = Common.ConvertHelper.FormatDate(ClassDate) + " " + (tempTimeList?.FirstOrDefault()?.StartTime ?? ""); var currentDate = Common.ConvertHelper.FormatDate(ClassDate) + " " + (tempTimeList?.FirstOrDefault()?.StartTime ?? "");
foreach (var item in tempTimeList) foreach (var item in tempTimeList)
{ {
var tempTimeGuestList = new List<RB_Order_Guest_ViewModel>(); var tempTimeGuestList = new List<RB_Order_Guest_ViewModel>();
......
...@@ -2479,8 +2479,36 @@ namespace Edu.Module.Course ...@@ -2479,8 +2479,36 @@ namespace Edu.Module.Course
//用户信息 //用户信息
var userIds = string.Join(",", list.Select(x => x.CreateBy).Distinct()); var userIds = string.Join(",", list.Select(x => x.CreateBy).Distinct());
var alist = accountRepository.GetAccountListExtRepository(new Model.ViewModel.User.RB_Account_ViewModel() { QIds = userIds }); var alist = accountRepository.GetAccountListExtRepository(new Model.ViewModel.User.RB_Account_ViewModel() { QIds = userIds });
List<RB_Order_ViewModel> sourceTargetList = new List<RB_Order_ViewModel>();
List<int> idList = new List<int>();
var sourceOrderIdList = Common.ConvertHelper.StringToList(string.Join(",", list.Select(x => x.SourceOrderId)));
if (sourceOrderIdList != null && sourceOrderIdList.Count > 0)
{
idList.AddRange(sourceOrderIdList);
}
var targetOrderIdList = Common.ConvertHelper.StringToList(string.Join(",", list.Select(x => x.TargetOrderId)));
if (targetOrderIdList != null && targetOrderIdList.Count > 0)
{
idList.AddRange(targetOrderIdList);
}
if (idList != null && idList.Count > 0)
{
string ids = string.Join(",", idList);
sourceTargetList = orderRepository.GetOrderListRepository(new RB_Order_ViewModel { QOrderIds = ids });
}
foreach (var item in list) foreach (var item in list)
{ {
if (item.SourceOrderId > 0)
{
item.SourceClassName = sourceTargetList?.Where(qitem => qitem.OrderId == item.SourceOrderId)?.FirstOrDefault()?.ClassName;
}
if (item.TargetOrderId > 0)
{
item.TargetClassName = sourceTargetList?.Where(qitem => qitem.OrderId == item.TargetOrderId)?.FirstOrDefault()?.ClassName;
}
#region 财务单据 #region 财务单据
item.FinanceList = flist.Where(x => x.GuestId == item.GuestId).ToList(); item.FinanceList = flist.Where(x => x.GuestId == item.GuestId).ToList();
item.Income = item.FinanceList.Where(x => x.Type == Common.Enum.Finance.WFTempLateClassEnum.IN && x.Is_Cashier == 1).Sum(x => (x.Money ?? 0) + (x.Fee ?? 0));//出纳审核算有效金额 item.Income = item.FinanceList.Where(x => x.Type == Common.Enum.Finance.WFTempLateClassEnum.IN && x.Is_Cashier == 1).Sum(x => (x.Money ?? 0) + (x.Fee ?? 0));//出纳审核算有效金额
...@@ -2605,10 +2633,26 @@ namespace Edu.Module.Course ...@@ -2605,10 +2633,26 @@ namespace Edu.Module.Course
{ nameof(RB_Order_Guest.ValidClassHours),validClassHours} { nameof(RB_Order_Guest.ValidClassHours),validClassHours}
}; };
//HK2021-07-19新增【有效课时大于完成课时修改学员状态为正常】 //HK2021-07-19新增【有效课时大于完成课时修改学员状态为正常】
string LogContent = "";
if (gmodel.CompleteHours < validClassHours) if (gmodel.CompleteHours < validClassHours)
{ {
keyValues.Add(nameof(RB_Order_Guest.GuestState), 1); keyValues.Add(nameof(RB_Order_Guest.GuestState), 1);
keyValues.Add(nameof(RB_Order_Guest.DropOutRemark), "有效课时大于完成课时,恢复学员状态!"); keyValues.Add(nameof(RB_Order_Guest.DropOutRemark), "有效课时大于完成课时,恢复学员状态!");
LogContent = gmodel.GuestName + "有效课时大于完成课时,系统恢复学员状态!";
}
if (!string.IsNullOrEmpty(LogContent))
{
changeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
{
Id = 0,
Type = 3,
CreateBy = gmodel.CreateBy,
CreateTime = DateTime.Now,
Group_Id = gmodel.Group_Id,
LogContent = LogContent,
School_Id = gmodel.School_Id,
SourceId = gmodel.Id
});
} }
List<WhereHelper> wheres = new List<WhereHelper>() List<WhereHelper> wheres = new List<WhereHelper>()
{ {
......
...@@ -271,6 +271,8 @@ namespace Edu.Module.Course ...@@ -271,6 +271,8 @@ namespace Edu.Module.Course
item.TeacherName, item.TeacherName,
item.RoomName, item.RoomName,
OpenTime = Common.ConvertHelper.FormatDate(item.OpenTime), OpenTime = Common.ConvertHelper.FormatDate(item.OpenTime),
NewOriginalPrice=item.OriginalPrice,
NewSellPrice=item.SellPrice,
OriginalPrice, OriginalPrice,
SellPrice, SellPrice,
item.ClassPersion, item.ClassPersion,
......
...@@ -319,6 +319,18 @@ namespace Edu.Module.EduTask ...@@ -319,6 +319,18 @@ namespace Edu.Module.EduTask
}); });
} }
#endregion #endregion
#region 订单分拆
if (subItem.ReceiptType == Common.Enum.Finance.ReceiptTypeEnum.OrderSplitClass)
{
string transClassIds = string.Join(",", list.Where(qitem => qitem.ReceiptType == subItem.ReceiptType).Select(qitem => qitem.RelationId));
orderTransList = order_ChangeRepository.GetOrderChangeListRepository(new RB_Order_Change_ViewModel()
{
QIds = transClassIds,
ChangeType = 2,
});
}
#endregion
} }
foreach (var item in list) foreach (var item in list)
...@@ -401,7 +413,12 @@ namespace Edu.Module.EduTask ...@@ -401,7 +413,12 @@ namespace Edu.Module.EduTask
//订单转班 //订单转班
if (item.ReceiptType == Common.Enum.Finance.ReceiptTypeEnum.OrderTransClass) if (item.ReceiptType == Common.Enum.Finance.ReceiptTypeEnum.OrderTransClass)
{ {
DataObj = orderTransList?.Where(qitem => qitem.Id == item.RelationId)?.FirstOrDefault(); DataObj = orderTransList?.Where(qitem => qitem.Id == item.RelationId && qitem.ChangeType==1)?.FirstOrDefault();
}
//订单分拆
if (item.ReceiptType == Common.Enum.Finance.ReceiptTypeEnum.OrderSplitClass)
{
DataObj = orderTransList?.Where(qitem => qitem.Id == item.RelationId && qitem.ChangeType == 2)?.FirstOrDefault();
} }
object AuditObj = new object(); object AuditObj = new object();
if (item.VerifyStatus == EduTaskRrocessStatus.NotAudit || item.VerifyStatus == EduTaskRrocessStatus.AuditIng) if (item.VerifyStatus == EduTaskRrocessStatus.NotAudit || item.VerifyStatus == EduTaskRrocessStatus.AuditIng)
...@@ -1129,6 +1146,18 @@ namespace Edu.Module.EduTask ...@@ -1129,6 +1146,18 @@ namespace Edu.Module.EduTask
student_BackClassRepository.UpdateGuestStateRepository(receiptModel, auditModel); student_BackClassRepository.UpdateGuestStateRepository(receiptModel, auditModel);
} }
} }
if (receiptModel.ReceiptType == Common.Enum.Finance.ReceiptTypeEnum.OrderSplitClass)
{
if (auditModel.AuditStatus == 2)
{
orderChangeModule.UpdateOrderSplitModule(receiptModel);
}
else if (auditModel.AuditStatus == 3)
{
student_BackClassRepository.UpdateGuestStateRepository(receiptModel, auditModel);
}
}
return flag; return flag;
} }
......
...@@ -84,7 +84,7 @@ namespace Edu.Module.EduTask ...@@ -84,7 +84,7 @@ namespace Edu.Module.EduTask
private readonly RB_Class_PlanRepository class_PlanRepository = new RB_Class_PlanRepository(); private readonly RB_Class_PlanRepository class_PlanRepository = new RB_Class_PlanRepository();
/// <summary> /// <summary>
/// 新增订单转班、分拆 /// 新增订单转班
/// </summary> /// </summary>
/// <param name="model"></param> /// <param name="model"></param>
/// <returns></returns> /// <returns></returns>
...@@ -480,5 +480,182 @@ namespace Edu.Module.EduTask ...@@ -480,5 +480,182 @@ namespace Edu.Module.EduTask
#endregion #endregion
return frid; return frid;
} }
#region 分拆订单
/// <summary>
/// 新增订单拆分申请
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[TransactionCallHandler]
public virtual bool SetOrderSplitModule(RB_Order_Change_ViewModel model, out string message)
{
message = "";
bool flag = false;
var newId = order_ChangeRepository.Insert(model);
model.Id = newId;
flag = newId > 0;
if (flag)
{
var educationReceipt = new RB_Education_Receipt()
{
Id = 0,
Title = "订单分拆申请",
ReceiptType = Common.Enum.Finance.ReceiptTypeEnum.OrderSplitClass,
RelationId = newId,
OrderId = model.SourceOrderId,
ClassId = model.NewClassId,
Group_Id = model.Group_Id,
School_Id = model.School_Id,
CreateBy = model.CreateBy,
CreateTime = model.CreateTime,
UpdateBy = model.UpdateBy,
UpdateTime = model.UpdateTime,
VerifyStatus = Common.Enum.EduTask.EduTaskRrocessStatus.NotAudit,
IsCreate = 0,
EffectiveDate = model.EffectiveDate
};
flag = education_ReceiptRepository.SetEducationReceiptRepository(educationReceipt, out message);
Dictionary<string, object> guestFileds = new Dictionary<string, object>()
{
{nameof(RB_Order_Guest_ViewModel.GuestState),8}
};
if (flag)
{
flag = guestRepository.Update(guestFileds, new WhereHelper(nameof(RB_Order_Guest_ViewModel.Id), model.OrderGuestId));
}
}
return flag;
}
/// <summary>
/// 订单分拆处理类方法
/// </summary>
/// <returns></returns>
public bool UpdateOrderSplitModule(RB_Education_Receipt receiptModel)
{
bool flag = false;
if (receiptModel.RelationId > 0)
{
var orderChangeModel = order_ChangeRepository.GetEntity<RB_Order_Change_ViewModel>(receiptModel.RelationId);
if (orderChangeModel != null && orderChangeModel.Id > 0)
{
//计算新班级课时数
var oldOrderModel = orderRepository.GetEntity(orderChangeModel.SourceOrderId);
var newClassModel = classRepository.GetEntity(orderChangeModel.NewClassId);
var newCourseModel = courseRepository.GetEntity(orderChangeModel.NewCourseId);
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;
#region 生成新订单
var orderModel = new RB_Order_ViewModel()
{
OrderId = 0,
ClassId = orderChangeModel.NewClassId,//班级编号
GuestNum = 1,
OrderSource = oldOrderModel.OrderSource,
OrderType = oldOrderModel.OrderType,
Class_Price = newCourseModel.SellPrice,//单价
Unit_Price = newCourseModel.SellPrice,//成交单价
PreferPrice = newPreferPrice,//应收,
Income = 0,
HelpEnterId = 0,
GeneralOccupation = "",
EduOccupation = "",
SaleRemark = orderChangeModel.Remarks,//销售备注
SourceId = 0,
IsLessPrice = 0,
LessPrice = 0,
OrderNature = oldOrderModel.OrderNature,
OldPreferPrice = newPreferPrice,//应收,
CourseId = orderChangeModel.NewCourseId,
StartClassHours = 0,
UpOrderId = 0,
VisitorReserveId = 0,
JoinType = Common.Enum.Sale.OrderJoinTypeEnum.TransOrder,
TargetJoinType = Common.Enum.Sale.OrderJoinTypeEnum.Normal,
EffectTime = orderChangeModel.EffectiveDate,
};
orderModel.SourceOrderId = orderChangeModel.SourceOrderId;
orderModel.Group_Id = userInfo.Group_Id;
orderModel.School_Id = userInfo.School_Id;
orderModel.Dept_Id = userInfo.DeptId;
orderModel.OrderForm = OrderFormEnum.Computer;
orderModel.EnterID = userInfo.Id;
orderModel.OrderState = OrderStateEnum.Normal;
orderModel.TradeWay = TradeWayEnum.OnLine;
orderModel.CreateBy = userInfo.Id;
orderModel.CreateTime = DateTime.Now;
orderModel.UpdateBy = userInfo.Id;
orderModel.UpdateTime = DateTime.Now;
orderModel.OldGuestId = orderChangeModel.OrderGuestId;
flag = orderModule.SetClassOrderCommonModule(orderModel, userInfo, false, out string message);
#endregion
if (flag)
{
#region 修改老订单 【目标订单和应收】
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
{nameof(RB_Order_ViewModel.TargetOrderId),orderModel.OrderId },
{nameof(RB_Order_ViewModel.PreferPrice),oldPreferPrice },
{nameof(RB_Order_ViewModel.TargetJoinType),(int) Common.Enum.Sale.OrderJoinTypeEnum.TransOrder },
};
flag = orderRepository.Update(fileds, new WhereHelper(nameof(RB_Order_ViewModel.OrderId), orderChangeModel.SourceOrderId));
#endregion
#region 修改老学员课时相关
Dictionary<string, object> guestFileds = new Dictionary<string, object>()
{
{nameof(RB_Order_Guest_ViewModel.TotalHours),guestClassHours.FinishClassHours },
{nameof(RB_Order_Guest_ViewModel.GuestState),7 },
};
if (flag)
{
flag = guestRepository.Update(guestFileds, new WhereHelper(nameof(RB_Order_Guest_ViewModel.Id), orderChangeModel.OrderGuestId));
}
#endregion
#region 生成财务单据
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;
}
#endregion
}
if (flag)
{
//Dictionary<string, object> fileds = new Dictionary<string, object>()
//{
// {nameof(RB_Education_Receipt.IsCreate),1}
//};
//flag = education_ReceiptRepository.Update(fileds, new WhereHelper(nameof(RB_Education_Receipt.Id), receiptModel.Id));
}
}
}
return flag;
}
#endregion
} }
} }
...@@ -3695,12 +3695,38 @@ namespace Edu.Module.Finance ...@@ -3695,12 +3695,38 @@ namespace Edu.Module.Finance
//查询关联老师 //查询关联老师
string teacherIds = string.Join(",", list.Where(x => x.EnterID != x.HelpEnterId && x.HelpEnterId > 0).Select(x => x.HelpEnterId).Distinct()); string teacherIds = string.Join(",", list.Where(x => x.EnterID != x.HelpEnterId && x.HelpEnterId > 0).Select(x => x.HelpEnterId).Distinct());
List<Model.ViewModel.User.Employee_ViewModel> teacherList = new List<Model.ViewModel.User.Employee_ViewModel>(); List<Model.ViewModel.User.Employee_ViewModel> teacherList = new List<Model.ViewModel.User.Employee_ViewModel>();
if (!string.IsNullOrEmpty(teacherIds)) { if (!string.IsNullOrEmpty(teacherIds))
{
teacherList = accountRepository.GetEmployeeListRepository(new Model.ViewModel.User.Employee_ViewModel() { Group_Id = groupId, QIds = teacherIds }); teacherList = accountRepository.GetEmployeeListRepository(new Model.ViewModel.User.Employee_ViewModel() { Group_Id = groupId, QIds = teacherIds });
} }
List<RB_Order_ViewModel> sourceTargetList = new List<RB_Order_ViewModel>();
List<int> idList = new List<int>();
var sourceOrderIdList = Common.ConvertHelper.StringToList(string.Join(",", list.Select(x => x.SourceOrderId)));
if (sourceOrderIdList != null && sourceOrderIdList.Count > 0)
{
idList.AddRange(sourceOrderIdList);
}
var targetOrderIdList = Common.ConvertHelper.StringToList(string.Join(",", list.Select(x => x.TargetOrderId)));
if (targetOrderIdList != null && targetOrderIdList.Count > 0)
{
idList.AddRange(targetOrderIdList);
}
if (idList != null && idList.Count > 0)
{
string ids = string.Join(",", idList);
sourceTargetList = orderRepository.GetOrderListRepository(new RB_Order_ViewModel { QOrderIds = ids });
}
foreach (var item in list) foreach (var item in list)
{ {
if (item.SourceOrderId > 0)
{
item.SourceClassName = sourceTargetList?.Where(qitem => qitem.OrderId == item.SourceOrderId)?.FirstOrDefault()?.ClassName;
}
if (item.TargetOrderId > 0)
{
item.TargetClassName = sourceTargetList?.Where(qitem => qitem.OrderId == item.TargetOrderId)?.FirstOrDefault()?.ClassName;
}
string SaleName = ulist.Where(x => x.Id == item.EnterID).FirstOrDefault()?.EmployeeName ?? ""; string SaleName = ulist.Where(x => x.Id == item.EnterID).FirstOrDefault()?.EmployeeName ?? "";
string HelpEnterName = ""; string HelpEnterName = "";
if (item.EnterID != item.HelpEnterId && item.HelpEnterId > 0) { if (item.EnterID != item.HelpEnterId && item.HelpEnterId > 0) {
...@@ -3726,7 +3752,13 @@ namespace Edu.Module.Finance ...@@ -3726,7 +3752,13 @@ namespace Edu.Module.Finance
UnitPrice, UnitPrice,
XHMoney = Math.Round(item.UnitPrice * item.CurrentDeductionHours, 6, MidpointRounding.AwayFromZero), XHMoney = Math.Round(item.UnitPrice * item.CurrentDeductionHours, 6, MidpointRounding.AwayFromZero),
SaleName, SaleName,
HelpEnterName HelpEnterName,
item.JoinType,
item.TargetJoinType,
item.SourceOrderId,
item.TargetOrderId,
item.SourceClassName,
item.TargetClassName,
}); });
} }
} }
......
...@@ -581,6 +581,7 @@ SELECT p.OrderGuestId,p.CurrentDeductionHours,t2.GuestName,p.TeacherId,t3.Teache ...@@ -581,6 +581,7 @@ SELECT p.OrderGuestId,p.CurrentDeductionHours,t2.GuestName,p.TeacherId,t3.Teache
+ec.FirstBookFee + ec.SecondBookFee + ec.ThirdBookFee +ec.FirstBookFee + ec.SecondBookFee + ec.ThirdBookFee
+ec.FirstClassFee + ec.SecondClassFee + ec.ThirdClassFee as TotalSub +ec.FirstClassFee + ec.SecondClassFee + ec.ThirdClassFee as TotalSub
,ec.FirstClassHours + ec.SecondClassHours + ec.ThirdClassHours as ClassHours ,ec.FirstClassHours + ec.SecondClassHours + ec.ThirdClassHours as ClassHours
,o.JoinType,o.TargetJoinType,o.SourceOrderId,o.TargetOrderId
FROM rb_class_check p FROM rb_class_check p
INNER JOIN rb_class_time t on p.ClassTimeId = t.ClassTimeId INNER JOIN rb_class_time t on p.ClassTimeId = t.ClassTimeId
LEFT JOIN rb_order_guest t2 on p.OrderGuestId = t2.Id LEFT JOIN rb_order_guest t2 on p.OrderGuestId = t2.Id
......
...@@ -237,7 +237,9 @@ namespace Edu.Repository.Course ...@@ -237,7 +237,9 @@ namespace Edu.Repository.Course
where += $@" AND o.CreateTime <='{demodel.EndTime} 23:59:59'"; where += $@" AND o.CreateTime <='{demodel.EndTime} 23:59:59'";
} }
string sql = $@" SELECT c.*,c1.ClassName,c1.ClassNo,ca.AdjustPrice FROM RB_Education_Contract c string sql = $@"
SELECT c.*,c1.ClassName,c1.ClassNo,ca.AdjustPrice,o.JoinType,o.TargetJoinType,o.SourceOrderId,o.TargetOrderId
FROM RB_Education_Contract c
left join RB_Education_ContractAdjust ca on c.Id = ca.ContractId left join RB_Education_ContractAdjust ca on c.Id = ca.ContractId
left join rb_order o on c.OrderId = o.OrderId left join rb_order o on c.OrderId = o.OrderId
left join rb_class c1 on o.ClassId = c1.ClassId left join rb_class c1 on o.ClassId = c1.ClassId
......
...@@ -572,7 +572,7 @@ WHERE {where}"; ...@@ -572,7 +572,7 @@ WHERE {where}";
/// <returns></returns> /// <returns></returns>
public List<RB_Order_Guest_ViewModel> GetTempInvitationGuest(Model.ViewModel.EduTask.RB_Temporary_Invitation_ViewModel demodel) public List<RB_Order_Guest_ViewModel> GetTempInvitationGuest(Model.ViewModel.EduTask.RB_Temporary_Invitation_ViewModel demodel)
{ {
string where = $@" 1=1 and A.Status=0 and ti.Status=0 AND (B.IsChaBan=0 OR (B.IsChaBan=1 AND B.EffectStatus IN(1) ))"; string where = $@" 1=1 and A.Status=0 and ti.Status=0 AND (B.JoinType=1 OR (B.JoinType=2 AND B.EffectStatus IN(1) )) ";
if (demodel.Group_Id > 0) if (demodel.Group_Id > 0)
{ {
where += $@" and A.{nameof(Model.ViewModel.EduTask.RB_Temporary_Invitation_ViewModel.Group_Id)} ={demodel.Group_Id}"; where += $@" and A.{nameof(Model.ViewModel.EduTask.RB_Temporary_Invitation_ViewModel.Group_Id)} ={demodel.Group_Id}";
......
...@@ -125,7 +125,14 @@ WHERE 1=1 ...@@ -125,7 +125,14 @@ WHERE 1=1
} }
if (query.VerifyStatus > -1) if (query.VerifyStatus > -1)
{ {
builder.AppendFormat(@" AND A.{0}={1} ", nameof(RB_Education_Receipt_ViewModel.VerifyStatus), query.VerifyStatus); if (query.VerifyStatus == 3)
{
builder.AppendFormat(@" AND A.{0} IN(3,4) ", nameof(RB_Education_Receipt_ViewModel.VerifyStatus));
}
else
{
builder.AppendFormat(@" AND A.{0}={1} ", nameof(RB_Education_Receipt_ViewModel.VerifyStatus), query.VerifyStatus);
}
} }
} }
builder.AppendFormat(" ORDER BY A.{0} DESC ", nameof(RB_Education_Receipt_ViewModel.Id)); builder.AppendFormat(" ORDER BY A.{0} DESC ", nameof(RB_Education_Receipt_ViewModel.Id));
...@@ -252,6 +259,15 @@ WHERE 1=1 ...@@ -252,6 +259,15 @@ WHERE 1=1
return false; return false;
} }
} }
else if (model.ReceiptType == Common.Enum.Finance.ReceiptTypeEnum.OrderSplitClass)
{
flowModel = flowRepository.GetFlowRepository(Common.Config.OrderSplitClassFlowId);
if (flowModel == null)
{
message = "未配置订单分拆流程!";
return false;
}
}
if (flowModel?.FlowNodeList?.Count == 0) if (flowModel?.FlowNodeList?.Count == 0)
{ {
message = "未配置审核流程!"; message = "未配置审核流程!";
......
...@@ -809,10 +809,10 @@ namespace Edu.WebApi.Controllers.Course ...@@ -809,10 +809,10 @@ namespace Edu.WebApi.Controllers.Course
}); });
} }
} }
foreach (var item in tempGuestList.Where(x => x.GuestState == 1 || x.GuestState == 6 || ((x.GuestState == 5 || x.GuestState == 7) && x.ChangeEffectTime.HasValue && Convert.ToDateTime(Common.ConvertHelper.FormatDate(x.ChangeEffectTime)) >= data.ClassDate))) foreach (var item in tempGuestList)
{ {
// if ((item.IsChaBan == 1 && data.ClassDate >= Convert.ToDateTime(Common.ConvertHelper.FormatDate(item.EffectTime)))) if (item.GuestState == 1 || item.GuestState == 6 || ((item.GuestState == 5 || item.GuestState == 7) && item.ChangeEffectTime.HasValue && Convert.ToDateTime(Common.ConvertHelper.FormatDate(item.ChangeEffectTime)) >= data.ClassDate))
//{ {
guestList.Add(new guestList.Add(new
{ {
UserIcon = "", UserIcon = "",
...@@ -836,7 +836,7 @@ namespace Edu.WebApi.Controllers.Course ...@@ -836,7 +836,7 @@ namespace Edu.WebApi.Controllers.Course
StudyNum = (checkLogList != null && checkLogList.Any()) ? checkLogList.Where(x => x.OrderGuestId == item.Id).FirstOrDefault()?.StudyNum ?? 0 : 0, StudyNum = (checkLogList != null && checkLogList.Any()) ? checkLogList.Where(x => x.OrderGuestId == item.Id).FirstOrDefault()?.StudyNum ?? 0 : 0,
IsTemp = 1, IsTemp = 1,
}); });
// } }
} }
var classMinutes = classModule.GetClassMinutesModule(classId); var classMinutes = classModule.GetClassMinutesModule(classId);
......
...@@ -106,5 +106,46 @@ namespace Edu.WebApi.Controllers.EduTask ...@@ -106,5 +106,46 @@ namespace Edu.WebApi.Controllers.EduTask
bool flag = orderChangeModule.SetOrderChangeModule(model, out string message); bool flag = orderChangeModule.SetOrderChangeModule(model, out string message);
return flag ? ApiResult.Success() : ApiResult.Failed(message: message); return flag ? ApiResult.Success() : ApiResult.Failed(message: message);
} }
/// <summary>
/// 订单拆分申请
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetOrderSplit()
{
var model = new RB_Order_Change_ViewModel()
{
Id = base.ParmJObj.GetInt("Id"),
SourceOrderId = base.ParmJObj.GetInt("SourceOrderId"),
ChangeType = base.ParmJObj.GetInt("ChangeType"),
NewClassId = base.ParmJObj.GetInt("NewClassId"),
NewCourseId = base.ParmJObj.GetInt("NewCourseId"),
EffectiveDate = base.ParmJObj.GetDateTime("EffectiveDate"),
Remarks = base.ParmJObj.GetStringValue("Remarks"),
OrderGuestId = base.ParmJObj.GetInt("OrderGuestId"),
OutTime = base.ParmJObj.GetDateTime("OutTime"),
};
var oldOrderModel = orderModule.GetClassOrderInfoModule(model.SourceOrderId);
if (oldOrderModel == null)
{
return ApiResult.ParamIsNull(message: "原订单号不存在!");
}
if (oldOrderModel.PreferPrice != (oldOrderModel.Income + oldOrderModel.PlatformTax - oldOrderModel.Refund))
{
return ApiResult.ParamIsNull(message: "原订单款未收齐,不能转班!");
}
var classModel = classModule.GetClassModule(model.NewClassId);
model.CreateBy = base.UserInfo.Id;
model.CreateTime = DateTime.Now;
model.Group_Id = base.UserInfo.Group_Id;
model.School_Id = classModel.School_Id;
model.UpdateBy = base.UserInfo.Id;
model.UpdateTime = DateTime.Now;
bool flag = orderChangeModule.SetOrderSplitModule(model, out string message);
return flag ? ApiResult.Success() : ApiResult.Failed(message: message);
}
} }
} }
...@@ -1048,6 +1048,12 @@ namespace Edu.WebApi.Controllers.Finance ...@@ -1048,6 +1048,12 @@ namespace Edu.WebApi.Controllers.Finance
x.TotalDiscountMoney, x.TotalDiscountMoney,
x.TotalMoney, x.TotalMoney,
x.Status, x.Status,
x.JoinType,
x.TargetJoinType,
x.SourceOrderId,
x.SourceClassName,
x.TargetOrderId,
x.TargetClassName,
IncomeList = x.FinanceList.Where(t => t.Type == WFTempLateClassEnum.IN).Select(z => new IncomeList = x.FinanceList.Where(t => t.Type == WFTempLateClassEnum.IN).Select(z => new
{ {
z.FrID, z.FrID,
......
...@@ -1570,9 +1570,16 @@ namespace Edu.WebApi.Controllers.User ...@@ -1570,9 +1570,16 @@ namespace Edu.WebApi.Controllers.User
{ {
var AccountId = base.ParmJObj.GetInt("AccountId"); var AccountId = base.ParmJObj.GetInt("AccountId");
var AccountType = (AccountTypeEnum)base.ParmJObj.GetInt("AccountType"); var AccountType = (AccountTypeEnum)base.ParmJObj.GetInt("AccountType");
var Remark = base.ParmJObj.GetStringValue("Remark"); var Remark = base.ParmJObj.GetStringValue("Remark");
var targetAccountType = (AccountTypeEnum)base.ParmJObj.GetInt("TargetAccountType"); var targetAccountType = (AccountTypeEnum)base.ParmJObj.GetInt("TargetAccountType");
if (AccountId <= 0|| base.ParmJObj.GetInt("AccountType")<=0)
{
return ApiResult.ParamIsNull(message: "请选择用户");
}
if (base.ParmJObj.GetInt("TargetAccountType") <= 0)
{
return ApiResult.ParamIsNull(message: "请选择用户目标职能!");
}
var flag = managerModule.SetEmployeeTypeModule(targetAccountType, AccountId, AccountType,Remark,base.UserInfo); var flag = managerModule.SetEmployeeTypeModule(targetAccountType, AccountId, AccountType,Remark,base.UserInfo);
return flag ? ApiResult.Success() : ApiResult.Failed(); return flag ? ApiResult.Success() : ApiResult.Failed();
} }
......
...@@ -87,5 +87,7 @@ ...@@ -87,5 +87,7 @@
//临时上课邀请流程编号 //临时上课邀请流程编号
"TempInvitationClassFlowId": 4, "TempInvitationClassFlowId": 4,
//订单转班流程编号 //订单转班流程编号
"OrderTransClassFlowId": 5 "OrderTransClassFlowId": 5,
//订单分拆流程编号
"OrderSplitClassFlowId": 6
} }
\ No newline at end of file
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