IPEasyUtility.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. using System;
  2. using System.Data;
  3. using System.Dynamic;
  4. using System.Linq;
  5. using OpenQA.Selenium;
  6. namespace wispro.sp.utility
  7. {
  8. public class IPEasyUtility
  9. {
  10. public static void DownloadReport(string strId,string filename)
  11. {
  12. string strFileSavePath = ConfigHelper.GetSectionValue("IPEasySetting:DownloadFileSavePath");
  13. bool isheadless = (ConfigHelper.GetSectionValue("IPEasySetting:isHeadless") == "true");
  14. string Account = ConfigHelper.GetSectionValue("IPEasySetting:Account");
  15. string Password = ConfigHelper.GetSectionValue("IPEasySetting:Password");
  16. OpenQA.Selenium.Chrome.ChromeOptions options = new OpenQA.Selenium.Chrome.ChromeOptions();
  17. options.AddUserProfilePreference("download.default_directory", strFileSavePath);
  18. options.AddUserProfilePreference("intl.accept_languages", "nl");
  19. options.AddUserProfilePreference("disable-popup-blocking", "true");
  20. if (isheadless)
  21. {
  22. options.AddArgument("headless");
  23. }
  24. using (IWebDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver(ConfigHelper.GetSectionValue("IPEasySetting:ChormeDriverPath"), options))
  25. {
  26. driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(50);
  27. driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(500);
  28. //进入登录界面
  29. driver.Navigate().GoToUrl("http://47.106.221.167/Login.aspx");
  30. //输入用户名和密码
  31. driver.FindElement(By.Id("txtUser")).SendKeys(Account);
  32. driver.FindElement(By.Id("txtPwd")).SendKeys(Password);
  33. //点击登录按钮
  34. driver.FindElement(By.Id("btnLogin")).Click();
  35. //关闭提示遮罩层
  36. driver.FindElement(By.Id("jpwClose")).Click();
  37. //点击顶部菜单栏中的报表管理菜单
  38. driver.FindElement(By.Name("970d33d5-c728-41b8-a060-4330610706b9")).Click();
  39. //点击左侧 自定义报表 菜单
  40. driver.FindElement(By.Name("642fa96f-1e1f-46fd-aaa4-cb461ee8df5b")).Click();
  41. //切换到自定义报表Frame
  42. driver.SwitchTo().Frame(1);
  43. //调用报表导出JS
  44. ((IJavaScriptExecutor)driver).ExecuteScript($"Report.Export('{strId}');");
  45. //切换到弹出的导出报表窗口,点击导出按钮
  46. driver.SwitchTo().DefaultContent();
  47. var ihg_export = driver.FindElement(By.Name("ihg_export"));
  48. driver.SwitchTo().Frame(ihg_export);
  49. driver.FindElement(By.Id("btnSubmit")).Click();
  50. string strFilePath = System.IO.Path.Combine(strFileSavePath, filename);
  51. while (true)
  52. {
  53. System.IO.FileInfo file = new System.IO.FileInfo(strFilePath);
  54. if (!file.Exists || file.Length == 0) {
  55. System.Threading.Thread.Sleep(5000);
  56. }
  57. else
  58. {
  59. break;
  60. }
  61. }
  62. }
  63. }
  64. /// <summary>
  65. /// 根据报表名称导出报表
  66. /// </summary>
  67. /// <param name="ReportName">报告名称</param>
  68. /// <param name="isModifyDate">是否手动修改日期范围</param>
  69. public static void DownloadReport(string ReportName,bool isModifyDate)
  70. {
  71. string strFileSavePath = ConfigHelper.GetSectionValue("IPEasySetting:DownloadFileSavePath");
  72. bool isheadless = (ConfigHelper.GetSectionValue("IPEasySetting:isHeadless") == "true");
  73. string Account = ConfigHelper.GetSectionValue("IPEasySetting:Account");
  74. string Password = ConfigHelper.GetSectionValue("IPEasySetting:Password");
  75. OpenQA.Selenium.Chrome.ChromeOptions options = new OpenQA.Selenium.Chrome.ChromeOptions();
  76. options.AddUserProfilePreference("download.default_directory", strFileSavePath);
  77. options.AddUserProfilePreference("intl.accept_languages", "nl");
  78. options.AddUserProfilePreference("disable-popup-blocking", "true");
  79. if (isheadless)
  80. {
  81. options.AddArgument("headless");
  82. }
  83. using (IWebDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver(ConfigHelper.GetSectionValue("IPEasySetting:ChormeDriverPath"), options))
  84. {
  85. driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(50);
  86. driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(500);
  87. //进入登录界面
  88. driver.Navigate().GoToUrl("http://47.106.221.167/Login.aspx");
  89. //输入用户名和密码
  90. driver.FindElement(By.Id("txtUser")).SendKeys(Account);
  91. driver.FindElement(By.Id("txtPwd")).SendKeys(Password);
  92. //点击登录按钮
  93. driver.FindElement(By.Id("btnLogin")).Click();
  94. //关闭提示遮罩层
  95. driver.FindElement(By.Id("jpwClose")).Click();
  96. //点击顶部菜单栏中的报表管理菜单
  97. driver.FindElement(By.Name("970d33d5-c728-41b8-a060-4330610706b9")).Click();
  98. //点击左侧 自定义报表 菜单
  99. driver.FindElement(By.Name("642fa96f-1e1f-46fd-aaa4-cb461ee8df5b")).Click();
  100. //切换到自定义报表Frame
  101. driver.SwitchTo().Frame(1);
  102. var inputSearch = driver.FindElement(By.Id("customizedList_TxtSheetSearchKey"));
  103. inputSearch.SendKeys(ReportName);
  104. var btnSearch = driver.FindElement(By.ClassName("btn-search"));
  105. btnSearch.Click();
  106. var reportRecord = driver.FindElement(By.XPath($"//td[contains(text(),'{ReportName}')]"));
  107. reportRecord.Click();
  108. System.Threading.Thread.Sleep(1000);
  109. if (isModifyDate)
  110. {
  111. var btnEdit = driver.FindElement(By.ClassName("edit"));
  112. btnEdit.Click();
  113. System.Threading.Thread.Sleep(500);
  114. var doItemFinished = driver.FindElement(By.XPath("//span[contains(@objcvalue,'_date') and contains(@id,'ST;')]"));
  115. doItemFinished.Click();
  116. System.Threading.Thread.Sleep(500);
  117. var startDate = driver.FindElement(By.XPath("//input[contains(@id,'dt_s_')]"));
  118. startDate.Click();
  119. System.Threading.Thread.Sleep(500);
  120. startDate.SendKeys($"{DateTime.Now.AddMonths(-1).Year }-{DateTime.Now.AddMonths(-1).Month}-01");
  121. var endDate = driver.FindElement(By.XPath("//input[contains(@id,'dt_e_')]"));//.Id("dt_e_4F8FE88D-9040-45F1-9723-45699BCD4CAF"));
  122. endDate.Click();
  123. System.Threading.Thread.Sleep(500);
  124. endDate.SendKeys(new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddDays(-1).ToString("yyyy-MM-dd"));
  125. var addDate = driver.FindElement(By.XPath("//a[contains(@onclick,'ReportSub.ConditionDTSelect')]"));
  126. addDate.Click();
  127. System.Threading.Thread.Sleep(500);
  128. var btnSave = driver.FindElement(By.Id("save"));
  129. btnSave.Click();
  130. System.Threading.Thread.Sleep(3000);
  131. }
  132. var linkExport = driver.FindElement(By.XPath("//a[contains(@onclick,'-') and @class='tbexcel']"));
  133. linkExport.Click();
  134. //切换到弹出的导出报表窗口,点击导出按钮
  135. driver.SwitchTo().DefaultContent();
  136. var ihg_export = driver.FindElement(By.Name("ihg_export"));
  137. driver.SwitchTo().Frame(ihg_export);
  138. driver.FindElement(By.Id("btnSubmit")).Click();
  139. string strFilePath = System.IO.Path.Combine(strFileSavePath, $"{ReportName.Trim()}.xlsx");
  140. while (true)
  141. {
  142. System.IO.FileInfo file = new System.IO.FileInfo(strFilePath);
  143. if (!file.Exists || file.Length == 0)
  144. {
  145. System.Threading.Thread.Sleep(5000);
  146. }
  147. else
  148. {
  149. break;
  150. }
  151. }
  152. }
  153. }
  154. /// <summary>
  155. /// 获取案件处理事项记录
  156. /// </summary>
  157. /// <param name="caseNo"></param>
  158. /// <param name="doItemName"></param>
  159. /// <returns></returns>
  160. public static dynamic GetPerformanctRecord(string caseNo,string doItemName)
  161. {
  162. string strFileSavePath = ConfigHelper.GetSectionValue("IPEasySetting:DownloadFileSavePath");
  163. bool isheadless = (ConfigHelper.GetSectionValue("IPEasySetting:isHeadless") == "true");
  164. string Account = ConfigHelper.GetSectionValue("IPEasySetting:Account");
  165. string Password = ConfigHelper.GetSectionValue("IPEasySetting:Password");
  166. OpenQA.Selenium.Chrome.ChromeOptions options = new OpenQA.Selenium.Chrome.ChromeOptions();
  167. options.AddUserProfilePreference("download.default_directory", strFileSavePath);
  168. options.AddUserProfilePreference("intl.accept_languages", "nl");
  169. options.AddUserProfilePreference("disable-popup-blocking", "true");
  170. options.AddUserProfilePreference("profile", new { default_content_setting_values = new { images = 2 } });
  171. if (isheadless)
  172. {
  173. options.AddArgument("headless");
  174. }
  175. dynamic retObject = new ExpandoObject();
  176. retObject.CaseNo = caseNo;
  177. retObject.DoItem = doItemName;
  178. using (IWebDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver(ConfigHelper.GetSectionValue("IPEasySetting:ChormeDriverPath"), options))
  179. {
  180. driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
  181. driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(100);
  182. //进入登录界面
  183. driver.Navigate().GoToUrl("http://47.106.221.167/Login.aspx");
  184. //输入用户名和密码
  185. driver.FindElement(By.Id("txtUser")).SendKeys(Account);
  186. driver.FindElement(By.Id("txtPwd")).SendKeys(Password);
  187. //点击登录按钮
  188. driver.FindElement(By.Id("btnLogin")).Click();
  189. //关闭提示遮罩层
  190. driver.FindElement(By.Id("jpwClose")).Click();
  191. //点击顶部菜单栏中的案件管理菜单
  192. driver.FindElement(By.Name("71A7CC35-F597-40E1-9FEF-BE622A3A3B63")).Click();
  193. //点击左侧 查询 菜单
  194. driver.FindElement(By.Name("c3266ab3-521a-4815-8aaf-7dd0bc5a76af")).Click();
  195. //切换到自定义报表Frame
  196. driver.SwitchTo().Frame(1);
  197. var inputSearch = driver.FindElement(By.Id("case_volume"));
  198. inputSearch.SendKeys(caseNo);
  199. var btnSearch = driver.FindElement(By.Id("btn_Search"));
  200. btnSearch.Click();
  201. var caseLink = driver.FindElement(By.XPath($"//a[contains(text(),'{caseNo}')]"));
  202. caseLink.Click();
  203. System.Threading.Thread.Sleep(500);
  204. driver.SwitchTo().ParentFrame().SwitchTo().Frame(2);
  205. //driver.SwitchTo().ParentFrame().SwitchTo().Frame(driver.FindElement(By.XPath("//iframe[contains(@src,'CaseInfo.aspx']")));
  206. var DoItemLink = driver.FindElement(By.XPath($"//td[contains(text(),'{doItemName}')]"));
  207. retObject.CaseStage = DoItemLink.FindElement(By.XPath("following-sibling::td[1]")).Text; //案件阶段
  208. retObject.DoItemState = DoItemLink.FindElement(By.XPath("following-sibling::td[2]")).Text; //处理事项处理状态
  209. //var td4 = DoItemLink.FindElement(By.XPath("following-sibling::td[3]")).Text; //配案日
  210. retObject.InternalDate = DoItemLink.FindElement(By.XPath("following-sibling::td[4]")).Text; //内部期限
  211. retObject.CustomerLimitDate = DoItemLink.FindElement(By.XPath("following-sibling::td[5]")).Text; //客户期限
  212. //var td7 = DoItemLink.FindElement(By.XPath("following-sibling::td[6]")).Text; //官方期限
  213. retObject.FinishedDate = DoItemLink.FindElement(By.XPath("following-sibling::td[7]")).Text; //处理事项完成日
  214. retObject.DoPersons = DoItemLink.FindElement(By.XPath("following-sibling::td[8]")).Text; //处理人
  215. retObject.DoItemMemo = DoItemLink.FindElement(By.XPath("following-sibling::td[9]")).Text; //处理事项备注
  216. DoItemLink.Click();
  217. retObject.FinalizationDate = driver.FindElement(By.Id("p_proc_info__finish_doc_date")).GetAttribute("value"); //定稿日
  218. //retObject.FinalizationDate = driver.FindElement(By.Id("p_proc_info__cus_due_date")).GetAttribute("value"); //客户完成日[定稿日]
  219. retObject.ReturnDate = driver.FindElement(By.Id("p_proc_info__back_date")).GetAttribute("value"); //返稿日
  220. retObject.Reviewer = driver.FindElement(By.Id("p_proc_info__revise_user")).GetAttribute("value"); //核稿人
  221. retObject.DoItemCoefficient = driver.FindElement(By.Id("p_proc_info__proc_coefficient")).GetAttribute("value"); //处理事项系数
  222. driver.FindElement(By.Id("libase")).Click();
  223. retObject.CaseName = driver.FindElement(By.Id("p_case_info__case_name")).GetAttribute("value"); //案件名称
  224. retObject.CustomerName = driver.FindElement(By.Id("p_case_info__customer_id")).GetAttribute("value"); //客户名称
  225. retObject.BusinessType = driver.FindElement(By.Id("p_case_info__business_type_id")).GetAttribute("value"); //业务类型
  226. retObject.CaseState = GetSelectText(driver.FindElement(By.Id("p_case_info__case_status_id")));
  227. retObject.ApplicationType = GetSelectText(driver.FindElement(By.Id("p_case_info__apply_type_id")));
  228. retObject.CaseType = driver.FindElement(By.Id("p_case_info__case_type_id")).GetAttribute("value"); //案件类型
  229. retObject.EntrustingDate = driver.FindElement(By.Id("p_case_info__charge_date")).GetAttribute("value"); //委案日期
  230. retObject.CaseMemo = driver.FindElement(By.Id("p_case_info__remark")).GetAttribute("value"); //案件备注
  231. driver.FindElement(By.XPath($"//span[contains(text(),'扩展信息')]")).Click();
  232. //select[@id='p_case_info__case_coefficient_id']
  233. retObject.CaseCoefficient = GetSelectText(driver.FindElement(By.Id("p_case_info__case_coefficient_id")));
  234. }
  235. return retObject;
  236. }
  237. private static string GetSelectText(IWebElement element)
  238. {
  239. var strValue = element.GetAttribute("value");
  240. if (string.IsNullOrEmpty(strValue))
  241. {
  242. return null;
  243. }
  244. var ops = element.FindElements(By.TagName("option"));
  245. foreach (var op in ops)
  246. {
  247. if (op.GetAttribute("value") == strValue)
  248. {
  249. return op.Text;
  250. }
  251. }
  252. return null;
  253. }
  254. }
  255. }