using System;
using System.Collections.Generic;
using System.Linq;
using Aliyun.OSS;
using Edu.Cache.User;
using Edu.Common.API;
using Edu.Common.Enum.Course;
using Edu.Common.Enum.Finance;
using Edu.Common.Enum.Sale;
using Edu.Common.Enum.User;
using Edu.Common.Plugin;
using Edu.Model.ViewModel.Course;
using Edu.Model.ViewModel.Grade;
using Edu.Model.ViewModel.Log;
using Edu.Model.ViewModel.Sell;
using Edu.Module.Course;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using MongoDB.Driver.Core.Operations;
using Newtonsoft.Json.Linq;

namespace Edu.WebApi.Controllers.Course
{
    [Route("api/[controller]/[action]")]
    [ApiExceptionFilter]
    [ApiController]
    [EnableCors("AllowCors")]
    public class OrderController : BaseController
    {
        /// <summary>
        /// 订单处理类对象
        /// </summary>
        private readonly OrderModule orderModule = AOP.AOPHelper.CreateAOPObject<OrderModule>();

        #region 产品管理

        /// <summary>
        /// 获取日语培训列表
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetClassPruductList()
        {
            var userInfo = base.UserInfo;
            var pageModel = JsonHelper.DeserializeObject<ResultPageModel>(RequestParm.Msg.ToString());
            var dmodel = new RB_Class_ViewModel()
            {
                ClassName = base.ParmJObj.GetStringValue("ClassName"),
                ClassNo = base.ParmJObj.GetStringValue("ClassNo"),
                StartTime = base.ParmJObj.GetStringValue("StartTime"),
                EndTime = base.ParmJObj.GetStringValue("EndTime"),
                Teacher_Id = base.ParmJObj.GetInt("Teacher_Id"),
                CouseId = base.ParmJObj.GetInt("CouseId"),
                Q_CanApply = base.ParmJObj.GetInt("Q_CanApply"),
                JoinStartTime = base.ParmJObj.GetStringValue("JoinStartTime"),
                JoinEndTime = base.ParmJObj.GetStringValue("JoinEndTime"),
                CourseSubject = base.ParmJObj.GetInt("CourseSubject"),
                ClassScrollType = base.ParmJObj.GetInt("ClassScrollType", 1),
                QIsVipCourse = base.ParmJObj.GetInt("QIsVipCourse", 0),
            };
            dmodel.School_Id = -1;
            var schoolId = base.ParmJObj.GetStringValue("School_Id");
            if (!string.IsNullOrEmpty(schoolId))
            {
                dmodel.School_Id = base.ParmJObj.GetInt("School_Id");
            }
            dmodel.Group_Id = userInfo.Group_Id;
            var list = new List<RB_Class_ViewModel>();
            list = orderModule.GetClassPruductListModule(pageModel.PageIndex, pageModel.PageSize, out long count, dmodel);
            pageModel.Count = Convert.ToInt32(count);

            List<object> result = new List<object>();
            foreach (var x in list)
            {
                int IsInsertClass = 0;//不能插班报入
                int SurplusNum = x.ClassPersion - x.OrderStudentCount;
                if (x.ClassStatus != ClassStatusEnum.EndClass && SurplusNum > 0)
                {
                    IsInsertClass = 1;//可以插班报入
                }
                int IsCanApply = 0;
                if (x.EndOrderTime != null && !string.IsNullOrEmpty(Common.ConvertHelper.FormatDate(x.EndOrderTime)) && !string.IsNullOrEmpty(Common.ConvertHelper.FormatDate(x.OpenTime)))
                {
                    if (x.EndOrderTime >= Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd")) && x.ClassPersion > x.OrderStudentCount)
                    {
                        IsCanApply = 1;
                    }
                }
                string ClassStyleName = "";
                if (x.ClassStyle > 0)
                {
                    ClassStyleName = x.ClassStyle.ToName();
                }
                var obj = new
                {
                    ClassId = x?.ClassId ?? 0,
                    ClassName = x?.ClassName ?? "",
                    ClassNo = x?.ClassNo ?? "",
                    x.CourseName,
                    x.CouseId,
                    CourseFeature = x?.CourseFeature ?? "",
                    ClassHours = x?.ClassHours ?? 0,
                    Teacher_Id = x?.Teacher_Id ?? 0,
                    TeacherName = x?.TeacherName ?? "",
                    TeacherHead = x?.TeacherHead ?? "",
                    RoomName = x?.RoomName ?? "",
                    ClassStyle = x?.ClassStyle ?? 0,
                    x.TextbookFee,
                    x.CoursewareFee,
                    ClassStyleName,
                    OpenTime = Common.ConvertHelper.FormatDate2(x.OpenTime),
                    EndOrderTime = Common.ConvertHelper.FormatDate2(x.EndOrderTime),
                    IsCanApply,
                    OriginalPrice = x?.CourseOriginalPrice ?? 0,
                    SellPrice = x?.CourseSellPrice ?? 0,
                    SellPriceType = x?.CourseSellPriceType ?? 0,
                    IsStepPrice = x?.IsStepPrice ?? 0,
                    ClassPersion = x?.ClassPersion ?? 0,
                    OutRemark = x?.OutRemark ?? "",
                    SurplusNum,
                    OrderStudentCount = x?.OrderStudentCount ?? 0,
                    SchoolName = x?.SchoolName ?? "",
                    UpdateTime = Common.ConvertHelper.FormatTime(x.UpdateTime),
                    ClassTimeList = x?.DefaultTimeList,
                    ClassStepPriceList = x?.ClassStepPriceList?.Select(z => new
                    {
                        z.ClassStepPriceId,
                        z.PersionNum,
                        z.PersionPrice
                    }),
                    ClassPlanList = x?.ClassPlanList?.Select(z => new
                    {
                        z.WeekDay,
                        ClassDate = x.ClassStyle == ClassStyleEnum.FixedDate ? Common.ConvertHelper.FormatDate(z.ClassDate) : ""
                    }),
                    OtherCourseList = x?.OtherCourseList ?? new List<RB_Class_Course_Extend>(),
                    IsChaBan = IsInsertClass,
                    CourseSubject = x?.CourseSubject ?? 0,
                    CourseSubjectName = x?.CourseSubjectName ?? "",
                    B2CRatio = x?.B2CRatio ?? 0,
                    B2CReNewRatio = x?.B2CReNewRatio ?? 0,
                    B2BRebateRatio = x?.B2BRebateRatio ?? 0,
                    B2BReNewRatio = x?.B2BReNewRatio ?? 0,
                    SchoolRebateRatio = x?.SchoolRebateRatio ?? 0,
                    SchoolReNewRatio = x?.SchoolReNewRatio ?? 0,
                    x.TotalClassHours,
                };
                result.Add(obj);
            }
            pageModel.PageData = result;
            return ApiResult.Success("", pageModel);
        }

        /// <summary>
        /// 获取班级名称
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetClassNameList()
        {
            var userInfo = base.UserInfo;
            JObject parms = JObject.Parse(RequestParm.Msg.ToString());
            string ClassIds = parms.GetStringValue("ClassIds");
            if (string.IsNullOrEmpty(ClassIds))
            {
                return ApiResult.ParamIsNull("请传递班级ids");
            }

            var list = orderModule.GetClassNameList(ClassIds);
            return ApiResult.Success("", list.Select(x => new
            {
                x.ClassId,
                x.ClassName,
                x.School_Id
            }));
        }

        /// <summary>
        /// 获取留学就业产品名称
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetStudyNameList()
        {
            string Ids = base.ParmJObj.GetStringValue("Ids");
            if (string.IsNullOrEmpty(Ids))
            {
                return ApiResult.ParamIsNull("请传留学就业产品编号");
            }
            var list = orderModule.GetStudyAbroadListModule(Ids);
            return ApiResult.Success("", list.Select(x => new
            {
                ClassId = x.Id,
                ClassName = x.Name,
                x.School_Id
            }));
        }

        #endregion

        #region 订单管理

        /// <summary>
        /// 获取班级/留学就业订单列表
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetClassOrderList()
        {
            JObject parms = JObject.Parse(RequestParm.Msg.ToString());
            var userInfo = base.UserInfo;
            int ClassId = parms.GetInt("ClassId", 0);
            int SourceId = parms.GetInt("SourceId", 0);
            if (ClassId <= 0 && SourceId <= 0)
            {
                return ApiResult.ParamIsNull();
            }
            var orderList = orderModule.GetClassOrderList(ClassId, userInfo.Group_Id, SourceId, out object ClassInfo);
            return ApiResult.Success("", new
            {
                ClassInfo,
                OrderList = new
                {
                    NorList = orderList.Where(x => x.OrderState != Common.Enum.Course.OrderStateEnum.Cancel).Select(x => new
                    {
                        ClassList = x.ClassList?.Select(z => new { z.ClassId, z.ClassName, z.CouseId, z.CourseSubjectName, z.CourseName, z.TeacherName, z.Teacher_Id, OpenTimeStr = StringHelper.FormatDate(z.OpenTime) }),
                        x.OrderId,
                        x.ClassId,
                        x.ClassName,
                        x.CourseId,
                        x.CourseName,
                        x.StartClassHours,
                        x.JoinType,
                        x.TargetJoinType,
                        x.TargetOrderId,
                        x.TargetClassName,
                        x.SourceOrderId,
                        x.SourceClassName,
                        x.ClassSchoolId,
                        x.TradeWay,
                        x.Class_Price,
                        x.Unit_Price,
                        x.GuestNum,
                        x.PreferPrice,
                        x.Income,
                        x.Refund,
                        x.DiscountMoney,
                        x.PlatformTax,
                        x.OrderType,
                        DueInMoney = x.PreferPrice - (x.Income - x.Refund + x.PlatformTax + x.DiscountMoney),
                        x.OrderState,
                        OrderStateName = x.OrderState.ToName(),
                        x.OrderSource,
                        OrderSourceName = x.OrderSource.ToName(),
                        x.EnterID,
                        EnterName = UserReidsCache.GetUserLoginInfo(x.EnterID)?.AccountName ?? "",
                        x.CreateBy,
                        CreateByName = UserReidsCache.GetUserLoginInfo(x.CreateBy)?.AccountName ?? "",
                        x.CourseConsultantId,
                        ConsultantName = UserReidsCache.GetUserLoginInfo(x.CourseConsultantId)?.AccountName ?? "",
                        IsAchievements = x.YFCommission > 0 ? 1 : 2,
                        YFCommissionMoney = x.YFCommission > 0 ? x.YFCommission : GetOrderYFCommission(x),
                        x.CommissionMoney,
                        x.ExtraCommissionMoney,
                        x.ExtraRewardMoney,
                        x.ExtraDeductMoney,
                        IsCommissionGive = x.YFCommission > 0 ? 1 : x.IsCommissionGive,
                        x.CommissionBack,
                        CreateTime = x.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                        x.SaleRemark,
                        x.TeacherRemark,
                        x.RectorRemark,
                        x.DirectorRemark,
                        x.OfferId,
                        x.HelpEnterId,
                        HelpEnterName = UserReidsCache.GetUserLoginInfo(x.HelpEnterId)?.AccountName,
                        x.GeneralOccupation,
                        x.EduOccupation,
                        x.IsLessPrice,
                        x.LessPrice,
                        OpenTime = Common.ConvertHelper.FormatDate(x.OpenTime),
                        x.EffectStatus,
                        x.EffectStatusStr,
                        EffectTime = Common.ConvertHelper.FormatDate(x.EffectTime),
                        x.UpOrderId,
                        x.VisitorReserveId,
                        x.RenewOrderId,
                        x.FirstOrderId,
                        x.IsBackClass,
                        x.LXConfirmState,
                        x.CustomerId,
                        x.CustomerName,
                        x.CustomerTel,
                        x.ClassScrollType,
                        x.BrokerageMoney,
                        SplitDetailsList = x?.SplitDetailsList?.Select(qitem => new
                        {
                            qitem.S_ClassId,
                            qitem.S_ClassName,
                            qitem.S_JoinType,
                            S_JoinTypeName = qitem.S_JoinType.ToName(),
                            qitem.S_OrderId,
                            qitem.T_ClassId,
                            qitem.T_ClassName,
                            qitem.T_JoinType,
                            T_JoinTypeName = qitem.T_JoinType.ToName(),
                            qitem.T_OrderId
                        }),
                        SaleRemarkList = x.SaleRemarkList.Select(z => new
                        {
                            z.Id,
                            z.Content,
                            CreateBy = z.CreateByName,
                            CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                        }),
                        TeacherRemarkList = x.TeacherRemarkList.Select(z => new
                        {
                            z.Id,
                            z.Content,
                            CreateBy = z.CreateByName,
                            CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                        }),
                        RectorRemarkList = x.RectorRemarkList.Select(z => new
                        {
                            z.Id,
                            z.Content,
                            CreateBy = z.CreateByName,
                            CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                        }),
                        DirectorRemarkList = x.DirectorRemarkList.Select(z => new
                        {
                            z.Id,
                            z.Content,
                            CreateBy = z.CreateByName,
                            CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                        }),
                        GuestList = x.GuestList.Select(z => new
                        {
                            z.Id,
                            z.GuestName,
                            z.GuestState,
                            z.GuestStateStr,
                            z.ContractNo,
                            z.ContractId,
                            z.ContractStatus,
                            z.ContractStatusStr,
                            z.GuestContractNo,
                            z.ContractType,
                            z.ContractUrl,
                            z.ContractUrlList,
                        }),
                        ContractList = x.ContractList.Select(z => new
                        {
                            z.Id,
                            z.StudentName,
                            z.ContractNo,
                            z.GuestId,
                            z.Status
                        })
                    }),
                    CancelList = orderList.Where(x => x.OrderState == Common.Enum.Course.OrderStateEnum.Cancel).Select(x => new
                    {
                        ClassList = x.ClassList?.Select(z => new { z.ClassId, z.ClassName, z.CouseId, z.CourseSubjectName, z.CourseName, z.TeacherName, z.Teacher_Id, OpenTimeStr = StringHelper.FormatDate(z.OpenTime) }),
                        x.OrderId,
                        x.ClassId,
                        x.TradeWay,
                        x.Class_Price,
                        x.Unit_Price,
                        x.GuestNum,
                        x.PreferPrice,
                        x.Income,
                        x.Refund,
                        x.DiscountMoney,
                        x.OrderType,
                        x.PlatformTax,
                        DueInMoney = x.PreferPrice - (x.Income - x.Refund + x.DiscountMoney),
                        x.OrderState,
                        OrderStateName = x.OrderState.ToName(),
                        x.EnterID,
                        EnterName = UserReidsCache.GetUserLoginInfo(x.EnterID)?.AccountName ?? "",
                        x.CreateBy,
                        CreateByName = UserReidsCache.GetUserLoginInfo(x.CreateBy)?.AccountName ?? "",
                        x.CourseConsultantId,
                        ConsultantName = UserReidsCache.GetUserLoginInfo(x.CourseConsultantId)?.AccountName ?? "",
                        IsAchievements = x.YFCommission > 0 ? 1 : 2,
                        YFCommissionMoney = x.YFCommission > 0 ? x.YFCommission : GetOrderYFCommission(x),
                        x.CommissionMoney,
                        x.ExtraCommissionMoney,
                        x.ExtraRewardMoney,
                        x.ExtraDeductMoney,
                        x.IsCommissionGive,
                        CreateTime = x.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                        x.SaleRemark,
                        x.TeacherRemark,
                        x.RectorRemark,
                        x.DirectorRemark,
                        x.OfferId,
                        x.HelpEnterId,
                        HelpEnterName = UserReidsCache.GetUserLoginInfo(x.HelpEnterId)?.AccountName,
                        x.GeneralOccupation,
                        x.EduOccupation,
                        x.IsLessPrice,
                        x.LessPrice,
                        x.CustomerId,
                        x.CustomerName,
                        x.CustomerTel,
                        x.ClassScrollType,
                        x.BrokerageMoney,
                        SaleRemarkList = x.SaleRemarkList.Select(z => new
                        {
                            z.Id,
                            z.Content,
                            CreateBy = UserReidsCache.GetUserLoginInfo(z.CreateBy)?.AccountName ?? "",
                            CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                        }),
                        TeacherRemarkList = x.TeacherRemarkList.Select(z => new
                        {
                            z.Id,
                            z.Content,
                            CreateBy = UserReidsCache.GetUserLoginInfo(z.CreateBy)?.AccountName ?? "",
                            CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                        }),
                        RectorRemarkList = x.RectorRemarkList.Select(z => new
                        {
                            z.Id,
                            z.Content,
                            CreateBy = UserReidsCache.GetUserLoginInfo(z.CreateBy)?.AccountName ?? "",
                            CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                        }),
                        DirectorRemarkList = x.DirectorRemarkList.Select(z => new
                        {
                            z.Id,
                            z.Content,
                            CreateBy = UserReidsCache.GetUserLoginInfo(z.CreateBy)?.AccountName ?? "",
                            CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                        }),
                        GuestList = x.GuestList.Select(z => new
                        {
                            z.Id,
                            z.GuestName,
                            z.GuestState
                        }),
                        ContractList = x.ContractList.Select(z => new
                        {
                            z.Id,
                            z.StudentName,
                            z.ContractNo,
                            z.GuestId,
                            z.Status
                        })
                    })
                }
            });
        }

        /// <summary>
        /// 获取订单应发提成
        /// </summary>
        /// <param name="x"></param>
        /// <returns></returns>
        private static decimal GetOrderYFCommission(RB_Order_ViewModel x)
        {
            if (x.CommissionType == x.CommissionTypeTH)
            {
                if (x.CommissionType == 1)
                {
                    return x.CommissionRate + x.CommissionRateTH - x.LessPrice;
                }
                else
                {
                    return Math.Round((x.PreferPrice - x.DiscountMoney + x.LessPrice) * (x.CommissionRate + x.CommissionRateTH) / 100, 2, MidpointRounding.AwayFromZero) - x.LessPrice;
                }
            }
            else
            {
                decimal commission1 = x.CommissionType == 1 ? x.CommissionRate : Math.Round((x.PreferPrice - x.DiscountMoney + x.LessPrice) * x.CommissionRate / 100, 2, MidpointRounding.AwayFromZero);
                decimal commission2 = x.CommissionTypeTH == 1 ? x.CommissionRateTH : Math.Round((x.PreferPrice - x.DiscountMoney + x.LessPrice) * x.CommissionRateTH / 100, 2, MidpointRounding.AwayFromZero);
                return commission1 + commission2 - x.LessPrice;
            }
        }

        /// <summary>
        /// 获取班级订单下拉列表
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetSelectClassOrderList()
        {
            JObject parms = JObject.Parse(RequestParm.Msg.ToString());
            var userInfo = base.UserInfo;
            var query = new RB_Order_ViewModel()
            {
                ClassId = parms.GetInt("ClassId", 0),
                OrderId = parms.GetInt("OrderId"),
                SourceId = parms.GetInt("SourceId"),
                Group_Id = base.UserInfo.Group_Id,
                OrderState = OrderStateEnum.Normal
            };
            if (query.ClassId <= 0 && query.SourceId <= 0)
            {
                return ApiResult.ParamIsNull();
            }
            var orderList = orderModule.GetClassOrderListExtModule(query);
            return ApiResult.Success("", orderList.Select(x => new
            {
                x.OrderId,
                x.ClassId,
                x.ClassName,
                x.CourseId,
                x.CourseName,
                x.GuestList,
                x.ClassHours,
                x.StartClassHours,
            }));
        }

        /// <summary>
        /// 获取客户转订单续费状态
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetOrderGuestRenewState()
        {
            var userInfo = base.UserInfo;
            string StuIds = base.ParmJObj.GetStringValue("StuIds");
            if (string.IsNullOrEmpty(StuIds))
            {
                return ApiResult.ParamIsNull("请传递学生名单");
            }

            var Robj = orderModule.GetOrderGuestRenewState(StuIds, userInfo, out string msg);
            if (msg == "")
            {
                return ApiResult.Success("", Robj);
            }
            else
            {
                return ApiResult.Failed(msg);
            }
        }

        /// <summary>
        /// 新增修改订单
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult SetClassOrder()
        {
            var userInfo = base.UserInfo;
            RB_Order_ViewModel demodel = new RB_Order_ViewModel()
            {
                OrderId = base.ParmJObj.GetInt("OrderId"),
                ClassId = base.ParmJObj.GetInt("ClassId"),
                GuestNum = base.ParmJObj.GetInt("GuestNum"),
                OrderSource = (OrderSourceEnum)base.ParmJObj.GetInt("OrderSource"),
                OrderType = (OrderTypeEnum)base.ParmJObj.GetInt("OrderType"),
                PreferPrice = base.ParmJObj.GetDecimal("PreferPrice"),
                SaleRemark = base.ParmJObj.GetStringValue("SaleRemark"),
                SourceId = base.ParmJObj.GetInt("SourceId"),
                Unit_Price = base.ParmJObj.GetDecimal("Unit_Price"),

                HelpEnterId = base.ParmJObj.GetInt("HelpEnterId"),
                GeneralOccupation = base.ParmJObj.GetStringValue("GeneralOccupation"),
                EduOccupation = base.ParmJObj.GetStringValue("EduOccupation"),

                OrderNature = (OrderNatureEnum)base.ParmJObj.GetInt("OrderNature"),
                OldPreferPrice = base.ParmJObj.GetDecimal("OldPreferPrice"),
                CourseId = base.ParmJObj.GetInt("CourseId"),
                StartClassHours = base.ParmJObj.GetInt("StartClassHours"),
                EffectTime = base.ParmJObj.GetDateTime("EffectTime"),
                UpOrderId = base.ParmJObj.GetInt("UpOrderId"),
                VisitorReserveId = base.ParmJObj.GetInt("VisitorReserveId"),
                JoinType = OrderJoinTypeEnum.Normal,
                TargetJoinType = OrderJoinTypeEnum.Normal,
                DiscountMoney = base.ParmJObj.GetDecimal("DiscountMoney"),
                PerDiscountMoney = base.ParmJObj.GetDecimal("PerDiscountMoney"),
                IsLessPrice = base.ParmJObj.GetInt("IsLessPrice"),
                LessPrice = base.ParmJObj.GetDecimal("LessPrice"),
                PerLessMoney = base.ParmJObj.GetDecimal("PerLessMoney"),
                CustomerId = base.ParmJObj.GetInt("CustomerId"),
                StuIds = base.ParmJObj.GetStringValue("StuIds"),
                OrderIdentify = base.ParmJObj.GetInt("OrderIdentify"),
                CourseConsultantId = base.ParmJObj.GetInt("CourseConsultantId"),
                EnterID = base.ParmJObj.GetInt("EnterId"),
                ScrollSchoolId = base.ParmJObj.GetInt("ScrollSchoolId"),
                SellPriceType = base.ParmJObj.GetInt("Unit_PriceType", 1),
                TotalClassHours = base.ParmJObj.GetDecimal("TotalClassHours"),
                TextbookFee = base.ParmJObj.GetDecimal("TextbookFee"),
                CoursewareFee = base.ParmJObj.GetDecimal("CoursewareFee"),
            };
            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");
            }
            if (demodel.GuestNum <= 0)
            {
                return ApiResult.ParamIsNull("请传递报名人数");
            }
            if (demodel.Unit_Price <= 0)
            {
                return ApiResult.ParamIsNull("成交单价不能小于0");
            }
            if (demodel.OrderSource <= 0)
            {
                return ApiResult.ParamIsNull("请选择客人来源");
            }
            if (demodel.OrderIdentify == 2 && string.IsNullOrEmpty(demodel.StuIds) && demodel.OrderId == 0)
            {
                return ApiResult.ParamIsNull("请传递选择客户");
            }
            if (demodel.OrderIdentify == 2 && !string.IsNullOrEmpty(demodel.StuIds))
            {
                //验证学生是否已有其他订单
                var vlist = orderModule.ValidataStuOrder(demodel.StuIds, userInfo.Group_Id);
                if (vlist.Any())
                {
                    var vmodel = vlist.FirstOrDefault();
                    return ApiResult.Tip("学员" + vmodel.GuestName + "存在有效未付款订单" + vmodel.OrderId + ",请取消该订单后再试", vmodel.OrderId);
                }
            }
            if (!string.IsNullOrEmpty(demodel.StuIds))
            {
                int gNum = JsonHelper.DeserializeObject<List<int>>("[" + demodel.StuIds + "]").Count();
                if (demodel.GuestNum != gNum)
                {
                    return ApiResult.ParamIsNull("客人数量不正确");
                }

                //ld 2023-03-22 强验证 学生的到访表
                //string rmsg = orderModule.GetStudentVisitVoucher(demodel.StuIds);
                //if (rmsg != "")
                //{
                //    return ApiResult.Failed(rmsg);
                //}
            }

            demodel.Group_Id = userInfo.Group_Id;
            demodel.School_Id = userInfo.School_Id;
            demodel.Dept_Id = userInfo.DeptId;
            demodel.OrderForm = OrderFormEnum.Computer;
            if (demodel.OrderType == OrderTypeEnum.CourseOrder && demodel.OrderIdentify != 2)
            {
                demodel.EnterID = userInfo.Id;  //由前端传递了, 可能会不存在 (此字段为市场人员)
            }
            demodel.OrderState = OrderStateEnum.Normal;
            demodel.TradeWay = TradeWayEnum.OnLine;
            demodel.CreateBy = userInfo.Id;
            demodel.CreateTime = DateTime.Now;
            demodel.UpdateBy = userInfo.Id;
            demodel.UpdateTime = DateTime.Now;

            var flag = false;
            string message = "";

            if (demodel.OrderType == OrderTypeEnum.CourseOrder)
            {
                if (demodel.JoinType == OrderJoinTypeEnum.Normal)
                {
                    demodel.StartClassHours = 0;
                }
                else if (demodel.JoinType == OrderJoinTypeEnum.InsertClass)
                {
                    if (demodel.CourseId <= 0)
                    {
                        return ApiResult.ParamIsNull(message: "请选择插班课程!");
                    }
                }
                flag = orderModule.SetClassOrderModule(demodel, userInfo, base.CheckUserActionAuth("Edit_Order"), out message);
            }
            else
            {
                flag = orderModule.SetStudyOrderModule(demodel, userInfo, out message);
            }
            return flag ? ApiResult.Success(message: message) : ApiResult.Failed(message: message);
        }

        /// <summary>
        /// 新增订单 (批量)
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult SetClassOrderBatch()
        {
            var userInfo = base.UserInfo;
            var OrderListStr = base.ParmJObj.GetStringValue("OrderList");
            if (string.IsNullOrEmpty(OrderListStr))
            {
                return ApiResult.ParamIsNull("请传递表单数据");
            }
            List<object> OrderObjList = JsonHelper.DeserializeObject<List<object>>(OrderListStr);
            List<RB_Order_ViewModel> deList = new List<RB_Order_ViewModel>();
            foreach (var item in OrderObjList)
            {
                JObject parms = JObject.Parse(item.ToString());
                RB_Order_ViewModel demodel = new RB_Order_ViewModel()
                {
                    OrderId = parms.GetInt("OrderId"),
                    ClassId = parms.GetInt("ClassId"),
                    GuestNum = parms.GetInt("GuestNum"),
                    OrderSource = (OrderSourceEnum)parms.GetInt("OrderSource"),
                    OrderType = (OrderTypeEnum)parms.GetInt("OrderType"),
                    PreferPrice = parms.GetDecimal("PreferPrice"),
                    SaleRemark = parms.GetStringValue("SaleRemark"),
                    SourceId = parms.GetInt("SourceId"),
                    Unit_Price = parms.GetDecimal("Unit_Price"),
                    HelpEnterId = parms.GetInt("HelpEnterId"),
                    GeneralOccupation = parms.GetStringValue("GeneralOccupation"),
                    EduOccupation = parms.GetStringValue("EduOccupation"),

                    OrderNature = (OrderNatureEnum)parms.GetInt("OrderNature"),
                    OldPreferPrice = parms.GetDecimal("OldPreferPrice"),
                    CourseId = parms.GetInt("CourseId"),
                    StartClassHours = parms.GetInt("StartClassHours"),
                    EffectTime = parms.GetDateTime("EffectTime"),
                    UpOrderId = parms.GetInt("UpOrderId"),
                    VisitorReserveId = parms.GetInt("VisitorReserveId"),
                    JoinType = OrderJoinTypeEnum.Normal,
                    TargetJoinType = OrderJoinTypeEnum.Normal,
                    DiscountMoney = parms.GetDecimal("DiscountMoney"),
                    PerDiscountMoney = parms.GetDecimal("PerDiscountMoney"),
                    IsLessPrice = parms.GetInt("IsLessPrice"),
                    LessPrice = parms.GetDecimal("LessPrice"),
                    PerLessMoney = parms.GetDecimal("PerLessMoney"),
                    CustomerId = parms.GetInt("CustomerId"),
                    StuIds = parms.GetStringValue("StuIds"),
                    OrderIdentify = parms.GetInt("OrderIdentify"),
                    CourseConsultantId = parms.GetInt("CourseConsultantId"),
                    EnterID = parms.GetInt("EnterId"),
                    ScrollSchoolId = parms.GetInt("ScrollSchoolId"),
                    SellPriceType = parms.GetInt("Unit_PriceType", 1),
                    TotalClassHours = parms.GetInt("TotalClassHours"),
                    TextbookFee = parms.GetDecimal("TextbookFee"),
                    CoursewareFee = parms.GetDecimal("CoursewareFee"),
                };

                var IsInsertClass = parms.GetInt("IsChaBan");
                if (IsInsertClass == 1)
                {
                    demodel.JoinType = OrderJoinTypeEnum.InsertClass;
                }
                if (demodel.OrderType == OrderTypeEnum.CourseOrder && demodel.ClassId <= 0)
                {
                    return ApiResult.ParamIsNull("请传递班级id");
                }
                if (demodel.GuestNum <= 0)
                {
                    return ApiResult.ParamIsNull("请传递报名人数");
                }
                if (demodel.Unit_Price <= 0)
                {
                    return ApiResult.ParamIsNull("成交单价不能小于0");
                }
                if (demodel.OrderSource <= 0)
                {
                    return ApiResult.ParamIsNull("请选择客人来源");
                }
                if (demodel.OrderIdentify == 2 && string.IsNullOrEmpty(demodel.StuIds) && demodel.OrderId == 0)
                {
                    return ApiResult.ParamIsNull("请传递选择客户");
                }
                if (demodel.OrderIdentify == 2 && !string.IsNullOrEmpty(demodel.StuIds))
                {
                    //验证学生是否已有其他订单
                    var vlist = orderModule.ValidataStuOrder(demodel.StuIds, userInfo.Group_Id);
                    if (vlist.Any())
                    {
                        var vmodel = vlist.FirstOrDefault();
                        return ApiResult.Tip("学员" + vmodel.GuestName + "存在有效未付款订单" + vmodel.OrderId + ",请取消该订单后再试", vmodel.OrderId);
                    }
                }
                if (!string.IsNullOrEmpty(demodel.StuIds))
                {
                    int gNum = JsonHelper.DeserializeObject<List<int>>("[" + demodel.StuIds + "]").Count();
                    if (demodel.GuestNum != gNum)
                    {
                        return ApiResult.ParamIsNull("客人数量不正确");
                    }
                }

                demodel.Group_Id = userInfo.Group_Id;
                demodel.School_Id = userInfo.School_Id;
                demodel.Dept_Id = userInfo.DeptId;
                demodel.OrderForm = OrderFormEnum.Computer;
                if (demodel.OrderType == OrderTypeEnum.CourseOrder && demodel.OrderIdentify != 2)
                {
                    demodel.EnterID = userInfo.Id;  //由前端传递了, 可能会不存在 (此字段为市场人员)
                }
                demodel.OrderState = OrderStateEnum.Normal;
                demodel.TradeWay = TradeWayEnum.OnLine;
                demodel.CreateBy = userInfo.Id;
                demodel.CreateTime = DateTime.Now;
                demodel.UpdateBy = userInfo.Id;
                demodel.UpdateTime = DateTime.Now;

                if (demodel.OrderType == OrderTypeEnum.CourseOrder)
                {
                    if (demodel.JoinType == OrderJoinTypeEnum.Normal)
                    {
                        demodel.StartClassHours = 0;
                    }
                    else if (demodel.JoinType == OrderJoinTypeEnum.InsertClass)
                    {
                        if (demodel.CourseId <= 0)
                        {
                            return ApiResult.ParamIsNull(message: "请选择插班课程!");
                        }
                    }
                }
                else
                {
                    return ApiResult.Failed("只能课程订单批量操作");
                }

                deList.Add(demodel);
            }
            if (!deList.Any())
            {
                return ApiResult.Failed("请传递订单信息");
            }
            var flag = orderModule.SetClassOrderModuleBatch(deList, userInfo, base.CheckUserActionAuth("Edit_Order"), out string message);
            return flag ? ApiResult.Success(message: message) : ApiResult.Failed(message: message);
        }

        /// <summary>
        /// 新增修改订单
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult SetNewClassOrder()
        {
            var userInfo = base.UserInfo;
            RB_Order_ViewModel demodel = new RB_Order_ViewModel()
            {
                OrderId = base.ParmJObj.GetInt("OrderId"),
                ClassId = base.ParmJObj.GetInt("ClassId"),
                GuestNum = base.ParmJObj.GetInt("GuestNum"),
                OrderSource = (OrderSourceEnum)base.ParmJObj.GetInt("OrderSource"),
                OrderType = (OrderTypeEnum)base.ParmJObj.GetInt("OrderType"),
                PreferPrice = base.ParmJObj.GetDecimal("PreferPrice"),
                SaleRemark = base.ParmJObj.GetStringValue("SaleRemark"),
                SourceId = base.ParmJObj.GetInt("SourceId"),
                Unit_Price = base.ParmJObj.GetDecimal("Unit_Price"),

                HelpEnterId = base.ParmJObj.GetInt("HelpEnterId"),
                GeneralOccupation = base.ParmJObj.GetStringValue("GeneralOccupation"),
                EduOccupation = base.ParmJObj.GetStringValue("EduOccupation"),

                OrderNature = (OrderNatureEnum)base.ParmJObj.GetInt("OrderNature"),
                OldPreferPrice = base.ParmJObj.GetDecimal("OldPreferPrice"),
                CourseId = base.ParmJObj.GetInt("CourseId"),
                StartClassHours = base.ParmJObj.GetInt("StartClassHours"),
                EffectTime = base.ParmJObj.GetDateTime("EffectTime"),
                UpOrderId = base.ParmJObj.GetInt("UpOrderId"),
                VisitorReserveId = base.ParmJObj.GetInt("VisitorReserveId"),
                JoinType = OrderJoinTypeEnum.Normal,
                TargetJoinType = OrderJoinTypeEnum.Normal,
                DiscountMoney = base.ParmJObj.GetDecimal("DiscountMoney"),
                PerDiscountMoney = base.ParmJObj.GetDecimal("PerDiscountMoney"),
                IsLessPrice = base.ParmJObj.GetInt("IsLessPrice"),
                LessPrice = base.ParmJObj.GetDecimal("LessPrice"),
                PerLessMoney = base.ParmJObj.GetDecimal("PerLessMoney"),
                CustomerId = base.ParmJObj.GetInt("CustomerId"),
                StuIds = base.ParmJObj.GetStringValue("StuIds"),
                OrderIdentify = base.ParmJObj.GetInt("OrderIdentify"),
                CourseConsultantId = base.ParmJObj.GetInt("CourseConsultantId"),
                EnterID = base.ParmJObj.GetInt("EnterId"),
                ScrollSchoolId = base.ParmJObj.GetInt("ScrollSchoolId"),
                SellPriceType = base.ParmJObj.GetInt("Unit_PriceType", 1),
                TotalClassHours = base.ParmJObj.GetDecimal("TotalClassHours"),
                TextbookFee = base.ParmJObj.GetDecimal("TextbookFee"),
                CoursewareFee = base.ParmJObj.GetDecimal("CoursewareFee"),
            };
            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");
            }
            if (demodel.GuestNum <= 0)
            {
                return ApiResult.ParamIsNull("请传递报名人数");
            }
            if (demodel.Unit_Price <= 0)
            {
                return ApiResult.ParamIsNull("成交单价不能小于0");
            }
            if (demodel.OrderSource <= 0)
            {
                return ApiResult.ParamIsNull("请选择客人来源");
            }
            if (demodel.OrderIdentify == 2 && string.IsNullOrEmpty(demodel.StuIds) && demodel.OrderId == 0)
            {
                return ApiResult.ParamIsNull("请传递选择客户");
            }
            if (demodel.OrderIdentify == 2 && !string.IsNullOrEmpty(demodel.StuIds))
            {
                //验证学生是否已有其他订单
                var vlist = orderModule.ValidataStuOrder(demodel.StuIds, userInfo.Group_Id);
                if (vlist.Any())
                {
                    var vmodel = vlist.FirstOrDefault();
                    return ApiResult.Tip("学员" + vmodel.GuestName + "存在有效未付款订单" + vmodel.OrderId + ",请取消该订单后再试", vmodel.OrderId);
                }
            }
            if (!string.IsNullOrEmpty(demodel.StuIds))
            {
                int gNum = JsonHelper.DeserializeObject<List<int>>("[" + demodel.StuIds + "]").Count();
                if (demodel.GuestNum != gNum)
                {
                    return ApiResult.ParamIsNull("客人数量不正确");
                }

                //ld 2023-03-22 强验证 学生的到访表
                //string rmsg = orderModule.GetStudentVisitVoucher(demodel.StuIds);
                //if (rmsg != "")
                //{
                //    return ApiResult.Failed(rmsg);
                //}
            }

            demodel.Group_Id = userInfo.Group_Id;
            demodel.School_Id = userInfo.School_Id;
            demodel.Dept_Id = userInfo.DeptId;
            demodel.OrderForm = OrderFormEnum.Computer;
            if (demodel.OrderType == OrderTypeEnum.CourseOrder && demodel.OrderIdentify != 2)
            {
                demodel.EnterID = userInfo.Id;  //由前端传递了, 可能会不存在 (此字段为市场人员)
            }
            demodel.OrderState = OrderStateEnum.Normal;
            demodel.TradeWay = TradeWayEnum.OnLine;
            demodel.CreateBy = userInfo.Id;
            demodel.CreateTime = DateTime.Now;
            demodel.UpdateBy = userInfo.Id;
            demodel.UpdateTime = DateTime.Now;

            var flag = false;
            string message = "";
            //订单课程
            demodel.OrderCourseList = new List<RB_Order_Course_ViewModel>();
            var orderCourseListStr = base.ParmJObj.GetStringValue("OrderCourseList");
            if (!string.IsNullOrWhiteSpace(orderCourseListStr))
            {
                List<object> OrderCourseObjList = JsonHelper.DeserializeObject<List<object>>(orderCourseListStr);
                foreach (var itemOrderCourse in OrderCourseObjList)
                {
                    JObject parmsI = JObject.Parse(itemOrderCourse.ToString());
                    RB_Order_Course_ViewModel orderCourseModel = new RB_Order_Course_ViewModel
                    {
                        OrderCourseId = parmsI.GetInt("OrderCourseId"),
                        OrderId = parmsI.GetInt("OrderId"),
                        ClassId = parmsI.GetInt("ClassId"),
                        Class_Price = parmsI.GetDecimal("Class_Price"),
                        Unit_Price = parmsI.GetDecimal("Unit_Price"),
                        TextbookFee = parmsI.GetDecimal("TextbookFee"),
                        CoursewareFee = parmsI.GetDecimal("CoursewareFee"),
                        SellPriceType = parmsI.GetInt("SellPriceType"),
                        TotalClassHours = parmsI.GetDecimal("TotalClassHours"),
                        GuestNum = parmsI.GetInt("GuestNum"),
                        PreferPrice = parmsI.GetInt("PreferPrice"),
                        Group_Id = demodel.Group_Id,
                        CreateBy = demodel.CreateBy,
                        CreateTime = demodel.CreateTime,
                        UpdateBy = demodel.UpdateBy,
                        UpdateTime = demodel.UpdateTime,
                        SourceId = demodel.SourceId,
                        HelpEnterId = parmsI.GetInt("HelpEnterId"),
                        CourseId = parmsI.GetInt("CouseId"),
                        TransIntroductceRatio = parmsI.GetDecimal("TransIntroductceRatio"),
                        TransIntroductceReNewRatio = parmsI.GetDecimal("TransIntroductceReNewRatio"),
                        InnerRecommendRatio = parmsI.GetDecimal("InnerRecommendRatio"),
                        InnerRecommendReNewRatio = parmsI.GetDecimal("InnerRecommendReNewRatio"),
                        CommissionReType = parmsI.GetInt("CommissionReType"),
                        ScrollSchoolId = parmsI.GetInt("ScrollSchoolId"),
                        StudyBroadRebateMoney = parmsI.GetDecimal("StudyBroadRebateMoney"),
                    };
                    demodel.OrderCourseList.Add(orderCourseModel);
                }
            }
            if (demodel.OrderType == OrderTypeEnum.CourseOrder)
            {
                if (demodel.JoinType == OrderJoinTypeEnum.Normal)
                {
                    demodel.StartClassHours = 0;
                }
                else if (demodel.JoinType == OrderJoinTypeEnum.InsertClass)
                {
                    if (demodel.CourseId <= 0)
                    {
                        return ApiResult.ParamIsNull(message: "请选择插班课程!");
                    }
                }
                flag = orderModule.SetClassOrderModule_V2(demodel, userInfo, base.CheckUserActionAuth("Edit_Order"), out message);
            }
            else
            {
                flag = orderModule.SetStudyOrderModule(demodel, userInfo, out message);
            }
            return flag ? ApiResult.Success(message: message) : ApiResult.Failed(message: message);
        }

        /// <summary>
        /// 新增订单 (批量) 2024-09-02 add by:W
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult SetNewClassOrderBatch()
        {
            var userInfo = base.UserInfo;
            var OrderListStr = base.ParmJObj.GetStringValue("OrderList");
            if (string.IsNullOrEmpty(OrderListStr))
            {
                return ApiResult.ParamIsNull("请传递表单数据");
            }
            List<object> OrderObjList = JsonHelper.DeserializeObject<List<object>>(OrderListStr);
            List<RB_Order_ViewModel> deList = new List<RB_Order_ViewModel>();
            foreach (var item in OrderObjList)
            {
                JObject parms = JObject.Parse(item.ToString());
                RB_Order_ViewModel demodel = new RB_Order_ViewModel()
                {
                    OrderId = parms.GetInt("OrderId"),
                    ClassId = parms.GetInt("ClassId"),
                    GuestNum = parms.GetInt("GuestNum"),
                    OrderSource = (OrderSourceEnum)parms.GetInt("OrderSource"),
                    OrderType = (OrderTypeEnum)parms.GetInt("OrderType"),
                    PreferPrice = parms.GetDecimal("PreferPrice"),
                    SaleRemark = parms.GetStringValue("SaleRemark"),
                    SourceId = parms.GetInt("SourceId"),
                    Unit_Price = parms.GetDecimal("Unit_Price"),
                    HelpEnterId = parms.GetInt("HelpEnterId"),
                    GeneralOccupation = parms.GetStringValue("GeneralOccupation"),
                    EduOccupation = parms.GetStringValue("EduOccupation"),
                    OrderNature = (OrderNatureEnum)parms.GetInt("OrderNature"),
                    OldPreferPrice = parms.GetDecimal("OldPreferPrice"),
                    CourseId = parms.GetInt("CourseId"),
                    StartClassHours = parms.GetInt("StartClassHours"),
                    EffectTime = parms.GetDateTime("EffectTime"),
                    UpOrderId = parms.GetInt("UpOrderId"),
                    VisitorReserveId = parms.GetInt("VisitorReserveId"),
                    JoinType = OrderJoinTypeEnum.Normal,
                    TargetJoinType = OrderJoinTypeEnum.Normal,
                    DiscountMoney = parms.GetDecimal("DiscountMoney"),
                    PerDiscountMoney = parms.GetDecimal("PerDiscountMoney"),
                    IsLessPrice = parms.GetInt("IsLessPrice"),
                    LessPrice = parms.GetDecimal("LessPrice"),
                    PerLessMoney = parms.GetDecimal("PerLessMoney"),
                    CustomerId = parms.GetInt("CustomerId"),
                    StuIds = parms.GetStringValue("StuIds"),
                    OrderIdentify = parms.GetInt("OrderIdentify"),
                    CourseConsultantId = parms.GetInt("CourseConsultantId"),
                    EnterID = parms.GetInt("EnterId"),
                    ScrollSchoolId = parms.GetInt("ScrollSchoolId"),
                    SellPriceType = parms.GetInt("Unit_PriceType", 1),
                    TotalClassHours = parms.GetInt("TotalClassHours"),
                    TextbookFee = parms.GetDecimal("TextbookFee"),
                    CoursewareFee = parms.GetDecimal("CoursewareFee"),
                };

                var IsInsertClass = parms.GetInt("IsChaBan");
                if (IsInsertClass == 1)
                {
                    demodel.JoinType = OrderJoinTypeEnum.InsertClass;
                }
                if (demodel.OrderType == OrderTypeEnum.CourseOrder && demodel.ClassId <= 0)
                {
                    return ApiResult.ParamIsNull("请传递班级id");
                }
                if (demodel.GuestNum <= 0)
                {
                    return ApiResult.ParamIsNull("请传递报名人数");
                }
                if (demodel.Unit_Price <= 0)
                {
                    return ApiResult.ParamIsNull("成交单价不能小于0");
                }
                if (demodel.OrderSource <= 0)
                {
                    return ApiResult.ParamIsNull("请选择客人来源");
                }
                if (demodel.OrderIdentify == 2 && string.IsNullOrEmpty(demodel.StuIds) && demodel.OrderId == 0)
                {
                    return ApiResult.ParamIsNull("请传递选择客户");
                }
                if (demodel.OrderIdentify == 2 && !string.IsNullOrEmpty(demodel.StuIds))
                {
                    //验证学生是否已有其他订单
                    var vlist = orderModule.ValidataStuOrder(demodel.StuIds, userInfo.Group_Id);
                    if (vlist.Any())
                    {
                        var vmodel = vlist.FirstOrDefault();
                        return ApiResult.Tip("学员" + vmodel.GuestName + "存在有效未付款订单" + vmodel.OrderId + ",请取消该订单后再试", vmodel.OrderId);
                    }
                }
                if (!string.IsNullOrEmpty(demodel.StuIds))
                {
                    int gNum = JsonHelper.DeserializeObject<List<int>>("[" + demodel.StuIds + "]").Count();
                    if (demodel.GuestNum != gNum)
                    {
                        return ApiResult.ParamIsNull("客人数量不正确");
                    }
                }

                demodel.Group_Id = userInfo.Group_Id;
                demodel.School_Id = userInfo.School_Id;
                demodel.Dept_Id = userInfo.DeptId;
                demodel.OrderForm = OrderFormEnum.Computer;
                if (demodel.OrderType == OrderTypeEnum.CourseOrder && demodel.OrderIdentify != 2)
                {
                    demodel.EnterID = userInfo.Id;  //由前端传递了, 可能会不存在 (此字段为市场人员)
                }
                demodel.OrderState = OrderStateEnum.Normal;
                demodel.TradeWay = TradeWayEnum.OnLine;
                demodel.CreateBy = userInfo.Id;
                demodel.CreateTime = DateTime.Now;
                demodel.UpdateBy = userInfo.Id;
                demodel.UpdateTime = DateTime.Now;

                if (demodel.OrderType == OrderTypeEnum.CourseOrder)
                {
                    if (demodel.JoinType == OrderJoinTypeEnum.Normal)
                    {
                        demodel.StartClassHours = 0;
                    }
                    else if (demodel.JoinType == OrderJoinTypeEnum.InsertClass)
                    {
                        if (demodel.CourseId <= 0)
                        {
                            return ApiResult.ParamIsNull(message: "请选择插班课程!");
                        }
                    }
                }
                else
                {
                    return ApiResult.Failed("只能课程订单批量操作");
                }

                //订单课程
                demodel.OrderCourseList = new List<RB_Order_Course_ViewModel>();
                var orderCourseListStr = parms.GetStringValue("OrderCourseList");
                if (!string.IsNullOrWhiteSpace(orderCourseListStr))
                {
                    List<object> OrderCourseObjList = JsonHelper.DeserializeObject<List<object>>(orderCourseListStr);
                    foreach (var itemOrderCourse in OrderCourseObjList)
                    {
                        JObject parmsI = JObject.Parse(itemOrderCourse.ToString());
                        RB_Order_Course_ViewModel orderCourseModel = new RB_Order_Course_ViewModel
                        {
                            OrderCourseId = parmsI.GetInt("OrderCourseId"),
                            OrderId = parmsI.GetInt("OrderId"),
                            ClassId = parmsI.GetInt("ClassId"),
                            Class_Price = parmsI.GetDecimal("Class_Price"),
                            Unit_Price = parmsI.GetDecimal("Unit_Price"),
                            TextbookFee = parmsI.GetDecimal("TextbookFee"),
                            CoursewareFee = parmsI.GetDecimal("CoursewareFee"),
                            SellPriceType = parmsI.GetInt("SellPriceType"),
                            TotalClassHours = parmsI.GetDecimal("TotalClassHours"),
                            GuestNum = parmsI.GetInt("GuestNum"),
                            PreferPrice = parmsI.GetInt("PreferPrice"),
                            Group_Id = demodel.Group_Id,
                            CreateBy = demodel.CreateBy,
                            CreateTime = demodel.CreateTime,
                            UpdateBy = demodel.UpdateBy,
                            UpdateTime = demodel.UpdateTime,
                            SourceId = demodel.SourceId,
                            HelpEnterId = parmsI.GetInt("HelpEnterId"),
                            CourseId = parmsI.GetInt("CourseId"),
                            TransIntroductceRatio = parmsI.GetDecimal("TransIntroductceRatio"),
                            TransIntroductceReNewRatio = parmsI.GetDecimal("TransIntroductceReNewRatio"),
                            InnerRecommendRatio = parmsI.GetDecimal("InnerRecommendRatio"),
                            InnerRecommendReNewRatio = parmsI.GetDecimal("InnerRecommendReNewRatio"),
                            CommissionReType = parmsI.GetInt("CommissionReType"),
                            ScrollSchoolId = parmsI.GetInt("ScrollSchoolId"),
                            StudyBroadRebateMoney = parmsI.GetDecimal("StudyBroadRebateMoney"),
                        };
                        demodel.OrderCourseList.Add(orderCourseModel);
                    }
                }
                deList.Add(demodel);
            }
            if (!deList.Any())
            {
                return ApiResult.Failed("请传递订单信息");
            }
            var flag = orderModule.SetClassOrderModuleBatch(deList, userInfo, base.CheckUserActionAuth("Edit_Order"), out string message);
            return flag ? ApiResult.Success(message: message) : ApiResult.Failed(message: message);
        }


        /// <summary>
        /// 设置订单应收总额
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult SetOrderPreferPrice()
        {
            var userInfo = base.UserInfo;
            JObject parms = JObject.Parse(RequestParm.Msg.ToString());
            int OrderId = parms.GetInt("OrderId", 0);
            decimal PreferPrice = parms.GetDecimal("PreferPrice");
            if (OrderId <= 0)
            {
                return ApiResult.ParamIsNull("请传递订单id");
            }

            bool flag = orderModule.SetOrderPreferPrice(OrderId, PreferPrice, userInfo);
            if (flag)
            {
                return ApiResult.Success();
            }
            else
            {
                return ApiResult.Failed();
            }
        }

        /// <summary>
        /// 获取订单详情
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetClassOrderInfo()
        {
            var userInfo = base.UserInfo;
            JObject parms = JObject.Parse(RequestParm.Msg.ToString());
            int OrderId = parms.GetInt("OrderId", 0);
            if (OrderId <= 0)
            {
                return ApiResult.ParamIsNull();
            }

            var model = orderModule.GetClassOrderInfoModule(OrderId);
            if (model == null)
            {
                return ApiResult.Failed("订单不存在");
            }
            var list = new List<RB_Order_StepPrice_ViewModel>();
            if (model.OrderType == OrderTypeEnum.CourseOrder)
            {
                list = orderModule.GetClassOrderSetpPrice(OrderId);
            }
            return ApiResult.Success("", new
            {
                OrderInfo = new
                {
                    ClassList = model.ClassList?.Select(z => new { z.ClassScrollType, z.ClassId, z.ClassName, z.CouseId, z.CourseSubjectName, z.CourseName, z.TeacherName, z.Teacher_Id, OpenTimeStr = StringHelper.FormatDate(z.OpenTime) }),
                    model.OrderId,
                    model.ClassId,
                    model.GuestNum,
                    model.Class_Price,
                    model.Unit_Price,
                    model.PreferPrice,
                    model.OrderSource,
                    OrderSourceName = model.OrderSource.ToName(),
                    model.SaleRemark,
                    model.OrderType,
                    model.SourceId,
                    model.HelpEnterId,
                    model.GeneralOccupation,
                    model.EduOccupation,
                    model.IsLessPrice,
                    model.LessPrice,
                    model.PerLessMoney,
                    model.DiscountMoney,
                    model.PerDiscountMoney,
                    model.OrderNature,
                    OrderNatureName = model.OrderNature.ToName(),
                    model.OldPreferPrice,
                    IsChaBan = model.JoinType == OrderJoinTypeEnum.InsertClass ? 1 : 0,
                    model.CourseId,
                    model.StartClassHours,
                    EffectTime = Common.ConvertHelper.FormatDate(model.EffectTime),
                    model.UpOrderId,
                    model.VisitorReserveId,
                    model.JoinType,
                    model.TargetJoinType,
                    model.SourceOrderId,
                    model.TargetOrderId,
                    model.CustomerId,
                    model.CourseConsultantId,
                    model.OrderIdentify,
                    model.B2CRatio,
                    model.B2CReNewRatio,
                    model.B2BRebateRatio,
                    model.B2BReNewRatio,
                    model.SchoolRebateRatio,
                    model.SchoolReNewRatio,
                    Unit_PriceType = model.SellPriceType,//价格类型:1-总课时费,2-课时单价  2024-08-26 add by:W
                    model.TotalClassHours,//总课时数 2024-08-26 add by:W
                    model.CoursewareFee,//教材费
                    model.TextbookFee,//课件费
                },
                StepPriceList = list.Select(x => new
                {
                    x.Id,
                    x.PersionNum,
                    x.PersionPrice
                })
            }); ;
        }

        /// <summary>
        /// 订单详情
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetClassOrderForDetail()
        {
            JObject parms = JObject.Parse(RequestParm.Msg.ToString());
            int OrderId = parms.GetInt("OrderId", 0);
            if (OrderId <= 0)
            {
                return ApiResult.ParamIsNull();
            }
            var model = orderModule.GetClassOrderInfoModule(OrderId);
            if (model == null)
            {
                return ApiResult.Failed("订单不存在");
            }
            return ApiResult.Success("", new
            {
                model.OrderId,
                model.ClassId,
                model.ClassName,
                model.TradeWay,
                model.Class_Price,
                model.Unit_Price,
                model.GuestNum,
                model.PreferPrice,
                model.Income,
                model.Refund,
                model.DiscountMoney,
                model.PlatformTax,
                DueInMoney = model.PreferPrice - (model.Income - model.Refund + model.PlatformTax + model.DiscountMoney),
                model.OrderState,
                OrderStateName = model.OrderState.ToName(),
                model.EnterID,
                EnterName = UserReidsCache.GetUserLoginInfo(model.EnterID)?.AccountName ?? "",
                model.CreateBy,
                CreateByName = UserReidsCache.GetUserLoginInfo(model.CreateBy)?.AccountName ?? "",
                model.CourseConsultantId,
                ConsultantName = UserReidsCache.GetUserLoginInfo(model.CourseConsultantId)?.AccountName ?? "",
                model.CommissionMoney,
                model.ExtraRewardMoney,
                model.ExtraDeductMoney,
                model.IsCommissionGive,
                CreateTime = model.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                CreateTime2 = model.CreateTime.ToString("yyyy年MM月dd日"),
                model.OrderType,
                model.SourceId,
                OrderTypeName = Common.Plugin.EnumHelper.ToName(model.OrderType),
                OpenTime = Common.ConvertHelper.FormatDate(model.OpenTime),
            });
        }

        /// <summary>
        /// 取消订单
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult CancelClassOrder()
        {
            var userInfo = base.UserInfo;
            JObject prams = JObject.Parse(RequestParm.Msg.ToString());
            int OrderId = prams.GetInt("OrderId", 0);
            if (OrderId <= 0)
            {
                return ApiResult.ParamIsNull("订单号不存在");
            }
            bool flag = orderModule.CancelClassOrder(OrderId, userInfo);
            if (flag)
            {
                return ApiResult.Success();
            }
            else
            {
                return ApiResult.Failed();
            }
        }

        /// <summary>
        /// 修改订单销售
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult UpdateOrderSale()
        {
            JObject parms = JObject.Parse(RequestParm.Msg.ToString());
            var userInfo = base.UserInfo;
            int OrderId = parms.GetInt("OrderId", 0);
            int EnterID = parms.GetInt("EnterID", 0);
            if (OrderId <= 0)
            {
                return ApiResult.ParamIsNull("请传递订单id");
            }
            if (EnterID <= 0)
            {
                return ApiResult.ParamIsNull("请传递销售id");
            }

            string msg = orderModule.UpdateOrderSale(OrderId, EnterID, userInfo);
            if (msg == "")
            {
                return ApiResult.Success();
            }
            else
            {
                return ApiResult.Failed(msg);
            }
        }

        /// <summary>
        /// 获取班级订单备注列表
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetClassOrderRemarkList()
        {
            var userInfo = base.UserInfo;
            var pageModel = JsonHelper.DeserializeObject<ResultPageModel>(RequestParm.Msg.ToString());
            var dmodel = JsonHelper.DeserializeObject<RB_Order_Remark_ViewModel>(RequestParm.Msg.ToString());
            if (dmodel.OrderId <= 0)
            {
                return ApiResult.ParamIsNull();
            }
            var list = orderModule.GetClassOrderRemarkPageModule(pageModel.PageIndex, pageModel.PageSize, out long count, dmodel);
            pageModel.Count = Convert.ToInt32(count);
            pageModel.PageData = list.Select(x => new
            {
                x.Id,
                x.OrderId,
                x.Content,
                CreateByName = UserReidsCache.GetUserLoginInfo(x.CreateBy).AccountName,
                CreateTime = x.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                x.Type
            });
            return ApiResult.Success("", pageModel);
        }

        /// <summary>
        /// 修改订单备注
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult UpdateOrderRemark()
        {
            JObject parms = JObject.Parse(RequestParm.Msg.ToString());
            var userInfo = base.UserInfo;
            int OrderId = parms.GetInt("OrderId", 0);
            int Type = parms.GetInt("Type", 0);// 类型  1销售  2教务  3校长  4经理
            string Remark = parms.GetStringValue("Remark");
            if (OrderId <= 0)
            {
                return ApiResult.ParamIsNull("请传递订单id");
            }
            if (Type <= 0)
            {
                return ApiResult.ParamIsNull("请传递类型");
            }

            bool flag = orderModule.UpdateOrderRemark(OrderId, Type, Remark, userInfo);
            if (flag)
            {
                return ApiResult.Success();
            }
            else
            {
                return ApiResult.Failed();
            }
        }

        /// <summary>
        /// 修改订单提成
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult UpdateOrderCommission()
        {
            JObject parms = JObject.Parse(RequestParm.Msg.ToString());
            var userInfo = base.UserInfo;
            int OrderId = parms.GetInt("OrderId", 0);
            decimal CommissionMoney = parms.GetDecimal("CommissionMoney");
            decimal ExtraRewardMoney = parms.GetDecimal("ExtraRewardMoney");
            decimal ExtraDeductMoney = parms.GetDecimal("ExtraDeductMoney");
            int Type = parms.GetInt("Type", 1);// 类型  1提成  2额外金额

            if (OrderId <= 0)
            {
                return ApiResult.ParamIsNull("请传递订单id");
            }

            bool flag = orderModule.UpdateOrderCommission(OrderId, Type, CommissionMoney, ExtraRewardMoney, ExtraDeductMoney, userInfo);
            if (flag)
            {
                return ApiResult.Success();
            }
            else
            {
                return ApiResult.Failed();
            }
        }

        /// <summary>
        /// 获取班级订单日志列表
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetClassOrderLogList()
        {
            var userInfo = base.UserInfo;
            var pageModel = JsonHelper.DeserializeObject<ResultPageModel>(RequestParm.Msg.ToString());
            var dmodel = JsonHelper.DeserializeObject<RB_User_ChangeLog_ViewModel>(RequestParm.Msg.ToString());
            if (dmodel.SourceId <= 0) { return ApiResult.ParamIsNull(); }
            dmodel.Type = 2;//订单日志
            var list = orderModule.GetClassOrderLogList(pageModel.PageIndex, pageModel.PageSize, out long count, dmodel);
            pageModel.Count = Convert.ToInt32(count);
            pageModel.PageData = list.Select(x => new
            {
                x.Id,
                x.LogContent,
                CreateByName = UserReidsCache.GetUserLoginInfo(x.CreateBy).AccountName,
                CreateTime = x.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
            });

            return ApiResult.Success("", pageModel);
        }

        /// <summary>
        /// 获取枚举列表
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetGuestBasicsEnumList()
        {
            var list = EnumHelper.EnumToList(typeof(GuestBasicsEnum));
            return ApiResult.Success("", list.Select(x => new
            {
                x.Name,
                x.Id
            }));
        }



        /// <summary>
        /// 获取枚举列表
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetGuestEducationEnumList()
        {
            var list = EnumHelper.EnumToList(typeof(GuestEducationEnum));
            return ApiResult.Success(data: list);
        }

        /// <summary>
        /// 获取枚举列表
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetGuestLearningGoalsEnumList()
        {
            var list = EnumHelper.EnumToList(typeof(GuestLearningGoalsEnum));
            return ApiResult.Success("", list.Select(x => new
            {
                x.Name,
                x.Id
            }));
        }

        /// <summary>
        /// 获取枚举列表
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetOrderFormEnumList()
        {
            var list = EnumHelper.EnumToList(typeof(OrderFormEnum));
            return ApiResult.Success("", list.Select(x => new
            {
                x.Name,
                x.Id
            }));
        }

        /// <summary>
        /// 获取枚举列表
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetOrderSourceEnumList()
        {
            var list = EnumHelper.EnumToList(typeof(OrderSourceEnum));
            return ApiResult.Success("", list.Select(x => new
            {
                x.Name,
                x.Id
            }));
        }

        /// <summary>
        /// 获取枚举列表
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetOrderStateEnumList()
        {
            var list = EnumHelper.EnumToList(typeof(OrderStateEnum));
            return ApiResult.Success("", list.Select(x => new
            {
                x.Name,
                x.Id
            }));
        }

        /// <summary>
        /// 订单转班
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult SetClassOrderCareOfClass()
        {
            var userInfo = base.UserInfo;
            JObject parms = JObject.Parse(RequestParm.Msg.ToString());
            int OrderId = parms.GetInt("OrderId", 0);
            int ClassId = parms.GetInt("ClassId", 0);
            if (OrderId <= 0)
            {
                return ApiResult.ParamIsNull("请传递订单id");
            }
            if (ClassId <= 0)
            {
                return ApiResult.ParamIsNull("请传递转入班级id");
            }

            string msg = orderModule.SetClassOrderCareOfClass(OrderId, ClassId, userInfo);
            if (msg == "")
            {
                return ApiResult.Success();
            }
            else
            {
                return ApiResult.Failed(msg);
            }
        }

        /// <summary>
        /// 订单使用最新班级报价
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult SetClassOrderUseNewClassPrice()
        {
            var userInfo = base.UserInfo;
            JObject parms = JObject.Parse(RequestParm.Msg.ToString());
            int OrderId = parms.GetInt("OrderId", 0);
            if (OrderId <= 0)
            {
                return ApiResult.ParamIsNull();
            }

            bool flag = orderModule.SetClassOrderUseNewClassPrice(OrderId);
            if (flag)
            {
                return ApiResult.Success();
            }
            else
            {
                return ApiResult.Failed();
            }
        }

        #endregion

        #region 学生名单
        /// <summary>
        /// 获取学生名单分页列表
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetOrderGuestPageList()
        {
            var userInfo = base.UserInfo;
            var pageModel = JsonHelper.DeserializeObject<ResultPageModel>(RequestParm.Msg.ToString());
            var dmodel = new RB_Order_Guest_ViewModel()
            {
                OrderId = base.ParmJObj.GetInt("OrderId"),
                ClassId = base.ParmJObj.GetInt("ClassId"),
                GuestState = (GuestStateEnum)base.ParmJObj.GetInt("GuestState"),
                GuestName = base.ParmJObj.GetStringValue("GuestName"),
                SourceId = base.ParmJObj.GetInt("SourceId"),
            };
            dmodel.Group_Id = userInfo.Group_Id;
            var list = orderModule.GetOrderGuestPageModule(pageModel.PageIndex, pageModel.PageSize, out long count, dmodel);
            pageModel.Count = Convert.ToInt32(count);
            pageModel.PageData = list.Select(x => new
            {
                x.Id,
                x.GuestName,
                x.OrderId,
                x.Profession,
                x.Sex,
                SexStr = x.Sex == 1 ? "男" : "女",
                x.Age,
                BirthDate = Common.ConvertHelper.FormatDate(x.BirthDate),
                Mobile = x.StuTel,
                x.Basics,
                x.Education,
                EducationName = x.Education.ToName(),
                x.GuestSource,
                GuestSourceName = x.GuestSource.ToName(),
                x.LearningGoals,
                x.LearningGoalsName,
                x.Contact,
                x.ContactMobile,
                x.IDCard,
                x.ContactAddress,
                x.Domicile,
                UpdateTime = x.UpdateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                IsShow = true,
                x.GraduatedSchool,
                x.GraduatedMajor,
                x.VolunteerMajor,
                x.Price,
                x.StudyRemark,
                x.StuIcon,
                x.CourseId,
                x.CourseName,
                x.StartClassHours,
                x.JoinType,
                JoinTypeName = x.JoinType.ToName(),
                x.TargetJoinType,
                TargetJoinTypeName = x.TargetJoinType.ToName(),
                x.SourceOrderId,
                x.SourceClassName,
                x.TargetOrderId,
                x.TargetClassName,
                x.EffectStatus,
                x.EffectStatusStr,
                EffectTime = Common.ConvertHelper.FormatDate(x.EffectTime),
                x.UpOrderId,
                x.GuestContractNo,
                x.ContractType,
                x.ContractUrl,
                x.ContractUrlList,
                x.TotalHours,
                x.ValidClassHours,
                x.CompleteHours,
                x.MakeUpHours,
                SurplusHours = x.TotalHours - x.CompleteHours,
                x.GuestState,
                x.GuestStateStr,
                GraduationTime = Common.ConvertHelper.FormatDate(x.GraduationTime),
                BackClassList = x?.GuestEduReceiptList?.Where(qitem => qitem.ReceiptType == ReceiptTypeEnum.BackClass)?.ToList(),
                StopClassList = x?.GuestEduReceiptList?.Where(qitem => qitem.ReceiptType == ReceiptTypeEnum.StopClass)?.ToList(),
                InvitationClassList = x?.GuestEduReceiptList?.Where(qitem => qitem.ReceiptType == ReceiptTypeEnum.InvitationClass)?.ToList(),
                OrderTransClassList = x?.GuestEduReceiptList?.Where(qitem => qitem.ReceiptType == ReceiptTypeEnum.OrderTransClass)?.ToList(),
                OrderSplitClassList = x?.GuestEduReceiptList?.Where(qitem => qitem.ReceiptType == ReceiptTypeEnum.OrderSplitClass)?.ToList(),
            });
            return ApiResult.Success("", pageModel);
        }

        /// <summary>
        /// 新增 修改客人
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult SetOrderGuestInfo()
        {
            var userInfo = base.UserInfo;
            var dmodel = new RB_Order_Guest_ViewModel()
            {
                Id = base.ParmJObj.GetInt("Id"),
                OrderId = base.ParmJObj.GetInt("OrderId"),
                GuestName = base.ParmJObj.GetStringValue("GuestName"),
                Profession = base.ParmJObj.GetStringValue("Profession"),
                Sex = base.ParmJObj.GetInt("Sex", 1),
                Age = base.ParmJObj.GetInt("Age"),
                Mobile = base.ParmJObj.GetStringValue("Mobile"),
                Basics = base.ParmJObj.GetStringValue("Basics"),
                Education = (GuestEducationEnum)base.ParmJObj.GetInt("Education"),
                GuestSource = (OrderSourceEnum)base.ParmJObj.GetInt("GuestSource"),
                LearningGoals = base.ParmJObj.GetStringValue("LearningGoals"),
                Contact = base.ParmJObj.GetStringValue("Contact"),
                ContactMobile = base.ParmJObj.GetStringValue("ContactMobile"),
                IDCard = base.ParmJObj.GetStringValue("IDCard"),
                Domicile = base.ParmJObj.GetStringValue("Domicile"),
                ContactAddress = base.ParmJObj.GetStringValue("ContactAddress"),
                SourceId = base.ParmJObj.GetInt("SourceId"),
                GraduatedSchool = base.ParmJObj.GetStringValue("GraduatedSchool"),
                GraduatedMajor = base.ParmJObj.GetStringValue("GraduatedMajor"),
                VolunteerMajor = base.ParmJObj.GetStringValue("VolunteerMajor"),
                Price = base.ParmJObj.GetDecimal("Price"),
                StudyRemark = base.ParmJObj.GetStringValue("StudyRemark"),
                BirthDate = base.ParmJObj.GetDateTime("BirthDate"),
                TotalHours = base.ParmJObj.GetDecimal("TotalHours"),
                StuIcon = base.ParmJObj.GetStringValue("StuIcon"),
                GuestContractNo = base.ParmJObj.GetStringValue("GuestContractNo"),
                ContractType = base.ParmJObj.GetInt("ContractType"),
            };
            if (dmodel.OrderId <= 0)
            {
                return ApiResult.ParamIsNull("请传递订单id");
            }
            if (string.IsNullOrEmpty(dmodel.GuestName))
            {
                return ApiResult.ParamIsNull("请输入客人姓名");
            }
            if (string.IsNullOrEmpty(dmodel.Mobile))
            {
                return ApiResult.ParamIsNull("请输入手机号码");
            }
            List<string> contractList = new List<string>();
            var contract = base.ParmJObj.GetStringValue("ContractUrl");
            if (!string.IsNullOrEmpty(contract))
            {
                contractList = Common.Plugin.JsonHelper.DeserializeObject<List<string>>(contract);
            }
            dmodel.ContractUrl = Common.Plugin.JsonHelper.Serialize(contractList);
            dmodel.GuestState = GuestStateEnum.Normal;
            dmodel.Status = 0;
            dmodel.Group_Id = userInfo.Group_Id;
            dmodel.School_Id = userInfo.School_Id;
            dmodel.CreateBy = userInfo.Id;
            dmodel.CreateTime = DateTime.Now;
            dmodel.UpdateBy = userInfo.Id;
            dmodel.UpdateTime = DateTime.Now;
            bool flag = orderModule.SetOrderGuestInfo_V2(dmodel, out string message);
            return flag ? ApiResult.Success() : ApiResult.Failed(message);
        }

        /// <summary>
        /// 删除客人
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult DelOrderGuestInfo()
        {
            JObject parms = JObject.Parse(RequestParm.Msg.ToString());
            var userInfo = base.UserInfo;
            int GuestId = parms.GetInt("GuestId", 0);
            if (GuestId <= 0)
            {
                return ApiResult.ParamIsNull("");
            }

            bool flag = orderModule.DelOrderGuestInfo(GuestId, userInfo);
            if (flag)
            {
                return ApiResult.Success();
            }
            else
            {
                return ApiResult.Failed();
            }
        }

        /// <summary>
        /// 通过我的学生直接转订单客人
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult SetMyStudentToGuest()
        {
            var userInfo = base.UserInfo;
            JObject parms = JObject.Parse(base.RequestParm.Msg.ToString());
            int OrderId = parms.GetInt("OrderId", 0);//订单
            string StuIds = parms.GetStringValue("StuIds");//学生Ids
            if (OrderId <= 0)
            {
                return ApiResult.ParamIsNull("订单不存在");
            }
            if (string.IsNullOrEmpty(StuIds))
            {
                return ApiResult.ParamIsNull("请选择学生");
            }

            string msg = orderModule.SetMyStudentToGuest(OrderId, StuIds, userInfo);
            if (msg == "")
            {
                return ApiResult.Success();
            }
            else
            {
                return ApiResult.Failed(msg);
            }
        }

        #endregion

        #region 销售中心

        /// <summary>
        /// 获取我的订单列表
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetMyOrderPageList()
        {
            var userInfo = base.UserInfo;
            ResultPageModel pageModel = JsonHelper.DeserializeObject<ResultPageModel>(RequestParm.Msg.ToString());
            RB_Order_ViewModel demodel = new RB_Order_ViewModel()
            {
                OrderId = base.ParmJObj.GetInt("OrderId"),
                GuestName = base.ParmJObj.GetStringValue("GuestName"),
                ClassName = base.ParmJObj.GetStringValue("ClassName"),
                CourseId = base.ParmJObj.GetInt("CouseId"),
                StartTime = base.ParmJObj.GetStringValue("StartTime"),
                EndTime = base.ParmJObj.GetStringValue("EndTime"),
                OPStartTime = base.ParmJObj.GetStringValue("OPStartTime"),
                OPEndTime = base.ParmJObj.GetStringValue("OPEndTime"),
                Q_NotCollect = base.ParmJObj.GetInt("Q_NotCollect"),
                OrderState = (OrderStateEnum)base.ParmJObj.GetInt("OrderState"),
                Q_OrderState = base.ParmJObj.GetInt("Q_OrderState"),
                Q_OrderBy = base.ParmJObj.GetInt("Q_OrderBy"),
                PlatformTax = base.ParmJObj.GetDecimal("PlatformTax"),
                CourseSubject = base.ParmJObj.GetInt("CourseSubject"),
            };
            demodel.Group_Id = userInfo.Group_Id;
            demodel.CreateBy = userInfo.Id;

            var orderList = orderModule.GetMyOrderPageList(pageModel.PageIndex, pageModel.PageSize, out long count, demodel);
            var orderS = orderModule.GetMyOrderStatisticsModule(demodel);
            pageModel.Count = Convert.ToInt32(count);
            var obj = new
            {
                Statistics = new
                {
                    PreferPrice = orderS?.PreferPrice ?? 0,
                    Income = orderS?.Income ?? 0,
                    DueInMoney = orderS?.DueInMoney ?? 0,
                    GuestNum = orderS?.GuestNum ?? 0,
                    CancelNum = orderS?.CancelNum ?? 0,
                    CommissionMoney = orderS?.CommissionMoney ?? 0,
                    ExtraRewardMoney = orderS?.ExtraRewardMoney ?? 0,
                    BrokerageMoney = orderS?.BrokerageMoney ?? 0
                },
                List = orderList?.Select(x => new
                {
                    ClassList = x.ClassList?.Select(z => new { z.ClassId, z.ClassName, z.CouseId, z.CourseSubjectName, z.CourseName, z.TeacherName, z.Teacher_Id, OpenTimeStr = StringHelper.FormatDate(z.OpenTime) }),
                    x.OrderId,
                    x.ClassId,
                    x.CourseId,
                    x.CourseName,
                    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,
                    x.ClassSchoolId,
                    x.ClassName,
                    x.TradeWay,
                    x.Class_Price,
                    x.Unit_Price,
                    x.GuestNum,
                    x.PreferPrice,
                    x.Income,
                    x.Refund,
                    x.DiscountMoney,
                    x.PlatformTax,
                    DueInMoney = x.PreferPrice - (x.Income - x.Refund + x.PlatformTax + x.DiscountMoney),
                    x.OrderState,
                    OrderStateName = x.OrderState.ToName(),
                    x.OrderSource,
                    OrderSourceName = x.OrderSource.ToName(),
                    x.EnterID,
                    EnterName = UserReidsCache.GetUserLoginInfo(x.EnterID)?.AccountName ?? "",
                    x.CreateBy,
                    CreateByName = UserReidsCache.GetUserLoginInfo(x.CreateBy)?.AccountName ?? "",
                    x.CourseConsultantId,
                    ConsultantName = UserReidsCache.GetUserLoginInfo(x.CourseConsultantId)?.AccountName ?? "",
                    IsAchievements = x.YFCommission > 0 ? 1 : 2,
                    YFCommissionMoney = x.YFCommission > 0 ? x.YFCommission : GetOrderYFCommission(x),
                    x.CommissionMoney,
                    x.ExtraCommissionMoney,
                    x.ExtraRewardMoney,
                    x.ExtraDeductMoney,
                    IsCommissionGive = x.YFCommission > 0 ? 1 : x.IsCommissionGive,
                    x.CommissionBack,
                    CreateTime = x.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                    SaleRemark = x?.SaleRemark ?? "",
                    TeacherRemark = x?.TeacherRemark ?? "",
                    RectorRemark = x?.RectorRemark ?? "",
                    DirectorRemark = x?.DirectorRemark ?? "",
                    x.OfferId,
                    x.HelpEnterId,
                    HelpEnterName = UserReidsCache.GetUserLoginInfo(x.HelpEnterId)?.AccountName,
                    x.GeneralOccupation,
                    x.EduOccupation,
                    x.IsLessPrice,
                    x.LessPrice,
                    x.OrderNature,
                    OrderNatureName = x.OrderNature.ToName(),
                    x.OldPreferPrice,
                    x.EffectStatus,
                    x.EffectStatusStr,
                    EffectTime = Common.ConvertHelper.FormatDate(x.EffectTime),
                    x.UpOrderId,
                    OpenTime = Common.ConvertHelper.FormatDate(x.OpenTime),
                    x.VisitorReserveId,
                    x.RenewOrderId,
                    x.FirstOrderId,
                    x.IsBackClass,
                    x.CourseSubject,
                    x.CourseSubjectName,
                    x.CustomerId,
                    x.CustomerName,
                    x.CustomerTel,
                    x.ClassScrollType,
                    SplitDetailsList = x?.SplitDetailsList?.Select(qitem => new
                    {
                        qitem.S_ClassId,
                        qitem.S_ClassName,
                        qitem.S_JoinType,
                        S_JoinTypeName = qitem.S_JoinType.ToName(),
                        qitem.S_OrderId,
                        qitem.T_ClassId,
                        qitem.T_ClassName,
                        qitem.T_JoinType,
                        T_JoinTypeName = qitem.T_JoinType.ToName(),
                        qitem.T_OrderId
                    }),
                    SaleRemarkList = x?.SaleRemarkList.Select(z => new
                    {
                        z.Id,
                        z.Content,
                        CreateBy = z.CreateByName,
                        CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                    }),
                    TeacherRemarkList = x?.TeacherRemarkList.Select(z => new
                    {
                        z.Id,
                        z.Content,
                        CreateBy = z.CreateByName,
                        CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                    }),
                    RectorRemarkList = x?.RectorRemarkList.Select(z => new
                    {
                        z.Id,
                        z.Content,
                        CreateBy = z.CreateByName,
                        CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                    }),
                    DirectorRemarkList = x?.DirectorRemarkList.Select(z => new
                    {
                        z.Id,
                        z.Content,
                        CreateBy = z.CreateByName,
                        CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                    }),
                    GuestList = x?.GuestList.Select(z => new
                    {
                        z.Id,
                        z.GuestName,
                        z.GuestState,
                        z.ContractId,
                        z.ContractNo,
                        z.ContractStatus,
                        z.ContractStatusStr,
                        z.GuestStateStr,
                        z.GuestContractNo,
                        z.ContractType,
                        z.ContractUrl,
                        z.ContractUrlList,
                    }),
                    ContractList = x?.ContractList.Select(z => new
                    {
                        z.Id,
                        z.StudentName,
                        z.ContractNo,
                        z.GuestId,
                        z.Status
                    }),
                    x.CreateType,
                    CreateTypeName = x.CreateType.ToName(),
                    x.StuSourceIdName,
                    x.BrokerageMoney,
                    x.StudyBroadRebateMoney,
                    x.TotalClassHours,
                    x.TextbookFee,
                    x.CoursewareFee,
                    x.SellPriceType,
                })
            };
            pageModel.PageData = obj;
            return ApiResult.Success("", pageModel);
        }

        /// <summary>
        /// 获取订单列表统计
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetOrderPageListStatistics()
        {
            var userInfo = base.UserInfo;
            ResultPageModel pageModel = JsonHelper.DeserializeObject<ResultPageModel>(RequestParm.Msg.ToString());
            RB_Order_ViewModel demodel = new RB_Order_ViewModel()
            {
                OrderId = base.ParmJObj.GetInt("OrderId"),
                GuestName = base.ParmJObj.GetStringValue("GuestName"),
                ClassName = base.ParmJObj.GetStringValue("ClassName"),
                CourseId = base.ParmJObj.GetInt("CouseId"),
                StartTime = base.ParmJObj.GetStringValue("StartTime"),
                EndTime = base.ParmJObj.GetStringValue("EndTime"),
                OPStartTime = base.ParmJObj.GetStringValue("OPStartTime"),
                OPEndTime = base.ParmJObj.GetStringValue("OPEndTime"),
                Q_NotCollect = base.ParmJObj.GetInt("Q_NotCollect"),
                OrderState = (OrderStateEnum)base.ParmJObj.GetInt("OrderState"),
                Q_OrderState = base.ParmJObj.GetInt("Q_OrderState"),
                Q_OrderBy = base.ParmJObj.GetInt("Q_OrderBy"),
                PlatformTax = base.ParmJObj.GetDecimal("PlatformTax"),
                EnterID = base.ParmJObj.GetInt("EnterID"),
                HelpEnterId = base.ParmJObj.GetInt("HelpEnterId", 0),
                ClassNo = base.ParmJObj.GetStringValue("ClassNo"),
                CourseSubject = base.ParmJObj.GetInt("CourseSubject"),
                CustomerId = base.ParmJObj.GetInt("CustomerId", 0),
                CategoryId = base.ParmJObj.GetInt("CategoryId"),
            };
            demodel.Group_Id = userInfo.Group_Id;

            var orderList = orderModule.GetMyOrderPageList(pageModel.PageIndex, pageModel.PageSize, out long count, demodel);
            var orderS = orderModule.GetMyOrderStatisticsModule(demodel);
            pageModel.Count = Convert.ToInt32(count);
            var obj = new
            {
                Statistics = new
                {
                    PreferPrice = orderS?.PreferPrice ?? 0,
                    Income = orderS?.Income ?? 0,
                    DueInMoney = orderS?.DueInMoney ?? 0,
                    GuestNum = orderS?.GuestNum ?? 0,
                    CancelNum = orderS?.CancelNum ?? 0,
                    CommissionMoney = (orderS?.CommissionMoney ?? 0) > 0 ? (orderS?.CommissionMoney ?? 0) : 0,
                    ExtraRewardMoney = orderS?.ExtraRewardMoney ?? 0,
                    BrokerageMoney = orderS?.BrokerageMoney ?? 0
                },
                List = orderList?.Select(x => new
                {
                    ClassList = x.ClassList?.Select(z => new { z.ClassId, z.ClassName, z.CouseId, z.CourseSubjectName, z.CourseName, z.TeacherName, z.Teacher_Id, OpenTimeStr = StringHelper.FormatDate(z.OpenTime) }),
                    x.OrderId,
                    x.ClassId,
                    x.ClassNo,
                    x.OrderType,
                    x.SourceId,
                    x.ClassSchoolId,
                    x.ClassName,
                    OpenTime = Common.ConvertHelper.FormatDate(x.OpenTime),
                    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,
                    x.Class_Price,
                    x.Unit_Price,
                    x.GuestNum,
                    x.PreferPrice,
                    x.Income,
                    x.Refund,
                    x.DiscountMoney,
                    x.PlatformTax,
                    DueInMoney = x.PreferPrice - (x.Income - x.Refund + x.PlatformTax + x.DiscountMoney),
                    x.OrderState,
                    OrderStateName = x.OrderState.ToName(),
                    x.OrderSource,
                    OrderSourceName = x.OrderSource.ToName(),
                    x.EnterID,
                    EnterName = UserReidsCache.GetUserLoginInfo(x.EnterID)?.AccountName ?? "",
                    x.CreateBy,
                    CreateByName = UserReidsCache.GetUserLoginInfo(x.CreateBy)?.AccountName ?? "",
                    x.CourseConsultantId,
                    ConsultantName = UserReidsCache.GetUserLoginInfo(x.CourseConsultantId)?.AccountName ?? "",
                    IsAchievements = x.YFCommission > 0 ? 1 : 2,
                    YFCommissionMoney = x.YFCommission > 0 ? x.YFCommission : GetOrderYFCommission(x),
                    x.CommissionMoney,
                    x.ExtraCommissionMoney,
                    x.ExtraRewardMoney,
                    x.ExtraDeductMoney,
                    IsCommissionGive = x.YFCommission > 0 ? 1 : x.IsCommissionGive,
                    x.CommissionBack,
                    CreateTime = x.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                    SaleRemark = x?.SaleRemark ?? "",
                    TeacherRemark = x?.TeacherRemark ?? "",
                    RectorRemark = x?.RectorRemark ?? "",
                    DirectorRemark = x?.DirectorRemark ?? "",
                    x.OfferId,
                    x.HelpEnterId,
                    HelpEnterName = UserReidsCache.GetUserLoginInfo(x.HelpEnterId)?.AccountName,
                    x.GeneralOccupation,
                    x.EduOccupation,
                    x.IsLessPrice,
                    x.LessPrice,
                    x.OrderNature,
                    OrderNatureName = x.OrderNature.ToName(),
                    x.OldPreferPrice,
                    x.EffectStatus,
                    x.EffectStatusStr,
                    EffectTime = Common.ConvertHelper.FormatDate(x.EffectTime),
                    x.UpOrderId,
                    x.VisitorReserveId,
                    x.RenewOrderId,
                    x.FirstOrderId,
                    x.IsBackClass,
                    x.CourseSubject,
                    x.CourseSubjectName,
                    x.CustomerId,
                    x.CustomerName,
                    x.CustomerTel,
                    x.ClassScrollType,
                    SplitDetailsList = x?.SplitDetailsList?.Select(qitem => new
                    {
                        qitem.S_ClassId,
                        qitem.S_ClassName,
                        qitem.S_JoinType,
                        S_JoinTypeName = qitem.S_JoinType.ToName(),
                        qitem.S_OrderId,
                        qitem.T_ClassId,
                        qitem.T_ClassName,
                        qitem.T_JoinType,
                        T_JoinTypeName = qitem.T_JoinType.ToName(),
                        qitem.T_OrderId
                    }),
                    SaleRemarkList = x?.SaleRemarkList.Select(z => new
                    {
                        z.Id,
                        z.Content,
                        CreateBy = z.CreateByName,
                        CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                    }),
                    TeacherRemarkList = x?.TeacherRemarkList.Select(z => new
                    {
                        z.Id,
                        z.Content,
                        CreateBy = z.CreateByName,
                        CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                    }),
                    RectorRemarkList = x?.RectorRemarkList.Select(z => new
                    {
                        z.Id,
                        z.Content,
                        CreateBy = z.CreateByName,
                        CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                    }),
                    DirectorRemarkList = x?.DirectorRemarkList.Select(z => new
                    {
                        z.Id,
                        z.Content,
                        CreateBy = z.CreateByName,
                        CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                    }),
                    GuestList = x?.GuestList.Select(z => new
                    {
                        z.Id,
                        z.GuestName,
                        z.GuestState,
                        z.ContractId,
                        z.ContractNo,
                        z.ContractStatus,
                        z.ContractStatusStr,
                        z.GuestStateStr,
                        z.GuestContractNo,
                        z.ContractType,
                        z.ContractUrl,
                        z.ContractUrlList,
                    }),
                    ContractList = x?.ContractList.Select(z => new
                    {
                        z.Id,
                        z.StudentName,
                        z.ContractNo,
                        z.GuestId,
                        z.Status,
                    }),
                    x.CreateType,
                    CreateTypeName = x.CreateType.ToName(),
                    x.StuSourceIdName,
                    x.BrokerageMoney,
                    x.StudyBroadRebateMoney,
                    x.TextbookFee,
                    x.CoursewareFee,
                    x.SellPriceType,
                    x.TotalClassHours,
                })
            };
            pageModel.PageData = obj;
            return ApiResult.Success("", pageModel);
        }

        /// <summary>
        /// 获取订单列表统计  Excel导出
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [Obsolete]
        public FileContentResult GetOrderPageListStatisticsToExcel()
        {
            List<ExcelDataSource> slist = new List<ExcelDataSource>();
            ExcelDataSource header = new ExcelDataSource()
            {
                ExcelRows = new List<ExcelColumn>(30) {
                    new ExcelColumn(value:"订单号"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"下单日期"){CellWidth=20,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"下单人"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"市场人员"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    //new ExcelColumn(value:"课程顾问"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"协助老师"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"班级"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"开班时间"){CellWidth=20,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"课程"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"人数"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"单价"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"成交单价"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"教材费"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"课件费"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                     new ExcelColumn(value:"总课时"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"应收总额"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"实收"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"优惠金额"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"少价金额"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"退款"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"平台税金"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"待收金额"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"状态"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"学生名单"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"销售备注"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"教务备注"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"校长备注"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"经理备注"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"类型"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"累计佣金"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"业绩提成"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                }
            };
            slist.Add(header);
            string ExcelName = "报名统计" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";

            var userInfo = base.UserInfo;
            RB_Order_ViewModel demodel = new RB_Order_ViewModel()
            {
                OrderId = base.ParmJObj.GetInt("OrderId"),
                GuestName = base.ParmJObj.GetStringValue("GuestName"),
                ClassName = base.ParmJObj.GetStringValue("ClassName"),
                CourseId = base.ParmJObj.GetInt("CouseId"),
                StartTime = base.ParmJObj.GetStringValue("StartTime"),
                EndTime = base.ParmJObj.GetStringValue("EndTime"),
                OPStartTime = base.ParmJObj.GetStringValue("OPStartTime"),
                OPEndTime = base.ParmJObj.GetStringValue("OPEndTime"),
                Q_NotCollect = base.ParmJObj.GetInt("Q_NotCollect"),
                OrderState = (OrderStateEnum)base.ParmJObj.GetInt("OrderState"),
                Q_OrderState = base.ParmJObj.GetInt("Q_OrderState"),
                Q_OrderBy = base.ParmJObj.GetInt("Q_OrderBy"),
                PlatformTax = base.ParmJObj.GetDecimal("PlatformTax"),
                EnterID = base.ParmJObj.GetInt("EnterID"),
                HelpEnterId = base.ParmJObj.GetInt("HelpEnterId", 0),
                ClassNo = base.ParmJObj.GetStringValue("ClassNo")
            };
            demodel.Group_Id = userInfo.Group_Id;

            var list = orderModule.GetMyOrderPageList(1, 100000, out long count, demodel);

            try
            {
                foreach (var item in list)
                {
                    item.DueInMoney = item.PreferPrice - (item.Income - item.Refund + item.PlatformTax + item.DiscountMoney);
                    string GuestNameStr = string.Join(",", item?.GuestList.Select(x => x.GuestName));
                    ExcelDataSource firstRow = new ExcelDataSource(30)
                    {
                        ExcelRows = new List<ExcelColumn>()
                        {
                            new ExcelColumn(value: item.OrderId.ToString()){ },
                            new ExcelColumn(value: item.CreateTime.ToString("yyyy-MM-dd HH:mm")){ },
                            new ExcelColumn(value: (item.CreateBy > 0 ? UserReidsCache.GetUserLoginInfo(item.CreateBy)?.AccountName ?? "" : "")){ },
                            new ExcelColumn(value: (item.EnterID > 0 ? UserReidsCache.GetUserLoginInfo(item.EnterID)?.AccountName ?? "" : "")){ },
                            //new ExcelColumn(value: (item.CourseConsultantId > 0 ? UserReidsCache.GetUserLoginInfo(item.CourseConsultantId)?.AccountName ?? "" : "")){ },
                            new ExcelColumn(value: (item.HelpEnterId > 0 ? UserReidsCache.GetUserLoginInfo(item.HelpEnterId)?.AccountName ?? "" : "")){ },
                            new ExcelColumn(value: item.ClassName){ },
                            new ExcelColumn(value: item.OpenTime.ToString("yyyy-MM-dd")){ },
                            new ExcelColumn(value: (item.ClassList!=null&&item.ClassList.Any())?(string.Join(",",item.ClassList.Select(x=>x.CourseName))): item.CourseName){ },
                            new ExcelColumn(value: item.GuestNum.ToString()){ },
                            new ExcelColumn(value: item.Class_Price.ToString("#0.00")+"\r\n"+(item.SellPriceType==2?"课时单价":"课时总价")){ },
                            new ExcelColumn(value: item.Unit_Price.ToString("#0.00")){ },
                            new ExcelColumn(value: item.TextbookFee.ToString("#0.00")){ },
                            new ExcelColumn(value: item.CoursewareFee.ToString("#0.00")){ },
                            new ExcelColumn(value: Convert.ToInt32(item.TotalClassHours).ToString("")){ },
                            new ExcelColumn(value: item.PreferPrice.ToString("#0.00")){ },
                            new ExcelColumn(value: item.Income.ToString("#0.00")){ },
                            new ExcelColumn(value: item.DiscountMoney.ToString("#0.00")){ },
                            new ExcelColumn(value: item.LessPrice.ToString("#0.00")){ },
                            new ExcelColumn(value: item.Refund.ToString("#0.00")){ },
                            new ExcelColumn(value: item.PlatformTax.ToString("#0.00")){ },
                            new ExcelColumn(value: item.DueInMoney.ToString("#0.00")){ },
                            new ExcelColumn(value: item.OrderState.ToName()){ },
                            new ExcelColumn(value: GuestNameStr){ },
                            new ExcelColumn(value: item?.SaleRemarkList.FirstOrDefault()?.Content??""){ },
                            new ExcelColumn(value: item?.TeacherRemarkList.FirstOrDefault()?.Content??""){ },
                            new ExcelColumn(value: item?.RectorRemarkList.FirstOrDefault()?.Content??""){ },
                            new ExcelColumn(value: item?.DirectorRemarkList.FirstOrDefault()?.Content??""){ },
                            new ExcelColumn(value: item.ClassScrollType == 2 ?"约课":"跟班"){ },
                            new ExcelColumn(value: item.BrokerageMoney.ToString("#0.00")){ },
                            new ExcelColumn(value: item.YFCommission.ToString("#0.00")){ },
                        }
                    };
                    slist.Add(firstRow);
                }

                ExcelDataSource firstRowT = new ExcelDataSource(30)
                {
                    ExcelRows = new List<ExcelColumn>()
                        {
                            new ExcelColumn(value: "合计"){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            //new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: list.Sum(x=>x.GuestNum).ToString()){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: list.Sum(x=>x.TextbookFee).ToString("#0.00")){ },
                            new ExcelColumn(value: list.Sum(x=>x.CoursewareFee).ToString("#0.00")){ },
                              new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: list.Sum(x=>x.PreferPrice).ToString("#0.00")){ },
                            new ExcelColumn(value: list.Sum(x=>x.Income).ToString("#0.00")){ },
                            new ExcelColumn(value: list.Sum(x=>x.DiscountMoney).ToString("#0.00")){ },
                            new ExcelColumn(value: list.Sum(x=>x.LessPrice).ToString("#0.00")){ },
                            new ExcelColumn(value: list.Sum(x=>x.Refund).ToString("#0.00")){ },
                            new ExcelColumn(value: list.Sum(x=>x.PlatformTax).ToString("#0.00")){ },
                            new ExcelColumn(value: list.Sum(x=>x.DueInMoney).ToString("#0.00")){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: list.Sum(x=>x.BrokerageMoney).ToString("#0.00")){ },
                            new ExcelColumn(value: list.Sum(x=>x.YFCommission).ToString("#0.00")){ },
                        }
                };
                slist.Add(firstRowT);

                var byteData = ExcelTempLateHelper.ToExcelExtend(slist);
                return File(byteData, "application/octet-stream", ExcelName);
            }
            catch (Exception ex)
            {
                LogHelper.Write(ex, "OutToExcelOrderStudentClassHoursList");
                var byteData1 = ExcelTempLateHelper.ToExcelExtend(slist);
                return File(byteData1, "application/octet-stream", ExcelName);
            }
        }

        /// <summary>
        /// 修改订单的关联教师
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult SetOrderHelpEnterId()
        {
            var userInfo = base.UserInfo;
            JObject parms = JObject.Parse(RequestParm.Msg.ToString());
            int OrderId = parms.GetInt("OrderId", 0);
            int HelpEnterId = parms.GetInt("HelpEnterId", 0);
            if (OrderId <= 0)
            {
                return ApiResult.ParamIsNull("请传递订单id");
            }

            string msg = orderModule.SetOrderHelpEnterId(OrderId, HelpEnterId, userInfo);
            if (msg == "")
            {
                return ApiResult.Success();
            }
            else
            {
                return ApiResult.Failed(msg);
            }
        }

        /// <summary>
        /// 获取我的留学就业订单列表
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetMyStudyOrderPageList()
        {
            var userInfo = base.UserInfo;
            ResultPageModel pageModel = JsonHelper.DeserializeObject<ResultPageModel>(RequestParm.Msg.ToString());
            RB_Order_ViewModel demodel = new RB_Order_ViewModel()
            {
                OrderId = base.ParmJObj.GetInt("OrderId"),
                GuestName = base.ParmJObj.GetStringValue("GuestName"),
                StartTime = base.ParmJObj.GetStringValue("StartTime"),
                EndTime = base.ParmJObj.GetStringValue("EndTime"),
                Q_NotCollect = base.ParmJObj.GetInt("Q_NotCollect"),
                OrderState = (OrderStateEnum)base.ParmJObj.GetInt("OrderState"),
                Q_OrderState = base.ParmJObj.GetInt("Q_OrderState"),
                Q_OrderBy = base.ParmJObj.GetInt("Q_OrderBy"),
                PlatformTax = base.ParmJObj.GetDecimal("PlatformTax"),
            };
            demodel.Group_Id = userInfo.Group_Id;
            demodel.EnterID = userInfo.Id;

            var orderList = orderModule.GetStudyOrderPageModule(pageModel.PageIndex, pageModel.PageSize, out long count, demodel);
            var orderS = orderModule.GetStudyOrderStatisticsModule(demodel);
            pageModel.Count = Convert.ToInt32(count);
            pageModel.PageData = new
            {
                Statistics = new
                {
                    PreferPrice = orderS?.PreferPrice ?? 0,
                    Income = orderS?.Income ?? 0,
                    DueInMoney = orderS?.DueInMoney ?? 0,
                    GuestNum = orderS?.GuestNum ?? 0,
                    CancelNum = orderS?.CancelNum ?? 0,
                    CommissionMoney = orderS?.CommissionMoney ?? 0,
                    ExtraRewardMoney = orderS?.ExtraRewardMoney ?? 0,
                    BrokerageMoney = orderS?.BrokerageMoney ?? 0
                },
                List = orderList.Select(x => new
                {
                    x.OrderId,
                    x.ClassId,
                    x.OrderType,
                    x.SourceId,
                    x.ClassSchoolId,
                    ClassName = x.StudyName,
                    x.TradeWay,
                    x.Class_Price,
                    x.Unit_Price,
                    x.GuestNum,
                    x.PreferPrice,
                    x.Income,
                    x.Refund,
                    x.DiscountMoney,
                    x.PlatformTax,
                    DueInMoney = x.PreferPrice - (x.Income - x.Refund + x.PlatformTax + x.DiscountMoney),
                    x.OrderState,
                    OrderStateName = x.OrderState.ToName(),
                    x.EnterID,
                    EnterName = UserReidsCache.GetUserLoginInfo(x.EnterID)?.AccountName ?? "",
                    x.CreateBy,
                    CreateByName = UserReidsCache.GetUserLoginInfo(x.CreateBy)?.AccountName ?? "",
                    x.CourseConsultantId,
                    ConsultantName = UserReidsCache.GetUserLoginInfo(x.CourseConsultantId)?.AccountName ?? "",
                    IsAchievements = x.YFCommission > 0 ? 1 : 2,
                    YFCommissionMoney = x.YFCommission > 0 ? x.YFCommission : GetOrderYFCommission(x),
                    x.CommissionMoney,
                    x.ExtraCommissionMoney,
                    x.ExtraRewardMoney,
                    x.ExtraDeductMoney,
                    IsCommissionGive = x.YFCommission > 0 ? 1 : x.IsCommissionGive,
                    CreateTime = x.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                    x.SaleRemark,
                    x.TeacherRemark,
                    x.RectorRemark,
                    x.DirectorRemark,
                    x.OfferId,
                    x.HelpEnterId,
                    HelpEnterName = UserReidsCache.GetUserLoginInfo(x.HelpEnterId)?.AccountName,
                    x.GeneralOccupation,
                    x.EduOccupation,
                    x.IsLessPrice,
                    x.LessPrice,
                    x.OrderNature,
                    OrderNatureName = x.OrderNature.ToName(),
                    x.OldPreferPrice,
                    x.LXConfirmState,
                    x.LXConfirmDate,
                    x.LXConfirmEmpId,
                    x.BrokerageMoney,
                    SaleRemarkList = x.SaleRemarkList.Select(z => new
                    {
                        z.Id,
                        z.Content,
                        CreateBy = z.CreateByName,
                        CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                    }),
                    TeacherRemarkList = x.TeacherRemarkList.Select(z => new
                    {
                        z.Id,
                        z.Content,
                        CreateBy = z.CreateByName,
                        CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                    }),
                    RectorRemarkList = x.RectorRemarkList.Select(z => new
                    {
                        z.Id,
                        z.Content,
                        CreateBy = z.CreateByName,
                        CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                    }),
                    DirectorRemarkList = x.DirectorRemarkList.Select(z => new
                    {
                        z.Id,
                        z.Content,
                        CreateBy = z.CreateByName,
                        CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                    }),
                    GuestList = x.GuestList.Select(z => new
                    {
                        z.Id,
                        z.GuestName,
                        z.GuestState
                    }),
                    x.StudyBroadRebateMoney,
                    x.TotalClassHours,
                    x.TextbookFee,
                    x.CoursewareFee,
                })
            };
            return ApiResult.Success("", pageModel);
        }

        /// <summary>
        /// 获取我的留学就业订单列表
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetStudyOrderPageListStatistics()
        {
            var userInfo = base.UserInfo;
            ResultPageModel pageModel = JsonHelper.DeserializeObject<ResultPageModel>(RequestParm.Msg.ToString());
            RB_Order_ViewModel demodel = new RB_Order_ViewModel()
            {
                OrderId = base.ParmJObj.GetInt("OrderId"),
                GuestName = base.ParmJObj.GetStringValue("GuestName"),
                StartTime = base.ParmJObj.GetStringValue("StartTime"),
                EndTime = base.ParmJObj.GetStringValue("EndTime"),
                Q_NotCollect = base.ParmJObj.GetInt("Q_NotCollect"),
                OrderState = (OrderStateEnum)base.ParmJObj.GetInt("OrderState"),
                Q_OrderState = base.ParmJObj.GetInt("Q_OrderState"),
                Q_OrderBy = base.ParmJObj.GetInt("Q_OrderBy"),
                PlatformTax = base.ParmJObj.GetDecimal("PlatformTax"),
                EnterID = base.ParmJObj.GetInt("EnterID")
            };
            demodel.Group_Id = userInfo.Group_Id;

            var orderList = orderModule.GetStudyOrderPageModule(pageModel.PageIndex, pageModel.PageSize, out long count, demodel);
            var orderS = orderModule.GetStudyOrderStatisticsModule(demodel);
            pageModel.Count = Convert.ToInt32(count);
            pageModel.PageData = new
            {
                Statistics = new
                {
                    PreferPrice = orderS?.PreferPrice ?? 0,
                    Income = orderS?.Income ?? 0,
                    DueInMoney = orderS?.DueInMoney ?? 0,
                    GuestNum = orderS?.GuestNum ?? 0,
                    CancelNum = orderS?.CancelNum ?? 0,
                    CommissionMoney = orderS?.CommissionMoney ?? 0,
                    ExtraRewardMoney = orderS?.ExtraRewardMoney ?? 0,
                    BrokerageMoney = orderS?.BrokerageMoney ?? 0
                },
                List = orderList.Select(x => new
                {
                    x.OrderId,
                    x.ClassId,
                    x.OrderType,
                    x.SourceId,
                    x.ClassSchoolId,
                    ClassName = x.StudyName,
                    x.TradeWay,
                    x.Class_Price,
                    x.Unit_Price,
                    x.GuestNum,
                    x.PreferPrice,
                    x.Income,
                    x.Refund,
                    x.DiscountMoney,
                    x.PlatformTax,
                    DueInMoney = x.PreferPrice - (x.Income - x.Refund + x.PlatformTax + x.DiscountMoney),
                    x.OrderState,
                    OrderStateName = x.OrderState.ToName(),
                    x.EnterID,
                    EnterName = UserReidsCache.GetUserLoginInfo(x.EnterID)?.AccountName ?? "",
                    x.CreateBy,
                    CreateByName = UserReidsCache.GetUserLoginInfo(x.CreateBy)?.AccountName ?? "",
                    x.CourseConsultantId,
                    ConsultantName = UserReidsCache.GetUserLoginInfo(x.CourseConsultantId)?.AccountName ?? "",
                    IsAchievements = x.YFCommission > 0 ? 1 : 2,
                    YFCommissionMoney = x.YFCommission > 0 ? x.YFCommission : GetOrderYFCommission(x),
                    x.CommissionMoney,
                    x.ExtraCommissionMoney,
                    x.ExtraRewardMoney,
                    x.ExtraDeductMoney,
                    IsCommissionGive = x.YFCommission > 0 ? 1 : x.IsCommissionGive,
                    CreateTime = x.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                    x.SaleRemark,
                    x.TeacherRemark,
                    x.RectorRemark,
                    x.DirectorRemark,
                    x.OfferId,
                    x.HelpEnterId,
                    HelpEnterName = UserReidsCache.GetUserLoginInfo(x.HelpEnterId)?.AccountName,
                    x.GeneralOccupation,
                    x.EduOccupation,
                    x.IsLessPrice,
                    x.LessPrice,
                    x.OrderNature,
                    OrderNatureName = x.OrderNature.ToName(),
                    x.OldPreferPrice,
                    x.LXConfirmDate,
                    x.LXConfirmEmpId,
                    x.LXConfirmState,
                    x.BrokerageMoney,
                    SaleRemarkList = x.SaleRemarkList.Select(z => new
                    {
                        z.Id,
                        z.Content,
                        CreateBy = z.CreateByName,
                        CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                    }),
                    TeacherRemarkList = x.TeacherRemarkList.Select(z => new
                    {
                        z.Id,
                        z.Content,
                        CreateBy = z.CreateByName,
                        CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                    }),
                    RectorRemarkList = x.RectorRemarkList.Select(z => new
                    {
                        z.Id,
                        z.Content,
                        CreateBy = z.CreateByName,
                        CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                    }),
                    DirectorRemarkList = x.DirectorRemarkList.Select(z => new
                    {
                        z.Id,
                        z.Content,
                        CreateBy = z.CreateByName,
                        CreateTime = z.CreateTime.ToString("yyyy-MM-dd HH:mm:ss")
                    }),
                    GuestList = x.GuestList.Select(z => new
                    {
                        z.Id,
                        z.GuestName,
                        z.GuestState
                    }),
                    x.StudyBroadRebateMoney,
                    x.TextbookFee,
                    x.CoursewareFee,
                    x.TotalClassHours,
                })
            };
            return ApiResult.Success("", pageModel);
        }

        /// <summary>
        /// 获取我的留学就业订单列表  Excel导出
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [Obsolete]
        public FileContentResult GetStudyOrderPageListStatisticsToExcel()
        {
            List<ExcelDataSource> slist = new List<ExcelDataSource>();
            ExcelDataSource header = new ExcelDataSource()
            {
                ExcelRows = new List<ExcelColumn>(30) {
                    new ExcelColumn(value:"订单号"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"下单日期"){CellWidth=20,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"下单人"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"市场人员"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"课程顾问"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"协助老师"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"项目"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"人数"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"单价"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"教材费"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"课件费"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"总课时"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"成交单价"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"应收总额"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"实收"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"优惠金额"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"少价金额"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"退款"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"平台税金"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"待收金额"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"状态"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"学生名单"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"销售备注"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"教务备注"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"校长备注"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"经理备注"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"累计佣金"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                    new ExcelColumn(value:"业绩提成"){CellWidth=15,HAlignmentEnum= HAlignmentEnum.CENTER,VAlignmentEnum= VAlignmentEnum.CENTER },
                }
            };
            slist.Add(header);
            string ExcelName = "留学就业统计" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";

            var userInfo = base.UserInfo;
            ResultPageModel pageModel = JsonHelper.DeserializeObject<ResultPageModel>(RequestParm.Msg.ToString());
            RB_Order_ViewModel demodel = new RB_Order_ViewModel()
            {
                OrderId = base.ParmJObj.GetInt("OrderId"),
                GuestName = base.ParmJObj.GetStringValue("GuestName"),
                StartTime = base.ParmJObj.GetStringValue("StartTime"),
                EndTime = base.ParmJObj.GetStringValue("EndTime"),
                Q_NotCollect = base.ParmJObj.GetInt("Q_NotCollect"),
                OrderState = (OrderStateEnum)base.ParmJObj.GetInt("OrderState"),
                Q_OrderState = base.ParmJObj.GetInt("Q_OrderState"),
                Q_OrderBy = base.ParmJObj.GetInt("Q_OrderBy"),
                PlatformTax = base.ParmJObj.GetDecimal("PlatformTax"),
                EnterID = base.ParmJObj.GetInt("EnterID")
            };
            demodel.Group_Id = userInfo.Group_Id;

            var list = orderModule.GetStudyOrderPageModule(1, 100000, out long count, demodel);

            try
            {
                foreach (var item in list)
                {
                    item.DueInMoney = item.PreferPrice - (item.Income - item.Refund + item.PlatformTax + item.DiscountMoney);
                    string GuestNameStr = string.Join(",", item?.GuestList.Select(x => x.GuestName));
                    ExcelDataSource firstRow = new ExcelDataSource(30)
                    {
                        ExcelRows = new List<ExcelColumn>()
                        {
                            new ExcelColumn(value: item.OrderId.ToString()){ },
                            new ExcelColumn(value: item.CreateTime.ToString("yyyy-MM-dd HH:mm")){ },
                            new ExcelColumn(value: (item.CreateBy > 0 ? UserReidsCache.GetUserLoginInfo(item.CreateBy)?.AccountName ?? "" : "")){ },
                            new ExcelColumn(value: (item.EnterID > 0 ? UserReidsCache.GetUserLoginInfo(item.EnterID)?.AccountName ?? "" : "")){ },
                            new ExcelColumn(value: (item.CourseConsultantId > 0 ? UserReidsCache.GetUserLoginInfo(item.CourseConsultantId)?.AccountName ?? "" : "")){ },
                            new ExcelColumn(value: (item.HelpEnterId > 0 ? UserReidsCache.GetUserLoginInfo(item.HelpEnterId)?.AccountName ?? "" : "")){ },
                            new ExcelColumn(value: item.StudyName){ },
                            new ExcelColumn(value: item.GuestNum.ToString()){ },
                            new ExcelColumn(value: item.Class_Price.ToString("#0.00")+"\r\n"+(item.SellPriceType==2?"课时单价":"课时总价")){ },
                            new ExcelColumn(value: item.TextbookFee.ToString("#0.00")){ },
                            new ExcelColumn(value: item.CoursewareFee.ToString("#0.00")){ },
                            new ExcelColumn(value: Convert.ToInt32(item.TotalClassHours).ToString("")){ },
                            new ExcelColumn(value: item.Unit_Price.ToString("#0.00")){ },
                            new ExcelColumn(value: item.PreferPrice.ToString("#0.00")){ },
                            new ExcelColumn(value: item.Income.ToString("#0.00")){ },
                            new ExcelColumn(value: item.DiscountMoney.ToString("#0.00")){ },
                            new ExcelColumn(value: item.LessPrice.ToString("#0.00")){ },
                            new ExcelColumn(value: item.Refund.ToString("#0.00")){ },
                            new ExcelColumn(value: item.PlatformTax.ToString("#0.00")){ },
                            new ExcelColumn(value: item.DueInMoney.ToString("#0.000000")){ },
                            new ExcelColumn(value: item.OrderState.ToName()){ },
                            new ExcelColumn(value: GuestNameStr){ },
                            new ExcelColumn(value: item?.SaleRemarkList.FirstOrDefault()?.Content??""){ },
                            new ExcelColumn(value: item?.TeacherRemarkList.FirstOrDefault()?.Content??""){ },
                            new ExcelColumn(value: item?.RectorRemarkList.FirstOrDefault()?.Content??""){ },
                            new ExcelColumn(value: item?.DirectorRemarkList.FirstOrDefault()?.Content??""){ },
                            new ExcelColumn(value: item.BrokerageMoney.ToString("#0.00")){ },
                            new ExcelColumn(value: item.YFCommission.ToString("#0.00")){ },
                        }
                    };
                    slist.Add(firstRow);
                }

                ExcelDataSource firstRowT = new ExcelDataSource(30)
                {
                    ExcelRows = new List<ExcelColumn>()
                        {
                            new ExcelColumn(value: "合计"){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: list.Sum(x=>x.GuestNum).ToString()){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: list.Sum(x=>x.PreferPrice).ToString("#0.00")){ },
                            new ExcelColumn(value: list.Sum(x=>x.Income).ToString("#0.00")){ },
                            new ExcelColumn(value: list.Sum(x=>x.DiscountMoney).ToString("#0.00")){ },
                            new ExcelColumn(value: list.Sum(x=>x.LessPrice).ToString("#0.00")){ },
                            new ExcelColumn(value: list.Sum(x=>x.Refund).ToString("#0.00")){ },
                            new ExcelColumn(value: list.Sum(x=>x.PlatformTax).ToString("#0.00")){ },
                            new ExcelColumn(value: list.Sum(x=>x.DueInMoney).ToString("#0.000000")){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: ""){ },
                            new ExcelColumn(value: list.Sum(x=>x.BrokerageMoney).ToString("#0.00")){ },
                            new ExcelColumn(value: list.Sum(x=>x.YFCommission).ToString("#0.00")){ },
                        }
                };
                slist.Add(firstRowT);

                var byteData = ExcelTempLateHelper.ToExcelExtend(slist);
                return File(byteData, "application/octet-stream", ExcelName);
            }
            catch (Exception ex)
            {
                LogHelper.Write(ex, "OutToExcelOrderStudentClassHoursList");
                var byteData1 = ExcelTempLateHelper.ToExcelExtend(slist);
                return File(byteData1, "application/octet-stream", ExcelName);
            }
        }

        /// <summary>
        /// 订单转交
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult SetClassOrderCareOf()
        {
            var userInfo = base.UserInfo;
            JObject prams = JObject.Parse(RequestParm.Msg.ToString());
            int OrderId = prams.GetInt("OrderId", 0);
            int CareOfPeople = prams.GetInt("CareOfPeople", 0);
            if (OrderId <= 0)
            {
                return ApiResult.ParamIsNull();
            }
            if (CareOfPeople <= 0)
            {
                return ApiResult.ParamIsNull("请选择转交人");
            }

            bool flag = orderModule.SetClassOrderCareOf(OrderId, CareOfPeople, userInfo);
            if (flag)
            {
                return ApiResult.Success();
            }
            else
            {
                return ApiResult.Failed();
            }
        }
        #endregion

        #region 退课申请
        /// <summary>
        /// 退课申请
        /// </summary>
        /// <returns></returns>
        public ApiResult BackClassApply()
        {
            var GuestId = base.ParmJObj.GetInt("GuestId");
            var OrderId = base.ParmJObj.GetInt("OrderId");
            //申请原因
            var applyReason = base.ParmJObj.GetStringValue("applyReason");
            string receiptFile = string.Empty;
            try
            {
                List<string> receiptFileList = Common.Plugin.JsonHelper.DeserializeObject<List<string>>(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, "BackClassApply");
            }
            var BackAccountName = base.ParmJObj.GetStringValue("BackAccountName");
            var BackAccount = base.ParmJObj.GetStringValue("BackAccount");
            var StateMent = base.ParmJObj.GetStringValue("StateMent");

            bool flag = orderModule.CreateBackClassApplyModule(GuestId, OrderId, applyReason, base.UserInfo, receiptFile, BackAccountName, BackAccount, StateMent, out string message);
            return flag ? ApiResult.Success(message: message) : ApiResult.Failed(message: message);
        }
        #endregion

        #region 插班报入
        /// <summary>
        /// 获取插板报入配置信息
        /// </summary>
        /// <returns></returns>
        public ApiResult GetChaClassInfo()
        {
            var ClassId = base.ParmJObj.GetInt("ClassId");
            var otherClassList = orderModule.GetClassCourseListModule(ClassId);
            return ApiResult.Success(data: otherClassList);
        }

        #endregion

        #region 甲鹤小程序付款的课程同步过来
        /// <summary>
        /// 新增修改订单
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [Microsoft.AspNetCore.Authorization.AllowAnonymous]
        public ApiResult SetBatchClassOrder()
        {
            Model.CacheModel.UserInfo userinfo = new Model.CacheModel.UserInfo();
            int EnterID = base.ParmJObj.GetInt("EnterID");
            List<RB_Order_ViewModel> list = JsonHelper.DeserializeObject<List<RB_Order_ViewModel>>(base.ParmJObj.GetStringValue("Order"));
            list.ForEach(x => x.TargetJoinType = OrderJoinTypeEnum.Normal);
            list.ForEach(x => x.JoinType = OrderJoinTypeEnum.Normal);
            list.ForEach(x => x.JoinType = OrderJoinTypeEnum.Normal);
            list.ForEach(x => x.OrderSource = OrderSourceEnum.MallApplet);
            list.ForEach(x => x.OrderType = OrderTypeEnum.CourseOrder);
            list.ForEach(x => x.Income = 0);
            if (EnterID > 0)
            {
                userinfo = UserReidsCache.GetUserLoginInfo(EnterID);
                list.ForEach(x => x.School_Id = userinfo.School_Id);
                list.ForEach(x => x.Group_Id = userinfo.Group_Id);
                list.ForEach(x => x.Dept_Id = userinfo.DeptId);
                list.ForEach(x => x.CreateBy = EnterID);
                list.ForEach(x => x.UpdateBy = EnterID);

            }
            else
            {
                userinfo.Group_Id = list.FirstOrDefault()?.Group_Id ?? 0;
            }
            list.ForEach(x => x.OrderForm = OrderFormEnum.Applet);
            list.ForEach(x => x.TradeWay = TradeWayEnum.OnLine);
            list.ForEach(x => x.CreateTime = DateTime.Now);
            list.ForEach(x => x.UpdateTime = DateTime.Now);
            list.ForEach(x => x.OrderState = OrderStateEnum.Normal);
            list.ForEach(x => x.StartClassHours = 0);
            var flag = false;
            flag = orderModule.SetBatchClassOrder(list, userinfo, false);

            return flag ? ApiResult.Success("") : ApiResult.Failed("");
        }




        /// <summary>
        /// 系统自动取消时同步规格库存
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [Microsoft.AspNetCore.Authorization.AllowAnonymous]
        public ApiResult UpdateGoodsSpecification()
        {
            Model.CacheModel.UserInfo userinfo = new Model.CacheModel.UserInfo();

            List<int> list = JsonHelper.DeserializeObject<List<int>>(base.ParmJObj.GetStringValue("Order"));
            var flag = false;
            flag = orderModule.UpdateGoodsSpecification(list);
            return flag ? ApiResult.Success("") : ApiResult.Failed("");
        }



        #endregion

        #region 获取学员状态列表

        /// <summary>
        /// 获取学员状态列表
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public ApiResult GetGuestStateList()
        {
            var list = Common.Plugin.EnumHelper.EnumToList(typeof(GuestStateEnum));
            return ApiResult.Success(data: list);
        }
        #endregion


    }
}