BYNEApi.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. using Microsoft.AspNetCore.Http;
  2. using QM.KJGH.CGGL.Model.CGSBT;
  3. using QM.KJGH.CGGL.Model.QxCghj;
  4. using QM.KJGH.CGGL.NMCGHJ.QX.Models;
  5. using QM.KJGH.Model.KJGH.CGHJ;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using WS;
  13. using WS.AutoMapper;
  14. using WS.Http;
  15. using WS.Log;
  16. namespace QM.KJGH.CGGL.NMCGHJ.QX
  17. {
  18. public class BYNEApi
  19. {
  20. /// <summary>
  21. /// 登录获取Token接口
  22. /// </summary>
  23. /// <param name=""></param>
  24. /// <returns></returns>
  25. public static string GetToken()
  26. {
  27. RunLog.Info("登录获取Token接口");
  28. //参数
  29. Dictionary<string, string> pars = new Dictionary<string, string>();
  30. pars.Add("grant_type", BYNEConfig.GRANT_TYPE);
  31. pars.Add("username", BYNEConfig.USERNAME);
  32. pars.Add("password", BYNEConfig.PASSWORD);
  33. pars.Add("scope", BYNEConfig.SCOPE);
  34. var urlParam = ApiHelper.FormatUrlParam(pars, BYNEConfig.URL_TOKEN);
  35. RunLog.Info("登录获取Token接口请求:" + urlParam);
  36. var res = HttpHelper.HttpPost(urlParam, string.Empty, GetHeaders());
  37. RunLog.Info("登录获取Token接口返回:" + res);
  38. var resModel = res.ToModel<BYNEResponseApiModel>();
  39. if (resModel.Data == null && string.IsNullOrWhiteSpace(resModel.Msg))
  40. {
  41. BYNEResToken token = res.ToModel<BYNEResToken>();
  42. return token.access_token;
  43. }
  44. return "";
  45. }
  46. /// <summary>
  47. /// 统一请求头
  48. /// </summary>
  49. public static Dictionary<string, string> GetHeaders(string token = "")
  50. {
  51. //设置请求头
  52. Dictionary<string, string> headers = new Dictionary<string, string>();
  53. if (string.IsNullOrWhiteSpace(token))
  54. headers.Add("Authorization", BYNEConfig.AUTHORIZATION);
  55. else
  56. headers.Add("Authorization", $"bearer {token}");
  57. return headers;
  58. }
  59. #region 规划成果
  60. /// <summary>
  61. /// 接口1:检查文件分片信息
  62. /// </summary>
  63. /// <returns></returns>
  64. public static BYNECghjView Md5(BYNECghjMd5Io input)
  65. {
  66. //请求头
  67. var token = GetToken();
  68. var headers = GetHeaders(token);
  69. //参数
  70. Dictionary<string, string> pars = input.ToDictionary<string>();
  71. var urlParam = ApiHelper.FormatUrlParam(pars);
  72. RunLog.Info($"检查文件分片信息:{BYNEConfig.URL_RESULTS_MD5} => {urlParam}");
  73. var res = HttpHelper.HttpGet(BYNEConfig.URL_RESULTS_MD5, urlParam, headers);
  74. RunLog.Info($"检查文件分片信息返回:" + res.ToJson());
  75. var resModel = res.ToModel<BYNEResponseApiModel>();
  76. if (resModel.Code == 200)
  77. {
  78. var qx = resModel.Data.ToJson().ToModel<BYNECghjView>();
  79. qx.token = token;
  80. return qx;
  81. }
  82. else
  83. {
  84. RunLog.Debug("检查文件分片信息失败=>" + res);
  85. throw new UseArgumentException("检查文件分片信息失败:" + resModel.Msg);
  86. }
  87. }
  88. /// <summary>
  89. /// 接口2:上传成果包
  90. /// </summary>
  91. /// <param name="input"></param>
  92. /// <param name="upfile">成果包压缩包(ZIP格式)</param>
  93. /// <returns></returns>
  94. public static string Upload(BYNECghjFpIo_QX input, string upfile)
  95. {
  96. //请求头
  97. var headers = GetHeaders(input.token);
  98. //BodyFormat参数
  99. var bodys = input.MapTo<BYNECghjFpIo>().ToDictionary<string>();
  100. //文件
  101. var files = new Dictionary<string, string>();
  102. files.Add("upfile", upfile);
  103. RunLog.Info($"上传成果包接口:{BYNEConfig.URL_RESULTS_UPLOAD} => {input.ToJson()} =>{upfile}");
  104. var res = ApiHelper.HttpPostFormdata(BYNEConfig.URL_RESULTS_UPLOAD, headers: headers, postData:bodys, files:files, timeOut: BYNEConfig.TIME_OUT);
  105. RunLog.Info("上传成果包接口返回:" + res);
  106. var resModel = res.ToModel<BYNEResponseApiModel>();
  107. if (resModel.Code == 200)
  108. {
  109. return resModel.Data.ToString();
  110. }
  111. else
  112. {
  113. RunLog.Debug("分片上传成果包失败=>" + res);
  114. throw new UseArgumentException("操作失败:" + resModel.Msg);
  115. }
  116. }
  117. /// <summary>
  118. /// 接口3:大文件分片合并
  119. /// </summary>
  120. /// <returns></returns>
  121. public static string Merge(BYNECghjMergeIo input, string token)
  122. {
  123. //请求头
  124. var headers = GetHeaders(token);
  125. //参数
  126. Dictionary<string, string> pars = input.ToDictionary<string>();
  127. #region 20230523 修改接口参数方式
  128. //var urlParam = ApiHelper.FormatUrlParam(pars, BYNEConfig.URL_RESULTS_MERGE);
  129. //RunLog.Info($"文件分片合并:{urlParam}");
  130. //var res = HttpHelper.HttpPost(urlParam, string.Empty, headers);
  131. RunLog.Info($"上报成果包信息:{BYNEConfig.URL_RESULTS_MERGE} => {input.ToJson()}");
  132. var res = HttpHelper.HttpPost(BYNEConfig.URL_RESULTS_MERGE, input.ToJson(), headers);
  133. #endregion
  134. RunLog.Info($"文件分片合并返回:" + res.ToJson());
  135. var resModel = res.ToModel<BYNEResponseApiModel>();
  136. if (resModel.Code == 200)
  137. {
  138. return resModel.Data.ToString();
  139. }
  140. else
  141. {
  142. RunLog.Debug("文件分片合并失败=>" + res);
  143. throw new UseArgumentException("文件分片合并失败:" + resModel.Msg);
  144. }
  145. }
  146. /// <summary>
  147. /// 接口4:上报成果包信息
  148. /// </summary>
  149. /// <returns></returns>
  150. public static bool Complete(BYNECghjIo input, string zjbgFile, string token)
  151. {
  152. //请求头
  153. var headers = GetHeaders(token);
  154. //参数
  155. Dictionary<string, string> bodys = input.ToDictionary<string>();
  156. //文件
  157. var files = new Dictionary<string, string>();
  158. files.Add("zjbgFile", zjbgFile);
  159. RunLog.Info($"上报成果包信息:{BYNEConfig.URL_RESULTS_COMPLETE} => {input.ToJson()} =>{zjbgFile}");
  160. var res = ApiHelper.HttpPostFormdata(BYNEConfig.URL_RESULTS_COMPLETE, headers: headers, postData:bodys, files:files, timeOut: BYNEConfig.TIME_OUT);
  161. RunLog.Info($"上报成果包信息返回:" + res.ToJson());
  162. var resModel = res.ToModel<BYNEResponseApiModel>();
  163. if (resModel.Code == 200)
  164. {
  165. return true;
  166. }
  167. else
  168. {
  169. RunLog.Debug("上报成果包信息失败=>" + res);
  170. throw new UseArgumentException("上报成果包信息失败:" + resModel.Msg);
  171. }
  172. }
  173. #endregion
  174. #region 监测指标
  175. /// <summary>
  176. /// 规划值导入模板下载
  177. /// </summary>
  178. /// <returns></returns>
  179. public static string GetGhzTemplate(string path)
  180. {
  181. var file = ApiHelper.HttpDownFile(BYNEConfig.URL_JCYJ_GHZ_TEMPLATE, path, GetHeaders(GetToken()), timeOut: BYNEConfig.TIME_OUT);
  182. if(string.IsNullOrWhiteSpace(file) || !File.Exists(file))
  183. {
  184. throw new UseArgumentException("规划值导入模板下载失败");
  185. }
  186. return file;
  187. }
  188. /// <summary>
  189. /// 规划值导入
  190. /// </summary>
  191. /// <returns></returns>
  192. public static bool JcyjGhzUpload(string file)
  193. {
  194. var files = new Dictionary<string, string>();
  195. files.Add("file", file);
  196. RunLog.Info($"规划值导入接口:{file}");
  197. string res = string.Empty;
  198. if(BYNEConfig.GRANT_TYPE == "GET")
  199. res = ApiHelper.HttpGetFormdata(BYNEConfig.URL_JCYJ_GHZ, headers: GetHeaders(GetToken()), files:files, timeOut: BYNEConfig.TIME_OUT);
  200. else
  201. res = ApiHelper.HttpPostFormdata(BYNEConfig.URL_JCYJ_GHZ, headers: GetHeaders(GetToken()), files:files, timeOut: BYNEConfig.TIME_OUT);
  202. RunLog.Info("规划值导入接口返回:" + res);
  203. var resModel = res.ToModel<BYNEResponseApiModel>();
  204. if (resModel.Code == 200)
  205. {
  206. return true;
  207. }
  208. else
  209. {
  210. RunLog.Debug("规划值导入失败=>" + res);
  211. throw new UseArgumentException("规划值导入失败:" + resModel.Msg);
  212. }
  213. }
  214. /// <summary>
  215. /// 监测值导入模板下载
  216. /// </summary>
  217. /// <returns></returns>
  218. public static string GetJczTemplate(string path)
  219. {
  220. var file = ApiHelper.HttpDownFile(BYNEConfig.URL_JCYJ_JCZ_TEMPLATE, path, GetHeaders(GetToken()), timeOut: BYNEConfig.TIME_OUT);
  221. if (string.IsNullOrWhiteSpace(file) || !File.Exists(file))
  222. {
  223. throw new UseArgumentException("监测值导入模板下载失败");
  224. }
  225. return file;
  226. }
  227. /// <summary>
  228. /// 监测值导入
  229. /// </summary>
  230. /// <returns></returns>
  231. public static bool JcyjJczUpload(string file)
  232. {
  233. var files = new Dictionary<string, string>();
  234. files.Add("file", file);
  235. RunLog.Info($"监测值导入接口:{file}");
  236. //var res = ApiHelper.HttpPostFormdata(BYNEConfig.URL_JCYJ_JCZ, headers: GetHeaders(GetToken()), files: files);
  237. string res = string.Empty;
  238. if(BYNEConfig.GRANT_TYPE == "GET")
  239. res = ApiHelper.HttpGetFormdata(BYNEConfig.URL_JCYJ_JCZ, headers: GetHeaders(GetToken()), files: files, timeOut: BYNEConfig.TIME_OUT);
  240. else
  241. res = ApiHelper.HttpPostFormdata(BYNEConfig.URL_JCYJ_JCZ, headers: GetHeaders(GetToken()), files: files, timeOut: BYNEConfig.TIME_OUT);
  242. RunLog.Info("监测值导入接口返回:" + res);
  243. var resModel = res.ToModel<BYNEResponseApiModel>();
  244. if (resModel.Code == 200)
  245. {
  246. return true;
  247. }
  248. else
  249. {
  250. RunLog.Debug("监测值导入失败=>" + res);
  251. throw new UseArgumentException("监测值导入失败:" + resModel.Msg);
  252. }
  253. }
  254. #endregion
  255. #region 成果包查询接口
  256. /// <summary>
  257. /// 4.1 查询已办成果流程
  258. /// </summary>
  259. /// <returns></returns>
  260. public static List<CghjCgsbrwYbcg> GetYbcg(BYNECgcxIo input, ref string token)
  261. {
  262. token = GetToken();
  263. var headers = GetHeaders(token);
  264. //参数
  265. Dictionary<string, string> pars = input.ToDictionary<string>();
  266. var urlParam = ApiHelper.FormatUrlParam(pars);
  267. RunLog.Info($"查询已办成果流程接口请求:{BYNEConfig.URL_LANDMYATTENDSDATA} => {urlParam}");
  268. var res = HttpHelper.HttpGet(BYNEConfig.URL_LANDMYATTENDSDATA, urlParam, headers);
  269. RunLog.Info("查询已办成果流程接口返回:" + res);
  270. var resModel = res.ToModel<BYNEResponseCgApiModel>();
  271. if (resModel.Code == 200)
  272. {
  273. var qx = resModel.Data.records.ToJson().ToModel<List<CghjCgsbrwYbcg>>();
  274. return qx;
  275. }
  276. else
  277. {
  278. RunLog.Debug("查询已办成果流程失败=>" + res);
  279. throw new UseArgumentException("查询已办成果流程失败:" + resModel.Msg);
  280. }
  281. }
  282. /// <summary>
  283. /// 4.2 查询待办成果列表
  284. /// </summary>
  285. /// <returns></returns>
  286. public static List<CghjCgsbrwDbcg> GetDbcg(BYNECgcxIo input, ref string token)
  287. {
  288. token = GetToken();
  289. var headers = GetHeaders(token);
  290. //参数
  291. Dictionary<string, string> pars = input.ToDictionary<string>();
  292. var urlParam = ApiHelper.FormatUrlParam(pars);
  293. RunLog.Info($"查询待办成果列表接口请求:{BYNEConfig.URL_LANDGETALLTASKS} => {urlParam}");
  294. var res = HttpHelper.HttpGet(BYNEConfig.URL_LANDGETALLTASKS, urlParam, headers);
  295. RunLog.Info("查询待办成果列表接口返回:" + res);
  296. var resModel = res.ToModel<BYNEResponseCgApiModel>();
  297. if (resModel.Code == 200)
  298. {
  299. var qx = resModel.Data.records.ToJson().ToModel<List<CghjCgsbrwDbcg>>();
  300. return qx;
  301. }
  302. else
  303. {
  304. RunLog.Debug("查询待办成果列表失败=>" + res);
  305. throw new UseArgumentException("查询待办成果列表失败:" + resModel.Msg);
  306. }
  307. }
  308. /// <summary>
  309. /// 4.3 查询已办成果审批记录
  310. /// </summary>
  311. /// <returns></returns>
  312. public static List<CghjCgsbrwSpjl> GetSpjl(BYNECgcxSpjlIo input)
  313. {
  314. var headers = GetHeaders(input.token);
  315. //参数
  316. Dictionary<string, string> pars = input.ToDictionary<string>();
  317. pars.Remove("token");
  318. var urlParam = ApiHelper.FormatUrlParam(pars);
  319. RunLog.Info($"查询已办成果审批记录接口请求:{BYNEConfig.URL_LANDTASKSTATUS} => {urlParam}");
  320. var res = HttpHelper.HttpGet(BYNEConfig.URL_LANDTASKSTATUS, urlParam, headers);
  321. RunLog.Info("查询已办成果审批记录接口返回:" + res);
  322. var resModel = res.ToModel<BYNEResponseApiModel>();
  323. if (resModel.Code == 200)
  324. {
  325. List<CghjCgsbrwSpjl> list = new List<CghjCgsbrwSpjl>();
  326. var jls = resModel.Data.ToJson().ToModel<List<CghjCgsbrwSpjlView>>();
  327. foreach (var item in jls)
  328. {
  329. CghjCgsbrwSpjl spjl = item.MapTo<CghjCgsbrwSpjl>();
  330. if (item.COMMENTS != null && item.COMMENTS.Count > 0)
  331. {
  332. spjl.COMMENTS = item.COMMENTS.ToJson();
  333. }
  334. else
  335. {
  336. spjl.COMMENTS = null;
  337. }
  338. spjl.ID = Guid.NewGuid().ToStringN();
  339. spjl.JLID = input.id;
  340. spjl.INSTID = input.instId;
  341. list.Add(spjl);
  342. }
  343. return list;
  344. }
  345. else
  346. {
  347. RunLog.Debug("查询已办成果审批记录失败=>" + res);
  348. throw new UseArgumentException("查询已办成果审批记录失败:" + resModel.Msg);
  349. }
  350. }
  351. #endregion
  352. }
  353. }