@@ -191,6 +191,13 @@ | |||
</ItemGroup> | |||
<ItemGroup> | |||
<Compile Include="Bootstraper.cs" /> | |||
<Compile Include="Modules\ArrangelessonLogin.cs" /> | |||
<Compile Include="Modules\BaseNoAuthenticationNoLogin.cs" /> | |||
<Compile Include="Modules\UsernologinApi.cs" /> | |||
<Compile Include="Modules\VisitmanageApi.cs" /> | |||
<Compile Include="Modules\LessonInfoOfElectiveOnlineApi.cs" /> | |||
<Compile Include="Modules\RepairReport\RepairReportTeacherApi.cs" /> | |||
<Compile Include="Modules\RepairReport\RepairReportStudentApi.cs" /> | |||
<Compile Include="Modules\EducationalAdministration\ArrangeExamTermApi.cs" /> | |||
<Compile Include="Modules\EducationalAdministration\ArrangeExamTermNewApi.cs" /> | |||
<Compile Include="Modules\FunctionApi.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); | |||
} | |||
/// <summary> | |||
/// 补考名单数据 | |||
/// </summary> | |||
/// <param name="_"></param> | |||
/// <returns></returns> | |||
private Response GetBuKaoList(dynamic _) | |||
{ | |||
var allList = new List<StuScoreEntity>(); | |||
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); | |||
} | |||
} | |||
} |
@@ -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 | |||
{ | |||
/// <summary> | |||
/// 版 本 Learun-ADMS V7.0.0 数字化智慧校园 | |||
/// Copyright (c) 2013-2018 北京泉江科技有限公司 | |||
/// 创建人:数字化智慧校园-框架开发组 | |||
/// 日 期:2017.05.12 | |||
/// 描 述:Nancy-Api基础模块 | |||
/// </summary> | |||
public class BaseNoAuthenticationNoLogin : NancyModule | |||
{ | |||
#region 构造函数 | |||
public BaseNoAuthenticationNoLogin() | |||
: base() | |||
{ | |||
Before += BeforeRequest; | |||
OnError += OnErroe; | |||
} | |||
public BaseNoAuthenticationNoLogin(string baseUrl) | |||
: base(baseUrl) | |||
{ | |||
Before += BeforeRequest; | |||
OnError += OnErroe; | |||
} | |||
#endregion | |||
#region 获取请求数据 | |||
/// <summary> | |||
/// 获取请求数据 | |||
/// </summary> | |||
/// <typeparam name="T"></typeparam> | |||
/// <returns></returns> | |||
public T GetReqData<T>() where T : class | |||
{ | |||
try | |||
{ | |||
ReqParameter<string> req = this.Bind<ReqParameter<string>>(); | |||
return req.data.ToObject<T>(); | |||
} | |||
catch (Exception) | |||
{ | |||
throw; | |||
} | |||
} | |||
/// <summary> | |||
/// 获取请求数据 | |||
/// </summary> | |||
/// <returns></returns> | |||
public string GetReqData() | |||
{ | |||
try | |||
{ | |||
ReqParameter<string> req = this.Bind<ReqParameter<string>>(); | |||
return req.data; | |||
} | |||
catch (Exception) | |||
{ | |||
throw; | |||
} | |||
} | |||
/// <summary> | |||
/// 获取请求数据 | |||
/// </summary> | |||
/// <typeparam name="T"></typeparam> | |||
/// <returns></returns> | |||
public T GetReq<T>() where T : class | |||
{ | |||
try | |||
{ | |||
T req = this.Bind<T>(); | |||
return req; | |||
} | |||
catch (Exception) | |||
{ | |||
throw; | |||
} | |||
} | |||
#endregion | |||
#region 响应接口 | |||
/// <summary> | |||
/// 成功响应数据 | |||
/// </summary> | |||
/// <param name="msg"></param> | |||
/// <returns></returns> | |||
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"); | |||
} | |||
/// <summary> | |||
/// 成功响应数据 | |||
/// </summary> | |||
/// <typeparam name="T"></typeparam> | |||
/// <param name="res"></param> | |||
/// <returns></returns> | |||
public Response Success(object data) | |||
{ | |||
ResParameter res = new ResParameter { code = ResponseCode.success, info = "响应成功", data = data }; | |||
return Response.AsText(res.ToJson()).WithContentType("application/json"); | |||
} | |||
/// <summary> | |||
/// 成功响应数据 | |||
/// </summary> | |||
/// <typeparam name="T"></typeparam> | |||
/// <param name="res"></param> | |||
/// <returns></returns> | |||
public Response Success<T>(T data) where T : class | |||
{ | |||
ResParameter res = new ResParameter { code = ResponseCode.success, info = "响应成功", data = data }; | |||
return Response.AsText(res.ToJson()).WithContentType("application/json"); | |||
} | |||
/// <summary> | |||
/// 成功响应数据 | |||
/// </summary> | |||
/// <typeparam name="T"></typeparam> | |||
/// <param name="res"></param> | |||
/// <returns></returns> | |||
public Response SuccessString(string data) | |||
{ | |||
ResParameter res = new ResParameter { code = ResponseCode.success, info = "响应成功", data = data }; | |||
return Response.AsText(res.ToJson()).WithContentType("application/json"); | |||
} | |||
/// <summary> | |||
/// 接口响应失败 | |||
/// </summary> | |||
/// <param name="msg"></param> | |||
/// <returns></returns> | |||
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 异常抓取 | |||
/// <summary> | |||
/// 日志对象实体 | |||
/// </summary> | |||
private Log _logger; | |||
/// <summary> | |||
/// 日志操作 | |||
/// </summary> | |||
public Log Logger | |||
{ | |||
get { return _logger ?? (_logger = LogFactory.GetLogger(this.GetType().ToString())); } | |||
} | |||
/// <summary> | |||
/// 监听接口异常 | |||
/// </summary> | |||
/// <param name="ctx">连接上下信息</param> | |||
/// <param name="ex">异常信息</param> | |||
/// <returns></returns> | |||
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); | |||
} | |||
/// <summary> | |||
/// 写入日志(log4net) | |||
/// </summary> | |||
/// <param name="context">提供使用</param> | |||
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; | |||
/// <summary> | |||
/// 前置拦截器 | |||
/// </summary> | |||
/// <param name="ctx"></param> | |||
/// <returns></returns> | |||
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<ReqParameter>(); | |||
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 | |||
} | |||
} |
@@ -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 | |||
{ | |||
/// <summary> | |||
/// 版 本 Learun-ADMS-Ultimate V7.0.0 力软敏捷开发框架 | |||
/// Copyright (c) 2013-2018 上海力软信息技术有限公司 | |||
/// 创 建:超级管理员 | |||
/// 日 期:2019-08-19 17:50 | |||
/// 描 述:传送接口 | |||
/// </summary> | |||
public class TransferApi : BaseNoAuthentication | |||
{ | |||
private EmpInfoIBLL empInfoIBLL = new EmpInfoBLL(); | |||
private StuInfoBasicIBLL stuInfoBasicIBLL = new StuInfoBasicBLL(); | |||
private DepartmentIBLL departmentIBLL = new DepartmentBLL(); | |||
private UserIBLL userIBLL = new UserBLL(); | |||
/// <summary> | |||
/// 注册接口 | |||
/// <summary> | |||
public TransferApi() | |||
: base("/TransferApi/BasicInfo") | |||
{ | |||
//发送部门基础信息 | |||
Get["/sendDepartmentInfo"] = SendDepartmentInfo; | |||
//发送教师基础信息 | |||
Get["/sendTeacherInfo"] = SendTeacherInfo; | |||
//发送学生基础信息 | |||
Get["/sendStudentInfo"] = SendStudentInfo; | |||
} | |||
/// <summary> | |||
/// cookie | |||
/// </summary> | |||
public static CookieCollection cookie { get; set; } | |||
public static string cookiestr { get; set; } | |||
public static DateTime cookiestrTime { get; set; } | |||
#region 获取数据 | |||
/// <summary> | |||
/// 获取cookie接口 | |||
/// </summary> | |||
/// <returns></returns> | |||
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<dynamic>(responseLogin); | |||
if (responseLoginObj.ErrCode == 200) | |||
{ | |||
return true; | |||
} | |||
else | |||
{ | |||
return GetCookie(); | |||
} | |||
} | |||
/// <summary> | |||
/// 发送部门基础信息 | |||
/// <summary> | |||
/// <param name="_"></param> | |||
/// <returns></returns> | |||
public Response SendDepartmentInfo(dynamic _) | |||
{ | |||
var result = new List<string>(); | |||
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<dynamic>(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<dynamic>(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); | |||
} | |||
/// <summary> | |||
/// 发送教师基础信息 | |||
/// <summary> | |||
/// <param name="_"></param> | |||
/// <returns></returns> | |||
public Response SendTeacherInfo(dynamic _) | |||
{ | |||
var result = new List<string>(); | |||
if (string.IsNullOrEmpty(cookiestr) || ((DateTime.Now - cookiestrTime).Minutes > 10)) | |||
{ | |||
//调登录接口拿到cookie | |||
GetCookie(); | |||
} | |||
//var teacherList = empInfoIBLL.GetAllList(); | |||
//foreach (var item in teacherList) | |||
{ | |||
Dictionary<string, string> parameters = new Dictionary<string, string>(); //参数列表 | |||
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<dynamic>(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<PersonInfo>(responseSend3); | |||
result.Add("教师编号,查询接口结果:" + responseSendObj3.ErrCode + responseSendObj3.ErrMsg + JsonConvert.SerializeObject(responseSendObj3.data)); | |||
if (responseSendObj3.ErrCode == 200) | |||
{ | |||
//第三方查询成功 | |||
//调修改接口 | |||
Dictionary<string, string> parameters2 = new Dictionary<string, string>(); //参数列表 | |||
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<dynamic>(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); | |||
} | |||
/// <summary> | |||
/// 发送学生基础信息 | |||
/// </summary> | |||
/// <returns></returns> | |||
public Response SendStudentInfo(dynamic _) | |||
{ | |||
return Success("成功了!"); | |||
} | |||
#endregion | |||
#region 公共方法 | |||
/// <summary> | |||
/// 请求获取cookie: | |||
/// </summary> | |||
/// <param name="type">GET,POST</param> | |||
/// <param name="url"></param> | |||
/// <param name="encoding">UTF-8</param> | |||
/// <param name="data">传送需要的参数</param> | |||
/// <returns></returns> | |||
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; | |||
} | |||
/// <summary> | |||
/// 请求携带cookie: | |||
/// </summary> | |||
/// <param name="type">GET,POST,PUT</param> | |||
/// <param name="contentType">请求头类型(json是application/json;charset=utf-8,form-data是multipart/form-data; boundary=----WebKitFormBoundaryAOT8GpQYYAP9jgGf,)</param> | |||
/// <param name="url"></param> | |||
/// <param name="encoding">UTF-8</param> | |||
/// <param name="data">传送需要的参数</param> | |||
/// <returns></returns> | |||
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; | |||
} | |||
/// <summary> | |||
/// 组装请求参数 | |||
/// </summary> | |||
/// <param name="parameters"></param> | |||
/// <param name="encode"></param> | |||
/// <returns></returns> | |||
private static string BuildQuery(IDictionary<string, string> parameters, string encode) | |||
{ | |||
StringBuilder postData = new StringBuilder(); | |||
bool hasParam = false; | |||
IEnumerator<KeyValuePair<string, string>> 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(); | |||
} | |||
/// <summary> | |||
/// 组装请求参数 | |||
/// </summary> | |||
/// <param name="parameters">key-value</param> | |||
/// <param name="boundary">分隔符</param> | |||
/// <returns></returns> | |||
private static string BuildQuery2(IDictionary<string, string> 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 私有类 | |||
/// <summary> | |||
/// 表单实体类 | |||
/// <summary> | |||
private class ReqFormEntity | |||
{ | |||
public string keyValue { get; set; } | |||
public string strEntity { get; set; } | |||
} | |||
/// <summary> | |||
/// 人员详细信息 | |||
/// <summary> | |||
private class PersonInfo | |||
{ | |||
/// <summary> | |||
/// 错误码(200表示成功, | |||
/// </summary> | |||
public int ErrCode { get; set; } | |||
/// <summary> | |||
/// 错误信息,”success”为正常 | |||
/// </summary> | |||
public string ErrMsg { get; set; } | |||
public PersonInfoData data { get; set; } | |||
} | |||
private class PersonInfoData | |||
{ | |||
/// <summary> | |||
/// 人员存在数据库的唯一ID | |||
/// </summary> | |||
public int Seqid { get; set; } | |||
/// <summary> | |||
/// 头像存储的地址ur | |||
/// </summary> | |||
public List<PersonDataPictures> Pictures { get; set; } | |||
} | |||
private class PersonDataPictures | |||
{ | |||
/// <summary> | |||
/// 登记照片地址 | |||
/// </summary> | |||
public string PersonPicturePath { get; set; } | |||
} | |||
public enum loginins | |||
{ | |||
school, | |||
CODE, | |||
} | |||
#endregion | |||
} | |||
} |
@@ -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; | |||
} | |||
/// <summary> | |||
/// 返回枚举项的描述信息。 | |||
/// </summary> | |||
/// <param name="value">要获取描述信息的枚举项。</param> | |||
/// <returns>枚举想的描述信息。</returns> | |||
public static List<string> GetVsS(Type value) | |||
{ | |||
var ls = new List<string>(); | |||
var vs = Enum.GetValues(value); | |||
foreach (var item in vs) | |||
{ | |||
ls.Add(item.ToString()); | |||
} | |||
return ls; | |||
} | |||
} | |||
} |