| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740 | using Aspose.Cells;using Aspose.Cells.Drawing.Texts;using Aspose.Words;using Aspose.Words.Tables;using NPOI.Util;using OASystem.API.OAMethodLib;using OASystem.API.OAMethodLib.File;using OASystem.Domain.Dtos.Groups;using OASystem.Domain.Entities.Groups;using OASystem.Domain.ViewModels.Groups;using OASystem.Infrastructure.Repositories.Groups;using TencentCloud.Ocr.V20181119.Models;using OASystem.Infrastructure.Tools;using System.Web;using System.Data;using static OASystem.Infrastructure.Repositories.Groups.AirTicketResRepository;using static OpenAI.GPT3.ObjectModels.SharedModels.IOpenAiModels;using Cell = Aspose.Words.Tables.Cell;using Row = Aspose.Words.Tables.Row;using System.Runtime.Intrinsics.Arm;using Microsoft.AspNetCore.Mvc.Filters;using OASystem.Domain.Entities.Customer;using NPOI.SS.Formula.Functions;using OASystem.Domain.Dtos.CRM;using System.Diagnostics;using MathNet.Numerics.Statistics.Mcmc;using AlibabaCloud.OpenApiClient.Models;using System;using NPOI.HPSF;using SqlSugar;using System.Collections;using Org.BouncyCastle.Ocsp;using System.Globalization;using static QRCoder.PayloadGenerator;using Bookmark = Aspose.Words.Bookmark;using Aspose.Words.Fields;using NPOI.POIFS.FileSystem;using Microsoft.AspNetCore.Mvc.ViewEngines;using OASystem.Domain.ViewModels.QiYeWeChat;using OASystem.Domain.Entities.Financial;using NPOI.POIFS.Crypt.Dsig;using System.Diagnostics.Eventing.Reader;using System.IO;using StackExchange.Redis;using Org.BouncyCastle.Utilities;using Aspose.Words.Drawing;using Aspose.Cells.Charts;using static NPOI.HSSF.Util.HSSFColor;using Quartz.Util;using Google.Protobuf.WellKnownTypes;using Microsoft.AspNetCore.SignalR;using OASystem.API.OAMethodLib.Hub.HubClients;using OASystem.API.OAMethodLib.Hub.Hubs;using System.Collections.Generic;using OASystem.API.OAMethodLib.JuHeAPI;using static Microsoft.EntityFrameworkCore.DbLoggerCategory;using SixLabors.Fonts.Tables.AdvancedTypographic;using Microsoft.EntityFrameworkCore;using System.Security.Cryptography.Xml;using MathNet.Numerics;using System.Security.Policy;using System.Xml;using OASystem.Domain.Dtos.QiYeWeChat;using static NPOI.POIFS.Crypt.CryptoFunctions;using Aspose.Words.Lists;using OASystem.API.OAMethodLib.YouDaoAPI;using NPOI.XSSF.Streaming.Values;using OASystem.API.OAMethodLib.Quartz.Business;using System.Linq;using NPOI.POIFS.NIO;using OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice;using OASystem.Domain.ViewModels.Statistics;using NPOI.XSSF.Model;using NetTaste;using Microsoft.AspNetCore.Http;using EyeSoft.Collections.Generic;using NPOI.HSSF.Util;using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using NPOI.XSSF.UserModel;using MySqlX.XDevAPI.Relational;using SqlSugar.Extensions;using Table = Aspose.Words.Tables.Table;using Aspose.Cells.Tables;using NPOI.SS.Util;using RestSharp.Extensions;using Microsoft.AspNetCore.WebUtilities;using K4os.Compression.LZ4.Internal;using static Pipelines.Sockets.Unofficial.SocketConnection;using System.Diagnostics.PerformanceData;using System.Drawing.Printing;using OASystem.Domain.Dtos.FileDto;using Microsoft.VisualBasic;using Microsoft.EntityFrameworkCore.Query.Internal;namespace OASystem.API.Controllers{    /// <summary>    /// 团组相关    /// </summary>    //[Authorize]    [Route("api/[controller]/[action]")]    public class GroupsController : ControllerBase    {        private readonly GrpScheduleRepository _grpScheduleRep;        private readonly IMapper _mapper;        private readonly DelegationInfoRepository _groupRepository;        private readonly TaskAssignmentRepository _taskAssignmentRep;        private readonly AirTicketResRepository _airTicketResRep;        private readonly DecreasePaymentsRepository _decreasePaymentsRep;        private readonly InvitationOfficialActivitiesRepository _InvitationOfficialActivitiesRep;        private readonly DelegationEnDataRepository _delegationEnDataRep;        private readonly DelegationVisaRepository _delegationVisaRep;        private readonly VisaPriceRepository _visaPriceRep;        private readonly CarTouristGuideGroundRepository _carTouristGuideGroundRep;        private readonly HotelPriceRepository _hotelPriceRep;        private readonly CustomersRepository _customersRep;        private readonly MessageRepository _message;        private readonly SqlSugarClient _sqlSugar;        private readonly TourClientListRepository _tourClientListRep;        private readonly TeamRateRepository _teamRateRep;        #region 成本相关        private readonly CheckBoxsRepository _checkBoxs;        private readonly GroupCostRepository _GroupCostRepository;        private readonly CostTypeHotelNumberRepository _CostTypeHotelNumberRepository;        private readonly GroupCostParameterRepository _GroupCostParameterRepository;        #endregion        private readonly SetDataRepository _setDataRep;        private string url;        private string path;        private readonly EnterExitCostRepository _enterExitCostRep;        private readonly IHubContext<ChatHub, IChatClient> _hubContext;        private readonly UsersRepository _usersRep;        private readonly IJuHeApiService _juHeApi;        private readonly InvertedListRepository _invertedListRep;        private readonly VisaFeeInfoRepository _visaFeeInfoRep;        private readonly TicketBlackCodeRepository _ticketBlackCodeRep;        private readonly ThreeCodeRepository _threeCodeRepository;        private readonly HotelInquiryRepository _hotelInquiryRep;        private readonly FeeAuditRepository _feeAuditRep;        public GroupsController(IMapper mapper, SqlSugarClient sqlSugar, GrpScheduleRepository grpScheduleRep, DelegationInfoRepository groupRepository,            TaskAssignmentRepository taskAssignmentRep, AirTicketResRepository airTicketResRep, DecreasePaymentsRepository decreasePaymentsRep,            InvitationOfficialActivitiesRepository InvitationOfficialActivitiesRep, DelegationEnDataRepository delegationEnDataRep, EnterExitCostRepository enterExitCostRep            , DelegationVisaRepository delegationVisaRep, MessageRepository message, VisaPriceRepository visaPriceRep, CarTouristGuideGroundRepository carTouristGuideGroundRep,            CheckBoxsRepository checkBoxs, GroupCostRepository GroupCostRepository, CostTypeHotelNumberRepository CostTypeHotelNumberRepository,            GroupCostParameterRepository GroupCostParameterRepository, HotelPriceRepository hotelPriceRep, CustomersRepository customersRep, SetDataRepository setDataRep,            TourClientListRepository tourClientListRep, TeamRateRepository teamRateRep, IHubContext<ChatHub, IChatClient> hubContext, UsersRepository usersRep, IJuHeApiService juHeApi,            InvertedListRepository invertedListRep, VisaFeeInfoRepository visaFeeInfoRep, TicketBlackCodeRepository ticketBlackCodeRep, HotelInquiryRepository hotelInquiryRep,            ThreeCodeRepository threeCodeRepository, FeeAuditRepository feeAuditRep)        {            _mapper = mapper;            _grpScheduleRep = grpScheduleRep;            _groupRepository = groupRepository;            _taskAssignmentRep = taskAssignmentRep;            _airTicketResRep = airTicketResRep;            _sqlSugar = sqlSugar;            url = AppSettingsHelper.Get("ExcelBaseUrl");            path = AppSettingsHelper.Get("ExcelBasePath");            if (!System.IO.Directory.Exists(path))            {                System.IO.Directory.CreateDirectory(path);//不存在就创建文件夹            }            _decreasePaymentsRep = decreasePaymentsRep;            _InvitationOfficialActivitiesRep = InvitationOfficialActivitiesRep;            _delegationEnDataRep = delegationEnDataRep;            _enterExitCostRep = enterExitCostRep;            _delegationVisaRep = delegationVisaRep;            _message = message;            _visaPriceRep = visaPriceRep;            _carTouristGuideGroundRep = carTouristGuideGroundRep;            _checkBoxs = checkBoxs;            _GroupCostRepository = GroupCostRepository;            _CostTypeHotelNumberRepository = CostTypeHotelNumberRepository;            _GroupCostParameterRepository = GroupCostParameterRepository;            _hotelPriceRep = hotelPriceRep;            _customersRep = customersRep;            _setDataRep = setDataRep;            _tourClientListRep = tourClientListRep;            _teamRateRep = teamRateRep;            _hubContext = hubContext;            _usersRep = usersRep;            _juHeApi = juHeApi;            _invertedListRep = invertedListRep;            _visaFeeInfoRep = visaFeeInfoRep;            _ticketBlackCodeRep = ticketBlackCodeRep;            _hotelInquiryRep = hotelInquiryRep;            _threeCodeRepository = threeCodeRepository;            _feeAuditRep = feeAuditRep;        }        #region 流程管控        /// <summary>        /// 获取团组流程管控信息        /// </summary>        /// <param name="paras">参数Json字符串</param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostSearchGrpSchedule(JsonDtoBase _jsonDto)        {            if (string.IsNullOrEmpty(_jsonDto.Paras))            {                return Ok(JsonView(false, "参数为空"));            }            Grp_ScheduleDto _ScheduleDto = JsonConvert.DeserializeObject<Grp_ScheduleDto>(_jsonDto.Paras);            if (_ScheduleDto != null)            {                if (_ScheduleDto.SearchType == 2)//获取列表                {                    List<Grp_ScheduleView> _grpScheduleViewList = await _grpScheduleRep.GetViewList_GrpSchedule(_ScheduleDto);                    return Ok(JsonView(_grpScheduleViewList));                }                else//获取对象                {                    Grp_ScheduleCombinView _grpScheduleView = await _grpScheduleRep.GetView_GrpSchedule(_ScheduleDto);                    if (_grpScheduleView != null)                    {                        return Ok(JsonView(_grpScheduleView));                    }                }            }            else            {                return Ok(JsonView(false, "参数反序列化失败"));            }            return Ok(JsonView(false, "暂无数据!"));        }        /// <summary>        /// 修改团组流程管控详细表数据        /// </summary>        /// <param name="paras"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostUpdateGrpScheduleDetail(Grp_ScheduleDetailUpdDto dto)        {            Grp_ScheduleDetailInfo _detail = _mapper.Map<Grp_ScheduleDetailInfo>(dto);            var result = await _grpScheduleRep._sqlSugar.Updateable<Grp_ScheduleDetailInfo>()                .SetColumns(it => it.Duty == _detail.Duty)                .SetColumns(it => it.ExpectBeginDt == _detail.ExpectBeginDt)                .SetColumns(it => it.ExpectEndDt == _detail.ExpectEndDt)                .SetColumns(it => it.JobContent == _detail.JobContent)                .SetColumns(it => it.Remark == _detail.Remark)                .SetColumns(it => it.StepStatus == _detail.StepStatus)                .Where(s => s.Id == dto.Id)                //.UpdateColumns(s => new { s.Duty, s.ExpectBeginDt, s.ExpectEndDt, s.JobContent, s.Remark, s.StepStatus })                .ExecuteCommandAsync();            if (result > 0)            {                return Ok(JsonView(true, "保存成功!"));            }            return Ok(JsonView(false, "保存失败!"));        }        /// <summary>        /// 删除团组流程管控详细表数据,删除人Id请放在Duty        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<ActionResult> PostDeleteGrpScheduleDetail(Grp_ScheduleDetailUpdDto dto)        {            Grp_ScheduleDetailInfo _detail = _mapper.Map<Grp_ScheduleDetailInfo>(dto);            _detail.IsDel = 1;            _detail.DeleteUserId = dto.Duty;            _detail.DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");            var result = await _grpScheduleRep._sqlSugar.Updateable<Grp_ScheduleDetailInfo>()               .SetColumns(it => it.IsDel == _detail.IsDel)               .SetColumns(it => it.DeleteUserId == _detail.DeleteUserId)               .SetColumns(it => it.DeleteTime == _detail.DeleteTime)               .Where(it => it.Id == dto.Id)               //.UpdateColumns(s => new { s.IsDel, s.DeleteUserId, s.DeleteTime })               //.WhereColumns(s => s.Id == dto.Id)               .ExecuteCommandAsync();            if (result > 0)            {                return Ok(JsonView(true, "删除成功!"));            }            return Ok(JsonView(false, "删除失败!"));        }        /// <summary>        /// 增加团组流程管控详细表数据        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<ActionResult> PostInsertGrpScheduleDetail(Grp_ScheduleDetailInsertDto dto)        {            Grp_ScheduleDetailInfo _detail = _mapper.Map<Grp_ScheduleDetailInfo>(dto);            if (DateTime.Now < _detail.ExpectBeginDt)            {                _detail.StepStatus = 0;            }            else            {//若大于设置时间,不考虑设置的预计结束日期,统一视为进行中                _detail.StepStatus = 1;            }            var result = await _grpScheduleRep._sqlSugar.Insertable(_detail).ExecuteReturnIdentityAsync();            if (result > 0)            {                Grp_ScheduleDetailView _result = await _grpScheduleRep.GetInsertBackData(result);                return Ok(JsonView(true, "添加成功!", _result));            }            return Ok(JsonView(false, "添加失败!"));        }        #endregion        #region 团组基本信息        /// <summary>        ///  接团信息列表        /// </summary>        /// <param name="dto">团组列表请求dto</param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> GetGroupList(GroupListDto dto)        {            var groupData = await _groupRepository.GetGroupList(dto);            if (groupData.Code != 0)            {                return Ok(JsonView(false, groupData.Msg));            }            return Ok(JsonView(groupData.Data));        }        /// <summary>        ///  接团信息列表 Page        /// </summary>        /// <param name="dto">团组列表请求dto</param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostGroupPageList(GroupPageListDto dto)        {            #region  参数验证            if (dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));            if (dto.PageId < 1) return Ok(JsonView(false, "页面Id为空"));            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            #region 页面操作权限验证            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(dto.UserId, dto.PageId);            if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限"));            #endregion            #endregion            if (dto.PortType == 1 || dto.PortType == 2) // web/Android            {                string sqlWhere = string.Empty;                if (dto.IsSure == 0) //未完成                {                    sqlWhere += string.Format(@" And IsSure = 0");                }                else if (dto.IsSure == 1) //已完成                {                    sqlWhere += string.Format(@" And IsSure = 1");                }                if (!string.IsNullOrEmpty(dto.SearchCriteria))                {                    string tj = dto.SearchCriteria;                    sqlWhere += string.Format(@"And (ssd.Name Like '%{0}%' Or TeamName Like '%{1}%' Or ClientName Like '%{2}%' Or  ClientName Like '%{3}%' Or su.CnName  Like '%{4}%')",                       tj, tj, tj, tj, tj);                }                string sql = string.Format(@"Select Row_Number,Id,SalesQuoteNo,TourCode,TeamTypeId, TeamType,                                             	TeamLevId,TeamLev,TeamName,ClientName,ClientUnit,                                             	VisitDate,VisitDays,VisitPNumber,JietuanOperatorId,                                             	JietuanOperator,IsSure,CreateTime                                             	From (                                             	Select row_number() over(order by gdi.CreateTime Desc) as Row_Number,                                             	gdi.Id,SalesQuoteNo,TourCode,ssd.Id TeamTypeId, ssd.Name TeamType,                                             	ssd1.Id TeamLevId,ssd1.Name TeamLev,TeamName,ClientName,ClientUnit,                                             	VisitDate,VisitDays,VisitPNumber,JietuanOperator JietuanOperatorId,                                             	su.CnName JietuanOperator,IsSure,gdi.CreateTime                                             	From  Grp_DelegationInfo gdi                                             	Left Join Sys_SetData ssd On gdi.TeamDid = ssd.Id                                              	Left Join Sys_SetData ssd1 On gdi.TeamLevSId = ssd1.Id                                             	Left Join Sys_Users su On gdi.JietuanOperator = su.Id                                             	Where gdi.IsDel = 0 {0}                                             ) temp", sqlWhere);                RefAsync<int> total = 0;//REF和OUT不支持异步,想要真的异步这是最优解                var _DelegationList = await _sqlSugar.SqlQueryable<DelegationListView>(sql).ToPageListAsync(dto.PageIndex, dto.PageSize, total);//ToPageAsync                #region 处理所属部门                /*                 * 1.sq 和 gyy 等显示 市场部                 * 2.王鸽和主管及张总还有管理员号统一国交部                 * 2-1.  4	管理员 ,21	张海麟                 */                List<int> userIds = _DelegationList.Select(it => it.JietuanOperatorId).ToList();                List<int> userIds1 = new List<int>() { 4, 21 };                var UserDepDatas = _sqlSugar.Queryable<Sys_Users>()                                            .LeftJoin<Sys_Department>((u, d) => u.DepId == d.Id)                                            .Where(u => u.IsDel == 0 && userIds.Contains(u.Id))                                            .Select((u, d) => new { UserId = u.Id, DepName = userIds1.Contains(u.Id) ? "国交部" : d.DepName })                                            .ToList();                foreach (var item in _DelegationList)                {                    item.Department = UserDepDatas.Find(it => item.JietuanOperatorId == it.UserId)?.DepName ?? "Unknown";                }                #endregion                var _view = new                {                    PageFuncAuth = pageFunAuthView,                    Data = _DelegationList                };                return Ok(JsonView(true, "查询成功!", _view, total));            }            else            {                return Ok(JsonView(false, "查询失败"));            }        }        /// <summary>        /// 团组列表        /// </summary>        /// <returns></returns>        [HttpPost]        public async Task<IActionResult> GetGroupListByWhere(GroupListByWhere dto)        {            #region  参数验证            if (dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));            if (dto.PageId < 1) return Ok(JsonView(false, "页面Id为空"));            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            #region 页面操作权限验证            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(dto.UserId, dto.PageId);            if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限"));            #endregion            #endregion            if (dto.PortType != 1 && dto.PortType != 2)            {                return Ok(JsonView(false, "查询失败!"));            }            string orderbyStr = "order by gdi.CreateTime Desc";            string sqlWhere = string.Empty;            if (dto.IsSure == 0) //未完成            {                sqlWhere += string.Format(@" And IsSure = 0");            }            else if (dto.IsSure == 1) //已完成            {                sqlWhere += string.Format(@" And IsSure = 1");            }            //团组类型            if (dto.TeamDid > 0)            {                sqlWhere += string.Format(@"And TeamDid = {0} ", dto.TeamDid);            }            //团组名称            if (!string.IsNullOrEmpty(dto.TeamName))            {                sqlWhere += string.Format(@"And TeamName Like '%{0}%'", dto.TeamName);            }            //客户名称            if (!string.IsNullOrEmpty(dto.ClientName))            {                sqlWhere += string.Format(@"And ClientName Like '%{0}%'", dto.ClientName);            }            //客户单位            if (!string.IsNullOrEmpty(dto.ClientUnit))            {                sqlWhere += string.Format(@"And ClientUnit Like '%{0}%'", dto.ClientUnit);            }            //出访时间            if (!string.IsNullOrEmpty(dto.visitDataTime))            {                sqlWhere += string.Format(@"And VisitDate >= '{0}'", dto.visitDataTime);                orderbyStr = "order by gdi.VisitDate";            }            string sql = string.Format(@"Select Row_Number,Id,SalesQuoteNo,TourCode,TeamTypeId, TeamType,                                             	TeamLevId,TeamLev,TeamName,ClientName,ClientUnit,                                             	VisitDate,VisitDays,VisitPNumber,JietuanOperatorId,                                             	JietuanOperator,IsSure,CreateTime                                             	From (                                             	Select row_number() over({0}) as Row_Number,                                             	gdi.Id,SalesQuoteNo,TourCode,ssd.Id TeamTypeId, ssd.Name TeamType,                                             	ssd1.Id TeamLevId,ssd1.Name TeamLev,TeamName,ClientName,ClientUnit,                                             	VisitDate,VisitDays,VisitPNumber,JietuanOperator JietuanOperatorId,                                             	su.CnName JietuanOperator,IsSure,gdi.CreateTime                                             	From  Grp_DelegationInfo gdi                                             	Left Join Sys_SetData ssd On gdi.TeamDid = ssd.Id                                              	Left Join Sys_SetData ssd1 On gdi.TeamLevSId = ssd1.Id                                             	Left Join Sys_Users su On gdi.JietuanOperator = su.Id                                             	Where gdi.IsDel = 0 {1}                                             ) temp  ", orderbyStr, sqlWhere);            RefAsync<int> total = 0;//REF和OUT不支持异步,想要真的异步这是最优解            var _DelegationList = await _sqlSugar.SqlQueryable<DelegationListView>(sql).ToPageListAsync(dto.PageIndex, dto.PageSize, total);//ToPageAsync            #region 处理所属部门            /*             * 1.sq 和 gyy 等显示 市场部             * 2.王鸽和主管及张总还有管理员号统一国交部             * 2-1.  4	管理员 ,21	张海麟             */            List<int> userIds = _DelegationList.Select(it => it.JietuanOperatorId).ToList();            List<int> userIds1 = new List<int>() { 4, 21 };            var UserDepDatas = _sqlSugar.Queryable<Sys_Users>()                                        .LeftJoin<Sys_Department>((u, d) => u.DepId == d.Id)                                        .Where(u => u.IsDel == 0 && userIds.Contains(u.Id))                                        .Select((u, d) => new { UserId = u.Id, DepName = userIds1.Contains(u.Id) ? "国交部" : d.DepName })                                        .ToList();            foreach (var item in _DelegationList)            {                item.Department = UserDepDatas.Find(it => item.JietuanOperatorId == it.UserId)?.DepName ?? "Unknown";            }            #endregion            var _view = new            {                PageFuncAuth = pageFunAuthView,                Data = _DelegationList            };            return Ok(JsonView(true, "查询成功!", _view, total));        }        /// <summary>        ///  接团信息详情        /// </summary>        /// <param name="dto">团组info请求dto</param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> GetGroupInfo(GroupInfoDto dto)        {            var groupData = await _groupRepository.GetGroupInfo(dto);            if (groupData.Code != 0)            {                return Ok(JsonView(false, groupData.Msg));            }            return Ok(JsonView(groupData.Data));        }        /// <summary>        /// 接团信息 编辑添加        /// 基础信息数据源        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> GroupEditBasicSource(GroupListDto dto)        {            var groupData = await _groupRepository.GroupEditBasicSource(dto);            if (groupData.Code != 0)            {                return Ok(JsonView(false, groupData.Msg));            }            return Ok(JsonView(groupData.Data));        }        /// <summary>        /// 接团信息 操作(增改)        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> GroupOperation(GroupOperationDto dto)        {            try            {                var groupData = await _groupRepository.GroupOperation(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                int diId = 0;                //添加时 默认加入团组汇率                if (dto.Status == 1) //添加                {                    diId = groupData.Data;                    //添加默认币种                    await GeneralMethod.PostGroupRateAddInit(dto.UserId, diId);                    //默认分配权限                    await GeneralMethod.PostGroupAuthAddInit(dto.UserId, diId);                    //消息提示 王鸽 主管号                    List<int> _managerIds = new List<int>() { 22, 32 };                    var userIds = _usersRep._sqlSugar.Queryable<Sys_Users>().Where(it => it.IsDel == 0 && _managerIds.Contains(it.JobPostId)).Select(it => it.Id).ToList();                    if (userIds.Count > 0)                    {                        userIds.Add(208);                        //创建团组管控                        GroupStepForDelegation.CreateWorkStep(diId);                        //发送消息                        string groupName = dto.TeamName;                        string createGroupUser = string.Empty;                        var userInfo = _usersRep._sqlSugar.Queryable<Sys_Users>().Where(it => it.IsDel == 0 && it.Id == dto.UserId).First();                        if (userInfo != null) createGroupUser = userInfo.CnName;                        string title = $"系统通知";                        string content = $"团组[{groupName}(创建人:{createGroupUser})]创建成功,请前往页面进行下一步操作!";                        await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.GroupBusinessOperations, title, content, userIds, diId);                    }                    //默认创建倒推表                    await _invertedListRep._Create(dto.UserId, diId);                }                else if (dto.Status == 2)                {                    diId = dto.Id;                }                return Ok(JsonView(true, "操作成功!", diId));            }            catch (Exception ex)            {                Logs("[response]" + JsonConvert.SerializeObject(dto));                Logs(ex.Message);                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 接团流程操作(增改)        /// 安卓端使用 建团时添加客户名单        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> GroupProcessOperation(GroupProcessOperationDto dto)        {            try            {                #region  参数验证                if (dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数"));                PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();                #region 页面操作权限验证                //pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(dto.UserId, 104);                //if (pageFunAuthView.AddAuth == 0) return Ok(JsonView(false, "客户名单您没有添加权限!"));                pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(dto.UserId, 27);                if (pageFunAuthView.AddAuth == 0) return Ok(JsonView(false, "团组操作您没有添加权限!"));                #endregion                #endregion                _sqlSugar.BeginTran();                var _dto = new GroupOperationDto();                _dto = _mapper.Map<GroupProcessOperationDto, GroupOperationDto>(dto);                var groupData = await _groupRepository.GroupOperation(_dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, "团组操作添加失败!" + groupData.Msg));                }                int diId = 0;                //添加时 默认加入团组汇率                if (dto.Status == 1) //添加                {                    diId = groupData.Data;                    //添加默认币种                    await GeneralMethod.PostGroupRateAddInit(dto.UserId, diId);                    //默认分配权限                    await GeneralMethod.PostGroupAuthAddInit(dto.UserId, diId);                    //消息提示 王鸽 主管号                    List<int> _managerIds = new List<int>() { 22, 32 };                    var userIds = _usersRep._sqlSugar.Queryable<Sys_Users>().Where(it => it.IsDel == 0 && _managerIds.Contains(it.JobPostId)).Select(it => it.Id).ToList();                    if (userIds.Count > 0)                    {                        userIds.Add(208);                        //创建团组管控                        GroupStepForDelegation.CreateWorkStep(diId);                        //发送消息                        string groupName = dto.TeamName;                        string createGroupUser = string.Empty;                        var userInfo = _usersRep._sqlSugar.Queryable<Sys_Users>().Where(it => it.IsDel == 0 && it.Id == dto.UserId).First();                        if (userInfo != null) createGroupUser = userInfo.CnName;                        string title = $"系统通知";                        string content = $"团组[{groupName}(创建人:{createGroupUser})]创建成功,请前往页面进行下一步操作!";                        await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.GroupBusinessOperations, title, content, userIds, diId);                    }                }                if (dto.Status == 2)                {                    diId = dto.Id;                    if (diId == 0)                    {                        return Ok(JsonView(false, "修改失败! 未添加团组id" + groupData.Msg));                    }                }                var viewData = await _tourClientListRep.OperMultiple(dto.TourClientListInfos, diId, dto.UserId);                if (viewData.Code != 0)                {                    _sqlSugar.RollbackTran();                    return Ok(JsonView(false, "客户名单添加失败!" + viewData.Msg));                }                _sqlSugar.CommitTran();                return Ok(JsonView(true, "添加成功"));            }            catch (Exception ex)            {                _sqlSugar.RollbackTran();                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 接团信息 操作(删除)        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> GroupDel(GroupDelDto dto)        {            try            {                var groupData = await _groupRepository.GroupDel(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                return Ok(JsonView(true));            }            catch (Exception ex)            {                Logs("[response]" + JsonConvert.SerializeObject(dto));                Logs(ex.Message);                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 获取团组销售报价号        /// 团组添加时 使用        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> GetGroupSalesQuoteNo()        {            var groupData = await _groupRepository.GetGroupSalesQuoteNo();            if (groupData.Code != 0)            {                return Ok(JsonView(false, groupData.Msg));            }            object salesQuoteNo = new            {                SalesQuoteNo = groupData.Data            };            return Ok(JsonView(salesQuoteNo));        }        /// <summary>        /// 设置确认出团        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> SetConfirmationGroup(ConfirmationGroupDto dto)        {            var groupData = await _groupRepository.ConfirmationGroup(dto);            if (groupData.Code != 0)            {                return Ok(JsonView(false, groupData.Msg));            }            var groupInfo = _groupRepository.Query(s => s.Id == dto.GroupId).First();            #region OA消息推送            try            {                string groupName = groupInfo.TeamName;                List<Sys_Users> listUser = _airTicketResRep.Query<Sys_Users>(s => s.DepId == 7 && s.IsDel == 0).ToList();                List<int> userIds = new List<int>();                listUser.ForEach(s => userIds.Add(s.Id));                string title = $"系统通知";                string content = $"团组[{groupName}]已确认出团!";                await GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.GroupBusinessOperations, title, content, userIds, dto.GroupId);            }            catch (Exception ex)            {            }            #endregion            #region 应用推送            try            {                await AppNoticeLibrary.SendChatMsg_GroupStatus_Create(dto.GroupId, QiyeWeChatEnum.CompanyCRMChat);                Sys_Users users = _airTicketResRep.Query<Sys_Users>(s => s.Id == groupInfo.JietuanOperator).First();                Sys_Department department = _airTicketResRep.Query<Sys_Department>(s => s.Id == users.DepId).First();                if (department.Id == 6 && !string.IsNullOrEmpty(users.QiyeChatUserId))                {                    List<string> userList = new List<string>() { users.QiyeChatUserId };                    await AppNoticeLibrary.SendUserMsg_GroupStatus_Create(dto.GroupId, userList);                }            }            catch (Exception ex)            {            }            #endregion            GroupStepForDelegation.CreateWorkStep(dto.GroupId); //创建管控流程            return Ok(JsonView(true, "操作成功!", groupData.Data));        }        /// <summary>        /// 获取团组名称data  And 签证国别Data        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> GetGroupNameAndVisaNationality(GroupNameDto dto)        {            var groupData = await _groupRepository.GetGroupNameAndVisaNationality(dto);            if (groupData.Code != 0)            {                return Ok(JsonView(false, groupData.Msg));            }            return Ok(JsonView(groupData.Data));        }        /// <summary>        /// 根据CTable类型返回对应的团组名称及简单数据(APP端)        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostGroupNameAndEasy(DecreasePaymentsDto dto)        {            try            {                Result groupData = await _decreasePaymentsRep.PostGroupNameAndEasy(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        #endregion        #region 团组&签证        /// <summary>        ///  根据团组Id获取签证客户信息List        /// </summary>        /// <param name="dto">请求dto</param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> GetCrmByGroupId(ClientByGroupIdDto dto)        {            var groupData = await _groupRepository.GetCrmByGroupId(dto);            if (groupData.Code != 0)            {                return Ok(JsonView(false, groupData.Msg));            }            return Ok(JsonView(groupData.Data));        }        /// <summary>        ///  IOS获取团组签证拍照上传进度01(团组列表)        /// </summary>        /// <param name="dto">请求dto</param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostIOSVisaProgress(IOS_VisaDto dto)        {            if (dto == null)            {                return Ok(JsonView(false, "参数为空"));            }            DelegationVisaViewList visaList = _delegationVisaRep.GetDelegationList(dto);            return Ok(JsonView(visaList));        }        /// <summary>        ///  IOS获取团组签证拍照上传进度02(团组签证详情\人员列表\国家)        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<ActionResult> PostIOSVisaProgressContent(IOS_VisaCustomerListDto dto)        {            if (dto == null)            {                return Ok(JsonView(false, "请求错误:"));            }            List<DelegationVisaProgressView> list = _delegationVisaRep.GetDelegationProgressList(dto.diId);            return Ok(JsonView(list));        }        /// <summary>        ///  IOS获取团组签证拍照上传进度03(相册)        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<ActionResult> PostIOSVisaProgressImageList(IOS_VisaImageListDto dto)        {            if (dto == null)            {                return Ok(JsonView(false, "请求错误:"));            }            List<VisaProgressImageView> list = _delegationVisaRep.GetVisaProgressImageList(dto.visaProgressCustomerId, dto.picType);            string url = AppSettingsHelper.Get("VisaProgressImageBaseUrl") + AppSettingsHelper.Get("VisaProgressImageFtpPath");            list.ForEach(s => s.url = url);            return Ok(JsonView(list));        }        /// <summary>        /// IOS获取团组签证拍照上传进度04(图片上传)        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<ActionResult> PostIOSVisaProgressUploadImage(IOS_VisaUploadImageDto dto)        {            //string result = decodeBase64ToImage(dto.base64DataURL, dto.imageName);            //if (!string.IsNullOrEmpty(result))            //{            //}            //else {            //    return Ok(JsonView(false, "上传失败"));            //}            DateTime dt1970 = new DateTime(1970, 1, 1, 0, 0, 0, 0);            int sucNum = 0;            try            {                foreach (var item in dto.base64DataList)                {                    string imageName = dto.imageName + ((DateTime.Now.Ticks - dt1970.Ticks) / 10000).ToString();                    string result = decodeBase64ToImage(item, imageName);                    if (!string.IsNullOrEmpty(result))                    {                        Grp_VisaProgressCustomerPicture pic = new Grp_VisaProgressCustomerPicture();                        pic.CreateUserId = dto.CreateUserId;                        pic.PicName = imageName;                        pic.PicPath = result;                        pic.VisaProgressCustomerId = dto.visaProgressCustomerId;                        int insertResult = await _delegationVisaRep.AddAsync<Grp_VisaProgressCustomerPicture>(pic);                        if (insertResult > 0)                        {                            sucNum++;                        }                    }                }            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }            string msg = string.Format(@"成功上传{0}张", sucNum);            return Ok(JsonView(true, msg));        }        private string decodeBase64ToImage(string base64DataURL, string imgName)        {            string filename = "";//声明一个string类型的相对路径            String base64 = base64DataURL.Substring(base64DataURL.IndexOf(",") + 1);      //将‘,’以前的多余字符串删除            System.Drawing.Bitmap bitmap = null;//定义一个Bitmap对象,接收转换完成的图片            try//会有异常抛出,try,catch一下            {                byte[] arr = Convert.FromBase64String(base64);//将纯净资源Base64转换成等效的8位无符号整形数组                System.IO.MemoryStream ms = new System.IO.MemoryStream(arr);//转换成无法调整大小的MemoryStream对象                bitmap = new System.Drawing.Bitmap(ms);//将MemoryStream对象转换成Bitmap对象                var fileDir = AppSettingsHelper.Get("VisaProgressImageBasePath");                //文件名称                filename = "VisaProgress_" + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + imgName + ".jpeg";//所要保存的相对路径及名字                //上传的文件的路径                string filePath = "";                if (!Directory.Exists(fileDir))                {                    Directory.CreateDirectory(fileDir);                }                //上传的文件的路径                filePath = fileDir + filename;                //string url = HttpRuntime.AppDomainAppPath.ToString();                //string tmpRootDir = System.Web.HttpContext.Current.Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString()); //获取程序根目录                 //string imagesurl2 = tmpRootDir + filename; //转换成绝对路径                 bitmap.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg);//保存到服务器路径                //bitmap.Save(filePath + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp);                //bitmap.Save(filePath + ".gif", System.Drawing.Imaging.ImageFormat.Gif);                //bitmap.Save(filePath, System.Drawing.Imaging.ImageFormat.Png);                ms.Close();//关闭当前流,并释放所有与之关联的资源                bitmap.Dispose();            }            catch (Exception e)            {                string massage = e.Message;                Logs("IOS图片上传Error:" + massage);                //filename = e.Message;            }            return filename;//返回相对路径        }        /// <summary>        /// IOS获取团组签证拍照上传进度05(修改签证状态/通知)        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<ActionResult> PostIOSVisaProgressChangeStatus(IOS_VisaChangeStatusDto dto)        {            if (dto == null)            {                return Ok(JsonView(false, "请求错误:"));            }            string msg = "参数错误";            if (dto.diId > 0 && dto.visaStatus > 0 && dto.visaStatus < 4)            {                try                {                    //_delegationVisaRep.BeginTran();                    var updCount = await _delegationVisaRep._sqlSugar.Updateable<Grp_VisaProgressCustomer>()                        .SetColumns(it => it.WorkStatus == dto.visaStatus)                        .Where(s => s.Id == dto.visaProgressCustomerId)                        .ExecuteCommandAsync();                    if (updCount > 0 && dto.publishCode == 1)                    {                        _delegationVisaRep.ChangeDataBase(DBEnum.OA2014DB); //切换到新OA后删除                        string sqlDelegation = string.Format(@" Select * From DelegationInfo With(Nolock) Where Id = {0} ", dto.diId);                        OA2021_DelegationInfo groupData = _sqlSugar.SqlQueryable<OA2021_DelegationInfo>(sqlDelegation).First();                        //GroupInfoDto grpDto = new GroupInfoDto() { Id = dto.diId };                        //var groupData = await _groupRepository.GetGroupInfo(grpDto);                        _delegationVisaRep.ChangeDataBase(DBEnum.OA2023DB); //切换到新OA后删除                        if (groupData == null)                        {                            _delegationVisaRep.RollbackTran();                        }                        string title = string.Format(@"[签证进度更新]");                        string content = string.Format(@"测试文本");                        bool rst = await _message.AddMsg(new MessageDto()                        {                            Type = MessageTypeEnum.GroupVisaProgressUpdate,                            IssuerId = dto.publisher,                            Title = title,                            Content = content,                            ReleaseTime = DateTime.Now,                            UIdList = new List<int> {                                234                            }                        });                        if (rst)                        {                            return Ok(JsonView(true, "发送通知成功"));                        }                    }                    //_delegationVisaRep.CommitTran();                }                catch (Exception)                {                    //_delegationVisaRep.RollbackTran();                }            }            return Ok(JsonView(true, msg));        }        #endregion        #region 团组任务分配        /// <summary>        /// 团组任务分配初始化        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> GetTaskAssignmen()        {            var groupData = await _taskAssignmentRep.GetTaskAssignmen();            if (groupData.Code != 0)            {                return Ok(JsonView(false, groupData.Msg));            }            return Ok(JsonView(true, groupData.Msg, groupData.Data));        }        /// <summary>        /// 团组任务分配查询        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> TaskAssignmenQuery(TaskAssignmenQueryDto dto)        {            var groupData = await _taskAssignmentRep.TaskAssignmenQuery(dto);            if (groupData.Code != 0)            {                return Ok(JsonView(false, groupData.Msg));            }            return Ok(JsonView(true, groupData.Msg, groupData.Data));        }        /// <summary>        /// 团组任务分配操作        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> GetTaskAssignmenOp(TaskAssignmenDto dto)        {            Result groupData = await _taskAssignmentRep.GetTaskAssignmenOp(dto);            if (groupData.Code != 0)            {                return Ok(JsonView(false, groupData.Msg));            }            return Ok(JsonView(true, groupData.Msg, groupData.Data));        }        #endregion        #region 团组费用审核        /// <summary>        ///  费用审核        ///  团组列表 Page        /// </summary>        /// <param name="_dto">团组列表请求dto</param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostExpenseAuditGroupPageItems(ExpenseAuditGroupPageItemsDto _dto)        {            #region  参数验证            if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));            if (_dto.PageId < 1) return Ok(JsonView(false, "页面Id为空"));            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            #region 页面操作权限验证            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);            if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限"));            #endregion            #endregion            if (_dto.PortType == 1 || _dto.PortType == 2 || _dto.PortType == 2) // web/Android/IOS            {                string sqlWhere = string.Empty;                if (_dto.IsSure == 0) //未完成                {                    sqlWhere += string.Format(@" And IsSure = 0");                }                else if (_dto.IsSure == 1) //已完成                {                    sqlWhere += string.Format(@" And IsSure = 1");                }                if (!string.IsNullOrEmpty(_dto.SearchCriteria))                {                    string tj = _dto.SearchCriteria;                    sqlWhere += string.Format(@"And (ssd.Name Like '%{0}%' Or TeamName Like '%{1}%' Or ClientName Like '%{2}%' Or  ClientName Like '%{3}%' Or su.CnName  Like '%{4}%')",                       tj, tj, tj, tj, tj);                }                string sql = string.Format(@"Select Row_Number,Id,SalesQuoteNo,TourCode,TeamTypeId, TeamType,					                       TeamName,ClientName,ClientUnit, TeamLevId,TeamLev,VisitDate,										   VisitDays,VisitPNumber,JietuanOperator,IsSure,CreateTime					                From (					                    Select row_number() over(order by gdi.VisitDate Desc) as Row_Number,					                    gdi.Id,SalesQuoteNo,TourCode,ssd1.Id TeamLevId,ssd1.Name TeamLev,TeamName,										ClientName,ClientUnit,ssd.Id TeamTypeId, ssd.Name TeamType,VisitDate,										VisitDays,VisitPNumber,su.CnName JietuanOperator,IsSure,gdi.CreateTime					                    From  Grp_DelegationInfo gdi					                    Inner Join Sys_SetData ssd On gdi.TeamDid = ssd.Id 					                    Inner Join Sys_SetData ssd1 On gdi.TeamLevSId = ssd1.Id					                    Left Join Sys_Users su On gdi.JietuanOperator = su.Id					                    Where gdi.IsDel = 0 {0}				                    ) temp  ", sqlWhere);                RefAsync<int> total = 0;//REF和OUT不支持异步,想要真的异步这是最优解                var _DelegationList = await _sqlSugar.SqlQueryable<DelegationListView>(sql).ToPageListAsync(_dto.PageIndex, _dto.PageSize, total);//ToPageAsync                var _view = new                {                    PageFuncAuth = pageFunAuthView,                    Data = _DelegationList                };                return Ok(JsonView(true, "查询成功!", _view, total));            }            else            {                return Ok(JsonView(false, "查询失败"));            }        }        /// <summary>        /// 获取团组费用审核        /// </summary>        /// <param name="paras">参数Json字符串</param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostSearchGrpCreditCardPayment(Search_GrpCreditCardPaymentDto _dto)        {            try            {                #region  参数验证                if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));                if (_dto.PageId < 1) return Ok(JsonView(false, "页面Id为空"));                if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空"));                PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();                #region 页面操作权限验证                pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);                if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限"));                #endregion                #endregion                Grp_CreditCardPaymentView _view = new Grp_CreditCardPaymentView();                List<SimplClientInfo> clientNameList = getSimplClientList(_dto.DiId);                #region 费用清单                var exp = Expressionable.Create<Grp_CreditCardPayment>();                exp.AndIF(_dto.AuditStatus != -1, it => it.IsAuditGM == _dto.AuditStatus);                exp.AndIF(_dto.Label != -1, it => it.CTable == _dto.Label);                List<Grp_CreditCardPayment> entityList = _groupRepository                    .Query<Grp_CreditCardPayment>(s => s.DIId == _dto.DiId && s.IsDel == 0 && s.CreateUserId > 0)                    .Where(exp.ToExpression())                    .ToList();                List<Grp_CreditCardPaymentDetailView> detailList = new List<Grp_CreditCardPaymentDetailView>();                List<CreditCardPaymentCurrencyPriceItem> ccpCurrencyPrices = new List<CreditCardPaymentCurrencyPriceItem>();                /*                 * 76://酒店预订                 */                List<Grp_HotelReservations> _HotelReservations = await _groupRepository                                                                       .Query<Grp_HotelReservations>(s => s.DiId == _dto.DiId && s.IsDel == 0)                                                                       .ToListAsync();                List<Grp_HotelReservationsContent> _HotelReservationsContents = await _groupRepository                                                                       .Query<Grp_HotelReservationsContent>(s => s.DiId == _dto.DiId && s.IsDel == 0)                                                                       .ToListAsync();                /*                 * 79://车/导游地接                 */                List<Grp_CarTouristGuideGroundReservations> _CarTouristGuideGroundReservations = await _groupRepository                                                                                                       .Query<Grp_CarTouristGuideGroundReservations>(s => s.DiId == _dto.DiId && s.IsDel == 0)                                                                                                       .ToListAsync();                List<Grp_CarTouristGuideGroundReservationsContent> _CarTouristGuideGroundReservationsContent = await _groupRepository                                                                     .Query<Grp_CarTouristGuideGroundReservationsContent>(s => s.DiId == _dto.DiId && s.IsDel == 0)                                                                     .ToListAsync();                /*                 * 80: //签证                 */                List<Grp_VisaInfo> _VisaInfos = await _groupRepository                                                      .Query<Grp_VisaInfo>(s => s.DIId == _dto.DiId && s.IsDel == 0)                                                      .ToListAsync();                /*                 *81: //邀请/公务活动                 */                List<Grp_InvitationOfficialActivities> _InvitationOfficialActivities = await _groupRepository                                                                                             .Query<Grp_InvitationOfficialActivities>(s => s.DiId == _dto.DiId && s.IsDel == 0)                                                                                             .ToListAsync();                /*                 * 82: //团组客户保险                 */                List<Grp_Customers> _Customers = await _groupRepository.Query<Grp_Customers>(s => s.DiId == _dto.DiId && s.IsDel == 0).ToListAsync();                /*                 *  Lable = 85 机票预订                 */                List<Grp_AirTicketReservations> p_AirTicketReservations = await _groupRepository                                                                                .Query<Grp_AirTicketReservations>(s => s.DIId == _dto.DiId && s.IsDel == 0)                                                                                .ToListAsync();                /*                 * 85 机票预定                 */                List<Grp_AirTicketReservations> _AirTicketReservations = await _groupRepository.Query<Grp_AirTicketReservations>(s => s.DIId == _dto.DiId && s.IsDel == 0).ToListAsync();                /*                *  98 其他款项                */                List<Grp_DecreasePayments> _DecreasePayments = await _groupRepository                                                                    .Query<Grp_DecreasePayments>(s => s.DiId == _dto.DiId && s.IsDel == 0)                                                                    .ToListAsync();                /*                 *  285:收款退还                 */                List<Fin_PaymentRefundAndOtherMoney> _PaymentRefundAndOtherMoneys = await _groupRepository                                                                                .Query<Fin_PaymentRefundAndOtherMoney>(s => s.DiId == _dto.DiId && s.IsDel == 0)                                                                                .ToListAsync();                /*                 * 1015: //超支费用                 */                List<Fin_GroupExtraCost> _GroupExtraCosts = await _groupRepository.Query<Fin_GroupExtraCost>(s => s.DiId == _dto.DiId && s.IsDel == 0).ToListAsync();                /*                 * 币种信息                 */                var currencyItems = await _groupRepository.Query<Sys_SetData>(s => s.STid == 66 && s.IsDel == 0).ToListAsync();                /*                 * 车/导游地接 费用类型                 */                var carFeeTypeItems = await _groupRepository.Query<Sys_SetData>(s => s.STid == 17 && s.IsDel == 0).ToListAsync();                /*                 * 车/导游地接 费用类型                 */                var carFeeItems = await _groupRepository.Query<Sys_SetData>(s => s.STid == 83 && s.IsDel == 0).ToListAsync();                var initDatas = await _groupRepository.Query<Sys_SetData>(s => s.IsDel == 0).ToListAsync();                var cityData = await _groupRepository.Query<Grp_NationalTravelFee>(s => s.IsDel == 0).ToListAsync();                /*                 * 用户信息                 */                var userItems = await _groupRepository.Query<Sys_Users>(s => s.IsDel == 0).ToListAsync();                /*                 * 费用模块                 */                Sys_SetData sdPriceName = _groupRepository.Query<Sys_SetData>(s => s.Id == _dto.Label).First();                string priceModule = string.Empty;                if (sdPriceName != null)                {                    priceModule = sdPriceName.Name;                }                /*                 * 成本信息                 */                var groupCost = _groupRepository.Query<Grp_GroupCostParameter>(s => s.DiId == _dto.DiId && s.IsDel == 0).First();                decimal _groupRate = 0.0000M;                string _groupCurrencyCode = "-";                if (groupCost != null)                {                    _groupRate = groupCost.Rate;                    if (int.TryParse(groupCost.Currency, out int _currency))                    {                        _groupCurrencyCode = currencyItems.Find(it => it.Id == _currency)?.Name ?? "-";                    }                    else _groupCurrencyCode = groupCost.Currency;                }                string costContentSql = $"Select * From Grp_GroupCost";                var groupCostDetails = _sqlSugar.SqlQueryable<GroupCostAuditView>(costContentSql).Where(x => x.IsDel == 0 && x.Diid == _dto.DiId).ToList();                //处理日期为空的天数                for (int i = 0; i < groupCostDetails.Count; i++)                    if (i != 0)                        if (string.IsNullOrEmpty(groupCostDetails[i].Date))                            groupCostDetails[i].Date = groupCostDetails[i - 1].Date;                /*                 * 处理详情数据                  */                foreach (var entity in entityList)                {                    Grp_CreditCardPaymentDetailView _detail = new Grp_CreditCardPaymentDetailView();                    _detail.Id = entity.Id;                    _detail.PriceName = priceModule;                    _detail.PayType = initDatas.Find(it => it.Id == entity.PayDId)?.Name ?? "-";                    _detail.CardType = initDatas.Find(it => it.Id == entity.CTDId)?.Name ?? "-";                    /*                     * 应付款金额	                     */                    Sys_SetData sdPaymentCurrency_WaitPay = currencyItems.Where(s => s.Id == entity.PaymentCurrency).FirstOrDefault();                    string PaymentCurrency_WaitPay = "Unknown";                    string hotelCurrncyCode = "Unknown";                    string hotelCurrncyName = "Unknown";                    if (sdPaymentCurrency_WaitPay != null)                    {                        PaymentCurrency_WaitPay = sdPaymentCurrency_WaitPay.Name;                        hotelCurrncyCode = sdPaymentCurrency_WaitPay.Name;                        hotelCurrncyName = sdPaymentCurrency_WaitPay.Remark;                        if (hotelCurrncyCode.Equals("CNY"))                        {                            entity.DayRate = 1.0000M;                        }                    }                    _detail.WaitPay = entity.PayMoney.ConvertToDecimal1().ToString("#0.00") + " " + PaymentCurrency_WaitPay;                    /*                     * 此次付款金额                     */                    decimal CurrPayStr = 0;                    if (entity.PayPercentage == 0)                    {                        if (entity.PayThenMoney != 0)                            CurrPayStr = (entity.PayThenMoney * entity.DayRate).ConvertToDecimal1();                    }                    else                    {                        if (entity.PayMoney != 0)                        {                            CurrPayStr = (entity.PayMoney * entity.PayPercentage / 100 * entity.DayRate).ConvertToDecimal1();                        }                    }                    _detail.CurrPay = CurrPayStr.ToString("#0.00") + " CNY";                    /*                     * 剩余尾款                     */                    decimal BalanceStr = 0;                    if (CurrPayStr != 0)                    {                        if (entity.PayMoney - (CurrPayStr / entity.DayRate) < 0.01M)                            BalanceStr = 0;                        else                            BalanceStr = (entity.PayMoney - CurrPayStr / entity.DayRate).ConvertToDecimal1();                    }                    _detail.Balance = BalanceStr.ToString("#0.00") + " " + PaymentCurrency_WaitPay;                    /*                     * Bus名称                     */                    _detail.BusName = "待增加";                    /*                     *费用所属                     */                    switch (entity.CTable)                    {                        case 76://酒店预订                            Grp_HotelReservations hotelReservations = _HotelReservations.Where(s => s.Id == entity.CId).FirstOrDefault();                            if (hotelReservations != null)                            {                                DateTime checkIn = Convert.ToDateTime(hotelReservations.CheckInDate),                                         checkOut = Convert.ToDateTime(hotelReservations.CheckOutDate);                                int hotel_days = (int)(checkOut - checkIn).TotalDays;                                string roomFeeStr = "", roomFeestr1 = "";                                //是否比较房型价格                                bool __isSingle = false, __isDouble = false, __isSuite = false, __isOther = false;                                roomFeeStr += $"<br/><span style='width:70px;display: inline-block;'></span>";                                if (hotelReservations.SingleRoomPrice > 0)                                { roomFeestr1 += $"单间:{hotelReservations.SingleRoomPrice.ToString("#0.00")} * {hotelReservations.SingleRoomCount}"; __isSingle = true; }                                if (hotelReservations.DoubleRoomPrice > 0)                                { roomFeestr1 += $"双人间:{hotelReservations.DoubleRoomPrice.ToString("#0.00")} * {hotelReservations.DoubleRoomCount}"; __isDouble = true; }                                if (hotelReservations.SuiteRoomPrice > 0)                                { roomFeestr1 += $"套房:{hotelReservations.SuiteRoomPrice.ToString("#0.00")} * {hotelReservations.SuiteRoomCount}"; __isSuite = true; }                                if (hotelReservations.OtherRoomPrice > 0)                                { roomFeestr1 += $"其他:{hotelReservations.OtherRoomPrice.ToString("#0.00")} * {hotelReservations.OtherRoomCount}"; __isOther = true; }                                if (roomFeestr1.Length > 0) roomFeeStr += roomFeestr1;                                else roomFeeStr += "  0.00 * 0";                                decimal governmentRentFee = 0.00M, cityTaxFee = 0.00M, breakfastFee = 0.00M, roomFee = 0.00M;                                string governmentRentBool = "否", cityTaxBool = "否", breakfastBool = "否", roomBool = "否";                                string governmentRentCode = "", governmentRentName = "", cityTaxCode = "", cityTaxName = "", breakfastCode = "", breakfastName = "", roomCode = "", roomName = "";                                var _HotelReservationsContents1 = _HotelReservationsContents.Where(it => it.HrId == hotelReservations.Id).ToList();                                /*                                 * 费用类型                                 * 1:房费                                 * 2:早餐                                 * 3:地税                                 * 4:城市税                                 * </summary>                                 */                                //地税                                var governmentRentData = _HotelReservationsContents1.Find(it => it.PriceType == 3);                                if (governmentRentData != null)                                {                                    governmentRentBool = governmentRentData.IsOppay == 1 ? "是" : "否";                                    governmentRentFee = governmentRentData.Price;                                    var governmentRentCurrData = currencyItems.Find(s => s.Id == governmentRentData.Currency);                                    if (governmentRentCurrData != null)                                    {                                        governmentRentCode = governmentRentCurrData.Name;                                        governmentRentName = $"({governmentRentCurrData.Remark})";                                    }                                }                                //城市税                                var cityTaxData = _HotelReservationsContents1.Find(it => it.PriceType == 4);                                if (cityTaxData != null)                                {                                    cityTaxBool = cityTaxData.IsOppay == 1 ? "是" : "否";                                    cityTaxFee = cityTaxData.Price;                                    var cityTaxCurrData = currencyItems.Find(s => s.Id == cityTaxData.Currency);                                    if (cityTaxCurrData != null)                                    {                                        cityTaxCode = cityTaxCurrData.Name;                                        cityTaxName = $"({cityTaxCurrData.Remark})";                                    }                                }                                //酒店早餐                                var breakfastData = _HotelReservationsContents1.Find(it => it.PriceType == 2);                                if (breakfastData != null)                                {                                    breakfastBool = breakfastData.IsOppay == 1 ? "是" : "否";                                    breakfastFee = breakfastData.Price;                                    var breakfastCurrData = currencyItems.Find(s => s.Id == breakfastData.Currency);                                    if (breakfastCurrData != null)                                    {                                        breakfastCode = breakfastCurrData.Name;                                        breakfastName = $"({breakfastCurrData.Remark})";                                    }                                }                                //房间费用                                var roomData = _HotelReservationsContents1.Find(it => it.PriceType == 1);                                if (roomData != null)                                {                                    _detail.PayType = initDatas.Find(it => it.Id == roomData.PayDId)?.Name ?? "-";                                    _detail.CardType = initDatas.Find(it => it.Id == roomData.CTDId)?.Name ?? "-";                                    roomBool = roomData.IsOppay == 1 ? "是" : "否";                                    roomFee = roomData.Price;                                    var roomCurrData = currencyItems.Find(s => s.Id == roomData.Currency);                                    if (roomCurrData != null)                                    {                                        roomCode = roomCurrData.Name;                                        roomName = $"({roomCurrData.Remark})";                                    }                                }                                string hotelCostTitalStr = "<span style='font-weight:800;'>成本信息</span><br/>";                                string hotelCostStr = "";                                decimal hotelCsotTotal = 0.00M;                                if (groupCost != null)                                {                                    if (int.TryParse(groupCost.Currency, out int currencyId)) groupCost.Currency = currencyItems.Find(s => s.Id == currencyId)?.Name ?? "-";                                    hotelCostStr += $"{groupCost.Currency}(汇率:{groupCost.Rate.ToString("#0.0000")})<br/>";                                }                                if (checkOut > checkIn) checkOut = checkOut.AddDays(-1);                                var hotelCostDetails = groupCostDetails.Where(x => Convert.ToDateTime(x.Date) >= checkIn && Convert.ToDateTime(x.Date) <= checkOut).ToList();                                string hotelCost_day = "";                                var hotelCostDetails1 = hotelCostDetails.GroupBy(x => x.Date);                                foreach (var item in hotelCostDetails1)                                {                                    hotelCsotTotal += item.Sum(x => x.HotelSingleRoomFee) + item.Sum(x => x.HotelDoubleRoomFee) + item.Sum(x => x.HotelSuiteRoomFee) + item.Sum(x => x.HotelSuiteFee);                                    hotelCost_day += @$"{item.First()?.Date ?? "-"}";                                    if (item.Sum(x => x.HotelSingleRoomFee) != 0) hotelCost_day += @$"   单间:{item.Sum(x => x.HotelSingleRoomFee).ToString("#0.00")}";                                    else { if (__isSingle) hotelCost_day += @$"   单间:0.00"; }                                    if (item.Sum(x => x.HotelDoubleRoomFee) != 0) hotelCost_day += @$"   双人间:{item.Sum(x => x.HotelDoubleRoomFee).ToString("#0.00")}";                                    else { if (__isDouble) hotelCost_day += @$"   双人间:0.00"; }                                    if (item.Sum(x => x.HotelSuiteRoomFee) != 0) hotelCost_day += @$"   小套房/豪华套房:{item.Sum(x => x.HotelSuiteRoomFee).ToString("#0.00")}";                                    else { if (__isSuite) hotelCost_day += @$"   小套房/豪华套房:0.00"; }                                    if (item.Sum(x => x.HotelSuiteFee) != 0) hotelCost_day += @$"   套房:{item.Sum(x => x.HotelSuiteFee).ToString("#0.00")}";                                    else { if (__isOther) hotelCost_day += @$"   套房:0.00"; }                                    hotelCost_day += @$"</br>";                                }                                string hotelBreakfastStr = "", hotelGovernmentRentStr = "", hotelCityTaxStr = "";                                if (breakfastFee > 0) hotelBreakfastStr = $"酒店早餐: {breakfastFee.ToString("#0.00")} {breakfastCode} {breakfastName} 当时汇率 {breakfastData?.Rate.ToString("#0.0000")} <br/>是否由地接代付:{breakfastBool}<br/><br/>";                                if (governmentRentFee > 0) hotelGovernmentRentStr = $"地税: {governmentRentFee.ToString("#0.00")} {governmentRentCode} {governmentRentName} 当时汇率 {governmentRentData?.Rate.ToString("#0.0000")} <br/>是否由地接代付:{governmentRentBool}<br/><br/>";                                if (cityTaxFee > 0) hotelCityTaxStr = $"城市税: {cityTaxFee.ToString("#0.00")} {cityTaxCode} {cityTaxName} 当时汇率 {cityTaxData?.Rate.ToString("#0.0000")} <br/>是否由地接代付:{cityTaxBool}<br/>";                                string hotelCostTotalStr = "";// $"  成本合计:{hotelCsotTotal.ToString("#0.00")}<br/>";                                _detail.PriceMsgContent = $"{hotelCostTitalStr}{hotelCostStr}{hotelCostTotalStr}{hotelCost_day}<br/>" +                                                          $"<span style='font-weight:800;'>{hotelReservations.HotelName} [{hotelReservations.CheckInDate} - {hotelReservations.CheckOutDate}]</span><br/>" +                                                          $"信用卡金额:{_detail.WaitPay} ({hotelCurrncyName})<br/>" +                                                          $"房间说明: {hotelReservations.Remark} <br/>" +                                                          $"房间费用: {roomCode} {roomName} 当时汇率 {roomData?.Rate.ToString("#0.0000")}{roomFeeStr}  <br/>是否由地接代付:{roomBool}<br/><br/>" +                                                          $"{hotelBreakfastStr}" +                                                          $"{hotelGovernmentRentStr}" +                                                          $"{hotelCityTaxStr}";                                _detail.PriceNameContent = hotelReservations.HotelName;                            }                            break;                        case 79://车/导游地接                            Grp_CarTouristGuideGroundReservations touristGuideGroundReservations = _CarTouristGuideGroundReservations.Where(s => s.Id == entity.CId).FirstOrDefault();                            if (touristGuideGroundReservations != null)                            {                                if (!string.IsNullOrEmpty(touristGuideGroundReservations.BusName))                                {                                    _detail.BusName = touristGuideGroundReservations.BusName;                                }                                _detail.PriceNameContent = touristGuideGroundReservations.PriceName;                                //bool isInt = int.TryParse(touristGuideGroundReservations.Area, out int cityId);                                //if (isInt)                                //{                                //    var cityInfo = cityData.Find(it => it.Id == cityId);                                //    if (cityInfo != null)                                //    {                                //        string nameContent = $@"{cityInfo.Country}-{cityInfo.City}";                                //        var carFeeItem = carFeeItems.Find(it => it.Id == touristGuideGroundReservations.PriceType);                                //        if (carFeeItem != null)                                //        {                                //            nameContent += $@"({carFeeItem.Name})";                                //        }                                //        _detail.PriceNameContent = nameContent;                                //    }                                //}                                //else                                //{                                //    _detail.PriceNameContent = touristGuideGroundReservations.Area;                                //}                                var touristGuideGroundReservationsContents =                                    _CarTouristGuideGroundReservationsContent.Where(s => s.CTGGRId == touristGuideGroundReservations.Id && s.IsDel == 0 && s.Price != 0).ToList();                                string priceMsg = $"<span style='font-weight:800;'>{touristGuideGroundReservations.PriceName}({touristGuideGroundReservations.ServiceStartTime} - {touristGuideGroundReservations.ServiceEndTime})</span><br/>";                                foreach (var item in touristGuideGroundReservationsContents)                                {                                    string typeName = "Unknown";                                    string carCurrencyCode = "Unknown";                                    string carCurrencyName = "Unknown";                                    var carTypeData = carFeeTypeItems.Where(s => s.Id == item.SId && s.IsDel == 0).FirstOrDefault();                                    if (carTypeData != null) typeName = carTypeData.Name;                                    var currencyData = currencyItems.Where(s => s.Id == item.Currency && s.IsDel == 0).FirstOrDefault();                                    if (currencyData != null)                                    {                                        carCurrencyCode = currencyData.Name;                                        carCurrencyName = currencyData.Remark;                                    }                                    string opCostStr = string.Empty;                                    decimal opCostTypePrice = 0.00M;                                    #region 处理成本各项费用                                    var opDate = item.DatePrice?.ToString("yyyy-MM-dd");                                    var opCost = groupCostDetails.Where(x => x.Date.Equals(opDate)).ToList();                                    if (opCost.Count > 0)                                    {                                        switch (item.SId)                                        {                                            case 91: opCostTypePrice = opCost.Sum(x => x.CarFee); break; //91车费                                            //case 982: opCostTypePrice = opCost.Sum(x => x.CarFee); break; //982 车超时费 -- 暂无                                            case 92: opCostTypePrice = opCost.Sum(x => x.GuideFee); break; //92  导游费                                            case 94: opCostTypePrice = opCost.Sum(x => x.GuideScenicFee); break; //94  导游景点费                                            case 95: opCostTypePrice = opCost.Sum(x => x.GuideTipFee); break; //95  导游小费                                            case 983: opCostTypePrice = opCost.Sum(x => x.GuideMealFee); break; //983 导游餐补                                            case 984: opCostTypePrice = opCost.Sum(x => x.GuideMealFee); break; //984 导游房补                                            case 985: opCostTypePrice = opCost.Sum(x => x.GuideRoomFee); break; //985 导游交通                                            //case 96: opCostTypePrice = opCost.Sum(x => x.CarFee); break; //96  接送机费 -- 暂无                                            //case 97: opCostTypePrice = opCost.Sum(x => x.CarFee); break; //97  其他费用 -- 暂无                                            case 979: opCostTypePrice = opCost.Sum(x => x.DriverFee); break; //979 司机工资                                            case 980: opCostTypePrice = opCost.Sum(x => x.DriverTipFee); break; //980 司机小费                                            case 981: opCostTypePrice = opCost.Sum(x => x.DriverMealFee); break; //981 司机餐补                                            case 988: opCostTypePrice = opCost.Sum(x => x.ClientBreakfastFee); break; //988 客户早餐费用                                            case 93: opCostTypePrice = opCost.Sum(x => x.ClientDinnerFee); break; //93  客户午餐费用                                            case 989: opCostTypePrice = opCost.Sum(x => x.ClientLunchFee); break; //989 客户晚餐费用                                            case 990: opCostTypePrice = opCost.Sum(x => x.ScenicTicketFee); break; //990 景点门票费                                            case 991: opCostTypePrice = opCost.Sum(x => x.DrinkSnackFruitFee); break; //991 饮料/零食/水果                                            //case 91: opCostTypePrice = opCost.Sum(x => x.CarFee); break; //992 住补费用 -- 暂无                                            case 994: opCostTypePrice = opCost.Sum(x => x.TranslatorFee); break; //994 翻译费                                            case 1059: opCostTypePrice = opCost.Sum(x => x.GuideOverTimeFee); break; //1059    导游超时费用                                                                                                                     //case 91: opCostTypePrice = opCost.Sum(x => x.CarFee); break; //1070    尾款金额                                                                                                                     //case 91: opCostTypePrice = opCost.Sum(x => x.CarFee); break; //1071    其他额外费用                                                                                                                     //case 91: opCostTypePrice = opCost.Sum(x => x.CarFee); break; //1073    翻译超时费                                                                                                                     //case 91: opCostTypePrice = opCost.Sum(x => x.CarFee); break; //1074    早餐超支费用                                                                                                                     //case 91: opCostTypePrice = opCost.Sum(x => x.CarFee); break; //1075    午餐超支费用                                                                                                                     //case 91: opCostTypePrice = opCost.Sum(x => x.CarFee); break; //1076    晚餐超支费用                                        }                                        opCostStr = $"  /  成本:{opCostTypePrice.ToString("#0.00")} {_groupCurrencyCode}(汇率:{_groupRate.ToString("#0.0000")})";                                    }                                    #endregion                                    priceMsg += $"日期:{item.DatePrice?.ToString("yyyy-MM-dd") ?? "-"}<br/>" +                                                $"{typeName}:{item.Price.ToString("#0.00")} {carCurrencyCode}(汇率:{entity.DayRate.ToString("#0.0000")})   {opCostStr}<br/>" +                                                $"明细:{item.PriceContent ?? "-"}<br/>" +                                                $"备注:{item.Remark ?? "-"}<br/><br/>";                                }                                _detail.PriceMsgContent = priceMsg;                            }                            break;                        case 80: //签证                            Grp_VisaInfo visaInfo = _VisaInfos.Where(s => s.Id == entity.CId).FirstOrDefault();                            if (visaInfo != null)                            {                                string visaName = getClientNameStr1(clientNameList, visaInfo.VisaClient);                                _detail.PriceNameContent = visaInfo.VisaDescription ;                                _detail.PriceMsgContent = $"签证描述:{visaName}<br/> 备注:{visaInfo.Remark}";                            }                            break;                        case 81: //邀请/公务活动                            Grp_InvitationOfficialActivities _ioa = _InvitationOfficialActivities.Where(s => s.Id == entity.CId).FirstOrDefault();                            if (_ioa != null)                            {                                string inviteCurrName = "Unknown",     //邀请费用币种 Name                                       inviteCurrCode = "Unknown",     //邀请费用币种 Code                                       sendCurrName = "Unknown",       //快递费用币种 Name                                       sendCurrCode = "Unknown",       //快递费用币种 Code                                       eventsCurrName = "Unknown",     //公务活动费币种 Name                                       eventsCurrCode = "Unknown",     //公务活动费币种 Code                                       translateCurrName = "Unknown",  //公务翻译费 Name                                       translateCurrCode = "Unknown";  //公务翻译费 Code                                #region 处理费用币种                                var inviteCurrData = currencyItems.Where(s => s.Id == _ioa.InviteCurrency && s.IsDel == 0).FirstOrDefault();                                if (inviteCurrData != null)                                {                                    inviteCurrName = inviteCurrData.Remark;                                    inviteCurrCode = inviteCurrData.Name;                                }                                var sendCurrData = currencyItems.Where(s => s.Id == _ioa.SendCurrency && s.IsDel == 0).FirstOrDefault();                                if (sendCurrData != null)                                {                                    sendCurrName = sendCurrData.Remark;                                    sendCurrCode = sendCurrData.Name;                                }                                var eventsCurrData = currencyItems.Where(s => s.Id == _ioa.EventsCurrency && s.IsDel == 0).FirstOrDefault();                                if (eventsCurrData != null)                                {                                    eventsCurrName = eventsCurrData.Remark;                                    eventsCurrCode = eventsCurrData.Name;                                }                                var translateCurrData = currencyItems.Where(s => s.Id == _ioa.TranslateCurrency && s.IsDel == 0).FirstOrDefault();                                if (translateCurrData != null)                                {                                    translateCurrName = translateCurrData.Remark;                                    translateCurrCode = translateCurrData.Name;                                }                                #endregion                                _detail.PriceNameContent = _ioa.InviterArea;                                _detail.PriceMsgContent = $@"邀请费用:{_ioa.InviteCost.ToString("#0.00")} {inviteCurrCode}({inviteCurrName})<br/>" +                                                          $@"快递费用:{_ioa.SendCost.ToString("#0.00")} {sendCurrCode}({sendCurrName})<br/>" +                                                          $@"公务活动费:{_ioa.EventsCost.ToString("#0.00")} {eventsCurrCode}({eventsCurrName})<br/>" +                                                          $@"公务翻译费:{_ioa.TranslateCost.ToString("#0.00")} {translateCurrCode}({translateCurrName})<br/>" +                                                          $@"备注:" + _ioa.Remark + "<br/>";                            }                            break;                        case 82: //团组客户保险                            Grp_Customers customers = _Customers.Where(s => s.Id == entity.CId && s.IsDel == 0).FirstOrDefault();                            if (customers != null)                            {                                _detail.PriceNameContent = getClientNameStr(clientNameList, customers.ClientName);                                _detail.PriceMsgContent = "备注:" + customers.Remark + "<br/>";                            }                            break;                        case 85: //机票预订                            Grp_AirTicketReservations jpRes = _AirTicketReservations.Where(s => s.Id == entity.CId).FirstOrDefault();                            if (jpRes != null)                            {                                string FlightsDescription = jpRes.FlightsDescription;                                string PriceDescription = jpRes.PriceDescription;                                _detail.PriceMsgContent = "航班号:" + jpRes.FlightsCode + "<br/>城市A-B:" + jpRes.FlightsCity + "<br/>航班描述:" + FlightsDescription.Replace("\r\n", "<br />") + "<br/>" + "价格描述:" + PriceDescription;                                _detail.PriceNameContent = "(" + jpRes.FlightsCode + ")";                            }                            break;                        case 98://其他款项                            Grp_DecreasePayments gdpRes = _DecreasePayments.Where(s => s.Id == entity.CId).FirstOrDefault();                            if (gdpRes != null)                            {                                _detail.PriceMsgContent = "备注:" + gdpRes.Remark;                                _detail.PriceNameContent = gdpRes.PriceName;                            }                            break;                        case 285://收款退还                             Fin_PaymentRefundAndOtherMoney refundAndOtherMoney = _PaymentRefundAndOtherMoneys.Where(s => s.Id == entity.CId).FirstOrDefault();                            if (refundAndOtherMoney != null)                            {                                _detail.PriceMsgContent = "备注:" + refundAndOtherMoney.Remark;                                _detail.PriceNameContent = refundAndOtherMoney.PriceName;                            }                            break;                        case 751://酒店早餐                            break;                        case 1015://超支费用                            Fin_GroupExtraCost groupExtraCost = _GroupExtraCosts.Where(s => s.Id == entity.CId).FirstOrDefault();                            if (groupExtraCost != null)                            {                                _detail.PriceNameContent = groupExtraCost.PriceName;                                _detail.PriceMsgContent = "备注:" + groupExtraCost.Remark;                            }                            break;                        default:                            break;                    }                    /*                     * 申请人                     */                    string operatorName = " - ";                    Sys_Users _opUser = userItems.Where(s => s.Id == entity.CreateUserId).FirstOrDefault();                    if (_opUser != null)                    {                        operatorName = _opUser.CnName;                    }                    _detail.OperatorName = operatorName;                    /*                    * 审核人                    */                    string auditOperatorName = "Unknown";                    if (entity.AuditGMOperate == 0)                        auditOperatorName = " - ";                    else if (entity.AuditGMOperate == 4)                        auditOperatorName = "自动审核";                    else                    {                        Sys_Users _adUser = userItems.Where(s => s.Id == entity.AuditGMOperate).FirstOrDefault();                        if (_adUser != null)                        {                            auditOperatorName = _adUser.CnName;                        }                    }                    _detail.AuditOperatorName = auditOperatorName;                    /*                     * 超预算比例                     */                    string overBudgetStr = "";                    if (entity.ExceedBudget == -1)                        overBudgetStr = sdPriceName.Name + "尚无预算";                    else if (entity.ExceedBudget == 0)                    {                        if (entity.CTable == 76 || entity.CTable == 79)                        {                            if (entity.IsAuditGM == 3) overBudgetStr = "未超预算";                            else overBudgetStr = "超预算";                        }                        else                        {                            overBudgetStr = "未超预算";                        }                    }                    else                        overBudgetStr = entity.ExceedBudget.ToString("P");                    _detail.OverBudget = overBudgetStr;                    /*                     * 费用总计                     */                    ccpCurrencyPrices.Add(new CreditCardPaymentCurrencyPriceItem()                    {                        CurrencyId = entity.PaymentCurrency,                        CurrencyName = PaymentCurrency_WaitPay,                        AmountPayable = entity.PayMoney,                        ThisPayment = CurrPayStr,                        BalancePayment = BalanceStr,                        AuditedFunds = CurrPayStr                    });                    _detail.IsAuditGM = entity.IsAuditGM;                    detailList.Add(_detail);                }                #endregion                _view.DetailList = new List<Grp_CreditCardPaymentDetailView>(detailList);                /*                 * 下方描述处理                 */                List<CreditCardPaymentCurrencyPriceItem> nonDuplicat = ccpCurrencyPrices.Where((x, i) => ccpCurrencyPrices.FindIndex(z => z.CurrencyId == x.CurrencyId) == i).ToList();//Lambda表达式去重                 CreditCardPaymentCurrencyPriceItem ccpCurrencyPrice = nonDuplicat.Where(it => it.CurrencyId == 836).FirstOrDefault();                if (ccpCurrencyPrice != null)                {                    int CNYIndex = nonDuplicat.IndexOf(ccpCurrencyPrice);                    nonDuplicat.MoveItemAtIndexToFront(CNYIndex);                }                else                {                    nonDuplicat.OrderBy(it => it.CurrencyId).ToList();                }                string amountPayableStr = string.Format(@"应付款总金额: ");                string thisPaymentStr = string.Format(@"此次付款总金额: ");                string balancePaymentStr = string.Format(@"目前剩余尾款总金额: ");                string auditedFundsStr = string.Format(@"已审费用总额: ");                foreach (var item in nonDuplicat)                {                    var strs = ccpCurrencyPrices.Where(it => it.CurrencyId == item.CurrencyId).ToList();                    if (strs.Count > 0)                    {                        decimal amountPayable = strs.Sum(it => it.AmountPayable);                        decimal balancePayment = strs.Sum(it => it.BalancePayment);                        amountPayableStr += string.Format(@"{0}{1} |", amountPayable.ToString("#0.00"), item.CurrencyName);                        //单独处理此次付款金额                        if (item.CurrencyId == 836) //人民币                        {                            decimal thisPayment = ccpCurrencyPrices.Sum(it => it.ThisPayment);                            thisPaymentStr += string.Format(@"{0}{1} |", thisPayment.ToString("#0.00"), item.CurrencyName);                        }                        else                        {                            thisPaymentStr += string.Format(@"{0}{1} |", "0.00", item.CurrencyName);                        }                        balancePaymentStr += string.Format(@"{0}{1} |", balancePayment.ToString("#0.00"), item.CurrencyName);                        //单独处理已审核费用                        if (item.CurrencyId == 836) //人民币                        {                            decimal auditedFunds = ccpCurrencyPrices.Sum(it => it.AuditedFunds);                            auditedFundsStr += string.Format(@"{0}{1} |", auditedFunds.ToString("#0.00"), item.CurrencyName);                        }                        else                        {                            auditedFundsStr += string.Format(@"{0}{1} |", "0.00", item.CurrencyName);                        }                    }                }                _view.TotalStr1 = amountPayableStr.Substring(0, amountPayableStr.Length - 1);                _view.TotalStr2 = thisPaymentStr.Substring(0, thisPaymentStr.Length - 1);                _view.TotalStr3 = balancePaymentStr.Substring(0, balancePaymentStr.Length - 1);                _view.TotalStr4 = auditedFundsStr.Substring(0, auditedFundsStr.Length - 1);                var _view1 = new                {                    PageFuncAuth = pageFunAuthView,                    Data = _view                };                return Ok(JsonView(_view1));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 费用审核         /// 修改团组费用审核状态        /// </summary>        /// <param name="_dto">参数Json字符串</param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostAuditGrpCreditCardPayment(Edit_GrpCreditCardPaymentDto _dto)        {            #region  参数验证            if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));            if (_dto.PageId < 1) return Ok(JsonView(false, "页面Id为空"));            #endregion            #region 页面操作权限验证            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);            if (pageFunAuthView.AuditAuth == 0) return Ok(JsonView(false, "您没有审核权限"));            #endregion            List<string> idList = _dto.CreditIdStr.Split(',').ToList();            Grp_CreditCardPayment _detail = _mapper.Map<Grp_CreditCardPayment>(_dto);            DateTime dtNow = DateTime.Now;            _groupRepository.BeginTran();            int rst = 0;            var creditDatas = _grpScheduleRep._sqlSugar.Queryable<Grp_CreditCardPayment>().Where(it => it.IsDel == 0 && idList.Contains(it.Id.ToString())).ToList();            var creditTypeDatas = _grpScheduleRep._sqlSugar.Queryable<Sys_SetData>().Where(it => it.IsDel == 0 && it.STid == 16).ToList();            var creditCurrencyDatas = _grpScheduleRep._sqlSugar.Queryable<Sys_SetData>().Where(it => it.IsDel == 0 && it.STid == 66).ToList();            var groupDatas = _grpScheduleRep._sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0).ToList();            List<dynamic> msgDatas = new List<dynamic>();            Dictionary<int, int> dic_ccp_user = new Dictionary<int, int>() { };            foreach (var item in idList)            {                int CreditId = int.Parse(item);                var result = await _grpScheduleRep._sqlSugar.Updateable<Grp_CreditCardPayment>()                .SetColumns(it => it.IsAuditGM == _dto.AuditCode)                .SetColumns(it => it.AuditGMOperate == _dto.UserId)                .SetColumns(it => it.AuditGMDate == dtNow.ToString("yyyy-MM-dd HH:mm:ss"))                .Where(s => s.Id == CreditId)                .ExecuteCommandAsync();                if (result < 1)                {                    rst = -1;                    _groupRepository.RollbackTran();                    return Ok(JsonView(false, "操作失败并回滚!"));                }                var creditData = creditDatas.Where(it => it.Id == CreditId).FirstOrDefault();                if (creditData != null)                {                    #region 应用通知配置                    try                    {                        dic_ccp_user.Add(creditData.Id, creditData.CreateUserId);                    }                    catch (Exception ex)                    {                    }                    #endregion                    string auditStr = _dto.AuditCode == 1 ? "已通过" : _dto.AuditCode == 2 ? "未通过" : "未审核";                    string groupNameStr = string.Empty;                    var groupData = groupDatas.Where(it => it.Id == creditData.DIId).FirstOrDefault();                    if (groupData != null) groupNameStr = groupData.TeamName;                    string creditTypeStr = string.Empty;                    var creditTypeData = creditTypeDatas.Where(it => it.Id == creditData.CTable).FirstOrDefault();                    if (creditTypeData != null) creditTypeStr = creditTypeData.Name;                    string creditCurrency = string.Empty;                    var creditCurrencyData = creditCurrencyDatas.Where(it => it.Id == creditData.PaymentCurrency).FirstOrDefault();                    if (creditCurrencyData != null) creditCurrency = creditCurrencyData.Name;                    if (creditCurrency.Equals("CNY"))                    {                        creditData.DayRate = 1.0000M;                    }                    if (creditData.PayPercentage == 0.00M)                    {                        creditData.PayPercentage = 100M;                    }                    decimal CNYPrice = (creditData.PayMoney * (creditData.PayPercentage / 100)) * creditData.DayRate;                    string msgTitle = $"[{groupNameStr}({creditTypeStr})]的费用申请";                    string msgContent = "";                    if (creditCurrency.Equals("CNY"))                    {                        msgContent = $"[{groupNameStr}({creditTypeStr})]费用申请(金额:{CNYPrice.ToString("0.00")} CNY) {auditStr}!";                    }                    else                    {                        msgContent = $"[{groupNameStr}({creditTypeStr})]费用申请(金额:{CNYPrice.ToString("0.00")} CNY({creditData.PayMoney.ToString("0.00")} {creditCurrency})) {auditStr}!";                    }                    msgDatas.Add(new { DiId = creditData.DIId, UserId = creditData.CreateUserId, MsgTitle = msgTitle, MsgContent = msgContent });                }            }            if (rst == 0)            {                _groupRepository.CommitTran();                foreach (var item in msgDatas)                {                    //发送消息                    GeneralMethod.MessageIssueAndNotification(MessageTypeEnum.GroupExpenseAudit, item.MsgTitle, item.MsgContent, new List<int>() { item.UserId }, item.DiId);                }                #region 应用推送                try                {                    foreach (var ccpId in dic_ccp_user.Keys)                    {                        List<string> templist = new List<string>() { dic_ccp_user[ccpId].ToString() };                        await AppNoticeLibrary.SendUserMsg_GroupStatus_AuditFee(ccpId, templist, QiyeWeChatEnum.CaiWuChat);                    }                }                catch (Exception)                {                }                #endregion                return Ok(JsonView(true, "操作成功!"));            }            return Ok(JsonView(false, "操作失败!"));        }        #endregion        #region 机票费用录入        /// <summary>        /// 机票录入当前登录人可操作团组        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> AirTicketResSelect(AirTicketResDto dto)        {            try            {                Result groupData = await _airTicketResRep.AirTicketResSelect(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        /// <summary>        /// 机票费用录入列表        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> AirTicketResList(AirTicketResDto dto)        {            try            {                Result groupData = await _airTicketResRep.AirTicketResList(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));                throw;            }        }        /// <summary>        /// 根据id查询费用录入信息        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> AirTicketResById(AirTicketResByIdDto dto)        {            try            {                Result groupData = await _airTicketResRep.AirTicketResById(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        /// <summary>        /// 机票费用录入操作(Status:1.新增,2.修改)        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> OpAirTicketRes(AirTicketResOpDto dto)        {            try            {                Result groupData = await _airTicketResRep.OpAirTicketRes(dto, _setDataRep.PostCurrencyByDiid);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                #region 应用推送                try                {                    int ccpId = groupData.Data.GetType().GetProperty("ccpId").GetValue(groupData.Data, null);                    int sign = groupData.Data.GetType().GetProperty("sign").GetValue(groupData.Data, null);                    await AppNoticeLibrary.SendChatMsg_GroupStatus_ApplyFee(ccpId, sign, QiyeWeChatEnum.GuoJiaoLeaderChat);                }                catch (Exception ex)                {                }                #endregion                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        /// <summary>        /// 根据舱位类型查询接团客户名单信息        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> tankType(AirTicketResByIdDto dto)        {            try            {                List<Crm_GroupCustomer> crm_Groups = _sqlSugar.Queryable<Crm_GroupCustomer>().Where(a => a.IsDel == 0 && a.AirType == dto.Id).ToList();                if (crm_Groups.Count != 0)                {                    List<dynamic> Customer = new List<dynamic>();                    foreach (var item in crm_Groups)                    {                        var data = new                        {                            Id = item.Id,                            Pinyin = item.Pinyin,                            Name = item.LastName + item.FirstName                        };                        Customer.Add(data);                    }                    return Ok(JsonView(true, "查询成功!", Customer));                }                return Ok(JsonView(true, "暂无数据", crm_Groups));            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        /// <summary>        /// 根据团号获取客户信息        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public IActionResult QueryClientInfoByDIID(QueryClientInfoByDIIDDto dto)        {            var jw = JsonView(false);            if (dto.DIID < 1)            {                jw.Msg += "请输入正确的diid";                return Ok(jw);            }            var arr = getSimplClientList(dto.DIID);            jw = JsonView(true, "获取成功!", arr);            return Ok(jw);        }        private List<SimplClientInfo> getSimplClientList(int diId)        {            string sql = string.Format("select b.Id,b.Pinyin,b.lastName,b.firstName,b.phone from  Grp_TourClientList a, Crm_DeleClient b where a.clientid = b.id and a.isdel = 0 and a.diid = {0}", diId);            List<SimplClientInfo> arr = _sqlSugar.SqlQueryable<SimplClientInfo>(sql).ToList();            return arr;        }        private string getClientNameStr(List<SimplClientInfo> list, string origin)        {            string result = origin;            if (Regex.Match(origin, @"\d+,?").Value.Length > 0)            {                string[] temparr = origin.Split(',');                string fistrStr = temparr[0];                int count = temparr.Count();                int tempId;                bool success = int.TryParse(fistrStr, out tempId);                if (success)                {                    SimplClientInfo tempInfo = list.FirstOrDefault(s => s.Id == tempId);                    if (tempInfo != null)                    {                        if (count > 1)                        {                            result = string.Format(@"{0}{1}等{2}人", tempInfo.LastName, tempInfo.FirstName, count);                        }                        else                        {                            result = string.Format(@"{0}{1}", tempInfo.LastName, tempInfo.FirstName);                        }                    }                }            }            return result;        }        private string getClientNameStr1(List<SimplClientInfo> list, string origin)        {            string result = origin;            if (Regex.Match(origin, @"\d+,?").Value.Length > 0)            {                string[] temparr = origin.Split(',');                result = "";                foreach (var item in temparr)                {                    int tempId;                    bool success = int.TryParse(item, out tempId);                    if (success)                    {                        SimplClientInfo tempInfo = list.FirstOrDefault(s => s.Id == tempId);                        if (tempInfo != null)                        {                            result += string.Format(@"{0}{1}、", tempInfo.LastName, tempInfo.FirstName);                        }                    }                }            }            if (result.Length > 0) result = result.Substring(0, result.Length - 1);            return result;        }        /// <summary>        /// 机票费用录入,删除        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> DelAirTicketRes(DelBaseDto dto)        {            try            {                var res = await _airTicketResRep.SoftDeleteByIdAsync<Grp_AirTicketReservations>(dto.Id.ToString(), dto.DeleteUserId);                if (res)                {                    var result = await _sqlSugar.Updateable<Grp_CreditCardPayment>().Where(a => a.CId == dto.Id && a.CTable == 85).SetColumns(a => new Grp_CreditCardPayment()                    {                        IsDel = 1,                        DeleteUserId = dto.DeleteUserId,                        DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")                    }).ExecuteCommandAsync();                    return Ok(JsonView(true, "删除成功!"));                }                return Ok(JsonView(false, "删除失败!"));            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        /// <summary>        /// 导出机票录入报表        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> DeriveAirTicketRes(AirTicketResDto dto)        {            try            {                Result groupData = await _airTicketResRep.DeriveAirTicketRes(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(StatusCodes.Status400BadRequest, groupData.Msg, ""));                }                else                {                    List<AirTicketReservationsPayView> AirTicketReservations = groupData.Data.GetType().GetProperty("AirTicketRes").GetValue(groupData.Data);                    if (AirTicketReservations.Count != 0)                    {                        Grp_DelegationInfo DelegationInfo = groupData.Data.GetType().GetProperty("Delegation").GetValue(groupData.Data);                        Sys_Users _Users = groupData.Data.GetType().GetProperty("Users").GetValue(groupData.Data);                        string diCode = DelegationInfo != null ? DelegationInfo.TourCode : "XXX";                        string diName = DelegationInfo != null ? DelegationInfo.TeamName : "XXX";                        WorkbookDesigner designer = new WorkbookDesigner();                        designer.Workbook = new Workbook(AppSettingsHelper.Get("ExcelBasePath") + "Template/机票预订费用报表模板.xlsx");                        decimal countCost = 0;                        foreach (var item in AirTicketReservations)                        {                            #region 处理客人姓名                            string clientNames = _tourClientListRep._ResolveCustomerName(item.ClientName);                            item.ClientName = clientNames;                            #endregion                            if (item.BankType == "其他")                            {                                item.BankNo = "--";                            }                            else                            {                                if (!string.IsNullOrEmpty(item.BankType))                                {                                    item.BankNo = item.BankType + ":" + item.BankNo?.Substring(0, 3);                                }                            }                            item.PrePrice = System.Decimal.Round(item.PrePrice, 2);                            item.Price = System.Decimal.Round(item.Price, 2);                            countCost += Convert.ToDecimal(item.Price);                        }                        designer.SetDataSource("Export", AirTicketReservations);                        designer.SetDataSource("ExportDiCode", diCode);                        designer.SetDataSource("ExportDiName", diName);                        designer.SetDataSource("ExportOpUserName", _Users.CnName);                        designer.SetDataSource("ExportCountCost", countCost + "(" + AirTicketReservations[0].CurrencyStr);                        designer.Process();                        string fileName = ("AirfareStatement/" + diName + "机票费用报表" + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx").Replace(":", "");                        designer.Workbook.Save(AppSettingsHelper.Get("ExcelBasePath") + fileName);                        string rst = AppSettingsHelper.Get("ExcelBaseUrl") + AppSettingsHelper.Get("ExcelFtpPath") + fileName;                        return Ok(JsonView(true, "成功", url = rst));                    }                    else                    {                        return Ok(JsonView(StatusCodes.Status400BadRequest, "暂无数据!", ""));                    }                }            }            catch (Exception ex)            {                return Ok(JsonView(StatusCodes.Status400BadRequest, ex.Message, ""));                throw;            }        }        Dictionary<string, string> transDic = new Dictionary<string, string>();        /// <summary>        /// 行程单导出        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> ItineraryAirTicketRes(ItineraryAirTicketResDto dto)        {            try            {                Result groupData = await _airTicketResRep.ItineraryAirTicketRes(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(StatusCodes.Status400BadRequest, groupData.Msg, ""));                }                else                {                    List<AirTicketReservationsView> _AirTicketReservations = groupData.Data;                    if (dto.Language == "CN")                    {                        Document doc = new Document(AppSettingsHelper.Get("WordBasePath") + "Template/电子客票行程单模板_CN.docx");                        DocumentBuilder builder = new DocumentBuilder(doc);                        int tableIndex = 0;//表格索引                                           //得到文档中的第一个表格                        Table table = (Table)doc.GetChild(NodeType.Table, tableIndex, true);                        foreach (var item in _AirTicketReservations)                        {                            #region 处理固定数据                            string[] FlightsCode = item.FlightsCode.Split('/');                            if (FlightsCode.Length != 0)                            {                                Res_AirCompany _AirCompany = _sqlSugar.Queryable<Res_AirCompany>().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2));                                if (_AirCompany != null)                                {                                    table.Range.Bookmarks["AirlineCompany"].Text = _AirCompany.CnName;                                }                                else                                {                                    table.Range.Bookmarks["AirlineCompany"].Text = "--";                                }                            }                            table.Range.Bookmarks["AirlineRecordCode"].Text = "--";                            table.Range.Bookmarks["ReservationRecordCode"].Text = "--";                            string[] nameArray = Regex.Split(item.ClientName, "\\d+\\.", RegexOptions.IgnoreCase);                            nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray();                            string name = "";                            foreach (string clientName in nameArray)                            {                                if (!name.Contains(clientName))                                {                                    name += clientName + ",";                                }                            }                            if (!string.IsNullOrWhiteSpace(name))                            {                                table.Range.Bookmarks["ClientName"].Text = name.Substring(0, name.Length - 1);                            }                            else                            {                                table.Range.Bookmarks["ClientName"].Text = "--";                            }                            table.Range.Bookmarks["TicketNumber"].Text = "--";                            table.Range.Bookmarks["IdentificationCode"].Text = "--";                            table.Range.Bookmarks["JointTicket"].Text = "--";                            table.Range.Bookmarks["TimeIssue"].Text = "--";                            table.Range.Bookmarks["DrawingAgent"].Text = "--";                            table.Range.Bookmarks["NavigationCode"].Text = "--";                            table.Range.Bookmarks["AgentsAddress"].Text = "--";                            table.Range.Bookmarks["AgentPhone"].Text = "--";                            table.Range.Bookmarks["AgentFacsimile"].Text = "--";                            #endregion                            #region 循环数据处理                            List<AirInfo> airs = new List<AirInfo>();                            string[] DayArray = Regex.Split(item.FlightsDescription, "\\d+\\.", RegexOptions.IgnoreCase);                            DayArray = DayArray.Where(s => s != " " && s != "" && !string.IsNullOrEmpty(s)).ToArray();                            for (int i = 0; i < FlightsCode.Length; i++)                            {                                AirInfo air = new AirInfo();                                string[] tempstr = DayArray[i]                                               .Replace("\r\n", string.Empty)                                               .Replace("\\r\\n", string.Empty)                                               .TrimStart().TrimEnd()                                               .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);                                Res_ThreeCode star_Three = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == tempstr[3].Substring(0, 3));                                string starCity = "";                                if (star_Three != null)                                {                                    starCity = star_Three.AirPort;                                }                                Res_ThreeCode End_Three = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == tempstr[3].Substring(3, 3));                                string EndCity = "";                                if (End_Three != null)                                {                                    EndCity = End_Three.AirPort;                                }                                air.Destination = starCity + "/" + EndCity;                                air.Flight = FlightsCode[i];                                air.SeatingClass = item.CTypeName;                                string dateTime = tempstr[2];                                string DateTemp = dateTime.Substring(2, 5).ToUpper();                                air.FlightDate = DateTemp;                                air.DepartureTime = tempstr[5];                                air.LandingTime = tempstr[6];                                air.ValidityPeriod = DateTemp + "/" + DateTemp;                                air.TicketStatus = "--";                                air.Luggage = "--";                                air.DepartureTerminal = "--";                                air.LandingTerminal = "--";                                airs.Add(air);                            }                            int row = 13;                            for (int i = 0; i < airs.Count; i++)                            {                                if (airs.Count > 2)                                {                                    for (int j = 0; j < airs.Count - 2; j++)                                    {                                        var CopyRow = table.Rows[12].Clone(true);                                        table.Rows.Add(CopyRow);                                    }                                }                                PropertyInfo[] properties = airs[i].GetType().GetProperties();                                int index = 0;                                foreach (PropertyInfo property in properties)                                {                                    string value = property.GetValue(airs[i]).ToString();                                    Cell ishcel0 = table.Rows[row].Cells[index];                                    Paragraph p = new Paragraph(doc);                                    string s = value;                                    p.AppendChild(new Run(doc, s));                                    p.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐                                    ishcel0.AppendChild(p);                                    ishcel0.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;//垂直居中对齐                                    index++;                                }                                row++;                            }                            #endregion                            Paragraph lastParagraph = new Paragraph(doc);                            //第一个表格末尾加段落                            table.ParentNode.InsertAfter(lastParagraph, table);                            //复制第一个表格                            Table cloneTable = (Table)table.Clone(true);                            //在文档末尾段落后面加入复制的表格                            table.ParentNode.InsertAfter(cloneTable, lastParagraph);                            if (item != _AirTicketReservations[_AirTicketReservations.Count - 1])                            {                                int rownewsIndex = 13;                                for (int i = 0; i < 2; i++)                                {                                    var CopyRow = table.Rows[12].Clone(true);                                    table.Rows.RemoveAt(13);                                    table.Rows.Add(CopyRow);                                    rownewsIndex++;                                }                            }                            else                            {                                table.Rows.RemoveAt(12);                            }                            cloneTable.Rows.RemoveAt(12);                        }                        if (_AirTicketReservations.Count != 0)                        {                            string[] FlightsCode = _AirTicketReservations[0].FlightsCode.Split('/');                            if (FlightsCode.Length != 0)                            {                                Res_AirCompany _AirCompany = _sqlSugar.Queryable<Res_AirCompany>().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2));                                if (_AirCompany != null)                                {                                    table.Range.Bookmarks["AirlineCompany"].Text = _AirCompany.CnName;                                }                                else                                {                                    table.Range.Bookmarks["AirlineCompany"].Text = "--";                                }                            }                            table.Range.Bookmarks["AirlineRecordCode"].Text = "--";                            table.Range.Bookmarks["ReservationRecordCode"].Text = "--";                            string[] nameArray = Regex.Split(_AirTicketReservations[0].ClientName, "\\d+\\.", RegexOptions.IgnoreCase);                            nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray();                            string name = "";                            foreach (string clientName in nameArray)                            {                                if (!name.Contains(clientName))                                {                                    name += clientName + ",";                                }                            }                            if (!string.IsNullOrWhiteSpace(name))                            {                                table.Range.Bookmarks["ClientName"].Text = name.Substring(0, name.Length - 1);                            }                            else                            {                                table.Range.Bookmarks["ClientName"].Text = "--";                            }                            table.Range.Bookmarks["TicketNumber"].Text = "--";                            table.Range.Bookmarks["IdentificationCode"].Text = "--";                            table.Range.Bookmarks["JointTicket"].Text = "--";                            table.Range.Bookmarks["TimeIssue"].Text = "--";                            table.Range.Bookmarks["DrawingAgent"].Text = "--";                            table.Range.Bookmarks["NavigationCode"].Text = "--";                            table.Range.Bookmarks["AgentsAddress"].Text = "--";                            table.Range.Bookmarks["AgentPhone"].Text = "--";                            table.Range.Bookmarks["AgentFacsimile"].Text = "--";                        }                        doc.MailMerge.Execute(new[] { "PageCount" }, new object[] { doc.PageCount });                        //保存合并后的文档                        string fileName = "AirItinerary/电子客票中文行程单_CN.docx";                        string rst = AppSettingsHelper.Get("WordBaseUrl") + AppSettingsHelper.Get("WordFtpPath") + fileName;                        doc.Save(AppSettingsHelper.Get("WordBasePath") + fileName);                        return Ok(JsonView(true, "成功!", rst));                    }                    else                    {                        Document doc = new Document(AppSettingsHelper.Get("WordBasePath") + "Template/电子客票行程单模板_EN.docx");                        DocumentBuilder builder = new DocumentBuilder(doc);                        int tableIndex = 0;//表格索引                                           //得到文档中的第一个表格                        Table table = (Table)doc.GetChild(NodeType.Table, tableIndex, true);                        List<string> texts = new List<string>();                        foreach (var item in _AirTicketReservations)                        {                            string[] FlightsCode = item.FlightsCode.Split('/');                            if (FlightsCode.Length != 0)                            {                                Res_AirCompany _AirCompany = _sqlSugar.Queryable<Res_AirCompany>().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2));                                if (_AirCompany != null)                                {                                    if (!transDic.ContainsKey(_AirCompany.CnName))                                    {                                        transDic.Add(_AirCompany.CnName, _AirCompany.EnName);                                    }                                }                                else                                {                                    if (!transDic.ContainsKey("--"))                                    {                                        transDic.Add("--", "--");                                    }                                }                            }                            string[] nameArray = Regex.Split(item.ClientName, "\\d+\\.", RegexOptions.IgnoreCase);                            nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray();                            string name = "";                            foreach (string clientName in nameArray)                            {                                name += clientName + ",";                            }                            if (!texts.Contains(name))                            {                                texts.Add(name);                            }                            List<AirInfo> airs = new List<AirInfo>();                            string[] DayArray = Regex.Split(item.FlightsDescription, "\\d+\\.", RegexOptions.IgnoreCase);                            DayArray = DayArray.Where(s => s != " " && s != "" && !string.IsNullOrEmpty(s)).ToArray();                            for (int i = 0; i < FlightsCode.Length; i++)                            {                                AirInfo air = new AirInfo();                                string[] tempstr = DayArray[i]                                               .Replace("\r\n", string.Empty)                                               .Replace("\\r\\n", string.Empty)                                               .TrimStart().TrimEnd()                                               .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);                                Res_ThreeCode star_Three = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == tempstr[3].Substring(0, 3));                                if (star_Three != null)                                {                                    if (!transDic.ContainsKey(star_Three.AirPort))                                    {                                        transDic.Add(star_Three.AirPort, star_Three.AirPort_En);                                    }                                }                                Res_ThreeCode End_Three = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == tempstr[3].Substring(3, 3));                                if (End_Three != null)                                {                                    if (!transDic.ContainsKey(End_Three.AirPort))                                    {                                        transDic.Add(End_Three.AirPort, End_Three.AirPort_En);                                    }                                }                                if (!texts.Contains(item.CTypeName))                                {                                    texts.Add(item.CTypeName);                                }                            }                        }                        List<TranslateResult> transData = _airTicketResRep.ReTransBatch(texts, "en");                        if (transData.Count > 0)                        {                            foreach (TranslateResult item in transData)                            {                                if (!transDic.ContainsKey(item.Query))                                {                                    transDic.Add(item.Query, item.Translation);                                }                            }                        }                        foreach (var item in _AirTicketReservations)                        {                            #region 处理固定数据                            string[] FlightsCode = item.FlightsCode.Split('/');                            if (FlightsCode.Length != 0)                            {                                Res_AirCompany _AirCompany = _sqlSugar.Queryable<Res_AirCompany>().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2));                                if (_AirCompany != null)                                {                                    string str = "--";                                    string translateResult = transDic.Where(s => s.Key == _AirCompany.CnName).FirstOrDefault().Value;                                    if (!string.IsNullOrEmpty(translateResult))                                    {                                        str = translateResult;                                        str = _airTicketResRep.Processing(str);                                    }                                    table.Range.Bookmarks["AirlineCompany"].Text = str;                                }                                else                                {                                    table.Range.Bookmarks["AirlineCompany"].Text = "--";                                }                            }                            table.Range.Bookmarks["AirlineRecordCode"].Text = "--";                            table.Range.Bookmarks["ReservationRecordCode"].Text = "--";                            string[] nameArray = Regex.Split(item.ClientName, "\\d+\\.", RegexOptions.IgnoreCase);                            nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray();                            string names = "";                            foreach (string clientName in nameArray)                            {                                names += clientName + ",";                            }                            if (!string.IsNullOrWhiteSpace(names))                            {                                string str = "--";                                string translateResult = transDic.Where(s => s.Key == names).FirstOrDefault().Value;                                if (!string.IsNullOrEmpty(translateResult))                                {                                    str = translateResult;                                    str = _airTicketResRep.Processing(str);                                }                                table.Range.Bookmarks["ClientName"].Text = str;                            }                            else                            {                                table.Range.Bookmarks["ClientName"].Text = "--";                            }                            table.Range.Bookmarks["TicketNumber"].Text = "--";                            table.Range.Bookmarks["IdentificationCode"].Text = "--";                            table.Range.Bookmarks["JointTicket"].Text = "--";                            table.Range.Bookmarks["TimeIssue"].Text = "--";                            table.Range.Bookmarks["DrawingAgent"].Text = "--";                            table.Range.Bookmarks["NavigationCode"].Text = "--";                            table.Range.Bookmarks["AgentsAddress"].Text = "--";                            table.Range.Bookmarks["AgentPhone"].Text = "--";                            table.Range.Bookmarks["AgentFacsimile"].Text = "--";                            #endregion                            #region 循环数据处理                            List<AirInfo> airs = new List<AirInfo>();                            string[] DayArray = Regex.Split(item.FlightsDescription, "\\d+\\.", RegexOptions.IgnoreCase);                            DayArray = DayArray.Where(s => s != " " && s != "" && !string.IsNullOrEmpty(s)).ToArray();                            for (int i = 0; i < FlightsCode.Length; i++)                            {                                AirInfo air = new AirInfo();                                string[] tempstr = DayArray[i]                                               .Replace("\r\n", string.Empty)                                               .Replace("\\r\\n", string.Empty)                                               .TrimStart().TrimEnd()                                               .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);                                Res_ThreeCode star_Three = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == tempstr[3].Substring(0, 3));                                string starCity = "";                                if (star_Three != null)                                {                                    string str2 = "--";                                    string translateResult2 = transDic.Where(s => s.Key == star_Three.AirPort).FirstOrDefault().Value;                                    if (!string.IsNullOrEmpty(translateResult2))                                    {                                        str2 = translateResult2;                                        str2 = _airTicketResRep.Processing(str2);                                    }                                    starCity = str2;                                }                                Res_ThreeCode End_Three = _sqlSugar.Queryable<Res_ThreeCode>().First(a => a.Three == tempstr[3].Substring(3, 3));                                string EndCity = "";                                if (End_Three != null)                                {                                    string str1 = "--";                                    string translateResult1 = transDic.Where(s => s.Key == End_Three.AirPort).FirstOrDefault().Value;                                    if (!string.IsNullOrEmpty(translateResult1))                                    {                                        str1 = translateResult1;                                        str1 = _airTicketResRep.Processing(str1);                                    }                                    EndCity = str1;                                }                                air.Destination = starCity + "/" + EndCity;                                air.Flight = FlightsCode[i];                                string str = "--";                                string translateResult = transDic.Where(s => s.Key == item.CTypeName).FirstOrDefault().Value;                                if (!string.IsNullOrEmpty(translateResult))                                {                                    str = translateResult;                                    str = _airTicketResRep.Processing(str);                                }                                air.SeatingClass = str;                                string dateTime = tempstr[2];                                string DateTemp = dateTime.Substring(2, 5).ToUpper();                                air.FlightDate = DateTemp;                                air.DepartureTime = tempstr[5];                                air.LandingTime = tempstr[6];                                air.ValidityPeriod = DateTemp + "/" + DateTemp;                                air.TicketStatus = "--";                                air.Luggage = "--";                                air.DepartureTerminal = "--";                                air.LandingTerminal = "--";                                airs.Add(air);                            }                            int row = 13;                            for (int i = 0; i < airs.Count; i++)                            {                                if (airs.Count > 2)                                {                                    for (int j = 0; j < airs.Count - 2; j++)                                    {                                        var CopyRow = table.Rows[12].Clone(true);                                        table.Rows.Add(CopyRow);                                    }                                }                                PropertyInfo[] properties = airs[i].GetType().GetProperties();                                int index = 0;                                foreach (PropertyInfo property in properties)                                {                                    string value = property.GetValue(airs[i]).ToString();                                    Cell ishcel0 = table.Rows[row].Cells[index];                                    Paragraph p = new Paragraph(doc);                                    string s = value;                                    p.AppendChild(new Run(doc, s));                                    p.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐                                    ishcel0.AppendChild(p);                                    ishcel0.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;//垂直居中对齐                                    //ishcel0.CellFormat.VerticalAlignment=                                    index++;                                }                                row++;                            }                            #endregion                            Paragraph lastParagraph = new Paragraph(doc);                            //第一个表格末尾加段落                            table.ParentNode.InsertAfter(lastParagraph, table);                            //复制第一个表格                            Table cloneTable = (Table)table.Clone(true);                            //在文档末尾段落后面加入复制的表格                            table.ParentNode.InsertAfter(cloneTable, lastParagraph);                            if (item != _AirTicketReservations[_AirTicketReservations.Count - 1])                            {                                int rownewsIndex = 13;                                for (int i = 0; i < 2; i++)                                {                                    var CopyRow = table.Rows[12].Clone(true);                                    table.Rows.RemoveAt(13);                                    table.Rows.Add(CopyRow);                                    rownewsIndex++;                                }                            }                            else                            {                                table.Rows.RemoveAt(12);                            }                            cloneTable.Rows.RemoveAt(12);                        }                        if (_AirTicketReservations.Count != 0)                        {                            string[] FlightsCode = _AirTicketReservations[0].FlightsCode.Split('/');                            if (FlightsCode.Length != 0)                            {                                Res_AirCompany _AirCompany = _sqlSugar.Queryable<Res_AirCompany>().First(a => a.ShortCode == FlightsCode[0].Substring(0, 2));                                if (_AirCompany != null)                                {                                    string str = "--";                                    string translateResult = transDic.Where(s => s.Key == _AirCompany.CnName).FirstOrDefault().Value;                                    if (!string.IsNullOrEmpty(translateResult))                                    {                                        str = translateResult;                                        str = _airTicketResRep.Processing(str);                                    }                                    table.Range.Bookmarks["AirlineCompany"].Text = str;                                }                                else                                {                                    table.Range.Bookmarks["AirlineCompany"].Text = "--";                                }                            }                            table.Range.Bookmarks["AirlineRecordCode"].Text = "--";                            table.Range.Bookmarks["ReservationRecordCode"].Text = "--";                            string[] nameArray = Regex.Split(_AirTicketReservations[0].ClientName, "\\d+\\.", RegexOptions.IgnoreCase);                            nameArray = nameArray.Where(str => str != "" && str != " " && !string.IsNullOrEmpty(str)).ToArray();                            string names = "";                            foreach (string clientName in nameArray)                            {                                names += clientName + ",";                            }                            if (!string.IsNullOrWhiteSpace(names))                            {                                string str = "--";                                string translateResult = transDic.Where(s => s.Key == names).FirstOrDefault().Value;                                if (!string.IsNullOrEmpty(translateResult))                                {                                    str = translateResult;                                    str = _airTicketResRep.Processing(str);                                }                                table.Range.Bookmarks["ClientName"].Text = str;                            }                            else                            {                                table.Range.Bookmarks["ClientName"].Text = "--";                            }                            table.Range.Bookmarks["TicketNumber"].Text = "--";                            table.Range.Bookmarks["IdentificationCode"].Text = "--";                            table.Range.Bookmarks["JointTicket"].Text = "--";                            table.Range.Bookmarks["TimeIssue"].Text = "--";                            table.Range.Bookmarks["DrawingAgent"].Text = "--";                            table.Range.Bookmarks["NavigationCode"].Text = "--";                            table.Range.Bookmarks["AgentsAddress"].Text = "--";                            table.Range.Bookmarks["AgentPhone"].Text = "--";                            table.Range.Bookmarks["AgentFacsimile"].Text = "--";                        }                        doc.MailMerge.Execute(new[] { "PageCount" }, new object[] { doc.PageCount });                        //保存合并后的文档                        string fileName = "AirItinerary/电子客票英文行程单_EN.docx";                        string rst = AppSettingsHelper.Get("WordBaseUrl") + AppSettingsHelper.Get("WordFtpPath") + fileName;                        doc.Save(AppSettingsHelper.Get("WordBasePath") + fileName);                        return Ok(JsonView(true, "成功!", rst));                    }                }            }            catch (Exception ex)            {                return Ok(JsonView(StatusCodes.Status400BadRequest, "程序错误!", ""));                throw;            }        }        #endregion        #region 团组增减款项 --> 其他款项        /// <summary>        /// 团组增减款项下拉框绑定        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> DecreasePaymentsSelect(DecreasePaymentsDto dto)        {            #region 参数验证            if (dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数!"));            if (dto.CTId < 1) return Ok(JsonView(false, "请传入有效的CTId参数!"));            #endregion            return Ok(await _decreasePaymentsRep.DecreasePaymentsSelect(dto));        }        /// <summary>        /// 根据团组Id查询团组增减款项        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> DecreasePaymentsList(DecreasePaymentsListDto dto)        {            #region 参数验证            if (dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数!"));            if (dto.DiId < 1) return Ok(JsonView(false, "请传入有效的DiId参数!"));            #endregion            return Ok(await _decreasePaymentsRep.DecreasePaymentsList(dto));        }        /// <summary>        /// 团组增减款项操作(Status:1.新增,2.修改)        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> OpDecreasePayments(DecreasePaymentsOpDto dto)        {            JsonView groupData = await _decreasePaymentsRep.OpDecreasePayments(dto);            if (groupData.Code != 200)            {                return Ok(JsonView(false, groupData.Msg));            }            #region 应用推送            int ccpId = (int)groupData.Data.GetType().GetProperty("ccpId").GetValue(groupData.Data, null);            int sign = (int)groupData.Data.GetType().GetProperty("sign").GetValue(groupData.Data, null);            await AppNoticeLibrary.SendChatMsg_GroupStatus_ApplyFee(ccpId, sign, QiyeWeChatEnum.GuoJiaoLeaderChat);            #endregion            return Ok(JsonView(true, groupData.Msg, groupData.Data));        }        /// <summary>        /// 团组增减款项操作 删除        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> DelDecreasePayments(DelBaseDto dto)        {            if (dto.Id < 1) return Ok(JsonView(false, "请传入有效的Id参数!"));            if (dto.DeleteUserId < 1) return Ok(JsonView(false, "请传入有效的DeleteUserId参数!"));            var res = await _decreasePaymentsRep._Del(dto.Id, dto.DeleteUserId);            if (res.Code == 0)            {                return Ok(JsonView(true, "删除成功!"));            }            return Ok(JsonView(false, "删除失败!"));        }        /// <summary>        /// 根据团组增减款项Id查询        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> QueryDecreasePaymentsById(DecreasePaymentsByIdDto dto)        {            if (dto.Id < 1) return Ok(JsonView(false, "请传入有效的数据Id!"));            return Ok(await _decreasePaymentsRep.QueryDecreasePaymentsById(dto));        }        /// <summary>        /// 查询供应商名称        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public IActionResult QueryAssociateSupplier(AssociateSupplierDto dto)        {            var dbResult = _sqlSugar.Queryable<Grp_DecreasePayments>()                .Where(x => x.SupplierName.Contains(dto.param) && x.IsDel == 0).ToList()                ?? new List<Grp_DecreasePayments>();            dbResult = dbResult.Distinct(new                 ProductComparer()).ToList();            var jw = JsonView(true, "success", dbResult.OrderByDescending(x => x.Id).Select(x => new            {                x.Id,                x.SupplierAddress,                x.SupplierArea,                x.SupplierContact,                x.SupplierContactNumber,                x.SupplierEmail,                x.SupplierName,                x.SupplierSocialAccount,                x.SupplierTypeId,            }).ToList());            return Ok(jw);        }        #endregion        #region 文件上传、删除        /// <summary>        /// region 文件上传  可以带参数        /// </summary>        /// <param name="file"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> UploadProject(IFormFile file)        {            try            {                var TypeName = Request.Headers["TypeName"].ToString();                if (file != null)                {                    var fileDir = AppSettingsHelper.Get("GrpFileBasePath");                    //文件名称                    string projectFileName = file.FileName;                    //上传的文件的路径                    string filePath = "";                    if (TypeName == "A")//A代表团组增减款项                    {                        if (!Directory.Exists(fileDir))                        {                            Directory.CreateDirectory(fileDir);                        }                        //上传的文件的路径                        filePath = fileDir + $@"\团组增减款项相关文件\{projectFileName}";                    }                    else if (TypeName == "B")//B代表商邀相关文件                    {                        if (!Directory.Exists(fileDir))                        {                            Directory.CreateDirectory(fileDir);                        }                        //上传的文件的路径                        filePath = fileDir + $@"\商邀相关文件\{projectFileName}";                    }                    using (FileStream fs = System.IO.File.Create(filePath))                    {                        file.CopyTo(fs);                        fs.Flush();                    }                    return Ok(JsonView(true, "上传成功!", projectFileName));                }                else                {                    return Ok(JsonView(false, "上传失败!"));                }            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        /// <summary>        /// 删除指定文件        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> DelFile(DelFileDto dto)        {            try            {                var TypeName = Request.Headers["TypeName"].ToString();                string filePath = "";                var fileDir = AppSettingsHelper.Get("GrpFileBasePath");                // 返回与指定虚拟路径相对应的物理路径即绝对路径                int id = 0;                if (TypeName == "A")                {                    filePath = fileDir + "/团组增减款项相关文件/" + dto.fileName;                    // 删除该文件                    System.IO.File.Delete(filePath);                    id = await _sqlSugar.Updateable<Grp_DecreasePayments>().Where(a => a.Id == dto.Id).SetColumns(a => new Grp_DecreasePayments { FilePath = "" }).ExecuteCommandAsync();                }                else if (TypeName == "B")                {                    filePath = fileDir + "/商邀相关文件/" + dto.fileName;                    // 删除该文件                    System.IO.File.Delete(filePath);                    id = await _sqlSugar.Updateable<Grp_InvitationOfficialActivities>().Where(a => a.Id == dto.Id).SetColumns(a => new Grp_InvitationOfficialActivities { Attachment = "" }).ExecuteCommandAsync();                }                if (id != 0)                {                    return Ok(JsonView(true, "成功!"));                }                else                {                    return Ok(JsonView(false, "失败!"));                }            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        #endregion        #region 商邀费用录入        /// <summary>        /// 根据团组Id查询商邀费用列表        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> InvitationOfficialActivitiesList(InvitationOfficialActivitiesListDto dto)        {            try            {                Result groupData = await _InvitationOfficialActivitiesRep.InvitationOfficialActivitiesList(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        //        /// <summary>        /// 商邀费用 Info Page 基础数据源        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> InvitationOfficialActivityInitBasicData()        {            try            {                Result groupData = await _InvitationOfficialActivitiesRep._InitBasicData();                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                return Ok(JsonView(true, "操作成功", groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));                throw;            }        }        /// <summary>        /// 根据商邀费用ID查询C表和商邀费用数据        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> InvitationOfficialActivitiesById(InvitationOfficialActivitiesByIdDto dto)        {            try            {                Result groupData = await _InvitationOfficialActivitiesRep.InvitationOfficialActivitiesById(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));                throw;            }        }        /// <summary>        /// 商邀费用录入操作(Status:1.新增,2.修改)        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> OpInvitationOfficialActivities(OpInvitationOfficialActivitiesDto dto)        {            try            {                Result groupData = await _InvitationOfficialActivitiesRep.OpInvitationOfficialActivities(dto, _setDataRep.PostCurrencyByDiid);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                #region 应用推送                try                {                    int ccpId = groupData.Data.GetType().GetProperty("ccpId").GetValue(groupData.Data, null);                    int sign = groupData.Data.GetType().GetProperty("sign").GetValue(groupData.Data, null);                    await AppNoticeLibrary.SendChatMsg_GroupStatus_ApplyFee(ccpId, sign, QiyeWeChatEnum.GuoJiaoLeaderChat);                }                catch (Exception ex)                {                }                #endregion                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        /// <summary>        /// 商邀删除        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> DelInvitationOfficialActivities(DelBaseDto dto)        {            try            {                _sqlSugar.BeginTran();                var res1 = _sqlSugar.Updateable<Grp_InvitationOfficialActivities>()                                    .SetColumns(it => new Grp_InvitationOfficialActivities()                                    {                                        IsDel = 1,                                        DeleteUserId = dto.DeleteUserId,                                        DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")                                    })                                    .Where(it => it.Id == dto.Id)                                    .ExecuteCommand();                if (res1 > 0)                {                    int _diId = 0;                    var _ioaInfo = _sqlSugar.Queryable<Grp_InvitationOfficialActivities>().Where(it => it.Id == dto.Id).First();                    if (_ioaInfo != null)                    {                        _diId = _ioaInfo.DiId;                    }                    var res2 = _sqlSugar.Updateable<Grp_CreditCardPayment>()                                          .SetColumns(a => new Grp_CreditCardPayment()                                          {                                              IsDel = 1,                                              DeleteUserId = dto.DeleteUserId,                                              DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")                                          })                                          .Where(a => a.CId == dto.Id && a.DIId == _diId && a.CTable == 81)                                          .ExecuteCommand();                    if (res2 > 0)                    {                        _sqlSugar.CommitTran();                        return Ok(JsonView(true, "删除成功!"));                    }                }                _sqlSugar.RollbackTran();                return Ok(JsonView(false, "删除失败"));            }            catch (Exception ex)            {                _sqlSugar.RollbackTran();                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 团组模块文件上传        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public IActionResult CommonSaveFile([FromForm] CommonSaveFileDto dto)        {            var jw = JsonView(false);            if (dto.Files == null || dto.Files.Count == 0)            {                jw.Msg = "无文件信息!";                return Ok(jw);            }            //var nameSp = dto.File.FileName.Split(".");            //if (nameSp.Length < 2)            //{            //    jw.Msg = "拓展名称有误!";            //    return Ok(jw);            //}            //var existsName = new string[]{ "RAR", "ZIP", "ARJ","GZ","Z","7Z","TAR" };            //if (!existsName.Contains(nameSp[1].ToUpper()))            //{            //    jw.Msg = $"请使用指定拓展名!({string.Join("-",existsName)})";            //    return Ok(jw);            //}            var Ctable = _sqlSugar.Queryable<Sys_SetData>().First(x => x.STid == 16 && x.IsDel == 0 && x.Id == dto.Ctable);            if (Ctable == null)            {                jw.Msg = "Ctable指向有误!";                return Ok(jw);            }            var groupInfo = _sqlSugar.Queryable<Grp_DelegationInfo>().First(x => x.Id == dto.Diid && x.IsDel == 0);            if (groupInfo == null)            {                jw.Msg = "团组信息不存在!";                return Ok(jw);            }            Ctable.Name = Regex.Replace(Ctable.Name, @"[^\w\.@-]", "",                    RegexOptions.None, TimeSpan.FromSeconds(1.5));            groupInfo.TeamName = Regex.Replace(groupInfo.TeamName, @"[^\w\.@-]", "",                    RegexOptions.None, TimeSpan.FromSeconds(1.5));            var path = "\\GroupModelFiles\\" + groupInfo.TeamName + "\\" + Ctable.Name;            var fileBase = AppSettingsHelper.Get("GrpFileBasePath") + path;            try            {                if (!Directory.Exists(fileBase))                {                    Directory.CreateDirectory(fileBase);                }                List<Grp_GroupModelFile> saveArr = new List<Grp_GroupModelFile>();                foreach (var fileStream in dto.Files)                {                    var saveFilePath = fileBase + "\\" + fileStream.FileName;                    Grp_GroupModelFile file = new Grp_GroupModelFile()                    {                        Cid = dto.Cid,                        CreateTime = DateTime.Now,                        CreateUserId = dto.Userid,                        Ctable = dto.Ctable,                        Diid = dto.Diid,                        IsDel = 0,                        FilePath = saveFilePath,                        FileName = fileStream.FileName                    };                    using (FileStream fs = System.IO.File.Create(saveFilePath))                    {                        fileStream.CopyTo(fs);                        fs.Flush();                    }                    saveArr.Add(file);                }                var addResult = _sqlSugar.Insertable<Grp_GroupModelFile>(saveArr).ExecuteCommand();                //url = AppSettingsHelper.Get("WordBaseUrl") + AppSettingsHelper.Get("GrpFileFtpPath") + path + "\\" + dto.File.FileName                jw = JsonView(true, "保存成功!", new                {                    count = addResult,                    filesName = saveArr.Select(x => x.FileName)                }) ;            }            catch (Exception ex)            {                jw = JsonView(false, $"保存失败! ({ex.Message}) ", new                {                    count = 0,                    filesName = new string[0],                }) ;            }            return Ok(jw);        }        [HttpPost]        public IActionResult QueryGroupModelFile(QueryGroupModelFileDto dto)        {            var dbQuery = _sqlSugar.Queryable<Grp_GroupModelFile>().Where(x => x.IsDel == 0 && x.Cid == dto.Cid && x.Ctable == dto.Ctable && x.Diid == dto.Diid).ToList();            return Ok(JsonView(true, "success", dbQuery.Select(x => x.FileName)));        }        [HttpPost]        public IActionResult ExportGroupZip(ExportGroupZipDto dto)        {            var jw = JsonView(false);            var groupInfo = _sqlSugar.Queryable<Grp_DelegationInfo>().First(x => x.IsDel == 0 && x.Id == dto.Diid);            if (groupInfo == null)            {                jw.Msg = "团组信息不存在!";                return Ok(jw);            }            var dbQuery = _sqlSugar.Queryable<Grp_GroupModelFile>().Where(x => x.IsDel == 0 && x.Diid == dto.Diid).ToList();            Dictionary<string, Stream> Zips = new Dictionary<string, Stream>();            foreach (var item in dbQuery)            {                using (FileStream fileStream = new FileStream(item.FilePath, FileMode.Open, FileAccess.Read))                {                    byte[] bytes = new byte[fileStream.Length];                    fileStream.Read(bytes, 0, bytes.Length);                    fileStream.Close();                    Stream stream = new MemoryStream(bytes);                    Zips.Add(item.FileName, stream);                }            }            groupInfo.TeamName = Regex.Replace(groupInfo.TeamName, @"[^\w\.@-]", "",                   RegexOptions.None, TimeSpan.FromSeconds(1.5));            if (Zips.Count > 0)            {                IOOperatorHelper io = new IOOperatorHelper();                var byts = io.ConvertZipStream(Zips);                var path = "\\GroupModelFiles\\" + groupInfo.TeamName;                io.ByteToFile(byts, AppSettingsHelper.Get("GrpFileBasePath") + $"{path}\\{groupInfo.TeamName}_.Zip");                jw = JsonView(true, "success", new { url = AppSettingsHelper.Get("GrpFileBaseUrl") + $"{AppSettingsHelper.Get("GrpFileFtpPath")}{path}\\{groupInfo.TeamName}_.zip" });            }            else            {                jw.Msg = "暂无生成文件!";            }            return Ok(jw);        }        #endregion        #region 团组英文资料        /// <summary>        /// 查询团组英文所有资料        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> QueryDelegationEnData(QueryDelegationEnDataDto dto)        {            try            {                Result groupData = await _delegationEnDataRep.QueryDelegationEnData(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        /// <summary>        /// 团组英文资料操作(Status:1.新增,2.修改)        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> OpDelegationEnData(OpDelegationEnDataDto dto)        {            try            {                Result groupData = await _delegationEnDataRep.OpDelegationEnData(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        /// <summary>        /// 团组英文资料Id查询数据        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> QueryDelegationEnDataById(QueryDelegationEnDataByIdDto dto)        {            try            {                Grp_DelegationEnData _DelegationEnData = await _sqlSugar.Queryable<Grp_DelegationEnData>().FirstAsync(it => it.Id == dto.Id && it.IsDel == 0);                if (_DelegationEnData != null)                {                    return Ok(JsonView(true, "查询成功!", _DelegationEnData));                }                return Ok(JsonView(true, "暂无数据!", _DelegationEnData));            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        /// <summary>        /// 团组英文资料删除        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> DelDelegationEnData(DelBaseDto dto)        {            try            {                var res = await _delegationEnDataRep.SoftDeleteByIdAsync<Grp_DelegationEnData>(dto.Id.ToString(), dto.DeleteUserId);                if (!res)                {                    return Ok(JsonView(false, "删除失败"));                }                return Ok(JsonView(true, "删除成功!"));            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        #endregion        #region 导出邀请函        /// <summary>        /// 导出邀请函页面初始化        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> QueryinvitationLetter(DecreasePaymentsListDto dto)        {            try            {                List<Grp_DelegationInfo> grp_Delegations = _sqlSugar.Queryable<Grp_DelegationInfo>().Where(a => a.IsDel == 0).OrderBy(a => a.Id, OrderByType.Desc).ToList();                List<Crm_DeleClient> crm_Deles = new List<Crm_DeleClient>();                if (dto.DiId == 0)                {                    crm_Deles = await _sqlSugar.Queryable<Crm_DeleClient>().Where(a => a.DiId == grp_Delegations[0].Id && a.IsDel == 0).ToListAsync();                }                else                {                    crm_Deles = await _sqlSugar.Queryable<Crm_DeleClient>().Where(a => a.DiId == dto.DiId && a.IsDel == 0).ToListAsync();                }                return Ok(JsonView(true, "查询成功!", new                {                    deleClient = crm_Deles,                    delegations = grp_Delegations                }));            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        /// <summary>        /// 导出邀请函        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> invitationLetter(DecreasePaymentsListDto dto)        {            #region 参数验证            //if (dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数!"));            if (dto.DiId < 1) return Ok(JsonView(false, "请传入有效的DiId参数!"));            #endregion            try            {                Dictionary<string, string> transDic = new Dictionary<string, string>();                string sql = string.Format(@"Select tcl.Id,tcl.DiId,temp.*,tcl.ShippingSpaceTypeId,tcl.ShippingSpaceSpecialNeeds,                                             tcl.HotelSpecialNeeds,tcl.MealSpecialNeeds,tcl.Remark                                             From Grp_TourClientList tcl                                             Left Join 	                                             (Select dc.Id As DcId,dc.LastName,dc.FirstName,dc.Pinyin,dc.Sex,ccom.CompanyFullName,dc.Job,	                                                 cc1.CertNo As IDCardNo,dc.Phone,dc.BirthDay,cc2.PassportType,cc2.CertNo As PassportNo,cc2.Country,	                                                 cc2.Area,cc2.IssueDt,cc2.ExpiryDt	                                                 From Crm_DeleClient dc	                                                 Left Join Crm_CustomerCompany ccom On dc.CrmCompanyId = ccom.Id  And ccom.IsDel = 0	                                                 Left Join Crm_CustomerCert cc1 On dc.Id = cc1.DcId And cc1.SdId = 773 And cc1.IsDel = 0	                                                 Left Join Crm_CustomerCert cc2 On dc.Id = cc2.DcId And cc2.SdId = 774 And cc2.IsDel = 0	                                                 Where dc.IsDel = 0) temp                                              On temp.DcId =tcl.ClientId                                               Where tcl.IsDel = 0 And tcl.DiId = {0}", dto.DiId);                var datas = _sqlSugar.SqlQueryable<TourClientListDetailsView>(sql).ToList();                List<string> texts = new List<string>();                if (datas.Count != 0)                {                    foreach (TourClientListDetailsView item in datas)                    {                        if (!string.IsNullOrWhiteSpace(item.Pinyin))                        {                            transDic.Add(item.LastName + item.FirstName, item.Pinyin);                        }                        else                        {                            string name = item.LastName + item.FirstName;                            texts.Add(name);                        }                        if (!string.IsNullOrEmpty(item.Job) && !texts.Contains(item.Job))                        {                            if (!transDic.ContainsKey(item.Job))                            {                                texts.Add(item.Job);                            }                        }                        if (!string.IsNullOrEmpty(item.CompanyFullName))                        {                            texts.Add(item.CompanyFullName);                        }                    }                    List<TranslateResult> transData = _airTicketResRep.ReTransBatch(texts, "en");                    if (transData.Count > 0)                    {                        foreach (TranslateResult item in transData)                        {                            if (!transDic.ContainsKey(item.Query))                            {                                transDic.Add(item.Query, item.Translation);                            }                        }                    }                    List<GuestList> list = new List<GuestList>();                    foreach (TourClientListDetailsView dele in datas)                    {                        GuestList guestList = new GuestList();                        if (!string.IsNullOrWhiteSpace(dele.Pinyin))                        {                            guestList.Name = dele.Pinyin;                        }                        else                        {                            string Name = transDic.Where(s => s.Key == dele.LastName + dele.FirstName).FirstOrDefault().Value;                            guestList.Name = Name;                        }                        if (dele.Sex == 0)                        {                            guestList.Sex = "Male";                        }                        else if (dele.Sex == 1)                        {                            guestList.Sex = "Female";                        }                        guestList.DOB = dele.BirthDay.Replace('-', '.');                        if (!string.IsNullOrEmpty(dele.Job))                        {                            guestList.Job = dele.Job;                        }                        list.Add(guestList);                    }                    //载入模板                    Document doc = new Document(AppSettingsHelper.Get("WordBasePath") + "Template/邀请函模板0210.docx");                    DocumentBuilder builder = new DocumentBuilder(doc);                    //获取word里所有表格                    NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);                    //获取所填表格的序数                    Aspose.Words.Tables.Table tableOne = allTables[0] as Aspose.Words.Tables.Table;                    var rowStart = tableOne.Rows[0]; //获取第1行                    //循环赋值                    for (int i = 0; i < list.Count; i++)                    {                        builder.MoveToCell(0, i + 1, 0, 0);                        builder.Write(list[i].Name.ToString());                        builder.MoveToCell(0, i + 1, 1, 0);                        builder.Write(list[i].Sex.ToString());                        builder.MoveToCell(0, i + 1, 2, 0);                        builder.Write(list[i].DOB.ToString());                        builder.MoveToCell(0, i + 1, 3, 0);                        builder.Write(list[i].Job.ToString());                    }                    //删除多余行                    while (tableOne.Rows.Count > list.Count + 1)                    {                        tableOne.Rows.RemoveAt(list.Count + 1);                    }                    var fileDir = AppSettingsHelper.Get("GrpFileBasePath");                    string fileName = "邀请函" + DateTime.Now.ToString("yyyy-MM-dd") + ".docx";                    string filePath = fileDir + $@"商邀相关文件/{fileName}";                    doc.Save(filePath);                    string Url = AppSettingsHelper.Get("WordBaseUrl") + "Office/GrpFile/商邀相关文件/" + fileName;                    return Ok(JsonView(true, "操作成功!", Url));                }                else                {                    return Ok(JsonView(false, "该团组客户名单暂未录入!"));                }            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));                throw;            }        }        #endregion        #region 团组经理模块 出入境费用        ///// <summary>        ///// 团组模块 - 出入境费用        ///// </summary>        ///// <returns></returns>        //[HttpPost]        //[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        //public async Task<IActionResult> SetEnterExitCostCurrencyChange()        //{        //    try        //    {        //        var data = await _enterExitCostRep.SetEnterExitCostCurrencyChange();        //        if (data.Code != 0)        //        {        //            return Ok(JsonView(false, data.Msg));        //        }        //        return Ok(JsonView(true, "查询成功!"));        //    }        //    catch (Exception ex)        //    {        //        return Ok(JsonView(false, ex.Message));        //        throw;        //    }        //}        /// <summary>        /// 团组模块 - 出入境费用 - 子项 地区更改为 nationalTravelFee 的id        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> SetDayAndCostAreaChange()        {            try            {                var nationalTravelFee = await _sqlSugar.Queryable<Grp_NationalTravelFee>().ToListAsync();                var dayAndCost = await _sqlSugar.Queryable<Grp_DayAndCost>().Where(it => it.IsDel == 0).ToListAsync();                var unite = dayAndCost.Where(a => nationalTravelFee.Any(b => a.Place.Trim() == b.City)).ToList(); //交集                var merge = dayAndCost.Where(a => !nationalTravelFee.Any(b => a.Place.Trim() == b.City)).ToList(); //差集                foreach (var item in unite) //处理交集数据                {                    dayAndCost.Where(it => it.Id == item.Id).FirstOrDefault().NationalTravelFeeId = nationalTravelFee.Where(it => it.City.Trim() == item.Place.Trim()).FirstOrDefault().Id;                }                foreach (var item in merge) //处理差集数据                {                    int nationalTravelFeeId = 0;                    var cityData = nationalTravelFee.Where(it => it.City.Trim() == item.Place.Trim()).FirstOrDefault();                    if (cityData != null) nationalTravelFeeId = cityData.Id;                    else                    {                        var countryData = nationalTravelFee.Where(it => it.Country.Trim() == item.Place.Trim()).FirstOrDefault();                        if (countryData != null) nationalTravelFeeId = countryData.Id;                    }                    dayAndCost.Where(it => it.Id == item.Id).FirstOrDefault().NationalTravelFeeId = nationalTravelFeeId;                }                //只更新dayAndCost 的 nationalTravelFeeId;                var result = _sqlSugar.Updateable(dayAndCost).UpdateColumns(it => new { it.NationalTravelFeeId }).ExecuteCommand();                if (result > 0) return Ok(JsonView(true, "nationalTravelFeeId列更新成功!"));                else return Ok(JsonView(false, "nationalTravelFeeId列更新失败!"));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));                throw;            }        }        /// <summary>        /// 团组模块 - 出入境费用 - 基础数据源(团组名称/币种类型)        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> GetEnterExitCostDataSource(PortDtoBase dto)        {            try            {                var groupNameData = await _groupRepository.GetGroupNameList(new GroupNameDto { PortType = dto.PortType });                string sql = string.Format("Select * From Sys_SetData Where IsDel = 0");                //SetDataInfoView                var dataSource = await _sqlSugar.SqlQueryable<Sys_SetData>(sql).ToListAsync();                var currencyData = dataSource.Where(it => it.STid == 66).ToList(); //所有币种                List<SetDataInfoView> _CurrencyData = _mapper.Map<List<SetDataInfoView>>(currencyData);                var wordTypeData = dataSource.Where(it => it.STid == 72).ToList();  //三公费用-Word明细类型                List<SetDataInfoView> _WordTypeData = _mapper.Map<List<SetDataInfoView>>(wordTypeData);                var excelTypeData = dataSource.Where(it => it.STid == 73).ToList(); //三公费用-Excel明细类型                List<SetDataInfoView> _ExcelTypeData = _mapper.Map<List<SetDataInfoView>>(excelTypeData);                //默认币种显示                List<CurrencyInfo> _currencyInfos = new List<CurrencyInfo>()                {                    new CurrencyInfo (){ CurrencyCode="USD",CurrencyName = "美元",Rate = 7.5000M },                    new CurrencyInfo (){ CurrencyCode="EUR",CurrencyName = "欧元",Rate = 8.0000M },                    new CurrencyInfo (){ CurrencyCode="GBP",CurrencyName = "英镑",Rate = 9.5000M },                    new CurrencyInfo (){ CurrencyCode="JPY",CurrencyName = "日元",Rate = 0.0500M },                    new CurrencyInfo (){ CurrencyCode="HKD",CurrencyName = "港币",Rate = 0.9500M },                };                var _currencyRate = await _juHeApi.PostItemRateAsync(_currencyInfos.Select(it => it.CurrencyCode).ToArray());                if (_currencyRate.Count > 0)                {                    foreach (var item in _currencyInfos)                    {                        var rateInfo = _currencyRate.Where(it => it.Name.Equals(item.CurrencyName)).FirstOrDefault();                        if (rateInfo != null)                        {                            decimal rate1 = Convert.ToDecimal(rateInfo.FSellPri) / 100.00M;                            rate1 *= 1.035M;                            item.Rate = Convert.ToDecimal(rate1.ToString("#0.00")) + 0.01M;                        }                    }                }                return Ok(JsonView(true, "查询成功!", new                {                    GroupNameData = groupNameData.Data,                    CurrencyData = _CurrencyData,                    WordTypeData = _WordTypeData,                    ExcelTypeData = _ExcelTypeData,                    CurrencyInit = _currencyInfos                }));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));                throw;            }        }        /// <summary>        /// 团组模块 - 出入境费用         /// 实时汇率 tips        /// 签证费用 tips        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> GetEnterExitCostCorrelationTips(EnterExitCostInfobyDiIdDto dto)        {            var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>().FirstAsync(it => it.Id == dto.DiId && it.IsDel == 0);            //默认币种显示            List<CurrencyInfo> _currencyInfos = new List<CurrencyInfo>()                {                    new CurrencyInfo (){ CurrencyCode="USD",CurrencyName = "美元",Rate = 7.5000M },                    new CurrencyInfo (){ CurrencyCode="EUR",CurrencyName = "欧元",Rate = 8.0000M },                    new CurrencyInfo (){ CurrencyCode="GBP",CurrencyName = "英镑",Rate = 9.5000M },                    new CurrencyInfo (){ CurrencyCode="JPY",CurrencyName = "日元",Rate = 0.0500M },                    new CurrencyInfo (){ CurrencyCode="HKD",CurrencyName = "港币",Rate = 0.9500M },                };            var _currencyRate = await _juHeApi.PostItemRateAsync(_currencyInfos.Select(it => it.CurrencyCode).ToArray());            List<dynamic> reteInfos = new List<dynamic>();            if (_currencyRate.Count > 0)            {                foreach (var item in _currencyInfos)                {                    var rateInfo = _currencyRate.Where(it => it.Name.Equals(item.CurrencyName)).FirstOrDefault();                    if (rateInfo != null)                    {                        item.Rate = Convert.ToDecimal((Convert.ToDecimal(rateInfo.FSellPri == null ? 0.00M : rateInfo.FSellPri) / 100.00M).ToString("#0.0000"));                        decimal rate1 = item.Rate;                        rate1 *= 1.03M;                        decimal rate2 = Convert.ToDecimal(rate1.ToString("#0.00")) + 0.01M;                        reteInfos.Add(new                        {                            currCode = item.CurrencyCode,                            currName = item.CurrencyName,                            rate = rate2,                            lastUpdateDt = rateInfo.Date + " " + rateInfo.Time                        });                    }                }            }            var visaData = await _visaFeeInfoRep.EntryAndExitTips(dto.DiId);            var airData = await _ticketBlackCodeRep.EntryAndExitTips(dto.DiId);            return Ok(JsonView(true, "查询成功!", new            {                //GroupNameData = groupNameData.Data,                visaData = visaData.Data,                airData = airData.Data,                reteInfos = reteInfos            }));        }        /// <summary>        /// 团组模块 - 出入境费用 - Info        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> GetEnterExitCostInfobyDiId(EnterExitCostInfobyDiIdDto dto)        {            try            {                var data = await _enterExitCostRep.GetEnterExitCostInfoByDiId(dto);                if (data.Code != 0)                {                    return Ok(JsonView(false, data.Msg));                }                return Ok(JsonView(true, "查询成功!", data.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 团组模块 - 出入境费用 - Add And Update        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostEnterExitCostOperate(EnterExitCostOperateDto dto)        {            try            {                var data = await _enterExitCostRep.PostEnterExitCostOperate(dto);                if (data.Code != 0)                {                    return Ok(JsonView(false, data.Msg));                }                //生成默认文件pdf并且通知人员                var fileView = await GeneralMethod.EnterExitCostDownload(new EnterExitCostDownloadDto()                {                    DiId = dto.DiId,                    ExportType = 1,                    SubTypeId = 1005                }, "pdf");                //发送通知                string fileUrl = (string)fileView.Data.GetType().GetProperty("Url").GetValue(fileView.Data, null);                int sign = (int)data.Data.GetType().GetProperty("sign").GetValue(data.Data, null);                string md5Sign = GeneralMethod.Encrypt($"{sign}&fileName={fileUrl}");                string url = string.Format("http://oa.pan-american-intl.com:4399/#/Sankunginfo?sign={0}&fileName={1}", sign,fileUrl);                await AppNoticeLibrary.SendUserMsg_GroupShare_ToGM(dto.DiId, new List<string>() { "208","233","21" }, dto.UserId, url);                return Ok(JsonView(true, data.Msg, data.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 团组模块 - 出入境费用 - Confirm 费用        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostEnterExitCostIsConfirm(ConfirmCostDto dto)        {            //TODO:测试完毕需把对应的用户ID更改            //1、数据表添加字段            //2、更改字段接口()            var _view = await _enterExitCostRep.ConfirmCost(dto);            //3、确认成功 给财务发送消息            if (_view.Code == 200)            {                if (dto.Type == 1)                {                    int diId = _enterExitCostRep._sqlSugar.Queryable<Grp_EnterExitCost>().Where(x => x.IsDel == 0 && x.Id == dto.Id).First()?.DiId ?? 0;                    await AppNoticeLibrary.SendUserMsg_GroupShare_ToFinance(diId);                }            }            return Ok(_view);        }        /// <summary>        /// 团组模块 - 出入境费用 - File downlaod        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostEnterExitCostDownload(EnterExitCostDownloadDto dto)        {            try            {                if (dto.DiId < 1)                {                    return Ok(JsonView(false, "请传入有效的DiId参数;"));                }                if (dto.ExportType < 1)                {                    return Ok(JsonView(false, "请传入有效的ExportType参数; 1 明细表 2 表格"));                }                if (dto.SubTypeId < 1)                {                    return Ok(JsonView(false, @"请传入有效的SubTypeId参数;                                                 1 明细表 --> 1005(默认明细表) 1006(因公出国(境)经费测算明细表) 1007(四川省商务厅出国经费财政先行审核表)                                                  2 表格 --> 1008(派员单位出(境)任务和预算审批意见表) 1009(省级单位出(境)经费报销单)                                                3 团组成员名单 1 团组成员名单"));                }                var _EnterExitCosts = _sqlSugar.Queryable<Grp_EnterExitCost>().Where(it => it.IsDel == 0 && it.DiId == dto.DiId).First();                var _DayAndCosts = _sqlSugar.Queryable<Grp_DayAndCost>().Where(it => it.IsDel == 0 && it.DiId == dto.DiId).ToList();                if (_EnterExitCosts == null)                {                    return Ok(JsonView(false, "该团组未填写出入境费用;"));                }                //数据源                List<Grp_DayAndCost> dac1 = _DayAndCosts.Where(it => it.Type == 1).ToList(); //住宿费                List<Grp_DayAndCost> dac2 = _DayAndCosts.Where(it => it.Type == 2).ToList(); //伙食费                List<Grp_DayAndCost> dac3 = _DayAndCosts.Where(it => it.Type == 3).ToList(); //公杂费                List<Grp_DayAndCost> dac4 = _DayAndCosts.Where(it => it.Type == 4).ToList(); //培训费                var _CurrDatas = _sqlSugar.Queryable<Sys_SetData>().Where(it => it.IsDel == 0 && it.STid == 66).ToList();                var _DelegationInfo = _sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0 && it.Id == dto.DiId).First();                var DeleClientList = _sqlSugar.Queryable<Grp_TourClientList>()                                                      .LeftJoin<Crm_DeleClient>((tcl, dc) => tcl.ClientId == dc.Id && dc.IsDel == 0)                                                      .LeftJoin<Crm_CustomerCompany>((tcl, dc, cc) => dc.CrmCompanyId == cc.Id && dc.IsDel == 0)                                                      .Where((tcl, dc, cc) => tcl.IsDel == 0 && tcl.DiId == dto.DiId)                                                      .Select((tcl, dc, cc) => new                                                      {                                                          Name = dc.LastName + dc.FirstName,                                                          Sex = dc.Sex,                                                          Birthday = dc.BirthDay,                                                          Company = cc.CompanyFullName,                                                          Job = dc.Job                                                      })                                                      .ToList();                var blackCode = _sqlSugar.Queryable<Air_TicketBlackCode>().Where(it => it.IsDel == 0 && it.DiId == dto.DiId).First();                var threeCodes = _sqlSugar.Queryable<Res_ThreeCode>().Where(it => it.IsDel == 0).ToList();                var placeData = _sqlSugar.Queryable<Grp_NationalTravelFee>().Where(it => it.IsDel == 0).ToList();                var rateDatas = await _EnterExitCosts.CurrencyRemark.SplitExchangeRate();                _DelegationInfo.VisitCountry = _DelegationInfo.VisitCountry.Replace("|", "、");                if (dto.ExportType == 1) //明细表                {                    if (dto.SubTypeId == 1005) //1005(默认明细表)                    {                        //获取模板                        string tempPath = (AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/Temp/出入境费用表模板.docx");                        //载入模板                        Document doc = new Document(tempPath);                        DocumentBuilder builder = new DocumentBuilder(doc);                        //利用键值对存放数据                        Dictionary<string, string> dic = new Dictionary<string, string>();                        decimal stayFeeTotal = _DayAndCosts.Where(it => it.Type == 1).Sum(it => it.SubTotal);  // 住宿费                        decimal mealsFeeTotal = _DayAndCosts.Where(it => it.Type == 2).Sum(it => it.SubTotal);  // 伙食费费                        decimal miscellaneousFeeTotal = _DayAndCosts.Where(it => it.Type == 3).Sum(it => it.SubTotal);  // 公杂费                        decimal tainFeeTotal = _DayAndCosts.Where(it => it.Type == 4).Sum(it => it.SubTotal);  // 培训费                        decimal insidePayTotal = _EnterExitCosts.InsidePay;                        string row1_1 = "";                        if (_EnterExitCosts.Visa > 0)                        {                            //insidePayTotal += _EnterExitCosts.Visa;                            row1_1 = $"签证费: {_EnterExitCosts.Visa.ToString("#0.00")} 人民币/人";                            if (!string.IsNullOrEmpty(_EnterExitCosts.VisaRemark))                            {                                row1_1 += $"\t签证费用描述: : {_EnterExitCosts.VisaRemark} 人民币/人";                            }                        }                        string row1_2 = "";                        if (_EnterExitCosts.YiMiao > 0)                        {                            //insidePayTotal += _EnterExitCosts.YiMiao;                            row1_2 += $"疫苗费:{_EnterExitCosts.YiMiao.ToString("#0.00")} 人民币/人";                        }                        if (_EnterExitCosts.HeSuan > 0)                        {                            //insidePayTotal += _EnterExitCosts.HeSuan;                            row1_2 += $"核酸检测费:{_EnterExitCosts.HeSuan.ToString("#0.00")} 人民币/人";                        }                        if (_EnterExitCosts.Service > 0)                        {                            //insidePayTotal += _EnterExitCosts.Service;                            row1_2 += $"服务费:{_EnterExitCosts.Service.ToString("#0.00")} 人民币/人";                        }                        string row1_3 = "";                        if (_EnterExitCosts.Safe > 0)                        {                            //insidePayTotal += _EnterExitCosts.Safe;                            row1_3 += $"保险费:{_EnterExitCosts.Safe.ToString("#0.00")} 人民币/人";                        }                        if (_EnterExitCosts.Ticket > 0)                        {                            //insidePayTotal += _EnterExitCosts.Ticket;                            row1_3 += $"参展门票:{_EnterExitCosts.Ticket.ToString("#0.00")} 人民币/人";                        }                        string row1 = "";                        if (!string.IsNullOrEmpty(row1_1)) row1 += $"{row1_1}\r\n";                        if (!string.IsNullOrEmpty(row1_2)) row1 += $"{row1_2}\r\n";                        if (!string.IsNullOrEmpty(row1_3)) row1 += $"{row1_3}";                        dic.Add("InsidePay", insidePayTotal.ToString("#0.00"));                        dic.Add("Row1Str", row1);                        dic.Add("OutsideJJ", _EnterExitCosts.OutsideJJPay.ToString("#0.00"));                        dic.Add("OutsaideGW", _EnterExitCosts.OutsaideGWPay.ToString("#0.00"));                        dic.Add("AirJJ", _EnterExitCosts.AirJJ.ToString("#0.00"));                        dic.Add("AirGW", _EnterExitCosts.AirGW.ToString("#0.00"));                        dic.Add("CityTranffic", _EnterExitCosts.CityTranffic.ToString("#0.00"));                        dic.Add("SubZS", stayFeeTotal.ToString("#0.00"));                        dic.Add("SubHS", mealsFeeTotal.ToString("#0.00"));                        string miscellaneousFeeTotalStr = miscellaneousFeeTotal.ToString("#0.00");                        dic.Add("SubGZF", miscellaneousFeeTotalStr);                        //dic.Add("SubPX", tainFeeTotal.ToString("#0.00"));                        decimal subJJC = insidePayTotal + stayFeeTotal + mealsFeeTotal + miscellaneousFeeTotal + tainFeeTotal + _EnterExitCosts.OutsideJJPay;                        decimal subGWC = insidePayTotal + stayFeeTotal + mealsFeeTotal + miscellaneousFeeTotal + tainFeeTotal + _EnterExitCosts.OutsaideGWPay;                        dic.Add("SubJJC", subJJC.ToString("#0.00"));                        dic.Add("SubGWC", subGWC.ToString("#0.00"));                        #region 填充word模板书签内容                        foreach (var key in dic.Keys)                        {                            builder.MoveToBookmark(key);                            builder.Write(dic[key]);                        }                        #endregion                        #region 填充word表格内容                        ////获读取指定表格方法二                        NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);                        Aspose.Words.Tables.Table table1 = allTables[0] as Aspose.Words.Tables.Table;                        for (int i = 0; i < dac1.Count; i++)                        {                            Grp_DayAndCost dac = dac1[i];                            if (dac == null) continue;                            builder.MoveToCell(0, i, 0, 0);                            builder.Write("第" + dac.Days.ToString() + "晚:");                            builder.MoveToCell(0, i, 1, 0);                            //builder.Write(placeData.Find(it => it.Id == dac.NationalTravelFeeId)?.Country ?? "Unknown");                            //builder.Write(dac.Place == null ? "" : dac.Place);                            builder.Write(GetEnterExitCostExportCity(placeData, dac.NationalTravelFeeId));                            builder.MoveToCell(0, i, 2, 0);                            builder.Write("费用标准:");                            string curr = "";                            var currData = _CurrDatas.Where(it => it.Id == dac.Currency).FirstOrDefault();                            if (currData != null)                            {                                curr = currData.Name;                            }                            builder.MoveToCell(0, i, 3, 0);                            builder.Write(dac.Cost.ToString("#0.00") + curr);                            builder.MoveToCell(0, i, 4, 0);                            builder.Write("费用小计:");                            builder.MoveToCell(0, i, 5, 0);                            builder.Write(dac.SubTotal.ToString("#0.00") + "CNY");                        }                        //删除多余行                        while (table1.Rows.Count > dac1.Count)                        {                            table1.Rows.RemoveAt(dac1.Count);                        }                        Aspose.Words.Tables.Table table2 = allTables[1] as Aspose.Words.Tables.Table;                        for (int i = 0; i < dac2.Count; i++)                        {                            Grp_DayAndCost dac = dac2[i];                            if (dac == null) continue;                            builder.MoveToCell(1, i, 0, 0);                            builder.Write("第" + dac.Days.ToString() + "天:");                            builder.MoveToCell(1, i, 1, 0);                            builder.Write(GetEnterExitCostExportCity(placeData, dac.NationalTravelFeeId));                            builder.MoveToCell(1, i, 2, 0);                            builder.Write("费用标准:");                            string curr = "";                            var currData = _CurrDatas.Where(it => it.Id == dac.Currency).FirstOrDefault();                            if (currData != null)                            {                                curr = currData.Name;                            }                            builder.MoveToCell(1, i, 3, 0);                            builder.Write(dac.Cost.ToString("#0.00") + curr);                            builder.MoveToCell(1, i, 4, 0);                            builder.Write("费用小计:");                            builder.MoveToCell(1, i, 5, 0);                            builder.Write(dac.SubTotal.ToString("#0.00") + "CNY");                        }                        //删除多余行                        while (table2.Rows.Count > dac2.Count)                        {                            table2.Rows.RemoveAt(dac2.Count);                        }                        Aspose.Words.Tables.Table table3 = allTables[2] as Aspose.Words.Tables.Table;                        for (int i = 0; i < dac3.Count; i++)                        {                            Grp_DayAndCost dac = dac3[i];                            if (dac == null) continue;                            builder.MoveToCell(2, i, 0, 0);                            builder.Write("第" + dac.Days.ToString() + "天:");                            builder.MoveToCell(2, i, 1, 0);                            builder.Write(GetEnterExitCostExportCity(placeData, dac.NationalTravelFeeId));                            builder.MoveToCell(2, i, 2, 0);                            builder.Write("费用标准:");                            string curr = "";                            var currData = _CurrDatas.Where(it => it.Id == dac.Currency).FirstOrDefault();                            if (currData != null)                            {                                curr = currData.Name;                            }                            builder.MoveToCell(2, i, 3, 0);                            builder.Write(dac.Cost.ToString("#0.00") + curr);                            builder.MoveToCell(2, i, 4, 0);                            builder.Write("费用小计:");                            builder.MoveToCell(2, i, 5, 0);                            builder.Write(dac.SubTotal.ToString("#0.00") + "CNY");                        }                        //删除多余行                        while (table3.Rows.Count > dac3.Count)                        {                            table3.Rows.RemoveAt(dac3.Count);                        }                        #endregion                        //文件名                        string strFileName = $"{_DelegationInfo.TeamName}出入境费用{Guid.NewGuid().ToString()}.docx";                        AsposeHelper.removewatermark_v2180();                        doc.Save(AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/File/" + strFileName);                        string url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/EnterExitCost/File/" + strFileName;                        return Ok(JsonView(true, "成功", new { Url = url }));                    }                    else if (dto.SubTypeId == 1006)//1006(因公出国(境)经费测算明细表)                    {                        //获取模板                        string tempPath = (AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/Temp/因公出国(境)经费测算明细表.docx");                        //载入模板                        Document doc = new Document(tempPath);                        DocumentBuilder builder = new DocumentBuilder(doc);                        Dictionary<string, string> dic = new Dictionary<string, string>();                        if (blackCode != null && !string.IsNullOrWhiteSpace(blackCode.BlackCode))                        {                            List<string> list = new List<string>();                            try                            {                                var spilitArr = Regex.Split(blackCode.BlackCode, "\r\n");                                foreach (var item in spilitArr)                                {                                    var spDotandEmpty = item.Split('.')[1].Split(' ').Where(x => !string.IsNullOrEmpty(x)).ToList();                                    var depCode = spDotandEmpty[2].Substring(0, 3);                                    var arrCode = spDotandEmpty[2].Substring(3, 3);                                    string depName = threeCodes.Find(it => it.Three.Equals(depCode)).City,                                           arrName = threeCodes.Find(it => it.Three.Equals(arrCode)).City;                                    list.Add(depName);                                    list.Add(arrName);                                }                                list = list.Distinct().ToList();                                dic.Add("ReturnCode", string.Join("-", list).TrimEnd('-'));                            }                            catch (Exception)                            {                                dic.Add("ReturnCode", "行程录入不正确!");                            }                        }                        else                        {                            dic.Add("ReturnCode", "未录入行程!");                        }                        dic.Add("ReturnCodeAir", dic["ReturnCode"]);                        dic.Add("VisitStartDate", _DelegationInfo.VisitStartDate.ToString("yyyy年MM月dd日"));                        dic.Add("VisitEndDate", _DelegationInfo.VisitEndDate.ToString("yyyy年MM月dd日"));                        if (dic.ContainsKey("VisitStartDate") && dic.ContainsKey("VisitEndDate"))                        {                            TimeSpan sp = _DelegationInfo.VisitEndDate.Subtract(_DelegationInfo.VisitStartDate);                            dic.Add("Day", sp.Days.ToString());                        }                        dic.Add("VisitCountry", _DelegationInfo.VisitCountry);                        dic.Add("ClientUnit", _DelegationInfo.ClientUnit);                        //var Names = string.Join("、", DeleClientList.Select(it => it.Name).ToList()).TrimEnd('、');                        //dic.Add("Names", Names);                        NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);                        Aspose.Words.Tables.Table table1 = allTables[0] as Aspose.Words.Tables.Table;                        decimal dac1totalPrice = 0.00M;                        int accommodationStartIndex = 6, foodandotherStartIndex = 22;                        foreach (var dac in dac1)                        {                            if (dac.SubTotal == 0.00M)                            {                                continue;                            }                            //builder.MoveToCell(0, accommodationStartIndex, 0, 0);                            //builder.Write(DeleClientList[i].LastName + DeleClientList[i].Name);                             builder.MoveToCell(0, accommodationStartIndex, 1, 0);                            builder.Write(GetEnterExitCostExportCity(placeData, dac.NationalTravelFeeId));                            builder.MoveToCell(0, accommodationStartIndex, 2, 0);                            string currency = _CurrDatas.Find(it => it.Id == dac.Currency)?.Remark ?? "Unknown";                            builder.Write(currency);//币种                            builder.MoveToCell(0, accommodationStartIndex, 3, 0);                            builder.Write(dac.Cost.ToString("#0.00"));//标准                            builder.MoveToCell(0, accommodationStartIndex, 4, 0);                            builder.Write("");//人数                            builder.MoveToCell(0, accommodationStartIndex, 5, 0);                            builder.Write("");//天数                            builder.MoveToCell(0, accommodationStartIndex, 6, 0);                            builder.Write(dac.SubTotal.ToString("#0.00"));//小计                            builder.MoveToCell(0, accommodationStartIndex, 7, 0);                            decimal rate = 0.00M;                            rate = rateDatas.Find(it => it.CurrencyName.Equals(currency))?.Rate ?? 0.00M;                            builder.Write(rate.ToString("#0.0000"));//汇率                            builder.MoveToCell(0, accommodationStartIndex, 8, 0);                            decimal rbmPrice = dac.SubTotal;                            builder.Write(rbmPrice.ToString("#0.00"));//折合人民币                            accommodationStartIndex++;                            dac1totalPrice += Convert.ToDecimal(rbmPrice.ToString("#0.00"));                        }                        dic.Add("dac1totalPrice", dac1totalPrice.ToString("#0.00"));                        for (int i = 21; i > (dac1.Count == 0 ? 1 : dac1.Count) + 6; i--)                        {                            table1.Rows.RemoveAt(i - 1);                            foodandotherStartIndex--;                        }                        if (dac2.Count == dac3.Count)//国家 币种 金额                        {                            for (int i = 0; i < dac2.Count; i++)                            {                                dac2[i].SubTotal = dac2[i].SubTotal + dac3[i].SubTotal; //小计                                dac2[i].Cost = dac3[i].Cost + dac2[i].Cost; //标准                            }                        }                        decimal dac2totalPrice = 0.00M;                        foreach (var dac in dac2)                        {                            if (dac.SubTotal == 0)                            {                                continue;                            }                            builder.MoveToCell(0, foodandotherStartIndex, 1, 0);                            builder.Write(GetEnterExitCostExportCity(placeData, dac.NationalTravelFeeId));                            builder.MoveToCell(0, foodandotherStartIndex, 2, 0);                            string currency = _CurrDatas.Find(it => it.Id == dac.Currency)?.Remark ?? "Unknown";                            builder.Write(currency);//币种                            builder.MoveToCell(0, foodandotherStartIndex, 3, 0);                            builder.Write(dac.Cost.ToString("#0.00"));//标准                            builder.MoveToCell(0, foodandotherStartIndex, 4, 0);                            builder.Write("");//人数                            builder.MoveToCell(0, foodandotherStartIndex, 5, 0);                            builder.Write("");//天数                            builder.MoveToCell(0, foodandotherStartIndex, 6, 0);                            builder.Write(dac.SubTotal.ToString("#0.00"));//小计                            builder.MoveToCell(0, foodandotherStartIndex, 7, 0);                            decimal rate = 0.00M;                            rate = rateDatas.Find(it => it.CurrencyName.Equals(currency))?.Rate ?? 0.00M;                            builder.Write(rate.ToString("#0.0000"));//汇率                            builder.MoveToCell(0, foodandotherStartIndex, 8, 0);                            decimal rbmPrice = dac.SubTotal;                            builder.Write(rbmPrice.ToString("#0.00"));//折合人民币                            foodandotherStartIndex++;                            dac2totalPrice += Convert.ToDecimal(rbmPrice.ToString("#0.00"));                        }                        dic.Add("dac2totalPrice", dac2totalPrice.ToString("#0.00"));                        for (int i = foodandotherStartIndex + (15 - dac2.Count); i > (dac2.Count == 0 ? 1 : 0) + foodandotherStartIndex; i--)                        {                            table1.Rows.RemoveAt(i - 1);                        }                        dic.Add("CityTranffic", _EnterExitCosts.CityTranffic.ToString("#0.00"));                        string otherFeeStr = "";                        if (_EnterExitCosts.Visa > 0) otherFeeStr += $"签证费: {_EnterExitCosts.Visa.ToString("#0.00")} 元,";                        if (_EnterExitCosts.Safe > 0) otherFeeStr += $"保险费: {_EnterExitCosts.Safe.ToString("#0.00")} 元,";                        if (_EnterExitCosts.Ticket > 0) otherFeeStr += $"参展门票费: {_EnterExitCosts.Ticket.ToString("#0.00")} 元,";                        if (otherFeeStr.Length > 0)                        {                            otherFeeStr = otherFeeStr.Substring(0, otherFeeStr.Length - 1);                            otherFeeStr = $"({otherFeeStr})";                            dic.Add("OtherFeeStr", otherFeeStr);                        }                        //总计                        decimal allPrice = dac1totalPrice + dac2totalPrice + _EnterExitCosts.Visa + _EnterExitCosts.Safe + _EnterExitCosts.Ticket;                        //国际旅费                        string outsideJJ = "";                        string allPriceJJ = "";                        if (_EnterExitCosts.SumJJC == 1)                        {                            outsideJJ = string.Format(@"经济舱:{0} 元/人", _EnterExitCosts.AirJJ.ToString("#0.00"));                            allPriceJJ = string.Format(@"经济舱:{0} 元/人", (allPrice + _EnterExitCosts.OutsideJJPay).ToString("#0.00"));                        }                        string outsideGW = "";                        string allPriceGW = "";                        if (_EnterExitCosts.SumGWC == 1)                        {                            outsideGW = string.Format(@"公务舱:{0} 元/人", _EnterExitCosts.AirGW.ToString("#0.00"));                            allPriceGW = string.Format(@"公务舱:{0} 元/人", (allPrice + _EnterExitCosts.OutsaideGWPay).ToString("#0.00"));                        }                        if (_EnterExitCosts.SumJJC == 1 || _EnterExitCosts.SumGWC == 1)                        {                            string InTravelPriceStr = string.Format(@" ({0} {1})", outsideJJ, outsideGW);                            dic.Add("InTravelPrice", InTravelPriceStr);                            string FinalSumPriceStr = string.Format(@" ({0} {1})", allPriceJJ, allPriceGW);                            dic.Add("FinalSumPrice", FinalSumPriceStr);                        }                        //dic.Add("VisaPay", _EnterExitCosts.Visa.ToString("#0.00"));                        //dic.Add("SafePay", _EnterExitCosts.Safe.ToString("#0.00"));                        //dic.Add("YiMiao", _EnterExitCosts.YiMiao.ToString("#0.00"));                        foreach (var key in dic.Keys)                        {                            builder.MoveToBookmark(key);                            builder.Write(dic[key]);                        }                        //模板文件名                        string strFileName = $"{_DelegationInfo.TeamName}因公出国(境)经费测算明细表.docx";                        doc.Save(AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/File/" + strFileName);                        string url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/EnterExitCost/File/" + strFileName;                        return Ok(JsonView(true, "成功", new { Url = url }));                    }                    else if (dto.SubTypeId == 1007) //1007(四川省商务厅出国经费财政先行审核表)                    {                        //获取模板                        string tempPath = (AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/Temp/四川省商务厅出国经费财政先行审核表.xls");                        //载入模板                        WorkbookDesigner designer = new WorkbookDesigner();                        designer.Workbook = new Workbook(tempPath);                        Dictionary<string, string> dic = new Dictionary<string, string>();                        if (blackCode != null && !string.IsNullOrWhiteSpace(blackCode.BlackCode))                        {                            List<string> list = new List<string>();                            try                            {                                var spilitArr = Regex.Split(blackCode.BlackCode, "\r\n");                                foreach (var item in spilitArr)                                {                                    var spDotandEmpty = item.Split('.')[1].Split(' ').Where(x => !string.IsNullOrEmpty(x)).ToList();                                    var depCode = spDotandEmpty[2].Substring(0, 3);                                    var arrCode = spDotandEmpty[2].Substring(3, 3);                                    string depName = threeCodes.Find(it => it.Three.Equals(depCode))?.City ?? "Unknwon",                                           arrName = threeCodes.Find(it => it.Three.Equals(arrCode))?.City ?? "Unknown";                                    list.Add(depName);                                    list.Add(arrName);                                }                                list = list.Distinct().ToList();                                dic.Add("ReturnCode", string.Join("-", list).TrimEnd('-'));                            }                            catch (Exception)                            {                                dic.Add("ReturnCode", "行程录入不正确!");                            }                        }                        else                        {                            dic.Add("ReturnCode", "未录入行程!");                        }                        dic.Add("ReturnCodeAir", dic["ReturnCode"]);                        dic.Add("VisitStartDate", _DelegationInfo.VisitStartDate.ToString("yyyy年MM月dd日"));                        dic.Add("VisitEndDate", _DelegationInfo.VisitEndDate.ToString("yyyy年MM月dd日"));                        if (dic.ContainsKey("VisitStartDate") && dic.ContainsKey("VisitEndDate"))                        {                            TimeSpan sp = _DelegationInfo.VisitEndDate.Subtract(_DelegationInfo.VisitStartDate);                            dic.Add("Day", sp.Days.ToString());                        }                        dic.Add("VisitCountry", _DelegationInfo.VisitCountry);                        dic.Add("ClientUnit", _DelegationInfo.ClientUnit);                        var Names = string.Join("、", DeleClientList.Select(it => it.Name).ToList()).TrimEnd('、');                        designer.SetDataSource("ClientUnit", _DelegationInfo.ClientUnit);                        designer.SetDataSource("VisitCountry", _DelegationInfo.VisitCountry);                        designer.SetDataSource("Group", _DelegationInfo.TeamName);                        designer.SetDataSource("ClientUnitTitle", _DelegationInfo.TeamName);                        designer.SetDataSource("Name", Names);                        designer.SetDataSource("VisitStartDate", dic["VisitStartDate"] + "-" + dic["VisitEndDate"]);                        designer.SetDataSource("Day", dic["Day"] + "天");                        designer.SetDataSource("ReturnCode", dic["ReturnCode"]);                        designer.SetDataSource("ReturnCodeAir", dic["ReturnCodeAir"]);                        int startIndex = 10;                        const int startIndexcopy = 10;                        if (dac2.Count == dac3.Count)//国家 币种 金额                        {                            for (int i = 0; i < dac2.Count; i++)                            {                                dac2[i].SubTotal = dac2[i].SubTotal + dac3[i].SubTotal; //小计                                dac2[i].Cost = dac3[i].Cost + dac2[i].Cost; //标准                            }                        }                        DataTable dtdac1 = new DataTable();                        List<string> place = new List<string>();                        dtdac1.Columns.AddRange(new DataColumn[] {                            new DataColumn(){ ColumnName = "city"},                            new DataColumn(){ ColumnName = "curr"},                            new DataColumn(){ ColumnName = "criterion"},                            new DataColumn(){ ColumnName = "number",DataType = typeof(int)},                            new DataColumn(){ ColumnName = "day",DataType = typeof(int)},                            new DataColumn(){ ColumnName = "cost",  DataType = typeof(decimal)},                            new DataColumn(){ ColumnName = "rate",  DataType = typeof(decimal) },                            new DataColumn(){ ColumnName = "costRMB",  DataType = typeof(decimal) },                        });                        DataTable dtdac2 = new DataTable();                        dtdac2.Columns.AddRange(new DataColumn[] {                            new DataColumn(){ ColumnName = "city"},                            new DataColumn(){ ColumnName = "curr"},                            new DataColumn(){ ColumnName = "criterion"},                            new DataColumn(){ ColumnName = "number",DataType = typeof(int)},                            new DataColumn(){ ColumnName = "day",DataType = typeof(int)},                            new DataColumn(){ ColumnName = "cost",  DataType = typeof(decimal)},                            new DataColumn(){ ColumnName = "rate",  DataType = typeof(decimal) },                            new DataColumn(){ ColumnName = "costRMB",DataType = typeof(decimal)},                        });                        dtdac1.TableName = "tb1";                        dtdac2.TableName = "tb2";                        decimal dac1totalPrice = 0.00M, dac2totalPrice = 0.00M;                        foreach (var item in dac1)                        {                            item.Place = GetEnterExitCostExportCity(placeData, item.NationalTravelFeeId);                            if (place.Contains(item.Place))                            {                                continue;                            }                            DataRow row = dtdac1.NewRow();                            row["city"] = item.Place;                            string currency = _CurrDatas.Find(it => it.Id == item.Currency)?.Remark ?? "Unknwon";                            decimal rate = rateDatas.Find(it => it.CurrencyName == currency)?.Rate ?? 0.00M;                            row["curr"] = currency;                            row["rate"] = rate.ToString("#0.0000");                            row["criterion"] = item.Cost.ToString("#0.00");                            row["number"] = 1;                            row["day"] = dac1.FindAll(x => x.NationalTravelFeeId == item.NationalTravelFeeId).Count;                            //row["costRMB"] = rbmPrice;                            dtdac1.Rows.Add(row);                            place.Add(item.Place);                        }                        place = new List<string>();                        foreach (var item in dac2)                        {                            item.Place = GetEnterExitCostExportCity(placeData, item.NationalTravelFeeId);                            if (place.Contains(item.Place))                            {                                continue;                            }                            DataRow row = dtdac2.NewRow();                            row["city"] = item.Place;                            string currency = _CurrDatas.Find(it => it.Id == item.Currency)?.Remark ?? "Unknwon";                            decimal rate = rateDatas.Find(it => it.CurrencyName == currency)?.Rate ?? 0.00M;                            row["curr"] = currency;                            row["rate"] = rate.ToString("#0.0000");                            row["criterion"] = item.Cost.ToString("#0.00");                            row["number"] = 1;                            row["day"] = dac2.FindAll(x => x.NationalTravelFeeId == item.NationalTravelFeeId).Count;                            //row["cost"] = item.SubTotal;                            //row["costRMB"] = rbmPrice;                            dtdac2.Rows.Add(row);                            place.Add(item.Place);                            //dac2totalPrice += rbmPrice;                        }                        dac1totalPrice = dac1.Sum(it => it.SubTotal);                        dac2totalPrice = dac2.Sum(it => it.SubTotal);                        designer.SetDataSource("dac1totalPrice", dac1totalPrice.ToString("#0.00"));                        designer.SetDataSource("dac2totalPrice", dac2totalPrice);                        designer.SetDataSource("cityTranffic", @$"其中:国外城市间机票费: {_EnterExitCosts.CityTranffic.ToString("#0.00")} 元");                        designer.SetDataSource("sumCityTranffic", @$"{_EnterExitCosts.CityTranffic.ToString("#0.00")} ");                        string cell4Str = $"  4.国际旅费:经济舱:{_EnterExitCosts.AirJJ.ToString("#0.00")} 元/人,公务舱:{_EnterExitCosts.AirGW.ToString("#0.00")} 元/人";                        string cellStr = $"  5.其他费用(";                        if (_EnterExitCosts.Visa > 0) cellStr += $"签证费:{_EnterExitCosts.Visa.ToString("#0.00")}元,";                        if (_EnterExitCosts.YiMiao > 0) cellStr += $"疫苗费:{_EnterExitCosts.YiMiao.ToString("#0.00")}元,";                        if (_EnterExitCosts.HeSuan > 0) cellStr += $"核酸费:{_EnterExitCosts.HeSuan.ToString("#0.00")}元,";                        if (_EnterExitCosts.Safe > 0) cellStr += $"保险费:{_EnterExitCosts.Safe.ToString("#0.00")}元,";                        if (_EnterExitCosts.Ticket > 0) cellStr += $"参展门票费:{_EnterExitCosts.Ticket.ToString("#0.00")}元,";                        if (_EnterExitCosts.Service > 0) cellStr += $"服务费:{_EnterExitCosts.Service.ToString("#0.00")}元,";                        if (cellStr.Length > 8)                        {                            cellStr = cellStr.Substring(0, cellStr.Length - 1);                        }                        cellStr += ")";                        decimal otherFee = _EnterExitCosts.Visa + _EnterExitCosts.YiMiao + _EnterExitCosts.HeSuan + _EnterExitCosts.Safe + _EnterExitCosts.Ticket + _EnterExitCosts.Service;                        decimal s = dac1totalPrice + dac2totalPrice + _EnterExitCosts.OutsideJJPay + _EnterExitCosts.OutsaideGWPay + otherFee;                        decimal pxFee = dac4.Sum(it => it.Cost);                        decimal glvFee = _EnterExitCosts.OutsideJJPay + _EnterExitCosts.OutsaideGWPay;                        string celllastStr1 = "";                        if (dac1totalPrice > 0) celllastStr1 += $"住宿费 {dac1totalPrice.ToString("#0.00")} 元";                        if (dac2totalPrice > 0) celllastStr1 += $",伙食费和公杂费 {dac2totalPrice.ToString("#0.00")} 元";                        if (pxFee > 0) celllastStr1 += $",培训费 {pxFee.ToString("#0.00")} 元";                        celllastStr1 += $",国际旅费       元";                        if (otherFee > 0) celllastStr1 += $",其他费用 {otherFee.ToString("#0.00")} 元";                        string celllastStr = $"    经审核,{celllastStr1},本次出国经费预算合计为         元。其中:市本级安排      。";                        designer.SetDataSource("cell4Str", cell4Str);                        designer.SetDataSource("cellStr", cellStr);                        designer.SetDataSource("cellSum", (_EnterExitCosts.Visa + _EnterExitCosts.Safe).ToString("#0.00"));                        designer.SetDataSource("cellSum4", (_EnterExitCosts.OutsideJJPay + _EnterExitCosts.OutsaideGWPay).ToString("#0.00"));                        designer.SetDataSource("celllastStr", celllastStr);                        Workbook wb = designer.Workbook;                        var sheet = wb.Worksheets[0];                        //绑定datatable数据集                        designer.SetDataSource(dtdac1);                        designer.SetDataSource(dtdac2);                        designer.Process();                        var rowStart = dtdac1.Rows.Count;                        while (rowStart > 0)                        {                            sheet.Cells[startIndex, 8].Formula = $"=G{startIndex + 1} * H{startIndex + 1}";                            sheet.Cells[startIndex, 6].Formula = $"=E{startIndex + 1} * F{startIndex + 1} * D{startIndex + 1}";                            startIndex++;                            rowStart--;                        }                        sheet.Cells[startIndex, 8].Formula = $"=SUM(I{startIndexcopy + 1}: I{startIndex})";                        startIndex += 1; //总计行                        rowStart = dtdac2.Rows.Count;                        while (rowStart > 0)                        {                            sheet.Cells[startIndex, 8].Formula = $"= G{startIndex + 1} * H{startIndex + 1}";                            sheet.Cells[startIndex, 6].Formula = $"= E{startIndex + 1} *  F{startIndex + 1} * D{startIndex + 1}";                            startIndex++;                            rowStart--;                        }                        sheet.Cells[startIndex, 8].Formula = $"=SUM(I{startIndexcopy + dtdac1.Rows.Count + 2}: I{startIndex})";                        wb.CalculateFormula(true);                        //模板文件名                        string strFileName = $"{_DelegationInfo.TeamName}-四川省商务厅出国经费财政先行审核表{DateTime.Now.ToString("yyyyMMddHHmmss")}.xls"; ;//$".xls";                        designer.Workbook.Save(AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/File/" + strFileName);                        string url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/EnterExitCost/File/" + strFileName;                        return Ok(JsonView(true, "成功", new { Url = url }));                    }                    else if (dto.SubTypeId == 1066) //成都市因公临时出国任务和预算审批意见表(外专培训团专用)                    {                        //获取模板                        string tempPath = (AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/Temp/成都市因公临时出国任务和预算审批意见表.docx");                        //载入模板                        Document doc = new Document(tempPath);                        DocumentBuilder builder = new DocumentBuilder(doc);                        Dictionary<string, string> dic = new Dictionary<string, string>();                        dic.Add("GroupName", _DelegationInfo.TeamName);                        dic.Add("ClientUnit", _DelegationInfo.ClientUnit);                        string missionLeader = "";  //团负责人默认接团客户名单第一个人                        string missionLeaderJob = "";//负责人job                        int groupNumber = 0; //团人数                        if (DeleClientList.Count > 0)                        {                            missionLeader = DeleClientList[0]?.Name ?? "";                            missionLeaderJob = DeleClientList[0]?.Job ?? "";                        }                        dic.Add("MissionLeader", missionLeader); //团负责人                        dic.Add("MissionLeaderJob", missionLeaderJob); //团负责人job                        dic.Add("GroupNumber", _DelegationInfo.VisitPNumber.ToString()); //团人数                        #region MyRegion                        //if (blackCode != null && !string.IsNullOrWhiteSpace(blackCode.BlackCode))                        //{                        //    List<string> list = new List<string>();                        //    try                        //    {                        //        var spilitArr = Regex.Split(blackCode.BlackCode, "\r\n");                        //        foreach (var item in spilitArr)                        //        {                        //            var spDotandEmpty = item.Split('.')[1].Split(' ').Where(x => !string.IsNullOrEmpty(x)).ToList();                        //            var depCode = spDotandEmpty[2].Substring(0, 3);                        //            var arrCode = spDotandEmpty[2].Substring(3, 3);                        //            string depName = threeCodes.Find(it => it.Three.Equals(depCode)).City,                        //                   arrName = threeCodes.Find(it => it.Three.Equals(arrCode)).City;                        //            list.Add(depName);                        //            list.Add(arrName);                        //        }                        //        list = list.Distinct().ToList();                        //        dic.Add("ReturnCode", string.Join("-", list).TrimEnd('-'));                        //    }                        //    catch (Exception)                        //    {                        //        dic.Add("ReturnCode", "行程录入不正确!");                        //    }                        //}                        //else                        //{                        //    dic.Add("ReturnCode", "未录入行程!");                        //}                        List<string> countrys = _groupRepository.GroupSplitCountry(_DelegationInfo.VisitCountry);                        dic.Add("ReturnCode", string.Join("、", countrys));                        #endregion                        //dic.Add("ReturnCodeAir", dic["ReturnCode"]);                        //dic.Add("VisitStartDate", _DelegationInfo.VisitStartDate.ToString("yyyy年MM月dd日"));                        //dic.Add("VisitEndDate", _DelegationInfo.VisitEndDate.ToString("yyyy年MM月dd日"));                        //if (dic.ContainsKey("VisitStartDate") && dic.ContainsKey("VisitEndDate"))                        //{                        //    TimeSpan sp = _DelegationInfo.VisitEndDate.Subtract(_DelegationInfo.VisitStartDate);                        //    dic.Add("Day", sp.Days.ToString());                        //}                        dic.Add("Day", _DelegationInfo.VisitDays.ToString());                        dic.Add("CultivateDay", dac4.Count.ToString()); //培训天数                                                                        // dic.Add("VisitCountry", _DelegationInfo.VisitCountry);                        NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);                        Aspose.Words.Tables.Table table1 = allTables[0] as Aspose.Words.Tables.Table;                        //培训人员名单                        int cultivateRowIndex = 7;                        foreach (var item in DeleClientList)                        {                            builder.MoveToCell(0, cultivateRowIndex, 0, 0);                            builder.Write(item.Name);                            builder.MoveToCell(0, cultivateRowIndex, 1, 0);                            builder.Write(item.Sex == 0 ? "男" : item.Sex == 1 ? "女" : "");                            builder.MoveToCell(0, cultivateRowIndex, 2, 0);                            string birthDay = "";                            if (item.Birthday != null)                            {                                DateTime dt = Convert.ToDateTime(item.Birthday);                                birthDay = $"{dt.Year}.{dt.Month}";                            }                            builder.Write(birthDay);                            builder.MoveToCell(0, cultivateRowIndex, 3, 0);                            builder.Write(item.Company);                            builder.MoveToCell(0, cultivateRowIndex, 4, 0);                            builder.Write(item.Job);                            cultivateRowIndex++;                        }                        //删除多余行                        //cultivateRowIndex -= 2;                        int delRows = 10 + 7 - cultivateRowIndex;                        if (delRows > 0)                        {                            for (int i = 0; i < delRows; i++)                            {                                table1.Rows.RemoveAt(cultivateRowIndex);                                //cultivateRowIndex++;                            }                        }                        decimal hotelFeeTotal = dac1.Sum(it => it.SubTotal);//住宿费                        dic.Add("HotelFeeTotal", hotelFeeTotal.ToString("#0.00"));                        decimal mealsFeeTotal = dac2.Sum(it => it.SubTotal);//伙食费                        dic.Add("MealsFeeTotal", mealsFeeTotal.ToString("#0.00"));                        decimal miscellaneousFeeTotal = dac3.Sum(it => it.SubTotal);//公杂费                        dic.Add("MiscellaneousFeeTotal", miscellaneousFeeTotal.ToString("#0.00"));                        decimal trainingFeeTotal = dac4.Sum(it => it.SubTotal);//培训费                        dic.Add("TrainingFeeTotal", trainingFeeTotal.ToString("#0.00"));                        decimal cityTranfficFeeToatal = _EnterExitCosts.CityTranffic; //城市区间交通费                        dic.Add("CityTranfficFeeToatal", cityTranfficFeeToatal.ToString("#0.00"));//                        //其他费用                        decimal otherFeeTotal = _EnterExitCosts.Visa + _EnterExitCosts.Safe + _EnterExitCosts.Ticket + _EnterExitCosts.YiMiao + _EnterExitCosts.HeSuan + _EnterExitCosts.Service;                        dic.Add("OtherFeeTotal", otherFeeTotal.ToString("#0.00"));                        //其他费用合计                        decimal _otherFeeTotal = hotelFeeTotal + mealsFeeTotal + miscellaneousFeeTotal + trainingFeeTotal + cityTranfficFeeToatal + otherFeeTotal;                        decimal _jjcFeeToatal = _EnterExitCosts.AirJJ + _otherFeeTotal; //经济舱                        decimal _gwcFeeToatal = _EnterExitCosts.AirGW + _otherFeeTotal; //公务舱                        //公务舱合计                        //国际旅费                        string outsideJJ = "";                        string allPriceJJ = "";                        if (_EnterExitCosts.SumJJC == 1 && _EnterExitCosts.SumGWC == 0)                        {                            dic.Add("AirFeeTotal", _EnterExitCosts.AirJJ.ToString("#0.00"));                            dic.Add("FeeTotal", _jjcFeeToatal.ToString("#0.00"));                        }                        if (_EnterExitCosts.SumGWC == 1 && _EnterExitCosts.SumJJC == 0)                        {                            dic.Add("AirFeeTotal", _EnterExitCosts.AirGW.ToString("#0.00"));                            dic.Add("FeeTotal", _gwcFeeToatal.ToString("#0.00"));                        }                        if (_EnterExitCosts.SumJJC == 1 && _EnterExitCosts.SumGWC == 1)                        {                            string airFeeTotalStr = string.Format(@$"经济舱:{_EnterExitCosts.AirJJ.ToString("#0.00")} 公务舱:{_EnterExitCosts.AirGW.ToString("#0.00")}");                            dic.Add("AirFeeTotal", airFeeTotalStr);                            string feeTotalStr = string.Format(@$"经济舱:{_jjcFeeToatal.ToString("#0.00")} 公务舱:{_gwcFeeToatal.ToString("#0.00")}");                            dic.Add("FeeTotal", feeTotalStr);                        }                        foreach (var key in dic.Keys)                        {                            builder.MoveToBookmark(key);                            builder.Write(dic[key]);                        }                        //模板文件名                        string strFileName = $"{_DelegationInfo.TeamName}-成都市因公临时出国任务和预算审批意见表(外专培训团专用).docx";                        doc.Save(AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/File/" + strFileName);                        string url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/EnterExitCost/File/" + strFileName;                        return Ok(JsonView(true, "成功", new { Url = url }));                    }                }                else if (dto.ExportType == 2) //表格                {                    //利用键值对存放数据                    Dictionary<string, string> dic = new Dictionary<string, string>();                    dic.Add("VisitStartDate", _DelegationInfo.VisitStartDate.ToString("yyyy年MM月dd日"));                    dic.Add("VisitEndDate", _DelegationInfo.VisitEndDate.ToString("yyyy年MM月dd日"));                    TimeSpan sp = _DelegationInfo.VisitEndDate.Subtract(_DelegationInfo.VisitStartDate);                    dic.Add("Day", sp.Days.ToString());                    dic.Add("VisitCountry", _DelegationInfo.VisitCountry);                    if (dto.SubTypeId == 1008) //1008(派员单位出(境)任务和预算审批意见表)                    {                        //获取模板                        string tempPath = (AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/Temp/派员单位出(境)任务和预算审批意见表.docx");                        //载入模板                        Document doc = new Document(tempPath);                        DocumentBuilder builder = new DocumentBuilder(doc);                        dic.Add("TeamName", _DelegationInfo.TeamName);                        dic.Add("ClientUnit", _DelegationInfo.ClientUnit);                        //dic.Add("TellPhone", _DelegationInfo.TellPhone);                        string missionLeaderName = "",                               missionLeaderJob = "";                        if (DeleClientList.Count > 0)                        {                            missionLeaderName = DeleClientList[0].Name;                            missionLeaderJob = DeleClientList[0].Job;                        }                        dic.Add("MissionLeaderName", missionLeaderName);                        dic.Add("MissionLeaderJob", missionLeaderJob);                        dic.Add("VisitPNumber", _DelegationInfo.VisitPNumber.ToString());                        dic.Add("VisitPurpose", _DelegationInfo.VisitPurpose);                        NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);                        Aspose.Words.Tables.Table table1 = allTables[0] as Aspose.Words.Tables.Table;                        int rowCount = 10;//总人数行                        int startRowIndex = 7; //起始行                        for (int i = 0; i < DeleClientList.Count; i++)                        {                            builder.MoveToCell(0, startRowIndex, 0, 0);                            builder.Write(DeleClientList[i].Name); //出国人员姓名                            builder.MoveToCell(0, startRowIndex, 1, 0);                            string sex = DeleClientList[i].Sex == 0 ? "男" : DeleClientList[i].Sex == 1 ? "女" : "";                            builder.Write(sex);//性别                            builder.MoveToCell(0, startRowIndex, 2, 0);                            builder.Write(Convert.ToDateTime(DeleClientList[i].Birthday).ToString("yyyy年MM月dd日"));//出生年月                            builder.MoveToCell(0, startRowIndex, 3, 0);                            builder.Write(DeleClientList[i].Company);//工作单位                            builder.MoveToCell(0, startRowIndex, 4, 0);                            builder.Write(DeleClientList[i].Job);//职务及级别                            builder.MoveToCell(0, startRowIndex, 5, 0);                            builder.Write("");//人员属性                            builder.MoveToCell(0, startRowIndex, 6, 0);                            builder.Write("");//上次出国时间                            startRowIndex++;                        }                        int nullRow = rowCount - DeleClientList.Count;//空行                        for (int i = 0; i < nullRow; i++)                        {                            table1.Rows.Remove(table1.Rows[startRowIndex]);                        }                        foreach (var key in dic.Keys)                        {                            builder.MoveToBookmark(key);                            builder.Write(dic[key]);                        }                        //模板文件名                        string strFileName = $"派员单位出(境)任务和预算审批意见表.docx";                        doc.Save(AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/File/" + strFileName);                        string url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/EnterExitCost/File/" + strFileName;                        return Ok(JsonView(true, "成功", new { Url = url }));                    }                    else if (dto.SubTypeId == 1009)//1009(省级单位出(境)经费报销单)                    {                        //获取模板                        string tempPath = (AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/Temp/省级单位出(境)经费报销单.docx");                        //载入模板                        Document doc = new Document(tempPath);                        DocumentBuilder builder = new DocumentBuilder(doc);                        dic.Add("GroupClient", _DelegationInfo.ClientUnit);                        var Names = string.Join("、", DeleClientList.Select(x => x.Name)).TrimEnd('、');                        dic.Add("Names", Names);                        int accommodationRows = 12, foodandotherRows = 12;                        var Dac1currCn = dac1.GroupBy(x => x.Currency).Select(x => x.Key).ToList();                        var Dac2currCn = dac2.GroupBy(x => x.Currency).Select(x => x.Key).ToList();                        NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);                        Aspose.Words.Tables.Table table1 = allTables[0] as Aspose.Words.Tables.Table;                        int accommodationStartIndex = 6;                        decimal dac1totalPrice = 0.00M;                        foreach (var dac in dac1)                        {                            if (dac.SubTotal == 0)                            {                                continue;                            }                            //builder.MoveToCell(0, accommodationStartIndex, 0, 0);                            //builder.Write(DeleClientList[i].LastName + DeleClientList[i].Name);                             builder.MoveToCell(0, accommodationStartIndex, 1, 0);                            builder.Write(GetEnterExitCostExportCity(placeData, dac.NationalTravelFeeId));//城市                            builder.MoveToCell(0, accommodationStartIndex, 2, 0);                            string currency = _CurrDatas.Find(it => it.Id == dac.Currency)?.Remark ?? "Unknwon";                            builder.Write(currency);//币种                            builder.MoveToCell(0, accommodationStartIndex, 3, 0);                            builder.Write(dac.Cost.ToString("#0.00"));//标准                            builder.MoveToCell(0, accommodationStartIndex, 4, 0);                            builder.Write("");//人数                            builder.MoveToCell(0, accommodationStartIndex, 5, 0);                            builder.Write("");//天数                            builder.MoveToCell(0, accommodationStartIndex, 6, 0);                            builder.Write(dac.SubTotal.ToString("#0.00"));//小计                            builder.MoveToCell(0, accommodationStartIndex, 7, 0);                            decimal rate = rateDatas.Find(it => it.CurrencyName == currency)?.Rate ?? 0.00M;                            builder.Write(rate.ToString("#0.0000"));//汇率                            builder.MoveToCell(0, accommodationStartIndex, 8, 0);                            decimal rbmPrice = rate * dac.SubTotal;                            builder.Write(rbmPrice.ToString("#0.00"));//折合人民币                            accommodationStartIndex++;                            dac1totalPrice += rbmPrice;                        }                        dic.Add("dac1totalPrice", dac1totalPrice.ToString("#0.00"));                        builder.MoveToCell(0, accommodationStartIndex, 1, 0);                        builder.Write("小计");                        builder.MoveToCell(0, accommodationStartIndex, 8, 0);                        builder.Write(dac1totalPrice.ToString("#0.00"));                        accommodationStartIndex++;                        int nullRow = accommodationRows - dac1.Count;                        //删除空行                        //if (nullRow > 0)                        //{                        //    int rowIndex = accommodationStartIndex;                        //    for (int i = 0; i < nullRow; i++)                        //    {                        //        Row row = table1.Rows[rowIndex];                        //        row.Remove();                                //        rowIndex++;                        //    }                        //}                        if (dac2.Count == dac3.Count)//国家 币种 金额                        {                            for (int i = 0; i < dac2.Count; i++)                            {                                dac2[i].SubTotal = dac2[i].SubTotal + dac3[i].SubTotal; //小计                                dac2[i].Cost = dac3[i].Cost + dac2[i].Cost; //标准                            }                        }                        int foodandotherStartIndex = 19;//                        decimal dac2totalPrice = 0.00M;                        foreach (var dac in dac2)                        {                            if (dac.SubTotal == 0)                            {                                continue;                            }                            //foodandotherStartIndex = 12;                            builder.MoveToCell(0, foodandotherStartIndex, 1, 0);                            builder.Write(GetEnterExitCostExportCity(placeData, dac.NationalTravelFeeId));//城市                            builder.MoveToCell(0, foodandotherStartIndex, 2, 0);                            string currency = _CurrDatas.Find(it => it.Id == dac.Currency)?.Remark ?? "Unknwon";                            builder.Write(currency);//币种                            builder.MoveToCell(0, foodandotherStartIndex, 3, 0);                            builder.Write(dac.Cost.ToString("#0.00"));//标准                            builder.MoveToCell(0, foodandotherStartIndex, 4, 0);                            builder.Write("");//人数                            builder.MoveToCell(0, foodandotherStartIndex, 5, 0);                            builder.Write("");//天数                            builder.MoveToCell(0, foodandotherStartIndex, 6, 0);                            builder.Write(dac.SubTotal.ToString("#0.00"));//小计                            builder.MoveToCell(0, foodandotherStartIndex, 7, 0);                            decimal rate = rateDatas.Find(it => it.CurrencyName == currency)?.Rate ?? 0.00M;                            builder.Write(rate.ToString("#0.0000"));//汇率                            builder.MoveToCell(0, foodandotherStartIndex, 8, 0);                            decimal rbmPrice = rate * dac.SubTotal;                            builder.Write(rbmPrice.ToString("#0.00"));//折合人民币                            foodandotherStartIndex++;                            dac2totalPrice += rbmPrice;                        }                        dic.Add("dac2totalPrice", dac2totalPrice.ToString("#0.00"));                        //删除空行                        if (dac2.Count < foodandotherRows)                        {                            //int nullRow = accommodationRows - dac2.Count;                            //while (table2.Rows.Count > dac2.Count)                            //{                            //    table2.Rows.RemoveAt(dac2.Count);                            //}                        }                        dic.Add("CityTranffic", _EnterExitCosts.CityTranffic.ToString("#0.00"));                        string otherFeeStr = "";                        if (_EnterExitCosts.Visa > 0) otherFeeStr += $"签证费: {_EnterExitCosts.Visa.ToString("#0.00")} 元,";                        if (_EnterExitCosts.Safe > 0) otherFeeStr += $"保险费: {_EnterExitCosts.Safe.ToString("#0.00")} 元,";                        if (_EnterExitCosts.Ticket > 0) otherFeeStr += $"参展门票费: {_EnterExitCosts.Ticket.ToString("#0.00")} 元,";                        if (otherFeeStr.Length > 0)                        {                            otherFeeStr = otherFeeStr.Substring(0, otherFeeStr.Length - 1);                            otherFeeStr = $"({otherFeeStr})";                            dic.Add("OtherFeeStr", otherFeeStr);                        }                        foreach (var key in dic.Keys)                        {                            builder.MoveToBookmark(key);                            builder.Write(dic[key]);                        }                        //模板文件名                        string strFileName = $"省级单位出(境)经费报销单.docx";                        doc.Save(AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/File/" + strFileName);                        string url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/EnterExitCost/File/" + strFileName;                        return Ok(JsonView(true, "成功", new { Url = url }));                    }                }                else if (dto.ExportType == 3)                {                    if (dto.SubTypeId == 1) //团组成员名单                    {                        if (DeleClientList.Count < 1)                        {                            return Ok(JsonView(false, "团组成员暂未录入!!!"));                        }                        //获取模板                        string tempPath = (AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/Temp/dwon_团组人员列表模板.doc");                        //载入模板                        Document doc = new Document(tempPath);                        DocumentBuilder builder = new DocumentBuilder(doc);                        //获取word里所有表格                        NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);                        //获取所填表格的序数                        Aspose.Words.Tables.Table tableOne = allTables[0] as Aspose.Words.Tables.Table;                        var rowStart = tableOne.Rows[0]; //获取第1行                        //循环赋值                        for (int i = 0; i < DeleClientList.Count; i++)                        {                            builder.MoveToCell(0, i + 1, 0, 0);                            builder.Write(DeleClientList[i].Name);                            builder.MoveToCell(0, i + 1, 1, 0);                            string sex = DeleClientList[i].Sex == 0 ? "男" : DeleClientList[i].Sex == 1 ? "女" : "";                            builder.Write(sex);                            builder.MoveToCell(0, i + 1, 2, 0);                            builder.Write(Convert.ToDateTime(DeleClientList[i].Birthday).ToString("yyyy年MM月dd日"));                            builder.MoveToCell(0, i + 1, 3, 0);                            builder.Write(DeleClientList[i].Company);                            builder.MoveToCell(0, i + 1, 4, 0);                            builder.Write(DeleClientList[i].Job);                        }                        //删除多余行                        while (tableOne.Rows.Count > DeleClientList.Count + 1)                        {                            tableOne.Rows.RemoveAt(DeleClientList.Count + 1);                        }                        string strFileName = $"{_DelegationInfo.TeamName}组团人员名单({DateTime.Now.ToString("yyyyMMddHHmmss")}).doc";                        //C:/Server/File/OA2023/Office/Word/EnterExitCost/File/                        //C:\Server\File\OA2023\Office\Word\EnterExitCost\File\                        doc.Save(AppSettingsHelper.Get("WordBasePath") + "EnterExitCost/File/" + strFileName);                        string url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/EnterExitCost/File/" + strFileName;                        return Ok(JsonView(true, "成功", new { Url = url }));                    }                }                return Ok(JsonView(false, "操作失败!"));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 获取三公费用标准city        /// </summary>        /// <param name="placeData"></param>        /// <param name="nationalTravelFeeId"></param>        /// <returns></returns>        private string GetEnterExitCostExportCity(List<Grp_NationalTravelFee> placeData, int nationalTravelFeeId)        {            string _city = string.Empty;            if (placeData.Count < 1) return _city;            var data = placeData.Find(it => it.Id == nationalTravelFeeId);            if (data == null) return _city;            string country = data.Country;            string city = data.City;            if (city.Contains("其他城市") || city.Contains("所有城市")) _city = $"{country}-{city}";            else _city = city;            return _city;        }        /// <summary>        /// 团组模块 - 出入境费用 - 明细表导出        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostEnterExitCostExportDetailsList(EnterExitCostOperateDto dto)        {            var data = await _enterExitCostRep.PostEnterExitCostOperate(dto);            if (data.Code != 0)            {                return Ok(JsonView(false, data.Msg));            }                        return Ok(JsonView(true, data.Msg, data.Data));        }        /// <summary>        /// 团组模块 - 出入境费用 - 一键清空        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostEnterExitCostOneClickClear(EnterExitCostOneClickClearDto dto)        {            if (dto.DiId < 1) return Ok(JsonView(false, "请传入有效的DiId参数;"));            if (dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数;"));            if (dto.Id < 1) return Ok(JsonView(false, "请传入有效的Id参数;"));            var _view = await _enterExitCostRep._OneClickClear(dto.Id, dto.DiId, dto.UserId);            if (_view.Code == 0)            {                return Ok(JsonView(true, "操作成功"));            }            return Ok(JsonView(false, "操作失败"));        }        /// <summary>        /// 团组模块 - 出入境费用 - 子项删除        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostEnterExitCostSubItemDel(EnterExitCostSubItemDelDto dto)        {            try            {                var data = await _enterExitCostRep.PostEnterExitCostSubItemDel(dto);                if (data.Code != 0)                {                    return Ok(JsonView(false, data.Msg));                }                return Ok(JsonView(true, "操作成功!", data.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 团组模块 - 出入境国家费用标准 List        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> GetNationalTravelFeeData(PortDtoBase dto)        {            try            {                Stopwatch sw = new Stopwatch();                sw.Start();                string nationalTravelFeeSql = string.Format(@"Select ssd.Name as CurrencyCode, ssd.Remark as CurrencyName,su.CnName as LastUpdateUserName,gntf.* From Grp_NationalTravelFee gntf                                                              Left Join Sys_SetData ssd On ssd.STid = 66 And gntf.Currency = ssd.Id                                                              Left Join Sys_Users su On gntf.LastUpdateUserId = su.Id                                                               Where gntf.Isdel = 0");                var nationalTravelFeeData = _sqlSugar.SqlQueryable<NationalTravelFeeInfoView>(nationalTravelFeeSql).ToList();                //var nationalTravel = nationalTravelFeeData.GroupBy(it => it.Country).Select(it1 => it1.FirstOrDefault());                //List<dynamic> nationalTravelFeeData1 = new List<dynamic>();                //foreach (var item in nationalTravel)                //{                //    var cityData = nationalTravelFeeData.Where(it => it.Country == item.Country).ToList();                //    var otherData = cityData.Where(it => it.City.Contains("其他城市")).FirstOrDefault();                //    if (otherData != null)                //    {                //        cityData.Remove(otherData);                //        cityData.Add(otherData);                //    }                //    nationalTravelFeeData1.Add(new                //    {                //        Country = item.Country,                //        CityData = cityData                //    });                //}                sw.Stop();                return Ok(JsonView(true, "查询成功!耗时:" + sw.ElapsedMilliseconds + "ms", nationalTravelFeeData));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));                throw;            }        }        /// <summary>        /// 团组模块 - 出入境国家费用标准 Page List Data Source        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> GetNationalTravelFeePageDataSource()        {            string sql = string.Format(@"Select * From Grp_NationalTravelFee Where Isdel = 0  ");            var nationalTravelFeeData = await _groupRepository._sqlSugar.SqlQueryable<Grp_NationalTravelFee>(sql).ToListAsync();            List<string> countryData = new List<string>();            countryData.AddRange(nationalTravelFeeData.Select(it => it.Country).ToList());            countryData = countryData.Distinct().ToList();            List<dynamic> dataSource = new List<dynamic>();            foreach (var item in countryData)            {                List<string> cityData1 = new List<string>();                cityData1 = nationalTravelFeeData.Where(it => it.Country == item).Select(it => it.City).ToList();                var countryData2 = new                {                    CountryName = item,                    CityData = cityData1                };                dataSource.Add(countryData2);            }            return Ok(JsonView(true, "查询成功!", dataSource));        }        /// <summary>        /// 团组模块 - 出入境国家费用标准 Page List        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostNationalTravelFeePage(NationalTravelFeePageDto dto)        {            int portId = dto.PortType;            if (portId != 1 && portId != 2 && portId != 3) return Ok(JsonView(false, "请输入正确的端口号!\r\n请求端口分类1 Web 2 Android 3 IOS"));            if (dto.PageIndex == 0) return Ok(JsonView(false, "当前页码数不能为0!"));            if (dto.PageSize == 0) return Ok(JsonView(false, "每页条数不能0!"));            string whereSql = string.Empty;            if (!string.IsNullOrEmpty(dto.Country))            {                whereSql += string.Format(@" And gntf.Country ='{0}'", dto.Country);            }            if (!string.IsNullOrEmpty(dto.City))            {                whereSql += string.Format(@" And gntf.City='{0}'", dto.City);            }            string pageSql = string.Format(@"Select * From (                                             Select row_number() over(order by gntf.LastUpdateTime Desc) as RowNumber,                                             ssd.Name as CurrencyCode, ssd.Remark as CurrencyName,su.CnName as LastUpdateUserName,gntf.*                                              From Grp_NationalTravelFee gntf                                             Left Join Sys_SetData ssd On ssd.STid = 66 And gntf.Currency = ssd.Id                                             Left Join Sys_Users su On gntf.LastUpdateUserId = su.Id                                              Where gntf.Isdel = 0 {0} ) temp ", whereSql);            RefAsync<int> total = 0;            var nationalTravelFeeData = await _groupRepository._sqlSugar.SqlQueryable<NationalTravelFeePageInfoView>(pageSql).ToPageListAsync(dto.PageIndex, dto.PageSize, total);            return Ok(JsonView(true, "查询成功!", nationalTravelFeeData, (int)total));        }        /// <summary>        /// 团组模块 - 出入境国家费用标准 根据城市查询        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostNationalTravelFeeInfoByCountryAndCity(NationalTravelFeeByCountryAndCityDto dto)        {            if (dto == null) return Ok(JsonView(false, "请传入参数!"));            int portId = dto.PortType;            if (portId != 1 && portId != 2 && portId != 3) return Ok(JsonView(false, "请输入正确的端口号!\r\n请求端口分类1 Web 2 Android 3 IOS"));            string whereSql = string.Empty;            if (!string.IsNullOrEmpty(dto.Country))            {                whereSql = string.Format(@"And Country = '{0}' ", dto.Country);            }            if (!string.IsNullOrEmpty(dto.City))            {                whereSql = string.Format(@"And City = '{0}' ", dto.City);            }            string sql = string.Format(@"Select gntf.Country,gntf.City,gntf.Currency,ssd.Name as CurrencyCode, 	                                                ssd.Remark as CurrencyName,gntf.RoomCost,gntf.FoodCost,gntf.PublicCost,	                                                gntf.LastUpdateUserId,su.CnName as LastUpdateUserName,gntf.LastUpdateTime                                              From Grp_NationalTravelFee gntf                                             Left Join Sys_SetData ssd On ssd.STid = 66 And gntf.Currency = ssd.Id                                             Left Join Sys_Users su On gntf.LastUpdateUserId = su.Id                                              Where gntf.Isdel = 0 {0} ", whereSql);            var nationalTravelFeeData = await _groupRepository._sqlSugar.SqlQueryable<NationalTravelFeeInfoByCountryAndCityView>(sql).FirstAsync();            return Ok(JsonView(true, "查询成功!", nationalTravelFeeData));        }        /// <summary>        /// 团组模块 - 出入境国家费用标准 - Add Or Update        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostNationalTravelFeeOperate(NationalTravelFeeOperateDto dto)        {            try            {                var data = await _enterExitCostRep.PostNationalTravelFeeOperate(dto);                if (data.Code != 0)                {                    return Ok(JsonView(false, data.Msg));                }                return Ok(JsonView(true, "操作成功!", data.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 团组模块 - 出入境国家费用标准 - Del        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostNationalTravelFeeDel(NationalTravelFeeDelDto dto)        {            try            {                Grp_NationalTravelFee _nationalTravelFee = new Grp_NationalTravelFee()                {                    Id = dto.Id,                    DeleteUserId = dto.DeleteUserId,                    DeleteTime = DateTime.Now.ToString("yyyy-MM-dd"),                    IsDel = 1                };                var delStatus = await _enterExitCostRep._sqlSugar.Updateable<Grp_NationalTravelFee>(_nationalTravelFee)                                               .UpdateColumns(it => new { it.DeleteTime, it.DeleteUserId, it.IsDel })                                               .WhereColumns(it => new { it.Id })                                               .ExecuteCommandAsync();                if (delStatus <= 0)                {                    return Ok(JsonView(false, "删除失败!"));                }                return Ok(JsonView(true, "操作成功!"));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        #endregion        #region 签证费用录入        /// <summary>        /// 根据diid查询签证费用列表        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> QueryVisaByDiId(VisaPriceDto dto)        {            try            {                Result groupData = await _visaPriceRep.PostVisaByDiId(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 根据签证费用Id查询单条数据及c表数据        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> QueryVisaById(PostVisaByIdDto dto)        {            try            {                Result groupData = await _visaPriceRep.PostVisaById(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 签证费用删除        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> DelVisaPrice(DelBaseDto dto)        {            _sqlSugar.BeginTran();            var res = await _visaPriceRep.SoftDeleteByIdAsync<Grp_VisaInfo>(dto.Id.ToString(), dto.DeleteUserId);            if (!res)            {                _sqlSugar.RollbackTran();                return Ok(JsonView(false, "删除失败"));            }            var resSub = _sqlSugar.Updateable<Grp_CreditCardPayment>()                                  .Where(a => a.CId == dto.Id && a.IsDel == 0 && a.CTable == 80)                                  .SetColumns(a => new Grp_CreditCardPayment()                                  {                                      IsDel = 1,                                      DeleteUserId = dto.DeleteUserId,                                      DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")                                  }).ExecuteCommand();            if (resSub < 1)            {                _sqlSugar.RollbackTran();                return Ok(JsonView(false, "删除失败"));            }            _sqlSugar.CommitTran();            return Ok(JsonView(true, "删除成功!"));        }        /// <summary>        /// 签证费用录入下拉框初始化        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> VisaPriceAddSelect()        {            try            {                //支付方式                List<Sys_SetData> Payment = _sqlSugar.Queryable<Sys_SetData>().Where(a => a.STid == 14 && a.IsDel == 0).ToList();                List<SetDataInfoView> _Payment = _mapper.Map<List<SetDataInfoView>>(Payment);                //币种                List<Sys_SetData> CurrencyList = _sqlSugar.Queryable<Sys_SetData>().Where(a => a.STid == 66 && a.IsDel == 0).ToList();                List<SetDataInfoView> _CurrencyList = _mapper.Map<List<SetDataInfoView>>(CurrencyList);                //乘客类型                List<Sys_SetData> PassengerType = _sqlSugar.Queryable<Sys_SetData>().Where(a => a.STid == 69 && a.IsDel == 0).ToList();                List<SetDataInfoView> _PassengerType = _mapper.Map<List<SetDataInfoView>>(PassengerType);                //卡类型                List<Sys_SetData> BankCard = _sqlSugar.Queryable<Sys_SetData>().Where(a => a.STid == 15 && a.IsDel == 0).ToList();                List<SetDataInfoView> _BankCard = _mapper.Map<List<SetDataInfoView>>(BankCard);                var data = new                {                    Payment = _Payment,                    CurrencyList = _CurrencyList,                    PassengerType = _PassengerType,                    BankCard = _BankCard                };                return Ok(JsonView(true, "查询成功!", data));            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        /// <summary>        /// 签证费用录入操作(Status:1.新增,2.修改)        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> OpVisaPrice(OpVisaPriceDto dto)        {            try            {                Result groupData = await _visaPriceRep.OpVisaPrice(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                #region 应用推送                try                {                    int ccpId = groupData.Data.GetType().GetProperty("ccpId").GetValue(groupData.Data, null);                    int sign = groupData.Data.GetType().GetProperty("sign").GetValue(groupData.Data, null);                    await AppNoticeLibrary.SendChatMsg_GroupStatus_ApplyFee(ccpId, sign, QiyeWeChatEnum.GuoJiaoLeaderChat);                }                catch (Exception ex)                {                }                #endregion                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        #endregion        #region op费用录入        /// <summary>        /// 根据diid查询op费用列表        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> QueryCarTouristGuideGroundByDiId(CarTouristGuideGroundDto dto)        {            try            {                Result groupData = await _carTouristGuideGroundRep.QueryCarTouristGuideGroundByDiId(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 根据op费用Id查询单条数据及c表数据        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> QueryCarTouristGuideGroundById(CarTouristGuideGroundIdDto dto)        {            try            {                Grp_CarTouristGuideGroundReservations _groupData = await _sqlSugar.Queryable<Grp_CarTouristGuideGroundReservations>().FirstAsync(a => a.Id == dto.Id && a.IsDel == 0);                Grp_CreditCardPayment _creditCardPayment = await _sqlSugar.Queryable<Grp_CreditCardPayment>().FirstAsync(a => a.CId == dto.Id && a.CTable == 79 && a.IsDel == 0);                var data = new                {                    CarTouristGuideGround = _groupData,                    CreditCardPayment = _creditCardPayment                };                return Ok(JsonView(true, "查询成功!", data));            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));            }        }        /// <summary>        /// op费用删除        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> DelCarTouristGuideGround(DelBaseDto dto)        {            try            {                var res = await _carTouristGuideGroundRep.SoftDeleteByIdAsync<Grp_CarTouristGuideGroundReservations>(dto.Id.ToString(), dto.DeleteUserId);                if (!res)                {                    return Ok(JsonView(false, "删除失败"));                }                var result = await _sqlSugar.Updateable<Grp_CarTouristGuideGroundReservationsContent>().Where(a => a.CTGGRId == dto.Id && a.IsDel == 0).SetColumns(a => new Grp_CarTouristGuideGroundReservationsContent()                {                    IsDel = 1,                    DeleteUserId = dto.DeleteUserId,                    DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")                }).ExecuteCommandAsync();                var resultC = await _sqlSugar.Updateable<Grp_CreditCardPayment>().Where(a => a.CId == dto.Id && a.IsDel == 0 && a.CTable == 79).SetColumns(a => new Grp_CreditCardPayment()                {                    IsDel = 1,                    DeleteUserId = dto.DeleteUserId,                    DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")                }).ExecuteCommandAsync();                return Ok(JsonView(true, "删除成功!"));            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        /// <summary>        /// op费用录入操作(Status:1.新增,2.修改)        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> OpCarTouristGuideGround(OpCarTouristGuideGroundDto dto)        {            try            {                Result groupData = await _carTouristGuideGroundRep.OpCarTouristGuideGround(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 填写费用详细页面初始化绑定        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public IActionResult CarTouristGuideGroundContentInitialize(CarTouristGuideGroundContentDto dto)        {            try            {                Result groupData = _carTouristGuideGroundRep.CarTouristGuideGroundContent(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 根据op费用Id查询详细数据        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public IActionResult OpCarTouristGuideGroundContentById(CarTouristGuideGroundIdDto dto)        {            try            {                Result groupData = _carTouristGuideGroundRep.OpCarTouristGuideGroundContentById(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// OP费用录入填写详情        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> OpCarTouristGuideGroundContent(OpCarTouristGuideGroundContentDto dto)        {            try            {                #region 参数校验                if (dto.Currency <= 0) return Ok(JsonView(false, "币种错误!"));                var di = _sqlSugar.Queryable<Grp_DelegationInfo>().First(x => x.Id == dto.DiId && x.IsDel == 0);                if (di == null) return Ok(JsonView(false, "团组错误!"));                #endregion                Result groupData = await _carTouristGuideGroundRep.OpCarTouristGuideGroundContent(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                //自动审核                await _feeAuditRep.FeeAutomaticAudit(2, dto.DiId, dto.CTGGRId);                #region 应用推送                try                {                    int ccpId = groupData.Data.GetType().GetProperty("ccpId").GetValue(groupData.Data, null);                    int sign = groupData.Data.GetType().GetProperty("sign").GetValue(groupData.Data, null);                    await AppNoticeLibrary.SendChatMsg_GroupStatus_ApplyFee(ccpId, sign, QiyeWeChatEnum.GuoJiaoLeaderChat);                }                catch (Exception ex)                {                }                #endregion                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 获取三公详细所有城市        /// </summary>        /// <returns></returns>        [HttpGet]        public IActionResult OpCarCityResult()        {            var jw = JsonView(false);            var data = _sqlSugar.Queryable<Grp_NationalTravelFee>().Where(x => x.IsDel == 0).Select(x => new            {                x.Id,                x.Country,                x.City,            }).ToList();            if (data.Count > 0)            {                jw = JsonView(true, "获取成功!", data);            }            else            {                jw.Msg = "城市数据为空!";                jw.Data = new string[0];            }            return Ok(jw);        }        /// <summary>        /// 导出地接费用明细        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public IActionResult ExportLocalGuidePriceDetail(ExportLocalGuidePriceDetailDto dto)        {            var jw = JsonView(false);            if (dto.Diid < 1)            {                jw.Msg = "请输入正确的diid!";                return Ok(jw);            }            var group = _sqlSugar.Queryable<Grp_DelegationInfo>().First(x => x.Id == dto.Diid && x.IsDel == 0);            if (group == null)            {                jw.Msg = "未找到团组信息!";                return Ok(jw);            }            var localGuideArr = _sqlSugar.Queryable<Grp_CarTouristGuideGroundReservations>().Where(x => x.DiId == dto.Diid && x.IsDel == 0).ToList();            if (localGuideArr.Count == 0)            {                jw.Msg = "该团组暂无地接信息!";                return Ok(jw);            }            var localGroup = localGuideArr.GroupBy(x => x.Area).ToList();            var overspendSoure = new Dictionary<int, int>            {                { 91, 982 }, //车                { 92 , 1059} ,//导游                { 994 , 1073}, //翻译                { 988 , 1074 }, //早餐                { 93 , 1075 },  //午餐                { 989 , 1076 },  //晚餐            };            Dictionary<string, Stream> Zips = new Dictionary<string, Stream>();            foreach (var groupArr in localGroup)            {                var keyValue = groupArr.Key;                if (int.TryParse(keyValue, out int cityid))                {                    var city = _sqlSugar.Queryable<Grp_NationalTravelFee>().First(x => x.Id == cityid && x.IsDel == 0);                    keyValue = city == null ? keyValue : city.Country + "-" + city.City;                }                List<List<Grp_CarTouristGuideGroundReservationsContentExtend>> contentArr = new List<List<Grp_CarTouristGuideGroundReservationsContentExtend>>();                foreach (var item in groupArr)                {                    var content = _sqlSugar.Queryable<Grp_CarTouristGuideGroundReservationsContent, Sys_SetData>((a, b) => a.SId == b.Id                    ).Where((a, b) => a.CTGGRId == item.Id && a.Price != 0M && a.IsDel == 0 && b.IsDel == 0).Select((a, b) =>                     new Grp_CarTouristGuideGroundReservationsContentExtend                     {                         Count = a.Count,                         CreateTime = a.CreateTime,                         CreateUserId = a.CreateUserId,                         CTGGRId = a.CTGGRId,                         Currency = a.Currency,                         DatePrice = a.DatePrice,                         DeleteTime = a.DeleteTime,                         DeleteUserId = a.DeleteUserId,                         DiId = a.DiId,                         Id = a.Id,                         IsDel = a.IsDel,                         Price = a.Price,                         PriceContent = a.PriceContent,                         Remark = a.Remark,                         SId = a.SId,                         SidName = b.Name,                         Units = a.Units,                     }                    ).ToList();                    if (content.Count > 0)                    {                        contentArr.Add(content);                    }                }                //open excel                 //set excel                //save excel                try                {                    string filePath = AppSettingsHelper.Get("ExcelBasePath") + "\\Template\\地接费用明细.xlsx";                    IWorkbook workbook;                    if (Path.GetExtension(filePath).ToLower() == ".xls")                    {                        workbook = new HSSFWorkbook(new FileStream(filePath, FileMode.Open, FileAccess.Read));                    }                    else                    {                        workbook = new XSSFWorkbook(new FileStream(filePath, FileMode.Open, FileAccess.Read));                    }                    ISheet sheet = workbook.GetSheetAt(0);                    var rowStartIndex = 2;                    var clounmCount = 10;                    var initStyleRow = sheet.GetRow(2);                    var arr = contentArr.SelectMany(x => x).OrderBy(x => x.SId).ToList();                    //var overspendArrDetail =                     var existsId = new List<CarCompare>();                    var lastElem = arr.Last();                    var thisSid = -1;                    var curr = arr.Count > 0 ? arr[0].Currency : -1;                    var currObj = _sqlSugar.Queryable<Sys_SetData>().First(x => x.Id == curr && x.IsDel == 0) ?? new Sys_SetData                    {                        Name = "未知币种!",                        Remark = "未知币种!",                    };                    sheet.GetRow(0).GetCell(1).SetCellValue($"{keyValue}费用明细(货币:{currObj.Remark})");                    Action cloneRowFn = () =>                    {                        rowStartIndex++;                        var cloneRow = sheet.CreateRow(rowStartIndex);                        // 复制样式                        for (int i = initStyleRow.FirstCellNum; i < initStyleRow.LastCellNum; i++)                        {                            ICell sourceCell = initStyleRow.GetCell(i);                            ICell targetCell = cloneRow.GetCell(i) ?? cloneRow.CreateCell(i);                            // 确保单元格存在样式                            if (sourceCell.CellStyle != null)                            {                                targetCell.CellStyle = sourceCell.CellStyle;                            }                        }                    };                    var mergeRow = () =>                    {                        for (int i = 2; i < sheet.LastRowNum; i++)                        {                            var row = sheet.GetRow(i);                            var cellFirst = row.GetCell(0);                            var thisIndex = i + 1;                            while (thisIndex < sheet.LastRowNum)                            {                                var nextRow = sheet.GetRow(thisIndex);                                var nextCellFirst = nextRow.GetCell(0);                                if (cellFirst != null && nextCellFirst != null && cellFirst.ToString().Trim() == nextCellFirst.ToString().Trim())                                {                                    thisIndex++;                                }                                else                                {                                    break;                                }                            }                            thisIndex--;                            if (thisIndex != i)                            {                                //合并row                                CellRangeAddress cellRangeAddress = new CellRangeAddress(                                    i, // 起始行索引(0-based)                                    thisIndex,  // 结束行索引(0-based)                                    0, // 起始列索引(0-based)                                    0  // 结束列索引(0-based)                                );                                sheet.AddMergedRegion(cellRangeAddress);                                i = thisIndex;                            }                        }                    };                    var chaoshiNumber = 0;                    var totalNumber = 0.00M;                    string lastStr = "";                    var queryCarArrByCityAndDiid = _sqlSugar.Queryable<Grp_CarTouristGuideGroundReservations, Grp_CreditCardPayment>((x, b) => x.Id == b.CId && b.IsDel == 0 && b.CTable == 79)                        .Where(x => x.DiId == dto.Diid && x.Area == groupArr.Key).Select((x, b) => new                        {                            b.IsAuditGM,                            x.Id,                            x.Area,                            b.PayPercentage,                            b.PayMoney,                        }).ToList();                    string yesPayment = "", noPayment = "";                    foreach (var item in queryCarArrByCityAndDiid)                    {                        if (item.IsAuditGM == 1)                        {                            yesPayment += $"已支付团款({(int)item.PayPercentage}%):{item.PayMoney} {currObj.Remark}(如有需要,请在此处填写明细)\r\n";                        }                        else                        {                            noPayment += $"剩余团款:{item.PayMoney}{currObj.Remark}(如有需要,请在此处填写明细)\r\n";                        }                    }                    lastStr = yesPayment + noPayment;                    foreach (var item in arr)                    {                        if (existsId.FirstOrDefault(x => x.Sid == item.SId && DateTime.Compare(x.DataPrice, item.DatePrice.ObjToDate()) == 0) == null && !overspendSoure.Values.Contains(item.SId))                        {                            if (thisSid != item.SId)                            {                                if (thisSid == -1)                                {                                    thisSid = item.SId;                                }                                else                                {                                    //合并小计行                                    //创建合并区域的实例                                    CellRangeAddress cellRangeAddress = new CellRangeAddress(                                        rowStartIndex, // 起始行索引(0-based)                                        rowStartIndex,  // 结束行索引(0-based)                                        0, // 起始列索引(0-based)                                        3  // 结束列索引(0-based)                                    );                                    sheet.AddMergedRegion(cellRangeAddress);                                    var CellStyle = workbook.CreateCellStyle();                                    CellStyle.CloneStyleFrom(sheet.GetRow(rowStartIndex).GetCell(0).CellStyle);                                    CellStyle.FillForegroundColor = IndexedColors.Yellow.Index;   // 选择填充颜色                                    CellStyle.FillPattern = FillPattern.SolidForeground;	// 填充方式                                    for (int i = 0; i <= clounmCount; i++)                                    {                                        if (i > 6)                                        {                                            var CellStyle1 = workbook.CreateCellStyle();                                            CellStyle1.CloneStyleFrom(sheet.GetRow(rowStartIndex).GetCell(0).CellStyle);                                            IFont Font = workbook.CreateFont();     // 创建字体                                            Font.CloneStyleFrom(sheet.GetRow(rowStartIndex).GetCell(i).CellStyle.GetFont(workbook));                                            Font.Color = IndexedColors.Red.Index;   // 选择字体颜色                                            CellStyle1.SetFont(Font);                                            sheet.GetRow(rowStartIndex).GetCell(i).CellStyle = CellStyle1;                                        }                                        else                                        {                                            sheet.GetRow(rowStartIndex).GetCell(i).CellStyle = CellStyle;                                        }                                    }                                    sheet.GetRow(rowStartIndex).GetCell(0).SetCellValue("合计:");                                    sheet.GetRow(rowStartIndex).GetCell(4).SetCellValue(arr.Where(x => x.SId == thisSid).Sum(x => x.Count * x.Price).ToString("F2"));                                    //超时合计                                    sheet.GetRow(rowStartIndex).GetCell(7).SetCellValue("超时合计:");                                    //超时数                                    sheet.GetRow(rowStartIndex).GetCell(8).SetCellValue(chaoshiNumber == 0 ? "" : chaoshiNumber.ToString());                                    //超时合计费用                                    sheet.GetRow(rowStartIndex).GetCell(9).SetCellValue(totalNumber == 0 ? "" : totalNumber.ToString());                                    thisSid = item.SId;                                    cloneRowFn();                                    chaoshiNumber = 0;                                    totalNumber = 0;                                }                            }                            IRow row = sheet.GetRow(rowStartIndex);                            var whereForResult = arr.Where(x => x.SId == item.SId && DateTime.Compare(x.DatePrice.ObjToDate(), item.DatePrice.ObjToDate()) == 0).ToList();                            var isOpenOverspendSoure = overspendSoure.Keys.Contains(item.SId);                            List<Grp_CarTouristGuideGroundReservationsContentExtend> overspendWhereForResult = null;                            if (isOpenOverspendSoure)                            {                                overspendWhereForResult = arr.Where(x => x.SId == overspendSoure[item.SId] && DateTime.Compare(x.DatePrice.ObjToDate(), item.DatePrice.ObjToDate()) == 0).ToList();                                chaoshiNumber += overspendWhereForResult.Sum(x => x.Count);                                totalNumber += overspendWhereForResult.Sum(x => x.Count * x.Price);                            }                            for (int i = 0; i <= clounmCount; i++)                            {                                var cell = row.GetCell(i);                                var setCellValue = InIndexOutFunction(i, whereForResult, overspendWhereForResult);                                if (cell == null)                                {                                    cell = row.CreateCell(i);                                }                                var fontRed = workbook.CreateCellStyle();    // 创建单元格样式                                fontRed.CloneStyleFrom(cell.CellStyle);                                IFont Font = workbook.CreateFont();     // 创建字体                                Font.CloneStyleFrom(cell.CellStyle.GetFont(workbook));                                Font.Color = IndexedColors.Red.Index;   // 选择字体颜色                                fontRed.SetFont(Font);                                byte[] rgb = new byte[3] { 255, 242, 204 };                                var BackgroundColor255_242_204 = workbook.CreateCellStyle();                                BackgroundColor255_242_204.CloneStyleFrom(cell.CellStyle);                                byte[] rgb1 = new byte[3] { 189, 215, 238 };                                if (workbook is XSSFWorkbook)                                {                                    BackgroundColor255_242_204.FillForegroundColor = 0;                                    ((XSSFColor)BackgroundColor255_242_204.FillForegroundColorColor).SetRgb(rgb);                                    BackgroundColor255_242_204.FillPattern = FillPattern.SolidForeground;                                }                                else                                {                                    BackgroundColor255_242_204.FillForegroundColor = (((HSSFWorkbook)workbook).GetCustomPalette().FindSimilarColor(rgb[0], rgb[1], rgb[2])).Indexed;                                }                                if (i == 1 || i > 6)                                {                                    if (i > 6)                                    {                                        fontRed.FillForegroundColor = 0;                                        ((XSSFColor)fontRed.FillForegroundColorColor).SetRgb(rgb1);                                        fontRed.FillPattern = FillPattern.SolidForeground;                                    }                                    cell.CellStyle = fontRed;                                }                                if (i > 2 && i < 7)                                {                                    cell.CellStyle = BackgroundColor255_242_204;                                }                                cell.SetCellValue(setCellValue); //写入单元格                            }                            if (overspendSoure.ContainsKey(thisSid))                            {                                var overspendId = overspendSoure[thisSid];                                whereForResult = arr.Where(x => x.SId == item.SId && DateTime.Compare(x.DatePrice.ObjToDate(), item.DatePrice.ObjToDate()) == 0).ToList();                            }                            cloneRowFn();                            existsId.Add(new CarCompare                            {                                DataPrice = item.DatePrice.ObjToDate(),                                Sid = item.SId                            });                        }                        if (item.Equals(lastElem))                        {                            //合并小计行                            //创建合并区域的实例                            CellRangeAddress cellRangeAddress = new CellRangeAddress(                                rowStartIndex, // 起始行索引(0-based)                                rowStartIndex,  // 结束行索引(0-based)                                0, // 起始列索引(0-based)                                3  // 结束列索引(0-based)                            );                            sheet.AddMergedRegion(cellRangeAddress);                            var CellStyle = workbook.CreateCellStyle();                            CellStyle.CloneStyleFrom(sheet.GetRow(rowStartIndex).GetCell(0).CellStyle);                            CellStyle.FillForegroundColor = IndexedColors.Yellow.Index;   // 选择填充颜色                            CellStyle.FillPattern = FillPattern.SolidForeground;    // 填充方式                            for (int i = 0; i <= clounmCount; i++)                            {                                if (i > 6)                                {                                    var CellStyle1 = workbook.CreateCellStyle();                                    CellStyle1.CloneStyleFrom(sheet.GetRow(rowStartIndex).GetCell(0).CellStyle);                                    IFont Font = workbook.CreateFont();     // 创建字体                                    Font.CloneStyleFrom(sheet.GetRow(rowStartIndex).GetCell(i).CellStyle.GetFont(workbook));                                    Font.Color = IndexedColors.Red.Index;   // 选择字体颜色                                    CellStyle1.SetFont(Font);                                    sheet.GetRow(rowStartIndex).GetCell(i).CellStyle = CellStyle1;                                }                                else                                {                                    sheet.GetRow(rowStartIndex).GetCell(i).CellStyle = CellStyle;                                }                            }                            sheet.GetRow(rowStartIndex).GetCell(0).SetCellValue("合计:");                            sheet.GetRow(rowStartIndex).GetCell(4).SetCellValue(arr.Where(x => x.SId == thisSid).Sum(x => x.Count * x.Price).ToString("F2"));                            //超时合计                            sheet.GetRow(rowStartIndex).GetCell(7).SetCellValue("超时合计:");                            //超时数                            sheet.GetRow(rowStartIndex).GetCell(8).SetCellValue(chaoshiNumber == 0 ? "" : chaoshiNumber.ToString());                            //超时合计费用                            sheet.GetRow(rowStartIndex).GetCell(9).SetCellValue(totalNumber == 0 ? "" : totalNumber.ToString());                            cloneRowFn();                            // 创建合并区域的实例                            cellRangeAddress = new CellRangeAddress(                                rowStartIndex, // 起始行索引(0-based)                                rowStartIndex,  // 结束行索引(0-based)                                0, // 起始列索引(0-based)                                initStyleRow.LastCellNum - 1  // 结束列索引(0-based)                            );                            // 添加合并区域                            sheet.AddMergedRegion(cellRangeAddress);                            sheet.GetRow(rowStartIndex).Height = 30 * 30;                            sheet.GetRow(rowStartIndex).GetCell(0).SetCellValue(lastStr);                        }                    }                    mergeRow();                    // 保存修改后的Excel文件到新文件                    //string newFilePath = Path.Combine(Path.GetDirectoryName(filePath), keyValue +"_" + Path.GetFileName(filePath));                    // new FileStream(newFilePath, FileMode.CreateNew)                    using (var stream = new MemoryStream())                    {                        workbook.Write(stream, true);                        stream.Flush();                        stream.Seek(0, SeekOrigin.Begin);                        MemoryStream memoryStream = new MemoryStream();                        stream.CopyTo(memoryStream);                        memoryStream.Seek(0, SeekOrigin.Begin);                        Zips.Add(keyValue + "_" + "费用明细表.xlsx", memoryStream);                    }                    workbook.Close();                    workbook.Dispose();                }                catch (Exception ex)                {                    jw.Msg = "出现异常!" + ex.Message;                    return Ok(jw);                }            }            if (Zips.Count > 0)            {                IOOperatorHelper io = new IOOperatorHelper();                var byts = io.ConvertZipStream(Zips);                io.ByteToFile(byts, AppSettingsHelper.Get("ExcelBasePath") + $"\\ExportLocalGuidePriceDetail\\{group.TeamName}_地接费用明细.zip");                //http://132.232.92.186:24/Office/Word/EnterExitCost/File/                jw = JsonView(true, "success", new { url = AppSettingsHelper.Get("OfficeBaseUrl") + $"\\Office\\Excel\\ExportLocalGuidePriceDetail\\{group.TeamName}_地接费用明细.zip" });            }            else            {                jw.Msg = "暂无生成文件!";            }            return Ok(jw);        }        private string InIndexOutFunction(int i, List<Grp_CarTouristGuideGroundReservationsContentExtend> arr, List<Grp_CarTouristGuideGroundReservationsContentExtend> arrOverspendSoure)        {            string outStr = string.Empty;            switch (i)            {                case 0:                    outStr = arr[0].SidName;                    break;                case 1:                    outStr = arr[0].DataPriceStr;                    break;                case 2:                    outStr = string.Join("-", arr.Select(x => x.PriceContent));                    break;                case 4:                    outStr = arr.Sum(x => x.Subtotal).ToString("F2");                    break;                case 7:                    if (arrOverspendSoure != null && arrOverspendSoure.Count > 0)                    {                        var curr = _sqlSugar.Queryable<Sys_SetData>().First(x => x.Id == arrOverspendSoure[0].Currency && x.IsDel == 0);                        var unit = _sqlSugar.Queryable<Sys_SetData>().First(x => x.Id == arrOverspendSoure[0].Units && x.IsDel == 0);                        outStr = arrOverspendSoure.Sum(x => x.Price).ToString("F2") + curr?.Remark + "/" + unit?.Name;                    }                    break;                case 8:                    if (arrOverspendSoure != null && arrOverspendSoure.Count > 0)                    {                        outStr = arrOverspendSoure.Sum(x => x.Count).ToString();                    }                    break;                case 9:                    if (arrOverspendSoure != null && arrOverspendSoure.Count > 0)                    {                        outStr = arrOverspendSoure.Sum(x => x.Count * x.Price).ToString();                    }                    break;                case 10:                    if (arrOverspendSoure != null && arrOverspendSoure.Count > 0)                    {                        outStr = string.Join("-", arrOverspendSoure.Select(x => x.PriceContent));                    }                    break;            }            return outStr;        }        #region OP行程单        /// <summary>        /// OP行程单初始化        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public IActionResult InitOpTravel(InitOpTravelDto dto)        {            var jw = JsonView(false);            var groupList = _sqlSugar.Queryable<Grp_DelegationInfo>().Where(x => x.IsDel == 0).OrderByDescending(x => x.Id).ToList();            var group = groupList.First();            var diid = dto.Diid == -1 ? group?.Id : dto.Diid;            if (group == null)            {                jw.Msg = "暂无团组!";                return Ok(jw);            }            group = groupList.Find(x => x.Id == diid);            if (group == null)            {                jw.Msg = "请输入正确的团组ID!";                return Ok(jw);            }            string city = string.Empty;            var blackCode = _sqlSugar.Queryable<Air_TicketBlackCode>().Where(x => x.IsDel == 0 && x.DiId == diid).ToList();            if (blackCode.Count > 0)            {                var black = blackCode.First();                black.BlackCode = black.BlackCode == null ? "" : black.BlackCode;                var blackSp = Regex.Split(black.BlackCode, "\\d+\\.", RegexOptions.IgnoreCase).Where(x => !string.IsNullOrWhiteSpace(x)).ToArray();                if (blackSp.Length > 0)                {                    try                    {                        var cityArrCode = new List<string>(20);                        foreach (var item in blackSp)                        {                            var itemSp = item.Split(' ').Where(x => !string.IsNullOrWhiteSpace(x)).ToList();                            var IndexSelect = itemSp[2];                            var cityArrCodeLength = cityArrCode.Count - 1;                            var startCity = IndexSelect.Substring(0, 3);                            if (cityArrCodeLength > 0)                            {                                var arrEndCity = cityArrCode[cityArrCodeLength];                                if (arrEndCity != startCity)                                {                                    cityArrCode.Add(startCity.ToUpper());                                }                            }                            else                            {                                cityArrCode.Add(startCity.ToUpper());                            }                            var endCity = IndexSelect.Substring(3, 3);                            cityArrCode.Add(endCity.ToUpper());                        }                        var cityThree = string.Empty;                        cityArrCode.ForEach(x => cityThree += "'" + x + "',");                        cityThree = cityThree.TrimEnd(',');                        if (string.IsNullOrWhiteSpace(cityThree))                        {                            throw new                                 Exception("error");                        }                        string sql = $"SELECT * FROM Res_ThreeCode rtc WHERE UPPER(rtc.Three) in ({cityThree}) ";                        var cityArr = _sqlSugar.SqlQueryable<Res_ThreeCode>(sql).ToList();                        foreach (var item in cityArrCode)                        {                            var find = cityArr.Find(x => x.Three.ToUpper() == item.ToUpper());                            if (find != null)                            {                                city += find.City + "/";                            }                            else                            {                                city += item + "三字码未收入/";                            }                        }                        city = city.TrimEnd('/');                    }                    catch (Exception e)                    {                        city = "黑屏代码格式不正确!";                    }                }            }            else            {                city = "未录入黑屏代码";            }            var OpTravelList = _sqlSugar.Queryable<Grp_TravelList>().Where(x => x.Diid == diid && x.IsDel == 0).OrderBy(x => x.Days).Select(x => new TravelArrView            {                Date = x.Date,                Days = x.Days,                Diffgroup = x.Diffgroup,                Diid = x.Diid,                Traffic_First = x.Traffic_First,                Traffic_Second = x.Traffic_Second,                Trip = x.Trip,                WeekDay = x.WeekDay,                Id = x.Id            }).ToList();            jw.Data = new            {                groupList = groupList.Select(x => new                {                    x.Id,                    x.TeamName,                    x.TourCode                }).ToList(),                groupInfo = new                {                    group.VisitDays,                    group.TourCode,                    group.VisitPNumber,                    group.TeamName,                    city                },                OpTravelList            };            jw.Code = 200;            jw.Msg = "操作成功!";            return Ok(jw);        }        /// <summary>        /// 删除团组行程单        /// </summary>        /// <returns></returns>        [HttpPost]        public IActionResult DelTravel(DelOpTravelDto dto)        {            var jw = JsonView(false);            if (dto.UserId <= 0 || dto.Diid <= 0)            {                jw.Msg = "请输入正确的参数!";                return Ok(jw);            }            var isTrue = _sqlSugar.Updateable<Grp_TravelList>().Where(x => x.Diid == dto.Diid && x.IsDel == 0)                .SetColumns(x => new Grp_TravelList                {                    DeleteTime = DateTime.Now.ToString("yyyy-MM-dd"),                    DeleteUserId = dto.UserId,                    IsDel = 1,                }).ExecuteCommand();            jw = JsonView(true);            return Ok(jw);        }        /// <summary>        /// 行程单保存        /// </summary>        /// <returns></returns>        [HttpPost]        public IActionResult TravelSave(TravelSaveDto dto)        {            var jw = JsonView(false);            if (dto.Arr.Count > 0)            {                try                {                    _sqlSugar.BeginTran();                    foreach (var item in dto.Arr)                    {                        if (item.Id == 0)                        {                            throw new Exception("请传入正确的Id");                        }                        _sqlSugar.Updateable<Grp_TravelList>().Where(x => x.Id == item.Id)                            .SetColumns(x => new Grp_TravelList                            {                                Trip = item.Trip                            }).ExecuteCommand();                    }                    _sqlSugar.CommitTran();                    jw = JsonView(true);                }                catch (Exception ex)                {                    _sqlSugar.RollbackTran();                    jw.Msg = "程序异常!" + ex.Message;                }            }            else            {                jw.Msg = "请传入正确的参数!";            }            return Ok(jw);        }        /// <summary>        /// 导出行程单        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public IActionResult ExportTravel(ExportTravelDto dto)        {            var jw = JsonView(false);            jw.Data = "";            int diid = 0;            var Find = _sqlSugar.Queryable<Grp_DelegationInfo>().First(x => x.Id == dto.Diid);            if (Find == null)            {                jw.Msg = "请选择正确的团组!";                return Ok(jw);            }            else            {                diid = Find.Id;            }            //数据源            List<Grp_TravelList> _travelList = new List<Grp_TravelList>();            DataTable dtBlack = null;            try            {                dtBlack = GeneralMethod.GetTableByBlackCode(diid);            }            catch (Exception)            {                jw.Msg = "机票黑屏代码有误!";                return Ok(jw);            }            string CityStr = string.Empty;            if (dtBlack.Rows.Count == 0)            {                jw.Msg = "机票黑屏代码有误!";                return Ok(jw);            }            else            {                foreach (DataRow row in dtBlack.Rows)                {                    if (!string.IsNullOrWhiteSpace(row["Error"].ToString()))                    {                        jw.Msg = "机票黑屏代码有误!" + row["Error"].ToString();                        return Ok(jw);                    }                }                CityStr = GeneralMethod.GetGroupCityLine(diid, "/");                _travelList = _sqlSugar.Queryable<Grp_TravelList>().Where(x => x.Diid == diid && x.IsDel == 0 && x.Issel == 1).ToList();            }            //创建数据源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);            }            Dictionary<string, string> dic = new Dictionary<string, string>();            dic.Add("Dele", Find.TeamName.ToString() + GetNum(Find.VisitDays.ToString()));            dic.Add("City", CityStr);            dic.Add("Days", Find.VisitDays.ToString());            dic.Add("DeleCode", Find.TourCode);            dic.Add("Pnum", Find.VisitPNumber.ToString());            //模板路径            string tempPath = AppSettingsHelper.Get("WordBasePath") + "Travel/日行程3.docx";            //载入模板            Document doc = null;            DocumentBuilder builder = null;            try            {                //载入模板                doc = new Document(tempPath);                builder = new DocumentBuilder(doc);            }            catch (Exception)            {                jw.Msg = "模板位置不存在!";                return Ok(jw);            }            foreach (var key in dic.Keys)            {                Bookmark bookmark = doc.Range.Bookmarks[key];                if (bookmark != null)                {                    builder.MoveToBookmark(key);                    builder.Write(dic[key]);                }            }            //获取word里所有表格            NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);            //获取所填表格的序数            Aspose.Words.Tables.Table tableOne = allTables[0] as Aspose.Words.Tables.Table;            try            {                //循环赋值                for (int i = 0; i < dtSource.Rows.Count; i++)                {                    builder.MoveToCell(0, i + 1, 0, 0);                    builder.Write(dtSource.Rows[i]["Days"].ToString());                    builder.MoveToCell(0, i + 1, 1, 0);                    builder.Write(dtSource.Rows[i]["Date"].ToString() + "\r\n" + dtSource.Rows[i]["Week"].ToString());                    builder.MoveToCell(0, i + 1, 2, 0);                    builder.Write(dtSource.Rows[i]["Traffic"].ToString());                    var trip = dtSource.Rows[i]["Trip"].ToString();                    builder.MoveToCell(0, i + 1, 3, 0);                    builder.Write(trip);                    var cell = (Aspose.Words.Tables.Cell)doc.GetChild(NodeType.Cell, ((i + 2) * 4) - 1, true);                    var paragraphs = cell.GetChildNodes(NodeType.Paragraph, true);                    // 获取特定索引的段落                    Paragraph paragraph = (Paragraph)paragraphs[0];                    Run run = paragraph.Runs[0];                    Aspose.Words.Font font = run.Font;                    font.Name = "黑体";                    //设置双休红色                    cell = (Aspose.Words.Tables.Cell)doc.GetChild(NodeType.Cell, ((i + 2) * 4) - 3, true);                    paragraphs = cell.GetChildNodes(NodeType.Paragraph, true);                    paragraph = (Paragraph)paragraphs[1];                    if (paragraph.GetText().Contains("星期六") || paragraph.GetText().Contains("星期日"))                    {                        run = paragraph.Runs[0];                        font = run.Font;                        font.Color = Color.Red;                    }                }            }            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 = AppSettingsHelper.Get("WordBasePath") + "Travel/export/";            if (!Directory.Exists(savePath))            {                try                {                    Directory.CreateDirectory(savePath);                }                catch                {                }            }            string path = savePath + Find.TeamName + "出访日程";            string ftpPath = AppSettingsHelper.Get("WordBaseUrl") + AppSettingsHelper.Get("WordFtpPath") + "Travel/export/" + Find.TeamName + "出访日程";            try            {                Aspose.Words.SaveFormat saveFormat = Aspose.Words.SaveFormat.Doc;                string postfix = ".docx";                if (dto.IsPDF == 1)                {                    saveFormat = Aspose.Words.SaveFormat.Pdf;                    postfix = ".pdf";                }                doc.Save(path + postfix, saveFormat);                jw = JsonView(true, "导出成功", ftpPath + postfix);            }            catch (Exception)            {                jw = JsonView(false);            }            return Ok(jw);        }        /// <summary>        /// 根据大写数字返回小写数字或根据小写数字返回大写数字        /// </summary>        /// <param name="num"></param>        /// <returns></returns>        string GetNum(string num)        {            string str = "";            switch (num)            {                case "1":                    str = "一";                    break;                case "2":                    str = "二";                    break;                case "3":                    str = "三";                    break;                case "4":                    str = "四";                    break;                case "5":                    str = "五";                    break;                case "6":                    str = "六";                    break;                case "7":                    str = "七";                    break;                case "8":                    str = "八";                    break;                case "9":                    str = "九";                    break;                case "10":                    str = "十";                    break;                case "11":                    str = "十一";                    break;                case "12":                    str = "十二";                    break;                case "一":                    str = "1";                    break;                case "二":                    str = "2";                    break;                case "三":                    str = "3";                    break;                case "四":                    str = "4";                    break;                case "五":                    str = "5";                    break;                case "六":                    str = "6";                    break;                case "七":                    str = "7";                    break;                case "八":                    str = "8";                    break;                case "九":                    str = "9";                    break;                case "十":                    str = "10";                    break;                case "十一":                    str = "11";                    break;                case "十二":                    str = "12";                    break;            }            return str;        }        #endregion        #endregion        #region 团组成本        /// <summary>        /// 团组成本数据初始化        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public async Task<IActionResult> GroupCostInit(GroupCostInItDto dto)        {            var groupList = _sqlSugar.SqlQueryable<DelegationInfoAndIsTrueView>($@"                Select  a.Id,TeamName GroupName,b.isTrue From  Grp_DelegationInfo  a left join  (select top 100 percent Diid, CASE                 WHEN COUNT(*) >= 0 THEN 'True'                 ELSE 'False' END as isTrue  from Grp_GroupCost where Isdel = 0 and date != '' group by Diid) b on a.Id = b.Diid                 Where TeamName != '' And IsDel = 0  Order By a.Id Desc            ").ToList(); //团组列表            int diid = dto.Diid == -1 ? groupList.First().Id : dto.Diid;            var groupInfo = await _groupRepository.PostShareGroupInfo(new ShareGroupInfoDto { PortType = 1, Id = diid }); //团组信息            List<Res_CountryFeeCost> visaCountryInfoArr = new List<Res_CountryFeeCost>();            var groupinfoValue = (groupInfo.Data as Web_ShareGroupInfoView);            if (groupinfoValue != null)            {                var countryArr = groupinfoValue.VisitCountry ??= string.Empty;                var spArr = new string[1] { countryArr };                if (countryArr.Contains("|"))                {                    spArr = countryArr.Split("|");                }                else if (countryArr.Contains("、"))                {                    spArr = countryArr.Split("、");                }                foreach (var item in spArr.Where(x => !string.IsNullOrWhiteSpace(x)).ToList())                {                    var dbQueryCountry = _sqlSugar.Queryable<Res_CountryFeeCost>().First(x => x.VisaCountry.Contains(item));                    if (dbQueryCountry != null)                    {                        visaCountryInfoArr.Add(dbQueryCountry);                    }                }            }            var groupChecks = _checkBoxs.GetCheckBoxsByDiid(diid);  //团组选中信息  可枚举            var groupCost = _GroupCostRepository.GetAllByDiid(diid);  //团组列表信息              var create = _GroupCostRepository.                        CreateGroupCostByBlackCode(dto.Diid);            if (groupCost.Count == 0 && create.Code == 0)            {                groupCost = (create.Data as List<Grp_GroupCost>) ?? new List<Grp_GroupCost>();            }            var groupCostMap = _mapper.Map<List<Grp_GroupCostDto>>(groupCost);            var hotelNumber = _CostTypeHotelNumberRepository.GetCostTypeHotelNumberByDiid(diid); //酒店数量 可枚举            var GroupCostParameter = _GroupCostParameterRepository.GetGroupCostParameterListByDiid(diid); //成本系数 可枚举            groupCostMap = groupCostMap.Select(x =>            {                if (DateTime.TryParse(x.Date, out DateTime dataForamt))                {                    x.Date = dataForamt.ToString("yyyy-MM-dd");                }                return x;            }).ToList();            //GroupCostParameter.Add(new            //     Grp_GroupCostParameter());            var GroupCostParameterMap = _mapper.Map<List<Grp_GroupCostParameterDto>>(GroupCostParameter);            bool hotelIsTrue = _sqlSugar.Queryable<Grp_HotelInquiry>().Where(x => x.DiId == dto.Diid && x.IsDel == 0).Count() > 0;            return Ok(JsonView(new            {                groupList,                groupInfo,                groupChecks,                groupCost = groupCostMap,                hotelNumber,                GroupCostParameter = GroupCostParameterMap,                visaCountryInfoArr = visaCountryInfoArr.Select(x => new                {                    x.VisaCountry,                    x.VisaPrice,                    x.Id,                }).ToList(),                baoPi = _GroupCostParameterRepository.GetBaoPi(diid),                blackCodeIsTrue = create.Code == 0 ? true : false,                hotelIsTrue = hotelIsTrue,            }));        }        /// <summary>        /// 团组成本信息保存        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public async Task<IActionResult> SaveGroupCost(GroupCostSavaDto dto)        {            if (dto.Diid <= 0 || dto.Userid <= 0)            {                return Ok(JsonView(false));            }            JsonView jw = null;            bool isTrue = false;            #region 复制团组成本            //if (dto.Diid == 2581)            //{            //    dto.Diid = 2599;            //    dto.CheckBoxs.ForEach(x =>            //    {            //        x.Diid = 2599;            //    });            //    dto.GroupCosts.ForEach(x =>            //    {            //        x.Diid = 2599;            //    });            //    dto.CostTypeHotelNumbers.ForEach(x =>            //    {            //        x.Diid = 2599;            //    });            //    dto.GroupCostParameters.ForEach(x =>            //    {            //        x.DiId = 2599;            //    });            //}            #endregion            var Grp_groups = _mapper.Map<List<Grp_GroupCost>>(dto.GroupCosts);            Grp_groups.ForEach(x => { x.CreateUserId = dto.Userid; x.CreateTime = DateTime.Now; }); //.ToString("yyyy-MM-dd HH:mm:ss")            var Grp_CheckBoxs = _mapper.Map<List<Grp_CheckBoxs>>(dto.CheckBoxs);            Grp_CheckBoxs.ForEach(x => { x.CreateUserId = dto.Userid; x.CreateTime = DateTime.Now; });            var Grp_HotelNumber = _mapper.Map<List<Grp_CostTypeHotelNumber>>(dto.CostTypeHotelNumbers);            var Grp_CostParameters = _mapper.Map<List<Grp_GroupCostParameter>>(dto.GroupCostParameters);            try            {                _sqlSugar.BeginTran();                isTrue = await _GroupCostRepository.                    SaveGroupCostList(Grp_groups, dto.Diid, dto.Userid); //列表                isTrue = await _checkBoxs.SaveCheckBoxs(Grp_CheckBoxs, dto.Diid); //选中项                isTrue = await _CostTypeHotelNumberRepository.SaveHotelNumber(Grp_HotelNumber, dto.Userid, dto.Diid); //酒店房间数量                isTrue = await _GroupCostParameterRepository.SaveAsync(Grp_CostParameters, dto.Userid, dto.Diid); //系数                _sqlSugar.CommitTran();                jw = JsonView(true, "保存成功!", isTrue);            }            catch (Exception)            {                _sqlSugar.RollbackTran();                jw = JsonView(false);            }            return Ok(jw);        }        /// <summary>        /// 司兼导数据        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public IActionResult GetCarGuides(CarGuidesDto dto)        {            JsonView jw = null;            var Data = _sqlSugar.SqlQueryable<Grp_CarGuides>($@" select * from Grp_CarGuides where isdel = 0 ").ToList();            jw = JsonView(true, "获取成功!", Data);            return Ok(jw);        }        /// <summary>        /// 导游数据        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public IActionResult GetGuidesInfo(CarGuidesDto dto)        {            JsonView jw = null;            //var Data = _sqlSugar.SqlQueryable<Grp_GuidesInfo>($@"		SELECT* FROM (            //                                      SELECT*,ROW_NUMBER() OVER (ORDER BY Id) AS RowNumber FROM Grp_GuidesInfo where (city like '%{dto.City}%' or country like '%{dto.City}%' )  and isdel = 0 ) as b            //                                      where RowNumber BETWEEN {(dto.Page - 1) * dto.Size + 1} and {(dto.Page) * dto.Size}").ToList();            var Data = _sqlSugar.SqlQueryable<Grp_GuidesInfo>($@" select * from Grp_GuidesInfo where isdel = 0 ").ToList();            jw = JsonView(true, "获取成功!", Data);            return Ok(jw);        }        /// <summary>        /// 成本车数据        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public IActionResult GetCarInfo(CarGuidesDto dto)        {            JsonView jw = null;            var Data = _sqlSugar.SqlQueryable<Grp_CarInfo>($@" select * from Grp_CarInfo where isdel = 0 ").ToList();            jw = JsonView(true, "获取成功!", Data);            return Ok(jw);        }        /// <summary>        /// 景点数据        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public IActionResult GetScenicSpotInfo(CarGuidesDto dto)        {            var Data = _sqlSugar.SqlQueryable<Grp_ScenicSpotInfo>($@" select * from Grp_ScenicSpotInfo where isdel = 0 ").ToList();            return Ok(JsonView(true, "获取成功!", Data));        }        /// <summary>        /// 成本通知        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public async Task<IActionResult> GroupIsShare(GroupIsShareDto dto)        {            if (dto.Diid < 0)            {                return Ok(JsonView(false));            }            JsonView jw = null;            var GroupCostParameter = _GroupCostParameterRepository.GetGroupCostParameterMainByDiid(dto.Diid);            if (GroupCostParameter != null)            {                int IsShare = 0;                if (GroupCostParameter.IsShare == 0) IsShare = 1;                else if (GroupCostParameter.IsShare == 1) IsShare = 0;                bool isTrue = await _GroupCostParameterRepository.UpdateIsShareById(GroupCostParameter.Id, IsShare);                string msg = string.Empty;                if (isTrue)                {                    if (IsShare == 0)                    {                        msg = "禁止通知,其他模块操作人员不可见此成本信息!";                    }                    else                    {                        #region 企微通知对应岗位用户                        try                        {                            AppNoticeLibrary.SendUserMsg_GroupShare_ToJob(dto.Diid);                        }                        catch (Exception ex)                        {                        }                        #endregion                        msg = "通知成功,其他模块操作人员可见此成本信息!";                    }                    jw = JsonView(isTrue, msg, new { IsShare });                }                else                {                    msg = "修改失败!";                    jw = JsonView(isTrue, msg);                }            }            else            {                jw = JsonView(false, "该团没有数据,请添加数据,保存后再操作!");            }            return Ok(jw);        }        /// <summary>        /// 导出报价单        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public async Task<IActionResult> ExportPriceCheckWordFile(GroupCostExportWordFile dto)        {            if (dto.Diid == 0)            {                return Ok(JsonView(false, "请传递团组id"));            }            var deleInfo = await _groupRepository.PostGroupInfo(new GroupInfoDto { Id = dto.Diid, PortType = 1 });            if (deleInfo.Code != 0)            {                return Ok(JsonView(false, "团组信息查询失败!"));            }            var di = deleInfo.Data as DelegationInfoWebView;            if (di != null)            {                //文件名                string strFileName = di.TeamName + "-收款账单.doc";                //获取模板                string tmppath = (AppSettingsHelper.Get("WordBasePath") + "Template/收款账单(四川)模板.doc");                //载入模板                Document doc = new Document(tmppath);                decimal TotalPrice = 0.00M;                string itemStr = string.Empty;                Dictionary<string, string> airSouer = new Dictionary<string, string>();                //airSouer.Add("JJCTBR", "经济舱及酒店双人间");                airSouer.Add("JJCTBR", "经济舱及酒店双人间");                airSouer.Add("JJCSGR", "经济舱及酒店单人间");                airSouer.Add("GWCSGR", "公务舱及酒店单人间");                airSouer.Add("GWCJSES", "公务舱及酒店小套房");                airSouer.Add("GWCSUITE", "公务舱及酒店套房");                airSouer.Add("JJCSUITE", "经济舱及酒店套房");                var groupCostType = dto.airs.GroupBy(x => x.costType).OrderBy(x => x.Key);                foreach (var cost in groupCostType)                {                    var List = cost.ToList();                    if (cost.Key == "A")                    {                        foreach (var ListItem in List)                        {                            if (ListItem.number > 0)                            {                                if (ListItem.code.Contains("TBR"))                                {                                    itemStr += "团费(" + airSouer[ListItem.code] + ")    RMB " + ListItem.price.ToString("F2") + "/人*" + ListItem.number + "(" + (ListItem.number / 2) + "间) ............合计 RMB " + (ListItem.number * ListItem.price).ToString("#0.00") + "\n";                                }                                else                                {                                    itemStr += "团费(" + airSouer[ListItem.code] + ")    RMB " + ListItem.price.ToString("F2") + "/人*" + ListItem.number + "(" + ListItem.number + "间) ............合计 RMB " + (ListItem.number * ListItem.price).ToString("#0.00") + "\n";                                }                                TotalPrice += (ListItem.number * ListItem.price);                            }                        }                    }                    else                    {                        itemStr = itemStr.Insert(0, "A段\r\n");                        itemStr += "B段\r\n";                        foreach (var ListItem in List)                        {                            if (ListItem.number > 0)                            {                                if (ListItem.code.Contains("TBR"))                                {                                    itemStr += "团费(" + airSouer[ListItem.code] + ")    RMB " + ListItem.price.ToString("F2") + "/人*" + ListItem.number + "(" + (ListItem.number / 2) + "间) ............合计 RMB " + (ListItem.number * ListItem.price).ToString("#0.00") + "\n";                                }                                else                                {                                    itemStr += "团费(" + airSouer[ListItem.code] + ")    RMB " + ListItem.price.ToString("F2") + "/人*" + ListItem.number + "(" + ListItem.number + "间) ............合计 RMB " + (ListItem.number * ListItem.price).ToString("#0.00") + "\n";                                }                                TotalPrice += (ListItem.number * ListItem.price);                            }                        }                    }                }                #region 替换Word模板书签内容                Dictionary<string, string> marks = new Dictionary<string, string>();                marks.Add("To", di.ClientUnit);//付款方                marks.Add("ToTel", di.TellPhone);//付款方电话                marks.Add("Date", DateTime.Now.ToString("yyyy-MM-dd"));//导出时间                marks.Add("Team", di.VisitCountry.Replace(" ", "、"));//团队名称                marks.Add("TontractTime", (di.VisitDate).ToString("yyyy年MM月dd日"));//付款日期                marks.Add("PayDay", (di.PayDay).ToString());//付款预期                marks.Add("PaymentMoney", (di.PaymentMoney).ToString("#0.00"));//付款金额                marks.Add("WeChat", di.WeChatNo ?? "");//微信号                 marks.Add("PayItemContent", itemStr);//详细信息                marks.Add("Total", TotalPrice.ToString("F2"));//合计                #endregion                ////注                //if (doc.Range.Bookmarks["Attention"] != null)                //{                //    Bookmark mark = doc.Range.Bookmarks["Attention"];                //    mark.Text = frList[0].Attention;                //}                foreach (var item in marks.Keys)                {                    if (doc.Range.Bookmarks[item] != null)                    {                        Bookmark mark = doc.Range.Bookmarks[item];                        mark.Text = marks[item];                    }                }                byte[] bytes = null;                using (MemoryStream stream = new MemoryStream())                {                    doc.Save(stream, Aspose.Words.SaveFormat.Doc);                    bytes = stream.ToArray();                }                //doc.Save((AppSettingsHelper.Get("WordBasePath") + "Template/") + strFileName);                return Ok(JsonView(true, "", new                {                    Data = bytes,                    strFileName,                }));            }            else            {                return Ok(JsonView(false, "团组信息不存在!"));            }        }        /// <summary>        /// 导出团组成本        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public async Task<IActionResult> ExportGroupCostExcelFile(GroupCostExportExcelFile dto)        {            var jw = JsonView(false);            if (dto.Diid == 0)            {                return Ok(JsonView(false, "请传递团组id"));            }            var deleInfo = await _groupRepository.PostGroupInfo(new GroupInfoDto { Id = dto.Diid, PortType = 1 });            if (deleInfo.Code != 0)            {                return Ok(JsonView(false, "团组信息查询失败!"));            }            var di = deleInfo.Data as DelegationInfoWebView;            if (di == null)            {                return Ok(JsonView(false, "团组信息查询失败!"));            }            List<GroupCost_Excel> List_GC1 = new List<GroupCost_Excel>();            WorkbookDesigner designer = new WorkbookDesigner();            designer.Workbook = new Workbook(AppSettingsHelper.Get("ExcelBasePath") + ("Template/团组-成本.xls"));            var List_GC = _GroupCostRepository.GetAllByDiid(dto.Diid);            for (int i = 0; i < List_GC.Count; i++)            {                GroupCost_Excel gc = new GroupCost_Excel();                gc.Id = List_GC[i].Id;                gc.Diid = List_GC[i].Diid.ToString();                gc.DAY = List_GC[i].DAY;                string week = "";                if (!string.IsNullOrEmpty(List_GC[i].Date.Trim()))                    week = CultureInfo.CurrentCulture.DateTimeFormat.GetDayName(Convert.ToDateTime(List_GC[i].Date).DayOfWeek);                gc.Date = (List_GC[i].Date + "\n" + week).ToString();                gc.ITIN = List_GC[i].ITIN;                gc.CarType = List_GC[i].CarType;                gc.CarTiming = List_GC[i].CarTiming.ToString() == "0" ? "/" : List_GC[i].CarTiming.ToString();                gc.CarCost = List_GC[i].CarCost.ToString() == "0" ? "/" : List_GC[i].CarCost.ToString();                gc.CarNumber = List_GC[i].CarNumber.ToString() == "0" ? "/" : List_GC[i].CarNumber.ToString();                gc.TGS = List_GC[i].TGS.ToString() == "0" ? "/" : List_GC[i].TGS.ToString();                gc.TGWH = List_GC[i].TGWH.ToString() == "0" ? "/" : List_GC[i].TGWH.ToString();                gc.TGN = List_GC[i].TGS.ToString() == "0" ? "/" : List_GC[i].TGN.ToString();                gc.TGOF = List_GC[i].TGOF.ToString() == "0" ? "/" : List_GC[i].TGOF.ToString();                gc.TGM = List_GC[i].TGM.ToString() == "0" ? "/" : List_GC[i].TGM.ToString();                gc.TGA = List_GC[i].TGA.ToString() == "0" ? "/" : List_GC[i].TGA.ToString();                gc.TGTF = List_GC[i].TGTF.ToString() == "0" ? "/" : List_GC[i].TGTF.ToString();                gc.TGEF = List_GC[i].TGEF.ToString() == "0" ? "/" : List_GC[i].TGEF.ToString();                gc.CFS = List_GC[i].CFS.ToString() == "0" ? "/" : List_GC[i].CFS.ToString();                gc.CFM = List_GC[i].CFM.ToString() == "0" ? "/" : List_GC[i].CFOF.ToString();                gc.CFOF = List_GC[i].CFOF.ToString() == "0" ? "/" : List_GC[i].CFOF.ToString();                gc.B = List_GC[i].B.ToString() == "0" ? "/" : List_GC[i].B.ToString();                gc.L = List_GC[i].L.ToString() == "0" ? "/" : List_GC[i].L.ToString();                gc.D = List_GC[i].D.ToString() == "0" ? "/" : List_GC[i].D.ToString();                gc.TBR = List_GC[i].TBR.ToString() == "0" ? "/" : List_GC[i].TBR.ToString();                gc.SGR = List_GC[i].SGR.ToString() == "0" ? "/" : List_GC[i].SGR.ToString();                gc.JS_ES = List_GC[i].JS_ES.ToString() == "0" ? "/" : List_GC[i].JS_ES.ToString();                gc.Suite = List_GC[i].Suite.ToString() == "0" ? "/" : List_GC[i].Suite.ToString();                gc.ACCON = List_GC[i].ACCON.ToString() == "0" ? "/" : List_GC[i].ACCON.ToString();                gc.TV = List_GC[i].TV.ToString() == "0" ? "/" : List_GC[i].TV.ToString();                gc.iL = List_GC[i].iL.ToString() == "0" ? "/" : List_GC[i].iL.ToString();                gc.IF = List_GC[i].IF.ToString() == "0" ? "/" : List_GC[i].IF.ToString();                gc.EF = List_GC[i].EF.ToString() == "0" ? "/" : List_GC[i].EF.ToString();                gc.B_R_F = List_GC[i].B_R_F.ToString() == "0" ? "/" : List_GC[i].B_R_F.ToString();                gc.TE = List_GC[i].TE.ToString() == "0" ? "/" : List_GC[i].TE.ToString();                gc.TGTips = List_GC[i].TGTips.ToString() == "0" ? "/" : List_GC[i].TGTips.ToString();                gc.DRVTips = List_GC[i].DRVTips.ToString() == "0" ? "/" : List_GC[i].DRVTips.ToString();                gc.PC = List_GC[i].PC.ToString() == "0" ? "/" : List_GC[i].PC.ToString();                gc.TLF = List_GC[i].TLF.ToString() == "0" ? "/" : List_GC[i].TLF.ToString();                gc.ECT = List_GC[i].ECT.ToString() == "0" ? "/" : List_GC[i].ECT.ToString();                List_GC1.Add(gc);            }            var dt = CommonFun.GetDataTableFromIList(List_GC1);            dt.TableName = "TB";            //报表标题等不用dt的值            designer.SetDataSource("TeamName", dto.title.TeamName);            designer.SetDataSource("Pnumber", dto.title.GroupNumber);            designer.SetDataSource("Tax", dto.title.Tax);            //designer.SetDataSource("FFYS", lblHotelCB.Text);            designer.SetDataSource("Currency", dto.title.Currency);            //designer.SetDataSource("HotelXS", txtHotelXS.Text);            designer.SetDataSource("Rate", dto.title.Rate);            var hotels = _CostTypeHotelNumberRepository.GetCostTypeHotelNumberByDiid(dto.Diid);            var Aparams = hotels.Find(x => x.Type == "Default");            if (Aparams == null)            {                return Ok(jw);            }            //酒店数量            var txtSGRNumber = Aparams.SGR.ToString();            var txtTBRNumber = Aparams.TBR.ToString();            var txtJSESNumber = Aparams.JSES.ToString();            var txtSUITENumbe = Aparams.SUITE.ToString();            if (dto.costType == "B")            {                Aparams = hotels.Find(x => x.Type == "A");                var Bparams = hotels.Find(x => x.Type == "B");                if (Aparams == null || Bparams == null)                {                    return Ok(jw);                }                txtSGRNumber = "A段人数:" + Aparams.SGR.ToString() + " B段人数:" + Bparams.SGR.ToString();                txtTBRNumber = "A段人数:" + Aparams.TBR.ToString() + " B段人数:" + Bparams.TBR.ToString();                txtJSESNumber = "A段人数:" + Aparams.JSES.ToString() + " B段人数:" + Bparams.JSES.ToString();                txtSUITENumbe = "A段人数:" + Aparams.SUITE.ToString() + " B段人数:" + Bparams.SUITE.ToString();            }            designer.SetDataSource("SGRNumber", txtSGRNumber);            designer.SetDataSource("TBRNumber", txtTBRNumber);            designer.SetDataSource("JSESNumber", txtJSESNumber);            designer.SetDataSource("SUITENumber", txtSUITENumbe);            var ws = designer.Workbook.Worksheets[0];            int Row = List_GC.Count;            int startIndex = 11;            int HideRows = 0;            List<int> hideRowsList = new List<int>();            decimal TzZCB2 = 0.00M, TzZLR2 = 0.00M, TzZBJ2 = 0.00M;            #region A段left数据            var left = dto.leftInfo.Find(x => x.Type == "A");            if (left == null)            {                return Ok(jw);            }            var leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("签证"));            if (leftBindData != null)            {                designer.SetDataSource("VisaDRCB", leftBindData.cb);                designer.SetDataSource("VisaRS", leftBindData.rs);                designer.SetDataSource("VisaXS", leftBindData.xs);                designer.SetDataSource("VisaZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("VisaDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                designer.SetDataSource("VisaZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("VisaDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                designer.SetDataSource("VisaZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);                //ws.Cells.HideRows((Row + startIndex + HideRows), 2);            }            HideRows += 2;            leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("保险"));            if (leftBindData != null)            {                designer.SetDataSource("BXDRCB", leftBindData.cb);                designer.SetDataSource("BXRS", leftBindData.rs);                designer.SetDataSource("BXXS", leftBindData.xs);                designer.SetDataSource("BXZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("BXDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                designer.SetDataSource("BXZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("BXDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                designer.SetDataSource("BXZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);                //ws.Cells.HideRows((Row + startIndex + HideRows), 2);            }            HideRows += 2;            leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("核酸"));            if (leftBindData != null)            {                designer.SetDataSource("HSDRCB", leftBindData.cb);                designer.SetDataSource("HSRS", leftBindData.rs);                designer.SetDataSource("HSXS", leftBindData.xs);                designer.SetDataSource("HSZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("HSDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                designer.SetDataSource("HSZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("HSDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                designer.SetDataSource("HSZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);                //ws.Cells.HideRows((Row + startIndex + HideRows), 2);            }            HideRows += 2;            leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("经济舱"));            if (leftBindData != null)            {                designer.SetDataSource("JPJJCCB", leftBindData.cb);                designer.SetDataSource("JPJJCPnum", leftBindData.rs);                designer.SetDataSource("JPJJCXS", leftBindData.xs);                designer.SetDataSource("JPJJCZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("JPJJCDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                designer.SetDataSource("JPJJCZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("JPJJCDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                designer.SetDataSource("JPJJCZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);                //ws.Cells.HideRows((Row + startIndex + HideRows), 2);            }            HideRows += 2;            leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("公务舱"));            if (leftBindData != null)            {                designer.SetDataSource("JPGWCCB", leftBindData.cb);                designer.SetDataSource("JPGWCPNum", leftBindData.rs);                designer.SetDataSource("JPGWCXS", leftBindData.xs);                designer.SetDataSource("JPGWCZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("JPGWCDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                designer.SetDataSource("JPGWCZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("JPGWCDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                designer.SetDataSource("JPGWCZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);                //ws.Cells.HideRows((Row + startIndex + HideRows), 2);            }            HideRows += 2;            leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("TBR"));            if (leftBindData != null)            {                ////TBR                designer.SetDataSource("HotelTBRDRCB", leftBindData.cb);                designer.SetDataSource("HotelTBRRS", leftBindData.rs);                designer.SetDataSource("HotelTBRXS", leftBindData.xs);                designer.SetDataSource("HotelTBRCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("HotelTBRDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                designer.SetDataSource("HotelTBRZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("HotelTBRDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                designer.SetDataSource("HotelTBRZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);                //ws.Cells.HideRows((Row + startIndex + HideRows), 2);            }            HideRows += 2;            leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("SGR"));            if (leftBindData != null)            {                ////SGR                designer.SetDataSource("HotelSGRDRCB", leftBindData.cb);                designer.SetDataSource("HotelSGRRS", leftBindData.rs);                designer.SetDataSource("HotelSGRXS", leftBindData.xs);                designer.SetDataSource("HotelSGRCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("HotelSGRDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                designer.SetDataSource("HotelSGRZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("HotelSGRDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                designer.SetDataSource("HotelSGRZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);                // ws.Cells.HideRows((Row + startIndex + HideRows), 2);            }            HideRows += 2;            leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("JSES"));            if (leftBindData != null)            {                ////JS/ES                designer.SetDataSource("HotelJSESDRCB", leftBindData.cb);                designer.SetDataSource("HotelJSESRS", leftBindData.rs);                designer.SetDataSource("HotelJSESXS", leftBindData.xs);                designer.SetDataSource("HotelJSESCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("HotelJSESDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                designer.SetDataSource("HotelJSESZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("HotelJSESDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                designer.SetDataSource("HotelJSESZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);                //   ws.Cells.HideRows((Row + startIndex + HideRows), 2);            }            HideRows += 2;            leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("SUITE"));            if (leftBindData != null)            {                ////SUITE                designer.SetDataSource("HotelSUITEDRCB", leftBindData.cb);                designer.SetDataSource("HotelSUITERS", leftBindData.rs);                designer.SetDataSource("HotelSUITEXS", leftBindData.xs);                designer.SetDataSource("HotelSUITECB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("HotelSUITEDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                designer.SetDataSource("HotelSUITEZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("HotelSUITEDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                designer.SetDataSource("HotelSUITEZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);                // ws.Cells.HideRows((Row + startIndex + HideRows), 2);            }            HideRows += 2;            leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("地接"));            if (leftBindData != null)            {                designer.SetDataSource("DJDRCB", leftBindData.cb);                designer.SetDataSource("DJRS", leftBindData.rs);                designer.SetDataSource("DJXS", leftBindData.xs);                designer.SetDataSource("DJCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("DJDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                designer.SetDataSource("DJZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("DJDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                designer.SetDataSource("DJZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);                //ws.Cells.HideRows((Row + startIndex + HideRows), 2);            }            HideRows += 2;            leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("火车票"));            if (leftBindData != null)            {                designer.SetDataSource("HCPCB", leftBindData.cb);                designer.SetDataSource("HCPRS", leftBindData.rs);                designer.SetDataSource("HCPXS", leftBindData.xs);                designer.SetDataSource("HCPZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("HCPDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                designer.SetDataSource("HCPZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("HCPDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                designer.SetDataSource("HCPZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);                //ws.Cells.HideRows((Row + startIndex + HideRows), 2);            }            HideRows += 2;            leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("船票"));            if (leftBindData != null)            {                designer.SetDataSource("CPCB", leftBindData.cb);                designer.SetDataSource("CPRS", leftBindData.rs);                designer.SetDataSource("CPXS", leftBindData.xs);                designer.SetDataSource("CPZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("CPDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                designer.SetDataSource("CPZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("CPDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                designer.SetDataSource("CPZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);                //ws.Cells.HideRows((Row + startIndex + HideRows), 2);            }            HideRows += 2;            leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("公务单人"));            if (leftBindData != null)            {                designer.SetDataSource("GWDRCD", leftBindData.cb);                designer.SetDataSource("GWRS", leftBindData.rs);                designer.SetDataSource("GWXS", leftBindData.xs);                designer.SetDataSource("GWCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("GWDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                designer.SetDataSource("GWZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("GWDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                designer.SetDataSource("GWZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);                //ws.Cells.HideRows((Row + startIndex + HideRows), 2);            }            HideRows += 2;            leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("零用金"));            if (leftBindData != null)            {                designer.SetDataSource("LYJDRCB", leftBindData.cb);                designer.SetDataSource("LYJRS", leftBindData.rs);                designer.SetDataSource("LYJXS", leftBindData.xs);                designer.SetDataSource("LYJCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("LYJDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                designer.SetDataSource("LYJZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                designer.SetDataSource("LYJDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                designer.SetDataSource("LYJZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);                //ws.Cells.HideRows((Row + startIndex + HideRows), 2);            }            #endregion            #region A段Right信息            var right = dto.rightInfo.Find(x => x.Type == "A");            if (right == null)            {                return Ok(jw);            }            HideRows += 4;            var rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("经济舱 TBR"));            if (rightBindData != null)            {                //经济舱 + 双人间 TBR                designer.SetDataSource("lblJJCTBRDRCB", rightBindData.cb);                designer.SetDataSource("txtJJCTBRRS", rightBindData.rs);                designer.SetDataSource("lblJJCTBRZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs));                designer.SetDataSource("lblJJCTBRDRBJ", rightBindData.bj);                designer.SetDataSource("lblJJCTBRZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs));                designer.SetDataSource("lblJJCTBRDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb));                designer.SetDataSource("lblJJCTBRZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs));                TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs);                TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs);                TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs);            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);            }            HideRows += 2;            rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("经济舱 SGR"));            if (rightBindData != null)            {                //经济舱 + 单人间 SGR                designer.SetDataSource("lblJJCSGRDRCB", rightBindData.cb);                designer.SetDataSource("txtJJCSGRRS", rightBindData.rs);                designer.SetDataSource("lblJJCSGRZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs));                designer.SetDataSource("lblJJCSGRDRBJ", rightBindData.bj);                designer.SetDataSource("lblJJCSGRZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs));                designer.SetDataSource("lblJJCSGRDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb));                designer.SetDataSource("lblJJCSGRZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs));                TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs);                TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs);                TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs);            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);            }            HideRows += 2;            rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("公务舱 SGR"));            if (rightBindData != null)            {                //公务舱 + 单人间 SGR                designer.SetDataSource("lblGWCSGRCB", rightBindData.cb);                designer.SetDataSource("lblGWCSGRRS", rightBindData.rs);                designer.SetDataSource("lblGWCSGRZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs));                designer.SetDataSource("lblGWCSGRDRBJ", rightBindData.bj);                designer.SetDataSource("lblGWCSGRZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs));                designer.SetDataSource("lblGWCSGRDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb));                designer.SetDataSource("lblGWCSGRZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs));                TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs);                TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs);                TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs);            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);            }            HideRows += 2;            rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("公务舱 JS/ES"));            if (rightBindData != null)            {                //公务舱 + 小套房 JSES                designer.SetDataSource("lblGWCJSESDRCB", rightBindData.cb);                designer.SetDataSource("txtGWCJSESRS", rightBindData.rs);                designer.SetDataSource("lblGWCJSESZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs));                designer.SetDataSource("lblGWCJSESDRBJ", rightBindData.bj);                designer.SetDataSource("lblGWCJSESZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs));                designer.SetDataSource("lblGWCJSESDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb));                designer.SetDataSource("lblGWCJSESZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs));                TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs);                TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs);                TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs);            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);            }            HideRows += 2;            rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("公务舱 SUITE"));            if (rightBindData != null)            {                //公务舱 + 小套房 JSES                designer.SetDataSource("lblGWCSUITEDRCB", rightBindData.cb);                designer.SetDataSource("txtGWCSUITERS", rightBindData.rs);                designer.SetDataSource("lblGWCSUITEZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs));                designer.SetDataSource("lblGWCSUITEDRBJ", rightBindData.bj);                designer.SetDataSource("lblGWCSUITEZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs));                designer.SetDataSource("lblGWCSUITEDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb));                designer.SetDataSource("lblGWCSUITEZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs));                TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs);                TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs);                TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs);            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);            }            HideRows += 2;            rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("经济舱 SUITE"));            if (rightBindData != null)            {                //经济舱 + 大套房                designer.SetDataSource("lblJJCSUITEDRCB", rightBindData.cb);                designer.SetDataSource("txtJJCSUITERS", rightBindData.rs);                designer.SetDataSource("lblJJCSUITEZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs));                designer.SetDataSource("lblJJCSUITEDRBJ", rightBindData.bj);                designer.SetDataSource("lblJJCSUITEZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs));                designer.SetDataSource("lblJJCSUITEDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb));                designer.SetDataSource("lblJJCSUITEZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs));                TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs);                TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs);                TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs);            }            else            {                hideRowsList.Add(Row + startIndex + HideRows);            }            #endregion            #region B段标题清空            designer.SetDataSource("CostBDRCB", "");            designer.SetDataSource("CostBRS", "");            designer.SetDataSource("CostBXS", "");            designer.SetDataSource("CostBZCB", "");            designer.SetDataSource("CostBDRBJ", "");            designer.SetDataSource("CostBZBJ", "");            designer.SetDataSource("CostBDRLR", "");            designer.SetDataSource("CostBZLR", "");            designer.SetDataSource("CostBDRCBOM", "");            designer.SetDataSource("CostBRSOM", "");            designer.SetDataSource("CostBZCBOM", "");            designer.SetDataSource("CostBDRBJOM", "");            designer.SetDataSource("CostBZBJOM", "");            designer.SetDataSource("CostBDRLROM", "");            designer.SetDataSource("CostBZLROM", "");            #endregion            designer.SetDataSource("HotelTBRName", "酒店TBR单间成本(CNY)");            designer.SetDataSource("HotelSGRName", "酒店SGR单间成本(CNY)");            designer.SetDataSource("HotelJSESName", "酒店JSES单间成本(CNY)");            designer.SetDataSource("HotelSUITEName", "酒店SUITE单间成本(CNY)");            designer.SetDataSource("DJName", "地接(CNY)");            designer.SetDataSource("HCPName", "地接-火车票(CNY)");            designer.SetDataSource("CPName", "地接-船票(CNY)");            designer.SetDataSource("GWName", "公务(CNY)");            designer.SetDataSource("YQHName", "邀请函(CNY)");            designer.SetDataSource("LYJName", "零用金(CNY)");            designer.SetDataSource("HSName", "核酸检测(CNY)");            designer.SetDataSource("AirGWCName", "机票-公务舱(CNY)");            designer.SetDataSource("AirJJCName", "机票-经济舱(CNY)");            designer.SetDataSource("BXName", "保险(CNY)");            designer.SetDataSource("VisaName", "签证(CNY)");            #region B段基本数据            if (dto.costType == "B")            {                left = dto.leftInfo.Find(x => x.Type == "B");                if (left == null)                {                    return Ok(jw);                }                #region B段left数据                leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("核酸"));                if (leftBindData != null)                {                    designer.SetDataSource("BHSDRCB", leftBindData.cb);                    designer.SetDataSource("BHSRS", leftBindData.rs);                    designer.SetDataSource("BHSXS", leftBindData.xs);                    designer.SetDataSource("BHSZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BHSDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                    designer.SetDataSource("BHSZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BHSDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                    designer.SetDataSource("BHSZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));                }                leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("经济舱"));                if (leftBindData != null)                {                    designer.SetDataSource("BJPJJCCB", leftBindData.cb);                    designer.SetDataSource("BJPJJCPnum", leftBindData.rs);                    designer.SetDataSource("BJPJJCXS", leftBindData.xs);                    designer.SetDataSource("BJPJJCZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BJPJJCDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                    designer.SetDataSource("BJPJJCZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BJPJJCDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                    designer.SetDataSource("BJPJJCZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));                }                leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("公务舱"));                if (leftBindData != null)                {                    designer.SetDataSource("BJPGWCCB", leftBindData.cb);                    designer.SetDataSource("BJPGWCPNum", leftBindData.rs);                    designer.SetDataSource("BJPGWCXS", leftBindData.xs);                    designer.SetDataSource("BJPGWCZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BJPGWCDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                    designer.SetDataSource("BJPGWCZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BJPGWCDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                    designer.SetDataSource("BJPGWCZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));                }                leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("火车票"));                if (leftBindData != null)                {                    designer.SetDataSource("BHCPCB", leftBindData.cb);                    designer.SetDataSource("BHCPRS", leftBindData.rs);                    designer.SetDataSource("BHCPXS", leftBindData.xs);                    designer.SetDataSource("BHCPZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BHCPDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                    designer.SetDataSource("BHCPZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BHCPDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                    designer.SetDataSource("BHCPZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));                }                leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("船票"));                if (leftBindData != null)                {                    designer.SetDataSource("BCPCB", leftBindData.cb);                    designer.SetDataSource("BCPRS", leftBindData.rs);                    designer.SetDataSource("BCPXS", leftBindData.xs);                    designer.SetDataSource("BCPZCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BCPDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                    designer.SetDataSource("BCPZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BCPDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                    designer.SetDataSource("BCPZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));                }                //TBR                leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("TBR"));                if (leftBindData != null)                {                    designer.SetDataSource("BHotelTBRDRCB", leftBindData.cb);                    designer.SetDataSource("BHotelTBRRS", leftBindData.rs);                    designer.SetDataSource("BHotelTBRXS", leftBindData.xs);                    designer.SetDataSource("BHotelTBRCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BHotelTBRDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                    designer.SetDataSource("BHotelTBRZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BHotelTBRDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                    designer.SetDataSource("BHotelTBRZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));                }                //SGR                leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("SGR"));                if (leftBindData != null)                {                    designer.SetDataSource("BHotelSGRDRCB", leftBindData.cb);                    designer.SetDataSource("BHotelSGRRS", leftBindData.rs);                    designer.SetDataSource("BHotelSGRXS", leftBindData.xs);                    designer.SetDataSource("BHotelSGRCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BHotelSGRDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                    designer.SetDataSource("BHotelSGRZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BHotelSGRDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                    designer.SetDataSource("BHotelSGRZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));                }                //JS/ES                leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("JSES"));                if (leftBindData != null)                {                    designer.SetDataSource("BHotelJSESDRCB", leftBindData.cb);                    designer.SetDataSource("BHotelJSESRS", leftBindData.rs);                    designer.SetDataSource("BHotelJSESXS", leftBindData.xs);                    designer.SetDataSource("BHotelJSESCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BHotelJSESDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                    designer.SetDataSource("BHotelJSESZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BHotelJSESDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                    designer.SetDataSource("BHotelJSESZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));                }                //SUITE                leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("SUITE"));                if (leftBindData != null)                {                    designer.SetDataSource("BHotelSUITEDRCB", leftBindData.cb);                    designer.SetDataSource("BHotelSUITERS", leftBindData.rs);                    designer.SetDataSource("BHotelSUITEXS", leftBindData.xs);                    designer.SetDataSource("BHotelSUITECB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BHotelSUITEDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                    designer.SetDataSource("BHotelSUITEZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BHotelSUITEDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                    designer.SetDataSource("BHotelSUITEZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));                }                leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("地接"));                if (leftBindData != null)                {                    designer.SetDataSource("BDJDRCB", leftBindData.cb);                    designer.SetDataSource("BDJRS", leftBindData.rs);                    designer.SetDataSource("BDJXS", leftBindData.xs);                    designer.SetDataSource("BDJCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BDJDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                    designer.SetDataSource("BDJZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BDJDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                    designer.SetDataSource("BDJZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));                }                leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("公务单人"));                if (leftBindData != null)                {                    designer.SetDataSource("BGWDRCD", leftBindData.cb);                    designer.SetDataSource("BGWRS", leftBindData.rs);                    designer.SetDataSource("BGWXS", leftBindData.xs);                    designer.SetDataSource("BGWCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BGWDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                    designer.SetDataSource("BGWZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BGWDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                    designer.SetDataSource("BGWZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));                }                #region 优化方案                //Dictionary<string, object> excelBind = new Dictionary<string, object>();                //excelBind.Add("零用金", new {                 //cb="",                //rs="",                //xs ="",                //zcb = "",                //});                #endregion                leftBindData = left.leftinfoNumber.Find(x => x.title.Contains("零用金"));                if (leftBindData != null)                {                    designer.SetDataSource("BLYJDRCB", leftBindData.cb);                    designer.SetDataSource("BLYJRS", leftBindData.rs);                    designer.SetDataSource("BLYJXS", leftBindData.xs);                    designer.SetDataSource("BLYJCB", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BLYJDRBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs));                    designer.SetDataSource("BLYJZBJ", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) * decimal.Parse(leftBindData.rs));                    designer.SetDataSource("BLYJDRLR", decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs) - decimal.Parse(leftBindData.cb));                    designer.SetDataSource("BLYJZLR", ((decimal.Parse(leftBindData.cb) * decimal.Parse(leftBindData.xs)) - decimal.Parse(leftBindData.cb)) * decimal.Parse(leftBindData.rs));                }                #endregion                #region B段Right信息                right = dto.rightInfo.Find(x => x.Type == "B");                if (right == null)                {                    return Ok(jw);                }                rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("经济舱 TBR"));                if (rightBindData != null)                {                    //经济舱 + 双人间 TBR                    designer.SetDataSource("BlblJJCTBRDRCB", rightBindData.cb);                    designer.SetDataSource("BtxtJJCTBRRS", rightBindData.rs);                    designer.SetDataSource("BlblJJCTBRZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs));                    designer.SetDataSource("BlblJJCTBRDRBJ", rightBindData.bj);                    designer.SetDataSource("BlblJJCTBRZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs));                    designer.SetDataSource("BlblJJCTBRDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb));                    designer.SetDataSource("BlblJJCTBRZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs));                    TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs);                    TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs);                    TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs);                }                rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("经济舱 SGR"));                if (rightBindData != null)                {                    //经济舱 + 单人间 SGR                    designer.SetDataSource("BlblJJCSGRDRCB", rightBindData.cb);                    designer.SetDataSource("BtxtJJCSGRRS", rightBindData.rs);                    designer.SetDataSource("BlblJJCSGRZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs));                    designer.SetDataSource("BlblJJCSGRDRBJ", rightBindData.bj);                    designer.SetDataSource("BlblJJCSGRZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs));                    designer.SetDataSource("BlblJJCSGRDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb));                    designer.SetDataSource("BlblJJCSGRZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs));                    TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs);                    TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs);                    TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs);                }                rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("公务舱 SGR"));                if (rightBindData != null)                {                    //公务舱 + 单人间 SGR                    designer.SetDataSource("BlblGWCSGRCB", rightBindData.cb);                    designer.SetDataSource("BlblGWCSGRRS", rightBindData.rs);                    designer.SetDataSource("BlblGWCSGRZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs));                    designer.SetDataSource("BlblGWCSGRDRBJ", rightBindData.bj);                    designer.SetDataSource("BlblGWCSGRZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs));                    designer.SetDataSource("BlblGWCSGRDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb));                    designer.SetDataSource("BlblGWCSGRZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs));                    TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs);                    TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs);                    TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs);                }                rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("公务舱 JS/ES"));                if (rightBindData != null)                {                    //公务舱 + 小套房 JSES                    designer.SetDataSource("BlblGWCJSESDRCB", rightBindData.cb);                    designer.SetDataSource("BtxtGWCJSESRS", rightBindData.rs);                    designer.SetDataSource("BlblGWCJSESZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs));                    designer.SetDataSource("BlblGWCJSESDRBJ", rightBindData.bj);                    designer.SetDataSource("BlblGWCJSESZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs));                    designer.SetDataSource("BlblGWCJSESDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb));                    designer.SetDataSource("BlblGWCJSESZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs));                    TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs);                    TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs);                    TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs);                }                rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("公务舱 SUITE"));                if (rightBindData != null)                {                    //公务舱 + 小套房 JSES                    designer.SetDataSource("BlblGWCSUITEDRCB", rightBindData.cb);                    designer.SetDataSource("BtxtGWCSUITERS", rightBindData.rs);                    designer.SetDataSource("BlblGWCSUITEZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs));                    designer.SetDataSource("BlblGWCSUITEDRBJ", rightBindData.bj);                    designer.SetDataSource("BlblGWCSUITEZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs));                    designer.SetDataSource("BlblGWCSUITEDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb));                    designer.SetDataSource("BlblGWCSUITEZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs));                    TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs);                    TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs);                    TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs);                }                rightBindData = right.rightInfoNumber.Find(x => x.title.Contains("经济舱 SUITE"));                if (rightBindData != null)                {                    //经济舱 + 大套房                    designer.SetDataSource("BlblJJCSUITEDRCB", rightBindData.cb);                    designer.SetDataSource("BtxtJJCSUITERS", rightBindData.rs);                    designer.SetDataSource("BlblJJCSUITEZCB", decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs));                    designer.SetDataSource("BlblJJCSUITEDRBJ", rightBindData.bj);                    designer.SetDataSource("BlblJJCSUITEZBJ", decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs));                    designer.SetDataSource("BlblJJCSUITEDRLR", decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb));                    designer.SetDataSource("BlblJJCSUITEZLR", (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs));                    TzZCB2 += decimal.Parse(rightBindData.cb) * decimal.Parse(rightBindData.rs);                    TzZLR2 += (decimal.Parse(rightBindData.bj) - decimal.Parse(rightBindData.cb)) * decimal.Parse(rightBindData.rs);                    TzZBJ2 += decimal.Parse(rightBindData.bj) * decimal.Parse(rightBindData.rs);                }                #endregion                #region 标题                designer.SetDataSource("CostBDRCB", "单人成本");                designer.SetDataSource("CostBRS", "人数");                designer.SetDataSource("CostBXS", "系数");                designer.SetDataSource("CostBZCB", "总成本");                designer.SetDataSource("CostBDRBJ", "单人报价");                designer.SetDataSource("CostBZBJ", "总报价");                designer.SetDataSource("CostBDRLR", "单人利润");                designer.SetDataSource("CostBZLR", "总利润");                designer.SetDataSource("CostBDRCBOM", "单人成本");                designer.SetDataSource("CostBRSOM", "人数");                designer.SetDataSource("CostBZCBOM", "总成本");                designer.SetDataSource("CostBDRBJOM", "单人报价");                designer.SetDataSource("CostBZBJOM", "总报价");                designer.SetDataSource("CostBDRLROM", "单人利润");                designer.SetDataSource("CostBZLROM", "总利润");                #endregion            }            #endregion            designer.SetDataSource("TzZCB2", TzZCB2);            designer.SetDataSource("TzZBJ2", TzZBJ2);            designer.SetDataSource("TzZLR2", TzZLR2);            string[] dataSourceKeys = new string[]                                {                                    "VF",                                    "TGS",                                    "TGOF",                                    "TGM",                                    "TGA",                                    "TGTF",                                    "TGEF",                                    "CFM",                                    "CFOF",                                    "B",                                    "L",                                    "D",                                    "TBR",                                    "SGR",                                    "JSES",                                    "Suite",                                    "TV",                                    "1L",                                    "IF",                                    "EF",                                    "BRF",                                    "TE",                                    "TGT",                                    "DRVT",                                    "PC",                                    "TLF",                                    "ECT"                                };            foreach (var item in dataSourceKeys)            {                var find = dto.titleModel.FirstOrDefault(x => x.label.Replace(" ", "").Replace("/", "") == item);                if (find != null)                {                    designer.SetDataSource(item, find.text);                }                else                {                    designer.SetDataSource(item, 0);                }            }            designer.SetDataSource(dt);            //根据数据源处理生成报表内容            designer.Process();            designer.Workbook.Worksheets[0].Name = "清单";            Worksheet sheet = designer.Workbook.Worksheets[0];            foreach (var Rowindex in hideRowsList)            {                ws.Cells.HideRows(Rowindex, 2);            }            byte[] bytes = null;            string strFileName = di.TeamName + "-团组-成本.xls";            using (MemoryStream stream = new MemoryStream())            {                designer.Workbook.Save(stream, Aspose.Cells.SaveFormat.Xlsx);                bytes = stream.ToArray();            }            return Ok(JsonView(true, "", new            {                Data = bytes,                strFileName,            }));        }        /// <summary>        /// 导出客户报表        /// </summary>        /// <returns></returns>        [HttpPost]        public async Task<IActionResult> ExportClientWordFile(ExportClientWordFileDto dto)        {            var jw = JsonView(false);            if (dto.Diid == 0)            {                return Ok(JsonView(false, "请传递团组id"));            }            var deleInfo = await _groupRepository.PostGroupInfo(new GroupInfoDto { Id = dto.Diid, PortType = 1 });            if (deleInfo.Code != 0)            {                return Ok(JsonView(false, "团组信息查询失败!"));            }            var di = deleInfo.Data as DelegationInfoWebView;            if (di == null)            {                return Ok(JsonView(false, "团组信息查询失败!"));            }            //文件名            //string strFileName = di.TeamName + "-团组-客户报价.doc";            //获取模板            string tmppath = (AppSettingsHelper.Get("WordBasePath") + "Template/团组-客户报价.doc");            //载入模板            Document doc = new Document(tmppath);            Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(doc);            Dictionary<string, string> DickeyValue = new Dictionary<string, string>();            DickeyValue.Add("DickeyValue", di.TeamName);  //团组名            var ParameterList = _GroupCostParameterRepository.GetGroupCostParameterListByDiid(dto.Diid);            var AParameter = ParameterList.Find(x => x.CostType == "A");            var BParameter = ParameterList.Find(x => x.CostType == "B");            if (AParameter == null)            {                return Ok(JsonView(false, "系数不存在!"));            }            string CarGuides, TzNumber, CarGuides1, Meal, SubsidizedMeals, NightRepair, AttractionsTickets, MiscellaneousFees, ATip, TzHotelDesc, Offcial, PettyCash, Visa, TrainTicket, TicketPrice                , TzAirDesc, TzZCost;            CarGuides = TzNumber = CarGuides1 = Meal = SubsidizedMeals = NightRepair = AttractionsTickets = MiscellaneousFees = ATip = TzHotelDesc = Offcial = PettyCash = Visa = TrainTicket = TicketPrice                = TzAirDesc = TzZCost = string.Empty;            TzNumber = AParameter.CostTypenumber.ToString();            CarGuides = "RMB " + (AParameter.DJCB * AParameter.DJXS).ToString("#0.00");            CarGuides1 = dto.CarGuides1;            Meal = dto.Meal;            SubsidizedMeals = dto.SubsidizedMeals;            NightRepair = dto.NightRepair;            AttractionsTickets = dto.AttractionsTickets;            MiscellaneousFees = dto.MiscellaneousFees;            ATip = dto.ATip;            TzHotelDesc = "";            Offcial = "RMB " + (AParameter.GWCB * AParameter.GWXS).ToString("#0.00");            PettyCash = "RMB " + (AParameter.LYJCB * AParameter.LYJXS).ToString("#0.00");            Visa = "RMB " + (AParameter.VisaCB * AParameter.VisaXS + AParameter.HSCB * AParameter.HSXS + AParameter.BXCB * AParameter.BXXS).ToString("#0.00");            TrainTicket = "RMB " + (AParameter.HCPCB * AParameter.HCPXS).ToString("#0.00");            TicketPrice = "RMB " + (AParameter.CPCB * AParameter.CPXS).ToString("#0.00");            TzAirDesc = "";            TzZCost = dto.TzZCost;            var TzHotelDescArr = new string[] { "SGR", "JSES", "SUITE", "TBR" };            var TzAirDescArr = new string[] { "经济舱", "公务舱" };            var index = 1;            var AinfoArr = dto.leftInfo.Find(x => x.Type == "A");            foreach (var item in TzHotelDescArr)            {                if (AinfoArr != null)                {                    var Ainfo = AinfoArr.leftinfoNumber.Find(x => x.title.Contains(item));                    if (Ainfo != null)                    {                        if (int.Parse(Ainfo.rs) <= 0)                        {                            continue;                        }                        var hotelText = string.Empty;                        switch (item)                        {                            case "SGR":                                hotelText = "单人间";                                break;                            case "JSES":                                hotelText = "小套房";                                break;                            case "SUITE":                                hotelText = "套房";                                break;                            case "TBR":                                hotelText = "双人间";                                break;                        }                        if (item != "TBR")                        {                            TzHotelDesc += "(" + index + ".) " + hotelText + "  " + Ainfo.rs + "间   共" + Ainfo.rs + "   " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs)).ToString("#0.00") + "/人........共RMB  " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs) * decimal.Parse(Ainfo.rs)).ToString("#0.00") + "\n";                        }                        else                        {                            TzHotelDesc += "(" + index + ".)  " + hotelText + "  " + (int.Parse(Ainfo.rs) / 2) + "间   共" + Ainfo.rs + "   " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs)).ToString("#0.00") + "/人........共RMB  " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs) * decimal.Parse(Ainfo.rs)).ToString("#0.00") + "\n";                        }                        index++;                    }                }            }            index = 1;            foreach (var item in TzAirDescArr)            {                if (AinfoArr != null)                {                    var Ainfo = AinfoArr.leftinfoNumber.Find(x => x.title.Contains(item));                    if (Ainfo != null)                    {                        if (int.Parse(Ainfo.rs) <= 0)                        {                            continue;                        }                        TzAirDesc += "(" + index + ".) " + item + "    " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs)).ToString("#0.00") + "/人  共" + Ainfo.rs + "  ........小计RMB  " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs) * decimal.Parse(Ainfo.rs)).ToString("#0.00") + "\n";                        index++;                    }                }            }            if (dto.costType == "B")            {                if (BParameter == null)                {                    return Ok(JsonView(false, "B段系数不存在!"));                }                CarGuides = CarGuides.Insert(0, "A段 ") + " B段 RMB" + (BParameter.DJCB * BParameter.DJXS).ToString("#0.00");                Offcial = Offcial.Insert(0, "A段 ") + " B段 RMB " + (BParameter.GWCB * BParameter.GWXS).ToString("#0.00");                PettyCash = PettyCash.Insert(0, "A段 ") + " B段 RMB " + (BParameter.LYJCB * BParameter.LYJXS).ToString("#0.00");                Visa = Visa.Insert(0, "A段 ") + " B段 RMB " + (BParameter.VisaCB * BParameter.VisaXS + BParameter.HSCB * BParameter.HSXS + BParameter.BXCB * BParameter.BXXS).ToString("#0.00");                TrainTicket = TrainTicket.Insert(0, "A段 ") + " B段 RMB " + (BParameter.HCPCB * BParameter.HCPXS).ToString("#0.00");                TicketPrice = TicketPrice.Insert(0, "A段 ") + " B段 RMB " + (BParameter.CPCB * BParameter.CPXS).ToString("#0.00");                AinfoArr = dto.leftInfo.Find(x => x.Type == "B");                foreach (var item in TzHotelDescArr)                {                    if (AinfoArr != null)                    {                        TzHotelDesc += "B段信息 \r\n";                        var Ainfo = AinfoArr.leftinfoNumber.Find(x => x.title.Contains(item));                        if (Ainfo != null)                        {                            if (int.Parse(Ainfo.rs) <= 0)                            {                                continue;                            }                            var hotelText = string.Empty;                            switch (item)                            {                                case "SGR":                                    hotelText = "单人间";                                    break;                                case "JSES":                                    hotelText = "小套房";                                    break;                                case "SUITE":                                    hotelText = "套房";                                    break;                                case "TBR":                                    hotelText = "双人间";                                    break;                            }                            if (item != "TBR")                            {                                TzHotelDesc += "(" + index + ".) " + hotelText + "  " + Ainfo.rs + "间   共" + Ainfo.rs + "   " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs)).ToString("#0.00") + "/人........共RMB  " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs) * decimal.Parse(Ainfo.rs)).ToString("#0.00") + "\n";                            }                            else                            {                                TzHotelDesc += "(" + index + ".)  " + hotelText + "  " + (int.Parse(Ainfo.rs) / 2) + "间   共" + Ainfo.rs + "   " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs)).ToString("#0.00") + "/人........共RMB  " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs) * decimal.Parse(Ainfo.rs)).ToString("#0.00") + "\n";                            }                            index++;                        }                        TzHotelDesc = TzHotelDesc.Insert(0, "A段信息  \r\n");                    }                }                index = 1;                foreach (var item in TzAirDescArr)                {                    if (AinfoArr != null)                    {                        var Ainfo = AinfoArr.leftinfoNumber.Find(x => x.title.Contains(item));                        if (Ainfo != null)                        {                            if (int.Parse(Ainfo.rs) <= 0)                            {                                continue;                            }                            TzAirDesc += "(" + index + ".) " + item + "    " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs)).ToString("#0.00") + "/人  共" + Ainfo.rs + "  ........小计RMB  " + (decimal.Parse(Ainfo.cb) * decimal.Parse(Ainfo.xs) * decimal.Parse(Ainfo.rs)).ToString("#0.00") + "\n";                            index++;                        }                    }                }            }            Visa = Visa.Insert(0, "签证及保险(含核酸检测): ");            DickeyValue.Add("TzNumber", TzNumber); //团组人数            DickeyValue.Add("CarGuides", CarGuides); //地接单人报价            DickeyValue.Add("CarGuides1", CarGuides1); // 地接 - 车导费            DickeyValue.Add("Meal", Meal); // 地接 - 餐费            DickeyValue.Add("SubsidizedMeals", SubsidizedMeals);// 地接 - 餐补            DickeyValue.Add("NightRepair", NightRepair); // 地接 - 宿补            DickeyValue.Add("AttractionsTickets", AttractionsTickets); // 地接 - 景点            DickeyValue.Add("MiscellaneousFees", MiscellaneousFees); // 地接 - 杂费            DickeyValue.Add("ATip", ATip);   // 地接 - 小费            DickeyValue.Add("TzHotelDesc", TzHotelDesc); //酒店            DickeyValue.Add("Offcial", Offcial); // 公务单人报价            DickeyValue.Add("PettyCash", PettyCash); // 零用金单人报价            DickeyValue.Add("Visa", Visa); // 签证单人报价            DickeyValue.Add("TrainTicket", TrainTicket); //火车票            DickeyValue.Add("TicketPrice", TicketPrice); //船票            DickeyValue.Add("TzAirDesc", TzAirDesc); //机票            DickeyValue.Add("TzZCost", TzZCost);            foreach (var key in DickeyValue.Keys)            {                if (doc.Range.Bookmarks[key] != null)                {                    Bookmark mark = doc.Range.Bookmarks[key];                    mark.Text = DickeyValue[key];                }            }            byte[] bytes = null;            string strFileName = di.TeamName + "-客户报价.doc";            using (MemoryStream stream = new MemoryStream())            {                doc.Save(stream, Aspose.Words.SaveFormat.Doc);                bytes = stream.ToArray();            }            return Ok(JsonView(true, "", new            {                Data = bytes,                strFileName,            }));        }        /// <summary>        ///  团组成本 各模块(酒店,地接,机票)成本提示        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostGroupCostModulePrompt(GroupCostModulePromptDto dto)        {            try            {                #region 参数验证                if (dto.DiId < 0)                {                    return Ok(JsonView(false, "请传入有效的DiId参数!"));                }                List<int> cTableIds = new List<int>() {                    76    ,//酒店预订                    77    ,//行程                    79    ,//车/导游地接                    80    ,//签证                    81    ,//邀请/公务活                    82    ,//团组客户保险                    85    ,//机票预订                    98    ,//其他款项                    285   ,//收款退还                    751   ,//酒店早餐                    1015   // 超支费用                };                if (dto.CTable < 0 && !cTableIds.Contains(dto.CTable))                {                    return Ok(JsonView(false, "请传入有效的CTable参数!"));                }                #endregion                //Grp_GroupCostParameter 预算表 Grp_GroupCost 详细费用列表                var _GroupCostParameters = _usersRep._sqlSugar.Queryable<Grp_GroupCostParameter>().Where(it => it.IsDel == 0 && it.DiId == dto.DiId).ToList();                if (_GroupCostParameters.Count <= 0)                {                    return Ok(JsonView(false, "暂无该团组成本信息!", new List<dynamic>()));                }                if (_GroupCostParameters[0].IsShare == 0)                {                    return Ok(JsonView(false, "该团组成本未完成!", new List<dynamic>()));                }                var _GroupCosts = _usersRep._sqlSugar.Queryable<Grp_GroupCost>().Where(it => it.IsDel == 0 && it.Diid == dto.DiId).ToList();                //处理date为空问题                if (_GroupCosts.Count > 0)                {                    for (int i = 0; i < _GroupCosts.Count; i++)                    {                        if (string.IsNullOrEmpty(_GroupCosts[i].Date))                        {                            if (i > 0)                            {                                _GroupCosts[i].Date = _GroupCosts[i - 1].Date;                            }                        }                    }                }                GroupCostModulePromptView _view = new GroupCostModulePromptView();                List<GroupCostModulePromptInfo> _ModulePromptInfos = new List<GroupCostModulePromptInfo>(); //机票存储多段                var currDatas = _sqlSugar.Queryable<Sys_SetData>().Where(it => it.IsDel == 0 && it.STid == 66).ToList();                string currCode = "";                #region currCode 验证                bool isInt = int.TryParse(_GroupCostParameters[0].Currency, out int intCurrency);                if (isInt)                {                    var currData = currDatas.Find(it => it.Id == intCurrency);                    if (currData != null)                    {                        currCode = currData.Name;                    }                }                else                {                    currCode = _GroupCostParameters[0].Currency.Trim();                }                #endregion                //op,酒店单段模式存储                GroupCostModulePromptInfo _ModulePromptInfo = new GroupCostModulePromptInfo()                {                    CurrencyCode = currCode,                    Rate = _GroupCostParameters[0].Rate,                    CostType = _GroupCostParameters[0].CostType,                    CostTypeStartTime = Convert.ToDateTime(_GroupCostParameters[0].CostTypeStartTime).ToString("yyyy-MM-dd"),                    CostTypeEndTime = Convert.ToDateTime(_GroupCostParameters[0].CostTypeendTime).ToString("yyyy-MM-dd"),                    CostTypeNumber = _GroupCostParameters[0].CostTypenumber                };                List<dynamic> _ModuleSubPromptInfo = new List<dynamic>(); // 存储CTbale != 85 的动态数据                if (_GroupCostParameters.Count == 2)                {                    _ModulePromptInfo.CostTypeEndTime = Convert.ToDateTime(_GroupCostParameters[1].CostTypeendTime).ToString("yyyy-MM-dd");                }                foreach (var item in _GroupCostParameters)                {                    decimal _rate = 1;                    decimal _rate1 = item.Rate;                    decimal _scale = 1;                    //decimal _scale = 0.95M; 雷怡 2024-06-11 10:06:08  屏蔽                    #region 处理地接价格比例 总经理 国交部经理 主管 不下调 其他人 下调 5%                     //var userInfo = _usersRep._sqlSugar.Queryable<Sys_Users>().Where(it => it.IsDel == 0 && it.Id == dto.UserId).First();                    //if (userInfo != null)                    //{                    //    if (userInfo.DepId == 1 || userInfo.DepId == 7)                    //    {                    //        if (userInfo.JobPostId == 1 || userInfo.JobPostId == 22 || userInfo.JobPostId == 32)                    //        {                    //            _scale = 1.00M;                    //        }                    //    }                    //}                    #endregion                    GroupCostModulePromptInfo modulePromptInfo = new GroupCostModulePromptInfo()                    {                        CurrencyCode = currCode,                        Rate = _rate1,                        CostType = item.CostType,                        CostTypeStartTime = Convert.ToDateTime(item.CostTypeStartTime).ToString("yyyy-MM-dd"),                        CostTypeEndTime = Convert.ToDateTime(item.CostTypeendTime).ToString("yyyy-MM-dd"),                        CostTypeNumber = item.CostTypenumber                    };                    if (_GroupCostParameters.Count > 1)                    {                        modulePromptInfo.CostTypeNumber = item.CostTypenumber;                    }                    else                    {                        modulePromptInfo.CostTypeNumber = item.LYJRS;                    }                    if (dto.CTable == 79)//                    {                        modulePromptInfo.IndividualCost = item.DJCB / modulePromptInfo.CostTypeNumber;                        modulePromptInfo.TotalCost = item.DJCB;                    }                    List<string> costTypes = new List<string>() { "A", "B" };                    List<Grp_GroupCost> _GroupCostsTypeData = new List<Grp_GroupCost>();                    var _GroupCostsDuplicates = _GroupCostParameters.GroupBy(x => x.CostType).Select(y => y.FirstOrDefault());                    if (_GroupCostsDuplicates.Count() == 1)                    {                        _GroupCostsTypeData = _GroupCosts;                    }                    else                    {                        _GroupCostsTypeData = _GroupCosts.Where(it => Convert.ToDateTime(it.Date) >= Convert.ToDateTime(item.CostTypeStartTime) &&                                                                      Convert.ToDateTime(it.Date) <= Convert.ToDateTime(item.CostTypeendTime)).ToList();                    }                    /*                     *  76	酒店预订                     *  77	行程                     *  79	车/导游地接                     *  80	签证                     *  81	邀请/公务活动                     *  82	团组客户保险                     *  85	机票预订                     *  98	其他款项                     *  285	收款退还                     *  751	酒店早餐                     *  1015	超支费用                     */                    switch (dto.CTable)                    {                        case 76: // 酒店预订                            _ModuleSubPromptInfo.AddRange(                                _GroupCostsTypeData.Select(it => new                                {                                    it.DAY,                                    it.Date,                                    it.ACCON,                                    it.ITIN,                                    it.SGR,                                    it.TBR,                                    it.JS_ES,                                    it.Suite                                })                            );                            break;                        case 79: // 车/导游地接                            _ModuleSubPromptInfo.AddRange(                                _GroupCostsTypeData.Select(it => new                                {                                    Date = it.Date,                       //日期                                    CarFee = it.CarCost * _rate * _scale, //车费用                                    CarType = it.CarType,                 //车型                                    DriverFee = it.CFS * _rate * _scale,  //司机工资                                    DriverTipsFee = it.DRVTips * _rate * _scale,  //司机小费                                    DriverMealSubsidy = it.CFM * _rate * _scale,  //司机餐补                                    DriverOvertimeFee = it.CFOF * _rate * _scale, //司机超时费用                                    GuideFee = it.TGS * _rate * _scale,           //导游费用                                    GuideOvertimeFee = it.TGOF * _rate * _scale,  //导游超时费用                                    GuideMealSubsidy = it.TGM * _rate * _scale,   //导游餐补                                    GuideRoomSubsidy = it.TGA * _rate * _scale,   //导游房补                                    GuideCarFare = it.TGTF * _rate * _scale,      //导游交通费                                    GuideSpotFee = it.TGEF * _rate * _scale,      //导游景点费                                    GuideTipsFee = it.TGTips * _rate * _scale,    //导游小费                                    Breakfast = it.B * _rate * _scale,            //早餐费                                    Lunch = it.L * _rate * _scale,                //午餐费                                    Dinner = it.D * _rate * _scale,               //晚餐费                                    TicketFee = it.EF * _rate * _scale,           //门票费                                     SpentCash = it.PC * _rate * _scale,           //零用金                                    LeadersFee = it.TLF * _rate * _scale,         //领队费                                    DrinksSnacksFruitFee = it.B_R_F * _rate * _scale, //饮料零食水果                                    TravelSupplies = it.TE * _rate * _scale,      //出行物资                                })                            );                            break;                        case 85: // 机票                            List<dynamic> datas = new List<dynamic>();                            datas.Add(                                new                                {                                    AirType = "经济舱",                                    AirNum = item.JJCRS,                                    AirDRCB = item.JJCCB,                                    AirZCB = (item.JJCRS * item.JJCCB)                                }                            );                            datas.Add(                                new                                {                                    AirType = "公务舱",                                    AirNum = item.GWCRS,                                    AirDRCB = item.GWCCB,                                    AirZCB = (item.GWCRS * item.GWCCB)                                }                            );                            var groupCosts = _usersRep._sqlSugar.Queryable<Grp_GroupCost>().Where(it => it.IsDel == 0 && it.Diid == dto.DiId).ToList();                            var initDatas = groupCosts.Select(it => new { date = it.Date, week = it.Date.GetWeek() == "" ? "-" : it.Date.GetWeek(), itinerary = it.ITIN }).ToList();                            modulePromptInfo.Data = new                            {                                airFeeData = datas,                                airInitData = initDatas                            };                            _ModulePromptInfos.Add(modulePromptInfo);                            break;                        default:                            break;                    }                }                if (dto.CTable != 85)                {                    _ModulePromptInfo.Data = _ModuleSubPromptInfo;                    _ModulePromptInfos.Add(_ModulePromptInfo);                }                _view.ModulePromptInfos = _ModulePromptInfos;                return Ok(JsonView(true, "操作成功!", _view));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 根据黑屏代码重新生成行程        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public IActionResult CraeteGroupCostTravel(GroupCostInItDto dto)        {            var jw = JsonView(false);            var Create = _GroupCostRepository.                CreateGroupCostByBlackCode(dto.Diid);            jw.Msg = Create.Msg;            if (Create.Code == 0)            {                jw.Code = 200;                jw.Data = new                {                    groupCost = Create.Data,                    blackCodeIsTrue = true                };            }            else            {                jw.Code = 400;                jw.Data = new                {                    groupCost = Create.Data,                    blackCodeIsTrue = false,                };            }            return Ok(jw);        }        /// <summary>        /// 成本获取OP历史车费用        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public async Task<IActionResult> GetHistoryCarData(HistoryCarDataDto dto)        {            var jw = JsonView(false);            try            {                List<HistoryCarDataView> dbResult = new List<HistoryCarDataView>();                //获取现有所有车的数据                if (!dto.Param.IsNullOrWhiteSpace())                {                    string sql = $@"SELECT gdi.TeamName , gctggr.Area, gctggr.PriceName  , gctggrc.Id  ,gctggrc.Price , gctggrc.DatePrice , gctggrc.PriceContent , gctggrc.Currency , gctggr.ServiceStartTime , gctggr.ServiceEndTime FROM  Grp_CarTouristGuideGroundReservationsContent gctggrc inner join Grp_CarTouristGuideGroundReservations gctggr  on gctggrc.CTGGRId  = gctggr.Id  inner JOIN  Grp_DelegationInfo gdi  on gctggr.DiId = gdi.Id  LEFT JOIN  Sys_SetData ssd  on ssd.Id  = gctggr.PriceType  WHERE gctggr.IsDel  = 0  and gctggrc.SId  = 91  AND  gdi.IsDel  = 0 AND  gctggrc.Price != 0   AND (ssd.Id in (1061,1069) or ssd.Id is NULL) AND  gctggr.ServiceStartTime is not null AND  gctggr.ServiceEndTime is not NULL ORDER by  gctggrc.id DESC ";                    dbResult = await _sqlSugar.SqlQueryable<HistoryCarDataView>(sql).ToListAsync();                    var numeberResult = await Task.Run(() =>                    {                        var numberArr = dbResult.Where(x => int.TryParse(x.Area, out int number)).ToList();                        _ = dbResult.RemoveAll(x => int.TryParse(x.Area, out int number));                        return numberArr;                    });                    var cityArr = await _sqlSugar.Queryable<Grp_NationalTravelFee>().ToListAsync();                    foreach (var item in numeberResult)                    {                        var find = cityArr.Find(x => x.Id == int.Parse(item.Area)) ?? new Grp_NationalTravelFee                        {                            Country = "数据异常!",                            City = string.Empty,                        };                        item.Area = find.Country + " " + find.City;                    }                    dbResult.AddRange(numeberResult);                    if (dto.Param.Contains("、"))                    {                        var sp = dto.Param.Split("、");                        dbResult = dbResult.AsParallel().WithDegreeOfParallelism(Environment.ProcessorCount)                           .Where(x =>                           {                               return System.Array.Exists(sp, e =>                               {                                   bool where = false;                                   if (x.Area != null)                                   {                                       where = x.Area.Contains(e);                                       if (x.Area.Contains("尾款") || x.PriceName.Contains("尾款"))                                       {                                           return false;                                       }                                   }                                   if (x.PriceName != null && !where)                                   {                                       where = x.PriceName.Contains(e);                                       if (x.PriceName.Contains("尾款") || x.PriceName.Contains("尾款"))                                       {                                           return false;                                       }                                   }                                   return where;                               });                           }).ToList();                    }                    else                    {                        dbResult = dbResult.AsParallel().WithDegreeOfParallelism(Environment.ProcessorCount)                            .Where(x =>                            {                                bool where = false;                                if (x.Area != null)                                {                                    where = x.Area.Contains(dto.Param);                                    if (x.Area.Contains("尾款") || x.PriceName.Contains("尾款"))                                    {                                        return false;                                    }                                }                                if (x.PriceName != null && !where)                                {                                    where = x.PriceName.Contains(dto.Param);                                    if (x.PriceName.Contains("尾款") || x.PriceName.Contains("尾款"))                                    {                                        return false;                                    }                                }                                return where;                            }                            )                            .ToList();                    }                }                var view = dbResult.Select(x =>                {                    decimal dp = 0.00M;                    var startB = DateTime.TryParse(x.Start.ToString(), out DateTime startD);                    var endB = DateTime.TryParse(x.End.ToString(), out DateTime endD);                    if (string.IsNullOrWhiteSpace(x.DatePrice))                    {                        if (startB && endB)                        {                            var timesp = endD.Subtract(startD);                            if ((timesp.Days + 1) != 0)                            {                                dp = x.Price / (timesp.Days + 1);                            }                        }                    }                    else                    {                        dp = x.Price;                    }                    return new                    {                        start = startB ? startD.ToString("yyyy-MM-dd") : "",                        end = endB ? endD.ToString("yyyy-MM-dd") : "",                        x.Area,                        x.id,                        price = x.Price.ToString("F2"),                        x.PriceName,                        x.PriceContent,                        x.TeamName,                        x.DatePrice,                        dayPrice = dp.ToString("F2"),                    };                }).OrderByDescending(x => x.id).ToList();                jw = JsonView(true, "获取成功!", view);            }            catch (Exception e)            {                jw = JsonView(false, e.Message);            }            return Ok(jw);        }        #endregion        #region 酒店预订 新 雷怡 2023-12-28 17:45        /// <summary>        /// 酒店预订         /// 酒店费用列表 根据团组Id查询        /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostHotelReservationsItemsByDiId(HotelReservationItemDto _dto)        {            #region  参数验证            if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));            if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id            if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空"));            #region 团组操作权限验证 76 酒店预定模块            var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76);            if (groupAuthView.Code != 0) return Ok(JsonView(false, groupAuthView.Msg));            #endregion            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            #region 页面操作权限验证            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);            if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限!"));            #endregion            #endregion            return Ok(await _hotelPriceRep._ItemsByDiId(_dto.PortType, _dto.DiId));        }        /// <summary>        /// 酒店预订        /// 基础数据        /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostHotelReservationsBasicsDataInit(HotelReservationBasicsDataInitDto _dto)        {            #region  参数验证            if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));            if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id            if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空"));            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            #region 页面操作权限验证            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);            if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限!"));            #endregion            #region 团组操作权限验证 76 酒店预定模块            var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76);            if (groupAuthView.Code != 0) return Ok(JsonView(false, groupAuthView.Msg));            #endregion            #endregion            return Ok(await _hotelPriceRep._BasicsDataInit(_dto.PortType, _dto.DiId));        }        /// <summary>        /// 酒店预订        /// 创建 入住卷号码        /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostHotelReservationsCreateCheckVolumeNo(HotelReservationBasicsDataInitDto _dto)        {            try            {                #region  参数验证                if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));                if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id                if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空"));                PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();                #region 页面操作权限验证                pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);                if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限!"));                #endregion                #region 团组操作权限验证 76 酒店预定模块                var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76);                if (groupAuthView.Code != 0) return Ok(JsonView(false, groupAuthView.Msg));                #endregion                #endregion                Result data = await _hotelPriceRep._CreateCheckVolumeNo(_dto.DiId);                if (data.Code != 0)                {                    return Ok(JsonView(false, data.Msg));                }                return Ok(JsonView(true, data.Msg, data.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 酒店预订        /// 详情        /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostHotelReservationsDetails(HotelReservationsDetailsDto _dto)        {            #region  参数验证            if (_dto.UserId < 1) return Ok(JsonView(false, "请传入正确的UserId参数"));            if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id            if (_dto.DiId < 1) return Ok(JsonView(false, "请传入正确的DiId参数"));            #region 团组操作权限验证 76 酒店预定模块            var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76);            if (groupAuthView.Code != 0) return Ok(JsonView(false, groupAuthView.Msg));            #endregion            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            #region 页面操作权限验证            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);            if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限!"));            #endregion            #endregion            return Ok(await _hotelPriceRep._Details(_dto.PortType, _dto.Id));        }        /// <summary>        /// 酒店预订        /// Add Or Edit         /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostHotelReservationsAddOrEdit(HotelReservationsAddOrEditDto _dto)        {            #region  参数验证            if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));            if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id            if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空"));            #region 团组操作权限验证 76 酒店预定模块            var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76);            if (groupAuthView.Code != 0) return Ok(JsonView(false, groupAuthView.Msg));            #endregion            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            #region 页面操作权限验证            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);            if (_dto.Id == 0) // Add            {                if (pageFunAuthView.AddAuth == 0) return Ok(JsonView(false, "您没有添加权限!"));            }            else if (_dto.Id > 1) // Edit            {                if (pageFunAuthView.EditAuth == 0) return Ok(JsonView(false, "您没有编辑权限!"));            }            else return Ok(JsonView(false, "请输入正确的数据Id!"));            #endregion            #endregion            JsonView _view = await _hotelPriceRep._AddOrEdit(_dto);            if (_view.Code != 200)            {                return Ok(_view);            }            #region 应用推送            try            {                int ccpId = (int)_view.Data.GetType().GetProperty("ccpId").GetValue(_view.Data, null);                int sign = (int)_view.Data.GetType().GetProperty("sign").GetValue(_view.Data, null);                int hotelId = (int)_view.Data.GetType().GetProperty("hotelId").GetValue(_view.Data, null);                await AppNoticeLibrary.SendChatMsg_GroupStatus_ApplyFee(ccpId, sign, QiyeWeChatEnum.GuoJiaoLeaderChat);                //自动审核                await _feeAuditRep.FeeAutomaticAudit(1, _dto.DiId, hotelId);            }            catch (Exception ex)            {            }            #endregion            return Ok(_view);        }        /// <summary>        /// 酒店预订        /// Del         /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostHotelReservationsDel(HotelReservationsDelDto _dto)        {            #region  参数验证            if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));            if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id            if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空"));            #region 团组操作权限验证 76 酒店预定模块            var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76);            if (groupAuthView.Code != 0) return Ok(JsonView(false, groupAuthView.Msg));            #endregion            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            #region 页面操作权限验证            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);            if (pageFunAuthView.DeleteAuth == 0) return Ok(JsonView(false, "您没有删除权限!"));            #endregion            #endregion            return Ok(await _hotelPriceRep._Del(_dto.Id, _dto.UserId));        }        /// <summary>        /// 酒店预订        /// 生成VOUCHER        /// 2024.05.06 之前版本        /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostHotelReservationsCreateVoucher1(HotelReservationsCreateVoucherDto _dto)        {            try            {                #region  参数验证                if (_dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));                if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id                if (_dto.DiId < 1) return Ok(JsonView(false, "团组Id为空"));                #region 团组操作权限验证 76 酒店预定模块                var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76);                if (groupAuthView.Code != 0) return Ok(JsonView(false, groupAuthView.Msg));                #endregion                PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();                #region 页面操作权限验证                pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);                if (pageFunAuthView.FilesDownloadAuth == 0) return Ok(JsonView(false, "您没有文件下载权限!"));                #endregion                #endregion                Grp_HotelReservations hr = await _sqlSugar.Queryable<Grp_HotelReservations>().Where(it => it.IsDel == 0 && it.Id == _dto.Id).FirstAsync();                //判断数据是否完整                if (hr != null)                {                    if (!string.IsNullOrEmpty(hr.DetermineNo))                    {                        string strFileName = "HotelStatement/";                        Grp_DelegationInfo dele = await _sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0 && it.Id == _dto.DiId).FirstAsync();                        if (dele != null)                            strFileName += dele.TourCode;                        //载入模板                        string sss = AppSettingsHelper.Get("WordBasePath") + "Template/酒店预订模板.doc";                        Document doc = new Document(sss);                        DocumentBuilder builder = new DocumentBuilder(doc);                        #region 替换Word模板书签内容                        //这里可以创建个DataTable循环添加书签的值,这里提示一下就不多做修改了                        //入住卷预定号码                        if (doc.Range.Bookmarks["VNO"] != null)                        {                            Bookmark mark = doc.Range.Bookmarks["VNO"];                            mark.Text = hr.CheckNumber;                        }                        //酒店时间                        if (doc.Range.Bookmarks["Date"] != null)                        {                            Bookmark mark = doc.Range.Bookmarks["Date"];                            mark.Text = Convert.ToDateTime(hr.CreateTime).ToString("yyyy-MM-dd");                        }                        //团号                        if (doc.Range.Bookmarks["TNo"] != null)                        {                            Bookmark mark = doc.Range.Bookmarks["TNo"];                            mark.Text = dele.TourCode;                        }                        //预定号码                        if (doc.Range.Bookmarks["BookingId"] != null)                        {                            Bookmark mark = doc.Range.Bookmarks["BookingId"];                            mark.Text = hr.ReservationsNo;                        }                        if (doc.Range.Bookmarks["HotelConfirmNo"] != null)                        {                            Bookmark mark = doc.Range.Bookmarks["HotelConfirmNo"];                            mark.Text = hr.DetermineNo;                        }                        //酒店城市                        if (doc.Range.Bookmarks["City"] != null)                        {                            Bookmark mark = doc.Range.Bookmarks["City"];                            mark.Text = hr.City;                        }                        //酒店名称                        if (doc.Range.Bookmarks["HName"] != null)                        {                            Bookmark mark = doc.Range.Bookmarks["HName"];                            mark.Text = hr.HotelName;                        }                        //酒店地址                        if (doc.Range.Bookmarks["Address"] != null)                        {                            Bookmark mark = doc.Range.Bookmarks["Address"];                            mark.Text = hr.HotelAddress;                        }                        //酒店电话                        if (doc.Range.Bookmarks["Tel"] != null)                        {                            Bookmark mark = doc.Range.Bookmarks["Tel"];                            mark.Text = hr.HotelTel;                        }                        //酒店传真                        if (doc.Range.Bookmarks["Fax"] != null)                        {                            Bookmark mark = doc.Range.Bookmarks["Fax"];                            if (!string.IsNullOrWhiteSpace(hr.HotelFax))                            {                                mark.Text = hr.HotelFax;                            }                        }                        //入住时间                        if (doc.Range.Bookmarks["CIn"] != null)                        {                            DateTime dtCheckIn = Convert.ToDateTime(hr.CheckInDate);                            Bookmark mark = doc.Range.Bookmarks["CIn"];                            mark.Text = dtCheckIn.Day + " " + dtCheckIn.ToString("MMMM", CultureInfo.GetCultureInfo("en-US")) + " " + dtCheckIn.Year;                        }                        //退房时间                        if (doc.Range.Bookmarks["COut"] != null)                        {                            DateTime dtCheckOut = Convert.ToDateTime(hr.CheckOutDate);                            Bookmark mark = doc.Range.Bookmarks["COut"];                            mark.Text = dtCheckOut.Day + " " + dtCheckOut.ToString("MMMM", CultureInfo.GetCultureInfo("en-US")) + " " + dtCheckOut.Year;                        }                        //客户名称                        if (doc.Range.Bookmarks["GName"] != null)                        {                            string guestName = "";                            string[] clients = new string[] { };                            if (hr.GuestName.Contains(","))                            {                                clients = hr.GuestName.Split(",");                            }                            else                            {                                clients = new string[] { hr.GuestName };                            }                            List<int> clientIds_int = new List<int>();                            if (clients.Length > 0)                            {                                foreach (var item in clients)                                {                                    if (item.IsNumeric())                                    {                                        clientIds_int.Add(int.Parse(item));                                    }                                }                            }                            if (clientIds_int.Count > 0)                            {                                var _clientDatas = _sqlSugar.Queryable<Crm_DeleClient>().Where(it => it.IsDel == 0 && clientIds_int.Contains(it.Id)).ToList();                                foreach (var client in _clientDatas)                                {                                    //男                                    if (client.Sex == 0) guestName += $"Mr.";                                    //女                                    else if (client.Sex == 1) guestName += $"Ms.";                                    if (!String.IsNullOrEmpty(client.FirstName + client.LastName))                                    {                                        guestName += $"{string.Join("", client.FirstName.GetTotalPingYin()).ToUpper()} {string.Join("", client.LastName.GetTotalPingYin()).ToUpper()},";                                    }                                    //guestName += $"{client.Pinyin},";                                }                                if (guestName.Length > 0)                                {                                    guestName = guestName.Substring(0, guestName.Length - 1);                                }                            }                            else                            {                                guestName = hr.GuestName;                            }                            Bookmark mark = doc.Range.Bookmarks["GName"];                            mark.Text = guestName;                        }                        //房间介绍                        if (doc.Range.Bookmarks["ROOM"] != null)                        {                            Bookmark mark = doc.Range.Bookmarks["ROOM"];                            mark.Text = hr.RoomExplanation;                        }                        //报价描述                        if (doc.Range.Bookmarks["NOTE"] != null)                        {                            Bookmark mark = doc.Range.Bookmarks["NOTE"];                            Sys_SetData ss = _sqlSugar.Queryable<Sys_SetData>().First(a => a.Id == hr.ReservationsWebsite);                            if (ss != null)                                mark.Text = ss.Name;                        }                        //入住时间                        if (doc.Range.Bookmarks["CheckIn"] != null)                        {                            DateTime dtCheckIn = Convert.ToDateTime(hr.CheckInDate);                            Bookmark mark = doc.Range.Bookmarks["CheckIn"];                            mark.Text = dtCheckIn.Day + " " + dtCheckIn.ToString("MMMM", CultureInfo.GetCultureInfo("en-US")) + " " + dtCheckIn.Year + " ";                        }                        //退房时间                        if (doc.Range.Bookmarks["CheckOut"] != null)                        {                            DateTime dtCheckOut = Convert.ToDateTime(hr.CheckOutDate);                            Bookmark mark = doc.Range.Bookmarks["CheckOut"];                            mark.Text = " " + dtCheckOut.Day + " " + dtCheckOut.ToString("MMMM", CultureInfo.GetCultureInfo("en-US")) + " " + dtCheckOut.Year;                        }                        //日期                        if (doc.Range.Bookmarks["DT"] != null)                        {                            Bookmark mark = doc.Range.Bookmarks["DT"];                            mark.Text = Convert.ToDateTime(hr.CreateTime).ToString("yyyy-MM-dd");                        }                        //名称                        if (doc.Range.Bookmarks["VName"] != null)                        {                            Bookmark mark = doc.Range.Bookmarks["VName"];                            mark.Text = hr.HotelName;                        }                        //号码                        if (doc.Range.Bookmarks["VOUCHERNO"] != null)                        {                            Bookmark mark = doc.Range.Bookmarks["VOUCHERNO"];                            mark.Text = hr.CheckNumber;                        }                        #endregion                        strFileName += "VOUCHER.doc";                        var fileDir = AppSettingsHelper.Get("WordBasePath") + strFileName;                        doc.Save(fileDir);                        string Url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/" + strFileName;                        return Ok(JsonView(true, "操作成功!", Url));                    }                    else                    {                        return Ok(JsonView(false, "酒店确定号码未填写,无法生成Voucher!"));                    }                }                else                {                    return Ok(JsonView(false, "该条数据已删除或不存在!"));                }            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 酒店预订        /// 生成VOUCHER        /// 2024.05.06 之后版本        /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostHotelReservationsCreateVoucher(HotelReservationsCreateVoucherDto _dto)        {            #region  参数验证            if (_dto.UserId < 1) return Ok(JsonView(StatusCodes.Status400BadRequest, "员工Id为空", ""));            if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id            if (_dto.DiId < 1) return Ok(JsonView(StatusCodes.Status400BadRequest, "团组Id为空", ""));            #region 团组操作权限验证 76 酒店预定模块            var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76);            if (groupAuthView.Code != 0) return Ok(JsonView(StatusCodes.Status400BadRequest, groupAuthView.Msg, ""));            #endregion            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            #region 页面操作权限验证            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);            if (pageFunAuthView.FilesDownloadAuth == 0) return Ok(JsonView(false, "您没有文件下载权限!"));            #endregion            #endregion            List<Grp_HotelReservations> hrDtas = await _sqlSugar.Queryable<Grp_HotelReservations>().Where(it => it.IsDel == 0 && it.DiId == _dto.DiId).ToListAsync();            //判断数据是否完整            if (hrDtas.Count < 1) return Ok(JsonView(StatusCodes.Status400BadRequest, "请先录入酒店预订信息!", ""));            hrDtas = hrDtas.OrderBy(it => it.CheckInDate).ToList();            string strFileName = "HotelStatement/";            string guestNames = ""; //格式Mr.xxx Ms.xxx            List<HotelVoucherInfoView> vouchers = new List<HotelVoucherInfoView>();            #region 数据处理            List<int> guestIds = new List<int>();            int index = 0;            foreach (var item in hrDtas)            {                if (item.GuestName.Contains(","))                {                    string[] guestIdArr = item.GuestName.Split(',');                    foreach (var guestIdStr in guestIdArr)                    {                        bool guestBool = int.TryParse(guestIdStr, out int guestId);                        if (guestBool)                        {                            guestIds.Add(guestId);                        }                    }                }                else guestNames += item.GuestName;                var voucherInfo = new HotelVoucherInfoView()                {                    HotelName = item.HotelName,                    CheckInDate = item.CheckInDate,                    CheckOutDate = item.CheckOutDate,                    ConfirmationNumber = item.DetermineNo.Trim(),                    RoomType = item.RoomExplanation                };                vouchers.Add(voucherInfo);            }            if (guestIds.Count > 0)            {                guestIds = guestIds.Distinct().ToList();                var guestDatas = await _sqlSugar.Queryable<Crm_DeleClient>().Where(it => it.IsDel == 0 && guestIds.Contains(it.Id)).ToListAsync();                if (guestDatas.Count > 0)                {                    guestNames = "";                    foreach (var guest in guestDatas)                    {                        string guestName = "";                        if (guest.Sex == 0) guestName += @"MR.";                        else if (guest.Sex == 1) guestName += @"MS.";                        if (guest.Pinyin == null) guestName += $"{string.Join("", guest.LastName.GetTotalPingYin()).ToUpper()}/{string.Join("", guest.FirstName.GetTotalPingYin()).ToUpper()}";                        else guestName += @$"{guest.Pinyin.Replace(" ", "")}";                        guestNames += @$"{guestName.Trim()}、";                    }                    if (guestNames.Length > 0)                    {                        guestNames = guestNames.Substring(0, guestNames.Length - 1);                    }                }            }            #endregion            //载入模板            string sss = AppSettingsHelper.Get("WordBasePath") + "Template/Voucher-2024Versions.docx";            Document doc = new Document(sss);            DocumentBuilder builder = new DocumentBuilder(doc);            if (doc.Range.Bookmarks["GuestName"] != null)            {                Bookmark mark = doc.Range.Bookmarks["GuestName"];                mark.Text = guestNames;            }            NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);            Aspose.Words.Tables.Table table = allTables[0] as Aspose.Words.Tables.Table;            vouchers = vouchers.OrderBy(it => it.CheckInDate).ToList();            for (int i = 1; i <= vouchers.Count; i++)            {                HotelVoucherInfoView hviv = vouchers[i - 1];                builder.MoveToCell(0, i, 0, 0);                builder.Write(hviv.HotelName);                builder.MoveToCell(0, i, 1, 0);                builder.Write(hviv.CheckInDate);                builder.MoveToCell(0, i, 2, 0);                builder.Write(hviv.CheckOutDate);                builder.MoveToCell(0, i, 3, 0);                builder.Write(hviv.RoomType);                builder.MoveToCell(0, i, 4, 0);                builder.Write(hviv.ConfirmationNumber);            }            //删除多余行            int currRowIndex = vouchers.Count + 1;            int delRows = 21 - currRowIndex;            if (delRows > 0)            {                for (int i = 0; i < delRows; i++)                {                    table.Rows.RemoveAt(currRowIndex);                    //cultivateRowIndex++;                }            }            strFileName += "VOUCHER.docx";            var fileDir = AppSettingsHelper.Get("WordBasePath") + strFileName;            doc.Save(fileDir);            string Url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/" + strFileName;            return Ok(JsonView(true, "操作成功!", Url));        }        /// <summary>        /// 酒店预订        /// 生成 预定成本 Excel        /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostHotelReservationsPredictedCostFileDownload(HotelReservations_PCFD_DTO _dto)        {            #region  参数验证            var vadalitor = new HotelReservations_PCFD_DTOFoalidator();            var vadalitorRes = await vadalitor.ValidateAsync(_dto);            if (!vadalitorRes.IsValid)            {                var errors = new StringBuilder();                foreach (var valid in vadalitorRes.Errors) errors.AppendLine(valid.ErrorMessage);                return Ok(JsonView(StatusCodes.Status400BadRequest, errors.ToString(), ""));            }            #region 团组操作权限验证 76 酒店预定模块            var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76);            if (groupAuthView.Code != 0) return Ok(JsonView(false, groupAuthView.Msg));            #endregion            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            #region 页面操作权限验证            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);            if (pageFunAuthView.FilesDownloadAuth == 0) return Ok(JsonView(false, "您没有文件下载权限!"));            #endregion            #endregion            decimal _rate = 1.00M;            string _currency = "";            var currDatas = _sqlSugar.Queryable<Sys_SetData>().Where(it => it.STid == 66).ToList();            List<Grp_HotelReservations> hrDtas = await _sqlSugar.Queryable<Grp_HotelReservations>().Where(it => it.IsDel == 0 && it.DiId == _dto.DiId).ToListAsync();            if (hrDtas.Count < 1) return Ok(JsonView(StatusCodes.Status400BadRequest, "酒店预订费用未录入,不支持预定成本Excel导出", ""));            Grp_GroupCostParameter _GroupCostParameter = await _sqlSugar.Queryable<Grp_GroupCostParameter>().Where(it => it.IsDel == 0 && it.DiId == _dto.DiId).FirstAsync();            if (_GroupCostParameter == null) return Ok(JsonView(StatusCodes.Status400BadRequest, "团组成本费用未录入,不支持预定成本Excel导出", ""));            if (string.IsNullOrEmpty(_GroupCostParameter.Currency))            {                return Ok(JsonView(StatusCodes.Status400BadRequest, "团组成本费用“币种为录入”未录入,不支持预定成本Excel导出", ""));            }            _currency = _GroupCostParameter.Currency;            bool isIntType = int.TryParse(_currency, out int currId);            if (isIntType)            {                _currency = currDatas.Find(it => it.Id == currId)?.Name ?? "";            }            var teamRate = await _teamRateRep.PostGroupTeamRateItemByDiIdAndCTableId(1, _dto.DiId, 76);            var currInfo = teamRate.Find(it => it.CurrencyCode.Equals(_currency));            if (currInfo == null)            {                return Ok(JsonView(StatusCodes.Status400BadRequest, $"团组汇率-->酒店模块 {_currency} 币种未设置汇率,不支持预定成本Excel导出", ""));            }            if (!_currency.ToUpper().Equals("CNY"))            {                _rate = _GroupCostParameter.Rate;            }            _rate = currInfo.Rate;            hrDtas = hrDtas.OrderBy(it => it.CheckInDate).ToList();            string strFileName = "HotelStatement/";            string guestNames = ""; //格式Mr.xxx Ms.xxx            List<HotelReservations_PCFD_View> pcfds = new List<HotelReservations_PCFD_View>();            var hotelSubData = _sqlSugar.Queryable<Grp_HotelReservationsContent>().Where(it => it.IsDel == 0 && it.DiId == _dto.DiId).ToList();            var ccpData = _sqlSugar.Queryable<Grp_CreditCardPayment>().Where(it => it.IsDel == 0 && it.DIId == _dto.DiId && it.CTable == 76).ToList();            #region 数据处理            foreach (var item in hrDtas)            {                var ccpInfo = ccpData.Where(it => it.DIId == _dto.DiId && it.CId == item.Id).First();                var roomInfo = hotelSubData.Where(it => it.HrId == item.Id && it.PriceType == 1).FirstOrDefault(); //房费                var breakfastInfo = hotelSubData.Where(it => it.HrId == item.Id && it.PriceType == 2).FirstOrDefault(); //早餐                var governmentRentInfo = hotelSubData.Where(it => it.HrId == item.Id && it.PriceType == 3).FirstOrDefault(); //地税                var cityTaxInfo = hotelSubData.Where(it => it.HrId == item.Id && it.PriceType == 4).FirstOrDefault(); //城市税                string roomCurr = currDatas.Find(it => it.Id == roomInfo.Currency)?.Name ?? "";                string singleRoomFeeStr = string.Empty,                       doubleRoomFeeStr = string.Empty,                       suiteRoomFeeStr = string.Empty,                       otherRoomFeeStr = string.Empty,                       payMoneyStr = string.Empty,                       cardPriceStr = string.Empty;                if (roomCurr.Equals(_currency))                {                    singleRoomFeeStr = $"{item.SingleRoomPrice.ToString("#0.00")} {_currency}";                    doubleRoomFeeStr = $"{item.DoubleRoomPrice.ToString("#0.00")} {_currency}";                    suiteRoomFeeStr = $"{item.SuiteRoomPrice.ToString("#0.00")} {_currency}";                    otherRoomFeeStr = $"{item.OtherRoomPrice.ToString("#0.00")} {_currency}";                    payMoneyStr = $"{ccpInfo.PayMoney.ToString("#0.00")} {_currency}";                    cardPriceStr = $"{item.CardPrice.ToString("#0.00")} {_currency}";                }                else                {                    singleRoomFeeStr = $"{(item.SingleRoomPrice / _rate).ToString("#0.00")} {_currency}\r\n{item.SingleRoomPrice.ToString("#0.00")} {roomCurr}";                    doubleRoomFeeStr = $"{(item.DoubleRoomPrice / _rate).ToString("#0.00")} {_currency}\r\n{item.DoubleRoomPrice.ToString("#0.00")} {roomCurr}";                    suiteRoomFeeStr = $"{(item.SuiteRoomPrice / _rate).ToString("#0.00")} {_currency}\r\n{item.SuiteRoomPrice.ToString("#0.00")} {roomCurr}";                    otherRoomFeeStr = $"{(item.OtherRoomPrice / _rate).ToString("#0.00")} {_currency}\r\n{item.OtherRoomPrice.ToString("#0.00")} {roomCurr}";                    payMoneyStr = $"{(ccpInfo.PayMoney / _rate).ToString("#0.00")} {_currency}\r\n{ccpInfo.PayMoney.ToString("#0.00")} {roomCurr}";                    cardPriceStr = $"{(item.CardPrice / _rate).ToString("#0.00")} {_currency}\r\n{item.CardPrice.ToString("#0.00")} {roomCurr}";                }                string breakfastPriceStr = string.Empty,                       breakfastCurrency = currDatas.Find(it => it.Id == item.BreakfastCurrency)?.Name ?? "",                       governmentRentStr = string.Empty,                       governmentRentCurrency = currDatas.Find(it => it.Id == item.GovernmentRentCurrency)?.Name ?? "",                       cityTaxStrStr = string.Empty,                       cityTaxStrCurrency = currDatas.Find(it => it.Id == item.CityTaxCurrency)?.Name ?? "";                breakfastPriceStr = $"{breakfastInfo?.Price.ToString("#0.00")} {currDatas.Find(it => it.Id == breakfastInfo?.Currency)?.Name}";                governmentRentStr = $"{governmentRentInfo?.Price.ToString("#0.00")} {currDatas.Find(it => it.Id == governmentRentInfo?.Currency)?.Name}";                cityTaxStrStr = $"{cityTaxInfo?.Price.ToString("#0.00")} {currDatas.Find(it => it.Id == cityTaxInfo?.Currency)?.Name}";                pcfds.Add(new HotelReservations_PCFD_View()                {                    City = item.City,                    HotelName = item.HotelName,                    Date = $"{item.CheckInDate} - {item.CheckOutDate}",                    // SingleRoomCount = item.SingleRoomCount,                    SingleRoomPrice = singleRoomFeeStr,                    // DoubleRoomCount = item.DoubleRoomCount,                    DoubleRoomPrice = doubleRoomFeeStr,                    //SuiteRoomCount = item.SuiteRoomCount,                    SuiteRoomPrice = suiteRoomFeeStr,                    OtherRoomPrice = otherRoomFeeStr,                    //OtherRoomCount = item.OtherRoomCount,                    BreakfastPrice = breakfastPriceStr,                    GovernmentRent = governmentRentStr,                    CityTax = cityTaxStrStr,                    RoomExplanation = item.RoomExplanation,                    PayTypeName = _sqlSugar.Queryable<Sys_SetData>().Where(it => it.Id == roomInfo.PayDId).First()?.Name ?? "",                    PayTime = roomInfo.ConsumptionDate,                    BankNo = roomInfo.BankNo,                    PayMoney = payMoneyStr,                    //PayMoneys = ccpInfo.PayMoney.ToString("#0.00"),                    ConsumptionPatterns = roomInfo.ConsumptionPatterns,                    CardPrice = cardPriceStr,                    Remark = ccpInfo.Remark                });            }            #endregion            //载入模板            WorkbookDesigner designer = new WorkbookDesigner();            designer.Workbook = new Workbook(AppSettingsHelper.Get("ExcelBasePath") + "Template/酒店预订成本.xls");            var groupInfo = _sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.Id == _dto.DiId).First();            var userInfo = _sqlSugar.Queryable<Sys_Users>().Where(it => it.Id == hrDtas[0].CreateUserId).First();            designer.SetDataSource("TourNo", groupInfo.TourCode);            designer.SetDataSource("TeamName", $"{groupInfo.TeamName}  团组成本币种:{_currency}  团组汇率-->酒店模块汇率:{_rate.ToString("#0.0000")}");            designer.SetDataSource("Opertor", userInfo.CnName);            DataTable dt = CommonFun.GetDataTableFromIList<HotelReservations_PCFD_View>(pcfds);            dt.TableName = "ViewMyHotelReservations";            designer.SetDataSource(dt);            designer.Process();            string fileName = ($"HotelReservation/{groupInfo.TeamName}_酒店预订成本_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls").Replace(":", "");            string serverPath = AppSettingsHelper.Get("ExcelBasePath") + fileName;            designer.Workbook.Save(serverPath);            string rst = AppSettingsHelper.Get("ExcelBaseUrl") + AppSettingsHelper.Get("ExcelFtpPath") + fileName;            #region 删除指定行            bool singleDel = true, doubleDel = true, suiteDel = true, otherDel = true, zcDel = true, dsDel = true, cssDel = true, cpDel = true, remarkDel = true;            int singleIndex = dt.Columns["SingleRoomPrice"].Ordinal,                doubleIndex = dt.Columns["DoubleRoomPrice"].Ordinal,                suiteIndex = dt.Columns["SuiteRoomPrice"].Ordinal,                otherIndex = dt.Columns["OtherRoomPrice"].Ordinal,                zcIndex = dt.Columns["BreakfastPrice"].Ordinal,                dsIndex = dt.Columns["GovernmentRent"].Ordinal,                cssIndex = dt.Columns["CityTax"].Ordinal,                cpIndex = dt.Columns["ConsumptionPatterns"].Ordinal,                remarkIndex = dt.Columns["Remark"].Ordinal;            //删除指定列            foreach (DataRow item in dt.Rows)            {                string singleStr = item["SingleRoomPrice"].ToString();                bool containsDigitButNotZero1 = !singleStr.StartsWith("0") && Regex.IsMatch(singleStr, @"[1-9]");                if (containsDigitButNotZero1) singleDel = false;                singleIndex = dt.Columns["SingleRoomPrice"].Ordinal;                string doubleStr = item["DoubleRoomPrice"].ToString();                bool containsDigitButNotZero2 = !doubleStr.StartsWith("0") && Regex.IsMatch(doubleStr, @"[1-9]");                if (containsDigitButNotZero2) doubleDel = false;                string suiteStr = item["SuiteRoomPrice"].ToString();                bool containsDigitButNotZero3 = !singleStr.StartsWith("0") && Regex.IsMatch(doubleStr, @"[1-9]");                if (containsDigitButNotZero3) suiteDel = false;                string otherStr = item["OtherRoomPrice"].ToString();                bool containsDigitButNotZero4 = !otherStr.StartsWith("0") && Regex.IsMatch(otherStr, @"[1-9]");                if (containsDigitButNotZero4) otherDel = false;                string zcStr = item["BreakfastPrice"].ToString();                bool containsDigitButNotZero5 = !zcStr.StartsWith("0") && Regex.IsMatch(zcStr, @"[1-9]");                if (containsDigitButNotZero5) zcDel = false;                string dsStr = item["GovernmentRent"].ToString();                bool containsDigitButNotZero6 = !dsStr.StartsWith("0") && Regex.IsMatch(dsStr, @"[1-9]");                if (containsDigitButNotZero6) dsDel = false;                string cssStr = item["CityTax"].ToString();                bool containsDigitButNotZero7 = !cssStr.StartsWith("0") && Regex.IsMatch(cssStr, @"[1-9]");                if (containsDigitButNotZero7) cssDel = false;                string cpStr = item["ConsumptionPatterns"].ToString();                if (!string.IsNullOrEmpty(cpStr)) cpDel = false;                string remarkStr = item["Remark"].ToString();                if (!string.IsNullOrEmpty(remarkStr)) remarkDel = false;            }            DeleteColumn(serverPath, remarkIndex, remarkDel);            DeleteColumn(serverPath, cpIndex, cpDel);            DeleteColumn(serverPath, dsIndex, dsDel);            DeleteColumn(serverPath, cssIndex, cssDel);            DeleteColumn(serverPath, zcIndex, zcDel);            DeleteColumn(serverPath, otherIndex, otherDel);            DeleteColumn(serverPath, suiteIndex, suiteDel);            DeleteColumn(serverPath, doubleIndex, doubleDel);            DeleteColumn(serverPath, singleIndex, singleDel);            #endregion            //只保留第一个表格            DeleteSheet(serverPath);            return Ok(JsonView(true, "操作成功", url = rst));        }        /// <summary>        /// 删除指定列        /// </summary>        /// <param name="file"></param>        /// <param name="columnIndex"></param>        /// <param name="isDel"></param>        private void DeleteColumn(string file, int columnIndex, bool isDel)        {            Aspose.Cells.Workbook wb = new Aspose.Cells.Workbook(file);            //wb.Save(file);            Aspose.Cells.Worksheet sheet1 = wb.Worksheets[0];            if (sheet1 != null)            {                if (isDel)                {                    Cells cells = sheet1.Cells;                    cells.DeleteColumn(columnIndex);                }            }            wb.Save(file);        }        /// <summary>        /// 删除sheet        /// </summary>        /// <param name="file"></param>        /// <param name="sheetName"></param>        private void DeleteSheet(string file, string sheetName = "")        {            Aspose.Cells.Workbook wb = new Aspose.Cells.Workbook(file);            //wb.Save(file);            List<string> sheets = new List<string>();            foreach (var item in wb.Worksheets)            {                sheets.Add(item.Name);            }            if (sheets.Count > 0)            {                sheets.RemoveAt(0);//不删除第一个sheet                foreach (var item in sheets)                {                    wb.Worksheets.RemoveAt(item);                }            }            wb.Save(file);        }        /// <summary>        /// 酒店预订        /// 确认单        /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostHotelReservationsConfirmationSlip(HotelReservationsConfirmationSlipDto _dto)        {            try            {                #region  参数验证                if (_dto.UserId < 1) return Ok(JsonView(StatusCodes.Status400BadRequest, "员工Id为空", ""));                if (_dto.PageId < 1) _dto.PageId = 28; //酒店预定Id                if (_dto.DiId < 1) return Ok(JsonView(StatusCodes.Status400BadRequest, "团组Id为空", ""));                #region 团组操作权限验证 76 酒店预定模块                var groupAuthView = await GeneralMethod.PostGroupOperationAuth(_dto.DiId, _dto.UserId, 76);                if (groupAuthView.Code != 0) return Ok(JsonView(StatusCodes.Status400BadRequest, groupAuthView.Msg, ""));                #endregion                PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();                #region 页面操作权限验证                pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);                if (pageFunAuthView.FilesDownloadAuth == 0) return Ok(JsonView(false, "您没有文件下载权限!"));                #endregion                #endregion                //团组信息                Grp_DelegationInfo di = _sqlSugar.Queryable<Grp_DelegationInfo>().First(a => a.Id == _dto.DiId);                //酒店数据                List<Grp_HotelReservations> listhoteldata = await _sqlSugar.Queryable<Grp_HotelReservations>().Where(a => a.DiId == _dto.DiId && a.IsDel == 0).ToListAsync();                if (listhoteldata.Count < 0)                {                    return Ok(JsonView(StatusCodes.Status400BadRequest, "当前团组暂无酒店预订信息!", ""));                }                //利datatable存储                DataTable dt = new DataTable();                dt.Columns.Add("CheckInDate", typeof(string));                dt.Columns.Add("City", typeof(string));                dt.Columns.Add("Hotel", typeof(string));                dt.Columns.Add("Room", typeof(string));                for (int i = 0; i < listhoteldata.Count; i++)                {                    DateTime dayStart = Convert.ToDateTime(listhoteldata[i].CheckInDate);                    DateTime dayEnd = Convert.ToDateTime(listhoteldata[i].CheckOutDate);                    while (dayStart < dayEnd)                    {                        string temp = "";                        DataRow row = dt.NewRow();                        row["CheckInDate"] = dayStart.ToString("yyyy-MM-dd");                        row["City"] = listhoteldata[i].City;                        row["Hotel"] = listhoteldata[i].HotelName;                        if (listhoteldata[i].SingleRoomCount > 0)                        {                            temp = listhoteldata[i].SingleRoomCount + "个单间" + "\r\n";                        }                        if (listhoteldata[i].DoubleRoomCount > 0)                        {                            temp = temp + listhoteldata[i].DoubleRoomCount + "个标间" + "\r\n";                        }                        if (listhoteldata[i].SuiteRoomCount > 0)                        {                            temp = temp + listhoteldata[i].SuiteRoomCount + "个套房" + "\r\n";                        }                        if (listhoteldata[i].OtherRoomCount > 0)                        {                            temp = temp + listhoteldata[i].OtherRoomCount + "个其他房型" + "\r\n";                        }                        row["Room"] = temp;                        dt.Rows.Add(row);                        dayStart = dayStart.AddDays(1);                    }                }                Dictionary<string, string> dic = new Dictionary<string, string>();                dic.Add("Dele", di.TeamName);                dic.Add("City", di.VisitCountry);                //模板路径                string tempPath = AppSettingsHelper.Get("WordBasePath") + "Template/酒店用房确认单-模板.doc";                //载入模板                Aspose.Words.Document doc = new Aspose.Words.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;                var rowStart = tableOne.Rows[0]; //获取第1行                //循环赋值                for (int i = 0; i < dt.Rows.Count; i++)                {                    builder.MoveToCell(0, i + 1, 0, 0);                    builder.Write(dt.Rows[i]["CheckInDate"].ToString());                    builder.MoveToCell(0, i + 1, 1, 0);                    builder.Write(dt.Rows[i]["City"].ToString());                    builder.MoveToCell(0, i + 1, 2, 0);                    builder.Write(dt.Rows[i]["Hotel"].ToString());                    builder.MoveToCell(0, i + 1, 3, 0);                    builder.Write(dt.Rows[i]["Room"].ToString());                }                //删除多余行                while (tableOne.Rows.Count > dt.Rows.Count + 1)                {                    tableOne.Rows.RemoveAt(dt.Rows.Count + 1);                }                string strFileName = di.TeamName + "酒店确认单.doc";                doc.Save(AppSettingsHelper.Get("WordBasePath") + "HotelStatement/" + strFileName);                string url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/HotelStatement/" + strFileName;                return Ok(JsonView(true, "成功", url));            }            catch (Exception ex)            {                return Ok(JsonView(StatusCodes.Status400BadRequest, ex.Message, ""));            }        }        #endregion        #region 团组状态        /// <summary>        ///  团组状态列表 Page        /// </summary>        /// <param name="dto">团组列表请求dto</param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostGroupStatusPageList(GroupStatusListDto dto)        {            if (dto == null) return Ok(JsonView(false, "请输入搜索条件!"));            if (dto.PortType == 1 || dto.PortType == 2) // web/Android            {                string sqlWhere = string.Empty;                if (dto.IsSure == 0) //未完成                {                    sqlWhere += string.Format(@" And IsSure = 0");                }                else if (dto.IsSure == 1) //已完成                {                    sqlWhere += string.Format(@" And IsSure = 1");                }                if (!string.IsNullOrEmpty(dto.SearchCriteria))                {                    string tj = dto.SearchCriteria;                    sqlWhere += string.Format(@"And (ssd.Name Like '%{0}%' Or TeamName Like '%{1}%' Or ClientName Like '%{2}%' Or  ClientName Like '%{3}%' Or su.CnName  Like '%{4}%')",                       tj, tj, tj, tj, tj);                }                string sql = string.Format(@"Select Row_Number,Id,SalesQuoteNo,TourCode,TeamTypeId, TeamType,					                              TeamLevId,TeamLev,TeamName,ClientName,ClientUnit,					                              VisitDate,VisitDays,VisitPNumber,JietuanOperator,IsSure,CreateTime					                              From (					                              Select row_number() over(order by gdi.CreateTime Desc) as Row_Number,					                              gdi.Id,SalesQuoteNo,TourCode,ssd.Id TeamTypeId, ssd.Name TeamType,					                              ssd1.Id TeamLevId,ssd1.Name TeamLev,TeamName,ClientName,ClientUnit,					                              VisitDate,VisitDays,VisitPNumber,su.CnName JietuanOperator,IsSure,gdi.CreateTime					                              From  Grp_DelegationInfo gdi					                              Inner Join Sys_SetData ssd On gdi.TeamDid = ssd.Id 					                              Inner Join Sys_SetData ssd1 On gdi.TeamLevSId = ssd1.Id					                              Left Join Sys_Users su On gdi.JietuanOperator = su.Id					                              Where gdi.IsDel = 0  {0}				                              ) temp  ", sqlWhere);                RefAsync<int> total = 0;//REF和OUT不支持异步,想要真的异步这是最优解                var _DelegationList = await _sqlSugar.SqlQueryable<GroupStatusView>(sql).ToPageListAsync(dto.PageIndex, dto.PageSize, total);//ToPageAsync                return Ok(JsonView(true, "查询成功!", _DelegationList, total));            }            else            {                return Ok(JsonView(false, "查询失败"));            }        }        /// <summary>        ///  团组状态        ///  设置操作完成        /// </summary>        /// <param name="dto">团组列表请求dto</param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostGroupStatusSetOperationComplete(GroupStatusSetOperationCompleteDto dto)        {            if (dto == null) return Ok(JsonView(false, "请输入搜索条件!"));            Grp_DelegationInfo _DelegationInfo = new Grp_DelegationInfo()            {                Id = dto.Id,                IsSure = 1            };            var result = await _sqlSugar.Updateable(_DelegationInfo)                .UpdateColumns(it => new { it.IsSure })                .WhereColumns(it => new { it.Id })                .ExecuteCommandAsync();            if (result > 0)            {                return Ok(JsonView(true, "操作完成!"));            }            return Ok(JsonView(false, "操作失败!"));        }        #endregion        #region 保险费用录入        /// <summary>        /// 根据团组Id查询保险费用列表        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> CustomersByDiId(CustomersByDiIdDto dto)        {            try            {                Result groupData = await _customersRep.CustomersByDiId(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 根据保险费用Id查询保险费用详细        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> CustomersById(CustomersByIdDto dto)        {            try            {                Result groupData = await _customersRep.CustomersById(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 保险费用录入页面初始化绑定        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> CustomersInitialize(CustomersInitializeDto dto)        {            try            {                Result groupData = await _customersRep.CustomersInitialize(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        /// 保险费用操作(Status:1.新增,2.修改)        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> OpCustomers(OpCustomersDto dto)        {            try            {                Result groupData = await _customersRep.OpCustomers(dto);                if (groupData.Code != 0)                {                    return Ok(JsonView(false, groupData.Msg));                }                #region 应用推送                try                {                    int ccpId = groupData.Data.GetType().GetProperty("ccpId").GetValue(groupData.Data, null);                    int sign = groupData.Data.GetType().GetProperty("sign").GetValue(groupData.Data, null);                    await AppNoticeLibrary.SendChatMsg_GroupStatus_ApplyFee(ccpId, sign, QiyeWeChatEnum.GuoJiaoLeaderChat);                }                catch (Exception ex)                {                }                #endregion                return Ok(JsonView(true, groupData.Msg, groupData.Data));            }            catch (Exception ex)            {                return Ok(JsonView(false, ex.Message));            }        }        /// <summary>        ///  保险文件上传        /// </summary>        /// <param name="file"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> UploadCus(IFormFile file)        {            try            {                if (file != null)                {                    var fileDir = AppSettingsHelper.Get("GrpFileBasePath");                    //文件名称                    string projectFileName = file.FileName;                    //上传的文件的路径                    string filePath = "";                    if (!Directory.Exists(fileDir))                    {                        Directory.CreateDirectory(fileDir);                    }                    //上传的文件的路径                    filePath = fileDir + $@"\保险费用文件上传\{projectFileName}";                    using (FileStream fs = System.IO.File.Create(filePath))                    {                        file.CopyTo(fs);                        fs.Flush();                    }                    return Ok(JsonView(true, "上传成功!", projectFileName));                }                else                {                    return Ok(JsonView(false, "上传失败!"));                }            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        /// <summary>        /// 保险删除指定文件        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> DelFileCus(DelFileDto dto)        {            try            {                string filePath = "";                var fileDir = AppSettingsHelper.Get("GrpFileBasePath");                // 返回与指定虚拟路径相对应的物理路径即绝对路径                //int id = 0;                filePath = fileDir + "/保险费用文件上传/" + dto.fileName;                // 删除该文件                try                {                    System.IO.File.Delete(filePath);                    var result = await _sqlSugar.Updateable<Grp_Customers>().Where(a => a.Id == dto.Id && a.IsDel == 0 && a.Attachment == dto.fileName).SetColumns(a => new Grp_Customers()                    {                        Attachment = "",                    }).ExecuteCommandAsync();                    if (result != 0)                    {                        return Ok(JsonView(true, "成功!"));                    }                    else                    {                        return Ok(JsonView(false, "失败!"));                    }                }                catch (Exception)                {                    var result = await _sqlSugar.Updateable<Grp_Customers>().Where(a => a.Id == dto.Id && a.IsDel == 0 && a.Attachment == dto.fileName).SetColumns(a => new Grp_Customers()                    {                        Attachment = "",                    }).ExecuteCommandAsync();                    if (result != 0)                    {                        return Ok(JsonView(true, "成功!"));                    }                    else                    {                        return Ok(JsonView(false, "失败!"));                    }                }            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        /// <summary>        /// 保险费用操作(删除)        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> DelCustomers(DelBaseDto dto)        {            try            {                var res = await _customersRep.SoftDeleteByIdAsync<Grp_Customers>(dto.Id.ToString(), dto.DeleteUserId);                if (!res)                {                    return Ok(JsonView(false, "删除失败"));                }                var resultC = await _sqlSugar.Updateable<Grp_CreditCardPayment>().Where(a => a.CId == dto.Id && a.IsDel == 0 && a.CTable == 82).SetColumns(a => new Grp_CreditCardPayment()                {                    IsDel = 1,                    DeleteUserId = dto.DeleteUserId,                    DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")                }).ExecuteCommandAsync();                return Ok(JsonView(true, "删除成功!"));            }            catch (Exception ex)            {                return Ok(JsonView(false, "程序错误!"));                throw;            }        }        #endregion        #region 接团客户名单 PageId 104        /// <summary>        /// 接团客户名单        /// 迁移数据(慎用!)        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostTourClientListChange()        {            try            {                _sqlSugar.ChangeDatabase(DBEnum.OA2014DB);                //var groupClinetData1                string sql = string.Format($"Select  * From  DeleClient Where Isdel = 0");                var oldOAClientList = await _sqlSugar.SqlQueryable<OA2021_DeleClient>(sql).Where(it => it.Isdel == 0).ToListAsync();                int updateCount = 0;                if (oldOAClientList.Count > 0)                {                    _sqlSugar.ChangeDatabase(DBEnum.OA2023DB);                    _sqlSugar.BeginTran();                    var clientComInfos = _sqlSugar.Queryable<Crm_CustomerCompany>().Where(it => it.IsDel == 0).ToList();                    var clientInfos = _sqlSugar.Queryable<Crm_DeleClient>().Where(it => it.IsDel == 0).ToList();                    foreach (var item in oldOAClientList)                    {                        int comId = 0;                        string format = "yyyy-MM-dd HH:mm:ss";                        string data11 = "1990-01-01 00:00";                        var data1 = IsValidDate(item.OPdate, format);                        if (data1) data11 = item.OPdate;                        //客户公司验证                        if (!string.IsNullOrEmpty(item.Company))                        {                            var clientComInfo = clientComInfos.Where(it => it.CompanyFullName.Equals(item.Company)).FirstOrDefault();                            if (clientComInfo == null) // add                            {                                var addInfo = new Crm_CustomerCompany()                                {                                    CompanyAbbreviation = "",                                    CompanyFullName = item.Company,                                    Address = "",                                    PostCodes = "",                                    LastedOpUserId = item.OPer,                                    LastedOpDt = Convert.ToDateTime(data11),                                    CreateUserId = item.OPer,                                    CreateTime = Convert.ToDateTime(data11),                                    IsDel = 0                                };                                var comId1 = _sqlSugar.Insertable<Crm_CustomerCompany>(addInfo).ExecuteReturnIdentity();                                if (comId1 > 0) comId = comId1;                            }                            else comId = clientComInfo.Id;                        }                        //客户人员验证                        int clientId = 0;                        string name = item.LastName + item.Name;                        if (!string.IsNullOrEmpty(name))                        {                            var clientInfo = clientInfos.Where(it => (it.LastName + it.FirstName).Equals(name)).FirstOrDefault();                            if (clientInfo == null)                            {                                DateTime? dateTime = null;                                var isDt = DateTime.TryParse(item.Birthday, out DateTime birthDayDt);                                if (isDt) dateTime = birthDayDt;                                var addInfo1 = new Crm_DeleClient()                                {                                    CrmCompanyId = comId,                                    DiId = -1,                                    LastName = item.LastName,                                    FirstName = item.Name,                                    OldName = "",                                    Pinyin = item.Pinyin,                                    Sex = item.Sex == "男" ? 0 : item.Sex == "女" ? 1 : -1,                                    Marriage = 0,                                    Phone = item.Phone,                                    Job = item.Job,                                    BirthDay = dateTime                                };                                var clientId1 = _sqlSugar.Insertable<Crm_DeleClient>(addInfo1).ExecuteReturnIdentity();                                if (clientId1 > 0) clientId = clientId1;                            }                            else clientId = clientInfo.Id;                        }                        if (clientId < 1)                        {                            continue;                        }                        int airType = 0;                        if (item.AirType == "超经舱") airType = 459;                        else if (item.AirType == "公务舱") airType = 458;                        else if (item.AirType == "经济舱") airType = 460;                        else if (item.AirType == "其他") airType = 565;                        else if (item.AirType == "头等舱") airType = 457;                        var _TourClientListEntity = new Grp_TourClientList()                        {                            DiId = item.Diid,                            ClientId = clientId,                            CreateUserId = item.OPer,                            CreateTime = Convert.ToDateTime(data11),                            Remark = item.Remark,                            IsDel = item.Isdel,                            ShippingSpaceTypeId = airType,                            ShippingSpaceSpecialNeeds = item.AirRemark,                            HotelSpecialNeeds = item.RoomType                        };                        var _TourClientList = _sqlSugar.Insertable<Grp_TourClientList>(_TourClientListEntity).ExecuteCommand();                        if (_TourClientList > 0)                        {                            updateCount++;                        }                    }                    _sqlSugar.CommitTran();                }                return Ok(JsonView(true, $"更新条数:{updateCount}条"));            }            catch (Exception ex)            {                _sqlSugar.RollbackTran();                return Ok(JsonView(false, ex.Message));            }            return Ok(JsonView(true));        }        private bool IsValidDate(string dateString, string format)        {            DateTime dateValue;            bool valid = DateTime.TryParseExact(dateString, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateValue);            return valid;        }        /// <summary>        /// 接团客户名单        /// 根据团组Id查询List        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostTourClientListByDiId(TourClientListByDiIdDto _dto)        {            #region  参数验证            if (_dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId"));            if (_dto.PageId < 1) _dto.PageId = 104; //接团客户名单PageId            if (_dto.DiId < 1) return Ok(JsonView(false, "请传入有效的DiId!"));            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            #region 页面操作权限验证            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);            if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限!"));            #endregion            #endregion            var viewData = await _tourClientListRep._ItemByDiId(_dto.PortType, _dto.DiId);            if (viewData.Code != 0)            {                return Ok(JsonView(false, viewData.Msg));            }            return Ok(JsonView(viewData.Data));        }        /// <summary>        /// 接团客户名单        /// 基础数据 Init        /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostTourClientListBasicDataInit(TourClientListBasicDataInitDto _dto)        {            #region  参数验证            if (_dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数"));            if (_dto.PageId < 1) _dto.PageId = 104; //接团客户名单PageId            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            #region 页面操作权限验证            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);            if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限!"));            #endregion            #endregion            var viewData = await _tourClientListRep._BasicDataInit(_dto.PortType);            if (viewData.Code != 0)            {                return Ok(JsonView(false, viewData.Msg));            }            return Ok(JsonView(viewData.Data));        }        /// <summary>        /// 接团客户名单        /// 根据 Id查询 Details        /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostTourClientListDetails(TourClientListDetailsDto _dto)        {            #region  参数验证            if (_dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数"));            if (_dto.PageId < 1) _dto.PageId = 104; //接团客户名单PageId            if (_dto.Id < 1) return Ok(JsonView(false, "请传入有效的Id参数!"));            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            #region 页面操作权限验证            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);            if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限!"));            #endregion            #endregion            var viewData = await _tourClientListRep._Details(_dto.PortType, _dto.Id);            if (viewData.Code != 0)            {                return Ok(JsonView(false, viewData.Msg));            }            return Ok(JsonView(viewData.Data));        }        /// <summary>        /// 接团客户名单        /// Add Or Edit        /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostTourClientListAddOrEdit(TourClientListAddOrEditDto _dto)        {            #region  参数验证            if (_dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数"));            if (_dto.PageId < 1) _dto.PageId = 104; //接团客户名单PageId            if (_dto.Id < 0) return Ok(JsonView(false, "请传入有效的Id参数!"));            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            #region 页面操作权限验证            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);            if (_dto.Id == 0) //添加            {                if (pageFunAuthView.AddAuth == 0) return Ok(JsonView(false, "您没有添加权限!"));            }            else if (_dto.Id >= 0) //修改            {                if (pageFunAuthView.EditAuth == 0) return Ok(JsonView(false, "您没有编辑权限!"));            }            #endregion            #endregion            var viewData = await _tourClientListRep._AddOrEdit(_dto);            if (viewData.Code != 0)            {                return Ok(JsonView(false, viewData.Msg));            }            return Ok(JsonView(true));        }        /// <summary>        /// 接团客户名单        /// AddMultiple(添加多个)        /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostTourClientListAddMultiple(TourClientListAddMultipleDto _dto)        {            #region  参数验证            if (_dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数"));            if (_dto.PageId < 1) _dto.PageId = 104; //接团客户名单PageId            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            #region 页面操作权限验证            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);            if (pageFunAuthView.AddAuth == 0) return Ok(JsonView(false, "您没有添加权限!"));            #endregion            #endregion            var viewData = await _tourClientListRep._AddMultiple(_dto);            if (viewData.Code != 0)            {                return Ok(JsonView(false, viewData.Msg));            }            return Ok(JsonView(true));        }        /// <summary>        /// 接团客户名单        /// Del        /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostTourClientListDel(TourClientListDelDto _dto)        {            #region  参数验证            if (_dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数"));            if (_dto.PageId < 1) _dto.PageId = 104; //接团客户名单PageId            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            #region 页面操作权限验证            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);            if (pageFunAuthView.DeleteAuth == 0) return Ok(JsonView(false, "您没有删除权限!"));            #endregion            #endregion            var viewData = await _tourClientListRep._Del(_dto.Id, _dto.UserId);            if (viewData.Code != 0)            {                return Ok(JsonView(false, viewData.Msg));            }            return Ok(JsonView(true));        }        /// <summary>        /// 接团客户名单        /// 文件下载 客户名单        /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostTourClientListDownloadFile(PostTourClientListDownloadFile _dto)        {            #region  参数验证            if (_dto.UserId < 1) return Ok(JsonView(false, "请传入有效的UserId参数"));            if (_dto.PageId < 1) _dto.PageId = 104; //接团客户名单PageId            if (_dto.DiId < 1) return Ok(JsonView(false, "请传入有效的DiId参数"));            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            #region 页面操作权限验证            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(_dto.UserId, _dto.PageId);            if (pageFunAuthView.FilesDownloadAuth == 0) return Ok(JsonView(false, "您没有文件下载权限!"));            #endregion            #endregion            string clientSql = string.Format(@"Select tcl.Id,tcl.DiId,temp.*,tcl.ShippingSpaceTypeId,tcl.ShippingSpaceSpecialNeeds,                                                      tcl.HotelSpecialNeeds,tcl.MealSpecialNeeds,tcl.Remark                                               From Grp_TourClientList tcl                                               Left Join 	                                               (Select dc.Id As DcId,dc.LastName,dc.FirstName,dc.Pinyin,dc.Sex,ccom.CompanyFullName,dc.Job,	                                                   cc1.CertNo As IDCardNo,dc.Phone,dc.BirthDay,cc2.PassportType,cc2.CertNo As PassportNo,cc2.Country,	                                                   cc2.Area,cc2.IssueDt,cc2.ExpiryDt	                                                   From Crm_DeleClient dc	                                                   Left Join Crm_CustomerCompany ccom On dc.CrmCompanyId = ccom.Id  And ccom.IsDel = 0	                                                   Left Join Crm_CustomerCert cc1 On dc.Id = cc1.DcId And cc1.SdId = 773 And cc1.IsDel = 0	                                                   Left Join Crm_CustomerCert cc2 On dc.Id = cc2.DcId And cc2.SdId = 774 And cc2.IsDel = 0	                                                   Where dc.IsDel = 0) temp                                                On temp.DcId =tcl.ClientId                                                 Where tcl.IsDel = 0 And tcl.DiId = {0}", _dto.DiId);            List<TourClientListDetailsView> DcList = await _sqlSugar.SqlQueryable<TourClientListDetailsView>(clientSql).ToListAsync();            if (DcList.Count < 0) return Ok(JsonView(false, "该团未录入客户名单!"));            //载入模板            string tempPath = AppSettingsHelper.Get("WordBasePath") + "Template/dwon_团组人员列表模板.doc";            if (_dto.Language == 1)            {                tempPath = AppSettingsHelper.Get("WordBasePath") + "Template/EN_Down_团组人员列表模板.doc";            }            //载入模板            var doc = new Document(tempPath);            DocumentBuilder builder = new DocumentBuilder(doc);            //获取word里所有表格            NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);            //获取所填表格的序数            Aspose.Words.Tables.Table tableOne = allTables[0] as Aspose.Words.Tables.Table;            var rowStart = tableOne.Rows[0]; //获取第1行            if (_dto.Language == 0)            {                //循环赋值                for (int i = 0; i < DcList.Count; i++)                {                    builder.MoveToCell(0, i + 1, 0, 0);                    builder.Write(DcList[i].LastName + DcList[i].FirstName);                    builder.MoveToCell(0, i + 1, 1, 0);                    int sex = DcList[i].Sex;                    string sexStr = string.Empty;                    if (sex == 0) sexStr = "男";                    else if (sex == 1) sexStr = "女";                    else sexStr = "未设置";                    builder.Write(sexStr);                    builder.MoveToCell(0, i + 1, 2, 0);                    string birthDay = DcList[i].BirthDay;                    string birthDayStr = string.Empty;                    if (!string.IsNullOrEmpty(birthDay))                    {                        birthDayStr = Convert.ToDateTime(birthDay).ToString("yyyy-MM-dd");                    }                    builder.Write(birthDayStr);                    builder.MoveToCell(0, i + 1, 3, 0);                    string company = "";                    if (!string.IsNullOrEmpty(DcList[i].CompanyFullName))                    {                        company = DcList[i].CompanyFullName.ToString();                    }                    builder.Write(company);                    builder.MoveToCell(0, i + 1, 4, 0);                    builder.Write(DcList[i].Job);                }            }            else if (_dto.Language == 1)            {                List<Res_PositionEnglishComparison> listPEC = _setDataRep.Query<Res_PositionEnglishComparison>(s => s.IsDel == 0).ToList();                List<Res_CompanyEnglishComparison> listCEC = _setDataRep.Query<Res_CompanyEnglishComparison>(s => s.IsDel == 0).ToList();                List<string> transArrayStr = new List<string>();                string transStrRes1 = "";                for (int i = 0; i < DcList.Count; i++)                {                    var dc = DcList[i];                    if (dc.CompanyFullName.Equals("暂无")) dc.CompanyFullName = "-";                    if (dc.Job.Equals("暂无")) dc.Job = "-";                    string str1 = $"{i}&{dc.CompanyFullName}&{dc.Job}";                    if (DcList.Count - 1 == i) transStrRes1 += str1;                    else transStrRes1 += $"{str1}|";                }                //string transStrRes = "0 & Provincial Health & Health Commission Deputy Director | 1 & Provincial People's Hospital & Provincial People's Hospital Chief Accountant | 2 & Secretary of the Party Committee of the Affiliated Hospital of North Sichuan Medical College & North Sichuan Medical College | 3 & Provincial Health Commission Planning & Provincial Health Commission Planning and Information Division Director | 4 &-& Deputy Director | 5 & Provincial Health Commission population and Family Division & Provincial Health Commission population and Family Division Director";                string transStrRes = "";                if (transStrRes1.Length > 0 )                {                    transStrRes = await _juHeApi.GetTextTranslateAsync(transStrRes1);                }                //0、 Deputy Director of the Provincial Health and Health Commission | 1、 Chief Accountant of the provincial People's Hospital | 2、 Secretary of the Party Committee of the Affiliated Hospital of North Sichuan Medical College | 3、 Director of the Planning and Information Department of the Provincial Health and Health Commission | 4、 Deputy Director | 5、 Director of the population and Family Department of the Provincial Health and Health Commission | 3、 Secretary of the Party Committee of the Affiliated Hospital of North Sichuan Medical College | 4、 Deputy Director of the Planning and Information Department of the Provincial Health and Health Commission | 4、 Deputy Director of the population and Family Department of the Provincial Health and Health Commission | 5、 Director of the population and Family Department of the Provincial Health and Health Commission                //await _juHeApi.GetTextTranslateAsync(DcList[i].CompanyFullName.ToString().Trim()) ?? "";                //List<string> transArray = new List<string> { };                List<TranslateInfo> transArray = new List<TranslateInfo>();                if (transStrRes.Contains("|"))                {                    string[] transArray1 = transStrRes.Split('|');                    if (transArray1.Length > 0)                    {                        foreach (var item in transArray1)                        {                            if (item.Contains("&"))                            {                                string[] transArray2 = item.Split('&');                                int index = 0;                                string companyName = "", job = "";                                if (transArray2.Length > 0)                                {                                    bool success = int.TryParse(transArray2[0].Trim(), out index);                                    if (1 < transArray2.Length) companyName = transArray2[1];                                    if (2 < transArray2.Length) job = transArray2[2];                                }                                transArray.Add(new TranslateInfo { Index = index, CompanyName = companyName, Job = job });                            }                        }                    }                }                //循环赋值                for (int i = 0; i < DcList.Count; i++)                {                    string PYName = "";                    if (DcList[i].Pinyin.Length > 0 && DcList[i].Pinyin.IndexOf('/') > -1)                    {                        string PY_Last = DcList[i].Pinyin.Split('/')[0];                        string PY_First = DcList[i].Pinyin.Split('/')[1];                        PYName = PY_First + " " + PY_Last;                    }                    else                    {                        string PY_Last = DcList[i].LastName.GetTotalPingYin().Count > 0 ? DcList[i].LastName.GetTotalPingYin()[0].ToUpper() : "";                        string PY_First = DcList[i].FirstName.GetTotalPingYin().Count > 0 ? DcList[i].FirstName.GetTotalPingYin()[0].ToUpper() : "";                        PYName = PY_First + " " + PY_Last;                    }                    builder.MoveToCell(0, i + 1, 0, 0);                    builder.Write(PYName);                    string sex = DcList[i].Sex == 0 ? "Male" : DcList[i].Sex == 1 ? "Female" : "";                    builder.MoveToCell(0, i + 1, 1, 0);                    builder.Write(sex);                    DateTime birthDt;                    bool b_birth = DateTime.TryParse(DcList[i].BirthDay, out birthDt);                    string birthday = b_birth ? birthDt.ToString("yyyy-MM-dd") : " ";                    builder.MoveToCell(0, i + 1, 2, 0);                    builder.Write(birthday);                    string company = string.Empty,job = string.Empty;                    var dcTransInfo = transArray.FirstOrDefault(s => s.Index == i);                    if (dcTransInfo != null)                    {                        company = dcTransInfo.CompanyName;                        job = dcTransInfo.Job;                    }                                        if (!string.IsNullOrEmpty(DcList[i].CompanyFullName))                    {                        //查询对照表                        Res_CompanyEnglishComparison tempCec = listCEC.FirstOrDefault(s => s.zhName.Contains(DcList[i].CompanyFullName.ToString().Trim()));                        if (tempCec != null)                        {                            company = tempCec.enName;                        }                        //翻译                        else                        {                        }                    }                                        builder.MoveToCell(0, i + 1, 3, 0);                    builder.Write(company);                    if (!string.IsNullOrEmpty(DcList[i].Job.ToString()))                    {                        //查询对照表                        Res_PositionEnglishComparison tempPec = listPEC.FirstOrDefault(s => s.zhName == DcList[i].Job.ToString().Trim());                        if (tempPec != null)                        {                            job = tempPec.enName;                        }                        //翻译                        else                        {                        }                    }                    builder.MoveToCell(0, i + 1, 4, 0);                    builder.Write(job);                }            }            //删除多余行            while (tableOne.Rows.Count > DcList.Count + 1)            {                tableOne.Rows.RemoveAt(DcList.Count + 1);            }            string fileName = "组团人员名单(" + DateTime.Now.ToString("yyyyhhddHHmmss") + ").doc";            var fileDir = AppSettingsHelper.Get("WordBasePath") + "TourClientList/" + fileName;            doc.Save(fileDir);            string Url = AppSettingsHelper.Get("WordBaseUrl") + "Office/Word/TourClientList/" + fileName;            return Ok(JsonView(true, "操作成功!", Url));        }         private class TranslateInfo        {            public int Index { get; set; }            public string CompanyName { get; set; }            public string Job { get; set; }        }        #endregion        #region 团组倒推表        /// <summary>        /// 倒推表基础数据        /// Init        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostInvertedListInit()        {            var viewData = await _invertedListRep._Init();            if (viewData.Code != 0)            {                return Ok(JsonView(false, viewData.Msg));            }            return Ok(JsonView(viewData.Data));        }        /// <summary>        /// 倒推表         /// Info        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostInvertedListInfo(InvertedListCreateDto dto)        {            var viewData = await _invertedListRep._Info(dto.PortType, dto.DiId);            if (viewData.Code != 0)            {                return Ok(JsonView(false, viewData.Msg));            }            return Ok(JsonView(viewData.Data));        }        /// <summary>        /// 倒推表         /// Create        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostInvertedListCreate(InvertedListCreateDto dto)        {            var viewData = await _invertedListRep._Create(dto.PortType, dto.DiId);            if (viewData.Code != 0)            {                return Ok(JsonView(false, viewData.Msg));            }            return Ok(JsonView(viewData.Data));        }        /// <summary>        /// 倒推表         /// Update        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostInvertedListUpdate(InvertedListUpdateDto dto)        {            var viewData = await _invertedListRep._Update(dto);            if (viewData.Code != 0)            {                return Ok(JsonView(false, viewData.Msg));            }            return Ok(JsonView(viewData.Data));        }        /// <summary>        /// 倒推表         /// File Download        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostInvertedListFileDownload(InvertedListFileDownloadDto dto)        {            var info2 = await _invertedListRep._Info(1, dto.DiId);            if (info2.Code != 0)            {                return Ok(JsonView(false, "倒推表数据未生成,请先生成倒退表数据!"));            }            var info1 = info2.Data as InvertedListInfoView;            var info = await _invertedListRep._sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.Id == dto.DiId).FirstAsync();            string teamName = "";            if (info != null) teamName = info.TeamName;            //载入模板            Document doc = new Document(AppSettingsHelper.Get("WordBasePath") + "Template/倒退表模板20200617.doc");            DocumentBuilder builder = new DocumentBuilder(doc);            //利用键值对存放数据            Dictionary<string, string> dic = new Dictionary<string, string>();            dic.Add("TeamName", teamName);            dic.Add("StartTime", info1.AirportdDropOffDt.ConvertToDatetime()); //开始时间            dic.Add("BPtime", info1.ApprovalDataDt.ConvertToDatetime());            dic.Add("BPRemark", info1.ApprovalDataRemark);            dic.Add("SQtime", info1.ApprovalDt.ConvertToDatetime());            dic.Add("SQRemark", info1.ApprovalRemark);            dic.Add("CPJtime", info1.IssueApprovalDt.ConvertToDatetime());            dic.Add("CPJRemark", info1.IssueApprovalRemark);            //dic.Add("HZtime", info1.ApplyPassportDt.ConvertToDatetime());            //dic.Add("HZRemark", info1.ApplyPassportRemark);            dic.Add("QZtime", info1.VisaInformationDt.ConvertToDatetime());            dic.Add("QZRemark", info1.VisaInformationRemark);            dic.Add("SQQZtime", info1.SendVisaDt.ConvertToDatetime());            dic.Add("SQQZRemark", info1.SendVisaRemark);            dic.Add("CQtime", info1.IssueVisaDt.ConvertToDatetime());            dic.Add("CQRemark", info1.IssueVisaRemark);            dic.Add("XQHtime", info1.PreTripMeetingDt.ConvertToDatetime());            dic.Add("XQHRemark", info1.PreTripMeetingRemark);            dic.Add("SJtime", info1.AirportdDropOffDt.ConvertToDatetime());            dic.Add("SJRemark", info1.AirportdDropOffRemark);            #region 填充word模板书签内容            foreach (var key in dic.Keys)            {                builder.MoveToBookmark(key);                builder.Write(dic[key]);            }            #endregion            var fileDir = AppSettingsHelper.Get("WordBasePath");            string fileName = $"{teamName}团出行准备流程表.doc";            string filePath = fileDir + $@"InvertedList/{fileName}";            doc.Save(filePath);            string Url = $@"{AppSettingsHelper.Get("WordBaseUrl")}Office/Word/InvertedList/{fileName}";            return Ok(JsonView(true, "操作成功!", Url));        }        #endregion        #region 三公签证费用(签证费、代办费)        /// <summary>        /// 三公签证费用(签证费、代办费)        /// List        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostVisaFeeList(VisaFeeListDto _dto)        {            var _view = await _visaFeeInfoRep._List(_dto.PortType, _dto.DiId);            if (_view.Code != 0)            {                return Ok(JsonView(false, _view.Msg));            }            return Ok(JsonView(true, "操作成功!", _view.Data));        }        /// <summary>        /// 三公签证费用(签证费、代办费)        /// Add Or Update        /// </summary>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostVisaFeeAddAndUpdate(VisaFeeAddAndUpdateDto _dto)        {            var _view = await _visaFeeInfoRep._Update(_dto);            if (_view.Code != 0)            {                return Ok(JsonView(false, _view.Msg));            }            return Ok(JsonView(true, _view.Msg));        }        #endregion        #region 酒店询价        /// <summary>        /// 酒店询价        /// Init        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostHotelInquiryInit()        {            var res = await _hotelInquiryRep._Init();            if (res.Code != 0) return Ok(JsonView(false, res.Msg));            return Ok(JsonView(true, res.Msg, res.Data));        }        /// <summary>        /// 酒店询价        /// page Item        /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostHotelInquiryPageItem(HotelInquiryPageItemDto _dto)        {            var res = await _hotelInquiryRep._PageItem(_dto.PageIndex, _dto.PageSize, _dto.PortType, _dto.DiId);            if (res.Code != 0) return Ok(JsonView(false, res.Msg));            var view = res.Data as PageDataViewBase;            return Ok(JsonView(true, res.Msg, view.Data, view.Total));        }        /// <summary>        /// 酒店询价        /// info        /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostHotelInquiryInfo(HotelInquiryInfoDto _dto)        {            var res = await _hotelInquiryRep._Info(_dto.PortType, _dto.Id);            if (res.Code != 0) return Ok(JsonView(false, res.Msg));            return Ok(JsonView(true, res.Msg, res.Data));        }        /// <summary>        /// 酒店询价        /// Add Or Edit        /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostHotelInquiryAddOrEdit(HotelInquiryAddOrEditDto _dto)        {            var res = await _hotelInquiryRep._AddOrEdit(_dto);            if (res.Code != 0) return Ok(JsonView(false, res.Msg));            return Ok(JsonView(true, res.Msg, res.Data));        }        /// <summary>        /// 酒店询价        /// Del        /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostHotelInquiryDel(HotelInquiryDelDto _dto)        {            var res = await _hotelInquiryRep._Del(_dto.Id, _dto.DeleteUserId);            if (res.Code != 0) return Ok(JsonView(false, res.Msg));            return Ok(JsonView(true, res.Msg, res.Data));        }        #endregion        #region 下载匹配op行程单        /// <summary>        /// 匹配op行程单        /// Init         /// </summary>        /// <param name="dto">团组列表请求dto</param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostMateOpGroupInit(MateOpGroupInitDto dto)        {            Stopwatch stopwatch = Stopwatch.StartNew(); // 创建并启动Stopwatch            if (dto.CurrUserId < 1) return Ok(JsonView(false, MsgTips.UserId));            bool isDepStatus = await GeneralMethod.IsMarketingStaff(dto.CurrUserId);            List<Grp_DelegationInfo> groupInfos = new List<Grp_DelegationInfo>();            groupInfos = _sqlSugar.Queryable<Grp_DelegationInfo>()                                        .Where(it => it.IsDel == 0)                                        .WhereIF(isDepStatus, it => it.JietuanOperator == dto.CurrUserId)                                        .OrderByDescending(it => it.CreateUserId)                                        .ToList();            if (groupInfos.Count < 1) return Ok(JsonView(false, "暂无和你相关的团组信息!"));            var country = groupInfos.Select(it => it.VisitCountry).ToList();            var diids = groupInfos.Select(it => it.Id).ToList();            List<string> countrys = new List<string>();            foreach (var item in country)            {                var data = _groupRepository.FormartTeamName(item);                var dataArray = _groupRepository.GroupSplitCountry(data);                if (dataArray.Count > 0) countrys.AddRange(dataArray);            }            countrys = countrys.Where(it => !string.IsNullOrEmpty(it)).Distinct().ToList();            List<string> areaArray = new List<string>(); //GetGroupCityLine            var areaItem = GeneralMethod.GetGroupCityLineItem(diids, "-");            foreach (var item in areaItem)            {                string areaStr = item.Value;                if (!string.IsNullOrEmpty(areaStr))                {                    string[] str1 = areaStr.Split("-");                    if (str1.Length > 0)                    {                        areaArray.AddRange(str1);                    }                }            }            if (areaArray.Count > 0) areaArray = areaArray.Distinct().ToList();            var cityDatas = _sqlSugar.Queryable<Sys_Cities>()                                     .Where(it => it.IsDel == 0 && areaArray.Contains(it.Name_CN))                                     .Select(it => new { id = it.Id, parentId = it.CountriesId, name = it.Name_CN })                                     .ToList();            List<int> countriesIds = cityDatas.Select(it => it.parentId).ToList();            var countriesDatas = _sqlSugar.Queryable<Sys_Countries>()                                          .Where(it => countriesIds.Contains(it.Id))                                          .Select(it => new { it.Id, Name = it.Name_CN })                                          .ToList();            var teamNames = groupInfos.Where(it => !string.IsNullOrEmpty(it.TeamName))                                      .Select(it => it.TeamName).ToList();            stopwatch.Stop();            return Ok(JsonView(true, $"操作成功,耗时{stopwatch.ElapsedMilliseconds} ms", new { teamNames, countriesDatas, citiesDatas = cityDatas }));        }        ///// <summary>        ///// 匹配op行程单        ///// Init 查询区域数据        ///// </summary>        ///// <param name="dto">团组列表请求dto</param>        ///// <returns></returns>        //[HttpPost]        //[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        //public async Task<IActionResult> PostMateOpGroupCountryChangeData(MateOpGroupCountryChangeDataDto dto)        //{        //    Stopwatch stopwatch = Stopwatch.StartNew(); // 创建并启动Stopwatch        //    List<Sys_Cities> cityDatas = new List<Sys_Cities>();        //    string countriesDataStr = await RedisRepository.RedisFactory.CreateRedisRepository().StringGetAsync<string>("CityDatas");//string 取        //    if (string.IsNullOrEmpty(countriesDataStr))        //    {        //        cityDatas = await _sqlSugar.Queryable<Sys_Cities>().Where(it => it.IsDel == 0).ToListAsync();        //        TimeSpan ts = DateTime.Now.AddHours(2).TimeOfDay; //设置redis 过期时间 2        //        await RedisRepository.RedisFactory.CreateRedisRepository().StringSetAsync<string>("CountriesDatas", JsonConvert.SerializeObject(cityDatas), ts);//string 存        //    }        //    else        //    {        //        cityDatas = JsonConvert.DeserializeObject<List<Sys_Cities>>(countriesDataStr);        //    }        //    var provinceData = cityDatas.Where(it => it.CountriesId == dto.CountriesId && it.Level == 1).ToList();        //    var citiesData = cityDatas.Where(it => it.CountriesId == dto.CountriesId && it.Level == 2).ToList();        //    var countiesData = cityDatas.Where(it => it.CountriesId == dto.CountriesId && it.Level == 3).ToList();        //    List<dynamic> childList = new List<dynamic>();        //    int parentId = dto.CountriesId;        //    if (provinceData.Count > 1)        //    {        //        foreach (var item1 in provinceData)        //        {        //            List<dynamic> childList1 = new List<dynamic>();        //            var citiesData1 = citiesData.Where(it => it.ParentId == item1.Id).ToList();        //            foreach (var item2 in citiesData1)        //            {        //                List<dynamic> childList2 = new List<dynamic>();        //                var countiesData1 = countiesData.Where(it => it.ParentId == item2.Id).ToList();        //                foreach (var item3 in countiesData1)        //                {        //                    childList2.Add(new        //                    {        //                        id = item3.Id,        //                        parentId = item2.Id,        //                        level = "district",        //                        name = item3.Name_CN,        //                    });        //                }        //                childList1.Add(new        //                {        //                    id = item2.Id,        //                    parentId = item1.Id,        //                    level = "city",        //                    name = item2.Name_CN,        //                    childList = childList2        //                });        //            }        //            childList.Add(new        //            {        //                id = item1.Id,        //                parentId = parentId,        //                level = "province",        //                name = item1.Name_CN,        //                childList = childList1        //            });        //        }        //        //城市        //        var citiesData2 = citiesData.Where(it => it.ParentId == 0).ToList();        //        foreach (var item2 in citiesData2)        //        {        //            List<dynamic> childList22 = new List<dynamic>();        //            var countiesData1 = countiesData.Where(it => it.ParentId == item2.Id).ToList();        //            foreach (var item3 in countiesData1)        //            {        //                childList22.Add(new        //                {        //                    id = item3.Id,        //                    parentId = item2.Id,        //                    level = "district",        //                    name = item3.Name_CN,        //                });        //            }        //            childList.Add(new        //            {        //                id = item2.Id,        //                parentId = parentId,        //                level = "city",        //                name = item2.Name_CN,        //                childList = childList22        //            });        //        }        //    }        //    else        //    {        //        foreach (var item2 in citiesData)        //        {        //            string cname = item2.Name_CN;        //            List<dynamic> childList1 = new List<dynamic>();        //            var countiesData1 = countiesData.Where(it => it.ParentId == item2.Id).ToList();        //            foreach (var item3 in countiesData1)        //            {        //                childList1.Add(new        //                {        //                    Id = item3.Id,        //                    parentId = item2.Id,        //                    level = "district",        //                    name = item3.Name_CN        //                });        //            }        //            childList.Add(new        //            {        //                id = item2.Id,        //                parentId = parentId,        //                level = "city",        //                name = item2.Name_CN,        //                childList = childList1        //            });        //        }        //    }        //    stopwatch.Stop();        //    return Ok(JsonView(true, $"操作成功,耗时{stopwatch.ElapsedMilliseconds} ms", childList));        //}        /// <summary>        /// 匹配op行程单        /// 接团信息列表 Page        /// </summary>        /// <param name="dto">团组列表请求dto</param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostMateOpGroupPageList(MateOpGroupPageListDto dto)        {            var swatch = new Stopwatch();            swatch.Start();            #region  参数验证            if (dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));            if (dto.PageId < 1) return Ok(JsonView(false, "页面Id为空"));            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            #region 页面操作权限验证            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(dto.UserId, dto.PageId);            if (pageFunAuthView.CheckAuth == 0) return Ok(JsonView(false, "您没有查看权限"));            #endregion            #endregion            if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) // web/Android            {                var _view = await GeneralMethod.MateOpGroupPageListRedis();                string sqlWhere = "";                if (!string.IsNullOrEmpty(dto.Country))                {                    _view = _view.Where(x => !string.IsNullOrEmpty(x.VisitCountry) && x.VisitCountry.Contains(dto.Country)).ToList();                }                if (!string.IsNullOrEmpty(dto.Area))                {                    _view = _view.Where(x => !string.IsNullOrEmpty(x.RouteCity) && x.RouteCity.Contains(dto.Area)).ToList();                }                if (!string.IsNullOrEmpty(dto.TeamName))                {                    _view = _view.Where(x => !string.IsNullOrEmpty(x.TeamName) && x.TeamName.Contains(dto.TeamName)).ToList();                }                int startIndex = (dto.PageIndex - 1) * dto.PageSize; // 计算开始的索引                int endIndex = startIndex + dto.PageSize - 1; // 计算结束的索引                var _view1 = _view.Skip(startIndex).Take(endIndex).ToList();                swatch.Stop();                return Ok(JsonView(true, $"查询成功!耗时 {swatch.ElapsedMilliseconds} ms", _view1, _view.Count));            }            else            {                return Ok(JsonView(false, "查询失败"));            }        }        /// <summary>        /// 匹配op行程单        /// 行程单下载        /// </summary>        /// <param name="dto">团组列表请求dto</param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostMateOpGroupDownload(MateOpGroupDownloadDto dto)        {            #region  参数验证            if (dto.UserId < 1) return Ok(JsonView(false, "员工Id为空"));            if (dto.PageId < 1) return Ok(JsonView(false, "页面Id为空"));            PageFunAuthViewBase pageFunAuthView = new PageFunAuthViewBase();            #region 页面操作权限验证            pageFunAuthView = await GeneralMethod.PostUserPageFuncDatas(dto.UserId, dto.PageId);            if (pageFunAuthView.FilesDownloadAuth == 0) return Ok(JsonView(false, "您没有文件下载权限"));            #endregion            #endregion            if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3) // web/Android            {                var res = ExportTravel(new ExportTravelDto() { Diid = dto.diId });                return Ok(res.GetType().GetProperty("Value").GetValue(res, null));            }            else            {                return Ok(JsonView(false, "下载失败!"));            }        }        #endregion        #region 国家信息 数据 注释        //[HttpPost]        //public async Task<IActionResult> LoadCitiesInitData(List<int> dto)        //{        //    List<Grp_GroupsTaskAssignment> infos = new List<Grp_GroupsTaskAssignment>();        //    foreach (var item in dto)        //    {        //        infos.Add(new Grp_GroupsTaskAssignment()        //        {        //            DIId = item,        //            CTId = 82,        //            UId = 248,        //            IsEnable = 1,        //            CreateUserId = 233,        //            CreateTime = DateTime.Now,        //            IsDel = 0        //        });        //        infos.Add(new Grp_GroupsTaskAssignment()        //        {        //            DIId = item,        //            CTId = 82,        //            UId = 286,        //            IsEnable = 1,        //            CreateUserId = 233,        //            CreateTime = DateTime.Now,        //            IsDel = 0        //        });        //    }        //    int add = _sqlSugar.Insertable<Grp_GroupsTaskAssignment>(infos).ExecuteCommand();        //    return Ok("操作成功");        //}        //public class paramJsonDto        //{        //    public List<CountriesInfo> str { get; set; }        //}        //[HttpPost]        //public async Task<IActionResult> LoadCitiesInitData(paramJsonDto dto)        //{        //    //List<CountriesInfo> infos = new List<CountriesInfo>();        //    //infos = JsonConvert.DeserializeObject<List<CountriesInfo>>(dto.str);        //    List<Sys_Cities> cities = new List<Sys_Cities>();        //    List<Sys_Cities> districts = new List<Sys_Cities>();        //    var counties = _sqlSugar.Queryable<Sys_Countries>().Where(it => it.IsDel == 0).ToList();        //    _sqlSugar.BeginTran();        //    int countitiesIndex = 0;        //    foreach (var item in dto.str)        //    {        //        dynamic data = item.c;        //        int countriesId = counties.Find(it => it.Name_CN.Equals(item.cn))?.Id ?? 0;        //        if (data != null)        //        {        //            countitiesIndex++;        //            foreach (var item1 in data)        //            {        //                string cnname = item1.cn;        //                string enname = item1.en;        //                Sys_Cities provinceInfo = new Sys_Cities()        //                {        //                    CountriesId = countriesId,        //                    Name_CN = cnname,        //                    Name_EN = enname,        //                    ParentId = 0,        //                    IsCapital = 1,        //                    CreateUserId = 208,        //                    CreateTime = DateTime.Now,        //                    IsDel = 0        //                };        //                if (item1.lv == "province") //省份        //                {        //                    provinceInfo.Level = 1;        //                    int provinceId = 0;        //                    var provinceInfo1 = _sqlSugar.Queryable<Sys_Cities>().Where(it => it.CountriesId == countriesId && it.Level == 1 && it.Name_CN.Equals(cnname)).First();        //                    if (provinceInfo1 != null) provinceId = provinceInfo1.Id;        //                    else provinceId = _sqlSugar.Insertable<Sys_Cities>(provinceInfo).ExecuteReturnIdentity();        //                    var data1 = item1.c;        //                    foreach (var item2 in data1)        //                    {        //                        if (item2.lv == "city")        //                        {        //                            string citycnname = item2.cn;        //                            string cityenname = item2.en;        //                            Sys_Cities cityInfo = new Sys_Cities()        //                            {        //                                CountriesId = countriesId,        //                                ParentId = provinceId,        //                                Level = 2,        //                                Name_CN = citycnname,        //                                Name_EN = cityenname,        //                                IsCapital = 1,        //                                CreateUserId = 208,        //                                CreateTime = DateTime.Now,        //                                IsDel = 0        //                            };        //                            if (item2.c != null)        //                            {        //                                int cityId = 0;        //                                var citiesInfo = _sqlSugar.Queryable<Sys_Cities>().Where(it => it.CountriesId == countriesId && it.Level == 2 && it.Name_CN.Equals(citycnname)).First();        //                                if (citiesInfo != null) cityId = citiesInfo.Id;        //                                else cityId = _sqlSugar.Insertable<Sys_Cities>(cityInfo).ExecuteReturnIdentity();        //                                foreach (var item3 in item2.c)        //                                {        //                                    if (item3.lv == "district")        //                                    {        //                                        var districtInfo = new Sys_Cities()        //                                        {        //                                            CountriesId = countriesId,        //                                            Name_CN = item3.cn,        //                                            Name_EN = item3.en,        //                                            Level = 3,        //                                            ParentId = cityId,        //                                            IsCapital = 1,        //                                            CreateUserId = 208,        //                                            CreateTime = DateTime.Now,        //                                            IsDel = 0        //                                        };        //                                        //if (districts.Find(it => it.CountriesId == countriesId && it.ParentId == cityId && it.Name_CN.Equals(districtInfo.Name_CN)) == null)        //                                        //{        //                                        districts.Add(districtInfo);        //                                        //}        //                                    }        //                                }        //                            }        //                            else        //                            {        //                                //if (cities.Find(it => it.CountriesId == countriesId && it.ParentId == provinceId && it.Name_CN.Equals(citycnname)) == null)        //                                //{        //                                cities.Add(cityInfo);        //                                //}        //                            }        //                        }        //                    }        //                }        //                else if (item1.lv == "city")//城市        //                {        //                    provinceInfo.Level = 2;        //                    if (item1.c != null)        //                    {        //                        int cityId = 0;        //                        var citiesInfo = _sqlSugar.Queryable<Sys_Cities>().Where(it => it.CountriesId == countriesId && it.Level == 1 && it.Name_CN.Equals(provinceInfo.Name_CN)).First();        //                        if (citiesInfo != null) cityId = citiesInfo.Id;        //                        else cityId = _sqlSugar.Insertable<Sys_Cities>(provinceInfo).ExecuteReturnIdentity();        //                        foreach (var item3 in item1.c)        //                        {        //                            if (item3.lv == "district")        //                            {        //                                var districtInfo = new Sys_Cities()        //                                {        //                                    CountriesId = countriesId,        //                                    Name_CN = item3.cn,        //                                    Name_EN = item3.en,        //                                    Level = 3,        //                                    ParentId = cityId,        //                                    IsCapital = 1,        //                                    CreateUserId = 208,        //                                    CreateTime = DateTime.Now,        //                                    IsDel = 0        //                                };        //                                //if (districts.Find(it => it.CountriesId == countriesId && it.ParentId == cityId && it.Name_CN.Equals(districtInfo.Name_CN)) == null)        //                                //{        //                                districts.Add(districtInfo);        //                                //}        //                            }        //                        }        //                    }        //                    else        //                    {        //                        //if (cities.Find(it =>  it.CountriesId == countriesId && it.Name_CN.Equals(provinceInfo.Name_CN)) == null)        //                        //{        //                        cities.Add(provinceInfo);        //                        //}        //                    }        //                }        //            }        //        }        //    }        //    var procinceDatas = _sqlSugar.Queryable<Sys_Cities>().ToList();        //    cities = cities.Distinct().ToList();        //    districts = districts.Distinct().ToList();        //    var citiesDatas = cities.Where(it => it.Level == 2).ToList();        //    //var districtDatas = cities.Where(it => it.Level == 3).ToList();        //    cities.AddRange(districts);        //    var citiesAdd = _sqlSugar.Insertable<Sys_Cities>(cities).ExecuteReturnIdentity();        //    //_sqlSugar.RollbackTran();        //    _sqlSugar.CommitTran();        //    return Ok(JsonView(false, "操作成功!"));        //}        //[HttpPost]        //public async Task<IActionResult> LoadCitiesInitInfo(CounrtiesDto dto)        //{        //    List<CountitiesInfo> infos = dto.MyProperty;        //    List<Sys_Cities> cityInfos = new List<Sys_Cities>();        //    _sqlSugar.BeginTran();        //    var countities = _sqlSugar.Queryable<Sys_Countries>().Where(it => it.IsDel == 0).ToList();        //    var citities = _sqlSugar.Queryable<Sys_Cities>().Where(it => it.IsDel == 0 && it.Level == 2).ToList();        //    foreach (var item in infos)        //    {        //        var countryInfo = countities.Where(it => it.ThreeCode.Equals(item.country_code3)).FirstOrDefault();        //        if (countryInfo != null)        //        {        //            var cityInfo = citities.Where(it => it.CountriesId == countryInfo.Id).ToList();        //            var cityInfo1 = cityInfo.Where(it => item.capital_name_chinese.Contains(it.Name_CN)).FirstOrDefault();        //            if (cityInfo1 != null)        //            {        //                cityInfo1.IsCapital = 0;        //                cityInfos.Add(cityInfo1);        //            }        //        }        //    }        //    var update = _sqlSugar.Updateable<Sys_Cities>(cityInfos)        //                          .UpdateColumns(it => it.IsCapital)        //                          .WhereColumns(it => it.Id)        //                          .ExecuteCommand();        //    //_sqlSugar.RollbackTran();        //    _sqlSugar.CommitTran();        //    return Ok(JsonView(false, "操作成功!"));        //}        //public class CounrtiesDto        //{        //    public List<CountitiesInfo> MyProperty { get; set; }        //}        //public class CountitiesInfo        //{        //    /// <summary>        //    /// 圣约翰        //    /// </summary>        //    public string capital_name_chinese { get; set; }        //    /// <summary>        //    ///         //    /// </summary>        //    public string capital_name { get; set; }        //    /// <summary>        //    ///         //    /// </summary>        //    public string country_type { get; set; }        //    /// <summary>        //    /// 安提瓜和巴布达        //    /// </summary>        //    public string country_name_chinese { get; set; }        //    /// <summary>        //    /// 安提瓜和巴布达        //    /// </summary>        //    public string country_name_chinese_short { get; set; }        //    /// <summary>        //    /// 安提瓜和巴布达        //    /// </summary>        //    public string country_name_chinese_UN { get; set; }        //    /// <summary>        //    ///         //    /// </summary>        //    public string country_name_english_abbreviation { get; set; }        //    /// <summary>        //    ///         //    /// </summary>        //    public string country_name_english_formal { get; set; }        //    /// <summary>        //    ///         //    /// </summary>        //    public string country_name_english_UN { get; set; }        //    /// <summary>        //    ///         //    /// </summary>        //    public string continent_name { get; set; }        //    /// <summary>        //    ///         //    /// </summary>        //    public string subregion_name { get; set; }        //    /// <summary>        //    ///         //    /// </summary>        //    public string country_code2 { get; set; }        //    /// <summary>        //    ///         //    /// </summary>        //    public string country_code3 { get; set; }        //    /// <summary>        //    ///         //    /// </summary>        //    public string phone_code { get; set; }        //}        //public class CountriesInfo : BasicInfo        //{        //    public List<CitiesInfo> c { get; set; }        //}        //public class CitiesInfo : BasicInfo        //{        //    public List<AreaInfo> c { get; set; }        //}        //public class AreaInfo : BasicInfo        //{        //    public List<AreaInfo> c { get; set; }        //}        //public class BasicInfo        //{        //    public string code { get; set; }        //    public string cn { get; set; }        //    public string lv { get; set; }        //    public string en { get; set; }        //}        #endregion        #region 查看邀请方        /// <summary>        /// 查看邀请方        /// 邀请方信息 Init        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostGroupLinkInvitingUnitNameInit(GroupLinkInvitingUnitNameInitDto dto)        {            string sqlWhere = string.Empty;            if (!string.IsNullOrEmpty(dto.Search))            {                sqlWhere = string.Format($@" And UnitName Like '%{dto.Search}%'");            }            string sql = string.Format($@"Select  ROW_NUMBER() Over(Order By Id desc) As Row_Number, Id, UnitNameFrom Res_InvitationOfficialActivityData Where IsDel = 0And (UnitName != '' Or UnitName != null) {sqlWhere}");            RefAsync<int> total = 0;            var _views = await _sqlSugar.SqlQueryable<GroupLinkInvitingUnitNameInitView>(sql).ToPageListAsync(dto.PageIndex, dto.PageSize, total);            return Ok(JsonView(true, MsgTips.Succeed, _views, total));        }        /// <summary>        /// 查看邀请方        /// 国家信息 Init        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostGroupLinkInvitingCountryInit(GroupLinkInvitingUnitNameInitDto dto)        {            var groupInfos = await _sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0).OrderByDescending(it => it.CreateUserId).ToListAsync();            var country = groupInfos.Select(it => it.VisitCountry).ToList();            var diids = groupInfos.Select(it => it.Id).ToList();            List<string> countrys = new List<string>();            foreach (var item in country)            {                var data = _groupRepository.FormartTeamName(item);                var dataArray = _groupRepository.GroupSplitCountry(data);                if (dataArray.Count > 0) countrys.AddRange(dataArray);            }            countrys = countrys.Distinct().ToList();            for (int i = 0; i < countrys.Count; i++)            {                string item = countrys[i];                if (string.IsNullOrEmpty(item) || item.Contains("-"))                {                    countrys.Remove(item);                    i--;                }            }            RefAsync<int> total = 0;            var countyDatas = await _sqlSugar.Queryable<Sys_Countries>()                                             .Where(it => countrys.Contains(it.Name_CN))                                             .WhereIF(!string.IsNullOrEmpty(dto.Search), it => it.Name_CN.Contains(dto.Search))                                             .Select(it => new { id = it.Id, name = it.Name_CN })                                             .ToPageListAsync(dto.PageIndex, dto.PageSize, total);            return Ok(JsonView(true, MsgTips.Succeed, countyDatas, total));        }        /// <summary>        /// 查看邀请方        /// 城市信息 Init        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostGroupLinkInvitingCityInit(GroupLinkInvitingCityInitDto dto)        {            if (dto.CountiesId < 1) return Ok(JsonView(false, "请传入有效的国家Id"));            RefAsync<int> total = 0;            var countyDatas = await _sqlSugar.Queryable<Sys_Cities>()                                             .Where(it => it.CountriesId == dto.CountiesId)                                             .WhereIF(!string.IsNullOrEmpty(dto.Search), it => it.Name_CN.Contains(dto.Search))                                             .OrderBy(it => new { IsCapital = SqlFunc.Asc(it.IsCapital), Id = SqlFunc.Asc(it.Id) })                                             .Select(it => new { id = it.Id, name = it.Name_CN })                                             .ToPageListAsync(dto.PageIndex, dto.PageSize, total);            return Ok(JsonView(true, MsgTips.Succeed, countyDatas, total));        }        /// <summary>        /// 查看邀请方        /// 团组名称 Init        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostGroupLinkInvitingGroupInit(GroupLinkInvitingDto dto)        {            var watch = new Stopwatch();            watch.Start();            RefAsync<int> total = 0;            var countyDatas = await _sqlSugar.Queryable<Res_OfficialActivities>()                                             .InnerJoin<Grp_DelegationInfo>((oa, di) => oa.DiId == di.Id)                                             .Where((oa, di) => oa.IsDel == 0)                                             .WhereIF(!string.IsNullOrEmpty(dto.Search), (oa, di) => di.TeamName.Contains(dto.Search))                                             .OrderBy((oa, di) => new { id = SqlFunc.Desc(di.Id) })                                             .Select((oa, di) => new { id = di.Id, name = di.TeamName })                                             .Distinct()                                             .ToPageListAsync(dto.PageIndex, dto.PageSize, total);            watch.Stop();            return Ok(JsonView(true, $"{MsgTips.Succeed},耗时 {watch.ElapsedMilliseconds} ms", countyDatas, total));        }        /// <summary>        /// 查看邀请方        /// 团组 & 邀请方信息        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> PostGroupLinkInvitingPageList(GroupLinkInvitingPageListDto dto)        {            var watch = new Stopwatch();            watch.Start();            RefAsync<int> total = 0;            var infos = await _sqlSugar.Queryable<GroupLinkInvitingPageListView>()                                             .AS("Grp_DelegationInfo")                                             .Includes(x => x.InvitingInfos)                                             .Where(x => x.IsDel == 0 && x.InvitingInfos.Any(z => z.IsDel == 0))                                             .WhereIF(!string.IsNullOrEmpty(dto.Counrty), x => x.VisitCountry.Contains(dto.Counrty))                                             .WhereIF(!string.IsNullOrEmpty(dto.Area), x => x.InvitingInfos.Any(z => z.Area.Contains(dto.Area))) //                                             .WhereIF(!string.IsNullOrEmpty(dto.TeamName), x => x.TeamName.Contains(dto.TeamName)) //                                             .WhereIF(!string.IsNullOrEmpty(dto.UnitName), x => x.InvitingInfos.Any(z => z.Client.Contains(dto.UnitName)))                                             .OrderBy(x => new { JietuanTime = SqlFunc.Desc(x.VisitStartDate) })                                             .ToPageListAsync(dto.PageIndex, dto.PageSize, total);            var userDatas = _sqlSugar.Queryable<Sys_Users>().Where(x => x.IsDel == 0).ToList();            var setDatas = _sqlSugar.Queryable<Sys_SetData>().Where(x => x.IsDel == 0).ToList();            infos.ForEach(x =>            {                x.TeamDid = setDatas.Find(y => int.Parse(x.TeamDid) == y.Id)?.Name ?? "-";                x.JietuanOperator = userDatas.Find(y => int.Parse(x.JietuanOperator) == y.Id)?.CnName ?? "-";                x.TeamLevSId = setDatas.Find(y => int.Parse(x.TeamLevSId) == y.Id)?.Name ?? "-";                x.InvitingInfos = x.InvitingInfos.Where(it => it.IsDel == 0).ToList();            });            watch.Stop();            return Ok(JsonView(true, $"{MsgTips.Succeed},耗时 {watch.ElapsedMilliseconds} ms", infos, total));        }        #endregion        #region 报批行程        /// <summary>        /// 报批行程初始化        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public IActionResult ApprovalJourneyInit(ApprovalJourneyDto dto)        {            const int chiNumber = 5;            var jw = JsonView(false);            var groupList = _sqlSugar.Queryable<Grp_DelegationInfo>().Where(x => x.IsDel == 0).OrderByDescending(x => x.Id).ToList();            var group = groupList.First();            var diid = dto.Diid == -1 ? group?.Id : dto.Diid;            group = groupList.First(x => x.Id == diid);            if (group == null)            {                jw.Msg = "暂无团组!";                return Ok(jw);            }            var data = new            {                groupList = groupList.Select(x => new                {                    x.TeamName,                    x.Id                }),                content = new ArrayList(),                groupInfo = new                {                    group.VisitDays,                    group.TourCode,                    group.VisitPNumber,                    group.TeamName,                    group.Id,                    visitStartDate = group.VisitStartDate.ToString("yyyy-MM-dd"),                    visitEndDate = group.VisitEndDate.ToString("yyyy-MM-dd")                },            };            var resultArr = new ArrayList();            var content = _sqlSugar.Queryable<Grp_ApprovalTravel>().Where(x => x.Diid == diid && x.IsDel == 0).ToList();            if (content.Count == 0)            {                var stay = "-";                var cityPath = "-";                //添加城市路径以及住宿地                //黑屏代码数据                DataTable dtBlack = GeneralMethod.GetTableByBlackCode(group.Id);                if (dtBlack.Rows.Count == 0 || string.IsNullOrWhiteSpace(dtBlack.Rows[0][1].ToString()))                {                    jw = JsonView(true, "黑屏代码有误!", data);                    return Ok(jw);                }                foreach (DataRow row in dtBlack.Rows)                {                    if (!string.IsNullOrWhiteSpace(row["Error"].ToString()))                    {                        jw = JsonView(true, "黑屏代码有误!" + row["Error"].ToString(), data);                        return Ok(jw);                    }                }                //黑屏代码获取时间区间                var timeArr = GeneralMethod.GetTimeListByDataTable(dtBlack);                string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };                _sqlSugar.BeginTran();                for (int i = 0; i < timeArr.Count; i++)                {                    stay = "-";                    cityPath = "-";                    DateTime NewData = DateTime.Parse(timeArr[i]);                    string week = Day[Convert.ToInt32(NewData.DayOfWeek.ToString("d"))].ToString();                    Grp_ApprovalTravel appro = new Grp_ApprovalTravel();                    var tbSelect = dtBlack.Select(string.Format("Day = '{0}'", NewData.ToString("yyyy-MM-dd")));                    if (tbSelect.Length > 0)                    {                        List<string> threeCodeStr = new List<string>();                        foreach (var item in tbSelect)                        {                            var threeCode = item["Three"].ToString() ?? "";                            if (threeCode.Length == 6)                            {                                var start = threeCode.Substring(0, 3);                                var end = threeCode.Substring(3, 3);                                if (threeCodeStr.Count == 0)                                {                                    threeCodeStr.Add(start);                                    threeCodeStr.Add(end);                                }                                else                                {                                    if (threeCodeStr[threeCodeStr.Count - 1] == start)                                    {                                        threeCodeStr.Add(end);                                    }                                    else                                    {                                        threeCodeStr.Add(start);                                        threeCodeStr.Add(end);                                    }                                }                            }                        }                        var threeCodeList = _threeCodeRepository.QueryThreeCodeArray(threeCodeStr);                        var last = threeCodeStr.Last();                        foreach (var item in threeCodeStr)                        {                            cityPath += (threeCodeList.Keys.Contains(item) ? threeCodeList[item].City : "【未知三字码】") + "-";                            if (item.Equals(last))                            {                                stay = threeCodeList.Keys.Contains(item) ? threeCodeList[item].City : "【未知三字码】";                            }                        }                        cityPath = cityPath.Trim('-');                    }                    appro.Date = "第" + intToString(i + 1) + "天 " + NewData.Month + "月" + NewData.Day + "日(" + week + ") " + cityPath + " 宿:" + stay;                    appro.Diid = diid ?? -1;                    var thisId = _sqlSugar.Insertable<Grp_ApprovalTravel>(appro).ExecuteReturnIdentity();                    appro.Id = thisId;                    appro.CreateUserId = dto.UserId;                    appro.CreateTime = DateTime.Now;                    content.Add(appro);                }                _sqlSugar.CommitTran();            }            foreach (var x in content)            {                var chiList = _sqlSugar.Queryable<Grp_ApprovalTravelDetails>().Where(x1 => x1.ParentId == x.Id && x1.IsDel == 0).ToList();                if (chiList.Count < chiNumber)                {                    for (int i = chiList.Count; i < chiNumber; i++)                    {                        chiList.Add(new Grp_ApprovalTravelDetails());                    }                }                resultArr.Add(new                {                    x.Id,                    x.Date,                    x.Diid,                    chiList = chiList.Select(x1 => new                    {                        timeInterval = x1.Time == null ? new string[1] : x1.Time.Split('-'),                        x1.Details,                        x1.ParentId,                        x1.Id                    })                });            }            data = data with            {                content = resultArr,            };            jw = JsonView(true, "获取成功!", data);            return Ok(jw);        }        /// <summary>        /// 报批行程删除        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public IActionResult DeleteApprovalJourney(DeleteApprovalJourney dto)        {            var jw = JsonView(false);            var group = _sqlSugar.Queryable<Grp_DelegationInfo>().First(x => x.Id == dto.Diid && x.IsDel == 0);            if (group == null)            {                jw.Msg = "团组参数有误!";                return Ok(jw);            }            try            {                _sqlSugar.BeginTran();                var arr = _sqlSugar.Queryable<Grp_ApprovalTravel>().Where(x => x.Diid == dto.Diid && x.IsDel == 0).Select(x => x.Id).ToList();                _ = _sqlSugar.Updateable<Grp_ApprovalTravelDetails>().SetColumns(x => new Grp_ApprovalTravelDetails                {                    DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),                    DeleteUserId = dto.uesrId,                    IsDel = 1                }).Where(x => arr.Contains(x.ParentId) && x.IsDel == 0).ExecuteCommand();                _ = _sqlSugar.Updateable<Grp_ApprovalTravel>().SetColumns(x => new Grp_ApprovalTravel                {                    DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),                    DeleteUserId = dto.uesrId,                    IsDel = 1                }).Where(x => arr.Contains(x.Id)).ExecuteCommand();                _sqlSugar.CommitTran();                jw = JsonView(true, "删除成功");            }            catch (Exception ex)            {                jw = JsonView(false, ex.Message);            }            return Ok(jw);        }        /// <summary>        /// 报批行程保存        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public IActionResult SaveApprovalJourney(SaveApprovalJourney dto)        {            var jw = JsonView(false);            var Find = dto.Arr.Find(x => x.id == 0);            if (Find != null)            {                jw.Msg = "生成的ID为0!";                return Ok(jw);            }            foreach (var item in dto.Arr)            {                foreach (var chi in item.chiList)                {                    if (chi.parentId == 0)                    {                        chi.parentId = item.id;                    }                }            }            var chiArr = dto.Arr.SelectMany(x => x.chiList).ToList();            _sqlSugar.BeginTran();            if (chiArr.Where(x => x.id == 0).Count() == chiArr.Count)            {                var parentIds = dto.Arr.Select(x => x.id).ToList();                _sqlSugar.Updateable<Grp_ApprovalTravelDetails>().Where(x => parentIds.Contains(x.ParentId) && x.IsDel == 0).SetColumns(x => new Grp_ApprovalTravelDetails                {                    DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),                    DeleteUserId = dto.UserId,                    IsDel = 1                }).ExecuteCommand();            }            try            {                _ = _sqlSugar.Insertable<Grp_ApprovalTravelDetails>(chiArr.Where(x => x.id == 0).Select(x => new Grp_ApprovalTravelDetails                {                    CreateTime = DateTime.Now,                    CreateUserId = dto.UserId,                    Details = x.details,                    ParentId = x.parentId,                    Time = x.timeInterval.Where(x => !string.IsNullOrWhiteSpace(x)).Count() > 1 ? x.timeInterval[0] + "-" + x.timeInterval[1] : "",                    Remark = "",                    IsDel = 0                }).ToList()).ExecuteCommand();                _ = _sqlSugar.Updateable<Grp_ApprovalTravelDetails>(chiArr.Where(x => x.id != 0).Select(x => new Grp_ApprovalTravelDetails                {                    Id = x.id,                    Details = x.details,                    ParentId = x.parentId,                    Time = x.timeInterval.Where(x => !string.IsNullOrWhiteSpace(x)).Count() > 1 ? x.timeInterval[0] + "-" + x.timeInterval[1] : "",                }).ToList()).UpdateColumns(x => new Grp_ApprovalTravelDetails                {                    Details = x.Details,                    ParentId = x.ParentId,                    Time = x.Time                }).ExecuteCommand();                _ = _sqlSugar.Updateable<Grp_ApprovalTravel>(dto.Arr.Where(x => x.id != 0).Select(x => new Grp_ApprovalTravel                {                    Id = x.id,                    Date = x.date,                }).ToList()).UpdateColumns(x => new Grp_ApprovalTravel                {                    Date = x.Date                }).ExecuteCommand();                _sqlSugar.CommitTran();                jw = JsonView(true, "保存成功!");            }            catch (Exception ex)            {                _sqlSugar.RollbackTran();                jw = JsonView(false, "保存失败!" + ex.Message);            }            return Ok(jw);        }        /// <summary>        /// 报批行程生成        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public IActionResult CreateApprovalJourney(CreateApprovalJourneyDto dto)        {            var jw = JsonView(false);            var group = _sqlSugar.Queryable<Grp_DelegationInfo>().First(x => x.Id == dto.Diid && x.IsDel == 0);            if (group == null)            {                jw.Msg = "暂无该团组!";                return Ok(jw);            }            //黑屏代码数据            DataTable dtBlack = GeneralMethod.GetTableByBlackCode(group.Id);            if (dtBlack.Rows.Count == 0 || string.IsNullOrWhiteSpace(dtBlack.Rows[0][1].ToString()))            {                jw.Msg = "黑屏代码有误!";                return Ok(jw);            }            foreach (DataRow row in dtBlack.Rows)            {                if (!string.IsNullOrWhiteSpace(row["Error"].ToString()))                {                    jw.Msg = "黑屏代码有误!" + row["Error"].ToString();                    return Ok(jw);                }            }            var officialActivitiesArr = _sqlSugar.Queryable<Res_OfficialActivities>().Where(x => x.DiId == dto.Diid && x.IsDel == 0).ToList();            var resultArr = new ArrayList();            if (officialActivitiesArr.Count == 0)            {                jw.Msg = "暂无公务出访信息!";                return Ok(jw);            }            try            {                _sqlSugar.BeginTran();                DeleteApprovalJourney(new                     Domain.Dtos.Groups.DeleteApprovalJourney                {                    Diid = dto.Diid,                    uesrId = dto.Userid                });                var stay = "-";                var cityPath = "-";                //添加城市路径以及住宿地                //黑屏代码获取时间区间                var timeArr = GeneralMethod.GetTimeListByDataTable(dtBlack);                var empty = "【未收入该三字码!请机票同事录入】";                string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };                for (int i = 0; i < timeArr.Count; i++)                {                    stay = "-";                    cityPath = "-";                    var chiarr = new List<Grp_ApprovalTravelDetails>();                    DateTime NewData = DateTime.Parse(timeArr[i]);                    var gwinfo = officialActivitiesArr.Where(x => DateTime.TryParse(x.Date, out DateTime gwData) && gwData.ToString("yyyy-MM-dd") == NewData.ToString("yyyy-MM-dd")).OrderBy(x => x.Time).ToList();                    var tbSelect = dtBlack.Select(string.Format("Day = '{0}'", NewData.ToString("yyyy-MM-dd")));                    if (tbSelect.Length > 0)                    {                        List<string> threeCodeStr = new List<string>();                        bool isTrade = false;                        string trip = string.Empty;                        var rowLast = tbSelect.Last();                        var rowFirst = tbSelect.First();                        var airStartTime = rowFirst["StartTime"].ToString() ?? "0000";                        var airEndTime = rowLast["EndTime"].ToString() ?? "0000";                        var takeOffTime = DateTime.Parse(timeArr[i]);                        var fallToTime = DateTime.Parse(timeArr[i]);                        takeOffTime = takeOffTime.AddHours(int.Parse(airStartTime.Substring(0, 2)));                        takeOffTime = takeOffTime.AddMinutes(int.Parse(airStartTime.Substring(2, 2)));                        fallToTime = fallToTime.AddHours(int.Parse(airEndTime.Substring(0, 2)));                        fallToTime = fallToTime.AddMinutes(int.Parse(airEndTime.Substring(2, 2)));                        foreach (var item in tbSelect)                        {                            var start = string.Empty;                            var end = string.Empty;                            var threeCode = item["Three"].ToString() ?? "";                            if (threeCode.Length == 6)                            {                                start = threeCode.Substring(0, 3);                                end = threeCode.Substring(3, 3);                                if (threeCodeStr.Count == 0)                                {                                    threeCodeStr.Add(start);                                    threeCodeStr.Add(end);                                }                                else                                {                                    if (threeCodeStr[threeCodeStr.Count - 1] == start)                                    {                                        threeCodeStr.Add(end);                                    }                                    else                                    {                                        threeCodeStr.Add(start);                                        threeCodeStr.Add(end);                                    }                                }                            }                            //处理机票信息                            var start_Object = _sqlSugar.Queryable<Res_ThreeCode>().First(x => x.Three.ToUpper() == start.ToUpper());                            var end_Object = _sqlSugar.Queryable<Res_ThreeCode>().First(x => x.Three.ToUpper() == end.ToUpper());                            if (start_Object == null)                            {                                start_Object = new Res_ThreeCode()                                {                                    AirPort = empty,                                    AirPort_En = empty,                                    City = empty,                                    Country = empty,                                    Four = empty,                                    Three = empty,                                };                            }                            if (end_Object == null)                            {                                end_Object = new Res_ThreeCode()                                {                                    AirPort = empty,                                    AirPort_En = empty,                                    City = empty,                                    Country = empty,                                    Four = empty,                                    Three = empty,                                };                            }                            //机型判断                            string airModel = item["AirModel"].ToString();                            airModel = GeneralMethod.GetLonger(airModel!.Substring(0, 1)) + airModel;                            string flightTime = item["FlightTime"].ToString();                            if (flightTime!.Contains(":"))                            {                                flightTime = flightTime.Replace(":", "小时");                                flightTime += "分钟";                            }                            if (flightTime.Contains("H"))                            {                                flightTime = flightTime.Replace("H", "小时");                            }                            if (flightTime.Contains("M"))                            {                                flightTime = flightTime.Replace("M", "分钟");                            }                            IFormatProvider ifp = new CultureInfo("zh-CN", true);                            if (DateTime.TryParseExact(flightTime, "HH小时mm分钟", ifp, DateTimeStyles.None, out DateTime flightDataTime))                            {                                flightTime = flightDataTime.Hour > 0                                    ? flightDataTime.Hour.ToString() + "小时" + (flightDataTime.Minute > 0                                    ? flightDataTime.Minute.ToString() + "分钟" : "") : flightDataTime.Minute > 0                                    ? flightDataTime.Minute.ToString() + "分钟" : "";                            }                            //航班号                            string flightcode = item["Fliagtcode"].ToString();                            var aircompany = _sqlSugar.Queryable<Res_AirCompany>().First(x => x.ShortCode.ToUpper() == flightcode!.Substring(0, 2).ToUpper() && x.IsDel == 0);                            var hsEmpty = "【此航司" + flightcode!.Substring(0, 2).ToUpper() + "未收录,请机票同事录入】";                            if (aircompany == null)                            {                                aircompany = new Res_AirCompany                                {                                    CnName = hsEmpty,                                    EnName = hsEmpty,                                    ShortCode = hsEmpty,                                };                            }                            //从成都天府国际机场搭乘四川航空公司3U3961飞往东京                            trip += $"从{start_Object.AirPort}搭乘{aircompany.CnName} {flightcode} 飞往 {end_Object.City};\r\n({start_Object.AirPort}/{end_Object.AirPort}  机型:{airModel}    飞行时间{flightTime});\r\n";                            isTrade = Convert.ToBoolean(item["isTransitShipment"]);                            if (isTrade)                            {                                trip += $"抵达{end_Object.AirPort}{item["EndBuilding"].ToString().Trim()}航站楼(中转 行李直达)\r\n";                            }                            else                            {                                trip += "\r\n"; //$"抵达{end_Object.AirPort}{item["EndBuilding"].ToString().Trim()}航站楼,办理入境手续,之后前往提取行李\r\n";                            }                        }                        chiarr.Add(new Grp_ApprovalTravelDetails                        {                            Time = takeOffTime.ToString("HH:mm") + "-" + fallToTime.ToString("HH:mm"),                            CreateTime = DateTime.Now,                            CreateUserId = dto.Userid,                            ParentId = 0,                            Details = trip                        });                        var threeCodeList = _threeCodeRepository.QueryThreeCodeArray(threeCodeStr);                        var last = threeCodeStr.Last();                        foreach (var item in threeCodeStr)                        {                            cityPath += (threeCodeList.Keys.Contains(item) ? threeCodeList[item].City : "【未知三字码】") + "-";                            if (item.Equals(last))                            {                                stay = threeCodeList.Keys.Contains(item) ? threeCodeList[item].City : "【未知三字码】";                            }                        }                        cityPath = cityPath.Trim('-');                    }                    string week = Day[Convert.ToInt32(NewData.DayOfWeek.ToString("d"))].ToString();                    Grp_ApprovalTravel appro = new Grp_ApprovalTravel();                    appro.Date = "第" + intToString(i + 1) + "天 " + NewData.Month + "月" + NewData.Day + "日(" + week + ") " + cityPath + " 宿:" + stay;                    appro.Diid = dto.Diid;                    var thisId = _sqlSugar.Insertable<Grp_ApprovalTravel>(appro).ExecuteReturnIdentity();                    appro.Id = thisId;                    appro.CreateUserId = dto.Userid;                    appro.CreateTime = DateTime.Now;                    foreach (var item in gwinfo)                    {                        Grp_ApprovalTravelDetails chi = new Grp_ApprovalTravelDetails();                        chi.Details = "拜访" + item.Client;                        if (!string.IsNullOrWhiteSpace(item.ReqSample))                        {                            chi.Details += "," + item.ReqSample;                        }                        chi.ParentId = thisId;                        chi.Time = item.Time;                        chiarr.Add(chi);                    }                    if (chiarr.Count < 5)                    {                        for (int j = chiarr.Count; j < 5; j++)                        {                            chiarr.Add(new                                 Grp_ApprovalTravelDetails());                        }                    }                    resultArr.Add(new                    {                        appro.Id,                        appro.Date,                        appro.Diid,                        chiList = chiarr.Select(x1 => new                        {                            timeInterval = x1.Time == null ? new string[1] : x1.Time.Split('-'),                            x1.Details,                            x1.ParentId,                            x1.Id                        })                    });                }                _sqlSugar.CommitTran();                jw = JsonView(true, "生成成功!", resultArr);            }            catch (Exception ex)            {                jw.Code = 400;                jw.Msg = "生成失败!" + ex.Message;            }            return Ok(jw);        }        /// <summary>        /// 报批行程word导出        /// </summary>        /// <param name="dto"></param>        /// <returns></returns>        [HttpPost]        public IActionResult ExportApprovalJourneyWord(ExportApprovalJourneyWord dto)        {            var jw = JsonView(false);            var group = _sqlSugar.Queryable<Grp_DelegationInfo>().First(x => x.Id == dto.Diid && x.IsDel == 0);            if (group == null)            {                jw.Msg = "暂无该团组!";                return Ok(jw);            }            //模板路径            string tempPath = (AppSettingsHelper.Get("WordBasePath") + "Template/公务行程导出模板.docx");  //"C:\\Server\\File\\OA2023\\Office\\Word\\Template/公务行程导出模板.docx"            //载入模板            Document doc = new Document(tempPath);            NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true);            //获取所填表格的序数            Aspose.Words.Tables.Table tableOne = allTables[0] as Aspose.Words.Tables.Table;            Aspose.Words.Tables.Row titleRowClone = null;            Aspose.Words.Tables.Row CenterRowClone = null;            int index = 0;            int indexChi = 0;            int SetIndex = 0;            var ApprovalTravelArr = _sqlSugar.Queryable<Grp_ApprovalTravel>().Where(x => x.IsDel == 0 && x.Diid == dto.Diid).ToList();            //获取数据,放到datatable            foreach (var item in ApprovalTravelArr)            {                if (index > 0)                {                    titleRowClone = (Aspose.Words.Tables.Row)tableOne.Rows[0].Clone(true);                    tableOne.AppendChild(titleRowClone);                }                var textTime = item.Date;                var ChiRep = _sqlSugar.Queryable<Grp_ApprovalTravelDetails>().Where(x => x.IsDel == 0 && x.ParentId == item.Id).ToList();                SetCells(tableOne, doc, SetIndex, 0, textTime);                SetIndex++;                if (ChiRep.Count > 0)                {                    foreach (var itemChi in ChiRep)                    {                        var txtTime = itemChi.Time;                        var txtDetail = itemChi.Details;                        if (indexChi > 0)                        {                            CenterRowClone = (Aspose.Words.Tables.Row)tableOne.Rows[1].Clone(true);                            tableOne.AppendChild(CenterRowClone);                        }                        if (string.IsNullOrEmpty(txtTime) && string.IsNullOrEmpty(txtDetail))                        {                            SetCells(tableOne, doc, SetIndex, 0, "");                            SetCells(tableOne, doc, SetIndex, 1, "");                            indexChi++;                            SetIndex++;                            break;                        }                        SetCells(tableOne, doc, SetIndex, 0, txtTime);                        SetCells(tableOne, doc, SetIndex, 1, txtDetail);                        indexChi++;                        SetIndex++;                    }                }                else                {                    if (indexChi > 0)                    {                        CenterRowClone = (Aspose.Words.Tables.Row)tableOne.Rows[1].Clone(true);                        tableOne.AppendChild(CenterRowClone);                    }                    SetCells(tableOne, doc, SetIndex, 0, "");                    SetCells(tableOne, doc, SetIndex, 1, "");                    indexChi++;                    SetIndex++;                }                index++;            }            string strFileName = "/Travel/ExportApprovalJourneyWord/" + group.TeamName + "商邀出访日程.doc";            doc.Save(AppSettingsHelper.Get("WordBasePath") + strFileName);  //"C:\\Server\\File\\OA2023\\Office\\Word" + strFileName            jw.Data = AppSettingsHelper.Get("WordBaseUrl") + AppSettingsHelper.Get("WordFtpPath") + strFileName;  //"C:\\Server\\File\\OA2023\\Office\\Word" + strFileName            jw.Code = 200;            jw.Msg = "";            return Ok(jw);        }        private string intToString(int numberVal)        {            string numberval = numberVal.ToString();            Dictionary<char, string> Number = new Dictionary<char, string>();            Number.Add('1', "一");            Number.Add('2', "二");            Number.Add('3', "三");            Number.Add('4', "四");            Number.Add('5', "五");            Number.Add('6', "六");            Number.Add('7', "七");            Number.Add('8', "八");            Number.Add('9', "九");            string stringNumberVal = string.Empty;            for (int i = 0; i < numberval.Length; i++)            {                if (i == 0)                {                    stringNumberVal += Number[numberval[i]];                }                else if (i >= 1)                {                    if (numberval[i] == '0')                    {                        stringNumberVal = "十";                    }                    else                    {                        stringNumberVal += "十" + Number[numberval[i]];                    }                }            }            return stringNumberVal;        }        private void SetCells(Aspose.Words.Tables.Table table, Document doc, int rows, int cells, string val)        {            //获取table中的某个单元格,从0开始            Cell lshCell = table.Rows[rows].Cells[cells];            //将单元格中段落移除            foreach (Node item in lshCell.Paragraphs)            {                lshCell.Paragraphs.Remove(item);            }            if (val.Contains("\r\n"))            {                var spArr = val.Split("\r\n").Where(x => !string.IsNullOrWhiteSpace(x));                foreach (var item in spArr)                {                    //新建一个段落                    Paragraph p = new Paragraph(doc);                    var r = new Run(doc, item);                    //把设置的值赋给之前新建的段落                    p.AppendChild(r);                    //将此段落加到单元格内                    lshCell.AppendChild(p);                }            }            else            {                //新建一个段落                Paragraph p = new Paragraph(doc);                var r = new Run(doc, val);                //把设置的值赋给之前新建的段落                p.AppendChild(r);                //将此段落加到单元格内                lshCell.AppendChild(p);            }        }        [HttpPost]        public async Task<IActionResult> ServerHttp(string paramStr)        {            paramStr = paramStr.TrimEnd('\'');            paramStr = paramStr.TrimStart('\'');            JsonView jw = JsonView(false);            JObject param = JObject.Parse(paramStr);            if (!param.ContainsKey("url"))            {                jw.Msg = "url null";                return Ok(jw);            }            string url = param["url"]!.ToString();            var methon = "get";            Dictionary<string, string> bodyValues = null;            Dictionary<string, string> headValues = null;            if (param.ContainsKey("methon"))            {                methon = param["methon"]!.ToString();            }            if (param.ContainsKey("header"))            {                var header = param["header"]!.ToString();                JObject headerJobject = JObject.Parse(header);                headValues = new Dictionary<string, string>();                foreach (JProperty item in headerJobject.Properties())                {                    var value = item.Value.ToString();                    var head = item.Path;                    headValues.Add(head, value);                }            }            if (param.ContainsKey("body"))            {                var body = param["body"]!.ToString();                bodyValues = new Dictionary<string, string>();                JObject bodyJobject = JObject.Parse(body);                foreach (JProperty item in bodyJobject.Properties())                {                    var value = item.Value.ToString();                    var head = item.Path;                    bodyValues.Add(head, value);                }            }            HttpClient client = new HttpClient();            string responseString = string.Empty;            if (param.ContainsKey("isJson"))            {            }            if (headValues != null)            {                foreach (var item in headValues.Keys)                {                    client.DefaultRequestHeaders.Add(item, headValues[item]);                }            }            try            {                if (methon == "get")                {                    responseString = await client.GetStringAsync(url);                }                else if (methon == "post")                {                    if (bodyValues == null)                    {                        jw.Msg = "methon post body null";                        return Ok(jw);                    }                    // 数据转化为 key=val 格式                    var content = new FormUrlEncodedContent(bodyValues);                    var response = await client.PostAsync(url, content);                    // 获取数据                    responseString = await response.Content.ReadAsStringAsync();                }                else                {                    jw.Msg = "methon error";                }                jw = JsonView(true, "success", responseString);            }            catch (Exception ex)            {                jw.Msg = "error " + ex.Message;                jw.Data = ex.StackTrace;            }            finally            {                client.Dispose();            }            return Ok(jw);        }        #endregion        //        /// <summary>        //        ///         //        /// </summary>        //        /// <param name="_dto"></param>        //        /// <returns></returns>        //        [HttpPost]        //        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        //        public async Task<IActionResult> Test_DataChange(PostTourClientListDownloadFile _dto)        //        {        //            _airTicketResRep.ChangeDataBase(DBEnum.OA2014DB);        //            string sql = string.Format(@" Select * From Visa With(Nolock) ");        //            List<OA2014_Visa> list_visa = _airTicketResRep._sqlSugar.SqlQueryable<OA2014_Visa>(sql).ToList();        //            _airTicketResRep.ChangeDataBase(DBEnum.OA2023DB);        //            Dictionary<string, int> dic_psg = new Dictionary<string, int>();        //            dic_psg.Add("客人", 974);        //            dic_psg.Add("司机", 975);        //            dic_psg.Add("导游", 976);        //            dic_psg.Add("公司内部人员", 977);        //            dic_psg.Add("司机/导游/公司内部人员", 978);        //            foreach (var item in list_visa)        //            {        //                Grp_VisaInfo temp = new Grp_VisaInfo();        //                temp.Id = item.Id;        //                temp.DIId = item.DIId;        //                temp.VisaClient = item.VisaClient;        //                temp.VisaPrice = Convert.ToDecimal(item.VisaPrice);        //                temp.VisaCurrency = item.VisaCurrency;        //                temp.IsThird = item.IsThird;        //                if (dic_psg.ContainsKey(item.PassengerType))        //                {        //                    temp.PassengerType = dic_psg[item.PassengerType];        //                }        //                else {        //                    temp.PassengerType = -1;        //                }        //                temp.VisaNumber = item.VisaNumber;        //                temp.VisaFreeNumber = item.VisaFreeNumber;        //                temp.CreateUserId = item.Operators;        //                DateTime dt_ct;        //                bool b_ct = DateTime.TryParse(item.OperatorsDate, out dt_ct);        //                if (b_ct)        //                {        //                    temp.CreateTime = dt_ct;        //                }        //                else        //                {        //                    temp.CreateTime = DateTime.Now;        //                }        //                temp.DeleteTime = "";        //                temp.DeleteUserId = 0;        //                temp.Remark = item.Remark;        //                if (string.IsNullOrEmpty(temp.Remark)) {        //                    temp.Remark = "";        //                }        //                temp.IsDel = item.IsDel;        //                temp.VisaDescription = item.VisaAttachment;        //                string sqlInsert = string.Format(@" INSERT INTO [dbo].[Grp_VisaInfo]        //([Id]        //           ,[DIId]        //           ,[VisaClient]        //           ,[VisaPrice]        //           ,[VisaCurrency]        //           ,[IsThird]        //           ,[PassengerType]        //           ,[VisaNumber]        //           ,[VisaFreeNumber]        //           ,[CreateUserId]        //           ,[CreateTime]        //           ,[DeleteTime]        //           ,[DeleteUserId]        //           ,[Remark]        //           ,[IsDel]        //           ,[visaDescription])        //     VALUES        //           ({0},{1},'{2}',{3},{4}        //,{5},{6},{7},{8},{9}        //,'{10}','{11}',{12},'{13}',{14},'{15}') ",temp.Id,temp.DIId,temp.VisaClient,temp.VisaPrice,temp.VisaCurrency,        //temp.IsThird,temp.PassengerType,temp.VisaNumber,temp.VisaNumber,temp.CreateUserId,        //temp.CreateTime, temp.DeleteTime, temp.DeleteUserId, temp.Remark,temp.IsDel,temp.VisaDescription        //);        //               await _airTicketResRep.ExecuteCommandAsync(sqlInsert);        //            }        //            return Ok(JsonView(true, "操作成功!"));        //        }        /// <summary>        /// 123132123        /// </summary>        /// <param name="_dto"></param>        /// <returns></returns>        [HttpPost]        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]        public async Task<IActionResult> Test_DataChange(PostTourClientListDownloadFile _dto)        {            _airTicketResRep.ChangeDataBase(DBEnum.OA2014DB);            string sql = string.Format(@" Select * From grouopExceed where id > 20 And id not in (26,27) ");            List<OA2014_grouopExceed> list_visa = _airTicketResRep._sqlSugar.SqlQueryable<OA2014_grouopExceed>(sql).ToList();            _airTicketResRep.ChangeDataBase(DBEnum.OA2023DB);            Dictionary<int, int> dicDetail = new Dictionary<int, int>();            dicDetail.Add(789, 1034);            dicDetail.Add(790, 1035);            dicDetail.Add(791, 1036);            dicDetail.Add(792, 1037);            dicDetail.Add(793, 1038);            dicDetail.Add(794, 1039);            dicDetail.Add(795, 1040);            dicDetail.Add(796, 1041);            dicDetail.Add(797, 1042);            dicDetail.Add(798, 1043);            dicDetail.Add(801, 1044);            dicDetail.Add(802, 1045);            dicDetail.Add(803, 1046);            Dictionary<int, int> dic = new Dictionary<int, int>();            dic.Add(806, 1027);            dic.Add(807, 1028);            dic.Add(808, 1029);            dic.Add(809, 1030);            dic.Add(810, 1031);            dic.Add(811, 1032);            dic.Add(812, 1033);            foreach (var item in list_visa)            {                Fin_GroupExtraCost temp = new Fin_GroupExtraCost();                temp.Coefficient = item.coefficient;                DateTime dtCrt;                bool b1 = DateTime.TryParse(item.OperatorsDate, out dtCrt);                if (b1)                {                    temp.CreateTime = dtCrt;                }                else                {                    temp.CreateTime = DateTime.Now;                }                temp.CreateUserId = item.Operators;                temp.DeleteTime = "";                temp.DeleteUserId = 0;                temp.DiId = int.Parse(item.DIID);                temp.FilePath = item.FilePath;                temp.IsDel = item.IsDel;                temp.Price = item.Price;                temp.PriceCount = 1;                temp.PriceCurrency = item.Currency;                int detailId = 0;                if (dicDetail.ContainsKey(item.PriceTypeDetail))                {                    detailId = dicDetail[item.PriceTypeDetail];                }                temp.PriceDetailType = detailId;                temp.PriceDt = DateTime.Now;                temp.PriceName = item.PriceName;                temp.PriceSum = item.Price;                int tid = 0;                if (dic.ContainsKey(item.PriceType))                {                    tid = dic[item.PriceType];                }                temp.PriceType = tid;                temp.Remark = item.Remark;                await _airTicketResRep.AddAsync<Fin_GroupExtraCost>(temp);            }            return Ok(JsonView(true, "操作成功!"));        }    }}
 |