You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

304 lines
11 KiB

1 month ago
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using System.IO;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using Report.Entity;
  9. using System.Windows.Forms;
  10. using System.Reflection;
  11. using System.Threading;
  12. using System.Net.Cache;
  13. namespace ReportLibrary
  14. {
  15. public class ReportClient
  16. {
  17. private async Task<DataSet> getBusinessDataSet(RequestReportBase req,bool isSave=false)
  18. {
  19. DataSet ds = new DataSet();
  20. /*
  21. Dictionary<string,string> dict=new Dictionary<string,string>();
  22. foreach(var item in req.Parameters)
  23. {
  24. dict.Add(item.Name,item.Value);
  25. }
  26. switch (req.ReportCode)
  27. {
  28. case "0001":
  29. case "0008":
  30. ds = await ConvertHelper.PatientGuideToDataSetAsync(req.DataJsonPath, dict, req.WebsiteUrl, req.ApiUrl, isSave);
  31. break;
  32. case "0002":
  33. case "0003":
  34. ds = await ConvertHelper.TestRequestToDataSetAsync(req.DataJsonPath, dict, req.WebsiteUrl, req.ApiUrl, isSave);
  35. break;
  36. case "0004":
  37. ds = await ConvertHelper.ExamRequestToDataSetAsync(req.DataJsonPath, dict, req.WebsiteUrl, req.ApiUrl, isSave);
  38. break;
  39. case "0005":
  40. ds = await ConvertHelper.ReportHealthToDataSetAsync(req.DataJsonPath, dict, req.WebsiteUrl, req.ApiUrl,req.ImageUrl, isSave);
  41. break;
  42. case "0006":
  43. ds = await ConvertHelper.OccupationalDiseaseToDataSetAsync(req.DataJsonPath, dict, req.WebsiteUrl, req.ApiUrl,req.ImageUrl, isSave);
  44. break;
  45. case "0007":
  46. ds = await ConvertHelper.PayBillToDataSetAsync(req.DataJsonPath, dict, req.WebsiteUrl, req.ApiUrl, isSave);
  47. break;
  48. case "0009":
  49. ds = await ConvertHelper.OccuptionDiseaseFinalToDataSetAsync(req.DataJsonPath, dict, req.WebsiteUrl, req.ApiUrl, isSave);
  50. break;
  51. case "0010":
  52. ds = await ConvertHelper.OccuptionDiseaseDetailToDataSetAsync(req.DataJsonPath, dict, req.WebsiteUrl, req.ApiUrl, isSave);
  53. break;
  54. }
  55. */
  56. return ds;
  57. }
  58. public async Task<string> ReportExport(string reqStr)
  59. {
  60. string resStr = string.Empty;
  61. string dataJson = string.Empty;
  62. ResponseReport res = new ResponseReport();
  63. try
  64. {
  65. ReportHelper report = new ReportHelper();
  66. RequestExport req = ClientConfig.DeserializeObject<RequestExport>(reqStr);
  67. if (string.IsNullOrEmpty(req.TemplatePath))
  68. {
  69. res.code = -103;
  70. res.message = "未找到对应的报表模板文件,无法导出";
  71. return await Task.Run(() =>
  72. {
  73. resStr = ClientConfig.SerializeObject(res);
  74. return resStr;
  75. });
  76. }
  77. Dictionary<string, string> dict = new Dictionary<string, string>();
  78. foreach (var item in req.Parameters)
  79. {
  80. dict.Add(item.Name, item.Value);
  81. }
  82. var list = ReportHelper.ToPicTable(dict, req.WebsiteUrl);
  83. DataTable dt=list.ToDataTable();
  84. dt.TableName = "pic";
  85. string json = FileHelper.ReadAllText(req.DataJsonPath);
  86. DataSet ds = ClientConfig.ConvertJsonToDataSet(json, req.ImageUrl,req.ApiUrl);
  87. ds.Tables.Add(dt);
  88. await report.ReportExport(req, ds);
  89. res.code = 1;
  90. res.message = "Success";
  91. }
  92. catch (BusinessException bEx)
  93. {
  94. res.code = -101;
  95. res.message = bEx.Message;
  96. }
  97. catch (Exception ex)
  98. {
  99. res.code = -100;
  100. res.message = ex.Message;
  101. }
  102. resStr = ClientConfig.SerializeObject(res);
  103. return resStr;
  104. }
  105. public async Task<string> ReportPrint(string reqStr)
  106. {
  107. ResponseReport res = new ResponseReport();
  108. string resStr = string.Empty;
  109. string dataJson = string.Empty;
  110. try
  111. {
  112. ReportHelper report = new ReportHelper();
  113. RequestPrint req = ClientConfig.DeserializeObject<RequestPrint>(reqStr);
  114. if (string.IsNullOrEmpty(req.TemplatePath))
  115. {
  116. res.code = -103;
  117. res.message = "未找到对应的报表模板文件,无法打印";
  118. return await Task.Run(() =>
  119. {
  120. resStr = ClientConfig.SerializeObject(res);
  121. return resStr;
  122. });
  123. }
  124. Dictionary<string, string> dict = new Dictionary<string, string>();
  125. foreach (var item in req.Parameters)
  126. {
  127. dict.Add(item.Name, item.Value);
  128. }
  129. var list = ReportHelper.ToPicTable(dict, req.WebsiteUrl);
  130. DataTable dt = list.ToDataTable();
  131. dt.TableName = "pic";
  132. string json = FileHelper.ReadAllText(req.DataJsonPath);
  133. DataSet ds = ClientConfig.ConvertJsonToDataSet(json, req.ImageUrl, req.ApiUrl);
  134. ds.Tables.Add(dt);
  135. string result= await report.ReportPrint(req, ds);
  136. if (result.Equals("Success"))
  137. {
  138. res.code = 1;
  139. res.message = "Success";
  140. }
  141. else {
  142. res.code = -1;
  143. res.message = result;
  144. }
  145. }
  146. catch (BusinessException bEx)
  147. {
  148. res.code = -101;
  149. res.message = bEx.Message;
  150. }
  151. catch (Exception ex)
  152. {
  153. res.code = -100;
  154. res.message = ex.Message;
  155. }
  156. resStr = ClientConfig.SerializeObject(res);
  157. return resStr;
  158. }
  159. public async Task<string> ReportPrintPre(string reqStr)
  160. {
  161. ResponseReport res = new ResponseReport();
  162. string resStr = string.Empty;
  163. string dataJson = string.Empty;
  164. try
  165. {
  166. ReportHelper report = new ReportHelper();
  167. RequestPrintPre req = ClientConfig.DeserializeObject<RequestPrintPre>(reqStr);
  168. if (string.IsNullOrEmpty(req.TemplatePath))
  169. {
  170. res.code = -103;
  171. res.message = "未找到对应的报表模板文件,无法预览";
  172. return await Task.Run(() =>
  173. {
  174. resStr = ClientConfig.SerializeObject(res);
  175. return resStr;
  176. });
  177. }
  178. Dictionary<string, string> dict = new Dictionary<string, string>();
  179. foreach (var item in req.Parameters)
  180. {
  181. dict.Add(item.Name, item.Value);
  182. }
  183. var list = ReportHelper.ToPicTable(dict, req.WebsiteUrl);
  184. DataTable dt = list.ToDataTable();
  185. dt.TableName = "pic";
  186. string json = FileHelper.ReadAllText(req.DataJsonPath);
  187. string paramJson = ClientConfig.SerializeObject(list);
  188. string DataJsonPath = ClientConfig.UpdateJson(json, paramJson);
  189. FileHelper.WriteAllText(req.DataJsonPath, DataJsonPath);
  190. DataSet ds = ClientConfig.ConvertJsonToDataSet(json, req.ImageUrl, req.ApiUrl);
  191. ds.Tables.Add(dt);
  192. string fileName= await report.ReportPrintPre(req, ds);
  193. res.code = 1;
  194. res.data = fileName;
  195. res.message = "Success";
  196. }
  197. catch (BusinessException bEx)
  198. {
  199. res.code = -101;
  200. res.message = bEx.Message;
  201. }
  202. catch (Exception ex)
  203. {
  204. res.code = -100;
  205. res.message = ex.Message;
  206. }
  207. resStr = ClientConfig.SerializeObject(res);
  208. return resStr;
  209. }
  210. public async Task<string> ReportDesign(string reqStr)
  211. {
  212. ResponseDesign res = new ResponseDesign();
  213. string resStr = string.Empty;
  214. try
  215. {
  216. RequestDesign req = ClientConfig.DeserializeObject<RequestDesign>(reqStr);
  217. if (req.DataSetJson == null)
  218. {
  219. res.code = -102;
  220. res.message = "需打印数据为空值,无法打开模板";
  221. return await Task.Run(() =>
  222. {
  223. resStr = ClientConfig.SerializeObject(res);
  224. return resStr;
  225. });
  226. }
  227. if (string.IsNullOrEmpty(req.TemplatePath))
  228. {
  229. res.code = -103;
  230. res.message = "未找到对应的报表模板文件,无法打开模板";
  231. return await Task.Run(() =>
  232. {
  233. resStr = ClientConfig.SerializeObject(res);
  234. return resStr;
  235. });
  236. }
  237. ReportHelper.ReportDesign(req);
  238. res.code = 1;
  239. res.message = "Success";
  240. }
  241. catch (BusinessException bEx)
  242. {
  243. res.code = -101;
  244. res.message = bEx.Message;
  245. }
  246. catch (Exception ex)
  247. {
  248. res.code = -100;
  249. res.message = ex.Message;
  250. }
  251. return await Task.Run(() =>
  252. {
  253. resStr= ClientConfig.SerializeObject(res);
  254. return resStr;
  255. });
  256. /*
  257. Task<String> task = Task.Factory.StartNew<string>(() =>
  258. {
  259. Request req = ClientConfig.DeserializeObject<Request>(reqStr);
  260. ResponseEle res = new ResponseEle();
  261. try
  262. {
  263. ReportHelper.ReportDesign(req);
  264. res.Code = 1;
  265. res.Message = "Success";
  266. }
  267. catch (Exception ex)
  268. {
  269. res.Code = -1;
  270. res.Message = ex.Message;
  271. }
  272. string resStr = ClientConfig.SerializeObject(res);
  273. return resStr;
  274. });
  275. String taskResult = await task;
  276. return taskResult;
  277. */
  278. }
  279. }
  280. }