12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710 |
- using Aspose.Words;
- using DAL;
- using Models;
- using Newtonsoft.Json.Linq;
- using OA2014.publicCode;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Configuration;
- using System.Data;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Security.Cryptography;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- using System.Web;
- using System.Web.Util;
- using System.Windows.Forms;
- using System.Xml.Linq;
- namespace WinTools
- {
- public partial class OPTravelListOutput : Form
- {
- //团组信息DAL
- DelegationInfoService dis = new DelegationInfoService();
- //三字码DAL
- ThreeCodeServices tcs = new ThreeCodeServices();
- //航司缩写DAL
- AirCompanyServcies acs = new AirCompanyServcies();
- //车导地接DAL
- CarTouristGuideGroundReservationsService ctgs = new CarTouristGuideGroundReservationsService();
- //车导地接详情DAL
- CarTouristGuideGroundReservationsContentService ctgss = new CarTouristGuideGroundReservationsContentService();
- //公务
- OfficialActivitiesService oas = new OfficialActivitiesService();
- //酒店信息DAL
- HotelReservationsService htrs = new HotelReservationsService();
- //行程详情DAL
- TravelDetailsService tds = new TravelDetailsService();
- //行程单DAL
- TravelListService tls = new TravelListService();
- //谷歌地图接口结果DAL
- GoogleMapApiResultService gmrs = new GoogleMapApiResultService();
- string[] weekdays = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
- public OPTravelListOutput()
- {
- InitializeComponent();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- comb_Delegation.ValueMember = "Id";
- comb_Delegation.DisplayMember = "TeamName";
- comb_Delegation.DataSource = dis.GetAll();
- }
- private void btnOutput_Click(object sender, EventArgs e)
- {
- lblOutputResult.Text = "文件正在导出...";
- lblOutputResult.ForeColor = Color.Black;
- //数据源
- List<TravelList> _travelList = new List<TravelList>();
- int diid = (int)comb_Delegation.SelectedValue;
- DataTable dtBlack = PublicCode.GetTableByBlackCode(diid);
- DelegationInfo di = dis.GetDelegationInfoByID(diid);
- string CityStr1 = "";
- List<string> countriesList = new List<string>();
- List<string> cityList = new List<string>();
- string countriesIntroduction = "";
- string cityIntroduction = "";
- string timeDifference = "";
- string currExchangeRate = "";
- string txt_itemPrepare = "";
- string txt_specialReminder = "";
- string txt_cGPrecautions = "";
- string txt_yGCG = "";
- string txt_conduct = "";
- string txt_commonEnglish = "";
- if (dtBlack == null && (dtBlack.Rows[0]["Day"] == null || dtBlack.Rows[0]["Day"].ToString() == ""))
- {
- //提示
- //PublicCode.GetAlertMsg(this, GetType(), dt.Rows[dt.Rows.Count - 1]["Error"].ToString());
- }
- else
- {
- //创建三字码示例
- ThreeCode t = new ThreeCode();
- //城市缓存
- string city = "";
- //出访城市
- for (int i = 0; i < dtBlack.Rows.Count; i++)
- {
- if ((i + 1) < dtBlack.Rows.Count && dtBlack.Rows[i]["Three"].ToString() == dtBlack.Rows[i + 1]["Three"].ToString())
- {
- continue;
- }
- if (dtBlack.Rows.Count > 0 && (dtBlack.Rows[i]["Three"].ToString() != null && dtBlack.Rows[i]["Three"].ToString() != ""))
- {
- //出发城市
- string cityTemp = dtBlack.Rows[i]["Three"].ToString().Replace("/", string.Empty).Substring(0, 3);
- t = tcs.getByThree(cityTemp);
- if (t != null)
- {
- city = city + "/" + t.City;
- }
- else
- {
- city = city + "/【" + cityTemp + "未收录,请联系机票同事录入】";
- }
- if (i == dtBlack.Rows.Count - 1)
- {
- //抵达城市
- cityTemp = dtBlack.Rows[i]["Three"].ToString().Replace("/", string.Empty).Substring(3, 3);
- t = tcs.getByThree(cityTemp);
- if (t != null)
- {
- city = city + "/" + t.City;
- }
- else
- {
- city = city + "/【" + cityTemp + "未收录,请联系机票同事录入】";
- }
- }
- }
- }
- if (city != "" && city != null)
- {
- string[] cityStr2 = city.Split('/');
- string[] strs = cityStr2.Distinct().ToArray(); ;
- string str = "";
- foreach (var s in strs)
- {
- str += s + "/";
- }
- str = str.TrimStart('/');
- str = str.TrimEnd('/');
- //lblTourCity.Text = "去重前:" + city.TrimStart('/') + "\n 去重后:" + str;
- CityStr1 = city.TrimStart('/');
- }
- opitineraryService opitservice = new opitineraryService();
- //城市不为空
- if (!string.IsNullOrEmpty(city))
- {
- cityList = city.TrimStart('/').Split('/').ToList();
- if (cityList.Count > 1)
- {
- cityList.RemoveAt(0);
- }
- opitinerarydata cityData = opitservice.getDaFirstData(cityList[0]);
- cityIntroduction = cityData.Introduction;
- timeDifference = cityData.TimeDifference;
- currExchangeRate = cityData.CurrExchangeRate.ToString();
- }
- //国家不为空
- if (!string.IsNullOrEmpty(di.VisitCountry))
- {
- countriesList = di.VisitCountry.Split(' ').ToList();
- opitinerarydata Country = opitservice.getDaFirstData(countriesList[0]);
- countriesIntroduction = Country.Introduction == null ? "" : Country.Introduction;
- }
- //取出固定标语
- opitineraryfixed fixedData = opitservice.getFiFirstData();
- //if (!string.IsNullOrEmpty(fixedData.Tid.ToString()))
- //{
- //}
- txt_cGPrecautions = fixedData.CGPrecautions;
- txt_commonEnglish = fixedData.CommonEnglish;
- txt_conduct = fixedData.Conduct;
- txt_itemPrepare = fixedData.ItemPrepare;
- txt_specialReminder = fixedData.SpecialReminder;
- txt_yGCG = fixedData.YGCG;
- // 行程repeater
- if (tls.GetByDiid(diid).Count > 0)
- {
- _travelList = tls.GetByDiid(diid).Where(x => x.issel == 1).ToList();
- }
- else
- {
- //生成该时间段日期
- List<string> timeList = PublicCode.GetTimeListByDataTable(dtBlack);
- if (timeList != null)
- {
- string[] str = new string[timeList.Count];
- //rpData.DataSource = str;
- //rpData.DataBind();
- }
- }
- }
- //创建数据源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)
- {
- 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);
- }
- //lblTeamName.Text = di.TourCode;
- //lblVisitDays.Text = di.VisitDays.ToString();
- //lblVisitDays2.Text = di.VisitDays.ToString();
- //lblPNumber.Text = di.VisitPNumber.ToString();
- //lblGroup.Text = di.TeamName.ToString();
- Dictionary<string, string> dic = new Dictionary<string, string>();
- dic.Add("Dele", di.TeamName.ToString() + PublicCode.GetNum(di.VisitDays.ToString()));
- dic.Add("City", CityStr1);
- dic.Add("Days", di.VisitDays.ToString());
- dic.Add("DeleCode", di.TourCode);
- dic.Add("Pnum", di.VisitPNumber.ToString());
- dic.Add("Pnum2", di.VisitPNumber.ToString());
- List<DeleClient> leader = new DeleClientService().GetByDiid(di.Id);
- if (leader != null && leader.Count > 0)
- {
- dic.Add("Leader", new DeleClientService().GetByDiid(di.Id)[0].LastName + new DeleClientService().GetByDiid(di.Id)[0].Name);
- }
- else
- {
- dic.Add("Leader", "");
- }
- dic.Add("Pnum3", di.VisitPNumber.ToString());
- int UserId = int.Parse(ConfigurationManager.AppSettings["OPId"]);
- dic.Add("OP", new UsersService().GetUsersByID(UserId).CnName);
- dic.Add("OPTel", new UsersService().GetUsersByID(UserId).Phone);
- //dic.Add("OP", "OP姓名");
- //dic.Add("OPTel", "OP手机号码");
- string countriesStr = "";
- countriesList.ForEach(s => countriesStr += s + "、");
- countriesStr = countriesStr.TrimEnd('、');
- string cityStr = "";
- cityList.ForEach(s => cityStr += s + "、");
- cityStr = cityStr.TrimEnd('、');
- //下方数据
- dic.Add("selCountries", countriesStr == null ? "" : countriesStr);
- dic.Add("selCity", cityStr == null ? "" : cityStr);
- dic.Add("countriesIntroduction", countriesIntroduction == null ? "" : countriesIntroduction);
- dic.Add("CityIntroduction", cityIntroduction == null ? "" : cityIntroduction);
- dic.Add("timeDifference", timeDifference == null ? "" : timeDifference);
- dic.Add("currExchangeRate", currExchangeRate == null ? "" : currExchangeRate);
- dic.Add("temperature", "");
- dic.Add("txt_itemPrepare", txt_itemPrepare == null ? "" : txt_itemPrepare);
- dic.Add("txt_specialReminder", txt_specialReminder == null ? "" : txt_specialReminder);
- dic.Add("txt_cGPrecautions", txt_cGPrecautions == null ? "" : txt_cGPrecautions);
- dic.Add("txt_yGCG", txt_yGCG == null ? "" : txt_yGCG);
- dic.Add("txt_conduct", txt_conduct == null ? "" : txt_conduct);
- dic.Add("txt_commonEnglish", txt_commonEnglish == null ? "" : txt_commonEnglish);
- //模板路径
- string tempPath = @"D:\日行程3.docx";
- //载入模板
- Document doc = new Document(tempPath);
- DocumentBuilder builder = new DocumentBuilder(doc);
- foreach (var key in dic.Keys)
- {
- 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());
- builder.MoveToCell(0, i + 1, 3, 0);
- builder.Write(dtSource.Rows[i]["Trip"].ToString());
- }
- }
- catch (Exception ex)
- {
- }
- //删除多余行
- while (tableOne.Rows.Count > 1 + dtSource.Rows.Count)
- {
- tableOne.Rows.RemoveAt(1 + dtSource.Rows.Count);//(1+dtSource.Rows.Count + 1)-1
- }
- string savePath = ConfigurationManager.AppSettings["TravelListDocSavePath"];
- if (!Directory.Exists(savePath))
- {
- try
- {
- Directory.CreateDirectory(savePath);
- }
- catch
- {
- }
- }
- string strFileName = savePath + di.TeamName + "出访日程.docx";
- doc.Save(strFileName, Aspose.Words.SaveFormat.Doc);
- lblOutputResult.Text = "文件导出完成";
- lblOutputResult.ForeColor = Color.Green;
- System.Diagnostics.Process.Start("Explorer.exe", "/select," + strFileName);
- //doc.Save(HttpUtility.UrlEncode(strFileName, Encoding.UTF8), Aspose.Words.SaveFormat.Doc, Aspose.Words.SaveType.OpenInWord, Response);
- }
- private void btnImport_Click(object sender, EventArgs e)
- {
- lblImport.Text = "";
- lblImport.Text = "正在导入数据";
- int comb_Diid = (int)comb_Delegation.SelectedValue;
- int UserId = int.Parse(ConfigurationManager.AppSettings["OPId"]);
- //下拉框团组对象实例
- DelegationInfo di = dis.GetDelegationInfoByID(comb_Diid);
- //获取机票黑屏代码信息,生成datatable表
- DataTable dt = PublicCode.GetTableByBlackCode(di.Id);
- //通过datatable表里的第一个字段的信息来判断是否有黑屏代码
- //没有则提示未录入
- if (dt.Rows[0]["Day"] == null || dt.Rows[0]["Day"].ToString() == "")
- {
- //PublicCode.GetAlertMsg(this, GetType(), dt.Rows[dt.Rows.Count - 1]["Error"].ToString());
- lblImport.Text = "黑屏代码未录入";
- }
- else//成功获取黑屏代码
- {
- //根据黑屏代码生成日期段
- List<string> timeList = PublicCode.GetTimeListByDataTable(dt);
- //本团车导地接信息
- List<CarTouristGuideGroundReservations> listctg = ctgs.GetCarTouristGuideGroundReservationsByDIID(di.Id);
- //本团酒店信息
- List<HotelReservations> listht = htrs.GetByDIId(di.Id);
- //本团行程单数据
- List<Models.TravelList> listTravel = tls.GetByDiid(di.Id);
- try
- {
- if (listTravel != null && listTravel.Count > 0)//若本团已存行程,则合并/更新;同时因为机票行程的变化或行程详情的变化,会导致行程更改
- {
- if (timeList.Count > listTravel.Count)//1.改版后黑屏代码天数>已存在行程的天数
- {
- //1.1替换日期和星期
- for (int i = 0; i < listTravel.Count; i++)
- {
- //日期转换星期
- string weekday = weekdays[(int)new DateTime(
- Convert.ToInt32(timeList[i].Split('-')[0]),
- Convert.ToInt32(timeList[i].Split('-')[1]),
- Convert.ToInt32(timeList[i].Split('-')[2])).DayOfWeek];
- listTravel[i].Date = timeList[i].Substring(5, 2) + "月" + timeList[i].Substring(8, 2) + "日";
- listTravel[i].WeekDay = weekday;
- listTravel[i].OPer = UserId;
- listTravel[i].OPdate = PublicCode.GetBeijingTime().ToString("yyyy-MM-dd HH:mm:ss");
- listTravel[i].Isdel = 0;
- tls.EditTravelList(listTravel[i]);
- }
- //1.2添加未有行程
- //航班号标识
- //string flightcode_Sign = "";
- //三字码标识
- //string citycode_Sign = "";
- #region 城市数据 20210823 贾文滔
- List<PublicCode.CityInDate> CityInDateList = PublicCode.GetCityByDataTable(dt);
- #endregion
- //生成行程
- for (int i = listTravel.Count; i < timeList.Count; i++)
- {
- //实、例化一个temp
- Models.TravelList tlTemp = new Models.TravelList();
- //团号
- tlTemp.Diid = di.Id;
- //天数序号
- tlTemp.Days = i + 1;
- //日期
- tlTemp.Date = timeList[i].Substring(5, 2) + "月" + timeList[i].Substring(8, 2) + "日";
- //日期转换星期
- string weekday = weekdays[(int)new DateTime(
- Convert.ToInt32(timeList[i].Split('-')[0]),
- Convert.ToInt32(timeList[i].Split('-')[1]),
- Convert.ToInt32(timeList[i].Split('-')[2])).DayOfWeek];
- tlTemp.WeekDay = weekday;
- //行程
- string trip = "";
- //历经城市
- string city = "";
- #region 机票数据
- //根据航班信息推出抵达机场的位置信息
- string AirPort = "";
- //根据航班时间前后推进入机场或离开机场的时间
- string GoAirportTime = "", leaveAirPortTime = "";
- //飞机标识
- bool airSign = false;
- //查询该日期下的航班信息
- //resultRows字段顺序为:航班号,起飞日期,三字码,起飞时刻,到达时刻,出发航站楼,到达航站楼,机型,飞行时间,整理后的起飞日期,整理后的到达日期
- DataRow[] resultRows = dt.Select("Day like '%" + timeList[i] + "%'");
- if (resultRows.Count() > 0)
- {
- //修改标识
- airSign = true;
- }
- //同一天只有一条数据走正常判定
- if (resultRows.Count() == 1)
- {
- #region 三字码
- string _citycode = resultRows[0]["Three"].ToString();
- //起飞城市三字码
- ThreeCode font_threecode = null;
- string font_citycode = _citycode.Replace("/", string.Empty).Substring(0, 3);
- //抵达城市
- string font_City = "";
- //起飞城市机场
- string font_Airport = "";
- //抵达城市三字码
- ThreeCode back_threecode = null;
- string end_citycode = _citycode.Replace("/", string.Empty).Substring(3, 3);
- //抵达城市机场
- string back_Airport = "";
- //抵达城市
- string back_City = "";
- font_threecode = tcs.getByThree(font_citycode);
- //验证是否存在三字码
- if (font_threecode == null)
- {
- city = city + "【此三字码" + font_citycode + "未收录,请机票同事录入】" + "一";
- font_Airport = "【此三字码" + font_citycode + "未收录,请机票同事录入】";
- font_City = "【此三字码" + font_citycode + "未收录,请机票同事录入】";
- }
- else
- {
- city = city + "/" + font_threecode.City;
- font_Airport = font_threecode.AirPort;
- font_City = font_threecode.City; ;
- }
- back_threecode = tcs.getByThree(end_citycode);
- if (back_threecode == null)
- {
- city = city + "【此三字码" + end_citycode + "未收录,请机票同事录入】" + "一";
- back_Airport = "【此三字码" + end_citycode + "未收录,请机票同事录入】";
- back_City = "【此三字码" + end_citycode + "未收录,请机票同事录入】";
- }
- else
- {
- city = city + "/" + back_threecode.City;
- //部分黄热病国家,需要提醒打疫苗
- string result = PublicCode.GetCountryInfo(back_threecode.Country);
- if (result.Contains("3"))
- {
- city += "(此地区为黄热病地区,请注意打疫苗)";
- }
- back_Airport = back_threecode.AirPort;
- back_City = back_threecode.City;
- //查询酒店路线要用
- AirPort = back_threecode.AirPort;
- }
- //行程里加入城市
- #endregion
- #region 信息准备
- trip = city.TrimStart('/');
- //起飞航站楼
- string _StartBuilding = resultRows[0]["StartBuilding"].ToString();
- //转机航站楼
- string _EndBuilding = resultRows[0]["EndBuilding"].ToString();
- //起飞时刻
- string _startTime = resultRows[0]["StartTime"].ToString();
- //飞行时刻
- string _flightTime = resultRows[0]["FlightTime"].ToString();
- _flightTime = _flightTime.Contains("H") ? _flightTime.Split('H')[0] + "小时" + _flightTime.Split('H')[1].Split('M')[0] + "分钟" : _flightTime.Split('M')[0] + "分钟";
- //到达时刻
- string _endTime = resultRows[0]["EndTime"].ToString();
- //航班号
- string _flightcode = resultRows[0]["Fliagtcode"].ToString();
- //航司
- AirCompany aircompany = acs.getByShortCode(_flightcode.Substring(0, 2));
- string _aircompany_Name = "";
- if (aircompany == null)
- {
- _aircompany_Name = "【此航司" + resultRows[0]["Fliagtcode"].ToString().Substring(0, 2) + "未收录,请机票同事录入】";
- }
- else
- {
- _aircompany_Name = aircompany.CnName;
- }
- //机型判断
- string airModel = resultRows[0]["AirModel"].ToString();
- airModel = PublicCode.GetLonger(airModel.Substring(0, 1)) + airModel;
- #endregion
- #region trip编辑
- //若本行抵达时间包含"+1",则本行为母版行,仅提示登机
- if (resultRows[0]["Sign"].ToString() == "0" && _endTime.Contains("+"))
- {
- //根据航班信息推算进入机场的时间
- int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前两小时
- string result = PublicCode.GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前三小时
- if (result.Contains("2"))
- {
- temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时
- }
- if (temp < 0)
- {
- temp = temp + 24;
- }
- GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
- GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);
- //第一天之后的行程可以加上“酒店出发到机场”的距离和时间
- if (i > 0)
- {
- #region 酒店
- foreach (HotelReservations h in listht)
- {
- if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i])
- && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i]))
- {
- //利用谷歌API计算路线
- if (AirPort != "")
- {
- GoogleMapApiResult g = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, font_Airport);
- if (g != null)
- {
- //计算“酒店到机场”的时间
- string CheckoutHotelTime;
- //处理时间格式
- string hours = "", mins = "";
- if (g.Time.Contains("hour"))
- {
- g.Time = g.Time.Replace("hour", "h");
- }
- else if (g.Time.Contains("hours"))
- {
- g.Time = g.Time.Replace("hours", "h");
- }
- g.Time = g.Time.Replace("mins", "m");
- if (g.Time.Contains("h"))
- {
- hours = g.Time.Split('h')[0].Trim();
- }
- else if (!g.Time.Contains("h"))
- {
- mins = g.Time.Split('m')[0].Trim();
- }
- int hour = Convert.ToInt32(GoAirportTime.Substring(0, 2));
- int min = Convert.ToInt32(GoAirportTime.Substring(3, 2));
- min = min - Convert.ToInt32(mins);
- if (min < 0)
- {
- min = min + 60;
- hour = hour - 1;
- }
- if (hours != "")
- {
- hour = hour - Convert.ToInt32(hours);
- }
- if (hour < 0)
- {
- hour = hour + 24;
- }
- CheckoutHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
- CheckoutHotelTime = CheckoutHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
- trip = trip + "\r\n"
- + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")";
- }
- else
- {
- try
- {
- JObject Result = PublicCode.GetDirectionByGoogleApi(h.HotelAddress, font_Airport);
- //计算“抵达酒店办理入住手续”的时间
- string CheckoutHotelTime;
- //处理时间格式
- string Gtime = "", hours = "", mins = "";
- if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
- }
- else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
- }
- Gtime = Gtime.Replace("mins", "m");
- if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
- {
- hours = Gtime.Split('h')[0].Trim();
- }
- else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
- {
- mins = Gtime.Split('m')[0].Trim();
- }
- int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- min = min - Convert.ToInt32(mins);
- if (min < 0)
- {
- min = min + 60;
- hour = hour - 1;
- }
- if (hours != "")
- {
- hour = hour + Convert.ToInt32(hours);
- }
- if (hour < 0)
- {
- hour = hour + 24;
- }
- CheckoutHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
- CheckoutHotelTime = CheckoutHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
- trip = trip + "\r\n"
- + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")";
- GoogleMapApiResult gtemp = new GoogleMapApiResult();
- gtemp.Diid = di.Id;
- gtemp.Date = "";
- gtemp.Moment = "";
- gtemp.StartAddress = AirPort;
- gtemp.EndAddress = h.HotelAddress;
- gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
- gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
- gmrs.Add(gtemp);
- }
- catch
- {
- trip = trip + "\r\n"
- + " 乘车前往机场:(谷歌接口异常,无法测算的路程时间)";
- }
- }
- }
- }
- }
- #endregion
- }
- //行程
- trip = trip
- + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:"
- + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";"
- + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");";
- //标记本行为母版行
- //flightcode_Sign = resultRows[0]["Fliagtcode"].ToString();
- //citycode_Sign = resultRows[0]["Three"].ToString();
- }
- //与前一行航班号,三字码相同且本行抵达时间不包含"+1",则本行是被生成的重复行,仅提示抵达
- else if (resultRows[0]["Sign"].ToString() == "1") /* && (!_endTime.Contains("+"))&&(_flightcode == flightcode_Sign)&&(_citycode == citycode_Sign)*/
- {
- //行程
- trip = trip
- + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续,之后前往提取行李";
- //根据航班信息推算离开机场的时间
- int temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1;
- leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
- leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2);
- if (i == timeList.Count - 1)//如果本日是行程的最后一天,则提醒“行程圆满结束”
- {
- trip = trip + " ,圆满结束此次访问之行!";
- }
- else //如果本日不是行程的最后一天,正常提醒
- {
- trip = trip + ";\r\n" + leaveAirPortTime + " 搭乘专车前往酒店,抵达后办理入住;";
- }
- //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻
- int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- min = min + 10;
- if (min > 59)
- {
- min = min - 60;
- hour = hour + 1;
- }
- if (hour > 23)
- {
- hour = hour - 24;
- }
- leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
- leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
- }
- //正常提示
- else
- {
- //根据航班信息推算进入机场的时间
- int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前2小时
- string result = PublicCode.GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前3小时
- if (result.Contains("2"))
- {
- temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时
- }
- if (temp < 0)
- {
- temp = temp + 24;
- }
- GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
- GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);
- //根据航班信息推算离开机场的时间
- temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1;
- leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
- leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2);
- //第一天之后的行程可以加上“酒店出发到机场”的距离和时间
- if (i > 0)
- {
- #region 酒店
- foreach (HotelReservations h in listht)
- {
- if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i])
- && Convert.ToDateTime(h.CheckOutDate) >= Convert.ToDateTime(timeList[i]))
- {
- //利用谷歌API计算路线
- if (AirPort != "")
- {
- GoogleMapApiResult g = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, font_Airport);
- if (g != null)
- {
- //计算“酒店到机场”的时间
- string CheckoutHotelTime;
- //处理时间格式
- string hours = "0", mins = "0";
- if (g.Time.Contains("hour"))
- {
- g.Time = g.Time.Replace("hour", "h");
- }
- else if (g.Time.Contains("hours"))
- {
- g.Time = g.Time.Replace("hours", "h");
- }
- g.Time = g.Time.Replace("mins", "m");
- if (g.Time.Contains("h"))
- {
- hours = g.Time.Split('h')[0].Trim();
- }
- else if (!g.Time.Contains("h"))
- {
- mins = g.Time.Split('m')[0].Trim();
- }
- int _hour = Convert.ToInt32(GoAirportTime.Substring(0, 2));
- int _min = Convert.ToInt32(GoAirportTime.Substring(3, 2));
- _min = _min - Convert.ToInt32(mins);
- if (_min < 0)
- {
- _min = _min + 60;
- _hour = _hour - 1;
- }
- if (hours != "")
- {
- _hour = _hour - Convert.ToInt32(hours);
- }
- if (_hour < 0)
- {
- _hour = _hour + 24;
- }
- CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
- CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());
- trip = trip + "\r\n"
- + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")";
- }
- else
- {
- try
- {
- JObject Result = PublicCode.GetDirectionByGoogleApi(h.HotelAddress, font_Airport);
- //计算“抵达酒店办理入住手续”的时间
- string CheckoutHotelTime;
- //处理时间格式
- string Gtime = "", hours = "0", mins = "0";
- if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
- }
- else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
- }
- Gtime = Gtime.Replace("mins", "m");
- if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
- {
- hours = Gtime.Split('h')[0].Trim();
- }
- else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
- {
- mins = Gtime.Split('m')[0].Trim();
- }
- int _hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int _min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- _min = _min - Convert.ToInt32(mins);
- if (_min < 0)
- {
- _min = _min + 60;
- _hour = _hour - 1;
- }
- if (hours != "")
- {
- _hour = _hour + Convert.ToInt32(hours);
- }
- if (_hour < 0)
- {
- _hour = _hour + 24;
- }
- CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
- CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());
- trip = trip + "\r\n"
- + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")";
- GoogleMapApiResult gtemp = new GoogleMapApiResult();
- gtemp.Diid = di.Id;
- gtemp.Date = "";
- gtemp.Moment = "";
- gtemp.StartAddress = AirPort;
- gtemp.EndAddress = h.HotelAddress;
- gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
- gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
- gmrs.Add(gtemp);
- }
- catch
- {
- trip = trip + "\r\n"
- + " 乘车前往机场:(谷歌接口异常,无法测算的路程时间)";
- }
- }
- }
- }
- }
- #endregion
- }
- trip = trip
- + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:"
- + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";"
- + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");"
- + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续,之后前往提取行李";
- if (i == timeList.Count - 1)//如果本日是行程的最后一天,先增加酒店到机场的距离时间,再在末尾提醒“行程圆满结束”
- {
- trip = trip + ",圆满结束此次访问之行!";
- }
- else //如果本日不是行程的最后一天,正常提醒
- {
- trip = trip + ";\r\n" + leaveAirPortTime + "搭乘专车前往酒店,抵达后办理入住;";
- }
- //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻
- int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- min = min + 10;
- if (min > 59)
- {
- min = min - 60;
- hour = hour + 1;
- }
- if (hour > 23)
- {
- hour = hour - 24;
- }
- leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
- leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
- }
- #endregion
- }
- //同一天多条数据走分类讨论
- else
- {
- for (int n = 0; n < resultRows.Count(); n++)
- {
- city = "";
- #region 三字码
- string _citycode = resultRows[n]["Three"].ToString();
- //起飞城市三字码
- ThreeCode font_threecode = null;
- string font_citycode = _citycode.Replace("/", string.Empty).Substring(0, 3);
- //抵达城市
- string font_City = "";
- //起飞城市机场
- string font_Airport = "";
- //抵达城市三字码
- ThreeCode back_threecode = null;
- string end_citycode = _citycode.Replace("/", string.Empty).Substring(3, 3);
- //抵达城市机场
- string back_Airport = "";
- //抵达城市
- string back_City = "";
- font_threecode = tcs.getByThree(font_citycode);
- //验证是否存在三字码
- if (font_threecode == null)
- {
- city = city + "【此三字码" + font_citycode + "未收录,请机票同事录入】" + "一";
- font_Airport = "【此三字码" + font_citycode + "未收录,请机票同事录入】";
- font_City = "【此三字码" + font_citycode + "未收录,请机票同事录入】";
- }
- else
- {
- city = city + "/" + font_threecode.City;
- font_Airport = font_threecode.AirPort;
- font_City = font_threecode.City; ;
- }
- back_threecode = tcs.getByThree(end_citycode);
- if (back_threecode == null)
- {
- city = city + "【此三字码" + end_citycode + "未收录,请机票同事录入】" + "一";
- back_Airport = "【此三字码" + end_citycode + "未收录,请机票同事录入】";
- back_City = "【此三字码" + end_citycode + "未收录,请机票同事录入】";
- }
- else
- {
- city = city + "/" + back_threecode.City;
- //部分黄热病国家,需要提醒打疫苗
- string result = PublicCode.GetCountryInfo(back_threecode.Country);
- if (result.Contains("3"))
- {
- city += "(此地区为黄热病地区,请注意打疫苗)";
- }
- back_Airport = back_threecode.AirPort;
- back_City = back_threecode.City;
- //查询酒店路线要用
- AirPort = back_threecode.AirPort;
- }
- //行程里加入城市
- if (trip == "")
- {
- trip = city.TrimStart('/');
- }
- else
- {
- trip = trip + "\r\n"
- + city.TrimStart('/');
- }
- //起飞航站楼
- string _StartBuilding = resultRows[n]["StartBuilding"].ToString();
- //转机航站楼
- string _EndBuilding = resultRows[n]["EndBuilding"].ToString();
- //起飞时刻
- string _startTime = resultRows[n]["StartTime"].ToString();
- //飞行时刻
- string _flightTime = resultRows[n]["FlightTime"].ToString();
- _flightTime = _flightTime.Contains("H") ? _flightTime.Split('H')[0] + "小时" + _flightTime.Split('H')[1].Split('M')[0] + "分钟" : _flightTime.Split('M')[0] + "分钟";
- //到达时刻
- string _endTime = resultRows[n]["EndTime"].ToString();
- //航班号
- string _flightcode = resultRows[n]["Fliagtcode"].ToString();
- //航司
- AirCompany aircompany = acs.getByShortCode(_flightcode.Substring(0, 2));
- string _aircompany_Name = "";
- if (aircompany == null)
- {
- _aircompany_Name = "【此航司" + resultRows[n]["Fliagtcode"].ToString().Substring(0, 2) + "未收录,请机票同事录入】";
- }
- else
- {
- _aircompany_Name = aircompany.CnName;
- }
- //机型判断
- string airModel = resultRows[n]["AirModel"].ToString();
- airModel = PublicCode.GetLonger(airModel.Substring(0, 1)) + airModel;
- #endregion
- //Sign字段为标识,string类型,含义:0表示为原生黑屏代码、1表示“+1”新增的黑屏代码
- //目前存在两种情况:同一天的多条数据标识为“0->0”或“1->0”
- //如下示例
- //Day ArrivedDate Sign
- //10 10 0
- //10 11 0
- //11 11 1
- //11 12 0
- //12 12 1
- if (n == 0)
- {
- //原生机票代码
- if (resultRows[n]["Sign"].ToString() == "0")
- {
- #region trip编辑
- //根据航班信息推算进入机场的时间
- int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前两小时
- string result = PublicCode.GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前三小时
- if (result.Contains("2"))
- {
- temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时
- }
- if (temp < 0)
- {
- temp = temp + 24;
- }
- GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
- GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);
- //第一天之后的行程可以加上“酒店出发到机场”的距离和时间
- if (i > 0)
- {
- #region 酒店
- foreach (HotelReservations h in listht)
- {
- if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i])
- && Convert.ToDateTime(h.CheckOutDate) >= Convert.ToDateTime(timeList[i]))
- {
- //利用谷歌API计算路线
- if (AirPort != "")
- {
- GoogleMapApiResult g = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, font_Airport);
- if (g != null)
- {
- //计算“酒店到机场”的时间
- string CheckoutHotelTime;
- //处理时间格式
- string hours = "0", mins = "0";
- if (g.Time.Contains("hour"))
- {
- g.Time = g.Time.Replace("hour", "h");
- }
- else if (g.Time.Contains("hours"))
- {
- g.Time = g.Time.Replace("hours", "h");
- }
- g.Time = g.Time.Replace("mins", "m");
- if (g.Time.Contains("h"))
- {
- hours = g.Time.Split('h')[0].Trim();
- }
- else if (!g.Time.Contains("h"))
- {
- mins = g.Time.Split('m')[0].Trim();
- }
- int _hour = Convert.ToInt32(GoAirportTime.Substring(0, 2));
- int _min = Convert.ToInt32(GoAirportTime.Substring(3, 2));
- _min = _min - Convert.ToInt32(mins);
- if (_min < 0)
- {
- _min = _min + 60;
- _hour = _hour - 1;
- }
- if (hours != "")
- {
- _hour = _hour - Convert.ToInt32(hours);
- }
- if (_hour < 0)
- {
- _hour = _hour + 24;
- }
- CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
- CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());
- trip = trip + "\r\n"
- + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")";
- }
- else
- {
- try
- {
- JObject Result = PublicCode.GetDirectionByGoogleApi(h.HotelAddress, font_Airport);
- //计算“抵达酒店办理入住手续”的时间
- string CheckoutHotelTime;
- //处理时间格式
- string Gtime = "", hours = "0", mins = "0";
- if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
- }
- else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
- }
- Gtime = Gtime.Replace("mins", "m");
- if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
- {
- hours = Gtime.Split('h')[0].Trim();
- }
- else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
- {
- mins = Gtime.Split('m')[0].Trim();
- }
- int _hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int _min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- _min = _min - Convert.ToInt32(mins);
- if (_min < 0)
- {
- _min = _min + 60;
- _hour = _hour - 1;
- }
- if (hours != "")
- {
- _hour = _hour + Convert.ToInt32(hours);
- }
- if (_hour < 0)
- {
- _hour = _hour + 24;
- }
- CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
- CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());
- trip = trip + "\r\n"
- + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")";
- GoogleMapApiResult gtemp = new GoogleMapApiResult();
- gtemp.Diid = di.Id;
- gtemp.Date = "";
- gtemp.Moment = "";
- gtemp.StartAddress = AirPort;
- gtemp.EndAddress = h.HotelAddress;
- gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
- gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
- gmrs.Add(gtemp);
- }
- catch
- {
- trip = trip + "\r\n"
- + " 乘车前往机场:(谷歌接口异常,无法测算的路程时间)";
- }
- }
- }
- }
- }
- #endregion
- }
- trip = trip
- + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:"
- + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";"
- + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");"
- + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,提取行李;";
- #endregion
- }
- //"+1"生成的机票代码
- else if (resultRows[n]["Sign"].ToString() == "1")
- {
- #region trip编辑
- //行程
- trip = trip
- + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,提取行李;";
- #endregion
- }
- }
- else if (n > 0)
- {
- //若前行是原生的,则本行判定为转机
- if (resultRows[n - 1]["Sign"].ToString() == "0")
- {
- #region trip编辑
- int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 1;//一般提前提前2小时
- if (temp < 0)
- {
- temp = temp + 24;
- }
- GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
- GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);
- trip = trip
- + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:"
- + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";"
- + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");"
- + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续,之后前往提取行李";
- //若为最后一行,则计算后备等时间
- if (n == resultRows.Count() - 1)
- {
- //根据航班信息推算离开机场的时间
- temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1;
- leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
- leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2);
- if (i == timeList.Count - 1)//如果本日是行程的最后一天,先增加酒店到机场的距离时间,再在末尾提醒“行程圆满结束”
- {
- trip = trip + ",圆满结束此次访问之行!";
- }
- else //如果本日不是行程的最后一天,正常提醒
- {
- trip = trip + ";\r\n" + leaveAirPortTime + "搭乘专车前往酒店,抵达后办理入住;";
- }
- //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻
- int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- min = min + 10;
- if (min > 59)
- {
- min = min - 60;
- hour = hour + 1;
- }
- if (hour > 23)
- {
- hour = hour - 24;
- }
- leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
- leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
- }
- #endregion
- }
- //若前行是生成的,则本行判定为新出发
- else if (resultRows[n - 1]["Sign"].ToString() == "1")
- {
- #region trip编辑
- //根据航班信息推算进入机场的时间
- int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前2小时
- string result = PublicCode.GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前3小时
- if (result.Contains("2"))
- {
- temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时
- }
- if (temp < 0)
- {
- temp = temp + 24;
- }
- GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
- GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);
- //根据航班信息推算离开机场的时间
- temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1;
- leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
- leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2);
- //第一天之后的行程可以加上“酒店出发到机场”的距离和时间
- if (i > 0)
- {
- #region 酒店
- foreach (HotelReservations h in listht)
- {
- if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i])
- && Convert.ToDateTime(h.CheckOutDate) >= Convert.ToDateTime(timeList[i]))
- {
- //利用谷歌API计算路线
- if (AirPort != "")
- {
- GoogleMapApiResult g = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, font_Airport);
- if (g != null)
- {
- //计算“酒店到机场”的时间
- string CheckoutHotelTime;
- //处理时间格式
- string hours = "0", mins = "0";
- if (g.Time.Contains("hour"))
- {
- g.Time = g.Time.Replace("hour", "h");
- }
- else if (g.Time.Contains("hours"))
- {
- g.Time = g.Time.Replace("hours", "h");
- }
- g.Time = g.Time.Replace("mins", "m");
- if (g.Time.Contains("h"))
- {
- hours = g.Time.Split('h')[0].Trim();
- }
- else if (!g.Time.Contains("h"))
- {
- mins = g.Time.Split('m')[0].Trim();
- }
- int _hour = Convert.ToInt32(GoAirportTime.Substring(0, 2));
- int _min = Convert.ToInt32(GoAirportTime.Substring(3, 2));
- _min = _min - Convert.ToInt32(mins);
- if (_min < 0)
- {
- _min = _min + 60;
- _hour = _hour - 1;
- }
- if (hours != "")
- {
- _hour = _hour - Convert.ToInt32(hours);
- }
- if (_hour < 0)
- {
- _hour = _hour + 24;
- }
- CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
- CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());
- trip = trip + "\r\n"
- + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")";
- }
- else
- {
- try
- {
- JObject Result = PublicCode.GetDirectionByGoogleApi(h.HotelAddress, font_Airport);
- //计算“抵达酒店办理入住手续”的时间
- string CheckoutHotelTime;
- //处理时间格式
- string Gtime = "", hours = "0", mins = "0";
- if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
- }
- else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
- }
- Gtime = Gtime.Replace("mins", "m");
- if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
- {
- hours = Gtime.Split('h')[0].Trim();
- }
- else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
- {
- mins = Gtime.Split('m')[0].Trim();
- }
- int _hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int _min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- _min = _min - Convert.ToInt32(mins);
- if (_min < 0)
- {
- _min = _min + 60;
- _hour = _hour - 1;
- }
- if (hours != "")
- {
- _hour = _hour + Convert.ToInt32(hours);
- }
- if (_hour < 0)
- {
- _hour = _hour + 24;
- }
- CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
- CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());
- trip = trip + "\r\n"
- + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")";
- GoogleMapApiResult gtemp = new GoogleMapApiResult();
- gtemp.Diid = di.Id;
- gtemp.Date = "";
- gtemp.Moment = "";
- gtemp.StartAddress = AirPort;
- gtemp.EndAddress = h.HotelAddress;
- gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
- gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
- gmrs.Add(gtemp);
- }
- catch
- {
- trip = trip + "\r\n"
- + " 乘车前往机场:(谷歌接口异常,无法测算的路程时间)";
- }
- }
- }
- }
- }
- #endregion
- }
- trip = trip
- + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:"
- + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";"
- + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");"
- + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续,之后前往提取行李";
- if (i == timeList.Count - 1)//如果本日是行程的最后一天,先增加酒店到机场的距离时间,再在末尾提醒“行程圆满结束”
- {
- trip = trip + ",圆满结束此次访问之行!";
- }
- else //如果本日不是行程的最后一天,正常提醒
- {
- trip = trip + ";\r\n" + leaveAirPortTime + "搭乘专车前往酒店,抵达后办理入住;";
- }
- //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻
- int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- min = min + 10;
- if (min > 59)
- {
- min = min - 60;
- hour = hour + 1;
- }
- if (hour > 23)
- {
- hour = hour - 24;
- }
- leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
- leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
- #endregion
- }
- }
- }
- }
- #endregion
- #region 行程和城市赋值
- if (trip == "" || trip == " " || city == "" || city == " ")
- {
- //city = CityInDateList.Find(cid => cid.Date == timeList[i]).City;
- city = CityInDateList[i].City;
- //部分黄热病国家,需要提醒打疫苗
- string result = PublicCode.GetCountryInfo(tcs.getByCity(city)[0].Country);
- if (result.Contains("3"))
- {
- city += "(此地区为黄热病地区,请注意打疫苗)";
- }
- trip = city;
- }
- #endregion
- #region 公务 20210820 贾文滔
- string OATemp = "";//暂存公务活动
- //根据团号和日期获取公务数据
- List<OfficialActivities> listoa = oas.getByDiidAndDate(comb_Diid, timeList[i]);
- //若listoa存在公务数据,进行排序,再进行导入
- if (listoa != null && listoa.Count > 0)
- {
- //利用datatable存放公务活动数据
- DataTable OA_DataTable = new DataTable();
- OA_DataTable.Columns.Add("StartTime", typeof(string)); //activity开始时刻
- OA_DataTable.Columns.Add("EndTime", typeof(string)); //activity结束时刻
- OA_DataTable.Columns.Add("Client", typeof(string)); //activity单位
- OA_DataTable.Columns.Add("Address", typeof(string)); //activity地址
- OA_DataTable.Columns.Add("Contact", typeof(string)); //activity联系人
- OA_DataTable.Columns.Add("Tel", typeof(string)); //activity联系人电话
- OA_DataTable.Columns.Add("Dresscode", typeof(string)); //activity着装要求
- OA_DataTable.Columns.Add("isTranslate", typeof(bool));//是否需要翻译人员
- OA_DataTable.Columns.Add("Language", typeof(string));//是否需要翻译人员
- //处理公务数据
- for (int b = 0; b < listoa.Count; b++)
- {
- //起止时间
- string[] time = new string[2];
- if (listoa[b].Time.Contains('—'))
- {
- time = listoa[b].Time.Split('—');
- }
- else if (listoa[b].Time.Contains('-'))
- {
- time = listoa[b].Time.Split('-');
- }
- //添加数据
- if (time.Length >= 2)
- {
- OA_DataTable.Rows.Add(time[0], time[1], listoa[b].Client, listoa[b].Address, listoa[b].Contact, listoa[b].Tel, listoa[b].Dresscode, listoa[b].IsNeedTrans, listoa[b].Language);
- }
- else
- {
- //PublicCode.GetAlertMsg(this, GetType(), timeList[i] + "的公务数据有误,请检查");
- }
- }
- //排序
- OA_DataTable.DefaultView.Sort = "StartTime asc";
- OA_DataTable = OA_DataTable.DefaultView.ToTable();
- //导入信息
- for (int index = 0; index < OA_DataTable.Rows.Count; index++)
- {
- if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里
- {
- if (OATemp != "")
- {
- OATemp = OATemp + "\r\n"
- + OA_DataTable.Rows[index]["StartTime"].ToString()
- + "-"
- + OA_DataTable.Rows[index]["EndTime"].ToString()
- + " 拜访" + OA_DataTable.Rows[index]["Client"].ToString()
- + ",联系人:" + OA_DataTable.Rows[index]["Contact"].ToString()
- + ",电话:" + OA_DataTable.Rows[index]["Tel"].ToString()
- + ",地址:" + OA_DataTable.Rows[index]["Address"].ToString()
- + ",着装要求:" + OA_DataTable.Rows[index]["Dresscode"].ToString()
- + ",是否需要翻译:" + (bool.Parse(OA_DataTable.Rows[index]["isTranslate"].ToString()) ? "需要翻译人员" + "翻译语种为" + OA_DataTable.Rows[index]["Language"].ToString() : "不需要翻译人员")
- + ",议题:-";
- }
- else
- {
- OATemp = OA_DataTable.Rows[index]["StartTime"].ToString()
- + "-"
- + OA_DataTable.Rows[index]["EndTime"].ToString()
- + " 拜访" + OA_DataTable.Rows[index]["Client"].ToString()
- + ",联系人:" + OA_DataTable.Rows[index]["Contact"].ToString()
- + ",电话:" + OA_DataTable.Rows[index]["Tel"].ToString()
- + ",地址:" + OA_DataTable.Rows[index]["Address"].ToString()
- + ",着装要求:" + OA_DataTable.Rows[index]["Dresscode"].ToString()
- + ",是否需要翻译:" + (bool.Parse(OA_DataTable.Rows[index]["isTranslate"].ToString()) ? "需要翻译人员" + "翻译语种为" + OA_DataTable.Rows[index]["Language"].ToString() : "不需要翻译人员")
- + ",议题:-";
- }
- }
- else
- {
- //导入公务
- trip = trip + "\r\n"
- + OA_DataTable.Rows[index]["StartTime"].ToString()
- + "-"
- + OA_DataTable.Rows[index]["EndTime"].ToString()
- + " 拜访" + OA_DataTable.Rows[index]["Client"].ToString()
- + ",联系人:" + OA_DataTable.Rows[index]["Contact"].ToString()
- + ",电话:" + OA_DataTable.Rows[index]["Tel"].ToString()
- + ",地址:" + OA_DataTable.Rows[index]["Address"].ToString()
- + ",着装要求:" + OA_DataTable.Rows[index]["Dresscode"].ToString()
- + ",是否需要翻译:" + (bool.Parse(OA_DataTable.Rows[index]["isTranslate"].ToString()) ? "需要翻译人员" + "翻译语种为" + OA_DataTable.Rows[index]["Language"].ToString() : "不需要翻译人员")
- + ",议题:-";
- }
- //当天第一个公务或许都是从酒店出发,因此可计算酒店到公务地址的距离和时间
- if (index == 0)
- {
- #region 酒店
- foreach (HotelReservations h in listht)
- {
- if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i])
- && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i]))
- {
- //利用谷歌API计算路线
- GoogleMapApiResult g = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, OA_DataTable.Rows[0]["Address"].ToString());
- if (g != null)
- {
- if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里
- {
- OATemp = OATemp + "。 (" + g.Distance + "," + g.Time + ")";
- }
- else
- {
- trip = trip + "。 (" + g.Distance + "," + g.Time + ")";
- }
- }
- else
- {
- try
- {
- JObject Result = PublicCode.GetDirectionByGoogleApi(h.HotelAddress, OA_DataTable.Rows[0]["Address"].ToString());
- if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里
- {
- OATemp = OATemp + "。 (" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + ","
- + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")";
- }
- else
- {
- trip = trip + "。 (" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + ","
- + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")";
- }
- GoogleMapApiResult gtemp = new GoogleMapApiResult();
- gtemp.Diid = di.Id;
- gtemp.Date = "";
- gtemp.Moment = "";
- gtemp.StartAddress = h.HotelAddress;
- gtemp.EndAddress = OA_DataTable.Rows[0]["Address"].ToString();
- gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
- gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
- gmrs.Add(gtemp);
- }
- catch
- {
- if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里
- {
- OATemp = OATemp + "。 (谷歌接口异常,无法测算路程时间)";
- }
- else
- {
- trip = trip + "。 (谷歌接口异常,无法测算路程时间)";
- }
- }
- }
- }
- }
- #endregion
- }
- //第二个公务是由中午的餐厅前往公务地址,具有随机性,因此不计算此方向距离时间;但可计算由公务地址回酒店的信息
- else
- {
- #region 酒店
- foreach (HotelReservations h in listht)
- {
- if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i])
- && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i]))
- {
- //利用谷歌API计算路线
- GoogleMapApiResult g = gmrs.GetByDiidAddress(di.Id, OA_DataTable.Rows[index]["Address"].ToString(), h.HotelAddress);
- if (g != null)
- {
- if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里
- {
- OATemp = OATemp + "。 (" + g.Distance + "," + g.Time + ")";
- }
- else
- {
- trip = trip + "。 (" + g.Distance + "," + g.Time + ")";
- }
- }
- else
- {
- try
- {
- JObject Result = PublicCode.GetDirectionByGoogleApi(OA_DataTable.Rows[index]["Address"].ToString(), h.HotelAddress);
- if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里
- {
- OATemp = OATemp + "。 (" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + ","
- + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")";
- }
- else
- {
- trip = trip + "。 (" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + ","
- + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")";
- }
- GoogleMapApiResult gtemp = new GoogleMapApiResult();
- gtemp.Diid = di.Id;
- gtemp.Date = "";
- gtemp.Moment = "";
- gtemp.StartAddress = OA_DataTable.Rows[0]["Address"].ToString();
- gtemp.EndAddress = h.HotelAddress;
- gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
- gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
- gmrs.Add(gtemp);
- }
- catch
- {
- if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里
- {
- OATemp = OATemp + "。 (谷歌接口异常,无法测算路程时间)";
- }
- else
- {
- trip = trip + "。 (谷歌接口异常,无法测算路程时间)";
- }
- }
- }
- }
- }
- #endregion
- }
- }
- }
- #endregion
- #region 酒店
- foreach (HotelReservations h in listht)
- {
- if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i])
- && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i]))//不去“》=”的原因是行程最后一天一般不会有酒店
- {
- //利用谷歌API计算路线
- if (AirPort != "")
- {
- GoogleMapApiResult g = gmrs.GetByDiidAddress(di.Id, AirPort, h.HotelAddress);
- if (g != null)
- {
- trip = trip + "\r\n"
- + leaveAirPortTime + " 乘车前往酒店:(" + g.Distance + "," + g.Time + ")";
- //计算“抵达酒店办理入住手续”的时间
- string CheckInHotelTime;
- //处理时间格式
- string hours = "", mins = "";
- if (g.Time.Contains("hour"))
- {
- g.Time = g.Time.Replace("hour", "h");
- }
- else if (g.Time.Contains("hours"))
- {
- g.Time = g.Time.Replace("hours", "h");
- }
- g.Time = g.Time.Replace("mins", "m");
- if (g.Time.Contains("h"))
- {
- hours = g.Time.Split('h')[0].Trim();
- }
- else if (!g.Time.Contains("h"))
- {
- mins = g.Time.Split('m')[0].Trim();
- }
- int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- min = min + Convert.ToInt32(mins);
- if (min > 59)
- {
- min = min - 60;
- hour = hour + 1;
- }
- if (hours != "")
- {
- hour = hour + Convert.ToInt32(hours);
- }
- if (hour > 23)
- {
- hour = hour - 24;
- }
- CheckInHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
- CheckInHotelTime = CheckInHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
- trip = trip + "\r\n"
- + CheckInHotelTime + " 抵达酒店办理入住手续";
- }
- else
- {
- try
- {
- JObject Result = PublicCode.GetDirectionByGoogleApi(AirPort, h.HotelAddress);
- trip = trip + "\r\n"
- + leaveAirPortTime + " 乘车前往酒店:(" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + ","
- + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")";
- //计算“抵达酒店办理入住手续”的时间
- string CheckInHotelTime;
- //处理时间格式
- string Gtime = "", hours = "", mins = "";
- if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
- }
- else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
- }
- Gtime = Gtime.Replace("mins", "m");
- if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
- {
- hours = Gtime.Split('h')[0].Trim();
- }
- else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
- {
- mins = Gtime.Split('m')[0].Trim();
- }
- int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- min = min + Convert.ToInt32(mins);
- if (min > 59)
- {
- min = min - 60;
- hour = hour + 1;
- }
- if (hours != "")
- {
- hour = hour + Convert.ToInt32(hours);
- }
- if (hour > 23)
- {
- hour = hour - 24;
- }
- CheckInHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
- CheckInHotelTime = CheckInHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
- trip = trip + "\r\n"
- + CheckInHotelTime + " 抵达酒店办理入住手续";
- GoogleMapApiResult gtemp = new GoogleMapApiResult();
- gtemp.Diid = di.Id;
- gtemp.Date = "";
- gtemp.Moment = "";
- gtemp.StartAddress = AirPort;
- gtemp.EndAddress = h.HotelAddress;
- gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
- gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
- gmrs.Add(gtemp);
- }
- catch
- {
- trip = trip + "\r\n"
- + " (谷歌接口异常,无法测算的路程时间)";
- }
- }
- }
- trip = trip + "\r\n"
- + " 酒店名称:" + h.HotelName + "\r\n"
- + " 酒店地址:" + h.HotelAddress + "\r\n"
- + " 酒店电话:" + h.HotelTel + " 酒店传真:" + (h.HotelFax == "" ? "-" : h.HotelFax);
- if (i == 0 && !string.IsNullOrEmpty(OATemp))
- {
- trip = trip + "\r\n" + OATemp;
- }
- }
- }
- #endregion
- #region 当天交通工具赋值
- //一般行程第一天都是先乘坐飞机后乘坐汽车
- if (i == 0)
- {
- tlTemp.Traffic_First = "飞机";
- tlTemp.Traffic_Second = "汽车";
- }
- else
- {
- // 根据车导地接表数据判断交通工具:汽车
- List<CarTouristGuideGroundReservations> ListCar = listctg.FindAll(c => Convert.ToDateTime(c.ServiceStartTime) <= Convert.ToDateTime(timeList[i])
- && Convert.ToDateTime(c.ServiceEndTime) >= Convert.ToDateTime(timeList[i]));
- //交通工具:汽车
- if (ListCar.Count > 0)
- {
- tlTemp.Traffic_First = "汽车";
- //交通工具:飞机
- if (airSign == true)
- {
- tlTemp.Traffic_Second = "飞机";
- }
- else
- {
- tlTemp.Traffic_Second = "";
- }
- }
- else
- {
- tlTemp.Traffic_First = "汽车";
- //交通工具:飞机
- if (airSign == true)
- {
- tlTemp.Traffic_Second = "飞机";
- }
- else
- {
- tlTemp.Traffic_Second = "";
- }
- }
- }
- #endregion
- tlTemp.Trip = trip;
- tlTemp.OPer = di.Id;
- tlTemp.OPdate = PublicCode.GetBeijingTime().ToString("yyyy-MM-dd HH:mm:ss");
- tlTemp.issel = 1;
- tlTemp.diffgroup = 1;
- tlTemp.Isdel = 0;
- tls.AddTravelList(tlTemp);
- }
- }
- else if (timeList.Count < listTravel.Count)//2改版天数<原版天数
- {
- //2.1替换日期
- for (int i = 0; i < timeList.Count; i++)
- {
- //日期转换星期
- string weekday = weekdays[(int)new DateTime(
- Convert.ToInt32(timeList[i].Split('-')[0]),
- Convert.ToInt32(timeList[i].Split('-')[1]),
- Convert.ToInt32(timeList[i].Split('-')[2])).DayOfWeek];
- listTravel[i].Date = timeList[i].Substring(5, 2) + "月" + timeList[i].Substring(8, 2) + "日";
- listTravel[i].WeekDay = weekday;
- listTravel[i].OPer = UserId;
- listTravel[i].OPdate = PublicCode.GetBeijingTime().ToString("yyyy-MM-dd HH:mm:ss");
- listTravel[i].Isdel = 0;
- tls.EditTravelList(listTravel[i]);
- }
- //2.2删除多余行程
- tls.DelOld(comb_Diid, listTravel[timeList.Count - 1].Id, listTravel[listTravel.Count - 1].Id);
- }
- else//3改版天数=原版天数
- {
- //3.1替换日期
- for (int i = 0; i < timeList.Count; i++)
- {
- //日期
- listTravel[i].Date = timeList[i].Substring(5, 2) + "月" + timeList[i].Substring(8, 2) + "日";
- //日期转换星期
- string weekday = weekdays[(int)new DateTime(
- Convert.ToInt32(timeList[i].Split('-')[0]),
- Convert.ToInt32(timeList[i].Split('-')[1]),
- Convert.ToInt32(timeList[i].Split('-')[2])).DayOfWeek];
- listTravel[i].WeekDay = weekday;
- listTravel[i].OPer = UserId;
- listTravel[i].OPdate = PublicCode.GetBeijingTime().ToString("yyyy-MM-dd HH:mm:ss");
- listTravel[i].Isdel = 0;
- tls.EditTravelList(listTravel[i]);
- }
- }
- }
- else //若本团不存行程,则生成行程。 包含机票、酒店、车导地接等数据
- {
- //航班号标识
- //string flightcode_Sign = "";
- //三字码标识
- //string citycode_Sign = "";
- #region 城市数据 20210823 贾文滔
- List<PublicCode.CityInDate> CityInDateList = PublicCode.GetCityByDataTable(dt);
- #endregion
- //生成行程
- for (int i = 0; i < timeList.Count; i++)
- {
- //实、例化一个temp
- Models.TravelList tlTemp = new Models.TravelList();
- //团号
- tlTemp.Diid = di.Id;
- //天数序号
- tlTemp.Days = i + 1;
- //日期
- tlTemp.Date = timeList[i].Substring(5, 2) + "月" + timeList[i].Substring(8, 2) + "日";
- //日期转换星期
- string weekday = weekdays[(int)new DateTime(
- Convert.ToInt32(timeList[i].Split('-')[0]),
- Convert.ToInt32(timeList[i].Split('-')[1]),
- Convert.ToInt32(timeList[i].Split('-')[2])).DayOfWeek];
- tlTemp.WeekDay = weekday;
- //行程
- string trip = "";
- //历经城市
- string city = "";
- #region 机票数据
- //根据航班信息推出抵达机场的位置信息
- string AirPort = "";
- //根据航班时间前后推进入机场或离开机场的时间
- string GoAirportTime = "", leaveAirPortTime = "";
- //飞机标识
- bool airSign = false;
- //查询该日期下的航班信息
- //resultRows字段顺序为:航班号,起飞日期,三字码,起飞时刻,到达时刻,出发航站楼,到达航站楼,机型,飞行时间,整理后的起飞日期,整理后的到达日期
- DataRow[] resultRows = dt.Select("Day like '%" + timeList[i] + "%'");
- if (resultRows.Count() > 0)
- {
- //修改标识
- airSign = true;
- }
- //同一天只有一条数据走正常判定
- if (resultRows.Count() == 1)
- {
- #region 三字码
- string _citycode = resultRows[0]["Three"].ToString();
- //起飞城市三字码
- ThreeCode font_threecode = null;
- string font_citycode = _citycode.Replace("/", string.Empty).Substring(0, 3);
- //抵达城市
- string font_City = "";
- //起飞城市机场
- string font_Airport = "";
- //抵达城市三字码
- ThreeCode back_threecode = null;
- string end_citycode = _citycode.Replace("/", string.Empty).Substring(3, 3);
- //抵达城市机场
- string back_Airport = "";
- //抵达城市
- string back_City = "";
- font_threecode = tcs.getByThree(font_citycode);
- //验证是否存在三字码
- if (font_threecode == null)
- {
- city = city + "【此三字码" + font_citycode + "未收录,请机票同事录入】" + "一";
- font_Airport = "【此三字码" + font_citycode + "未收录,请机票同事录入】";
- font_City = "【此三字码" + font_citycode + "未收录,请机票同事录入】";
- }
- else
- {
- city = city + "/" + font_threecode.City;
- font_Airport = font_threecode.AirPort;
- font_City = font_threecode.City; ;
- }
- back_threecode = tcs.getByThree(end_citycode);
- if (back_threecode == null)
- {
- city = city + "【此三字码" + end_citycode + "未收录,请机票同事录入】" + "一";
- back_Airport = "【此三字码" + end_citycode + "未收录,请机票同事录入】";
- back_City = "【此三字码" + end_citycode + "未收录,请机票同事录入】";
- }
- else
- {
- city = city + "/" + back_threecode.City;
- //部分黄热病国家,需要提醒打疫苗
- string result = PublicCode.GetCountryInfo(back_threecode.Country);
- if (result.Contains("3"))
- {
- city += "(此地区为黄热病地区,请注意打疫苗)";
- }
- back_Airport = back_threecode.AirPort;
- back_City = back_threecode.City;
- //查询酒店路线要用
- AirPort = back_threecode.AirPort;
- }
- //行程里加入城市
- #endregion
- #region 信息准备
- trip = city.TrimStart('/');
- //起飞航站楼
- string _StartBuilding = resultRows[0]["StartBuilding"].ToString();
- //转机航站楼
- string _EndBuilding = resultRows[0]["EndBuilding"].ToString();
- //起飞时刻
- string _startTime = resultRows[0]["StartTime"].ToString();
- //飞行时刻
- string _flightTime = resultRows[0]["FlightTime"].ToString();
- _flightTime = _flightTime.Contains("H") ? _flightTime.Split('H')[0] + "小时" + _flightTime.Split('H')[1].Split('M')[0] + "分钟" : _flightTime.Split('M')[0] + "分钟";
- //到达时刻
- string _endTime = resultRows[0]["EndTime"].ToString();
- //航班号
- string _flightcode = resultRows[0]["Fliagtcode"].ToString();
- //航司
- AirCompany aircompany = acs.getByShortCode(_flightcode.Substring(0, 2));
- string _aircompany_Name = "";
- if (aircompany == null)
- {
- _aircompany_Name = "【此航司" + resultRows[0]["Fliagtcode"].ToString().Substring(0, 2) + "未收录,请机票同事录入】";
- }
- else
- {
- _aircompany_Name = aircompany.CnName;
- }
- //机型判断
- string airModel = resultRows[0]["AirModel"].ToString();
- airModel = PublicCode.GetLonger(airModel.Substring(0, 1)) + airModel;
- #endregion
- #region trip编辑
- //若本行抵达时间包含"+1",则本行为母版行,仅提示登机
- if (resultRows[0]["Sign"].ToString() == "0" && _endTime.Contains("+"))
- {
- //根据航班信息推算进入机场的时间
- int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前两小时
- string result = PublicCode.GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前三小时
- if (result.Contains("2"))
- {
- temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时
- }
- if (temp < 0)
- {
- temp = temp + 24;
- }
- GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
- GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);
- //第一天之后的行程可以加上“酒店出发到机场”的距离和时间
- if (i > 0)
- {
- #region 酒店
- foreach (HotelReservations h in listht)
- {
- if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i])
- && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i]))
- {
- //利用谷歌API计算路线
- if (AirPort != "")
- {
- GoogleMapApiResult g = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, font_Airport);
- if (g != null)
- {
- //计算“酒店到机场”的时间
- string CheckoutHotelTime;
- //处理时间格式
- string hours = "", mins = "";
- if (g.Time.Contains("hour"))
- {
- g.Time = g.Time.Replace("hour", "h");
- }
- else if (g.Time.Contains("hours"))
- {
- g.Time = g.Time.Replace("hours", "h");
- }
- g.Time = g.Time.Replace("mins", "m");
- if (g.Time.Contains("h"))
- {
- hours = g.Time.Split('h')[0].Trim();
- }
- else if (!g.Time.Contains("h"))
- {
- mins = g.Time.Split('m')[0].Trim();
- }
- int hour = Convert.ToInt32(GoAirportTime.Substring(0, 2));
- int min = Convert.ToInt32(GoAirportTime.Substring(3, 2));
- min = min - Convert.ToInt32(mins);
- if (min < 0)
- {
- min = min + 60;
- hour = hour - 1;
- }
- if (hours != "")
- {
- hour = hour - Convert.ToInt32(hours);
- }
- if (hour < 0)
- {
- hour = hour + 24;
- }
- CheckoutHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
- CheckoutHotelTime = CheckoutHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
- trip = trip + "\r\n"
- + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")";
- }
- else
- {
- try
- {
- JObject Result = PublicCode.GetDirectionByGoogleApi(h.HotelAddress, font_Airport);
- //计算“抵达酒店办理入住手续”的时间
- string CheckoutHotelTime;
- //处理时间格式
- string Gtime = "", hours = "", mins = "";
- if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
- }
- else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
- }
- Gtime = Gtime.Replace("mins", "m");
- if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
- {
- hours = Gtime.Split('h')[0].Trim();
- }
- else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
- {
- mins = Gtime.Split('m')[0].Trim();
- }
- int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- min = min - Convert.ToInt32(mins);
- if (min < 0)
- {
- min = min + 60;
- hour = hour - 1;
- }
- if (hours != "")
- {
- hour = hour + Convert.ToInt32(hours);
- }
- if (hour < 0)
- {
- hour = hour + 24;
- }
- CheckoutHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
- CheckoutHotelTime = CheckoutHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
- trip = trip + "\r\n"
- + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")";
- GoogleMapApiResult gtemp = new GoogleMapApiResult();
- gtemp.Diid = di.Id;
- gtemp.Date = "";
- gtemp.Moment = "";
- gtemp.StartAddress = AirPort;
- gtemp.EndAddress = h.HotelAddress;
- gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
- gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
- gmrs.Add(gtemp);
- }
- catch
- {
- trip = trip + "\r\n"
- + " 乘车前往机场:(谷歌接口异常,无法测算的路程时间)";
- }
- }
- }
- }
- }
- #endregion
- }
- //行程
- trip = trip
- + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:"
- + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";"
- + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");";
- //标记本行为母版行
- //flightcode_Sign = resultRows[0]["Fliagtcode"].ToString();
- //citycode_Sign = resultRows[0]["Three"].ToString();
- }
- //与前一行航班号,三字码相同且本行抵达时间不包含"+1",则本行是被生成的重复行,仅提示抵达
- else if (resultRows[0]["Sign"].ToString() == "1") /* && (!_endTime.Contains("+"))&&(_flightcode == flightcode_Sign)&&(_citycode == citycode_Sign)*/
- {
- //行程
- trip = trip
- + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续,之后前往提取行李";
- //根据航班信息推算离开机场的时间
- int temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1;
- leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
- leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2);
- if (i == timeList.Count - 1)//如果本日是行程的最后一天,则提醒“行程圆满结束”
- {
- trip = trip + ",圆满结束此次访问之行!";
- }
- else //如果本日不是行程的最后一天,正常提醒
- {
- trip = trip + ";\r\n" + leaveAirPortTime + "搭乘专车前往酒店,抵达后办理入住;";
- }
- //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻
- int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- min = min + 10;
- if (min > 59)
- {
- min = min - 60;
- hour = hour + 1;
- }
- if (hour > 23)
- {
- hour = hour - 24;
- }
- leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
- leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
- }
- //正常提示
- else
- {
- //根据航班信息推算进入机场的时间
- int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前2小时
- string result = PublicCode.GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前3小时
- if (result.Contains("2"))
- {
- temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时
- }
- if (temp < 0)
- {
- temp = temp + 24;
- }
- GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
- GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);
- //根据航班信息推算离开机场的时间
- temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1;
- leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
- leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2);
- //第一天之后的行程可以加上“酒店出发到机场”的距离和时间
- if (i > 0)
- {
- #region 酒店
- foreach (HotelReservations h in listht)
- {
- if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i])
- && Convert.ToDateTime(h.CheckOutDate) >= Convert.ToDateTime(timeList[i]))
- {
- //利用谷歌API计算路线
- if (AirPort != "")
- {
- GoogleMapApiResult g = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, font_Airport);
- if (g != null)
- {
- //计算“酒店到机场”的时间
- string CheckoutHotelTime;
- //处理时间格式
- string hours = "0", mins = "0";
- if (g.Time.Contains("hour"))
- {
- g.Time = g.Time.Replace("hour", "h");
- }
- else if (g.Time.Contains("hours"))
- {
- g.Time = g.Time.Replace("hours", "h");
- }
- g.Time = g.Time.Replace("mins", "m");
- if (g.Time.Contains("h"))
- {
- hours = g.Time.Split('h')[0].Trim();
- }
- else if (!g.Time.Contains("h"))
- {
- mins = g.Time.Split('m')[0].Trim();
- }
- int _hour = Convert.ToInt32(GoAirportTime.Substring(0, 2));
- int _min = Convert.ToInt32(GoAirportTime.Substring(3, 2));
- _min = _min - Convert.ToInt32(mins);
- if (_min < 0)
- {
- _min = _min + 60;
- _hour = _hour - 1;
- }
- if (hours != "")
- {
- _hour = _hour - Convert.ToInt32(hours);
- }
- if (_hour < 0)
- {
- _hour = _hour + 24;
- }
- CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
- CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());
- trip = trip + "\r\n"
- + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")";
- }
- else
- {
- try
- {
- JObject Result = PublicCode.GetDirectionByGoogleApi(h.HotelAddress, font_Airport);
- //计算“抵达酒店办理入住手续”的时间
- string CheckoutHotelTime;
- //处理时间格式
- string Gtime = "", hours = "0", mins = "0";
- if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
- }
- else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
- }
- Gtime = Gtime.Replace("mins", "m");
- if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
- {
- hours = Gtime.Split('h')[0].Trim();
- }
- else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
- {
- mins = Gtime.Split('m')[0].Trim();
- }
- int _hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int _min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- _min = _min - Convert.ToInt32(mins);
- if (_min < 0)
- {
- _min = _min + 60;
- _hour = _hour - 1;
- }
- if (hours != "")
- {
- _hour = _hour + Convert.ToInt32(hours);
- }
- if (_hour < 0)
- {
- _hour = _hour + 24;
- }
- CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
- CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());
- GoogleMapApiResult gtemp = new GoogleMapApiResult();
- gtemp.Diid = di.Id;
- gtemp.Date = "";
- gtemp.Moment = "";
- gtemp.StartAddress = AirPort;
- gtemp.EndAddress = h.HotelAddress;
- gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
- gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
- gmrs.Add(gtemp);
- trip = trip + "\r\n"
- + CheckoutHotelTime + " 乘车前往机场:(" + gtemp.Distance + "," + gtemp.Time + ")";
- }
- catch
- {
- trip = trip + "\r\n"
- + " 乘车前往机场:(谷歌接口异常,无法测算的路程时间)";
- }
- }
- }
- }
- }
- #endregion
- }
- trip = trip
- + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:"
- + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";"
- + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");"
- + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续,之后前往提取行李";
- if (i == timeList.Count - 1)//如果本日是行程的最后一天,先增加酒店到机场的距离时间,再在末尾提醒“行程圆满结束”
- {
- trip = trip + ",圆满结束此次访问之行!";
- }
- else //如果本日不是行程的最后一天,正常提醒
- {
- trip = trip + ";\r\n" + leaveAirPortTime + " 搭乘专车前往酒店,抵达后办理入住;";
- }
- //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻
- int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- min = min + 10;
- if (min > 59)
- {
- min = min - 60;
- hour = hour + 1;
- }
- if (hour > 23)
- {
- hour = hour - 24;
- }
- leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
- leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
- }
- #endregion
- }
- //同一天多条数据走分类讨论
- else
- {
- for (int n = 0; n < resultRows.Count(); n++)
- {
- city = "";
- #region 三字码
- string _citycode = resultRows[n]["Three"].ToString();
- //起飞城市三字码
- ThreeCode font_threecode = null;
- string font_citycode = _citycode.Replace("/", string.Empty).Substring(0, 3);
- //抵达城市
- string font_City = "";
- //起飞城市机场
- string font_Airport = "";
- //抵达城市三字码
- ThreeCode back_threecode = null;
- string end_citycode = _citycode.Replace("/", string.Empty).Substring(3, 3);
- //抵达城市机场
- string back_Airport = "";
- //抵达城市
- string back_City = "";
- font_threecode = tcs.getByThree(font_citycode);
- //验证是否存在三字码
- if (font_threecode == null)
- {
- city = city + "【此三字码" + font_citycode + "未收录,请机票同事录入】" + "一";
- font_Airport = "【此三字码" + font_citycode + "未收录,请机票同事录入】";
- font_City = "【此三字码" + font_citycode + "未收录,请机票同事录入】";
- }
- else
- {
- city = city + "/" + font_threecode.City;
- font_Airport = font_threecode.AirPort;
- font_City = font_threecode.City; ;
- }
- back_threecode = tcs.getByThree(end_citycode);
- if (back_threecode == null)
- {
- city = city + "【此三字码" + end_citycode + "未收录,请机票同事录入】" + "一";
- back_Airport = "【此三字码" + end_citycode + "未收录,请机票同事录入】";
- back_City = "【此三字码" + end_citycode + "未收录,请机票同事录入】";
- }
- else
- {
- city = city + "/" + back_threecode.City;
- //部分黄热病国家,需要提醒打疫苗
- string result = PublicCode.GetCountryInfo(back_threecode.Country);
- if (result.Contains("3"))
- {
- city += "(此地区为黄热病地区,请注意打疫苗)";
- }
- back_Airport = back_threecode.AirPort;
- back_City = back_threecode.City;
- //查询酒店路线要用
- AirPort = back_threecode.AirPort;
- }
- //行程里加入城市
- if (trip == "")
- {
- trip = city.TrimStart('/');
- }
- else
- {
- trip = trip + "\r\n"
- + city.TrimStart('/');
- }
- //起飞航站楼
- string _StartBuilding = resultRows[n]["StartBuilding"].ToString();
- //转机航站楼
- string _EndBuilding = resultRows[n]["EndBuilding"].ToString();
- //起飞时刻
- string _startTime = resultRows[n]["StartTime"].ToString();
- //飞行时刻
- string _flightTime = resultRows[n]["FlightTime"].ToString();
- _flightTime = _flightTime.Contains("H") ? _flightTime.Split('H')[0] + "小时" + _flightTime.Split('H')[1].Split('M')[0] + "分钟" : _flightTime.Split('M')[0] + "分钟";
- //到达时刻
- string _endTime = resultRows[n]["EndTime"].ToString();
- //航班号
- string _flightcode = resultRows[n]["Fliagtcode"].ToString();
- //航司
- AirCompany aircompany = acs.getByShortCode(_flightcode.Substring(0, 2));
- string _aircompany_Name = "";
- if (aircompany == null)
- {
- _aircompany_Name = "【此航司" + resultRows[n]["Fliagtcode"].ToString().Substring(0, 2) + "未收录,请机票同事录入】";
- }
- else
- {
- _aircompany_Name = aircompany.CnName;
- }
- //机型判断
- string airModel = resultRows[n]["AirModel"].ToString();
- airModel = PublicCode.GetLonger(airModel.Substring(0, 1)) + airModel;
- #endregion
- //Sign字段为标识,string类型,含义:0表示为原生黑屏代码、1表示“+1”新增的黑屏代码
- //目前存在两种情况:同一天的多条数据标识为“0->0”或“1->0”
- //如下示例
- //Day ArrivedDate Sign
- //10 10 0
- //10 11 0
- //11 11 1
- //11 12 0
- //12 12 1
- if (n == 0)
- {
- //原生机票代码
- if (resultRows[n]["Sign"].ToString() == "0")
- {
- #region trip编辑
- //根据航班信息推算进入机场的时间
- int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前两小时
- string result = PublicCode.GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前三小时
- if (result.Contains("2"))
- {
- temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时
- }
- if (temp < 0)
- {
- temp = temp + 24;
- }
- GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
- GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);
- //第一天之后的行程可以加上“酒店出发到机场”的距离和时间
- if (i > 0)
- {
- #region 酒店
- foreach (HotelReservations h in listht)
- {
- if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i])
- && Convert.ToDateTime(h.CheckOutDate) >= Convert.ToDateTime(timeList[i]))
- {
- //利用谷歌API计算路线
- if (AirPort != "")
- {
- GoogleMapApiResult g = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, font_Airport);
- if (g != null)
- {
- //计算“酒店到机场”的时间
- string CheckoutHotelTime;
- //处理时间格式
- string hours = "0", mins = "0";
- if (g.Time.Contains("hour"))
- {
- g.Time = g.Time.Replace("hour", "h");
- }
- else if (g.Time.Contains("hours"))
- {
- g.Time = g.Time.Replace("hours", "h");
- }
- g.Time = g.Time.Replace("mins", "m");
- if (g.Time.Contains("h"))
- {
- hours = g.Time.Split('h')[0].Trim();
- }
- else if (!g.Time.Contains("h"))
- {
- mins = g.Time.Split('m')[0].Trim();
- }
- int _hour = Convert.ToInt32(GoAirportTime.Substring(0, 2));
- int _min = Convert.ToInt32(GoAirportTime.Substring(3, 2));
- _min = _min - Convert.ToInt32(mins);
- if (_min < 0)
- {
- _min = _min + 60;
- _hour = _hour - 1;
- }
- if (hours != "")
- {
- _hour = _hour - Convert.ToInt32(hours);
- }
- if (_hour < 0)
- {
- _hour = _hour + 24;
- }
- CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
- CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());
- trip = trip + "\r\n"
- + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")";
- }
- else
- {
- try
- {
- JObject Result = PublicCode.GetDirectionByGoogleApi(h.HotelAddress, font_Airport);
- //计算“抵达酒店办理入住手续”的时间
- string CheckoutHotelTime;
- //处理时间格式
- string Gtime = "", hours = "0", mins = "0";
- if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
- }
- else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
- }
- Gtime = Gtime.Replace("mins", "m");
- if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
- {
- hours = Gtime.Split('h')[0].Trim();
- }
- else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
- {
- mins = Gtime.Split('m')[0].Trim();
- }
- int _hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int _min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- _min = _min - Convert.ToInt32(mins);
- if (_min < 0)
- {
- _min = _min + 60;
- _hour = _hour - 1;
- }
- if (hours != "")
- {
- _hour = _hour + Convert.ToInt32(hours);
- }
- if (_hour < 0)
- {
- _hour = _hour + 24;
- }
- CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
- CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());
- trip = trip + "\r\n"
- + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")";
- GoogleMapApiResult gtemp = new GoogleMapApiResult();
- gtemp.Diid = di.Id;
- gtemp.Date = "";
- gtemp.Moment = "";
- gtemp.StartAddress = AirPort;
- gtemp.EndAddress = h.HotelAddress;
- gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
- gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
- gmrs.Add(gtemp);
- }
- catch
- {
- trip = trip + "\r\n"
- + " 乘车前往机场:(谷歌接口异常,无法测算的路程时间)";
- }
- }
- }
- }
- }
- #endregion
- }
- trip = trip
- + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:"
- + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";"
- + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");"
- + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,提取行李;";
- #endregion
- }
- //"+1"生成的机票代码
- else if (resultRows[n]["Sign"].ToString() == "1")
- {
- #region trip编辑
- //行程
- trip = trip
- + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,提取行李;";
- #endregion
- }
- }
- else if (n > 0)
- {
- //若前行是原生的,则本行判定为转机
- if (resultRows[n - 1]["Sign"].ToString() == "0")
- {
- #region trip编辑
- int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 1;//一般提前提前2小时
- if (temp < 0)
- {
- temp = temp + 24;
- }
- GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
- GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);
- trip = trip
- + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:"
- + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";"
- + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");"
- + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续,之后前往提取行李";
- //若为最后一行,则计算后备等时间
- if (n == resultRows.Count() - 1)
- {
- //根据航班信息推算离开机场的时间
- temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1;
- leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
- leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2);
- if (i == timeList.Count - 1)//如果本日是行程的最后一天,先增加酒店到机场的距离时间,再在末尾提醒“行程圆满结束”
- {
- trip = trip + ",圆满结束此次访问之行!";
- }
- else //如果本日不是行程的最后一天,正常提醒
- {
- trip = trip + ";\r\n" + leaveAirPortTime + "搭乘专车前往酒店,抵达后办理入住;";
- }
- //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻
- int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- min = min + 10;
- if (min > 59)
- {
- min = min - 60;
- hour = hour + 1;
- }
- if (hour > 23)
- {
- hour = hour - 24;
- }
- leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
- leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
- }
- #endregion
- }
- //若前行是生成的,则本行判定为新出发
- else if (resultRows[n - 1]["Sign"].ToString() == "1")
- {
- #region trip编辑
- //根据航班信息推算进入机场的时间
- int temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 2;//一般提前提前2小时
- string result = PublicCode.GetCountryInfo(back_threecode.Country);//美国或者欧洲国家提前3小时
- if (result.Contains("2"))
- {
- temp = Convert.ToInt32(_startTime.Substring(0, 2)) - 3;//提前3小时
- }
- if (temp < 0)
- {
- temp = temp + 24;
- }
- GoAirportTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
- GoAirportTime = GoAirportTime + ":" + _startTime.Substring(2, _startTime.Length - 2);
- //根据航班信息推算离开机场的时间
- temp = Convert.ToInt32(_endTime.Substring(0, 2)) + 1;
- leaveAirPortTime = temp < 10 ? "0" + temp.ToString() : temp.ToString();
- leaveAirPortTime = leaveAirPortTime + ":" + _endTime.Substring(2, _endTime.Length - 2);
- //第一天之后的行程可以加上“酒店出发到机场”的距离和时间
- if (i > 0)
- {
- #region 酒店
- foreach (HotelReservations h in listht)
- {
- if (Convert.ToDateTime(h.CheckInDate) < Convert.ToDateTime(timeList[i])
- && Convert.ToDateTime(h.CheckOutDate) >= Convert.ToDateTime(timeList[i]))
- {
- //利用谷歌API计算路线
- if (AirPort != "")
- {
- GoogleMapApiResult g = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, font_Airport);
- if (g != null)
- {
- //计算“酒店到机场”的时间
- string CheckoutHotelTime;
- //处理时间格式
- string hours = "0", mins = "0";
- if (g.Time.Contains("hour"))
- {
- g.Time = g.Time.Replace("hour", "h");
- }
- else if (g.Time.Contains("hours"))
- {
- g.Time = g.Time.Replace("hours", "h");
- }
- g.Time = g.Time.Replace("mins", "m");
- if (g.Time.Contains("h"))
- {
- hours = g.Time.Split('h')[0].Trim();
- }
- else if (!g.Time.Contains("h"))
- {
- mins = g.Time.Split('m')[0].Trim();
- }
- int _hour = Convert.ToInt32(GoAirportTime.Substring(0, 2));
- int _min = Convert.ToInt32(GoAirportTime.Substring(3, 2));
- _min = _min - Convert.ToInt32(mins);
- if (_min < 0)
- {
- _min = _min + 60;
- _hour = _hour - 1;
- }
- if (hours != "")
- {
- _hour = _hour - Convert.ToInt32(hours);
- }
- if (_hour < 0)
- {
- _hour = _hour + 24;
- }
- CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
- CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());
- trip = trip + "\r\n"
- + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")";
- }
- else
- {
- try
- {
- JObject Result = PublicCode.GetDirectionByGoogleApi(h.HotelAddress, font_Airport);
- //计算“抵达酒店办理入住手续”的时间
- string CheckoutHotelTime;
- //处理时间格式
- string Gtime = "", hours = "0", mins = "0";
- if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
- }
- else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
- }
- Gtime = Gtime.Replace("mins", "m");
- if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
- {
- hours = Gtime.Split('h')[0].Trim();
- }
- else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
- {
- mins = Gtime.Split('m')[0].Trim();
- }
- int _hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int _min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- _min = _min - Convert.ToInt32(mins);
- if (_min < 0)
- {
- _min = _min + 60;
- _hour = _hour - 1;
- }
- if (hours != "")
- {
- _hour = _hour + Convert.ToInt32(hours);
- }
- if (_hour < 0)
- {
- _hour = _hour + 24;
- }
- CheckoutHotelTime = _hour < 10 ? "0" + _hour.ToString() : _hour.ToString();
- CheckoutHotelTime = CheckoutHotelTime + ":" + (_min < 10 ? "0" + _min.ToString() : _min.ToString());
- trip = trip + "\r\n"
- + CheckoutHotelTime + " 乘车前往机场:(" + g.Distance + "," + g.Time + ")";
- GoogleMapApiResult gtemp = new GoogleMapApiResult();
- gtemp.Diid = di.Id;
- gtemp.Date = "";
- gtemp.Moment = "";
- gtemp.StartAddress = AirPort;
- gtemp.EndAddress = h.HotelAddress;
- gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
- gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
- gmrs.Add(gtemp);
- }
- catch
- {
- trip = trip + "\r\n"
- + " 乘车前往机场:(谷歌接口异常,无法测算的路程时间)";
- }
- }
- }
- }
- }
- #endregion
- }
- trip = trip
- + "\r\n" + GoAirportTime + " 抵达" + font_Airport + _StartBuilding + "航站楼,办理登机手续:"
- + "\r\n" + _startTime.Substring(0, 2) + ":" + _startTime.Substring(2, _startTime.Length - 2) + " 搭乘" + _aircompany_Name + "航空公司" + _flightcode + "航班,由" + font_City + "飞往" + back_City + ";"
- + "\r\n" + " (" + font_Airport + "/" + back_Airport + " 机型:" + airModel + " 飞行时间" + (_flightTime) + ");"
- + "\r\n" + _endTime.Substring(0, 2) + ":" + _endTime.Substring(2, _endTime.Length - 2) + " 抵达" + back_Airport + _EndBuilding + "航站楼,办理入境手续,之后前往提取行李";
- if (i == timeList.Count - 1)//如果本日是行程的最后一天,先增加酒店到机场的距离时间,再在末尾提醒“行程圆满结束”
- {
- trip = trip + ",圆满结束此次访问之行!";
- }
- else //如果本日不是行程的最后一天,正常提醒
- {
- trip = trip + ";\r\n" + leaveAirPortTime + " 搭乘专车前往酒店,抵达后办理入住;";
- }
- //整理离开机场的时间 +10分钟为"乘车前往酒店"的时刻
- int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- min = min + 10;
- if (min > 59)
- {
- min = min - 60;
- hour = hour + 1;
- }
- if (hour > 23)
- {
- hour = hour - 24;
- }
- leaveAirPortTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
- leaveAirPortTime = leaveAirPortTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
- #endregion
- }
- }
- }
- }
- #endregion
- #region 行程和城市赋值
- if (trip == "" || trip == " " || city == "" || city == " ")
- {
- city = CityInDateList.Find(cid => cid.Date == timeList[i]).City;
- //部分黄热病国家,需要提醒打疫苗
- string result = PublicCode.GetCountryInfo(tcs.getByCity(city)[0].Country);
- if (result.Contains("3"))
- {
- city += "(此地区为黄热病地区,请注意打疫苗)";
- }
- trip = city;
- }
- #endregion
- #region 公务 20210820 贾文滔
- string OATemp = "";//暂存公务活动
- //根据团号和日期获取公务数据
- List<OfficialActivities> listoa = oas.getByDiidAndDate(comb_Diid, timeList[i]);
- //若listoa存在公务数据,进行排序,再进行导入
- if (listoa != null && listoa.Count > 0)
- {
- //利用datatable存放公务活动数据
- DataTable OA_DataTable = new DataTable();
- OA_DataTable.Columns.Add("StartTime", typeof(string)); //activity开始时刻
- OA_DataTable.Columns.Add("EndTime", typeof(string)); //activity结束时刻
- OA_DataTable.Columns.Add("Client", typeof(string)); //activity单位
- OA_DataTable.Columns.Add("Address", typeof(string)); //activity地址
- OA_DataTable.Columns.Add("Contact", typeof(string)); //activity联系人
- OA_DataTable.Columns.Add("Tel", typeof(string)); //activity联系人电话
- OA_DataTable.Columns.Add("Dresscode", typeof(string)); //activity着装要求
- OA_DataTable.Columns.Add("isTranslate", typeof(bool));//是否需要翻译人员
- OA_DataTable.Columns.Add("Language", typeof(string));//是否需要翻译人员
- //处理公务数据
- for (int b = 0; b < listoa.Count; b++)
- {
- //起止时间
- string[] time = new string[2];
- if (listoa[b].Time.Contains('—'))
- {
- time = listoa[b].Time.Split('—');
- }
- else if (listoa[b].Time.Contains('-'))
- {
- time = listoa[b].Time.Split('-');
- }
- //添加数据
- if (time.Length >= 2)
- {
- OA_DataTable.Rows.Add(time[0], time[1], listoa[b].Client, listoa[b].Address, listoa[b].Contact, listoa[b].Tel, listoa[b].Dresscode, listoa[b].IsNeedTrans, listoa[b].Language);
- }
- else
- {
- //PublicCode.GetAlertMsg(this, GetType(), timeList[i] + "的公务数据有误,请检查");
- }
- }
- //排序
- OA_DataTable.DefaultView.Sort = "StartTime asc";
- OA_DataTable = OA_DataTable.DefaultView.ToTable();
- //导入信息
- for (int index = 0; index < OA_DataTable.Rows.Count; index++)
- {
- if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里
- {
- if (OATemp != "")
- {
- OATemp = OATemp + "\r\n"
- + OA_DataTable.Rows[index]["StartTime"].ToString()
- + "-"
- + OA_DataTable.Rows[index]["EndTime"].ToString()
- + " 拜访" + OA_DataTable.Rows[index]["Client"].ToString()
- + ",联系人:" + OA_DataTable.Rows[index]["Contact"].ToString()
- + ",电话:" + OA_DataTable.Rows[index]["Tel"].ToString()
- + ",地址:" + OA_DataTable.Rows[index]["Address"].ToString()
- + ",着装要求:" + OA_DataTable.Rows[index]["Dresscode"].ToString()
- + ",是否需要翻译:" + (bool.Parse(OA_DataTable.Rows[index]["isTranslate"].ToString()) ? "需要翻译人员" + "翻译语种为" + OA_DataTable.Rows[index]["Language"].ToString() : "不需要翻译人员")
- + ",议题:-";
- }
- else
- {
- OATemp = OA_DataTable.Rows[index]["StartTime"].ToString()
- + "-"
- + OA_DataTable.Rows[index]["EndTime"].ToString()
- + " 拜访" + OA_DataTable.Rows[index]["Client"].ToString()
- + ",联系人:" + OA_DataTable.Rows[index]["Contact"].ToString()
- + ",电话:" + OA_DataTable.Rows[index]["Tel"].ToString()
- + ",地址:" + OA_DataTable.Rows[index]["Address"].ToString()
- + ",着装要求:" + OA_DataTable.Rows[index]["Dresscode"].ToString()
- + ",是否需要翻译:" + (bool.Parse(OA_DataTable.Rows[index]["isTranslate"].ToString()) ? "需要翻译人员" + "翻译语种为" + OA_DataTable.Rows[index]["Language"].ToString() : "不需要翻译人员")
- + ",议题:-";
- }
- }
- else
- {
- //导入公务
- trip = trip + "\r\n"
- + OA_DataTable.Rows[index]["StartTime"].ToString()
- + "-"
- + OA_DataTable.Rows[index]["EndTime"].ToString()
- + " 拜访" + OA_DataTable.Rows[index]["Client"].ToString()
- + ",联系人:" + OA_DataTable.Rows[index]["Contact"].ToString()
- + ",电话:" + OA_DataTable.Rows[index]["Tel"].ToString()
- + ",地址:" + OA_DataTable.Rows[index]["Address"].ToString()
- + ",着装要求:" + OA_DataTable.Rows[index]["Dresscode"].ToString()
- + ",是否需要翻译:" + (bool.Parse(OA_DataTable.Rows[index]["isTranslate"].ToString()) ? "需要翻译人员" + "翻译语种为" + OA_DataTable.Rows[index]["Language"].ToString() : "不需要翻译人员")
- + ",议题:-";
- }
- //当天第一个公务或许都是从酒店出发,因此可计算酒店到公务地址的距离和时间
- if (index == 0)
- {
- #region 酒店
- foreach (HotelReservations h in listht)
- {
- if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i])
- && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i]))
- {
- //利用谷歌API计算路线
- GoogleMapApiResult g = gmrs.GetByDiidAddress(di.Id, h.HotelAddress, OA_DataTable.Rows[0]["Address"].ToString());
- if (g != null)
- {
- if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里
- {
- OATemp = OATemp + "。 (" + g.Distance + "," + g.Time + ")";
- }
- else
- {
- trip = trip + "。 (" + g.Distance + "," + g.Time + ")";
- }
- }
- else
- {
- try
- {
- JObject Result = PublicCode.GetDirectionByGoogleApi(h.HotelAddress, OA_DataTable.Rows[0]["Address"].ToString());
- if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里
- {
- OATemp = OATemp + "。 (" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + ","
- + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")";
- }
- else
- {
- trip = trip + "。 (" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + ","
- + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")";
- }
- GoogleMapApiResult gtemp = new GoogleMapApiResult();
- gtemp.Diid = di.Id;
- gtemp.Date = "";
- gtemp.Moment = "";
- gtemp.StartAddress = h.HotelAddress;
- gtemp.EndAddress = OA_DataTable.Rows[0]["Address"].ToString();
- gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
- gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
- gmrs.Add(gtemp);
- }
- catch
- {
- if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里
- {
- OATemp = OATemp + "。 (谷歌接口异常,无法测算路程时间)";
- }
- else
- {
- trip = trip + "。 (谷歌接口异常,无法测算路程时间)";
- }
- }
- }
- }
- }
- #endregion
- }
- //第二个公务是由中午的餐厅前往公务地址,具有随机性,因此不计算此方向距离时间;但可计算由公务地址回酒店的信息
- else
- {
- #region 酒店
- foreach (HotelReservations h in listht)
- {
- if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i])
- && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i]))
- {
- //利用谷歌API计算路线
- GoogleMapApiResult g = gmrs.GetByDiidAddress(di.Id, OA_DataTable.Rows[index]["Address"].ToString(), h.HotelAddress);
- if (g != null)
- {
- if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里
- {
- OATemp = OATemp + "。 (" + g.Distance + "," + g.Time + ")";
- }
- else
- {
- trip = trip + "。 (" + g.Distance + "," + g.Time + ")";
- }
- }
- else
- {
- try
- {
- JObject Result = PublicCode.GetDirectionByGoogleApi(OA_DataTable.Rows[index]["Address"].ToString(), h.HotelAddress);
- if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里
- {
- OATemp = OATemp + "。 (" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + ","
- + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")";
- }
- else
- {
- trip = trip + "。 (" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + ","
- + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")";
- }
- GoogleMapApiResult gtemp = new GoogleMapApiResult();
- gtemp.Diid = di.Id;
- gtemp.Date = "";
- gtemp.Moment = "";
- gtemp.StartAddress = OA_DataTable.Rows[0]["Address"].ToString();
- gtemp.EndAddress = h.HotelAddress;
- gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
- gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
- gmrs.Add(gtemp);
- }
- catch
- {
- if (i == 0)//行程第一天的公务放在酒店后面,所以先暂存在一个变量里
- {
- OATemp = OATemp + "。 (谷歌接口异常,无法测算路程时间)";
- }
- else
- {
- trip = trip + "。 (谷歌接口异常,无法测算路程时间)";
- }
- }
- }
- }
- }
- #endregion
- }
- }
- }
- #endregion
- #region 酒店
- foreach (HotelReservations h in listht)
- {
- if (Convert.ToDateTime(h.CheckInDate) <= Convert.ToDateTime(timeList[i])
- && Convert.ToDateTime(h.CheckOutDate) > Convert.ToDateTime(timeList[i]))//不去“》=”的原因是行程最后一天一般不会有酒店
- {
- //利用谷歌API计算路线
- if (AirPort != "")
- {
- GoogleMapApiResult g = gmrs.GetByDiidAddress(di.Id, AirPort, h.HotelAddress);
- if (g != null)
- {
- trip = trip + "\r\n"
- + leaveAirPortTime + " 乘车前往酒店:(" + g.Distance + "," + g.Time + ")";
- //计算“抵达酒店办理入住手续”的时间
- string CheckInHotelTime;
- //处理时间格式
- string hours = "", mins = "";
- if (g.Time.Contains("hour"))
- {
- g.Time = g.Time.Replace("hour", "h");
- }
- else if (g.Time.Contains("hours"))
- {
- g.Time = g.Time.Replace("hours", "h");
- }
- g.Time = g.Time.Replace("mins", "m");
- if (g.Time.Contains("h"))
- {
- hours = g.Time.Split('h')[0].Trim();
- }
- else if (!g.Time.Contains("h"))
- {
- mins = g.Time.Split('m')[0].Trim();
- }
- int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- min = min + Convert.ToInt32(mins);
- if (min > 59)
- {
- min = min - 60;
- hour = hour + 1;
- }
- if (hours != "")
- {
- hour = hour + Convert.ToInt32(hours);
- }
- if (hour > 23)
- {
- hour = hour - 24;
- }
- CheckInHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
- CheckInHotelTime = CheckInHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
- trip = trip + "\r\n"
- + CheckInHotelTime + " 抵达酒店办理入住手续";
- }
- else
- {
- try
- {
- JObject Result = PublicCode.GetDirectionByGoogleApi(AirPort, h.HotelAddress);
- trip = trip + "\r\n"
- + leaveAirPortTime + " 乘车前往酒店:(" + Result["routes"][0]["legs"][0]["distance"]["text"].ToString() + ","
- + Result["routes"][0]["legs"][0]["duration"]["text"].ToString() + ")";
- //计算“抵达酒店办理入住手续”的时间
- string CheckInHotelTime;
- //处理时间格式
- string Gtime = "", hours = "", mins = "";
- if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hour"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hour", "h");
- }
- else if (Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Contains("hours"))
- {
- Gtime = Result["routes"][0]["legs"][0]["duration"]["text"].ToString().Replace("hours", "h");
- }
- Gtime = Gtime.Replace("mins", "m");
- if (!string.IsNullOrEmpty(Gtime) && Gtime.Contains("h"))
- {
- hours = Gtime.Split('h')[0].Trim();
- }
- else if (!string.IsNullOrEmpty(Gtime) && !Gtime.Contains("h"))
- {
- mins = Gtime.Split('m')[0].Trim();
- }
- int hour = Convert.ToInt32(leaveAirPortTime.Substring(0, 2));
- int min = Convert.ToInt32(leaveAirPortTime.Substring(3, 2));
- if (mins != "")
- min = min + Convert.ToInt32(mins);
- if (min > 59)
- {
- min = min - 60;
- hour = hour + 1;
- }
- if (hours != "")
- {
- hour = hour + Convert.ToInt32(hours);
- }
- if (hour > 23)
- {
- hour = hour - 24;
- }
- CheckInHotelTime = hour < 10 ? "0" + hour.ToString() : hour.ToString();
- CheckInHotelTime = CheckInHotelTime + ":" + (min < 10 ? "0" + min.ToString() : min.ToString());
- trip = trip + "\r\n"
- + CheckInHotelTime + " 抵达酒店办理入住手续";
- GoogleMapApiResult gtemp = new GoogleMapApiResult();
- gtemp.Diid = di.Id;
- gtemp.Date = "";
- gtemp.Moment = "";
- gtemp.StartAddress = AirPort;
- gtemp.EndAddress = h.HotelAddress;
- gtemp.Time = Result["routes"][0]["legs"][0]["duration"]["text"].ToString();
- gtemp.Distance = Result["routes"][0]["legs"][0]["distance"]["text"].ToString();
- gmrs.Add(gtemp);
- }
- catch
- {
- trip = trip + "\r\n"
- + " (谷歌接口异常,无法测算的路程时间)";
- }
- }
- }
- trip = trip + "\r\n"
- + " 酒店名称:" + h.HotelName + "\r\n"
- + " 酒店地址:" + h.HotelAddress + "\r\n"
- + " 酒店电话:" + h.HotelTel + " 酒店传真:" + (h.HotelFax == "" ? "-" : h.HotelFax);
- if (i == 0 && !string.IsNullOrEmpty(OATemp))
- {
- trip = trip + "\r\n" + OATemp;
- }
- }
- }
- #endregion
- #region 当天交通工具赋值
- //一般行程第一天都是先乘坐飞机后乘坐汽车
- if (i == 0)
- {
- tlTemp.Traffic_First = "飞机";
- tlTemp.Traffic_Second = "汽车";
- }
- else
- {
- // 根据车导地接表数据判断交通工具:汽车
- List<CarTouristGuideGroundReservations> ListCar = listctg.FindAll(c => Convert.ToDateTime(c.ServiceStartTime) <= Convert.ToDateTime(timeList[i])
- && Convert.ToDateTime(c.ServiceEndTime) >= Convert.ToDateTime(timeList[i]));
- //交通工具:汽车
- if (ListCar.Count > 0)
- {
- tlTemp.Traffic_First = "汽车";
- //交通工具:飞机
- if (airSign == true)
- {
- tlTemp.Traffic_Second = "飞机";
- }
- else
- {
- tlTemp.Traffic_Second = "";
- }
- }
- else
- {
- tlTemp.Traffic_First = "汽车";
- //交通工具:飞机
- if (airSign == true)
- {
- tlTemp.Traffic_Second = "飞机";
- }
- else
- {
- tlTemp.Traffic_Second = "";
- }
- }
- }
- #endregion
- tlTemp.Trip = trip;
- tlTemp.OPer = di.Id;
- tlTemp.OPdate = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
- //tlTemp.OPdate = PublicCode.GetBeijingTime().ToString("yyyy-MM-dd hh:mm:ss");
- tlTemp.issel = 1;
- tlTemp.diffgroup = 1;
- tlTemp.Isdel = 0;
- tls.AddTravelList(tlTemp);
- }
- }
- }
- catch (Exception ex)
- {
- //Response.Write(ex.Message.ToString());
- lblImport.Text = ex.Message;
- }
- lblImport.Text = "数据录入完成";
- }
- }
- }
- }
|