Commit d051f87c authored by liudong1993's avatar liudong1993

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

parents 17540dcf 57085be6
...@@ -550,5 +550,51 @@ namespace Edu.Common ...@@ -550,5 +550,51 @@ namespace Edu.Common
} }
} }
/// <summary>
/// 甲鹤教育接口请求地址
/// </summary>
public static string DmcMallApi
{
get
{
return ReadConfigKey("DmcMallApi");
}
}
/// <summary>
/// 甲鹤教育商户id
/// </summary>
public static string JHTenantId
{
get
{
return ReadConfigKey("JHTenantId");
}
}
/// <summary>
/// 甲鹤教育小程序id
/// </summary>
public static string JHMallBaseId
{
get
{
return ReadConfigKey("JHMallBaseId");
}
}
/// <summary>
/// 电商加密
/// </summary>
public static string MallJwtSecretKey
{
get
{
return ReadConfigKey("MallJwtSecretKey");
}
}
} }
} }
\ No newline at end of file
...@@ -38,6 +38,13 @@ namespace Edu.Common.Enum ...@@ -38,6 +38,13 @@ namespace Edu.Common.Enum
[EnumField("ERP")] [EnumField("ERP")]
ERP =6, ERP =6,
/// <summary>
/// Mall【生成Token使用】
/// </summary>
[EnumField("Mall")]
Mall = 7,
/// <summary> /// <summary>
/// App学生端 /// App学生端
/// </summary> /// </summary>
......
...@@ -52,6 +52,18 @@ namespace Edu.Common.Enum.Course ...@@ -52,6 +52,18 @@ namespace Edu.Common.Enum.Course
/// 学费收入 /// 学费收入
/// </summary> /// </summary>
[EnumField("学费收入")] [EnumField("学费收入")]
Tuition = 8 Tuition = 8,
/// <summary>
/// 活动收入(电商)
/// </summary>
[EnumField("活动收入")]
ActivityIncome = 9,
/// <summary>
/// 活动退款(电商)
/// </summary>
[EnumField("活动退款")]
ActivityExpenditure = 10,
} }
} }
...@@ -24,6 +24,12 @@ ...@@ -24,6 +24,12 @@
/// ERP用户TokenKey /// ERP用户TokenKey
/// </summary> /// </summary>
public const string JWT_ERP_User_Key = "userInfo"; public const string JWT_ERP_User_Key = "userInfo";
/// <summary>
/// Mall用户TokenKey
/// </summary>
public const string JWT_Mall_User_Key = "userInfo";
/// <summary> /// <summary>
/// app学生用户TokenKey /// app学生用户TokenKey
/// </summary> /// </summary>
......
...@@ -67,6 +67,22 @@ namespace Edu.Model.CacheModel ...@@ -67,6 +67,22 @@ namespace Edu.Model.CacheModel
/// </summary> /// </summary>
public string ErpToken { get; set; } public string ErpToken { get; set; }
/// <summary>
/// 电商-token
/// </summary>
public string MallToken { get; set; }
/// <summary>
/// 电商-JHTenantId
/// </summary>
public string JHTenantId { get; set; }
/// <summary>
/// 电商-JHMallBaseId
/// </summary>
public string JHMallBaseId { get; set; }
/// <summary> /// <summary>
/// 菜单列表 /// 菜单列表
/// </summary> /// </summary>
......
...@@ -268,5 +268,10 @@ namespace Edu.Model.Entity.Course ...@@ -268,5 +268,10 @@ namespace Edu.Model.Entity.Course
/// 前置订单编号 /// 前置订单编号
/// </summary> /// </summary>
public int UpOrderId { get; set; } public int UpOrderId { get; set; }
/// <summary>
/// 预约单号
/// </summary>
public int VisitorReserveId { get; set; }
} }
} }
...@@ -76,5 +76,9 @@ namespace Edu.Model.Entity.Reserve ...@@ -76,5 +76,9 @@ namespace Edu.Model.Entity.Reserve
/// </summary> /// </summary>
public DateStateEnum Status { get; set; } public DateStateEnum Status { get; set; }
/// <summary>
/// 结束时间
/// </summary>
public string EndTime { get; set; }
} }
} }
...@@ -192,6 +192,20 @@ namespace Edu.Model.ViewModel.Course ...@@ -192,6 +192,20 @@ namespace Edu.Model.ViewModel.Course
/// 关联其他课程列表 /// 关联其他课程列表
/// </summary> /// </summary>
public List<RB_Class_Course_Extend> OtherCourseList { get; set; } public List<RB_Class_Course_Extend> OtherCourseList { get; set; }
/// <summary>
/// 班级状态字符串
/// </summary>
public string ClassStatusStr
{
get
{
string str = "";
str = Common.Plugin.EnumHelper.ToName(this.ClassStatus);
return str;
}
}
} }
/// <summary> /// <summary>
......
...@@ -45,5 +45,20 @@ namespace Edu.Model.ViewModel.Question ...@@ -45,5 +45,20 @@ namespace Edu.Model.ViewModel.Question
/// 间隔多少个15分钟 /// 间隔多少个15分钟
/// </summary> /// </summary>
public int IntervalNum { get; set; } public int IntervalNum { get; set; }
/// <summary>
/// 课程名称
/// </summary>
public string CourseName { get; set; }
/// <summary>
/// 课程进度
/// </summary>
public decimal CompleteProgress { get; set; }
/// <summary>
/// 学生
/// </summary>
public string StudentName { get; set; }
} }
} }
...@@ -27,6 +27,11 @@ namespace Edu.Model.ViewModel.Reserve ...@@ -27,6 +27,11 @@ namespace Edu.Model.ViewModel.Reserve
/// </summary> /// </summary>
public string ClassTime { get; set; } public string ClassTime { get; set; }
/// <summary>
/// 结束时间
/// </summary>
public string EndTime { get; set; }
/// <summary> /// <summary>
/// 教师编号 /// 教师编号
/// </summary> /// </summary>
...@@ -72,6 +77,11 @@ namespace Edu.Model.ViewModel.Reserve ...@@ -72,6 +77,11 @@ namespace Edu.Model.ViewModel.Reserve
/// </summary> /// </summary>
public string Q_ReserveClassIds { get; set; } public string Q_ReserveClassIds { get; set; }
/// <summary>
/// 预约状态(0-跟进中,1-成交,2-流单,3-取消)
/// </summary>
public string Q_ReserveStatus { get; set; }
/// <summary> /// <summary>
/// 报名人数 /// 报名人数
/// </summary> /// </summary>
...@@ -95,5 +105,15 @@ namespace Edu.Model.ViewModel.Reserve ...@@ -95,5 +105,15 @@ namespace Edu.Model.ViewModel.Reserve
return str; return str;
} }
} }
/// <summary>
/// 开始日期
/// </summary>
public string StartClassDate { get; set; }
/// <summary>
/// 结束日期
/// </summary>
public string EndClassDate { get; set; }
} }
} }
...@@ -4,9 +4,11 @@ using Edu.Common.Enum.Course; ...@@ -4,9 +4,11 @@ using Edu.Common.Enum.Course;
using Edu.Model.CacheModel; using Edu.Model.CacheModel;
using Edu.Model.Entity.Course; using Edu.Model.Entity.Course;
using Edu.Model.ViewModel.Course; using Edu.Model.ViewModel.Course;
using Edu.Model.ViewModel.Reserve;
using Edu.Model.ViewModel.User; using Edu.Model.ViewModel.User;
using Edu.Repository.Course; using Edu.Repository.Course;
using Edu.Repository.Log; using Edu.Repository.Log;
using Edu.Repository.Reserve;
using Edu.Repository.User; using Edu.Repository.User;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
...@@ -114,6 +116,16 @@ namespace Edu.Module.Course ...@@ -114,6 +116,16 @@ namespace Edu.Module.Course
/// </summary> /// </summary>
private readonly RB_Class_CourseRepository class_CourseRepository = new RB_Class_CourseRepository(); private readonly RB_Class_CourseRepository class_CourseRepository = new RB_Class_CourseRepository();
/// <summary>
/// 约课仓储层对象
/// </summary>
private readonly RB_Reserve_ClassRepository reserve_ClassRepository = new RB_Reserve_ClassRepository();
/// <summary>
/// 访客预约仓储层对象
/// </summary>
private readonly RB_Visitor_ReserveRepository visitor_ReserveRepository = new RB_Visitor_ReserveRepository();
/// <summary> /// <summary>
/// 获取班级列表 /// 获取班级列表
/// </summary> /// </summary>
...@@ -713,6 +725,14 @@ namespace Edu.Module.Course ...@@ -713,6 +725,14 @@ namespace Edu.Module.Course
var extModel = classRepository.GetEntity<RB_Class_ViewModel>(ClassId); var extModel = classRepository.GetEntity<RB_Class_ViewModel>(ClassId);
if (extModel != null && extModel.ClassId > 0) if (extModel != null && extModel.ClassId > 0)
{ {
if (extModel.CouseId > 0)
{
extModel.CourseName = courseRepository.GetEntity(extModel.CouseId)?.CourseName ?? "";
}
if (extModel.Teacher_Id > 0)
{
extModel.TeacherName = teacherRepository.GetEntity(extModel.Teacher_Id)?.TeacherName ?? "";
}
//课程梯度价格 //课程梯度价格
extModel.ClassStepPriceList = class_StepPriceRepository.GetClassStepPriceListRepository(new RB_Class_StepPrice_ViewModel() { ClassId = extModel.ClassId })?.ToList() ?? new List<RB_Class_StepPrice_ViewModel>(); extModel.ClassStepPriceList = class_StepPriceRepository.GetClassStepPriceListRepository(new RB_Class_StepPrice_ViewModel() { ClassId = extModel.ClassId })?.ToList() ?? new List<RB_Class_StepPrice_ViewModel>();
//课程计划上课日期 //课程计划上课日期
...@@ -1416,7 +1436,7 @@ namespace Edu.Module.Course ...@@ -1416,7 +1436,7 @@ namespace Edu.Module.Course
public object GetClassPlanLogPageListModule(int pageIndex, int pageSize, out long rowsCount, RB_Class_Plan_ViewModel query) public object GetClassPlanLogPageListModule(int pageIndex, int pageSize, out long rowsCount, RB_Class_Plan_ViewModel query)
{ {
List<object> result = new List<object>(); List<object> result = new List<object>();
var list= class_PlanRepository.GetClassPlanLogPageListRepository(pageIndex, pageSize, out rowsCount, query); var list = class_PlanRepository.GetClassPlanLogPageListRepository(pageIndex, pageSize, out rowsCount, query);
if (list != null && list.Count > 0) if (list != null && list.Count > 0)
{ {
List<RB_Class_Check_ViewModel> checkLogList = new List<RB_Class_Check_ViewModel>(); List<RB_Class_Check_ViewModel> checkLogList = new List<RB_Class_Check_ViewModel>();
...@@ -1465,7 +1485,7 @@ namespace Edu.Module.Course ...@@ -1465,7 +1485,7 @@ namespace Edu.Module.Course
MonthStr = item.ClassDate.ToString("MM"), MonthStr = item.ClassDate.ToString("MM"),
DayStr = item.ClassDate.ToString("dd"), DayStr = item.ClassDate.ToString("dd"),
YearStr = item.ClassDate.ToString("yyyy"), YearStr = item.ClassDate.ToString("yyyy"),
TimeList=time TimeList = time
}; };
result.Add(planCheckObj); result.Add(planCheckObj);
} }
...@@ -1534,7 +1554,27 @@ namespace Edu.Module.Course ...@@ -1534,7 +1554,27 @@ namespace Edu.Module.Course
/// <returns></returns> /// <returns></returns>
public List<RB_Class_Plan_ViewModel> GetClassPlanList_V2(RB_Class_Plan_ViewModel query) public List<RB_Class_Plan_ViewModel> GetClassPlanList_V2(RB_Class_Plan_ViewModel query)
{ {
return class_PlanRepository.GetClassPlanList_V2(query); var list = class_PlanRepository.GetClassPlanList_V2(query);
if (list != null && list.Any())
{
string ClassIds = string.Join(",", list.Distinct().Select(x => x.ClassId));
var orderStudentList = order_GuestRepository.GetOrderGuestListRepository(new RB_Order_Guest_ViewModel()
{
ClassIds = ClassIds,
Group_Id = query.Group_Id,
School_Id = -1
}).Where(x => x.GuestState == 1).ToList();
if (orderStudentList != null && orderStudentList.Any())
{
foreach (var item in list)
{
item.GuestList = new List<RB_Order_Guest_ViewModel>();
item.GuestList = orderStudentList.Where(x => x.ClassId == item.ClassId).ToList();
}
}
}
return list;
} }
/// <summary> /// <summary>
...@@ -2147,12 +2187,36 @@ namespace Edu.Module.Course ...@@ -2147,12 +2187,36 @@ namespace Edu.Module.Course
TimeSpan sp = endTime.Subtract(startTime); TimeSpan sp = endTime.Subtract(startTime);
var days = sp.Days + 1; var days = sp.Days + 1;
var list = class_PlanRepository.GetClassPlanStatisticalRepository(query); var list = class_PlanRepository.GetClassPlanStatisticalRepository(query);
if (list != null) //约课列表
var reserveList = reserve_ClassRepository.GetReserveClassListRepository(new Model.ViewModel.Reserve.RB_Reserve_Class_Extend()
{
StartClassDate = query.StartTime,
EndClassDate = query.EndTime,
TeacherId = query.TeacherId,
ClassRoomId = query.ClassRoomId
});
if (list != null || reserveList!=null)
{ {
string classIds = string.Join(",", list.Select(qitem => qitem.ClassId)); var timeList = new List<RB_Class_Time_ViewModel>();
string planIds = string.Join(",", list.Select(qitem => qitem.ClassPlanId)); var guestList = new List<RB_Order_Guest_ViewModel>();
var timeList = class_TimeRepository.GetClassTimeListRepository(new RB_Class_Time_ViewModel() { QClassIds = classIds, QClassPlanIds = planIds }); if (list != null&& list.Count>0)
var guestList = order_GuestRepository.GetOrderGuestListRepository(new RB_Order_Guest_ViewModel() { ClassIds = classIds }); {
string classIds = string.Join(",", list.Select(qitem => qitem.ClassId));
string planIds = string.Join(",", list.Select(qitem => qitem.ClassPlanId));
timeList = class_TimeRepository.GetClassTimeListRepository(new RB_Class_Time_ViewModel() { QClassIds = classIds, QClassPlanIds = planIds });
guestList = order_GuestRepository.GetOrderGuestListRepository(new RB_Order_Guest_ViewModel() { ClassIds = classIds });
}
var visitorList = new List<RB_Visitor_Reserve_Extend>();
if (reserveList != null && reserveList.Count > 0)
{
string reserveClassIds = string.Join(",", reserveList.Select(qitem => qitem.ReserveClassId));
visitorList = visitor_ReserveRepository.GetVisitorReserveListRepository(new Model.ViewModel.Reserve.RB_Visitor_Reserve_Extend()
{
Q_ReserveClassIds = reserveClassIds
});
}
for (var i = 0; i < days; i++) for (var i = 0; i < days; i++)
{ {
var ClassDate = startTime.AddDays(i); var ClassDate = startTime.AddDays(i);
...@@ -2164,6 +2228,7 @@ namespace Edu.Module.Course ...@@ -2164,6 +2228,7 @@ namespace Edu.Module.Course
var currentDate = Common.ConvertHelper.FormatDate(ClassDate) + " " + (tempTimeList?.FirstOrDefault()?.StartTime ?? ""); var currentDate = Common.ConvertHelper.FormatDate(ClassDate) + " " + (tempTimeList?.FirstOrDefault()?.StartTime ?? "");
subList.Add(new subList.Add(new
{ {
ClassType = 1,
subItem.ClassId, subItem.ClassId,
subItem.ClassName, subItem.ClassName,
subItem.CourseName, subItem.CourseName,
...@@ -2176,6 +2241,26 @@ namespace Edu.Module.Course ...@@ -2176,6 +2241,26 @@ namespace Edu.Module.Course
GuestList = guestList.Where(qitem => qitem.ClassId == subItem.ClassId)?.Select(qitem => new { qitem.GuestName }) GuestList = guestList.Where(qitem => qitem.ClassId == subItem.ClassId)?.Select(qitem => new { qitem.GuestName })
}); });
} }
var tempReserveList = reserveList.Where(qitem => qitem.ClassDate == ClassDate).OrderBy(qitem => qitem.ClassTime);
foreach (var subItem in tempReserveList)
{
var currentDate = Common.ConvertHelper.FormatDate(ClassDate) + " " + (subItem?.ClassTime ?? "");
subList.Add(new
{
ClassType=2,
ClassId= subItem.ReserveClassId,
ClassName= "试听课",
CourseName= subItem.ClassContent,
subItem.RoomName,
subItem.TeacherName,
TimeStr = Common.ConvertHelper.GetTimeStr(currentDate),
StartTime = subItem.ClassTime,
EndTime =subItem.EndTime,
CompleteProgress=-1,
GuestList = visitorList?.Where(qitem => qitem.ReserveClassId == subItem.ReserveClassId)?.Select(qitem => new { GuestName=qitem.VisitorName })
});
}
var obj = new var obj = new
{ {
ClassDate = Common.ConvertHelper.FormatDate(ClassDate), ClassDate = Common.ConvertHelper.FormatDate(ClassDate),
......
...@@ -10,11 +10,13 @@ using Edu.Model.CacheModel; ...@@ -10,11 +10,13 @@ using Edu.Model.CacheModel;
using Edu.Model.Entity.Course; using Edu.Model.Entity.Course;
using Edu.Model.ViewModel.Course; using Edu.Model.ViewModel.Course;
using Edu.Model.ViewModel.Log; using Edu.Model.ViewModel.Log;
using Edu.Model.ViewModel.Reserve;
using Edu.Model.ViewModel.StudyAbroad; using Edu.Model.ViewModel.StudyAbroad;
using Edu.Model.ViewModel.User; using Edu.Model.ViewModel.User;
using Edu.Repository.Course; using Edu.Repository.Course;
using Edu.Repository.Finance; using Edu.Repository.Finance;
using Edu.Repository.Log; using Edu.Repository.Log;
using Edu.Repository.Reserve;
using Edu.Repository.StudyAbroad; using Edu.Repository.StudyAbroad;
using Edu.Repository.User; using Edu.Repository.User;
using System; using System;
...@@ -157,7 +159,10 @@ namespace Edu.Module.Course ...@@ -157,7 +159,10 @@ namespace Edu.Module.Course
/// </summary> /// </summary>
private readonly RB_Class_CourseRepository class_CourseRepository = new RB_Class_CourseRepository(); private readonly RB_Class_CourseRepository class_CourseRepository = new RB_Class_CourseRepository();
/// <summary>
/// 访客预约仓储层对象
/// </summary>
private readonly RB_Visitor_ReserveRepository visitor_ReserveRepository = new RB_Visitor_ReserveRepository();
#region 日语培训 #region 日语培训
...@@ -331,7 +336,7 @@ namespace Edu.Module.Course ...@@ -331,7 +336,7 @@ namespace Edu.Module.Course
}); });
//课程优惠信息 //课程优惠信息
decimal disMoney = 0;//课程最大优惠金额 decimal disMoney = 0;//课程最大优惠金额
decimal coursePrice = courseModel.SellPrice;//课程最低单 decimal coursePrice = courseModel.SellPrice;//课程最低单
var coursePreferentialModel = new RB_Course_Preferential_Extend(); var coursePreferentialModel = new RB_Course_Preferential_Extend();
if (coursePreferentialList != null && coursePreferentialList.Count > 0) if (coursePreferentialList != null && coursePreferentialList.Count > 0)
{ {
...@@ -418,7 +423,6 @@ namespace Edu.Module.Course ...@@ -418,7 +423,6 @@ namespace Edu.Module.Course
{ {
orderModel = orderRepository.GetEntity(demodel.OrderId); orderModel = orderRepository.GetEntity(demodel.OrderId);
} }
if (demodel.OrderId > 0) if (demodel.OrderId > 0)
{ {
int BNum = orderRepository.GetClassOrderPeopleNumRepository(demodel.ClassId.ToString()).FirstOrDefault()?.GuestNum ?? 0; int BNum = orderRepository.GetClassOrderPeopleNumRepository(demodel.ClassId.ToString()).FirstOrDefault()?.GuestNum ?? 0;
...@@ -439,7 +443,6 @@ namespace Edu.Module.Course ...@@ -439,7 +443,6 @@ namespace Edu.Module.Course
return flag; return flag;
} }
} }
//没有总经理修改订单权限 //没有总经理修改订单权限
if (!isEditOrder) if (!isEditOrder)
{ {
...@@ -469,6 +472,10 @@ namespace Edu.Module.Course ...@@ -469,6 +472,10 @@ namespace Edu.Module.Course
} }
} }
} }
//日志信息
string LogContent = "";
//销售备注
string SaleRemark = "";
if (demodel.OrderId > 0) if (demodel.OrderId > 0)
{ {
if (demodel.IsChaBan == 1) if (demodel.IsChaBan == 1)
...@@ -507,6 +514,7 @@ namespace Edu.Module.Course ...@@ -507,6 +514,7 @@ namespace Edu.Module.Course
message = "取消订单无法修改"; message = "取消订单无法修改";
return flag; return flag;
} }
#region 验证学生名单数量 #region 验证学生名单数量
var glist = order_GuestRepository.GetOrderGuestListRepository(new RB_Order_Guest_ViewModel() { Group_Id = demodel.Group_Id, OrderId = demodel.OrderId, GuestState = 1 }); var glist = order_GuestRepository.GetOrderGuestListRepository(new RB_Order_Guest_ViewModel() { Group_Id = demodel.Group_Id, OrderId = demodel.OrderId, GuestState = 1 });
if (glist.Count() > demodel.GuestNum) if (glist.Count() > demodel.GuestNum)
...@@ -516,6 +524,7 @@ namespace Edu.Module.Course ...@@ -516,6 +524,7 @@ namespace Edu.Module.Course
return flag; return flag;
} }
#endregion #endregion
Dictionary<string, object> keyValues = new Dictionary<string, object>() Dictionary<string, object> keyValues = new Dictionary<string, object>()
{ {
{ nameof(RB_Order_ViewModel.GuestNum),demodel.GuestNum}, { nameof(RB_Order_ViewModel.GuestNum),demodel.GuestNum},
...@@ -535,72 +544,51 @@ namespace Edu.Module.Course ...@@ -535,72 +544,51 @@ namespace Edu.Module.Course
{ nameof(RB_Order_ViewModel.UpOrderId),demodel.UpOrderId}, { nameof(RB_Order_ViewModel.UpOrderId),demodel.UpOrderId},
}; };
flag = orderRepository.Update(keyValues, new WhereHelper(nameof(RB_Order_ViewModel.OrderId), demodel.OrderId)); flag = orderRepository.Update(keyValues, new WhereHelper(nameof(RB_Order_ViewModel.OrderId), demodel.OrderId));
if (flag)
//记录日志信息
LogContent = $"修改日语培训订单【{demodel.OrderId}】";
if (orderModel.GuestNum != demodel.GuestNum)
{ {
//记录日志信息 LogContent += $",人数由【{orderModel.GuestNum}】修改为【{demodel.GuestNum}】";
string LogContent = $"修改日语培训订单【{demodel.OrderId}】"; }
if (orderModel.GuestNum != demodel.GuestNum) if (orderModel.Unit_Price != demodel.Unit_Price)
{ {
LogContent += $",人数由【{orderModel.GuestNum}】修改为【{demodel.GuestNum}】"; LogContent += $",成交单价由【{orderModel.Unit_Price}】修改为【{demodel.Unit_Price}】";
} }
if (orderModel.Unit_Price != demodel.Unit_Price) if (orderModel.PreferPrice != demodel.PreferPrice)
{ {
LogContent += $",成交单价由【{orderModel.Unit_Price}】修改为【{demodel.Unit_Price}】"; LogContent += $",应收金额由【{orderModel.PreferPrice}】修改为【{demodel.PreferPrice}】";
} }
if (orderModel.PreferPrice != demodel.PreferPrice) if (orderModel.OrderSource != demodel.OrderSource)
{ {
LogContent += $",应收金额由【{orderModel.PreferPrice}】修改为【{demodel.PreferPrice}】"; LogContent += $",客人来源由【{orderModel.OrderSource.ToName()}】修改为【{demodel.OrderSource.ToName()}】";
} }
if (orderModel.OrderSource != demodel.OrderSource) if (orderModel.HelpEnterId != demodel.HelpEnterId)
{ {
LogContent += $",客人来源由【{orderModel.OrderSource.ToName()}】修改为【{demodel.OrderSource.ToName()}】"; var empList = accountRepository.GetAccountListRepository(new RB_Account_ViewModel() { QIds = orderModel.HelpEnterId + "," + demodel.HelpEnterId });
} LogContent += $",协助人员由【{empList?.Where(qitem => qitem.Id == orderModel.HelpEnterId)?.FirstOrDefault()?.AccountName}】修改为【{empList?.Where(qitem => qitem.Id == demodel.HelpEnterId)?.FirstOrDefault()?.AccountName}】";
if (orderModel.HelpEnterId != demodel.HelpEnterId) }
{ if (orderModel.GeneralOccupation != demodel.GeneralOccupation)
var empList = accountRepository.GetAccountListRepository(new RB_Account_ViewModel() { QIds = orderModel.HelpEnterId + "," + demodel.HelpEnterId }); {
LogContent += $",协助人员由【{empList?.Where(qitem => qitem.Id == orderModel.HelpEnterId)?.FirstOrDefault()?.AccountName}】修改为【{empList?.Where(qitem => qitem.Id == demodel.HelpEnterId)?.FirstOrDefault()?.AccountName}】"; LogContent += $",一般同行由【{orderModel.GeneralOccupation}】修改为【{demodel.GeneralOccupation}】";
} }
if (orderModel.GeneralOccupation != demodel.GeneralOccupation) if (orderModel.EduOccupation != demodel.EduOccupation)
{ {
LogContent += $",一般同行由【{orderModel.GeneralOccupation}】修改为【{demodel.GeneralOccupation}】"; LogContent += $",教育同行由【{orderModel.EduOccupation}】修改为【{demodel.EduOccupation}】";
} }
if (orderModel.EduOccupation != demodel.EduOccupation) if (orderModel.IsLessPrice != demodel.IsLessPrice)
{ {
LogContent += $",教育同行由【{orderModel.EduOccupation}】修改为【{demodel.EduOccupation}】"; LogContent += $",少价由【{(orderModel.IsLessPrice > 0 ? "少价" : "不少价")}】修改为【{(demodel.IsLessPrice > 0 ? "少价" : "不少价")}】";
} }
if (orderModel.IsLessPrice != demodel.IsLessPrice) if (orderModel.LessPrice != demodel.LessPrice)
{ {
LogContent += $",少价由【{(orderModel.IsLessPrice > 0 ? "少价" : "不少价")}】修改为【{(demodel.IsLessPrice > 0 ? "少价" : "不少价")}】"; LogContent += $",少价金额由【{(orderModel.LessPrice)}】修改为【{(demodel.LessPrice)}】";
} }
if (orderModel.LessPrice != demodel.LessPrice) //记录订单备注
{ if (orderModel.SaleRemark != demodel.SaleRemark)
LogContent += $",少价金额由【{(orderModel.LessPrice)}】修改为【{(demodel.LessPrice)}】"; {
} LogContent += $",销售备注由【{orderModel.SaleRemark}】修改为【{demodel.SaleRemark}】";
//记录订单备注 SaleRemark = demodel.SaleRemark;
if (orderModel.SaleRemark != demodel.SaleRemark)
{
LogContent += $",销售备注由【{orderModel.SaleRemark}】修改为【{demodel.SaleRemark}】";
order_RemarkRepository.Insert(new Model.Entity.Course.RB_Order_Remark()
{
Id = 0,
Content = demodel.SaleRemark,
CreateBy = demodel.CreateBy,
CreateTime = DateTime.Now,
OrderId = demodel.OrderId,
Type = 1
});
}
changeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
{
Id = 0,
Type = 2,
CreateBy = userInfo.Id,
CreateTime = DateTime.Now,
Group_Id = userInfo.Group_Id,
LogContent = LogContent,
School_Id = userInfo.School_Id,
SourceId = demodel.OrderId
});
} }
} }
else else
...@@ -629,23 +617,92 @@ namespace Edu.Module.Course ...@@ -629,23 +617,92 @@ namespace Edu.Module.Course
} }
demodel.Class_Price = courseModel.SellPrice; demodel.Class_Price = courseModel.SellPrice;
int OrderId = orderRepository.Insert(demodel); int OrderId = orderRepository.Insert(demodel);
demodel.OrderId = OrderId;
flag = OrderId > 0; flag = OrderId > 0;
if (flag) LogContent = "新增日语培训订单";
//记录订单备注
if (!string.IsNullOrEmpty(demodel.SaleRemark))
{ {
//记录订单备注 SaleRemark = demodel.SaleRemark;
if (!string.IsNullOrEmpty(demodel.SaleRemark)) }
#region 预约单转订单
//预约单转订单
if (flag && demodel.VisitorReserveId > 0)
{
string remark = userInfo.AccountName + "转订单";
Dictionary<string, object> visitorFileds = new Dictionary<string, object>()
{ {
order_RemarkRepository.Insert(new Model.Entity.Course.RB_Order_Remark() {nameof(RB_Visitor_Reserve_Extend.ReserveStatus),1 },
{ {nameof(RB_Visitor_Reserve_Extend.Remark),remark },
Id = 0, {nameof(RB_Visitor_Reserve_Extend.OrderId),demodel.OrderId },
Content = demodel.SaleRemark, };
CreateBy = demodel.CreateBy, flag = visitor_ReserveRepository.Update(visitorFileds, new WhereHelper(nameof(RB_Visitor_Reserve_Extend.Id), demodel.VisitorReserveId));
CreateTime = DateTime.Now, var visitorModel = visitor_ReserveRepository.GetVisitorRepository(new RB_Visitor_Reserve_Extend() { Id = demodel.VisitorReserveId })?.FirstOrDefault();
OrderId = OrderId, var guestModel = new RB_Order_Guest_ViewModel()
Type = 1 {
}); Id = 0,
} OrderId = demodel.OrderId,
//记录日志信息 ClassId = demodel.ClassId,
GuestName = visitorModel?.Name ?? "",
GuestState = 1,
Profession = "",
Sex = 1,
Age = 18,
Mobile = visitorModel?.Tel ?? "",
Basics = visitorModel?.LevelType,
Education = GuestEducationEnum.N2,
GuestSource = demodel.OrderSource,
LearningGoals = GuestLearningGoalsEnum.Love,
Contact = "",
ContactMobile = "",
Status = 0,
Group_Id = demodel.Group_Id,
School_Id = demodel.School_Id,
CreateBy = demodel.CreateBy,
CreateTime = demodel.CreateTime,
UpdateBy = demodel.UpdateBy,
UpdateTime = demodel.UpdateTime,
DropOutRemark = "",
IDCard = "",
Domicile = "",
ContactAddress = "",
SourceId = 0,
GraduatedSchool = "",
GraduatedMajor = "",
VolunteerMajor = "",
Price = 0,
StudyRemark = "",
TotalHours = Convert.ToInt32(courseModel.ClassHours),
CompleteHours = 0,
MakeUpHours = 0,
StuIcon = "",
};
SetOrderGuestInfo(guestModel, out string Nmessage);
}
#endregion
}
#region 写日志
if (flag)
{
//销售备注
if (!string.IsNullOrEmpty(SaleRemark))
{
order_RemarkRepository.Insert(new Model.Entity.Course.RB_Order_Remark()
{
Id = 0,
Content = SaleRemark,
CreateBy = demodel.CreateBy,
CreateTime = DateTime.Now,
OrderId = demodel.OrderId,
Type = 1
});
}
//订单日志
if (!string.IsNullOrEmpty(LogContent))
{
changeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog() changeLogRepository.Insert(new Model.Entity.Log.RB_User_ChangeLog()
{ {
Id = 0, Id = 0,
...@@ -653,12 +710,14 @@ namespace Edu.Module.Course ...@@ -653,12 +710,14 @@ namespace Edu.Module.Course
CreateBy = userInfo.Id, CreateBy = userInfo.Id,
CreateTime = DateTime.Now, CreateTime = DateTime.Now,
Group_Id = userInfo.Group_Id, Group_Id = userInfo.Group_Id,
LogContent = "新增日语培训订单", LogContent = LogContent,
School_Id = userInfo.School_Id, School_Id = userInfo.School_Id,
SourceId = OrderId SourceId = demodel.OrderId
}); });
} }
} }
#endregion
return flag; return flag;
} }
......
...@@ -7,6 +7,7 @@ using System.Text; ...@@ -7,6 +7,7 @@ using System.Text;
using VT.FW.AOP.CustomerAttribute; using VT.FW.AOP.CustomerAttribute;
using VT.FW.DB; using VT.FW.DB;
using System.Linq; using System.Linq;
using Edu.Repository.Course;
namespace Edu.Module.Duty namespace Edu.Module.Duty
{ {
...@@ -25,6 +26,13 @@ namespace Edu.Module.Duty ...@@ -25,6 +26,13 @@ namespace Edu.Module.Duty
/// </summary> /// </summary>
private readonly RB_Reserve_ClassRepository reserve_ClassRepository = new RB_Reserve_ClassRepository(); private readonly RB_Reserve_ClassRepository reserve_ClassRepository = new RB_Reserve_ClassRepository();
/// <summary>
/// 上课计划仓储层对象
/// </summary>
private readonly RB_Class_PlanRepository class_PlanRepository = new RB_Class_PlanRepository();
/// <summary> /// <summary>
/// 获取访客约课分页列表 /// 获取访客约课分页列表
/// </summary> /// </summary>
...@@ -54,8 +62,9 @@ namespace Edu.Module.Duty ...@@ -54,8 +62,9 @@ namespace Edu.Module.Duty
/// <param name="model"></param> /// <param name="model"></param>
/// <returns></returns> /// <returns></returns>
[TransactionCallHandler] [TransactionCallHandler]
public virtual bool SetVisitorReserveModule(RB_Visitor_Reserve_Extend model) public virtual bool SetVisitorReserveModule(RB_Visitor_Reserve_Extend model,out string message)
{ {
message = "";
bool flag; bool flag;
var reserveClass = new RB_Reserve_Class_Extend() var reserveClass = new RB_Reserve_Class_Extend()
{ {
...@@ -71,11 +80,17 @@ namespace Edu.Module.Duty ...@@ -71,11 +80,17 @@ namespace Edu.Module.Duty
Status = DateStateEnum.Normal, Status = DateStateEnum.Normal,
TeacherId = model.TeacherId, TeacherId = model.TeacherId,
UpdateBy = model.UpdateBy, UpdateBy = model.UpdateBy,
UpdateTime = model.UpdateTime UpdateTime = model.UpdateTime,
EndTime=model.EndTime,
}; };
if (model.ReserveClassId <= 0) if (model.ReserveClassId <= 0)
{ {
SetReserveClassModule(reserveClass); var newFlag = SetReserveClassModule(reserveClass, out string newMsg);
if (!newFlag)
{
message = newMsg;
return false;
}
model.ReserveClassId = reserveClass.ReserveClassId; model.ReserveClassId = reserveClass.ReserveClassId;
} }
if (model.Id > 0) if (model.Id > 0)
...@@ -189,9 +204,23 @@ namespace Edu.Module.Duty ...@@ -189,9 +204,23 @@ namespace Edu.Module.Duty
/// </summary> /// </summary>
/// <param name="model"></param> /// <param name="model"></param>
/// <returns></returns> /// <returns></returns>
public bool SetReserveClassModule(RB_Reserve_Class_Extend model) public bool SetReserveClassModule(RB_Reserve_Class_Extend model,out string message)
{ {
bool flag; bool flag;
message = "";
var chooseDateTime = Convert.ToDateTime(Common.ConvertHelper.FormatDate(model.ClassDate) + " " + model.ClassTime);
var chooseEndTime = Convert.ToDateTime(Common.ConvertHelper.FormatDate(model.ClassDate) + " " + model.EndTime);
var isExists = CheckClassModule(model.TeacherId, model.Group_Id, model.ClassDate, chooseDateTime, chooseEndTime, out string newMsg);
if (!isExists)
{
message = newMsg;
return false;
}
if (CheckReserveClassExistsModule(model))
{
message = string.Format("此教师已有{0}的试听课计划!请重新选择时间", Common.ConvertHelper.FormatDate(chooseDateTime));
return false;
}
if (model.ReserveClassId > 0) if (model.ReserveClassId > 0)
{ {
Dictionary<string, object> fileds = new Dictionary<string, object>() Dictionary<string, object> fileds = new Dictionary<string, object>()
...@@ -199,6 +228,7 @@ namespace Edu.Module.Duty ...@@ -199,6 +228,7 @@ namespace Edu.Module.Duty
{nameof(RB_Reserve_Class_Extend.TeacherId),model.TeacherId }, {nameof(RB_Reserve_Class_Extend.TeacherId),model.TeacherId },
{nameof(RB_Reserve_Class_Extend.ClassDate),model.ClassDate }, {nameof(RB_Reserve_Class_Extend.ClassDate),model.ClassDate },
{nameof(RB_Reserve_Class_Extend.ClassTime),model.ClassTime }, {nameof(RB_Reserve_Class_Extend.ClassTime),model.ClassTime },
{nameof(RB_Reserve_Class_Extend.EndTime),model.EndTime },
{nameof(RB_Reserve_Class_Extend.ClassRoomId),model.ClassRoomId }, {nameof(RB_Reserve_Class_Extend.ClassRoomId),model.ClassRoomId },
{nameof(RB_Reserve_Class_Extend.ClassContent),model.ClassContent }, {nameof(RB_Reserve_Class_Extend.ClassContent),model.ClassContent },
{nameof(RB_Reserve_Class_Extend.UpdateBy),model.UpdateBy }, {nameof(RB_Reserve_Class_Extend.UpdateBy),model.UpdateBy },
...@@ -215,6 +245,62 @@ namespace Edu.Module.Duty ...@@ -215,6 +245,62 @@ namespace Edu.Module.Duty
return flag; return flag;
} }
/// <summary>
/// 检查预约课程是否存在
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public bool CheckReserveClassExistsModule(RB_Reserve_Class_Extend model)
{
List<WhereHelper> whereHelpers = new List<WhereHelper>();
whereHelpers.Add(new WhereHelper(nameof(RB_Reserve_Class_Extend.ClassDate), model.ClassDate));
whereHelpers.Add(new WhereHelper(nameof(RB_Reserve_Class_Extend.TeacherId), model.TeacherId));
if (model.ReserveClassId > 0)
{
whereHelpers.Add(new WhereHelper()
{
FiledName = nameof(RB_Reserve_Class_Extend.TeacherId),
FiledValue = model.TeacherId,
OperatorEnum = OperatorEnum.NotEqual
});
}
return reserve_ClassRepository.Exists(whereHelpers);
}
/// <summary>
/// 检查老师是否有上课安排
/// </summary>
/// <param name="TeacherId"></param>
/// <param name="Group_Id"></param>
/// <param name="ClassDate"></param>
/// <param name="chooseDateTime"></param>
/// <param name="message"></param>
/// <returns></returns>
public bool CheckClassModule(int TeacherId,int Group_Id,DateTime ClassDate,DateTime chooseDateTime,DateTime chooseEndTime, out string message)
{
message = "";
var planList = class_PlanRepository.GetClassPlanListExtRepository(new Model.ViewModel.Course.RB_Class_Plan_ViewModel()
{
TeacherId = TeacherId,
QClassDateStr = Common.ConvertHelper.FormatDate(ClassDate),
Group_Id = Group_Id
});
if (planList != null && planList.Count > 0)
{
foreach (var item in planList)
{
var startTime = Convert.ToDateTime(Common.ConvertHelper.FormatDate(item.ClassDate) + " " + item.StartTime);
var endTime = Convert.ToDateTime(Common.ConvertHelper.FormatDate(item.ClassDate) + " " + item.EndTime);
if (chooseDateTime<endTime&& chooseEndTime>startTime)
{
message =string.Format( "此教师已有{0}的上课计划!请重新选择时间",Common.ConvertHelper.FormatDate(chooseDateTime));
return false;
}
}
}
return true;
}
/// <summary> /// <summary>
/// 根据编号获取约课班级 /// 根据编号获取约课班级
/// </summary> /// </summary>
...@@ -230,9 +316,20 @@ namespace Edu.Module.Duty ...@@ -230,9 +316,20 @@ namespace Edu.Module.Duty
/// 根据编号删除约课班级 /// 根据编号删除约课班级
/// </summary> /// </summary>
/// <param name="ReserveClassId"></param> /// <param name="ReserveClassId"></param>
/// <param name="message"></param>
/// <returns></returns> /// <returns></returns>
public bool RemoveReserveClassModule(int ReserveClassId) public bool RemoveReserveClassModule(int ReserveClassId, out string message)
{ {
message = "";
var visitorReserve = visitor_ReserveRepository.GetVisitorReserveStaticsListRepository(new RB_Visitor_Reserve_Extend()
{
Q_ReserveClassIds = ReserveClassId.ToString()
})?.FirstOrDefault();
if ((visitorReserve?.JoinNum ?? 0) > 0)
{
message = "此试听课存在客户报名信息,不能删除!";
return false;
}
Dictionary<string, object> fileds = new Dictionary<string, object>() Dictionary<string, object> fileds = new Dictionary<string, object>()
{ {
{nameof(RB_Visitor_Reserve_Extend.Status),(int)DateStateEnum.Delete }, {nameof(RB_Visitor_Reserve_Extend.Status),(int)DateStateEnum.Delete },
......
...@@ -100,6 +100,10 @@ WHERE 1=1 ...@@ -100,6 +100,10 @@ WHERE 1=1
{ {
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Group_Id), query.Group_Id); builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Group_Id), query.Group_Id);
} }
if (query.TeacherId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.TeacherId), query.TeacherId);
}
if (query.School_Id > 0) if (query.School_Id > 0)
{ {
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.School_Id), query.School_Id); builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.School_Id), query.School_Id);
...@@ -124,6 +128,10 @@ WHERE 1=1 ...@@ -124,6 +128,10 @@ WHERE 1=1
{ {
builder.AppendFormat(" AND A.{0}<='{1} 23:59:59' ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.EndTime); builder.AppendFormat(" AND A.{0}<='{1} 23:59:59' ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.EndTime);
} }
if (!string.IsNullOrEmpty(query.QClassDateStr))
{
builder.AppendFormat(" AND DATE_FORMAT(A.{0},'%y/%m/%d')= DATE_FORMAT('{1}','%y/%m/%d') ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.QClassDateStr);
}
} }
return Get<RB_Class_Plan_ViewModel>(builder.ToString()).ToList(); return Get<RB_Class_Plan_ViewModel>(builder.ToString()).ToList();
} }
...@@ -228,10 +236,11 @@ WHERE ClassId={1} AND ClassDate>'{2}' ...@@ -228,10 +236,11 @@ WHERE ClassId={1} AND ClassDate>'{2}'
{ {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
builder.AppendFormat(@" builder.AppendFormat(@"
SELECT a.*,c.Teacher_Id,c.ClassName,c.ClassType,T.TeacherName SELECT a.*,c.Teacher_Id,c.ClassName,c.ClassType,T.TeacherName ,cou.CourseName
FROM rb_class_plan as a FROM rb_class_plan as a
LEFT JOIN rb_class c on a.ClassId = c.ClassId LEFT JOIN rb_class c on a.ClassId = c.ClassId
LEFT JOIN rb_teacher AS T ON a.TeacherId=T.TId LEFT JOIN rb_teacher AS T ON a.TeacherId=T.TId
LEFT JOIN rb_course as cou on cou.CourseId=c.CouseId
where a.`Status`=0 and c.ClassStatus=2 and c.`Status`=0"); where a.`Status`=0 and c.ClassStatus=2 and c.`Status`=0");
if (query != null) if (query != null)
{ {
......
...@@ -60,7 +60,7 @@ namespace Edu.Repository.Course ...@@ -60,7 +60,7 @@ namespace Edu.Repository.Course
} }
if (demodel.QEffectStatus == 1) if (demodel.QEffectStatus == 1)
{ {
where += $@" AND (B.IsChaBan=0 OR (B.IsChaBan=1 AND B.EffectStatus IN(1,2))) "; where += $@" AND (B.IsChaBan=0 OR (B.IsChaBan=1 AND B.EffectStatus IN(1) )) ";
} }
string sql = $@" string sql = $@"
......
using Edu.Model.Entity.Reserve; using Edu.Common.Enum;
using Edu.Model.Entity.Reserve;
using Edu.Model.ViewModel.Reserve; using Edu.Model.ViewModel.Reserve;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
...@@ -31,6 +32,7 @@ FROM RB_Reserve_Class AS A LEFT JOIN rb_teacher AS D ON A.TeacherId=D.TId ...@@ -31,6 +32,7 @@ FROM RB_Reserve_Class AS A LEFT JOIN rb_teacher AS D ON A.TeacherId=D.TId
LEFT JOIN rb_class_room AS E ON A.ClassRoomId=E.RoomId LEFT JOIN rb_class_room AS E ON A.ClassRoomId=E.RoomId
WHERE 1=1 WHERE 1=1
"); ");
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Reserve_Class_Extend.Status), (int)DateStateEnum.Normal);
if (query != null) if (query != null)
{ {
if (query.Group_Id > 0) if (query.Group_Id > 0)
...@@ -54,6 +56,7 @@ WHERE 1=1 ...@@ -54,6 +56,7 @@ WHERE 1=1
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Reserve_Class_Extend.ClassRoomId), query.ClassRoomId); builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Reserve_Class_Extend.ClassRoomId), query.ClassRoomId);
} }
} }
builder.AppendFormat(" ORDER BY A.{0} ASC ", nameof(RB_Reserve_Class_Extend.ClassDate));
return GetPage<RB_Reserve_Class_Extend>(pageIndex,pageSize,out rowsCount, builder.ToString(),parameters).ToList(); return GetPage<RB_Reserve_Class_Extend>(pageIndex,pageSize,out rowsCount, builder.ToString(),parameters).ToList();
} }
...@@ -72,6 +75,7 @@ FROM RB_Reserve_Class AS A LEFT JOIN rb_teacher AS D ON A.TeacherId=D.TId ...@@ -72,6 +75,7 @@ FROM RB_Reserve_Class AS A LEFT JOIN rb_teacher AS D ON A.TeacherId=D.TId
LEFT JOIN rb_class_room AS E ON A.ClassRoomId=E.RoomId LEFT JOIN rb_class_room AS E ON A.ClassRoomId=E.RoomId
WHERE 1=1 WHERE 1=1
"); ");
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Reserve_Class_Extend.Status), (int)DateStateEnum.Normal);
if (query != null) if (query != null)
{ {
if (query.Group_Id > 0) if (query.Group_Id > 0)
......
using Edu.Model.Entity.Reserve; using Edu.Common.Enum;
using Edu.Model.Entity.Duty;
using Edu.Model.Entity.Reserve;
using Edu.Model.ViewModel.Duty;
using Edu.Model.ViewModel.Reserve; using Edu.Model.ViewModel.Reserve;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
...@@ -11,7 +14,7 @@ namespace Edu.Repository.Reserve ...@@ -11,7 +14,7 @@ namespace Edu.Repository.Reserve
/// <summary> /// <summary>
/// 访客约课仓储层 /// 访客约课仓储层
/// </summary> /// </summary>
public class RB_Visitor_ReserveRepository:BaseRepository<RB_Visitor_Reserve> public class RB_Visitor_ReserveRepository : BaseRepository<RB_Visitor_Reserve>
{ {
/// <summary> /// <summary>
/// 获取访客约课分页列表 /// 获取访客约课分页列表
...@@ -26,13 +29,47 @@ namespace Edu.Repository.Reserve ...@@ -26,13 +29,47 @@ namespace Edu.Repository.Reserve
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
var parameters = new DynamicParameters(); var parameters = new DynamicParameters();
builder.Append(@" builder.Append(@"
SELECT A.*,IFNULL(B.`Name`,'') AS VisitorName,C.ClassDate,C.ClassTime,C.ClassContent,IFNULL(D.TeacherName,'') AS TeacherName,IFNULL(E.RoomName,'') AS RoomName SELECT A.*,IFNULL(B.`Name`,'') AS VisitorName,C.ClassDate,C.ClassTime,C.EndTime,C.ClassContent,IFNULL(D.TeacherName,'') AS TeacherName,IFNULL(E.RoomName,'') AS RoomName
FROM RB_Visitor_Reserve AS A LEFT JOIN rb_visitor AS B ON A.Visitor_Id=B.Id FROM RB_Visitor_Reserve AS A LEFT JOIN rb_visitor AS B ON A.Visitor_Id=B.Id
LEFT JOIN rb_reserve_class AS C ON A.ReserveClassId=C.ReserveClassId LEFT JOIN rb_reserve_class AS C ON A.ReserveClassId=C.ReserveClassId
LEFT JOIN rb_teacher AS D ON C.TeacherId=D.TId LEFT JOIN rb_teacher AS D ON C.TeacherId=D.TId
LEFT JOIN rb_class_room AS E ON C.ClassRoomId=E.RoomId LEFT JOIN rb_class_room AS E ON C.ClassRoomId=E.RoomId
WHERE 1=1 WHERE 1=1
"); ");
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Visitor_Reserve_Extend.Status), (int)DateStateEnum.Normal);
if (query != null)
{
if (query.Group_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Visitor_Reserve_Extend.Group_Id), query.Group_Id);
}
if (!string.IsNullOrEmpty(query.StartClassDate))
{
builder.AppendFormat(" AND C.{0}>='{1}' ", nameof(RB_Visitor_Reserve_Extend.ClassDate), query.StartClassDate);
}
if (!string.IsNullOrEmpty(query.EndClassDate))
{
builder.AppendFormat(" AND C.{0}<='{1} 23:59:59' ", nameof(RB_Visitor_Reserve_Extend.ClassDate), query.EndClassDate);
}
if (query.TeacherId > 0)
{
builder.AppendFormat(" AND C.{0}={1} ", nameof(RB_Visitor_Reserve_Extend.TeacherId), query.TeacherId);
}
if (query.ClassRoomId > 0)
{
builder.AppendFormat(" AND C.{0}={1} ", nameof(RB_Visitor_Reserve_Extend.ClassRoomId), query.ClassRoomId);
}
if (!string.IsNullOrEmpty(query.Q_ReserveStatus))
{
Int32.TryParse(query.Q_ReserveStatus, out int result);
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Visitor_Reserve_Extend.ReserveStatus), result);
}
if (!string.IsNullOrEmpty(query.VisitorName))
{
builder.AppendFormat(" AND B.{0} LIKE @VisitorName ", nameof(RB_Visitor.Name));
parameters.Add("VisitorName", "%" + query.VisitorName.Trim() + "%");
}
}
return GetPage<RB_Visitor_Reserve_Extend>(pageIndex, pageSize, out rowsCount, builder.ToString(), parameters).ToList(); return GetPage<RB_Visitor_Reserve_Extend>(pageIndex, pageSize, out rowsCount, builder.ToString(), parameters).ToList();
} }
...@@ -46,10 +83,47 @@ WHERE 1=1 ...@@ -46,10 +83,47 @@ WHERE 1=1
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
var parameters = new DynamicParameters(); var parameters = new DynamicParameters();
builder.Append(@" builder.Append(@"
SELECT A.* SELECT A.*,IFNULL(B.`Name`,'') AS VisitorName,C.ClassDate,C.ClassTime,C.EndTime,C.ClassContent,IFNULL(D.TeacherName,'') AS TeacherName,IFNULL(E.RoomName,'') AS RoomName
FROM RB_Visitor_Reserve AS A FROM RB_Visitor_Reserve AS A LEFT JOIN rb_visitor AS B ON A.Visitor_Id=B.Id
LEFT JOIN rb_reserve_class AS C ON A.ReserveClassId=C.ReserveClassId
LEFT JOIN rb_teacher AS D ON C.TeacherId=D.TId
LEFT JOIN rb_class_room AS E ON C.ClassRoomId=E.RoomId
WHERE 1=1 WHERE 1=1
"); ");
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Visitor_Reserve_Extend.Status), (int)DateStateEnum.Normal);
if (query != null)
{
if (query.Group_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Visitor_Reserve_Extend.Group_Id), query.Group_Id);
}
if (!string.IsNullOrEmpty(query.StartClassDate))
{
builder.AppendFormat(" AND C.{0}>='{1}' ", nameof(RB_Visitor_Reserve_Extend.ClassDate), query.StartClassDate);
}
if (!string.IsNullOrEmpty(query.EndClassDate))
{
builder.AppendFormat(" AND C.{0}<='{1} 23:59:59' ", nameof(RB_Visitor_Reserve_Extend.ClassDate), query.EndClassDate);
}
if (query.TeacherId > 0)
{
builder.AppendFormat(" AND C.{0}={1} ", nameof(RB_Visitor_Reserve_Extend.TeacherId), query.TeacherId);
}
if (query.ClassRoomId > 0)
{
builder.AppendFormat(" AND C.{0}={1} ", nameof(RB_Visitor_Reserve_Extend.ClassRoomId), query.ClassRoomId);
}
if (!string.IsNullOrEmpty(query.Q_ReserveStatus))
{
Int32.TryParse(query.Q_ReserveStatus, out int result);
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Visitor_Reserve_Extend.ReserveStatus), result);
}
if (!string.IsNullOrEmpty(query.VisitorName))
{
builder.AppendFormat(" AND B.{0} LIKE @VisitorName ", nameof(RB_Visitor.Name));
parameters.Add("VisitorName", "%" + query.VisitorName.Trim() + "%");
}
}
return Get<RB_Visitor_Reserve_Extend>(builder.ToString(), parameters).ToList(); return Get<RB_Visitor_Reserve_Extend>(builder.ToString(), parameters).ToList();
} }
...@@ -74,5 +148,35 @@ WHERE 1=1 {0} ...@@ -74,5 +148,35 @@ WHERE 1=1 {0}
GROUP BY A.ReserveClassId ", builder.ToString()); GROUP BY A.ReserveClassId ", builder.ToString());
return Get<RB_Visitor_Reserve_Extend>(sql, parameters).ToList(); return Get<RB_Visitor_Reserve_Extend>(sql, parameters).ToList();
} }
/// <summary>
/// 根据约课信息获取访客列表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Visitor_ViewModel> GetVisitorRepository(RB_Visitor_Reserve_Extend query)
{
StringBuilder builder = new StringBuilder();
var parameters = new DynamicParameters();
builder.Append(@"
SELECT B.*
FROM RB_Visitor_Reserve AS A INNER JOIN rb_visitor AS B ON A.Visitor_Id=B.Id
WHERE 1=1
");
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Visitor_Reserve_Extend.Status), (int)DateStateEnum.Normal);
if (query != null)
{
if (query.Group_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Visitor_Reserve_Extend.Group_Id), query.Group_Id);
}
if (query.Id > 0)
{
builder.AppendFormat(" AND A.{0}>='{1}' ", nameof(RB_Visitor_Reserve_Extend.Id), query.Id);
}
}
return Get<RB_Visitor_ViewModel>(builder.ToString(), parameters).ToList();
}
} }
} }
...@@ -72,7 +72,7 @@ namespace Edu.WebApi.Controllers.Course ...@@ -72,7 +72,7 @@ namespace Edu.WebApi.Controllers.Course
item.OrderStudentCount, item.OrderStudentCount,
OpenTime = Common.ConvertHelper.FormatDate(item.OpenTime), OpenTime = Common.ConvertHelper.FormatDate(item.OpenTime),
item.CompleteProgress, item.CompleteProgress,
ClassStatusStr = item.ClassStatus.ToName(), item.ClassStatusStr,
item.NewPlanDateTime, item.NewPlanDateTime,
item.ClassStatus, item.ClassStatus,
item.Status, item.Status,
...@@ -423,6 +423,7 @@ namespace Edu.WebApi.Controllers.Course ...@@ -423,6 +423,7 @@ namespace Edu.WebApi.Controllers.Course
CommissionType = extModel?.CommissionType ?? 1, CommissionType = extModel?.CommissionType ?? 1,
CommissionValue = extModel?.CommissionValue ?? 0, CommissionValue = extModel?.CommissionValue ?? 0,
CouseId = extModel?.CouseId ?? 0, CouseId = extModel?.CouseId ?? 0,
CourseName = extModel?.CourseName??"",
DateJson = extModel?.DateJson ?? "", DateJson = extModel?.DateJson ?? "",
DefaultTimeJson = extModel?.DefaultTimeJson ?? "", DefaultTimeJson = extModel?.DefaultTimeJson ?? "",
DefaultPlanTimeList = extModel?.DefaultTimeList ?? new List<ClassTimeItem>(), DefaultPlanTimeList = extModel?.DefaultTimeList ?? new List<ClassTimeItem>(),
...@@ -440,9 +441,12 @@ namespace Edu.WebApi.Controllers.Course ...@@ -440,9 +441,12 @@ namespace Edu.WebApi.Controllers.Course
OutRemark = extModel?.OutRemark ?? "", OutRemark = extModel?.OutRemark ?? "",
SellPrice = extModel?.SellPrice ?? 0, SellPrice = extModel?.SellPrice ?? 0,
Teacher_Id = extModel?.Teacher_Id ?? 0, Teacher_Id = extModel?.Teacher_Id ?? 0,
TeacherName= extModel?.TeacherName??"",
School_Id = extModel?.School_Id ?? 0, School_Id = extModel?.School_Id ?? 0,
ClassStepPriceList = extModel?.ClassStepPriceList ?? new List<RB_Class_StepPrice_ViewModel>(), ClassStepPriceList = extModel?.ClassStepPriceList ?? new List<RB_Class_StepPrice_ViewModel>(),
WeekDayList = extModel?.WeekDayList ?? new List<string>(), WeekDayList = extModel?.WeekDayList ?? new List<string>(),
CompleteProgress = extModel?.CompleteProgress ?? 0,
ClassStatusStr = extModel?.ClassStatusStr ?? "",
}; };
return ApiResult.Success(data: obj); return ApiResult.Success(data: obj);
} }
...@@ -741,7 +745,7 @@ namespace Edu.WebApi.Controllers.Course ...@@ -741,7 +745,7 @@ namespace Edu.WebApi.Controllers.Course
return ApiResult.Failed("数据不存在"); return ApiResult.Failed("数据不存在");
} }
double totalMinutes = 0; double totalMinutes = 0;
var planTimeList = classModule.GetClassTimeListRepository(new RB_Class_Time_ViewModel { ClassId = classId, ClassPlanId = classPlanId, Group_Id = base.UserInfo.Group_Id, School_Id = schoolId }); var planTimeList = classModule.GetClassTimeListRepository(new RB_Class_Time_ViewModel { ClassId = classId, ClassPlanId = classPlanId, Group_Id = base.UserInfo.Group_Id, School_Id = schoolId ,ClassTimeId= ClassTimeId });
if (planTimeList != null && planTimeList.Any()) if (planTimeList != null && planTimeList.Any())
{ {
foreach (var item in planTimeList) foreach (var item in planTimeList)
...@@ -754,39 +758,50 @@ namespace Edu.WebApi.Controllers.Course ...@@ -754,39 +758,50 @@ namespace Edu.WebApi.Controllers.Course
} }
} }
var orderGuestList = classModule.GetOrderGuestListModule(new RB_Order_Guest_ViewModel { Group_Id = base.UserInfo.Group_Id, School_Id = 0, ClassId = data.ClassId,QEffectStatus=1 }); var orderGuestList = classModule.GetOrderGuestListModule(new RB_Order_Guest_ViewModel { Group_Id = base.UserInfo.Group_Id, School_Id = 0, ClassId = data.ClassId,QEffectStatus=1 });
var checkLogList = classModule.GetClassCheckList(new RB_Class_Check_ViewModel { Group_Id = data.Group_Id, School_Id = data.School_Id, ClassId = data.ClassId, StartDate = data.ClassDate.ToString("yyyy-MM-dd HH:mm:ss"), EndDate = data.ClassDate.ToString("yyyy-MM-dd HH:mm:ss") }); var checkLogList = classModule.GetClassCheckList(new RB_Class_Check_ViewModel
{
Group_Id = data.Group_Id,
School_Id = data.School_Id,
ClassId = data.ClassId,
StartDate = data.ClassDate.ToString("yyyy-MM-dd HH:mm:ss"),
EndDate = data.ClassDate.ToString("yyyy-MM-dd HH:mm:ss"),
ClassTimeId= ClassTimeId,
});
List<object> guestList = new List<object>(); List<object> guestList = new List<object>();
foreach (var item in orderGuestList.Where(x => x.GuestState == 1)) foreach (var item in orderGuestList.Where(x => x.GuestState == 1))
{ {
guestList.Add(new if (item.IsChaBan == 0 || (item.IsChaBan == 1 && data.ClassDate >= Convert.ToDateTime(Common.ConvertHelper.FormatDate(item.EffectTime))))
{ {
UserIcon = "", guestList.Add(new
item.Id, {
SexStr = item.Sex == 1 ? "男" : "女", UserIcon = "",
item.GuestName, item.Id,
item.Age, SexStr = item.Sex == 1 ? "男" : "女",
CreateTimeStr = Common.ConvertHelper.FormatTime(item.CreateTime), item.GuestName,
item.Mobile, item.Age,
item.OrderId, CreateTimeStr = Common.ConvertHelper.FormatTime(item.CreateTime),
item.CourseName, item.Mobile,
item.CourseId, item.OrderId,
item.TotalHours, item.CourseName,
item.CompleteHours, item.CourseId,
item.StartClassHours, item.TotalHours,
item.IsChaBan, item.CompleteHours,
item.EffectStatus, item.StartClassHours,
item.EffectStatusStr, item.IsChaBan,
EffectTime=Common.ConvertHelper.FormatDate(item.EffectTime), item.EffectStatus,
item.UpOrderId, item.EffectStatusStr,
IsCheck = (checkLogList != null && checkLogList.Any()) ? checkLogList.Where(x => x.OrderGuestId == item.Id).FirstOrDefault()?.CheckStatus ?? -1 : -1, EffectTime = Common.ConvertHelper.FormatDate(item.EffectTime),
StudyNum = (checkLogList != null && checkLogList.Any()) ? checkLogList.Where(x => x.OrderGuestId == item.Id).FirstOrDefault()?.StudyNum ?? 0 : 0 item.UpOrderId,
}); IsCheck = (checkLogList != null && checkLogList.Any()) ? checkLogList.Where(x => x.OrderGuestId == item.Id).FirstOrDefault()?.CheckStatus ?? -1 : -1,
StudyNum = (checkLogList != null && checkLogList.Any()) ? checkLogList.Where(x => x.OrderGuestId == item.Id).FirstOrDefault()?.StudyNum ?? 0 : 0
});
}
} }
return ApiResult.Success(data: new return ApiResult.Success(data: new
{ {
data.TeacherName, data.TeacherName,
data.RoomName, data.RoomName,
TotalHour = Convert.ToInt32(totalMinutes / 60), TotalHour = Convert.ToDecimal(totalMinutes / 60.0),
ClassNum = Convert.ToInt32(totalMinutes / 45), ClassNum = Convert.ToInt32(totalMinutes / 45),
DefaultMinutes = totalMinutes, DefaultMinutes = totalMinutes,
ClassDate = data.ClassDate.ToString("yyyy-MM-dd"), ClassDate = data.ClassDate.ToString("yyyy-MM-dd"),
...@@ -898,7 +913,7 @@ namespace Edu.WebApi.Controllers.Course ...@@ -898,7 +913,7 @@ namespace Edu.WebApi.Controllers.Course
var orderGuestList = classModule.GetOrderGuestListModule(new RB_Order_Guest_ViewModel { Group_Id = base.UserInfo.Group_Id, ClassId = list.FirstOrDefault().ClassId ,QEffectStatus=1}); var orderGuestList = classModule.GetOrderGuestListModule(new RB_Order_Guest_ViewModel { Group_Id = base.UserInfo.Group_Id, ClassId = list.FirstOrDefault().ClassId ,QEffectStatus=1});
if (list.Count() != orderGuestList.Where(x => x.GuestState == 1).Count()) if (list.Count() != orderGuestList.Where(x => x.GuestState == 1).Count())
{ {
return ApiResult.Failed("签到总人数错误,请先检查信息"); // return ApiResult.Failed("签到总人数错误,请先检查信息");
} }
//判断今天有课没有 //判断今天有课没有
......
...@@ -273,7 +273,7 @@ namespace Edu.WebApi.Controllers.Course ...@@ -273,7 +273,7 @@ namespace Edu.WebApi.Controllers.Course
InfoTime = item.CreateTime, InfoTime = item.CreateTime,
Type = item.ErrorType == 0 ? 1 : 2, Type = item.ErrorType == 0 ? 1 : 2,
ClassStatus = -1, ClassStatus = -1,
IntervalNum = IntervalNum IntervalNum = IntervalNum,
}); });
} }
foreach (var item in timeList) foreach (var item in timeList)
...@@ -287,17 +287,22 @@ namespace Edu.WebApi.Controllers.Course ...@@ -287,17 +287,22 @@ namespace Edu.WebApi.Controllers.Course
var planModel = roomList.Where(x => x.ClassPlanId == item.ClassPlanId).FirstOrDefault(); var planModel = roomList.Where(x => x.ClassPlanId == item.ClassPlanId).FirstOrDefault();
if (planModel != null && planModel.ClassPlanId > 0) if (planModel != null && planModel.ClassPlanId > 0)
{ {
var roomModel = roomList.Where(x => x.ClassPlanId == item.ClassPlanId).FirstOrDefault();
resultList.Add(new Model.ViewModel.Question.RB_Question_RoomUseLog_ViewModel resultList.Add(new Model.ViewModel.Question.RB_Question_RoomUseLog_ViewModel
{ {
Id = item.ClassTimeId, Id = item.ClassTimeId,
Title = roomList.Where(x => x.ClassPlanId == item.ClassPlanId).FirstOrDefault()?.ClassName, Title = roomModel?.ClassName,
Content = roomList.Where(x => x.ClassPlanId == item.ClassPlanId).FirstOrDefault()?.TeacherName, Content = roomModel?.TeacherName,
StartTime = item.StartTime, StartTime = item.StartTime,
EndTime = item.EndTime, EndTime = item.EndTime,
InfoTime = Convert.ToDateTime(planModel.ClassDate.ToString("yyyy-MM-dd ") + item.StartTime), InfoTime = Convert.ToDateTime(planModel.ClassDate.ToString("yyyy-MM-dd ") + item.StartTime),
Type = 0, Type = 0,
ClassStatus = item.ClassStatus, ClassStatus = item.ClassStatus,
IntervalNum = IntervalNum IntervalNum = IntervalNum,
CourseName = roomModel?.CourseName,
CompleteProgress = roomModel?.CompleteProgress ?? 0,
StudentName = (roomModel != null && roomModel.GuestList != null && roomModel.GuestList.Any()) ? string.Join(",", roomModel.GuestList.Select(x => x.GuestName)) : ""
}); });
} }
} }
......
...@@ -227,6 +227,7 @@ namespace Edu.WebApi.Controllers.Course ...@@ -227,6 +227,7 @@ namespace Edu.WebApi.Controllers.Course
x.EffectStatusStr, x.EffectStatusStr,
EffectTime = Common.ConvertHelper.FormatDate(x.EffectTime), EffectTime = Common.ConvertHelper.FormatDate(x.EffectTime),
x.UpOrderId, x.UpOrderId,
x.VisitorReserveId,
SaleRemarkList = x.SaleRemarkList.Select(z => new SaleRemarkList = x.SaleRemarkList.Select(z => new
{ {
z.Id, z.Id,
...@@ -445,6 +446,7 @@ namespace Edu.WebApi.Controllers.Course ...@@ -445,6 +446,7 @@ namespace Edu.WebApi.Controllers.Course
IsChaBan=base.ParmJObj.GetInt("IsChaBan"), IsChaBan=base.ParmJObj.GetInt("IsChaBan"),
EffectTime=base.ParmJObj.GetDateTime("EffectTime"), EffectTime=base.ParmJObj.GetDateTime("EffectTime"),
UpOrderId=base.ParmJObj.GetInt("UpOrderId"), UpOrderId=base.ParmJObj.GetInt("UpOrderId"),
VisitorReserveId=base.ParmJObj.GetInt("VisitorReserveId"),
}; };
if (demodel.OrderType == OrderTypeEnum.CourseOrder && demodel.ClassId <= 0) if (demodel.OrderType == OrderTypeEnum.CourseOrder && demodel.ClassId <= 0)
...@@ -581,6 +583,7 @@ namespace Edu.WebApi.Controllers.Course ...@@ -581,6 +583,7 @@ namespace Edu.WebApi.Controllers.Course
model.StartClassHours, model.StartClassHours,
EffectTime = Common.ConvertHelper.FormatDate(model.EffectTime), EffectTime = Common.ConvertHelper.FormatDate(model.EffectTime),
model.UpOrderId, model.UpOrderId,
model.VisitorReserveId,
}, },
StepPriceList = list.Select(x => new StepPriceList = list.Select(x => new
{ {
...@@ -1217,6 +1220,7 @@ namespace Edu.WebApi.Controllers.Course ...@@ -1217,6 +1220,7 @@ namespace Edu.WebApi.Controllers.Course
EffectTime=Common.ConvertHelper.FormatDate(x.EffectTime), EffectTime=Common.ConvertHelper.FormatDate(x.EffectTime),
x.UpOrderId, x.UpOrderId,
OpenTime = Common.ConvertHelper.FormatDate(x.OpenTime), OpenTime = Common.ConvertHelper.FormatDate(x.OpenTime),
x.VisitorReserveId,
SaleRemarkList = x?.SaleRemarkList.Select(z => new SaleRemarkList = x?.SaleRemarkList.Select(z => new
{ {
z.Id, z.Id,
...@@ -1366,6 +1370,7 @@ namespace Edu.WebApi.Controllers.Course ...@@ -1366,6 +1370,7 @@ namespace Edu.WebApi.Controllers.Course
x.EffectStatusStr, x.EffectStatusStr,
EffectTime = Common.ConvertHelper.FormatDate(x.EffectTime), EffectTime = Common.ConvertHelper.FormatDate(x.EffectTime),
x.UpOrderId, x.UpOrderId,
x.VisitorReserveId,
SaleRemarkList = x?.SaleRemarkList.Select(z => new SaleRemarkList = x?.SaleRemarkList.Select(z => new
{ {
z.Id, z.Id,
......
...@@ -40,6 +40,12 @@ namespace Edu.WebApi.Controllers.Duty ...@@ -40,6 +40,12 @@ namespace Edu.WebApi.Controllers.Duty
var query = new RB_Visitor_Reserve_Extend() var query = new RB_Visitor_Reserve_Extend()
{ {
Group_Id = base.UserInfo.Group_Id, Group_Id = base.UserInfo.Group_Id,
StartClassDate=base.ParmJObj.GetStringValue("StartClassDate"),
EndClassDate=base.ParmJObj.GetStringValue("EndClassDate"),
TeacherId=base.ParmJObj.GetInt("TeacherId"),
ClassRoomId=base.ParmJObj.GetInt("ClassRoomId"),
Q_ReserveStatus=base.ParmJObj.GetStringValue("Q_ReserveStatus"),
VisitorName=base.ParmJObj.GetStringValue("VisitorName"),
}; };
var list = visitorReserveModule.GetVisitorReservePageModule(pageModel.PageIndex, pageModel.PageSize, out long rowsCount, query); var list = visitorReserveModule.GetVisitorReservePageModule(pageModel.PageIndex, pageModel.PageSize, out long rowsCount, query);
foreach (var item in list) foreach (var item in list)
...@@ -92,7 +98,12 @@ namespace Edu.WebApi.Controllers.Duty ...@@ -92,7 +98,12 @@ namespace Edu.WebApi.Controllers.Duty
TeacherId=base.ParmJObj.GetInt("TeacherId"), TeacherId=base.ParmJObj.GetInt("TeacherId"),
ClassRoomId=base.ParmJObj.GetInt("ClassRoomId"), ClassRoomId=base.ParmJObj.GetInt("ClassRoomId"),
ClassContent = base.ParmJObj.GetStringValue("ClassContent"), ClassContent = base.ParmJObj.GetStringValue("ClassContent"),
EndTime=base.ParmJObj.GetStringValue("EndTime"),
}; };
if (string.IsNullOrEmpty(model.ClassTime))
{
return ApiResult.ParamIsNull("请选择预约时间段!");
}
model.ReserveStatus = 0; model.ReserveStatus = 0;
model.Group_Id = base.UserInfo.Group_Id; model.Group_Id = base.UserInfo.Group_Id;
model.School_Id = base.UserInfo.School_Id; model.School_Id = base.UserInfo.School_Id;
...@@ -101,8 +112,8 @@ namespace Edu.WebApi.Controllers.Duty ...@@ -101,8 +112,8 @@ namespace Edu.WebApi.Controllers.Duty
model.UpdateBy = base.UserInfo.Id; model.UpdateBy = base.UserInfo.Id;
model.UpdateTime = System.DateTime.Now; model.UpdateTime = System.DateTime.Now;
model.Status = Common.Enum.DateStateEnum.Normal; model.Status = Common.Enum.DateStateEnum.Normal;
bool retult = visitorReserveModule.SetVisitorReserveModule(model); bool retult = visitorReserveModule.SetVisitorReserveModule(model,out string message);
return retult ? ApiResult.Success() : ApiResult.Failed(); return retult ? ApiResult.Success() : ApiResult.Failed(message: message);
} }
/// <summary> /// <summary>
...@@ -211,7 +222,12 @@ namespace Edu.WebApi.Controllers.Duty ...@@ -211,7 +222,12 @@ namespace Edu.WebApi.Controllers.Duty
ClassTime = base.ParmJObj.GetStringValue("ClassTime"), ClassTime = base.ParmJObj.GetStringValue("ClassTime"),
ClassRoomId = base.ParmJObj.GetInt("ClassRoomId"), ClassRoomId = base.ParmJObj.GetInt("ClassRoomId"),
ClassContent = base.ParmJObj.GetStringValue("ClassContent"), ClassContent = base.ParmJObj.GetStringValue("ClassContent"),
EndTime=base.ParmJObj.GetStringValue("EndTime"),
}; };
if (string.IsNullOrEmpty(model.ClassTime))
{
return ApiResult.ParamIsNull("请选择预约时间!");
}
model.Group_Id = base.UserInfo.Group_Id; model.Group_Id = base.UserInfo.Group_Id;
model.School_Id = base.UserInfo.School_Id; model.School_Id = base.UserInfo.School_Id;
model.CreateBy = base.UserInfo.Id; model.CreateBy = base.UserInfo.Id;
...@@ -219,8 +235,8 @@ namespace Edu.WebApi.Controllers.Duty ...@@ -219,8 +235,8 @@ namespace Edu.WebApi.Controllers.Duty
model.UpdateBy = base.UserInfo.Id; model.UpdateBy = base.UserInfo.Id;
model.UpdateTime = System.DateTime.Now; model.UpdateTime = System.DateTime.Now;
model.Status = Common.Enum.DateStateEnum.Normal; model.Status = Common.Enum.DateStateEnum.Normal;
bool retult = visitorReserveModule.SetReserveClassModule(model); bool retult = visitorReserveModule.SetReserveClassModule(model,out string message);
return retult ? ApiResult.Success() : ApiResult.Failed(); return retult ? ApiResult.Success() : ApiResult.Failed(message: message);
} }
/// <summary> /// <summary>
...@@ -243,8 +259,8 @@ namespace Edu.WebApi.Controllers.Duty ...@@ -243,8 +259,8 @@ namespace Edu.WebApi.Controllers.Duty
public ApiResult RemoveReserveClass() public ApiResult RemoveReserveClass()
{ {
var ReserveClassId = base.ParmJObj.GetInt("ReserveClassId", 0); var ReserveClassId = base.ParmJObj.GetInt("ReserveClassId", 0);
var flag = visitorReserveModule.RemoveReserveClassModule(ReserveClassId); var flag = visitorReserveModule.RemoveReserveClassModule(ReserveClassId,out string message);
return flag ? ApiResult.Success() : ApiResult.Failed(); return flag ? ApiResult.Success() : ApiResult.Failed(message: message);
} }
#endregion #endregion
} }
......
...@@ -2,7 +2,9 @@ ...@@ -2,7 +2,9 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using Edu.Cache.User; using Edu.Cache.User;
using Edu.Common;
using Edu.Common.API; using Edu.Common.API;
using Edu.Common.Enum;
using Edu.Common.Enum.User; using Edu.Common.Enum.User;
using Edu.Common.Plugin; using Edu.Common.Plugin;
using Edu.Model.CacheModel; using Edu.Model.CacheModel;
...@@ -108,6 +110,59 @@ namespace Edu.WebApi.Controllers.User ...@@ -108,6 +110,59 @@ namespace Edu.WebApi.Controllers.User
string token = WebApiTokenHelper.CreateToken(Common.GlobalKey.JWT_User_Key, eduUserInfo); string token = WebApiTokenHelper.CreateToken(Common.GlobalKey.JWT_User_Key, eduUserInfo);
string erpToken = WebApiTokenHelper.CreateToken(Common.GlobalKey.JWT_ERP_User_Key, erpUserInfo); string erpToken = WebApiTokenHelper.CreateToken(Common.GlobalKey.JWT_ERP_User_Key, erpUserInfo);
#region 获取甲鹤教育Token
string JHTenantId = Config.JHTenantId;
string JHMallBaseId = Config.JHMallBaseId;
IUserInfoToken mallJHUserInfo = new ErpTokenUserInfo()
{
requestFrom = Common.Enum.ApiRequestFromEnum.Mall,
uid = JHTenantId,
groupId = model.Group_Id
};
#region JWT
// string mallToken = WebApiTokenHelper.CreateToken(Common.GlobalKey.JWT_Mall_User_Key, mallJHUserInfo);
#endregion
#endregion
#region 获取甲鹤教育Token
#region JWT
JWT.IDateTimeProvider provider2 = new JWT.UtcDateTimeProvider();
var now2 = provider2.GetNow().AddMinutes(-1);
var unixEpoch2 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); // or use JwtValidator.UnixEpoch
var secondsSinceEpoch2 = Math.Round((now2 - unixEpoch2).TotalSeconds);
var payload2 = new Dictionary<string, object>
{
{"iat",secondsSinceEpoch2 },
{"exp",secondsSinceEpoch2+Config.JwtExpirTime},
{"mall_userInfoJH",mallJHUserInfo }
};
JWT.Algorithms.IJwtAlgorithm algorithm2 = new JWT.Algorithms.HMACSHA256Algorithm();
JWT.IJsonSerializer serializer2 = new JWT.Serializers.JsonNetSerializer();
JWT.IBase64UrlEncoder urlEncoder2 = new JWT.JwtBase64UrlEncoder();
JWT.IJwtEncoder encoder2 = new JWT.JwtEncoder(algorithm2, serializer2, urlEncoder2);
string secret2 = Config.MallJwtSecretKey;
string malltokenJH = encoder2.Encode(payload2, secret2);
#endregion
#endregion
var treeList = menuModule.GetPostMenuTreeModule(new Model.ViewModel.System.RB_Menu_ViewModel() var treeList = menuModule.GetPostMenuTreeModule(new Model.ViewModel.System.RB_Menu_ViewModel()
{ {
MenuType = accountType MenuType = accountType
...@@ -130,6 +185,9 @@ namespace Edu.WebApi.Controllers.User ...@@ -130,6 +185,9 @@ namespace Edu.WebApi.Controllers.User
SchoolName = model.SchoolName, SchoolName = model.SchoolName,
Token = token, Token = token,
ErpToken = erpToken, ErpToken = erpToken,
MallToken = malltokenJH,
JHMallBaseId = JHMallBaseId,
JHTenantId = JHTenantId,
MenuList = treeList, MenuList = treeList,
UserCenterList = userCenterList, UserCenterList = userCenterList,
GroupLogo = model.GroupLogo, GroupLogo = model.GroupLogo,
......
...@@ -149,7 +149,7 @@ namespace Edu.WebApi.Controllers.WeChatPay ...@@ -149,7 +149,7 @@ namespace Edu.WebApi.Controllers.WeChatPay
Cache.User.UserReidsCache.Set(Cache.CacheKey.WeChatPay_Callback_Key + payModel.out_trade_no, payModel.out_trade_no, 1800); Cache.User.UserReidsCache.Set(Cache.CacheKey.WeChatPay_Callback_Key + payModel.out_trade_no, payModel.out_trade_no, 1800);
isAdd = true; isAdd = true;
Cache.User.UserReidsCache.Set(Cache.CacheKey.WeChatPay_Callback_Key + payModel.out_trade_no, payModel.out_trade_no, 1800); Cache.User.UserReidsCache.Set(Cache.CacheKey.WeChatPay_Callback_Key + payModel.out_trade_no, payModel.out_trade_no, 1800);
var oldOrderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = payModel.out_trade_no }).FirstOrDefault(); var oldOrderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = payModel.out_trade_no, Type = 1 }).FirstOrDefault();
if (oldOrderRecordModel == null || oldOrderRecordModel.ID == 0) if (oldOrderRecordModel == null || oldOrderRecordModel.ID == 0)
{ {
isAdd = true; isAdd = true;
...@@ -338,7 +338,7 @@ namespace Edu.WebApi.Controllers.WeChatPay ...@@ -338,7 +338,7 @@ namespace Edu.WebApi.Controllers.WeChatPay
contractId = Convert.ToInt32(outTradeNo[17..]); contractId = Convert.ToInt32(outTradeNo[17..]);
} }
var orderModle = educationContractModule.GetEducationContractModule(contractId); var orderModle = educationContractModule.GetEducationContractModule(contractId);
var orderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = outTradeNo }).FirstOrDefault(); var orderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = outTradeNo, Type = 2 }).FirstOrDefault();
if (orderRecordModel == null) if (orderRecordModel == null)
{ {
return ApiResult.Failed("未查询到当前商户订单号对应的支付记录"); return ApiResult.Failed("未查询到当前商户订单号对应的支付记录");
...@@ -433,7 +433,7 @@ namespace Edu.WebApi.Controllers.WeChatPay ...@@ -433,7 +433,7 @@ namespace Edu.WebApi.Controllers.WeChatPay
Cache.User.UserReidsCache.Set(Cache.CacheKey.WeChatPay_Callback_Key + payModel.out_trade_no, payModel.out_trade_no, 1800); Cache.User.UserReidsCache.Set(Cache.CacheKey.WeChatPay_Callback_Key + payModel.out_trade_no, payModel.out_trade_no, 1800);
isAdd = true; isAdd = true;
Cache.User.UserReidsCache.Set(Cache.CacheKey.WeChatPay_Callback_Key + payModel.out_trade_no, payModel.out_trade_no, 1800); Cache.User.UserReidsCache.Set(Cache.CacheKey.WeChatPay_Callback_Key + payModel.out_trade_no, payModel.out_trade_no, 1800);
var oldOrderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = payModel.out_trade_no }).FirstOrDefault(); var oldOrderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = payModel.out_trade_no, Type = 2 }).FirstOrDefault();
if (oldOrderRecordModel == null || oldOrderRecordModel.ID == 0) if (oldOrderRecordModel == null || oldOrderRecordModel.ID == 0)
{ {
isAdd = true; isAdd = true;
...@@ -442,7 +442,7 @@ namespace Edu.WebApi.Controllers.WeChatPay ...@@ -442,7 +442,7 @@ namespace Edu.WebApi.Controllers.WeChatPay
{ {
var orderModle = educationContractModule.GetEducationContractModule(contractId); var orderModle = educationContractModule.GetEducationContractModule(contractId);
var orderModel = orderModule.GetClassOrderInfoModule(orderModle.OrderId); var orderModel = orderModule.GetClassOrderInfoModule(orderModle.OrderId);
var payOrderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = payModel.out_trade_no }).FirstOrDefault(); var payOrderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = payModel.out_trade_no, Type = 1 }).FirstOrDefault();
var userInfo = employeeModule.GetEmployeeListModule(new Model.ViewModel.User.Employee_ViewModel { Id = orderModel.EnterID, Group_Id = orderModel.Group_Id }).ToList().FirstOrDefault(); var userInfo = employeeModule.GetEmployeeListModule(new Model.ViewModel.User.Employee_ViewModel { Id = orderModel.EnterID, Group_Id = orderModel.Group_Id }).ToList().FirstOrDefault();
var OriginalFee = Math.Round(Convert.ToDecimal((Convert.ToDecimal(Config.SettlementRate) / 100) * (Convert.ToDecimal(payModel.amount.payer_total) / 100)), 2, MidpointRounding.AwayFromZero);//手续费 var OriginalFee = Math.Round(Convert.ToDecimal((Convert.ToDecimal(Config.SettlementRate) / 100) * (Convert.ToDecimal(payModel.amount.payer_total) / 100)), 2, MidpointRounding.AwayFromZero);//手续费
RB_Online_Trade_Detail model = new RB_Online_Trade_Detail(); RB_Online_Trade_Detail model = new RB_Online_Trade_Detail();
......
...@@ -57,7 +57,9 @@ namespace Edu.WebApi ...@@ -57,7 +57,9 @@ namespace Edu.WebApi
"http://jiahe.oytour.com", "http://jiahe.oytour.com",
"http://www.kookaku.com", "http://www.kookaku.com",
"http://www.kookaku.cn", "http://www.kookaku.cn",
"http://kookaku.com" "http://kookaku.com",
"https://mallapi.oytour.com",
"https://mall.oytour.com"
}; };
services.AddCors(options => options.AddPolicy("AllowCors", policy => policy.AllowAnyHeader().AllowAnyMethod().AllowCredentials().WithOrigins(corsArray.ToArray()))); services.AddCors(options => options.AddPolicy("AllowCors", policy => policy.AllowAnyHeader().AllowAnyMethod().AllowCredentials().WithOrigins(corsArray.ToArray())));
} }
...@@ -96,7 +98,7 @@ namespace Edu.WebApi ...@@ -96,7 +98,7 @@ namespace Edu.WebApi
Timers.TimerJobj.RunStop(); //网站停止完成执行 Timers.TimerJobj.RunStop(); //网站停止完成执行
}); });
string filePath= Path.Combine(Directory.GetCurrentDirectory(), "upfile"); string filePath = Path.Combine(Directory.GetCurrentDirectory(), "upfile");
if (System.IO.Directory.Exists(filePath) == false)//如果不存在就创建file文件夹 if (System.IO.Directory.Exists(filePath) == false)//如果不存在就创建file文件夹
{ {
System.IO.Directory.CreateDirectory(filePath); System.IO.Directory.CreateDirectory(filePath);
......
{ {
"ConnectionStrings": { "ConnectionStrings": {
"DefaultConnection": "server=192.168.20.214;user id=reborn;password=Reborn@2018;database=reborn_edu;CharSet=utf8mb4; Convert Zero Datetime=true; ", "DefaultConnection": "server=192.168.20.214;user id=reborn;password=Reborn@2018;database=reborn_edu;CharSet=utf8mb4; Convert Zero Datetime=true; ",
"DefaultConnectionPName": "MySql.Data.MySqlClient", "DefaultConnectionPName": "MySql.Data.MySqlClient",
"FinanceConnection": "server=192.168.20.214;user id=reborn;password=Reborn@2018;database=test_reborn_finance;CharSet=utf8mb4; Convert Zero Datetime=true; ", "FinanceConnection": "server=192.168.20.214;user id=reborn;password=Reborn@2018;database=test_reborn_finance;CharSet=utf8mb4; Convert Zero Datetime=true; ",
"FinanceConnectionPName": "MySql.Data.MySqlClient", "FinanceConnectionPName": "MySql.Data.MySqlClient",
"DataStatisticsConnection": "server=192.168.20.214;user id=reborn;password=Reborn@2018;database=reborn_datastatistics;CharSet=utf8mb4; Convert Zero Datetime=true; ", "DataStatisticsConnection": "server=192.168.20.214;user id=reborn;password=Reborn@2018;database=reborn_datastatistics;CharSet=utf8mb4; Convert Zero Datetime=true; ",
"DataStatisticsConnectionPName": "MySql.Data.MySqlClient", "DataStatisticsConnectionPName": "MySql.Data.MySqlClient",
"LogConnection": "server=192.168.20.214;user id=reborn;password=Reborn@2018;database=reborn_sys;CharSet=utf8mb4; Convert Zero Datetime=true; ", "LogConnection": "server=192.168.20.214;user id=reborn;password=Reborn@2018;database=reborn_sys;CharSet=utf8mb4; Convert Zero Datetime=true; ",
"LogConnectionPName": "MySql.Data.MySqlClient" "LogConnectionPName": "MySql.Data.MySqlClient"
}, },
"Logging": { "Logging": {
"LogLevel": { "LogLevel": {
"Default": "Information", "Default": "Information",
"Microsoft": "Warning", "Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information" "Microsoft.Hosting.Lifetime": "Information"
} }
}, },
"SettlementRate": "0.60", "SettlementRate": "0.60",
"SellCommissionFFBL": "0.15", "SellCommissionFFBL": "0.15",
"JwtSecretKey": "@VIITTOREBORN*2018", "JwtSecretKey": "@VIITTOREBORN*2018",
"JwtExpirTime": 86400, "MallJwtSecretKey": "@VIITTOREBORN*2018",
"IsSendMsg": 2, "JwtExpirTime": 86400,
"AllowedHosts": "*", "IsSendMsg": 2,
"OpenValidation": "False", "AllowedHosts": "*",
"UploadSiteUrl": "http://192.168.1.36:8120", "OpenValidation": "False",
"ViewFileSiteUrl": "https://viitto-1301420277.cos.ap-chengdu.myqcloud.com", "UploadSiteUrl": "http://192.168.1.36:8120",
"ErpViewFileSiteUrl": "http://imgfile.oytour.com", "ViewFileSiteUrl": "https://viitto-1301420277.cos.ap-chengdu.myqcloud.com",
"Mongo": "mongodb://47.96.25.130:27017", "ErpViewFileSiteUrl": "http://imgfile.oytour.com",
"MongoDBName": "Edu", "Mongo": "mongodb://47.96.25.130:27017",
"WkHtmlToPdfPath": "D:/wkhtmltopdf/bin/", "MongoDBName": "Edu",
"FinanceKey": "FinanceMallInsertToERPViitto2020", "WkHtmlToPdfPath": "D:/wkhtmltopdf/bin/",
"PaymentFinanceApi": "http://192.168.1.13:8083/api/Mall/InsertFinanceBatchForMallIn", "FinanceKey": "FinanceMallInsertToERPViitto2020",
"IncomeFinanceApi": "http://192.168.20.9:8083/api/Mall/InsertFinanceBatchForMallOut", "PaymentFinanceApi": "http://192.168.1.13:8083/api/Mall/InsertFinanceBatchForMallIn",
"sTenpayNotifyUrl": "http://eduapi.oytour.com/api/WeChatPay/WxPayCallback", //下单回调地址 "IncomeFinanceApi": "http://192.168.20.9:8083/api/Mall/InsertFinanceBatchForMallOut",
"sTenpayNotifyRefundUrl": "http://eduapi.oytour.com/api/WeChatPay/Refunds", //退款回调地址 "sTenpayNotifyUrl": "http://eduapi.oytour.com/api/WeChatPay/WxPayCallback", //下单回调地址
"FinanceDateBase": "reborn_finance", "sTenpayNotifyRefundUrl": "http://eduapi.oytour.com/api/WeChatPay/Refunds", //退款回调地址
"RabbitMqConfig": { "FinanceDateBase": "reborn_finance",
"HostName": "47.96.25.130", "JHTenantId": "15",
"VirtualHost": "/", "JHMallBaseId": "5",
"Port": 5672, "RabbitMqConfig": {
"UserName": "guest", "HostName": "47.96.25.130",
"Password": "viitto2019", "VirtualHost": "/",
"QueenName": "vt_sys_message_test" "Port": 5672,
}, "UserName": "guest",
"RedisSetting": { "Password": "viitto2019",
"RedisServer": "47.96.23.199", "QueenName": "vt_sys_message_test"
"RedisPort": "6379", },
"RedisPwd": "Viitto2018" "RedisSetting": {
}, "RedisServer": "47.96.23.199",
"VirtualDirectory": "WebFile", "RedisPort": "6379",
//未填写 未打分 下降比例 "RedisPwd": "Viitto2018"
"OKRMatterValue": "30,100,100", },
//是否是线上环境 "VirtualDirectory": "WebFile",
"IsOnline": false, //未填写 未打分 下降比例
//退课流程编号 "OKRMatterValue": "30,100,100",
"BackClassFlowId": 1, //是否是线上环境
//分区校长岗位编号 "IsOnline": false,
"SchoolPostId": 3, //退课流程编号
//教务长 "BackClassFlowId": 1,
"JiaoWuZhang": 8, //分区校长岗位编号
//留学就业部门主管审核编号[王涛] "SchoolPostId": 3,
"StudyAbroadDirectorId": 64, //教务长
//留学就业部门负责人审核编号[姚顺先] "JiaoWuZhang": 8,
"StudyAbroadManagerId": 52, //留学就业部门主管审核编号[王涛]
//合同默认抬头 "StudyAbroadDirectorId": 64,
"ContractDefaultTitle": "JH-DZ-CD-", //留学就业部门负责人审核编号[姚顺先]
//消息推送AppId "StudyAbroadManagerId": 52,
"PushAppId": "JiaHeJiaoYu", //合同默认抬头
//是否推送消息 "ContractDefaultTitle": "JH-DZ-CD-",
"IsPushMessage": "1", //消息推送AppId
//超过下班时间60分钟不能打卡 "PushAppId": "JiaHeJiaoYu",
"MoreThanMinutes": 60, //是否推送消息
//连续缺课课时 "IsPushMessage": "1",
"AbsentHours": 12 //超过下班时间60分钟不能打卡
"MoreThanMinutes": 60,
//连续缺课课时
"AbsentHours": 12
} }
\ No newline at end of file
...@@ -60,7 +60,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.Module.StudyAbroad", "E ...@@ -60,7 +60,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.Module.StudyAbroad", "E
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.Module.Web", "Edu.Module.Web\Edu.Module.Web.csproj", "{380ACD87-3D6C-474C-A0ED-A91BD8E26081}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.Module.Web", "Edu.Module.Web\Edu.Module.Web.csproj", "{380ACD87-3D6C-474C-A0ED-A91BD8E26081}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Edu.Module.Duty", "Edu.Module.Duty\Edu.Module.Duty.csproj", "{3C354B2B-8706-49A6-A12A-5A64F28E7CDC}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.Module.Duty", "Edu.Module.Duty\Edu.Module.Duty.csproj", "{3C354B2B-8706-49A6-A12A-5A64F28E7CDC}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment