| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515 |
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using Newtonsoft.Json.Linq;
- using Newtonsoft.Json;
- using System.Net.Http;
- using System.Drawing;
- using Aspose.Words;
- using System.IO;
- using System.Threading;
- using travelExport.utility;
- using DiffMatchPatch;
- using Aspose.Words.Tables;
- using System.Configuration;
- namespace travelExport
- {
- public partial class Home : Form
- {
- // 使用工厂模式创建数据库上下文
- private oa2023DBEntities CreateDbContext()
- {
- var db = new oa2023DBEntities();
- // 禁用延迟加载
- db.Configuration.LazyLoadingEnabled = false;
- // 禁用代理创建
- db.Configuration.ProxyCreationEnabled = false;
- return db;
- }
- // 封装数据库操作方法
- private T ExecuteDbContext<T>(Func<oa2023DBEntities, T> action)
- {
- using (var db = CreateDbContext())
- {
- return action(db);
- }
- }
- //db上下文问题/。。。。
- //readonly static oa2023DBEntities db = new oa2023DBEntities();
- static List<Grp_DelegationInfo> soure = new List<Grp_DelegationInfo>();
- readonly static string[] weekdays = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
- const decimal conversion = 1.61M;
- readonly static string[] excludeArr = new string[] { "[中转]", "[转机]" };
- public List<TripItem> dropDownItem = new List<TripItem>
- {
- new TripItem
- {
- Id = 1,
- Name = "默认行程模板",
- Path = "C:\\日行程3.docx#D:\\日行程3.docx"
- },
- new TripItem
- {
- Id = 2,
- Name = "贵州行程模板",
- Path = "C:\\贵州行程模板.docx#D:\\贵州行程模板.docx"
- },
- new TripItem
- {
- Id = 1,
- Name = "重庆行程模板",
- Path = "C:\\日行程3.docx#D:\\日行程3.docx"
- },
- };
- public class TripItem
- {
- public int Id { get; set; }
- public string Name { get; set; }
- public string Path { get; set; }
- }
- public enum textTypeEnum
- {
- 标题 = 0, 内容 = 1
- };
- public class textType
- {
- public textTypeEnum Type { get; set; }
- public string Value { get; set; }
- }
- public Home()
- {
- InitializeComponent();
- Task.Run(() =>
- {
- if (versions.checkVersions())
- {
- // 在主线程中显示消息框
- this.Invoke((MethodInvoker)delegate
- {
- var result = MessageBoxEx.Show(this, "有新版本可用,是否更新!", "更新提示!", MessageBoxButtons.YesNo);
- // 这里可以处理用户点击按钮后的逻辑
- HandleUpdateResponse(result);
- });
- }
- });
- }
- private void HandleUpdateResponse(DialogResult result)
- {
- // 处理用户的选择
- if (result == DialogResult.Yes)
- {
- // 用户选择"是",进行更新
- }
- else
- {
- // 用户选择"否",不进行更新
- }
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- airCheckbox.AutoCheck = false;
- gwCheckbox.AutoCheck = false;
- hotelCheckbox.AutoCheck = false;
- // 使用封装的方法执行查询
- soure = ExecuteDbContext(db =>
- db.Grp_DelegationInfo
- .AsNoTracking()
- .Where(x => x.IsDel == 0)
- .ToList()
- );
- comb_Delegation.ValueMember = "Id";
- comb_Delegation.DisplayMember = "TeamName";
- comb_Delegation.Items.AddRange(soure.ToArray());
- comb_Delegation.DropDownHeight = 200;
- comb_Delegation.MouseClick += comb_Delegation_MouseClick;
- comb_Delegation.TextUpdate += comb_Delegation_TextUpdate;
- comb_Delegation.SelectedValueChanged += comb_Delegation_SelectedValueChanged;
- FormBorderStyle = FormBorderStyle.FixedSingle;
- MinimizeBox = false;
- MaximizeBox = false;
- tripItemSelect.DataSource = dropDownItem;
- tripItemSelect.ValueMember = "Id";
- tripItemSelect.DisplayMember = "Name";
- tripItemSelect.DropDownStyle = ComboBoxStyle.DropDownList;
- }
- private void comb_Delegation_SelectedValueChanged(object sender, EventArgs e)
- {
- var diid = -1;
- try
- {
- var dele = (comb_Delegation.SelectedItem as Grp_DelegationInfo);
- diid = dele.Id;
- QueryDbData(diid);
- }
- catch (Exception)
- {
- return;
- }
- }
- private void comb_Delegation_MouseClick(object sender, MouseEventArgs e)
- {
- comb_Delegation.Text = "";
- comb_Delegation_TextUpdate(sender, e);
- comb_Delegation.DropDownHeight = 200;
- comb_Delegation.DroppedDown = true;
- }
- private void comb_Delegation_TextUpdate(object sender, EventArgs e)
- {
- ComboBox cb = (ComboBox)sender;
- cb.DataSource = null;
- cb.Items.Clear();
- string s = cb.Text;
- var bindList = soure.Where(item => item.TeamName != null && item.TeamName.Contains(s)).ToList();
- if (bindList.Count >= 1) // 存在符合条件的内容
- {
- this.comb_Delegation.Items.AddRange(bindList.ToArray());
- }
- else
- {
- this.comb_Delegation.Items.Add(new Grp_DelegationInfo { TeamName = "", Id = -1 });
- }
- cb.SelectionStart = cb.Text.Length; // 设置光标位置,若不设置:光标位置始终保持在第一列,造成输入关键词的倒序排列
- cb.Cursor = Cursors.Default; //保持鼠标指针原来状态,有时候鼠标指针会被下拉框覆盖,所以要进行一次设置
- cb.MaxDropDownItems = 8; // 自动弹出下拉框
- }
- //导入简要行程
- private async void btnImport_Click(object sender, EventArgs e)
- {
- var tripTempValue = tripItemSelect.SelectedValue;
- if (!int.TryParse(tripTempValue.ToString(), out int tempValue))
- {
- MessageBoxEx.Show("请选择模板类型!");
- return;
- }
- var diid = -1;
- try
- {
- var dele = (comb_Delegation.SelectedItem as Grp_DelegationInfo);
- diid = dele.Id;
- }
- catch (Exception)
- {
- //lblImport.Text = "请正确的选择团组!";
- //lblImport.ForeColor = Color.Black;
- MessageBoxEx.Show(this, "请正确的选择团组!", "提示");
- return;
- }
- var selectTemp = tripItemSelect.SelectedItem as TripItem;
- var isChongQing = selectTemp.Name == "重庆行程模板";
- var codeId = -1;
- try
- {
- if (!int.TryParse(SublevelComboBox.SelectedValue.ToString(), out codeId))
- {
- throw new Exception();
- }
- }
- catch (Exception)
- {
- MessageBoxEx.Show(this, "请正确的选择黑屏代码!", "提示");
- return;
- }
- //GetAllCity(diid);
- DataTable resultTable = null;
- try
- {
- resultTable = GetTableByBlackCode(diid, codeId);
- }
- catch (Exception ex)
- {
- MessageBoxEx.Show(this, "黑屏代码有误!" + ex.Message, "提示");
- return;
- }
- if (resultTable.Rows.Count == 0 || string.IsNullOrWhiteSpace(resultTable.Rows[0][1].ToString()))
- {
- MessageBoxEx.Show(this, "黑屏代码有误! ", "提示");
- return;
- }
- foreach (DataRow row in resultTable.Rows)
- {
- if (!string.IsNullOrWhiteSpace(row["Error"].ToString()))
- {
- MessageBoxEx.Show(this, "黑屏代码有误! " + row["Error"].ToString(), "提示");
- return;
- }
- }
- var isVPN = await Task.Run(() =>
- {
- var isVpn = GetDirectionByGoogleApi("北京", "上海");
- if (Convert.ToInt32(isVpn["code"]) == -1)
- {
- return false;
- }
- return true;
- });
- if (!isVPN) { MessageBoxEx.Show(this, "请打开VPN!"); return; }
- var timeArr = GetTimeListByDataTable(resultTable);
- ChildThreadExceptionHandler wt = new
- ChildThreadExceptionHandler((msg) =>
- {
- if (this.InvokeRequired)
- {
- this.Invoke(new Action(() =>
- {
- MessageBoxEx.Show(this, msg);
- }));
- }
- else
- {
- MessageBoxEx.Show(this, msg);
- }
- });
- //本团行程单数据
- List<Grp_TravelList> listTravel = ExecuteDbContext((db => { return db.Grp_TravelList.AsNoTracking().Where(x => x.Diid == diid && x.IsDel == 0).ToList(); }));
- var tags = CheckAndCenterTags(diid);
- Thread threadExec = new Thread(() =>
- {
- var lockTaken = Monitor.TryEnter(Key, TimeSpan.FromMilliseconds(1));
- if (lockTaken)
- {
- try
- {
- using (var db = new oa2023DBEntities())
- {
- using (var sw = db.Database.BeginTransaction())
- {
- var NewListTravel = new List<Grp_TravelList>();
- var index = 1;
- var stopCity = string.Empty;
- var nextDayNum = 0;
- var nextTrip = string.Empty;
- Res_ThreeCode stopCity_Object = null;
- Res_ThreeCode playCity_Object = null;
- bool isTrade = false;
- foreach (var item in timeArr)
- {
- string tripGuiZhou = string.Empty;
- string trip = string.Empty;
- string weekDay = string.Empty;
- DateTime time = DateTime.Now;
- if (DateTime.TryParse(item, out time))
- {
- weekDay = weekdays[(int)time.DayOfWeek];
- }
- else
- {
- weekDay = "日期格式不正确!";
- }
- var empty = "【未收入该三字码!请机票同事录入】";
- var tabSelect = resultTable.Select(string.Format("Day = '{0}'", item));
- var isMoreTraffic = false;
- if (nextDayNum > 0)
- {
- trip += nextTrip;
- nextDayNum--;
- if (nextDayNum > 0)
- {
- NewListTravel.Add(new Grp_TravelList
- {
- CreateTime = DateTime.Now,
- CreateUserId = 0,
- Diid = diid,
- Date = Convert.ToDateTime(item).ToString("M月d日"),
- Trip = $"{playCity_Object.City}/{stopCity_Object.City}\r\n飞行中",
- WeekDay = weekDay,
- Days = index,
- Traffic_First = "飞机",
- Traffic_Second = "汽车",
- Diffgroup = 1,
- Issel = 1,
- IsDel = 0,
- });
- index++;
- continue;
- }
- else
- {
- nextTrip = string.Empty;
- }
- }
- if (tabSelect.Length > 0)
- {
- isMoreTraffic = true;
- var takeOffTime = DateTime.Parse(item);
- var fallToTime = DateTime.Parse(item);
- Res_ThreeCode start_Object = null;
- Res_ThreeCode end_Object = null;
- foreach (var tabRow in tabSelect)
- {
- if (nextDayNum == 0)
- {
- nextDayNum = Convert.ToInt32(tabRow["Sign"]);
- }
- takeOffTime = DateTime.Parse(item);
- fallToTime = DateTime.Parse(item);
- var takeOff = tabRow["StartTime"].ToString();
- var fallTo = tabRow["EndTime"].ToString();
- takeOffTime = takeOffTime.AddHours(int.Parse(takeOff.Substring(0, 2)));
- takeOffTime = takeOffTime.AddMinutes(int.Parse(takeOff.Substring(2, 2)));
- fallToTime = fallToTime.AddHours(int.Parse(fallTo.Substring(0, 2)));
- fallToTime = fallToTime.AddMinutes(int.Parse(fallTo.Substring(2, 2)));
- var threeCode = tabRow["Three"].ToString();
- var start = threeCode.Substring(0, 3);
- var end = threeCode.Substring(3, 3);
- stopCity = end;
- start_Object = db.Res_ThreeCode.FirstOrDefault(x => x.Three.ToUpper() == start.ToUpper());
- end_Object = db.Res_ThreeCode.FirstOrDefault(x => x.Three.ToUpper() == end.ToUpper());
- if (start_Object == null)
- {
- start_Object = new Res_ThreeCode()
- {
- AirPort = empty,
- AirPort_En = empty,
- City = empty,
- Country = empty,
- Four = empty,
- Three = empty,
- };
- }
- if (end_Object == null)
- {
- end_Object = new Res_ThreeCode()
- {
- AirPort = empty,
- AirPort_En = empty,
- City = empty,
- Country = empty,
- Four = empty,
- Three = empty,
- };
- }
- stopCity_Object = end_Object;
- playCity_Object = start_Object;
- //航班号
- string flightcode = tabRow["Fliagtcode"].ToString();
- if (isTrade && !trip.EndsWith("\r\n") && !string.IsNullOrWhiteSpace(trip))
- {
- trip += "\r\n";
- }
- if (!string.IsNullOrWhiteSpace(trip) && tabSelect.First().Equals(item))
- {
- trip = trip.Insert(0, $"{start_Object.City}/{end_Object.City}\r\n");
- }
- else
- {
- trip += $"{start_Object.City}/{end_Object.City}\r\n";
- }
- if (!isTrade)
- {
- var dayBeforeTrip = string.Empty;
- if (index == 1)
- {
- if (takeOffTime.AddHours(-3).Day < takeOffTime.Day)
- {
- dayBeforeTrip += $"{takeOffTime.AddHours(-3).ToString("HH:mm")} 抵达{start_Object.AirPort}{tabRow["StartBuilding"].ToString().Trim()}航站楼,办理登机手续:";
- }
- else
- {
- trip += $"{takeOffTime.AddHours(-3).ToString("HH:mm")} 抵达{start_Object.AirPort}{tabRow["StartBuilding"].ToString().Trim()}航站楼,办理登机手续:\r\n";
- }
- }
- else if (index == timeArr.Count)
- {
- if (takeOffTime.AddHours(-3).Hour > 9 && takeOffTime.AddHours(-3).Day == takeOffTime.Day)
- {
- trip += "08:00 早餐于酒店;\r\n";
- }
- if (takeOffTime.AddHours(-3).Day == takeOffTime.Day)
- {
- trip += $"{takeOffTime.AddHours(-3).ToString("HH:mm")} 抵达{start_Object.AirPort}{tabRow["StartBuilding"].ToString().Trim()}航站楼,办理登机手续:\r\n";
- }
- else
- {
- foreach (var newTravel in NewListTravel)
- {
- if (newTravel.Days == --index)
- {
- newTravel.Trip += $"\r\n{takeOffTime.AddHours(-3).ToString("HH:mm")} 抵达{start_Object.AirPort}{tabRow["StartBuilding"].ToString().Trim()}航站楼,办理登机手续:";
- break;
- }
- }
- }
- }
- else
- {
- if (takeOffTime.AddHours(-2).Hour > 9 && takeOffTime.AddHours(-2).Day == takeOffTime.Day)
- {
- trip += "08:00 早餐于酒店;\r\n";
- }
- if (takeOffTime.Hour >= 12)
- {
- trip += "09:00 公务活动;\r\n";
- }
- if (takeOffTime.Hour > 14)
- {
- trip += "10:30 公务活动;\r\n";
- }
- if (takeOffTime.Hour > 15)
- {
- trip += "12:00 午餐于当地餐厅;\r\n";
- trip += "14:00 公务活动;\r\n";
- }
- if (takeOffTime.Hour > 17)
- {
- trip += "16:00 公务活动;\r\n";
- }
- //--提前俩个小时
- trip += $"{takeOffTime.AddHours(-2).ToString("HH:mm")} 抵达{start_Object.AirPort}{tabRow["StartBuilding"].ToString().Trim()}航站楼,办理登机手续:\r\n";
- }
- if (!string.IsNullOrWhiteSpace(dayBeforeTrip))
- {
- {
- NewListTravel.Insert(0, new Grp_TravelList
- {
- CreateTime = DateTime.Now,
- CreateUserId = 0,
- Diid = diid,
- Date = Convert.ToDateTime(item).AddDays(-1).ToString("M月d日"),
- Trip = $"{start_Object.City}\r\n{dayBeforeTrip}",
- WeekDay = weekdays[(int)time.AddDays(-1).DayOfWeek],
- Days = 0,
- Traffic_First = "汽车",
- Traffic_Second = "",
- Diffgroup = 1,
- Issel = 1,
- IsDel = 0,
- });
- }
- }
- }
- var aircompany = db.Res_AirCompany.FirstOrDefault(x => x.ShortCode.ToUpper() == flightcode.Substring(0, 2).ToUpper() && x.IsDel == 0);
- var hsEmpty = "【此航司" + flightcode.Substring(0, 2).ToUpper() + "未收录,请机票同事录入】";
- if (aircompany == null)
- {
- aircompany = new Res_AirCompany
- {
- CnName = hsEmpty,
- EnName = hsEmpty,
- ShortCode = hsEmpty,
- };
- }
- //机型判断
- string airModel = tabRow["AirModel"].ToString();
- airModel = GetLonger(airModel.Substring(0, 1)) + airModel;
- string flightTime = tabRow["FlightTime"].ToString();
- #region 旧时间处理
- //if (flightTime.Contains(":"))
- //{
- // flightTime = flightTime.Replace(":", "小时");
- // flightTime += "分钟";
- //}
- //if (flightTime.Contains("H"))
- //{
- // flightTime = flightTime.Replace("H", "小时");
- //}
- //if (flightTime.Contains("M"))
- //{
- // flightTime = flightTime.Replace("M", "分钟");
- //}
- #endregion
- flightTime = ParseBlackTime(flightTime);
- 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";
- tripGuiZhou += $"{takeOffTime.ToString("HH:mm")} 乘坐{aircompany.CnName}从{start_Object.City}{start_Object.AirPort}飞往{end_Object.City}{end_Object.AirPort};\r\n";
- isTrade = Convert.ToBoolean(tabRow["isTransitShipment"]);
- tripGuiZhou += $"{fallToTime.ToString("HH:mm")} 到达{end_Object.AirPort}\r\n";
- if (isTrade)
- {
- if (nextDayNum > 0)
- {
- nextTrip += $"{fallToTime.ToString("HH:mm")} 抵达{end_Object.AirPort}{tabRow["EndBuilding"].ToString().Trim()}航站楼(中转时间:行李直达);\r\n";
- }
- else
- {
- trip += $"{fallToTime.ToString("HH:mm")} 抵达{end_Object.AirPort}{tabRow["EndBuilding"].ToString().Trim()}航站楼(中转时间:行李直达);\r\n";
- }
- }
- else
- {
- if (nextDayNum > 0)
- {
- nextTrip += $"{fallToTime.ToString("HH:mm")} 抵达{end_Object.AirPort}{tabRow["EndBuilding"].ToString().Trim()}航站楼,办理入境手续,之后前往提取行李;\r\n";
- if (timeArr.Last().Equals(item))
- {
- nextTrip = $"{fallToTime.ToString("HH:mm")} 抵达{end_Object.AirPort}{tabRow["EndBuilding"].ToString().Trim()}航站楼,办理入境手续,之后前往提取行李,圆满结束此次访问之行!";
- }
- }
- else
- {
- trip += $"{fallToTime.ToString("HH:mm")} 抵达{end_Object.AirPort}{tabRow["EndBuilding"].ToString().Trim()}航站楼,办理入境手续,之后前往提取行李;\r\n";
- }
- }
- }
- //var airArrive = fallToTime; //航班落地时间
- time = fallToTime.AddHours(1.5); //出机场一个半小时
- string Time = string.Empty;
- string Distance = string.Empty;
- int GetGoogleResult = 0;
- int GetDistResult = 0;
- JObject Result = null;
- try
- {
- Result = GetDirectionByGoogleApi(end_Object.AirPort, end_Object.City + "市区");
- Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace(" ", "").Trim();
- Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString().Replace(" ", "").Trim();
- #region 旧Google时间路程处理
- //if (Time.Contains("hours"))
- //{
- // Time = Time.Replace("hours", "小时");
- //}
- //if (Time.Contains("hour"))
- //{
- // Time = Time.Replace("hour", "小时");
- //}
- //Time = Time.Replace("mins", "分钟");
- //if (Distance.Contains("mi"))
- //{
- // var distSp = Regex.Split(Distance, "mi");
- // if (distSp.Length > 0)
- // {
- // Distance = (decimal.Parse(distSp[0]) * conversion).ToString("#0.00") + " 公里";
- // }
- //}
- //if (Distance.Contains("km"))
- //{
- // Distance = Distance.Replace("km", "公里");
- //}
- //if (Time.Contains("小时"))
- //{
- // var xs = Regex.Split(Time, "小时");
- // var xsValue = int.Parse(xs[0]);
- // var fz = Regex.Split(xs[1], "分钟");
- // var fzValue = int.Parse(fz[0]);
- // GetGoogleResult = xsValue * 60;
- // GetGoogleResult += fzValue;
- //}
- //else if (Time.Contains("分钟"))
- //{
- // GetGoogleResult = int.Parse(Regex.Split(Time, "分钟")[0]);
- //}
- //if (Distance.Contains("公里"))
- //{
- // GetDistResult = (int)decimal.Parse(Regex.Split(Distance, "公里")[0]);
- //}
- //if (GetGoogleResult > 0 && GetGoogleResult % 5 != 0)
- //{
- // while (GetGoogleResult % 5 != 0)
- // {
- // GetGoogleResult++;
- // }
- //}
- //if (GetDistResult % 5 != 0 && GetDistResult > 0)
- //{
- // while (GetDistResult % 5 != 0)
- // {
- // GetDistResult++;
- // }
- //}
- //int H = (GetGoogleResult / 60);
- //int m = (GetGoogleResult % 60);
- //string TimeStr = string.Empty;
- //if (H != 0)
- //{
- // if (H < 10)
- // {
- // TimeStr += "0" + H + "小时";
- // }
- // else
- // {
- // TimeStr += H + "小时";
- // }
- //}
- //if (m < 10)
- //{
- // TimeStr += "0" + m + "分钟";
- //}
- //else
- //{
- // TimeStr += m + "分钟";
- //}
- //Time = TimeStr;
- //Distance = GetDistResult.ToString() + "公里";
- #endregion
- // 替换单位为中文
- Time = Time.Replace("hours", "小时").Replace("hour", "小时").Replace("mins", "分钟");
- Distance = Distance.Contains("mi")
- ? (decimal.Parse(Distance.Split(new string[] { "mi" }, StringSplitOptions.None)[0]) * conversion).ToString("#0.00") + " 公里"
- : Distance.Replace("km", "公里");
- // 提取时间和距离的数值部分,并向上取5的倍数
- int timeMinutes = (int.Parse(ExtractDigitsBeforeDecimal(Time)) + 4) / 5 * 5;
- int distanceKm = (int.Parse(ExtractDigitsBeforeDecimal(Distance)) + 4) / 5 * 5;
- // 格式化时间
- string formattedTime = string.Empty;
- if (timeMinutes / 60 > 0) formattedTime = $"{(timeMinutes / 60):D2}小时{(timeMinutes % 60):D2}分钟";
- else formattedTime = $"{(timeMinutes % 60):D2}分钟";
- // 更新结果
- Time = formattedTime;
- Distance = $"{distanceKm}公里";
- GetGoogleResult = timeMinutes;
- }
- catch (Exception ex)
- {
- Time = "未知!";
- Distance = "未知!";
- }
- if (nextDayNum == 0)
- {
- if (index != timeArr.Count)
- {
- trip += $"{time.ToString("HH:mm")} 搭乘专车前往市区({end_Object.AirPort} - {end_Object.City}市区 路程{Distance},耗时{Time});";
- }
- if ((time > new DateTime(time.Year, time.Month, time.Day, 20, 30, 00) || time.AddMinutes(GetGoogleResult).Day > time.Day) && index != timeArr.Count)
- {
- trip += $"\r\n{time.AddMinutes(GetGoogleResult).ToString("HH:mm")} 入住酒店休息;";
- }
- time = time.AddMinutes(GetGoogleResult); //到达市区时间
- if (index != timeArr.Count)
- {
- tripGuiZhou += $"{fallToTime.AddMinutes(10).ToString("HH:mm")} ";
- tripGuiZhou += "从机场赴入住酒店";
- }
- if (index == timeArr.Count)
- {
- trip = trip.RemoveEnd("\r\n");
- if (trip.EndsWith(";"))
- {
- trip = trip.RemoveEnd(";");
- trip += ",";
- }
- trip += "圆满结束此次访问之行!";
- NewListTravel.Add(new Grp_TravelList
- {
- CreateTime = DateTime.Now,
- CreateUserId = 0,
- Diid = diid,
- Date = Convert.ToDateTime(item).ToString("M月d日"),
- Trip = tempValue == 1 ? trip : tempValue == 2 ? tripGuiZhou : "",
- WeekDay = weekDay,
- Days = index,
- Traffic_First = "飞机",
- Traffic_Second = "汽车",
- Diffgroup = 1,
- Issel = 1,
- IsDel = 0,
- });
- //if (footIsAddDay)
- //{
- // NewListTravel.Add(new Grp_TravelList
- // {
- // CreateTime = DateTime.Now,
- // CreateUserId = 0,
- // Diid = diid,
- // Date = Convert.ToDateTime(item).AddDays(1).ToString("M月d日"),
- // Trip = "",
- // WeekDay = weekdays[(int)time.AddDays(1).DayOfWeek],
- // Days = ++index,
- // Traffic_First = "飞机",
- // Traffic_Second = "汽车",
- // Diffgroup = 1,
- // Issel = 1,
- // IsDel = 0,
- // });
- //}
- continue;
- }
- if (time.Day != fallToTime.Day) //超出一天
- {
- NewListTravel.Add(new Grp_TravelList
- {
- CreateTime = DateTime.Now,
- CreateUserId = 0,
- Diid = diid,
- Date = Convert.ToDateTime(item).ToString("M月d日"),
- Trip = tempValue == 1 ? trip : tempValue == 2 ? tripGuiZhou : "",
- WeekDay = weekDay,
- Days = index,
- Traffic_First = "飞机",
- Traffic_Second = "汽车",
- Diffgroup = 1,
- Issel = 1,
- IsDel = 0,
- });
- index++;
- continue;
- }
- if (time.Hour < 9) // && (airArrive < new DateTime(airArrive.Year,airArrive.Month,airArrive.Day,6, 30, 0))
- {
- trip += @"
- 09:00 公务活动;
- 10:30 公务活动;";
- }
- else if (time.Hour < 10)
- {
- trip += @"
- 10:30 公务活动;";
- }
- if (time.Hour < 12)
- {
- trip += $"\r\n12:00 午餐于当地餐厅;";
- }
- if (time < new DateTime(time.Year, time.Month, time.Day, 14, 30, 0))
- {
- trip += @"
- 14:00 公务活动;
- 16:00 公务活动;";
- }
- else if (time.Hour < 16)
- {
- trip += @"
- 16:00 公务活动;";
- }
- if (time.Hour < 18)
- {
- trip += $"\r\n18:00 晚餐于当地餐厅;";
- }
- if (time.Hour < 19)
- {
- trip += $"\r\n19:00 入住酒店休息;";
- }
- }
- //time = time.AddHours(1);
- //trip += $"\r\n{time.ToString("HH:mm")} 搭乘专车前往酒店,抵达后办理入住;";
- }
- else
- {
- var end_Object = db.Res_ThreeCode.FirstOrDefault(x => x.Three.ToUpper() == stopCity.ToUpper());
- if (end_Object == null)
- {
- end_Object = new Res_ThreeCode()
- {
- AirPort = empty,
- AirPort_En = empty,
- City = empty,
- Country = empty,
- Four = empty,
- Three = empty,
- };
- }
- trip += $"{end_Object.City}\r\n";
- trip += @"08:00 早餐于酒店;
- 09:00 公务活动;
- 10:30 公务活动;
- 12:00 午餐于当地餐厅;
- 14:00 公务活动;
- 16:00 公务活动;
- 18:00 晚餐于当地餐厅;
- 19:00 入住酒店休息;";
- tripGuiZhou += $"上午\r\n08:30 从酒店出发\r\n09:00 公务活动\r\n12:00 返回酒店\r\n\r\n下午\r\n14:00 公务活动\r\n18:00 返回酒店";
- }
- string[] traffic = new string[] { "汽车", "飞机" };
- if (!isMoreTraffic)
- {
- traffic = new string[] { "汽车", "" };
- }
- NewListTravel.Add(new Grp_TravelList
- {
- CreateTime = DateTime.Now,
- CreateUserId = 0,
- Diid = diid,
- Date = Convert.ToDateTime(item).ToString("M月d日"),
- Trip = tempValue == 1 ? trip.RemoveEnd("\r\n") : tempValue == 2 ? tripGuiZhou : "",
- WeekDay = weekDay,
- Days = index,
- Traffic_First = traffic[0],
- Traffic_Second = traffic[1],
- Diffgroup = 1,
- Issel = 1,
- IsDel = 0,
- });
- index++;
- }
- if (nextDayNum > 0)
- {
- for (int i = 0; i < nextDayNum; i++)
- {
- NewListTravel.Add(new Grp_TravelList
- {
- CreateTime = DateTime.Now,
- CreateUserId = 0,
- Diid = diid,
- Date = Convert.ToDateTime(timeArr[timeArr.Count - 1]).AddDays(i + 1).ToString("M月d日"),
- Trip = $"{stopCity_Object.City}\r\n{nextTrip}",
- WeekDay = weekdays[(int)Convert.ToDateTime(timeArr[timeArr.Count - 1]).AddDays(i + 1).DayOfWeek],
- Days = index,
- Traffic_First = "飞机",
- Traffic_Second = "",
- Diffgroup = 1,
- Issel = 1,
- IsDel = 0,
- });
- }
- }
- //处理标记
- foreach (var item in tags)
- {
- bool isEnter = false;
- string QueryTag = item.QueryTag;
- if (QueryTag.Contains("\r\n\r\n"))
- {
- QueryTag = QueryTag.Replace("\r\n\r\n", "\r\n");
- isEnter = true;
- }
- var NewListTravelToTags = NewListTravel
- .Where(x => x.Trip.Contains(QueryTag)
- && x.Date == item.Date.ToString("M月d日"))
- .ToList();
- if (NewListTravelToTags.Count > 0 && !item.IsFinally)
- {
- foreach (var x in NewListTravelToTags)
- {
- var tagIndex = x.Trip.IndexOf(QueryTag);
- tagIndex += tagContent.tagLength;
- var insertStr = tagContent.TagFormat.Item1 + item.Content + tagContent.TagFormat.Item2;
- if (isEnter)
- {
- insertStr += "\r\n";
- }
- x.Trip = x.Trip.Insert(tagIndex, insertStr);
- NewListTravel.ForEach(x1 => { if (x.Date == x1.Date) { x1.Trip = x.Trip; } });
- break;
- }
- }
- else
- {
- foreach (var x in NewListTravel)
- {
- if (x.Date == item.Date.ToString("M月d日"))
- {
- x.Trip += "\r\n" + tagContent.TagFormat.Item1 + item.Content + tagContent.TagFormat.Item2;
- break;
- }
- }
- }
- }
- //比较上一次的文本
- //foreach (var newItem in NewListTravel)
- //{
- // foreach (var oldItem in listTravel)
- // {
- // if (newItem.Date == oldItem.Date)
- // {
- // oldItem.Trip = ReplaceNewlineIfNeeded(oldItem.Trip);
- // var str = CheckStr(oldItem.Trip, newItem.Trip);
- // newItem.Trip = str;
- // break;
- // }
- // }
- //}
- db.Grp_TravelList.RemoveRange(db.Grp_TravelList.Where(x => x.IsDel == 0 && x.Diid == diid));
- if (isChongQing)
- {
- foreach (var item in NewListTravel)
- {
- item.Trip = item.Trip.Replace("\r\n10:30 公务活动", "");
- }
- }
- db.Grp_TravelList.AddRange(NewListTravel);
- db.SaveChanges();
- sw.Commit();
- wt.Invoke("数据导入完成!");
- }
- }
- }
- catch (Exception ex)
- {
- wt.Invoke("ERROR!" + ex.Message);
- }
- finally
- {
- if (lockTaken)
- {
- Monitor.Exit(Key);
- }
- }
- }
- else
- {
- wt.Invoke("请勿重复点击!");
- }
- });
- threadExec.Start();
- }
- private void QueryDbData(int diid)
- {
- Task.Run(() =>
- {
- using (var db = CreateDbContext())
- {
- //机票行程数据
- var listAir = db.Air_TicketBlackCode
- .Where(x => x.DiId == diid && x.IsDel == 0)
- .ToList();
- var count = 1;
- foreach (var item in listAir)
- {
- if (string.IsNullOrWhiteSpace(item.Title))
- {
- item.Title = "未设置名称数据" + count;
- }
- count++;
- }
- //本团酒店信息
- var listht = db.Grp_HotelReservations.Where(x => x.DiId == diid && x.IsDel == 0).ToList();
- //公务出访信息
- var listgw = db.Res_OfficialActivities.Where(x => x.DiId == diid && x.IsDel == 0).ToList();
- // 更新 UI
- this.Invoke(new Action(() =>
- {
- airCheckbox.Checked = listAir.Count > 0;
- airLable.Text = $"机票数据条数:{listAir.Count}";
- hotelCheckbox.Checked = listht.Count > 0;
- hotelLable.Text = $"酒店数据条数:{listht.Count}";
- gwCheckbox.Checked = listgw.Count > 0;
- gwLabel.Text = $"公务数据条数:{listgw.Count}";
- this.SublevelComboBox.Text = "";
- this.SublevelComboBox.DisplayMember = "Title";
- this.SublevelComboBox.ValueMember = "Id";
- this.SublevelComboBox.DataSource = listAir;
- }));
- }
- });
- }
- private void execTemp(int tempValue, int diid, Grp_DelegationInfo di)
- {
- var dropItem = dropDownItem.FirstOrDefault(x => x.Id == tempValue);
- var pathArr = Regex.Split(dropItem.Path, "#").ToList();
- var UsePath = string.Empty;
- foreach (var itemF in pathArr)
- {
- if (File.Exists(itemF))
- {
- UsePath = itemF;
- break;
- }
- }
- if (string.IsNullOrWhiteSpace(UsePath))
- {
- var txtPath = GetApplicationPath() + "\\path.txt";
- if (File.Exists(txtPath))
- {
- //建立文件读取流对象
- StreamReader str = new StreamReader(txtPath);
- List<string> list = new List<string>();
- //获取每行字符
- string line;
- while ((line = str.ReadLine()) != null)
- {
- list.Add(line);
- }
- str.Close();
- foreach (var item in list)
- {
- if (File.Exists(item))
- {
- UsePath = item;
- break;
- }
- }
- }
- else
- {
- using (var sw = File.CreateText(txtPath))
- {
- sw.WriteLine("path"); // 写入字符串
- }
- MessageBoxEx.Show(this, "创建成功!", "请配置文件路径!");
- return;
- }
- }
- var _travelList = ExecuteDbContext((db => { return db.Grp_TravelList.AsNoTracking().Where(x => x.Diid == diid && x.IsDel == 0).ToList(); }));
- //设置源文件
- Document doc = new Document(UsePath);
- // 创建 DocumentBuilder 对象
- DocumentBuilder builder = new DocumentBuilder(doc);
- var titleCount = 1;
- var conterCount = 1;
- var index = 1;
- foreach (var item in _travelList)
- {
- //移动到文档的最后一个段落之后
- builder.MoveToDocumentEnd();
- builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
- // 开始书签
- builder.StartBookmark("title" + titleCount);
- // 设置文本格式为加粗
- builder.Font.Bold = true;
- builder.Font.Name = "KaiTi";
- builder.Font.Size = 18;
- // 插入加粗的文本
- builder.Writeln($"{item.Date}({item.WeekDay},第{index}天)");
- // 结束书签
- builder.EndBookmark("title" + titleCount);
- titleCount++;
- // 在文档末尾插入一个空段落
- builder.Writeln();
- builder.MoveToDocumentEnd();
- builder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
- // 取消文本格加粗
- builder.Font.Bold = false;
- builder.Font.Name = "仿宋";
- // 开始书签
- builder.StartBookmark("conter" + conterCount);
- // 插入文本
- //builder.Writeln(item.Trip);
- // 解析字符串中的时间和内容部分
- string[] lines = item.Trip.Split(new[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);
- // 使用正则表达式匹配时间格式
- Regex timeRegex = new Regex(@"^\d{2}:\d{2}");
- // 遍历每一行并格式化
- foreach (string line in lines)
- {
- // 使用正则表达式提取时间
- Match match = timeRegex.Match(line.Trim());
- if (match.Success)
- {
- string timePart = match.Value; // 时间部分
- string descriptionPart = line.Substring(match.Length).Trim(); // 描述部分
- // 设置段落格式(制表符分隔时间和描述)
- builder.ParagraphFormat.TabStops.Clear();
- builder.ParagraphFormat.TabStops.Add(new TabStop(50)); // 设置制表符位置为50
- // 插入时间
- builder.Write(timePart + "\t");
- if (descriptionPart.Length > 19)
- {
- builder.Writeln(descriptionPart.Substring(0, 19));
- builder.Writeln(" " + descriptionPart.Substring(19));
- }
- else
- {
- // 插入描述并换行
- builder.Writeln(descriptionPart);
- }
- }
- else
- {
- // 如果没有时间,直接插入整段文字
- builder.Writeln(line);
- }
- }
- // 结束书签
- builder.EndBookmark("conter" + conterCount);
- conterCount++;
- builder.Writeln();
- index++;
- }
- CheckAndCenterParagraphs(doc);
- string strFileName = "C:\\OP行程单\\" + di.TeamName + "贵州行程.docx";
- try
- {
- doc.Save(strFileName, Aspose.Words.SaveFormat.Docx);
- MessageBoxEx.Show(this, "文件导出完成!");
- System.Diagnostics.Process.Start("Explorer.exe", "/select," + strFileName);
- }
- catch (Exception ex)
- {
- MessageBoxEx.Show(this, "请关闭打开的文件后重试!");
- }
- }
- private static string GetApplicationPath()
- {
- string path = System.Windows.Forms.Application.StartupPath;
- string folderName = String.Empty;
- while (folderName.ToLower() != "bin")
- {
- path = path.Substring(0, path.LastIndexOf("\\"));
- folderName = path.Substring(path.LastIndexOf("\\") + 1);
- }
- return path.Substring(0, path.LastIndexOf("\\") + 1);
- }
- private async Task<object> QueryOfficialActivitiesById(int id, int diid)
- {
- var clientHelper = new HttpClientHelper();
- var postData = new { Id = id, DiId = diid };
- string postResponse = await clientHelper.PostAsync("http://132.232.92.186:8888/api/Resource/QueryOfficialActivitiesById", postData);
- var ApiResult_JObject = JObject.Parse(postResponse);
- if (int.TryParse(ApiResult_JObject["code"].ToString(), out int code_int) && code_int == 200)
- {
- try
- {
- ApiResult_JObject = JObject.Parse(ApiResult_JObject["data"].ToString());
- ApiResult_JObject = JObject.Parse(ApiResult_JObject["translatorInfo"].ToString());
- return new
- {
- Name = ApiResult_JObject["name"].ToString(),
- Success = true,
- Tel = ApiResult_JObject["tel"].ToString(),
- };
- }
- catch (Exception)
- {
- return new
- {
- Name = "",
- Success = true,
- Tel = "",
- };
- }
- }
- return new
- {
- Success = false,
- };
- }
- //导入详细行程
- public async void btnImportInfo()
- {
- var diid = -1;
- try
- {
- var dele = (comb_Delegation.SelectedItem as Grp_DelegationInfo);
- diid = dele.Id;
- }
- catch (Exception)
- {
- //lblImport.Text = "请正确的选择团组!";
- //lblImport.ForeColor = Color.Black;
- MessageBoxEx.Show(this, "请正确的选择团组!", "提示");
- return;
- }
- var codeId = -1;
- try
- {
- if (!int.TryParse(SublevelComboBox.SelectedValue.ToString(), out codeId))
- {
- throw new Exception();
- }
- }
- catch (Exception)
- {
- MessageBoxEx.Show(this, "请正确的选择黑屏代码!", "提示");
- return;
- }
- DataTable resultTable = null;
- try
- {
- resultTable = GetTableByBlackCode(diid, codeId);
- }
- catch (Exception ex)
- {
- MessageBoxEx.Show(this, "黑屏代码有误!", "提示");
- return;
- }
- if (resultTable.Rows.Count == 0 || string.IsNullOrWhiteSpace(resultTable.Rows[0][1].ToString()))
- {
- MessageBoxEx.Show(this, "黑屏代码有误! ", "提示");
- return;
- }
- foreach (DataRow row in resultTable.Rows)
- {
- if (!string.IsNullOrWhiteSpace(row["Error"].ToString()))
- {
- MessageBoxEx.Show(this, "黑屏代码有误! " + row["Error"].ToString(), "提示");
- return;
- }
- }
- if (!int.TryParse(tripItemSelect.SelectedValue.ToString(), out int selectValue) || selectValue != 1)
- {
- var find = dropDownItem.Find(x => x.Id == selectValue) ?? new TripItem
- {
- Name = "Error"
- };
- MessageBoxEx.Show(find.Name + "暂无详细行程!");
- return;
- }
- var isVPN = await Task.Run(() =>
- {
- var isVpn = GetDirectionByGoogleApi("北京", "上海");
- if (Convert.ToInt32(isVpn["code"]) == -1)
- {
- return false;
- }
- return true;
- });
- if (!isVPN) { MessageBoxEx.Show(this, "请打开VPN!"); return; }
- var timeArr = GetTimeListByDataTable(resultTable);
- //本团行程单数据
- List<Grp_TravelList> listTravel = ExecuteDbContext((db => { return db.Grp_TravelList.AsNoTracking().Where(x => x.Diid == diid && x.IsDel == 0).ToList(); }));
- var tags = CheckAndCenterTags(diid);
- ChildThreadExceptionHandler wt = new
- ChildThreadExceptionHandler((msg) =>
- {
- if (this.InvokeRequired)
- {
- this.Invoke(new Action(() =>
- {
- MessageBoxEx.Show(this, msg);
- }));
- }
- else
- {
- MessageBoxEx.Show(this, msg);
- }
- });
- Thread threadExec = new Thread(() =>
- {
- var lockTaken = Monitor.TryEnter(Key, TimeSpan.FromMilliseconds(1));
- try
- {
- if (lockTaken)
- {
- using (var db = CreateDbContext())
- {
- using (var sw = db.Database.BeginTransaction())
- {
- var NewListTravel = new List<Grp_TravelList>();
- var index = 1;
- var stopCity = string.Empty;
- var nextDayNum = 0;
- var nextTrip = string.Empty;
- Res_ThreeCode stopCity_Object = null;
- Res_ThreeCode playCity_Object = null;
- bool isTrade = false;
- //本团车导地接信息
- //var listctg = db.Grp_CarTouristGuideGroundReservations.Where(x => x.DiId == diid && x.IsDel == 0).ToList();
- //本团酒店信息
- var listht = db.Grp_HotelReservations.Where(x => x.DiId == diid && x.IsDel == 0).ToList();
- //公务出访信息
- var listgw = db.Res_OfficialActivities.Where(x => x.DiId == diid && x.IsDel == 0).ToList();
- //邀请公务资料
- //var listgwzl = db.Grp_InvitationOfficialActivities.Where(x => x.DiId == diid && x.IsDel == 0).ToList();
- //团组餐食信息
- var listMeal = db.Grp_RestaurantInfo.Where(x => x.GroupId == diid && x.IsDel == 0).ToList();
- Grp_HotelReservations lastHotel = null;
- foreach (var item in timeArr)
- {
- string trip = string.Empty;
- string weekDay = string.Empty;
- DateTime time = DateTime.Now;
- var footIsAddDay = false;
- if (DateTime.TryParse(item, out time))
- {
- weekDay = weekdays[(int)time.DayOfWeek];
- }
- else
- {
- weekDay = "日期格式不正确!";
- }
- var empty = "【未收入该三字码!请机票同事录入】";
- var tabSelect = resultTable.Select(string.Format("Day = '{0}'", item));
- var isMoreTraffic = false;
- if (nextDayNum > 0)
- {
- trip += nextTrip;
- nextDayNum--;
- if (nextDayNum > 0)
- {
- NewListTravel.Add(new Grp_TravelList
- {
- CreateTime = DateTime.Now,
- CreateUserId = 0,
- Diid = diid,
- Date = Convert.ToDateTime(item).ToString("M月d日"),
- Trip = $"{playCity_Object.City}/{stopCity_Object.City}\r\n飞行中",
- WeekDay = weekDay,
- Days = index,
- Traffic_First = "飞机",
- Traffic_Second = "汽车",
- Diffgroup = 1,
- Issel = 1,
- IsDel = 0,
- });
- index++;
- continue;
- }
- else
- {
- nextTrip = string.Empty;
- }
- }
- if (tabSelect.Length > 0)
- {
- isMoreTraffic = true;
- var takeOffTime = DateTime.Parse(item);
- var fallToTime = DateTime.Parse(item);
- Res_ThreeCode start_Object = null;
- Res_ThreeCode end_Object = null;
- foreach (var tabRow in tabSelect)
- {
- if (nextDayNum == 0)
- {
- nextDayNum = Convert.ToInt32(tabRow["Sign"]);
- }
- takeOffTime = DateTime.Parse(item);
- fallToTime = DateTime.Parse(item);
- var takeOff = tabRow["StartTime"].ToString();
- var fallTo = tabRow["EndTime"].ToString();
- takeOffTime = takeOffTime.AddHours(int.Parse(takeOff.Substring(0, 2)));
- takeOffTime = takeOffTime.AddMinutes(int.Parse(takeOff.Substring(2, 2)));
- fallToTime = fallToTime.AddHours(int.Parse(fallTo.Substring(0, 2)));
- fallToTime = fallToTime.AddMinutes(int.Parse(fallTo.Substring(2, 2)));
- var threeCode = tabRow["Three"].ToString();
- var start = threeCode.Substring(0, 3);
- var end = threeCode.Substring(3, 3);
- stopCity = end;
- start_Object = db.Res_ThreeCode.FirstOrDefault(x => x.Three.ToUpper() == start.ToUpper());
- end_Object = db.Res_ThreeCode.FirstOrDefault(x => x.Three.ToUpper() == end.ToUpper());
- if (start_Object == null)
- {
- start_Object = new Res_ThreeCode()
- {
- AirPort = empty,
- AirPort_En = empty,
- City = empty,
- Country = empty,
- Four = empty,
- Three = empty,
- };
- }
- if (end_Object == null)
- {
- end_Object = new Res_ThreeCode()
- {
- AirPort = empty,
- AirPort_En = empty,
- City = empty,
- Country = empty,
- Four = empty,
- Three = empty,
- };
- }
- stopCity_Object = end_Object;
- playCity_Object = start_Object;
- //航班号
- string flightcode = tabRow["Fliagtcode"].ToString();
- if (isTrade && !trip.EndsWith("\r\n") && !string.IsNullOrWhiteSpace(trip))
- {
- trip += "\r\n";
- }
- if (!string.IsNullOrWhiteSpace(trip) && tabSelect.First().Equals(item))
- {
- trip = trip.Insert(0, $"{start_Object.City}/{end_Object.City}\r\n");
- }
- else
- {
- trip += $"{start_Object.City}/{end_Object.City}\r\n";
- }
- if (!isTrade)
- {
- var dayBeforeTrip = string.Empty;
- if (index == 1)
- {
- if (takeOffTime.AddHours(-3).Day < takeOffTime.Day)
- {
- dayBeforeTrip += $"{takeOffTime.AddHours(-3).ToString("HH:mm")} 抵达{start_Object.AirPort}{tabRow["StartBuilding"].ToString().Trim()}航站楼,办理登机手续:";
- }
- else
- {
- trip += $"{takeOffTime.AddHours(-3).ToString("HH:mm")} 抵达{start_Object.AirPort}{tabRow["StartBuilding"].ToString().Trim()}航站楼,办理登机手续:\r\n";
- }
- }
- else if (index == timeArr.Count)
- {
- trip += $"{takeOffTime.AddHours(-3).ToString("HH:mm")} 抵达{start_Object.AirPort}{tabRow["StartBuilding"].ToString().Trim()}航站楼,办理登机手续:\r\n";
- if (takeOffTime.AddHours(-3).Hour > 9)
- {
- trip += "08:00 早餐于酒店;\r\n";
- }
- }
- else
- {
- if (takeOffTime.AddHours(-2).Hour > 9)
- {
- trip += "08:00 早餐于酒店;\r\n";
- }
- if (takeOffTime.Hour >= 12)
- {
- trip += "09:00 公务活动;\r\n";
- }
- if (takeOffTime.Hour > 14)
- {
- trip += "10:30 公务活动;\r\n";
- }
- if (takeOffTime.Hour > 15)
- {
- trip += "12:00 午餐于当地餐厅;\r\n";
- trip += "14:00 公务活动;\r\n";
- }
- if (takeOffTime.Hour > 17)
- {
- trip += "16:00 公务活动;\r\n";
- }
- var nineTime = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 09, 00, 00));
- var halfPasTen = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 10, 30, 00));
- var twoPointsPM = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 14, 00, 00));
- var fourPointsPM = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 16, 00, 00));
- if (!string.IsNullOrWhiteSpace(nineTime))
- {
- trip = trip.Replace("09:00 公务活动", nineTime);
- }
- if (!string.IsNullOrWhiteSpace(halfPasTen))
- {
- trip = trip.Replace("10:30 公务活动", halfPasTen);
- }
- if (!string.IsNullOrWhiteSpace(twoPointsPM))
- {
- trip = trip.Replace("14:00 公务活动", twoPointsPM);
- }
- if (!string.IsNullOrWhiteSpace(fourPointsPM))
- {
- trip = trip.Replace("16:00 公务活动", fourPointsPM);
- }
- var mealInfo = GetTimeMealInfo(ref listMeal, new DateTime(time.Year, time.Month, time.Day, 12, 00, 00));
- if (!string.IsNullOrWhiteSpace(mealInfo))
- {
- trip = trip.Replace("12:00 午餐于当地餐厅", mealInfo);
- }
- //--提前俩个小时
- trip += $"{takeOffTime.AddHours(-2).ToString("HH:mm")} 抵达{start_Object.AirPort}{tabRow["StartBuilding"].ToString().Trim()}航站楼,办理登机手续:\r\n";
- }
- if (!string.IsNullOrWhiteSpace(dayBeforeTrip))
- {
- {
- NewListTravel.Insert(0, new Grp_TravelList
- {
- CreateTime = DateTime.Now,
- CreateUserId = 0,
- Diid = diid,
- Date = Convert.ToDateTime(item).AddDays(-1).ToString("M月d日"),
- Trip = $"{start_Object.City}\r\n{dayBeforeTrip}",
- WeekDay = weekdays[(int)time.AddDays(-1).DayOfWeek],
- Days = 0,
- Traffic_First = "汽车",
- Traffic_Second = "",
- Diffgroup = 1,
- Issel = 1,
- IsDel = 0,
- });
- }
- }
- }
- var aircompany = db.Res_AirCompany.FirstOrDefault(x => x.ShortCode.ToUpper() == flightcode.Substring(0, 2).ToUpper() && x.IsDel == 0);
- var hsEmpty = "【此航司" + flightcode.Substring(0, 2).ToUpper() + "未收录,请机票同事录入】";
- if (aircompany == null)
- {
- aircompany = new Res_AirCompany
- {
- CnName = hsEmpty,
- EnName = hsEmpty,
- ShortCode = hsEmpty,
- };
- }
- //机型判断
- string airModel = tabRow["AirModel"].ToString();
- airModel = GetLonger(airModel.Substring(0, 1)) + airModel;
- string flightTime = tabRow["FlightTime"].ToString();
- flightTime = ParseBlackTime(flightTime);
- 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";
- isTrade = Convert.ToInt32(tabRow["isTransitShipment"]) == 1;
- if (isTrade)
- {
- if (nextDayNum > 0)
- {
- nextTrip += $"{fallToTime.ToString("HH:mm")} 抵达{end_Object.AirPort}{tabRow["EndBuilding"].ToString().Trim()}航站楼(中转时间:行李直达);\r\n";
- }
- else
- {
- trip += $"{fallToTime.ToString("HH:mm")} 抵达{end_Object.AirPort}{tabRow["EndBuilding"].ToString().Trim()}航站楼(中转时间:行李直达);\r\n";
- }
- }
- else
- {
- if (nextDayNum > 0)
- {
- nextTrip += $"{fallToTime.ToString("HH:mm")} 抵达{end_Object.AirPort}{tabRow["EndBuilding"].ToString().Trim()}航站楼,办理入境手续,之后前往提取行李;\r\n";
- if (timeArr.Last().Equals(item))
- {
- nextTrip = $"{fallToTime.ToString("HH:mm")} 抵达{end_Object.AirPort}{tabRow["EndBuilding"].ToString().Trim()}航站楼,办理入境手续,之后前往提取行李,圆满结束此次访问之行!";
- }
- }
- else
- {
- trip += $"{fallToTime.ToString("HH:mm")} 抵达{end_Object.AirPort}{tabRow["EndBuilding"].ToString().Trim()}航站楼,办理入境手续,之后前往提取行李;\r\n";
- }
- }
- }
- //var airArrive = fallToTime; //航班落地时间
- time = fallToTime.AddHours(1.5); //出机场一个半小时
- string Time = string.Empty;
- string Distance = string.Empty;
- int GetGoogleResult = 0;
- int GetDistResult = 0;
- JObject Result = null;
- try
- {
- Result = GetDirectionByGoogleApi(end_Object.AirPort, end_Object.City + "市区");
- Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace(" ", "").Trim();
- Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString().Replace(" ", "").Trim();
- // 替换单位为中文
- Time = Time.Replace("hours", "小时").Replace("hour", "小时").Replace("mins", "分钟");
- Distance = Distance.Contains("mi")
- ? (decimal.Parse(Distance.Split(new string[] { "mi" }, StringSplitOptions.None)[0]) * conversion).ToString("#0.00") + " 公里"
- : Distance.Replace("km", "公里");
- // 提取时间和距离的数值部分,并向上取5的倍数
- int timeMinutes = (int.Parse(ExtractDigitsBeforeDecimal(Time)) + 4) / 5 * 5;
- int distanceKm = (int.Parse(ExtractDigitsBeforeDecimal(Distance)) + 4) / 5 * 5;
- // 格式化时间
- string formattedTime = string.Empty;
- if (timeMinutes / 60 > 0) formattedTime = $"{(timeMinutes / 60):D2}小时{(timeMinutes % 60):D2}分钟";
- else formattedTime = $"{(timeMinutes % 60):D2}分钟";
- // 更新结果
- Time = formattedTime;
- Distance = $"{distanceKm}公里";
- GetGoogleResult = timeMinutes;
- }
- catch (Exception ex)
- {
- Time = "未知!";
- Distance = "未知!";
- }
- if (nextDayNum == 0)
- {
- if (index != timeArr.Count)
- {
- trip += $"{time.ToString("HH:mm")} 搭乘专车前往市区({end_Object.AirPort} - {end_Object.City}市区 路程{Distance},耗时{Time});";
- }
- time = time.AddMinutes(GetGoogleResult); //到达市区时间
- if (index == timeArr.Count)
- {
- trip = trip.RemoveEnd("\r\n");
- if (trip.EndsWith(";"))
- {
- trip = trip.RemoveEnd(";");
- trip += ",";
- }
- trip += "圆满结束此次访问之行!";
- NewListTravel.Add(new Grp_TravelList
- {
- CreateTime = DateTime.Now,
- CreateUserId = 0,
- Diid = diid,
- Date = Convert.ToDateTime(item).ToString("M月d日"),
- Trip = trip,
- WeekDay = weekDay,
- Days = index,
- Traffic_First = "飞机",
- Traffic_Second = "汽车",
- Diffgroup = 1,
- Issel = 1,
- IsDel = 0,
- });
- continue;
- }
- if (time.Day != fallToTime.Day) //超出一天
- {
- NewListTravel.Add(new Grp_TravelList
- {
- CreateTime = DateTime.Now,
- CreateUserId = 0,
- Diid = diid,
- Date = Convert.ToDateTime(item).ToString("M月d日"),
- Trip = trip,
- WeekDay = weekDay,
- Days = index,
- Traffic_First = "飞机",
- Traffic_Second = "汽车",
- Diffgroup = 1,
- Issel = 1,
- IsDel = 0,
- });
- continue;
- }
- if (time.Hour < 9) // && (airArrive < new DateTime(airArrive.Year,airArrive.Month,airArrive.Day,6, 30, 0))
- {
- var nineTime = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 09, 00, 00));
- var halfPasTen = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 10, 30, 00));
- trip += @"
- 09:00 公务活动;
- 10:30 公务活动;";
- if (!string.IsNullOrWhiteSpace(nineTime))
- {
- trip = trip.Replace("09:00 公务活动", nineTime);
- }
- if (!string.IsNullOrWhiteSpace(halfPasTen))
- {
- trip = trip.Replace("10:30 公务活动", halfPasTen);
- }
- }
- else if (time.Hour < 10)
- {
- var halfPasTen = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 10, 30, 00));
- trip += @"
- 10:30 公务活动;";
- if (!string.IsNullOrWhiteSpace(halfPasTen))
- {
- trip = trip.Replace("10:30 公务活动", halfPasTen);
- }
- }
- if (time.Hour < 12)
- {
- var mealInfo = GetTimeMealInfo(ref listMeal, new DateTime(time.Year, time.Month, time.Day, 12, 00, 00));
- if (!string.IsNullOrWhiteSpace(mealInfo))
- {
- trip += $"\r\n{mealInfo}";
- }
- else
- {
- trip += $"\r\n{time.ToString("HH:mm")} 午餐于当地餐厅;";
- }
- }
- if (time < new DateTime(time.Year, time.Month, time.Day, 14, 30, 0))
- {
- var twoPointsPM = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 14, 00, 00));
- var fourPointsPM = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 16, 00, 00));
- trip += @"
- 14:00 公务活动;
- 16:00 公务活动;";
- if (!string.IsNullOrWhiteSpace(twoPointsPM))
- {
- trip = trip.Replace("14:00 公务活动", twoPointsPM);
- }
- if (!string.IsNullOrWhiteSpace(fourPointsPM))
- {
- trip = trip.Replace("16:00 公务活动", fourPointsPM);
- }
- }
- else if (time.Hour < 16)
- {
- var fourPointsPM = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 16, 00, 00));
- trip += @"
- 16:00 公务活动;";
- if (!string.IsNullOrWhiteSpace(fourPointsPM))
- {
- trip = trip.Replace("16:00 公务活动", fourPointsPM);
- }
- }
- if (time.Hour < 18)
- {
- var mealInfo = GetTimeMealInfo(ref listMeal, new DateTime(time.Year, time.Month, time.Day, 18, 00, 00));
- if (!string.IsNullOrWhiteSpace(mealInfo))
- {
- trip += $"\r\n{mealInfo}";
- }
- else
- {
- trip += $"\r\n18:00 晚餐于当地餐厅;";
- }
- time = new DateTime(time.Year, time.Month, time.Day, 18, 0, 0);
- }
- if (time.Hour < 19)
- {
- trip += $"\r\n19:00 入住酒店休息;";
- }
- //time = time.AddHours(1);
- //trip += $"\r\n{time.ToString("HH:mm")} 搭乘专车前往酒店,抵达后办理入住;";
- var htTime = DateTime.Now;
- var htTimeOut = DateTime.Now;
- foreach (var h in listht)
- {
- if (DateTime.TryParse(h.CheckInDate, out htTime) && DateTime.TryParse(h.CheckOutDate, out htTimeOut))
- {
- if (htTime <= Convert.ToDateTime(item) && htTimeOut >= Convert.ToDateTime(item))
- {
- lastHotel = h;
- listht.Remove(h);
- trip = trip.Replace("\r\n19:00 入住酒店休息;", string.Empty);
- #region 酒店详细信息
- trip += $"\r\n{time.AddHours(1).ToString("HH:mm")} 乘车前往酒店";
- trip += $"\r\n{time.AddHours(2).ToString("HH:mm")} 抵达酒店办理入住手续";
- trip = trip + "\r\n"
- + " 酒店名称:" + h.HotelName + "\r\n"
- + " 酒店地址:" + h.HotelAddress + "\r\n"
- + " 酒店电话:" + h.HotelTel + " 酒店传真:" + (string.IsNullOrWhiteSpace(h.HotelFax) ? "-" : h.HotelFax);
- break;
- #endregion
- }
- }
- }
- }
- }
- else
- {
- var end_Object = db.Res_ThreeCode.FirstOrDefault(x => x.Three.ToUpper() == stopCity.ToUpper());
- if (end_Object == null)
- {
- end_Object = new Res_ThreeCode()
- {
- AirPort = empty,
- AirPort_En = empty,
- City = empty,
- Country = empty,
- Four = empty,
- Three = empty,
- };
- }
- trip += $"{end_Object.City}\r\n";
- trip += $@"08:00 早餐于酒店;{(lastHotel != null ? $"(酒店名称:{lastHotel.HotelName})" : "")}
- 09:00 公务活动;
- 10:30 公务活动;
- 12:00 午餐于当地餐厅;
- 14:00 公务活动;
- 16:00 公务活动;
- 18:00 晚餐于当地餐厅;
- 19:00 入住酒店休息;";
- var nineTime = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 09, 00, 00));
- var halfPasTen = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 10, 30, 00));
- var twoPointsPM = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 14, 00, 00));
- var fourPointsPM = GetTimeGwInfo(ref listgw, new DateTime(time.Year, time.Month, time.Day, 16, 00, 00));
- var mealInfo = GetTimeMealInfo(ref listMeal, new DateTime(time.Year, time.Month, time.Day, 12, 00, 00));
- var mealInfoPM = GetTimeMealInfo(ref listMeal, new DateTime(time.Year, time.Month, time.Day, 18, 00, 00));
- if (!string.IsNullOrWhiteSpace(mealInfo))
- {
- trip = trip.Replace("12:00 午餐于当地餐厅", mealInfo);
- }
- if (!string.IsNullOrWhiteSpace(mealInfoPM))
- {
- trip = trip.Replace("18:00 晚餐于当地餐厅", mealInfoPM);
- }
- if (!string.IsNullOrWhiteSpace(nineTime))
- {
- trip = trip.Replace("09:00 公务活动", nineTime);
- }
- if (!string.IsNullOrWhiteSpace(halfPasTen))
- {
- trip = trip.Replace("10:30 公务活动", halfPasTen);
- }
- if (!string.IsNullOrWhiteSpace(twoPointsPM))
- {
- trip = trip.Replace("14:00 公务活动", twoPointsPM);
- }
- if (!string.IsNullOrWhiteSpace(fourPointsPM))
- {
- trip = trip.Replace("16:00 公务活动", fourPointsPM);
- }
- }
- string[] traffic = new string[] { "汽车", "飞机" };
- if (!isMoreTraffic)
- {
- traffic = new string[] { "汽车", "" };
- }
- NewListTravel.Add(new Grp_TravelList
- {
- CreateTime = DateTime.Now,
- CreateUserId = 0,
- Diid = diid,
- Date = Convert.ToDateTime(item).ToString("M月d日"),
- Trip = trip.RemoveEnd("\r\n"),
- WeekDay = weekDay,
- Days = index,
- Traffic_First = traffic[0],
- Traffic_Second = traffic[1],
- Diffgroup = 1,
- Issel = 1,
- IsDel = 0,
- });
- index++;
- }
- //NewListTravel.ForEach(x =>
- //{
- // x.Trip = x.Trip.Replace("\r\n14:00 公务活动;", string.Empty)
- // .Replace("\r\n16:00 公务活动;", string.Empty)
- // .Replace("\r\n09:00 公务活动;", string.Empty)
- // .Replace("\r\n10:30 公务活动;", string.Empty);
- //});
- if (nextDayNum > 0)
- {
- for (int i = 0; i < nextDayNum; i++)
- {
- NewListTravel.Add(new Grp_TravelList
- {
- CreateTime = DateTime.Now,
- CreateUserId = 0,
- Diid = diid,
- Date = Convert.ToDateTime(timeArr[timeArr.Count - 1]).AddDays(i + 1).ToString("M月d日"),
- Trip = $"{stopCity_Object.City}\r\n{nextTrip}",
- WeekDay = weekdays[(int)Convert.ToDateTime(timeArr[timeArr.Count - 1]).AddDays(i + 1).DayOfWeek],
- Days = index,
- Traffic_First = "飞机",
- Traffic_Second = "",
- Diffgroup = 1,
- Issel = 1,
- IsDel = 0,
- });
- }
- }
- //处理标记
- foreach (var item in tags)
- {
- bool isEnter = false;
- string QueryTag = item.QueryTag;
- if (QueryTag.Contains("\r\n\r\n"))
- {
- QueryTag = QueryTag.Replace("\r\n\r\n", "\r\n");
- isEnter = true;
- }
- var NewListTravelToTags = NewListTravel
- .Where(x => x.Trip.Contains(QueryTag)
- && x.Date == item.Date.ToString("M月d日"))
- .ToList();
- if (NewListTravelToTags.Count > 0 && !item.IsFinally)
- {
- foreach (var x in NewListTravelToTags)
- {
- var tagIndex = x.Trip.IndexOf(QueryTag);
- tagIndex += tagContent.tagLength;
- var insertStr = tagContent.TagFormat.Item1 + item.Content + tagContent.TagFormat.Item2;
- if (isEnter)
- {
- insertStr += "\r\n";
- }
- x.Trip = x.Trip.Insert(tagIndex, insertStr);
- NewListTravel.ForEach(x1 => { if (x.Date == x1.Date) { x1.Trip = x.Trip; } });
- break;
- }
- }
- else
- {
- foreach (var x in NewListTravel)
- {
- if (x.Date == item.Date.ToString("M月d日"))
- {
- x.Trip += "\r\n" + tagContent.TagFormat.Item1 + item.Content + tagContent.TagFormat.Item2;
- break;
- }
- }
- }
- }
- //比较上一次的文本
- //foreach (var newItem in NewListTravel)
- //{
- // foreach (var oldItem in listTravel)
- // {
- // if (newItem.Date == oldItem.Date)
- // {
- // var str = CheckStr(oldItem.Trip, newItem.Trip);
- // break;
- // }
- // }
- //}
- db.Grp_TravelList.RemoveRange(db.Grp_TravelList.Where(x => x.IsDel == 0 && x.Diid == diid));
- db.Grp_TravelList.AddRange(NewListTravel);
- db.SaveChanges();
- sw.Commit();
- wt.Invoke("数据导入完成!");
- }
- }
- }
- else
- {
- wt.Invoke("请勿重复点击!");
- }
- }
- catch (Exception ex)
- {
- wt.Invoke("请等待程序执行!");
- }
- finally
- {
- if (lockTaken)
- {
- Monitor.Exit(Key);
- }
- }
- });
- threadExec.Start();
- }
- private delegate void ChildThreadExceptionHandler(string message);
- //导出文件
- private void btnOutput_Click(object sender, EventArgs e)
- {
- var diid = -1;
- try
- {
- var dele = (comb_Delegation.SelectedItem as Grp_DelegationInfo);
- diid = dele.Id;
- }
- catch (Exception)
- {
- //lblImport.Text = "请正确的选择团组!";
- //lblImport.ForeColor = Color.Black;
- MessageBoxEx.Show(this, "请正确的选择团组!", "提示");
- return;
- }
- Grp_DelegationInfo di = ExecuteDbContext((db => db.Grp_DelegationInfo.FirstOrDefault(x => x.Id == diid && x.IsDel == 0)));
- if (di == null)
- {
- MessageBoxEx.Show(this, "请选择正确的团组!");
- return;
- }
- var tripTempValue = tripItemSelect.SelectedValue;
- if (!int.TryParse(tripTempValue.ToString(), out int tempValue))
- {
- MessageBoxEx.Show("请选择模板类型!");
- return;
- }
- // 指定的文字
- var targetTextDic = new Dictionary<string, List<string>>();
- if (tempValue != 1)
- {
- execTemp(tempValue, diid, di);
- return;
- }
- var codeId = -1;
- try
- {
- if (!int.TryParse(SublevelComboBox.SelectedValue.ToString(), out codeId))
- {
- throw new Exception();
- }
- }
- catch (Exception)
- {
- MessageBoxEx.Show(this, "请正确的选择黑屏代码!", "提示");
- return;
- }
- var _travelList = ExecuteDbContext((db => { return db.Grp_TravelList.AsNoTracking().Where(x => x.Diid == diid && x.IsDel == 0).ToList(); }));
- var city = GetAllCity(diid, codeId);
- //创建数据源Table
- DataTable dtSource = new DataTable();
- dtSource.Columns.Add("Days", typeof(string));
- dtSource.Columns.Add("Date", typeof(string));
- dtSource.Columns.Add("Week", typeof(string));
- dtSource.Columns.Add("Traffic", typeof(string));
- dtSource.Columns.Add("Trip", typeof(string));
- //获取数据,放到datatable
- foreach (var item in _travelList)
- {
- targetTextDic.Add(item.Date, ExtractContentBetweenTags(item.Trip, "[++]"));
- item.Trip = item.Trip.Replace(tagContent.TagFormat.Item1, string.Empty)
- .Replace(tagContent.TagFormat.Item2, string.Empty)
- .Replace("[++]", string.Empty);
- DataRow dr = dtSource.NewRow();
- dr["Days"] = item.Days;
- dr["Date"] = item.Date;
- dr["Week"] = item.WeekDay;
- dr["Traffic"] = item.Traffic_First
- + "\r\n"
- + item.Traffic_Second;
- dr["Trip"] = item.Trip;
- dtSource.Rows.Add(dr);
- }
- Dictionary<string, string> dic = new Dictionary<string, string>();
- dic.Add("Dele", di.TeamName.ToString()); //+ GetNum(di.VisitDays.ToString())
- dic.Add("City", city);
- dic.Add("Days", di.VisitDays.ToString());
- dic.Add("DeleCode", di.TourCode);
- dic.Add("Pnum", di.VisitPNumber.ToString());
- dic.Add("Pnum2", di.VisitPNumber.ToString());
- //模板路径
- string tempPath = @"C:\日行程3.docx";
- //载入模板
- Document doc = null;
- DocumentBuilder builder = null;
- try
- {
- //载入模板
- doc = new Document(tempPath);
- builder = new DocumentBuilder(doc);
- }
- catch (Exception)
- {
- //载入模板
- doc = new Document(@"D:\日行程3.docx");
- builder = new DocumentBuilder(doc);
- }
- foreach (var key in dic.Keys)
- {
- Bookmark bookmark = doc.Range.Bookmarks[key];
- if (bookmark != null)
- {
- builder.MoveToBookmark(key);
- builder.Write(dic[key]);
- }
- }
- //获取word里所有表格
- NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);
- //获取所填表格的序数
- Aspose.Words.Tables.Table tableOne = allTables[0] as Aspose.Words.Tables.Table;
- try
- {
- //循环赋值
- for (int i = 0; i < dtSource.Rows.Count; i++)
- {
- builder.MoveToCell(0, i + 1, 0, 0);
- builder.Write(dtSource.Rows[i]["Days"].ToString());
- builder.MoveToCell(0, i + 1, 1, 0);
- builder.Write(dtSource.Rows[i]["Date"].ToString() + "\r\n" + dtSource.Rows[i]["Week"].ToString());
- builder.MoveToCell(0, i + 1, 2, 0);
- builder.Write(dtSource.Rows[i]["Traffic"].ToString());
- var trip = dtSource.Rows[i]["Trip"].ToString();
- builder.MoveToCell(0, i + 1, 3, 0);
- builder.Write(trip);
- var cell = (Aspose.Words.Tables.Cell)doc.GetChild(NodeType.Cell, ((i + 2) * 4) - 1, true);
- var paragraphs = cell.GetChildNodes(NodeType.Paragraph, true);
- // 获取特定索引的段落
- Paragraph paragraph = (Paragraph)paragraphs[0];
- Run run = paragraph.Runs[0];
- if (run != null)
- {
- Aspose.Words.Font font = run.Font;
- font.Name = "黑体";
- //设置双休红色
- cell = (Aspose.Words.Tables.Cell)doc.GetChild(NodeType.Cell, ((i + 2) * 4) - 3, true);
- paragraphs = cell.GetChildNodes(NodeType.Paragraph, true);
- paragraph = (Paragraph)paragraphs[1];
- if (paragraph.GetText().Contains("星期六") || paragraph.GetText().Contains("星期日"))
- {
- run = paragraph.Runs[0];
- font = run.Font;
- font.Color = Color.Red;
- }
- }
- else
- {
- cell = (Aspose.Words.Tables.Cell)doc.GetChild(NodeType.Cell, ((i + 2) * 4) - 3, true);
- paragraphs = cell.GetChildNodes(NodeType.Paragraph, true);
- paragraph = (Paragraph)paragraphs[1];
- if (paragraph.GetText().Contains("星期六") || paragraph.GetText().Contains("星期日"))
- {
- paragraph.Runs[0].Font.Color = Color.Red;
- }
- }
- }
- }
- catch (Exception ex)
- {
- MessageBoxEx.Show(this, "错误!" + ex.Message);
- return;
- }
- //删除多余行
- while (tableOne.Rows.Count > 1 + dtSource.Rows.Count)
- {
- tableOne.Rows.RemoveAt(1 + dtSource.Rows.Count);//(1+dtSource.Rows.Count + 1)-1
- }
- var targetTextList = new List<string>();
- // 遍历文档中的表格
- foreach (Table table in doc.GetChildNodes(NodeType.Table, true))
- {
- foreach (Row row in table.Rows)
- {
- var cellIndex = 0;
- foreach (Cell cell in row.Cells)
- {
- if (cellIndex == 1 && row.Cells.Count == 4)
- {
- foreach (var target in targetTextDic.Keys)
- {
- if (cell.GetText().Contains(target))
- {
- targetTextList = targetTextDic[target];
- break;
- }
- }
- }
- // 遍历单元格中的所有段落
- foreach (Paragraph paragraph in cell.Paragraphs)
- {
- // 使用临时列表存储原始 Runs,避免修改时影响遍历
- List<Run> runs = new List<Run>();
- foreach (Run run in paragraph.Runs)
- {
- runs.Add(run);
- }
- foreach (Run run in runs)
- {
- foreach (var targetText in targetTextList)
- {
- // 检查文字是否包含指定文字
- if (run.Text.Contains(targetText))
- {
- // 将包含的部分设置为红色
- HighlightText(run, targetText, Color.Red);
- }
- }
- }
- }
- cellIndex++;
- }
- }
- }
- string savePath = "C:\\OP行程单\\";
- if (!Directory.Exists(savePath))
- {
- try
- {
- Directory.CreateDirectory(savePath);
- }
- catch
- {
- }
- }
- string strFileName = savePath + di.TeamName + "出访日程.docx";
- try
- {
- doc.Save(strFileName, Aspose.Words.SaveFormat.Docx);
- MessageBoxEx.Show(this, "文件导出完成!");
- System.Diagnostics.Process.Start("Explorer.exe", "/select," + strFileName);
- }
- catch (Exception ex)
- {
- MessageBoxEx.Show(this, "请关闭打开的文件后重试!");
- }
- }
- List<string> ExtractContentBetweenTags(string input, string tag)
- {
- List<string> results = new List<string>();
- // 构造正则表达式,匹配形如 [++]内容[++] 的部分
- string pattern = $@"{Regex.Escape(tag)}(.*?){Regex.Escape(tag)}";
- // 添加 RegexOptions.Singleline 选项使 . 匹配包括换行符在内的所有字符
- MatchCollection matches = Regex.Matches(input, pattern, RegexOptions.Singleline);
- string[] strValueArr = new string[1];
- foreach (Match match in matches)
- {
- var strValue = match.Groups[1].Value;
- strValueArr = Regex.Split(strValue, @"\r\n|\n");
- }
- results.AddRange(strValueArr.Where(x => !string.IsNullOrWhiteSpace(x)));
- return results;
- }
- private string GetAllCity(int diid, int codeId)
- {
- //城市缓存
- string CityStr = string.Empty;
- DataTable dtBlack = null;
- try
- {
- dtBlack = GetTableByBlackCode(diid, codeId);
- }
- catch (Exception ex)
- {
- MessageBoxEx.Show(this, "黑屏代码有误!", "提示");
- return CityStr;
- }
- if (dtBlack.Rows.Count != 0 && (!string.IsNullOrWhiteSpace(dtBlack.Rows[0][0].ToString())))
- {
- var cityThree = new List<string>();
- foreach (DataRow item in dtBlack.Rows)
- {
- var three = item["Three"].ToString();
- if (three.Length == 6)
- {
- var start = three.Substring(0, 3);
- var end = three.Substring(3, 3);
- var lastEnd = string.Empty;
- if (cityThree.Count != 0)
- {
- lastEnd = cityThree[cityThree.Count - 1];
- if (lastEnd != start)
- {
- cityThree.Add(start);
- cityThree.Add(end);
- }
- else
- {
- cityThree.Add(end);
- }
- }
- else
- {
- cityThree.Add(start);
- cityThree.Add(end);
- }
- }
- }
- string sql = "select * from Res_ThreeCode a where a.isdel = 0 ";
- if (cityThree.Count == 0)
- {
- sql += "and a.id in (0)";
- }
- else
- {
- sql += $"and a.Three in ('{string.Join("','", cityThree)}')";
- }
- List<Res_ThreeCode> resultArr = new List<Res_ThreeCode>();
- using (var db = new oa2023DBEntities())
- {
- resultArr = db.Res_ThreeCode.SqlQuery(sql).ToList();
- }
- cityThree.ForEach(x =>
- {
- var find = resultArr.Find(p => p.Three.ToUpper() == x.ToUpper());
- CityStr += find == null ? $"【{x}三字码未收录】/" : find.City + "/";
- });
- CityStr = CityStr.TrimEnd('/');
- }
- return CityStr;
- }
- /// <summary>
- ///根据机票黑屏代码整理DataTable
- /// </summary>
- /// <param name="diid"></param>
- /// <returns></returns>
- public DataTable GetTableByBlackCode(int diid, int codeId)
- {
- // 使用封装的方法执行查询
- var listcode = ExecuteDbContext(db =>
- db.Air_TicketBlackCode
- .Where(x => x.DiId == diid && x.IsDel == 0 && x.Id == codeId)
- .ToList()
- );
- //测试数据为序号,航班号,起飞日期,三字码,起飞时刻,到达时刻,出发航站楼,到达航站楼,机型,飞行时间
- //1.3U8391 TU17NOV CTUCAI 0220 0715 T1 T2 330 10H55M
- DataTable dt = new DataTable();
- dt.Columns.Add("Fliagtcode", typeof(string)); //航班号
- dt.Columns.Add("Date", typeof(string));//起飞日期
- dt.Columns.Add("Three", typeof(string));//三字码
- dt.Columns.Add("StartTime", typeof(string));//起飞时刻
- dt.Columns.Add("EndTime", typeof(string));//到达时刻
- dt.Columns.Add("StartBuilding", typeof(string));//出发航站楼
- dt.Columns.Add("EndBuilding", typeof(string));//到达航站楼
- dt.Columns.Add("AirModel", typeof(string)); //机型
- dt.Columns.Add("FlightTime", typeof(string));//飞行时间
- dt.Columns.Add("Day", typeof(string));//整理的起飞日期;作为排序依据
- dt.Columns.Add("ArrivedDate", typeof(string));//整理的到达日期
- dt.Columns.Add("Error", typeof(string));//整理的到达日期
- dt.Columns.Add("Sign", typeof(string));//标识:0表示为原生黑屏代码、1表示"+"新增的黑屏代码
- //添加转机标识 (中转写在第一趟航班)
- dt.Columns.Add("isTransitShipment", typeof(bool));
- //判断是否录入黑屏代码
- if (listcode.Count() == 0 || listcode == null)
- {
- dt.Rows.Add(null, null, null, null, null, null, null, null, null, null, null, "黑屏代码未录入!", null, false);
- }
- else
- {
- //读取单段黑屏代码
- for (int i = 0; i < listcode.Count; i++)
- {
- //去除序号
- string[] CodeList = Regex.Split(listcode[i].BlackCode, "\\d+\\.", RegexOptions.IgnoreCase);
- //去除多余空格,方法一Linq扩展方法
- CodeList = CodeList.Where(str => !string.IsNullOrWhiteSpace(str)).ToArray();
- //读取单条黑屏代码
- for (int j = 0; j < CodeList.Count(); j++)
- {
- //去除多余空格,方法二使用Split()方法进行分割,分割有一个选项是RemoveEmptyEntries
- CodeList[j] = CodeList[j].Replace("\r\n", string.Empty).Replace("\\r\\n", string.Empty).TrimStart().TrimEnd();
- string[] Info = CodeList[j].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
- //去除多余空格
- Info = Info.Where(str => !string.IsNullOrWhiteSpace(str)).ToArray();
- //判断黑屏代码是否正确拆分; 理应拆成9段
- if (Info.TakeWhile((x) => { return !excludeArr.Contains(x); }).Count() != 9)
- {
- dt.Rows.Add(null, null, null, null, null, null, null, null, null, null, null, listcode[i].Title + "黑屏代码中第" + (j + 1) + " 条有误,请联系机票同事核对", null, false);
- //MessageBoxEx.Show("第" + (i + 1) + "段黑屏代码中第" + (j + 1) + " 条有误, 请联系机票同事核对");
- return dt;
- }
- else
- {
- try
- {
- var monthEn = Info[1].Substring(4, 3);
- //月
- int month = Convert.ToInt32(GetLonger(monthEn));
- //日
- int day = Convert.ToInt32(Info[1].Substring(2, 2));
- //年
- string ConfigYear = ConfigurationManager.AppSettings["ConfigYear"];
- int YearInt = DateTime.Now.Year;
- int.TryParse(ConfigYear, out YearInt);
- var time = new DateTime(YearInt, month, day);
- var isExist = Info.Contains("[中转]");
- if (!isExist)
- {
- isExist = Info.Contains("[转机]");
- }
- dt.Rows.Add(Info[0],
- Info[1],
- Info[2],
- Info[3],
- Info[4],
- Info[5],
- Info[6],
- Info[7],
- Info[8],
- time.ToString("yyyy-MM-dd"),
- time.ToString("yyyy-MM-dd"),
- "",
- ExtractNumberAfterPlus(Info[4]),
- isExist
- );
- }
- catch (Exception ex)
- { }
- }
- }
- //排序
- dt.DefaultView.Sort = "Day asc";
- dt = dt.DefaultView.ToTable();
- }
- }
- return dt;
- }
- public string GetLonger(string temp)
- {
- string str = "";
- switch (temp.ToUpper())
- {
- case "美元":
- str = "USD";
- break;
- case "日元":
- str = "JPY";
- break;
- case "英镑":
- str = "GBP";
- break;
- case "欧元":
- str = "EUR";
- break;
- case "港币":
- str = "HKD";
- break;
- case "MO":
- str = "星期一";
- break;
- case "TU":
- str = "星期二";
- break;
- case "WE":
- str = "星期三";
- break;
- case "TH":
- str = "星期四";
- break;
- case "FR":
- str = "星期五";
- break;
- case "SA":
- str = "星期六";
- break;
- case "SU":
- str = "星期天";
- break;
- case "JAN":
- str = "01";
- break;
- case "FEB":
- str = "02";
- break;
- case "MAR":
- str = "03";
- break;
- case "APR":
- str = "04";
- break;
- case "MAY":
- str = "05";
- break;
- case "JUN":
- str = "06";
- break;
- case "JUL":
- str = "07";
- break;
- case "AUG":
- str = "08";
- break;
- case "SEP":
- str = "09";
- break;
- case "OCT":
- str = "10";
- break;
- case "NOV":
- str = "11";
- break;
- case "DEC":
- str = "12";
- break;
- case "MONDAY":
- str = "星期一";
- break;
- case "TUESDAY":
- str = "星期二";
- break;
- case "WEDNESDAY":
- str = "星期三";
- break;
- case "THURSDAY":
- str = "星期四";
- break;
- case "FRIDAY":
- str = "星期五";
- break;
- case "SATURDAY":
- str = "星期六";
- break;
- case "SUNDAY":
- str = "星期日";
- break;
- case "01":
- str = "JAN";
- break;
- case "02":
- str = "FEB";
- break;
- case "03":
- str = "MAR";
- break;
- case "04":
- str = "APR";
- break;
- case "05":
- str = "MAY";
- break;
- case "06":
- str = "JUN";
- break;
- case "07":
- str = "JUL";
- break;
- case "08":
- str = "AUG";
- break;
- case "09":
- str = "SEP";
- break;
- case "10":
- str = "OCT";
- break;
- case "11":
- str = "NOV";
- break;
- case "12":
- str = "DEC";
- break;
- case "2":
- str = "空客A";
- break;
- case "3":
- str = "空客A";
- break;
- case "7":
- str = "波音";
- break;
- }
- return str;
- }
- public List<string> GetTimeListByDataTable(DataTable dt)
- {
- DateTime datestart = Convert.ToDateTime(dt.Rows[0]["Day"].ToString());
- DateTime dateend = Convert.ToDateTime(dt.Rows[dt.Rows.Count - 1]["ArrivedDate"].ToString());
- List<string> timeList = new List<string>();
- while (datestart <= dateend)
- {
- timeList.Add(datestart.ToString("yyyy-MM-dd"));
- datestart = datestart.AddDays(1);
- }
- return timeList;
- }
- public JObject GetDirectionByGoogleApi(string Origin, string Destination)
- {
- string appkey = "AIzaSyBdLf8u8DinXQWVPLEkdrxOJpClXSqEnho";
- string url = "https://maps.googleapis.com/maps/api/directions/json?origin=" + Origin
- + "&destination=" + Destination + "&key=" + appkey;
- JObject result = null;
- try
- {
- #region 利用HttpWebRequest访问API
- ////创建Web访问对象
- //HttpWebRequest req = HttpWebRequest.Create(url) as HttpWebRequest;
- //req.Method = "GET";
- //req.ContentType = "application/json";
- ////创建web响应对象
- //HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
- ////通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
- //StreamReader reader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8);
- ////如果有编码问题就用这个方法
- ////string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());
- ////利用StreamReader就可以从响应内容从头读到尾
- //string returnJson = reader.ReadToEnd();
- ////反序列化
- //result = JsonConvert.DeserializeObject(returnJson) as JObject;
- #endregion
- #region 利用HttpClient访问API
- HttpClient myHttpClient = new HttpClient();
- myHttpClient.Timeout = new TimeSpan(0, 0, 3);
- HttpResponseMessage response = myHttpClient.GetAsync(url).Result;
- //var content = response.Content.ReadAsAsync<object>().Result;
- var content = response.Content.ReadAsStringAsync().Result;
- result = JObject.Parse(content);
- #endregion
- return result;
- }
- catch (Exception e)
- {
- result = new JObject();
- result.Add("code", -1);
- result.Add("msg", e.Message);
- return result;
- }
- }
- bool IsShengGenGuo(string country, string toCountry)
- {
- bool isTrue = false;
- string[] countries = {
- "德国", "奥地利", "比利时", "捷克共和国", "丹麦", "斯洛伐克", "斯洛文尼亚", "西班牙",
- "爱沙尼亚", "芬兰", "法国", "希腊", "匈牙利", "冰岛", "意大利", "拉脱维亚", "列支敦士登",
- "立陶宛", "卢森堡", "马耳他", "荷兰", "挪威", "波兰", "葡萄牙", "瑞典", "瑞士"
- };
- if (countries.Contains(country) && countries.Contains(toCountry))
- {
- isTrue = true;
- }
- return isTrue;
- }
- private object Key = new object();
- private void btnOutputInfo_Click(object sender, EventArgs e)
- {
- btnImportInfo();
- }
- /// <summary>
- /// 根据大写数字返回小写数字或根据小写数字返回大写数字
- /// </summary>
- /// <param name="num"></param>
- /// <returns></returns>
- public string GetNum(string num)
- {
- string str = "";
- switch (num)
- {
- case "1":
- str = "一";
- break;
- case "2":
- str = "二";
- break;
- case "3":
- str = "三";
- break;
- case "4":
- str = "四";
- break;
- case "5":
- str = "五";
- break;
- case "6":
- str = "六";
- break;
- case "7":
- str = "七";
- break;
- case "8":
- str = "八";
- break;
- case "9":
- str = "九";
- break;
- case "10":
- str = "十";
- break;
- case "11":
- str = "十一";
- break;
- case "12":
- str = "十二";
- break;
- case "一":
- str = "1";
- break;
- case "二":
- str = "2";
- break;
- case "三":
- str = "3";
- break;
- case "四":
- str = "4";
- break;
- case "五":
- str = "5";
- break;
- case "六":
- str = "6";
- break;
- case "七":
- str = "7";
- break;
- case "八":
- str = "8";
- break;
- case "九":
- str = "9";
- break;
- case "十":
- str = "10";
- break;
- case "十一":
- str = "11";
- break;
- case "十二":
- str = "12";
- break;
- }
- return str;
- }
- string GetTimeGwInfo(ref List<Res_OfficialActivities> listgw, DateTime gwTime)
- {
- List<Res_OfficialActivitiesFormat> formatResGw = listgw.Select(x => new Res_OfficialActivitiesFormat
- {
- Address = x.Address,
- Attendees = x.Attendees,
- Client = x.Client,
- Contact = x.Contact,
- Date = x.Date,
- DiId = x.DiId,
- CreateTime = x.CreateTime,
- CreateUserId = x.CreateUserId,
- DeleteTime = x.DeleteTime,
- DeleteUserId = x.DeleteUserId,
- Dresscode = x.Dresscode,
- Id = x.Id,
- IsDel = x.IsDel,
- IsNeedTrans = x.IsNeedTrans,
- IsPay = x.IsPay,
- IsSubmitApproval = x.IsSubmitApproval,
- Job = x.Job,
- Language = x.Language,
- OfficialForm = x.OfficialForm,
- Remark = x.Remark,
- Setting = x.Setting,
- Tel = x.Tel,
- Time = x.Time,
- Translators = x.Translators,
- Trip = x.Trip,
- Type = x.Type,
- Area = x.Area,
- Country = x.Country,
- Field = x.Field,
- ReqSample = x.ReqSample,
- ConfirmTheInvitation = x.ConfirmTheInvitation,
- DataId = x.DataId,
- DataSource = x.DataSource,
- EmailOrWeChat = x.EmailOrWeChat,
- Nature = x.Nature,
- ScreenshotOfMailUrl = x.ScreenshotOfMailUrl,
- Website = x.Website,
- }).ToList();
- string info = string.Empty;
- List<Res_OfficialActivitiesFormat> dayArr = new List<Res_OfficialActivitiesFormat>();
- Res_OfficialActivitiesFormat gl = null;
- DateTime newGwTime = DateTime.Now;
- foreach (var g in formatResGw)
- {
- var parseTime = g.GetDateTime;
- if (parseTime.Year == gwTime.Year && parseTime.Month == gwTime.Month && parseTime.Day == gwTime.Day)
- {
- dayArr.Add(g);
- }
- }
- var isFindTimeGw = false;
- foreach (var g in dayArr)
- {
- var thisData = g.GetDateTime;
- if (thisData.Hour == gwTime.Hour && thisData.Minute == gwTime.Minute)
- {
- isFindTimeGw = true;
- newGwTime = thisData;
- var ApiResult = QueryOfficialActivitiesById(g.Id, Convert.ToInt32(g.DiId)).Result;
- var success = Convert.ToBoolean(ApiResult.GetType().GetProperty("Success").GetValue(ApiResult));
- var nameAndTel = string.Empty;
- if (success)
- {
- var name = ApiResult.GetType().GetProperty("Name").GetValue(ApiResult).ToString();
- var tel = ApiResult.GetType().GetProperty("Tel").GetValue(ApiResult).ToString();
- nameAndTel = $" {name}{tel}";
- }
- info += $@"{thisData.ToString("HH:mm")} 拜访{g.Client};
- 翻译:{(g.IsNeedTrans == null || g.IsNeedTrans == 0 ? "不需要翻译人员" : g.Language + nameAndTel)} 着装:{g.Dresscode}
- 联系人:{g.Contact} 联系方式:{g.Tel}
- 地址:{g.Address}";
- listgw.Remove(listgw.Find(x => x.Id == g.Id));
- gl = g;
- break;
- }
- }
- //查询时间最接近的
- if (!isFindTimeGw)
- {
- var g = dayArr.OrderBy(x =>
- {
- return (x.GetDateTime - gwTime).Duration();
- }).FirstOrDefault();
- if (g != null)
- {
- var thisData = g.GetDateTime;
- if ((thisData - gwTime) < new TimeSpan(1, 30, 0))
- {
- isFindTimeGw = true;
- newGwTime = thisData;
- var ApiResult = QueryOfficialActivitiesById(g.Id, Convert.ToInt32(g.DiId)).Result;
- var success = Convert.ToBoolean(ApiResult.GetType().GetProperty("Success").GetValue(ApiResult));
- var nameAndTel = string.Empty;
- if (success)
- {
- var name = ApiResult.GetType().GetProperty("Name").GetValue(ApiResult).ToString();
- var tel = ApiResult.GetType().GetProperty("Tel").GetValue(ApiResult).ToString();
- nameAndTel = $" {name}{tel}";
- }
- info += $@"{thisData.ToString("HH:mm")} 拜访{g.Client};
- 翻译:{(g.IsNeedTrans == null || g.IsNeedTrans == 0 ? "不需要翻译人员" : g.Language + nameAndTel)} 着装:{g.Dresscode}
- 联系人:{g.Contact} 联系方式:{g.Tel}
- 地址:{g.Address}";
- listgw.Remove(listgw.Find(x => x.Id == g.Id));
- gl = g;
- }
- }
- }
- //1335 客人
- //1334 公司
- if (isFindTimeGw)
- {
- if (gl.DataSource == 0 || gl.DataSource == 1334 || gl.DataSource == null)
- {
- info += "【泛美资源】";
- }
- else
- {
- info += "【客人资源】";
- }
- }
- return info;
- }
- string GetTimeMealInfo(ref List<Grp_RestaurantInfo> listMeal, DateTime mealTime)
- {
- string info = string.Empty;
- List<Grp_RestaurantInfo> dayArr = new List<Grp_RestaurantInfo>();
- Grp_RestaurantInfo gl = null;
- var startStr = "午餐于当地餐厅";
- if (mealTime.Hour == 18 && mealTime.Minute == 0)
- {
- startStr = "晚餐于当地餐厅";
- }
- foreach (var g in listMeal)
- {
- var parseTime_Bool = DateTime.TryParse(g.Date, out DateTime parseTime);
- if (parseTime_Bool && parseTime.Year == mealTime.Year && parseTime.Month == mealTime.Month && parseTime.Day == mealTime.Day)
- {
- dayArr.Add(g);
- }
- }
- var isFindTimeGw = false;
- foreach (var g in dayArr)
- {
- var thisData = DateTime.Parse(g.StartTime);
- if (thisData.Hour == mealTime.Hour && thisData.Minute == mealTime.Minute)
- {
- isFindTimeGw = true;
- info += $"{g.StartTime}{(!string.IsNullOrWhiteSpace(g.EndTime) ? "-" + g.EndTime + " " : " ")}{startStr}" +
- $"{(!string.IsNullOrWhiteSpace(g.Name) ? "(" + g.Name + ") " : "")}{(!string.IsNullOrWhiteSpace(g.Address) ? "(地址: " + g.Address + " " : "")}" +
- $"{(!string.IsNullOrWhiteSpace(g.Tel) ? "联系电话:" + g.Tel + " " : "")}" +
- $"{(!string.IsNullOrWhiteSpace(g.Remark) ? "其他信息:" + g.Remark : "")}" + ")";
- listMeal.Remove(listMeal.Find(x => x.Id == g.Id));
- gl = g;
- break;
- }
- }
- //查询时间最接近的
- if (!isFindTimeGw)
- {
- var g = dayArr.OrderBy(x =>
- {
- return (DateTime.Parse(x.StartTime) - mealTime).Duration();
- }).FirstOrDefault();
- if (g != null)
- {
- var thisData = DateTime.Parse(g.StartTime);
- if ((thisData - mealTime) < new TimeSpan(3, 0, 0))
- {
- isFindTimeGw = true;
- info += $"{g.StartTime}{(!string.IsNullOrWhiteSpace(g.EndTime) ? "-" + g.EndTime + " " : " ")}{startStr}" +
- $"{(!string.IsNullOrWhiteSpace(g.Name) ? "(" + g.Name + ") " : "")}{(!string.IsNullOrWhiteSpace(g.Address) ? "(地址: " + g.Address + " " : "")}" +
- $"{(!string.IsNullOrWhiteSpace(g.Tel) ? "联系电话:" + g.Tel + " " : "")}" +
- $"{(!string.IsNullOrWhiteSpace(g.Remark) ? "其他信息:" + g.Remark : "")}" + ")";
- listMeal.Remove(listMeal.Find(x => x.Id == g.Id));
- gl = g;
- }
- }
- }
- return info;
- }
- void CheckAndCenterParagraphs(Document doc)
- {
- // 遍历文档中的所有段落
- foreach (Paragraph para in doc.GetChildNodes(NodeType.Paragraph, true))
- {
- // 获取段落的文本
- string paragraphText = para.GetText();
- // 检查段落的文本是否为"下午"或"上午"
- if (paragraphText.Trim().Equals("下午") || paragraphText.Trim().Equals("上午"))
- {
- // 设置段落格式为居中对齐
- para.ParagraphFormat.Alignment = ParagraphAlignment.Center;
- }
- }
- }
- List<tagContent> CheckAndCenterTags(int diid)
- {
- List<tagContent> tags = new List<tagContent>();
- //本团行程单数据
- List<Grp_TravelList> listTravel = ExecuteDbContext((db => { return db.Grp_TravelList.AsNoTracking().Where(x => x.Diid == diid && x.IsDel == 0).ToList(); }));
- foreach (var item in listTravel)
- {
- item.Trip = item.Trip.Replace("[++]", string.Empty);
- item.Trip = item.Trip.Replace("\r\n", "\n");
- item.Trip = item.Trip.Replace("\n", "\r\n");
- var tempTags = CheckAndCenterTagsStr(item.Trip);
- var dt = DateTime.Parse(item.Date);
- if (tempTags.Any())
- {
- tempTags.ForEach(x => x.Date = dt);
- }
- tags.AddRange(tempTags);
- }
- return tags;
- }
- List<tagContent> CheckAndCenterTagsStr(string input)
- {
- List<tagContent> tags = new List<tagContent>();
- List<string> results = new List<string>();
- int startIndex = input.IndexOf(tagContent.TagFormat.Item1);
- int endIndex = -1;
- while (startIndex != -1)
- {
- // 找到结束标记
- endIndex = input.IndexOf(tagContent.TagFormat.Item2, startIndex);
- if (endIndex != -1)
- {
- // 确保结束标记在开始标记之后
- if (endIndex < startIndex)
- {
- // 移动到下一个起始位置
- startIndex = input.IndexOf(tagContent.TagFormat.Item1, endIndex + 1);
- continue;
- }
- tagContent tag = new tagContent();
- tag.IsFinally = true;
- // 获取标记内容以及前后字符串
- if (startIndex >= tagContent.tagLength && input.Length > endIndex + tagContent.tagLength)
- {
- string before = input.Substring(startIndex - tagContent.tagLength, tagContent.tagLength);
- string after = input.Substring(endIndex + tagContent.TagFormat.Item2.Length, tagContent.tagLength);
- string content = input.Substring(startIndex + tagContent.TagFormat.Item1.Length, endIndex - startIndex - tagContent.TagFormat.Item1.Length);
- tag.IsFinally = false;
- tag.EndTag = after;
- tag.Content = content;
- tag.StartTag = before;
- }
- else
- {
- string content = input.Substring(startIndex + tagContent.TagFormat.Item1.Length, endIndex - startIndex - tagContent.TagFormat.Item1.Length);
- tag.Content = content;
- }
- tags.Add(tag);
- // 移动到下一个起始位置
- startIndex = input.IndexOf(tagContent.TagFormat.Item1, endIndex + 1);
- }
- else
- {
- break;
- }
- }
- return tags;
- }
- string CheckStr(string original, string changed)
- {
- // 创建diff_match_patch对象
- var dmp = new diff_match_patch();
- // 计算差异
- List<Diff> diffs = dmp.diff_main(original, changed);
- // 清理和合并差异
- dmp.diff_cleanupSemantic(diffs);
- // 使用StringBuilder构建最终的字符串
- StringBuilder finalString = new StringBuilder();
- // 输出差异结果,并构建变动后的字符串
- foreach (Diff diff in diffs)
- {
- switch (diff.operation)
- {
- case Operation.EQUAL:
- // 相等的部分,直接添加到最终字符串
- finalString.Append(diff.text);
- break;
- case Operation.INSERT:
- // 插入的部分,添加标记并添加到最终字符串
- finalString.Append("[++]" + diff.text + "[++]");
- break;
- case Operation.DELETE:
- // 删除的部分,不添加到最终字符串
- finalString.Append("[++]" + diff.text + "[++]");
- break;
- }
- }
- // 输出变动后的字符串
- return finalString.ToString();
- }
- private Popover popover;
- private void airLable_Click(object sender, EventArgs e)
- {
- // 创建新的弹出框
- popover = new Popover
- {
- Size = new Size(150, 150) // 设置弹出框大小
- };
- // 调整弹出框位置
- popover.AdjustPosition(airLable);
- popover.Show(); // 显示弹出框
- }
- // 高亮包含指定文字的部分
- void HighlightText(Run run, string targetText, Color color)
- {
- string text = run.Text;
- int startIndex = text.IndexOf(targetText, StringComparison.Ordinal);
- if (startIndex >= 0)
- {
- Paragraph parentParagraph = (Paragraph)run.ParentNode;
- // 前部分
- if (startIndex > 0)
- {
- Run beforeRun = (Run)run.Clone(true);
- beforeRun.Text = text.Substring(0, startIndex);
- parentParagraph.InsertBefore(beforeRun, run);
- }
- // 匹配部分
- Run matchRun = (Run)run.Clone(true);
- matchRun.Text = text.Substring(startIndex, targetText.Length);
- matchRun.Font.Color = color;
- parentParagraph.InsertBefore(matchRun, run);
- // 后部分
- if (startIndex + targetText.Length < text.Length)
- {
- Run afterRun = (Run)run.Clone(true);
- afterRun.Text = text.Substring(startIndex + targetText.Length);
- parentParagraph.InsertBefore(afterRun, run);
- }
- // 删除原始Run
- run.Remove();
- }
- }
- string ReplaceNewlineIfNeeded(string input)
- {
- if (!input.Contains("\r\n") && input.Contains("\n"))
- {
- input = input.Replace("\n", "\r\n");
- }
- return input;
- }
- string ParseBlackTime(string time)
- {
- if (string.IsNullOrWhiteSpace(time))
- return "未知时长";
- string pattern = @"^(?:(\d+)[Hh])?(?:(\d+)[Mm])?$";
- Match match = Regex.Match(time, pattern, RegexOptions.IgnoreCase);
- if (match.Success && match.Length > 0)
- {
- string hours = match.Groups[1].Value;
- string minutes = match.Groups[2].Value;
- if (string.IsNullOrEmpty(hours) && string.IsNullOrEmpty(minutes))
- return "未知时长";
- if (string.IsNullOrEmpty(hours))
- return $"{minutes}分钟";
- if (string.IsNullOrEmpty(minutes))
- return $"{hours}小时";
- return $"{hours}小时{minutes}分钟";
- }
- return "未知时长";
- }
- string ExtractDigitsBeforeDecimal(string input)
- {
- Match match = Regex.Match(input, @"^\d+");
- return match.Success ? match.Value : string.Empty;
- }
- int ExtractNumberAfterPlus(string input)
- {
- int value = 0;
- if (string.IsNullOrEmpty(input))
- {
- return value;
- }
- string pattern = @"\+\d+"; // 匹配“+”及其后的数字
- Match match = Regex.Match(input, pattern);
- if (match.Success)
- {
- int.TryParse(match.Value.Substring(1), out value); // 去掉“+”符号,只保留数字部分
- }
- return value;
- }
- }
- public class GoogleApiFormat
- {
- public bool isTrue { get; set; } = false;
- public string Time { get; set; }
- public string Distance { get; set; }
- public int GetDistResult { get; set; }
- public int GetGoogleResult { get; set; }
- }
- public class tagContent
- {
- public DateTime Date { get; set; }
- public string StartTag { get; set; }
- public string EndTag { get; set; }
- public string Content { get; set; }
- public static int tagLength { get { return 3; } }
- public static Tuple<string, string> TagFormat { get { return new Tuple<string, string>("【#", "#】"); } }
- public string QueryTag { get { return this.StartTag + this.EndTag; } }
- public bool IsFinally { get; set; }
- }
- public class Res_OfficialActivitiesFormat : Res_OfficialActivities
- {
- public DateTime GetDateTime
- {
- get
- {
- DateTime.TryParse(this.Date, out DateTime Data);
- //if (this.Date.Contains("T16:"))
- //{
- // Data = Data.AddDays(1);
- //}
- Regex rg = new Regex("[0-9]+");
- var gwTimeHHMM = this.Time;
- var gwTimeHHMMMatch = rg.Matches(gwTimeHHMM);
- if (gwTimeHHMMMatch.Count > 1)
- {
- Data = Data.AddHours(int.Parse(gwTimeHHMMMatch[0].Value));
- Data = Data.AddMinutes(int.Parse(gwTimeHHMMMatch[1].Value));
- }
- return Data;
- }
- }
- }
- public static class ExpansionString
- {
- public static string RemoveEnd(this string input, string suffix)
- {
- if (string.IsNullOrEmpty(input) || string.IsNullOrEmpty(suffix))
- return input;
- if (input.EndsWith(suffix))
- {
- return input.Substring(0, input.Length - suffix.Length);
- }
- return input;
- }
- }
- }
|