From 47a0ea0e629660397d1b98f880c8aaeac879c923 Mon Sep 17 00:00:00 2001 From: ndbs Date: Mon, 12 Aug 2024 16:22:38 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=AF=B9=E6=8E=A5?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Learun.Application.WebApi.csproj | 7 + .../Modules/ArrangelessonLogin.cs | 346 +++++++++++++ .../Modules/BaseNoAuthenticationNoLogin.cs | 290 +++++++++++ .../Modules/TransferApi.cs | 473 ++++++++++++++++++ .../Learun.Util/Attributes/EnumAttribute.cs | 19 + 5 files changed, 1135 insertions(+) create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ArrangelessonLogin.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/BaseNoAuthenticationNoLogin.cs create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/TransferApi.cs diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj index 873f94903..f9004164d 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj @@ -191,6 +191,13 @@ + + + + + + + diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ArrangelessonLogin.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ArrangelessonLogin.cs new file mode 100644 index 000000000..17fa6e943 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ArrangelessonLogin.cs @@ -0,0 +1,346 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using Learun.Application.Organization; +using Learun.Application.TwoDevelopment.EducationalAdministration; +using Nancy; + +namespace Learun.Application.WebApi.Modules +{ + public class ArrangelessonLogin : BaseNoAuthenticationNoLogin + { + public ArrangelessonLogin() + : base("/arrangelessonlogin/") + { + Get["/lessontype"] = GetLessonTypes; + Get["/classtype"] = GetClassType; + Get["/student"] = GetStudents; + Get["/lessonsortdetail"] = GetLessonSortDetails; + Get["/lessonsort"] = GetLessonSorts; + Get["/classlesson"] = GetClassLessons; + Get["/bukaolist"] = GetBuKaoList; + //以下接口需要传值学年学期 + Get["/school"] = GetSchools; + Get["/dept"] = GetDepts; + Get["/major"] = GetMajors; + Get["/classroom"] = GetClassrooms; + Get["/lesson"] = GetLessons; + Get["/teacher"] = GetTeachers; + Get["/class"] = GetClasses; + Get["/stu"] = GetStus; + //以下返回全部 + Get["/department"] = GetDepartment; + Get["/allteacher"] = GetAllTeachers; + Get["/allstudent"] = GetAllStudents; + Get["/alldept"] = GetAllDept; + Get["/allmajor"] = GetAllMajor; + Get["/alllesson"] = GetAllLesson; + Get["/allclass"] = GetAllClass; + Get["/alluser"] = GetAllUsers; + Get["/allschool"] = GetAllSchools; + Get["/allclasslesson"] = GetAllClassLesson; + Get["/allelelectivelesson"] = GetAllElectiveLesson; + + //以下接口不往ArrangeLessonSync里记录已传数据 + Get["/schoolNotRecord"] = GetSchoolsNotRecord; + Get["/deptNotRecord"] = GetDeptsNotRecord; + Get["/majorNotRecord"] = GetMajorsNotRecord; + Get["/classroomNotRecord"] = GetClassroomsNotRecord; + Get["/lessonNotRecord"] = GetLessonsNotRecord; + Get["/teacherNotRecord"] = GetTeachersNotRecord; + Get["/classNotRecord"] = GetClassesNotRecord; + Get["/stuNotRecord"] = GetStusNotRecord; + Get["trantest"] = TranTest; + //按条件重置基础数据同步状态 + Get["/initbasicdata"] = InitBasicData; + + } + private readonly ArrangeLessonTermIBLL arrangeLessonTermIBLL = new ArrangeLessonTermBLL(); + private readonly StuScoreIBLL stuScoreIBLL = new StuScoreBLL(); + private DepartmentIBLL departmentIBLL = new DepartmentBLL(); + EmpInfoIBLL empInfoIbll = new EmpInfoBLL(); + private StuInfoBasicIBLL stuInfoBasicIbll = new StuInfoBasicBLL(); + CdDeptIBLL cdDeptIbll = new CdDeptBLL(); + CdMajorIBLL cdMajorIbll = new CdMajorBLL(); + private LessonInfoIBLL lessonInfoIbll = new LessonInfoBLL(); + ClassInfoIBLL classInfoIbll = new ClassInfoBLL(); + UserIBLL userIbll = new UserBLL(); + private CompanyIBLL companyIbll = new CompanyBLL(); + + private StuSelectLessonListOfElectiveIBLL stuSelectLessonListOfElectiveIbll = + new StuSelectLessonListOfElectiveBLL(); + + private Response TranTest(dynamic _) + { + return Success("ok"); + } + + private Response GetAllLesson(dynamic _) + { + var result = lessonInfoIbll.GetAllLesson(); + return Success(result); + } + private Response GetAllClass(dynamic _) + { + var result = classInfoIbll.GetAllClass(); + return Success(result); + } + private Response GetAllTeachers(dynamic _) + { + var result = empInfoIbll.GetAllList().Where(m => m.CheckMark == true).ToList(); + return Success(result); + } + private Response GetAllSchools(dynamic _) + { + var result = companyIbll.GetList(); + return Success(result); + } + private Response GetAllClassLesson(dynamic _) + { + string AcademicYearNo = Request.Query["AcademicYearNo"]; + string Semester = Request.Query["Semester"]; + var result = arrangeLessonTermIBLL.GetAllClassLesson(AcademicYearNo, Semester); + return Success(result); + } + private Response InitBasicData(dynamic _) + { + string AcademicYearNo = Request.Query["AcademicYearNo"]; + string Semester = Request.Query["Semester"]; + string BaseTable = Request.Query["BaseTable"]; + if (string.IsNullOrEmpty(AcademicYearNo) || string.IsNullOrEmpty(Semester)) + { + return Fail("学年学期参数不能为空"); + } + if (string.IsNullOrEmpty(BaseTable)) + { + return Fail("基础表参数不能为空"); + } + ArrangeLessonTermEntity arrangeLessonTermEntity = new ArrangeLessonTermEntity(); + arrangeLessonTermEntity.AcademicYearNo = AcademicYearNo; + arrangeLessonTermEntity.Semester = Semester; + arrangeLessonTermEntity.SyncBasicTable = BaseTable; + arrangeLessonTermIBLL.InitAsyncDataByCondition(arrangeLessonTermEntity); + return Success("操作成功"); + } + private Response GetAllElectiveLesson(dynamic _) + { + string AcademicYearNo = Request.Query["AcademicYearNo"]; + string Semester = Request.Query["Semester"]; + var result = stuSelectLessonListOfElectiveIbll.GetAllElectiveLesson(AcademicYearNo, Semester); + return Success(result); + } + private Response GetAllUsers(dynamic _) + { + var result = userIbll.GetAllList().Where(m => !m.F_Account.Contains("System") && m.F_DeleteMark == 0 && m.F_EnabledMark == 1).Select(m => new + { + m.F_UserId, + m.F_CompanyId, + m.F_DepartmentId, + F_Description = m.F_Description == "教师" ? "2" : "3", + ClassNo = stuInfoBasicIbll.GetStuInfoBasicEntityByStuNo(m.F_Account)?.ClassNo, + m.F_RealName, + m.F_Account, + Year = "20" + stuInfoBasicIbll.GetStuInfoBasicEntityByStuNo(m.F_Account)?.Grade, + m.F_IdentityCardNo + }); + return Success(result); + } + private Response GetAllStudents(dynamic _) + { + var result = stuInfoBasicIbll.GetAllList(); + return Success(result); + } + private Response GetDepartment(dynamic _) + { + var result = departmentIBLL.GetAllList(); + return Success(result); + } + private Response GetAllDept(dynamic _) + { + var result = cdDeptIbll.GetAllList(); + return Success(result); + } + private Response GetAllMajor(dynamic _) + { + var result = cdMajorIbll.GetAllList(); + return Success(result); + } + private Response GetLessonTypes(dynamic _) + { + var result = arrangeLessonTermIBLL.GetLessonTypes(); + return Success(result); + } + private Response GetDepts(dynamic _) + { + string AcademicYearNo = Request.Query["AcademicYearNo"]; + string Semester = Request.Query["Semester"]; + var result = arrangeLessonTermIBLL.GetDepts(AcademicYearNo, Semester); + return Success(result); + } + private Response GetDeptsNotRecord(dynamic _) + { + string AcademicYearNo = Request.Query["AcademicYearNo"]; + string Semester = Request.Query["Semester"]; + var result = arrangeLessonTermIBLL.GetDeptsNotRecord(AcademicYearNo, Semester); + return Success(result); + } + + private Response GetSchools(dynamic _) + { + string AcademicYearNo = Request.Query["AcademicYearNo"]; + string Semester = Request.Query["Semester"]; + var result = arrangeLessonTermIBLL.GetSchools(AcademicYearNo, Semester); + return Success(result); + } + private Response GetSchoolsNotRecord(dynamic _) + { + string AcademicYearNo = Request.Query["AcademicYearNo"]; + string Semester = Request.Query["Semester"]; + var result = arrangeLessonTermIBLL.GetSchoolsNotRecord(AcademicYearNo, Semester); + return Success(result); + } + + private Response GetClassLessons(dynamic _) + { + var result = arrangeLessonTermIBLL.GetClassLessons().Select(m => new + { + m.AcademicYearNo, + m.Semester, + m.DeptNo, + m.MajorNo, + m.LessonNo, + m.TeachClassNo, + m.EmpNo, + m.LessonSortNo + }); + return Success(result); + } + public Response GetStudents(dynamic _) + { + var result = arrangeLessonTermIBLL.GetStudents(); + return Success(result); + } + public Response GetMajors(dynamic _) + { + string AcademicYearNo = Request.Query["AcademicYearNo"]; + string Semester = Request.Query["Semester"]; + var result = arrangeLessonTermIBLL.GetMajors(AcademicYearNo, Semester); + return Success(result); + } + public Response GetMajorsNotRecord(dynamic _) + { + string AcademicYearNo = Request.Query["AcademicYearNo"]; + string Semester = Request.Query["Semester"]; + var result = arrangeLessonTermIBLL.GetMajorsNotRecord(AcademicYearNo, Semester); + return Success(result); + } + + public Response GetClassrooms(dynamic _) + { + string AcademicYearNo = Request.Query["AcademicYearNo"]; + string Semester = Request.Query["Semester"]; + var result = arrangeLessonTermIBLL.GetClassrooms(AcademicYearNo, Semester); + return Success(result); + } + public Response GetClassroomsNotRecord(dynamic _) + { + string AcademicYearNo = Request.Query["AcademicYearNo"]; + string Semester = Request.Query["Semester"]; + var result = arrangeLessonTermIBLL.GetClassroomsNotRecord(AcademicYearNo, Semester); + return Success(result); + } + + public Response GetClassType(dynamic _) + { + var result = arrangeLessonTermIBLL.GetClassType(); + return Success(result); + } + public Response GetLessons(dynamic _) + { + string AcademicYearNo = Request.Query["AcademicYearNo"]; + string Semester = Request.Query["Semester"]; + var result = arrangeLessonTermIBLL.GetLessons(AcademicYearNo, Semester); + return Success(result); + } + public Response GetLessonsNotRecord(dynamic _) + { + string AcademicYearNo = Request.Query["AcademicYearNo"]; + string Semester = Request.Query["Semester"]; + var result = arrangeLessonTermIBLL.GetLessonsNotRecord(AcademicYearNo, Semester); + return Success(result); + } + public Response GetLessonSortDetails(dynamic _) + { + var result = arrangeLessonTermIBLL.GetLessonSortDetails(); + return Success(result); + } + public Response GetLessonSorts(dynamic _) + { + var result = arrangeLessonTermIBLL.GetLessonSorts(); + return Success(result); + } + + public Response GetTeachers(dynamic _) + { + string AcademicYearNo = Request.Query["AcademicYearNo"]; + string Semester = Request.Query["Semester"]; + var result = arrangeLessonTermIBLL.GetTeachers(AcademicYearNo, Semester); + return Success(result); + } + public Response GetTeachersNotRecord(dynamic _) + { + string AcademicYearNo = Request.Query["AcademicYearNo"]; + string Semester = Request.Query["Semester"]; + var result = arrangeLessonTermIBLL.GetTeachersNotRecord(AcademicYearNo, Semester); + return Success(result); + } + + public Response GetClasses(dynamic _) + { + string AcademicYearNo = Request.Query["AcademicYearNo"]; + string Semester = Request.Query["Semester"]; + var result = arrangeLessonTermIBLL.GetClasses(AcademicYearNo, Semester); + return Success(result); + } + public Response GetClassesNotRecord(dynamic _) + { + string AcademicYearNo = Request.Query["AcademicYearNo"]; + string Semester = Request.Query["Semester"]; + var result = arrangeLessonTermIBLL.GetClassesNotRecord(AcademicYearNo, Semester); + return Success(result); + } + + public Response GetStus(dynamic _) + { + string AcademicYearNo = Request.Query["AcademicYearNo"]; + string Semester = Request.Query["Semester"]; + var result = arrangeLessonTermIBLL.GetStus(AcademicYearNo, Semester); + return Success(result); + } + + public Response GetStusNotRecord(dynamic _) + { + string AcademicYearNo = Request.Query["AcademicYearNo"]; + string Semester = Request.Query["Semester"]; + var result = arrangeLessonTermIBLL.GetStusNotRecord(AcademicYearNo, Semester); + return Success(result); + } + /// + /// 补考名单数据 + /// + /// + /// + private Response GetBuKaoList(dynamic _) + { + var allList = new List(); + var notPassList = stuScoreIBLL.GetStuScoreNotPassList(); + allList.AddRange(notPassList); + var notPassTwoList = stuScoreIBLL.GetStuScoreNotPassTwoList(); + allList.AddRange(notPassTwoList); + + var result = allList.Select(x => new { x.BuKaoFlag, x.AcademicYearNo, x.Semester, x.StuId, x.StuName, x.LessonId, x.LessonName, x.ClassId, x.ClassName, x.EmpId, x.EmpName }).OrderBy(x => x.BuKaoFlag).ThenByDescending(x => x.AcademicYearNo).ThenByDescending(x => x.Semester).ThenBy(x => x.StuId); + return Success(result); + } + } +} \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/BaseNoAuthenticationNoLogin.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/BaseNoAuthenticationNoLogin.cs new file mode 100644 index 000000000..4dc1d7185 --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/BaseNoAuthenticationNoLogin.cs @@ -0,0 +1,290 @@ +using Learun.Application.Base.SystemModule; +using Learun.Loger; +using Learun.Util; +using Learun.Util.Operat; +using Nancy; +using Nancy.ModelBinding; +using System;//D:\Item\repos\DigitalScholl\Learun.Framework.Ultimate V7\Learun.Application.WebApi\Modules\TransferApi.cs +using static Learun.Application.WebApi.TransferApi; + +namespace Learun.Application.WebApi +{ + /// + /// 版 本 Learun-ADMS V7.0.0 数字化智慧校园 + /// Copyright (c) 2013-2018 北京泉江科技有限公司 + /// 创建人:数字化智慧校园-框架开发组 + /// 日 期:2017.05.12 + /// 描 述:Nancy-Api基础模块 + /// + public class BaseNoAuthenticationNoLogin : NancyModule + { + #region 构造函数 + public BaseNoAuthenticationNoLogin() + : base() + { + Before += BeforeRequest; + OnError += OnErroe; + } + public BaseNoAuthenticationNoLogin(string baseUrl) + : base(baseUrl) + { + Before += BeforeRequest; + OnError += OnErroe; + } + #endregion + + #region 获取请求数据 + /// + /// 获取请求数据 + /// + /// + /// + public T GetReqData() where T : class + { + try + { + ReqParameter req = this.Bind>(); + return req.data.ToObject(); + } + catch (Exception) + { + throw; + } + + } + /// + /// 获取请求数据 + /// + /// + public string GetReqData() + { + try + { + ReqParameter req = this.Bind>(); + return req.data; + } + catch (Exception) + { + throw; + } + + } + /// + /// 获取请求数据 + /// + /// + /// + public T GetReq() where T : class + { + try + { + T req = this.Bind(); + return req; + } + catch (Exception) + { + throw; + } + } + #endregion + + #region 响应接口 + /// + /// 成功响应数据 + /// + /// + /// + public Response Success(string info) + { + ResParameter res = new ResParameter { code = ResponseCode.success, info = info, data = new object { } }; + return Response.AsText(res.ToJson()).WithContentType("application/json"); + } + /// + /// 成功响应数据 + /// + /// + /// + /// + public Response Success(object data) + { + ResParameter res = new ResParameter { code = ResponseCode.success, info = "响应成功", data = data }; + return Response.AsText(res.ToJson()).WithContentType("application/json"); + } + /// + /// 成功响应数据 + /// + /// + /// + /// + public Response Success(T data) where T : class + { + ResParameter res = new ResParameter { code = ResponseCode.success, info = "响应成功", data = data }; + return Response.AsText(res.ToJson()).WithContentType("application/json"); + } + /// + /// 成功响应数据 + /// + /// + /// + /// + public Response SuccessString(string data) + { + ResParameter res = new ResParameter { code = ResponseCode.success, info = "响应成功", data = data }; + return Response.AsText(res.ToJson()).WithContentType("application/json"); + } + /// + /// 接口响应失败 + /// + /// + /// + public Response Fail(string info) + { + ResParameter res = new ResParameter { code = ResponseCode.fail, info = info, data = new object { } }; + return Response.AsText(res.ToJson()).WithContentType("application/json"); + } + public Response FailNoLogin(string info) + { + ResParameter res = new ResParameter { code = ResponseCode.nologin, info = info, data = new object { } }; + return Response.AsText(res.ToJson()).WithContentType("application/json"); + } + #endregion + + + #region 异常抓取 + /// + /// 日志对象实体 + /// + private Log _logger; + /// + /// 日志操作 + /// + public Log Logger + { + get { return _logger ?? (_logger = LogFactory.GetLogger(this.GetType().ToString())); } + } + /// + /// 监听接口异常 + /// + /// 连接上下信息 + /// 异常信息 + /// + private Response OnErroe(NancyContext ctx, Exception ex) + { + try + { + this.WriteLog(ctx, ex); + } + catch (Exception) + { + } + string msg = "提示:" + ex.Message; + return Response.AsText(new ResParameter { code = ResponseCode.exception, info = msg }.ToJson()).WithContentType("application/json").WithStatusCode(HttpStatusCode.OK); + } + /// + /// 写入日志(log4net) + /// + /// 提供使用 + private void WriteLog(NancyContext context, Exception ex) + { + if (context == null) + return; + string path = context.ResolvedRoute.Description.Path; + var log = LogFactory.GetLogger("workflowapi"); + Exception Error = ex; + LogMessage logMessage = new LogMessage(); + logMessage.OperationTime = DateTime.Now; + logMessage.Url = path; + logMessage.Class = "learunwebapi"; + logMessage.Ip = Net.Ip; + logMessage.Host = Net.Host; + logMessage.Browser = Net.Browser; + if (Error.InnerException == null) + { + logMessage.ExceptionInfo = Error.Message; + logMessage.ExceptionSource = Error.Source; + logMessage.ExceptionRemark = Error.StackTrace; + } + else + { + logMessage.ExceptionInfo = Error.InnerException.Message; + logMessage.ExceptionSource = Error.InnerException.Source; + logMessage.ExceptionRemark = Error.InnerException.StackTrace; + } + string strMessage = new LogFormat().ExceptionFormat(logMessage); + log.Error(strMessage); + + LogEntity logEntity = new LogEntity(); + logEntity.F_CategoryId = 4; + logEntity.F_OperateTypeId = ((int)OperationType.Exception).ToString(); + logEntity.F_OperateType = EnumAttribute.GetDescription(OperationType.Exception); + logEntity.F_OperateAccount = logMessage.UserName; + logEntity.F_ExecuteResult = -1; + logEntity.F_ExecuteResultJson = strMessage; + logEntity.F_Description = "移动端"; + logEntity.WriteLog(); + } + #endregion + + #region 权限验证 + public UserInfo userInfo; + public string loginMark; + public string token; + + + /// + /// 前置拦截器 + /// + /// + /// + private Response BeforeRequest(NancyContext ctx) + { + //var Requesttoken = DESEncrypt.Decrypt(Request.Headers["token"].ToString()); + var Requesttoken = DESEncrypt.Decrypt(Request.Query["token"].ToString()); + + var a = EnumAttribute.GetVsS(typeof(loginins)); + + //if (Requesttoken == loginins.school) + //{ + + //} + ctx.Request.Url.Query = Learun.Util.WebHelper.Formatstr(ctx.Request.Url.Query); + foreach (var p in ctx.Parameters) + { + if (p.ParameterType == typeof(string)) + { + if (ctx.Parameters[p.ParameterName] != null) + { + ctx.Parameters[p.ParameterName] = Learun.Util.WebHelper.Formatstr(ctx.Parameters[p.ParameterName].ToString()); + } + } + } + string path = ctx.ResolvedRoute.Description.Path; + //验证登录状态 + ReqParameter req = this.Bind(); + loginMark = req.loginMark; + token = req.token; + if (path == "/learun/adms/user/login" || path == "/learun/adms/user/loginbyIdCard" || path == "/" || path == "/bgimg" || path == "/learun/adms/user/img" || path == "/learun/adms/desktop/img" || path == "/learun/adms/user/imgfordc" || path == "/learun/adms/timetable/timeTableData" || path == "/quanjiang/sso/authorize" || path == "/learun/nologin/adms/annexes/upload" || path == "/learun/adms/annexes/wxlist" || path == "/learun/visitmanage/save" || path == "/learun/visitmanage/getweixinaccess_token") + {// 登录接口,默认页面接口不做权限验证处理 + return null; + } + + OperatorResult res = OperatorHelper.Instance.IsOnLine(req.token, req.loginMark); + if (res.stateCode == -1) + { + return this.FailNoLogin("未找到登录信息"); + } + if (res.stateCode == 0) + { + return this.FailNoLogin("登录信息已过期"); + } + else + { + // 获取登录者信息 + userInfo = res.userInfo; + } + return null; + } + #endregion + + } +} \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/TransferApi.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/TransferApi.cs new file mode 100644 index 000000000..29cd5b37a --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/TransferApi.cs @@ -0,0 +1,473 @@ +using Nancy; +using Learun.Util; +using System.Collections.Generic; +using Learun.Application.TwoDevelopment.EducationalAdministration; +using System; +using System.IO; +using Learun.Application.Base.SystemModule; +using System.Net; +using System.Linq; +using System.Text; +using Newtonsoft.Json; +using System.Collections; +using System.Web; +using Learun.Application.Organization; + +namespace Learun.Application.WebApi +{ + /// + /// 版 本 Learun-ADMS-Ultimate V7.0.0 力软敏捷开发框架 + /// Copyright (c) 2013-2018 上海力软信息技术有限公司 + /// 创 建:超级管理员 + /// 日 期:2019-08-19 17:50 + /// 描 述:传送接口 + /// + + public class TransferApi : BaseNoAuthentication + { + private EmpInfoIBLL empInfoIBLL = new EmpInfoBLL(); + private StuInfoBasicIBLL stuInfoBasicIBLL = new StuInfoBasicBLL(); + private DepartmentIBLL departmentIBLL = new DepartmentBLL(); + private UserIBLL userIBLL = new UserBLL(); + + /// + /// 注册接口 + /// + public TransferApi() + : base("/TransferApi/BasicInfo") + { + //发送部门基础信息 + Get["/sendDepartmentInfo"] = SendDepartmentInfo; + //发送教师基础信息 + Get["/sendTeacherInfo"] = SendTeacherInfo; + //发送学生基础信息 + Get["/sendStudentInfo"] = SendStudentInfo; + } + /// + /// cookie + /// + public static CookieCollection cookie { get; set; } + public static string cookiestr { get; set; } + public static DateTime cookiestrTime { get; set; } + + #region 获取数据 + + /// + /// 获取cookie接口 + /// + /// + public static bool GetCookie() + { + var loginParam = new + { + Id = "admin", + Pwd = Md5Helper.Encrypt("Admin_123456", 32) + }; + var responseLogin = SendRequest("POST", @"http://172.70.0.4:8088/fastgate/user/login", Encoding.UTF8, JsonConvert.SerializeObject(loginParam)); + var responseLoginObj = JsonConvert.DeserializeObject(responseLogin); + if (responseLoginObj.ErrCode == 200) + { + return true; + } + else + { + return GetCookie(); + } + } + /// + /// 发送部门基础信息 + /// + /// + /// + public Response SendDepartmentInfo(dynamic _) + { + var result = new List(); + + if (string.IsNullOrEmpty(cookiestr) || ((DateTime.Now - cookiestrTime).Minutes > 10)) + { + //调登录接口拿到cookie + GetCookie(); + } + var departmentList = departmentIBLL.GetAllList().Where(x => x.SendFlag == false); + foreach (var item in departmentList) + { + var param = new + { + ParentCode = string.IsNullOrEmpty(item.F_ParentId) || item.F_ParentId == "0" ? "iccsid" : (departmentIBLL.GetEntity(item.F_ParentId) == null ? "iccsid" : departmentIBLL.GetEntity(item.F_ParentId)?.F_EnCode), + pageSize = 10, + Name = item.F_FullName, + Code = item.F_EnCode, + }; + + var responseSend = SendRequestWithCookie("POST", "application/json;charset=utf-8", @"http://172.70.0.4:8088/fastgate/department", Encoding.UTF8, JsonConvert.SerializeObject(param)); + var responseSendObj = JsonConvert.DeserializeObject(responseSend); + + result.Add("部门编号" + item.F_EnCode + ",新增接口结果:" + responseSendObj.ErrCode + responseSendObj.ErrMsg); + + if (responseSendObj.ErrCode == 200) + { + //第三方新增成功,修改表-发送标识为true + //TODO: + var entity = departmentIBLL.GetEntity(item.F_DepartmentId); + if (entity != null) + { + entity.SendFlag = true; + departmentIBLL.SaveEntity2(entity.F_DepartmentId, entity); + } + } + else if (responseSendObj.ErrCode == 1010) //{ "ErrCode":1010,"ErrMsg":"登录状态已失效"} + { + //获取cookie + GetCookie(); + } + else if (responseSendObj.ErrCode == 10000) //10000 code repetition + { + //调修改接口 + var param2 = new + { + Code = item.F_EnCode, + Name = item.F_FullName, + pageSize = 10, + }; + var responseSend2 = SendRequestWithCookie("PUT", "application/json;charset=utf-8", @"http://172.70.0.4:8088/fastgate/department", Encoding.UTF8, JsonConvert.SerializeObject(param2)); + var responseSendObj2 = JsonConvert.DeserializeObject(responseSend2); + + result.Add("部门编号" + item.F_EnCode + ",修改接口结果:" + responseSendObj2.ErrCode + responseSendObj2.ErrMsg); + + if (responseSendObj2.ErrCode == 200) + { + //第三方修改成功,修改表-发送标识为true + //TODO: + var entity = departmentIBLL.GetEntity(item.F_DepartmentId); + if (entity != null) + { + entity.SendFlag = true; + departmentIBLL.SaveEntity2(entity.F_DepartmentId, entity); + } + } + else + { + //其他错误 + } + } + else + { + //其他错误 + } + + } + + return Success(result); + } + /// + /// 发送教师基础信息 + /// + /// + /// + public Response SendTeacherInfo(dynamic _) + { + var result = new List(); + + if (string.IsNullOrEmpty(cookiestr) || ((DateTime.Now - cookiestrTime).Minutes > 10)) + { + //调登录接口拿到cookie + GetCookie(); + } + //var teacherList = empInfoIBLL.GetAllList(); + //foreach (var item in teacherList) + { + Dictionary parameters = new Dictionary(); //参数列表 + parameters.Add("Sex", "1"); + parameters.Add("Depart", "5"); + parameters.Add("Name", "测试1"); + parameters.Add("Code", "ceshi1"); + var param = BuildQuery2(parameters, "----WebKitFormBoundaryAOT8GpQYYAP9jgGf"); + var contentType = "multipart/form-data; boundary=----WebKitFormBoundaryAOT8GpQYYAP9jgGf"; + + var responseSend = SendRequestWithCookie("POST", contentType, @"http://172.70.0.4:8088/fastgate/person", Encoding.UTF8, param); + var responseSendObj = JsonConvert.DeserializeObject(responseSend); + + result.Add("教师编号,新增接口结果:" + responseSendObj.ErrCode + responseSendObj.ErrMsg); + + if (responseSendObj.ErrCode == 200) + { + //第三方新增成功,修改表-发送标识为true + //TODO: + } + else if (responseSendObj.ErrCode == 1010) //{ "ErrCode":1010,"ErrMsg":"登录状态已失效"} + { + //获取cookie + GetCookie(); + } + else if (responseSendObj.ErrCode == 202) //202 code repeat + { + //调查询接口 + var responseSend3 = SendRequestWithCookie("GET", "application/json;charset=utf-8", @"http://172.70.0.4:8088/fastgate/personCode/ceshi1", Encoding.UTF8, null); + var responseSendObj3 = JsonConvert.DeserializeObject(responseSend3); + + result.Add("教师编号,查询接口结果:" + responseSendObj3.ErrCode + responseSendObj3.ErrMsg + JsonConvert.SerializeObject(responseSendObj3.data)); + + if (responseSendObj3.ErrCode == 200) + { + //第三方查询成功 + //调修改接口 + Dictionary parameters2 = new Dictionary(); //参数列表 + parameters2.Add("Sex", "1"); + parameters2.Add("Depart", "5"); + parameters2.Add("Name", "测试ceshi1"); + parameters2.Add("Code", "ceshi1"); + parameters2.Add("Seqid", responseSendObj3.data.Seqid.ToString()); + parameters2.Add("ImageList", string.Join(",", responseSendObj3.data.Pictures.Select(x => x.PersonPicturePath))); + var param2 = BuildQuery2(parameters2, "----WebKitFormBoundaryMAj7ABMLt3aJpmGH"); + var contentType2 = "multipart/form-data; boundary=----WebKitFormBoundaryMAj7ABMLt3aJpmGH"; + + var responseSend2 = SendRequestWithCookie("PUT", contentType2, @"http://172.70.0.4:8088/fastgate/person", Encoding.UTF8, param2); + var responseSendObj2 = JsonConvert.DeserializeObject(responseSend2); + + result.Add("教师编号,修改接口结果:" + responseSendObj2.ErrCode + responseSendObj2.ErrMsg); + + if (responseSendObj2.ErrCode == 200) + { + //第三方修改成功,修改表-发送标识为true + //TODO: + } + else if (responseSendObj2.ErrCode == 1010) //{ "ErrCode":1010,"ErrMsg":"登录状态已失效"} + { + //获取cookie + GetCookie(); + } + else + { + //其他错误 + } + + } + else if (responseSendObj3.ErrCode == 1010) //{ "ErrCode":1010,"ErrMsg":"登录状态已失效"} + { + //获取cookie + GetCookie(); + } + + } + else + { + //其他错误 + } + + } + + return Success(result); + } + + /// + /// 发送学生基础信息 + /// + /// + public Response SendStudentInfo(dynamic _) + { + return Success("成功了!"); + } + #endregion + + #region 公共方法 + /// + /// 请求获取cookie: + /// + /// GET,POST + /// + /// UTF-8 + /// 传送需要的参数 + /// + public static string SendRequest(string type, string url, Encoding encoding, string data) + { + HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url); + webRequest.Method = type; + webRequest.ContentType = "application/json"; + if (type == "POST") + { + byte[] postdata = Encoding.UTF8.GetBytes(data); + webRequest.ContentLength = postdata.Length; + Stream newStream = webRequest.GetRequestStream(); + newStream.Write(postdata, 0, postdata.Length); + newStream.Close(); + } + + //使用HttpWebRequest的CookieContainer属性进行设置 + CookieContainer ckCtnr = new CookieContainer(); + if (cookie != null) + { + ckCtnr.Add(cookie); //此处的cookie是HttpWebResponse对象的Cookies属性 + } + //获取应答网页 + webRequest.CookieContainer = ckCtnr; + + //webRequest.Headers.Add("Cookie", "JSESSIONID=518211FE9243E875A3C570D510E7262F; Path=/fastgate; HttpOnly"); + HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); + + cookie = webResponse.Cookies;//获取Cookie + cookiestr = webResponse.Headers.Get("Set-Cookie");//获取Cookie字符串 + if (!string.IsNullOrEmpty(cookiestr)) + { + cookiestrTime = DateTime.Now;//获取Cookie的时间 + } + + StreamReader sr = new StreamReader(webResponse.GetResponseStream(), encoding); + string str = sr.ReadToEnd(); + sr.Close(); + webResponse.Close(); + return str; + } + /// + /// 请求携带cookie: + /// + /// GET,POST,PUT + /// 请求头类型(json是application/json;charset=utf-8,form-data是multipart/form-data; boundary=----WebKitFormBoundaryAOT8GpQYYAP9jgGf,) + /// + /// UTF-8 + /// 传送需要的参数 + /// + public static string SendRequestWithCookie(string type, string contentType, string url, Encoding encoding, string data) + { + HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url); + webRequest.Method = type; + webRequest.ContentType = contentType; + webRequest.Headers.Add("Cookie", cookiestr);//携带Cookie + if (type == "POST" || type == "PUT") + { + byte[] postdata = Encoding.UTF8.GetBytes(data); + webRequest.ContentLength = postdata.Length; + Stream newStream = webRequest.GetRequestStream(); + newStream.Write(postdata, 0, postdata.Length); + newStream.Close(); + } + + HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); + StreamReader sr = new StreamReader(webResponse.GetResponseStream(), encoding); + string str = sr.ReadToEnd(); + sr.Close(); + webResponse.Close(); + return str; + } + /// + /// 组装请求参数 + /// + /// + /// + /// + private static string BuildQuery(IDictionary parameters, string encode) + { + StringBuilder postData = new StringBuilder(); + bool hasParam = false; + IEnumerator> dem = parameters.GetEnumerator(); + while (dem.MoveNext()) + { + string name = dem.Current.Key; + string value = dem.Current.Value; + // 忽略参数名或参数值为空的参数 + if (!string.IsNullOrEmpty(name)) + { + if (hasParam) + { + postData.Append("&"); + } + postData.Append(name); + postData.Append("="); + if (encode == "gb2312") + { + postData.Append(HttpUtility.UrlEncode(value, Encoding.GetEncoding("gb2312"))); + } + else if (encode == "utf8") + { + postData.Append(HttpUtility.UrlEncode(value, Encoding.UTF8)); + } + else + { + postData.Append(value); + } + hasParam = true; + } + } + return postData.ToString(); + } + /// + /// 组装请求参数 + /// + /// key-value + /// 分隔符 + /// + private static string BuildQuery2(IDictionary parameters, string boundary) + { + StringBuilder buffer = new StringBuilder(); + foreach (string key in parameters.Keys) + { + buffer.Append("\r\n").Append("--").Append(boundary).Append("\r\n"); + if (key == "file") + { + buffer.Append("Content-Disposition: form-data; name=\"" + key + "\";filename=\"920_complete_1.jpg\"\r\n"); + buffer.Append("Content-Type: image/jpeg"); + } + else + { + buffer.Append("Content-Disposition: form-data; name=\"" + key + "\"\r\n\r\n"); + buffer.Append(parameters[key]); + } + } + buffer.Append("\r\n").Append("--").Append(boundary).Append("--"); + return buffer.ToString(); + } + #endregion + + #region 私有类 + + /// + /// 表单实体类 + /// + private class ReqFormEntity + { + public string keyValue { get; set; } + public string strEntity { get; set; } + } + + /// + /// 人员详细信息 + /// + private class PersonInfo + { + /// + /// 错误码(200表示成功, + /// + public int ErrCode { get; set; } + /// + /// 错误信息,”success”为正常 + /// + public string ErrMsg { get; set; } + public PersonInfoData data { get; set; } + } + private class PersonInfoData + { + /// + /// 人员存在数据库的唯一ID + /// + public int Seqid { get; set; } + /// + /// 头像存储的地址ur + /// + public List Pictures { get; set; } + } + private class PersonDataPictures + { + /// + /// 登记照片地址 + /// + public string PersonPicturePath { get; set; } + } + + public enum loginins + { + school, + CODE, + } + #endregion + + } +} \ No newline at end of file diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Util/Learun.Util/Attributes/EnumAttribute.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Util/Learun.Util/Attributes/EnumAttribute.cs index 3b53557b6..bf4f4bc97 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Util/Learun.Util/Attributes/EnumAttribute.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Util/Learun.Util/Attributes/EnumAttribute.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.ComponentModel; using System.Reflection; @@ -40,5 +41,23 @@ namespace Learun.Util } return null; } + + /// + /// 返回枚举项的描述信息。 + /// + /// 要获取描述信息的枚举项。 + /// 枚举想的描述信息。 + public static List GetVsS(Type value) + { + var ls = new List(); + var vs = Enum.GetValues(value); + foreach (var item in vs) + { + ls.Add(item.ToString()); + } + + return ls; + + } } } From adb8daf683be85ff8c3d534b24cdf10335684d09 Mon Sep 17 00:00:00 2001 From: dao Date: Mon, 12 Aug 2024 20:18:13 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=A2=9E=E5=8A=A0=E6=9D=83=E9=99=90=E9=AA=8C?= =?UTF-8?q?=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...化智慧校园基础信息接口V1.0.docx | Bin 36696 -> 39137 bytes .../Learun.Application.WebApi.csproj | 1 + .../Modules/Arrangelesson.cs | 2 +- .../Modules/ArrangelessonLogin.cs | 11 ++++ .../Modules/BaseNoAuthenticationNoLogin.cs | 59 ++++-------------- .../Modules/TransferApi.cs | 6 +- .../Learun.Application.WebApi/Until/MyEnum.cs | 21 +++++++ .../Learun.Util/Attributes/EnumAttribute.cs | 13 ++++ 8 files changed, 61 insertions(+), 52 deletions(-) create mode 100644 Learun.Framework.Ultimate V7/Learun.Application.WebApi/Until/MyEnum.cs diff --git a/Learun.Framework.Ultimate V7/Doc文档/数字化智慧校园基础信息接口V1.0.docx b/Learun.Framework.Ultimate V7/Doc文档/数字化智慧校园基础信息接口V1.0.docx index 0dfb584e1cc9e73c695aaf67106b6c84f35db36c..b9d605afb7f97ce725b4d8e93a1e04be2a31f5a3 100644 GIT binary patch delta 33127 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

Y=7~qzxi4 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 M4EiaMNBzC}KVkyywg3PC diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj index f9004164d..51102b4ce 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj @@ -281,6 +281,7 @@ + diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/Arrangelesson.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/Arrangelesson.cs index 848418fdb..7276a59e6 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/Arrangelesson.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/Arrangelesson.cs @@ -10,7 +10,7 @@ using Nancy; namespace Learun.Application.WebApi.Modules { - public class Arrangelesson : BaseNoAuthentication + public class Arrangelesson : BaseApi { public Arrangelesson() : base("/arrangelesson/") diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ArrangelessonLogin.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ArrangelessonLogin.cs index 17fa6e943..60b8aac39 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ArrangelessonLogin.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ArrangelessonLogin.cs @@ -4,7 +4,9 @@ using System.Linq; using System.Web; using Learun.Application.Organization; using Learun.Application.TwoDevelopment.EducationalAdministration; +using Learun.Util; using Nancy; +using static Learun.Application.WebApi.Until.MyEnum; namespace Learun.Application.WebApi.Modules { @@ -13,6 +15,7 @@ namespace Learun.Application.WebApi.Modules public ArrangelessonLogin() : base("/arrangelessonlogin/") { + Get["/gettoken"] = GetToken; Get["/lessontype"] = GetLessonTypes; Get["/classtype"] = GetClassType; Get["/student"] = GetStudents; @@ -71,6 +74,14 @@ namespace Learun.Application.WebApi.Modules private StuSelectLessonListOfElectiveIBLL stuSelectLessonListOfElectiveIbll = new StuSelectLessonListOfElectiveBLL(); + private Response GetToken(dynamic _) + { + string sid = Request.Query["sysid"]; + var sys = EnumAttribute.GetVal(typeof(ThrSys), sid.ToInt()); + if (sys.IsEmpty()) return Fail("参数错误!"); + var token=DESEncrypt.Encrypt(sys); + return Success(token); + } private Response TranTest(dynamic _) { return Success("ok"); diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/BaseNoAuthenticationNoLogin.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/BaseNoAuthenticationNoLogin.cs index 4dc1d7185..7bd9cf331 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/BaseNoAuthenticationNoLogin.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/BaseNoAuthenticationNoLogin.cs @@ -5,7 +5,8 @@ using Learun.Util.Operat; using Nancy; using Nancy.ModelBinding; using System;//D:\Item\repos\DigitalScholl\Learun.Framework.Ultimate V7\Learun.Application.WebApi\Modules\TransferApi.cs -using static Learun.Application.WebApi.TransferApi; +using System.Linq; +using static Learun.Application.WebApi.Until.MyEnum; namespace Learun.Application.WebApi { @@ -96,7 +97,7 @@ namespace Learun.Application.WebApi /// public Response Success(string info) { - ResParameter res = new ResParameter { code = ResponseCode.success, info = info, data = new object { } }; + ResParameter res = new ResParameter { code = ResponseCode.success, info = "响应成功", data = info }; return Response.AsText(res.ToJson()).WithContentType("application/json"); } ///

@@ -226,10 +227,6 @@ namespace Learun.Application.WebApi #endregion #region 权限验证 - public UserInfo userInfo; - public string loginMark; - public string token; - /// /// 前置拦截器 @@ -238,50 +235,20 @@ namespace Learun.Application.WebApi /// private Response BeforeRequest(NancyContext ctx) { - //var Requesttoken = DESEncrypt.Decrypt(Request.Headers["token"].ToString()); - var Requesttoken = DESEncrypt.Decrypt(Request.Query["token"].ToString()); - - var a = EnumAttribute.GetVsS(typeof(loginins)); - - //if (Requesttoken == loginins.school) - //{ - - //} - ctx.Request.Url.Query = Learun.Util.WebHelper.Formatstr(ctx.Request.Url.Query); - foreach (var p in ctx.Parameters) - { - if (p.ParameterType == typeof(string)) - { - if (ctx.Parameters[p.ParameterName] != null) - { - ctx.Parameters[p.ParameterName] = Learun.Util.WebHelper.Formatstr(ctx.Parameters[p.ParameterName].ToString()); - } - } - } string path = ctx.ResolvedRoute.Description.Path; - //验证登录状态 - ReqParameter req = this.Bind(); - loginMark = req.loginMark; - token = req.token; - if (path == "/learun/adms/user/login" || path == "/learun/adms/user/loginbyIdCard" || path == "/" || path == "/bgimg" || path == "/learun/adms/user/img" || path == "/learun/adms/desktop/img" || path == "/learun/adms/user/imgfordc" || path == "/learun/adms/timetable/timeTableData" || path == "/quanjiang/sso/authorize" || path == "/learun/nologin/adms/annexes/upload" || path == "/learun/adms/annexes/wxlist" || path == "/learun/visitmanage/save" || path == "/learun/visitmanage/getweixinaccess_token") - {// 登录接口,默认页面接口不做权限验证处理 + if (path == "/arrangelessonlogin/gettoken") + {// token接口,默认页面接口不做权限验证处理 return null; } + var rToken = ctx.Request.Headers["token"].FirstOrDefault(); + if(rToken.IsEmpty()) return this.FailNoLogin("权限校验失败!"); - OperatorResult res = OperatorHelper.Instance.IsOnLine(req.token, req.loginMark); - if (res.stateCode == -1) - { - return this.FailNoLogin("未找到登录信息"); - } - if (res.stateCode == 0) - { - return this.FailNoLogin("登录信息已过期"); - } - else - { - // 获取登录者信息 - userInfo = res.userInfo; - } + var tss = EnumAttribute.GetVsS(typeof(ThrSys)); + + var Requesttoken = DESEncrypt.Decrypt(rToken); + if(!tss.Contains(Requesttoken)) return this.FailNoLogin("权限校验失败!!"); + + return null; } #endregion diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/TransferApi.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/TransferApi.cs index 29cd5b37a..afddb2c46 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/TransferApi.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/TransferApi.cs @@ -462,11 +462,7 @@ namespace Learun.Application.WebApi public string PersonPicturePath { get; set; } } - public enum loginins - { - school, - CODE, - } + #endregion } diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Until/MyEnum.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Until/MyEnum.cs new file mode 100644 index 000000000..c46e0bf5a --- /dev/null +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Until/MyEnum.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Learun.Application.WebApi.Until +{ + public class MyEnum + { + + public enum ThrSys + { + [Description("超星")] + ChaoXin=31233 + } + + + } +} diff --git a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Util/Learun.Util/Attributes/EnumAttribute.cs b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Util/Learun.Util/Attributes/EnumAttribute.cs index bf4f4bc97..5017ee9c0 100644 --- a/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Util/Learun.Util/Attributes/EnumAttribute.cs +++ b/Learun.Framework.Ultimate V7/Learun.Framework.Module/Learun.Util/Learun.Util/Attributes/EnumAttribute.cs @@ -42,6 +42,19 @@ namespace Learun.Util return null; } + public static string GetVal(Type enumType,int value) + { + try + { + var name = enumType.GetEnumName(value); + return name; + } + catch (Exception e) + { + return ""; + } + } + /// /// 返回枚举项的描述信息。 /// From 40d6e5edcab2ba09f82e3cd76a1e9eb2e7bfb568 Mon Sep 17 00:00:00 2001 From: dao Date: Thu, 19 Sep 2024 11:31:53 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=9D=83=E9=99=90=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Learun.Application.WebApi.csproj | 5 +---- .../Modules/Arrangelesson.cs | 14 ++++++++++++-- .../Modules/ArrangelessonLogin.cs | 12 ++---------- .../Modules/BaseNoAuthenticationNoLogin.cs | 2 +- .../Learun.Application.WebApi/Until/MyEnum.cs | 4 +++- 5 files changed, 19 insertions(+), 18 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj index 51102b4ce..b5d1a982a 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Learun.Application.WebApi.csproj @@ -194,10 +194,6 @@ - - - - @@ -378,6 +374,7 @@ + diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/Arrangelesson.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/Arrangelesson.cs index 7276a59e6..d8f81c371 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/Arrangelesson.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/Arrangelesson.cs @@ -6,15 +6,18 @@ using System.Web; using Learun.Application.Base.SystemModule; using Learun.Application.Organization; using Learun.Application.TwoDevelopment.EducationalAdministration; +using Learun.Util; using Nancy; +using static Learun.Application.WebApi.Until.MyEnum; namespace Learun.Application.WebApi.Modules { - public class Arrangelesson : BaseApi + public class Arrangelesson : BaseNoAuthenticationNoLogin { public Arrangelesson() : base("/arrangelesson/") { + Get["/gettoken"] = GetToken; Get["/lessontype"] = GetLessonTypes; Get["/classtype"] = GetClassType; Get["/student"] = GetStudents; @@ -82,7 +85,14 @@ namespace Learun.Application.WebApi.Modules { return Success("ok"); } - + private Response GetToken(dynamic _) + { + string sid = Request.Query["sysid"]; + var sys = EnumAttribute.GetVal(typeof(ThrSys), sid.ToInt()); + if (sys.IsEmpty()) return Fail("参数错误!"); + var token = DESEncrypt.Encrypt(sys); + return Success(token); + } private Response GetAllLesson(dynamic _) { var result = lessonInfoIbll.GetAllLesson(); diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ArrangelessonLogin.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ArrangelessonLogin.cs index 60b8aac39..c595719ee 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ArrangelessonLogin.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/ArrangelessonLogin.cs @@ -10,12 +10,11 @@ using static Learun.Application.WebApi.Until.MyEnum; namespace Learun.Application.WebApi.Modules { - public class ArrangelessonLogin : BaseNoAuthenticationNoLogin + public class ArrangelessonLogin : BaseApi { public ArrangelessonLogin() : base("/arrangelessonlogin/") { - Get["/gettoken"] = GetToken; Get["/lessontype"] = GetLessonTypes; Get["/classtype"] = GetClassType; Get["/student"] = GetStudents; @@ -74,14 +73,7 @@ namespace Learun.Application.WebApi.Modules private StuSelectLessonListOfElectiveIBLL stuSelectLessonListOfElectiveIbll = new StuSelectLessonListOfElectiveBLL(); - private Response GetToken(dynamic _) - { - string sid = Request.Query["sysid"]; - var sys = EnumAttribute.GetVal(typeof(ThrSys), sid.ToInt()); - if (sys.IsEmpty()) return Fail("参数错误!"); - var token=DESEncrypt.Encrypt(sys); - return Success(token); - } + private Response TranTest(dynamic _) { return Success("ok"); diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/BaseNoAuthenticationNoLogin.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/BaseNoAuthenticationNoLogin.cs index 7bd9cf331..1e51a9dce 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/BaseNoAuthenticationNoLogin.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Modules/BaseNoAuthenticationNoLogin.cs @@ -236,7 +236,7 @@ namespace Learun.Application.WebApi private Response BeforeRequest(NancyContext ctx) { string path = ctx.ResolvedRoute.Description.Path; - if (path == "/arrangelessonlogin/gettoken") + if (path == "/arrangelesson/gettoken") {// token接口,默认页面接口不做权限验证处理 return null; } diff --git a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Until/MyEnum.cs b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Until/MyEnum.cs index c46e0bf5a..f0d1e2ef5 100644 --- a/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Until/MyEnum.cs +++ b/Learun.Framework.Ultimate V7/Learun.Application.WebApi/Until/MyEnum.cs @@ -13,7 +13,9 @@ namespace Learun.Application.WebApi.Until public enum ThrSys { [Description("超星")] - ChaoXin=31233 + ChaoXin=31233, + [Description("正方")] + ZhengFang = 31234 } From cc7e97f56b45aeacec47644c6f267ce964bef00d Mon Sep 17 00:00:00 2001 From: dao Date: Thu, 19 Sep 2024 13:13:36 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E6=96=87=E6=A1=A3=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...化智慧校园基础信息接口V1.0.docx | Bin 39137 -> 39318 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Learun.Framework.Ultimate V7/Doc文档/数字化智慧校园基础信息接口V1.0.docx b/Learun.Framework.Ultimate V7/Doc文档/数字化智慧校园基础信息接口V1.0.docx index b9d605afb7f97ce725b4d8e93a1e04be2a31f5a3..933b22b52b5afc6a3edc6a4b6982de05ab65a0a8 100644 GIT binary patch delta 24107 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 delta 23880 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 Date: Thu, 19 Sep 2024 13:14:22 +0800 Subject: [PATCH 5/5] --- ...字化智慧校园基础信息接口V2.0.docx} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename Learun.Framework.Ultimate V7/Doc文档/{数字化智慧校园基础信息接口V1.0.docx => 数字化智慧校园基础信息接口V2.0.docx} (100%) diff --git a/Learun.Framework.Ultimate V7/Doc文档/数字化智慧校园基础信息接口V1.0.docx b/Learun.Framework.Ultimate V7/Doc文档/数字化智慧校园基础信息接口V2.0.docx similarity index 100% rename from Learun.Framework.Ultimate V7/Doc文档/数字化智慧校园基础信息接口V1.0.docx rename to Learun.Framework.Ultimate V7/Doc文档/数字化智慧校园基础信息接口V2.0.docx