Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 
 

469 строки
19 KiB

  1. using Nancy;
  2. using Learun.Util;
  3. using System.Collections.Generic;
  4. using Learun.Application.TwoDevelopment.EducationalAdministration;
  5. using System;
  6. using System.IO;
  7. using Learun.Application.Base.SystemModule;
  8. using System.Net;
  9. using System.Linq;
  10. using System.Text;
  11. using Newtonsoft.Json;
  12. using System.Collections;
  13. using System.Web;
  14. using Learun.Application.Organization;
  15. namespace Learun.Application.WebApi
  16. {
  17. /// <summary>
  18. /// 版 本 Learun-ADMS-Ultimate V7.0.0 力软敏捷开发框架
  19. /// Copyright (c) 2013-2018 上海力软信息技术有限公司
  20. /// 创 建:超级管理员
  21. /// 日 期:2019-08-19 17:50
  22. /// 描 述:传送接口
  23. /// </summary>
  24. public class TransferApi : BaseNoAuthentication
  25. {
  26. private EmpInfoIBLL empInfoIBLL = new EmpInfoBLL();
  27. private StuInfoBasicIBLL stuInfoBasicIBLL = new StuInfoBasicBLL();
  28. private DepartmentIBLL departmentIBLL = new DepartmentBLL();
  29. private UserIBLL userIBLL = new UserBLL();
  30. /// <summary>
  31. /// 注册接口
  32. /// <summary>
  33. public TransferApi()
  34. : base("/TransferApi/BasicInfo")
  35. {
  36. //发送部门基础信息
  37. Get["/sendDepartmentInfo"] = SendDepartmentInfo;
  38. //发送教师基础信息
  39. Get["/sendTeacherInfo"] = SendTeacherInfo;
  40. //发送学生基础信息
  41. Get["/sendStudentInfo"] = SendStudentInfo;
  42. }
  43. /// <summary>
  44. /// cookie
  45. /// </summary>
  46. public static CookieCollection cookie { get; set; }
  47. public static string cookiestr { get; set; }
  48. public static DateTime cookiestrTime { get; set; }
  49. #region 获取数据
  50. /// <summary>
  51. /// 获取cookie接口
  52. /// </summary>
  53. /// <returns></returns>
  54. public static bool GetCookie()
  55. {
  56. var loginParam = new
  57. {
  58. Id = "admin",
  59. Pwd = Md5Helper.Encrypt("Admin_123456", 32)
  60. };
  61. var responseLogin = SendRequest("POST", @"http://172.70.0.4:8088/fastgate/user/login", Encoding.UTF8, JsonConvert.SerializeObject(loginParam));
  62. var responseLoginObj = JsonConvert.DeserializeObject<dynamic>(responseLogin);
  63. if (responseLoginObj.ErrCode == 200)
  64. {
  65. return true;
  66. }
  67. else
  68. {
  69. return GetCookie();
  70. }
  71. }
  72. /// <summary>
  73. /// 发送部门基础信息
  74. /// <summary>
  75. /// <param name="_"></param>
  76. /// <returns></returns>
  77. public Response SendDepartmentInfo(dynamic _)
  78. {
  79. var result = new List<string>();
  80. if (string.IsNullOrEmpty(cookiestr) || ((DateTime.Now - cookiestrTime).Minutes > 10))
  81. {
  82. //调登录接口拿到cookie
  83. GetCookie();
  84. }
  85. var departmentList = departmentIBLL.GetAllList().Where(x => x.SendFlag == false);
  86. foreach (var item in departmentList)
  87. {
  88. var param = new
  89. {
  90. 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),
  91. pageSize = 10,
  92. Name = item.F_FullName,
  93. Code = item.F_EnCode,
  94. };
  95. var responseSend = SendRequestWithCookie("POST", "application/json;charset=utf-8", @"http://172.70.0.4:8088/fastgate/department", Encoding.UTF8, JsonConvert.SerializeObject(param));
  96. var responseSendObj = JsonConvert.DeserializeObject<dynamic>(responseSend);
  97. result.Add("部门编号" + item.F_EnCode + ",新增接口结果:" + responseSendObj.ErrCode + responseSendObj.ErrMsg);
  98. if (responseSendObj.ErrCode == 200)
  99. {
  100. //第三方新增成功,修改表-发送标识为true
  101. //TODO:
  102. var entity = departmentIBLL.GetEntity(item.F_DepartmentId);
  103. if (entity != null)
  104. {
  105. entity.SendFlag = true;
  106. departmentIBLL.SaveEntity2(entity.F_DepartmentId, entity);
  107. }
  108. }
  109. else if (responseSendObj.ErrCode == 1010) //{ "ErrCode":1010,"ErrMsg":"登录状态已失效"}
  110. {
  111. //获取cookie
  112. GetCookie();
  113. }
  114. else if (responseSendObj.ErrCode == 10000) //10000 code repetition
  115. {
  116. //调修改接口
  117. var param2 = new
  118. {
  119. Code = item.F_EnCode,
  120. Name = item.F_FullName,
  121. pageSize = 10,
  122. };
  123. var responseSend2 = SendRequestWithCookie("PUT", "application/json;charset=utf-8", @"http://172.70.0.4:8088/fastgate/department", Encoding.UTF8, JsonConvert.SerializeObject(param2));
  124. var responseSendObj2 = JsonConvert.DeserializeObject<dynamic>(responseSend2);
  125. result.Add("部门编号" + item.F_EnCode + ",修改接口结果:" + responseSendObj2.ErrCode + responseSendObj2.ErrMsg);
  126. if (responseSendObj2.ErrCode == 200)
  127. {
  128. //第三方修改成功,修改表-发送标识为true
  129. //TODO:
  130. var entity = departmentIBLL.GetEntity(item.F_DepartmentId);
  131. if (entity != null)
  132. {
  133. entity.SendFlag = true;
  134. departmentIBLL.SaveEntity2(entity.F_DepartmentId, entity);
  135. }
  136. }
  137. else
  138. {
  139. //其他错误
  140. }
  141. }
  142. else
  143. {
  144. //其他错误
  145. }
  146. }
  147. return Success(result);
  148. }
  149. /// <summary>
  150. /// 发送教师基础信息
  151. /// <summary>
  152. /// <param name="_"></param>
  153. /// <returns></returns>
  154. public Response SendTeacherInfo(dynamic _)
  155. {
  156. var result = new List<string>();
  157. if (string.IsNullOrEmpty(cookiestr) || ((DateTime.Now - cookiestrTime).Minutes > 10))
  158. {
  159. //调登录接口拿到cookie
  160. GetCookie();
  161. }
  162. //var teacherList = empInfoIBLL.GetAllList();
  163. //foreach (var item in teacherList)
  164. {
  165. Dictionary<string, string> parameters = new Dictionary<string, string>(); //参数列表
  166. parameters.Add("Sex", "1");
  167. parameters.Add("Depart", "5");
  168. parameters.Add("Name", "测试1");
  169. parameters.Add("Code", "ceshi1");
  170. var param = BuildQuery2(parameters, "----WebKitFormBoundaryAOT8GpQYYAP9jgGf");
  171. var contentType = "multipart/form-data; boundary=----WebKitFormBoundaryAOT8GpQYYAP9jgGf";
  172. var responseSend = SendRequestWithCookie("POST", contentType, @"http://172.70.0.4:8088/fastgate/person", Encoding.UTF8, param);
  173. var responseSendObj = JsonConvert.DeserializeObject<dynamic>(responseSend);
  174. result.Add("教师编号,新增接口结果:" + responseSendObj.ErrCode + responseSendObj.ErrMsg);
  175. if (responseSendObj.ErrCode == 200)
  176. {
  177. //第三方新增成功,修改表-发送标识为true
  178. //TODO:
  179. }
  180. else if (responseSendObj.ErrCode == 1010) //{ "ErrCode":1010,"ErrMsg":"登录状态已失效"}
  181. {
  182. //获取cookie
  183. GetCookie();
  184. }
  185. else if (responseSendObj.ErrCode == 202) //202 code repeat
  186. {
  187. //调查询接口
  188. var responseSend3 = SendRequestWithCookie("GET", "application/json;charset=utf-8", @"http://172.70.0.4:8088/fastgate/personCode/ceshi1", Encoding.UTF8, null);
  189. var responseSendObj3 = JsonConvert.DeserializeObject<PersonInfo>(responseSend3);
  190. result.Add("教师编号,查询接口结果:" + responseSendObj3.ErrCode + responseSendObj3.ErrMsg + JsonConvert.SerializeObject(responseSendObj3.data));
  191. if (responseSendObj3.ErrCode == 200)
  192. {
  193. //第三方查询成功
  194. //调修改接口
  195. Dictionary<string, string> parameters2 = new Dictionary<string, string>(); //参数列表
  196. parameters2.Add("Sex", "1");
  197. parameters2.Add("Depart", "5");
  198. parameters2.Add("Name", "测试ceshi1");
  199. parameters2.Add("Code", "ceshi1");
  200. parameters2.Add("Seqid", responseSendObj3.data.Seqid.ToString());
  201. parameters2.Add("ImageList", string.Join(",", responseSendObj3.data.Pictures.Select(x => x.PersonPicturePath)));
  202. var param2 = BuildQuery2(parameters2, "----WebKitFormBoundaryMAj7ABMLt3aJpmGH");
  203. var contentType2 = "multipart/form-data; boundary=----WebKitFormBoundaryMAj7ABMLt3aJpmGH";
  204. var responseSend2 = SendRequestWithCookie("PUT", contentType2, @"http://172.70.0.4:8088/fastgate/person", Encoding.UTF8, param2);
  205. var responseSendObj2 = JsonConvert.DeserializeObject<dynamic>(responseSend2);
  206. result.Add("教师编号,修改接口结果:" + responseSendObj2.ErrCode + responseSendObj2.ErrMsg);
  207. if (responseSendObj2.ErrCode == 200)
  208. {
  209. //第三方修改成功,修改表-发送标识为true
  210. //TODO:
  211. }
  212. else if (responseSendObj2.ErrCode == 1010) //{ "ErrCode":1010,"ErrMsg":"登录状态已失效"}
  213. {
  214. //获取cookie
  215. GetCookie();
  216. }
  217. else
  218. {
  219. //其他错误
  220. }
  221. }
  222. else if (responseSendObj3.ErrCode == 1010) //{ "ErrCode":1010,"ErrMsg":"登录状态已失效"}
  223. {
  224. //获取cookie
  225. GetCookie();
  226. }
  227. }
  228. else
  229. {
  230. //其他错误
  231. }
  232. }
  233. return Success(result);
  234. }
  235. /// <summary>
  236. /// 发送学生基础信息
  237. /// </summary>
  238. /// <returns></returns>
  239. public Response SendStudentInfo(dynamic _)
  240. {
  241. return Success("成功了!");
  242. }
  243. #endregion
  244. #region 公共方法
  245. /// <summary>
  246. /// 请求获取cookie:
  247. /// </summary>
  248. /// <param name="type">GET,POST</param>
  249. /// <param name="url"></param>
  250. /// <param name="encoding">UTF-8</param>
  251. /// <param name="data">传送需要的参数</param>
  252. /// <returns></returns>
  253. public static string SendRequest(string type, string url, Encoding encoding, string data)
  254. {
  255. HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
  256. webRequest.Method = type;
  257. webRequest.ContentType = "application/json";
  258. if (type == "POST")
  259. {
  260. byte[] postdata = Encoding.UTF8.GetBytes(data);
  261. webRequest.ContentLength = postdata.Length;
  262. Stream newStream = webRequest.GetRequestStream();
  263. newStream.Write(postdata, 0, postdata.Length);
  264. newStream.Close();
  265. }
  266. //使用HttpWebRequest的CookieContainer属性进行设置
  267. CookieContainer ckCtnr = new CookieContainer();
  268. if (cookie != null)
  269. {
  270. ckCtnr.Add(cookie); //此处的cookie是HttpWebResponse对象的Cookies属性
  271. }
  272. //获取应答网页
  273. webRequest.CookieContainer = ckCtnr;
  274. //webRequest.Headers.Add("Cookie", "JSESSIONID=518211FE9243E875A3C570D510E7262F; Path=/fastgate; HttpOnly");
  275. HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
  276. cookie = webResponse.Cookies;//获取Cookie
  277. cookiestr = webResponse.Headers.Get("Set-Cookie");//获取Cookie字符串
  278. if (!string.IsNullOrEmpty(cookiestr))
  279. {
  280. cookiestrTime = DateTime.Now;//获取Cookie的时间
  281. }
  282. StreamReader sr = new StreamReader(webResponse.GetResponseStream(), encoding);
  283. string str = sr.ReadToEnd();
  284. sr.Close();
  285. webResponse.Close();
  286. return str;
  287. }
  288. /// <summary>
  289. /// 请求携带cookie:
  290. /// </summary>
  291. /// <param name="type">GET,POST,PUT</param>
  292. /// <param name="contentType">请求头类型(json是application/json;charset=utf-8,form-data是multipart/form-data; boundary=----WebKitFormBoundaryAOT8GpQYYAP9jgGf,)</param>
  293. /// <param name="url"></param>
  294. /// <param name="encoding">UTF-8</param>
  295. /// <param name="data">传送需要的参数</param>
  296. /// <returns></returns>
  297. public static string SendRequestWithCookie(string type, string contentType, string url, Encoding encoding, string data)
  298. {
  299. HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
  300. webRequest.Method = type;
  301. webRequest.ContentType = contentType;
  302. webRequest.Headers.Add("Cookie", cookiestr);//携带Cookie
  303. if (type == "POST" || type == "PUT")
  304. {
  305. byte[] postdata = Encoding.UTF8.GetBytes(data);
  306. webRequest.ContentLength = postdata.Length;
  307. Stream newStream = webRequest.GetRequestStream();
  308. newStream.Write(postdata, 0, postdata.Length);
  309. newStream.Close();
  310. }
  311. HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
  312. StreamReader sr = new StreamReader(webResponse.GetResponseStream(), encoding);
  313. string str = sr.ReadToEnd();
  314. sr.Close();
  315. webResponse.Close();
  316. return str;
  317. }
  318. /// <summary>
  319. /// 组装请求参数
  320. /// </summary>
  321. /// <param name="parameters"></param>
  322. /// <param name="encode"></param>
  323. /// <returns></returns>
  324. private static string BuildQuery(IDictionary<string, string> parameters, string encode)
  325. {
  326. StringBuilder postData = new StringBuilder();
  327. bool hasParam = false;
  328. IEnumerator<KeyValuePair<string, string>> dem = parameters.GetEnumerator();
  329. while (dem.MoveNext())
  330. {
  331. string name = dem.Current.Key;
  332. string value = dem.Current.Value;
  333. // 忽略参数名或参数值为空的参数
  334. if (!string.IsNullOrEmpty(name))
  335. {
  336. if (hasParam)
  337. {
  338. postData.Append("&");
  339. }
  340. postData.Append(name);
  341. postData.Append("=");
  342. if (encode == "gb2312")
  343. {
  344. postData.Append(HttpUtility.UrlEncode(value, Encoding.GetEncoding("gb2312")));
  345. }
  346. else if (encode == "utf8")
  347. {
  348. postData.Append(HttpUtility.UrlEncode(value, Encoding.UTF8));
  349. }
  350. else
  351. {
  352. postData.Append(value);
  353. }
  354. hasParam = true;
  355. }
  356. }
  357. return postData.ToString();
  358. }
  359. /// <summary>
  360. /// 组装请求参数
  361. /// </summary>
  362. /// <param name="parameters">key-value</param>
  363. /// <param name="boundary">分隔符</param>
  364. /// <returns></returns>
  365. private static string BuildQuery2(IDictionary<string, string> parameters, string boundary)
  366. {
  367. StringBuilder buffer = new StringBuilder();
  368. foreach (string key in parameters.Keys)
  369. {
  370. buffer.Append("\r\n").Append("--").Append(boundary).Append("\r\n");
  371. if (key == "file")
  372. {
  373. buffer.Append("Content-Disposition: form-data; name=\"" + key + "\";filename=\"920_complete_1.jpg\"\r\n");
  374. buffer.Append("Content-Type: image/jpeg");
  375. }
  376. else
  377. {
  378. buffer.Append("Content-Disposition: form-data; name=\"" + key + "\"\r\n\r\n");
  379. buffer.Append(parameters[key]);
  380. }
  381. }
  382. buffer.Append("\r\n").Append("--").Append(boundary).Append("--");
  383. return buffer.ToString();
  384. }
  385. #endregion
  386. #region 私有类
  387. /// <summary>
  388. /// 表单实体类
  389. /// <summary>
  390. private class ReqFormEntity
  391. {
  392. public string keyValue { get; set; }
  393. public string strEntity { get; set; }
  394. }
  395. /// <summary>
  396. /// 人员详细信息
  397. /// <summary>
  398. private class PersonInfo
  399. {
  400. /// <summary>
  401. /// 错误码(200表示成功,
  402. /// </summary>
  403. public int ErrCode { get; set; }
  404. /// <summary>
  405. /// 错误信息,”success”为正常
  406. /// </summary>
  407. public string ErrMsg { get; set; }
  408. public PersonInfoData data { get; set; }
  409. }
  410. private class PersonInfoData
  411. {
  412. /// <summary>
  413. /// 人员存在数据库的唯一ID
  414. /// </summary>
  415. public int Seqid { get; set; }
  416. /// <summary>
  417. /// 头像存储的地址ur
  418. /// </summary>
  419. public List<PersonDataPictures> Pictures { get; set; }
  420. }
  421. private class PersonDataPictures
  422. {
  423. /// <summary>
  424. /// 登记照片地址
  425. /// </summary>
  426. public string PersonPicturePath { get; set; }
  427. }
  428. #endregion
  429. }
  430. }