using Edu.Common.API;
using Edu.Common.Plugin;
using Edu.Model.ViewModel.EduTask;
using Edu.Model.ViewModel.Sell;
using Edu.Module.Course;
using Edu.Module.EduTask;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Edu.WebApi.Controllers.EduTask
{
///
/// 订单转班、分拆控制器
///
[Route("api/[controller]/[action]")]
[ApiExceptionFilter]
[ApiController]
[EnableCors("AllowCors")]
public class OrderChangeController : BaseController
{
///
/// 订单转班、分拆处理类对象
///
private readonly OrderChangeModule orderChangeModule = AOP.AOPHelper.CreateAOPObject();
///
/// 班级处理类对象
///
private readonly ClassModule classModule = AOP.AOPHelper.CreateAOPObject();
///
/// 订单处理类对象
///
private readonly OrderModule orderModule = new OrderModule();
///
/// 新增订单转班申请
///
///
[HttpPost]
public ApiResult SetOrderChange()
{
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"),
};
string receiptFile = string.Empty;
try
{
List receiptFileList = Common.Plugin.JsonHelper.DeserializeObject>(base.ParmJObj.GetStringValue("ReceiptFileList"));
if (receiptFileList == null || !receiptFileList.Any())
{
return ApiResult.Failed("附件必须上传");
}
else
{
receiptFile = JsonHelper.Serialize(receiptFileList);
}
}
catch (Exception ex)
{
Common.Plugin.LogHelper.Write(ex, "SetOrderChange");
}
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.DiscountMoney+ 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 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;
model.School_Id = classModel.School_Id;
model.UpdateBy = base.UserInfo.Id;
model.UpdateTime = DateTime.Now;
bool flag = orderChangeModule.SetOrderChangeModule(model, receiptFile, out string message);
return flag ? ApiResult.Success() : ApiResult.Failed(message: message);
}
///
/// 订单拆分申请
///
///
[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"),
};
string receiptFile = string.Empty;
try
{
List receiptFileList = Common.Plugin.JsonHelper.DeserializeObject>(base.ParmJObj.GetStringValue("ReceiptFileList"));
if (receiptFileList == null || !receiptFileList.Any())
{
return ApiResult.Failed("附件必须上传");
}
else
{
receiptFile = JsonHelper.Serialize(receiptFileList);
}
}
catch (Exception ex)
{
Common.Plugin.LogHelper.Write(ex, "SetOrderSplit");
}
var oldOrderModel = orderModule.GetClassOrderInfoModule(model.SourceOrderId);
if (oldOrderModel == null)
{
return ApiResult.ParamIsNull(message: "原订单号不存在!");
}
if (oldOrderModel.PreferPrice != (oldOrderModel.Income +oldOrderModel.DiscountMoney+ 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, receiptFile, out string message);
return flag ? ApiResult.Success() : ApiResult.Failed(message: message);
}
///
/// 订单拆分申请
///
///
[HttpPost]
public ApiResult TestUpdateOrderSplit()
{
var Id = base.ParmJObj.GetInt("Id");
var Type = base.ParmJObj.GetInt("Type");
bool flag = orderChangeModule.TestUpdateOrderSplitModule(Id, Type);
return flag ? ApiResult.Success() : ApiResult.Failed();
}
///
/// 回归原班
///
///
[HttpPost]
public ApiResult RegressSourceClass()
{
var OrderId = base.ParmJObj.GetInt("OrderId");
bool flag = orderChangeModule.RegressSourceClassModule(OrderId,out string message);
return flag ? ApiResult.Success() : ApiResult.Failed(message: message);
}
}
}