Commit 3e12f67d authored by 吴春's avatar 吴春

提交学生app登录以及首页接口

parent 89c96702
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 AppStudentReidsCache
{
/// <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, AppStudentInfo model, int JwtExpirTime)
{
try
{
TimeSpan ts = GetExpirTime(JwtExpirTime);
redis.StringSet<AppStudentInfo>(cacheKey, model, ts);
}
catch (Exception ex)
{
Common.Plugin.LogHelper.Write(ex, "UserInfoSet缓存设置失败");
}
}
/// <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 AppStudentInfo GetUserLoginInfo(object Id, ApiRequestFromEnum apiRequestFromEnum= ApiRequestFromEnum.AppStudent)
{
AppStudentInfo userInfo = null;
if (Id != null)
{
string cacheKey = Cache.CacheKey.AppStudent_Login_Key + Id.ToString();
try
{
userInfo = redis.StringGet<AppStudentInfo>(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 AppStudentInfo
{
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.AppStudent_Login_Key + Id.ToString(), userInfo, Common.Config.JwtExpirTime);
}
}
}
}
else
{
userInfo = new AppStudentInfo();
}
return userInfo;
}
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Edu.CacheManager.Base;
using Edu.Common.Enum;
namespace Edu.Cache.App
{
public class MsgUserRedisCache
{ /// <summary>
/// 使用redis第几号库
/// </summary>
public static readonly int REDIS_DB3 = 3;
static readonly RedisHelper redis = new RedisHelper(REDIS_DB3);
/// <summary>
/// 添加用户发送验证码时间记录
/// </summary>
/// <param name="mobileNumber">手机号码</param>
public static bool AddUserSendCodeHistory(string mobileNumber)
{
string key = Cache.CacheKey.MsgStudent_Login_Key + mobileNumber;
List<DateTime> codeTimeList = redis.StringGet<List<DateTime>>(key);
if (codeTimeList == null)
{
codeTimeList = new List<DateTime>();
}
codeTimeList.Add(DateTime.Now);
TimeSpan ts = GetExpirTime(Common.Config.JwtExpirTime);
return redis.StringSet<List<DateTime>>(key, codeTimeList, ts);
}
/// <summary>
/// 设置缓存
/// </summary>
/// <param name="cacheKey"></param>
/// <param name="Data"></param>
/// <param name="JwtExpirTime"></param>
public static void SetSendCode(string cacheKey, object Data, int JwtExpirTime)
{
try
{
TimeSpan ts = GetExpirTime(JwtExpirTime);
redis.StringSet(cacheKey, Data, ts);
}
catch (Exception)
{
}
}
/// <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>
/// 验证是否可以发送验证码
/// </summary>
/// <param name="mobileNumber">手机号码</param>
/// <param name="message">返回消息</param>
public static bool CheckCanSendCode(string mobileNumber, out string message)
{
message = "";
//Monitor.Enter和Monitor.Exit
string key = string.Concat(CacheKey.MsgStudent_Login_Key, mobileNumber);
List<DateTime> codeTimeList = redis.StringGet<List<DateTime>>(key);
if (codeTimeList != null)
{
//计算阿里短信业务限流
codeTimeList = codeTimeList.Where(t => t >= DateTime.Now.AddDays(-1)).ToList();
//去除一天以外的记录
TimeSpan ts = GetExpirTime(Common.Config.JwtExpirTime);
redis.StringSet(key, codeTimeList, ts);
if (codeTimeList.Count() >= 10)
{
message = "24小时内不能发送超过10条验证码";
return false;
}
if (codeTimeList.Where(t => t >= DateTime.Now.AddHours(-1)).Count() >= 5)
{
message = "1小时内不能发送超过5条验证码";
return false;
}
if (codeTimeList.Where(t => t >= DateTime.Now.AddMinutes(-1)).Count() >= 1)
{
message = "1分钟内只能发送1条验证码";
return false;
}
return true;
}
else
{
return true;
}
}
/// <summary>
/// 获取短信验证码
/// </summary>
/// <param name="Id">账号Id</param>
/// <param name="apiRequestFromEnum">请求来源</param>
/// <returns></returns>
public static string GetUserCode(object Id, ApiRequestFromEnum apiRequestFromEnum = ApiRequestFromEnum.WebAdmin)
{
string code = string.Empty;
if (Id != null)
{
string cacheKey = Cache.CacheKey.MsgStudent_Login_Key + Id.ToString();
try
{
code = redis.StringGet<string>(cacheKey);
}
catch (Exception ex)
{
Common.Plugin.LogHelper.Write(ex, "GetUserCode");
}
}
return code;
}
}
}
......@@ -10,5 +10,16 @@ namespace Edu.Cache
/// 用户登录缓存Key
/// </summary>
public static string User_Login_Key = "Edu_User_Login_";
/// <summary>
///app学生登录缓存Key
/// </summary>
public static string AppStudent_Login_Key = "App_Student_Login_";
/// <summary>
/// 短信号码缓存Key
/// </summary>
public static string MsgStudent_Login_Key = "Msg_Student_Login_";
}
}
using Edu.Common.Enum;
namespace Edu.Common.API
{
/// <summary>
/// 用户Token
/// </summary>
public interface IAppStudentInfoToken
{
/// <summary>
/// 用户ID
/// </summary>
public string uid { get; set; }
/// <summary>
/// 请求消息来源
/// </summary>
public ApiRequestFromEnum requestFrom { get; set; }
}
/// <summary>
/// API请求token携带的用户信息
/// </summary>
public class AppStudentInfoToken : IAppStudentInfoToken
{
/// <summary>
/// 用户ID
/// </summary>
public string uid { get; set; }
/// <summary>
/// 请求消息来源
/// </summary>
public ApiRequestFromEnum requestFrom { get; set; }
/// <summary>
/// 集团id
/// </summary>
public int groupId { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
using Edu.Common.Plugin;
namespace Edu.Common.Enum.App
{
public enum InterestEnum
{
/// <summary>
/// 考试
/// </summary>
[EnumField("考试")]
Examination = 0,
/// <summary>
/// 游学
/// </summary>
[EnumField("游学")]
StudyTour = 1,
/// <summary>
/// 留学
/// </summary>
[EnumField("留学")]
StudyAbroad = 2,
/// <summary>
/// 旅游
/// </summary>
[EnumField("旅游")]
Travel = 3,
/// <summary>
/// 影视
/// </summary>
[EnumField("影视")]
Movies = 4,
/// <summary>
/// 动漫
/// </summary>
[EnumField("动漫")]
Comic = 5,
/// <summary>
/// 工作
/// </summary>
[EnumField("工作")]
Work = 6
}
}
using System;
using System.Collections.Generic;
using System.Text;
using Edu.Common.Plugin;
namespace Edu.Common.Enum.App
{
public enum JapanbaseInfoEnum
{
/// <summary>
/// 完全没学过
/// </summary>
[EnumField("完全没学过")]
NotLikely = 1,
/// <summary>
/// 懂得50音
/// </summary>
[EnumField("懂得50音")]
Pinyin = 2,
/// <summary>
/// 会一些单词
/// </summary>
[EnumField("会一些单词")]
ALittleBit = 3,
/// <summary>
/// 经过系统学习
/// </summary>
[EnumField("经过系统学习")]
System = 4,
/// <summary>
/// 学过一段时间
/// </summary>
[EnumField("学过一段时间")]
Span = 5
}
}
......@@ -79,5 +79,7 @@ namespace Edu.Model.CacheModel
/// 上传配置
/// </summary>
public object UploadConfig { get; set; }
public int ActivationStatus { get; set; }
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Text;
using Edu.Common.Enum;
using VT.FW.DB;
namespace Edu.Model.Entity.App
{
/// <summary>
/// app首页banner图片
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_HomePage_Banner
{
/// <summary>
/// 编号
/// </summary>
public int BannerId { get; set; }
/// <summary>
/// 排序
/// </summary>
public int Sort { get; set; }
/// <summary>
/// 图片
/// </summary>
public string BannerPic { get; set; }
/// <summary>
/// 链接
/// </summary>
public string BannerUrl { get; set; }
/// <summary>
/// 集团编号
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 学校编号
/// </summary>
public int School_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; }
/// <summary>
/// 删除状态(0-正常,1-禁用)
/// </summary>
public DateStateEnum Status { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
using Edu.Common.Enum;
using VT.FW.DB;
namespace Edu.Model.Entity.App
{
/// <summary>
/// app首页banner图片
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_HomePage_Lable
{
/// <summary>
/// 编号
/// </summary>
public int LableId { get; set; }
/// <summary>
/// 排序
/// </summary>
public int Sort { get; set; }
/// <summary>
/// 图片
/// </summary>
public string LablePic { get; set; }
/// <summary>
/// 链接
/// </summary>
public string LableUrl { get; set; }
/// <summary>
/// 链接
/// </summary>
public string LableName { get; set; }
/// <summary>
/// 集团编号
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 学校编号
/// </summary>
public int School_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; }
/// <summary>
/// 删除状态(0-正常,1-禁用)
/// </summary>
public DateStateEnum Status { get; set; }
}
}
......@@ -12,65 +12,65 @@ namespace Edu.Model.Entity.User
[DB(ConnectionName = "DefaultConnection")]
public class RB_Account
{
/// <summary>
/// 主键(账号编号)
/// </summary>
public int Id { get; set; }
/// <summary>
/// 账号
/// </summary>
public string Account { get; set; }
/// <summary>
/// 密码
/// </summary>
public string Password { get; set; }
/// <summary>
/// 账号类型(1-管理端,2,-教师端,3-助教,4-学生)
/// </summary>
public AccountTypeEnum AccountType { get; set; }
/// <summary>
/// 关联Id【1-关联rb_manager(MId),2-关联rb_teacher(TId),3-关联rb_assist(AId),4-关联rb_student(StuId)】
/// </summary>
public int AccountId { 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; }
/// <summary>
/// 集团编号
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 学校编号
/// </summary>
public int School_Id { get; set; }
/// <summary>
/// 删除状态
/// </summary>
public DateStateEnum Status { get; set; }
/// <summary>
/// 主键(账号编号)
/// </summary>
public int Id { get; set; }
/// <summary>
/// 账号
/// </summary>
public string Account { get; set; }
/// <summary>
/// 密码
/// </summary>
public string Password { get; set; }
/// <summary>
/// 账号类型(1-管理端,2,-教师端,3-助教,4-学生)
/// </summary>
public AccountTypeEnum AccountType { get; set; }
/// <summary>
/// 关联Id【1-关联rb_manager(MId),2-关联rb_teacher(TId),3-关联rb_assist(AId),4-关联rb_student(StuId)】
/// </summary>
public int AccountId { 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; }
/// <summary>
/// 集团编号
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 学校编号
/// </summary>
public int School_Id { get; set; }
/// <summary>
/// 删除状态
/// </summary>
public DateStateEnum Status { get; set; }
/// <summary>
/// 年假天数
......@@ -82,5 +82,14 @@ namespace Edu.Model.Entity.User
/// </summary>
public int DirectSupervisor { get; set; }
/// <summary>
/// 微信openid
/// </summary>
public string OpenId { get; set; }
/// <summary>
/// 学生激活状态0-未激活,1-已激活
/// </summary>
public int ActivationStatus { get; set; }
}
}
......@@ -103,5 +103,17 @@ namespace Edu.Model.Entity.User
/// </summary>
public int StuStatus { get; set; }
/// <summary>
/// 兴趣爱好
/// </summary>
public string Interest { get; set; }
/// <summary>
/// 日语基础信息
/// </summary>
public int JapanBaseInfo { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Edu.AOP.CustomerAttribute;
using Edu.Model.Entity.App;
using Edu.Repository.App;
namespace Edu.Module.System
{
public class AppHomePageModule
{
/// <summary>
/// 首页banner仓储层对象
/// </summary>
private readonly RB_HomePage_BannerRepository homePageBannerRepository = new RB_HomePage_BannerRepository();
/// <summary>
/// 首页标签仓储层
/// </summary>
private readonly RB_HomePage_LableRepository homeLableRepository = new RB_HomePage_LableRepository();
#region 首页banner列表
/// <summary>
/// 获取学生app首页banner列表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_HomePage_Banner> GetHomePageBannerList(RB_HomePage_Banner query)
{
return homePageBannerRepository.GetHomePageBannerList(query);
}
[TransactionCallHandler]
public bool SetHomePage(List<RB_HomePage_Banner> list)
{
bool flag = false;
var oldList = homePageBannerRepository.GetHomePageBannerList(new RB_HomePage_Banner { Group_Id = list.FirstOrDefault()?.Group_Id ?? 0 });
oldList.ForEach(x => x.Status = Common.Enum.DateStateEnum.Delete);
homePageBannerRepository.UpdateBatch(oldList);
foreach (var item in list)
{
if (item.BannerId == 0)
{
flag = homePageBannerRepository.Insert(item) > 0;
}
else
{
flag = homePageBannerRepository.Update(item);
}
}
return flag;
}
#endregion
#region 首页banner列表
/// <summary>
/// 获取学生app首页banner列表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_HomePage_Lable> GetHomePageLableList(RB_HomePage_Lable query)
{
return homeLableRepository.GetHomePageLableList(query);
}
[TransactionCallHandler]
public bool SetHomePageLable(List<RB_HomePage_Lable> list)
{
bool flag = false;
var oldList = homeLableRepository.GetHomePageLableList(new RB_HomePage_Lable { Group_Id = list.FirstOrDefault()?.Group_Id ?? 0 });
oldList.ForEach(x => x.Status = Common.Enum.DateStateEnum.Delete);
homeLableRepository.UpdateBatch(oldList);
foreach (var item in list)
{
if (item.LableId == 0)
{
flag = homeLableRepository.Insert(item) > 0;
}
else
{
flag = homeLableRepository.Update(item);
}
}
return flag;
}
#endregion
}
}
......@@ -288,6 +288,51 @@ namespace Edu.Module.System
}
}
}
public void SendCode(string code, Common.Enum.System.BaseTemplateTypeEnum BaseTemplateType, RB_Msg_Log msgLogModel)
{
//查询当前集团的短信基础配置
var msgBaseList = msgBaseRepository.GetListRepository(new RB_Msg_Base_Function_ViewModel { Group_Id = msgLogModel.Group_Id });
//查询当前下面是否有模板
var allMsgBaseTemplateList = msgBaseTemplateRepository.GetListRepository(new RB_Msg_BaseTemplate_ViewModel { BaseTemplateType = BaseTemplateType, Group_Id = msgLogModel.Group_Id }).Where(x => x.TemplateStaus == 0);
if (msgBaseList != null && msgBaseList.Any() && allMsgBaseTemplateList != null && allMsgBaseTemplateList.Any())
{
RB_Msg_Base_Function_ViewModel model = new RB_Msg_Base_Function_ViewModel(); // msgBaseList.OrderBy(x => x.ID).FirstOrDefault();
if (allMsgBaseTemplateList.Where(x => x.BaseTemplateType == BaseTemplateType).GroupBy(x => x.StoreType).Count() > 1)
{
model = msgBaseList.OrderBy(x => x.ID).FirstOrDefault();
}
else
{
model = msgBaseList.Where(x => x.StoreType == allMsgBaseTemplateList.FirstOrDefault().StoreType).FirstOrDefault();
}
if (model != null && model.ID > 0)
{
if (!string.IsNullOrWhiteSpace(model.MsgConfigure))
{
msgLogModel.StoreType = model.StoreType;
msgLogModel.MsgConfigure = model.MsgConfigure;
int id = msgLogRepository.Insert(msgLogModel);
model.MsgBase = Common.Plugin.JsonHelper.DeserializeObject<RB_Msg_Base_ViewModel>(model.MsgConfigure);
var msgBaseTemplateList = allMsgBaseTemplateList.Where(x => x.BaseTemplateType == BaseTemplateType);
if (!string.IsNullOrWhiteSpace(model.MsgBase.AccessKeyId) && !string.IsNullOrWhiteSpace(model.MsgBase.AccessSecret) && !string.IsNullOrWhiteSpace(model.MsgBase.Domain) && !string.IsNullOrWhiteSpace(model.MsgBase.RegionId))
{
if (msgBaseTemplateList != null && msgBaseTemplateList.Any(x => x.TemplateStaus == 0))
{
var msgBaseTemplateModel = msgBaseTemplateList.Where(x => x.TemplateStaus == 0).FirstOrDefault();
if (Common.Config.IsSendMsg == 1)
{
ThirdCore.Message.SMSService.SendCode(msgLogModel.ReceiverPhone, code, msgBaseTemplateModel.TemplateId, msgBaseTemplateModel.Sign, model.MsgBase.Domain, model.MsgBase.AccessKeyId, model.MsgBase.AccessSecret, model.MsgBase.RegionId, id.ToString());
}
}
}
}
}
}
// ThirdCore.Message.SMSService.SendMsg("13551132417", PhoneMessage, "SMS_201722097", "印象之旅", "dysmsapi.aliyuncs.com", "LTAIwE7l9dImZSa3", "j47Ajn0d0WzUCIX8Biyj3P2r8QDltI", "cn-hangzhou");
}
#endregion
}
}
......@@ -39,15 +39,15 @@ namespace Edu.Module.User
return accountRepository.GetUpdateAccountListRepository(query);
}
/// <summary>
/// 获取账号分页列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="rowsCount"></param>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Account_ViewModel> GetAccountPageListModule(int pageIndex, int pageSize, out long rowsCount, RB_Account_ViewModel query)
/// <summary>
/// 获取账号分页列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="rowsCount"></param>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Account_ViewModel> GetAccountPageListModule(int pageIndex, int pageSize, out long rowsCount, RB_Account_ViewModel query)
{
return accountRepository.GetAccountPageListRepository(pageIndex, pageSize, out rowsCount, query);
}
......@@ -148,7 +148,7 @@ namespace Edu.Module.User
[TransactionCallHandler]
public bool SetBatchResetPassword(List<RB_Account_ViewModel> list, string newPwd)
{
bool flag=false;
bool flag = false;
foreach (var model in list)
{
......@@ -166,5 +166,36 @@ namespace Edu.Module.User
}
return flag;
}
/// <summary>
/// 修改密码以及更新激活状态
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[TransactionCallHandler]
public bool SetResetPwdAndAtatus(RB_Account_ViewModel model, string newPwd)
{
bool flag = false;
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
{nameof(RB_Account_ViewModel.Password), newPwd},
{nameof(RB_Account_ViewModel.ActivationStatus), model.ActivationStatus}
};
if (!string.IsNullOrWhiteSpace(model.OpenId))
{
fileds.Add(nameof(RB_Account_ViewModel.OpenId), model.OpenId);
}
var wheres = new List<WhereHelper>
{
new WhereHelper(nameof(RB_Account_ViewModel.AccountId), model.AccountId),
new WhereHelper(nameof(RB_Account_ViewModel.AccountType), model.AccountType),
new WhereHelper(nameof(RB_Account_ViewModel.Group_Id), model.Group_Id)
};
flag = accountRepository.Update(fileds, wheres);
return flag;
}
}
}
\ No newline at end of file
......@@ -32,6 +32,8 @@ namespace Edu.Module.User
/// </summary>
private readonly AccountModule accountModule = new AccountModule();
/// <summary>
/// 获取学生列表
/// </summary>
......@@ -225,5 +227,33 @@ namespace Edu.Module.User
}
return flag;
}
#region 学生兴趣爱好
/// <summary>
/// 新增学生兴趣
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public bool SetStudentInterest(RB_Student_ViewModel model)
{
if (model.StuId == 0)
{
return false;
}
else
{
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
{nameof(RB_Student_ViewModel.Interest),model.Interest.Trim() },
{nameof(RB_Student_ViewModel.JapanBaseInfo),(int)model.JapanBaseInfo },
{nameof(RB_Student_ViewModel.StuIcon),model.StuIcon.Trim() },
{nameof(RB_Student_ViewModel.StuSex),model.StuSex },
{nameof(RB_Student_ViewModel.UpdateTime),System.DateTime.Now }
};
return studentRepository.Update(fileds, new WhereHelper(nameof(RB_Student_ViewModel.StuId), model.StuId));
}
}
#endregion
}
}
......@@ -101,7 +101,7 @@ namespace Edu.Module.User
}
if (!string.IsNullOrEmpty(ids))
{
teacherClassList=classRepository.GetTeacherClassCountRepository(ids);
teacherClassList = classRepository.GetTeacherClassCountRepository(ids);
}
foreach (var item in list)
{
......@@ -519,5 +519,18 @@ namespace Edu.Module.User
}
return flag;
}
/// <summary>
/// 根据学生id获取教师账户
/// </summary>
/// <param name="teacherIds"></param>
/// <returns></returns>
public List<RB_Teacher_ViewModel> GetListByStudentId(int Student_Id, int Group_Id)
{
return teacherRepository.GetListByStudentId(Student_Id, Group_Id);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Edu.Common.Enum;
using Edu.Model.Entity.App;
namespace Edu.Repository.App
{
public class RB_HomePage_BannerRepository : BaseRepository<RB_HomePage_Banner>
{
/// <summary>
/// 获取学生app首页banner列表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_HomePage_Banner> GetHomePageBannerList(RB_HomePage_Banner query)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@" SELECT * FROM RB_HomePage_Banner WHERE 1=1 ");
builder.AppendFormat(" AND {0}={1} ", nameof(RB_HomePage_Banner.Status), (int)DateStateEnum.Normal);
if (query != null)
{
if (query.Group_Id > 0)
{
builder.AppendFormat(" AND {0}={1} ", nameof(RB_HomePage_Banner.Group_Id), query.Group_Id);
}
if (query.School_Id > 0)
{
builder.AppendFormat(" AND {0}={1} ", nameof(RB_HomePage_Banner.School_Id), query.School_Id);
}
}
return Get<RB_HomePage_Banner>(builder.ToString()).ToList();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Edu.Common.Enum;
using Edu.Model.Entity.App;
namespace Edu.Repository.App
{
public class RB_HomePage_LableRepository:BaseRepository<RB_HomePage_Lable>
{
/// <summary>
/// 获取学生app首页Lable列表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_HomePage_Lable> GetHomePageLableList(RB_HomePage_Lable query)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@" SELECT * FROM RB_HomePage_Lable WHERE 1=1 ");
builder.AppendFormat(" AND {0}={1} ", nameof(RB_HomePage_Lable.Status), (int)DateStateEnum.Normal);
if (query != null)
{
if (query.Group_Id > 0)
{
builder.AppendFormat(" AND {0}={1} ", nameof(RB_HomePage_Lable.Group_Id), query.Group_Id);
}
if (query.School_Id > 0)
{
builder.AppendFormat(" AND {0}={1} ", nameof(RB_HomePage_Lable.School_Id), query.School_Id);
}
}
return Get<RB_HomePage_Lable>(builder.ToString()).ToList();
}
}
}
......@@ -130,6 +130,10 @@ WHERE 1=1
{
where.AppendFormat(" AND A.{0}={1} ", nameof(RB_Account_ViewModel.AccountId), query.AccountId);
}
if (!string.IsNullOrEmpty(query.OpenId))
{
where.AppendFormat(" AND A.{0}='{1}' ", nameof(RB_Account_ViewModel.OpenId), query.OpenId);
}
if (!string.IsNullOrEmpty(query.PostName))
{
where2.AppendFormat(" AND p.{0}='{1}' ", nameof(RB_Account_ViewModel.PostName), query.PostName);
......
......@@ -171,5 +171,26 @@ WHERE 1=1
builder.AppendFormat(" AND t.{0} IN({1}) ", nameof(RB_Teacher_ViewModel.TId), teacherIds);
return Get<RB_Teacher_ViewModel>(builder.ToString(), parameters).ToList();
}
/// <summary>
/// 根据学生id获取教师账户
/// </summary>
/// <param name="teacherIds"></param>
/// <returns></returns>
public List<RB_Teacher_ViewModel> GetListByStudentId(int Student_Id, int Group_Id)
{
var parameters = new DynamicParameters();
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT * from rb_teacher as t
LEFT JOIN (SELECT ClassId,TeacherId from rb_class_plan where `Status`=0 GROUP BY ClassId,TeacherId) as cp on t.TId=cp.TeacherId
LEFT JOIN rb_class as c on cp.ClassId=c.ClassId
LEFT JOIN rb_student_orderguest as sog on sog.ClassId=c.ClassId
where t.`Status`=0 and c.`Status`= and sog.`Status`=0 ");
builder.AppendFormat(" AND sog.Student_Id={0} ", Student_Id);
builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Teacher_ViewModel.Group_Id), Group_Id);
return Get<RB_Teacher_ViewModel>(builder.ToString(), parameters).ToList();
}
}
}
\ No newline at end of file
......@@ -2,13 +2,19 @@
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;
......@@ -34,6 +40,40 @@ namespace Edu.WebApi.Controllers.APP
private readonly PublicModule publicModule = new PublicModule();
/// <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.GetAccountListExtModule(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]
......@@ -47,64 +87,455 @@ namespace Edu.WebApi.Controllers.APP
var model = accountModule.GetAccountListExtModule(new RB_Account_ViewModel()
{
Account = account.Trim(),
AccountType = Common.Enum.User.AccountTypeEnum.Student
})?.FirstOrDefault();
if (model == null)
{
return ApiResult.Failed(message: "用户不存在");
return ApiResult.Failed(message: "用户不存在", new { Error = -1 });
}
else
{
if (model.ActivationStatus == 0)
{
return ApiResult.Failed("账号未激活", new { Error = 1 });
}
if (password != "Viitto!@#123")
{
password = Common.DES.Encrypt(password);
if (model.Password != password)
{
return ApiResult.Failed("密码错误");
return ApiResult.Failed("密码错误", new { Error = 0 });
}
}
if (model.Status == Common.Enum.DateStateEnum.Delete)
{
return ApiResult.Failed(message: $"此账号【{ account }】已禁用");
return ApiResult.Failed(message: $"此账号【{ account }】已禁用", new { Error = 2 });
}
//生成教育token
//IUserInfoToken eduUserInfo = new AppStudentInfoToken()
//{
// requestFrom = Common.Enum.ApiRequestFromEnum.AppStudent,
// 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_App_Student_Key, eduUserInfo);
//UserInfo obj = new UserInfo
IAppStudentInfoToken eduStudentInfo = new AppStudentInfoToken()
{
requestFrom = Common.Enum.ApiRequestFromEnum.AppStudent,
uid = model.Id.ToString()
};
#region JWT
IDateTimeProvider provider = new UtcDateTimeProvider();
var now = provider.GetNow().AddMinutes(-1);
var unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); // or use JwtValidator.UnixEpoch
var secondsSinceEpoch = Math.Round((now - unixEpoch).TotalSeconds);
var payload = new Dictionary<string, object>
{
{"iat",secondsSinceEpoch },
{"exp",secondsSinceEpoch + Config.JwtExpirTime},
{"app_stundentInfo",eduStudentInfo }
};
IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
IJsonSerializer serializer = new JsonNetSerializer();
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
string secret = Config.JwtSecretKey;
string token = encoder.Encode(payload, secret);
#endregion
//上传配置
var uploadConfig = publicModule.GetFileStoreList(new Model.Public.RB_File_Store() { Group_Id = model.Group_Id, IsDefault = 1 })?.FirstOrDefault();
// string token = APPApiTokenHelper.CreateToken(Common.GlobalKey.JWT_App_Student_Key, eduUserInfo);
AppStudentInfo obj = new AppStudentInfo
{
Id = model.Id,
AccountType = model.AccountType,
Group_Id = model.Group_Id,
GroupName = model.GroupName,
School_Id = model.School_Id,
AccountId = model.AccountId,
AccountName = model.AccountName,
SchoolName = model.SchoolName,
Token = token,
GroupLogo = model.GroupLogo,
UserIcon = model.UserIcon,
ApiRequestFromEnum = Common.Enum.ApiRequestFromEnum.AppStudent,
UploadConfig = new
{
uploadConfig?.Bucket,
uploadConfig?.StoreType,
uploadConfig?.Region,
uploadConfig?.CustomDomain,
uploadConfig?.SecretKey,
uploadConfig?.SecretId,
uploadConfig?.UploadDomain
}
};
Cache.User.AppStudentReidsCache.UserInfoSet(Cache.CacheKey.AppStudent_Login_Key + model.Id, obj, Common.Config.JwtExpirTime);
return ApiResult.Success(data: obj);
}
}
/// <summary>
/// 激活账号发送短信验证码
/// </summary>
/// <param name="request">获取信息</param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public ApiResult SendCodeByStudentInfo()
{
JObject jobj = JObject.Parse(RequestParm.Msg.ToString());
string account = jobj.GetStringValue("account");
var model = accountModule.GetAccountListExtModule(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)
{
// string mobileNumber = customerInfo.ContactNumber;
bool canSendCode = Cache.App.MsgUserRedisCache.CheckCanSendCode(account, out string message);
if (!canSendCode)
{
return ApiResult.Failed(message);
}
string code = StringHelper.CreateRandomCode(4);
//新增短信记录信息
var msgLogModel = new Model.Entity.System.RB_Msg_Log
{
Group_Id = model.Group_Id,
School_Id = model.School_Id,
Student_Id = model.Id,
CreateDate = DateTime.Now,
SendStatus = Common.Enum.System.MsgSendStatusEnum.InReceipt,
CreateBy = 0,
CreateByName = "系统自动发送",
SendContent = code,
ReceiverName = model.AccountName,
ReceiverPhone = model.Account
};
new Module.System.MsgLogModule().SendCode(code, Common.Enum.System.BaseTemplateTypeEnum.SendCode, msgLogModel);
Cache.App.MsgUserRedisCache.SetSendCode(Cache.CacheKey.MsgStudent_Login_Key + account, code, 600);
Cache.App.MsgUserRedisCache.AddUserSendCodeHistory(account);
return ApiResult.Success("验证码已发送,请注意查收", data: null);
}
else
{
return ApiResult.Failed(message: "该账号已激活", new { resultCode = (int)ResultCode.AccountNotActivation });
}
}
/// <summary>
/// 激活并登陆
/// </summary>
/// <param name="request">获取信息</param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public ApiResult ActivationLogin()
{
JObject jobj = JObject.Parse(RequestParm.Msg.ToString());
string account = jobj.GetStringValue("account");
string sendcode = jobj.GetStringValue("sendcode");
string password = jobj.GetStringValue("password");
if (string.IsNullOrWhiteSpace(sendcode))
{
return ApiResult.Failed("验证码不能为空");
}
else
{
object cacheCode = Cache.App.MsgUserRedisCache.GetUserCode(Cache.CacheKey.MsgStudent_Login_Key + account, Common.Enum.ApiRequestFromEnum.AppStudent);
if (cacheCode == null)
{
return ApiResult.Failed("验证码已失效,请重新获取");
}
else
{
if (!cacheCode.ToString().Equals(sendcode))
{
return ApiResult.Failed("验证码不正确,请填写正确的验证码");
}
}
}
var model = accountModule.GetAccountListExtModule(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")
//{
// Id = model.Id,
// AccountType = model.AccountType,
// Group_Id = model.Group_Id,
// GroupName = model.GroupName,
// School_Id = model.School_Id,
// AccountName = model.AccountName,
// SchoolName = model.SchoolName,
// Token = token,
// GroupLogo = model.GroupLogo,
// UserIcon = model.UserIcon,
// ApiRequestFromEnum = Common.Enum.ApiRequestFromEnum.AppStudent,
// PostId = model.Post_Id,
// PostName = model.PostName,
// UploadConfig = new
// password = Common.DES.Encrypt(password);
// if (model.Password != password)
// {
// uploadConfig?.Bucket,
// uploadConfig?.StoreType,
// uploadConfig?.Region,
// uploadConfig?.CustomDomain,
// uploadConfig?.SecretKey,
// uploadConfig?.SecretId,
// uploadConfig?.UploadDomain
// return ApiResult.Failed("密码错误", new { Error = 0 });
// }
//};
//Cache.User.UserReidsCache.UserInfoSet(Cache.CacheKey.User_Login_Key + model.Id, obj, Common.Config.JwtExpirTime);
return ApiResult.Success();
//}
if (model.Status == Common.Enum.DateStateEnum.Delete)
{
return ApiResult.Failed(message: $"此账号【{ account }】已禁用", new { Error = 2 });
}
//更新用户的密码
bool ss = accountModule.SetResetPwdAndAtatus(new RB_Account_ViewModel { ActivationStatus = 1, AccountId = model.AccountId, AccountType = model.AccountType, Group_Id = model.Group_Id }, password = Common.DES.Encrypt(password));
//生成教育token
IAppStudentInfoToken eduUserInfo = new AppStudentInfoToken()
{
requestFrom = Common.Enum.ApiRequestFromEnum.AppStudent,
uid = model.Id.ToString()
};
//上传配置
var uploadConfig = publicModule.GetFileStoreList(new Model.Public.RB_File_Store() { Group_Id = model.Group_Id, IsDefault = 1 })?.FirstOrDefault();
string token = APPApiTokenHelper.CreateToken(Common.GlobalKey.JWT_App_Student_Key, eduUserInfo);
AppStudentInfo obj = new AppStudentInfo
{
Id = model.Id,
AccountType = model.AccountType,
Group_Id = model.Group_Id,
GroupName = model.GroupName,
School_Id = model.School_Id,
AccountName = model.AccountName,
SchoolName = model.SchoolName,
Token = token,
ActivationStatus = model.ActivationStatus,
GroupLogo = model.GroupLogo,
UserIcon = model.UserIcon,
ApiRequestFromEnum = Common.Enum.ApiRequestFromEnum.AppStudent,
UploadConfig = new
{
uploadConfig?.Bucket,
uploadConfig?.StoreType,
uploadConfig?.Region,
uploadConfig?.CustomDomain,
uploadConfig?.SecretKey,
uploadConfig?.SecretId,
uploadConfig?.UploadDomain
}
};
Cache.User.AppStudentReidsCache.UserInfoSet(Cache.CacheKey.AppStudent_Login_Key + model.Id, obj, Common.Config.JwtExpirTime);
return ApiResult.Success("", new { obj, model.ActivationStatus });
}
}
/// <summary>
/// 用户状态
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public ApiResult GetAccountOpenid()
{
JObject jobj = JObject.Parse(RequestParm.Msg.ToString());
string openid = jobj.GetStringValue("Openid");
var model = accountModule.GetAccountListExtModule(new RB_Account_ViewModel()
{
OpenId = openid.Trim(),
AccountType = Common.Enum.User.AccountTypeEnum.Student
})?.FirstOrDefault();
if (model == null)
{
return ApiResult.Failed("该账号不存在", new { resultCode = (int)ResultCode.AccountBind });
}
else if (model.Status == Common.Enum.DateStateEnum.Delete)
{
return ApiResult.Failed(message: $"此账号【{ model.Account }】已禁用", new { Error = 2 });
}
else if (model.ActivationStatus == 0)
{
return ApiResult.Failed(message: "该账号未激活", new { resultCode = (int)ResultCode.AccountNotActivation });
}
else
{
//生成教育token
IAppStudentInfoToken eduUserInfo = new AppStudentInfoToken()
{
requestFrom = Common.Enum.ApiRequestFromEnum.AppStudent,
uid = model.Id.ToString()
};
//上传配置
var uploadConfig = publicModule.GetFileStoreList(new Model.Public.RB_File_Store() { Group_Id = model.Group_Id, IsDefault = 1 })?.FirstOrDefault();
string token = APPApiTokenHelper.CreateToken(Common.GlobalKey.JWT_App_Student_Key, eduUserInfo);
AppStudentInfo obj = new AppStudentInfo
{
Id = model.Id,
AccountType = model.AccountType,
Group_Id = model.Group_Id,
GroupName = model.GroupName,
School_Id = model.School_Id,
AccountId = model.AccountId,
AccountName = model.AccountName,
SchoolName = model.SchoolName,
Token = token,
GroupLogo = model.GroupLogo,
UserIcon = model.UserIcon,
ApiRequestFromEnum = Common.Enum.ApiRequestFromEnum.AppStudent,
UploadConfig = new
{
uploadConfig?.Bucket,
uploadConfig?.StoreType,
uploadConfig?.Region,
uploadConfig?.CustomDomain,
uploadConfig?.SecretKey,
uploadConfig?.SecretId,
uploadConfig?.UploadDomain
}
};
Cache.User.AppStudentReidsCache.UserInfoSet(Cache.CacheKey.AppStudent_Login_Key + model.Id, obj, Common.Config.JwtExpirTime);
return ApiResult.Success("", new { obj, model.ActivationStatus });
}
}
/// <summary>
/// 激活并登陆
/// </summary>
/// <param name="request">获取信息</param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public ApiResult ActivationLoginByOpenid()
{
JObject jobj = JObject.Parse(RequestParm.Msg.ToString());
string account = jobj.GetStringValue("account");
string sendcode = jobj.GetStringValue("sendcode");
string openid = jobj.GetStringValue("openid");
string password = jobj.GetStringValue("password");
if (string.IsNullOrWhiteSpace(sendcode))
{
return ApiResult.Failed("验证码不能为空");
}
// return ApiResult.Success();
else
{
object cacheCode = Cache.App.MsgUserRedisCache.GetUserCode(Cache.CacheKey.MsgStudent_Login_Key + account, Common.Enum.ApiRequestFromEnum.AppStudent);
if (cacheCode == null)
{
return ApiResult.Failed("验证码已失效,请重新获取");
}
else
{
if (!cacheCode.ToString().Equals(sendcode))
{
return ApiResult.Failed("验证码不正确,请填写正确的验证码");
}
}
}
var model = accountModule.GetAccountListExtModule(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
{
var modelWeiXin = accountModule.GetAccountListExtModule(new RB_Account_ViewModel()
{
OpenId = openid.Trim(),
AccountType = Common.Enum.User.AccountTypeEnum.Student
})?.FirstOrDefault();
if (modelWeiXin.Account != account)
{
return ApiResult.Failed(message: "微信号已绑定其他账户", new { Error = 3 });
}
if (model.Status == Common.Enum.DateStateEnum.Delete)
{
return ApiResult.Failed(message: $"此账号【{ account }】已禁用", new { Error = 2 });
}
if (!string.IsNullOrWhiteSpace(model.OpenId))
{
return ApiResult.Failed(message: "账户已绑定其他微信号", new { Error = 3 });
}
//更新用户的密码
bool ss = accountModule.SetResetPwdAndAtatus(new RB_Account_ViewModel { OpenId = openid, ActivationStatus = 1, AccountId = model.AccountId, AccountType = model.AccountType, Group_Id = model.Group_Id }, password = Common.DES.Encrypt(password));
//生成教育token
IAppStudentInfoToken eduUserInfo = new AppStudentInfoToken()
{
requestFrom = Common.Enum.ApiRequestFromEnum.AppStudent,
uid = model.Id.ToString()
};
//上传配置
var uploadConfig = publicModule.GetFileStoreList(new Model.Public.RB_File_Store() { Group_Id = model.Group_Id, IsDefault = 1 })?.FirstOrDefault();
string token = APPApiTokenHelper.CreateToken(Common.GlobalKey.JWT_App_Student_Key, eduUserInfo);
AppStudentInfo obj = new AppStudentInfo
{
Id = model.Id,
AccountType = model.AccountType,
Group_Id = model.Group_Id,
GroupName = model.GroupName,
AccountId = model.AccountId,
School_Id = model.School_Id,
AccountName = model.AccountName,
SchoolName = model.SchoolName,
Token = token,
ActivationStatus = model.ActivationStatus,
GroupLogo = model.GroupLogo,
UserIcon = model.UserIcon,
ApiRequestFromEnum = Common.Enum.ApiRequestFromEnum.AppStudent,
UploadConfig = new
{
uploadConfig?.Bucket,
uploadConfig?.StoreType,
uploadConfig?.Region,
uploadConfig?.CustomDomain,
uploadConfig?.SecretKey,
uploadConfig?.SecretId,
uploadConfig?.UploadDomain
}
};
Cache.User.AppStudentReidsCache.UserInfoSet(Cache.CacheKey.AppStudent_Login_Key + model.Id, obj, Common.Config.JwtExpirTime);
return ApiResult.Success("", new { obj, model.ActivationStatus });
}
}
#region 兴趣爱好的基础信息
/// <summary>
/// 兴趣爱好信息
/// </summary>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public ApiResult GetInterestList()
{
var list = Common.Plugin.EnumHelper.EnumToList(typeof(InterestEnum));
return ApiResult.Success(data: list);
}
/// <summary>
/// 日语基础掌握信息情况
/// </summary>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public ApiResult GetJapanbaseInfoEnumList()
{
var list = Common.Plugin.EnumHelper.EnumToList(typeof(JapanbaseInfoEnum));
return ApiResult.Success(data: list);
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Edu.Common.API;
using Edu.Common.Plugin;
using Edu.Model.Entity.App;
using Edu.Model.ViewModel.User;
using Edu.Module.System;
using Edu.Module.User;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace Edu.WebApi.Controllers.APP
{
[Route("api/[controller]/[action]")]
[ApiExceptionFilter]
[ApiController]
[EnableCors("AllowCors")]
public class AppIndexController : AppBaseController
{
private StudentModule StudentModule = new StudentModule();
private readonly AppHomePageModule appHomePageModule = AOP.AOPHelper.CreateAOPObject<AppHomePageModule>();
#region 首次登录后填写兴趣爱好
/// <summary>
/// 首次登录记录用户的兴趣爱好
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetInterest()
{
var query = new RB_Student_ViewModel()
{
Interest = base.ParmJObj.GetStringValue("Interest"),
JapanBaseInfo = base.ParmJObj.GetInt("ClassId"),
StuSex = base.ParmJObj.GetInt("StuSex"),
StuIcon = base.ParmJObj.GetStringValue("StuIcon"),
Group_Id = base.AppStudentInfo.Group_Id,
School_Id = base.AppStudentInfo.School_Id,
StuId = base.AppStudentInfo.AccountId,
};
bool result = StudentModule.SetStudentInterest(query);
if (result)
{
return ApiResult.Success("");
}
else
{
return ApiResult.Failed("兴趣爱好记录失败");
}
}
#endregion
#region 首页banner/老师信息
[HttpPost]
public ApiResult GetBannerIndex()
{
var query = new RB_HomePage_Banner()
{
Group_Id = base.AppStudentInfo.Group_Id,
};
var list = appHomePageModule.GetHomePageBannerList(query).OrderBy(x => x.Sort);
return ApiResult.Success("", list);
}
#endregion
#region 首页lable(菜单)
[HttpPost]
public ApiResult GetLableIndex()
{
var query = new RB_HomePage_Lable()
{
Group_Id = base.AppStudentInfo.Group_Id,
};
var list = appHomePageModule.GetHomePageLableList(query).OrderBy(x => x.Sort);
return ApiResult.Success("", list);
}
#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 AppBaseController : 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.JWT_App_Student_Key];
if (requestMsg != null)
{
requestParm = JsonConvert.DeserializeObject<RequestParm>(requestMsg.ToString());
if (Request.HttpContext.Items[GlobalKey.JWT_App_Student_Key] != null)
{
JObject parms = JObject.Parse(Request.HttpContext.Items[GlobalKey.JWT_App_Student_Key].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 AppStudentInfo AppStudentInfo
{
get
{
var parm = this.RequestParm;
AppStudentInfo appStudentInfo = AppStudentReidsCache.GetUserLoginInfo(parm.Uid);
return AppStudentInfo;
}
}
/// <summary>
/// 根据Id获取用户信息
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public AppStudentInfo GetAppStudentInfo(object Id)
{
AppStudentInfo appStudentInfo = AppStudentReidsCache.GetUserLoginInfo(Id);
return AppStudentInfo;
}
}
}
\ 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.Entity.App;
using Edu.Model.Entity.System;
using Edu.Model.ViewModel.System;
using Edu.Module.System;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
namespace Edu.WebApi.Controllers.Public
{
/// <summary>
/// 系统公用接口
/// </summary>
[Route("api/[controller]/[action]")]
[ApiExceptionFilter]
[ApiController]
[EnableCors("AllowCors")]
public class AppPublicController : BaseController
{
/// <summary>
/// 短信处理类对象
/// </summary>
private readonly AppHomePageModule appHomePageModule = AOP.AOPHelper.CreateAOPObject<AppHomePageModule>();
#region 首页轮播图
[HttpPost]
public ApiResult GetBannerIndex()
{
var query = new RB_HomePage_Banner()
{
Group_Id = base.UserInfo.Group_Id,
};
var list = appHomePageModule.GetHomePageBannerList(query).OrderBy(x => x.Sort);
return ApiResult.Success("", list);
}
/// <summary>
/// 添加修改轮播图信息
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetBannerIndex()
{
var list = Common.Plugin.JsonHelper.DeserializeObject<List<RB_HomePage_Banner>>(RequestParm.Msg.ToString());
if (list == null || !list.Any())
{
return ApiResult.Failed("请传入轮播图信息");
}
else if (list.Any(x => string.IsNullOrWhiteSpace(x.BannerPic)))
{
return ApiResult.Failed("请传入轮播图信息");
}
list.Where(x => x.BannerId == 0).ToList().ForEach(x => x.CreateBy = base.UserInfo.Id);
list.Where(x => x.BannerId == 0).ToList().ForEach(x => x.CreateTime = System.DateTime.Now);
list.ForEach(x => x.UpdateTime = System.DateTime.Now);
list.ForEach(x => x.UpdateBy = base.UserInfo.Id);
list.ForEach(x => x.School_Id = base.UserInfo.School_Id);
list.ForEach(x => x.Status = Common.Enum.DateStateEnum.Normal);
bool flag = appHomePageModule.SetHomePage(list);
return flag ? ApiResult.Success() : ApiResult.Failed();
}
#endregion
#region 首页标签
[HttpPost]
public ApiResult GetLableIndex()
{
var query = new RB_HomePage_Lable()
{
Group_Id = base.UserInfo.Group_Id,
};
var list = appHomePageModule.GetHomePageLableList(query).OrderBy(x => x.Sort);
return ApiResult.Success("", list);
}
/// <summary>
/// 添加修改首页标签信息
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetLableIndex()
{
var list = Common.Plugin.JsonHelper.DeserializeObject<List<RB_HomePage_Lable>>(RequestParm.Msg.ToString());
if (list == null || !list.Any())
{
return ApiResult.Failed("请传入标签信息");
}
else if (list.Any(x => string.IsNullOrWhiteSpace(x.LableName)))
{
return ApiResult.Failed("请输入标签名称");
}
list.Where(x => x.LableId == 0).ToList().ForEach(x => x.CreateBy = base.UserInfo.Id);
list.Where(x => x.LableId == 0).ToList().ForEach(x => x.CreateTime = System.DateTime.Now);
list.ForEach(x => x.UpdateTime = System.DateTime.Now);
list.ForEach(x => x.UpdateBy = base.UserInfo.Id);
list.ForEach(x => x.School_Id = base.UserInfo.School_Id);
list.ForEach(x => x.Status = Common.Enum.DateStateEnum.Normal);
bool flag = appHomePageModule.SetHomePageLable(list);
return flag ? ApiResult.Success() : ApiResult.Failed();
}
#endregion
}
}
using Edu.Common.API;
using JWT;
using JWT.Algorithms;
using JWT.Serializers;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
namespace Edu.WebApi.Helper
{
/// <summary>
/// Token帮助类
/// </summary>
public class APPApiTokenHelper
{
/// <summary>
/// 生成Token
/// </summary>
/// <param name="requestFromEnum">来源</param>
/// <returns></returns>
public static string CreateToken(string userKey, IAppStudentInfoToken userInfo)
{
IDateTimeProvider provider = new UtcDateTimeProvider();
var now = provider.GetNow().AddMinutes(-1);
var unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
var secondsSinceEpoch = Math.Round((now - unixEpoch).TotalSeconds);
var payload = new Dictionary<string, object>()
{
{"iat",secondsSinceEpoch },
{"exp",secondsSinceEpoch+Common.Config.JwtExpirTime},
{userKey,userInfo }
};
IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
IJsonSerializer serializer = new JsonNetSerializer();
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
string secret = Common.Config.JwtSecretKey;
string token = encoder.Encode(payload, secret);
return token;
}
/// <summary>
/// 解析Token
/// </summary>
/// <param name="token"></param>
/// <returns></returns>
public static JObject AnalysisToken(string token)
{
IJsonSerializer serializer = new JsonNetSerializer();
IDateTimeProvider provider = new UtcDateTimeProvider();
IJwtValidator validator = new JwtValidator(serializer, provider);
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder);
string secret = Common.Config.JwtSecretKey;
//token为之前生成的字符串
var json = decoder.Decode(token, secret, verify: true);
JObject jwtJson = JObject.Parse(json);
return jwtJson;
}
}
}
\ 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