Commit 97ca1904 authored by 吴春's avatar 吴春

提交代码

parent 3eeb0325
using Edu.CacheManager.Base;
using Edu.Common.Enum;
using Edu.Model.CacheModel;
using Edu.Repository.User;
using System;
using System.Linq;
namespace Edu.Cache.User
{
/// <summary>
/// redis缓存
/// </summary>
public class AppletStudentReidsCache
{
/// <summary>
/// 使用redis第几号库
/// </summary>
public static readonly int REDIS_DB3 = 3;
static readonly RedisHelper redis = new RedisHelper(REDIS_DB3);
/// <summary>
/// 设置缓存
/// </summary>
/// <param name="model"></param>
public static void UserInfoSet(string cacheKey, AppletStudentInfo model, int JwtExpirTime)
{
try
{
TimeSpan ts = GetExpirTime(JwtExpirTime);
redis.StringSet<AppletStudentInfo>(cacheKey, model, ts);
}
catch (Exception ex)
{
Common.Plugin.LogHelper.Write(ex, "AppletStudentInfoSet缓存设置失败");
}
}
/// <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 void Set(string cacheKey, object Data, int JwtExpirTime)
{
try
{
TimeSpan ts = GetExpirTime(JwtExpirTime);
redis.StringSet(cacheKey, Data, ts);
}
catch (Exception)
{
}
}
/// <summary>
/// 账号仓储层对象
/// </summary>
private static readonly RB_AccountRepository accountRepository = new RB_AccountRepository();
/// <summary>
/// 获取用户登录信息
/// </summary>
/// <param name="Id">账号Id</param>
/// <param name="apiRequestFromEnum">请求来源</param>
/// <returns></returns>
public static AppletStudentInfo GetUserLoginInfo(object Id, ApiRequestFromEnum apiRequestFromEnum = ApiRequestFromEnum.AppStudent)
{
AppletStudentInfo userInfo = null;
if (Id != null)
{
string cacheKey = Cache.CacheKey.AppletStudent_Login_Key + Id.ToString();
try
{
userInfo = redis.StringGet<AppletStudentInfo>(cacheKey);
}
catch (Exception ex)
{
Common.Plugin.LogHelper.Write(ex, "GetUserLoginInfo");
}
if (userInfo == null)
{
Int32.TryParse(Id.ToString(), out int NewId);
if (NewId > 0)
{
string token = "";
var model = accountRepository.GetAccountListExtRepository(new Model.ViewModel.User.RB_Account_ViewModel()
{
Id = NewId
})?.FirstOrDefault();
if (model != null)
{
userInfo = new AppletStudentInfo
{
Id = model.Id,
Group_Id = model.Group_Id,
School_Id = model.School_Id,
AccountName = model.AccountName,
GroupName = model.GroupName,
SchoolName = model.SchoolName,
Token = token,
ApiRequestFromEnum = apiRequestFromEnum
};
UserInfoSet(Cache.CacheKey.AppletStudent_Login_Key + Id.ToString(), userInfo, Common.Config.JwtExpirTime);
}
}
}
}
else
{
userInfo = new AppletStudentInfo();
}
return userInfo;
}
}
}
\ No newline at end of file
......@@ -17,6 +17,11 @@ namespace Edu.Cache
/// </summary>
public static string AppStudent_Login_Key = "App_Student_Login_";
/// <summary>
///小程序学生登录缓存Key
/// </summary>
public static string AppletStudent_Login_Key = "Applet_Student_Login_";
/// <summary>
/// 短信号码缓存Key
/// </summary>
......
......@@ -51,5 +51,11 @@ namespace Edu.Common.Enum
[EnumField("App学生端")]
AppStudent = 103,
/// <summary>
/// 小程序学生端
/// </summary>
[EnumField("小程序学生端")]
AppletStudent = 104,
}
}
\ No newline at end of file
......@@ -683,5 +683,43 @@ namespace Edu.Common
}
return data;
}
/// <summary>
/// 解析手机号码
/// </summary>
/// <param name="encryptedDataStr"></param>
/// <param name="key"></param>
/// <param name="iv"></param>
/// <returns></returns>
public static string AES_decrypt(string encryptedDataStr, string key, string iv)
{
RijndaelManaged rijalg = new RijndaelManaged();
//-----------------
//设置 cipher 格式 AES-128-CBC
rijalg.KeySize = 128;
rijalg.Padding = PaddingMode.PKCS7;
rijalg.Mode = CipherMode.CBC;
rijalg.Key = Convert.FromBase64String(key);
rijalg.IV = Convert.FromBase64String(iv);
byte[] encryptedData = Convert.FromBase64String(encryptedDataStr);
//解密
ICryptoTransform decryptor = rijalg.CreateDecryptor(rijalg.Key, rijalg.IV);
string result;
using (MemoryStream msDecrypt = new MemoryStream(encryptedData))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
result = srDecrypt.ReadToEnd();
}
}
}
return result;
}
}
}
\ No newline at end of file
......@@ -19,7 +19,7 @@ namespace Edu.Common.Plugin
/// <param name="AppID"></param>
/// <param name="AppSecret"></param>
/// <returns></returns>
public static string GetAccessToken(string AppID,string AppSecret)
public static string GetAccessToken(string AppID, string AppSecret)
{
string token = string.Empty;
try
......@@ -28,12 +28,12 @@ namespace Edu.Common.Plugin
string appID = AppID;
string appSecret = AppSecret;
//获取微信token
string token_url = wechatapi+"cgi-bin/token?grant_type=client_credential&appid=" + appID + "&secret=" + appSecret;
string token_url = wechatapi + "cgi-bin/token?grant_type=client_credential&appid=" + appID + "&secret=" + appSecret;
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(token_url);
//请求方式
myRequest.Method = "GET";
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(),Encoding.UTF8);
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
string content = reader.ReadToEnd();
myResponse.Close();
reader.Dispose();
......@@ -56,11 +56,11 @@ namespace Edu.Common.Plugin
/// <param name="url">跳转地址</param>
/// <param name="width">宽度</param>
/// <returns></returns>
public static string GetWeChatQRCode(string token,string url, int width)
public static string GetWeChatQRCode(string token, string url, int width)
{
string result = "";
string tempPath = "\\upfile\\temporary\\" + DateTime.Now.ToString("yyyyMMdd") + "\\";
string basepath = AppContext.BaseDirectory+ tempPath;
string basepath = AppContext.BaseDirectory + tempPath;
string fileName = DateTime.Now.Ticks + ".jpg";
if (!Directory.Exists(basepath))
{
......@@ -72,13 +72,123 @@ namespace Edu.Common.Plugin
string apiurl = "https://api.weixin.qq.com/wxa/getwxacode?access_token=" + token;
var postData = new
{
path= url,
path = url,
width
};
var Robj = HttpHelper.HttpPostImageToBase64(apiurl, JsonHelper.Serialize(postData),path: basepath + fileName, resultType:0);
var Robj = HttpHelper.HttpPostImageToBase64(apiurl, JsonHelper.Serialize(postData), path: basepath + fileName, resultType: 0);
result = "/upfile/temporary/" + DateTime.Now.ToString("yyyyMMdd") + "/" + fileName;
}
return result;
}
/// <summary>
/// 获取微信用户OpenId
/// </summary>
/// <param name="AppId"></param>
/// <param name="AppSecret"></param>
/// <param name="Code"></param>
/// <returns></returns>
public static result GetWeChatOpenId(string AppId, string AppSecret, string Code)
{
// string result = "";
result userInfo = new result();
string resultInfo = "";
try
{
//请求路径
string url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + AppId + "&secret=" + AppSecret + "&js_code=" + Code + "&grant_type=authorization_code";
resultInfo = Common.Plugin.HttpHelper.HttpGet(url);
if (resultInfo != null && !string.IsNullOrEmpty(resultInfo))
{
userInfo = JsonConvert.DeserializeObject<result>(resultInfo);
}
}
catch (Exception ex)
{
//GetWeChatOpenId:result={"errcode":40163,"errmsg":"code been used, hints: [ req_id: AHGbGiqNe-OhJh.a ]"}&&Code=051S1Ykl2wYCF64U7gnl2AK6ga0S1Yk2
//Code过期
Common.Plugin.LogHelper.Write(ex, string.Format("GetWeChatOpenId:result={0}&&Code={1}", resultInfo, Code));
}
return userInfo;
}
}
/// <summary>
/// 获取用心信息帮助类
/// </summary>
public class GetUsersHelper
{
/// <summary>
/// 获取链接返回数据
/// </summary>
/// <param name="Url">链接</param>
/// <param name="type">请求类型</param>
/// <returns></returns>
public string GetUrltoHtml(string Url, string type)
{
try
{
System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url);
// Get the response instance.
System.Net.WebResponse wResp = wReq.GetResponse();
System.IO.Stream respStream = wResp.GetResponseStream();
// Dim reader As StreamReader = New StreamReader(respStream)
using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.GetEncoding(type)))
{
return reader.ReadToEnd();
}
}
catch (System.Exception ex)
{
return ex.Message;
}
}
}
#region 实体类
/// <summary>
/// 微信小程序验证返回结果
/// </summary>
public class result
{
/// <summary>
/// openid
/// </summary>
public string openid { get; set; }
/// <summary>
/// openid
/// </summary>
public string unionid { get; set; }
/// <summary>
/// session_key
/// </summary>
public string session_key { get; set; }
/// <summary>
/// 错误状态码
/// </summary>
public string errcode { get; set; }
/// <summary>
/// 错误提示信息
/// </summary>
public string errmsg { get; set; }
}
#endregion
}
using Edu.Common.Enum;
using Edu.Common.Enum.User;
using Edu.Model.ViewModel.System;
using System.Collections.Generic;
namespace Edu.Model.CacheModel
{
/// <summary>
/// 小程序学生用户缓存
/// </summary>
public class AppletStudentInfo
{
/// <summary>
/// 账号编号
/// </summary>
public int Id { get; set; }
/// <summary>
/// 集团编号
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 学校编号
/// </summary>
public int School_Id { get; set; }
/// <summary>
/// 账号名称
/// </summary>
public string AccountName { get; set; }
/// <summary>
/// 请求来源
/// </summary>
public ApiRequestFromEnum ApiRequestFromEnum { get; set; }
/// <summary>
/// 账号类型(1-管理端,2,-教师端,3-助教,4-学生)
/// </summary>
public AccountTypeEnum AccountType { get; set; }
/// <summary>
/// 对应的账户id
/// </summary>
public int AccountId { get; set; }
/// <summary>
/// 学校名称
/// </summary>
public string SchoolName { get; set; }
/// <summary>
/// 集团名称
/// </summary>
public string GroupName { get; set; }
/// <summary>
/// Token验证
/// </summary>
public string Token { get; set; }
/// <summary>
/// 课程名称
/// </summary>
public string CourseName { get; set; }
/// <summary>
/// 老师
/// </summary>
public string TeacherName { get; set; }
/// <summary>
/// 集团Logo
/// </summary>
public string GroupLogo { get; set; }
/// <summary>
/// 用户头像
/// </summary>
public string UserIcon { get; set; }
/// <summary>
/// 上传配置
/// </summary>
public object UploadConfig { get; set; }
/// <summary>
/// 激活状态
/// </summary>
public int ActivationStatus { get; set; }
/// <summary>
/// 是否冻结,1-是
/// </summary>
public int IsFrozen { get; set; }
/// <summary>
/// 服务人员电话
/// </summary>
public string EnterPhone { get; set; }
}
}
\ No newline at end of file
......@@ -86,6 +86,12 @@ namespace Edu.Model.Entity.User
/// 微信openid
/// </summary>
public string OpenId { get; set; }
/// <summary>
/// 微信Unionid
/// </summary>
public string UnionId { get; set; }
/// <summary>
/// 学生激活状态0-未激活,1-已激活
/// </summary>
......
......@@ -82,5 +82,9 @@ namespace Edu.Model.ViewModel.BackClass
/// 退课协议编号
/// </summary>
public string ProtocolNum { get; set; }
public int IsCompanySeal { get; set; }
}
}
......@@ -56,6 +56,11 @@ namespace Edu.Model.ViewModel.Grade
/// </summary>
public string CourseName { get; set; }
/// <summary>
/// 课程id
/// </summary>
public int CourseId { get; set; }
/// <summary>
/// 班级类型
/// </summary>
......@@ -164,6 +169,11 @@ namespace Edu.Model.ViewModel.Grade
/// </summary>
public int OrderBy { get; set; }
/// <summary>
/// 章节信息
/// </summary>
public List<ChapterTree_ViewModel> Chapter { get; set; }
}
}
......@@ -61,6 +61,11 @@ namespace Edu.Model.ViewModel.User
/// </summary>
public string SName { get; set; }
/// <summary>
/// 所属校区id
/// </summary>
public int SId { get; set; }
/// <summary>
/// 地区名称【省/市/区县】
/// </summary>
......@@ -75,5 +80,40 @@ namespace Edu.Model.ViewModel.User
/// 班级名称
/// </summary>
public string ClassName { get; set; }
/// <summary>
/// 班级id
/// </summary>
public int ClassId { get; set; }
/// <summary>
/// 课程id
/// </summary>
public int CourseId { get; set; }
/// <summary>
/// 课程
/// </summary>
public string CourseName { get; set; }
/// <summary>
/// 班级状态
/// </summary>
public int ClassStatus { get; set; }
/// <summary>
/// 老师名称
/// </summary>
public string TeacherName { get; set; }
/// <summary>
/// 销售人员
/// </summary>
public int EnterID { get; set; }
/// <summary>
/// 剩余课时
/// </summary>
public int SurplusHours { get; set; }
}
}
\ No newline at end of file
......@@ -201,7 +201,12 @@ namespace Edu.Module.Course
/// <summary>
/// 账户仓储层
/// </summary>
private readonly RB_AccountRepository accountRepository= new RB_AccountRepository();
private readonly RB_AccountRepository accountRepository = new RB_AccountRepository();
/// <summary>
/// 课程章节仓储层对象
/// </summary>
private readonly RB_Course_ChapterRepository chapterRepository = new RB_Course_ChapterRepository();
/// <summary>
/// 获取班级列表
......@@ -950,7 +955,7 @@ namespace Edu.Module.Course
/// <param name="message"></param>
/// <returns></returns>
[TransactionCallHandler]
public virtual bool SetClassStatusModule(RB_Class_ViewModel model, UserInfo user,out string message, out bool result)
public virtual bool SetClassStatusModule(RB_Class_ViewModel model, UserInfo user, out string message, out bool result)
{
var oldModel = GetClassModule(model.ClassId);
result = false;
......@@ -1597,7 +1602,7 @@ namespace Edu.Module.Course
//如果老师变更且存在签到记录则更新签到表中的老师Id
if (oldPlanModel.TeacherId != extModel.TeacherId)
{
var checkList= classCheckRepository.GetClassCheckListRepository(new RB_Class_Check_ViewModel()
var checkList = classCheckRepository.GetClassCheckListRepository(new RB_Class_Check_ViewModel()
{
Q_ClassIds = extModel.ClassId.ToString(),
StartDate = Common.ConvertHelper.FormatDate(extModel.ClassDate),
......@@ -2065,9 +2070,10 @@ namespace Edu.Module.Course
#endregion
#region 即将欠费提醒(管理者)
var queryNotifyManager = accountRepository.GetWorkUserIdByDictRepository("Push_Arrears");
if (queryNotifyManager!=null && queryNotifyManager.Count>0)
if (queryNotifyManager != null && queryNotifyManager.Count > 0)
{
queryNotifyManager.ForEach(x =>
{
queryNotifyManager.ForEach(x => {
var path = $"/sale/orderStatistics?OrderId={guestModel.OrderId}";
path = HttpUtility.UrlEncode(path);
......@@ -2091,7 +2097,7 @@ namespace Edu.Module.Course
}
#endregion
}
else if (guestModel.TotalHours == guestModel.ValidClassHours && shenyuHours < 12 && shenyuHours>0)
else if (guestModel.TotalHours == guestModel.ValidClassHours && shenyuHours < 12 && shenyuHours > 0)
{
var orderModel = orderRepository.GetEntity(guestModel.OrderId);
var shengyuMoney = orderModel.PreferPrice - orderModel.Income + orderModel.Refund - orderModel.PlatformTax - orderModel.DiscountMoney - orderModel.LessPrice;
......@@ -2225,7 +2231,7 @@ namespace Edu.Module.Course
#region 通知缺勤信息
var param = new RB_Class_Plan_ViewModel()
{
ClassTimeId=item.ClassTimeId
ClassTimeId = item.ClassTimeId
};
var planModel = class_PlanRepository.GetClassPlanListExtRepository(param).FirstOrDefault();
var queryNotifyManager = accountRepository.GetWorkUserIdByDictRepository("Push_Absence");
......@@ -3490,7 +3496,7 @@ namespace Edu.Module.Course
/// <param name="query">查询条件</param>
/// <param name="ClassType">课程类型(0-全部,1-正常,2-试听课)</param>
/// <returns></returns>
public object GetClassPlanStatisticalModule(RB_Class_Plan_ViewModel query,out List<object> result,int ClassType = 0)
public object GetClassPlanStatisticalModule(RB_Class_Plan_ViewModel query, out List<object> result, int ClassType = 0)
{
result = new List<object>();
List<object> mondayList = new List<object>();
......@@ -4470,6 +4476,103 @@ namespace Edu.Module.Course
#endregion
#region 学生小程序获取我的课表
/// <summary>
/// 获取老师计划列表
/// </summary>
/// <param name="classId">班级编号</param>
/// <param name="monthStr">月份</param>
/// <returns></returns>
public List<RB_Class_Plan_ViewModel> GetStundentPlanModule(RB_Class_ViewModel model)
{
var timeList = new List<RB_Class_Time_ViewModel>();
var planList = class_PlanRepository.GetClassPlanStatisticalRepository(new RB_Class_Plan_ViewModel() { School_Id = model.School_Id, ClassId = model.ClassId, Group_Id = model.Group_Id, StartTime = model.StartTime, EndTime = model.EndTime });
if (planList != null && planList.Any())
{
string Ids = string.Join(",", planList.Select(qitem => qitem.ClassPlanId));
if (!string.IsNullOrEmpty(Ids))
{
timeList = class_TimeRepository.GetClassTimeList_V2(new RB_Class_Time_ViewModel() { QClassPlanIds = Ids });
}
string ClassIds = string.Join(",", planList.GroupBy(x => x.ClassId).Select(x => x.Key));
var orderStudentList = order_GuestRepository.GetOrderGuestListRepository(new RB_Order_Guest_ViewModel()
{
ClassIds = ClassIds,
Group_Id = model.Group_Id,
School_Id = model.School_Id
});
//2021-07-19 Add By:W临时上课邀请
var tempGuestList = order_GuestRepository.GetTempInvitationGuest(new Model.ViewModel.EduTask.RB_Temporary_Invitation_ViewModel
{
ClassIds = ClassIds,
Group_Id = model.Group_Id,
School_Id = model.School_Id
});
string timeIds = string.Join(",", timeList.Select(x => x.ClassTimeId));
var checkList = classCheckRepository.GetClassCheckList(new RB_Class_Check_ViewModel
{
ClassTimeIds = timeIds,
Group_Id = model.Group_Id
});
foreach (var item in planList.OrderBy(x => x.ClassDate))
{
item.PlanTimeList = new List<RB_Class_Time_ViewModel>();
item.PlanTimeList = timeList.Where(x => x.ClassId == item.ClassId && (x.ClassPlanId == item.ClassPlanId || item.ClassDate == Convert.ToDateTime(Common.ConvertHelper.FormatDate(x.NewPlanDateTime)))).ToList();
foreach (var itemTime in item.PlanTimeList)
{
itemTime.GuestList = new List<RB_Order_Guest_ViewModel>();
var tempList = new List<RB_Order_Guest_ViewModel>();
tempList.AddRange(orderStudentList.Where(x => x.ClassId == itemTime.ClassId && (x.GuestState == 1 || x.GuestState == 6 || ((x.GuestState == 5 || x.GuestState == 7) && x.ChangeEffectTime.HasValue && Convert.ToDateTime(Common.ConvertHelper.FormatDate(x.ChangeEffectTime)) >= item.ClassDate))).ToList());
if (tempGuestList != null && tempGuestList.Any())
{
tempList.AddRange(tempGuestList.Where(x => x.ClassId == itemTime.ClassId && itemTime.ClassTimeId == x.ClassTimeId && (x.GuestState == 1 || x.GuestState == 6 || ((x.GuestState == 5 || x.GuestState == 7) && x.ChangeEffectTime.HasValue && Convert.ToDateTime(Common.ConvertHelper.FormatDate(x.ChangeEffectTime)) >= item.ClassDate))).ToList());
}
foreach (var sItem in tempList)
{
itemTime.GuestList.Add(new RB_Order_Guest_ViewModel()
{
Id = sItem.Id,
GuestName = sItem.GuestName,
IsCheck = 0,
StudentId= sItem.StudentId
});
}
foreach (var itemCheck in itemTime.GuestList)
{
//0-正常,1-缺勤,2-未签到
itemCheck.IsCheck = checkList?.Where(y => y.OrderGuestId == itemCheck.Id && y.ClassTimeId == itemTime.ClassTimeId).FirstOrDefault()?.CheckStatus ?? -1;
}
}
}
}
return planList;
}
/// <summary>
/// 获取老师计划列表
/// </summary>
/// <param name="classId">班级编号</param>
/// <param name="monthStr">月份</param>
/// <returns></returns>
public List<RB_Class_Plan_ViewModel> GetStundentScheduleList(RB_Class_ViewModel model)
{
var planList = class_PlanRepository.GetClassPlanStatisticalRepository(new RB_Class_Plan_ViewModel() { School_Id = model.School_Id, ClassId = model.ClassId, Group_Id = model.Group_Id, StartTime = model.StartTime, EndTime = model.EndTime });
return planList;
}
#endregion
}
......
......@@ -643,6 +643,24 @@ namespace Edu.Module.Course
return treeList;
}
/// <summary>
/// 查询符合的课程章节
/// </summary>
/// <param name="courseId"></param>
/// <param name="currentHours"></param>
/// <returns></returns>
public List<ChapterTree_ViewModel> GetMatchChapterRepository(int courseId, string currentHours)
{
var list = chapterRepository.GetMatchChapterRepository(courseId, currentHours);
list.ForEach(x =>
{
x.SerialNumber = int.Parse(x.ChapterNo.Replace(".", ""));
});
List<ChapterTree_ViewModel> treeList = GetChapterChild(list, 0);
return treeList;
}
/// <summary>
/// 递归遍历所有章节
/// </summary>
......
......@@ -744,5 +744,26 @@ namespace Edu.Module.Course
}
return flag;
}
/// <summary>
/// 根据学生id获取学生的有效合同信息
/// </summary>
/// <param name="teacherIds"></param>
/// <returns></returns>
public List<RB_Education_Contract_ViewModel> GetStudentContractInfo(int Student_Id, int Group_Id)
{
return education_ContractRepository.GetStudentContractInfo(Student_Id, Group_Id);
}
/// <summary>
/// 根据学生id获取学生的退课合同信息
/// </summary>
/// <param name="teacherIds"></param>
/// <returns></returns>
public List<Model.ViewModel.BackClass.RB_Student_BackClass_ViewModel> GetStudentBackClassInfo(int Student_Id, int Group_Id)
{
return student_BackClassRepository.GetStudentBackClassInfo(Student_Id, Group_Id);
}
}
}
\ No newline at end of file
......@@ -78,6 +78,27 @@ namespace Edu.Module.User
return accountRepository.GetStudentExt(query);
}
/// <summary>
/// 更新账户的UnionId
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public bool UpdateAccountUnionId(RB_Account_ViewModel model)
{
bool flag = false;
if (model.Id > 0)
{
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
{nameof(RB_Account_ViewModel.OpenId),model.OpenId.Trim() },
{nameof(RB_Account_ViewModel.UnionId),model.UnionId.Trim() }
};
flag = accountRepository.Update(fileds, new WhereHelper(nameof(RB_Account_ViewModel.Id), model.Id));
}
return flag;
}
/// <summary>
/// 添加修改账号
/// </summary>
......
......@@ -267,5 +267,17 @@ namespace Edu.Module.User
{
return studentRepository.GetListByStudentId(Student_Id, Group_Id);
}
/// <summary>
/// 根据学生id获取学生的班级课程学校信息
/// </summary>
/// <param name="teacherIds"></param>
/// <returns></returns>
public List<RB_Student_ViewModel> GetStudentInfo(int Student_Id, int Group_Id)
{
return studentRepository.GetStudentInfo(Student_Id, Group_Id);
}
}
}
......@@ -135,7 +135,7 @@ WHERE 1=1 ");
backprotocolFileds.Add(nameof(RB_BackClass_Protocol_ViewModel.PartyBSignDate), DateTime.Now);
}
//更新退课协议审核状态
flag= backClass_ProtocolRepository.Update(backprotocolFileds, new WhereHelper(nameof(RB_BackClass_Protocol_ViewModel.BackId), backModel.BackId));
flag = backClass_ProtocolRepository.Update(backprotocolFileds, new WhereHelper(nameof(RB_BackClass_Protocol_ViewModel.BackId), backModel.BackId));
}
if (flag)
......@@ -201,5 +201,22 @@ WHERE 1=1 ");
flag = order_GuestRepository.Update(guestFileds, new WhereHelper(nameof(RB_Order_Guest_ViewModel.Id), model.OrderGuestId));
return flag;
}
/// <summary>
/// 根据学生id获取学生的退课合同信息
/// </summary>
/// <param name="teacherIds"></param>
/// <returns></returns>
public List<RB_Student_BackClass_ViewModel> GetStudentBackClassInfo(int Student_Id, int Group_Id)
{
var parameters = new DynamicParameters();
StringBuilder builder = new StringBuilder();
builder.AppendFormat($@"SELECT sbc.*,bcp.ProtocolNum,bcp.Id as BackClassProtocolId ,bcp.IsCompanySeal from rb_student_backclass as sbc
LEFT JOIN rb_backclass_protocol as bcp on sbc.BackId=bcp.BackId
LEFT JOIN rb_student_orderguest as sog on sog.GuestId=sbc.GuestId
where bcp.AuditStatus=2 and sog.Student_Id={Student_Id} and sbc.Group_Id={Group_Id}");
return Get<RB_Student_BackClass_ViewModel>(builder.ToString(), parameters).ToList();
}
}
}
\ No newline at end of file
......@@ -442,5 +442,23 @@ left join {datebaseStr}.rb_tradeway t on f.FrID = t.FinanceId
return GetPage<RB_Education_Contract_ViewModel>(pageIndex, pageSize, out rowsCount, sql, parameters).ToList();
}
/// <summary>
/// 根据学生id获取学生的有效合同信息
/// </summary>
/// <param name="teacherIds"></param>
/// <returns></returns>
public List<RB_Education_Contract_ViewModel> GetStudentContractInfo(int Student_Id, int Group_Id)
{
var parameters = new DynamicParameters();
StringBuilder builder = new StringBuilder();
builder.AppendFormat($@"SELECT sog.Student_Id,ec.* from rb_education_contract as ec LEFT JOIN rb_order as o on ec.OrderId=o.OrderId
LEFT JOIN rb_order_guest as og on og.OrderId=o.OrderId
LEFT JOIN rb_student_orderguest as sog on sog.GuestId=og.Id
where ec.Status =2 and og.`Status`=0 and o.OrderState =1 and sog.`Status`=0 and sog.Student_Id={Student_Id} and o.Group_Id={Group_Id}");
return Get<RB_Education_Contract_ViewModel>(builder.ToString(), parameters).ToList();
}
}
}
......@@ -57,7 +57,8 @@ namespace Edu.Repository.Course
{
StringBuilder builder = new StringBuilder();
builder.Append("INSERT INTO rb_course_chapter (ChapterId, ChapterNo, ParentId,SortNum) VALUES");
param.ForEach(x => {
param.ForEach(x =>
{
var newChapterNo = x.ChapterNo.Replace(".", "");
double.TryParse(newChapterNo, out double SortNum);
builder.Append($"({x.ChapterId},'{x.ChapterNo}',{x.ParentId},{SortNum}),");
......@@ -71,7 +72,8 @@ namespace Edu.Repository.Course
{
StringBuilder builder = new StringBuilder();
builder.Append("INSERT INTO rb_course_chapter (ChapterId, CurrentHours) VALUES");
param.ForEach(x => {
param.ForEach(x =>
{
builder.Append($"({x.ChapterId},'{x.CurrentHours}'),");
});
builder = builder.Remove(builder.Length - 1, 1);
......@@ -88,7 +90,7 @@ namespace Edu.Repository.Course
{
StringBuilder builder = new StringBuilder();
builder.Append("update rb_course_chapter ");
builder.AppendFormat("set {0}={1}",nameof(RB_Course_Chapter_ViewModel.CourseRate),EnumHelper.ToInt(model.CourseRate));
builder.AppendFormat("set {0}={1}", nameof(RB_Course_Chapter_ViewModel.CourseRate), EnumHelper.ToInt(model.CourseRate));
builder.AppendFormat(" where {0}={1}", nameof(RB_Course_Chapter_ViewModel.CourseId), model.CourseId);
builder.AppendFormat(" and {0} like '{1}%'", nameof(RB_Course_Chapter_ViewModel.ChapterNo), model.ChapterNo);
......@@ -132,5 +134,48 @@ namespace Edu.Repository.Course
//builder.AppendFormat(" ORDER BY {0} Desc",nameof(RB_Course_Chapter_ViewModel.CurrentHours));
return Get<RB_Course_Chapter_ViewModel>(builder.ToString(), parameters).ToList();
}
/// <summary>
/// 查询符合的课程章节
/// </summary>
/// <param name="courseId"></param>
/// <param name="currentHours"></param>
/// <returns></returns>
public List<RB_Course_Chapter_ViewModel> GetMatchChapterRepository(int courseId, string currentHours)
{
var parameters = new DynamicParameters();
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT *
FROM rb_course_chapter
WHERE 1=1
");
builder.AppendFormat(" AND {0}={1}", nameof(RB_Course_Chapter_ViewModel.Status), EnumHelper.ToInt(DateStateEnum.Normal));
builder.AppendFormat(" AND {0}={1}", nameof(RB_Course_Chapter_ViewModel.CourseId), courseId);
if (!string.IsNullOrWhiteSpace(currentHours))
{
builder.AppendFormat(" AND (");
int i = 0;
foreach (var item in currentHours.Split(","))
{
i += 1;
builder.AppendFormat(" ({0}='{1}' or {2} like '{3}.%')", nameof(RB_Course_Chapter_ViewModel.ChapterNo), item, nameof(RB_Course_Chapter_ViewModel.ChapterNo), item);
if (i != currentHours.Split(",").Length)
{
builder.AppendFormat(" Or ");
}
}
builder.AppendFormat(" )");
}
//builder.AppendFormat(" ORDER BY {0} Desc",nameof(RB_Course_Chapter_ViewModel.CurrentHours));
return Get<RB_Course_Chapter_ViewModel>(builder.ToString(), parameters).ToList();
}
}
}
......@@ -575,12 +575,12 @@ where sog.Account_Id={query.StuId} and c.ClassStatus in(1,2) and c.`Status`=0 an
}
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.ClassPlanId,A.ClassId,A.ClassDate,A.ClassRoomId,A.ClassName,A.CourseName,A.Teacher_Id,A.TeacherName,A.RoomName
SELECT A.ClassPlanId,A.ClassId,A.ClassDate,A.ClassRoomId,A.ClassName,A.CourseName,A.CourseId,A.Teacher_Id,A.TeacherName,A.UserIcon,A.RoomName
,SUM(A.minNum) AS ClassMinutes,MIN(A.StartTime) AS StartTime,MAX(A.EndTime) AS EndTime,A.CompleteProgress,a.TotalPlanNum,
(SELECT COUNT(*) from rb_class_plan where `Status`=0 and DATE_FORMAT(ClassDate,'%Y-%m-%d') <=DATE_FORMAT(a.ClassDate,'%Y-%m-%d') and ClassId=a.ClassId) as Ranks
FROM
(
SELECT A.ClassPlanId, A.ClassId,A.ClassDate,A.ClassRoomId,B.ClassName,C.CourseName,B.Teacher_Id,IFNULL(D.TeacherName,'') AS TeacherName,E.RoomName
SELECT A.ClassPlanId, A.ClassId,A.ClassDate,A.ClassRoomId,B.ClassName,C.CourseName,c.CourseId,B.Teacher_Id,IFNULL(D.TeacherName,'') AS TeacherName,IFNULL(D.TeacherHead,'') AS UserIcon,E.RoomName
,TIMESTAMPDIFF(MINUTE, CONCAT('2020-12-16',' ',F.StartTime), CONCAT('2020-12-16',' ',F.EndTime)) AS minNum,F.StartTime,F.EndTime,B.CompleteProgress,plan.TotalPlanNum
FROM rb_class_plan AS A INNER JOIN rb_class AS B ON A.ClassId=B.ClassId
LEFT JOIN rb_course AS C ON B.CouseId=C.CourseId
......
......@@ -288,5 +288,7 @@ where a.`Status`=0 and c.ClassStatus in(1,2) and a.TeacherId={TId} and c.`Sta
}
return flag;
}
}
}
......@@ -112,10 +112,11 @@ namespace Edu.Repository.Sell
}
string sql = $@"
SELECT A.*,IFNULL(B.JoinType,0) AS JoinType,IFNULL(B.TargetJoinType,0) AS TargetJoinType,IFNULL(B.StartClassHours,0) AS StartClassHours
SELECT sog.Student_Id as StudentId,A.*,IFNULL(B.JoinType,0) AS JoinType,IFNULL(B.TargetJoinType,0) AS TargetJoinType,IFNULL(B.StartClassHours,0) AS StartClassHours
,IFNULL(C.CourseName,'') AS CourseName,B.EffectStatus,B.EffectTime,B.UpOrderId,B.OrderType,B.CourseId,B.IsRenewOrder,B.RenewOrderId,B.EnterID
,sc.StopClassEffectTime,B.SourceOrderId,B.TargetOrderId,IFNULL(D.FirstClassHours,0)+IFNULL(D.SecondClassHours,0)+IFNULL(D.ThirdClassHours,0) AS ContractTotalHours
FROM RB_Order_Guest AS A LEFT JOIN rb_order AS B ON A.OrderId=B.OrderId
LEFT JOIN rb_student_orderguest as sog on sog.GuestId=a.Id
LEFT JOIN rb_course AS C ON (B.CourseId=C.CourseId AND B.CourseId>0 AND B.OrderType=1)
LEFT JOIN (SELECT OrderGuestId,MAX(TakeEffectTime) as StopClassEffectTime from rb_student_stopclass where IsAuditThrough=1 GROUP BY OrderGuestId) as sc on sc.OrderGuestId=a.Id
LEFT JOIN rb_education_contract AS D ON A.OrderId=D.OrderId AND A.Id=D.GuestId AND D.IsSystemUse=1
......
......@@ -152,5 +152,27 @@ where b.`Status`=0 and b.ClassStatus in(1,2) and a.status=0 and a.Account_Id={
AND c.Group_Id={Group_Id}");
return Get<RB_Student_ViewModel>(builder.ToString(), parameters).ToList();
}
/// <summary>
/// 根据学生id获取学生的班级课程学校信息
/// </summary>
/// <param name="teacherIds"></param>
/// <returns></returns>
public List<RB_Student_ViewModel> GetStudentInfo(int Student_Id, int Group_Id)
{
var parameters = new DynamicParameters();
StringBuilder builder = new StringBuilder();
builder.AppendFormat($@"SELECT s.*,o.OrderState,cou.CourseName,cou.CourseId,c.ClassName,c.ClassId,c.ClassStatus,sch.SName,sch.SId,t.TeacherName,o.EnterID,(og.TotalHours-og.CompleteHours) as SurplusHours from rb_student as s LEFT JOIN rb_student_orderguest as sog on s.StuId=sog.Student_Id
LEFT JOIN rb_order_guest as og on og.Id=sog.GuestId
LEFT JOIN rb_order as o on og.OrderId=o.OrderId
LEFT JOIN rb_course as cou on o.CourseId=cou.CourseId
LEFT JOIN rb_class as c on c.ClassId=o.ClassId
LEFT JOIN rb_school as sch on sch.SId=c.School_Id
LEFT JOIN rb_teacher as t on t.TId=c.Teacher_Id
where o.OrderState=1 and og.`Status`=0 and sog.`Status`=0 and og.GuestState=1 and cou.`Status`=0 and c.`Status`=0 and s.`Status`=0 and s.StuId={Student_Id} and s.Group_Id={Group_Id}");
return Get<RB_Student_ViewModel>(builder.ToString(), parameters).ToList();
}
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Edu.Common.API;
using Edu.Common.Plugin;
using Edu.Model.ViewModel.Grade;
using Edu.Model.ViewModel.User;
using Edu.Module.Course;
using Edu.Module.Public;
using Edu.Module.User;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace Edu.WebApi.Controllers.Applet
{
[Route("api/[controller]/[action]")]
[ApiExceptionFilter]
[ApiController]
[EnableCors("AllowCors")]
public class AppletIndexController : AppletBaseController
{
/// <summary>
/// 账号管理处理类
/// </summary>
private readonly AccountModule accountModule = new AccountModule();
/// <summary>
/// 公用处理类
/// </summary>
private readonly PublicModule publicModule = new PublicModule();
/// <summary>
/// 学生管理处理类
/// </summary>
private readonly StudentModule studentModule = new StudentModule();
/// <summary>
/// 学生管理处理类
/// </summary>
private readonly EducationContractModule educationContractModule = new EducationContractModule();
/// <summary>
/// 班级管理处理类
/// </summary>
private readonly ClassModule classModule = new ClassModule();
/// <summary>
/// 课程处理类对象
/// </summary>
private readonly CourseModule courseModule = AOP.AOPHelper.CreateAOPObject<CourseModule>();
#region 小程序首页
/// <summary>
/// 小程序首页
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetIndexInfo()
{
var appletUserInfo = base.AppletUserInfo;
//判断学员是否退学
var studentList = studentModule.GetStudentInfo(appletUserInfo.AccountId, appletUserInfo.Group_Id);
if (studentList == null || !studentList.Any())
{
return ApiResult.Failed(message: $"很抱歉,由于你已经退学,无法继续使用本系统", new { Error = 3 });
}
RB_Student_ViewModel studentModel = new RB_Student_ViewModel();
studentModel = studentList.Where(x => x.ClassStatus == 2).FirstOrDefault();
if (studentModel == null || studentModel.StuId == 0)
{
studentModel = new RB_Student_ViewModel();
studentModel = studentList.Where(x => x.ClassStatus == 1).FirstOrDefault();
if (studentModel == null || studentModel.StuId == 0)
{
studentModel = new RB_Student_ViewModel();
studentModel = studentList.Where(x => x.ClassStatus == 3).FirstOrDefault();
}
}
//获取电子合同 GetStudentContractInfo
var contractList = educationContractModule.GetStudentContractInfo(appletUserInfo.AccountId, appletUserInfo.Group_Id);
var backClassList = educationContractModule.GetStudentBackClassInfo(appletUserInfo.AccountId, appletUserInfo.Group_Id);
var classTimeList = classModule.GetClassTimeByClassId(studentModel.ClassId, appletUserInfo.Group_Id);
var tempList = classTimeList.OrderBy(x => x.NewEndPlanDateTime).Where(x => x.ClassId == studentModel.ClassId && x.NewPlanDateTime.HasValue && System.DateTime.Now >= x.NewPlanDateTime.Value.AddMinutes(-10) && x.NewEndPlanDateTime.HasValue && System.DateTime.Now < x.NewEndPlanDateTime.Value.AddMinutes(30));
if (tempList == null || !tempList.Any())
{
tempList = classTimeList.OrderBy(x => x.NewEndPlanDateTime).Where(x => x.ClassId == studentModel.ClassId && x.NewPlanDateTime.HasValue && System.DateTime.Now <= x.NewPlanDateTime.Value);
}
var classModel = tempList?.OrderBy(x => x.NewPlanDateTime).FirstOrDefault();
if (classModel == null || classModel.ClassTimeId == 0)
{
classModel = new Model.ViewModel.Grade.RB_Class_Time_Extend();
}
var result = new
{
studentModel.SName,//学区
studentModel.CourseName,//课程
studentModel.SurplusHours,//剩余时间
studentModel.TeacherName,//老师
studentModel.ClassId,
studentModel.CourseId,
EnterPhone = Cache.User.UserReidsCache.GetUserLoginInfo(studentModel.EnterID).UserMobile,
ContractNum = (((contractList != null && contractList.Any()) ? contractList.Count() : 0) + ((backClassList != null && backClassList.Any()) ? backClassList.Count() : 0)),//合同数
ClassPlan = new //我的课表最新一个数据
{
NewPlanDateTimeStr = (classModel.NewPlanDateTime.HasValue) ? classModel?.NewPlanDateTime.Value.ToString("yyyy-MM-dd") : "",
TimeStr = (classModel.NewPlanDateTime.HasValue) ? Common.ConvertHelper.GetTimeStr(classModel.NewPlanDateTime.Value) : "",
TimeStart = classModel.StartTime,
TeacherName = classModel.TeacherName,
TimeStatusStr = classModel.ClassStatus,
}
};
return ApiResult.Success("", result);
}
#endregion
#region 我的课表
/// <summary>
/// 老师上课计划统计
/// </summary>
/// <returns></returns>
public ApiResult GetStundentPlanStatistical()
{
var startDate = base.ParmJObj.GetStringValue("StartTime");
var endDate = base.ParmJObj.GetStringValue("EndTime");
DateTime now = DateTime.Now;
//获取当前月的第一天
DateTime d1 = new DateTime(now.Year, now.Month, 1);
//当月最后一天
DateTime d2 = d1.AddMonths(1).AddDays(-1);
if (string.IsNullOrEmpty(startDate))
{
startDate = Common.ConvertHelper.FormatDate(d1);
}
if (string.IsNullOrEmpty(endDate))
{
endDate = Common.ConvertHelper.FormatDate(d2);
}
else
{
//if (Convert.ToDateTime(endDate) > Convert.ToDateTime(Common.ConvertHelper.FormatDate(DateTime.Now)))
//{
// endDate = Common.ConvertHelper.FormatDate(DateTime.Now);
//}
}
RB_Class_ViewModel query = new RB_Class_ViewModel()
{
StartTime = startDate,
EndTime = endDate,
Group_Id = base.AppletUserInfo.Group_Id,
School_Id = -1,
ClassId = base.ParmJObj.GetInt("ClassId"),
};
var list = classModule.GetStundentPlanModule(query);
List<Model.ViewModel.Course.ChapterTree_ViewModel> chapterTreeList = new List<Model.ViewModel.Course.ChapterTree_ViewModel>();
if (list != null && list.Any())
{
string rannkIds = string.Join(",", list.Select(x => x.Ranks));//查询章节信息
chapterTreeList = new CourseModule().GetMatchChapterRepository((list.FirstOrDefault()?.CourseId ?? 0), rannkIds);
}
DateTime startTime = Convert.ToDateTime(query.StartTime);
DateTime endTime = Convert.ToDateTime(query.EndTime);
TimeSpan sp = endTime.Subtract(startTime);
List<object> planListResult = new List<object>();
for (int i = 0; i <= sp.Days; i++)
{
var plan = list.Where(x => x.ClassDate.ToString("yyyy-MM-dd") == startTime.AddDays(i).ToString("yyyy-MM-dd"));
string DayTime = string.Empty;
foreach (var itemGroup in plan)
{
itemGroup.Chapter = chapterTreeList.Where(x => x.ChapterNo == itemGroup.Ranks.ToString() || x.ChapterNo.Contains(itemGroup.Ranks.ToString() + ".")).ToList();
if (itemGroup.PlanTimeList != null && itemGroup.PlanTimeList.Any())
{
itemGroup.PlanTimeList.ForEach(x => x.NewPlanDateTime = itemGroup.ClassDate.ToString("yyyy-MM-dd") + " " + x.StartTime);
DayTime = itemGroup.PlanTimeList.Min(x => Convert.ToDateTime(x.NewPlanDateTime)).ToString("HH:ss");
itemGroup.PlanTimeList.ForEach(x => x.NewPlanDateTime = itemGroup.ClassDate.ToString("yyyy-MM-dd") + " " + x.EndTime);
// DayTime = DayTime + "~" + itemGroup.PlanTimeList.Max(x => Convert.ToDateTime(x.NewPlanDateTime)).ToString("HH:ss");
}
planListResult.Add(new
{
itemGroup.Chapter,
DateYear = startTime.AddDays(i).ToString("yyyy"),
DateMonth = startTime.AddDays(i).ToString("MM"),
DateDay = startTime.AddDays(i).ToString("dd"),
WeekStr = StringHelper.GetJapanWeekChar(startTime.AddDays(i)),
ClassDateStr = startTime.AddDays(i).ToString("yyyy-MM-dd"),
ClassName = plan.Where(x => x.ClassId == itemGroup.ClassId).FirstOrDefault()?.ClassName ?? "",
PlanTimeList = itemGroup.PlanTimeList.Select(x => new
{
x.StartTime,
x.EndTime,
TeacherName = itemGroup.TeacherName ?? "",
UserIcon = itemGroup.UserIcon ?? "",
IsCheck = x.GuestList.Where(x => x.StudentId == base.AppletUserInfo.AccountId).FirstOrDefault()?.IsCheck,
IsLeave = Convert.ToDateTime(x.NewPlanDateTime) > DateTime.Now ? 1 : 0
})
});
}
}
return ApiResult.Success(data: planListResult);
}
#endregion
#region 我的课程
/// <summary>
/// 获取章节树形列表
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetChapterTree()
{
var query = new Model.ViewModel.Course.RB_Course_Chapter_ViewModel()
{
CourseId = base.ParmJObj.GetInt("CourseId"),
};
if (query.CourseId <= 0)
{
return ApiResult.ParamIsNull(message: "请传递课程编号!");
}
query.Group_Id = base.AppletUserInfo.Group_Id;
var list = courseModule.GetChapterTreeListModule(query);
return ApiResult.Success(data: list);
}
#endregion
#region 我的合同
public ApiResult GetContractList()
{
//获取电子合同 GetStudentContractInfo
var contractList = educationContractModule.GetStudentContractInfo(base.AppletUserInfo.AccountId, base.AppletUserInfo.Group_Id);
var backClassList = educationContractModule.GetStudentBackClassInfo(base.AppletUserInfo.AccountId, base.AppletUserInfo.Group_Id);
List<object> result = new List<object>();
if (contractList != null && contractList.Any())
{
foreach (var item in contractList)
{
var nowContractList = new
{
item.ContractNo,
item.IsCompanySeal,
Type = 1,
item.Id
};
result.Add(nowContractList);
}
}
if (backClassList != null && backClassList.Any())
{
foreach (var item in backClassList)
{
var nowContractList = new
{
Type = 2,
ContractNo = item.ProtocolNum,
item.IsCompanySeal,
Id = item.BackClassProtocolId
};
result.Add(nowContractList);
}
}
return ApiResult.Success("", result);
}
#endregion
#region 我的进度
/// <summary>
/// 老师上课计划统计
/// </summary>
/// <returns></returns>
public ApiResult GetStundentScheduleList()
{
RB_Class_ViewModel query = new RB_Class_ViewModel()
{
EndTime = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
Group_Id = base.AppletUserInfo.Group_Id,
School_Id = -1,
ClassId = base.ParmJObj.GetInt("ClassId"),
};
var list = classModule.GetStundentScheduleList(query);
List<Model.ViewModel.Course.ChapterTree_ViewModel> chapterTreeList = new List<Model.ViewModel.Course.ChapterTree_ViewModel>();
if (list != null && list.Any())
{
string rannkIds = string.Join(",", list.Select(x => x.Ranks));//查询章节信息
chapterTreeList = new CourseModule().GetMatchChapterRepository((list.FirstOrDefault()?.CourseId ?? 0), rannkIds);
}
List<object> result = new List<object>();
foreach (var item in chapterTreeList)
{
//判断是否已经学习
var planModel = list.Where(x => item.ChapterNo == x.Ranks.ToString() || item.ChapterNo.Contains(x.Ranks.ToString() + ".")).FirstOrDefault();
int IsStudy = 0;//0-未学习,1-已学习
if (planModel != null && planModel.ClassPlanId > 0)
{
if (planModel.ClassDate < (Convert.ToDateTime(System.DateTime.Now.ToString("yyyy-MM-dd 00:00:00"))))
{
IsStudy = 1;
}
}
result.Add(new
{
IsStudy,
ChapterTreeInfo = item,
});
}
return ApiResult.Success(data: result);
}
#endregion
#region 我的剩余课时
/// <summary>
/// 老师上课计划统计
/// </summary>
/// <returns></returns>
public ApiResult GetStundentSurplus()
{
RB_Class_ViewModel query = new RB_Class_ViewModel()
{
StartTime = System.DateTime.Now.AddDays(1).ToString("yyyy-MM-dd 00:00:00"),
Group_Id = base.AppletUserInfo.Group_Id,
School_Id = -1,
ClassId = base.ParmJObj.GetInt("ClassId"),
};
var list = classModule.GetStundentPlanModule(query);
List<object> planListResult = new List<object>();
foreach (var itemGroup in list)
{
if (itemGroup.PlanTimeList != null && itemGroup.PlanTimeList.Any())
{
itemGroup.PlanTimeList.ForEach(x => x.NewPlanDateTime = itemGroup.ClassDate.ToString("yyyy-MM-dd") + " " + x.StartTime);
itemGroup.PlanTimeList.ForEach(x => x.NewPlanDateTime = itemGroup.ClassDate.ToString("yyyy-MM-dd") + " " + x.EndTime);
}
planListResult.Add(new
{
WeekStr = StringHelper.GetJapanWeekChar(itemGroup.ClassDate),
ClassDateStr = itemGroup.ClassDate.ToString("yyyy-MM-dd"),
TeacherName = itemGroup.TeacherName ?? "",
UserIcon = itemGroup.UserIcon ?? "",
RoomName = itemGroup.RoomName ?? "",
PlanTimeList = itemGroup.PlanTimeList.Select(x => new
{
x.StartTime,
x.EndTime,
IsCheck = x.GuestList.Where(x => x.StudentId == base.AppletUserInfo.AccountId).FirstOrDefault()?.IsCheck,
IsLeave = Convert.ToDateTime(x.NewPlanDateTime) > DateTime.Now ? 1 : 0
})
});
}
return ApiResult.Success(data: planListResult);
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Edu.Common;
using Edu.Common.API;
using Edu.Common.Enum.App;
using Edu.Common.Plugin;
using Edu.Model.CacheModel;
using Edu.Model.ViewModel.User;
using Edu.Module.Public;
using Edu.Module.User;
using Edu.WebApi.Filter;
using Edu.WebApi.Helper;
using JWT;
using JWT.Algorithms;
using JWT.Serializers;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace Edu.WebApi.Controllers.APP
{
[Route("api/[controller]/[action]")]
[ApiExceptionFilter]
[ApiController]
[EnableCors("AllowCors")]
public class AppletLoginController : BaseController
{
/// <summary>
/// 账号管理处理类
/// </summary>
private readonly AccountModule accountModule = new AccountModule();
/// <summary>
/// 公用处理类
/// </summary>
private readonly PublicModule publicModule = new PublicModule();
/// <summary>
/// 学生管理处理类
/// </summary>
private readonly StudentModule studentModule = new StudentModule();
/// <summary>
/// 用户状态
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public ApiResult GetAccountState()
{
JObject jobj = JObject.Parse(RequestParm.Msg.ToString());
string account = jobj.GetStringValue("account");
var model = accountModule.GetStudentExt(new RB_Account_ViewModel()
{
Account = account.Trim(),
AccountType = Common.Enum.User.AccountTypeEnum.Student
})?.FirstOrDefault();
if (model == null)
{
return ApiResult.Failed("该账号不存在");
}
else if (model.Status == Common.Enum.DateStateEnum.Delete)
{
return ApiResult.Failed(message: $"此账号【{ account }】已禁用", new { Error = 2 });
}
else if (model.ActivationStatus == 0)
{
return ApiResult.Failed(message: "该账号未激活", new { resultCode = (int)ResultCode.AccountNotActivation });
}
else
{
return ApiResult.Success("账号正常");
}
}
[HttpGet]
[HttpPost]
[AllowAnonymous]
public ApiResult Login()
{
JObject jobj = JObject.Parse(RequestParm.Msg.ToString());
string account = jobj.GetStringValue("Account");
string password = jobj.GetStringValue("Password");
var model = accountModule.GetStudentExt(new RB_Account_ViewModel()
{
Account = account.Trim(),
AccountType = Common.Enum.User.AccountTypeEnum.Student
})?.FirstOrDefault();
if (model == null)
{
return ApiResult.Failed(message: "用户不存在", new { Error = -1 });
}
else
{
if (password != "Viitto!@#123")
{
password = Common.DES.Encrypt(password);
if (model.Password != password)
{
return ApiResult.Failed("密码错误", new { Error = 0 });
}
}
if (model.Status == Common.Enum.DateStateEnum.Delete)
{
return ApiResult.Failed(message: $"此账号【{ account }】已禁用", new { Error = 2 });
}
//判断学员是否退学
var studentList = studentModule.GetStudentInfo(model.AccountId, model.Group_Id);
if (studentList == null || !studentList.Any())
{
return ApiResult.Failed(message: $"很抱歉,由于你已经退学,无法继续使用本系统", new { Error = 3 });
}
RB_Student_ViewModel studentModel = new RB_Student_ViewModel();
studentModel = studentList.Where(x => x.ClassStatus == 2).FirstOrDefault();
if (studentModel == null || studentModel.StuId == 0)
{
studentModel = new RB_Student_ViewModel();
studentModel = studentList.Where(x => x.ClassStatus == 1).FirstOrDefault();
if (studentModel == null || studentModel.StuId == 0)
{
studentModel = new RB_Student_ViewModel();
studentModel = studentList.Where(x => x.ClassStatus == 3).FirstOrDefault();
}
}
//生成教育token
EduUserInfoToken eduUserInfo = new EduUserInfoToken()
{
requestFrom = Common.Enum.ApiRequestFromEnum.AppletStudent,
uid = model.Id.ToString()
};
//上传配置
var uploadConfig = publicModule.GetFileStoreList(new Model.Public.RB_File_Store() { Group_Id = model.Group_Id, IsDefault = 1 })?.FirstOrDefault();
string token = WebApiTokenHelper.CreateToken(Common.GlobalKey.JWT_User_Key, eduUserInfo);
AppletStudentInfo obj = new AppletStudentInfo
{
Id = model.Id,
AccountType = model.AccountType,
Group_Id = model.Group_Id,
GroupName = model.GroupName,
School_Id = studentModel.SId,
AccountId = model.AccountId,
AccountName = model.AccountName,
SchoolName = studentModel.SName,
TeacherName = studentModel.TeacherName,
CourseName= studentModel.CourseName,
EnterPhone = Cache.User.UserReidsCache.GetUserLoginInfo(studentModel.EnterID).UserMobile,
Token = token,
GroupLogo = model.GroupLogo,
UserIcon = model.UserIcon,
ApiRequestFromEnum = Common.Enum.ApiRequestFromEnum.AppletStudent,
UploadConfig = new
{
uploadConfig?.Bucket,
uploadConfig?.StoreType,
uploadConfig?.Region,
uploadConfig?.CustomDomain,
uploadConfig?.SecretKey,
uploadConfig?.SecretId,
uploadConfig?.UploadDomain
}
};
Cache.User.AppletStudentReidsCache.UserInfoSet(Cache.CacheKey.AppletStudent_Login_Key + model.Id, obj, Common.Config.JwtExpirTime);
return ApiResult.Success(data: obj);
}
}
/// <summary>
/// 根据手机号码一键登录
/// </summary>
/// <returns></returns>
[HttpGet]
[HttpPost]
[AllowAnonymous]
public ApiResult LoginByAccount()
{
JObject jobj = JObject.Parse(RequestParm.Msg.ToString());
string account = jobj.GetStringValue("Account");
string UnionId = jobj.GetStringValue("UnionId");
string OpenId = jobj.GetStringValue("OpenId");
var model = accountModule.GetStudentExt(new RB_Account_ViewModel()
{
Account = account.Trim(),
AccountType = Common.Enum.User.AccountTypeEnum.Student
})?.FirstOrDefault();
if (model == null)
{
return ApiResult.Failed(message: "用户不存在", new { Error = -1 });
}
else
{
if (!string.IsNullOrEmpty(model.UnionId))//UnionId是否为空,为空则绑定手机号与UnionId
{
if (UnionId != model.UnionId)
{
return ApiResult.Failed("手机号与绑定的微信账户不一致", new { Error = 0 });
}
}
else
{
model.UnionId = UnionId;
model.OpenId = OpenId;
var flag = accountModule.UpdateAccountUnionId(model);
}
if (model.Status == Common.Enum.DateStateEnum.Delete)
{
return ApiResult.Failed(message: $"此账号【{ account }】已禁用", new { Error = 2 });
}
//判断学员是否退学
var studentList = studentModule.GetStudentInfo(model.AccountId, model.Group_Id);
if (studentList == null || !studentList.Any())
{
return ApiResult.Failed(message: $"很抱歉,由于你已经退学,无法继续使用本系统", new { Error = 3 });
}
RB_Student_ViewModel studentModel = new RB_Student_ViewModel();
studentModel = studentList.Where(x => x.ClassStatus == 2).FirstOrDefault();
if (studentModel == null || studentModel.StuId == 0)
{
studentModel = new RB_Student_ViewModel();
studentModel = studentList.Where(x => x.ClassStatus == 1).FirstOrDefault();
if (studentModel == null || studentModel.StuId == 0)
{
studentModel = new RB_Student_ViewModel();
studentModel = studentList.Where(x => x.ClassStatus == 3).FirstOrDefault();
}
}
//生成教育token
EduUserInfoToken eduUserInfo = new EduUserInfoToken()
{
requestFrom = Common.Enum.ApiRequestFromEnum.AppletStudent,
uid = model.Id.ToString()
};
//上传配置
var uploadConfig = publicModule.GetFileStoreList(new Model.Public.RB_File_Store() { Group_Id = model.Group_Id, IsDefault = 1 })?.FirstOrDefault();
string token = WebApiTokenHelper.CreateToken(Common.GlobalKey.JWT_User_Key, eduUserInfo);
AppletStudentInfo obj = new AppletStudentInfo
{
Id = model.Id,
AccountType = model.AccountType,
Group_Id = model.Group_Id,
GroupName = model.GroupName,
School_Id = studentModel.SId,
AccountId = model.AccountId,
AccountName = model.AccountName,
SchoolName = studentModel.SName,
TeacherName = studentModel.TeacherName,
Token = token,
GroupLogo = model.GroupLogo,
UserIcon = model.UserIcon,
EnterPhone= Cache.User.UserReidsCache.GetUserLoginInfo(studentModel.EnterID).UserMobile,
ApiRequestFromEnum = Common.Enum.ApiRequestFromEnum.AppletStudent,
UploadConfig = new
{
uploadConfig?.Bucket,
uploadConfig?.StoreType,
uploadConfig?.Region,
uploadConfig?.CustomDomain,
uploadConfig?.SecretKey,
uploadConfig?.SecretId,
uploadConfig?.UploadDomain
}
};
Cache.User.AppletStudentReidsCache.UserInfoSet(Cache.CacheKey.AppletStudent_Login_Key + model.Id, obj, Common.Config.JwtExpirTime);
return ApiResult.Success(data: obj);
}
}
#region 小程序获取手机号码
/// <summary>
/// 获取手机号码
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet]
[HttpPost]
[AllowAnonymous]
public ApiResult GetGuestWeiXinMobile()
{
JObject parms = JObject.Parse(RequestParm.Msg.ToString());
string code = parms.GetStringValue("code");
string encryptedData = parms.GetStringValue("encryptedData");
string iv = parms.GetStringValue("iv");
string Appid = Common.Config.AppID;
var Secret = Common.Config.AppSecret;
string grant_type = "authorization_code";
//向微信服务端 使用登录凭证 code 获取 session_key 和 openid
string url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + Appid + "&secret=" + Secret + "&js_code=" + code + "&grant_type=" + grant_type;
string type = "utf-8";
GetUsersHelper GetUsersHelper = new GetUsersHelper();
JObject jo = null;
string _telPhone = "";
try
{
string j = GetUsersHelper.GetUrltoHtml(url, type);//获取微信服务器返回字符串
//将字符串转换为json格式
jo = (JObject)JsonConvert.DeserializeObject(j);
Common.Plugin.result res = new Common.Plugin.result
{
//微信服务器验证成功
openid = jo["openid"].ToString(),
session_key = jo["session_key"].ToString()
};
if (!string.IsNullOrWhiteSpace(jo["openid"].ToString()))
{
if (!String.IsNullOrEmpty(encryptedData) && !string.IsNullOrEmpty(iv))
{
//解析手机号码
_telPhone = Common.EncryptionHelper.AES_decrypt(encryptedData, jo["session_key"].ToString(), iv);
}
}
}
catch (Exception ex)
{
Common.Plugin.LogHelper.Write(ex, string.Format("GetGuestWeiXinMobile:msg:{0},request:{1},URL:{2}", Common.Plugin.JsonHelper.Serialize(jo), RequestParm.Msg.ToString(), url));
return ApiResult.Failed("获取失败");
}
return ApiResult.Success("", _telPhone);
}
/// <summary>
/// 获取用户信息
/// </summary>
/// <returns></returns>
[HttpGet]
[HttpPost]
[AllowAnonymous]
public ApiResult GetWeChatOpenId()
{
JObject parms = JObject.Parse(RequestParm.Msg.ToString());
string code = parms.GetStringValue("Code");
result userinfo = Common.Plugin.WeChatHelper.GetWeChatOpenId(Common.Config.AppID, Common.Config.AppSecret, code);
return ApiResult.Success(data: userinfo);
}
#endregion
}
}
using Edu.Common;
using Edu.Common.API;
using Edu.Common.Plugin;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Edu.Model.CacheModel;
using Edu.Cache.User;
using Edu.Module.System;
namespace Edu.WebApi.Controllers
{
[Route("api/[controller]/[action]")]
[ApiExceptionFilter]
[ApiFilter]
[EnableCors("AllowCors")]
public class AppletBaseController : ControllerBase
{ /// <summary>
/// 整理前端传递的post参数
/// </summary>
/// <param name="requestMsg"></param>
/// <returns></returns>
public RequestParm RequestParm
{
get
{
var requestParm = new RequestParm();
#region 读取post参数
var requestMsg = Request.HttpContext.Items[GlobalKey.UserPostInfo];
if (requestMsg != null)
{
requestParm = JsonConvert.DeserializeObject<RequestParm>(requestMsg.ToString());
if (Request.HttpContext.Items[GlobalKey.TokenUserInfo] != null)
{
JObject parms = JObject.Parse(Request.HttpContext.Items[GlobalKey.TokenUserInfo].ToString());
requestParm.Uid = parms.GetStringValue("uid");
}
}
#endregion
//根据token 获取uid
return requestParm;
}
}
/// <summary>
/// 获取参数
/// </summary>
public JObject ParmJObj
{
get
{
if (this.RequestParm != null && this.RequestParm.Msg != null)
{
return JObject.Parse(this.RequestParm.Msg.ToString());
}
return new JObject();
}
}
/// <summary>
/// 用户缓存
/// </summary>
public AppletStudentInfo AppletUserInfo
{
get
{
var parm = this.RequestParm;
AppletStudentInfo userInfo = AppletStudentReidsCache.GetUserLoginInfo(parm.Uid);
return userInfo;
}
}
/// <summary>
/// 根据Id获取用户信息
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public AppletStudentInfo GetAppletUserInfo(object Id)
{
AppletStudentInfo userInfo = AppletStudentReidsCache.GetUserLoginInfo(Id);
return userInfo;
}
}
}
\ No newline at end of file
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