Commit 16073ec3 authored by 黄奎's avatar 黄奎

订单转班修改

parent 778796c4
......@@ -22,4 +22,40 @@ namespace Edu.Common.Enum.Sale
[EnumField("留学就业订单")]
StudyabroadOrder = 2,
}
/// <summary>
/// 订单报入类型
/// </summary>
public enum OrderJoinTypeEnum
{
/// <summary>
/// 正常报入
/// </summary>
[EnumField("正常报入")]
Normal = 1,
/// <summary>
/// 插班报入
/// </summary>
[EnumField("插班报入")]
InsertClass = 2,
/// <summary>
/// 续费订单
/// </summary>
[EnumField("续费订单")]
RenewOrder = 3,
/// <summary>
/// 转班订单
/// </summary>
[EnumField("转班订单")]
TransOrder = 4,
/// <summary>
/// 分拆订单
/// </summary>
[EnumField("分拆订单")]
SplitOrder = 5,
}
}
......@@ -210,11 +210,6 @@ namespace Edu.Model.Entity.Course
/// </summary>
public int StartClassHours { get; set; }
/// <summary>
/// 是否插班报入(1是)
/// </summary>
public int IsChaBan { get; set; }
/// <summary>
/// 销售返佣类型 0百分比 1固定值
/// </summary>
......@@ -279,9 +274,29 @@ namespace Edu.Model.Entity.Course
/// </summary>
public DateTime? LXConfirmDate { get; set; }
///
///<summary>
/// 是否续班订单(1-是)
/// </summary>
public int IsRenewOrder { 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 int TargetOrderId { get; set; }
}
}
......@@ -32,7 +32,7 @@ namespace Edu.Model.Entity.Course
public string GuestName { get; set; }
/// <summary>
/// 状态 1正常 2退学 3-申请中,4-驳回申请,5-停课,6-停课申请中
/// 状态 1正常 2退学 3-退课申请,4-驳回申请,5-停课,6-停课申请中,7-转班申请中
/// </summary>
public int GuestState { get; set; }
......
......@@ -80,5 +80,15 @@ namespace Edu.Model.Entity.EduTask
/// 审核状态(见枚举)
/// </summary>
public Edu.Common.Enum.EduTask.EduTaskRrocessStatus VerifyStatus { get; set; }
/// <summary>
/// 是否生成相应单据
/// </summary>
public int IsCreate { get; set; }
/// <summary>
/// 生效时间
/// </summary>
public DateTime? EffectiveDate { get; set; }
}
}
......@@ -80,6 +80,11 @@ namespace Edu.Model.Entity.EduTask
/// </summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 转出本班时间
/// </summary>
public DateTime OutTime { get; set; }
}
}
......@@ -119,6 +119,11 @@ namespace Edu.Model.ViewModel.Course
/// </summary>
public int ClassMinutes { get; set; }
/// <summary>
/// 课时数
/// </summary>
public decimal TimeHour { get; set; }
/// <summary>
/// 完成情况
/// </summary>
......
......@@ -84,6 +84,7 @@ namespace Edu.Model.ViewModel.Course
case 4: str = "驳回申请"; break;
case 5: str = "停课"; break;
case 6: str = "停课申请中"; break;
case 7: str = "转班申请中"; break;
}
return str;
}
......@@ -128,16 +129,29 @@ namespace Edu.Model.ViewModel.Course
public int StartClassHours { get; set; }
/// <summary>
/// 是否插班报入(1-是)
/// 订单报入类型(1-正常报入,2-插班报入,3-续费订单,4-转班订单,5-分拆订单)
/// </summary>
public int IsChaBan { get; set; }
public OrderJoinTypeEnum JoinType { get; set; }
/// <summary>
/// 生效时间
/// 原订单报入类型(1-正常报入,2-插班报入,3-续费订单,4-转班订单,5-分拆订单)
/// </summary>
public DateTime EffectTime { get; set; }
public OrderJoinTypeEnum TargetJoinType { get; set; }
/// <summary>
/// 原订单编号
/// </summary>
public int SourceOrderId { get; set; }
/// <summary>
/// 目标订单编号
/// </summary>
public int TargetOrderId { get; set; }
/// <summary>
/// 生效时间
/// </summary>
public DateTime EffectTime { get; set; }
/// <summary>
/// 停课生效时间
......@@ -192,6 +206,8 @@ namespace Edu.Model.ViewModel.Course
/// 已上课次数
/// </summary>
public int Ranks { get; set; }
///<summary>
/// 是否续班订单
/// </summary>
public int IsRenewOrder { get; set; }
......
......@@ -9,6 +9,11 @@ namespace Edu.Model.ViewModel.Course
[Serializable]
public class RB_Order_ViewModel : Model.Entity.Course.RB_Order
{
/// <summary>
/// 订单编号【查询使用】
/// </summary>
public string QOrderIds { get; set; }
/// <summary>
/// 班级ids
/// </summary>
......@@ -197,8 +202,23 @@ namespace Edu.Model.ViewModel.Course
}
/// <summary>
/// 园学员编号【续课使用】
/// 学员编号【续课使用,转班使用】
/// </summary>
public int OldGuestId { get; set; }
/// <summary>
/// 学员编号【转班生成财务单据使用】
/// </summary>
public int NewGuestId { get; set; }
/// <summary>
/// 原班级名称
/// </summary>
public string SourceClassName { get; set; }
/// <summary>
/// 目标班级名称
/// </summary>
public string TargetClassName { get; set; }
}
}
\ No newline at end of file
......@@ -60,5 +60,10 @@ namespace Edu.Model.ViewModel.EduTask
/// 结束时间
/// </summary>
public string EndTime { get; set; }
/// <summary>
/// 查询生效时间
/// </summary>
public string QEffectiveDate { get; set; }
}
}
using Edu.AOP.CustomerAttribute;
using Edu.Common.Enum;
using Edu.Common.Enum.Course;
using Edu.Common.Plugin;
using Edu.Model.CacheModel;
using Edu.Model.Entity.Course;
using Edu.Model.ViewModel.Course;
......@@ -1296,7 +1297,12 @@ namespace Edu.Module.Course
IsRenew = item.IsRenewOrder,
item.RenewOrderId,
CheckStatus = checkStatus,
item.IsChaBan,
item.JoinType,
JoinTypeName=item.JoinType.ToName(),
item.TargetJoinType,
TargetJoinTypeName=item.TargetJoinType.ToName(),
item.SourceOrderId,
item.TargetOrderId,
item.StartClassHours,
item.CourseName,
item.EffectStatus,
......
......@@ -340,7 +340,7 @@ namespace Edu.Module.Course
#region 报价单创建订单
/// <summary>
/// 创建订单
///报价单转订单
/// </summary>
/// <param name="offerId"></param>
/// <param name="detailList"></param>
......@@ -383,7 +383,10 @@ namespace Edu.Module.Course
PreferPrice = item.OriginalPrice,
RectorRemark = "",
Refund = 0,
RenewOrderId = 0,
JoinType= OrderJoinTypeEnum.Normal,
TargetJoinType= OrderJoinTypeEnum.Normal,
TargetOrderId=0,
SourceOrderId=0,
SaleRemark = item.Remark,
TeacherRemark = "",
TradeWay = Common.Enum.Course.TradeWayEnum.OnLine,
......
......@@ -310,6 +310,36 @@ namespace Edu.Module.Course
/// <returns></returns>
[TransactionCallHandler]
public virtual bool SetClassOrderModule(RB_Order_ViewModel demodel, UserInfo userInfo, bool isEditOrder, out string message)
{
return SetClassOrderCommonModule(demodel, userInfo, isEditOrder, out message);
}
/// <summary>
/// 修改老订单
/// </summary>
/// <param name="OrderId"></param>
/// <param name="TargetOrderId"></param>
/// <param name="targetJoinType"></param>
/// <returns></returns>
public bool UpdateOrderJoinTypeModule(int OrderId, int TargetOrderId, OrderJoinTypeEnum targetJoinType)
{
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
{nameof(RB_Order_ViewModel.TargetOrderId),TargetOrderId },
{nameof(RB_Order_ViewModel.TargetJoinType),(int)targetJoinType }
};
return orderRepository.Update(fileds, new WhereHelper(nameof(RB_Order_ViewModel.OrderId), OrderId));
}
/// <summary>
/// 日语培训下单
/// </summary>
/// <param name="demodel"></param>
/// <param name="userInfo"></param>
/// <returns></returns>
public virtual bool SetClassOrderCommonModule(RB_Order_ViewModel demodel, UserInfo userInfo, bool isEditOrder, out string message)
{
bool flag = false;
message = "";
......@@ -321,7 +351,7 @@ namespace Edu.Module.Course
message = "班级不存在";
return flag;
}
if (demodel.IsChaBan == 0)
if (demodel.JoinType == OrderJoinTypeEnum.Normal)
{
demodel.CourseId = classModel.CouseId;
}
......@@ -464,7 +494,7 @@ namespace Edu.Module.Course
message = "成交单价不能小于最低价格";
return flag;
}
if (demodel.IsChaBan == 1)
if (demodel.JoinType == OrderJoinTypeEnum.InsertClass)
{
var newPreferPrice = Math.Round(coursePrice / courseModel.ClassHours * (courseModel.ClassHours - demodel.StartClassHours) * demodel.GuestNum, 2);
if (demodel.PreferPrice != (newPreferPrice - demodel.LessPrice))
......@@ -474,6 +504,10 @@ namespace Edu.Module.Course
return flag;
}
}
else if (demodel.JoinType == OrderJoinTypeEnum.TransOrder)
{
//不验证应收
}
else
{
if (demodel.PreferPrice != (demodel.Unit_Price * demodel.GuestNum - demodel.LessPrice))
......@@ -490,7 +524,7 @@ namespace Edu.Module.Course
string SaleRemark = "";
if (demodel.OrderId > 0)
{
if (demodel.IsChaBan == 1)
if (demodel.JoinType == OrderJoinTypeEnum.InsertClass)
{
if (orderModel.EffectStatus != 2)
{
......@@ -605,7 +639,7 @@ namespace Edu.Module.Course
}
else
{
if (demodel.IsChaBan == 1)
if (demodel.JoinType == OrderJoinTypeEnum.InsertClass)
{
if (demodel.EffectTime < Convert.ToDateTime(Common.ConvertHelper.FormatDate(DateTime.Now)))
{
......@@ -694,8 +728,8 @@ namespace Edu.Module.Course
}
#endregion
#region 续课订单 添加学员名单
if (flag && demodel.RenewOrderId > 0 && demodel.OldGuestId>0)
#region 续课订单和转班订单 添加学员名单
if (flag && demodel.OldGuestId > 0)
{
var oldGuestModel = order_GuestRepository.GetEntity(demodel.OldGuestId);
var guestModel = new RB_Order_Guest_ViewModel()
......@@ -705,16 +739,16 @@ namespace Edu.Module.Course
ClassId = demodel.ClassId,
GuestName = oldGuestModel?.GuestName ?? "",
GuestState = 1,
Profession = oldGuestModel?.Profession??"",
Sex = oldGuestModel?.Sex??1,
Profession = oldGuestModel?.Profession ?? "",
Sex = oldGuestModel?.Sex ?? 1,
Age = oldGuestModel?.Age ?? 18,
Mobile = oldGuestModel?.Mobile ?? "",
Basics = oldGuestModel?.Basics,
Education = oldGuestModel?.Education?? GuestEducationEnum.N2,
Education = oldGuestModel?.Education ?? GuestEducationEnum.N2,
GuestSource = demodel.OrderSource,
LearningGoals = oldGuestModel?.LearningGoals??GuestLearningGoalsEnum.Love,
Contact = oldGuestModel?.Contact??"",
ContactMobile = oldGuestModel?.ContactMobile?? "",
LearningGoals = oldGuestModel?.LearningGoals ?? GuestLearningGoalsEnum.Love,
Contact = oldGuestModel?.Contact ?? "",
ContactMobile = oldGuestModel?.ContactMobile ?? "",
Status = 0,
Group_Id = demodel.Group_Id,
School_Id = demodel.School_Id,
......@@ -723,7 +757,7 @@ namespace Edu.Module.Course
UpdateBy = demodel.UpdateBy,
UpdateTime = demodel.UpdateTime,
DropOutRemark = "",
IDCard = oldGuestModel?.IDCard??"",
IDCard = oldGuestModel?.IDCard ?? "",
Domicile = oldGuestModel?.Domicile ?? "",
ContactAddress = oldGuestModel?.ContactAddress ?? "",
SourceId = 0,
......@@ -732,12 +766,21 @@ namespace Edu.Module.Course
VolunteerMajor = oldGuestModel?.VolunteerMajor ?? "",
Price = 0,
StudyRemark = "",
TotalHours = Convert.ToInt32(courseModel.ClassHours),
CompleteHours = 0,
MakeUpHours = 0,
StuIcon = "",
};
if (demodel.RenewOrderId > 0)
{
guestModel.TotalHours = Convert.ToInt32(courseModel.ClassHours);
}
else if (demodel.JoinType == OrderJoinTypeEnum.TransOrder)
{
//原订单学员的剩余课时
guestModel.TotalHours = oldGuestModel.TotalHours - oldGuestModel.CompleteHours;
}
SetOrderGuestInfo(guestModel, out string Nmessage);
demodel.NewGuestId = guestModel.Id;
}
#endregion
}
......@@ -780,6 +823,7 @@ namespace Edu.Module.Course
return flag;
}
/// <summary>
/// 更新订单提成比例
/// </summary>
......@@ -1546,11 +1590,14 @@ namespace Edu.Module.Course
return "转入班级剩余招收人数不足,请核实后再试";
}
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
Dictionary<string, object> keyValues = new Dictionary<string, object>()
{
{ nameof(RB_Order_ViewModel.ClassId),classId}
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
List<WhereHelper> wheres = new List<WhereHelper>()
{
new WhereHelper()
{
FiledName=nameof(RB_Order_ViewModel.OrderId),
FiledValue=orderId,
OperatorEnum=OperatorEnum.Equal
......@@ -1563,11 +1610,14 @@ namespace Edu.Module.Course
var glist = order_GuestRepository.GetOrderGuestListRepository(new RB_Order_Guest_ViewModel() { OrderId = orderId });
foreach (var item in glist)
{
Dictionary<string, object> keyValues1 = new Dictionary<string, object>() {
Dictionary<string, object> keyValues1 = new Dictionary<string, object>()
{
{ nameof(RB_Order_Guest_ViewModel.ClassId),classId}
};
List<WhereHelper> wheres1 = new List<WhereHelper>() {
new WhereHelper(){
List<WhereHelper> wheres1 = new List<WhereHelper>()
{
new WhereHelper()
{
FiledName=nameof(RB_Order_Guest_ViewModel.Id),
FiledValue=item.Id,
OperatorEnum=OperatorEnum.Equal
......@@ -1866,6 +1916,7 @@ namespace Edu.Module.Course
return flag;
}
int Id = order_GuestRepository.Insert(dmodel);
dmodel.Id = Id;
flag = Id > 0;
if (flag)
{
......@@ -2047,6 +2098,23 @@ namespace Edu.Module.Course
if (orderList.Any())
{
string orderIds = string.Join(",", orderList.Select(x => x.OrderId));
List<int> idList = new List<int>();
List<RB_Order_ViewModel> sourceTargetList = new List<RB_Order_ViewModel>();
var sourceOrderIdList = Common.ConvertHelper.StringToList(string.Join(",", orderList.Select(x => x.SourceOrderId)));
if (sourceOrderIdList != null && sourceOrderIdList.Count > 0)
{
idList.AddRange(sourceOrderIdList);
}
var targetOrderIdList = Common.ConvertHelper.StringToList(string.Join(",", orderList.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 });
}
//获取备注列表
var remarkList = order_RemarkRepository.GetOrderRemarkListRepository(new RB_Order_Remark_ViewModel() { QOrderIds = orderIds });
//获取名单列表
......@@ -2055,6 +2123,14 @@ namespace Edu.Module.Course
var clist = education_ContractRepository.GetList(new RB_Education_Contract_ViewModel() { Group_Id = demodel.Group_Id, OrderIds = orderIds, Status = -1 }).Where(x => x.Status != 4).ToList();
foreach (var item in orderList)
{
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;
}
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();
......@@ -2431,7 +2507,6 @@ namespace Edu.Module.Course
return orderRepository.GetOrderNoComplete(demodel);
}
/// <summary>
/// 获取列表
/// </summary>
......
......@@ -8,6 +8,7 @@ using VT.FW.DB;
using Edu.Model.Entity.EduTask;
using Edu.Repository.EduTask;
using Edu.Common.Enum.User;
using Edu.Common.Enum.Sale;
namespace Edu.Module.Course
{
......@@ -169,7 +170,7 @@ namespace Edu.Module.Course
var orderList = orderRepository.GetOrderListRepository(new RB_Order_ViewModel()
{
OrderState = Common.Enum.Course.OrderStateEnum.Normal,
IsChaBan = 1,
JoinType = OrderJoinTypeEnum.InsertClass,
Q_EffectTime = Common.ConvertHelper.FormatDate(DateTime.Now)
});
if (orderList != null && orderList.Count > 0)
......
......@@ -77,6 +77,11 @@ namespace Edu.Module.EduTask
/// </summary>
private readonly RB_Order_ChangeRepository order_ChangeRepository = new RB_Order_ChangeRepository();
/// <summary>
/// 转班订单
/// </summary>
private readonly OrderChangeModule orderChangeModule = new OrderChangeModule();
/// <summary>
/// 获取教务单据分页列表
/// </summary>
......@@ -986,6 +991,17 @@ namespace Edu.Module.EduTask
flag = student_StopClassRepository.UpdateStudentStopClass(receiptModel, auditModel.AuditStatus);
}
}
if (receiptModel.ReceiptType == Common.Enum.Finance.ReceiptTypeEnum.OrderTransClass)
{
if (auditModel.AuditStatus == 2)
{
orderChangeModule.GetChangeOrderListModule();
}
else if(auditModel.AuditStatus == 3)
{
student_BackClassRepository.UpdateGuestStateRepository(receiptModel, auditModel);
}
}
return flag;
}
......
using Edu.AOP.CustomerAttribute;
using Edu.Cache.User;
using Edu.Common;
using Edu.Common.Enum.Course;
using Edu.Common.Enum.EduTask;
using Edu.Common.Enum.Finance;
using Edu.Common.Plugin;
using Edu.Model.CacheModel;
using Edu.Model.Entity.EduTask;
using Edu.Model.ViewModel.Course;
using Edu.Model.ViewModel.EduTask;
using Edu.Module.Course;
using Edu.Repository.Course;
using Edu.Repository.EduTask;
using Edu.Repository.Log;
using Edu.Repository.User;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using VT.FW.DB;
namespace Edu.Module.EduTask
{
......@@ -59,6 +68,21 @@ 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>
private readonly RB_User_ChangeLogRepository changeLogRepository = new RB_User_ChangeLogRepository();
/// <summary>
/// 上课计划+上课时间仓储对象
/// </summary>
private readonly RB_Class_PlanRepository class_PlanRepository = new RB_Class_PlanRepository();
/// <summary>
/// 新增订单转班、分拆
/// </summary>
......@@ -88,13 +112,77 @@ namespace Edu.Module.EduTask
CreateTime = model.CreateTime,
UpdateBy = model.UpdateBy,
UpdateTime = model.UpdateTime,
VerifyStatus = Common.Enum.EduTask.EduTaskRrocessStatus.NotAudit
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),7 }
};
if (flag)
{
flag = guestRepository.Update(guestFileds, new WhereHelper(nameof(RB_Order_Guest_ViewModel.Id), model.OrderGuestId));
}
}
return flag;
}
/// <summary>
/// 学员完成学习分钟数
/// </summary>
/// <param name="guestIds">学员编号</param>
/// <returns></returns>
public GuestFinishMinute_ViewModel GetGuestFinishMinutesModule(string guestIds)
{
var model= classCheckRepository.GetGuestFinishMinutesRepository(guestIds)?.FirstOrDefault();
if (model == null)
{
model = new GuestFinishMinute_ViewModel();
}
return model;
}
/// <summary>
/// 计算当前时间到订单生效时间有效课时数
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public decimal GetClassPlanTimeHoursModule(int ClassId,string StartTime,string EndTime)
{
var list = class_PlanRepository.GetClassPlanListExtRepository(new RB_Class_Plan_ViewModel()
{
ClassId = ClassId,
StartTime = StartTime,
EndTime = EndTime
});
return list?.Sum(qitem => qitem.TimeHour) ?? 0;
}
/// <summary>
/// 定时更新转班订单数据
/// </summary>
public void GetChangeOrderListModule()
{
var list = education_ReceiptRepository.GetEducationReceiptListRepository(new EducationReceiptQuery()
{
ReceiptType = (int)ReceiptTypeEnum.OrderTransClass,
VerifyStatus = (int)EduTaskRrocessStatus.AuditThrough,
QEffectiveDate=Common.ConvertHelper.FormatDate(DateTime.Now)
});
if (list != null && list.Count > 0)
{
foreach (var item in list)
{
if (item.IsCreate == 0)
{
UpdateOrderChangeModule(item);
}
}
}
}
/// <summary>
/// 订单转班处理类方法
/// </summary>
......@@ -105,23 +193,29 @@ namespace Edu.Module.EduTask
if (receiptModel.RelationId > 0)
{
var orderChangeModel = order_ChangeRepository.GetEntity<RB_Order_Change_ViewModel>(receiptModel.RelationId);
if (orderChangeModel != null && orderChangeModel.Id > 0)
{
if (orderChangeModel.EffectiveDate < DateTime.Now)
{
return false;
}
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 = classCheckRepository.GetGuestFinishMinutesRepository(orderChangeModel.OrderGuestId.ToString())?.FirstOrDefault();
var guestModel = guestRepository.GetEntity(orderChangeModel.OrderGuestId);
var guestClassHours = GetGuestFinishMinutesModule(orderChangeModel.OrderGuestId.ToString());
var guestModel = guestRepository.GetEntity(orderChangeModel.OrderGuestId);
//计算课时单价
//老订单应收
decimal oldPreferPrice = oldOrderModel.PreferPrice / guestModel.TotalHours * guestClassHours.FinishClassHours;
//新订单应收
decimal newPreferPrice = oldOrderModel.PreferPrice - oldPreferPrice;
//老订单实收
decimal oldIncome = 0;
//退款
decimal backMoney = oldOrderModel.Income + oldOrderModel.PlatformTax - oldPreferPrice;
#region 生成新订单
var orderModel = new RB_Order_ViewModel()
{
OrderId = 0,
......@@ -142,14 +236,15 @@ namespace Edu.Module.EduTask
LessPrice = 0,
OrderNature = oldOrderModel.OrderNature,
OldPreferPrice = newPreferPrice,//应收,
CourseId = 0,
CourseId = orderChangeModel.NewCourseId,
StartClassHours = 0,
IsChaBan = 0,
UpOrderId = 0,
VisitorReserveId = 0,
IsRenewOrder = 1,
JoinType = Common.Enum.Sale.OrderJoinTypeEnum.TransOrder,
TargetJoinType= Common.Enum.Sale.OrderJoinTypeEnum.Normal,
EffectTime= orderChangeModel.EffectiveDate,
};
//orderModel.RenewOrderId = OrderId;
orderModel.SourceOrderId = orderChangeModel.SourceOrderId;
orderModel.Group_Id = userInfo.Group_Id;
orderModel.School_Id = userInfo.School_Id;
orderModel.Dept_Id = userInfo.DeptId;
......@@ -162,10 +257,224 @@ namespace Edu.Module.EduTask
orderModel.UpdateBy = userInfo.Id;
orderModel.UpdateTime = DateTime.Now;
orderModel.OldGuestId = orderChangeModel.OrderGuestId;
flag = orderModule.SetClassOrderModule(orderModel, userInfo, false, out string message);
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 },
};
if (flag)
{
flag = guestRepository.Update(guestFileds, new WhereHelper(nameof(RB_Order_Guest_ViewModel.Id), orderChangeModel.OrderGuestId));
}
#endregion
#region 生成财务单据
if (flag)
{
var RelevanceFrId = CreateExpenditure(backMoney,guestModel.Id,guestModel.GuestName, userInfo, oldOrderModel.ClassId, oldOrderModel.OrderId, out string msg1);
var InCome = CreateInCome(backMoney, 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;
}
/// <summary>
/// 转班收入
/// </summary>
public int CreateInCome(decimal InCome,int guestId,string GuestName, UserInfo userInfo, int classId, int orderId, int ReFinanceId, out string msg)
{
msg = "";
#region 新增财务单据
var detailList = new List<object>
{
new
{
CostTypeId=533,
Number = 1,
OriginalMoney = InCome,
UnitPrice = InCome,
Remark = "学员【"+GuestName+"】收入"
}
};
var classModel = classRepository.GetEntity(classId);
string Remark = "【" + (classModel?.ClassName ?? "") + "】下,订单" + orderId + " 客人转班";
var financeObj = new
{
BType = 1,
AccountId = 72,
IsPublic = 7,
ClientType = 3659,
CurrencyId = 1,
GuestId=guestId,
WBMoney = InCome,
PayDate = DateTime.Now.ToString("yyyy-MM-dd"),
TemplateId = 186,
OrderSource = 17,
OrderID = orderId,
TCIDList = new List<int>() { classId },
OtherType = 0,
ReFinanceId = ReFinanceId,
CallBackReFrId = 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,
FinanceType = 2,
RemitterName = "转班",
TradeDate = Common.ConvertHelper.FormatDate(DateTime.Now),
AccountNumber = Common.ConvertHelper.FormatDate(DateTime.Now),
};
string sign = EncryptionHelper.AesEncrypt(JsonHelper.Serialize(financeObj), Config.ReadConfigKey("FinanceKey"));
var resultInfo = new
{
msg = sign
};
string apiResult = HttpHelper.HttpPost(Config.ReadConfigKey("IncomeFinanceApi"), JsonHelper.Serialize(resultInfo), "");
JObject parmsJob = JObject.Parse(apiResult);
string resultCode = parmsJob.GetStringValue("resultCode");
int frid = parmsJob.GetInt("data", 0);
if (resultCode == "1" && frid > 0)
{
//记录日志
changeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
{
Id = 0,
Type = 1,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
Group_Id = userInfo.Group_Id,
LogContent = "生成学员转班财务单据【" + orderId + "】",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
else
{
string message = parmsJob.GetStringValue("message");
LogHelper.Write("CreateInCome:" + message);
msg += orderId + "创建财务单据失败;";
}
#endregion
return frid;
}
/// <summary>
/// 转班支出
/// </summary>
public int CreateExpenditure(decimal BackMoney,int guestId, string GuestName, UserInfo userInfo, int classId, int orderId, out string msg)
{
msg = "";
#region 新增财务单据
var detailList = new List<object>
{
new
{
CostTypeId=533,
Number = 1,
OriginalMoney = BackMoney,
UnitPrice = BackMoney,
Remark = "学员【"+GuestName+"】转班支出"
}
};
var classModel = classRepository.GetEntity(classId);
string Remark = "【" + (classModel?.ClassName ?? "") + "】下,订单" + orderId + " 学员转班支出!";
var financeObj = new
{
IsPublic = 7,
ClientType = 10,
ClientID = 3659,
CurrencyId = 1,
GuestId=guestId,
WBMoney = BackMoney,
PayDate = DateTime.Now.ToString("yyyy-MM-dd"),
TemplateId = 185,
OrderSource = 17,
OrderID = orderId,
TCIDList = new List<int>() { 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,
FinanceType = 2
};
string sign = EncryptionHelper.AesEncrypt(JsonHelper.Serialize(financeObj), Config.ReadConfigKey("FinanceKey"));
var resultInfo = new
{
msg = sign
};
string apiResult = HttpHelper.HttpPost(Config.ReadConfigKey("PaymentFinanceApi"), JsonHelper.Serialize(resultInfo), "");
JObject parmsJob = JObject.Parse(apiResult);
string resultCode = parmsJob.GetStringValue("resultCode");
int frid = parmsJob.GetInt("data", 0);
if (resultCode == "1" && frid > 0)
{
//记录日志
changeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
{
Id = 0,
Type = 1,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
Group_Id = userInfo.Group_Id,
LogContent = "生成学员转班财务单据【" + orderId + "】",
School_Id = userInfo.School_Id,
SourceId = 0
});
}
else
{
string message = parmsJob.GetStringValue("message");
LogHelper.Write("CreateExpenditure:" + message);
msg += orderId + "创建财务单据失败;";
}
#endregion
return frid;
}
}
}
......@@ -225,6 +225,10 @@ WHERE 1=1
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.Status), (int)query.Status);
}
if (query.CouseId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.CouseId), query.CouseId);
}
if (query.ClassStatus > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_ViewModel.ClassStatus), (int)query.ClassStatus);
......
......@@ -81,6 +81,7 @@ WHERE 1=1
SELECT A.*,IFNULL(B.RoomName,'') AS RoomName,IFNULL(T.TeacherName,'') AS TeacherName,IFNULL(T.TeacherHead,'') AS UserIcon
,Time.StartTime,time.EndTime,time.ClassTimeId
,TIMESTAMPDIFF(MINUTE, CONCAT('2020-12-16',' ',time.StartTime), CONCAT('2020-12-16',' ',time.EndTime)) AS ClassMinutes
,time.TimeHour
FROM RB_Class_Plan AS A LEFT JOIN rb_class_room AS B ON A.ClassRoomId=B.RoomId
LEFT JOIN rb_teacher AS T ON A.TeacherId=T.TId
LEFT JOIN rb_class_time AS time ON A.ClassPlanId=Time.ClassPlanId
......@@ -127,7 +128,7 @@ WHERE 1=1
}
if (!string.IsNullOrEmpty(query.StartTime))
{
builder.AppendFormat(" AND DATE_FORMAT(A.{0},'%y/%m')>='{1}' ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.StartTime);
builder.AppendFormat(" AND A.{0}>='{1}' ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.StartTime);
}
if (!string.IsNullOrEmpty(query.EndTime))
{
......
......@@ -27,14 +27,18 @@ namespace Edu.Repository.Course
{
where += $@" and o.{nameof(RB_Order_ViewModel.Group_Id)} ={demodel.Group_Id}";
}
if (demodel.School_Id > 0)
{
where += $@" and o.{nameof(RB_Order_ViewModel.School_Id)} ={demodel.School_Id}";
}
//if (demodel.School_Id > 0)
//{
// where += $@" and o.{nameof(RB_Order_ViewModel.School_Id)} ={demodel.School_Id}";
//}
if (demodel.OrderId > 0)
{
where += $@" and o.{nameof(RB_Order_ViewModel.OrderId)} ={demodel.OrderId}";
}
if (!string.IsNullOrEmpty(demodel.QOrderIds))
{
where += $@" and o.{nameof(RB_Order_ViewModel.OrderId)} IN({demodel.QOrderIds})";
}
if (demodel.OrderType > 0)
{
where += $@" and o.{nameof(RB_Order_ViewModel.OrderType)} ={(int)demodel.OrderType}";
......@@ -98,9 +102,9 @@ namespace Edu.Repository.Course
{
where += $@" and o.{nameof(RB_Order_ViewModel.LXConfirmDate)} <='{demodel.ConfirmETime} 23:59:59'";
}
if (demodel.IsChaBan ==1 )
if (demodel.JoinType == OrderJoinTypeEnum.InsertClass )
{
where += $@" and o.{nameof(RB_Order_ViewModel.IsChaBan)} ={demodel.IsChaBan}";
where += $@" and o.{nameof(RB_Order_ViewModel.JoinType)} ={(int)OrderJoinTypeEnum.InsertClass}";
}
if (!string.IsNullOrEmpty(demodel.Q_EffectTime))
{
......@@ -920,9 +924,9 @@ where {where} order by {orderBy}
{
where += $@" and o.{nameof(RB_Order_ViewModel.LXConfirmDate)} <='{demodel.ConfirmETime} 23:59:59'";
}
if (demodel.IsChaBan == 1)
if (demodel.JoinType == OrderJoinTypeEnum.InsertClass)
{
where += $@" and o.{nameof(RB_Order_ViewModel.IsChaBan)} ={demodel.IsChaBan}";
where += $@" and o.{nameof(RB_Order_ViewModel.JoinType)} ={(int)OrderJoinTypeEnum.InsertClass}";
}
if (!string.IsNullOrEmpty(demodel.Q_EffectTime))
{
......
......@@ -34,6 +34,10 @@ namespace Edu.Repository.Course
{
where += $@" and A.{nameof(RB_Order_Guest_ViewModel.Id)} ={demodel.Id}";
}
if (!string.IsNullOrEmpty(demodel.OrderGuestIds))
{
where += $@" and A.{nameof(RB_Order_Guest_ViewModel.Id)} IN ({demodel.OrderGuestIds})";
}
if (demodel.OrderId > 0)
{
where += $@" and A.{nameof(RB_Order_Guest_ViewModel.OrderId)} ={demodel.OrderId}";
......@@ -60,15 +64,16 @@ namespace Edu.Repository.Course
}
if (demodel.QEffectStatus == 1)
{
where += $@" AND (B.IsChaBan=0 OR (B.IsChaBan=1 AND B.EffectStatus IN(1) )) ";
where += $@" AND (B.JoinType=1 OR (B.JoinType=2 AND B.EffectStatus IN(1) )) ";
}
string sql = $@"
SELECT A.*,IFNULL(B.IsChaBan,0) AS IsChaBan,IFNULL(B.StartClassHours,0) AS StartClassHours,IFNULL(C.CourseName,'') AS CourseName
,B.EffectStatus,B.EffectTime,B.UpOrderId,B.OrderType,B.CourseId,B.IsRenewOrder,B.RenewOrderId,sc.StopClassEffectTime
SELECT A.*,IFNULL(B.JoinType,0) AS JoinType,IFNULL(B.TargetJoinType,0) AS TargetJoinType,IFNULL(B.StartClassHours,0) AS StartClassHours
,IFNULL(C.CourseName,'') AS CourseName,B.EffectStatus,B.EffectTime,B.UpOrderId,B.OrderType,B.CourseId,B.IsRenewOrder,B.RenewOrderId
,sc.StopClassEffectTime,B.SourceOrderId,B.TargetOrderId
FROM RB_Order_Guest AS A LEFT JOIN rb_order AS B ON A.OrderId=B.OrderId
LEFT JOIN rb_course AS C ON (B.CourseId=C.CourseId AND B.CourseId>0 AND B.OrderType=1)
LEFT JOIN (SELECT OrderGuestId,MAX(TakeEffectTime) as StopClassEffectTime from rb_student_stopclass where IsAuditThrough=1 GROUP BY OrderGuestId) as sc on sc.OrderGuestId=a.Id
LEFT JOIN (SELECT OrderGuestId,MAX(TakeEffectTime) as StopClassEffectTime from rb_student_stopclass where IsAuditThrough=1 GROUP BY OrderGuestId) as sc on sc.OrderGuestId=a.Id
WHERE {where}";
return Get<RB_Order_Guest_ViewModel>(sql).ToList();
}
......@@ -88,8 +93,9 @@ WHERE {where}";
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.* ,IFNULL(course.CourseName,'') AS CourseName,tOrder.CourseId,tOrder.OrderType,tOrder.StartClassHours,tOrder.IsChaBan,tOrder.EffectTime
,tOrder.EffectStatus,tOrder.UpOrderId,sc.StopClassEffectTime
SELECT A.* ,IFNULL(course.CourseName,'') AS CourseName,tOrder.CourseId,tOrder.OrderType,tOrder.StartClassHours
,IFNULL(tOrder.JoinType,0) AS JoinType,IFNULL(tOrder.TargetJoinType,0) AS TargetJoinType,tOrder.EffectTime
,tOrder.EffectStatus,tOrder.UpOrderId,sc.StopClassEffectTime,tOrder.SourceOrderId,tOrder.TargetOrderId
FROM RB_Order_Guest AS A LEFT JOIN RB_Order as tOrder ON A.OrderId=tOrder.OrderId
LEFT JOIN rb_course AS course ON (tOrder.CourseId=course.CourseId AND tOrder.CourseId>0 AND tOrder.OrderType=1)
LEFT JOIN (SELECT OrderGuestId,MAX(TakeEffectTime) as StopClassEffectTime from rb_student_stopclass where IsAuditThrough=1 GROUP BY OrderGuestId) as sc on sc.OrderGuestId=a.Id
......@@ -226,13 +232,8 @@ WHERE 1=1 AND A.Status=0
{
where += $@" and A.{nameof(RB_Order_Guest_ViewModel.GuestState)} ={demodel.GuestState}";
}
if (demodel.QEffectStatus == 1)
{
where += $@" AND (B.IsChaBan=0 OR (B.IsChaBan=1 AND B.EffectStatus IN(1) )) ";
}
string sql = $@"
SELECT A.*,IFNULL(B.IsChaBan,0) AS IsChaBan,IFNULL(B.StartClassHours,0) AS StartClassHours
SELECT A.*,IFNULL(B.StartClassHours,0) AS StartClassHours
,B.EffectStatus,B.EffectTime,B.UpOrderId,B.OrderType,B.CourseId
FROM RB_Order_Guest AS A LEFT JOIN rb_order AS B ON A.OrderId=B.OrderId
LEFT JOIN rb_class as c on a.ClassId=c.ClassId
......@@ -254,8 +255,9 @@ WHERE {where}";
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*,IFNULL(B.IsChaBan,0) AS IsChaBan,IFNULL(B.StartClassHours,0) AS StartClassHours,IFNULL(C.CourseName,'') AS CourseName,class.ClassName,b.EnterID
,plan.TotalPlanNum,planr.Ranks ,B.EffectStatus,B.EffectTime,B.UpOrderId,B.OrderType,B.CourseId,B.IsRenewOrder,B.RenewOrderId,sc.StopClassEffectTime
SELECT A.*,IFNULL(B.JoinType,0) AS JoinType,IFNULL(B.TargetJoinType,0) AS TargetJoinType,IFNULL(B.StartClassHours,0) AS StartClassHours,IFNULL(C.CourseName,'') AS CourseName
,class.ClassName,b.EnterID,plan.TotalPlanNum,planr.Ranks ,B.EffectStatus,B.EffectTime,B.UpOrderId,B.OrderType,B.CourseId,B.IsRenewOrder,B.RenewOrderId
,sc.StopClassEffectTime,B.SourceOrderId,B.TargetOrderId
FROM RB_Order_Guest AS A LEFT JOIN rb_order AS B ON A.OrderId=B.OrderId
LEFT JOIN rb_class as class on class.ClassId=a.ClassId
LEFT JOIN rb_course AS C ON (B.CourseId=C.CourseId AND B.CourseId>0 AND B.OrderType=1)
......@@ -309,9 +311,6 @@ WHERE 1=1 and A.Status=0 and class.Status=0 and b.OrderState<>3
return GetPage<RB_Order_Guest_ViewModel>(pageIndex, pageSize, out rowsCount, builder.ToString()).ToList();
}
/// <summary>
/// 获取分页列表
/// </summary>
......@@ -325,8 +324,10 @@ WHERE 1=1 and A.Status=0 and class.Status=0 and b.OrderState<>3
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*,IFNULL(B.IsChaBan,0) AS IsChaBan,IFNULL(B.StartClassHours,0) AS StartClassHours,school.SName as SchoolName,teacher.TeacherName,IFNULL(C.CourseName,'') AS CourseName,class.ClassNo,class.ClassName,b.EnterID
,plan.TotalPlanNum,planr.Ranks ,B.EffectStatus,B.EffectTime,B.UpOrderId,B.OrderType,B.CourseId,B.IsRenewOrder,B.RenewOrderId,sc.StopClassEffectTime
SELECT A.*,IFNULL(B.JoinType,0) AS JoinType,IFNULL(B.TargetJoinType,0) AS TargetJoinType,IFNULL(B.StartClassHours,0) AS StartClassHours,school.SName as SchoolName
,teacher.TeacherName,IFNULL(C.CourseName,'') AS CourseName,class.ClassNo,class.ClassName,b.EnterID
,plan.TotalPlanNum,planr.Ranks ,B.EffectStatus,B.EffectTime,B.UpOrderId,B.OrderType,B.CourseId,B.IsRenewOrder
,B.RenewOrderId,sc.StopClassEffectTime,B.SourceOrderId,B.TargetOrderId
FROM RB_Order_Guest AS A LEFT JOIN rb_order AS B ON A.OrderId=B.OrderId
LEFT JOIN rb_class as class on class.ClassId=a.ClassId
LEFT JOIN rb_course AS C ON (B.CourseId=C.CourseId AND B.CourseId>0 AND B.OrderType=1)
......
......@@ -3,6 +3,7 @@ using Edu.Model.Entity.Course;
using Edu.Model.Entity.EduTask;
using Edu.Model.ViewModel.Course;
using Edu.Model.ViewModel.EduTask;
using Edu.Repository.EduTask;
using System;
using System.Collections.Generic;
using System.Linq;
......@@ -27,6 +28,11 @@ namespace Edu.Repository.Course
/// </summary>
private readonly RB_OrderRepository orderRepository = new RB_OrderRepository();
/// <summary>
/// 订单转班仓储层对象
/// </summary>
private readonly RB_Order_ChangeRepository order_ChangeRepository = new RB_Order_ChangeRepository();
/// <summary>
/// 获取学员退课单据列表
/// </summary>
......@@ -133,5 +139,34 @@ WHERE 1=1 ");
}
return flag;
}
/// <summary>
/// 更新退课相关信息
/// </summary>
/// <param name="receiptModel"></param>
/// <param name="auditModel"></param>
/// <returns></returns>
public bool UpdateGuestStateRepository(RB_Education_Receipt receiptModel, EduReceiptAudit auditModel)
{
bool flag = false;
var model = order_ChangeRepository.GetEntity(receiptModel.RelationId);
int GuestState = 0;
if (auditModel.AuditStatus == 2)
{
GuestState = 1;
}
if (auditModel.AuditStatus == 3)
{
GuestState = 4;
}
///更新学员退课状态
Dictionary<string, object> guestFileds = new Dictionary<string, object>()
{
{nameof(RB_Order_Guest_ViewModel.GuestState),GuestState }
};
flag = order_GuestRepository.Update(guestFileds, new WhereHelper(nameof(RB_Order_Guest_ViewModel.Id), model.OrderGuestId));
return flag;
}
}
}
\ No newline at end of file
......@@ -133,6 +133,64 @@ WHERE 1=1
}
/// <summary>
/// 获取教务单据列表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Education_Receipt_ViewModel> GetEducationReceiptListRepository(EducationReceiptQuery query)
{
var parameters = new DynamicParameters();
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*,IFNULL(B.ClassName,'') AS ClassName,IFNULL(B.ClassNo,'') AS ClassNo,IFNULL(C.TeacherName,'') AS TeacherName
,IFNULL(D.SName,'') AS SchoolName,IFNULL(E.CourseName,'') AS CourseName
FROM RB_Education_Receipt AS A LEFT JOIN rb_class AS B ON A.ClassId=B.ClassId
LEFT JOIN rb_teacher AS C ON B.Teacher_Id=C.TId
LEFT JOIN rb_school AS D ON A.School_Id=D.SId
LEFT JOIN rb_course AS E ON B.CouseId=E.CourseId
WHERE 1=1
");
if (query != null)
{
if (query.Group_Id > 0)
{
builder.AppendFormat(@" AND A.{0}={1} ", nameof(RB_Education_Receipt_ViewModel.Group_Id), query.Group_Id);
}
if (!string.IsNullOrEmpty(query.QIds))
{
builder.AppendFormat(@" AND A.{0} IN ({1}) ", nameof(RB_Education_Receipt_ViewModel.Id), query.QIds);
}
if (!string.IsNullOrEmpty(query.Title))
{
builder.AppendFormat(@" AND A.{0} LIKE @Title ", nameof(RB_Education_Receipt_ViewModel.Title));
parameters.Add("Title", "%" + query.Title.Trim() + "%");
}
if (!string.IsNullOrEmpty(query.StartTime))
{
builder.AppendFormat(@" AND A.{0}>='{1}' ", nameof(RB_Education_Receipt_ViewModel.CreateTime), query.StartTime);
}
if (!string.IsNullOrEmpty(query.EndTime))
{
builder.AppendFormat(@" AND A.{0}<='{1} 23:59:59' ", nameof(RB_Education_Receipt_ViewModel.CreateTime), query.EndTime);
}
if (query.ReceiptType > 0)
{
builder.AppendFormat(@" AND A.{0}={1} ", nameof(RB_Education_Receipt_ViewModel.ReceiptType), query.ReceiptType);
}
if (query.VerifyStatus > -1)
{
builder.AppendFormat(@" AND A.{0}={1} ", nameof(RB_Education_Receipt_ViewModel.VerifyStatus), query.VerifyStatus);
}
if (!string.IsNullOrEmpty(query.QEffectiveDate))
{
builder.AppendFormat(@" AND A.{0}>='{1}' ", nameof(RB_Education_Receipt_ViewModel.EffectiveDate), query.QEffectiveDate);
}
}
return Get<RB_Education_Receipt_ViewModel>(builder.ToString(), parameters).ToList();
}
/// <summary>
/// 新增修改教务单据
/// </summary>
......
......@@ -771,7 +771,7 @@ namespace Edu.WebApi.Controllers.Course
List<object> guestList = new List<object>();
foreach (var item in orderGuestList.Where(x => x.GuestState == 1 || x.GuestState == 6 || (x.GuestState == 5 && x.StopClassEffectTime.HasValue && Convert.ToDateTime(Common.ConvertHelper.FormatDate(x.StopClassEffectTime)) >= data.ClassDate)))
{
if (item.IsChaBan == 0 || (item.IsChaBan == 1 && data.ClassDate >= Convert.ToDateTime(Common.ConvertHelper.FormatDate(item.EffectTime))))
if (item.JoinType == Common.Enum.Sale.OrderJoinTypeEnum.Normal || (item.JoinType == Common.Enum.Sale.OrderJoinTypeEnum.InsertClass && data.ClassDate >= Convert.ToDateTime(Common.ConvertHelper.FormatDate(item.EffectTime))))
{
guestList.Add(new
{
......@@ -788,7 +788,12 @@ namespace Edu.WebApi.Controllers.Course
item.TotalHours,
item.CompleteHours,
item.StartClassHours,
item.IsChaBan,
item.JoinType,
JoinTypeName=item.JoinType.ToName(),
item.TargetJoinType,
TargetJoinTypeName=item.TargetJoinType.ToName(),
item.SourceOrderId,
item.TargetOrderId,
item.EffectStatus,
item.EffectStatusStr,
EffectTime = Common.ConvertHelper.FormatDate(item.EffectTime),
......
......@@ -57,11 +57,11 @@ namespace Edu.WebApi.Controllers.Course
List<object> result = new List<object>();
foreach (var x in list)
{
int IsChaBan = 0;//不能插班报入
int IsInsertClass = 0;//不能插班报入
int SurplusNum = x.ClassPersion - x.OrderStudentCount;
if (x.ClassStatus == ClassStatusEnum.StudyIng && SurplusNum > 0)
{
IsChaBan = 1;//可以插班报入
IsInsertClass = 1;//可以插班报入
}
var obj = new
{
......@@ -102,7 +102,7 @@ namespace Edu.WebApi.Controllers.Course
x.SchoolName,
UpdateTime = Common.ConvertHelper.FormatTime(x.UpdateTime),
x.OtherCourseList,
IsChaBan,
IsChaBan= IsInsertClass,
};
result.Add(obj);
}
......@@ -188,7 +188,12 @@ namespace Edu.WebApi.Controllers.Course
x.CourseId,
x.CourseName,
x.StartClassHours,
x.IsChaBan,
x.JoinType,
x.TargetJoinType,
x.TargetOrderId,
x.TargetClassName,
x.SourceOrderId,
x.SourceClassName,
x.ClassSchoolId,
x.TradeWay,
x.Class_Price,
......@@ -233,6 +238,7 @@ namespace Edu.WebApi.Controllers.Course
x.UpOrderId,
x.VisitorReserveId,
x.RenewOrderId,
SaleRemarkList = x.SaleRemarkList.Select(z => new
{
z.Id,
......@@ -453,12 +459,18 @@ namespace Edu.WebApi.Controllers.Course
OldPreferPrice = base.ParmJObj.GetDecimal("OldPreferPrice"),
CourseId = base.ParmJObj.GetInt("CourseId"),
StartClassHours = base.ParmJObj.GetInt("StartClassHours"),
IsChaBan=base.ParmJObj.GetInt("IsChaBan"),
EffectTime=base.ParmJObj.GetDateTime("EffectTime"),
UpOrderId=base.ParmJObj.GetInt("UpOrderId"),
VisitorReserveId=base.ParmJObj.GetInt("VisitorReserveId"),
JoinType= OrderJoinTypeEnum.Normal,
TargetJoinType= OrderJoinTypeEnum.Normal,
};
var IsInsertClass= base.ParmJObj.GetInt("IsChaBan");
if (IsInsertClass == 1)
{
demodel.JoinType = OrderJoinTypeEnum.InsertClass;
}
if (demodel.OrderType == OrderTypeEnum.CourseOrder && demodel.ClassId <= 0)
{
return ApiResult.ParamIsNull("请传递班级id");
......@@ -493,11 +505,11 @@ namespace Edu.WebApi.Controllers.Course
if (demodel.OrderType == OrderTypeEnum.CourseOrder)
{
if (demodel.IsChaBan == 0)
if (demodel.JoinType == OrderJoinTypeEnum.Normal)
{
demodel.StartClassHours = 0;
}
else if (demodel.IsChaBan == 1)
else if (demodel.JoinType == OrderJoinTypeEnum.InsertClass)
{
if (demodel.CourseId <= 0)
{
......@@ -588,7 +600,7 @@ namespace Edu.WebApi.Controllers.Course
model.OrderNature,
OrderNatureName = model.OrderNature.ToName(),
model.OldPreferPrice,
model.IsChaBan,
IsChaBan=model.JoinType== OrderJoinTypeEnum.InsertClass?1:0,
model.CourseId,
model.StartClassHours,
EffectTime = Common.ConvertHelper.FormatDate(model.EffectTime),
......@@ -1033,7 +1045,12 @@ namespace Edu.WebApi.Controllers.Course
x.CourseId,
x.CourseName,
x.StartClassHours,
x.IsChaBan,
x.JoinType,
JoinTypeName= x.JoinType.ToName(),
x.TargetJoinType,
TargetJoinTypeName=x.TargetJoinType.ToName(),
x.SourceOrderId,
x.TargetOrderId,
x.EffectStatus,
x.EffectStatusStr,
EffectTime=Common.ConvertHelper.FormatDate(x.EffectTime),
......@@ -1181,7 +1198,14 @@ namespace Edu.WebApi.Controllers.Course
x.ClassId,
x.CourseId,
x.CourseName,
x.IsChaBan,
x.JoinType,
JoinTypeName=x.JoinType.ToName(),
x.TargetJoinType,
TargetJoinTypeName=x.JoinType.ToName(),
x.SourceOrderId,
x.SourceClassName,
x.TargetOrderId,
x.TargetClassName,
x.StartClassHours,
x.OrderType,
x.SourceId,
......@@ -1340,7 +1364,14 @@ namespace Edu.WebApi.Controllers.Course
x.ClassSchoolId,
x.ClassName,
OpenTime=Common.ConvertHelper.FormatDate(x.OpenTime),
x.IsChaBan,
x.JoinType,
JoinTypeName=x.JoinType.ToName(),
x.TargetJoinType,
TargetJoinTypeName=x.TargetJoinType.ToName(),
x.SourceOrderId,
x.SourceClassName,
x.TargetOrderId,
x.TargetClassName,
x.StartClassHours,
x.CourseName,
x.TradeWay,
......
......@@ -140,12 +140,14 @@ namespace Edu.WebApi.Controllers.Course
OldPreferPrice = base.ParmJObj.GetDecimal("PreferPrice"),//应收,
CourseId=0,
StartClassHours=0,
IsChaBan=0,
UpOrderId=0,
VisitorReserveId=0,
IsRenewOrder=1,
JoinType= Common.Enum.Sale.OrderJoinTypeEnum.RenewOrder,
TargetJoinType= Common.Enum.Sale.OrderJoinTypeEnum.Normal,
};
orderModel.RenewOrderId = OrderId;
orderModel.SourceOrderId = OrderId;
orderModel.Group_Id = base.UserInfo.Group_Id;
orderModel.School_Id = base.UserInfo.School_Id;
orderModel.Dept_Id = base.UserInfo.DeptId;
......@@ -159,6 +161,10 @@ namespace Edu.WebApi.Controllers.Course
orderModel.UpdateTime = DateTime.Now;
orderModel.OldGuestId = guestId;
bool flag = orderModule.SetClassOrderModule(orderModel, base.UserInfo, base.CheckUserActionAuth("Edit_Order"), out string message);
if (flag)
{
flag = orderModule.UpdateOrderJoinTypeModule(OrderId, orderModel.OrderId, Common.Enum.Sale.OrderJoinTypeEnum.RenewOrder);
}
return flag ? ApiResult.Success() : ApiResult.Failed(message: message);
}
......
......@@ -256,7 +256,13 @@ namespace Edu.WebApi.Controllers.Course
item.EnterName,
item.EnterID,
item.IsRenewOrder,
item.RenewOrderId
item.RenewOrderId,
item.JoinType,
JoinTypeName=item.JoinType.ToName(),
item.TargetJoinType,
TargetJoinTypeName=item.TargetJoinType.ToName(),
item.TargetOrderId,
item.SourceOrderId,
});
}
pageModel.Count = rowsCount;
......
......@@ -7,6 +7,7 @@ using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Linq;
namespace Edu.WebApi.Controllers.EduTask
{
......@@ -29,6 +30,11 @@ namespace Edu.WebApi.Controllers.EduTask
/// </summary>
private readonly ClassModule classModule = AOP.AOPHelper.CreateAOPObject<ClassModule>();
/// <summary>
/// 订单处理类对象
/// </summary>
private readonly OrderModule orderModule = new OrderModule();
/// <summary>
/// 新增订单转班申请
/// </summary>
......@@ -46,8 +52,51 @@ namespace Edu.WebApi.Controllers.EduTask
EffectiveDate = base.ParmJObj.GetDateTime("EffectiveDate"),
Remarks = base.ParmJObj.GetStringValue("Remarks"),
OrderGuestId=base.ParmJObj.GetInt("OrderGuestId"),
OutTime=base.ParmJObj.GetDateTime("OutTime"),
};
var classModel = classModule.GetClassModule(model.NewClassId );
if (Convert.ToDateTime(Common.ConvertHelper.FormatDate(model.OutTime)) < Convert.ToDateTime(Common.ConvertHelper.FormatDate(DateTime.Now)) )
{
return ApiResult.ParamIsNull(message: "转出本班日期必须大于今天!");
}
if (Convert.ToDateTime(Common.ConvertHelper.FormatDate(model.OutTime)) > Convert.ToDateTime(Common.ConvertHelper.FormatDate(model.EffectiveDate)))
{
return ApiResult.ParamIsNull(message: "新订单生效日期必须大于或等于转出本班日期!");
}
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);
if (oldOrderModel.CourseId != model.NewCourseId)
{
return ApiResult.ParamIsNull(message: "原订单号课程和新班级课程不一致,请核实!");
}
var guestModel = classModule.GetOrderGuestListModule(new Model.ViewModel.Course.RB_Order_Guest_ViewModel()
{
OrderId = model.SourceOrderId,
QEffectStatus = 1,
OrderGuestIds = model.OrderGuestId.ToString()
})?.FirstOrDefault();
if (guestModel != null && guestModel.Id > 0)
{
var surplusHours= orderChangeModule.GetClassPlanTimeHoursModule(oldOrderModel.ClassId,
Common.ConvertHelper.FormatDate(DateTime.Now),
Common.ConvertHelper.FormatDate(model.EffectiveDate)
);
if (guestModel.ValidClassHours - surplusHours <= 0)
{
return ApiResult.ParamIsNull(message: "当前学员预计没有足够转班的有效课时,请注意核对!");
}
}
else
{
return ApiResult.ParamIsNull(message: "学员新增状态不正确,请核实!");
}
model.CreateBy = base.UserInfo.Id;
model.CreateTime = DateTime.Now;
model.Group_Id = base.UserInfo.Group_Id;
......
using Edu.Common.Plugin;
using Edu.Module.Course;
using Edu.Module.Duty;
using Edu.Module.EduTask;
using System;
using System.IO;
using System.Threading;
......@@ -27,6 +28,11 @@ namespace Edu.WebApi.Timers
/// </summary>
private static readonly Module.EduTask.StopStudentClassModule stopStudentClassModule = AOP.AOPHelper.CreateAOPObject<Module.EduTask.StopStudentClassModule>();
/// <summary>
/// 转班订单处理类对象
/// </summary>
private static readonly OrderChangeModule orderChangeModule = new OrderChangeModule();
static System.Timers.Timer timer1;//计时器
static System.Timers.Timer timer2;//定期处理未值班数据
......@@ -35,6 +41,8 @@ namespace Edu.WebApi.Timers
static System.Timers.Timer timer4;//定时处理停课申请生效日期以及学员的上课状态
static System.Timers.Timer changeOrder;//批量处理转班订单
public static void RunTimer()
{
timer1 = new System.Timers.Timer
......@@ -66,6 +74,12 @@ namespace Edu.WebApi.Timers
timer4.Elapsed += new System.Timers.ElapsedEventHandler(UpdateAuditThroughStudent);
timer4.Enabled = true;
changeOrder= new System.Timers.Timer()
{
Interval = (1000 * 60) * (1) //1小时执行一次
};
changeOrder.Elapsed += new System.Timers.ElapsedEventHandler(BatchDealChangeOrder);
changeOrder.Enabled = true;
}
public static void RunStop()
......@@ -74,6 +88,7 @@ namespace Edu.WebApi.Timers
timer2.Enabled = false;
timer3.Enabled = false;
timer4.Enabled = false;
changeOrder.Enabled = false;
}
/// <summary>
......@@ -83,6 +98,7 @@ namespace Edu.WebApi.Timers
private static int inTimer2 = 0;
private static int inTimer3 = 0;
private static int inTimer4 = 0;
private static int changeOrder_Timer = 0;
/// <summary>
/// 清理文件
......@@ -174,5 +190,19 @@ namespace Edu.WebApi.Timers
Interlocked.Exchange(ref inTimer4, 0);
}
}
/// <summary>
/// 批量处理转班订单
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public static void BatchDealChangeOrder(object sender, System.Timers.ElapsedEventArgs e)
{
if (Interlocked.Exchange(ref changeOrder_Timer, 1) == 0)
{
orderChangeModule.GetChangeOrderListModule();
Interlocked.Exchange(ref changeOrder_Timer, 0);
}
}
}
}
\ No newline at end of file
{
"ConnectionStrings": {
"DefaultConnection": "server=192.168.20.214;user id=reborn;password=Reborn@2018;database=reborn_edu;CharSet=utf8mb4; Convert Zero Datetime=true; ",
"DefaultConnection": "server=192.168.20.214;user id=reborn;password=Reborn@2018;database=test_edu;CharSet=utf8mb4; Convert Zero Datetime=true; ",
"DefaultConnectionPName": "MySql.Data.MySqlClient",
"FinanceConnection": "server=192.168.20.214;user id=reborn;password=Reborn@2018;database=reborn_finance;CharSet=utf8mb4; Convert Zero Datetime=true; ",
"FinanceConnectionPName": "MySql.Data.MySqlClient",
......@@ -31,8 +31,8 @@
"MongoDBName": "Edu",
"WkHtmlToPdfPath": "D:/wkhtmltopdf/bin/",
"FinanceKey": "FinanceMallInsertToERPViitto2020",
"PaymentFinanceApi": "http://192.168.1.13:8083/api/Mall/InsertFinanceBatchForMallIn",
"IncomeFinanceApi": "http://192.168.20.9:8083/api/Mall/InsertFinanceBatchForMallOut",
"PaymentFinanceApi": "http://192.168.20.7:8083/api/Mall/InsertFinanceBatchForMallOut",
"IncomeFinanceApi": "http://192.168.20.7:8083/api/Mall/InsertFinanceBatchForMallIn",
"sTenpayNotifyUrl": "http://eduapi.oytour.com/api/WeChatPay/WxPayCallback", //下单回调地址
"sTenpayNotifyRefundUrl": "http://eduapi.oytour.com/api/WeChatPay/Refunds", //退款回调地址
"FinanceDateBase": "reborn_finance",
......
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