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; }
}
#endregion
}
}