Form1.cs 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137
  1. using DynamicExpresso;
  2. using Microsoft.International.Converters.PinYinConverter;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Configuration;
  7. using System.Data;
  8. using System.Diagnostics;
  9. using System.Drawing;
  10. using System.Drawing.Imaging;
  11. using System.Dynamic;
  12. using System.IO;
  13. using System.Linq;
  14. using System.Net.Http;
  15. using System.Net.Http.Json;
  16. using System.Text;
  17. using System.Text.Json;
  18. using System.Threading.Tasks;
  19. using System.Windows.Forms;
  20. using wispro.sp.entity;
  21. using wispro.sp.entity.workflowDefine;
  22. using wispro.sp.share;
  23. using wispro.sp.share.Utility;
  24. using wispro.sp.share.webViewObject;
  25. using wispro.sp.utility;
  26. namespace wispro.sp.winClient
  27. {
  28. public partial class Form1 : Form
  29. {
  30. public Form1()
  31. {
  32. InitializeComponent();
  33. }
  34. private void button1_Click(object sender, EventArgs e)
  35. {
  36. DateTime startTime = DateTime.Now;
  37. frmMerageExcel frm = new frmMerageExcel();
  38. if (frm.ShowDialog() == DialogResult.OK)
  39. {
  40. MessageBox.Show($"合并完成,合并后文件保存在:\r\n{frm.SaveFilePath}\r\n用时:{DateTime.Now - startTime }");
  41. }
  42. }
  43. private void button2_Click(object sender, EventArgs e)
  44. {
  45. OpenFileDialog ofd = new OpenFileDialog()
  46. {
  47. Multiselect = false,
  48. Filter = "*.xls|*.xlsx"
  49. };
  50. string strDinashuRegularFile = ConfigurationSettings.AppSettings["DinashuRegularFile"];
  51. if (ofd.ShowDialog() == DialogResult.OK)
  52. {
  53. new ExcelHelper().FillDianShu(ofd.FileName, strDinashuRegularFile);
  54. }
  55. MessageBox.Show("完成点数输入!");
  56. }
  57. private string[] InValidDoItem = new string[]
  58. {
  59. "案件异常-催缴年费",
  60. "案件异常-视为放弃取得专利权",
  61. "办理登记手续",
  62. "办理登记手续-确认客户是否委托",
  63. "代理所变更",
  64. "绘图",
  65. "技术确认",
  66. "缴年费",
  67. "请求保密审查",
  68. "请求费减",
  69. "请求实审",
  70. "取得申请号",
  71. "取得证书",
  72. "取得专利权评价报告",
  73. "确认官方审查状况",
  74. "询问放弃或复审",
  75. "知识点总结",
  76. "专利权人发明人申请人信息变更",
  77. "专利挖掘与布局",
  78. "我方文号前缀带J",
  79. "开卷",
  80. "请求提前公开",
  81. "取得国际检索报告",
  82. "委外检索",
  83. "中止程序",
  84. "终止",
  85. "案件异常-视为撤回",
  86. "进入国家阶段提醒",
  87. "请求恢复权利",
  88. "请求优先权",
  89. "取得【无效宣告请求审查决定】",
  90. "撤回",
  91. "请求退款",
  92. "确认是否委托申请与类型",
  93. "专利交易",
  94. "专利权评价报告",
  95. "专利权人发明人申请人信息变更+代理所变更"
  96. };
  97. private async Task InitRules(bool isSave)
  98. {
  99. List<BasePointRule> rules = new List<BasePointRule>();
  100. DataTable dt = wispro.sp.utility.NPOIExcel.ExcelToDataTable("ExcelFiles\\20211109-绩效点数规则-lcy-v1.xlsx", true);
  101. PerformanceItem item = new PerformanceItem() { CaseNo = "PAEPO2016277", DoItem= "提交检索主题声明", };
  102. foreach(DataRow row in dt.Rows)
  103. {
  104. BasePointRule rule = new BasePointRule()
  105. {
  106. Rule = row["规则"].ToString(),
  107. PointExpress = row["点数计算"].ToString(),
  108. Priority = int.Parse(row["优先级修订"].ToString()),
  109. Type = row["类型"].ToString()
  110. };
  111. try
  112. {
  113. var interpreter = new Interpreter();
  114. //item.ApplicationType
  115. Func<PerformanceItem, bool> func = interpreter.ParseAsDelegate<Func<PerformanceItem, bool>>(rule.Rule, "p");
  116. bool result = func.Invoke(item);
  117. if (result)
  118. {
  119. item.BasePoint = (double?)interpreter.Eval(rule.PointExpress);
  120. item.Type = rule.Type;
  121. System.Diagnostics.Debug.WriteLine("");
  122. }
  123. rules.Add(rule);
  124. }
  125. catch(Exception ex)
  126. {
  127. System.Diagnostics.Debug.WriteLine(rule.Rule + "\r\n" + ex.ToString());
  128. }
  129. }
  130. if (isSave)
  131. {
  132. foreach (BasePointRule rule in rules)
  133. {
  134. double d;
  135. if(double.TryParse(rule.PointExpress,out d))
  136. {
  137. rule.PointExpress = d.ToString("0.00");
  138. }
  139. await SaveBasePointRule(rule);
  140. }
  141. }
  142. }
  143. public async Task TestQueryFilter()
  144. {
  145. //QueryFilter filter = new QueryFilter();
  146. //filter.ConditionTree = new ExpressTree();
  147. //string ValueType = typeof(PerformanceItem).GetProperty("CaseNo").PropertyType.ToString();
  148. //FieldCondition condition1 = new FieldCondition() { FieldName = "CaseNo", Operator = OperatorEnum.Contains, Value = "PACN", ValueType = ValueType };
  149. //FieldCondition condition2 = new FieldCondition() { FieldName = "CaseNo", Operator = OperatorEnum.Contains, Value = "PAUS", ValueType = ValueType };
  150. //filter.ConditionTree.AddCondition(LogicEnum.And,condition1);
  151. //filter.ConditionTree.AddCondition(LogicEnum.Or, condition2);
  152. //System.Diagnostics.Debug.WriteLine(filter.ConditionTree.ToExpressString("s")); ;
  153. }
  154. enum enumTest
  155. {
  156. [Description("男")]
  157. man,
  158. [Description("女")]
  159. woman
  160. }
  161. private async void button3_Click(object sender, EventArgs e)
  162. {
  163. await UserField2String();
  164. //share.Utility.UserConditionHelper.GetPropertyDescription<Staff>(typeof(PerformanceItem).AssemblyQualifiedName);
  165. #region Demo流程数据
  166. //HttpClient http = new HttpClient();
  167. //int wfId = 6;
  168. //var workflow = await GetWorkflow(wfId, http);
  169. //var Steps = await GetSteps(wfId, http);
  170. //var Actions = await GetActions(wfId, http);
  171. //var Transfers = await GetTransfers(wfId,http);
  172. #endregion
  173. //FlowChartUtility flowChart = new FlowChartUtility();
  174. //flowChart.workflow = workflow;
  175. //flowChart.Steps = Steps;
  176. //flowChart.Transfers = Transfers;
  177. //string strSvg = flowChart.GetSvgString();
  178. ////var file = System.IO.File.CreateText("c:\\temp\\tem.svg");
  179. ////file.WriteLine(strSvg);
  180. ////file.Close();
  181. //System.Xml.XmlDocument xmdoc = new System.Xml.XmlDocument();
  182. //xmdoc.LoadXml(strSvg);
  183. //Svg.SvgDocument svg = Svg.SvgDocument.Open(xmdoc);
  184. //Bitmap bitmap = svg.Draw();
  185. //bitmap.Save("c:\\temp\\test.jpg",ImageFormat.Jpeg);
  186. //MemoryStream mStream = new MemoryStream();
  187. //bitmap.Save(mStream, ImageFormat.Jpeg);
  188. //byte[] bitMaps = new byte[mStream.Length];
  189. //mStream.Read(bitMaps, 0, (int)mStream.Length);
  190. //var test =wispro.sp.utility.EmunHelper.getEnumDescriptionDic<wispro.sp.entity.workflowDefine.LogicSymbols>();
  191. //Console.WriteLine("");
  192. //dynamic dynObj = new ExpandoObject();
  193. //dynObj.Name = "名称";
  194. //dynObj.Text = "aaabc";
  195. //List<dynamic> list = new List<dynamic>();
  196. //for(int i = 0; i < 3; i++)
  197. //{
  198. // dynamic d = new ExpandoObject();
  199. // d.Id = i + 1;
  200. // d.Filed1 = $"Field{i}";
  201. // d.Date = DateTime.Now.AddDays(i);
  202. // list.Add(d);
  203. //}
  204. //dynObj.List = list;
  205. //var temTxt = System.Text.Json.JsonSerializer.Serialize(dynObj);
  206. //var dynamic = System.Text.Json.JsonSerializer.Deserialize<ExpandoObject>(temTxt);
  207. //MessageBox.Show(((IDictionary<string, object>)dynamic)["Name"].ToString());
  208. //wispro.sp.utility.MailUtil.SendEmail("测试邮件标题","测试邮件内容","罗才洋","luocaiyang@139.com");
  209. //CreateAppealModel model = new CreateAppealModel();
  210. //HttpClient http = new HttpClient();
  211. //PerformanceItem item = await http.GetFromJsonAsync<wispro.sp.entity.PerformanceItem>($"{strAPIBaseUri}/api/PerformanceItem/Get?Id=7341");
  212. //List<AppealType> appealTypes = await http.GetFromJsonAsync<List<AppealType>>($"{strAPIBaseUri}/api/Appeal/GetAppealTypes");
  213. //var appealType = appealTypes.Where<AppealType>(a => a.Id == 1).FirstOrDefault();
  214. //await model.Init(item, appealType);
  215. ////await TestQueryFilter();
  216. //List<PerformanceItem> retList = new List<PerformanceItem>();
  217. //var test= retList.Where<PerformanceItem>(p => p.isDanger());
  218. //await InitRules(true);
  219. ////return;
  220. //await ImportUsers();
  221. //await InputPerformanceItem("c:\\temp\\21.01-21.11 工程师绩效报表-总表.xlsx", true, false, 0);
  222. ////CalMonth cal = new CalMonth()
  223. ////{
  224. //// Year = 2021,
  225. //// Month = 9,
  226. //// Status = 0
  227. ////};
  228. ////await InputPerformanceItem(@"C:\Users\luowen\Downloads\每月绩效统计--发客户超过一个月未完成案件.xlsx", true,false,1, cal);
  229. ////await InputPerformanceItem(@"C:\Users\luowen\Downloads\每月绩效统计--上个月递交完成案件.xlsx", true, false, 1, cal);
  230. ////await InputPerformanceItem(@"C:\Users\luowen\Downloads\每月绩效统计--中国一次OA授权表.xlsx", true, false, 1, cal,true);
  231. //MessageBox.Show("导入完成!");
  232. }
  233. private PerformanceItem Row2Item_1(DataRow row, List<Staff> Staffs, CalMonth calMonth)
  234. {
  235. PerformanceItem item = new PerformanceItem();
  236. item.ApplicationType = row["申请类型"].ToString().Trim();
  237. if(item.ApplicationType != "发明")
  238. {
  239. return null;
  240. }
  241. item.CaseNo = row["我方文号"].ToString().Trim();
  242. if (calMonth != null)
  243. {
  244. item.CalMonth = calMonth;
  245. }
  246. else
  247. {
  248. if (row.Table.Columns.Contains("绩效核算月份"))
  249. {
  250. string strjxyf = row["绩效核算月份"].ToString().Trim();
  251. string[] temYFs = strjxyf.Split(new char[] { '.' });
  252. item.CalMonth = new CalMonth();
  253. item.CalMonth.Year = int.Parse(temYFs[0]);
  254. item.CalMonth.Month = int.Parse(temYFs[1]);
  255. item.CalMonth.Status = 4;
  256. }
  257. else
  258. {
  259. item.CalMonth = new CalMonth();
  260. item.Status = 0;
  261. item.CalMonth.Year = DateTime.Now.AddMonths(-1).Year;
  262. item.CalMonth.Month = DateTime.Now.AddMonths(-1).Month;
  263. }
  264. }
  265. item.ApplicationType = row["申请类型"].ToString().Trim();
  266. item.BusinessType = "普通新申请"; // row["业务类型"].ToString().Trim();
  267. item.AgentFeedbackMemo = "发明一次OA授权"; //row["备注(填表注意事项)"].ToString().Trim();
  268. item.DoItem = "发明一次OA授权"; //row["处理事项"].ToString().Trim();
  269. string strHandler = "";
  270. if (row.Table.Columns.Contains("处理人"))
  271. {
  272. strHandler = row["处理人"].ToString().Trim();
  273. }
  274. else
  275. {
  276. if (row.Table.Columns.Contains("案件处理人"))
  277. {
  278. strHandler = row["案件处理人"].ToString().Trim();
  279. }
  280. }
  281. string[] temHandlers = strHandler.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
  282. item.ItemStaffs = new List<ItemStaff>();
  283. foreach (string name in temHandlers)
  284. {
  285. ItemStaff itemStaff = new ItemStaff();
  286. int? iTem = GetStaff(name, Staffs);
  287. if ((iTem != null))
  288. {
  289. //itemStaff.Item = item;
  290. itemStaff.DoPersonId = iTem.Value;
  291. item.ItemStaffs.Add(itemStaff);
  292. }
  293. else
  294. {
  295. itemStaff.DoPerson = new Staff()
  296. {
  297. Name = name,
  298. Account = name,
  299. Password = "12345678",
  300. IsCalPerformsnce = false,
  301. Status = "正式员工",
  302. StaffGradeId = 4
  303. };
  304. item.ItemStaffs.Add(itemStaff);
  305. }
  306. }
  307. if (item.ItemStaffs.Count == 0)
  308. {
  309. System.Diagnostics.Debug.WriteLine($"没有处理人: {item.CaseNo}\t{item.DoItem}");
  310. }
  311. if (row.Table.Columns.Contains("核稿人"))
  312. {
  313. item.ReviewerId = GetStaff(row["核稿人"].ToString().Trim(), Staffs);
  314. }
  315. else
  316. {
  317. if (row.Table.Columns.Contains("案件核稿人"))
  318. {
  319. item.ReviewerId = GetStaff(row["案件核稿人"].ToString().Trim(), Staffs);
  320. }
  321. }
  322. item.Customer = new Customer() { Name = row["客户名称"].ToString().Trim() };
  323. item.ApplicationName = row["申请人"].ToString().Trim();
  324. item.CaseName = row["案件名称"].ToString().Trim();
  325. //案件备注
  326. item.CaseMemo = $"发文日期:{row["发文日期"].ToString().Trim()}\r\n客户文号:{row["客户文号"].ToString().Trim()}\r\n上传日期:{row["上传日期"].ToString().Trim()}\r\n文件描述:{row["文件描述"].ToString().Trim()}";
  327. return item;
  328. }
  329. private PerformanceItem Row2Item(DataRow row, List<Staff> Staffs,CalMonth calMonth)
  330. {
  331. PerformanceItem item = new PerformanceItem();
  332. item.CaseNo = row["我方文号"].ToString().Trim();
  333. if (calMonth != null)
  334. {
  335. item.CalMonth = calMonth;
  336. }
  337. else
  338. {
  339. if (row.Table.Columns.Contains("绩效核算月份"))
  340. {
  341. string strjxyf = row["绩效核算月份"].ToString().Trim();
  342. string[] temYFs = strjxyf.Split(new char[] { '.' });
  343. item.CalMonth = new CalMonth();
  344. item.CalMonth.Year = int.Parse(temYFs[0]);
  345. if (temYFs[1] == "1")
  346. {
  347. temYFs[1] = "10";
  348. }
  349. item.CalMonth.Month = int.Parse(temYFs[1]);
  350. item.CalMonth.Status = 4;
  351. }
  352. else
  353. {
  354. item.CalMonth = new CalMonth();
  355. item.Status = 0;
  356. item.CalMonth.Year = DateTime.Now.AddMonths(-1).Year;
  357. item.CalMonth.Month = DateTime.Now.AddMonths(-1).Month;
  358. }
  359. }
  360. item.ApplicationType = row["申请类型"].ToString().Trim();
  361. item.BusinessType = row["业务类型"].ToString().Trim();
  362. if (row.Table.Columns.Contains("备注(填表注意事项)"))
  363. item.AgentFeedbackMemo = row["备注(填表注意事项)"].ToString().Trim();
  364. item.DoItem = row["处理事项"].ToString().Trim();
  365. item.CaseStage = row["案件阶段"].ToString().Trim();
  366. item.CaseCoefficient = row["案件系数"].ToString().Trim();
  367. item.DoItemCoefficient = row["处理事项系数"].ToString().Trim();
  368. item.PreOastaffId = GetStaff(row["前一次OA处理人"].ToString().Trim(), Staffs);
  369. string strHandler = "";
  370. if (row.Table.Columns.Contains("处理人"))
  371. {
  372. strHandler = row["处理人"].ToString().Trim();
  373. }
  374. else
  375. {
  376. if (row.Table.Columns.Contains("案件处理人"))
  377. {
  378. strHandler = row["案件处理人"].ToString().Trim();
  379. }
  380. }
  381. string[] temHandlers = strHandler.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
  382. item.ItemStaffs = new List<ItemStaff>();
  383. foreach (string name in temHandlers)
  384. {
  385. ItemStaff itemStaff = new ItemStaff();
  386. string temName = name.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries)[0];
  387. int? iTem = GetStaff(temName, Staffs);
  388. if ((iTem != null))
  389. {
  390. //itemStaff.Item = item;
  391. itemStaff.DoPersonId = iTem.Value;
  392. item.ItemStaffs.Add(itemStaff);
  393. }
  394. else
  395. {
  396. itemStaff.DoPerson = new Staff()
  397. {
  398. Name = temName,
  399. Account = temName,
  400. Password = "12345678",
  401. IsCalPerformsnce = false,
  402. Status = "已离职",
  403. StaffGradeId = 4
  404. };
  405. item.ItemStaffs.Add(itemStaff);
  406. }
  407. }
  408. if (item.ItemStaffs.Count == 0)
  409. {
  410. System.Diagnostics.Debug.WriteLine($"没有处理人: {item.CaseNo}\t{item.DoItem}");
  411. }
  412. if (row.Table.Columns.Contains("核稿人"))
  413. {
  414. if (!string.IsNullOrEmpty(row["核稿人"].ToString().Trim()))
  415. {
  416. string temName = row["核稿人"].ToString().Trim().Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries)[0];
  417. item.ReviewerId = GetStaff(temName.Trim(), Staffs);
  418. }
  419. }
  420. else
  421. {
  422. if (row.Table.Columns.Contains("案件核稿人"))
  423. {
  424. if (!string.IsNullOrEmpty(row["案件核稿人"].ToString().Trim()))
  425. {
  426. string temName = row["案件核稿人"].ToString().Trim().Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries)[0];
  427. item.ReviewerId = GetStaff(temName.Trim(), Staffs);
  428. }
  429. }
  430. }
  431. if (!string.IsNullOrEmpty(row["点数"].ToString().Trim())) {
  432. item.BasePoint = double.Parse(row["点数"].ToString().Trim());
  433. }
  434. item.Customer = new Customer() { Name = row["客户名称"].ToString().Trim() };
  435. item.ApplicationName = row["申请人"].ToString().Trim();
  436. DateTime temDate = new DateTime();
  437. if (DateTime.TryParse(row["处理事项完成日"].ToString().Trim(), out temDate))
  438. {
  439. item.FinishedDate = temDate;
  440. }
  441. //定稿日
  442. if (DateTime.TryParse(row["定稿日"].ToString().Trim(), out temDate))
  443. {
  444. item.FinalizationDate = temDate;
  445. }
  446. //返稿日
  447. if (DateTime.TryParse(row["返稿日"].ToString().Trim(), out temDate))
  448. {
  449. item.ReturnDate = temDate;
  450. }
  451. //案件类型
  452. item.CaseType = row["案件类型"].ToString().Trim();
  453. //案件状态
  454. item.CaseState = row["案件状态"].ToString().Trim();
  455. //处理事项备注
  456. item.DoItemMemo = row["处理事项备注"].ToString().Trim();
  457. //处理状态
  458. item.DoItemState = row["处理状态"].ToString().Trim();
  459. //案件名称
  460. item.CaseName = row["案件名称"].ToString().Trim();
  461. //委案日期
  462. if (DateTime.TryParse(row["委案日期"].ToString().Trim(), out temDate))
  463. {
  464. item.EntrustingDate = temDate;
  465. }
  466. //客户期限
  467. if (DateTime.TryParse(row["客户期限"].ToString().Trim(), out temDate))
  468. {
  469. item.CustomerLimitDate = temDate;
  470. }
  471. //内部期限
  472. if (DateTime.TryParse(row["内部期限"].ToString().Trim(), out temDate))
  473. {
  474. item.InternalDate = temDate;
  475. }
  476. //初稿日
  477. if (DateTime.TryParse(row["初稿日"].ToString().Trim(), out temDate))
  478. {
  479. item.FirstDraftDate = temDate;
  480. }
  481. //备注(发文严重超期是否属客观原因,若为否,请填写原因)
  482. if (row.Table.Columns.Contains("备注(发文严重超期是否属客观原因,若为否,请填写原因)"))
  483. {
  484. item.OverDueMemo = row["备注(发文严重超期是否属客观原因,若为否,请填写原因)"].ToString().Trim();
  485. }
  486. //案件备注
  487. item.CaseMemo = row["案件备注"].ToString().Trim();
  488. return item;
  489. }
  490. private async Task InputPerformanceItem(string strExcelFile,bool isColumnName,bool ignorHideRows=false,int ColumnNameRow=0,CalMonth calMonth=null,bool isFirstOAFile=false)
  491. {
  492. DataTable dt = NPOIExcel.ExcelToDataTable(strExcelFile, isColumnName,ignorHideRows,ColumnNameRow);
  493. #region 删除重复行
  494. DataTable temdt = new DataTable();
  495. foreach (DataColumn col in dt.Columns)
  496. {
  497. DataColumn temCol = new DataColumn();
  498. temCol.ColumnName = col.ColumnName;
  499. temCol.DataType = col.DataType;
  500. temCol.Caption = col.Caption;
  501. temdt.Columns.Add(temCol);
  502. }
  503. new ExcelHelper().MerageDataTable(temdt, dt);
  504. #endregion
  505. List<Staff> Staffs =await GetStaffsAsync();
  506. foreach(DataRow row in temdt.Rows)
  507. {
  508. PerformanceItem item = null;
  509. if (isFirstOAFile)
  510. {
  511. item = Row2Item_1(row, Staffs, calMonth);
  512. }
  513. else
  514. {
  515. item = Row2Item(row, Staffs, calMonth);
  516. }
  517. if (item != null )
  518. {
  519. System.Diagnostics.Debug.WriteLine($"{DateTime.Now}\t{item.CaseNo}\t{item.CaseName}");
  520. if (!InValidDoItem.Contains(item.DoItem))
  521. {
  522. await SavePerformanceItem(item);
  523. }
  524. }
  525. }
  526. }
  527. private async Task UserField2String()
  528. {
  529. if (Token == null)
  530. {
  531. await Login();
  532. }
  533. //List<Staff> Reviewers = await getReviewers(14232, 1);
  534. //Reviewers = await getReviewers(14232, 5);
  535. List<Staff> Staffs = await GetStaffsAsync();
  536. List<UserField> lstUsers = new List<UserField>();
  537. lstUsers.Add(new UserField()
  538. {
  539. UserConditionType = UserConditionType.Staff,
  540. UserType = UserType.Staff,
  541. UserValue = GetStaff("柳芳", Staffs).ToString()
  542. });
  543. lstUsers.Add(new UserField()
  544. {
  545. UserConditionType = UserConditionType.Staff,
  546. UserType = UserType.Staff,
  547. UserValue = GetStaff("杨超", Staffs).ToString()
  548. });
  549. lstUsers.Add(new UserField()
  550. {
  551. UserConditionType = UserConditionType.Staff,
  552. UserType = UserType.Staff,
  553. UserValue = GetStaff("何倚雯", Staffs).ToString()
  554. });
  555. lstUsers.Add(new UserField()
  556. {
  557. UserConditionType = UserConditionType.Staff,
  558. UserType = UserType.Staff,
  559. UserValue = GetStaff("李姣", Staffs).ToString()
  560. });
  561. lstUsers.Add(new UserField()
  562. {
  563. UserConditionType = UserConditionType.Staff,
  564. UserType = UserType.Staff,
  565. UserValue = GetStaff("张庆玲", Staffs).ToString()
  566. });
  567. lstUsers.Add(new UserField()
  568. {
  569. UserConditionType = UserConditionType.Staff,
  570. UserType = UserType.Staff,
  571. UserValue = GetStaff("李申", Staffs).ToString()
  572. });
  573. lstUsers.Add(new UserField()
  574. {
  575. UserConditionType = UserConditionType.Staff,
  576. UserType = UserType.Staff,
  577. UserValue = GetStaff("李莉", Staffs).ToString()
  578. });
  579. lstUsers.Add(new UserField()
  580. {
  581. UserConditionType = UserConditionType.Staff,
  582. UserType = UserType.Staff,
  583. UserValue = GetStaff("刘桂兰", Staffs).ToString()
  584. });
  585. lstUsers.Add(new UserField()
  586. {
  587. UserConditionType = UserConditionType.Staff,
  588. UserType = UserType.Staff,
  589. UserValue = GetStaff("唐双", Staffs).ToString()
  590. });
  591. lstUsers.Add(new UserField()
  592. {
  593. UserConditionType = UserConditionType.Staff,
  594. UserType = UserType.Staff,
  595. UserValue = GetStaff("瞿璨", Staffs).ToString()
  596. });
  597. lstUsers.Add(new UserField()
  598. {
  599. UserConditionType = UserConditionType.Staff,
  600. UserType = UserType.Staff,
  601. UserValue = GetStaff("张鹏", Staffs).ToString()
  602. });
  603. lstUsers.Add(new UserField()
  604. {
  605. UserConditionType = UserConditionType.Staff,
  606. UserType = UserType.Staff,
  607. UserValue = GetStaff("钟锦光", Staffs).ToString()
  608. });
  609. lstUsers.Add(new UserField()
  610. {
  611. UserConditionType = UserConditionType.Staff,
  612. UserType = UserType.Staff,
  613. UserValue = GetStaff("李建民", Staffs).ToString()
  614. });
  615. JsonSerializerOptions options = new() { IgnoreNullValues = true };
  616. var strJson = System.Text.Json.JsonSerializer.Serialize(lstUsers, lstUsers.GetType(), options);
  617. lstUsers.Add(new UserField()
  618. {
  619. UserConditionType = UserConditionType.Staff,
  620. UserType = UserType.Staff,
  621. UserValue = GetStaff("夏敏", Staffs).ToString()
  622. });
  623. strJson = System.Text.Json.JsonSerializer.Serialize(lstUsers, lstUsers.GetType(), options);
  624. lstUsers.Add(new UserField()
  625. {
  626. UserConditionType = UserConditionType.Staff,
  627. UserType = UserType.Staff,
  628. UserValue = GetStaff("钟子敏", Staffs).ToString()
  629. });
  630. strJson = System.Text.Json.JsonSerializer.Serialize(lstUsers, lstUsers.GetType(), options);
  631. System.Diagnostics.Debug.WriteLine(strJson);
  632. lstUsers = new List<UserField>();
  633. lstUsers.Add(new UserField()
  634. {
  635. UserConditionType = UserConditionType.Department,
  636. Department = "1"
  637. });
  638. lstUsers.Add(new UserField()
  639. {
  640. UserConditionType = UserConditionType.Staff,
  641. UserType = UserType.Staff,
  642. UserValue = GetStaff("邢丽霞", Staffs).ToString()
  643. });
  644. strJson = System.Text.Json.JsonSerializer.Serialize(lstUsers, lstUsers.GetType(), options);
  645. }
  646. private int? GetStaff(string v, List<Staff> staffs)
  647. {
  648. if (!string.IsNullOrEmpty(v))
  649. {
  650. string[] temNames = v.Trim().Split(new char[] { '-' },StringSplitOptions.RemoveEmptyEntries);
  651. foreach (Staff sf in staffs)
  652. {
  653. if(sf.Name == temNames[0])
  654. {
  655. return sf.Id;
  656. }
  657. }
  658. }
  659. return null;
  660. }
  661. private async Task ImportUsers()
  662. {
  663. OpenFileDialog ofd = new OpenFileDialog();
  664. if (ofd.ShowDialog() == DialogResult.OK)
  665. {
  666. string fileName = ofd.FileName;
  667. DataTable dt = NPOIExcel.ExcelToDataTable(fileName, true, false, 1);
  668. if(Token == null)
  669. {
  670. await Login();
  671. }
  672. List<StaffGrade> staffGrades = await GetStaffGrades();
  673. foreach (DataRow row in dt.Rows)
  674. {
  675. Staff staff = new Staff();
  676. staff.Account = row["用户名"].ToString().Trim();
  677. staff.Name = row["姓名"].ToString().Trim();
  678. staff.Tel = row["电话号码"].ToString().Trim();
  679. staff.Mobile = row["手机号码"].ToString().Trim();
  680. staff.Sex = row["性别"].ToString().Trim();
  681. staff.Mail = row["邮箱"].ToString().Trim();
  682. string strGrade = row["工程师等级"].ToString().Trim(); // + "级";
  683. foreach (StaffGrade sg in staffGrades)
  684. {
  685. if (strGrade.Trim() == sg.Grade.Trim())
  686. {
  687. staff.StaffGradeId = sg.Id;
  688. break;
  689. }
  690. }
  691. staff.IsOnJob = (row["是否在职"].ToString().Trim() == "是");
  692. staff.Status = row["岗位状态"].ToString().Trim();
  693. staff.Department = row["部门"].ToString();
  694. staff.WorkPlace = row["工作地"].ToString();
  695. DateTime temDate;
  696. if (DateTime.TryParse(row["入职时间"].ToString(), out temDate))
  697. {
  698. staff.EntyDate = temDate;
  699. }
  700. var temStaff = await GetStaff(staff.Name);
  701. bool isSaved = false;
  702. if (temStaff == null)
  703. {
  704. isSaved = true;
  705. staff.Password = MD5Utility.GetMD5("12345678");
  706. }
  707. else
  708. {
  709. staff.Id = temStaff.Id;
  710. staff.Password = temStaff.Password;
  711. isSaved =
  712. (staff.Name != temStaff.Name) ||
  713. (staff.Account != temStaff.Account) ||
  714. (staff.Department != temStaff.Department) ||
  715. (staff.EntyDate != temStaff.EntyDate) ||
  716. (staff.IsOnJob != temStaff.IsOnJob) ||
  717. (staff.Mail != temStaff.Mail) ||
  718. (staff.Mobile != temStaff.Mobile) ||
  719. (staff.Sex != temStaff.Sex) ||
  720. (staff.Status != temStaff.Status) ||
  721. (staff.Tel != temStaff.Tel) ||
  722. (staff.WorkPlace != temStaff.WorkPlace) ||
  723. (staff.StaffGradeId != temStaff.StaffGradeId);
  724. }
  725. if (isSaved)
  726. {
  727. //staff.IsCalPerformsnce = (row["是否核算绩效"].ToString() == "是");
  728. //staff.Memo = row["备注"].ToString().Trim();
  729. //staff.StaffGradeId = row["姓名"].ToString();
  730. await SaveStaff(staff);
  731. }
  732. }
  733. }
  734. }
  735. private string getPinYin(string str)
  736. {
  737. string retStr = "";
  738. for(int i = 0; i < str.Length; i++)
  739. {
  740. ChineseChar cc = new ChineseChar(str[i]);
  741. retStr = retStr + cc.Pinyins[0].ToLower().Replace("1","")
  742. .Replace("2", "").Replace("3", "").Replace("4", "");
  743. }
  744. return retStr;
  745. }
  746. string strAPIBaseUri = "https://47.106.221.167"; //"http://localhost:39476";//
  747. userToken Token;
  748. public async Task Login()
  749. {
  750. share.webViewObject.loginDto dto = new share.webViewObject.loginDto();
  751. dto.Name = "caiyangl";
  752. dto.Password = "Lqftiu807005";
  753. var response =await CreateHttp().PostAsJsonAsync<loginDto>($"{strAPIBaseUri}/api/account/Login", dto);
  754. if (response.IsSuccessStatusCode)
  755. {
  756. Token = await response.Content.ReadFromJsonAsync<userToken>();
  757. }
  758. }
  759. public async Task<entity.workflowDefine.Workflow> GetWorkflow(int Id, HttpClient _httpClient)
  760. {
  761. var ret = await _httpClient.GetFromJsonAsync<entity.workflowDefine.Workflow>($"{strAPIBaseUri}/api/WorkflowEngine/GetWorkflow?workflowId={Id}");
  762. return ret;
  763. }
  764. public async Task<List<entity.workflowDefine.Step>> GetSteps(int Id, HttpClient _httpClient)
  765. {
  766. var ret = await _httpClient.GetFromJsonAsync<List<entity.workflowDefine.Step>>($"{strAPIBaseUri}/api/WorkflowEngine/GetSteps?workflowId={Id}");
  767. return ret;
  768. }
  769. public async Task<List<entity.workflowDefine.Action>> GetActions(int workflowId, HttpClient _httpClient)
  770. {
  771. var ret = await _httpClient.GetFromJsonAsync<List<entity.workflowDefine.Action>>($"{strAPIBaseUri}/api/WorkflowEngine/GetActions?workflowId={workflowId}");
  772. return ret;
  773. }
  774. public async Task<List<entity.workflowDefine.TrasferCondition>> GetTransfers(int workflowId, HttpClient _httpClient)
  775. {
  776. var ret = await _httpClient.GetFromJsonAsync<List<entity.workflowDefine.TrasferCondition>>($"{strAPIBaseUri}/api/WorkflowEngine/GetTrasfers?workflowId={workflowId}");
  777. return ret;
  778. }
  779. private async Task SaveStaff(Staff obj)
  780. {
  781. HttpClient http = CreateHttp();
  782. http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", Token.Token);
  783. var data = await http.PostAsJsonAsync<wispro.sp.entity.Staff>($"{strAPIBaseUri}/api/Staff/Save", obj);
  784. if (data.IsSuccessStatusCode)
  785. {
  786. ApiSaveResponse result = await data.Content.ReadFromJsonAsync<ApiSaveResponse>();
  787. //await Task.Delay(1000);
  788. if (result.Success)
  789. {
  790. }
  791. else
  792. {
  793. }
  794. }
  795. else
  796. {
  797. }
  798. }
  799. private async Task<Staff> GetStaff(string strName)
  800. {
  801. HttpClient http = CreateHttp();
  802. http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", Token.Token);
  803. try
  804. {
  805. var data = await http.GetFromJsonAsync<wispro.sp.entity.Staff>($"{strAPIBaseUri}/api/Staff/GetByName?Name={strName}");
  806. return data;
  807. }
  808. catch
  809. {
  810. return null;
  811. }
  812. }
  813. private async Task SaveBasePointRule(BasePointRule obj)
  814. {
  815. HttpClient http = CreateHttp();
  816. http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", Token.Token);
  817. var data = await http.PostAsJsonAsync<BasePointRule>($"{strAPIBaseUri}/api/BasePointRule/New", obj);
  818. if (data.IsSuccessStatusCode)
  819. {
  820. ApiSaveResponse result = await data.Content.ReadFromJsonAsync<ApiSaveResponse>();
  821. //await Task.Delay(1000);
  822. if (result.Success)
  823. {
  824. }
  825. else
  826. {
  827. System.Diagnostics.Debug.WriteLine($"保存错误: {obj.Rule}\t{obj.PointExpress}\r\n{result.ErrorMessage}");
  828. }
  829. }
  830. else
  831. {
  832. System.Diagnostics.Debug.WriteLine($"调用API错误: {obj.Type}\t{obj.Rule}");
  833. }
  834. }
  835. private async Task SavePerformanceItem(PerformanceItem obj)
  836. {
  837. HttpClient http = CreateHttp();
  838. http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", Token.Token);
  839. if (obj.CalMonth.Month == 10)
  840. {
  841. System.Diagnostics.Debug.WriteLine($"{obj.CalMonth.Year}-{obj.CalMonth.Month}\t{obj.CaseNo}");
  842. }
  843. var isExist = await http.PostAsJsonAsync<PerformanceItem>($"{strAPIBaseUri}/api/PerformanceItem/IsExist", obj);
  844. if (isExist.IsSuccessStatusCode && await isExist.Content.ReadFromJsonAsync<bool>()==false)
  845. {
  846. var data = await http.PostAsJsonAsync<PerformanceItem>($"{strAPIBaseUri}/api/PerformanceItem/New", obj);
  847. if (data.IsSuccessStatusCode)
  848. {
  849. ApiSaveResponse result = await data.Content.ReadFromJsonAsync<ApiSaveResponse>();
  850. //await Task.Delay(1000);
  851. if (result.Success)
  852. {
  853. }
  854. else
  855. {
  856. System.Diagnostics.Debug.WriteLine($"保存错误: {obj.CaseNo}\t{obj.DoItem}\r\n{result.ErrorMessage}");
  857. }
  858. }
  859. else
  860. {
  861. System.Diagnostics.Debug.WriteLine($"调用API错误: {obj.CaseNo}\t{obj.DoItem}");
  862. }
  863. }
  864. }
  865. private HttpClient CreateHttp()
  866. {
  867. HttpClientHandler clientHandler = new HttpClientHandler();
  868. clientHandler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; };
  869. return new HttpClient(clientHandler);
  870. }
  871. private async Task<List<StaffGrade>> GetStaffGrades()
  872. {
  873. HttpClient http = CreateHttp();
  874. http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", Token.Token);
  875. var _StaffGrade = await http.GetFromJsonAsync<List<StaffGrade>>($"{strAPIBaseUri}/api/StaffGrade/GetAll");
  876. return _StaffGrade;
  877. }
  878. private async Task<List<Staff>> GetStaffsAsync()
  879. {
  880. HttpClient http = CreateHttp();
  881. http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", Token.Token);
  882. ListApiResponse<Staff> data = await http.GetFromJsonAsync<ListApiResponse<Staff>>($"{strAPIBaseUri}/api/Staff/Query?pageIndex=1&pageSize=1000");
  883. return data.Results;
  884. }
  885. private async Task<List<Staff>> getReviewers(int itemId,int appealTypeId)
  886. {
  887. HttpClient http = CreateHttp();
  888. http.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", Token.Token);
  889. List<Staff> data = await http.GetFromJsonAsync<List<Staff>>($"{strAPIBaseUri}/api/Staff/GetReviewers?itemId={itemId}&appealTypeId={appealTypeId}");
  890. return data;
  891. }
  892. private void button4_Click(object sender, EventArgs e)
  893. {
  894. Stopwatch watch = new Stopwatch();
  895. watch.Start();
  896. dynamic retObj = wispro.sp.utility.IPEasyUtility.GetPerformanceRecord("S2112392-洗碗机调查分析","提出报告");
  897. PerformanceItem Item = new PerformanceItem();
  898. Item.CaseName = retObj.CaseName;
  899. Item.CaseNo = retObj.CaseNo;
  900. Item.DoItem = retObj.DoItem;
  901. Item.CustomerLimitDate = string.IsNullOrEmpty(retObj.CustomerLimitDate) ? null : DateTime.Parse(retObj.CustomerLimitDate);
  902. Item.Customer = new Customer();
  903. Item.Customer.Name = retObj.CustomerName;
  904. Item.DoItemCoefficient = retObj.DoItemCoefficient;
  905. Item.DoItemMemo = retObj.DoItemMemo;
  906. Item.DoItemState = retObj.DoItemState;
  907. Item.EntrustingDate = string.IsNullOrEmpty(retObj.EntrustingDate) ? null : DateTime.Parse(retObj.EntrustingDate);
  908. Item.FinalizationDate = string.IsNullOrEmpty(retObj.FinalizationDate) ? null : DateTime.Parse(retObj.FinalizationDate);
  909. Item.FinishedDate = string.IsNullOrEmpty(retObj.FinishedDate) ? null : DateTime.Parse(retObj.FinishedDate);
  910. //Item.FirstDraftDate = string.IsNullOrEmpty(retObj.FirstDraftDate) ? null : DateTime.Parse(retObj.FirstDraftDate);
  911. Item.InternalDate = string.IsNullOrEmpty(retObj.InternalDate) ? null : DateTime.Parse(retObj.InternalDate);
  912. if (!string.IsNullOrEmpty(retObj.DoPersons))
  913. {
  914. Item.ItemStaffs = new List<ItemStaff>();
  915. string[] names = retObj.DoPersons.ToString().Split(new char[] { ','},StringSplitOptions.RemoveEmptyEntries);
  916. foreach(var name in names)
  917. {
  918. ItemStaff iStaff = new ItemStaff();
  919. iStaff.DoPerson = new Staff() { Name = name };
  920. Item.ItemStaffs.Add(iStaff);
  921. }
  922. }
  923. Item.ReturnDate = string.IsNullOrEmpty(retObj.ReturnDate) ? null : DateTime.Parse(retObj.ReturnDate);
  924. if (!string.IsNullOrEmpty(retObj.Reviewer))
  925. {
  926. Item.Reviewer = new Staff() { Name = retObj.Reviewer };
  927. }
  928. Item.ApplicationType = retObj.ApplicationType;
  929. Item.BusinessType = retObj.BusinessType;
  930. Item.CaseCoefficient = retObj.CaseCoefficient;
  931. Item.CaseMemo = retObj.CaseMemo;
  932. Item.CaseStage = retObj.CaseStage;
  933. Item.CaseState = retObj.CaseState;
  934. Item.CaseType = retObj.CaseType;
  935. watch.Stop();
  936. System.Diagnostics.Debug.WriteLine("用时{0}毫秒", watch.ElapsedMilliseconds);//获取当前实例测量得出的总运行时间(以毫秒为单位)
  937. //wispro.sp.utility.IPEasyUtility.DownloadReport("每月绩效统计--上个月递交完成案件", true);
  938. //wispro.sp.utility.IPEasyUtility.DownloadReport("每月绩效统计--发客户超过一个月未完成案件", false);
  939. //wispro.sp.utility.IPEasyUtility.DownloadReport("每月绩效统计--中国一次OA授权表", true);
  940. ////每月绩效统计--发客户超过一个月未完成案件
  941. //NewMethod("506aa7ad-c3f4-4ec6-9ec8-ff6b92dcd7c1", "每月绩效统计--发客户超过一个月未完成案件.xlsx", calMonth);
  942. ////每月绩效统计--上个月递交完成案件
  943. //NewMethod("d7308cd2-71e4-4444-9f47-f4d731ddb26a", "每月绩效统计--上个月递交完成案件.xlsx", calMonth);
  944. ////每月绩效统计--中国一次OA授权表
  945. //NewMethod("72454834-afdd-4b98-b42a-0bc912d07610", "每月绩效统计--中国一次OA授权表.xlsx", calMonth, true);
  946. }
  947. }
  948. }