Commit 8f54aacd authored by 吴春's avatar 吴春

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

parents be4f6d82 e927e1e1
......@@ -43,5 +43,15 @@ namespace Edu.Cache
/// </summary>
public static string WeChatPay_Callback_Key = "WeChatPay_Callback_Key_";
/// <summary>
/// 通讯录token
/// </summary>
public static string QYWeChat_TelToken_Key = "TWeChat_Token_Key_";
/// <summary>
/// 外部人员token
/// </summary>
public static string QYWeChat_EmpToken_Key = "EWeChat_Token_Key_";
}
}
using Edu.CacheManager.Base;
using Edu.Common.Enum;
using Edu.Model.CacheModel;
using Edu.Repository.User;
using System;
using System.Linq;
namespace Edu.Cache.WeChat
{
/// <summary>
/// redis缓存
/// </summary>
public class WeChatReidsCache
{
/// <summary>
/// 使用redis第几号库
/// </summary>
public static readonly int REDIS_DB3 = 3;
static readonly RedisHelper redis = new RedisHelper(REDIS_DB3);
/// <summary>
/// 设置缓存
/// </summary>
/// <param name="cacheKey"></param>
/// <param name="token"></param>
/// <param name="JwtExpirTime"></param>
public static void TokenSet(string cacheKey, string token, int JwtExpirTime)
{
try
{
TimeSpan ts = GetExpirTime(JwtExpirTime);
redis.StringSet(cacheKey, token, ts);
}
catch (Exception ex)
{
Common.Plugin.LogHelper.Write(ex, "TokenSet缓存设置失败");
}
}
/// <summary>
/// 获取缓存时长
/// </summary>
/// <param name="JwtExpirTime"></param>
/// <returns></returns>
private static TimeSpan GetExpirTime(int JwtExpirTime)
{
DateTime dt = DateTime.Now;
DateTime dt2 = DateTime.Now;
TimeSpan ts = dt.AddSeconds(JwtExpirTime) - dt2;
return ts;
}
/// <summary>
/// 判断key是否存在
/// </summary>
/// <param name="cacheKey"></param>
/// <returns></returns>
public static bool Exists(string cacheKey)
{
return redis.KeyExists(cacheKey);
}
/// <summary>
/// 获取缓存
/// </summary>
/// <param name="cacheKey"></param>
/// <param name="Data"></param>
/// <param name="JwtExpirTime"></param>
public static string GetToken(string cacheKey)
{
try
{
return redis.StringGet(cacheKey);
}
catch (Exception)
{
return "";
}
}
}
}
\ No newline at end of file
......@@ -51,5 +51,17 @@ namespace Edu.Common.Enum.System
/// </summary>
[EnumField("试听课")]
ReserveClass = 7,
/// <summary>
/// 耗材入库审核
/// </summary>
[EnumField("耗材入库审核")]
SuppliesStokcInAudit = 8,
/// <summary>
/// 资产入库审核
/// </summary>
[EnumField("资产入库审核")]
PropertyStokcInAudit = 9,
}
}
......@@ -188,6 +188,24 @@ namespace Edu.Common
return list;
}
/// <summary>
/// 时间集合转字符串用户SQL查询使用
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static string DateTimeListToString(List<DateTime> list)
{
string str = "";
if (list != null && list.Count > 0)
{
foreach (var item in list)
{
str += ",'" + FormatDate(item) + "'";
}
}
return str.TrimStart(',').TrimEnd(',');
}
/// <summary>
/// 根据日期获取星期几
/// </summary>
......@@ -230,7 +248,7 @@ namespace Edu.Common
public static int CalcMinutes(DateTime start, DateTime end)
{
int minutes=Convert.ToInt32((end - start).TotalSeconds);
minutes = minutes / 60;
minutes /= 60;
return minutes;
}
......
......@@ -47,6 +47,7 @@
<ProjectReference Include="..\Edu.Module.Course\Edu.Module.Course.csproj" />
<ProjectReference Include="..\Edu.Module.Finance\Edu.Module.Finance.csproj" />
<ProjectReference Include="..\Edu.Module.OKR\Edu.Module.OKR.csproj" />
<ProjectReference Include="..\Edu.ThirdCore\Edu.ThirdCore.csproj" />
</ItemGroup>
<ItemGroup>
......
......@@ -66,5 +66,10 @@ namespace Edu.Model.Entity.Course
/// 0-未反馈,1-已反馈
/// </summary>
public int ParentFanKuiStatus { get; set; }
/// <summary>
/// 上课计划重复的计划编号
/// </summary>
public string RepeatPlanIds { get; set; }
}
}
\ No newline at end of file
......@@ -66,10 +66,19 @@ namespace Edu.Model.Entity.User
/// </summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 校区编号
/// </summary>
public int School_Id { get; set; }
/// <summary>
/// 校区默认值
/// </summary>
private int defaultSId = -1;
/// <summary>
/// 学校编号
/// </summary>
public int School_Id
{
get { return defaultSId; }
set { defaultSId = value; }
}
/// <summary>
/// 部门层级
......
using Edu.Common.Enum;
using Edu.Common.Enum.Course;
using System;
using VT.FW.DB;
namespace Edu.Model.Entity.WeChat
{
/// <summary>
/// 企业微信配置实体类
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_WeChat_Config
{
/// <summary>
/// Id
/// </summary>
public int Id { get; set; }
/// <summary>
/// 企业名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 企业微信ID
/// </summary>
public string WX_CorpId { get; set; }
/// <summary>
/// 企业代码(企业统一社会信用代码)
/// </summary>
public string Social_Code { get; set; }
/// <summary>
/// 企业通讯录secret
/// </summary>
public string Employee_Secret { get; set; }
/// <summary>
/// 企业外部联系人secret
/// </summary>
public string Contact_Secret { get; set; }
/// <summary>
/// 事件回调地址(通讯录)
/// </summary>
public string TelEvent_CallBack { get; set; }
/// <summary>
/// 回调token
/// </summary>
public string Token { get; set; }
/// <summary>
/// 回调消息加密串
/// </summary>
public string Encoding_Aes_Key { get; set; }
/// <summary>
/// 事件回调地址(外部人员)
/// </summary>
public string EmpEvent_CallBack { get; set; }
/// <summary>
/// 集团编号
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 创建人
/// </summary>
public int CreateBy { get; set; }
/// <summary>
/// 创建日期
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 修改人
/// </summary>
public int UpdateBy { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime UpdateTime { get; set; }
}
}
......@@ -103,6 +103,11 @@ namespace Edu.Model.ViewModel.Course
/// </summary>
public string QClassDateStr { get; set; }
/// <summary>
/// 是否查询上课计划有重复的数据【1-是】
/// </summary>
public int IsQRepeat { get; set; }
/// <summary>
/// 老师备课次数>0已备课
/// </summary>
......
using System;
using System.Collections.Generic;
using System.Text;
using Edu.Common.Enum.Sale;
using Edu.Model.Entity.WeChat;
namespace Edu.Model.ViewModel.WeChat
{
/// <summary>
/// 企业微信配置扩展类
/// </summary>
public class RB_WeChat_Config_ViewModel : RB_WeChat_Config
{
}
}
......@@ -156,7 +156,7 @@ namespace Edu.Module.Course
private readonly RB_User_ChangeLogRepository user_ChangeLogRepository = new RB_User_ChangeLogRepository();
/// <summary>
/// 获取班级列表
/// </summary>
......@@ -545,12 +545,11 @@ namespace Edu.Module.Course
}
}
#endregion
//班级上课计划列表
List<RB_Class_Plan_ViewModel> classPlanList = CreateClassPlanList(model, defaultPlanTimeList, BasicMinutes);
model.ClassPlanList = classPlanList;
AddClassPlanModule(model);
#endregion
model.ClassPlanList = classPlanList;
return flag;
}
......@@ -559,36 +558,333 @@ namespace Edu.Module.Course
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public void AddClassPlanModule(RB_Class_ViewModel model)
public bool AddClassPlanModule(int ClassId, List<RB_Class_Plan_ViewModel> planList,UserInfo user,out bool result)
{
bool flag = true;
result = false;
RB_Class_ViewModel model = GetClassModule(ClassId);
model.ClassPlanList = planList;
List<TimeItem> timeItemList = new List<TimeItem>();
if (model.ClassPlanList != null && model.ClassPlanList.Count > 0)
{
var datetimeList = model.ClassPlanList.Select(qitem => qitem.ClassDate).ToList();
var dateStr = Common.ConvertHelper.DateTimeListToString(datetimeList);
//添加班级上课计划
var tempPlanList = class_PlanRepository.BatchInsertClassPlanRepository(model.ClassPlanList);
List<RB_Class_Time> timeList = new List<RB_Class_Time>();
foreach (var item in model.ClassPlanList)
{
var newClassPlanId = tempPlanList?.Where(qitem => qitem.ClassId == item.ClassId && Common.ConvertHelper.FormatDate(qitem.ClassDate) == Common.ConvertHelper.FormatDate(item.ClassDate))?.FirstOrDefault()?.ClassPlanId ?? 0;
if (newClassPlanId > 0 && item.PlanTimeList != null && item.PlanTimeList.Count > 0)
{
foreach (var subItem in item.PlanTimeList)
{
var classTime = new RB_Class_Time()
{
ClassTimeId = 0,
ClassId = model.ClassId,
ClassPlanId = newClassPlanId,
StartTime = subItem.StartTime,
EndTime = subItem.EndTime,
Group_Id = model.Group_Id,
School_Id = model.School_Id,
ClassStatus = 0,
TimeHour = subItem.TimeHour
};
timeList.Add(classTime);
}
}
}
if (timeList != null && timeList.Count > 0)
{
flag = class_TimeRepository.BatchInsertClassTimeRepository(timeList);
}
}
//检查上课计划是否重复
class_PlanRepository.CheckClassPlanRepeatRepository(ClassId, out result);
if (result)
{
var classLogModel = new Model.Entity.Log.RB_Class_Log()
{
LogType = Common.Enum.Course.ClassLogTypeEnum.CreateClass,
LogContent = string.Format("班级管理员{0}创建上课计划成功!但是存在冲突的上课安排,等待管理员处理!",user.AccountName),
ClassId = ClassId,
Group_Id = model.Group_Id,
School_Id = model.School_Id,
CreateBy = model.CreateBy,
CreateTime = System.DateTime.Now
};
classLogRepository.AddClassLogRepository(classLogModel);
}
else
{
var classLogModel = new Model.Entity.Log.RB_Class_Log()
{
LogType = Common.Enum.Course.ClassLogTypeEnum.CreateClass,
LogContent = string.Format("班级管理员{0},完成班级排课计划冲突",user.AccountName),
ClassId = ClassId,
Group_Id = model.Group_Id,
School_Id = model.School_Id,
CreateBy = model.CreateBy,
CreateTime = System.DateTime.Now
};
classLogRepository.AddClassLogRepository(classLogModel);
}
return flag;
}
/// <summary>
/// 批量修改上课计划
/// </summary>
/// <param name="ChangeType">调动类型(1-老师,2-教室,3-时段)</param>
/// <param name="ClassRoomId"></param>
/// <param name="TeacherId"></param>
/// <param name="ClassPlanIdList"></param>
/// <param name="TimeList"></param>
/// <param name="result"></param>
/// <returns></returns>
public bool BatchUpdateClassPlanModule(int ClassId, int ChangeType, int ClassRoomId, int TeacherId, List<int> ClassPlanIdList, List<TimeItem> TimeList, UserInfo user, out bool result)
{
Task.Run(() =>
bool flag = false;
string ids = string.Join(",", ClassPlanIdList);
result = false;
if (ChangeType == 1)
{
flag = class_PlanRepository.UpdateClassPlanTeacherOrClassRoomIdRepository(TeacherId, 0, ids);
}
if (ChangeType == 2)
{
flag = class_PlanRepository.UpdateClassPlanTeacherOrClassRoomIdRepository(0, ClassRoomId, ids);
}
if (ChangeType == 3)
{
if (model.ClassPlanList != null && model.ClassPlanList.Count > 0)
flag = class_TimeRepository.DeleteClassTimeByPlanIdsRepository(ids);
var planList = class_PlanRepository.GetClassPlanListRepository(new RB_Class_Plan_ViewModel()
{
QClassPlanIds = ids
});
if (flag && planList != null && planList.Count > 0)
{
foreach (var item in model.ClassPlanList)
List<RB_Class_Time> timeList = new List<RB_Class_Time>();
foreach (var item in planList)
{
item.ClassPlanId = 0;
if (!class_PlanRepository.CheckExistsRepository(item))
foreach (var subItem in TimeList)
{
//添加班级上课计划
var newClassPlanId = class_PlanRepository.Insert(item);
if (item.PlanTimeList != null && item.PlanTimeList.Count > 0)
var classTime = new RB_Class_Time()
{
foreach (var subItem in item.PlanTimeList)
{
subItem.ClassTimeId = 0;
subItem.ClassPlanId = newClassPlanId;
subItem.ClassId = model.ClassId;
subItem.Group_Id = model.Group_Id;
subItem.School_Id = model.School_Id;
//添加班级上课计划的上课时间
class_TimeRepository.Insert(subItem);
}
}
ClassTimeId = 0,
ClassId = item.ClassId,
ClassPlanId = item.ClassPlanId,
StartTime = subItem.StartTime,
EndTime = subItem.EndTime,
Group_Id = item.Group_Id,
School_Id = item.School_Id,
ClassStatus = 0,
TimeHour = subItem.TimeHour
};
timeList.Add(classTime);
}
}
if (timeList != null && timeList.Count > 0)
{
flag = class_TimeRepository.BatchInsertClassTimeRepository(timeList);
}
}
}
class_PlanRepository.CheckClassPlanRepeatRepository(ClassId, out result);
if (result)
{
var classLogModel = new Model.Entity.Log.RB_Class_Log()
{
LogType = Common.Enum.Course.ClassLogTypeEnum.CreateClass,
LogContent = string.Format("班级管理员{0}修改上课计划成功!但是存在冲突的上课安排,等待管理员处理!", user.AccountName),
ClassId = ClassId,
Group_Id = user.Group_Id,
School_Id = user.School_Id,
CreateBy = user.Id,
CreateTime = System.DateTime.Now
};
classLogRepository.AddClassLogRepository(classLogModel);
}
else
{
var classLogModel = new Model.Entity.Log.RB_Class_Log()
{
LogType = Common.Enum.Course.ClassLogTypeEnum.CreateClass,
LogContent = string.Format("班级管理员{0},完成班级排课计划冲突", user.AccountName),
ClassId = ClassId,
Group_Id = user.Group_Id,
School_Id = user.School_Id,
CreateBy = user.Id,
CreateTime = System.DateTime.Now
};
classLogRepository.AddClassLogRepository(classLogModel);
}
return flag;
}
/// <summary>
/// 忽略上课计划
/// </summary>
/// <param name="classId"></param>
/// <param name="user"></param>
/// <returns></returns>
public bool IgnoreClassPlanModule(int classId, UserInfo user)
{
var classLogModel = new Model.Entity.Log.RB_Class_Log()
{
LogType = Common.Enum.Course.ClassLogTypeEnum.CreateClass,
LogContent = string.Format("班级管理员{0},放弃处理上课计划冲突", user.AccountName),
ClassId = classId,
Group_Id = user.Group_Id,
School_Id = user.School_Id,
CreateBy = user.Id,
CreateTime = System.DateTime.Now
};
return classLogRepository.AddClassLogRepository(classLogModel);
}
/// <summary>
/// 单个修改上课计划
/// </summary>
/// <returns></returns>
public bool UpdateClassPlanSingleModule(List<RB_Class_Plan_ViewModel> list, UserInfo user, out bool result)
{
var flag = true;
result = false;
foreach (var item in list)
{
if (flag)
{
flag = SetClassPlanModule(item, user.Id);
}
}
if (flag)
{
class_PlanRepository.CheckClassPlanRepeatRepository(list[0].ClassId, out result);
}
if (result)
{
var classLogModel = new Model.Entity.Log.RB_Class_Log()
{
LogType = Common.Enum.Course.ClassLogTypeEnum.CreateClass,
LogContent = string.Format("班级管理员{0}修改上课计划成功!但是存在冲突的上课安排,等待管理员处理!", user.AccountName),
ClassId = list[0].ClassId,
Group_Id = user.Group_Id,
School_Id = user.School_Id,
CreateBy = user.Id,
CreateTime = System.DateTime.Now
};
classLogRepository.AddClassLogRepository(classLogModel);
}
else
{
var classLogModel = new Model.Entity.Log.RB_Class_Log()
{
LogType = Common.Enum.Course.ClassLogTypeEnum.CreateClass,
LogContent = string.Format("班级管理员{0},完成班级排课计划冲突", user.AccountName),
ClassId = list[0].ClassId,
Group_Id = user.Group_Id,
School_Id = user.School_Id,
CreateBy = user.Id,
CreateTime = System.DateTime.Now
};
classLogRepository.AddClassLogRepository(classLogModel);
}
return flag;
}
/// <summary>
/// 获取有冲突的上课计划
/// </summary>
/// <param name="classId"></param>
public object GetRepeatClassPlanModule(int ClassId)
{
List<object> result = new List<object>();
var list = class_PlanRepository.GetClassPlanListRepository(new RB_Class_Plan_ViewModel()
{
ClassId = ClassId,
IsQRepeat = 1
});
if (list != null && list.Count > 0)
{
string repeatIds = string.Join(",", list.Select(qitem => qitem.RepeatPlanIds));
var repeatList = class_PlanRepository.GetClassPlanListRepository(new RB_Class_Plan_ViewModel()
{
QClassPlanIds = repeatIds
});
List<int> ids = new List<int>();
var planIds = Common.ConvertHelper.StringToList(string.Join(",", list.Select(qitem => qitem.ClassPlanId)));
if (planIds != null && planIds.Count > 0)
{
ids.AddRange(planIds);
}
var repeatPlanIds = Common.ConvertHelper.StringToList(string.Join(",", repeatList.Select(qitem => qitem.ClassPlanId)));
if (repeatPlanIds != null && repeatPlanIds.Count > 0)
{
ids.AddRange(repeatPlanIds);
}
List<RB_Class_Time_ViewModel> timeList = class_TimeRepository.GetClassTimeListRepository(new RB_Class_Time_ViewModel()
{
QClassPlanIds = string.Join(",", ids)
});
foreach (var item in list)
{
List<object> PlanRepeatList = new List<object>();
var tempRepeatList = repeatList?.Where(qitem => qitem.ClassDate == item.ClassDate)?.ToList();
if (tempRepeatList != null && tempRepeatList.Count > 0)
{
foreach (var subItem in tempRepeatList)
{
var tempObj = new
{
subItem.ClassPlanId,
subItem.ClassId,
subItem.ClassName,
ClassDate = Common.ConvertHelper.FormatDate(subItem.ClassDate),
subItem.TeacherId,
subItem.TeacherName,
subItem.ClassRoomId,
subItem.RoomName,
PlanTimeList = timeList.Where(qitem => qitem.ClassPlanId == subItem.ClassPlanId).Select(qitem => new
{
qitem.ClassTimeId,
qitem.ClassId,
qitem.ClassPlanId,
qitem.StartTime,
qitem.EndTime,
qitem.TimeHour
}),
};
PlanRepeatList.Add(tempObj);
}
}
RB_Class_Plan_ViewModel model = new RB_Class_Plan_ViewModel();
var obj = new
{
item.ClassPlanId,
item.ClassId,
item.ClassName,
ClassDate=Common.ConvertHelper.FormatDate(item.ClassDate),
item.TeacherId,
item.TeacherName,
item.ClassRoomId,
item.RoomName,
PlanTimeList= timeList.Where(qitem => qitem.ClassPlanId == item.ClassPlanId).Select(qitem => new {
qitem.ClassTimeId,
qitem.ClassId,
qitem.ClassPlanId,
qitem.StartTime,
qitem.EndTime,
qitem.TimeHour
}),
PlanRepeatList
};
result.Add(obj);
}
}
return result;
}
/// <summary>
......@@ -597,8 +893,11 @@ namespace Edu.Module.Course
/// <param name="model"></param>
/// <param name="message"></param>
/// <returns></returns>
public virtual bool SetClassStatusModule(RB_Class_ViewModel model,out string message)
[TransactionCallHandler]
public virtual bool SetClassStatusModule(RB_Class_ViewModel model, out string message,out bool result)
{
result = false;
bool flag = false;
message = "";
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
......@@ -607,6 +906,13 @@ namespace Edu.Module.Course
if (model.Teacher_Id > 0)
{
fileds.Add(nameof(RB_Class_ViewModel.Teacher_Id), model.Teacher_Id);
Dictionary<string, object> planFileds = new Dictionary<string, object>()
{
{nameof(RB_Class_Plan.TeacherId),model.Teacher_Id },
};
class_PlanRepository.Update(planFileds, new WhereHelper(nameof(RB_Class_Plan.ClassId), model.ClassId));
class_PlanRepository.CheckClassPlanRepeatRepository(model.ClassId, out result);
}
//结课验证课时
if (model.ClassStatus == ClassStatusEnum.EndClass)
......@@ -623,7 +929,9 @@ namespace Edu.Module.Course
}
}
}
return classRepository.Update(fileds, new WhereHelper(nameof(RB_Class_ViewModel.ClassId), model.ClassId));
flag= classRepository.Update(fileds, new WhereHelper(nameof(RB_Class_ViewModel.ClassId), model.ClassId));
return flag;
}
/// <summary>
......@@ -699,7 +1007,7 @@ namespace Edu.Module.Course
/// <returns></returns>
private List<RB_Class_Plan_ViewModel> CreateClassPlanList(RB_Class_ViewModel model, List<ClassTimeItem> defaultPlanTimeList, int BasicMinutes)
{
var planList = class_PlanRepository.GetClassPlanListRepository(new RB_Class_Plan_ViewModel() { ClassId = model.ClassId, StartTime = DateTime.Now.ToString("yyyy-MM-dd") });
var planList = class_PlanRepository.GetClassPlanListRepository(new RB_Class_Plan_ViewModel() { ClassId = model.ClassId, StartTime = Common.ConvertHelper.FormatDate(DateTime.Now) });
if (planList != null && planList.Count > 0)
{
string ids = string.Join(",", planList.Select(qitem => qitem.ClassPlanId));
......@@ -709,15 +1017,26 @@ namespace Edu.Module.Course
var flag2 = class_PlanRepository.DeleteClassPlanRepository(ids);
}
}
var oldPlanList = class_PlanRepository.GetClassPlanListExtRepository(new RB_Class_Plan_ViewModel()
{
ClassId = model.ClassId,
EndTime = Common.ConvertHelper.FormatDate(DateTime.Now.AddDays(-1))
});
//已经完成的上课计划
var finishClassHours = oldPlanList?.Sum(qitem => qitem.TimeHour) ?? 0;
List<RB_Class_Plan_ViewModel> classPlanList = new List<RB_Class_Plan_ViewModel>();
if (model.ClassHours > 0&& defaultPlanTimeList!=null && defaultPlanTimeList.Count>0)
if (model.ClassHours > 0 && defaultPlanTimeList != null && defaultPlanTimeList.Count > 0)
{
var srartDate = model.OpenTime;
if (model.OpenTime < DateTime.Now)
{
srartDate = DateTime.Now;
}
//按周排课和按月排课
if (model.ClassStyle == ClassStyleEnum.Week || model.ClassStyle == ClassStyleEnum.Month)
{
int i = 0;
double totalHours = 0;
double totalHours = Convert.ToDouble(finishClassHours);
while (model.ClassHours > totalHours)
{
var newDate = srartDate.AddDays(i);
......@@ -894,7 +1213,6 @@ namespace Edu.Module.Course
TimeHour = sItem.TimeHour,
};
classTimeList.Add(timeModel);
var startDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + sItem.StartTime + ":00");
var endDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + sItem.EndTime + ":00");
TimeSpan span = endDate.Subtract(startDate);
......@@ -903,7 +1221,6 @@ namespace Edu.Module.Course
dayMinutes += span.TotalMinutes;
}
}
if (model.ClassHourMinute > 0)
{
dayClassHours = dayMinutes / model.ClassHourMinute;
......@@ -1280,7 +1597,7 @@ namespace Edu.Module.Course
/// </summary>
/// <param name="classId">班级编号</param>
/// <returns></returns>
public object GetClassStudentListModule(int classId, int school_Id, int group_Id, int ClassTimeId, int QEffectStatus = 0,int QNoFinish=0)
public object GetClassStudentListModule(int classId, int school_Id, int group_Id, int ClassTimeId, int QEffectStatus = 0, int QNoFinish = 0)
{
List<object> list = new List<object>();
var orderStudentList = order_GuestRepository.GetOrderGuestListRepository(new RB_Order_Guest_ViewModel()
......@@ -1305,7 +1622,7 @@ namespace Edu.Module.Course
}
if (QNoFinish == 1)
{
orderStudentList = orderStudentList.Where(qitem => qitem.GuestState == 1&&(qitem.TotalHours-qitem.CompleteHours)>0).ToList();
orderStudentList = orderStudentList.Where(qitem => qitem.GuestState == 1 && (qitem.TotalHours - qitem.CompleteHours) > 0).ToList();
}
if (orderStudentList != null && orderStudentList.Count > 0)
{
......@@ -1326,12 +1643,12 @@ namespace Edu.Module.Course
CreateTimeStr = Common.ConvertHelper.FormatTime(item.CreateTime),
item.Mobile,
item.OrderId,
EnterName= UserReidsCache.GetUserLoginInfo(item.EnterID)?.AccountName??"",
EnterName = UserReidsCache.GetUserLoginInfo(item.EnterID)?.AccountName ?? "",
item.ContractTotalHours,
item.TotalHours,
item.CompleteHours,
item.ValidClassHours,
SurplusHours=item.TotalHours-item.CompleteHours,
SurplusHours = item.TotalHours - item.CompleteHours,
item.MakeUpHours,
ClassHours = item.CompleteHours + "-" + (classModel?.ClassHours ?? 0),
IsRenew = item.IsRenewOrder,
......@@ -1564,7 +1881,8 @@ namespace Edu.Module.Course
{
guestName = "";
var mmodel = student_MakeupRepository.GetStudentMakeupListRepository(new RB_Student_Makeup_ViewModel() { ClassCheckId = classCheckId }).FirstOrDefault();
if (mmodel != null && mmodel.MakeUpStatus != 1) {
if (mmodel != null && mmodel.MakeUpStatus != 1)
{
guestName = order_GuestRepository.GetEntity(mmodel.OrderGuestId)?.GuestName ?? "";
return true;
}
......@@ -1867,7 +2185,7 @@ namespace Edu.Module.Course
/// <param name="rowsCount"></param>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Class_Plan_ViewModel> GetClassPlanModelRepository(RB_Class_Plan_ViewModel query)
public List<RB_Class_Plan_ViewModel> GetClassPlanEntityModule(RB_Class_Plan_ViewModel query)
{
return class_PlanRepository.GetClassPlanModelRepository(query);
}
......@@ -3307,11 +3625,9 @@ namespace Edu.Module.Course
StartTime = item?.StartTime ?? "",
EndTime = item?.EndTime ?? "",
GuestList = item.ClassType == 1 ? tempTimeGuestList?.Select(qitem => new { qitem.GuestName }) : visitorList?.Where(qitem => qitem.ReserveClassId == item.ClassTimeId)?.Select(qitem => new { GuestName = qitem.VisitorName }),
});
}
}
return result;
}
......@@ -3463,7 +3779,7 @@ namespace Edu.Module.Course
#endregion
......@@ -3504,5 +3820,5 @@ namespace Edu.Module.Course
#endregion
}
}
}
......@@ -2659,7 +2659,7 @@ namespace Edu.Module.Course
};
//HK2021-07-19新增【有效课时大于完成课时修改学员状态为正常】
string LogContent = "";
if (gmodel.CompleteHours < validClassHours)
if (gmodel.CompleteHours <= validClassHours)
{
keyValues.Add(nameof(RB_Order_Guest.GuestState), 1);
keyValues.Add(nameof(RB_Order_Guest.DropOutRemark), "有效课时大于完成课时,恢复学员状态!");
......
......@@ -560,7 +560,7 @@ namespace Edu.Module.Course
}
#region 计算课时
var g3list = glist.Where(x => x.OrderId == item.OrderId && x.GuestState != 2).ToList();
var g3list = glist.Where(x => x.OrderId == item.OrderId).ToList();
//查询这几个学生累计课时
decimal TotalLearn = CheckList.Where(x => x.OrderId == item.OrderId && x.MonthDate <= Convert.ToDateTime(EDate)).Sum(x => x.CurrentDeductionHours);//累计消费课时 (要查询当前发放提成日期) ld 07-02调整
decimal TotalHours = g3list.Sum(x => x.TotalHours);// 直接根据学生表 总课时计算 (必须签到课时 = 总课时 才发完最后一个月的)
......@@ -745,7 +745,7 @@ namespace Edu.Module.Course
#region 班级提成
//查询是否订单下所有学员都已退学
var g2list = glist.Where(x => x.OrderId == item.OrderId).ToList();
if (g2list.Where(x => x.GuestState == 2).Count() == item.GuestNum)
if (g2list.Where(x => x.GuestState == -1).Count() == item.GuestNum)
{
//所有学生都退学了 直接计算提成 全部一次性发放
if (item.HelpEnterId > 0)
......@@ -1881,7 +1881,7 @@ namespace Edu.Module.Course
}
#region 计算课时
var g3list = glist.Where(x => x.OrderId == item.OrderId && x.GuestState != 2).ToList();
var g3list = glist.Where(x => x.OrderId == item.OrderId).ToList();
//查询这几个学生累计课时
decimal TotalLearn = CheckList.Where(x => x.OrderId == item.OrderId).Sum(x => x.CurrentDeductionHours);//累计消费课时
decimal TotalHours = g3list.Sum(x => x.TotalHours);// 直接根据学生表 总课时计算 (必须签到课时 = 总课时 才发完最后一个月的)
......@@ -2066,7 +2066,7 @@ namespace Edu.Module.Course
#region 班级提成
//查询是否订单下所有学员都已退学
var g2list = glist.Where(x => x.OrderId == item.OrderId).ToList();
if (g2list.Where(x => x.GuestState == 2).Count() == item.GuestNum)
if (g2list.Where(x => x.GuestState == -1).Count() == item.GuestNum)
{
//所有学生都退学了 直接计算提成 全部一次性发放
if (item.HelpEnterId > 0)
......
......@@ -149,7 +149,7 @@ namespace Edu.Module.Course
}
};
var classModel = classRepository.GetEntity(backModel.ClassId);
string Remark = "【" + (classModel?.ClassName ?? "") + "】下,订单" + backModel.OrderId + " 客人退课";
string Remark = backModel.ApplyReason+ "【" + (classModel?.ClassName ?? "") + "】下,订单" + backModel.OrderId + " 客人退课";
var financeObj = new
{
IsPublic,
......
......@@ -22,26 +22,6 @@ namespace Edu.Module.EduTask
/// </summary>
private readonly RB_Change_ClassPlanRepository change_ClassPlanRepository = new RB_Change_ClassPlanRepository();
/// <summary>
/// 获取调课计划列表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Change_ClassPlan_ViewModel> GetChangeClassPlanListModule(RB_Change_ClassPlan_ViewModel query)
{
return change_ClassPlanRepository.GetChangeClassPlanListRepository(query);
}
public bool UpdateChangeClassPlan(int id)
{
return change_ClassPlanRepository.UpdateChangeClassPlan(id);
}
/// <summary>
/// 新增修改调课计划
/// </summary>
......
......@@ -300,7 +300,7 @@ namespace Edu.Module.Finance
/// </summary>
/// <param name="dmodel"></param>
/// <returns></returns>
public decimal GetSellCommissionStatistics(RB_Activity_PeriodsDetail_ViewModel dmodel)
public decimal GetActivityCommissionStatistics(RB_Activity_PeriodsDetail_ViewModel dmodel)
{
return activity_PeriodsDetailRepository.GetSellCommissionStatistics(dmodel);
}
......
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Edu.Cache\Edu.Cache.csproj" />
<ProjectReference Include="..\Edu.Common\Edu.Common.csproj" />
<ProjectReference Include="..\Edu.Model\Edu.Model.csproj" />
<ProjectReference Include="..\Edu.Repository\Edu.Repository.csproj" />
<ProjectReference Include="..\Edu.ThirdCore\Edu.ThirdCore.csproj" />
</ItemGroup>
</Project>
using System;
using System.Collections.Generic;
using System.Linq;
using Edu.Cache.WeChat;
using Edu.Common;
using Edu.Common.API;
using Edu.Common.Enum.Finance;
using Edu.Common.Plugin;
using Edu.Model.CacheModel;
using Edu.Model.ViewModel.WeChat;
using Edu.Repository.WeChat;
using Edu.ThirdCore.QYWinXin;
using VT.FW.DB;
namespace Edu.Module.QYWeChat
{
/// <summary>
/// 企业微信处理类
/// </summary>
public class QYWeChatModule
{
/// <summary>
/// 微信配置
/// </summary>
private readonly RB_WeChat_ConfigRepository weChat_ConfigRepository = new RB_WeChat_ConfigRepository();
#region 微信配置
/// <summary>
/// 获取企业微信配置
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public RB_WeChat_Config_ViewModel GetWeChatConfigModel(RB_WeChat_Config_ViewModel model)
{
var dmodel = weChat_ConfigRepository.GetList(model).FirstOrDefault();
if (dmodel == null) { dmodel = new RB_WeChat_Config_ViewModel(); }
return dmodel;
}
/// <summary>
/// 新增/修改企业微信配置
/// </summary>
/// <param name="demdoel"></param>
/// <returns></returns>
public string SetWeChatConfig(RB_WeChat_Config_ViewModel demdoel)
{
#region 验证一下
//获取两种的token
#region 通讯录
var TelToken = QYWeiXinHelper.GetToken(demdoel.WX_CorpId, demdoel.Employee_Secret);
//更新token缓存
WeChatReidsCache.TokenSet(Cache.CacheKey.QYWeChat_TelToken_Key + demdoel.Group_Id, TelToken.access_token, TelToken.expires_in - 10);
#endregion
#region 外部人员
#endregion
#endregion
if (demdoel.Id > 0)
{
Dictionary<string, object> keyValues = new Dictionary<string, object>() {
{ nameof(RB_WeChat_Config_ViewModel.Name),demdoel.Name},
{ nameof(RB_WeChat_Config_ViewModel.WX_CorpId),demdoel.WX_CorpId},
{ nameof(RB_WeChat_Config_ViewModel.Employee_Secret),demdoel.Employee_Secret},
{ nameof(RB_WeChat_Config_ViewModel.Contact_Secret),demdoel.Contact_Secret},
{ nameof(RB_WeChat_Config_ViewModel.TelEvent_CallBack),demdoel.TelEvent_CallBack},
{ nameof(RB_WeChat_Config_ViewModel.EmpEvent_CallBack),demdoel.EmpEvent_CallBack},
{ nameof(RB_WeChat_Config_ViewModel.Token),demdoel.Token},
{ nameof(RB_WeChat_Config_ViewModel.Encoding_Aes_Key),demdoel.Encoding_Aes_Key},
{ nameof(RB_WeChat_Config_ViewModel.UpdateBy),demdoel.UpdateBy},
{ nameof(RB_WeChat_Config_ViewModel.UpdateTime),demdoel.UpdateTime},
};
List<WhereHelper> wheres = new List<WhereHelper>() {
new WhereHelper(){
FiledName=nameof(RB_WeChat_Config_ViewModel.Id),
FiledValue=demdoel.Id,
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = weChat_ConfigRepository.Update(keyValues, wheres);
return flag ? "" : "出错了,请联系管理员";
}
else {
bool flag = weChat_ConfigRepository.Insert(demdoel) > 0;
return flag ? "" : "出错了,请联系管理员";
}
}
#endregion
}
}
......@@ -209,7 +209,7 @@ from RB_Activity_PeriodsDetail r where {where} group by r.UserId,r.Depart_Id,r.S
where += $@" and r.{nameof(RB_Activity_PeriodsDetail_ViewModel.DSUserName)} like '%{demodel.DSUserName}%'";
}
string sql = $@" select sum(r.CommissionMoney) from RB_Sell_Commission_Details r where {where}";
string sql = $@" select sum(r.CommissionMoney) from RB_Activity_PeriodsDetail r where {where}";
var obj = ExecuteScalar(sql);
return obj == null ? 0 : Convert.ToDecimal(obj);
}
......
......@@ -509,9 +509,6 @@ WHERE c.`Status`=0 and sog.`Status`=0 ");
}
/// <summary>
/// 获取app约课
/// </summary>
......@@ -536,12 +533,9 @@ where a.`Status`=0 and a.IsSubscribe=1 and ClassStatus in(1,2)");
/// <returns></returns>
public int GetMaxClassNoPrefix(string OpenTime)
{
string sql = $@"select Max(ClassLetterNum) as ClassLetterNum from RB_Class where Status =0 and OpenTime ='{OpenTime}'";
string sql = $@"SELECT Max(ClassLetterNum) AS ClassLetterNum FROM RB_Class WHERE Status =0 AND OpenTime ='{OpenTime}'";
var obj = ExecuteScalar(sql);
return obj == null ? 0 : Convert.ToInt32(obj);
}
}
}
\ No newline at end of file
......@@ -313,7 +313,7 @@ group by g.Id;";
{
string sql = $@"SELECT g.OrderId,DATE_FORMAT(c.ClassDate,'%Y-%m') as MonthDateStr,SUM(c.CurrentDeductionHours) CurrentDeductionHours FROM rb_order_guest g
left join rb_class_check c on g.Id = c.OrderGuestId
WHERE g.Group_Id ={groupId} and g.`Status`=0 and g.GuestState <>2 and c.`Status` =0 and g.OrderId in({orderIds})
WHERE g.Group_Id ={groupId} and g.`Status`=0 and c.`Status` =0 and g.OrderId in({orderIds})
group by g.OrderId,DATE_FORMAT(c.ClassDate,'%Y-%m');";
return Get<RB_Class_Check_ViewModel>(sql).ToList();
}
......
......@@ -24,9 +24,10 @@ namespace Edu.Repository.Course
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*,IFNULL(B.RoomName,'') AS RoomName,IFNULL(T.TeacherName,'') AS TeacherName,IFNULL(T.TeacherHead,'') AS UserIcon
SELECT A.*,IFNULL(B.RoomName,'') AS RoomName,IFNULL(T.TeacherName,'') AS TeacherName,IFNULL(T.TeacherHead,'') AS UserIcon,IFNULL(C.ClassName,'') AS ClassName
FROM RB_Class_Plan AS A LEFT JOIN rb_class_room AS B ON A.ClassRoomId=B.RoomId
LEFT JOIN rb_teacher AS T ON A.TeacherId=T.TId
LEFT JOIN rb_class AS C ON A.ClassId=C.ClassId
WHERE 1=1
");
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Status), (int)DateStateEnum.Normal);
......@@ -68,6 +69,10 @@ WHERE 1=1
{
builder.AppendFormat(" AND A.{0}<='{1} 23:59:59' ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.EndTime);
}
if (query.IsQRepeat == 1)
{
builder.AppendFormat(" AND IFNULL(A.{0},'')<>'' ", nameof(RB_Class_Plan_ViewModel.RepeatPlanIds));
}
}
return Get<RB_Class_Plan_ViewModel>(builder.ToString()).ToList();
}
......@@ -146,6 +151,63 @@ WHERE 1=1
return Get<RB_Class_Plan_ViewModel>(builder.ToString()).ToList();
}
/// <summary>
/// 获取上课计划
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Class_Plan_ViewModel> GetClassPlanList_V2(RB_Class_Plan_ViewModel query)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT a.*,c.Teacher_Id,c.ClassName,c.ClassType,c.ClassHourMinute,T.TeacherName ,cou.CourseName
FROM rb_class_plan as a
LEFT JOIN rb_class c on a.ClassId = c.ClassId
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 in(2,3) and c.`Status`=0");
if (query != null)
{
if (query.Group_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Group_Id), query.Group_Id);
}
if (query.School_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.School_Id), query.School_Id);
}
if (query.ClassId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassId), query.ClassId);
}
if (query.ClassRoomId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassRoomId), query.ClassRoomId);
}
if (query.ClassPlanId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassPlanId), query.ClassPlanId);
}
if (query.TeacherId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.TeacherId), query.TeacherId);
}
if (!string.IsNullOrEmpty(query.Q_TeacherIds))
{
builder.AppendFormat(" AND A.{0} in({1}) ", nameof(RB_Class_Plan_ViewModel.TeacherId), query.Q_TeacherIds);
}
if (!string.IsNullOrEmpty(query.StartTime))
{
builder.AppendFormat(" AND A.{0} >='{1}' ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.StartTime);
}
if (!string.IsNullOrEmpty(query.EndTime))
{
builder.AppendFormat(" AND A.{0} <='{1} 23:59:59' ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.EndTime);
}
}
return Get<RB_Class_Plan_ViewModel>(builder.ToString()).ToList();
}
/// <summary>
/// 获取班级上课计划
/// </summary>
......@@ -167,18 +229,10 @@ WHERE a.`Status`=0 ");
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Group_Id), query.Group_Id);
}
if (query.School_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.School_Id), query.School_Id);
}
if (query.ClassId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassId), query.ClassId);
}
if (query.Status >= 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Status), (int)query.Status);
}
if (!string.IsNullOrEmpty(query.QClassDateStr))
{
builder.AppendFormat(@" AND DATE_FORMAT(a.ClassDate,'%Y-%m-%d')=DATE_FORMAT('{0}','%Y-%m-%d') ", query.QClassDateStr);
......@@ -208,6 +262,23 @@ WHERE a.`Status`=0 ");
return base.Exists(list);
}
/// <summary>
/// 批量验证同一班级的上课计划
/// </summary>
/// <param name="classId"></param>
/// <param name="qClassDate"></param>
/// <returns></returns>
public List<RB_Class_Plan_ViewModel> BatchCheckExistsRepository(int classId, string qClassDate)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*
FROM rb_class_plan AS A
WHERE A.`Status`=0 AND A.ClassId={0} AND A.ClassDate IN({1})
", classId, qClassDate);
return Get<RB_Class_Plan_ViewModel>(builder.ToString()).ToList();
}
/// <summary>
/// 老师改变则修改后面的代课老师为新的教师编号
/// </summary>
......@@ -237,62 +308,6 @@ WHERE ClassId={1} AND ClassDate>'{2}'
return base.Execute(builder.ToString()) > 0;
}
/// <summary>
/// 获取上课计划
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Class_Plan_ViewModel> GetClassPlanList_V2(RB_Class_Plan_ViewModel query)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT a.*,c.Teacher_Id,c.ClassName,c.ClassType,c.ClassHourMinute,T.TeacherName ,cou.CourseName
FROM rb_class_plan as a
LEFT JOIN rb_class c on a.ClassId = c.ClassId
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 in(2,3) and c.`Status`=0");
if (query != null)
{
if (query.Group_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Group_Id), query.Group_Id);
}
if (query.School_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.School_Id), query.School_Id);
}
if (query.ClassId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassId), query.ClassId);
}
if (query.ClassRoomId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassRoomId), query.ClassRoomId);
}
if (query.ClassPlanId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassPlanId), query.ClassPlanId);
}
if (query.TeacherId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.TeacherId), query.TeacherId);
}
if (!string.IsNullOrEmpty(query.Q_TeacherIds))
{
builder.AppendFormat(" AND A.{0} in({1}) ", nameof(RB_Class_Plan_ViewModel.TeacherId), query.Q_TeacherIds);
}
if (!string.IsNullOrEmpty(query.StartTime))
{
builder.AppendFormat(" AND A.{0} >='{1}' ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.StartTime);
}
if (!string.IsNullOrEmpty(query.EndTime))
{
builder.AppendFormat(" AND A.{0} <='{1} 23:59:59' ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.EndTime);
}
}
return Get<RB_Class_Plan_ViewModel>(builder.ToString()).ToList();
}
/// <summary>
/// 获取班级最后一次上课日期
......@@ -312,7 +327,7 @@ WHERE 1=1 ");
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.Group_Id), query.Group_Id);
}
if (query.ClassId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassId), query.ClassId);
......@@ -326,7 +341,6 @@ WHERE 1=1 ");
}
/// <summary>
/// 获取班级上课记录
/// </summary>
......@@ -397,7 +411,6 @@ WHERE p.`Status`=0 AND p.Group_Id={group_Id} AND p.ClassId ={classId}
}
}
/// <summary>
/// 获取班级上课计划列表
/// </summary>
......@@ -457,35 +470,9 @@ WHERE 1=1 and class.ClassStatus in(1,2) and t.`Status`=0 and a.`Status`=0 and
builder.AppendFormat(" AND DATE_FORMAT(A.{0},'%y-%m-%d')<=DATE_FORMAT('{1}','%y-%m-%d') ", nameof(RB_Class_Plan_ViewModel.ClassDate), query.EndTime);
}
}
return Get<RB_Class_Plan_ViewModel>(builder.ToString()).ToList();
//// string sql = $@"
////SELECT * from (SELECT IF
//// (
//// @class = a.ClassId,
//// IF
//// ( @score = a.ClassDate, @rank := @rank, @rank := @colum + 1 ),
//// @rank := 1
//// ) AS Ranks,
////IF
//// ( @class = a.ClassId, @colum := @colum + 1, @colum := 1 ) AS colums,
//// (@class := a.ClassId) as rr,
//// ( @score := a.ClassDate) as yy ,
////A.*,class.ClassName,lp.LessonPlanNum,IFNULL(B.RoomName,'') AS RoomName,IFNULL(T.TeacherName,'') AS TeacherName,IFNULL(T.TeacherHead,'') AS UserIcon
////FROM RB_Class_Plan AS A LEFT JOIN rb_class_room AS B ON A.ClassRoomId=B.RoomId
////LEFT JOIN rb_class as class on a.ClassId=class.ClassId
//// LEFT JOIN rb_teacher AS T ON A.TeacherId=T.TId
////LEFT JOIN (SELECT ClassPlanId,COUNT(*) as LessonPlanNum from rb_class_lessonplan where `Status`=0 GROUP BY ClassPlanId)as lp on a.ClassPlanId=lp.ClassPlanId,
////( SELECT @rank := 0, @class := 0, @score := '2020-01-01', @colum := 0 ) r
////WHERE 1=1 and class.ClassStatus=2 and t.`Status`=0 and a.`Status`=0 ORDER BY a.ClassId,a.ClassDate) as a where 1=1 {builder.ToString()} ";
// string sql = $@"CALL proc_GetClassPlanRank('{builder.ToString()}')";
// return Get<RB_Class_Plan_ViewModel>(sql).ToList();
return Get<RB_Class_Plan_ViewModel>(builder.ToString()).ToList();
}
/// <summary>
/// 获取学生上课计划列表
/// </summary>
......@@ -613,21 +600,11 @@ GROUP BY A.ClassPlanId,A.ClassId ,A.ClassDate,A.ClassRoomId,A.CompleteProgress
/// <returns></returns>
public double GetCurrentPlanStudyHoursRepository(int planId)
{
// string sql = @"select
// (select SUM(timestampdiff(MINUTE, Concat(SUBSTRING_INDEX(d.ClassDate, ' ', 1), ' ', c.StartTime), Concat(SUBSTRING_INDEX(d.ClassDate, ' ', 1), ' ', c.EndTime))) / 45
// from rb_class_time c left
// join rb_class_plan d on c.ClassPlanId = d.ClassPlanId
// where d.ClassDate < b.ClassDate and c.ClassId = b.ClassId)
//from rb_class_plan b where b.ClassPlanId = " + planId + " and b.`Status`= 0";
string sql = "select (select Count(0) from rb_class_plan b where b.ClassId=a.ClassId and b.ClassDate<a.ClassDate) from rb_class_plan a where ClassPlanId=" + planId + " and `Status`=0";
object obj = ExecuteScalar(sql);
return Convert.IsDBNull(obj) ? -1 : Convert.ToDouble(obj);
}
#region 老师-我的课表
/// <summary>
......@@ -681,7 +658,7 @@ GROUP BY A.ClassPlanId,A.ClassId ,A.ClassDate,A.ClassRoomId,A.CompleteProgress
{
where.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassId), query.ClassId);
}
if (query.OrderBy==1)
if (query.OrderBy == 1)
{
orderby = " a.ClassDate desc ,a.NewPlanDateTime asc";
}
......@@ -711,7 +688,7 @@ INNER JOIN rb_class AS B ON A.ClassId=B.ClassId
LEFT JOIN ((SELECT ClassId,COUNT(*) as TotalPlanNum from rb_class_plan where `Status`=0 GROUP BY ClassId)) as plan on plan.ClassId=a.ClassId
WHERE 1=1 AND A.`Status`=0 {0}
", where.ToString());
if (query.ClassType == 1)
{
builder.AppendFormat(@"SELECT A.ClassType,A.ClassTimeId,A.Teacher_Id,A.TeacherName,A.RoomName, a.RoomNum,A.StartTime,A.EndTime,A.ClassPlanId,A.ClassId,A.ClassDate,A.ClassRoomId,A.ClassName,A.CourseName,a.TotalPlanNum,
......@@ -736,5 +713,208 @@ GROUP BY a.ClassType,A.ClassTimeId,A.ClassPlanId,A.ClassId ,A.ClassDate,A.ClassR
return GetPage<RB_Class_Plan_ViewModel>(pageIndex, pageSize, out rowsCount, builder.ToString()).ToList();
}
#endregion
#region 检查上课计划是否重复
/// <summary>
/// 检查上课计划是否存在时间上的交集【HK2021-07-28新增】
/// </summary>
/// <param name="classId"></param>
/// <param name="timeList"></param>
/// <returns></returns>
public List<RB_Class_Plan_ViewModel> CheckClassPlanRepository(int classId,List<TimeItem> timeList)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.* FROM
(
SELECT A.*,B.ClassTimeId,CONCAT(DATE_FORMAT(A.ClassDate,'%Y-%m-%d'),' ',B.StartTime,':00') AS StartTime,CONCAT(DATE_FORMAT(A.ClassDate,'%Y-%m-%d'),' ',B.EndTime,':00') AS EndTime
FROM rb_class_plan AS A INNER JOIN rb_class_time AS B ON A.ClassPlanId=B.ClassPlanId
INNER JOIN rb_class AS C ON A.ClassId=C.ClassId
WHERE A.`Status`=0 AND A.ClassDate>='{0}' AND C.ClassStatus IN(1,2)
) AS A
WHERE 1=1
", Common.ConvertHelper.FormatDate(DateTime.Now));
if (classId > 0)
{
builder.AppendFormat(" AND A.{0}<>{1} ", nameof(RB_Class_Plan_ViewModel.ClassId), classId);
}
if (timeList != null && timeList.Count > 0)
{
string tempStr = "";
int index = 0;
foreach (var item in timeList)
{
if (index == 0)
{
tempStr += string.Format(" (NOT (A.StartTime > '{0}' OR A.EndTime < '{1}')) ", item.EndTime, item.StartTime);
}
else
{
tempStr += string.Format(" OR (NOT (A.StartTime > '{0}' OR A.EndTime < '{1}')) ", item.EndTime, item.StartTime);
}
index++;
}
if (!string.IsNullOrEmpty(tempStr))
{
builder.AppendFormat(" AND ({0}) ", tempStr);
}
}
return Get<RB_Class_Plan_ViewModel>(builder.ToString()).ToList();
}
/// <summary>
/// 批量添加上课计划
/// </summary>
/// <param name="planList"></param>
/// <returns></returns>
public List<RB_Class_Plan_ViewModel> BatchInsertClassPlanRepository(List<RB_Class_Plan_ViewModel> planList)
{
List<RB_Class_Plan_ViewModel> newPlanList = new List<RB_Class_Plan_ViewModel>();
bool flag = true;
if (planList != null && planList.Count > 0)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(" INSERT INTO RB_Class_Plan(ClassId,ClassDate,Status,ClassRoomId,Group_Id,School_Id,TeacherId,BeiKeStatus,FanKuiStatus,ParentFanKuiStatus) ");
builder.AppendFormat(" VALUES ");
string tempStr = "";
foreach (var item in planList)
{
tempStr += $",({item.ClassId},'{Common.ConvertHelper.FormatDate(item.ClassDate)}',0,{item.ClassRoomId},{item.Group_Id},{item.School_Id},{item.TeacherId},0,0,0) ";
}
builder.Append(tempStr.TrimStart(','));
flag = base.Execute(builder.ToString()) > 0;
if (flag)
{
newPlanList = GetClassPlanListRepository(new RB_Class_Plan_ViewModel() { ClassId = planList[0].ClassId, StartTime = Common.ConvertHelper.FormatDate(DateTime.Now) });
}
}
return newPlanList;
}
/// <summary>
/// 批量更新上课计划冲突的计划编号
/// </summary>
/// <param name="planList"></param>
/// <returns></returns>
public bool BatchUpdateClassPlanRepository(List<RB_Class_Plan_ViewModel> planList)
{
bool flag = true;
if (planList != null && planList.Count > 0)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(" INSERT INTO RB_Class_Plan(ClassPlanId,RepeatPlanIds) ");
builder.AppendFormat(" VALUES ");
string tempStr = "";
foreach (var item in planList)
{
tempStr += $",({item.ClassPlanId},'{item.RepeatPlanIds}') ";
}
builder.Append(tempStr.TrimStart(','));
builder.Append(" ON DUPLICATE KEY UPDATE RepeatPlanIds =VALUES(RepeatPlanIds) ");
flag = base.Execute(builder.ToString()) > 0;
}
return flag;
}
/// <summary>
/// 检查班级上课计划是否存在重复,有重复则更新冲突的编号
/// </summary>
/// <param name="ClassId"></param>
/// <param name="result"></param>
public void CheckClassPlanRepeatRepository(int ClassId, out bool result)
{
result = false;
List<TimeItem> timeItemList = new List<TimeItem>();
var newPlanList = GetClassPlanListExtRepository(new RB_Class_Plan_ViewModel()
{
ClassId = ClassId,
StartTime = Common.ConvertHelper.FormatDate(DateTime.Now)
});
foreach (var item in newPlanList)
{
timeItemList.Add(new TimeItem()
{
StartTime = Common.ConvertHelper.FormatDate(item.ClassDate) + " " + item.StartTime + ":00",
EndTime = Common.ConvertHelper.FormatDate(item.ClassDate) + " " + item.EndTime + ":00",
});
}
var repeatList = CheckClassPlanRepository(ClassId, timeItemList);
var updatePlanList = new List<RB_Class_Plan_ViewModel>();
foreach (var item in newPlanList)
{
var tempRepeatList = repeatList?.Where(qitem => qitem.ClassDate == item.ClassDate)?.ToList();
List<int> ids = new List<int>();
if (tempRepeatList != null && tempRepeatList.Count > 0)
{
if (item.TeacherId > 0)
{
var teacherList = tempRepeatList?.Where(qitem => qitem.TeacherId == item.TeacherId)?.ToList();
if (teacherList != null && teacherList.Count > 0)
{
var tempIds = Common.ConvertHelper.StringToList(string.Join(",", teacherList.GroupBy(qitem => qitem.ClassPlanId).Select(qitem => qitem.Key)));
if (tempIds != null && tempIds.Count > 0)
{
ids.AddRange(tempIds);
}
}
}
if (item.ClassRoomId > 0)
{
var classroomList = tempRepeatList?.Where(qitem => qitem.ClassRoomId == item.ClassRoomId)?.ToList();
if (classroomList != null && classroomList.Count > 0)
{
var tempIds = Common.ConvertHelper.StringToList(string.Join(",", classroomList.GroupBy(qitem => qitem.ClassPlanId).Select(qitem => qitem.Key)));
if (tempIds != null && tempIds.Count > 0)
{
ids.AddRange(tempIds);
}
}
}
}
string RepeatPlanIds = "";
if (ids != null && ids.Count > 0)
{
RepeatPlanIds = string.Join(",", ids);
if (!result)
{
result = true;
}
}
updatePlanList.Add(new RB_Class_Plan_ViewModel()
{
ClassPlanId = item.ClassPlanId,
RepeatPlanIds = RepeatPlanIds,
});
}
if (updatePlanList != null && updatePlanList.Count > 0)
{
BatchUpdateClassPlanRepository(updatePlanList);
}
}
/// <summary>
/// 批量修改教室或者老师
/// </summary>
/// <param name="TeacherId"></param>
/// <param name="ClassRoomId"></param>
/// <param name="planIds"></param>
/// <returns></returns>
public bool UpdateClassPlanTeacherOrClassRoomIdRepository(int TeacherId, int ClassRoomId, string planIds)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(" UPDATE rb_class_plan SET ");
if (TeacherId > 0)
{
builder.AppendFormat(" TeacherId={0} ", TeacherId);
}
if (ClassRoomId > 0)
{
builder.AppendFormat(" ClassRoomId={0} ", ClassRoomId);
}
builder.AppendFormat(" WHERE ClassPlanId IN({0}) ", planIds);
return base.Execute(builder.ToString()) > 0;
}
#endregion
}
}
\ No newline at end of file
}
......@@ -203,7 +203,6 @@ where b.`Status`=0 and DATE_FORMAT(b.ClassDate,'%y/%m/%d')=DATE_FORMAT(NOW(),'%y
return Get<RB_Class_Time_ViewModel>(builder.ToString()).ToList();
}
#region 教师上课挂件查询
/// <summary>
......@@ -267,7 +266,28 @@ where a.`Status`=0 and c.ClassStatus in(1,2) and a.TeacherId={TId} and c.`Sta
#endregion
/// <summary>
/// 批量添加上课计划时间
/// </summary>
/// <param name="timeList"></param>
/// <returns></returns>
public bool BatchInsertClassTimeRepository(List<RB_Class_Time> timeList)
{
bool flag = true;
if (timeList != null && timeList.Count > 0)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(" INSERT INTO RB_Class_Time(ClassId,ClassPlanId,StartTime,EndTime,Group_Id,School_Id,ClassStatus,TimeHour) ");
builder.AppendFormat(" VALUES ");
string tempStr = "";
foreach (var item in timeList)
{
tempStr += $",({item.ClassId},{item.ClassPlanId},'{item.StartTime}','{item.EndTime}',{item.Group_Id},{item.School_Id},0,{item.TimeHour} ) ";
}
builder.Append(tempStr.TrimStart(','));
flag = base.Execute(builder.ToString()) > 0;
}
return flag;
}
}
}
......@@ -700,11 +700,11 @@ WHERE 1=1 and A.Status=0 and class.Status=0 and class.ClassStatus <>4 and b.Or
if (demodel.OrderTime.HasValue)
{
builder.AppendFormat($@" AND DATE_FORMAT(B.CreateTime,'%y-%m-%d')>=DATE_FORMAT('{demodel.OrderTime.Value.ToString("yyyy-MM-dd")}','%y-%m-%d')");
builder.AppendFormat($@" AND DATE_FORMAT(B.CreateTime,'%y-%m-%d')>=DATE_FORMAT('{Common.ConvertHelper.FormatDate(demodel.OrderTime)}','%y-%m-%d')");
}
if (demodel.EndOrderTime.HasValue)
{
builder.AppendFormat($@" AND DATE_FORMAT(B.CreateTime,'%y-%m-%d')<=DATE_FORMAT('{demodel.EndOrderTime.Value.ToString("yyyy-MM-dd")}','%y-%m-%d')");
builder.AppendFormat($@" AND DATE_FORMAT(B.CreateTime,'%y-%m-%d')<=DATE_FORMAT('{Common.ConvertHelper.FormatDate(demodel.EndOrderTime)}','%y-%m-%d')");
}
if (demodel.EffectStatus.HasValue)
{
......
......@@ -41,6 +41,7 @@ namespace Edu.Repository.EduTask
/// 课程日志记录表
/// </summary>
private readonly Log.RB_Class_LogRepository classLogRepository = new Log.RB_Class_LogRepository();
/// <summary>
/// 获取调课计划列表
/// </summary>
......@@ -219,7 +220,8 @@ WHERE 1=1
}
}
else
{//全局修改
{
//全局修改
AllChangePlanItem allChangePlanModel = new AllChangePlanItem();
//目标数据
if (!string.IsNullOrWhiteSpace(model.TargetData))
......
using Edu.Common.Enum;
using Edu.Model.Entity.WeChat;
using Edu.Model.ViewModel.WeChat;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using VT.FW.DB.Dapper;
namespace Edu.Repository.WeChat
{
/// <summary>
/// 企业配置仓储层
/// </summary>
public class RB_WeChat_ConfigRepository : BaseRepository<RB_WeChat_Config>
{
/// <summary>
/// 获取列表
/// </summary>
/// <param name="demodel"></param>
/// <returns></returns>
public List<RB_WeChat_Config_ViewModel> GetList(RB_WeChat_Config_ViewModel demodel)
{
string where = $@" 1=1 ";
if (demodel.Group_Id > 0)
{
where += $@" and r.{nameof(RB_WeChat_Config_ViewModel.Group_Id)} ={demodel.Group_Id}";
}
string sql = $@"
SELECT * From RB_WeChat_Config r
WHERE {where}
ORDER BY r.Id DESC ";
return Get<RB_WeChat_Config_ViewModel>(sql).ToList();
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
......@@ -15,6 +15,7 @@
<PackageReference Include="Aliyun.Net.SDK.Core" Version="1.0.3" />
<PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.10.0" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="Senparc.Weixin.Work" Version="3.9.600" />
</ItemGroup>
<ItemGroup>
......
using System;
using System.Collections.Generic;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Senparc.Weixin.Work;
using Senparc.Weixin.Work.AdvancedAPIs;
using Senparc.Weixin.Work.Containers;
namespace Edu.ThirdCore.QYWinXin
{
/// <summary>
/// 企业微信处理
/// </summary>
public class QYWeiXinHelper
{
/// <summary>
/// 获取token
/// </summary>
/// <returns></returns>
public static Senparc.Weixin.Work.Entities.AccessTokenResult GetToken(string corpId, string corpSecret)
{
return Senparc.Weixin.Work.CommonAPIs.CommonApi.GetToken(corpId, corpSecret);
}
/// <summary>
/// 获取部门列表
/// </summary>
/// <param name="token"></param>
/// <returns></returns>
public static object GetDepartmentList(string token)
{
return Senparc.Weixin.Work.AdvancedAPIs.MailListApi.GetDepartmentList(token);
}
}
}
......@@ -368,13 +368,163 @@ namespace Edu.WebApi.Controllers.Course
extModel.DefaultTimeJson = "";
}
bool flag = classModule.SetClassModule(extModel);
if (flag)
return flag ? ApiResult.Success(data:extModel) : ApiResult.Failed();
}
/// <summary>
/// 批量添加上课计划
/// </summary>
/// <returns></returns>
public ApiResult BatchSetClassPlan()
{
var ClassId = base.ParmJObj.GetInt("ClassId");
var planList = Common.Plugin.JsonHelper.DeserializeObject<List<RB_Class_Plan_ViewModel>>(base.ParmJObj.GetStringValue("PlanList"));
List<RB_Class_Plan_ViewModel> result = new List<RB_Class_Plan_ViewModel>();
bool flag = false;
bool IsRepeat = false;
var t1 = new Task(() => { flag = classModule.AddClassPlanModule(ClassId, planList,base.UserInfo,out IsRepeat); });
t1.Start();
Task.WaitAll(t1);
return flag ? ApiResult.Success(data: IsRepeat) : ApiResult.Failed();
}
/// <summary>
/// 批量修改上课计划
/// </summary>
/// <returns></returns>
public ApiResult BatchUpdateClassPlan()
{
var ClassId = base.ParmJObj.GetInt("ClassId");
//调动类型(1-老师,2-教室,3-时段)
var ChangeType = base.ParmJObj.GetInt("ChangeType");
var ClassRoomId = base.ParmJObj.GetInt("ClassRoomId");
var TeacherId = base.ParmJObj.GetInt("TeacherId");
var timeStr = base.ParmJObj.GetStringValue("PlanTimeList");
var TimeList = new List<TimeItem>();
if (!string.IsNullOrEmpty(timeStr))
{
classModule.UpdateClassEndDateModule(extModel.ClassId);
TimeList = Common.Plugin.JsonHelper.DeserializeObject<List<TimeItem>>(timeStr);
}
var planIds = base.ParmJObj.GetStringValue("ClassPlanIdList");
var ClassPlanIdList = new List<int>();
if (!string.IsNullOrEmpty(planIds))
{
ClassPlanIdList = Common.Plugin.JsonHelper.DeserializeObject<List<int>>(planIds);
}
if (ClassPlanIdList == null || (ClassPlanIdList != null && ClassPlanIdList.Count <= 0))
{
return ApiResult.ParamIsNull(message: "请选择要调整的数据!");
}
if (ChangeType == 1 && TeacherId <= 0)
{
return ApiResult.ParamIsNull(message: "请选择教学老师!");
}
if (ChangeType == 2 && ClassRoomId <= 0)
{
return ApiResult.ParamIsNull(message: "请选择上课教室!");
}
if (ChangeType == 3 && (TimeList == null || (TimeList != null && TimeList.Count <= 0)))
{
return ApiResult.ParamIsNull(message: "请选择上课时间段!");
}
bool flag = classModule.BatchUpdateClassPlanModule(ClassId,ChangeType, ClassRoomId, TeacherId, ClassPlanIdList,TimeList,base.UserInfo,out bool result);
return flag ? ApiResult.Success(data: result) : ApiResult.Failed();
}
/// <summary>
/// 忽略调整上课计划
/// </summary>
/// <returns></returns>
public ApiResult IgnoreClassPlan()
{
var ClassId = base.ParmJObj.GetInt("ClassId");
var flag = classModule.IgnoreClassPlanModule(ClassId, base.UserInfo);
return flag ? ApiResult.Success() : ApiResult.Failed();
}
/// <summary>
/// 批量调整上课计划多条数据修改
/// </summary>
public ApiResult UpdateClassPlanSingle()
{
List<RB_Class_Plan_ViewModel> list = new List<RB_Class_Plan_ViewModel>();
var planStr = base.ParmJObj.GetStringValue("PlanList");
if (!string.IsNullOrEmpty(planStr))
{
JArray jArray = JArray.Parse(planStr);
foreach (var jItem in jArray)
{
JObject jobj = JObject.Parse(jItem.ToString());
var extModel = new RB_Class_Plan_ViewModel()
{
ClassPlanId = jobj.GetInt("ClassPlanId"),
ClassId = jobj.GetInt("ClassId"),
ClassDate = jobj.GetDateTime("ClassDate"),
Status = Common.Enum.DateStateEnum.Normal,
ClassRoomId = jobj.GetInt("ClassRoomId"),
TeacherId = jobj.GetInt("TeacherId"),
};
try
{
extModel.PlanTimeList = Common.Plugin.JsonHelper.DeserializeObject<List<RB_Class_Time_ViewModel>>(jobj.GetStringValue("PlanTimeList"));
}
catch (Exception ex)
{
Common.Plugin.LogHelper.Write(ex, "UpdateClassPlanSingle_PlanTimeList");
}
if (extModel.PlanTimeList != null && extModel.PlanTimeList.Count > 0)
{
foreach (var item in extModel.PlanTimeList)
{
string message = "";
if (!Common.ConvertHelper.IsTime(item.StartTime + ":00"))
{
message = "【" + item.StartTime + "】格式不正确!(参考格式为 00:00)";
}
if (!Common.ConvertHelper.IsTime(item.EndTime + ":00"))
{
if (!string.IsNullOrEmpty(message))
{
message += ",";
}
message += "【" + item.EndTime + "】格式不正确!(参考格式为 00:00)";
}
if (!string.IsNullOrEmpty(message))
{
return ApiResult.ParamIsNull(message: message);
}
}
}
list.Add(extModel);
}
}
if (list == null || (list != null && list.Count <= 0))
{
return ApiResult.ParamIsNull(message: "请选择要调整的上课计划!");
}
var flag = classModule.UpdateClassPlanSingleModule(list, base.UserInfo, out bool result);
return flag ? ApiResult.Success(data: result) : ApiResult.Failed();
}
/// <summary>
/// 获取有冲突的上课计划
/// </summary>
/// <returns></returns>
public ApiResult GetRepeatClassPlan()
{
var ClassId = base.ParmJObj.GetInt("ClassId");
var classModel = classModule.GetClassModule(ClassId);
var obj = classModule.GetRepeatClassPlanModule(ClassId);
var data = new
{
ClassId,
classModel?.ClassName,
classModel?.ClassNo,
RepeatList= obj,
};
return ApiResult.Success(data: data);
}
/// <summary>
/// 初始化数据
/// </summary>
......@@ -411,8 +561,8 @@ namespace Edu.WebApi.Controllers.Course
{
return ApiResult.ParamIsNull(message: "未找到此班级,请刷新页面重试!");
}
bool flag = classModule.SetClassStatusModule(extModel,out string message);
return flag ? ApiResult.Success(message: message) : ApiResult.Failed(message: message);
bool flag = classModule.SetClassStatusModule(extModel,out string message, out bool result);
return flag ? ApiResult.Success(message: message, data: result) : ApiResult.Failed(message: message, data: result);
}
/// <summary>
......@@ -919,8 +1069,6 @@ namespace Edu.WebApi.Controllers.Course
return result ? ApiResult.Success() : ApiResult.Failed();
}
/// <summary>
/// 邀请学生
/// </summary>
......@@ -942,6 +1090,7 @@ namespace Edu.WebApi.Controllers.Course
bool result = classModule.AddClassStudentDropOutModule(model, base.UserInfo.AccountName);
return result ? ApiResult.Success() : ApiResult.Failed();
}
/// <summary>
/// 获取教室页列表
/// </summary>
......@@ -958,13 +1107,11 @@ namespace Edu.WebApi.Controllers.Course
TeacherId = base.ParmJObj.GetInt("TeacherId")
};
var list = classModule.GetClassPlanLogPageListModule(pageModel.PageIndex, pageModel.PageSize, out long rowsCount, query);
pageModel.Count = rowsCount;
pageModel.PageData = list;
return ApiResult.Success(data: pageModel);
}
/// <summary>
/// 多人签到【后台】
/// </summary>
......@@ -1014,7 +1161,7 @@ namespace Edu.WebApi.Controllers.Course
}
//判断今天有课没有
var planList = classModule.GetClassPlanModelRepository(new RB_Class_Plan_ViewModel
var planList = classModule.GetClassPlanEntityModule(new RB_Class_Plan_ViewModel
{
Group_Id = base.UserInfo.Group_Id,
ClassId = list.FirstOrDefault().ClassId,
......@@ -1111,7 +1258,7 @@ namespace Edu.WebApi.Controllers.Course
var orderGuestList = classModule.GetOrderGuestListModule(new RB_Order_Guest_ViewModel { Group_Id = base.UserInfo.Group_Id, ClassId = exModel.ClassId });
//判断今天有课没有
var planList = classModule.GetClassPlanModelRepository(new RB_Class_Plan_ViewModel
var planList = classModule.GetClassPlanEntityModule(new RB_Class_Plan_ViewModel
{
Group_Id = base.UserInfo.Group_Id,
ClassId = exModel.ClassId,
......@@ -1153,7 +1300,6 @@ namespace Edu.WebApi.Controllers.Course
}
/// <summary>
/// 获取缺课分页列表
/// </summary>
......
......@@ -261,16 +261,5 @@ namespace Edu.WebApi.Controllers.EduTask
bool flag = changeClassPlanModule.SetChangeClassPlanModule(model, receiptFile);
return flag ? ApiResult.Success() : ApiResult.Failed();
}
public ApiResult TestUpdateClassPlan()
{
int id = base.ParmJObj.GetInt("Id");
var result = changeClassPlanModule.UpdateChangeClassPlan(id);
return ApiResult.Success("");
}
}
}
......@@ -249,7 +249,7 @@ namespace Edu.WebApi.Controllers.Finance
dmodel.Group_Id = userInfo.Group_Id;
var list = activityModule.GetActivityCommissionStatisticsPageList(pageModel.PageIndex, pageModel.PageSize, out long count, dmodel);
decimal TotalMoney = activityModule.GetSellCommissionStatistics(dmodel);
decimal TotalMoney = activityModule.GetActivityCommissionStatistics(dmodel);
pageModel.Count = Convert.ToInt32(count);
pageModel.PageData = new
{
......@@ -309,7 +309,7 @@ namespace Edu.WebApi.Controllers.Finance
try
{
var list = activityModule.GetActivityCommissionStatisticsPageList(1, 1000000, out long count, dmodel);
decimal TotalMoney = activityModule.GetSellCommissionStatistics(dmodel);
decimal TotalMoney = activityModule.GetActivityCommissionStatistics(dmodel);
#region 组装数据
foreach (var item in list)
{
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Edu.Cache.User;
using Edu.Common.API;
using Edu.Common.Enum.Finance;
using Edu.Common.Plugin;
using Edu.Model.ViewModel.WeChat;
using Edu.Module.QYWeChat;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
namespace Edu.WebApi.Controllers.Finance
{
/// <summary>
/// 企业微信接口
/// </summary>
[Route("api/[controller]/[action]")]
[ApiExceptionFilter]
[ApiController]
[EnableCors("AllowCors")]
public class QYWeChatController : BaseController
{
/// <summary>
/// 企业微信处理类对象
/// </summary>
private readonly QYWeChatModule weChatModule = new QYWeChatModule();
#region 微信配置
/// <summary>
/// 获取活动配置
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetWeChatConfigInfo() {
var userInfo = base.UserInfo;
var model = weChatModule.GetWeChatConfigModel(new RB_WeChat_Config_ViewModel() { Group_Id = userInfo.Group_Id });
return ApiResult.Success("", new
{
model.Id,
model.Name,
model.WX_CorpId,
model.Social_Code,
model.Employee_Secret,
model.Contact_Secret,
model.TelEvent_CallBack,
model.Token,
model.Encoding_Aes_Key,
model.EmpEvent_CallBack,
model.UpdateBy,
UpdateByName = UserReidsCache.GetUserLoginInfo(model.UpdateBy)?.AccountName ?? "",
UpdateTime = model.UpdateTime.ToString("yyyy-MM-dd HH:mm")
});
}
/// <summary>
/// 新增/修改 活动配置
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetWeChatConfig() {
var userInfo = base.UserInfo;
RB_WeChat_Config_ViewModel demdoel = JsonHelper.DeserializeObject<RB_WeChat_Config_ViewModel>(RequestParm.Msg.ToString());
demdoel.Group_Id = userInfo.Group_Id;
demdoel.CreateBy = userInfo.Id;
demdoel.CreateTime = DateTime.Now;
demdoel.UpdateBy = userInfo.Id;
demdoel.UpdateTime = DateTime.Now;
string msg = weChatModule.SetWeChatConfig(demdoel);
if (msg == "")
{
return ApiResult.Success();
}
else {
return ApiResult.Failed(msg);
}
}
#endregion
}
}
......@@ -45,6 +45,7 @@
<ProjectReference Include="..\Edu.Module.OKR\Edu.Module.OKR.csproj" />
<ProjectReference Include="..\Edu.Module.Public\Edu.Module.Public.csproj" />
<ProjectReference Include="..\Edu.Module.Question\Edu.Module.Question.csproj" />
<ProjectReference Include="..\Edu.Module.QYWeChat\Edu.Module.QYWeChat.csproj" />
<ProjectReference Include="..\Edu.Module.StudyAbroad\Edu.Module.StudyAbroad.csproj" />
<ProjectReference Include="..\Edu.Module.System\Edu.Module.System.csproj" />
<ProjectReference Include="..\Edu.Module.User\Edu.Module.User.csproj" />
......
......@@ -10,6 +10,11 @@ using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using Senparc.CO2NET;
using Senparc.Weixin.Entities;
using Senparc.Weixin.RegisterServices;
using Senparc.Weixin.Work;
namespace Edu.WebApi
{
......@@ -62,6 +67,8 @@ namespace Edu.WebApi
"https://mall.oytour.com"
};
services.AddCors(options => options.AddPolicy("AllowCors", policy => policy.AllowAnyHeader().AllowAnyMethod().AllowCredentials().WithOrigins(corsArray.ToArray())));
services.AddSenparcWeixinServices(Configuration);//注册全局微信服务
}
......
......@@ -66,6 +66,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.Module.Advertising", "E
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.Module.EduTask", "Edu.Module.EduTask\Edu.Module.EduTask.csproj", "{FEDB8D19-2C7E-4393-8D91-332256EC89CC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Edu.Module.QYWeChat", "Edu.Module.QYWeChat\Edu.Module.QYWeChat.csproj", "{00E05F5A-A5B7-46ED-AE5F-9D54D67FA78F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
......@@ -160,6 +162,10 @@ Global
{FEDB8D19-2C7E-4393-8D91-332256EC89CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FEDB8D19-2C7E-4393-8D91-332256EC89CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FEDB8D19-2C7E-4393-8D91-332256EC89CC}.Release|Any CPU.Build.0 = Release|Any CPU
{00E05F5A-A5B7-46ED-AE5F-9D54D67FA78F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{00E05F5A-A5B7-46ED-AE5F-9D54D67FA78F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{00E05F5A-A5B7-46ED-AE5F-9D54D67FA78F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{00E05F5A-A5B7-46ED-AE5F-9D54D67FA78F}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
......@@ -185,6 +191,7 @@ Global
{3C354B2B-8706-49A6-A12A-5A64F28E7CDC} = {7AC0A4EC-3215-4FF2-96DC-DE8325ED6915}
{43408243-8E36-4F9E-84C0-998CE383EC53} = {7AC0A4EC-3215-4FF2-96DC-DE8325ED6915}
{FEDB8D19-2C7E-4393-8D91-332256EC89CC} = {7AC0A4EC-3215-4FF2-96DC-DE8325ED6915}
{00E05F5A-A5B7-46ED-AE5F-9D54D67FA78F} = {7AC0A4EC-3215-4FF2-96DC-DE8325ED6915}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8763B446-FAB1-46BF-9743-F2628533241B}
......
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