Home.cs 101 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Collections.ObjectModel;
  5. using System.ComponentModel;
  6. using System.Data;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Text.RegularExpressions;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock;
  13. using System.Xml.Linq;
  14. using Newtonsoft.Json.Linq;
  15. using Newtonsoft.Json;
  16. using System.Net.Http;
  17. using System.Globalization;
  18. using System.Drawing;
  19. using Aspose.Words;
  20. using System.IO;
  21. using System.Threading;
  22. using static System.Net.Mime.MediaTypeNames;
  23. using System.Drawing.Drawing2D;
  24. using travelExport.utility;
  25. using Aspose.Words.Tables;
  26. using System.Data.Entity.Migrations.Builders;
  27. using System.IO.Ports;
  28. using System.Reflection;
  29. namespace travelExport
  30. {
  31. public partial class Home : Form
  32. {
  33. readonly static oa2023DBEntities db = new oa2023DBEntities();
  34. static List<Grp_DelegationInfo> soure = new List<Grp_DelegationInfo>();
  35. readonly static string[] weekdays = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
  36. const decimal conversion = 1.61M;
  37. readonly static string[] excludeArr = new string[] { "[中转]", "[转机]" };
  38. public List<TripItem> dropDownItem = new List<TripItem>
  39. {
  40. new TripItem
  41. {
  42. Id = 1,
  43. Name = "默认行程模板",
  44. Path = "C:\\日行程3.docx#D:\\日行程3.docx"
  45. },
  46. new TripItem
  47. {
  48. Id = 2,
  49. Name = "贵州行程模板",
  50. Path = "C:\\贵州行程模板.docx#D:\\贵州行程模板1.docx"
  51. },
  52. };
  53. public class TripItem
  54. {
  55. public int Id { get; set; }
  56. public string Name { get; set; }
  57. public string Path { get; set; }
  58. }
  59. public enum textTypeEnum
  60. {
  61. 标题 = 0 , 内容 = 1
  62. };
  63. public class textType
  64. {
  65. public textTypeEnum Type { get; set; }
  66. public string Value { get; set; }
  67. }
  68. public Home()
  69. {
  70. InitializeComponent();
  71. Task.Run(() => {
  72. if (versions.checkVersions())
  73. {
  74. // 在主线程中显示消息框
  75. this.Invoke((MethodInvoker) delegate {
  76. var result = MessageBoxEx.Show(this, "有新版本可用,是否更新!", "更新提示!", MessageBoxButtons.YesNo);
  77. // 这里可以处理用户点击按钮后的逻辑
  78. HandleUpdateResponse(result);
  79. });
  80. }
  81. });
  82. }
  83. private void HandleUpdateResponse(DialogResult result)
  84. {
  85. // 处理用户的选择
  86. if (result == DialogResult.Yes)
  87. {
  88. // 用户选择“是”,进行更新
  89. }
  90. else
  91. {
  92. // 用户选择“否”,不进行更新
  93. }
  94. }
  95. private void Form1_Load(object sender, EventArgs e)
  96. {
  97. soure = db.Grp_DelegationInfo.Where(x => x.IsDel == 0).ToList();
  98. comb_Delegation.ValueMember = "Id";
  99. comb_Delegation.DisplayMember = "TeamName";
  100. comb_Delegation.Items.AddRange(soure.ToArray());
  101. comb_Delegation.DropDownHeight = 200;
  102. comb_Delegation.MouseClick += comb_Delegation_MouseClick;
  103. comb_Delegation.TextUpdate += comb_Delegation_TextUpdate;
  104. FormBorderStyle = FormBorderStyle.FixedSingle;
  105. MinimizeBox = false;
  106. MaximizeBox = false;
  107. tripItemSelect.DataSource = dropDownItem;
  108. tripItemSelect.ValueMember = "Id";
  109. tripItemSelect.DisplayMember = "Name";
  110. tripItemSelect.DropDownStyle = ComboBoxStyle.DropDownList;
  111. }
  112. private void comb_Delegation_MouseClick(object sender, MouseEventArgs e)
  113. {
  114. comb_Delegation.Text = "";
  115. comb_Delegation_TextUpdate(sender, e);
  116. comb_Delegation.DropDownHeight = 200;
  117. comb_Delegation.DroppedDown = true;
  118. }
  119. private void comb_Delegation_TextUpdate(object sender, EventArgs e)
  120. {
  121. ComboBox cb = (ComboBox)sender;
  122. cb.DataSource = null;
  123. cb.Items.Clear();
  124. string s = cb.Text;
  125. var bindList = soure.Where(item => item.TeamName != null && item.TeamName.Contains(s)).ToList();
  126. if (bindList.Count >= 1) // 存在符合条件的内容
  127. {
  128. this.comb_Delegation.Items.AddRange(bindList.ToArray());
  129. }
  130. else
  131. {
  132. this.comb_Delegation.Items.Add(new Grp_DelegationInfo { TeamName = "", Id = -1 });
  133. }
  134. cb.SelectionStart = cb.Text.Length; // 设置光标位置,若不设置:光标位置始终保持在第一列,造成输入关键词的倒序排列
  135. cb.Cursor = Cursors.Default; //保持鼠标指针原来状态,有时候鼠标指针会被下拉框覆盖,所以要进行一次设置
  136. cb.MaxDropDownItems = 8; // 自动弹出下拉框
  137. }
  138. private async void btnImport_Click(object sender, EventArgs e)
  139. {
  140. var tripTempValue = tripItemSelect.SelectedValue;
  141. if (!int.TryParse(tripTempValue.ToString() , out int tempValue))
  142. {
  143. MessageBoxEx.Show("请选择模板类型!");
  144. return;
  145. }
  146. var diid = -1;
  147. try
  148. {
  149. var dele = (comb_Delegation.SelectedItem as Grp_DelegationInfo);
  150. diid = dele.Id;
  151. }
  152. catch (Exception)
  153. {
  154. //lblImport.Text = "请正确的选择团组!";
  155. //lblImport.ForeColor = Color.Black;
  156. MessageBoxEx.Show(this,"请正确的选择团组!","提示");
  157. return;
  158. }
  159. //GetAllCity(diid);
  160. DataTable resultTable = null;
  161. try
  162. {
  163. resultTable = GetTableByBlackCode(diid);
  164. }
  165. catch (Exception ex)
  166. {
  167. MessageBoxEx.Show(this, "黑屏代码有误!" + ex.Message, "提示");
  168. return;
  169. }
  170. if (resultTable.Rows.Count == 0 || string.IsNullOrWhiteSpace(resultTable.Rows[0][1].ToString()))
  171. {
  172. MessageBoxEx.Show(this, "黑屏代码有误! " , "提示");
  173. return;
  174. }
  175. foreach (DataRow row in resultTable.Rows)
  176. {
  177. if (!string.IsNullOrWhiteSpace(row["Error"].ToString()))
  178. {
  179. MessageBoxEx.Show(this, "黑屏代码有误! " + row["Error"].ToString(), "提示");
  180. return;
  181. }
  182. }
  183. var isVPN = await Task.Run(() =>
  184. {
  185. var isVpn = GetDirectionByGoogleApi("北京", "上海");
  186. if (Convert.ToInt32(isVpn["code"]) == -1)
  187. {
  188. return false;
  189. }
  190. return true;
  191. });
  192. if (!isVPN) { MessageBoxEx.Show(this, "请打开VPN!"); return ; }
  193. var timeArr = GetTimeListByDataTable(resultTable);
  194. ChildThreadExceptionHandler wt = new
  195. ChildThreadExceptionHandler((msg) =>
  196. {
  197. if (this.InvokeRequired)
  198. {
  199. this.Invoke(new Action(() =>
  200. {
  201. MessageBoxEx.Show(this, msg);
  202. }));
  203. }
  204. else
  205. {
  206. MessageBoxEx.Show(this, msg);
  207. }
  208. });
  209. //本团行程单数据
  210. List<Grp_TravelList> listTravel = db.Grp_TravelList.Where(x => x.Diid == diid && x.IsDel == 0).ToList();
  211. Thread threadExec = new Thread(() =>
  212. {
  213. try
  214. {
  215. using (var sw = db.Database.BeginTransaction())
  216. {
  217. db.Grp_TravelList.RemoveRange(listTravel);
  218. db.SaveChanges();
  219. var NewListTravel = new List<Grp_TravelList>();
  220. var index = 1;
  221. var stopCity = string.Empty;
  222. foreach (var item in timeArr)
  223. {
  224. string tripGuiZhou = string.Empty;
  225. string trip = string.Empty;
  226. string weekDay = string.Empty;
  227. DateTime time = DateTime.Now;
  228. if (DateTime.TryParse(item, out time))
  229. {
  230. weekDay = weekdays[(int)time.DayOfWeek];
  231. }
  232. else
  233. {
  234. weekDay = "日期格式不正确!";
  235. }
  236. var empty = "【未收入该三字码!请机票同事录入】";
  237. var tabSelect = resultTable.Select(string.Format("Day = '{0}'", item));
  238. var isMoreTraffic = false;
  239. if (tabSelect.Length > 0)
  240. {
  241. isMoreTraffic = true;
  242. var takeOffTime = DateTime.Parse(item);
  243. var fallToTime = DateTime.Parse(item);
  244. Res_ThreeCode start_Object = null;
  245. Res_ThreeCode end_Object = null;
  246. bool isTrade = false;
  247. foreach (var tabRow in tabSelect)
  248. {
  249. takeOffTime = DateTime.Parse(item);
  250. fallToTime = DateTime.Parse(item);
  251. var takeOff = tabRow["StartTime"].ToString();
  252. var fallTo = tabRow["EndTime"].ToString();
  253. takeOffTime = takeOffTime.AddHours(int.Parse(takeOff.Substring(0, 2)));
  254. takeOffTime = takeOffTime.AddMinutes(int.Parse(takeOff.Substring(2, 2)));
  255. fallToTime = fallToTime.AddHours(int.Parse(fallTo.Substring(0, 2)));
  256. fallToTime = fallToTime.AddMinutes(int.Parse(fallTo.Substring(2, 2)));
  257. var threeCode = tabRow["Three"].ToString();
  258. var start = threeCode.Substring(0, 3);
  259. var end = threeCode.Substring(3, 3);
  260. stopCity = end;
  261. start_Object = db.Res_ThreeCode.FirstOrDefault(x => x.Three.ToUpper() == start.ToUpper());
  262. end_Object = db.Res_ThreeCode.FirstOrDefault(x => x.Three.ToUpper() == end.ToUpper());
  263. if (start_Object == null)
  264. {
  265. start_Object = new Res_ThreeCode()
  266. {
  267. AirPort = empty,
  268. AirPort_En = empty,
  269. City = empty,
  270. Country = empty,
  271. Four = empty,
  272. Three = empty,
  273. };
  274. }
  275. if (end_Object == null)
  276. {
  277. end_Object = new Res_ThreeCode()
  278. {
  279. AirPort = empty,
  280. AirPort_En = empty,
  281. City = empty,
  282. Country = empty,
  283. Four = empty,
  284. Three = empty,
  285. };
  286. }
  287. //航班号
  288. string flightcode = tabRow["Fliagtcode"].ToString();
  289. if (isTrade)
  290. {
  291. trip += "\r\n";
  292. }
  293. trip += $"{start_Object.City}/{end_Object.City}\r\n";
  294. if (!isTrade)
  295. {
  296. //--提前俩个小时
  297. trip += $"{takeOffTime.AddHours(-2).ToString("HH:mm")} 抵达{start_Object.AirPort}{tabRow["StartBuilding"].ToString().Trim()}航站楼,办理登机手续:\r\n";
  298. }
  299. var aircompany = db.Res_AirCompany.FirstOrDefault(x => x.ShortCode.ToUpper() == flightcode.Substring(0, 2).ToUpper() && x.IsDel == 0);
  300. var hsEmpty = "【此航司" + flightcode.Substring(0, 2).ToUpper() + "未收录,请机票同事录入】";
  301. if (aircompany == null)
  302. {
  303. aircompany = new Res_AirCompany
  304. {
  305. CnName = hsEmpty,
  306. EnName = hsEmpty,
  307. ShortCode = hsEmpty,
  308. };
  309. }
  310. //机型判断
  311. string airModel = tabRow["AirModel"].ToString();
  312. airModel = GetLonger(airModel.Substring(0, 1)) + airModel;
  313. string flightTime = tabRow["FlightTime"].ToString();
  314. if (flightTime.Contains(":"))
  315. {
  316. flightTime = flightTime.Replace(":", "小时");
  317. flightTime += "分钟";
  318. }
  319. if (flightTime.Contains("H"))
  320. {
  321. flightTime = flightTime.Replace("H", "小时");
  322. }
  323. if (flightTime.Contains("M"))
  324. {
  325. flightTime = flightTime.Replace("M", "分钟");
  326. }
  327. trip += $"{takeOffTime.ToString("HH:mm")} 搭乘{aircompany.CnName}{tabRow[0].ToString().Trim()}航班,由{start_Object.City}飞往{end_Object.City};\r\n ({start_Object.AirPort}/{end_Object.AirPort} 机型:{airModel} 飞行时间{flightTime});\r\n";
  328. tripGuiZhou += $"{takeOffTime.ToString("HH:mm")} 乘坐{aircompany.CnName}从{start_Object.City}{start_Object.AirPort}飞往{end_Object.City}{end_Object.AirPort};\r\n";
  329. isTrade = Convert.ToBoolean(tabRow["isTransitShipment"]);
  330. tripGuiZhou += $"{fallToTime.ToString("HH:mm")} 到达{end_Object.AirPort}\r\n";
  331. if (isTrade)
  332. {
  333. trip += $"{fallToTime.ToString("HH:mm")} 抵达{end_Object.AirPort}{tabRow["EndBuilding"].ToString().Trim()}航站楼(中转时间:行李直达)";
  334. }
  335. else
  336. {
  337. trip += $"{fallToTime.ToString("HH:mm")} 抵达{end_Object.AirPort}{tabRow["EndBuilding"].ToString().Trim()}航站楼,办理入境手续,之后前往提取行李\r\n";
  338. }
  339. }
  340. //var airArrive = fallToTime; //航班落地时间
  341. time = fallToTime.AddHours(1.5); //出机场一个半小时
  342. string Time = string.Empty;
  343. string Distance = string.Empty;
  344. int GetGoogleResult = 0;
  345. int GetDistResult = 0;
  346. JObject Result = null;
  347. try
  348. {
  349. Result = GetDirectionByGoogleApi(end_Object.AirPort, end_Object.City + "市区");
  350. Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace(" ", "").Trim();
  351. Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString().Replace(" ", "").Trim();
  352. if (Time.Contains("hours"))
  353. {
  354. Time = Time.Replace("hours", "小时");
  355. }
  356. if (Time.Contains("hour"))
  357. {
  358. Time = Time.Replace("hour", "小时");
  359. }
  360. Time = Time.Replace("mins", "分钟");
  361. if (Distance.Contains("mi"))
  362. {
  363. var distSp = Regex.Split(Distance, "mi");
  364. if (distSp.Length > 0)
  365. {
  366. Distance = (decimal.Parse(distSp[0]) * conversion).ToString("#0.00") + " 公里";
  367. }
  368. }
  369. if (Distance.Contains("km"))
  370. {
  371. Distance = Distance.Replace("km", "公里");
  372. }
  373. if (Time.Contains("小时"))
  374. {
  375. var xs = Regex.Split(Time, "小时");
  376. var xsValue = int.Parse(xs[0]);
  377. var fz = Regex.Split(xs[1], "分钟");
  378. var fzValue = int.Parse(fz[0]);
  379. GetGoogleResult = xsValue * 60;
  380. GetGoogleResult += fzValue;
  381. }
  382. else if (Time.Contains("分钟"))
  383. {
  384. GetGoogleResult = int.Parse(Regex.Split(Time, "分钟")[0]);
  385. }
  386. if (Distance.Contains("公里"))
  387. {
  388. GetDistResult = (int)decimal.Parse(Regex.Split(Distance, "公里")[0]);
  389. }
  390. if (GetGoogleResult > 0 && GetGoogleResult % 5 != 0)
  391. {
  392. while (GetGoogleResult % 5 != 0)
  393. {
  394. GetGoogleResult++;
  395. }
  396. }
  397. if (GetDistResult % 5 != 0 && GetDistResult > 0)
  398. {
  399. while (GetDistResult % 5 != 0)
  400. {
  401. GetDistResult++;
  402. }
  403. }
  404. int H = (GetGoogleResult / 60);
  405. int m = (GetGoogleResult % 60);
  406. string TimeStr = string.Empty;
  407. if (H != 0)
  408. {
  409. if (H < 10)
  410. {
  411. TimeStr += "0" + H + "小时";
  412. }
  413. else
  414. {
  415. TimeStr += H + "小时";
  416. }
  417. }
  418. if (m < 10)
  419. {
  420. TimeStr += "0" + m + "分钟";
  421. }
  422. else
  423. {
  424. TimeStr += m + "分钟";
  425. }
  426. Time = TimeStr;
  427. Distance = GetDistResult.ToString() + "公里";
  428. }
  429. catch (Exception ex)
  430. {
  431. Time = "未知!";
  432. Distance = "未知!";
  433. }
  434. trip += $"{time.ToString("HH:mm")} 搭乘专车前往市区({end_Object.AirPort} - {end_Object.City}市区 路程{Distance},耗时{Time})";
  435. time = time.AddMinutes(GetGoogleResult); //到达市区时间
  436. if (index != timeArr.Count)
  437. {
  438. tripGuiZhou += $"{fallToTime.AddMinutes(10).ToString("HH:mm")} ";
  439. tripGuiZhou += "从机场赴入住酒店";
  440. }
  441. if (index == timeArr.Count)
  442. {
  443. trip += "圆满结束此次访问之行!";
  444. NewListTravel.Add(new Grp_TravelList
  445. {
  446. CreateTime = DateTime.Now,
  447. CreateUserId = 0,
  448. Diid = diid,
  449. Date = Convert.ToDateTime(item).ToString("M月d日"),
  450. Trip = tempValue == 1 ? trip : tempValue == 2 ? tripGuiZhou : "",
  451. WeekDay = weekDay,
  452. Days = index,
  453. Traffic_First = "飞机",
  454. Traffic_Second = "汽车",
  455. Diffgroup = 1,
  456. Issel = 1,
  457. IsDel = 0,
  458. });
  459. continue;
  460. }
  461. if (time.Day != fallToTime.Day) //超出一天
  462. {
  463. NewListTravel.Add(new Grp_TravelList
  464. {
  465. CreateTime = DateTime.Now,
  466. CreateUserId = 0,
  467. Diid = diid,
  468. Date = Convert.ToDateTime(item).ToString("M月d日"),
  469. Trip = tempValue == 1 ? trip : tempValue == 2 ? tripGuiZhou : "",
  470. WeekDay = weekDay,
  471. Days = index,
  472. Traffic_First = "飞机",
  473. Traffic_Second = "汽车",
  474. Diffgroup = 1,
  475. Issel = 1,
  476. IsDel = 0,
  477. });
  478. continue;
  479. }
  480. if (time.Hour < 9) // && (airArrive < new DateTime(airArrive.Year,airArrive.Month,airArrive.Day,6, 30, 0))
  481. {
  482. trip += @"
  483. 09:00 公务活动;
  484. 10:30 公务活动;";
  485. }
  486. else if (time.Hour < 10)
  487. {
  488. trip += @"
  489. 10:30 公务活动;";
  490. }
  491. if (time.Hour < 13)
  492. {
  493. trip += $"\r\n{time.ToString("HH:mm")} 午餐于当地餐厅;";
  494. }
  495. if (time < new DateTime(time.Year, time.Month, time.Day, 14, 30, 0))
  496. {
  497. trip += @"
  498. 14:00 公务活动;
  499. 16:00 公务活动;";
  500. }
  501. else if (time.Hour < 16)
  502. {
  503. trip += @"
  504. 16:00 公务活动;";
  505. }
  506. if (time.Hour < 18)
  507. {
  508. trip += $"\r\n18:00 晚餐于当地餐厅;";
  509. }
  510. //time = time.AddHours(1);
  511. //trip += $"\r\n{time.ToString("HH:mm")} 搭乘专车前往酒店,抵达后办理入住;";
  512. }
  513. else
  514. {
  515. var end_Object = db.Res_ThreeCode.FirstOrDefault(x => x.Three.ToUpper() == stopCity.ToUpper());
  516. if (end_Object == null)
  517. {
  518. end_Object = new Res_ThreeCode()
  519. {
  520. AirPort = empty,
  521. AirPort_En = empty,
  522. City = empty,
  523. Country = empty,
  524. Four = empty,
  525. Three = empty,
  526. };
  527. }
  528. trip += $"{end_Object.City}\r\n";
  529. trip += @"08:00 早餐于酒店;
  530. 09:00 公务活动;
  531. 10:30 公务活动;
  532. 12:00 午餐于当地餐厅;
  533. 14:00 公务活动;
  534. 16:00 公务活动;
  535. 18:00 晚餐于当地餐厅;
  536. 19:00 入住酒店休息;";
  537. tripGuiZhou += $"上午\r\n08:30 从酒店出发\r\n09:00 公务活动\r\n12:00 返回酒店\r\n\r\n下午\r\n14:00 公务活动\r\n18:00 返回酒店";
  538. }
  539. string[] traffic = new string[] { "汽车", "飞机" };
  540. if (!isMoreTraffic)
  541. {
  542. traffic = new string[] { "汽车", "" };
  543. }
  544. NewListTravel.Add(new Grp_TravelList
  545. {
  546. CreateTime = DateTime.Now,
  547. CreateUserId = 0,
  548. Diid = diid,
  549. Date = Convert.ToDateTime(item).ToString("M月d日"),
  550. Trip = tempValue == 1 ? trip : tempValue == 2 ? tripGuiZhou : "",
  551. WeekDay = weekDay,
  552. Days = index,
  553. Traffic_First = traffic[0],
  554. Traffic_Second = traffic[1],
  555. Diffgroup = 1,
  556. Issel = 1,
  557. IsDel = 0,
  558. });
  559. index++;
  560. }
  561. db.Grp_TravelList.AddRange(NewListTravel);
  562. db.SaveChanges();
  563. sw.Commit();
  564. wt.Invoke("数据导入完成!");
  565. }
  566. }
  567. catch (Exception ex)
  568. {
  569. wt.Invoke("请等待程序执行!");
  570. }
  571. });
  572. threadExec.Start();
  573. }
  574. private void execTemp(int tempValue, int diid, Grp_DelegationInfo di)
  575. {
  576. var dropItem = dropDownItem.FirstOrDefault(x => x.Id == tempValue);
  577. var pathArr = Regex.Split(dropItem.Path, "#").ToList();
  578. var UsePath = string.Empty;
  579. foreach (var itemF in pathArr)
  580. {
  581. if (File.Exists(itemF))
  582. {
  583. UsePath = itemF;
  584. break;
  585. }
  586. }
  587. if (string.IsNullOrWhiteSpace(UsePath))
  588. {
  589. var txtPath = GetApplicationPath() + "\\path.txt";
  590. if (File.Exists(txtPath))
  591. {
  592. //建立文件读取流对象
  593. StreamReader str = new StreamReader(txtPath);
  594. List<string> list = new List<string>();
  595. //获取每行字符
  596. string line;
  597. while ((line = str.ReadLine()) != null)
  598. {
  599. list.Add(line);
  600. }
  601. str.Close();
  602. foreach (var item in list)
  603. {
  604. if (File.Exists(item))
  605. {
  606. UsePath = item;
  607. break;
  608. }
  609. }
  610. }
  611. else
  612. {
  613. using (var sw = File.CreateText(txtPath))
  614. {
  615. sw.WriteLine("path"); // 写入字符串
  616. }
  617. MessageBoxEx.Show(this, "创建成功!", "请配置文件路径!");
  618. return;
  619. }
  620. }
  621. var _travelList = db.Grp_TravelList.Where(x => x.IsDel == 0 && x.Diid == diid).ToList();
  622. //设置源文件
  623. Document doc = new Document(UsePath);
  624. // 创建 DocumentBuilder 对象
  625. DocumentBuilder builder = new DocumentBuilder(doc);
  626. var titleCount = 1;
  627. var conterCount = 1;
  628. var index = 1;
  629. foreach (var item in _travelList)
  630. {
  631. //移动到文档的最后一个段落之后
  632. builder.MoveToDocumentEnd();
  633. builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
  634. // 开始书签
  635. builder.StartBookmark("title" + titleCount);
  636. // 设置文本格式为加粗
  637. builder.Font.Bold = true;
  638. builder.Font.Name = "KaiTi";
  639. builder.Font.Size = 18;
  640. // 插入加粗的文本
  641. builder.Writeln($"{item.Date}({item.WeekDay},第{index}天)");
  642. // 结束书签
  643. builder.EndBookmark("title" + titleCount);
  644. titleCount++;
  645. // 在文档末尾插入一个空段落
  646. builder.Writeln();
  647. builder.MoveToDocumentEnd();
  648. builder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
  649. // 取消文本格加粗
  650. builder.Font.Bold = false;
  651. builder.Font.Name = "仿宋";
  652. // 开始书签
  653. builder.StartBookmark("conter"+ conterCount);
  654. // 插入文本
  655. //builder.Writeln(item.Trip);
  656. // 解析字符串中的时间和内容部分
  657. string[] lines = item.Trip.Split(new[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);
  658. // 使用正则表达式匹配时间格式
  659. Regex timeRegex = new Regex(@"^\d{2}:\d{2}");
  660. // 遍历每一行并格式化
  661. foreach (string line in lines)
  662. {
  663. // 使用正则表达式提取时间
  664. Match match = timeRegex.Match(line.Trim());
  665. if (match.Success)
  666. {
  667. string timePart = match.Value; // 时间部分
  668. string descriptionPart = line.Substring(match.Length).Trim(); // 描述部分
  669. // 设置段落格式(制表符分隔时间和描述)
  670. builder.ParagraphFormat.TabStops.Clear();
  671. builder.ParagraphFormat.TabStops.Add(new TabStop(50)); // 设置制表符位置为50
  672. // 插入时间
  673. builder.Write(timePart + "\t");
  674. if (descriptionPart.Length > 19)
  675. {
  676. builder.Writeln(descriptionPart.Substring(0,19));
  677. builder.Writeln(" " + descriptionPart.Substring(19));
  678. }
  679. else
  680. {
  681. // 插入描述并换行
  682. builder.Writeln(descriptionPart);
  683. }
  684. }
  685. else
  686. {
  687. // 如果没有时间,直接插入整段文字
  688. builder.Writeln(line);
  689. }
  690. }
  691. // 结束书签
  692. builder.EndBookmark("conter" + conterCount);
  693. conterCount++;
  694. builder.Writeln();
  695. index++;
  696. }
  697. CheckAndCenterParagraphs(doc);
  698. string strFileName = "C:\\OP行程单\\" + di.TeamName + "贵州行程.docx";
  699. try
  700. {
  701. doc.Save(strFileName, Aspose.Words.SaveFormat.Docx);
  702. MessageBoxEx.Show(this, "文件导出完成!");
  703. System.Diagnostics.Process.Start("Explorer.exe", "/select," + strFileName);
  704. }
  705. catch (Exception ex)
  706. {
  707. MessageBoxEx.Show(this, "请关闭打开的文件后重试!");
  708. }
  709. }
  710. private static string GetApplicationPath()
  711. {
  712. string path = System.Windows.Forms.Application.StartupPath;
  713. string folderName = String.Empty;
  714. while (folderName.ToLower() != "bin")
  715. {
  716. path = path.Substring(0, path.LastIndexOf("\\"));
  717. folderName = path.Substring(path.LastIndexOf("\\") + 1);
  718. }
  719. return path.Substring(0, path.LastIndexOf("\\") + 1);
  720. }
  721. public async void btnImportInfo()
  722. {
  723. var diid = -1;
  724. try
  725. {
  726. var dele = (comb_Delegation.SelectedItem as Grp_DelegationInfo);
  727. diid = dele.Id;
  728. }
  729. catch (Exception)
  730. {
  731. //lblImport.Text = "请正确的选择团组!";
  732. //lblImport.ForeColor = Color.Black;
  733. MessageBoxEx.Show(this, "请正确的选择团组!", "提示");
  734. return;
  735. }
  736. DataTable resultTable = null;
  737. try
  738. {
  739. resultTable = GetTableByBlackCode(diid);
  740. }
  741. catch (Exception ex)
  742. {
  743. MessageBoxEx.Show(this, "黑屏代码有误!", "提示");
  744. return;
  745. }
  746. if (resultTable.Rows.Count == 0 || string.IsNullOrWhiteSpace(resultTable.Rows[0][1].ToString()))
  747. {
  748. MessageBoxEx.Show(this, "黑屏代码有误! ", "提示");
  749. return;
  750. }
  751. foreach (DataRow row in resultTable.Rows)
  752. {
  753. if (!string.IsNullOrWhiteSpace(row["Error"].ToString()))
  754. {
  755. MessageBoxEx.Show(this, "黑屏代码有误! " + row["Error"].ToString(), "提示");
  756. return;
  757. }
  758. }
  759. var isVPN = await Task.Run(() =>
  760. {
  761. var isVpn = GetDirectionByGoogleApi("北京", "上海");
  762. if (Convert.ToInt32(isVpn["code"]) == -1)
  763. {
  764. return false;
  765. }
  766. return true;
  767. });
  768. if (!isVPN) { MessageBoxEx.Show(this, "请打开VPN!"); return; }
  769. var timeArr = GetTimeListByDataTable(resultTable);
  770. //本团行程单数据
  771. List<Grp_TravelList> listTravel = db.Grp_TravelList.Where(x => x.Diid == diid && x.IsDel == 0).ToList();
  772. ChildThreadExceptionHandler wt = new
  773. ChildThreadExceptionHandler((msg) =>
  774. {
  775. if (this.InvokeRequired)
  776. {
  777. this.Invoke(new Action(() =>
  778. {
  779. MessageBoxEx.Show(this, msg);
  780. }));
  781. }
  782. else
  783. {
  784. MessageBoxEx.Show(this, msg);
  785. }
  786. });
  787. Thread threadExec = new Thread(() =>
  788. {
  789. try
  790. {
  791. using (var sw = db.Database.BeginTransaction())
  792. {
  793. db.Grp_TravelList.RemoveRange(listTravel);
  794. db.SaveChanges();
  795. var NewListTravel = new List<Grp_TravelList>();
  796. var index = 1;
  797. var stopCity = string.Empty;
  798. //本团车导地接信息
  799. var listctg = db.Grp_CarTouristGuideGroundReservations.Where(x => x.DiId == diid && x.IsDel == 0).ToList();
  800. //本团酒店信息
  801. var listht = db.Grp_HotelReservations.Where(x => x.DiId == diid && x.IsDel == 0).ToList();
  802. //公务出访信息
  803. var listgw = db.Res_OfficialActivities.Where(x => x.DiId == diid && x.IsDel == 0).ToList();
  804. //邀请公务资料
  805. var listgwzl = db.Grp_InvitationOfficialActivities.Where(x => x.DiId == diid && x.IsDel == 0).ToList();
  806. Grp_HotelReservations lastHotel = null;
  807. foreach (var item in timeArr)
  808. {
  809. string trip = string.Empty;
  810. string weekDay = string.Empty;
  811. DateTime time = DateTime.Now;
  812. if (DateTime.TryParse(item, out time))
  813. {
  814. weekDay = weekdays[(int)time.DayOfWeek];
  815. }
  816. else
  817. {
  818. weekDay = "日期格式不正确!";
  819. }
  820. var empty = "【未收入该三字码!请机票同事录入】";
  821. var tabSelect = resultTable.Select(string.Format("Day = '{0}'", item));
  822. var isMoreTraffic = false;
  823. if (tabSelect.Length > 0)
  824. {
  825. isMoreTraffic = true;
  826. var takeOffTime = DateTime.Parse(item);
  827. var fallToTime = DateTime.Parse(item);
  828. Res_ThreeCode start_Object = null;
  829. Res_ThreeCode end_Object = null;
  830. bool isTrade = false;
  831. foreach (var tabRow in tabSelect)
  832. {
  833. takeOffTime = DateTime.Parse(item);
  834. fallToTime = DateTime.Parse(item);
  835. var takeOff = tabRow["StartTime"].ToString();
  836. var fallTo = tabRow["EndTime"].ToString();
  837. takeOffTime = takeOffTime.AddHours(int.Parse(takeOff.Substring(0, 2)));
  838. takeOffTime = takeOffTime.AddMinutes(int.Parse(takeOff.Substring(2, 2)));
  839. fallToTime = fallToTime.AddHours(int.Parse(fallTo.Substring(0, 2)));
  840. fallToTime = fallToTime.AddMinutes(int.Parse(fallTo.Substring(2, 2)));
  841. var threeCode = tabRow["Three"].ToString();
  842. var start = threeCode.Substring(0, 3);
  843. var end = threeCode.Substring(3, 3);
  844. stopCity = end;
  845. start_Object = db.Res_ThreeCode.FirstOrDefault(x => x.Three.ToUpper() == start.ToUpper());
  846. end_Object = db.Res_ThreeCode.FirstOrDefault(x => x.Three.ToUpper() == end.ToUpper());
  847. if (start_Object == null)
  848. {
  849. start_Object = new Res_ThreeCode()
  850. {
  851. AirPort = empty,
  852. AirPort_En = empty,
  853. City = empty,
  854. Country = empty,
  855. Four = empty,
  856. Three = empty,
  857. };
  858. }
  859. if (end_Object == null)
  860. {
  861. end_Object = new Res_ThreeCode()
  862. {
  863. AirPort = empty,
  864. AirPort_En = empty,
  865. City = empty,
  866. Country = empty,
  867. Four = empty,
  868. Three = empty,
  869. };
  870. }
  871. //航班号
  872. string flightcode = tabRow["Fliagtcode"].ToString();
  873. if (isTrade)
  874. {
  875. trip += "\r\n";
  876. }
  877. trip += $"{start_Object.City}/{end_Object.City}\r\n";
  878. //--提前俩个小时
  879. if (!isTrade)
  880. {
  881. //--提前俩个小时
  882. trip += $"{takeOffTime.AddHours(-2).ToString("HH:mm")} 抵达{start_Object.AirPort}{tabRow["StartBuilding"].ToString().Trim()}航站楼,办理登机手续:\r\n";
  883. }
  884. var aircompany = db.Res_AirCompany.FirstOrDefault(x => x.ShortCode.ToUpper() == flightcode.Substring(0, 2).ToUpper() && x.IsDel == 0);
  885. var hsEmpty = "【此航司" + flightcode.Substring(0, 2).ToUpper() + "未收录,请机票同事录入】";
  886. if (aircompany == null)
  887. {
  888. aircompany = new Res_AirCompany
  889. {
  890. CnName = hsEmpty,
  891. EnName = hsEmpty,
  892. ShortCode = hsEmpty,
  893. };
  894. }
  895. //机型判断
  896. string airModel = tabRow["AirModel"].ToString();
  897. airModel = GetLonger(airModel.Substring(0, 1)) + airModel;
  898. string flightTime = tabRow["FlightTime"].ToString();
  899. if (flightTime.Contains(":"))
  900. {
  901. flightTime = flightTime.Replace(":", "小时");
  902. flightTime += "分钟";
  903. }
  904. if (flightTime.Contains("H"))
  905. {
  906. flightTime = flightTime.Replace("H", "小时");
  907. }
  908. if (flightTime.Contains("M"))
  909. {
  910. flightTime = flightTime.Replace("M", "分钟");
  911. }
  912. trip += $"{takeOffTime.ToString("HH:mm")} 搭乘{aircompany.CnName}{tabRow[0].ToString().Trim()}航班,由{start_Object.City}飞往{end_Object.City};\r\n ({start_Object.AirPort}/{end_Object.AirPort} 机型:{airModel} 飞行时间{flightTime});\r\n";
  913. isTrade = Convert.ToBoolean(tabRow["isTransitShipment"]);
  914. if (isTrade)
  915. {
  916. trip += $"{fallToTime.ToString("HH:mm")} 抵达{end_Object.AirPort}{tabRow["EndBuilding"].ToString().Trim()}航站楼(中转时间:行李直达)";
  917. }
  918. else
  919. {
  920. trip += $"{fallToTime.ToString("HH:mm")} 抵达{end_Object.AirPort}{tabRow["EndBuilding"].ToString().Trim()}航站楼,办理入境手续,之后前往提取行李\r\n";
  921. }
  922. }
  923. //var airArrive = fallToTime; //航班落地时间
  924. time = fallToTime.AddHours(1.5); //出机场一个半小时
  925. string Time = string.Empty;
  926. string Distance = string.Empty;
  927. int GetGoogleResult = 0;
  928. int GetDistResult = 0;
  929. JObject Result = null;
  930. try
  931. {
  932. Result = GetDirectionByGoogleApi(end_Object.AirPort, end_Object.City + "市区");
  933. Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace(" ", "").Trim();
  934. Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString().Replace(" ", "").Trim();
  935. if (Time.Contains("hours"))
  936. {
  937. Time = Time.Replace("hours", "小时");
  938. }
  939. if (Time.Contains("hour"))
  940. {
  941. Time = Time.Replace("hour", "小时");
  942. }
  943. Time = Time.Replace("mins", "分钟");
  944. if (Distance.Contains("mi"))
  945. {
  946. var distSp = Regex.Split(Distance, "mi");
  947. if (distSp.Length > 0)
  948. {
  949. Distance = (decimal.Parse(distSp[0]) * conversion).ToString("#0.00") + " 公里";
  950. }
  951. }
  952. if (Distance.Contains("km"))
  953. {
  954. Distance = Distance.Replace("km", "公里");
  955. }
  956. if (Time.Contains("小时"))
  957. {
  958. var xs = Regex.Split(Time, "小时");
  959. var xsValue = int.Parse(xs[0]);
  960. var fz = Regex.Split(xs[1], "分钟");
  961. var fzValue = int.Parse(fz[0]);
  962. GetGoogleResult = xsValue * 60;
  963. GetGoogleResult += fzValue;
  964. }
  965. else if (Time.Contains("分钟"))
  966. {
  967. GetGoogleResult = int.Parse(Regex.Split(Time, "分钟")[0]);
  968. }
  969. if (Distance.Contains("公里"))
  970. {
  971. GetDistResult = (int)decimal.Parse(Regex.Split(Distance, "公里")[0]);
  972. }
  973. if (GetGoogleResult > 0 && GetGoogleResult % 5 != 0)
  974. {
  975. while (GetGoogleResult % 5 != 0)
  976. {
  977. GetGoogleResult++;
  978. }
  979. }
  980. if (GetDistResult % 5 != 0 && GetDistResult > 0)
  981. {
  982. while (GetDistResult % 5 != 0)
  983. {
  984. GetDistResult++;
  985. }
  986. }
  987. int H = (GetGoogleResult / 60);
  988. int m = (GetGoogleResult % 60);
  989. string TimeStr = string.Empty;
  990. if (H != 0)
  991. {
  992. if (H < 10)
  993. {
  994. TimeStr += "0" + H + "小时";
  995. }
  996. else
  997. {
  998. TimeStr += H + "小时";
  999. }
  1000. }
  1001. if (m < 10)
  1002. {
  1003. TimeStr += "0" + m + "分钟";
  1004. }
  1005. else
  1006. {
  1007. TimeStr += m + "分钟";
  1008. }
  1009. Time = TimeStr;
  1010. Distance = GetDistResult.ToString() + "公里";
  1011. }
  1012. catch (Exception ex)
  1013. {
  1014. Time = "未知!";
  1015. Distance = "未知!";
  1016. }
  1017. trip += $"{time.ToString("HH:mm")} 搭乘专车前往市区({end_Object.AirPort} - {end_Object.City}市区 路程{Distance},耗时{Time})";
  1018. time = time.AddMinutes(GetGoogleResult); //到达市区时间
  1019. if (index == timeArr.Count - 1)
  1020. {
  1021. trip += "圆满结束此次访问之行!";
  1022. NewListTravel.Add(new Grp_TravelList
  1023. {
  1024. CreateTime = DateTime.Now,
  1025. CreateUserId = 0,
  1026. Diid = diid,
  1027. Date = Convert.ToDateTime(item).ToString("M月d日"),
  1028. Trip = trip,
  1029. WeekDay = weekDay,
  1030. Days = index,
  1031. Traffic_First = "飞机",
  1032. Traffic_Second = "汽车",
  1033. Diffgroup = 1,
  1034. Issel = 1,
  1035. IsDel = 0,
  1036. });
  1037. continue;
  1038. }
  1039. if (time.Day != fallToTime.Day) //超出一天
  1040. {
  1041. NewListTravel.Add(new Grp_TravelList
  1042. {
  1043. CreateTime = DateTime.Now,
  1044. CreateUserId = 0,
  1045. Diid = diid,
  1046. Date = Convert.ToDateTime(item).ToString("M月d日"),
  1047. Trip = trip,
  1048. WeekDay = weekDay,
  1049. Days = index,
  1050. Traffic_First = "飞机",
  1051. Traffic_Second = "汽车",
  1052. Diffgroup = 1,
  1053. Issel = 1,
  1054. IsDel = 0,
  1055. });
  1056. continue;
  1057. }
  1058. if (time.Hour < 9) // && (airArrive < new DateTime(airArrive.Year,airArrive.Month,airArrive.Day,6, 30, 0))
  1059. {
  1060. var nineTime = GetTimeGwInfo(ref listgw, new DateTime(time.Year,time.Month,time.Day,09,00,00),null);
  1061. var halfPasTen = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 10, 30, 00), null);
  1062. trip += @"
  1063. 09:00 公务活动;
  1064. 10:30 公务活动;";
  1065. if (!string.IsNullOrWhiteSpace(nineTime))
  1066. {
  1067. trip = trip.Replace("09:00 公务活动", nineTime);
  1068. }
  1069. if (!string.IsNullOrWhiteSpace(halfPasTen))
  1070. {
  1071. trip = trip.Replace("10:30 公务活动", halfPasTen);
  1072. }
  1073. }
  1074. else if (time.Hour < 10)
  1075. {
  1076. var halfPasTen = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 10, 30, 00), null);
  1077. trip += @"
  1078. 10:30 公务活动;";
  1079. if (!string.IsNullOrWhiteSpace(halfPasTen))
  1080. {
  1081. trip = trip.Replace("10:30 公务活动", halfPasTen);
  1082. }
  1083. }
  1084. if (time.Hour < 13)
  1085. {
  1086. trip += $"\r\n{time.ToString("HH:mm")} 午餐于当地餐厅;";
  1087. }
  1088. if (time < new DateTime(time.Year, time.Month, time.Day, 14, 30, 0))
  1089. {
  1090. var twoPointsPM = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 14, 00, 00), null);
  1091. var fourPointsPM = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 16, 00, 00), null);
  1092. trip += @"
  1093. 14:00 公务活动;
  1094. 16:00 公务活动;";
  1095. if (!string.IsNullOrWhiteSpace(twoPointsPM))
  1096. {
  1097. trip = trip.Replace("14:00 公务活动", twoPointsPM);
  1098. }
  1099. if (!string.IsNullOrWhiteSpace(fourPointsPM))
  1100. {
  1101. trip = trip.Replace("16:00 公务活动", fourPointsPM);
  1102. }
  1103. }
  1104. else if (time.Hour < 16)
  1105. {
  1106. var fourPointsPM = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 16, 00, 00), null);
  1107. trip += @"
  1108. 16:00 公务活动;";
  1109. if (!string.IsNullOrWhiteSpace(fourPointsPM))
  1110. {
  1111. trip = trip.Replace("16:00 公务活动", fourPointsPM);
  1112. }
  1113. }
  1114. if (time.Hour < 18)
  1115. {
  1116. trip += $"\r\n18:00 晚餐于当地餐厅;";
  1117. }
  1118. //time = time.AddHours(1);
  1119. //trip += $"\r\n{time.ToString("HH:mm")} 搭乘专车前往酒店,抵达后办理入住;";
  1120. }
  1121. else
  1122. {
  1123. var end_Object = db.Res_ThreeCode.FirstOrDefault(x => x.Three.ToUpper() == stopCity.ToUpper());
  1124. if (end_Object == null)
  1125. {
  1126. end_Object = new Res_ThreeCode()
  1127. {
  1128. AirPort = empty,
  1129. AirPort_En = empty,
  1130. City = empty,
  1131. Country = empty,
  1132. Four = empty,
  1133. Three = empty,
  1134. };
  1135. }
  1136. trip += $"{end_Object.City}\r\n";
  1137. trip += $@"08:00 早餐于酒店;{(lastHotel != null? $"(酒店名称:{lastHotel.HotelName})":"")}
  1138. 09:00 公务活动;
  1139. 10:30 公务活动;
  1140. 12:00 午餐于当地餐厅;
  1141. 14:00 公务活动;
  1142. 16:00 公务活动;
  1143. 18:00 晚餐于当地餐厅;
  1144. 19:00 入住酒店休息;";
  1145. var nineTime = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 09, 00, 00), end_Object.City);
  1146. var halfPasTen = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 10, 30, 00), end_Object.City);
  1147. var twoPointsPM = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 14, 00, 00), end_Object.City);
  1148. var fourPointsPM = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 16, 00, 00), end_Object.City);
  1149. if (!string.IsNullOrWhiteSpace(nineTime))
  1150. {
  1151. trip = trip.Replace("09:00 公务活动", nineTime);
  1152. }
  1153. if (!string.IsNullOrWhiteSpace(halfPasTen))
  1154. {
  1155. trip = trip.Replace("10:30 公务活动", halfPasTen);
  1156. }
  1157. if (!string.IsNullOrWhiteSpace(twoPointsPM))
  1158. {
  1159. trip = trip.Replace("14:00 公务活动", twoPointsPM);
  1160. }
  1161. if (!string.IsNullOrWhiteSpace(fourPointsPM))
  1162. {
  1163. trip = trip.Replace("16:00 公务活动", fourPointsPM);
  1164. }
  1165. }
  1166. string[] traffic = new string[] { "汽车", "飞机" };
  1167. if (!isMoreTraffic)
  1168. {
  1169. traffic = new string[] { "汽车", "" };
  1170. }
  1171. var htTime = DateTime.Now;
  1172. var htTimeOut = DateTime.Now;
  1173. foreach (var h in listht)
  1174. {
  1175. if (DateTime.TryParse(h.CheckInDate, out htTime) && DateTime.TryParse(h.CheckOutDate, out htTimeOut))
  1176. {
  1177. if (htTime <= Convert.ToDateTime(item)
  1178. && htTimeOut > Convert.ToDateTime(item))
  1179. {
  1180. lastHotel = h;
  1181. #region 酒店详细信息
  1182. //trip += "\r\n00:00 乘车前往酒店";
  1183. //trip += "\r\n00:00 抵达酒店办理入住手续";
  1184. //trip = trip + "\r\n"
  1185. //+ " 酒店名称:" + h.HotelName + "\r\n"
  1186. //+ " 酒店地址:" + h.HotelAddress + "\r\n"
  1187. //+ " 酒店电话:" + h.HotelTel + " 酒店传真:" + (string.IsNullOrWhiteSpace(h.HotelFax) ? "-" : h.HotelFax);
  1188. #endregion
  1189. }
  1190. }
  1191. }
  1192. NewListTravel.Add(new Grp_TravelList
  1193. {
  1194. CreateTime = DateTime.Now,
  1195. CreateUserId = 0,
  1196. Diid = diid,
  1197. Date = Convert.ToDateTime(item).ToString("M月d日"),
  1198. Trip = trip,
  1199. WeekDay = weekDay,
  1200. Days = index,
  1201. Traffic_First = traffic[0],
  1202. Traffic_Second = traffic[1],
  1203. Diffgroup = 1,
  1204. Issel = 1,
  1205. IsDel = 0,
  1206. });
  1207. index++;
  1208. }
  1209. NewListTravel.ForEach(x =>
  1210. {
  1211. x.Trip = x.Trip.Replace("\r\n14:00 公务活动;", string.Empty)
  1212. .Replace("\r\n16:00 公务活动;", string.Empty)
  1213. .Replace("\r\n09:00 公务活动;", string.Empty)
  1214. .Replace("\r\n10:30 公务活动;", string.Empty);
  1215. });
  1216. db.Grp_TravelList.AddRange(NewListTravel);
  1217. db.SaveChanges();
  1218. sw.Commit();
  1219. wt.Invoke("数据导入完成!");
  1220. }
  1221. }
  1222. catch (Exception ex)
  1223. {
  1224. wt.Invoke("请等待程序执行!");
  1225. }
  1226. });
  1227. threadExec.Start();
  1228. }
  1229. private delegate void ChildThreadExceptionHandler(string message);
  1230. private void btnOutput_Click(object sender, EventArgs e)
  1231. {
  1232. var diid = -1;
  1233. try
  1234. {
  1235. var dele = (comb_Delegation.SelectedItem as Grp_DelegationInfo);
  1236. diid = dele.Id;
  1237. }
  1238. catch (Exception)
  1239. {
  1240. //lblImport.Text = "请正确的选择团组!";
  1241. //lblImport.ForeColor = Color.Black;
  1242. MessageBoxEx.Show(this, "请正确的选择团组!", "提示");
  1243. return;
  1244. }
  1245. Grp_DelegationInfo di = db.Grp_DelegationInfo.FirstOrDefault(x => x.Id == diid && x.IsDel == 0);
  1246. if (di == null)
  1247. {
  1248. MessageBoxEx.Show(this,"请选择正确的团组!");
  1249. return;
  1250. }
  1251. var tripTempValue = tripItemSelect.SelectedValue;
  1252. if (!int.TryParse(tripTempValue.ToString(), out int tempValue))
  1253. {
  1254. MessageBoxEx.Show("请选择模板类型!");
  1255. return;
  1256. }
  1257. if (tempValue != 1)
  1258. {
  1259. execTemp(tempValue,diid, di);
  1260. return;
  1261. }
  1262. var _travelList = db.Grp_TravelList.Where(x=>x.IsDel == 0 && x.Diid == diid).ToList();
  1263. var city = GetAllCity(diid);
  1264. //创建数据源Table
  1265. DataTable dtSource = new DataTable();
  1266. dtSource.Columns.Add("Days", typeof(string));
  1267. dtSource.Columns.Add("Date", typeof(string));
  1268. dtSource.Columns.Add("Week", typeof(string));
  1269. dtSource.Columns.Add("Traffic", typeof(string));
  1270. dtSource.Columns.Add("Trip", typeof(string));
  1271. //获取数据,放到datatable
  1272. foreach (var item in _travelList)
  1273. {
  1274. DataRow dr = dtSource.NewRow();
  1275. dr["Days"] = item.Days;
  1276. dr["Date"] = item.Date;
  1277. dr["Week"] = item.WeekDay;
  1278. dr["Traffic"] = item.Traffic_First
  1279. + "\r\n"
  1280. + item.Traffic_Second;
  1281. dr["Trip"] = item.Trip;
  1282. dtSource.Rows.Add(dr);
  1283. }
  1284. Dictionary<string, string> dic = new Dictionary<string, string>();
  1285. dic.Add("Dele", di.TeamName.ToString() + GetNum(di.VisitDays.ToString()));
  1286. dic.Add("City", city);
  1287. dic.Add("Days", di.VisitDays.ToString());
  1288. dic.Add("DeleCode", di.TourCode);
  1289. dic.Add("Pnum", di.VisitPNumber.ToString());
  1290. dic.Add("Pnum2", di.VisitPNumber.ToString());
  1291. //模板路径
  1292. string tempPath = @"C:\日行程3.docx";
  1293. //载入模板
  1294. Document doc = null;
  1295. DocumentBuilder builder = null;
  1296. try
  1297. {
  1298. //载入模板
  1299. doc = new Document(tempPath);
  1300. builder = new DocumentBuilder(doc);
  1301. }
  1302. catch (Exception)
  1303. {
  1304. //载入模板
  1305. doc = new Document(@"D:\日行程3.docx");
  1306. builder = new DocumentBuilder(doc);
  1307. }
  1308. foreach (var key in dic.Keys)
  1309. {
  1310. Bookmark bookmark = doc.Range.Bookmarks[key];
  1311. if (bookmark != null)
  1312. {
  1313. builder.MoveToBookmark(key);
  1314. builder.Write(dic[key]);
  1315. }
  1316. }
  1317. //获取word里所有表格
  1318. NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);
  1319. //获取所填表格的序数
  1320. Aspose.Words.Tables.Table tableOne = allTables[0] as Aspose.Words.Tables.Table;
  1321. try
  1322. {
  1323. //循环赋值
  1324. for (int i = 0; i < dtSource.Rows.Count; i++)
  1325. {
  1326. builder.MoveToCell(0, i + 1, 0, 0);
  1327. builder.Write(dtSource.Rows[i]["Days"].ToString());
  1328. builder.MoveToCell(0, i + 1, 1, 0);
  1329. builder.Write(dtSource.Rows[i]["Date"].ToString() + "\r\n" + dtSource.Rows[i]["Week"].ToString());
  1330. builder.MoveToCell(0, i + 1, 2, 0);
  1331. builder.Write(dtSource.Rows[i]["Traffic"].ToString());
  1332. var trip = dtSource.Rows[i]["Trip"].ToString();
  1333. builder.MoveToCell(0, i + 1, 3, 0);
  1334. builder.Write(trip);
  1335. var cell = (Aspose.Words.Tables.Cell)doc.GetChild(NodeType.Cell, ((i + 2) * 4) - 1, true);
  1336. var paragraphs = cell.GetChildNodes(NodeType.Paragraph, true);
  1337. // 获取特定索引的段落
  1338. Paragraph paragraph = (Paragraph)paragraphs[0];
  1339. Run run = paragraph.Runs[0];
  1340. Aspose.Words.Font font = run.Font;
  1341. font.Name = "黑体";
  1342. //设置双休红色
  1343. cell = (Aspose.Words.Tables.Cell)doc.GetChild(NodeType.Cell, ((i + 2) * 4) - 3, true);
  1344. paragraphs = cell.GetChildNodes(NodeType.Paragraph, true);
  1345. paragraph = (Paragraph)paragraphs[1];
  1346. if (paragraph.GetText().Contains("星期六") || paragraph.GetText().Contains("星期日"))
  1347. {
  1348. run = paragraph.Runs[0];
  1349. font = run.Font;
  1350. font.Color = Color.Red;
  1351. }
  1352. }
  1353. }
  1354. catch (Exception ex)
  1355. {
  1356. MessageBoxEx.Show(this, "错误!" + ex.Message);
  1357. return ;
  1358. }
  1359. //删除多余行
  1360. while (tableOne.Rows.Count > 1 + dtSource.Rows.Count)
  1361. {
  1362. tableOne.Rows.RemoveAt(1 + dtSource.Rows.Count);//(1+dtSource.Rows.Count + 1)-1
  1363. }
  1364. string savePath = "C:\\OP行程单\\";
  1365. if (!Directory.Exists(savePath))
  1366. {
  1367. try
  1368. {
  1369. Directory.CreateDirectory(savePath);
  1370. }
  1371. catch
  1372. {
  1373. }
  1374. }
  1375. string strFileName = savePath + di.TeamName + "出访日程.docx";
  1376. try
  1377. {
  1378. doc.Save(strFileName, Aspose.Words.SaveFormat.Doc);
  1379. MessageBoxEx.Show(this, "文件导出完成!");
  1380. System.Diagnostics.Process.Start("Explorer.exe", "/select," + strFileName);
  1381. }
  1382. catch (Exception ex)
  1383. {
  1384. MessageBoxEx.Show(this, "请关闭打开的文件后重试!");
  1385. }
  1386. }
  1387. private string GetAllCity(int diid)
  1388. {
  1389. //城市缓存
  1390. string CityStr = string.Empty;
  1391. DataTable dtBlack = null;
  1392. try
  1393. {
  1394. dtBlack = GetTableByBlackCode(diid);
  1395. }
  1396. catch (Exception ex)
  1397. {
  1398. MessageBoxEx.Show(this, "黑屏代码有误!", "提示");
  1399. return CityStr;
  1400. }
  1401. if (dtBlack.Rows.Count != 0 && (!string.IsNullOrWhiteSpace(dtBlack.Rows[0][0].ToString())))
  1402. {
  1403. var cityThree = new List<string>();
  1404. foreach (DataRow item in dtBlack.Rows)
  1405. {
  1406. var three = item["Three"].ToString();
  1407. if (three.Length == 6)
  1408. {
  1409. var start = three.Substring(0, 3);
  1410. var end = three.Substring(3,3);
  1411. var lastEnd = string.Empty;
  1412. if (cityThree.Count != 0)
  1413. {
  1414. lastEnd = cityThree[cityThree.Count-1];
  1415. if (lastEnd != start)
  1416. {
  1417. cityThree.Add(start);
  1418. cityThree.Add(end);
  1419. }
  1420. else
  1421. {
  1422. cityThree.Add(end);
  1423. }
  1424. }
  1425. else
  1426. {
  1427. cityThree.Add(start);
  1428. cityThree.Add(end);
  1429. }
  1430. }
  1431. }
  1432. string sql = "select * from Res_ThreeCode a where a.isdel = 0 ";
  1433. if (cityThree .Count == 0)
  1434. {
  1435. sql += "and a.id in (0)";
  1436. }
  1437. else
  1438. {
  1439. sql += $"and a.Three in ('{ string.Join("','",cityThree)}')";
  1440. }
  1441. var resultArr = db.Res_ThreeCode.SqlQuery(sql).ToList();
  1442. cityThree.ForEach(x =>
  1443. {
  1444. var find = resultArr.Find(p => p.Three.ToUpper() == x.ToUpper());
  1445. CityStr += find == null ? $"【{x}三字码未收录】/" : find.City + "/";
  1446. });
  1447. CityStr = CityStr.TrimEnd('/');
  1448. }
  1449. return CityStr;
  1450. }
  1451. /// <summary>
  1452. ///根据机票黑屏代码整理DataTable
  1453. /// </summary>
  1454. /// <param name="diid"></param>
  1455. /// <returns></returns>
  1456. public DataTable GetTableByBlackCode(int diid)
  1457. {
  1458. //黑屏代码信息
  1459. List<Air_TicketBlackCode> listcode = db.Air_TicketBlackCode.Where(x => x.DiId == diid && x.IsDel == 0).ToList();
  1460. //测试数据为序号,航班号,起飞日期,三字码,起飞时刻,到达时刻,出发航站楼,到达航站楼,机型,飞行时间
  1461. //1.3U8391 TU17NOV CTUCAI 0220 0715 T1 T2 330 10H55M
  1462. DataTable dt = new DataTable();
  1463. dt.Columns.Add("Fliagtcode", typeof(string)); //航班号
  1464. dt.Columns.Add("Date", typeof(string));//起飞日期
  1465. dt.Columns.Add("Three", typeof(string));//三字码
  1466. dt.Columns.Add("StartTime", typeof(string));//起飞时刻
  1467. dt.Columns.Add("EndTime", typeof(string));//到达时刻
  1468. dt.Columns.Add("StartBuilding", typeof(string));//出发航站楼
  1469. dt.Columns.Add("EndBuilding", typeof(string));//到达航站楼
  1470. dt.Columns.Add("AirModel", typeof(string)); //机型
  1471. dt.Columns.Add("FlightTime", typeof(string));//飞行时间
  1472. dt.Columns.Add("Day", typeof(string));//整理的起飞日期;作为排序依据
  1473. dt.Columns.Add("ArrivedDate", typeof(string));//整理的到达日期
  1474. dt.Columns.Add("Error", typeof(string));//整理的到达日期
  1475. dt.Columns.Add("Sign", typeof(string));//标识:0表示为原生黑屏代码、1表示“+1”新增的黑屏代码
  1476. //添加转机标识 (中转写在第一趟航班)
  1477. dt.Columns.Add("isTransitShipment", typeof(bool));
  1478. //判断是否录入黑屏代码
  1479. if (listcode.Count() == 0 || listcode == null)
  1480. {
  1481. dt.Rows.Add(null, null, null, null, null, null, null, null, null, null, null, "黑屏代码未录入!", null , false);
  1482. }
  1483. else
  1484. {
  1485. //读取单段黑屏代码
  1486. for (int i = 0; i < listcode.Count; i++)
  1487. {
  1488. //去除序号
  1489. string[] CodeList = Regex.Split(listcode[i].BlackCode, "\\d+\\.", RegexOptions.IgnoreCase);
  1490. //去除多余空格,方法一Linq扩展方法
  1491. CodeList = CodeList.Where(str =>!string.IsNullOrWhiteSpace(str)).ToArray();
  1492. //读取单条黑屏代码
  1493. for (int j = 0; j < CodeList.Count(); j++)
  1494. {
  1495. //去除多余空格,方法二使用Split()方法进行分割,分割有一个选项是RemoveEmptyEntries
  1496. CodeList[j] = CodeList[j].Replace("\r\n", string.Empty).Replace("\\r\\n", string.Empty).TrimStart().TrimEnd();
  1497. string[] Info = CodeList[j].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
  1498. //去除多余空格
  1499. Info = Info.Where(str => !string.IsNullOrWhiteSpace(str)).ToArray();
  1500. //判断黑屏代码是否正确拆分; 理应拆成9段
  1501. if (Info.TakeWhile((x) =>
  1502. {
  1503. return !excludeArr.Contains(x);
  1504. }).Count() != 9)
  1505. {
  1506. dt.Rows.Add(null, null, null, null, null, null, null, null, null, null, null, "本团组第" + (i + 1) + "段黑屏代码中第" + (j + 1) + " 条有误,请联系机票同事核对", null, false);
  1507. //MessageBoxEx.Show("第" + (i + 1) + "段黑屏代码中第" + (j + 1) + " 条有误, 请联系机票同事核对");
  1508. return dt;
  1509. }
  1510. else
  1511. {
  1512. try
  1513. {
  1514. var monthEn = Info[1].Substring(4, 3);
  1515. //月
  1516. int month = Convert.ToInt32(GetLonger(monthEn));
  1517. //日
  1518. int day = Convert.ToInt32(Info[1].Substring(2, 2));
  1519. var time = new DateTime(DateTime.Now.Year, month, day); //
  1520. var isExist = Info.Contains("[中转]");
  1521. if (!isExist)
  1522. {
  1523. isExist = Info.Contains("[转机]");
  1524. }
  1525. //dt.Columns.Add("Fliagtcode", typeof(string)); //航班号
  1526. //dt.Columns.Add("Date", typeof(string));//起飞日期
  1527. //dt.Columns.Add("Three", typeof(string));//三字码
  1528. //dt.Columns.Add("StartTime", typeof(string));//起飞时刻
  1529. //dt.Columns.Add("EndTime", typeof(string));//到达时刻
  1530. //dt.Columns.Add("StartBuilding", typeof(string));//出发航站楼
  1531. //dt.Columns.Add("EndBuilding", typeof(string));//到达航站楼
  1532. //dt.Columns.Add("AirModel", typeof(string)); //机型
  1533. //dt.Columns.Add("FlightTime", typeof(string));//飞行时间
  1534. //dt.Columns.Add("Day", typeof(string));//整理的起飞日期;作为排序依据
  1535. //dt.Columns.Add("ArrivedDate", typeof(string));//整理的到达日期
  1536. //dt.Columns.Add("Error", typeof(string));//整理的到达日期
  1537. //dt.Columns.Add("Sign", typeof(string));//标识:0表示为原生黑屏代码、1表示“+1”新增的黑屏代码
  1538. dt.Rows.Add(Info[0],
  1539. Info[1],
  1540. Info[2],
  1541. Info[3],
  1542. Info[4],
  1543. Info[5],
  1544. Info[6],
  1545. Info[7],
  1546. Info[8],
  1547. time.ToString("yyyy-MM-dd"),
  1548. time.ToString("yyyy-MM-dd"),
  1549. "",
  1550. "0",
  1551. isExist
  1552. );
  1553. }
  1554. catch (Exception ex)
  1555. {
  1556. string exstr = ex.Message.ToString();
  1557. }
  1558. }
  1559. }
  1560. //排序
  1561. dt.DefaultView.Sort = "Day asc";
  1562. dt = dt.DefaultView.ToTable();
  1563. }
  1564. }
  1565. return dt;
  1566. }
  1567. public string GetLonger(string temp)
  1568. {
  1569. string str = "";
  1570. switch (temp.ToUpper())
  1571. {
  1572. case "美元":
  1573. str = "USD";
  1574. break;
  1575. case "日元":
  1576. str = "JPY";
  1577. break;
  1578. case "英镑":
  1579. str = "GBP";
  1580. break;
  1581. case "欧元":
  1582. str = "EUR";
  1583. break;
  1584. case "港币":
  1585. str = "HKD";
  1586. break;
  1587. case "MO":
  1588. str = "星期一";
  1589. break;
  1590. case "TU":
  1591. str = "星期二";
  1592. break;
  1593. case "WE":
  1594. str = "星期三";
  1595. break;
  1596. case "TH":
  1597. str = "星期四";
  1598. break;
  1599. case "FR":
  1600. str = "星期五";
  1601. break;
  1602. case "SA":
  1603. str = "星期六";
  1604. break;
  1605. case "SU":
  1606. str = "星期天";
  1607. break;
  1608. case "JAN":
  1609. str = "01";
  1610. break;
  1611. case "FEB":
  1612. str = "02";
  1613. break;
  1614. case "MAR":
  1615. str = "03";
  1616. break;
  1617. case "APR":
  1618. str = "04";
  1619. break;
  1620. case "MAY":
  1621. str = "05";
  1622. break;
  1623. case "JUN":
  1624. str = "06";
  1625. break;
  1626. case "JUL":
  1627. str = "07";
  1628. break;
  1629. case "AUG":
  1630. str = "08";
  1631. break;
  1632. case "SEP":
  1633. str = "09";
  1634. break;
  1635. case "OCT":
  1636. str = "10";
  1637. break;
  1638. case "NOV":
  1639. str = "11";
  1640. break;
  1641. case "DEC":
  1642. str = "12";
  1643. break;
  1644. case "MONDAY":
  1645. str = "星期一";
  1646. break;
  1647. case "TUESDAY":
  1648. str = "星期二";
  1649. break;
  1650. case "WEDNESDAY":
  1651. str = "星期三";
  1652. break;
  1653. case "THURSDAY":
  1654. str = "星期四";
  1655. break;
  1656. case "FRIDAY":
  1657. str = "星期五";
  1658. break;
  1659. case "SATURDAY":
  1660. str = "星期六";
  1661. break;
  1662. case "SUNDAY":
  1663. str = "星期日";
  1664. break;
  1665. case "01":
  1666. str = "JAN";
  1667. break;
  1668. case "02":
  1669. str = "FEB";
  1670. break;
  1671. case "03":
  1672. str = "MAR";
  1673. break;
  1674. case "04":
  1675. str = "APR";
  1676. break;
  1677. case "05":
  1678. str = "MAY";
  1679. break;
  1680. case "06":
  1681. str = "JUN";
  1682. break;
  1683. case "07":
  1684. str = "JUL";
  1685. break;
  1686. case "08":
  1687. str = "AUG";
  1688. break;
  1689. case "09":
  1690. str = "SEP";
  1691. break;
  1692. case "10":
  1693. str = "OCT";
  1694. break;
  1695. case "11":
  1696. str = "NOV";
  1697. break;
  1698. case "12":
  1699. str = "DEC";
  1700. break;
  1701. case "2":
  1702. str = "空客A";
  1703. break;
  1704. case "3":
  1705. str = "空客A";
  1706. break;
  1707. case "7":
  1708. str = "波音";
  1709. break;
  1710. }
  1711. return str;
  1712. }
  1713. public List<string> GetTimeListByDataTable(DataTable dt)
  1714. {
  1715. DateTime datestart = Convert.ToDateTime(dt.Rows[0]["Day"].ToString());
  1716. DateTime dateend = Convert.ToDateTime(dt.Rows[dt.Rows.Count - 1]["ArrivedDate"].ToString());
  1717. List<string> timeList = new List<string>();
  1718. while (datestart <= dateend)
  1719. {
  1720. timeList.Add(datestart.ToString("yyyy-MM-dd"));
  1721. datestart = datestart.AddDays(1);
  1722. }
  1723. return timeList;
  1724. }
  1725. public JObject GetDirectionByGoogleApi(string Origin, string Destination)
  1726. {
  1727. string appkey = "AIzaSyBdLf8u8DinXQWVPLEkdrxOJpClXSqEnho";
  1728. string url = "https://maps.googleapis.com/maps/api/directions/json?origin=" + Origin
  1729. + "&destination=" + Destination + "&key=" + appkey;
  1730. JObject result = null;
  1731. try
  1732. {
  1733. #region 利用HttpWebRequest访问API
  1734. ////创建Web访问对象
  1735. //HttpWebRequest req = HttpWebRequest.Create(url) as HttpWebRequest;
  1736. //req.Method = "GET";
  1737. //req.ContentType = "application/json";
  1738. ////创建web响应对象
  1739. //HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
  1740. ////通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
  1741. //StreamReader reader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8);
  1742. ////如果有编码问题就用这个方法
  1743. ////string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());
  1744. ////利用StreamReader就可以从响应内容从头读到尾
  1745. //string returnJson = reader.ReadToEnd();
  1746. ////反序列化
  1747. //result = JsonConvert.DeserializeObject(returnJson) as JObject;
  1748. #endregion
  1749. #region 利用HttpClient访问API
  1750. HttpClient myHttpClient = new HttpClient();
  1751. myHttpClient.Timeout = new TimeSpan(0,0,3);
  1752. HttpResponseMessage response = myHttpClient.GetAsync(url).Result;
  1753. //var content = response.Content.ReadAsAsync<object>().Result;
  1754. var content = response.Content.ReadAsStringAsync().Result;
  1755. result = JObject.Parse(content);
  1756. #endregion
  1757. return result;
  1758. }
  1759. catch (Exception e)
  1760. {
  1761. result = new JObject();
  1762. result.Add("code",-1);
  1763. result.Add("msg",e.Message);
  1764. return result;
  1765. }
  1766. }
  1767. bool IsShengGenGuo(string country,string toCountry)
  1768. {
  1769. bool isTrue = false;
  1770. string[] countries = {
  1771. "德国", "奥地利", "比利时", "捷克共和国", "丹麦", "斯洛伐克", "斯洛文尼亚", "西班牙",
  1772. "爱沙尼亚", "芬兰", "法国", "希腊", "匈牙利", "冰岛", "意大利", "拉脱维亚", "列支敦士登",
  1773. "立陶宛", "卢森堡", "马耳他", "荷兰", "挪威", "波兰", "葡萄牙", "瑞典", "瑞士"
  1774. };
  1775. if (countries.Contains(country) && countries.Contains(toCountry))
  1776. {
  1777. isTrue = true;
  1778. }
  1779. return isTrue;
  1780. }
  1781. private void btnOutputInfo_Click(object sender, EventArgs e)
  1782. {
  1783. btnImportInfo();
  1784. }
  1785. /// <summary>
  1786. /// 根据大写数字返回小写数字或根据小写数字返回大写数字
  1787. /// </summary>
  1788. /// <param name="num"></param>
  1789. /// <returns></returns>
  1790. public string GetNum(string num)
  1791. {
  1792. string str = "";
  1793. switch (num)
  1794. {
  1795. case "1":
  1796. str = "一";
  1797. break;
  1798. case "2":
  1799. str = "二";
  1800. break;
  1801. case "3":
  1802. str = "三";
  1803. break;
  1804. case "4":
  1805. str = "四";
  1806. break;
  1807. case "5":
  1808. str = "五";
  1809. break;
  1810. case "6":
  1811. str = "六";
  1812. break;
  1813. case "7":
  1814. str = "七";
  1815. break;
  1816. case "8":
  1817. str = "八";
  1818. break;
  1819. case "9":
  1820. str = "九";
  1821. break;
  1822. case "10":
  1823. str = "十";
  1824. break;
  1825. case "11":
  1826. str = "十一";
  1827. break;
  1828. case "12":
  1829. str = "十二";
  1830. break;
  1831. case "一":
  1832. str = "1";
  1833. break;
  1834. case "二":
  1835. str = "2";
  1836. break;
  1837. case "三":
  1838. str = "3";
  1839. break;
  1840. case "四":
  1841. str = "4";
  1842. break;
  1843. case "五":
  1844. str = "5";
  1845. break;
  1846. case "六":
  1847. str = "6";
  1848. break;
  1849. case "七":
  1850. str = "7";
  1851. break;
  1852. case "八":
  1853. str = "8";
  1854. break;
  1855. case "九":
  1856. str = "9";
  1857. break;
  1858. case "十":
  1859. str = "10";
  1860. break;
  1861. case "十一":
  1862. str = "11";
  1863. break;
  1864. case "十二":
  1865. str = "12";
  1866. break;
  1867. }
  1868. return str;
  1869. }
  1870. public GoogleApiFormat GetDirectionByGoogleApiFormat(string Origin, string Destination)
  1871. {
  1872. GoogleApiFormat rt = new GoogleApiFormat();
  1873. string Time = string.Empty;
  1874. string Distance = string.Empty;
  1875. int GetGoogleResult = 0;
  1876. int GetDistResult = 0;
  1877. JObject Result = null;
  1878. try
  1879. {
  1880. Result = GetDirectionByGoogleApi(Origin, Destination);
  1881. Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace(" ", "").Trim();
  1882. Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString().Replace(" ", "").Trim();
  1883. if (Time.Contains("hours"))
  1884. {
  1885. Time = Time.Replace("hours", "小时");
  1886. }
  1887. if (Time.Contains("hour"))
  1888. {
  1889. Time = Time.Replace("hour", "小时");
  1890. }
  1891. Time = Time.Replace("mins", "分钟");
  1892. if (Distance.Contains("mi"))
  1893. {
  1894. var distSp = Regex.Split(Distance, "mi");
  1895. if (distSp.Length > 0)
  1896. {
  1897. Distance = (decimal.Parse(distSp[0]) * conversion).ToString("#0.00") + " 公里";
  1898. }
  1899. }
  1900. if (Distance.Contains("km"))
  1901. {
  1902. Distance = Distance.Replace("km", "公里");
  1903. }
  1904. if (Time.Contains("小时"))
  1905. {
  1906. var xs = Regex.Split(Time, "小时");
  1907. var xsValue = int.Parse(xs[0]);
  1908. var fz = Regex.Split(xs[1], "分钟");
  1909. var fzValue = int.Parse(fz[0]);
  1910. GetGoogleResult = xsValue * 60;
  1911. GetGoogleResult += fzValue;
  1912. }
  1913. else if (Time.Contains("分钟"))
  1914. {
  1915. GetGoogleResult = int.Parse(Regex.Split(Time, "分钟")[0]);
  1916. }
  1917. if (Distance.Contains("公里"))
  1918. {
  1919. GetDistResult = (int)decimal.Parse(Regex.Split(Distance, "公里")[0]);
  1920. }
  1921. if (GetGoogleResult > 0 && GetGoogleResult % 5 != 0)
  1922. {
  1923. while (GetGoogleResult % 5 != 0)
  1924. {
  1925. GetGoogleResult++;
  1926. }
  1927. }
  1928. if (GetDistResult % 5 != 0 && GetDistResult > 0)
  1929. {
  1930. while (GetDistResult % 5 != 0)
  1931. {
  1932. GetDistResult++;
  1933. }
  1934. }
  1935. int H = (GetGoogleResult / 60);
  1936. int m = (GetGoogleResult % 60);
  1937. string TimeStr = string.Empty;
  1938. if (H != 0)
  1939. {
  1940. if (H < 10)
  1941. {
  1942. TimeStr += "0" + H + "小时";
  1943. }
  1944. else
  1945. {
  1946. TimeStr += H + "小时";
  1947. }
  1948. }
  1949. if (m < 10)
  1950. {
  1951. TimeStr += "0" + m + "分钟";
  1952. }
  1953. else
  1954. {
  1955. TimeStr += m + "分钟";
  1956. }
  1957. Time = TimeStr;
  1958. Distance = GetDistResult.ToString() + "公里";
  1959. rt.Time = Time;
  1960. rt.Distance = Distance;
  1961. rt.isTrue = true;
  1962. rt.GetGoogleResult = GetDistResult;
  1963. rt.GetDistResult = GetDistResult;
  1964. }
  1965. catch (Exception ex)
  1966. {
  1967. Time = "未知!";
  1968. Distance = "未知!";
  1969. rt.Time = Time;
  1970. rt.Distance = Distance;
  1971. rt.isTrue = false;
  1972. rt.GetGoogleResult = 0;
  1973. }
  1974. return rt;
  1975. }
  1976. string GetTimeGwInfo(ref List<Res_OfficialActivities> listgw, DateTime gwTime, string nowCity)
  1977. {
  1978. List<Res_OfficialActivitiesFormat> formatResGw = listgw.Select(x => new Res_OfficialActivitiesFormat
  1979. {
  1980. Address = x.Address,
  1981. Attendees = x.Attendees,
  1982. Client = x.Client,
  1983. Contact = x.Contact,
  1984. Date = x.Date,
  1985. DiId = x.DiId,
  1986. CreateTime = x.CreateTime,
  1987. CreateUserId = x.CreateUserId,
  1988. DeleteTime = x.DeleteTime,
  1989. DeleteUserId = x.DeleteUserId,
  1990. Dresscode = x.Dresscode,
  1991. Id = x.Id,
  1992. IsDel = x.IsDel,
  1993. IsNeedTrans = x.IsNeedTrans,
  1994. IsPay = x.IsPay,
  1995. IsSubmitApproval = x.IsSubmitApproval,
  1996. Job = x.Job,
  1997. language = x.language,
  1998. OfficialForm = x.OfficialForm,
  1999. Remark = x.Remark,
  2000. Setting = x.Setting,
  2001. Tel = x.Tel,
  2002. Time = x.Time,
  2003. Translators = x.Translators,
  2004. Trip = x.Trip,
  2005. Type = x.Type,
  2006. Area = x.Area,
  2007. Country = x.Country,
  2008. Field = x.Field,
  2009. ReqSample = x.ReqSample,
  2010. }).ToList();
  2011. string info = string.Empty;
  2012. List<Res_OfficialActivitiesFormat> dayArr = new List<Res_OfficialActivitiesFormat>();
  2013. Res_OfficialActivitiesFormat gl = null;
  2014. DateTime newGwTime = DateTime.Now;
  2015. foreach (var g in formatResGw)
  2016. {
  2017. var parseTime = g.GetDateTime;
  2018. if (parseTime.Year == gwTime.Year && parseTime.Month == gwTime.Month && parseTime.Day == gwTime.Day)
  2019. {
  2020. dayArr.Add(g);
  2021. }
  2022. }
  2023. var isFindTimeGw = false;
  2024. foreach (var g in dayArr)
  2025. {
  2026. var thisData = g.GetDateTime;
  2027. if (thisData.Hour == gwTime.Hour && thisData.Minute == gwTime.Hour)
  2028. {
  2029. isFindTimeGw = true;
  2030. newGwTime = thisData;
  2031. info += $"{thisData.ToString("HH:mm")} 拜访{g.Client},联系人{g.Contact},电话{g.Tel}, 地址{g.Address}" +
  2032. $"着装要求{g.Dresscode},是否需要翻译{(g.IsNeedTrans == null || g.IsNeedTrans == 0 ? "不需要翻译人员" : "需要翻译人员翻译语种为" + g.language)},议题:- ";
  2033. listgw.Remove(listgw.Find(x => x.Id == g.Id));
  2034. gl = g;
  2035. break;
  2036. }
  2037. }
  2038. //查询时间最接近的
  2039. if (!isFindTimeGw)
  2040. {
  2041. var g = dayArr.OrderBy(x =>
  2042. {
  2043. return (x.GetDateTime - gwTime).Duration();
  2044. }).FirstOrDefault();
  2045. if (g != null)
  2046. {
  2047. var thisData = g.GetDateTime;
  2048. if ((thisData - gwTime) < new TimeSpan(1,30,0))
  2049. {
  2050. isFindTimeGw = true;
  2051. newGwTime = thisData;
  2052. info += $"{thisData.ToString("HH:mm")} 拜访{g.Client},联系人{g.Contact},电话{g.Tel}, 地址{g.Address}" +
  2053. $"着装要求{g.Dresscode},是否需要翻译{(g.IsNeedTrans == null || g.IsNeedTrans == 0 ? "不需要翻译人员" : "需要翻译人员翻译语种为" + g.language)},议题:- ";
  2054. listgw.Remove(listgw.Find(x => x.Id == g.Id));
  2055. gl = g;
  2056. }
  2057. }
  2058. }
  2059. //判断是否在一个城市
  2060. if (isFindTimeGw && gl != null && !string.IsNullOrEmpty(gl.Area))
  2061. {
  2062. if (gl.Area.Contains(nowCity))
  2063. {
  2064. }
  2065. else
  2066. {
  2067. var ApiResult = GetDirectionByGoogleApiFormat(nowCity + "市区", gl.Area);
  2068. info = info.Insert(0, $"{newGwTime.AddHours(-1).ToString("HH:mm")} 搭乘专车前往{gl.Area}(路程约{ApiResult.Distance},距离约{ApiResult.Time})\r\n");
  2069. }
  2070. }
  2071. return info;
  2072. }
  2073. void CheckAndCenterParagraphs(Document doc)
  2074. {
  2075. // 遍历文档中的所有段落
  2076. foreach (Paragraph para in doc.GetChildNodes(NodeType.Paragraph, true))
  2077. {
  2078. // 获取段落的文本
  2079. string paragraphText = para.GetText();
  2080. // 检查段落的文本是否为“下午”或“上午”
  2081. if (paragraphText.Trim().Equals("下午") || paragraphText.Trim().Equals("上午"))
  2082. {
  2083. // 设置段落格式为居中对齐
  2084. para.ParagraphFormat.Alignment = ParagraphAlignment.Center;
  2085. }
  2086. }
  2087. }
  2088. }
  2089. public class GoogleApiFormat
  2090. {
  2091. public bool isTrue { get; set; } = false;
  2092. public string Time { get; set; }
  2093. public string Distance { get; set; }
  2094. public int GetDistResult { get; set; }
  2095. public int GetGoogleResult { get; set; }
  2096. }
  2097. public class Res_OfficialActivitiesFormat : Res_OfficialActivities
  2098. {
  2099. public DateTime GetDateTime
  2100. {
  2101. get
  2102. {
  2103. DateTime.TryParse(this.Date, out DateTime Data);
  2104. //if (this.Date.Contains("T16:"))
  2105. //{
  2106. // Data = Data.AddDays(1);
  2107. //}
  2108. Regex rg = new Regex("[0-9]+");
  2109. var gwTimeHHMM = this.Time;
  2110. var gwTimeHHMMMatch = rg.Matches(gwTimeHHMM);
  2111. if (gwTimeHHMMMatch.Count > 1)
  2112. {
  2113. Data = Data.AddHours(int.Parse(gwTimeHHMMMatch[0].Value));
  2114. Data = Data.AddMinutes(int.Parse(gwTimeHHMMMatch[1].Value));
  2115. }
  2116. return Data;
  2117. }
  2118. }
  2119. }
  2120. }