TWarehouseBillsServiceImpl.java 428 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388
  1. package com.ruoyi.warehouseBusiness.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.JSONArray;
  5. import com.alibaba.fastjson.JSONObject;
  6. import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  7. import com.ruoyi.approvalFlow.domain.AuditItems;
  8. import com.ruoyi.approvalFlow.mapper.AuditItemsMapper;
  9. import com.ruoyi.approvalFlow.mapper.AuditItemsUsersMapper;
  10. import com.ruoyi.approvalFlow.service.impl.AuditItemsServiceImpl;
  11. import com.ruoyi.basicData.domain.*;
  12. import com.ruoyi.basicData.mapper.*;
  13. import com.ruoyi.basicData.service.impl.TWarehouseServiceImpl;
  14. import com.ruoyi.common.config.RuoYiConfig;
  15. import com.ruoyi.common.core.domain.AjaxResult;
  16. import com.ruoyi.common.core.domain.entity.SysDept;
  17. import com.ruoyi.common.core.domain.entity.SysDictData;
  18. import com.ruoyi.common.core.domain.entity.SysUser;
  19. import com.ruoyi.common.core.domain.entity.TWarehouse;
  20. import com.ruoyi.common.core.domain.model.LoginUser;
  21. import com.ruoyi.common.exception.BaseException;
  22. import com.ruoyi.common.exception.WarehouseException;
  23. import com.ruoyi.common.utils.DateUtils;
  24. import com.ruoyi.common.utils.DictUtils;
  25. import com.ruoyi.common.utils.SecurityUtils;
  26. import com.ruoyi.common.utils.StringUtils;
  27. import com.ruoyi.common.utils.ip.AddressUtils;
  28. import com.ruoyi.common.utils.poi.DrawExcel;
  29. import com.ruoyi.common.utils.poi.ExcelUtils;
  30. import com.ruoyi.finance.domain.TFeeDo;
  31. import com.ruoyi.finance.mapper.TFeeDoMapper;
  32. import com.ruoyi.quotation.domain.TSeaprice;
  33. import com.ruoyi.quotation.mapper.TSeapriceMapper;
  34. import com.ruoyi.reportManagement.domain.TWareHouseItemsExcel;
  35. import com.ruoyi.reportManagement.domain.TWhgenleg;
  36. import com.ruoyi.reportManagement.mapper.TWhgenlegMapper;
  37. import com.ruoyi.shipping.domain.*;
  38. import com.ruoyi.shipping.excel.DeriveInventoryExcel;
  39. import com.ruoyi.shipping.excel.SingleVoyageByShipExcel;
  40. import com.ruoyi.shipping.excel.TWarehousebillsCntritemsExcel;
  41. import com.ruoyi.shipping.mapper.*;
  42. import com.ruoyi.system.domain.SysCheckCode;
  43. import com.ruoyi.system.domain.SysConfig;
  44. import com.ruoyi.system.mapper.SysConfigMapper;
  45. import com.ruoyi.system.mapper.SysDeptMapper;
  46. import com.ruoyi.system.mapper.SysDictDataMapper;
  47. import com.ruoyi.system.mapper.SysUserMapper;
  48. import com.ruoyi.system.service.impl.SysConfigServiceImpl;
  49. import com.ruoyi.warehouseBusiness.component.CalculationWarehouseService;
  50. import com.ruoyi.warehouseBusiness.component.WarehouseBillsfilterService;
  51. import com.ruoyi.warehouseBusiness.component.impl.QueryWhgenlegServiceImpl;
  52. import com.ruoyi.warehouseBusiness.domain.*;
  53. import com.ruoyi.warehouseBusiness.domain.dto.CalculateStorageFeesDTO;
  54. import com.ruoyi.warehouseBusiness.domain.dto.WarehousebillsDTO;
  55. import com.ruoyi.warehouseBusiness.domain.enums.FeesTypeEnum;
  56. import com.ruoyi.warehouseBusiness.domain.enums.WarehouseActIdEnum;
  57. import com.ruoyi.warehouseBusiness.domain.enums.WarehouseTypeEnum;
  58. import com.ruoyi.warehouseBusiness.domain.vo.AppWarehouseInfoVO;
  59. import com.ruoyi.warehouseBusiness.domain.vo.CalculateStorageFeesInfoVO;
  60. import com.ruoyi.warehouseBusiness.domain.vo.StorageFeeCalculationResultVO;
  61. import com.ruoyi.warehouseBusiness.domain.vo.WarehouseBillsVO;
  62. import com.ruoyi.warehouseBusiness.excel.*;
  63. import com.ruoyi.warehouseBusiness.mapper.*;
  64. import com.ruoyi.warehouseBusiness.service.ITWarehouseBillsService;
  65. import lombok.AllArgsConstructor;
  66. import org.apache.poi.hssf.usermodel.*;
  67. import org.apache.poi.ss.formula.functions.T;
  68. import org.apache.poi.ss.usermodel.*;
  69. import org.apache.poi.ss.util.CellRangeAddress;
  70. import org.apache.poi.ss.util.CellReference;
  71. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  72. import org.slf4j.Logger;
  73. import org.slf4j.LoggerFactory;
  74. import org.springframework.beans.BeanUtils;
  75. import org.springframework.beans.factory.annotation.Autowired;
  76. import org.springframework.stereotype.Service;
  77. import org.springframework.transaction.annotation.Transactional;
  78. import org.springframework.transaction.interceptor.TransactionAspectSupport;
  79. import org.springframework.web.multipart.MultipartFile;
  80. import java.io.*;
  81. import java.math.BigDecimal;
  82. import java.math.BigInteger;
  83. import java.math.RoundingMode;
  84. import java.text.ParseException;
  85. import java.text.SimpleDateFormat;
  86. import java.util.*;
  87. import java.util.stream.Collectors;
  88. import static com.ruoyi.common.utils.poi.Excel.filter;
  89. import static java.util.stream.Collectors.toList;
  90. /**
  91. * 详情主表Service业务层处理
  92. *
  93. * @author ruoyi
  94. * @date 2020-12-11
  95. */
  96. @Service
  97. @AllArgsConstructor
  98. public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
  99. @Autowired
  100. private TFeesMapper tFeesMapper;
  101. @Autowired
  102. private TFeeDoMapper tFeeDoMapper;
  103. @Autowired
  104. private TCntrMapper tCntrMapper;
  105. @Autowired
  106. private TGoodsMapper tGoodsMapper;
  107. @Autowired
  108. private TCorpsMapper tCorpsMapper;
  109. @Autowired
  110. private TCustomerContactMapper tCustomerContactMapper;
  111. @Autowired
  112. private SysConfigMapper configMapper;
  113. @Autowired
  114. private TVoyageMapper tVoyageMapper;
  115. @Autowired
  116. private SysUserMapper sysUserMapper;
  117. @Autowired
  118. private SysDeptMapper sysDeptMapper;
  119. @Autowired
  120. private BillnoDelMapper billnoDelMapper;
  121. @Autowired
  122. private TWhgenlegMapper tWhgenlegMapper;
  123. @Autowired
  124. private SysConfigMapper sysConfigMapper;
  125. @Autowired
  126. private TWarehouseMapper tWarehouseMapper;
  127. @Autowired
  128. private TSeapriceMapper tSeapriceMapper;
  129. @Autowired
  130. private AuditItemsMapper auditItemsMapper;
  131. @Autowired
  132. private TEnclosureMapper tEnclosureMapper;
  133. @Autowired
  134. private SysDictDataMapper sysDictDataMapper;
  135. @Autowired
  136. private QueryWhgenlegServiceImpl queryWhgenlegService;
  137. @Autowired
  138. private CalculationWarehouseService calculationWarehouseService;
  139. @Autowired
  140. private SysConfigServiceImpl sysConfigServiceImpl;
  141. @Autowired
  142. private AuditItemsServiceImpl auditItemsService;
  143. @Autowired
  144. private TWarehouseAreaMapper tWarehouseAreaMapper;
  145. @Autowired
  146. private TWarehouseServiceImpl warehouseServiceImpl;
  147. @Autowired
  148. private TWarehouseBillsMapper tWarehouseBillsMapper;
  149. @Autowired
  150. private BillnoSerialServiceImpl billnoSerialServiceImpl;
  151. @Autowired
  152. private TWarehousebillsLogMapper tWarehousebillsLogMapper;
  153. @Autowired
  154. private TWarehousebillsCntrMapper tWarehousebillsCntrMapper;
  155. @Autowired
  156. private TWarehousebillsfeesMapper tWarehousebillsfeesMapper;
  157. @Autowired
  158. private TWarehousebillsitemsMapper tWarehousebillsitemsMapper;
  159. @Autowired
  160. private TWarehouseAgreementServiceImpl tWarehouseAgreementService;
  161. @Autowired
  162. private WarehouseBillsfilterService warehouseBillsfilterService;
  163. @Autowired
  164. private TWarehousebillsCntritemsMapper tWarehousebillsCntritemsMapper;
  165. @Autowired
  166. private TTemporaryFileMapper tTemporaryFileMapper;
  167. @Autowired
  168. private TWarehousebillsLoggerMapper tWarehousebillsLoggerMapper;
  169. @Autowired
  170. private TWarehousebillsCntrLoggerMapper tWarehousebillsCntrLoggerMapper;
  171. @Autowired
  172. private TWarehousebillsCntritemsLoggerMapper tWarehousebillsCntritemsLoggerMapper;
  173. @Autowired
  174. private TWarehousebillsfeesLoggerMapper tWarehousebillsfeesLoggerMapper;
  175. @Autowired
  176. private TVesselMapper tVesselMapper;
  177. @Autowired
  178. private TCntrnoMapper tCntrnoMapper;
  179. @Autowired
  180. private TAddressMapper tAddressMapper;
  181. @Autowired
  182. private TCntrtrackingMapper tCntrtrackingMapper;
  183. @Autowired
  184. private TCtnpriceItemsMapper tCtnpriceItemsMapper;
  185. @Autowired
  186. private AuditItemsUsersMapper auditItemsUsersMapper;
  187. private static final Logger log = LoggerFactory.getLogger(AddressUtils.class);
  188. /**
  189. * 查询详情主表
  190. *
  191. * @param fId 详情主表ID
  192. * @return 详情主表
  193. */
  194. @Override
  195. public Map<String, Object> selectTWarehousebillsById(Long fId) {
  196. Map<String, Object> map = new HashMap<>();
  197. // 查询仓库主表数据
  198. TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  199. // 客户表
  200. List<Long> corpsId = new ArrayList<>();
  201. // 用户表
  202. List<SysUser> sysUserList = new ArrayList<>();
  203. // 仓库表
  204. List<TWarehouse> warehouseList = new ArrayList<>();
  205. // 商品
  206. List<Long> goodsId = new ArrayList<>();
  207. // 费用
  208. List<Long> feesId = new ArrayList<>();
  209. // 车队
  210. List<Long> fleetId = new ArrayList<>();
  211. // 库区
  212. List<Long> warehouseAreaId = new ArrayList<>();
  213. if (!StringUtils.isNull(tWarehousebills)) {
  214. if (StringUtils.isNotNull(tWarehousebills.getfTocorpid())) {
  215. corpsId.add(tWarehousebills.getfTocorpid());
  216. }
  217. if (StringUtils.isNotNull(tWarehousebills.getfLabour())) {
  218. corpsId.add(tWarehousebills.getfLabour());
  219. }
  220. if (StringUtils.isNotNull(tWarehousebills.getfFleet())) {
  221. corpsId.add(tWarehousebills.getfFleet());
  222. }
  223. corpsId.add(tWarehousebills.getfCorpid());
  224. // 查询制单人
  225. SysUser logUser = sysUserMapper.selectUserByUserName(tWarehousebills.getCreateBy());
  226. if (StringUtils.isNotNull(logUser)) {
  227. SysDept sysDept = sysDeptMapper.selectDeptById(logUser.getDeptId());
  228. sysUserList.add(logUser);
  229. map.put("dept", sysDept);
  230. }
  231. SysUser sysUser = sysUserMapper.selectUserByUserName(tWarehousebills.getfStorekeeper());
  232. if (StringUtils.isNotNull(sysUser)) {
  233. sysUserList.add(sysUser);
  234. }
  235. // 查询仓库
  236. TWarehouse tWarehouse = tWarehouseMapper.selectTWarehouseById(tWarehousebills.getfWarehouseid());
  237. if (StringUtils.isNotNull(tWarehouse)) {
  238. warehouseList.add(tWarehouse);
  239. }
  240. //查询业务员
  241. if (tWarehousebills.getfSalesmanId() != null) {
  242. SysUser user = sysUserMapper.selectUserById(tWarehousebills.getfSalesmanId());
  243. map.put("fSalesman", user);
  244. }
  245. // 查询经营单位
  246. corpsId.add(tWarehousebills.getfSbu());
  247. map.put("warehousebills", tWarehousebills);
  248. }
  249. // 查询箱型 箱量表
  250. TWarehousebillsCntr cntr = new TWarehousebillsCntr();
  251. cntr.setfPid(fId);
  252. map.put("tCntrList", tWarehousebillsCntrMapper.selectTWarehousebillsCntrList(cntr));
  253. // 查询仓库明细从表数据
  254. TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems();
  255. tWarehousebillsitems.setfPid(fId);
  256. List<Map<String, Object>> mapList = tWarehousebillsitemsMapper.selectGoodsTransferitemsList(tWarehousebillsitems);
  257. if (StringUtils.isNotEmpty(mapList)) {
  258. for (Map<String, Object> wb : mapList) {
  259. /*TWhgenleg tWhgenleg = new TWhgenleg();
  260. tWhgenleg.setfCorpid(tWarehousebills.getfCorpid());
  261. if (StringUtils.isNotNull(wb.get("fGoodsid"))) {
  262. tWhgenleg.setfGoodsid(((Integer) wb.get("fGoodsid")).longValue());
  263. }
  264. if (StringUtils.isNotNull(wb.get("fWarehouselocid"))) {
  265. tWhgenleg.setfWarehouseLocationid(((Integer) wb.get("fWarehouselocid")).longValue());
  266. }
  267. tWhgenleg.setfTrademodeid(tWarehousebills.getfTrademodeid());
  268. tWhgenleg.setfMblno(tWarehousebills.getfMblno());
  269. TWhgenleg whgenleg = tWhgenlegMapper.selectTWhgenleg(tWhgenleg);
  270. if (StringUtils.isNotNull(whgenleg)) {
  271. wb.put("fQtyblc", whgenleg.getfQtyblc());
  272. }*/
  273. if (StringUtils.isNotNull(wb.get("fGoodsid"))) {
  274. Integer fGoodsid = (Integer) wb.get("fGoodsid");
  275. goodsId.add(fGoodsid.longValue());
  276. }
  277. if (StringUtils.isNotNull(wb.get("fFleet"))) {
  278. Integer fFleetid = (Integer) wb.get("fFleet");
  279. fleetId.add(fFleetid.longValue());
  280. }
  281. if (StringUtils.isNotNull(wb.get("fWarehouselocid"))) {
  282. Long fWarehouselocid = Long.valueOf(String.valueOf(wb.get("fWarehouselocid")));
  283. if (wb.get("fTransferWarehouselocid") != null) {
  284. Long fTransferWarehouselocid = Long.valueOf(String.valueOf(wb.get("fTransferWarehouselocid")));
  285. warehouseAreaId.add(fTransferWarehouselocid);
  286. }
  287. warehouseAreaId.add(fWarehouselocid);
  288. }
  289. }
  290. map.put("warehouseBillsItem", mapList);
  291. }
  292. // 查询仓库费用明细表数据
  293. TWarehousebillsfees tWarehousebillsfees = new TWarehousebillsfees();
  294. tWarehousebillsfees.setfPid(fId);
  295. List<TWarehousebillsfees> warehousebillsfeesDr = new ArrayList<>();
  296. List<TWarehousebillsfees> warehousebillsfeesCr = new ArrayList<>();
  297. List<TWarehousebillsfees> warehousebillsfees = tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(tWarehousebillsfees);
  298. if (StringUtils.isNotEmpty(warehousebillsfees)) {
  299. for (TWarehousebillsfees fees : warehousebillsfees) {
  300. if ("C".equals(fees.getfDc())) {
  301. warehousebillsfeesCr.add(fees);
  302. } else {
  303. warehousebillsfeesDr.add(fees);
  304. }
  305. corpsId.add(fees.getfCorpid());
  306. feesId.add(fees.getfFeeid());
  307. }
  308. }
  309. // 查询附件表数据
  310. TEnclosure enclosure = new TEnclosure();
  311. enclosure.setfPid(fId);
  312. List<TEnclosure> enclosures = tEnclosureMapper.selectTEnclosureList(enclosure);
  313. if (StringUtils.isNotEmpty(enclosures)) {
  314. map.put("enclosures", enclosures);
  315. }
  316. List<TCorps> corpsList = new ArrayList<>();
  317. List<Long> corpsIdList = StringUtils.integerDeduplication(corpsId);
  318. for (Long corpId : corpsIdList) {
  319. TCorps corps = tCorpsMapper.selectTCorpsById(corpId);
  320. if (StringUtils.isNotNull(corps)) {
  321. corpsList.add(corps);
  322. }
  323. }
  324. List<TWarehouseArea> warehouseAreaList = new ArrayList<>();
  325. /*List<Long> warehouseAreaIdList = StringUtils.integerDeduplication(warehouseAreaId);
  326. for (Long warehouseArea : warehouseAreaIdList) {
  327. TWarehouseArea tWarehouseArea = tWarehouseAreaMapper.selectTWarehouseAreaById(warehouseArea);
  328. if (StringUtils.isNotNull(tWarehouseArea)) {
  329. warehouseAreaList.add(tWarehouseArea);
  330. }
  331. }*/
  332. List<TGoods> goodsList = new ArrayList<>();
  333. List<Long> goodsIdList = StringUtils.integerDeduplication(goodsId);
  334. for (Long goods : goodsIdList) {
  335. TGoods tGoods = tGoodsMapper.selectTGoodsById(goods);
  336. if (StringUtils.isNotNull(tGoods)) {
  337. goodsList.add(tGoods);
  338. }
  339. }
  340. List<TCorps> fleetList = new ArrayList<>();
  341. List<Long> fleetIdList = StringUtils.integerDeduplication(fleetId);
  342. for (Long goods : fleetIdList) {
  343. TCorps fleet = tCorpsMapper.selectTCorpsById(goods);
  344. if (StringUtils.isNotNull(fleet)) {
  345. fleetList.add(fleet);
  346. }
  347. }
  348. List<TFees> feesList = new ArrayList<>();
  349. List<Long> longList = StringUtils.integerDeduplication(feesId);
  350. for (Long fees : longList) {
  351. TFees tFees = tFeesMapper.selectTFeesById(fees);
  352. if (StringUtils.isNotNull(tFees)) {
  353. feesList.add(tFees);
  354. }
  355. }
  356. map.put("corps", corpsList);
  357. map.put("goodsList", goodsList);
  358. map.put("feesList", feesList);
  359. map.put("fleetList", fleetList);
  360. map.put("sysUser", sysUserList);
  361. map.put("warehouse", warehouseList);
  362. map.put("warehouseAreas", warehouseAreaList);
  363. map.put("warehousebillsfeesDr", warehousebillsfeesDr);
  364. map.put("warehousebillsfeesCr", warehousebillsfeesCr);
  365. map.put("dept", sysDeptMapper.selectDeptById(tWarehousebills.getfDeptid()));
  366. return map;
  367. }
  368. @Override
  369. public AjaxResult selectTWarehousebills(Long fId) {
  370. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  371. TWarehousebillsCntr tWarehousebillsCntr = new TWarehousebillsCntr();
  372. tWarehousebillsCntr.setfPid(fId);
  373. List<TWarehousebillsCntr> warehousebillsCntrs = tWarehousebillsCntrMapper.selectTWarehousebillsCntrList(tWarehousebillsCntr);
  374. TWarehousebillsCntritems tWarehousebillsCntritems = new TWarehousebillsCntritems();
  375. tWarehousebillsCntritems.setfPid(fId);
  376. List<TWarehousebillsCntritems> warehousebillsCntritems = tWarehousebillsCntritemsMapper.selectTWarehousebillsCntritemsList(tWarehousebillsCntritems);
  377. Map<String, Object> map = new HashMap<>();
  378. map.put("warehouseBills", warehouseBills);
  379. map.put("warehousebillsCntrs", warehousebillsCntrs);
  380. map.put("warehousebillsCntritems", warehousebillsCntritems);
  381. return AjaxResult.success("成功", map);
  382. }
  383. /**
  384. * 查询详情主表列表
  385. *
  386. * @param tWarehousebills 详情主表
  387. * @return 详情主表
  388. */
  389. @Override
  390. public List<Map<String, Object>> selectWarehouseBusinessList(TWarehouseBills tWarehousebills) {
  391. if (tWarehousebills.getfBilltype().equals(WarehouseTypeEnum.JSCCF.getType())) {
  392. List<Map<String, Object>> mapList = tWarehouseBillsMapper.selecStorageFeeList(tWarehousebills);
  393. if (CollectionUtils.isNotEmpty(mapList)) {
  394. mapList.forEach(li -> {
  395. li.put("fBillstatus", WarehouseTypeEnum.fromTypeAndBusinessType(li.get("fBillstatus").toString(), "storageStatus").getName());
  396. });
  397. }
  398. return mapList;
  399. } else if (tWarehousebills.getfBilltype().equals(WarehouseTypeEnum.HQZY.getType())) {
  400. return tWarehouseBillsMapper.selectWarehouseBusinessList1(tWarehousebills);
  401. } else {
  402. List<Map<String, Object>> billsList = tWarehouseBillsMapper.selectWarehouseBusinessList(tWarehousebills);
  403. for (Map<String, Object> billsMap : billsList) {
  404. // 查询箱型、箱量表
  405. TWarehousebillsCntr cntr = new TWarehousebillsCntr();
  406. cntr.setfPid(Long.parseLong(billsMap.get("fId").toString()));
  407. List<TWarehousebillsCntr> cntrList = tWarehousebillsCntrMapper.selectTWarehousebillsCntrList(cntr);
  408. // 创建map统计箱型箱量
  409. Map<String, Long> countMap = new HashMap<>();
  410. for (TWarehousebillsCntr temp : cntrList) {
  411. String cntrName = temp.getCntrName();
  412. Long fCntrcount = temp.getfCntrcount();
  413. if (StringUtils.isNotNull(cntrName) && StringUtils.isNotNull(fCntrcount)) {
  414. if (countMap.containsKey(cntrName)) {
  415. countMap.put(cntrName, countMap.get(cntrName) + fCntrcount);
  416. } else {
  417. countMap.put(cntrName, fCntrcount);
  418. }
  419. }
  420. }
  421. // 组装返回
  422. String fCntval = "";
  423. if (countMap.size() > 0) {
  424. StringBuilder sb = new StringBuilder();
  425. for (String key : countMap.keySet()) {
  426. sb.append(key).append("×").append(countMap.get(key)).append(",");
  427. }
  428. fCntval = sb.deleteCharAt(sb.length() - 1).toString();
  429. }
  430. billsMap.put("fCntval", fCntval);
  431. }
  432. return billsList;
  433. }
  434. }
  435. /**
  436. * 查询详情主表列表
  437. *
  438. * @param tWarehousebills 详情主表
  439. * @return 详情主表
  440. */
  441. @Override
  442. public List<Map<String, Object>> getWarehouseBusinessList(TWarehouseBills tWarehousebills) {
  443. List<Map<String, Object>> list = tWarehouseBillsMapper.selectWarehouseBusinessList(tWarehousebills);
  444. list.forEach(map -> {
  445. map.put("fBilltype", "其他账务");
  446. if (map.get("fVslid") != null) {
  447. map.put("shipsName", tVesselMapper.selectTVesselById(((Integer) map.get("fVslid")).longValue()).getfName());
  448. }
  449. if (map.get("fVoyid") != null) {
  450. map.put("voyage", tVoyageMapper.selectTVoyageById(((Integer) map.get("fVoyid")).longValue()).getfNo());
  451. }
  452. });
  453. return list;
  454. }
  455. /**
  456. * 查询导出所需主表列表
  457. *
  458. * @param tWarehousebills 详情主表
  459. * @return 详情主表
  460. */
  461. @Override
  462. public List<TWarehouseBills> selectTWarehousebillsList(TWarehouseBills tWarehousebills) {
  463. return tWarehouseBillsMapper.selectTWarehousebillsList(tWarehousebills);
  464. }
  465. /**
  466. * 根据条件查询总账是否存在
  467. *
  468. * @param warehouseBills 仓库主表
  469. * @param warehousebillsitems 仓库明细表
  470. * @param ifCntrno 是否判断箱号
  471. * @return 库存总账
  472. */
  473. public TWhgenleg queryTWhgenleg(TWarehouseBills warehouseBills, TWarehousebillsitems warehousebillsitems, String ifCntrno) {
  474. // 货转时如果调出操作是10-1且计费日期10-1那么调入的时候也要判断计费日期10-1业务日期10-1,调入之后吧id赋值给费用明细新加字段中
  475. // 调拨同理
  476. TWhgenleg tWhgenleg = new TWhgenleg();
  477. // 客户
  478. tWhgenleg.setfCorpid(warehouseBills.getfCorpid());
  479. // 提单号
  480. if (WarehouseTypeEnum.HQZY.getType().equals(warehouseBills.getfBilltype()) ||
  481. WarehouseTypeEnum.CKDB.getType().equals(warehouseBills.getfBilltype()) ||
  482. WarehouseTypeEnum.HWTG.getType().equals(warehouseBills.getfBilltype()) ||
  483. WarehouseTypeEnum.SJCK.getType().equals(warehouseBills.getfBilltype())) {
  484. tWhgenleg.setfMblno(warehousebillsitems.getfMblno());
  485. } else {
  486. tWhgenleg.setfMblno(warehouseBills.getfMblno());
  487. }
  488. // 业务日期
  489. if (WarehouseTypeEnum.CKDB.getType().equals(warehouseBills.getfBilltype()) ||
  490. WarehouseTypeEnum.HWTG.getType().equals(warehouseBills.getfBilltype())) {
  491. // 转换日期最小值
  492. tWhgenleg.setfBsdate(DateUtils.dateConversionMin(warehousebillsitems.getfBsdate()));
  493. } else {
  494. tWhgenleg.setfBsdate(warehousebillsitems.getfOriginalbilldate());
  495. }
  496. // 业务类型
  497. tWhgenleg.setfBusinessType(warehousebillsitems.getfBusinessType());
  498. // 业务类型详情
  499. tWhgenleg.setfMarks(warehousebillsitems.getfMarks());
  500. if ("1".equals(ifCntrno)) {
  501. tWhgenleg.setfCntrno(warehousebillsitems.getfCntrno());
  502. }
  503. // 库区
  504. tWhgenleg.setfWarehouseLocationid(warehousebillsitems.getfWarehouselocid());
  505. // 货物品名
  506. tWhgenleg.setfGoodsid(warehousebillsitems.getfGoodsid());
  507. // 贸易方式
  508. tWhgenleg.setfTrademodeid(warehouseBills.getfTrademodeid());
  509. return tWhgenlegMapper.selectTWhgenleg(tWhgenleg);
  510. }
  511. /**
  512. * 新增库存总账
  513. *
  514. * @param warehouseBills 仓库主表
  515. * @param warehousebillsitems 仓库明细表
  516. * @return 结果
  517. */
  518. public Long instalTWhgenleg(TWarehouseBills warehouseBills, TWarehousebillsitems warehousebillsitems) {
  519. TWhgenleg tWhgenleg = new TWhgenleg();
  520. if (WarehouseTypeEnum.SJRK.getType().equals(warehouseBills.getfBilltype())) {
  521. tWhgenleg.setfOriginalbilldate(warehousebillsitems.getfBsdate());
  522. if (StringUtils.isNotEmpty(warehouseBills.getfCustomno())) {
  523. tWhgenleg.setfCustomno(warehouseBills.getfCustomno());
  524. }
  525. if (StringUtils.isNotEmpty(warehouseBills.getRemark())) {
  526. tWhgenleg.setRemark(warehouseBills.getRemark());
  527. }
  528. if (StringUtils.isNotEmpty(warehouseBills.getfShipper())) {
  529. tWhgenleg.setfShipper(warehouseBills.getfShipper());
  530. }
  531. }
  532. if (WarehouseTypeEnum.HQZY.getType().equals(warehouseBills.getfBilltype()) || WarehouseTypeEnum.CKDB.getType().equals(warehouseBills.getfBilltype()) ||
  533. WarehouseTypeEnum.HWTG.getType().equals(warehouseBills.getfBilltype())) {
  534. tWhgenleg.setfOriginalbilldate(warehousebillsitems.getfOriginalbilldate());
  535. if (WarehouseTypeEnum.CKDB.getType().equals(warehouseBills.getfBilltype()) || WarehouseTypeEnum.HWTG.getType().equals(warehouseBills.getfBilltype())) {
  536. tWhgenleg.setfCorpid(warehouseBills.getfCorpid());
  537. } else {
  538. // 客户
  539. tWhgenleg.setfCorpid(warehouseBills.getfTocorpid());
  540. }
  541. // 提单号
  542. tWhgenleg.setfMblno(warehousebillsitems.getfMblno());
  543. // 原始单号
  544. tWhgenleg.setfOriginalbillno(warehousebillsitems.getfMblno());
  545. } else {
  546. // 客户
  547. tWhgenleg.setfCorpid(warehouseBills.getfCorpid());
  548. // 提单号
  549. tWhgenleg.setfMblno(warehouseBills.getfMblno());
  550. // 原始单号
  551. tWhgenleg.setfOriginalbillno(warehouseBills.getfMblno());
  552. }
  553. // 库内箱号
  554. if (StringUtils.isNotEmpty(warehousebillsitems.getfLocalcntrno())) {
  555. tWhgenleg.setfLocalcntrno(warehousebillsitems.getfLocalcntrno());
  556. }
  557. if (WarehouseTypeEnum.HQZY.getType().equals(warehouseBills.getfBilltype()) || WarehouseTypeEnum.CKDB.getType().equals(warehouseBills.getfBilltype()) ||
  558. WarehouseTypeEnum.HWTG.getType().equals(warehouseBills.getfBilltype())) {
  559. // 仓储计费日期
  560. tWhgenleg.setfChargedate(warehousebillsitems.getfBsdate());
  561. } else {
  562. // 仓储计费日期
  563. tWhgenleg.setfChargedate(warehousebillsitems.getfChargedate());
  564. }
  565. // 业务日期
  566. tWhgenleg.setfBsdate(warehousebillsitems.getfBsdate());
  567. // 明细类型
  568. tWhgenleg.setfBusinessType(warehousebillsitems.getfBusinessType());
  569. // 仓库
  570. tWhgenleg.setfWarehouseid(warehouseBills.getfWarehouseid());
  571. // 库区
  572. if (WarehouseTypeEnum.CKDB.getType().equals(warehouseBills.getfBilltype()) || WarehouseTypeEnum.HWTG.getType().equals(warehouseBills.getfBilltype())) {
  573. tWhgenleg.setfWarehouseLocationid(warehousebillsitems.getfTransferWarehouselocid());
  574. } else {
  575. tWhgenleg.setfWarehouseLocationid(warehousebillsitems.getfWarehouselocid());
  576. }
  577. // 货物品名
  578. tWhgenleg.setfGoodsid(warehousebillsitems.getfGoodsid());
  579. // 计费方式
  580. tWhgenleg.setfBillingway(warehousebillsitems.getfBillingway());
  581. // 贸易方式
  582. if (WarehouseTypeEnum.HWTG.getType().equals(warehouseBills.getfBilltype())) {
  583. tWhgenleg.setfTrademodeid(warehouseBills.getfNewTrademodeid());
  584. } else {
  585. tWhgenleg.setfTrademodeid(warehouseBills.getfTrademodeid());
  586. }
  587. // 入库数
  588. tWhgenleg.setfQtyd(warehousebillsitems.getfQty());
  589. // 入库尺码
  590. tWhgenleg.setfVolumnd(warehousebillsitems.getfVolumn());
  591. // 唛头
  592. tWhgenleg.setfMarks(warehousebillsitems.getfMarks());
  593. // 入库毛重
  594. tWhgenleg.setfGrossweightd(warehousebillsitems.getfGrossweight());
  595. // 入库净重
  596. tWhgenleg.setfNetweightd(warehousebillsitems.getfNetweight());
  597. // 入库箱号
  598. tWhgenleg.setfCntrno(warehousebillsitems.getfCntrno());
  599. // 创建人
  600. tWhgenleg.setCreateBy(SecurityUtils.getUsername());
  601. // 创建人
  602. tWhgenleg.setCreateTime(new Date());
  603. // 状态
  604. tWhgenleg.setfStatus("T");
  605. // 结余件数
  606. tWhgenleg.setfQtyblc(warehousebillsitems.getfQty());
  607. tWhgenlegMapper.insertTWhgenleg(tWhgenleg);
  608. return tWhgenleg.getfId();
  609. }
  610. @Transactional
  611. public int updateTWhgenlegData(TWarehousebillsitems warehousebillsitems, long whgenlegId, String billtype) {
  612. Map<String, Object> map = new HashMap<>();
  613. map.put("whgenlegId", whgenlegId);
  614. map.put("billType", billtype);
  615. map.put("warehousebillsitems", warehousebillsitems);
  616. return tWhgenlegMapper.updateTWhgenlegData(map);
  617. }
  618. /**
  619. * 仓库暂存接口
  620. *
  621. * @param tWarehouseBills 仓库主表
  622. * @param tWarehousebillsfeesCr 仓库费付款用明细表
  623. * @param tWarehousebillsfeesDr 仓库费收
  624. * 款用明细表
  625. * @param tWarehousebillsitems 仓库货物明细表
  626. * @param loginUser 当前登陆人
  627. * @param billsType 判断标识
  628. * @return 结果
  629. */
  630. @Override
  631. @Transactional
  632. public AjaxResult insertTWarehousebills(String tWarehouseBills, String tWarehousebillsfeesCr, String tWarehousebillsfeesDr
  633. , String tWarehousebillsitems, String tEnclosure, LoginUser loginUser, String tCntr, String billsType) {
  634. Long fPid = null;
  635. Map<String, Object> map = new HashMap<>();
  636. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehouseBills, TWarehouseBills.class);
  637. Long timestamp = DateUtils.getTimestamp(new Date());
  638. warehouseBills.setfDateChanged(timestamp.toString() + (int) (Math.random() * 900) + 100);
  639. TWarehousebillsitems itemInFo = tWarehousebillsitemsMapper.selectItemQtyByFPid(warehouseBills.getfId());
  640. warehouseBills.setfQty(itemInFo.getfQty());
  641. warehouseBills.setfNetweight(itemInFo.getfNetweight());
  642. warehouseBills.setfGrossweight(itemInFo.getfGrossweight());
  643. if (StringUtils.isNull(warehouseBills.getfId())) {
  644. // 如果是新数据
  645. warehouseBills.setfBillstatus(2L);
  646. warehouseBills.setCreateBy(loginUser.getUser().getUserName());
  647. warehouseBills.setfBilltype(billsType);
  648. warehouseBills.setfBsdeptid(loginUser.getUser().getDeptId());
  649. warehouseBills.setfDeptid(loginUser.getUser().getDeptId());
  650. // 业务编码
  651. String billNo = billnoSerialServiceImpl.getBillNo(billsType, warehouseBills.getfBsdate());
  652. warehouseBills.setfBillno(billNo);
  653. if ("SJRK".equals(billsType) || WarehouseTypeEnum.HQZY.getType().equals(billsType)) {
  654. // 存货编码
  655. Date time = new Date();
  656. String bscorpno = billnoSerialServiceImpl.getCorpNo(warehouseBills.getfCorpid(), time);
  657. warehouseBills.setfBscorpno(bscorpno);
  658. } else {
  659. warehouseBills.setfChargedate(warehouseBills.getfBsdate());
  660. }
  661. tWarehouseBillsMapper.insertTWarehousebills(warehouseBills);
  662. fPid = warehouseBills.getfId();
  663. } else {
  664. fPid = warehouseBills.getfId();
  665. if (!"SJRK".equals(billsType) && !WarehouseTypeEnum.HQZY.getType().equals(billsType)) {
  666. warehouseBills.setfChargedate(warehouseBills.getfBsdate());
  667. }
  668. warehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  669. warehouseBills.setUpdateTime(new Date());
  670. tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(fPid);
  671. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  672. tWarehousebillsfeesMapper.deleteByFPid(fPid);
  673. tEnclosureMapper.deleteByFPid(fPid);
  674. // 删除 从表中 未打印账单的数据
  675. deleteBillsitems(fPid, tWarehousebillsitems);
  676. }
  677. // 库存明细添加
  678. if (StringUtils.isNotNull(tWarehousebillsitems) && !"[]".equals(tWarehousebillsitems)) {
  679. JSONArray warehouseJSON = JSONArray.parseArray(tWarehousebillsitems);
  680. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  681. Date mixDate = new Date();
  682. if (CollectionUtils.isNotEmpty(warehousebillsitemsList)) {
  683. Date minDate = warehousebillsitemsList.get(0).getfBsdate();
  684. for (int i = 0; i < warehousebillsitemsList.size(); i++) {
  685. Date date = warehousebillsitemsList.get(i).getfBsdate();
  686. if (minDate.after(date)) {
  687. minDate = date;
  688. }
  689. }
  690. mixDate = minDate;
  691. }
  692. for (TWarehousebillsitems wbItem : warehousebillsitemsList) {
  693. boolean warehouseStatus = "SJRK".equals(billsType) || "SJCK".equals(billsType) || WarehouseTypeEnum.CKDB.getType().equals(billsType) ||
  694. WarehouseTypeEnum.HWTG.getType().equals(billsType) || "CDZZ".equals(billsType);
  695. // 仓储计费日期
  696. wbItem.setfBilltype(billsType);
  697. if ("SJRK".equals(billsType) && warehouseBills.getfId() != null && "0".equals(warehouseBills.getfChargetype())) {
  698. if (!this.getFchargedate(fPid, wbItem.getfBsdate())) {
  699. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  700. return AjaxResult.error("入库日期不能小于最小仓储费计算日期");
  701. }
  702. }
  703. if ("SJRK".equals(billsType)) {
  704. if ("1".equals(warehouseBills.getfChargetype())) {
  705. wbItem.setfChargedate(wbItem.getfBsdate());
  706. } else if ("0".equals(warehouseBills.getfChargetype())) {
  707. Date fchargedate = tWarehousebillsitemsMapper.getFchargedate(fPid);
  708. if (fchargedate != null) {
  709. wbItem.setfChargedate(fchargedate);
  710. } else {
  711. wbItem.setfChargedate(mixDate);
  712. }
  713. }
  714. wbItem.setfBillingway(warehouseBills.getfBillingway());
  715. wbItem.setfMblno(warehouseBills.getfMblno());// 入库更新库存前执行update更新明细的提单号等于主表的提单号
  716. }
  717. if (null != wbItem.getfId()) {
  718. wbItem.setUpdateTime(wbItem.getfBsdate());
  719. wbItem.setUpdateBy(loginUser.getUser().getUserName());
  720. tWarehousebillsitemsMapper.updateTWarehousebillsitems(wbItem);
  721. } else {
  722. // 添加主表 业务单号
  723. wbItem.setfBillno(warehouseBills.getfBillno());
  724. if (!"CDZZ".equals(billsType)) {
  725. if (!warehouseStatus) {
  726. wbItem.setfBillstatus(1L);
  727. } else {
  728. wbItem.setfBillstatus(10L);
  729. }
  730. }
  731. wbItem.setfPid(fPid);
  732. wbItem.setCreateBy(loginUser.getUser().getUserName());
  733. wbItem.setCreateTime(new Date());
  734. tWarehousebillsitemsMapper.insertTWarehousebillsitems(wbItem);
  735. if (!warehouseStatus) {
  736. // 添加状态log
  737. insertTWarehousebillsLog(wbItem, 10L);
  738. }
  739. }
  740. }
  741. }
  742. // 附件添加
  743. if (StringUtils.isNotNull(tEnclosure) && !"[]".equals(tEnclosure)) {
  744. JSONArray jsonDrArray = JSONArray.parseArray(tEnclosure);
  745. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  746. for (TEnclosure enclosure : tEnclosureList) {
  747. enclosure.setfPid(fPid);
  748. enclosure.setCreateBy(loginUser.getUser().getUserName());
  749. enclosure.setCreateTime(new Date());
  750. tEnclosureMapper.insertTEnclosure(enclosure);
  751. }
  752. }
  753. // 箱型数据
  754. if (StringUtils.isNotNull(tCntr) && !"[]".equals(tCntr)) {
  755. JSONArray jsonDrArray = JSONArray.parseArray(tCntr);
  756. List<TWarehousebillsCntr> tWarehousebillsCntrs = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsCntr.class);
  757. int line = 0;
  758. for (TWarehousebillsCntr cntr : tWarehousebillsCntrs) {
  759. line++;
  760. if (StringUtils.isNull(cntr.getfCntrid()) || StringUtils.isNull(cntr.getfCntrcount()) || cntr.getfCntrcount() == 0) {
  761. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  762. return AjaxResult.error("箱型数据第" + line + "行数据缺少必填数据");
  763. }
  764. cntr.setfPid(fPid);
  765. cntr.setfGoodsid(0L);
  766. cntr.setfPackageid("0");
  767. cntr.setfCntrweight(new BigDecimal(0));
  768. cntr.setCreateBy(loginUser.getUser().getUserName());
  769. cntr.setCreateTime(new Date());
  770. tWarehousebillsCntrMapper.insertTWarehousebillsCntr(cntr);
  771. }
  772. }
  773. // 收款明细添加
  774. if (StringUtils.isNotNull(tWarehousebillsfeesDr) && !"[]".equals(tWarehousebillsfeesDr)) {
  775. JSONArray jsonDrArray = JSONArray.parseArray(tWarehousebillsfeesDr);
  776. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  777. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  778. // 检验 数量*单价=金额
  779. wbDr.setfPid(fPid);
  780. wbDr.setfDc("D");
  781. wbDr.setfBilltype(billsType);
  782. wbDr.setCreateTime(new Date());
  783. wbDr.setSrcBillNo(warehouseBills.getfBillno());
  784. wbDr.setCreateBy(loginUser.getUser().getUserName());
  785. if (warehouseBills.getfBsdate() != null) {
  786. wbDr.setfBsdate(warehouseBills.getfBsdate());
  787. }
  788. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  789. }
  790. }
  791. // 付款明细添加
  792. if (StringUtils.isNotNull(tWarehousebillsfeesCr) && !"[]".equals(tWarehousebillsfeesCr)) {
  793. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesCr);
  794. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  795. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  796. wbCr.setfPid(fPid);
  797. wbCr.setfDc("C");
  798. wbCr.setfBilltype(billsType);
  799. wbCr.setCreateTime(new Date());
  800. wbCr.setSrcBillNo(warehouseBills.getfBillno());
  801. wbCr.setCreateBy(loginUser.getUser().getUserName());
  802. if (warehouseBills.getfBsdate() != null && !"".equals(warehouseBills.getfBsdate())) {
  803. wbCr.setfBsdate(warehouseBills.getfBsdate());
  804. }
  805. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  806. }
  807. }
  808. //查询删除的仓储费收费信息
  809. List<Long> longs = tWarehousebillsfeesMapper.selectTWarehousebillsfeesSrcId(fPid);
  810. if (CollectionUtils.isNotEmpty(longs)) {
  811. tWarehousebillsitemsMapper.updatefStorageFeeDeadline(fPid, longs);
  812. } else {
  813. tWarehousebillsitemsMapper.updatefStorageFeeDeadlinefPid(fPid);
  814. }
  815. calculationWarehouseService.calculationBillStatus(warehouseBills);
  816. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  817. TWarehousebillsitems warehousebillsitems = new TWarehousebillsitems();
  818. warehousebillsitems.setfPid(fPid);
  819. map.put("warehouseBills", tWarehouseBillsMapper.selectTWarehousebillsById(warehouseBills.getfId()));
  820. map.put("warehousebillsitems", tWarehousebillsitemsMapper.selectGoodsTransferitemsList(warehousebillsitems));
  821. return AjaxResult.success("成功", map);
  822. }
  823. @Override
  824. public int insertTWarehousebills(TWarehouseBills tWarehousebills) {
  825. return tWarehouseBillsMapper.insertTWarehousebills(tWarehousebills);
  826. }
  827. /**
  828. * 凯和订单计划暂存
  829. *
  830. * @param tWarehousebills 主表信息
  831. * @param tWarehousebillsCntr 从表信息
  832. * @param billsType
  833. * @param loginUser
  834. * @return
  835. */
  836. @Override
  837. @Transactional
  838. public AjaxResult TSPlantMessage(String tWarehousebills, String tWarehousebillsCntr,
  839. String billsType, LoginUser loginUser) {
  840. Map<String, Object> map = new HashMap<>();
  841. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehousebills, TWarehouseBills.class);
  842. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsCntr);
  843. List<TWarehousebillsCntr> tWarehousebillsCntrs = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsCntr.class);
  844. if (warehouseBills.getfId() == null) {
  845. String billNo = billnoSerialServiceImpl.getBillNo("SE", warehouseBills.getfBsdate());
  846. warehouseBills.setfBillno(billNo);
  847. warehouseBills.setCreateTime(DateUtils.getNowDate());
  848. warehouseBills.setCreateBy(SecurityUtils.getUsername());
  849. warehouseBills.setfBilltype(billsType);
  850. warehouseBills.setfTypeid(1);
  851. warehouseBills.setfBillstatus(2L);
  852. warehouseBills.setfDeptid(loginUser.getUser().getDeptId());
  853. warehouseBills.setfBsdeptid(loginUser.getUser().getDeptId());
  854. int i = tWarehouseBillsMapper.insertTWarehousebills(warehouseBills);
  855. if (CollectionUtils.isNotEmpty(tWarehousebillsCntrs)) {
  856. for (TWarehousebillsCntr warehousebillsCntr : tWarehousebillsCntrs) {
  857. warehousebillsCntr.setfPid(warehouseBills.getfId());
  858. warehousebillsCntr.setCreateTime(DateUtils.getNowDate());
  859. warehousebillsCntr.setCreateBy(SecurityUtils.getUsername());
  860. int cntr = tWarehousebillsCntrMapper.insertTWarehousebillsCntr(warehousebillsCntr);
  861. }
  862. }
  863. } else {
  864. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(warehouseBills.getfId());
  865. if (!"2".equals(tWarehouseBills.getfBillstatus()) || !"3".equals(tWarehouseBills.getfBillstatus())) {
  866. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  867. return AjaxResult.error("当前数据不允许暂存");
  868. }
  869. warehouseBills.setUpdateTime(DateUtils.getNowDate());
  870. warehouseBills.setUpdateBy(SecurityUtils.getUsername());
  871. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  872. tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(warehouseBills.getfId());
  873. if (CollectionUtils.isNotEmpty(tWarehousebillsCntrs)) {
  874. for (TWarehousebillsCntr warehousebillsCntr : tWarehousebillsCntrs) {
  875. warehousebillsCntr.setfPid(warehouseBills.getfId());
  876. warehousebillsCntr.setCreateTime(DateUtils.getNowDate());
  877. warehousebillsCntr.setCreateBy(SecurityUtils.getUsername());
  878. tWarehousebillsCntrMapper.insertTWarehousebillsCntr(warehousebillsCntr);
  879. }
  880. }
  881. }
  882. map.put("warehouseBills", warehouseBills);
  883. map.put("tWarehousebillsCntrs", tWarehousebillsCntrs);
  884. return AjaxResult.success("msg", map);
  885. }
  886. /**
  887. * 凯和订单计划提交
  888. *
  889. * @param tWarehousebills 主表信息
  890. * @param tWarehousebillsCntr 从表信息
  891. * @param billsType
  892. * @param loginUser
  893. * @return
  894. */
  895. @Override
  896. @Transactional
  897. public AjaxResult submitPlantMessage(String tWarehousebills, String tWarehousebillsCntr,
  898. String billsType, LoginUser loginUser) {
  899. boolean isApprove = false;//是否开启审批流
  900. String key = "";//键
  901. long actId = 0L;//活动id
  902. Long fPid = null;
  903. Long billStatus = null;
  904. Map<String, Object> map = new HashMap<>();
  905. if ("KHDD".equals(billsType)) {
  906. actId = 410L;
  907. key = "khwarehouse.warehousebills.ApprovalFlow";
  908. }
  909. SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique(key);
  910. if (StringUtils.isNull(sysConfig)) {
  911. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  912. return AjaxResult.error("系统参数异常,未找到开启审批流参数");
  913. }
  914. if ("0".equals(sysConfig.getConfigValue())) {
  915. isApprove = true;
  916. }
  917. if (isApprove) {
  918. billStatus = 4L;
  919. } else {
  920. billStatus = 6L;
  921. }
  922. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehousebills, TWarehouseBills.class);
  923. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsCntr);
  924. List<TWarehousebillsCntr> tWarehousebillsCntrs = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsCntr.class);
  925. if (warehouseBills.getfVslid() == null) {
  926. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  927. return AjaxResult.error("船名不能为空");
  928. }
  929. if (warehouseBills.getfVoyid() == null) {
  930. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  931. return AjaxResult.error("航次不能为空");
  932. }
  933. //获取客户单位
  934. Long clientFid = tCorpsMapper.getClientFid(loginUser.getUser().getPhonenumber());
  935. if (warehouseBills.getfId() == null) {
  936. String billNo = billnoSerialServiceImpl.getBillNo("SE", DateUtils.getNowDate());
  937. warehouseBills.setfBillno(billNo);
  938. warehouseBills.setCreateTime(DateUtils.getNowDate());
  939. warehouseBills.setCreateBy(SecurityUtils.getUsername());
  940. warehouseBills.setfBilltype(billsType);
  941. warehouseBills.setfTypeid(1);
  942. warehouseBills.setfDeptid(loginUser.getUser().getDeptId());
  943. warehouseBills.setfBsdeptid(loginUser.getUser().getDeptId());
  944. warehouseBills.setfCorpid(clientFid);
  945. warehouseBills.setfContacts(loginUser.getUser().getUserName());
  946. warehouseBills.setfTel(loginUser.getUser().getPhonenumber());
  947. warehouseBills.setfBillstatus(billStatus);
  948. warehouseBills.setfTimes(1L);
  949. int i = tWarehouseBillsMapper.insertTWarehousebills(warehouseBills);
  950. if (CollectionUtils.isNotEmpty(tWarehousebillsCntrs)) {
  951. for (TWarehousebillsCntr warehousebillsCntr : tWarehousebillsCntrs) {
  952. warehousebillsCntr.setfPid(warehouseBills.getfId());
  953. warehousebillsCntr.setCreateTime(DateUtils.getNowDate());
  954. warehousebillsCntr.setCreateBy(SecurityUtils.getUsername());
  955. int cntr = tWarehousebillsCntrMapper.insertTWarehousebillsCntr(warehousebillsCntr);
  956. }
  957. }
  958. fPid = warehouseBills.getfId();
  959. } else {
  960. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(warehouseBills.getfId());
  961. if (tWarehouseBills.getfBillstatus() == 2L
  962. || tWarehouseBills.getfBillstatus() == 3L) {
  963. } else {
  964. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  965. return AjaxResult.error("当前数据不允许提交");
  966. }
  967. fPid = warehouseBills.getfId();
  968. warehouseBills.setUpdateTime(DateUtils.getNowDate());
  969. warehouseBills.setUpdateBy(SecurityUtils.getUsername());
  970. warehouseBills.setfBillstatus(billStatus);
  971. warehouseBills.setfTimes(tWarehouseBills.getfTimes() + 1);
  972. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  973. tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(warehouseBills.getfId());
  974. if (CollectionUtils.isNotEmpty(tWarehousebillsCntrs)) {
  975. for (TWarehousebillsCntr warehousebillsCntr : tWarehousebillsCntrs) {
  976. warehousebillsCntr.setfPid(warehouseBills.getfId());
  977. warehousebillsCntr.setCreateTime(DateUtils.getNowDate());
  978. warehousebillsCntr.setCreateBy(SecurityUtils.getUsername());
  979. int cntr = tWarehousebillsCntrMapper.insertTWarehousebillsCntr(warehousebillsCntr);
  980. }
  981. }
  982. }
  983. //获取海运费ID
  984. TFees tFees = tFeesMapper.selectTFeesByFName("海运费");
  985. if (tFees == null) {
  986. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  987. return AjaxResult.error("费用信息中缺少海运费请维护");
  988. }
  989. //获取计价单位ID
  990. String dictValue = sysDictDataMapper.selectDictValue("data_unitfees", "箱量");
  991. if (StringUtils.isEmpty(dictValue)) {
  992. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  993. return AjaxResult.error("计价单位中缺少箱量请维护");
  994. }
  995. //结算方式
  996. String fSrcType = sysDictDataMapper.selectDictValue("data_stltype_type", "月结");
  997. if (StringUtils.isEmpty(dictValue)) {
  998. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  999. return AjaxResult.error("结算方式中缺少月结请维护");
  1000. }
  1001. //业务类型
  1002. String fBusinessType = sysDictDataMapper.selectDictValue("data_billType", "内贸");
  1003. if (StringUtils.isEmpty(dictValue)) {
  1004. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1005. return AjaxResult.error("业务类型中缺少内贸请维护");
  1006. }
  1007. //获取航次对应的运价
  1008. List<TCtnpriceItems> tCtnpriceItems = tCtnpriceItemsMapper.selectItemMeaasge(warehouseBills.getfVoyid(), tWarehousebillsCntrs.get(0).getfCntrid());
  1009. TVoyage voyage = tVoyageMapper.selectTVoyageByFid(warehouseBills.getfVoyid());
  1010. //生成运价费用
  1011. TWarehousebillsfees wbDr = new TWarehousebillsfees();
  1012. wbDr.setfPid(warehouseBills.getfId());//主表ID
  1013. wbDr.setfCorpid(clientFid);//客户ID
  1014. wbDr.setfFeeid(tFees.getfId());//费用ID
  1015. wbDr.setfFeeunitid(Long.valueOf(dictValue));//计价单位
  1016. wbDr.setfQty(new BigDecimal(tWarehousebillsCntrs.get(0).getfCntrcount()));//数量
  1017. if (CollectionUtils.isNotEmpty(tCtnpriceItems)) {
  1018. wbDr.setfUnitprice(tCtnpriceItems.get(0).getfPrice());//单价
  1019. wbDr.setfAmount(tCtnpriceItems.get(0).getfPrice().multiply(new BigDecimal(tWarehousebillsCntrs.get(0).getfCntrcount())));//金额
  1020. } else {
  1021. wbDr.setfUnitprice(new BigDecimal(0));//单价
  1022. wbDr.setfAmount(new BigDecimal(0));//金额
  1023. }
  1024. wbDr.setfCurrency("RMB");//币别
  1025. wbDr.setfExrate(new BigDecimal(1));//汇率
  1026. wbDr.setfTaxrate(new BigDecimal(0));//税率
  1027. wbDr.setfDc("D");//收付
  1028. wbDr.setfStltypeid(Long.valueOf(fSrcType));//结算方式
  1029. wbDr.setRemark(voyage.getfNo());//备注 航次名
  1030. wbDr.setfSrcTypeId(2L);//来源订舱
  1031. wbDr.setfBilltype(billsType);
  1032. wbDr.setCreateTime(new Date());
  1033. wbDr.setSrcBillNo(warehouseBills.getfBillno());
  1034. wbDr.setCreateBy(loginUser.getUser().getUserName());
  1035. wbDr.setfBusinessType(fBusinessType);//业务类型
  1036. //wbDr.setfChargedate(warehouseBills.getfChargedate());
  1037. //wbDr.setfBillingDeadline(warehouseBills.getfChargedate());
  1038. if (warehouseBills.getfBsdate() != null && !warehouseBills.getfBsdate().equals("")) {
  1039. wbDr.setfBsdate(warehouseBills.getfBsdate());
  1040. }
  1041. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  1042. map.put("TWarehousebillsfees", wbDr);
  1043. if (isApprove) {
  1044. AuditItems auditItems = new AuditItems();
  1045. auditItems.setLevelId(0L);
  1046. auditItems.setBillId(fPid);
  1047. auditItems.setActId(actId);
  1048. auditItems.setIffinalItem("F");
  1049. auditItems.setBillNo(warehouseBills.getfBillno());
  1050. // 存储委托方(货权方)
  1051. auditItems.setRefno1(warehouseBills.getfCorpid() + "");
  1052. // 存储业务类型(业务类型)
  1053. auditItems.setRefno2(warehouseBills.getfBilltype());
  1054. // 存储提单号(提单号)
  1055. if (StringUtils.isNotEmpty(warehouseBills.getfMblno())) {
  1056. auditItems.setRefno3(warehouseBills.getfMblno());
  1057. } else {
  1058. auditItems.setRefno3(warehouseBills.getfBillno());
  1059. }
  1060. auditItems.setSendUserId(loginUser.getUser().getUserId());
  1061. auditItems.setSendName(SecurityUtils.getUsername());
  1062. auditItems.setSendTime(new Date());
  1063. auditItems.setAuditUserId(loginUser.getUser().getUserId());
  1064. auditItems.setAuditItem(new Date());
  1065. auditItems.setAuditOpTime(new Date());
  1066. auditItems.setAuditMsg("提交");
  1067. auditItems.setAuditStatus("O");
  1068. auditItems.setFidStatus("f_billstatus");
  1069. auditItems.setTimes(1L);
  1070. AjaxResult approvalFlow = auditItemsService.createApprovalFlow(auditItems);
  1071. // Long code = Long.valueOf(String.valueOf(approvalFlow.get("code"))).longValue();
  1072. String code = approvalFlow.get("code").toString();
  1073. // Long code = Long.valueOf(String.valueOf(ajaxResult.get("code"))).longValue();
  1074. if ("500".equals(code)) {
  1075. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1076. return approvalFlow;
  1077. }
  1078. }
  1079. //获取订舱单位
  1080. TCorps tCorps = tCorpsMapper.selectTCorpsById(warehouseBills.getfCorpid());
  1081. //应收费用
  1082. List<TWarehousebillsfees> fd = tWarehousebillsfeesMapper.selectFeesByPId(warehouseBills.getfId(), "D");
  1083. //应付费用
  1084. List<TWarehousebillsfees> fc = tWarehousebillsfeesMapper.selectFeesByPId(warehouseBills.getfId(), "C");
  1085. warehouseBills.setfReceivable(fd.stream().filter(ei->ei.getfAmount()!=null).map(TWarehousebillsfees::getfAmount).reduce(BigDecimal.ZERO,BigDecimal::add));
  1086. warehouseBills.setfDue(fc.stream().filter(ei->ei.getfAmount()!=null).map(TWarehousebillsfees::getfAmount).reduce(BigDecimal.ZERO,BigDecimal::add));
  1087. if (tCorps == null || tCorps.getfCname().equals("青岛凯和志诚物流有限公司")){
  1088. warehouseBills.setfCaregoStatus("2");
  1089. }else if (CollectionUtils.isNotEmpty(fd) && warehouseBills.getfReceivable().compareTo(BigDecimal.ZERO) > 0){
  1090. warehouseBills.setfCaregoStatus("1");
  1091. }else{
  1092. warehouseBills.setfCaregoStatus("0");
  1093. }
  1094. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  1095. map.put("warehouseBills", warehouseBills);
  1096. map.put("tWarehousebillsCntrs", tWarehousebillsCntrs);
  1097. return AjaxResult.success("下单成功", map);
  1098. }
  1099. /**
  1100. * 配船暂存
  1101. *
  1102. * @param tWarehousebills 主表信息
  1103. * @param tWarehousebillsCntritems 从表信息
  1104. * @param billsType
  1105. * @param loginUser
  1106. * @return
  1107. */
  1108. @Override
  1109. @Transactional
  1110. public AjaxResult TSMakingMessage(String tWarehousebills, String tWarehousebillsCntritems, String billsType, LoginUser loginUser) {
  1111. Map<String, Object> map = new HashMap<>();
  1112. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehousebills, TWarehouseBills.class);
  1113. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsCntritems);
  1114. List<TWarehousebillsCntritems> tWarehousebillsCntrs = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsCntritems.class);
  1115. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(warehouseBills.getfId());
  1116. /*if (tWarehouseBills.getfBillstatus() == 7L
  1117. || tWarehouseBills.getfBillstatus() == 6L) {
  1118. } else {
  1119. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1120. return AjaxResult.error("当前数据不允许暂存");
  1121. }*/
  1122. if (tWarehouseBills.getfBillstatus() != null && tWarehouseBills.getfBillstatus().longValue() == 6) {
  1123. warehouseBills.setfBillstatus(7L);
  1124. } else {
  1125. warehouseBills.setfBillstatus(tWarehouseBills.getfBillstatus());
  1126. }
  1127. int i = tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  1128. TWarehousebillsCntr tWarehousebillsCntr = tWarehousebillsCntrMapper.selectTWarehousebillsCntrByPId(warehouseBills.getfId());
  1129. int cntritemsfPid = tWarehousebillsCntritemsMapper.deleteTWarehousebillsCntritemsfPid(warehouseBills.getfId());
  1130. if (CollectionUtils.isNotEmpty(tWarehousebillsCntrs)) {
  1131. if (tWarehousebillsCntrs.size() > tWarehousebillsCntr.getfCntrcount()) {
  1132. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1133. return AjaxResult.error("箱信息中的箱量不能大于货物中的箱量");
  1134. }
  1135. for (TWarehousebillsCntritems warehousebillsCntritems : tWarehousebillsCntrs) {
  1136. AjaxResult ajaxResult = this.judgeBoxPile(warehousebillsCntritems, tWarehousebillsCntr.getfCntrid());
  1137. String code = ajaxResult.get("code").toString();
  1138. if ("500".equals(code)) {
  1139. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1140. return AjaxResult.success("error", ajaxResult.get("msg").toString());
  1141. }
  1142. warehousebillsCntritems.setfPid(warehouseBills.getfId());
  1143. warehousebillsCntritems.setCreateTime(DateUtils.getNowDate());
  1144. warehousebillsCntritems.setCreateBy(SecurityUtils.getUsername());
  1145. int cntr = tWarehousebillsCntritemsMapper.insertTWarehousebillsCntritems(warehousebillsCntritems);
  1146. }
  1147. } else {
  1148. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1149. return AjaxResult.error("箱信息不能为空");
  1150. }
  1151. map.put("warehouseBills", warehouseBills);
  1152. map.put("tWarehousebillsCntrs", tWarehousebillsCntrs);
  1153. return AjaxResult.success("msg", map);
  1154. }
  1155. /**
  1156. * 配船提交
  1157. *
  1158. * @param tWarehousebills 主表信息
  1159. * @param tWarehousebillsCntritems 从表信息
  1160. * @param billsType
  1161. * @param loginUser
  1162. * @return
  1163. */
  1164. @Override
  1165. @Transactional
  1166. public AjaxResult submitMakingMessage(String tWarehousebills, String tWarehousebillsCntritems, String billsType, LoginUser loginUser) {
  1167. boolean isApprove = false;//是否开启审批流
  1168. String key = "";//键
  1169. long actId = 0L;//活动id
  1170. Long fPid = null;
  1171. Map<String, Object> map = new HashMap<>();
  1172. if ("KHDD".equals(billsType)) {
  1173. actId = 420L;
  1174. key = "khwarehouse.makingCargoPlan.ApprovalFlow";
  1175. }
  1176. SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique(key);
  1177. if (StringUtils.isNull(sysConfig)) {
  1178. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1179. return AjaxResult.error("系统参数异常,未找到开启审批流参数");
  1180. }
  1181. if ("0".equals(sysConfig.getConfigValue())) {
  1182. isApprove = true;
  1183. }
  1184. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehousebills, TWarehouseBills.class);
  1185. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsCntritems);
  1186. List<TWarehousebillsCntritems> tWarehousebillsCntritemsList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsCntritems.class);
  1187. fPid = warehouseBills.getfId();
  1188. warehouseBills.setUpdateTime(DateUtils.getNowDate());
  1189. warehouseBills.setUpdateBy(SecurityUtils.getUsername());
  1190. if (isApprove) {
  1191. warehouseBills.setfBillstatus(9L);
  1192. } else {
  1193. warehouseBills.setfBillstatus(11L);
  1194. warehouseBills.setfReviewDate(new Date());
  1195. }
  1196. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(warehouseBills.getfId());
  1197. if (tWarehouseBills.getfBillstatus() == 6L
  1198. || tWarehouseBills.getfBillstatus() == 7L
  1199. || tWarehouseBills.getfBillstatus() == 8L) {
  1200. } else {
  1201. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1202. return AjaxResult.error("当前数据不允许提交");
  1203. }
  1204. warehouseBills.setfTimes(tWarehouseBills.getfTimes() + 1);
  1205. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  1206. tWarehousebillsCntritemsMapper.deleteTWarehousebillsCntritemsfPid(warehouseBills.getfId());
  1207. TWarehousebillsCntr tWarehousebillsCntr = tWarehousebillsCntrMapper.selectTWarehousebillsCntrByPId(warehouseBills.getfId());
  1208. if (CollectionUtils.isNotEmpty(tWarehousebillsCntritemsList)) {
  1209. for (TWarehousebillsCntritems warehousebillsCntritems : tWarehousebillsCntritemsList) {
  1210. AjaxResult ajaxResult = this.judgeBoxPile(warehousebillsCntritems, tWarehousebillsCntr.getfCntrid());
  1211. String code = ajaxResult.get("code").toString();
  1212. if ("500".equals(code)) {
  1213. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1214. return ajaxResult;
  1215. }
  1216. warehousebillsCntritems.setfPid(warehouseBills.getfId());
  1217. warehousebillsCntritems.setCreateTime(DateUtils.getNowDate());
  1218. warehousebillsCntritems.setCreateBy(SecurityUtils.getUsername());
  1219. int cntr = tWarehousebillsCntritemsMapper.insertTWarehousebillsCntritems(warehousebillsCntritems);
  1220. }
  1221. } else {
  1222. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1223. return AjaxResult.error("箱信息不能为空");
  1224. }
  1225. TWarehousebillsCntr warehousebillsCntr = new TWarehousebillsCntr();
  1226. warehousebillsCntr.setfPid(warehouseBills.getfId());
  1227. List<TWarehousebillsCntr> tWarehousebillsCntrs = tWarehousebillsCntrMapper.selectTWarehousebillsCntrList(warehousebillsCntr);
  1228. TVoyage tVoyage = tVoyageMapper.selectTVoyageById(warehouseBills.getfVoyid());
  1229. if (isApprove) {
  1230. AuditItems auditItems = new AuditItems();
  1231. auditItems.setLevelId(0L);
  1232. auditItems.setBillId(fPid);
  1233. auditItems.setActId(actId);
  1234. auditItems.setIffinalItem("F");
  1235. auditItems.setBillNo(tWarehouseBills.getfBillno());
  1236. // 存储委托方(货权方)
  1237. auditItems.setRefno1(tWarehouseBills.getfCorpid() + "");
  1238. // 存储业务类型(业务类型)
  1239. auditItems.setRefno2(tWarehouseBills.getfBilltype());
  1240. // 存储提单号(提单号)
  1241. auditItems.setRefno3(tWarehouseBills.getfMblno());
  1242. auditItems.setSendUserId(loginUser.getUser().getUserId());
  1243. auditItems.setSendName(SecurityUtils.getUsername());
  1244. auditItems.setSendTime(new Date());
  1245. auditItems.setAuditUserId(loginUser.getUser().getUserId());
  1246. auditItems.setAuditItem(new Date());
  1247. auditItems.setAuditOpTime(new Date());
  1248. auditItems.setAuditMsg("提交");
  1249. auditItems.setAuditStatus("O");
  1250. auditItems.setFidStatus("f_billstatus");
  1251. auditItems.setTimes(1L);
  1252. AjaxResult approvalFlow = auditItemsService.createApprovalFlow(auditItems);
  1253. // Long code = Long.valueOf(String.valueOf(approvalFlow.get("code"))).longValue();
  1254. String code = approvalFlow.get("code").toString();
  1255. // Long code = Long.valueOf(String.valueOf(ajaxResult.get("code"))).longValue();
  1256. if ("500".equals(code)) {
  1257. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1258. }
  1259. return approvalFlow;
  1260. }
  1261. map.put("warehouseBills", warehouseBills);
  1262. map.put("tWarehousebillsCntrs", tWarehousebillsCntrs);
  1263. map.put("tVoyageL", tVoyage);
  1264. map.put("tWarehousebillsCntritems", tWarehousebillsCntritemsList);
  1265. return AjaxResult.success("msg", map);
  1266. }
  1267. /**
  1268. * 仓库模块提交接口
  1269. *
  1270. * @param tWarehouseBills 仓库主表
  1271. * @param tWarehousebillsfeesCr 仓库费用付款明细表
  1272. * @param tWarehousebillsfeesDr 仓库费用收款明细表
  1273. * @param tWarehousebillsitems 仓库货物明细表
  1274. * @param tEnclosure
  1275. * @param loginUser 当前登陆人
  1276. * @param billsType 操作状态
  1277. * @return
  1278. */
  1279. @Override
  1280. @Transactional
  1281. public AjaxResult warehouseSubmission(String tWarehouseBills, String tWarehousebillsfeesCr, String tWarehousebillsfeesDr,
  1282. String tWarehousebillsitems, String tEnclosure, LoginUser loginUser, String tCntr, String billsType) {
  1283. Long fPid = null;
  1284. boolean isApprove = false;
  1285. Long actId = queryWarehouseActId(billsType);
  1286. String key = "";
  1287. if ("SJRK".equals(billsType)) {
  1288. key = "warehouse.inStock.ApprovalFlow";
  1289. } else if ("SJCK".equals(billsType)) {
  1290. key = "warehouse.outStock.ApprovalFlow";
  1291. } else if (WarehouseTypeEnum.CKDB.getType().equals(billsType)) {
  1292. key = "warehouse.stockTransfer.ApprovalFlow";
  1293. } else if (WarehouseTypeEnum.HQZY.getType().equals(billsType)) {
  1294. key = "warehouse.transfer.ApprovalFlow";
  1295. } else if (WarehouseTypeEnum.HWTG.getType().equals(billsType)) {
  1296. key = "warehouse.cargoClearance.ApprovalFlow";
  1297. } else if ("CDZZ".equals(billsType)) {
  1298. key = "warehouse.yardLoading.ApprovalFlow";
  1299. }
  1300. SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique(key);
  1301. if (StringUtils.isNull(sysConfig)) {
  1302. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1303. return AjaxResult.error("系统参数异常,未找到开启审批流参数");
  1304. }
  1305. if ("0".equals(sysConfig.getConfigValue())) {
  1306. isApprove = true;
  1307. }
  1308. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehouseBills, TWarehouseBills.class);
  1309. if ("SJRK".equals(billsType) || "SJCK".equals(billsType)) {
  1310. SysConfig warehouseConfig = queryWarehouseConfig(billsType);
  1311. if (StringUtils.isNull(warehouseConfig)) {
  1312. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1313. return AjaxResult.error("系统参数异常,未找到接单审批流参数");
  1314. }
  1315. }
  1316. // if ("0".equals(sysConfig.getConfigValue()) && (warehouseBills.getWarehouseStatus() == 4L || warehouseBills.getWarehouseStatus() == 5L)) {
  1317. // return AjaxResult.error("接单审批正在进行中,无法进行提交");
  1318. // }
  1319. warehouseBills.setfItemsStatus(4L);
  1320. Long timestamp = DateUtils.getTimestamp(new Date());
  1321. warehouseBills.setfDateChanged(timestamp.toString() + (int) (Math.random() * 900) + 100);
  1322. TWarehousebillsitems itemInFo = tWarehousebillsitemsMapper.selectItemQtyByFPid(warehouseBills.getfId());
  1323. warehouseBills.setfQty(itemInFo.getfQty());
  1324. warehouseBills.setfNetweight(itemInFo.getfNetweight());
  1325. warehouseBills.setfGrossweight(itemInFo.getfGrossweight());
  1326. warehouseBills.setfTimes(warehouseBills.getfTimes() + 1);
  1327. if (StringUtils.isNull(warehouseBills.getfId())) {
  1328. if (isApprove) {
  1329. warehouseBills.setfBillstatus(4L);
  1330. } else {
  1331. warehouseBills.setfBillstatus(6L);
  1332. warehouseBills.setfReviewDate(new Date());
  1333. }
  1334. warehouseBills.setfBilltype(billsType);
  1335. if (!"SJRK".equals(billsType) && !WarehouseTypeEnum.HQZY.getType().equals(billsType)) {
  1336. warehouseBills.setfChargedate(warehouseBills.getfBsdate());
  1337. }
  1338. warehouseBills.setfBsdeptid(loginUser.getUser().getDeptId());
  1339. warehouseBills.setCreateBy(loginUser.getUser().getUserName());
  1340. String billNo = billnoSerialServiceImpl.getBillNo(billsType, warehouseBills.getfBsdate());
  1341. warehouseBills.setfBillno(billNo);
  1342. Date time = new Date();
  1343. String bscorpno = billnoSerialServiceImpl.getCorpNo(warehouseBills.getfCorpid(), time);
  1344. warehouseBills.setfBscorpno(bscorpno);
  1345. tWarehouseBillsMapper.insertTWarehousebills(warehouseBills);
  1346. fPid = warehouseBills.getfId();
  1347. } else {
  1348. fPid = warehouseBills.getfId();
  1349. if (isApprove) {
  1350. warehouseBills.setfBillstatus(4L);
  1351. } else {
  1352. warehouseBills.setfBillstatus(6L);
  1353. warehouseBills.setfReviewDate(new Date());
  1354. }
  1355. warehouseBills.setUpdateTime(new Date());
  1356. if (!"SJRK".equals(billsType) && !WarehouseTypeEnum.HQZY.getType().equals(billsType)) {
  1357. warehouseBills.setfChargedate(warehouseBills.getfBsdate());
  1358. }
  1359. warehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  1360. tEnclosureMapper.deleteByFPid(fPid);
  1361. tWarehousebillsfeesMapper.deleteByFPid(fPid);
  1362. if (!"CDZZ".equals(billsType)) {
  1363. tWarehousebillsitemsMapper.deleteByFPid(fPid);
  1364. }
  1365. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  1366. tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(fPid);
  1367. }
  1368. JSONArray warehouseJSON = JSONArray.parseArray(tWarehousebillsitems);
  1369. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  1370. int line = 0;
  1371. for (TWarehousebillsitems wbItem : warehousebillsitemsList) {
  1372. line++;
  1373. if ("SJRK".equals(billsType) || "SJCK".equals(billsType) || WarehouseTypeEnum.CKDB.getType().equals(billsType) || WarehouseTypeEnum.HWTG.getType().equals(billsType)) {
  1374. // 除了入库其他模块不需要更新主表的 仓储费计费日期到明细表,其他模块 应从库存总账把仓储费计费日期 赋给明细表
  1375. if ("SJRK".equals(billsType)) {
  1376. wbItem.setfMblno(warehouseBills.getfMblno());
  1377. wbItem.setfBillingway(warehouseBills.getfBillingway());
  1378. wbItem.setfChargedate(warehouseBills.getfChargedate());
  1379. wbItem.setfOriginalbilldate(warehouseBills.getfBsdate());
  1380. wbItem.setfMblno(warehouseBills.getfMblno());// 入库更新库存前执行update更新明细的提单号等于主表的提单号
  1381. }
  1382. if (!wbItem.getfBillstatus().equals(40L)) {
  1383. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1384. return AjaxResult.error("库存明细第" + line + "行状态异常,请确认");
  1385. }
  1386. } else {
  1387. if (!"CDZZ".equals(billsType) && !wbItem.getfBillstatus().equals(6L)) {
  1388. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1389. return AjaxResult.error("库存明细第" + line + "行状态异常,请确认");
  1390. }
  1391. }
  1392. if (!"CDZZ".equals(billsType)) {
  1393. if (StringUtils.isNull(wbItem.getfChargedate())) {
  1394. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1395. return AjaxResult.error("库存明细第" + line + "行未找到仓储费计费日期,请确认");
  1396. }
  1397. if (StringUtils.isNull(wbItem.getfBillingway())) {
  1398. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1399. return AjaxResult.error("库存明细第" + line + "行未找到计费方式,请确认");
  1400. }
  1401. if (StringUtils.isNull(wbItem.getfOriginalbilldate())) {
  1402. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1403. return AjaxResult.error("库存明细第" + line + "行未找到入库日期,请确认");
  1404. }
  1405. wbItem.setfPid(fPid);
  1406. wbItem.setfBilltype(billsType);
  1407. wbItem.setCreateTime(new Date());
  1408. wbItem.setfBillno(warehouseBills.getfBillno());
  1409. wbItem.setCreateBy(loginUser.getUser().getUserName());
  1410. tWarehousebillsitemsMapper.insertTWarehousebillsitems(wbItem);
  1411. }
  1412. }
  1413. // 箱型数据
  1414. if (StringUtils.isNotNull(tCntr) && !"[]".equals(tCntr)) {
  1415. JSONArray jsonDrArray = JSONArray.parseArray(tCntr);
  1416. List<TWarehousebillsCntr> tWarehousebillsCntrs = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsCntr.class);
  1417. int cntrLine = 0;
  1418. for (TWarehousebillsCntr cntr : tWarehousebillsCntrs) {
  1419. cntrLine++;
  1420. if (StringUtils.isNull(cntr.getfCntrid()) || StringUtils.isNull(cntr.getfCntrcount()) || cntr.getfCntrcount() == 0) {
  1421. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1422. return AjaxResult.error("箱型数据第" + cntrLine + "行数据缺少必填数据");
  1423. }
  1424. cntr.setfPid(fPid);
  1425. cntr.setfGoodsid(0L);
  1426. cntr.setfPackageid("0");
  1427. cntr.setfCntrweight(new BigDecimal(0));
  1428. cntr.setCreateBy(loginUser.getUser().getUserName());
  1429. cntr.setCreateTime(new Date());
  1430. tWarehousebillsCntrMapper.insertTWarehousebillsCntr(cntr);
  1431. }
  1432. }
  1433. if (StringUtils.isNotNull(tWarehousebillsfeesCr) && !"[]".equals(tWarehousebillsfeesCr)) {
  1434. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesCr);
  1435. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  1436. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  1437. wbCr.setfPid(fPid);
  1438. wbCr.setfDc("C");
  1439. wbCr.setfBilltype(billsType);
  1440. wbCr.setCreateTime(new Date());
  1441. wbCr.setSrcBillNo(warehouseBills.getfBillno());
  1442. wbCr.setCreateBy(loginUser.getUser().getUserName());
  1443. if (warehouseBills.getfBsdate() != null && !"".equals(warehouseBills.getfBsdate())) {
  1444. wbCr.setfBsdate(warehouseBills.getfBsdate());
  1445. }
  1446. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  1447. }
  1448. }
  1449. if (StringUtils.isNotNull(tWarehousebillsfeesDr) && !"[]".equals(tWarehousebillsfeesDr)) {
  1450. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesDr);
  1451. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  1452. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  1453. wbDr.setfPid(fPid);
  1454. wbDr.setfDc("D");
  1455. if (Objects.isNull(wbDr.getfReviewDate())) {
  1456. wbDr.setfBillstatus(4L);
  1457. }
  1458. wbDr.setfBilltype(billsType);
  1459. wbDr.setCreateTime(new Date());
  1460. wbDr.setSrcBillNo(warehouseBills.getfBillno());
  1461. wbDr.setCreateBy(loginUser.getUser().getUserName());
  1462. if (warehouseBills.getfBsdate() != null && !"".equals(warehouseBills.getfBsdate())) {
  1463. wbDr.setfBsdate(warehouseBills.getfBsdate());
  1464. }
  1465. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  1466. }
  1467. }
  1468. if (StringUtils.isNotNull(tEnclosure) && !"[]".equals(tEnclosure)) {
  1469. JSONArray jsonEnclosureArray = JSONArray.parseArray(tEnclosure);
  1470. List<TEnclosure> enclosuresList = JSONObject.parseArray(jsonEnclosureArray.toJSONString(), TEnclosure.class);
  1471. long lineNo = 0L;
  1472. for (TEnclosure enclosure : enclosuresList) {
  1473. lineNo++;
  1474. enclosure.setfPid(fPid);
  1475. enclosure.setfLineno(lineNo);
  1476. enclosure.setCreateTime(new Date());
  1477. enclosure.setCreateBy(loginUser.getUser().getUserName());
  1478. tEnclosureMapper.insertTEnclosure(enclosure);
  1479. }
  1480. }
  1481. // 这里加个判断取系统参数来确定是否需要启用审批流
  1482. if (isApprove) {
  1483. AuditItems auditItems = new AuditItems();
  1484. auditItems.setLevelId(0L);
  1485. auditItems.setBillId(fPid);
  1486. auditItems.setActId(actId);
  1487. auditItems.setIffinalItem("F");
  1488. auditItems.setBillNo(warehouseBills.getfBillno());
  1489. // 存储委托方(货权方)
  1490. auditItems.setRefno1(warehouseBills.getfCorpid() + "");
  1491. // 存储业务类型(业务类型)
  1492. auditItems.setRefno2(warehouseBills.getfBilltype());
  1493. // 存储提单号(提单号)
  1494. auditItems.setRefno3(warehouseBills.getfMblno());
  1495. auditItems.setSendUserId(loginUser.getUser().getUserId());
  1496. auditItems.setSendName(loginUser.getUsername());
  1497. auditItems.setSendTime(new Date());
  1498. auditItems.setAuditUserId(loginUser.getUser().getUserId());
  1499. auditItems.setAuditItem(new Date());
  1500. auditItems.setAuditOpTime(new Date());
  1501. auditItems.setAuditMsg("提交");
  1502. auditItems.setAuditStatus("O");
  1503. auditItems.setFidStatus("f_billstatus");
  1504. auditItems.setTimes(warehouseBills.getfTimes());
  1505. AjaxResult approvalFlow = auditItemsService.createApprovalFlow(auditItems);
  1506. // Long code = Long.valueOf(String.valueOf(approvalFlow.get("code"))).longValue();
  1507. String code = approvalFlow.get("code").toString();
  1508. // Long code = Long.valueOf(String.valueOf(ajaxResult.get("code"))).longValue();
  1509. if ("500".equals(code)) {
  1510. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1511. }
  1512. return approvalFlow;
  1513. } else {
  1514. AjaxResult ajaxResult = warehouseFollow(fPid, 6L);
  1515. String code = ajaxResult.get("code").toString();
  1516. if ("500".equals(code)) {
  1517. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1518. }
  1519. return ajaxResult;
  1520. }
  1521. }
  1522. @Override
  1523. public List<TWareHouseExcelItems> selectTWarehousebillsItemsList(Long fId) {
  1524. return tWarehouseBillsMapper.selectTWarehousebillsItemsList(fId);
  1525. }
  1526. /**
  1527. * 导出仓储明细
  1528. */
  1529. @Override
  1530. public List<StorageDetail> selectStorageDetail(Long fId) {
  1531. List<StorageDetail> storageDetails = new ArrayList<>();
  1532. storageDetails.addAll(tWarehouseBillsMapper.selectInStockDetail(fId, "SJRK"));
  1533. storageDetails.addAll(tWarehouseBillsMapper.selectInStockDetail(fId, "CKDB"));
  1534. storageDetails.addAll(tWarehouseBillsMapper.selectNotInStockDetail(fId, "HQZY"));
  1535. storageDetails.addAll(tWarehouseBillsMapper.selectNotInStockDetail(fId, "SJCK"));
  1536. storageDetails.addAll(tWarehouseBillsMapper.selectInventoryDetail(fId));
  1537. return storageDetails;
  1538. }
  1539. /**
  1540. * 导出仓储费账单
  1541. *
  1542. * @return 文件名
  1543. */
  1544. @Override
  1545. public String exportStorageBill() {
  1546. // TODO 仓储费账单导出
  1547. String filename = "仓储费账单.xlsx";
  1548. DrawExcel ioExcel = new DrawExcel(DrawExcel.getAbsoluteFile(filename));
  1549. return null;
  1550. }
  1551. @Override
  1552. public List<Map<String, Object>> selectInventoryList(TWarehouseBills tWarehouseBills) {
  1553. if (StringUtils.isNotNull(tWarehouseBills.getfWarehouseid())) {
  1554. // 获取仓库信息
  1555. TWarehouse tWarehouse = tWarehouseMapper.selectTWarehouseById(tWarehouseBills.getfWarehouseid());
  1556. if (tWarehouse.getfLocation() == 1) {
  1557. tWarehouseBills.setfLocation(1L);
  1558. } else {
  1559. tWarehouseBills.setfLocation(0L);
  1560. }
  1561. }
  1562. if (tWarehouseBills.getfBilltype().equals("SJRK")) {
  1563. return tWarehouseBillsMapper.selectInventorySJRKList(tWarehouseBills);
  1564. } else {
  1565. return tWarehouseBillsMapper.selectInventorySJCKList(tWarehouseBills);
  1566. }
  1567. }
  1568. @Override
  1569. public List<TWareHouseItemsExcel> selectTWarehousebillsItemsList(TWarehouseBills tWarehouseBills) {
  1570. return tWarehouseBillsMapper.selectTWarehousebillsItemList(tWarehouseBills);
  1571. }
  1572. @Override
  1573. public AjaxResult serialNumber(String billsType) {
  1574. Map<String, Object> map = new HashMap<>();
  1575. Date time = new Date();
  1576. String serialNumber = null;
  1577. // 查询流水号
  1578. if ("SJRK".equals(billsType)) {
  1579. serialNumber = billnoSerialServiceImpl.getFictitiousNumber("RK", time);
  1580. } else if ("SJCK".equals(billsType)) {
  1581. serialNumber = billnoSerialServiceImpl.getFictitiousNumber("CK", time);
  1582. } else if (WarehouseTypeEnum.CKDB.getType().equals(billsType)) {
  1583. serialNumber = billnoSerialServiceImpl.getFictitiousNumber("DB", time);
  1584. }
  1585. map.put("fSerialNumber", serialNumber);
  1586. return AjaxResult.success("成功", map);
  1587. }
  1588. @Override
  1589. public int derecognition(Long fId) {
  1590. // 查询对账
  1591. int reconciliation = tWarehousebillsfeesMapper.selectReconciliation(fId);
  1592. // 查询收费
  1593. int charge = tWarehousebillsfeesMapper.selectCharge(fId);
  1594. // 查询付费
  1595. int pay = tWarehousebillsfeesMapper.selectPay(fId);
  1596. if (reconciliation > 0) {
  1597. return 1;
  1598. } else if (charge > 0) {
  1599. return 2;
  1600. } else if (pay > 0) {
  1601. return 3;
  1602. } else {
  1603. return 4;
  1604. }
  1605. }
  1606. @Override
  1607. public List<Map<String, Object>> selectWareHouseNumber() {
  1608. List<Map<String, Object>> map = new ArrayList<>();
  1609. Map<String, Object> maps = new HashMap<>();
  1610. // 入库待办数量
  1611. maps.put("inStock", tWarehousebillsitemsMapper.inStock());
  1612. // 出库待办数量
  1613. maps.put("outStock", tWarehousebillsitemsMapper.outStock());
  1614. List<String> timeInterval = new ArrayList<>();
  1615. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  1616. //获取当前月第一天:
  1617. Calendar c = Calendar.getInstance();
  1618. c.add(Calendar.MONTH, 0);
  1619. c.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天
  1620. timeInterval.add(format.format(c.getTime()));
  1621. //获取前月的最后一天
  1622. Calendar ca = Calendar.getInstance();
  1623. ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
  1624. timeInterval.add(format.format(ca.getTime()));
  1625. maps.put("monthInStock", tWarehousebillsitemsMapper.monthInStock(timeInterval));
  1626. // 当月出库待办数量
  1627. maps.put("monthOutStock", tWarehousebillsitemsMapper.monthOutStock(timeInterval));
  1628. map.add(maps);
  1629. return map;
  1630. }
  1631. @Override
  1632. @Transactional
  1633. public AjaxResult waitWarehousingItems(TWarehousebillsitems tWarehousebillsitems) {
  1634. // 先查询是否已经处理
  1635. TWarehousebillsitems tWarehousebillsitems1 = tWarehousebillsitemsMapper.selectTWarehousebillsitemsById(tWarehousebillsitems.getfId());
  1636. if (tWarehousebillsitems1.getfBillstatus().equals(30)) {
  1637. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1638. return AjaxResult.error("更新库存明细失败,该信息已操作,请重新加载");
  1639. }
  1640. tWarehousebillsitems.setfSerialNumber(tWarehousebillsitems1.getfSerialNumber());
  1641. int num = tWarehousebillsitemsMapper.updateTWarehousebillsitems(tWarehousebillsitems);
  1642. // 主表变更状态
  1643. TWarehouseBills tWarehousebills = new TWarehouseBills();
  1644. tWarehousebills.setfId(tWarehousebillsitems1.getfPid());
  1645. Long timestamp = DateUtils.getTimestamp(new Date());
  1646. tWarehousebills.setfDateChanged(timestamp.toString() + (int) (Math.random() * 900) + 100);
  1647. tWarehousebills.setfItemsStatus(3L);
  1648. TWarehousebillsitems itemInFo = tWarehousebillsitemsMapper.selectItemQtyByFPid(tWarehousebills.getfId());
  1649. tWarehousebills.setfQty(itemInFo.getfQty());
  1650. tWarehousebills.setfNetweight(itemInFo.getfNetweight());
  1651. tWarehousebills.setfGrossweight(itemInFo.getfGrossweight());
  1652. int num1 = tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  1653. if (num <= 0 && num1 <= 0) {
  1654. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1655. return AjaxResult.error("更新库存明细失败");
  1656. } else {
  1657. return AjaxResult.success();
  1658. }
  1659. }
  1660. /**
  1661. * app仓储新行保存业务
  1662. *
  1663. * @param item 明细数据
  1664. * @param attachs 附件数据
  1665. * @return 结果
  1666. */
  1667. @Override
  1668. public AjaxResult submitWarehouse(String item, String attachs) {
  1669. TWarehousebillsitems tWarehousebillsitems = JSONArray.parseObject(item, TWarehousebillsitems.class);
  1670. if (StringUtils.isNull(tWarehousebillsitems.getfPid())) {
  1671. return AjaxResult.error("未找到主表id信息,请确认");
  1672. }
  1673. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(tWarehousebillsitems.getfPid());
  1674. if (StringUtils.isNotNull(tWarehousebillsitems.getfGoodsid())) {
  1675. TGoods goods = tGoodsMapper.selectTGoodsById(tWarehousebillsitems.getfGoodsid());
  1676. if (!warehouseBills.getfProductName().contains(goods.getfName())) {
  1677. warehouseBills.setfProductName(warehouseBills.getfProductName() + "/" + goods.getfName());
  1678. }
  1679. }
  1680. if (StringUtils.isNotNull(warehouseBills.getfMarks())) {
  1681. if (!warehouseBills.getfMarks().contains(tWarehousebillsitems.getfMarks())) {
  1682. warehouseBills.setfMarks(warehouseBills.getfMarks() + "/" + tWarehousebillsitems.getfMarks());
  1683. }
  1684. }
  1685. if (!"SJRK".equals(warehouseBills.getfBilltype())) {
  1686. if (!warehouseBills.getfMblno().contains(tWarehousebillsitems.getfMblno())) {
  1687. warehouseBills.setfMblno(warehouseBills.getfMblno() + "/" + tWarehousebillsitems.getfMblno());
  1688. }
  1689. }
  1690. Long timestamp = DateUtils.getTimestamp(new Date());
  1691. warehouseBills.setfDateChanged(timestamp.toString() + (int) (Math.random() * 900) + 100);
  1692. warehouseBills.setUpdateTime(new Date());
  1693. warehouseBills.setUpdateBy(SecurityUtils.getUsername());
  1694. TWarehousebillsitems itemInFo = tWarehousebillsitemsMapper.selectItemQtyByFPid(warehouseBills.getfId());
  1695. warehouseBills.setfQty(itemInFo.getfQty());
  1696. warehouseBills.setfNetweight(itemInFo.getfNetweight());
  1697. warehouseBills.setfGrossweight(itemInFo.getfGrossweight());
  1698. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  1699. if (StringUtils.isNull(tWarehousebillsitems.getfId())) {
  1700. tWarehousebillsitems.setCreateTime(new Date());
  1701. tWarehousebillsitems.setCreateBy(SecurityUtils.getUsername());
  1702. tWarehousebillsitemsMapper.insertTWarehousebillsitems(tWarehousebillsitems);
  1703. } else {
  1704. TWarehousebillsitems warehousebillsitems = tWarehousebillsitemsMapper.selectTWarehousebillsitemsById(tWarehousebillsitems.getfId());
  1705. if (StringUtils.isNull(warehousebillsitems)) {
  1706. return AjaxResult.error("未找到明细信息,请确认该明细信息是否存在");
  1707. }
  1708. if (warehousebillsitems.getfBillstatus() != 30L) {
  1709. return AjaxResult.error("该明细信息异常" + warehousebillsitems.getfBillstatus() + ",请确认");
  1710. }
  1711. tWarehousebillsitems.setUpdateTime(new Date());
  1712. tWarehousebillsitems.setUpdateBy(SecurityUtils.getUsername());
  1713. tWarehousebillsitemsMapper.updateTWarehousebillsitems(tWarehousebillsitems);
  1714. }
  1715. List<String> urlList = tEnclosureMapper.selectUrlByPId(tWarehousebillsitems.getfPid());
  1716. tEnclosureMapper.deleteByFPid(tWarehousebillsitems.getfPid());
  1717. if (StringUtils.isNotEmpty(attachs) && !"[]".equals(attachs)) {
  1718. // 附件添加
  1719. JSONArray jsonDrArray = JSONArray.parseArray(attachs);
  1720. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  1721. for (TEnclosure enclosure : tEnclosureList) {
  1722. if (!urlList.contains(enclosure.getfUrl())) {
  1723. enclosure.setSrcId(tWarehousebillsitems.getfId());
  1724. }
  1725. enclosure.setfStatus("2");
  1726. enclosure.setCreateTime(new Date());
  1727. enclosure.setfPid(tWarehousebillsitems.getfPid());
  1728. enclosure.setCreateBy(SecurityUtils.getUsername());
  1729. tEnclosureMapper.insertTEnclosure(enclosure);
  1730. }
  1731. }
  1732. return AjaxResult.success();
  1733. }
  1734. /**
  1735. * 查看集港业务
  1736. *
  1737. * @param fId 集港id
  1738. * @return
  1739. */
  1740. @Override
  1741. public AjaxResult selectContainerPort(Long fId) {
  1742. Map<String, Object> map = new HashMap<>();
  1743. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  1744. if (StringUtils.isNull(warehouseBills)) {
  1745. return AjaxResult.error("未找到主表信息,请确认该信息是否存在");
  1746. }
  1747. map.put("warehouseBills", warehouseBills);
  1748. TWarehousebillsfees warehousebillsfees = new TWarehousebillsfees();
  1749. warehousebillsfees.setfPid(fId);
  1750. warehousebillsfees.setfDc("D");
  1751. List<TWarehousebillsfees> feesDr = tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(warehousebillsfees);
  1752. List<TCorps> transportationList = new ArrayList<>();
  1753. if (StringUtils.isNotEmpty(feesDr)) {
  1754. for (TWarehousebillsfees dr : feesDr) {
  1755. TCorps corp = tCorpsMapper.selectTCorpsById(dr.getfCorpid());
  1756. if (StringUtils.isNotNull(corp)) {
  1757. transportationList.add(corp);
  1758. }
  1759. }
  1760. transportationList = transportationList.stream().distinct().collect(toList());
  1761. }
  1762. map.put("feesDrList", feesDr);
  1763. map.put("corpList", transportationList);
  1764. List<TCorps> corpsList = new ArrayList<>();
  1765. warehousebillsfees.setfDc("C");
  1766. List<TWarehousebillsfees> feesCr = tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(warehousebillsfees);
  1767. if (StringUtils.isNotEmpty(feesCr)) {
  1768. for (TWarehousebillsfees cr : feesCr) {
  1769. TCorps corp = tCorpsMapper.selectTCorpsById(cr.getfCorpid());
  1770. if (StringUtils.isNotNull(corp)) {
  1771. corpsList.add(corp);
  1772. }
  1773. }
  1774. corpsList = corpsList.stream().distinct().collect(toList());
  1775. }
  1776. map.put("feesCrList", feesCr);
  1777. map.put("transportationList", corpsList);
  1778. return AjaxResult.success(map);
  1779. }
  1780. /**
  1781. * 集港业务保存、提交接口
  1782. *
  1783. * @param tWarehouseBills 主表业务
  1784. * @param feesCr 收费
  1785. * @param feesDr 付费
  1786. * @return
  1787. */
  1788. @Override
  1789. @Transactional
  1790. public AjaxResult saveContainerPort(String tWarehouseBills, String feesCr, String feesDr, String type) {
  1791. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehouseBills, TWarehouseBills.class);
  1792. warehouseBills.setfBilltype("CKJG");
  1793. // 判断提单号是否存在
  1794. if (StringUtils.isNull(warehouseBills.getfId()) && tWarehouseBillsMapper.selectContainMblno(warehouseBills) > 0) {
  1795. return AjaxResult.error("该提单号已存在");
  1796. }
  1797. Long billStatus = 2L;
  1798. if ("add".equals(type)) {
  1799. billStatus = 6L;
  1800. warehouseBills.setfReviewDate(warehouseBills.getfBsdate());
  1801. warehouseBills.setfBillstatus(billStatus);
  1802. } else {
  1803. if (StringUtils.isNull(warehouseBills.getfBillstatus())) {
  1804. warehouseBills.setfBillstatus(billStatus);
  1805. }
  1806. }
  1807. if (StringUtils.isNull(warehouseBills.getfId())) {
  1808. warehouseBills.setCreateTime(new Date());
  1809. warehouseBills.setCreateBy(SecurityUtils.getUsername());
  1810. warehouseBills.setfDeptid(SecurityUtils.getLoginUser().getUser().getDeptId());
  1811. warehouseBills.setfBsdeptid(SecurityUtils.getLoginUser().getUser().getDeptId());
  1812. tWarehouseBillsMapper.insertTWarehousebills(warehouseBills);
  1813. } else {
  1814. warehouseBills.setUpdateTime(new Date());
  1815. warehouseBills.setUpdateBy(SecurityUtils.getUsername());
  1816. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  1817. }
  1818. tWarehousebillsfeesMapper.deleteByFPid(warehouseBills.getfId());
  1819. if (StringUtils.isNotEmpty(feesCr) && !"[]".equals(feesCr)) {
  1820. JSONArray jsonDrArray = JSONArray.parseArray(feesCr);
  1821. List<TWarehousebillsfees> warehousebillsfeesCr = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  1822. int line = 1;
  1823. for (TWarehousebillsfees cr : warehousebillsfeesCr) {
  1824. if (StringUtils.isNull(cr.getfCorpid()) || StringUtils.isNull(cr.getfFeeunitid()) || StringUtils.isNull(cr.getfInventoryDays())) {
  1825. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1826. return AjaxResult.error("付款费用第" + line + "行,缺少必填信息");
  1827. }
  1828. cr.setfMblno(warehouseBills.getfMblno());
  1829. cr.setfAmount(cr.getfAmt());
  1830. cr.setfBsdate(warehouseBills.getfBsdate());
  1831. cr.setfReviewDate(new Date());
  1832. cr.setfDc("C");
  1833. cr.setfBillstatus(billStatus);
  1834. cr.setCreateTime(new Date());
  1835. cr.setfPid(warehouseBills.getfId());
  1836. cr.setCreateBy(SecurityUtils.getUsername());
  1837. tWarehousebillsfeesMapper.insertTWarehousebillsfees(cr);
  1838. line++;
  1839. }
  1840. }
  1841. if (StringUtils.isNotEmpty(feesDr) && !"[]".equals(feesDr)) {
  1842. JSONArray jsonDrArray = JSONArray.parseArray(feesDr);
  1843. List<TWarehousebillsfees> warehousebillsfeesDr = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  1844. int line = 1;
  1845. for (TWarehousebillsfees dr : warehousebillsfeesDr) {
  1846. if (StringUtils.isNull(dr.getfCorpid()) || StringUtils.isNull(dr.getfFeeunitid()) || StringUtils.isNull(dr.getfInventoryDays())) {
  1847. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1848. return AjaxResult.error("收款费用第" + line + "行,缺少必填信息");
  1849. }
  1850. dr.setfMblno(warehouseBills.getfMblno());
  1851. dr.setfAmount(dr.getfAmt());
  1852. dr.setfBsdate(warehouseBills.getfBsdate());
  1853. dr.setfReviewDate(new Date());
  1854. dr.setfDc("D");
  1855. dr.setfBillstatus(billStatus);
  1856. dr.setCreateTime(new Date());
  1857. dr.setfPid(warehouseBills.getfId());
  1858. dr.setCreateBy(SecurityUtils.getUsername());
  1859. tWarehousebillsfeesMapper.insertTWarehousebillsfees(dr);
  1860. line++;
  1861. }
  1862. }
  1863. return AjaxResult.success();
  1864. }
  1865. /**
  1866. * 查询集港业务基础资料
  1867. *
  1868. * @return
  1869. */
  1870. @Override
  1871. public AjaxResult selectBasicInformation() {
  1872. Map<String, Object> map = new HashMap<>();
  1873. TCorps corps = new TCorps();
  1874. String typeValue = "[\"1\"]";
  1875. corps.setfTypeid(typeValue);
  1876. corps.setfStatus("0");
  1877. // 应收 取客户
  1878. map.put("corpList", tCorpsMapper.selectTCorpsListLimit200(corps));
  1879. // 应付 取陆运公司
  1880. TCorps transportation = new TCorps();
  1881. typeValue = "[\"2\"]";
  1882. transportation.setfTypeid(typeValue);
  1883. transportation.setfStatus("0");
  1884. map.put("transportationList", tCorpsMapper.selectTCorpsListLimit200(transportation));
  1885. // 查询箱信息
  1886. TCntr tCntr = new TCntr();
  1887. tCntr.setfStatus("T");
  1888. map.put("cntrList", tCntrMapper.selectRcntrName(tCntr));
  1889. map.put("pierList", sysDictDataMapper.selectDictDataByType("pier"));
  1890. TFees tFees = tFeesMapper.selectTFeesByFName("陆运费");
  1891. if (StringUtils.isNull(tFees)) {
  1892. map.put("fees", tFees);
  1893. return AjaxResult.success("未找到集港费用信息,请添加", map);
  1894. }
  1895. List<TFees> feesList = new ArrayList<>();
  1896. feesList.add(tFees);
  1897. map.put("fees", feesList);
  1898. return AjaxResult.success(map);
  1899. }
  1900. /**
  1901. * 集港业务撤销
  1902. *
  1903. * @param fId 主表id
  1904. * @param type
  1905. * @return
  1906. */
  1907. @Override
  1908. @Transactional
  1909. public AjaxResult revokeContainerPort(Long fId, String type) {
  1910. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  1911. if (StringUtils.isNull(warehouseBills)) {
  1912. return AjaxResult.error("未找到主表信息,请确认是否存在");
  1913. }
  1914. TWarehousebillsfees warehousebillsfees = new TWarehousebillsfees();
  1915. warehousebillsfees.setfPid(fId);
  1916. List<TWarehousebillsfees> warehousebillsfeesList = tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(warehousebillsfees);
  1917. if (StringUtils.isEmpty(warehousebillsfeesList)) {
  1918. return AjaxResult.error("未找到费用信息,请确认是否存在");
  1919. }
  1920. for (TWarehousebillsfees fee : warehousebillsfeesList) {
  1921. if (StringUtils.isNotEmpty(fee.getfStatementNo()) || StringUtils.isNotEmpty(fee.getfStlamountNo())) {
  1922. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1923. return AjaxResult.error("费用信息存在已对账或已收费付费操作,无法撤销");
  1924. }
  1925. if ("remove".equals(type)) {
  1926. tWarehousebillsfeesMapper.deleteTWarehousebillsfeesById(fee.getfId());
  1927. } else {
  1928. fee.setfStatus("2");
  1929. fee.setUpdateTime(new Date());
  1930. fee.setUpdateBy(SecurityUtils.getUsername());
  1931. tWarehousebillsfeesMapper.updateTWarehousebillsfees(fee);
  1932. }
  1933. }
  1934. if ("remove".equals(type)) {
  1935. if (warehouseBills.getfBillstatus() != 2L) {
  1936. return AjaxResult.error("主表状态有误,请确认状态是否为暂存状态");
  1937. }
  1938. tWarehouseBillsMapper.deleteTWarehousebillsById(fId);
  1939. return AjaxResult.success();
  1940. } else {
  1941. if (warehouseBills.getfBillstatus() != 6L) {
  1942. return AjaxResult.error("主表状态有误,请确认状态是否已提交");
  1943. }
  1944. }
  1945. warehouseBills.setfBillstatus(2L);
  1946. warehouseBills.setUpdateTime(new Date());
  1947. warehouseBills.setUpdateBy(SecurityUtils.getUsername());
  1948. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  1949. return AjaxResult.success();
  1950. }
  1951. /**
  1952. * 查看其他账务
  1953. *
  1954. * @param fId 其他账务id
  1955. * @return
  1956. */
  1957. @Override
  1958. public AjaxResult selectOtherFees(Long fId) {
  1959. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  1960. if (StringUtils.isNull(warehouseBills)) {
  1961. return AjaxResult.error("未找到主表信息,请确认该信息是否存在");
  1962. }
  1963. TWarehousebillsfees fee1 = new TWarehousebillsfees();
  1964. fee1.setfPid(fId);
  1965. fee1.setfDc("D");
  1966. TWarehousebillsfees fee2 = new TWarehousebillsfees();
  1967. fee2.setfPid(fId);
  1968. fee2.setfDc("C");
  1969. return AjaxResult.success(new HashMap<String, Object>() {{
  1970. this.put("warehouseBills", warehouseBills);
  1971. this.put("feesDrList", tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(fee1));
  1972. this.put("feesCrList", tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(fee2));
  1973. }});
  1974. }
  1975. /**
  1976. * 其他账务保存、提交接口
  1977. *
  1978. * @param tWarehouseBills 主表业务
  1979. * @param feesCr 收费
  1980. * @param feesDr 付费
  1981. * @return
  1982. */
  1983. @Override
  1984. @Transactional
  1985. public AjaxResult saveOtherFees(String tWarehouseBills, String feesCr, String feesDr, String type) {
  1986. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehouseBills, TWarehouseBills.class);
  1987. String billsType = "QTZW";
  1988. warehouseBills.setfBilltype(billsType);
  1989. warehouseBills.setfTypeid(1);
  1990. // 判断提单号是否存在
  1991. if (StringUtils.isNull(warehouseBills.getfId()) && tWarehouseBillsMapper.selectContainMblno(warehouseBills) > 0) {
  1992. return AjaxResult.error("该参看编号已存在");
  1993. }
  1994. Long billStatus = 2L;
  1995. if ("add".equals(type)) {
  1996. billStatus = 6L;
  1997. warehouseBills.setfReviewDate(warehouseBills.getfBsdate());
  1998. warehouseBills.setfBillstatus(billStatus);
  1999. } else {
  2000. if (StringUtils.isNull(warehouseBills.getfBillstatus()) || warehouseBills.getfBillstatus() != 6L) {
  2001. warehouseBills.setfBillstatus(billStatus);
  2002. }
  2003. }
  2004. if (StringUtils.isNull(warehouseBills.getfId())) {
  2005. warehouseBills.setfBillno(billnoSerialServiceImpl.getBillNo(billsType, warehouseBills.getfBsdate()));
  2006. warehouseBills.setCreateTime(new Date());
  2007. warehouseBills.setCreateBy(SecurityUtils.getUsername());
  2008. warehouseBills.setfDeptid(SecurityUtils.getLoginUser().getUser().getDeptId());
  2009. warehouseBills.setfBsdeptid(SecurityUtils.getLoginUser().getUser().getDeptId());
  2010. tWarehouseBillsMapper.insertTWarehousebills(warehouseBills);
  2011. } else {
  2012. warehouseBills.setUpdateTime(new Date());
  2013. warehouseBills.setUpdateBy(SecurityUtils.getUsername());
  2014. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  2015. }
  2016. tWarehousebillsfeesMapper.deleteByFPid(warehouseBills.getfId());
  2017. if (StringUtils.isNotEmpty(feesCr) && !"[]".equals(feesCr)) {
  2018. JSONArray jsonDrArray = JSONArray.parseArray(feesCr);
  2019. List<TWarehousebillsfees> crs = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  2020. int line = 1;
  2021. for (TWarehousebillsfees cr : crs) {
  2022. if (StringUtils.isNull(cr.getfCorpid()) || StringUtils.isNull(cr.getfFeeunitid())) {
  2023. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2024. return AjaxResult.error("付款费用第" + line + "行,缺少必填信息");
  2025. }
  2026. cr.setfMblno(warehouseBills.getfMblno());
  2027. cr.setfAmount(cr.getfAmt());
  2028. cr.setfBsdate(warehouseBills.getfBsdate());
  2029. cr.setfReviewDate(new Date());
  2030. cr.setfDc("C");
  2031. if (StringUtils.isNull(cr.getfBillstatus()) || cr.getfBillstatus() != 6L) {
  2032. cr.setfBillstatus(billStatus);
  2033. }
  2034. cr.setCreateTime(new Date());
  2035. cr.setfPid(warehouseBills.getfId());
  2036. cr.setCreateBy(SecurityUtils.getUsername());
  2037. tWarehousebillsfeesMapper.insertTWarehousebillsfees(cr);
  2038. line++;
  2039. }
  2040. }
  2041. if (StringUtils.isNotEmpty(feesDr) && !"[]".equals(feesDr)) {
  2042. JSONArray jsonDrArray = JSONArray.parseArray(feesDr);
  2043. List<TWarehousebillsfees> crs = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  2044. int line = 1;
  2045. for (TWarehousebillsfees dr : crs) {
  2046. if (StringUtils.isNull(dr.getfCorpid()) || StringUtils.isNull(dr.getfFeeunitid())) {
  2047. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2048. return AjaxResult.error("收款费用第" + line + "行,缺少必填信息");
  2049. }
  2050. dr.setfMblno(warehouseBills.getfMblno());
  2051. dr.setfAmount(dr.getfAmt());
  2052. dr.setfBsdate(warehouseBills.getfBsdate());
  2053. dr.setfReviewDate(new Date());
  2054. dr.setfDc("D");
  2055. if (StringUtils.isNull(dr.getfBillstatus()) || dr.getfBillstatus() != 6L) {
  2056. dr.setfBillstatus(billStatus);
  2057. }
  2058. dr.setCreateTime(new Date());
  2059. dr.setfPid(warehouseBills.getfId());
  2060. dr.setCreateBy(SecurityUtils.getUsername());
  2061. tWarehousebillsfeesMapper.insertTWarehousebillsfees(dr);
  2062. line++;
  2063. }
  2064. }
  2065. return AjaxResult.success();
  2066. }
  2067. /**
  2068. * 其他账务撤销
  2069. *
  2070. * @param fId 主表id
  2071. * @param type 类型
  2072. * @return
  2073. */
  2074. @Override
  2075. @Transactional
  2076. public AjaxResult revokeOtherFees(Long fId, String type) {
  2077. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  2078. if (StringUtils.isNull(warehouseBills)) {
  2079. return AjaxResult.error("未找到主表信息,请确认是否存在");
  2080. }
  2081. TWarehousebillsfees fees = new TWarehousebillsfees();
  2082. fees.setfPid(fId);
  2083. List<TWarehousebillsfees> feesList = tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(fees);
  2084. if (StringUtils.isEmpty(feesList)) {
  2085. return AjaxResult.error("未找到费用信息,请确认是否存在");
  2086. }
  2087. for (TWarehousebillsfees fee : feesList) {
  2088. if (StringUtils.isNotEmpty(fee.getfStatementNo()) || StringUtils.isNotEmpty(fee.getfStlamountNo())) {
  2089. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2090. return AjaxResult.error("费用信息存在已对账或已收费付费操作,无法撤销");
  2091. }
  2092. if ("remove".equals(type)) {
  2093. tWarehousebillsfeesMapper.deleteTWarehousebillsfeesById(fee.getfId());
  2094. } else {
  2095. fee.setfStatus("2");
  2096. fee.setUpdateTime(new Date());
  2097. fee.setUpdateBy(SecurityUtils.getUsername());
  2098. tWarehousebillsfeesMapper.updateTWarehousebillsfees(fee);
  2099. }
  2100. }
  2101. if ("remove".equals(type)) {
  2102. if (warehouseBills.getfBillstatus() != 2L) {
  2103. return AjaxResult.error("主表状态有误,请确认状态是否为暂存状态");
  2104. }
  2105. tWarehouseBillsMapper.deleteTWarehousebillsById(fId);
  2106. return AjaxResult.success();
  2107. } else {
  2108. if (warehouseBills.getfBillstatus() != 6L) {
  2109. return AjaxResult.error("主表状态有误,请确认状态是否已提交");
  2110. }
  2111. }
  2112. warehouseBills.setfBillstatus(2L);
  2113. warehouseBills.setUpdateTime(new Date());
  2114. warehouseBills.setUpdateBy(SecurityUtils.getUsername());
  2115. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  2116. return AjaxResult.success();
  2117. }
  2118. @Override
  2119. public AjaxResult importCreateCompanyMsg(MultipartFile file) throws Exception {
  2120. List<TWarehousebillsCntritemsExcel> fleetCompanyMsgs = new ArrayList<>();
  2121. InputStream inputStream = null;
  2122. try {
  2123. inputStream = file.getInputStream();
  2124. String originalFilename = file.getOriginalFilename();
  2125. Workbook workbook = null;
  2126. if (originalFilename.endsWith("xls")) {
  2127. workbook = WorkbookFactory.create(inputStream);
  2128. } else if (originalFilename.endsWith("xlsx")) {
  2129. workbook = new XSSFWorkbook(inputStream);
  2130. }
  2131. Sheet sheet = workbook.getSheetAt(0);
  2132. int line = 0;
  2133. for (Row rows : sheet) {
  2134. line++;
  2135. if (rows.getRowNum() == 0) {
  2136. continue;
  2137. }
  2138. TWarehousebillsCntritemsExcel companyMsg = new TWarehousebillsCntritemsExcel();
  2139. for (int a = 0; a < rows.getPhysicalNumberOfCells(); a++) {
  2140. Cell cell = rows.getCell(a);
  2141. String value = filter(sheet.getRow(0), CellReference.convertNumToColString(cell.getColumnIndex()));
  2142. switch (value) {
  2143. case "箱号":
  2144. //设置单元格类型
  2145. cell.setCellType(CellType.STRING);
  2146. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  2147. return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少箱号");
  2148. }
  2149. companyMsg.setfCntrno(cell.getStringCellValue());
  2150. break;
  2151. case "铅封号":
  2152. //设置单元格类型
  2153. cell.setCellType(CellType.STRING);
  2154. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  2155. return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少封号");
  2156. }
  2157. companyMsg.setfSealno(cell.getStringCellValue());
  2158. break;
  2159. case "单箱重(不得超过40)":
  2160. //设置单元格类型
  2161. cell.setCellType(CellType.STRING);
  2162. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  2163. return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少单箱重");
  2164. }
  2165. companyMsg.setfCntrweight(new BigDecimal(cell.getStringCellValue()));
  2166. break;
  2167. case "货名":
  2168. //设置单元格类型
  2169. cell.setCellType(CellType.STRING);
  2170. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  2171. return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少货名");
  2172. }
  2173. companyMsg.setGoodsName(cell.getStringCellValue());
  2174. TGoods tGoods = tGoodsMapper.checkUFNnameUnique(companyMsg.getGoodsName());
  2175. if (tGoods != null && tGoods.getfId() != null) {
  2176. companyMsg.setfGoodsid(tGoods.getfId());
  2177. }
  2178. break;
  2179. case "包装类型":
  2180. //设置单元格类型
  2181. cell.setCellType(CellType.STRING);
  2182. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  2183. return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少包装类型");
  2184. }
  2185. companyMsg.setPackageName(cell.getStringCellValue());
  2186. String fPackageid = sysDictDataMapper.selectDictValue("f_packageid", companyMsg.getPackageName());
  2187. if (StringUtils.isNotEmpty(fPackageid)) {
  2188. companyMsg.setfPackageid(fPackageid);
  2189. }
  2190. break;
  2191. case "箱型":
  2192. //设置单元格类型
  2193. cell.setCellType(CellType.STRING);
  2194. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  2195. return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少箱型");
  2196. }
  2197. companyMsg.setCntrName(cell.getStringCellValue());
  2198. Long fId = tCntrMapper.selectRcntrFId(companyMsg.getCntrName());
  2199. if (fId != null) {
  2200. companyMsg.setfCntrid(fId);
  2201. }
  2202. break;
  2203. }
  2204. }
  2205. fleetCompanyMsgs.add(companyMsg);
  2206. }
  2207. } catch (IOException e) {
  2208. return AjaxResult.error("上传文件失败,请检查文件是否损坏");
  2209. }
  2210. return AjaxResult.success("success", fleetCompanyMsgs);
  2211. }
  2212. @Override
  2213. @Transactional
  2214. public AjaxResult importCreateCompanyMsgNew(MultipartFile file, LoginUser loginUser, Long fId) throws Exception {
  2215. //查询货物信息
  2216. TWarehousebillsCntr tWarehousebillsCntr = tWarehousebillsCntrMapper.selectTWarehousebillsCntrById(fId);
  2217. if (tWarehousebillsCntr == null) {
  2218. return AjaxResult.success("error", "未找到货物信息");
  2219. }
  2220. //查询集装箱信息
  2221. TCntr tCntr = tCntrMapper.selectTCntrById(tWarehousebillsCntr.getfCntrid());
  2222. List<TTemporaryFile> fleetCompanyMsgs = new ArrayList<>();
  2223. List<String> tCnTrNoList = new ArrayList<>();
  2224. List<String> List = new ArrayList<>();
  2225. InputStream inputStream = null;
  2226. Map<String, Object> map = new HashMap<>();
  2227. String originalFilename;//文件名
  2228. try {
  2229. inputStream = file.getInputStream();
  2230. originalFilename = file.getOriginalFilename();
  2231. Workbook workbook = null;
  2232. if (originalFilename.endsWith("xls")) {
  2233. workbook = WorkbookFactory.create(inputStream);
  2234. } else if (originalFilename.endsWith("xlsx")) {
  2235. workbook = new XSSFWorkbook(inputStream);
  2236. }
  2237. Sheet sheet = workbook.getSheetAt(0);
  2238. int line = 0;
  2239. //导入之前删除原表里的数据
  2240. tTemporaryFileMapper.deleteTTemporaryFilefileName(originalFilename, loginUser.getUser().getUserName());
  2241. for (Row rows : sheet) {
  2242. line++;
  2243. if (rows.getRowNum() == 0) {
  2244. continue;
  2245. }
  2246. TTemporaryFile companyMsg = new TTemporaryFile();
  2247. companyMsg.setFileName(originalFilename);
  2248. companyMsg.setCreateBy(loginUser.getUser().getUserName());
  2249. companyMsg.setCreateTime(new Date());
  2250. for (int a = 0; a < rows.getPhysicalNumberOfCells(); a++) {
  2251. Cell cell = rows.getCell(a);
  2252. if (cell == null) {
  2253. continue;
  2254. }
  2255. String value = filter(sheet.getRow(0), CellReference.convertNumToColString(cell.getColumnIndex()));
  2256. switch (value) {
  2257. case "箱号":
  2258. //设置单元格类型
  2259. cell.setCellType(CellType.STRING);
  2260. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  2261. /*TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2262. return AjaxResult.success("Excel箱信息数据第" + line + "行数据缺少箱号",500);*/
  2263. break;
  2264. }
  2265. companyMsg.setfCntrno(cell.getStringCellValue());
  2266. //判断箱号是否存在
  2267. TCntrno tCntrno = tCntrnoMapper.selectTCnTrNoByfNo(cell.getStringCellValue());
  2268. if (tCntrno == null) {
  2269. tCnTrNoList.add(cell.getStringCellValue());
  2270. } else {
  2271. if (tCntrno.getfTypeid() != null && !Objects.equals(tCntrno.getfTypeid(), tWarehousebillsCntr.getfCntrid())) {
  2272. List.add(cell.getStringCellValue());
  2273. }
  2274. }
  2275. break;
  2276. case "铅封号":
  2277. //设置单元格类型
  2278. cell.setCellType(CellType.STRING);
  2279. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  2280. /*TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2281. return AjaxResult.success("Excel箱信息数据第" + line + "行数据缺少封号",500);*/
  2282. break;
  2283. }
  2284. companyMsg.setfSealno(cell.getStringCellValue());
  2285. break;
  2286. case "单箱重(不得超过40)":
  2287. //设置单元格类型
  2288. cell.setCellType(CellType.STRING);
  2289. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  2290. /*TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2291. return AjaxResult.success("Excel箱信息数据第" + line + "行数据缺少单箱重",500);*/
  2292. break;
  2293. }
  2294. companyMsg.setfCntrweight(new BigDecimal(cell.getStringCellValue()));
  2295. break;
  2296. /* case "货名":
  2297. //设置单元格类型
  2298. cell.setCellType(CellType.STRING);
  2299. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  2300. *//*TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2301. return AjaxResult.success("Excel箱信息数据第" + line + "行数据缺少货名",500);*//*
  2302. break;
  2303. }
  2304. companyMsg.setGoodsName(cell.getStringCellValue());
  2305. *//*TGoods tGoods = tGoodsMapper.checkUFNnameUnique(companyMsg.getGoodsName());
  2306. if (tGoods != null && tGoods.getfId() != null) {
  2307. companyMsg.setfGoodsid(tGoods.getfId());
  2308. }*//*
  2309. break;
  2310. case "包装类型":
  2311. //设置单元格类型
  2312. cell.setCellType(CellType.STRING);
  2313. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  2314. *//*TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2315. return AjaxResult.success("Excel箱信息数据第" + line + "行数据缺少包装类型",500);*//*
  2316. break;
  2317. }
  2318. companyMsg.setPackageName(cell.getStringCellValue());
  2319. *//*String fPackageid = sysDictDataMapper.selectDictValue("f_packageid", companyMsg.getPackageName());
  2320. if (StringUtils.isNotEmpty(fPackageid)) {
  2321. companyMsg.setfPackageid(fPackageid);
  2322. }*//*
  2323. break;
  2324. case "箱型":
  2325. //设置单元格类型
  2326. cell.setCellType(CellType.STRING);
  2327. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  2328. *//* TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2329. return AjaxResult.success("Excel箱信息数据第" + line + "行数据缺少箱型",500);*//*
  2330. break;
  2331. }
  2332. TCntrno cnTrNo = tCntrnoMapper.selectTCnTrNoByfNo(companyMsg.getfCntrno());
  2333. if (cnTrNo != null && cnTrNo.getTypeidName().equals(cell.getStringCellValue())) {
  2334. if (tCntr.getfNo().equals(cell.getStringCellValue())) {
  2335. companyMsg.setCntrName(cell.getStringCellValue());
  2336. } else {
  2337. List.add(companyMsg.getfCntrno());
  2338. break;
  2339. }
  2340. } else if (cnTrNo != null && !cnTrNo.getTypeidName().equals(cell.getStringCellValue())) {
  2341. List.add(companyMsg.getfCntrno());
  2342. break;
  2343. }
  2344. *//*Long fId = tCntrMapper.selectRcntrFId(companyMsg.getCntrName());
  2345. if (fId != null) {
  2346. companyMsg.setfCntrid(fId);
  2347. }*//*
  2348. break;*/
  2349. }
  2350. }
  2351. if (StringUtils.isNotEmpty(companyMsg.getfCntrno())) {
  2352. tTemporaryFileMapper.insertTTemporaryFile(companyMsg);
  2353. }
  2354. fleetCompanyMsgs.add(companyMsg);
  2355. }
  2356. } catch (IOException e) {
  2357. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2358. return AjaxResult.error("上传文件失败,请检查文件是否损坏");
  2359. }
  2360. if (CollectionUtils.isNotEmpty(tCnTrNoList) || CollectionUtils.isNotEmpty(List)) {
  2361. tTemporaryFileMapper.deleteTTemporaryFilefileName(originalFilename, loginUser.getUser().getUserName());
  2362. if (CollectionUtils.isNotEmpty(tCnTrNoList)) {
  2363. StringBuffer stringBuffer = new StringBuffer("箱号不存在的有:" + "\n");
  2364. stringBuffer.append(org.apache.commons.lang.StringUtils.join(tCnTrNoList.toArray(), ","));
  2365. map.put("tCnTrNoList", stringBuffer.toString());
  2366. }
  2367. if (CollectionUtils.isNotEmpty(tCnTrNoList) && CollectionUtils.isNotEmpty(List)) {
  2368. StringBuffer stringBuffer = new StringBuffer("箱型应为:" + tCntr.getfNo() + ",不一致的有" + "\n");
  2369. stringBuffer.append(org.apache.commons.lang.StringUtils.join(List.toArray(), ","));
  2370. map.put("List", stringBuffer.toString());
  2371. } else if (CollectionUtils.isEmpty(tCnTrNoList) && CollectionUtils.isNotEmpty(List)) {
  2372. StringBuffer stringBuffer = new StringBuffer("箱型应为:" + tCntr.getfNo() + ",不一致的有" + "\n");
  2373. stringBuffer.append(org.apache.commons.lang.StringUtils.join(List.toArray(), ","));
  2374. map.put("List", stringBuffer.toString());
  2375. }
  2376. return AjaxResult.success("error", map);
  2377. } else {
  2378. map.put("total", fleetCompanyMsgs.size());
  2379. map.put("fileName", originalFilename);
  2380. return AjaxResult.success("success", map);
  2381. }
  2382. }
  2383. /**
  2384. * 提交仓库主表审批
  2385. *
  2386. * @param tWarehouseBills 主表信息
  2387. * @param tWarehousebillsfeesCr 付款信息
  2388. * @param tWarehousebillsfeesDr 收款信息
  2389. * @param tWarehousebillsitems 仓储明细
  2390. * @param tEnclosure 附件信息
  2391. * @param tCntr 箱型箱量
  2392. * @param billsType 类型
  2393. * @return 结果
  2394. */
  2395. @Override
  2396. @Transactional
  2397. public AjaxResult submitWarehousingApproval(String tWarehouseBills, String tWarehousebillsfeesCr, String tWarehousebillsfeesDr,
  2398. String tWarehousebillsitems, String tEnclosure, String tCntr, String billsType) {
  2399. Long fPid = null;
  2400. boolean isApprove = false;
  2401. SysUser user = SecurityUtils.getLoginUser().getUser();
  2402. Long actId = queryWarehouseActId(billsType);
  2403. if ("SJRK".equals(billsType) || "SJCK".equals(billsType) || "CKDB".equals(billsType)) {
  2404. SysConfig sysConfig = queryWarehouseConfig(billsType);
  2405. if (StringUtils.isNull(sysConfig)) {
  2406. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2407. return AjaxResult.error("系统参数异常,未找到开启审批流参数");
  2408. }
  2409. if ("0".equals(sysConfig.getConfigValue())) {
  2410. isApprove = true;
  2411. }
  2412. }
  2413. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehouseBills, TWarehouseBills.class);
  2414. if (isApprove) {
  2415. warehouseBills.setWarehouseStatus(4L);
  2416. } else {
  2417. warehouseBills.setWarehouseStatus(6L);
  2418. }
  2419. Long timestamp = DateUtils.getTimestamp(new Date());
  2420. warehouseBills.setfDateChanged(timestamp.toString() + (int) (Math.random() * 900) + 100);
  2421. TWarehousebillsitems itemInFo = tWarehousebillsitemsMapper.selectItemQtyByFPid(warehouseBills.getfId());
  2422. warehouseBills.setfQty(itemInFo.getfQty());
  2423. warehouseBills.setfNetweight(itemInFo.getfNetweight());
  2424. warehouseBills.setfGrossweight(itemInFo.getfGrossweight());
  2425. // 仓库主表
  2426. if (StringUtils.isNull(warehouseBills.getfId())) {
  2427. return AjaxResult.error("请确认仓库信息是否保存");
  2428. }
  2429. fPid = warehouseBills.getfId();
  2430. if (!"SJRK".equals(billsType)) {
  2431. warehouseBills.setfChargedate(warehouseBills.getfBsdate());
  2432. }
  2433. warehouseBills.setfTimes(warehouseBills.getfTimes() + 1);
  2434. warehouseBills.setUpdateTime(new Date());
  2435. warehouseBills.setUpdateBy(user.getUserName());
  2436. tEnclosureMapper.deleteByFPid(fPid);
  2437. tWarehousebillsfeesMapper.deleteByFPid(fPid);
  2438. tWarehousebillsitemsMapper.deleteByFPid(fPid);
  2439. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  2440. tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(fPid);
  2441. // 仓储明细
  2442. if (StringUtils.isNotEmpty(tWarehousebillsitems) && !"[]".equals(tWarehousebillsitems)) {
  2443. JSONArray warehouseJSON = JSONArray.parseArray(tWarehousebillsitems);
  2444. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  2445. int line = 0;
  2446. for (TWarehousebillsitems wbItem : warehousebillsitemsList) {
  2447. line++;
  2448. if ("SJRK".equals(billsType) || "SJCK".equals(billsType) || WarehouseTypeEnum.CKDB.getType().equals(billsType) || WarehouseTypeEnum.HWTG.getType().equals(billsType)) {
  2449. // 除了入库其他模块不需要更新主表的 仓储费计费日期到明细表,其他模块 应从库存总账把仓储费计费日期 赋给明细表
  2450. if ("SJRK".equals(billsType)) {
  2451. wbItem.setfMblno(warehouseBills.getfMblno());
  2452. wbItem.setfBillingway(warehouseBills.getfBillingway());
  2453. wbItem.setfChargedate(warehouseBills.getfChargedate());
  2454. wbItem.setfOriginalbilldate(warehouseBills.getfBsdate());
  2455. wbItem.setfMblno(warehouseBills.getfMblno());// 入库更新库存前执行update更新明细的提单号等于主表的提单号
  2456. }
  2457. }
  2458. if (StringUtils.isNull(wbItem.getfChargedate())) {
  2459. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2460. return AjaxResult.error("库存明细第" + line + "行未找到仓储费计费日期,请确认");
  2461. }
  2462. if (StringUtils.isNull(wbItem.getfBillingway())) {
  2463. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2464. return AjaxResult.error("库存明细第" + line + "行未找到计费方式,请确认");
  2465. }
  2466. if (StringUtils.isNull(wbItem.getfOriginalbilldate())) {
  2467. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2468. return AjaxResult.error("库存明细第" + line + "行未找到原始入库日期,请确认");
  2469. }
  2470. wbItem.setfPid(fPid);
  2471. wbItem.setfBilltype(billsType);
  2472. wbItem.setCreateTime(new Date());
  2473. wbItem.setfBillno(warehouseBills.getfBillno());
  2474. wbItem.setCreateBy(user.getUserName());
  2475. tWarehousebillsitemsMapper.insertTWarehousebillsitems(wbItem);
  2476. }
  2477. }
  2478. // 箱型数据
  2479. if (StringUtils.isNotNull(tCntr) && !"[]".equals(tCntr)) {
  2480. JSONArray jsonDrArray = JSONArray.parseArray(tCntr);
  2481. List<TWarehousebillsCntr> tWarehousebillsCntrs = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsCntr.class);
  2482. int cntrLine = 0;
  2483. for (TWarehousebillsCntr cntr : tWarehousebillsCntrs) {
  2484. cntrLine++;
  2485. if (StringUtils.isNull(cntr.getfCntrid()) || StringUtils.isNull(cntr.getfCntrcount()) || cntr.getfCntrcount() == 0) {
  2486. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2487. return AjaxResult.error("箱型数据第" + cntrLine + "行数据缺少必填数据");
  2488. }
  2489. cntr.setfPid(fPid);
  2490. cntr.setfGoodsid(0L);
  2491. cntr.setfPackageid("0");
  2492. cntr.setCreateTime(new Date());
  2493. cntr.setCreateBy(user.getUserName());
  2494. cntr.setfCntrweight(new BigDecimal(0));
  2495. tWarehousebillsCntrMapper.insertTWarehousebillsCntr(cntr);
  2496. }
  2497. }
  2498. if (StringUtils.isNotNull(tWarehousebillsfeesCr) && !"[]".equals(tWarehousebillsfeesCr)) {
  2499. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesCr);
  2500. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  2501. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  2502. wbCr.setfPid(fPid);
  2503. wbCr.setfDc("C");
  2504. wbCr.setfBilltype(billsType);
  2505. wbCr.setCreateTime(new Date());
  2506. wbCr.setSrcBillNo(warehouseBills.getfBillno());
  2507. wbCr.setCreateBy(user.getUserName());
  2508. if (StringUtils.isNotNull(warehouseBills.getfBsdate())) {
  2509. wbCr.setfBsdate(warehouseBills.getfBsdate());
  2510. }
  2511. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  2512. }
  2513. }
  2514. if (StringUtils.isNotNull(tWarehousebillsfeesDr) && !"[]".equals(tWarehousebillsfeesDr)) {
  2515. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesDr);
  2516. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  2517. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  2518. wbDr.setfPid(fPid);
  2519. wbDr.setfDc("D");
  2520. wbDr.setfBillstatus(4L);
  2521. wbDr.setfBilltype(billsType);
  2522. wbDr.setCreateTime(new Date());
  2523. wbDr.setSrcBillNo(warehouseBills.getfBillno());
  2524. wbDr.setCreateBy(user.getUserName());
  2525. if (StringUtils.isNotNull(warehouseBills.getfBsdate())) {
  2526. wbDr.setfBsdate(warehouseBills.getfBsdate());
  2527. }
  2528. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  2529. }
  2530. }
  2531. if (StringUtils.isNotNull(tEnclosure) && !"[]".equals(tEnclosure)) {
  2532. JSONArray jsonEnclosureArray = JSONArray.parseArray(tEnclosure);
  2533. List<TEnclosure> enclosuresList = JSONObject.parseArray(jsonEnclosureArray.toJSONString(), TEnclosure.class);
  2534. long lineNo = 0L;
  2535. for (TEnclosure enclosure : enclosuresList) {
  2536. lineNo++;
  2537. enclosure.setfPid(fPid);
  2538. enclosure.setfLineno(lineNo);
  2539. enclosure.setCreateTime(new Date());
  2540. enclosure.setCreateBy(user.getUserName());
  2541. tEnclosureMapper.insertTEnclosure(enclosure);
  2542. }
  2543. }
  2544. // 这里加个判断取系统参数来确定是否需要启用审批流
  2545. if (isApprove) {
  2546. AuditItems auditItems = new AuditItems();
  2547. auditItems.setLevelId(0L);
  2548. auditItems.setBillId(fPid);
  2549. auditItems.setActId(actId);
  2550. auditItems.setIffinalItem("F");
  2551. auditItems.setBillNo(warehouseBills.getfBillno());
  2552. // 存储委托方(货权方)
  2553. auditItems.setRefno1(warehouseBills.getfCorpid() + "");
  2554. // 存储业务类型(业务类型)
  2555. auditItems.setRefno2(warehouseBills.getfBilltype());
  2556. // 存储提单号(提单号)
  2557. auditItems.setRefno3(warehouseBills.getfMblno());
  2558. auditItems.setSendUserId(user.getUserId());
  2559. auditItems.setSendName(user.getUserName());
  2560. auditItems.setSendTime(new Date());
  2561. auditItems.setAuditUserId(user.getUserId());
  2562. auditItems.setAuditItem(new Date());
  2563. auditItems.setAuditOpTime(new Date());
  2564. auditItems.setAuditMsg("提交");
  2565. auditItems.setAuditStatus("O");
  2566. auditItems.setFidStatus("warehouse_status");
  2567. auditItems.setTimes(warehouseBills.getfTimes());
  2568. AjaxResult approvalFlow = auditItemsService.createApprovalFlow(auditItems);
  2569. String code = approvalFlow.get("code").toString();
  2570. if ("500".equals(code)) {
  2571. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2572. }
  2573. return approvalFlow;
  2574. }
  2575. return AjaxResult.success();
  2576. }
  2577. /**
  2578. * app仓储新行提交业务
  2579. *
  2580. * @param item 仓库明细数据
  2581. * @param attachs 附件
  2582. * @return 结果
  2583. */
  2584. @Override
  2585. @Transactional
  2586. public AjaxResult saveWarehouse(String item, String attachs) {
  2587. TWarehousebillsitems warehousebillsitems = JSONArray.parseObject(item, TWarehousebillsitems.class);
  2588. if (StringUtils.isNull(warehousebillsitems.getfPid())) {
  2589. return AjaxResult.error("未找到主表id信息,请确认");
  2590. }
  2591. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(warehousebillsitems.getfPid());
  2592. if (StringUtils.isNotNull(warehousebillsitems.getfGoodsid())) {
  2593. TGoods goods = tGoodsMapper.selectTGoodsById(warehousebillsitems.getfGoodsid());
  2594. if (!warehouseBills.getfProductName().contains(goods.getfName())) {
  2595. warehouseBills.setfProductName(warehouseBills.getfProductName() + "/" + goods.getfName());
  2596. }
  2597. }
  2598. if (StringUtils.isNotNull(warehouseBills.getfMarks())) {
  2599. if (!warehouseBills.getfMarks().contains(warehousebillsitems.getfMarks())) {
  2600. warehouseBills.setfMarks(warehouseBills.getfMarks() + "/" + warehousebillsitems.getfMarks());
  2601. }
  2602. }
  2603. if (!"SJRK".equals(warehouseBills.getfBilltype())) {
  2604. if (!warehouseBills.getfMblno().contains(warehousebillsitems.getfMblno())) {
  2605. warehouseBills.setfMblno(warehouseBills.getfMblno() + "/" + warehousebillsitems.getfMblno());
  2606. }
  2607. }
  2608. Long timestamp = DateUtils.getTimestamp(new Date());
  2609. warehouseBills.setfDateChanged(timestamp.toString() + (int) (Math.random() * 900) + 100);
  2610. warehouseBills.setfItemsStatus(1L);
  2611. warehouseBills.setUpdateTime(new Date());
  2612. warehouseBills.setUpdateBy(SecurityUtils.getUsername());
  2613. TWarehousebillsitems itemInFo = tWarehousebillsitemsMapper.selectItemQtyByFPid(warehouseBills.getfId());
  2614. warehouseBills.setfQty(itemInFo.getfQty());
  2615. warehouseBills.setfNetweight(itemInFo.getfNetweight());
  2616. warehouseBills.setfGrossweight(itemInFo.getfGrossweight());
  2617. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  2618. warehousebillsitems.setfBillstatus(10L);
  2619. warehousebillsitems.setCreateTime(new Date());
  2620. warehousebillsitems.setCreateBy(SecurityUtils.getUsername());
  2621. tWarehousebillsitemsMapper.insertTWarehousebillsitems(warehousebillsitems);
  2622. tEnclosureMapper.deleteByFPid(warehousebillsitems.getfPid());
  2623. if (StringUtils.isNotEmpty(attachs) && !"[]".equals(attachs)) {
  2624. // 附件添加
  2625. if (StringUtils.isNotEmpty(attachs) && !"[]".equals(attachs)) {
  2626. JSONArray jsonDrArray = JSONArray.parseArray(attachs);
  2627. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  2628. for (TEnclosure enclosure : tEnclosureList) {
  2629. enclosure.setfStatus("2");
  2630. enclosure.setCreateTime(new Date());
  2631. enclosure.setfPid(warehousebillsitems.getfPid());
  2632. enclosure.setCreateBy(SecurityUtils.getUsername());
  2633. tEnclosureMapper.insertTEnclosure(enclosure);
  2634. }
  2635. }
  2636. }
  2637. return AjaxResult.success();
  2638. }
  2639. /**
  2640. * 查询提单号是否在一天当中出现多次
  2641. *
  2642. * @param tWarehouseBills 仓库数据
  2643. * @return 结果
  2644. */
  2645. @Override
  2646. public AjaxResult selectContainMblno(String tWarehouseBills, String billsType) {
  2647. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehouseBills, TWarehouseBills.class);
  2648. warehouseBills.setfBilltype(billsType);
  2649. String mblno = warehouseBills.getfMblno();
  2650. Date bsdate = warehouseBills.getfBsdate();
  2651. int count = tWarehouseBillsMapper.selectContainMblno(warehouseBills);
  2652. if (count > 1) {
  2653. return AjaxResult.success("提单号:" + mblno + ",日期:" + DateUtils.dateTime(bsdate) + ",出现" + count + "次", false);
  2654. }
  2655. return AjaxResult.success(true);
  2656. }
  2657. @Override
  2658. public List<TWarehouseBills> webVersionOrder(TWarehouseBills tWarehouseBills) {
  2659. List<TWarehouseBills> warehouseBills = tWarehouseBillsMapper.webVersionOrderList(tWarehouseBills);
  2660. if (CollectionUtils.isNotEmpty(warehouseBills)) {
  2661. for (TWarehouseBills warehouseBill : warehouseBills) {
  2662. //货物信息
  2663. TWarehousebillsCntr warehousebillsCntr = new TWarehousebillsCntr();
  2664. warehousebillsCntr.setfPid(warehouseBill.getfId());
  2665. List<TWarehousebillsCntr> tWarehousebillsCntrs = tWarehousebillsCntrMapper.selectTWarehousebillsCntrList(warehousebillsCntr);
  2666. if (CollectionUtils.isNotEmpty(tWarehousebillsCntrs)) {
  2667. warehouseBill.settWarehousebillsCntrList(tWarehousebillsCntrs);
  2668. }
  2669. //箱信息
  2670. TWarehousebillsCntritems warehousebillsCntritems = new TWarehousebillsCntritems();
  2671. warehousebillsCntritems.setfPid(warehouseBill.getfId());
  2672. List<TWarehousebillsCntritems> tWarehousebillsCntritems = tWarehousebillsCntritemsMapper.selectTWarehousebillsCntritemsList(warehousebillsCntritems);
  2673. if (CollectionUtils.isNotEmpty(tWarehousebillsCntritems)) {
  2674. warehouseBill.settWarehousebillsCntritemsList(tWarehousebillsCntritems);
  2675. }
  2676. //航线信息
  2677. TVoyage tVoyage = tVoyageMapper.selectTVoyageById(warehouseBill.getfVoyid());
  2678. warehouseBill.settVoyageL(tVoyage);
  2679. //应收信息
  2680. List<TWarehousebillsfees> tWarehousebillsfeesDr = tWarehousebillsfeesMapper.selectFeesByPId(warehouseBill.getfId(), "D");
  2681. if (CollectionUtils.isNotEmpty(tWarehousebillsfeesDr)) {
  2682. warehouseBill.settWarehousebillsfeesDr(tWarehousebillsfeesDr);
  2683. }
  2684. }
  2685. }
  2686. return warehouseBills;
  2687. }
  2688. @Override
  2689. public List<TWarehouseBills> webVersionOrderMessage(TWarehouseBills tWarehouseBills) {
  2690. return tWarehouseBillsMapper.webVersionOrderList(tWarehouseBills);
  2691. }
  2692. @Override
  2693. public List<Map<String, Object>> ruoYiVersionOrderList(LoginUser loginUser, TWarehouseBills tWarehouseBills) {
  2694. //tWarehouseBills.setCreateBy(loginUser.getUser().getUserName());
  2695. return tWarehouseBillsMapper.ruoYiVersionOrderList(tWarehouseBills);
  2696. }
  2697. @Override
  2698. public List<Map<String, Object>> webVersionOrderMessage(LoginUser loginUser, TWarehouseBills tWarehouseBills) {
  2699. TWarehouseBills warehouseBills = new TWarehouseBills();
  2700. if (tWarehouseBills != null) {
  2701. BeanUtil.copyProperties(tWarehouseBills, warehouseBills);
  2702. warehouseBills.setCreateBy(loginUser.getUser().getUserName());
  2703. } else {
  2704. warehouseBills.setCreateBy(loginUser.getUser().getUserName());
  2705. }
  2706. return tWarehouseBillsMapper.ruoYiVersionOrderList1(warehouseBills);
  2707. }
  2708. @Override
  2709. public List<TWarehouseBills> webVersionOrderDetails(TWarehouseBills tWarehouseBills) {
  2710. List<TWarehouseBills> warehouseBills = tWarehouseBillsMapper.webVersionOrderById(tWarehouseBills);
  2711. if (CollectionUtils.isNotEmpty(warehouseBills)) {
  2712. for (TWarehouseBills warehouseBill : warehouseBills) {
  2713. //货物信息
  2714. TWarehousebillsCntr warehousebillsCntr = new TWarehousebillsCntr();
  2715. warehousebillsCntr.setfPid(warehouseBill.getfId());
  2716. List<TWarehousebillsCntr> tWarehousebillsCntrs = tWarehousebillsCntrMapper.selectTWarehousebillsCntrList(warehousebillsCntr);
  2717. if (CollectionUtils.isNotEmpty(tWarehousebillsCntrs)) {
  2718. warehouseBill.settWarehousebillsCntrList(tWarehousebillsCntrs);
  2719. }
  2720. //配箱信息
  2721. TWarehousebillsCntritems warehousebillsCntritems = new TWarehousebillsCntritems();
  2722. warehousebillsCntritems.setfPid(warehouseBill.getfId());
  2723. List<TWarehousebillsCntritems> tWarehousebillsCntritems = tWarehousebillsCntritemsMapper.selectTWarehousebillsCntritemsList(warehousebillsCntritems);
  2724. if (CollectionUtils.isNotEmpty(tWarehousebillsCntritems)) {
  2725. warehouseBill.settWarehousebillsCntritemsList(tWarehousebillsCntritems);
  2726. }
  2727. //航次信息
  2728. TVoyage tVoyage = tVoyageMapper.selectTVoyageById(warehouseBill.getfVoyid());
  2729. warehouseBill.settVoyageL(tVoyage);
  2730. //应收信息
  2731. List<TWarehousebillsfees> tWarehousebillsfeesDr = tWarehousebillsfeesMapper.selectFeesByPId(warehouseBill.getfId(), "D");
  2732. warehouseBill.settWarehousebillsfeesDr(tWarehousebillsfeesDr);
  2733. //应付信息
  2734. List<TWarehousebillsfees> warehousebillsfeesCr = tWarehousebillsfeesMapper.selectFeesByPId(warehouseBill.getfId(), "C");
  2735. warehouseBill.setWarehousebillsfeesCr(warehousebillsfeesCr);
  2736. if (CollectionUtils.isNotEmpty(tWarehousebillsfeesDr)) {
  2737. warehouseBill.setMoneyStatus(tWarehousebillsfeesDr.get(0).getfBillstatus());
  2738. } else if (CollectionUtils.isNotEmpty(warehousebillsfeesCr)) {
  2739. warehouseBill.setMoneyStatus(warehousebillsfeesCr.get(0).getfBillstatus());
  2740. }
  2741. }
  2742. }
  2743. return warehouseBills;
  2744. }
  2745. @Override
  2746. @Transactional
  2747. public AjaxResult ruoYiUpdateOrderMessage(String tWarehousebills, String tWarehousebillsCntr, String tWarehousebillsCntritems, String tWarehousebillsfeesCr,
  2748. String tWarehousebillsfeesDr, LoginUser loginUser, String billsType) {
  2749. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehousebills, TWarehouseBills.class);
  2750. Map<String, Object> map = new HashMap<>();
  2751. if (StringUtils.isEmpty(warehouseBills.getfMblno())) {
  2752. return AjaxResult.error("提单号不能为空");
  2753. }
  2754. TWarehouseBills mblno = tWarehouseBillsMapper.selectTWarehousebillsfMblno(warehouseBills);
  2755. if (StringUtils.isNotNull(mblno) && !mblno.getfId().equals(warehouseBills.getfId())) {
  2756. return AjaxResult.error("提单号已存在,请重新提交");
  2757. }
  2758. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(warehouseBills.getfId());
  2759. /* if (tWarehouseBills.getfBillstatus() != 11L) {
  2760. return AjaxResult.error("订单未审核完成,暂不支持维护提单号");
  2761. }*/
  2762. TWarehouseBills bills = new TWarehouseBills();
  2763. /*bills.setfId(warehouseBills.getfId());
  2764. bills.setfMblno(warehouseBills.getfMblno());*/
  2765. Integer integer = tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  2766. if (integer <= 0) {
  2767. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2768. return AjaxResult.error("维护提单号失败,请联系管理员");
  2769. }
  2770. List<TWarehouseBills> warehouseBillsList = tWarehouseBillsMapper.webVersionOrderById(warehouseBills);
  2771. map.put("tWarehouseBills", warehouseBillsList.get(0));
  2772. int cntritemsfPid = tWarehousebillsCntritemsMapper.deleteTWarehousebillsCntritemsfPid(warehouseBills.getfId());
  2773. if (StringUtils.isNotEmpty(tWarehousebillsCntritems)) {
  2774. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsCntritems);
  2775. List<TWarehousebillsCntritems> tWarehousebillsCntritemsList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsCntritems.class);
  2776. //获取货物信息
  2777. TWarehousebillsCntr warehousebillsCntr = tWarehousebillsCntrMapper.selectTWarehousebillsCntrByPId(warehouseBills.getfId());
  2778. if (warehousebillsCntr.getfCntrcount() < tWarehousebillsCntritemsList.size()) {
  2779. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2780. return AjaxResult.error("箱信息中的箱量大于货物信息中的箱量");
  2781. }
  2782. if (CollectionUtils.isNotEmpty(tWarehousebillsCntritemsList)) {
  2783. for (TWarehousebillsCntritems warehousebillsCntritems : tWarehousebillsCntritemsList) {
  2784. AjaxResult ajaxResult = this.judgeBoxPile(warehousebillsCntritems, warehousebillsCntr.getfCntrid());
  2785. String code = ajaxResult.get("code").toString();
  2786. if ("500".equals(code)) {
  2787. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2788. return ajaxResult;
  2789. }
  2790. //先查箱号是否在对应的订单中存在存在不保存
  2791. TWarehousebillsCntritems cntritems = new TWarehousebillsCntritems();
  2792. cntritems.setfPid(warehouseBills.getfId());
  2793. cntritems.setfCntrno(warehousebillsCntritems.getfCntrno());
  2794. List<TWarehousebillsCntritems> list = tWarehousebillsCntritemsMapper.selectTWarehousebillsCntritemsList(cntritems);
  2795. if (CollectionUtils.isNotEmpty(list)) {
  2796. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2797. return AjaxResult.error("箱号" + warehousebillsCntritems.getfCntrno() + "重复,请修改");
  2798. }
  2799. warehousebillsCntritems.setfPid(warehouseBills.getfId());
  2800. warehousebillsCntritems.setCreateTime(DateUtils.getNowDate());
  2801. warehousebillsCntritems.setCreateBy(SecurityUtils.getUsername());
  2802. int cntr = tWarehousebillsCntritemsMapper.insertTWarehousebillsCntritems(warehousebillsCntritems);
  2803. }
  2804. }
  2805. map.put("tWarehousebillsCntritemsList", tWarehousebillsCntritemsList);
  2806. }
  2807. TWarehousebillsfees warehousebillsfees = new TWarehousebillsfees();
  2808. warehousebillsfees.setfPid(warehouseBills.getfId());
  2809. List<TWarehousebillsfees> tWarehousebillsfees = tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(warehousebillsfees);
  2810. if (CollectionUtils.isNotEmpty(tWarehousebillsfees)) {
  2811. Long aLong = tWarehousebillsfees.get(0).getfBillstatus();
  2812. if (aLong == 4L || aLong == 5L) {
  2813. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2814. return AjaxResult.error("订单费用审核中,不支持修改");
  2815. }
  2816. if (aLong == 6L) {
  2817. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2818. return AjaxResult.error("订单费用审核通过,不支持修改");
  2819. }
  2820. }
  2821. int c = tWarehousebillsfeesMapper.deleteFessByFPid(warehouseBills.getfId(), "C");
  2822. if (StringUtils.isNotNull(tWarehousebillsfeesCr) && !"[]".equals(tWarehousebillsfeesCr)) {
  2823. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesCr);
  2824. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  2825. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  2826. wbCr.setfPid(warehouseBills.getfId());
  2827. wbCr.setfDc("C");
  2828. wbCr.setfBilltype(billsType);
  2829. wbCr.setCreateTime(new Date());
  2830. wbCr.setSrcBillNo(tWarehouseBills.getfBillno());
  2831. wbCr.setCreateBy(loginUser.getUser().getUserName());
  2832. if (warehouseBills.getfBsdate() != null && !"".equals(warehouseBills.getfBsdate())) {
  2833. wbCr.setfBsdate(warehouseBills.getfBsdate());
  2834. }
  2835. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  2836. }
  2837. map.put("warehousebillsfeesCrList", warehousebillsfeesCrList);
  2838. }
  2839. int d = tWarehousebillsfeesMapper.deleteFessByFPid(warehouseBills.getfId(), "D");
  2840. if (StringUtils.isNotNull(tWarehousebillsfeesDr) && !"[]".equals(tWarehousebillsfeesDr)) {
  2841. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesDr);
  2842. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  2843. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  2844. wbDr.setfPid(warehouseBills.getfId());
  2845. wbDr.setfDc("D");
  2846. wbDr.setfBilltype(billsType);
  2847. wbDr.setCreateTime(new Date());
  2848. wbDr.setSrcBillNo(tWarehouseBills.getfBillno());
  2849. wbDr.setCreateBy(loginUser.getUser().getUserName());
  2850. if (warehouseBills.getfBsdate() != null && !"".equals(warehouseBills.getfBsdate())) {
  2851. wbDr.setfBsdate(warehouseBills.getfBsdate());
  2852. }
  2853. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  2854. }
  2855. map.put("warehousebillsfeesDrList", warehousebillsfeesDrList);
  2856. }
  2857. int i = tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(warehouseBills.getfId());
  2858. if (StringUtils.isNotEmpty(tWarehousebillsCntr) && !"[]".equals(tWarehousebillsCntr)) {
  2859. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsCntr);
  2860. List<TWarehousebillsCntr> tWarehousebillsCntrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsCntr.class);
  2861. if (CollectionUtils.isNotEmpty(tWarehousebillsCntrList)) {
  2862. for (TWarehousebillsCntr warehousebillsCntr : tWarehousebillsCntrList) {
  2863. warehousebillsCntr.setfPid(warehouseBills.getfId());
  2864. warehousebillsCntr.setCreateTime(DateUtils.getNowDate());
  2865. warehousebillsCntr.setCreateBy(SecurityUtils.getUsername());
  2866. int cntr = tWarehousebillsCntrMapper.insertTWarehousebillsCntr(warehousebillsCntr);
  2867. }
  2868. }
  2869. map.put("tWarehousebillsCntrList", tWarehousebillsCntrList);
  2870. }
  2871. //获取订舱单位
  2872. TCorps tCorps = tCorpsMapper.selectTCorpsById(warehouseBills.getfCorpid());
  2873. //应收费用
  2874. List<TWarehousebillsfees> fd = tWarehousebillsfeesMapper.selectFeesByPId(warehouseBills.getfId(), "D");
  2875. //应付费用
  2876. List<TWarehousebillsfees> fc = tWarehousebillsfeesMapper.selectFeesByPId(warehouseBills.getfId(), "C");
  2877. //查询订单最新信息
  2878. TWarehouseBills warehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(warehouseBills.getfId());
  2879. warehousebills.setfReceivable(fd.stream().filter(ei->ei.getfAmount()!=null).map(TWarehousebillsfees::getfAmount).reduce(BigDecimal.ZERO,BigDecimal::add));
  2880. warehousebills.setfDue(fc.stream().filter(ei->ei.getfAmount()!=null).map(TWarehousebillsfees::getfAmount).reduce(BigDecimal.ZERO,BigDecimal::add));
  2881. if (tCorps == null || (tCorps.getfCname().equals("青岛凯和志诚物流有限公司") && !warehousebills.getfCaregoStatus().equals("3"))){
  2882. warehousebills.setfCaregoStatus("2");
  2883. }else if (!warehousebills.getfCaregoStatus().equals("3") && warehousebills.getfReceivable().compareTo(BigDecimal.ZERO) > 0 && warehousebills.getfReceivable().compareTo(warehousebills.getfRecycle()) > 0){
  2884. warehousebills.setfCaregoStatus("1");
  2885. }else if (!warehousebills.getfCaregoStatus().equals("3") && warehousebills.getfReceivable().compareTo(BigDecimal.ZERO) > 0 && warehousebills.getfReceivable().compareTo(warehousebills.getfRecycle()) == 0){
  2886. warehousebills.setfCaregoStatus("2");
  2887. }
  2888. tWarehouseBillsMapper.updateTWarehousebills(warehousebills);
  2889. return AjaxResult.success("success", map);
  2890. }
  2891. @Override
  2892. @Transactional
  2893. public AjaxResult ruoYiSubmitMessage(String tWarehousebills, String tWarehousebillsCntr, String tWarehousebillsCntritems, String tWarehousebillsfeesCr,
  2894. String tWarehousebillsfeesDr, LoginUser loginUser, String billsType) {
  2895. boolean isApprove = false;
  2896. String key = "";
  2897. long actId = 0L;
  2898. Long billStatus = null;
  2899. if ("KHDD".equals(billsType)) {
  2900. actId = 460L;
  2901. key = "warehouse.khSubmitMoney.ApprovalFlow";
  2902. }
  2903. SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique(key);
  2904. if (StringUtils.isNull(sysConfig)) {
  2905. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2906. return AjaxResult.error("系统参数异常,未找到开启审批流参数");
  2907. }
  2908. if ("0".equals(sysConfig.getConfigValue())) {
  2909. isApprove = true;
  2910. }
  2911. if (isApprove) {
  2912. billStatus = 4L;
  2913. } else {
  2914. billStatus = 6L;
  2915. }
  2916. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehousebills, TWarehouseBills.class);
  2917. Map<String, Object> map = new HashMap<>();
  2918. if (StringUtils.isEmpty(warehouseBills.getfMblno())) {
  2919. return AjaxResult.error("提单号不能为空");
  2920. }
  2921. TWarehouseBills mblno = tWarehouseBillsMapper.selectTWarehousebillsfMblno(warehouseBills);
  2922. if (StringUtils.isNotNull(mblno) && !mblno.getfId().equals(warehouseBills.getfId())) {
  2923. return AjaxResult.error("提单号已存在,请重新提交");
  2924. }
  2925. if (isCalculateFees(warehouseBills.getfId())) {
  2926. return AjaxResult.error("财务已计算费用");
  2927. }
  2928. AjaxResult ajaxResult = this.changeFees(warehouseBills.getfId());
  2929. String codeMessage = ajaxResult.get("code").toString();
  2930. if ("500".equals(codeMessage)) {
  2931. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2932. return ajaxResult;
  2933. }
  2934. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(warehouseBills.getfId());
  2935. if (tWarehouseBills.getfBillstatus() != 11L) {
  2936. return AjaxResult.error("订单未审核完成,暂不支持维护提单号");
  2937. }
  2938. warehouseBills.setfTimes(tWarehouseBills.getfTimes() + 1);
  2939. /*TWarehouseBills bills = new TWarehouseBills();
  2940. bills.setfId(warehouseBills.getfId());
  2941. bills.setfMblno(warehouseBills.getfMblno());*/
  2942. Integer integer = tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  2943. map.put("tWarehouseBills", tWarehouseBills);
  2944. if (StringUtils.isNotEmpty(tWarehousebillsCntritems)) {
  2945. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsCntritems);
  2946. List<TWarehousebillsCntritems> tWarehousebillsCntritemsList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsCntritems.class);
  2947. if (CollectionUtils.isNotEmpty(tWarehousebillsCntritemsList)) {
  2948. int cntritemsfPid = tWarehousebillsCntritemsMapper.deleteTWarehousebillsCntritemsfPid(warehouseBills.getfId());
  2949. for (TWarehousebillsCntritems warehousebillsCntritems : tWarehousebillsCntritemsList) {
  2950. warehousebillsCntritems.setfPid(warehouseBills.getfId());
  2951. warehousebillsCntritems.setCreateTime(DateUtils.getNowDate());
  2952. warehousebillsCntritems.setCreateBy(SecurityUtils.getUsername());
  2953. int cntr = tWarehousebillsCntritemsMapper.insertTWarehousebillsCntritems(warehousebillsCntritems);
  2954. }
  2955. }
  2956. map.put("tWarehousebillsCntritemsList", tWarehousebillsCntritemsList);
  2957. }
  2958. int c = tWarehousebillsfeesMapper.deleteFessByFPid(warehouseBills.getfId(), "C");
  2959. if (StringUtils.isNotNull(tWarehousebillsfeesCr) && !"[]".equals(tWarehousebillsfeesCr)) {
  2960. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesCr);
  2961. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  2962. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  2963. wbCr.setfPid(warehouseBills.getfId());
  2964. wbCr.setfDc("C");
  2965. wbCr.setfBilltype(billsType);
  2966. wbCr.setfBillstatus(billStatus);
  2967. wbCr.setCreateTime(new Date());
  2968. wbCr.setSrcBillNo(tWarehouseBills.getfBillno());
  2969. wbCr.setCreateBy(loginUser.getUser().getUserName());
  2970. if (warehouseBills.getfBsdate() != null && !"".equals(warehouseBills.getfBsdate())) {
  2971. wbCr.setfBsdate(warehouseBills.getfBsdate());
  2972. }
  2973. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  2974. }
  2975. map.put("warehousebillsfeesCrList", warehousebillsfeesCrList);
  2976. }
  2977. int d = tWarehousebillsfeesMapper.deleteFessByFPid(warehouseBills.getfId(), "D");
  2978. if (StringUtils.isNotNull(tWarehousebillsfeesDr) && !"[]".equals(tWarehousebillsfeesDr)) {
  2979. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesDr);
  2980. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  2981. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  2982. wbDr.setfPid(warehouseBills.getfId());
  2983. wbDr.setfDc("D");
  2984. wbDr.setfBillstatus(billStatus);
  2985. wbDr.setfBilltype(billsType);
  2986. wbDr.setCreateTime(new Date());
  2987. wbDr.setSrcBillNo(tWarehouseBills.getfBillno());
  2988. wbDr.setCreateBy(loginUser.getUser().getUserName());
  2989. if (warehouseBills.getfBsdate() != null && !"".equals(warehouseBills.getfBsdate())) {
  2990. wbDr.setfBsdate(warehouseBills.getfBsdate());
  2991. }
  2992. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  2993. }
  2994. map.put("warehousebillsfeesDrList", warehousebillsfeesDrList);
  2995. }
  2996. if (StringUtils.isNotEmpty(tWarehousebillsCntr) && !"[]".equals(tWarehousebillsCntr)) {
  2997. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsCntr);
  2998. List<TWarehousebillsCntr> tWarehousebillsCntrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsCntr.class);
  2999. if (CollectionUtils.isNotEmpty(tWarehousebillsCntrList)) {
  3000. int i = tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(warehouseBills.getfId());
  3001. for (TWarehousebillsCntr warehousebillsCntr : tWarehousebillsCntrList) {
  3002. warehousebillsCntr.setfPid(warehouseBills.getfId());
  3003. warehousebillsCntr.setCreateTime(DateUtils.getNowDate());
  3004. warehousebillsCntr.setCreateBy(SecurityUtils.getUsername());
  3005. int cntr = tWarehousebillsCntrMapper.insertTWarehousebillsCntr(warehousebillsCntr);
  3006. }
  3007. }
  3008. map.put("tWarehousebillsCntrList", tWarehousebillsCntrList);
  3009. }
  3010. if (isApprove) {
  3011. AuditItems auditItems = new AuditItems();
  3012. auditItems.setLevelId(0L);
  3013. auditItems.setBillId(warehouseBills.getfId());
  3014. auditItems.setActId(actId);
  3015. auditItems.setIffinalItem("F");
  3016. auditItems.setBillNo(tWarehouseBills.getfBillno());
  3017. // 存储委托方(货权方)
  3018. auditItems.setRefno1(tWarehouseBills.getfCorpid() + "");
  3019. // 存储业务类型(业务类型)
  3020. auditItems.setRefno2(tWarehouseBills.getfBilltype());
  3021. // 存储提单号(提单号)
  3022. auditItems.setRefno3(tWarehouseBills.getfMblno());
  3023. auditItems.setSendUserId(loginUser.getUser().getUserId());
  3024. auditItems.setSendName(SecurityUtils.getUsername());
  3025. auditItems.setSendTime(new Date());
  3026. auditItems.setAuditUserId(loginUser.getUser().getUserId());
  3027. auditItems.setAuditItem(new Date());
  3028. auditItems.setAuditOpTime(new Date());
  3029. auditItems.setAuditMsg("提交");
  3030. auditItems.setAuditStatus("O");
  3031. auditItems.setFidStatus("f_billstatus");
  3032. auditItems.setTimes(1L);
  3033. AjaxResult approvalFlow = auditItemsService.createApprovalFlow(auditItems);
  3034. // Long code = Long.valueOf(String.valueOf(approvalFlow.get("code"))).longValue();
  3035. String code = approvalFlow.get("code").toString();
  3036. // Long code = Long.valueOf(String.valueOf(ajaxResult.get("code"))).longValue();
  3037. if ("500".equals(code)) {
  3038. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3039. }
  3040. return approvalFlow;
  3041. }
  3042. return AjaxResult.success("success", map);
  3043. }
  3044. @Override
  3045. public AjaxResult updateOrderMessage(TWarehouseBills tWarehouseBills) {
  3046. TWarehouseBills mblno = tWarehouseBillsMapper.selectTWarehousebillsfMblno(tWarehouseBills);
  3047. if (StringUtils.isNotNull(mblno) && !mblno.getfId().equals(tWarehouseBills.getfId())) {
  3048. return AjaxResult.error("提单号已存在,请重新提交");
  3049. }
  3050. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(tWarehouseBills.getfId());
  3051. if (warehouseBills.getfBillstatus() != 6L) {
  3052. return AjaxResult.error("下单未审核完成,暂不支持维护提单号");
  3053. }
  3054. int i = tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills);
  3055. if (i <= 0) {
  3056. return AjaxResult.error("更新提单号出错,请找管理员");
  3057. }
  3058. return AjaxResult.success();
  3059. }
  3060. /**
  3061. * app 查询业务主表信息
  3062. *
  3063. * @param warehouseBills
  3064. * @return
  3065. */
  3066. @Override
  3067. public List<Map<String, Object>> selectAppStockList(TWarehouseBills warehouseBills) {
  3068. String external = null;
  3069. SysUser user = SecurityUtils.getLoginUser().getUser();
  3070. if ("外部用户".equals(user.getDept().getDeptName())) {
  3071. external = user.getUserName();
  3072. }
  3073. warehouseBills.setExternal(external);
  3074. return tWarehouseBillsMapper.selectAppStockList(warehouseBills);
  3075. }
  3076. /**
  3077. * app 根据主表id查询主表对应明细列表数据
  3078. *
  3079. * @param warehouseBills
  3080. * @return
  3081. */
  3082. @Override
  3083. public List<Map<String, Object>> warehouseItemById(TWarehouseBills warehouseBills) {
  3084. return tWarehouseBillsMapper.selectWarehouseItemListById(warehouseBills);
  3085. }
  3086. /**
  3087. * app 根据明细id查询对应明细表数据
  3088. *
  3089. * @param fId
  3090. * @return
  3091. */
  3092. @Override
  3093. public AjaxResult selectWarehouseItemDataById(Long fId) {
  3094. Map<String, Object> map = new HashMap<>();
  3095. Map<String, Object> itemMap = tWarehousebillsitemsMapper.selectWarehouseItemsByPId(fId);
  3096. if (StringUtils.isNull(itemMap) || !itemMap.containsKey("fPid")) {
  3097. return AjaxResult.error("未找到库存明细数据,请确认该明细是否存在");
  3098. }
  3099. map.put("item", itemMap);
  3100. if (itemMap.containsKey("fPid") && StringUtils.isNotNull(itemMap.get("fPid"))) {
  3101. long fPid = Long.parseLong(String.valueOf(itemMap.get("fPid")));
  3102. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fPid);
  3103. map.put("warehouseBills", tWarehouseBills);
  3104. // 查询附件
  3105. List<TEnclosure> tEnclosures = tEnclosureMapper.selectTEnclosureListByPId(tWarehouseBills.getfId());
  3106. tEnclosures.addAll(tEnclosureMapper.selectTEnclosureListBySrcId(fId));
  3107. map.put("enclosure", tEnclosures);
  3108. }
  3109. return AjaxResult.success(map);
  3110. }
  3111. /**
  3112. * 查询app 添加新行 必要的基础资料
  3113. *
  3114. * @param fId
  3115. * @return
  3116. */
  3117. @Override
  3118. public AjaxResult getAppBasicInformation(Long fId) {
  3119. Map<String, Object> map = new HashMap<>();
  3120. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  3121. map.put("warehouseBills", tWarehouseBills);
  3122. if (StringUtils.isNotNull(tWarehouseBills.getfLabour())) {
  3123. TCorps corps = tCorpsMapper.selectTCorpsById(tWarehouseBills.getfLabour());
  3124. if (StringUtils.isNotNull(corps)) {
  3125. map.put("labourName", corps.getfName());
  3126. }
  3127. }
  3128. if (StringUtils.isNotNull(tWarehouseBills.getfFleet())) {
  3129. TCorps corps = tCorpsMapper.selectTCorpsById(tWarehouseBills.getfFleet());
  3130. if (StringUtils.isNotNull(corps)) {
  3131. map.put("fleetName", corps.getfName());
  3132. }
  3133. }
  3134. if (StringUtils.isNotNull(tWarehouseBills.getfGoodsid())) {
  3135. TGoods goods = tGoodsMapper.selectTGoodsById(tWarehouseBills.getfGoodsid());
  3136. if (StringUtils.isNotNull(goods)) {
  3137. map.put("goodsName", goods.getfName());
  3138. }
  3139. }
  3140. // 查询劳务公司
  3141. TCorps corps = new TCorps();
  3142. corps.setfTypeid("\"6\"");
  3143. corps.setfStatus("0");
  3144. map.put("corpsList", tCorpsMapper.selectTCorpsList(corps));
  3145. // 查询车队
  3146. TCorps fleetCorp = new TCorps();
  3147. corps.setfTypeid("\"2\"");
  3148. fleetCorp.setfStatus("0");
  3149. map.put("feelCorpList", tCorpsMapper.selectTCorpsList(fleetCorp));
  3150. // 查询商品品名
  3151. TGoods goods = new TGoods();
  3152. goods.setfStatus("0");
  3153. map.put("goodsList", tGoodsMapper.selectTGoodsList(goods));
  3154. // 查询库区
  3155. TWarehouse tWarehouse = new TWarehouse();
  3156. tWarehouse.setAncestors(tWarehouseBills.getfWarehouseid() + "");
  3157. List<TWarehouse> warehouses = tWarehouseMapper.selectTWarehouseList(tWarehouse);
  3158. if (StringUtils.isNotEmpty(warehouses)) {
  3159. map.put("warehouse", warehouseServiceImpl.buildDeptTreeSelect(warehouses));
  3160. }
  3161. map.put("attributes", sysDictDataMapper.selectDictDataByType("storage_type"));
  3162. // 查询箱型数据
  3163. TCntr tCntr = new TCntr();
  3164. tCntr.setfStatus("T");
  3165. map.put("cntrList", tCntrMapper.selectTCntrList(tCntr));
  3166. return AjaxResult.success(map);
  3167. }
  3168. /**
  3169. * app确认入库、出库、货转
  3170. *
  3171. * @param item 明细数据
  3172. * @param attachs 附件数据
  3173. * @return 结果
  3174. */
  3175. @Override
  3176. @Transactional
  3177. public AjaxResult warehouseOperationConfirmation(String item, String attachs) {
  3178. LoginUser loginUser = SecurityUtils.getLoginUser();
  3179. TWarehousebillsitems tWarehousebillsitems = JSONArray.parseObject(item, TWarehousebillsitems.class);
  3180. if (StringUtils.isNull(tWarehousebillsitems.getfId()) || StringUtils.isNull(tWarehousebillsitems.getfPid())) {
  3181. return AjaxResult.error("未找到仓库明细id,或未找到上级id,请确认");
  3182. }
  3183. // 查询主表
  3184. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(tWarehousebillsitems.getfPid());
  3185. if (StringUtils.isNull(warehouseBills.getfBsdate())) {
  3186. return AjaxResult.error("库存明细请检查日期,操作终止");
  3187. }
  3188. if (StringUtils.isNull(warehouseBills.getfCorpid())) {
  3189. return AjaxResult.error("库存明细请检查客户信息,操作终止");
  3190. }
  3191. warehouseBills.setfItemsStatus(4L);
  3192. warehouseBills.setUpdateTime(new Date());
  3193. warehouseBills.setUpdateBy(SecurityUtils.getUsername());
  3194. Long timestamp = DateUtils.getTimestamp(new Date());
  3195. warehouseBills.setfDateChanged(timestamp.toString() + (int) (Math.random() * 900) + 100);
  3196. // 查询最新明细表
  3197. TWarehousebillsitems warehousebillsitems = tWarehousebillsitemsMapper.selectTWarehousebillsitemsById(tWarehousebillsitems.getfId());
  3198. String billsType = warehousebillsitems.getfBilltype();
  3199. if ("SJRK".equals(billsType) && "0".equals(warehouseBills.getfChargetype()) && tWarehousebillsitems.getBsdate() != null) {
  3200. boolean fchargedate = this.getFchargedate(warehousebillsitems.getfPid(), tWarehousebillsitems.getBsdate());
  3201. if (!fchargedate) {
  3202. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3203. return AjaxResult.error("入库日期不能小于最小仓储费计算日期");
  3204. }
  3205. }
  3206. Date time = new Date();
  3207. if (StringUtils.isNotEmpty(warehouseBills.getfChargetype()) && "0".equals(warehouseBills.getfChargetype())) {
  3208. time = tWarehousebillsitemsMapper.selecMinBsDateByFPid(tWarehousebillsitems.getfPid());
  3209. if (tWarehousebillsitems.getBsdate() != null) {
  3210. tWarehousebillsitems.setfBsdate(tWarehousebillsitems.getBsdate());
  3211. }
  3212. } else if (StringUtils.isNotEmpty(warehouseBills.getfChargetype()) && "1".equals(warehouseBills.getfChargetype())) {
  3213. if (tWarehousebillsitems.getBsdate() != null) {
  3214. time = tWarehousebillsitems.getBsdate();
  3215. tWarehousebillsitems.setfBsdate(tWarehousebillsitems.getBsdate());
  3216. } else {
  3217. time = warehousebillsitems.getfBsdate();
  3218. }
  3219. }
  3220. tWarehousebillsitems.setfChargedate(time);//仓储费计算日期
  3221. SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique("entry.printing");
  3222. if (StringUtils.isNull(sysConfig)) {
  3223. throw new BaseException("系统参数异常");
  3224. }
  3225. String configValue = sysConfig.getConfigValue();
  3226. if ("0".equals(configValue) && warehousebillsitems.getfBillstatus() != 30L) {
  3227. return AjaxResult.error("请确认是该明细数据是否存在,或该明细数据状态异常");
  3228. }
  3229. TGoods goods = tGoodsMapper.selectTGoodsById(warehousebillsitems.getfGoodsid());
  3230. if ("1".equals(goods.getIfCntrno()) && StringUtils.isNull(warehousebillsitems.getfCntrno())) {
  3231. return AjaxResult.error("仓库明细第未找到箱号");
  3232. }
  3233. if ("SJRK".equals(billsType)) {
  3234. tWarehousebillsitems.setfOriginalbilldate(warehousebillsitems.getfBsdate());//入库时间
  3235. warehousebillsitems.setfOriginalbilldate(warehousebillsitems.getfBsdate());
  3236. // 前端参数先赋值,否则影响库存查询
  3237. warehousebillsitems.setfQty(tWarehousebillsitems.getfQty());
  3238. warehousebillsitems.setfGrossweight(tWarehousebillsitems.getfGrossweight());
  3239. warehousebillsitems.setfNetweight(tWarehousebillsitems.getfNetweight());
  3240. warehousebillsitems.setfStevedore(tWarehousebillsitems.getfStevedore());
  3241. warehousebillsitems.setRemark(tWarehousebillsitems.getRemark());
  3242. warehousebillsitems.setfWarehouselocid(tWarehousebillsitems.getfWarehouselocid());
  3243. // 查询库容量 是否可入库
  3244. int m = calculation(warehouseBills.getfWarehouseid(), warehousebillsitems.getfGrossweight());
  3245. if (m == 0) {
  3246. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3247. return AjaxResult.error("更新库存总账失败-->入库毛重大于库容");
  3248. }
  3249. TWhgenleg tWhgenle = queryTWhgenleg(warehouseBills, warehousebillsitems, goods.getIfCntrno());
  3250. if (StringUtils.isNotNull(tWhgenle)) {
  3251. int i = updateTWhgenlegData(tWarehousebillsitems, tWhgenle.getfId(), billsType);
  3252. if (i <= 0) {
  3253. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3254. return AjaxResult.error("更新库存总账失败");
  3255. }
  3256. } else {
  3257. instalTWhgenleg(warehouseBills, warehousebillsitems);
  3258. }
  3259. tWarehousebillsitems.setfIsInventory(0L);
  3260. tWarehousebillsitems.setfSerialNumber(warehousebillsitems.getfSerialNumber());
  3261. if (StringUtils.isNotNull(tWarehousebillsitems.getfId())) {
  3262. tWarehousebillsitems.setfBillstatus(40L);
  3263. tWarehousebillsitems.setUpdateTime(new Date());
  3264. tWarehousebillsitems.setUpdateBy(SecurityUtils.getUsername());
  3265. tWarehousebillsitemsMapper.updateTWarehousebillsitems(tWarehousebillsitems);
  3266. // 添加状态log
  3267. insertTWarehousebillsLog(tWarehousebillsitems, 40L);
  3268. }
  3269. } else if ("SJCK".equals(billsType)) {
  3270. // 查询总账是否存在
  3271. TWhgenleg tWhgenle = queryTWhgenleg(warehouseBills, warehousebillsitems, goods.getIfCntrno());
  3272. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  3273. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3274. return AjaxResult.error("库存明细库存为空");
  3275. }
  3276. // 库存 < 出库件数
  3277. if (tWhgenle.getfQtyblc() < tWarehousebillsitems.getfQty()) {
  3278. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3279. return AjaxResult.error("库存明细库存不足");
  3280. }
  3281. tWarehousebillsitems.setfVolumn(warehousebillsitems.getfVolumn());
  3282. // 跟新库存总账
  3283. updateTWhgenlegData(tWarehousebillsitems, tWhgenle.getfId(), billsType);
  3284. tWarehousebillsitems.setfBillstatus(40L);
  3285. tWarehousebillsitems.setUpdateTime(new Date());
  3286. tWarehousebillsitems.setfPid(warehouseBills.getfId());
  3287. if (tWarehousebillsitems.getBsdate() != null) {
  3288. tWarehousebillsitems.setfBsdate(tWarehousebillsitems.getBsdate());
  3289. } else {
  3290. tWarehousebillsitems.setfBsdate(warehouseBills.getfBsdate());
  3291. }
  3292. tWarehousebillsitems.setfBillno(warehouseBills.getfBillno());
  3293. tWarehousebillsitems.setUpdateBy(loginUser.getUser().getUserName());
  3294. tWarehousebillsitems.setfSerialNumber(warehousebillsitems.getfSerialNumber());
  3295. tWarehousebillsitemsMapper.updateTWarehousebillsitems(tWarehousebillsitems);
  3296. // 添加状态log
  3297. insertTWarehousebillsLog(tWarehousebillsitems, 40L);
  3298. }
  3299. List<String> urlList = tEnclosureMapper.selectUrlByPId(tWarehousebillsitems.getfPid());
  3300. tEnclosureMapper.deleteByFPid(warehouseBills.getfId());
  3301. // 附件添加
  3302. if (StringUtils.isNotEmpty(attachs) && !"[]".equals(attachs)) {
  3303. JSONArray jsonDrArray = JSONArray.parseArray(attachs);
  3304. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  3305. for (TEnclosure enclosure : tEnclosureList) {
  3306. if (!urlList.contains(enclosure.getfUrl())) {
  3307. enclosure.setSrcId(tWarehousebillsitems.getfId());
  3308. }
  3309. enclosure.setfStatus("6");
  3310. enclosure.setCreateTime(new Date());
  3311. enclosure.setfPid(warehouseBills.getfId());
  3312. enclosure.setCreateBy(loginUser.getUser().getUserName());
  3313. tEnclosureMapper.insertTEnclosure(enclosure);
  3314. }
  3315. }
  3316. TWarehousebillsitems itemInFo = tWarehousebillsitemsMapper.selectItemQtyByFPid(warehouseBills.getfId());
  3317. warehouseBills.setfQty(itemInFo.getfQty());
  3318. warehouseBills.setfNetweight(itemInFo.getfNetweight());
  3319. warehouseBills.setfGrossweight(itemInFo.getfGrossweight());
  3320. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  3321. return AjaxResult.success();
  3322. }
  3323. /**
  3324. * app查询入库数量
  3325. */
  3326. @Override
  3327. public List<Map<String, Object>> selectWarehouseBusinessInStockList(TWarehousebillsitems tWarehousebillsitems) {
  3328. List<Map<String, Object>> mapList = null;
  3329. if (tWarehousebillsitems.getfBilltype().equals("SJRK")) {
  3330. mapList = tWarehousebillsitemsMapper.selectWarehouseBusinesInList(tWarehousebillsitems);
  3331. } else {
  3332. mapList = tWarehousebillsitemsMapper.selectWarehouseBusinesOutList(tWarehousebillsitems);
  3333. }
  3334. if (StringUtils.isNotEmpty(mapList)) {
  3335. for (Map<String, Object> map : mapList) {
  3336. Long fId = Long.valueOf(String.valueOf(map.get("fPid")));
  3337. TEnclosure enclosure = new TEnclosure();
  3338. enclosure.setfPid(fId);
  3339. map.put("enclosure", tEnclosureMapper.selectWarehouseAccessoriesList(enclosure));
  3340. }
  3341. }
  3342. return mapList;
  3343. }
  3344. /**
  3345. * 叫车进场
  3346. *
  3347. * @param item 明细数据
  3348. * @param attachs 附件
  3349. * @return 结果
  3350. */
  3351. @Override
  3352. @Transactional
  3353. public AjaxResult addCreditItems(String item, String attachs) {
  3354. TWarehousebillsitems tWarehousebillsitems = JSONArray.parseObject(item, TWarehousebillsitems.class);
  3355. if (StringUtils.isNull(tWarehousebillsitems.getfId())) {
  3356. return AjaxResult.error("未找到仓库明细id,请确认");
  3357. }
  3358. TWarehousebillsitems warehousebillsitems = tWarehousebillsitemsMapper.selectTWarehousebillsitemsById(tWarehousebillsitems.getfId());
  3359. if (StringUtils.isNull(warehousebillsitems)) {
  3360. return AjaxResult.error("未找到该条明细数据,请确认明细数据是否存在");
  3361. }
  3362. if (StringUtils.isNull(warehousebillsitems.getfBillstatus())) {
  3363. return AjaxResult.error("未找到仓库明细状态信息,请确认");
  3364. }
  3365. if (warehousebillsitems.getfBillstatus() > 20L) {
  3366. return AjaxResult.error("该仓库明细状态异常,请确认状态信息");
  3367. }
  3368. TWarehouseBills bills = tWarehouseBillsMapper.selectTWarehousebillsById(warehousebillsitems.getfPid());
  3369. if (tWarehousebillsitems.getBsdate() != null && "0".equals(bills.getfChargetype())) {
  3370. boolean fchargedate = this.getFchargedate(warehousebillsitems.getfPid(), tWarehousebillsitems.getBsdate());
  3371. if (!fchargedate) {
  3372. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3373. return AjaxResult.error("入库日期不能小于最小仓储费计算日期");
  3374. }
  3375. }
  3376. Date time;
  3377. if (StringUtils.isNotEmpty(bills.getfChargetype()) && "0".equals(bills.getfChargetype())) {
  3378. time = tWarehousebillsitemsMapper.selecMinBsDateByFPid(tWarehousebillsitems.getfPid());
  3379. tWarehousebillsitems.setfChargedate(time);
  3380. if (tWarehousebillsitems.getBsdate() != null) {
  3381. tWarehousebillsitems.setfBsdate(tWarehousebillsitems.getBsdate());
  3382. }
  3383. } else if (StringUtils.isNotEmpty(bills.getfChargetype()) && "1".equals(bills.getfChargetype())) {
  3384. if (tWarehousebillsitems.getBsdate() != null) {
  3385. time = tWarehousebillsitems.getBsdate();
  3386. tWarehousebillsitems.setfBsdate(tWarehousebillsitems.getBsdate());
  3387. } else {
  3388. time = warehousebillsitems.getfBsdate();
  3389. }
  3390. tWarehousebillsitems.setfChargedate(time);
  3391. }
  3392. tWarehousebillsitems.setfBillstatus(30L);
  3393. tWarehousebillsitems.setUpdateTime(new Date());
  3394. tWarehousebillsitems.setUpdateBy(SecurityUtils.getUsername());
  3395. tWarehousebillsitemsMapper.updateTWarehousebillsitems(tWarehousebillsitems);
  3396. // 更新主表明细状态
  3397. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(warehousebillsitems.getfPid());
  3398. if (StringUtils.isNotNull(warehousebillsitems.getfGoodsid())) {
  3399. TGoods goods = tGoodsMapper.selectTGoodsById(warehousebillsitems.getfGoodsid());
  3400. if (!warehouseBills.getfProductName().contains(goods.getfName())) {
  3401. warehouseBills.setfProductName(warehouseBills.getfProductName() + "/" + goods.getfName());
  3402. }
  3403. }
  3404. if (StringUtils.isNotNull(warehouseBills.getfMarks())) {
  3405. if (!warehouseBills.getfMarks().contains(warehousebillsitems.getfMarks())) {
  3406. warehouseBills.setfMarks(warehouseBills.getfMarks() + "/" + warehousebillsitems.getfMarks());
  3407. }
  3408. }
  3409. if (!"SJRK".equals(warehouseBills.getfBilltype())) {
  3410. if (!warehouseBills.getfMblno().contains(warehousebillsitems.getfMblno())) {
  3411. warehouseBills.setfMblno(warehouseBills.getfMblno() + "/" + warehousebillsitems.getfMblno());
  3412. }
  3413. }
  3414. warehouseBills.setfItemsStatus(3L);
  3415. warehouseBills.setUpdateTime(new Date());
  3416. Long timestamp = DateUtils.getTimestamp(new Date());
  3417. warehouseBills.setfDateChanged(timestamp.toString() + (int) (Math.random() * 900) + 100);
  3418. warehouseBills.setUpdateBy(SecurityUtils.getUsername());
  3419. TWarehousebillsitems itemInFo = tWarehousebillsitemsMapper.selectItemQtyByFPid(warehouseBills.getfId());
  3420. warehouseBills.setfQty(itemInFo.getfQty());
  3421. warehouseBills.setfNetweight(itemInFo.getfNetweight());
  3422. warehouseBills.setfGrossweight(itemInFo.getfGrossweight());
  3423. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  3424. return AjaxResult.success();
  3425. }
  3426. @Override
  3427. public List<InStock> inStockExport(TWarehouseBills tWarehousebills) throws Exception {
  3428. List<Map<String, Object>> list = tWarehouseBillsMapper.selectWarehouseBusinessList(tWarehousebills);
  3429. List<InStock> list1 = ListMapToBeanUtils.castMapToBean(list, InStock.class);
  3430. return list1;
  3431. }
  3432. @Override
  3433. public List<OutStock> outStockExport(TWarehouseBills tWarehousebills) throws Exception {
  3434. List<Map<String, Object>> list = tWarehouseBillsMapper.selectWarehouseBusinessList(tWarehousebills);
  3435. List<OutStock> list1 = ListMapToBeanUtils.castMapToBean(list, OutStock.class);
  3436. return list1;
  3437. }
  3438. @Override
  3439. public List<StockTransfer> stockTransferExport(TWarehouseBills tWarehousebills) throws Exception {
  3440. List<Map<String, Object>> list = tWarehouseBillsMapper.selectWarehouseBusinessList(tWarehousebills);
  3441. List<StockTransfer> list1 = ListMapToBeanUtils.castMapToBean(list, StockTransfer.class);
  3442. return list1;
  3443. }
  3444. @Override
  3445. public List<GoodsTransfer> goodsTransferExport(TWarehouseBills tWarehousebills) throws Exception {
  3446. List<Map<String, Object>> list = tWarehouseBillsMapper.selectWarehouseBusinessList1(tWarehousebills);
  3447. List<GoodsTransfer> list1 = ListMapToBeanUtils.castMapToBean(list, GoodsTransfer.class);
  3448. return list1;
  3449. }
  3450. @Override
  3451. public List<StorageFee> storageFeeExport(TWarehouseBills tWarehousebills) throws Exception {
  3452. List<Map<String, Object>> list = tWarehouseBillsMapper.selectWarehouseBusinessList1(tWarehousebills);
  3453. List<StorageFee> list1 = ListMapToBeanUtils.castMapToBean(list, StorageFee.class);
  3454. return list1;
  3455. }
  3456. /**
  3457. * 根据仓库主表id 更新对应明细表状态
  3458. *
  3459. * @param fPid 仓库主表id
  3460. * @return 结果
  3461. */
  3462. @Transactional
  3463. public AjaxResult warehouseFollow(Long fPid, long fettle) {
  3464. if (StringUtils.isNull(fPid)) {
  3465. return AjaxResult.error("仓库更新状态未找到主表信息,请与管理员联系");
  3466. }
  3467. try {
  3468. tWarehouseBillsMapper.warehouseFollowUpdate(fPid, fettle, new Date());
  3469. tWarehousebillsfeesMapper.warehouseFeesFollowUpdate(fPid, fettle, new Date());
  3470. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fPid);
  3471. if ("SJRK".equals(tWarehouseBills.getfBilltype()) || "SJCK".equals(tWarehouseBills.getfBilltype())) {
  3472. fettle = 40L;
  3473. }
  3474. tWarehousebillsitemsMapper.warehouseItemFollowUpdate(fPid, fettle);
  3475. } catch (Exception e) {
  3476. return AjaxResult.error("更新库存费用状态失败,请联系管理员");
  3477. }
  3478. return AjaxResult.success();
  3479. }
  3480. /**
  3481. * 入库确认
  3482. *
  3483. * @param warehouseBills 主表
  3484. * @param warehousebillsitems 明细
  3485. * @param loginUser 当前登录人
  3486. * @param billsType 状态
  3487. * @return 结果
  3488. */
  3489. @Override
  3490. @Transactional
  3491. public AjaxResult addCredit(String warehouseBills, String warehousebillsitems, String tEnclosure, String warehousebillsfeesCr,
  3492. String warehousebillsfeesDr, LoginUser loginUser, String tCntr, String billsType) {
  3493. Map<String, Object> map = new HashMap<>();
  3494. if (StringUtils.isNull(warehouseBills) || "[]".equals(warehouseBills)) {
  3495. return AjaxResult.error("未找到主表信息");
  3496. }
  3497. if (StringUtils.isNull(warehousebillsitems) || "[]".equals(warehousebillsitems)) {
  3498. return AjaxResult.error("未找到入账信息");
  3499. }
  3500. TWarehouseBills tWarehouseBills = JSONArray.parseObject(warehouseBills, TWarehouseBills.class);
  3501. tEnclosureMapper.deleteByFPid(tWarehouseBills.getfId());
  3502. tWarehousebillsfeesMapper.deleteByFPid(tWarehouseBills.getfId());
  3503. tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(tWarehouseBills.getfId());
  3504. boolean businessStatus = "场地直装".equals(tWarehouseBills.getfBusinessType());
  3505. JSONArray warehouseJSON = JSONArray.parseArray(warehousebillsitems);
  3506. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  3507. Date time = new Date();
  3508. if ("0".equals(tWarehouseBills.getfChargetype())) {
  3509. time = tWarehousebillsitemsMapper.selecMinBsDateByFPid(tWarehouseBills.getfId());
  3510. }
  3511. int i = 1;
  3512. for (TWarehousebillsitems item : warehousebillsitemsList) {
  3513. // 如果业务时间超出当前时间则不允许
  3514. if (item.getfBsdate().after(new Date())) {
  3515. throw new WarehouseException("业务日期不得超出当前日期");
  3516. }
  3517. // 查询是否可以修改
  3518. TWarehousebillsitems tWarehousebillsitems = tWarehousebillsitemsMapper.selectTWarehousebillsitemsById(item.getfId());
  3519. if (tWarehousebillsitems.getfBillstatus() == 40) {
  3520. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3521. return AjaxResult.error("更新库存明细第" + i + "行失败,已处理,请刷新网页");
  3522. }
  3523. if (StringUtils.isNull(item.getfWarehouselocid())) {
  3524. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3525. return AjaxResult.error("库存明细第" + i + "行未找到库区");
  3526. }
  3527. if (!businessStatus) {
  3528. // 查询库容量 是否可入库
  3529. if (calculation(tWarehouseBills.getfWarehouseid(), item.getfGrossweight()) <= 0) {
  3530. throw new WarehouseException("更新库存总账失败-->入库毛重大于库容");
  3531. }
  3532. item.setfOriginalbilldate(item.getfBsdate());
  3533. item.setfBillingway(tWarehouseBills.getfBillingway());
  3534. if ("1".equals(tWarehouseBills.getfChargetype())) {
  3535. time = item.getfBsdate();
  3536. }
  3537. item.setfChargedate(time);
  3538. TGoods goods = tGoodsMapper.selectTGoodsById(item.getfGoodsid());
  3539. if ("1".equals(goods.getIfCntrno()) && StringUtils.isNull(item.getfCntrno())) {
  3540. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3541. return AjaxResult.error("仓库明细第" + i + "行未找到箱号");
  3542. }
  3543. // 查询库存总帐
  3544. TWhgenleg tWhgenle = queryWhgenlegService.stockWhgenleg(tWarehouseBills, item, goods.getIfCntrno(), WarehouseTypeEnum.CONFIRM_OPERATION.getType());
  3545. //复制报关单号和备注
  3546. if ("SJRK".equals(billsType)) {
  3547. if (StringUtils.isNotEmpty(tWarehouseBills.getfCustomno())) {
  3548. item.setfCustomno(tWarehouseBills.getfCustomno());
  3549. }
  3550. if (StringUtils.isNotEmpty(tWarehouseBills.getRemark())) {
  3551. item.setRemark(tWarehouseBills.getRemark());
  3552. }
  3553. }
  3554. if (StringUtils.isNotNull(tWhgenle)) {
  3555. updateTWhgenlegData(item, tWhgenle.getfId(), billsType);
  3556. item.setfSrcid(tWhgenle.getfId());
  3557. } else {
  3558. Long whgenlegId = instalTWhgenleg(tWarehouseBills, item);
  3559. item.setfSrcid(whgenlegId);
  3560. }
  3561. item.setfIsInventory(0L);
  3562. } else {
  3563. item.setfIsInventory(1L);
  3564. }
  3565. int num = 0;
  3566. if (StringUtils.isNotNull(item.getfId())) {
  3567. item.setfBillstatus(40L);
  3568. item.setUpdateBy(loginUser.getUser().getUserName());
  3569. item.setUpdateTime(new Date());
  3570. if ("SJRK".equals(billsType)) {
  3571. item.setfMblno(tWarehouseBills.getfMblno());// 入库更新库存前执行update更新明细的提单号等于主表的提单号
  3572. }
  3573. num = tWarehousebillsitemsMapper.updateTWarehousebillsitems(item);
  3574. // 添加状态log
  3575. insertTWarehousebillsLog(item, 40L);
  3576. }
  3577. if (num <= 0) {
  3578. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3579. return AjaxResult.error("新增库存明细失败");
  3580. }
  3581. i++;
  3582. }
  3583. // 箱型数据
  3584. if (StringUtils.isNotNull(tCntr) && !"[]".equals(tCntr)) {
  3585. JSONArray jsonDrArray = JSONArray.parseArray(tCntr);
  3586. List<TWarehousebillsCntr> tWarehousebillsCntrs = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsCntr.class);
  3587. int line = 0;
  3588. for (TWarehousebillsCntr cntr : tWarehousebillsCntrs) {
  3589. line++;
  3590. if (StringUtils.isNull(cntr.getfCntrid()) || StringUtils.isNull(cntr.getfCntrcount()) || cntr.getfCntrcount() == 0) {
  3591. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3592. return AjaxResult.error("箱型数据第" + line + "行数据缺少必填数据");
  3593. }
  3594. cntr.setfPid(tWarehouseBills.getfId());
  3595. cntr.setfGoodsid(0L);
  3596. cntr.setfPackageid("0");
  3597. cntr.setfCntrweight(new BigDecimal(0));
  3598. cntr.setCreateBy(loginUser.getUser().getUserName());
  3599. cntr.setCreateTime(new Date());
  3600. tWarehousebillsCntrMapper.insertTWarehousebillsCntr(cntr);
  3601. }
  3602. }
  3603. // 附件添加
  3604. if (StringUtils.isNotEmpty(tEnclosure) && !"[]".equals(tEnclosure)) {
  3605. JSONArray jsonDrArray = JSONArray.parseArray(tEnclosure);
  3606. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  3607. for (TEnclosure enclosure : tEnclosureList) {
  3608. enclosure.setfPid(tWarehouseBills.getfId());
  3609. enclosure.setCreateBy(loginUser.getUser().getUserName());
  3610. enclosure.setCreateTime(new Date());
  3611. tEnclosureMapper.insertTEnclosure(enclosure);
  3612. }
  3613. }
  3614. // 收款明细添加
  3615. if (StringUtils.isNotEmpty(warehousebillsfeesDr) && !"[]".equals(warehousebillsfeesDr)) {
  3616. JSONArray jsonDrArray = JSONArray.parseArray(warehousebillsfeesDr);
  3617. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  3618. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  3619. wbDr.setfPid(tWarehouseBills.getfId());
  3620. wbDr.setfDc("D");
  3621. wbDr.setCreateBy(loginUser.getUser().getUserName());
  3622. wbDr.setCreateTime(new Date());
  3623. if (tWarehouseBills.getfBsdate() != null && !tWarehouseBills.getfBsdate().equals("")) {
  3624. wbDr.setfBsdate(tWarehouseBills.getfBsdate());
  3625. }
  3626. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  3627. }
  3628. }
  3629. // 付款明细添加
  3630. if (StringUtils.isNotNull(warehousebillsfeesCr) && !"[]".equals(warehousebillsfeesCr)) {
  3631. JSONArray jsonCrArray = JSONArray.parseArray(warehousebillsfeesCr);
  3632. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  3633. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  3634. wbCr.setfPid(tWarehouseBills.getfId());
  3635. wbCr.setfDc("C");
  3636. wbCr.setCreateBy(loginUser.getUser().getUserName());
  3637. wbCr.setCreateTime(new Date());
  3638. if (tWarehouseBills.getfBsdate() != null && !tWarehouseBills.getfBsdate().equals("")) {
  3639. wbCr.setfBsdate(tWarehouseBills.getfBsdate());
  3640. }
  3641. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  3642. }
  3643. }
  3644. //最后更新仓库主表
  3645. tWarehouseBills.setfItemsStatus(4L);
  3646. tWarehouseBills.setfBilltype(billsType);
  3647. tWarehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  3648. tWarehouseBills.setUpdateTime(new Date());
  3649. Long timestamp = DateUtils.getTimestamp(new Date());
  3650. tWarehouseBills.setfDateChanged(timestamp.toString() + (int) (Math.random() * 900) + 100);
  3651. TWarehousebillsitems itemInFo = tWarehousebillsitemsMapper.selectItemQtyByFPid(tWarehouseBills.getfId());
  3652. tWarehouseBills.setfQty(itemInFo.getfQty());
  3653. tWarehouseBills.setfNetweight(itemInFo.getfNetweight());
  3654. tWarehouseBills.setfGrossweight(itemInFo.getfGrossweight());
  3655. tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills);
  3656. map.put("fDateChanged", tWarehouseBills.getfDateChanged());
  3657. map.put("warehousebills", tWarehouseBills);
  3658. map.put("warehousebillsitems", warehousebillsitemsList);
  3659. return AjaxResult.success("成功", map);
  3660. }
  3661. /**
  3662. * 入库明细提交审批确认
  3663. * <p>
  3664. * 待完善!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  3665. */
  3666. @Override
  3667. @Transactional
  3668. public AjaxResult addDetails(Long fId, String billsType, LoginUser loginUser) {
  3669. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  3670. if (StringUtils.isNull(tWarehouseBills)) {
  3671. return AjaxResult.error("未找到仓储信息,请确认是否存在");
  3672. }
  3673. List<TWarehousebillsitems> warehousebillsitemsList = tWarehousebillsitemsMapper.selectItemsStatusByPid(fId);
  3674. if (StringUtils.isEmpty(warehousebillsitemsList)) {
  3675. return AjaxResult.error("未找到仓储库存明细信息,请确认是否存在");
  3676. }
  3677. if (tWarehouseBills.getfItemstatus().longValue() == 4L
  3678. || tWarehouseBills.getfItemstatus().longValue() == 5L
  3679. || tWarehouseBills.getfItemstatus().longValue() == 6L) {
  3680. return AjaxResult.error("该单明细已提交审核,请勿重复提交");
  3681. }
  3682. for (TWarehousebillsitems item : warehousebillsitemsList) {
  3683. if (item.getfBillstatus() != 40L || item.getfBillstatus() == 50L) {
  3684. return AjaxResult.error("库存明细中存在审核中数据,无法再次提交请核");
  3685. }
  3686. }
  3687. boolean isApprove;
  3688. long itemStatus = 6L;
  3689. Long actId = 0L;
  3690. String key = null;
  3691. if (billsType.equals("SJRKITEM")) {
  3692. actId = 170L;
  3693. } else if (billsType.equals("SJCKITEM")) {
  3694. actId = 180L;
  3695. }
  3696. SysConfig sysConfig = queryWarehouseConfig(billsType);
  3697. if (StringUtils.isNull(sysConfig)) {
  3698. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3699. return AjaxResult.error("系统参数异常,未找到开启审批流参数");
  3700. }
  3701. if ("0".equals(sysConfig.getConfigValue())) {
  3702. isApprove = true;
  3703. itemStatus = 4L;
  3704. tWarehouseBills.setfItemstatus(itemStatus);
  3705. tWarehouseBills.setUpdateTime(new Date());
  3706. tWarehouseBills.setUpdateBy(SecurityUtils.getUsername());
  3707. } else {
  3708. tWarehouseBills.setfItemstatus(itemStatus);
  3709. tWarehouseBills.setUpdateTime(new Date());
  3710. tWarehouseBills.setUpdateBy(SecurityUtils.getUsername());
  3711. }
  3712. tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills);
  3713. for (TWarehousebillsitems item : warehousebillsitemsList) {
  3714. item.setUpdateTime(new Date());
  3715. item.setUpdateBy(SecurityUtils.getUsername());
  3716. item.setfItemstatus(itemStatus);
  3717. tWarehousebillsitemsMapper.updateTWarehousebillsitems(item);
  3718. }
  3719. if ("0".equals(sysConfig.getConfigValue())) {
  3720. AuditItems auditItems = new AuditItems();
  3721. auditItems.setLevelId(0L);
  3722. auditItems.setBillId(tWarehouseBills.getfId());
  3723. auditItems.setActId(actId);//暂定
  3724. auditItems.setIffinalItem("F");
  3725. auditItems.setBillNo(tWarehouseBills.getfBillno());
  3726. // 存储委托方(货权方)
  3727. auditItems.setRefno1(tWarehouseBills.getfCorpid() + "");
  3728. // 存储业务类型(业务类型)
  3729. auditItems.setRefno2(billsType);
  3730. // 存储提单号(提单号)
  3731. auditItems.setRefno3(tWarehouseBills.getfMblno());
  3732. auditItems.setSendUserId(loginUser.getUser().getUserId());
  3733. auditItems.setSendName(SecurityUtils.getUsername());
  3734. auditItems.setSendTime(new Date());
  3735. auditItems.setAuditUserId(loginUser.getUser().getUserId());
  3736. auditItems.setAuditItem(new Date());
  3737. auditItems.setAuditOpTime(new Date());
  3738. auditItems.setAuditMsg("提交");
  3739. auditItems.setAuditStatus("O");
  3740. auditItems.setFidStatus("f_itemstatus");
  3741. auditItems.setTimes(tWarehouseBills.getfTimes());
  3742. AjaxResult approvalFlow = auditItemsService.createApprovalFlow(auditItems);
  3743. // Long code = Long.valueOf(String.valueOf(approvalFlow.get("code"))).longValue();
  3744. String code = approvalFlow.get("code").toString();
  3745. // Long code = Long.valueOf(String.valueOf(ajaxResult.get("code"))).longValue();
  3746. if ("500".equals(code)) {
  3747. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3748. }
  3749. return approvalFlow;
  3750. }
  3751. return AjaxResult.success();
  3752. }
  3753. /**
  3754. * 出库确认、调拨确认、货转确认
  3755. *
  3756. * @param warehouseBills
  3757. * @param warehousebillsitems
  3758. * @param loginUser
  3759. * @param billsType
  3760. * @return
  3761. */
  3762. @Override
  3763. @Transactional
  3764. public AjaxResult updateCredit(String warehouseBills, String warehousebillsitems, String tEnclosure, String warehousebillsfeesCr,
  3765. String warehousebillsfeesDr, LoginUser loginUser, String tCntr, String billsType) {
  3766. Long fPid = null;
  3767. Map<String, Object> map = new HashMap<>();
  3768. TWarehouseBills tWarehouseBills = JSONArray.parseObject(warehouseBills, TWarehouseBills.class);
  3769. tWarehouseBills.setfItemsStatus(4L);
  3770. Long timestamp = DateUtils.getTimestamp(new Date());
  3771. tWarehouseBills.setfDateChanged(timestamp.toString() + (int) (Math.random() * 900) + 100);
  3772. tWarehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  3773. tWarehouseBills.setUpdateTime(new Date());
  3774. fPid = tWarehouseBills.getfId();
  3775. tEnclosureMapper.deleteByFPid(fPid);
  3776. tWarehousebillsfeesMapper.deleteByFPid(fPid);
  3777. tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(fPid);
  3778. JSONArray warehouseJSON = JSONArray.parseArray(warehousebillsitems);
  3779. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  3780. int i = 1;
  3781. List<TFees> feesList = new ArrayList<>();
  3782. List<TWarehousebillsfees> warehousebillsfees = new ArrayList<>();
  3783. // 判断原贸易与新贸易是否一致,如果一致则抛出异常
  3784. if (Objects.equals(tWarehouseBills.getfTrademodeid(), tWarehouseBills.getfNewTrademodeid())) {
  3785. throw new WarehouseException("贸易方式不得与原贸易方式一致");
  3786. }
  3787. for (TWarehousebillsitems wbItem : warehousebillsitemsList) {
  3788. // 如果业务时间超出当前时间则不允许
  3789. if (wbItem.getfBsdate().after(new Date())) {
  3790. throw new WarehouseException("业务日期不得超出当前日期");
  3791. }
  3792. // 查询是否可以修改
  3793. TWarehousebillsitems tWarehousebillsitems = tWarehousebillsitemsMapper.selectTWarehousebillsitemsById(wbItem.getfId());
  3794. if (tWarehousebillsitems.getfBillstatus() == 40) {
  3795. throw new WarehouseException("更新库存明细第" + i + "行失败,已处理,请刷新网页");
  3796. }
  3797. if (StringUtils.isNull(wbItem.getfWarehouselocid())) {
  3798. throw new WarehouseException("库存明细第" + i + "行,未找到仓库信息");
  3799. }
  3800. TGoods goods = tGoodsMapper.selectTGoodsById(wbItem.getfGoodsid());
  3801. // 如果需要判断箱号则需要校验必填
  3802. if (WarehouseTypeEnum.JUDGE_BOX.getType().equals(goods.getIfCntrno()) && StringUtils.isNull(wbItem.getfCntrno())) {
  3803. throw new WarehouseException("仓库明细第" + i + "行未找到箱号");
  3804. }
  3805. wbItem.setfBilltype(billsType);
  3806. // 查询总账是否存在
  3807. TWhgenleg tWhgenle = queryWhgenlegService.stockWhgenleg(tWarehouseBills, wbItem, goods.getIfCntrno(), WarehouseTypeEnum.CONFIRM_OPERATION.getType());
  3808. // 查询总账是否存在
  3809. if (Objects.isNull(tWhgenle)) {
  3810. throw new WarehouseException("库存明细第" + i + "行找不到库存信息");
  3811. }
  3812. if (wbItem.getfBsdate().before(tWhgenle.getfChargedate())) {
  3813. throw new WarehouseException("业务日期不得超出库存总帐日期");
  3814. }
  3815. // 入库数特殊不判断入账
  3816. if (WarehouseTypeEnum.SJCK.getType().equals(billsType)) { // 出库 查询
  3817. if (StringUtils.isNull(tWarehouseBills.getfBsdate()) || StringUtils.isNull(wbItem.getfChargedate())) {
  3818. throw new WarehouseException("库存明细第" + i + "行请检查日期,操作终止");
  3819. }
  3820. if (StringUtils.isNull(tWarehouseBills.getfCorpid())) {
  3821. throw new WarehouseException("库存明细第" + i + "行请检查客户信息,操作终止");
  3822. }
  3823. //校验计费日期是等于库存总帐计费日,如果不相等则报错
  3824. checkWhgenleg(wbItem, tWhgenle);
  3825. // 出库减件数数据
  3826. Long fQty = wbItem.getfQty();
  3827. if (fQty==0) {
  3828. // 出库毛重数据
  3829. BigDecimal fGrossweight = wbItem.getfGrossweight();
  3830. // 出库净重数据
  3831. BigDecimal fNetweight = wbItem.getfNetweight();
  3832. // 上期件数减去出库件数
  3833. tWhgenle.setfPreqty(tWhgenle.getfPreqty()-fQty);
  3834. // 上期毛重减去当前出库毛重数据
  3835. tWhgenle.setfPregrossweight(tWhgenle.getfPregrossweight().subtract(fGrossweight));
  3836. // 上期净重减去当前出库净重数据
  3837. tWhgenle.setfPrenetweight(tWhgenle.getfPrenetweight().subtract(fNetweight));
  3838. }
  3839. // 1、 库存 < 调拨件数 提示库存不足
  3840. judgeItemQty(tWhgenle, wbItem, i);
  3841. // 更新库存总账
  3842. updateTWhgenlegData(wbItem, tWhgenle.getfId(), billsType);
  3843. wbItem.setfBillstatus(40L);
  3844. } else if (WarehouseTypeEnum.CKDB.getType().equals(billsType) || WarehouseTypeEnum.HWTG.getType().equals(billsType)) { // 调拨查询
  3845. //校验计费日期是等于库存总帐计费日,如果不相等则报错
  3846. checkWhgenleg(wbItem, tWhgenle);
  3847. if (!Objects.equals(wbItem.getfWarehouselocid(), wbItem.getfTransferWarehouselocid())) {
  3848. // 1、 库存 < 调拨件数 提示库存不足
  3849. judgeItemQty(tWhgenle, wbItem, i);
  3850. // 2、 库存足够 先 进行出库操作
  3851. updateTWhgenlegData(wbItem, tWhgenle.getfId(), WarehouseTypeEnum.SJCK.getType());
  3852. // 3、 进行入库操作 查询是否存在库存
  3853. TWhgenleg tWhgenle1 = queryWhgenlegService.secondStockWhgenleg(tWarehouseBills, wbItem, goods.getIfCntrno(), WarehouseTypeEnum.NOT_JUDGE_BOX.getType());
  3854. if (StringUtils.isNull(tWhgenle1)) { // 5、 不存在 进行新增库存
  3855. instalTWhgenleg(tWarehouseBills, wbItem);
  3856. } else { // 4、 存在 进行跟新库存
  3857. updateTWhgenlegData(wbItem, tWhgenle1.getfId(), WarehouseTypeEnum.SJRK.getType());
  3858. }
  3859. }
  3860. wbItem.setfBillstatus(40L);
  3861. } else if (WarehouseTypeEnum.HQZY.getType().equals(billsType)) { // 货转
  3862. wbItem.setfBillstatus(6L);
  3863. wbItem.setfBillingway(tWarehouseBills.getfBillingway());
  3864. //校验计费日期是等于库存总帐计费日,如果不相等则报错
  3865. checkWhgenleg(wbItem, tWhgenle);
  3866. // 1、 库存 < 调拨件数 提示库存不足
  3867. judgeItemQty(tWhgenle, wbItem, i);
  3868. updateTWhgenlegData(wbItem, tWhgenle.getfId(), WarehouseTypeEnum.SJCK.getType());
  3869. long corpId = tWarehouseBills.getfCorpid();
  3870. tWarehouseBills.setfCorpid(tWarehouseBills.getfTocorpid());
  3871. // 3、 进行入库操作 查询是否存在库存
  3872. TWhgenleg tWhgenle1 = queryWhgenlegService.secondStockWhgenleg(tWarehouseBills, wbItem, goods.getIfCntrno(), WarehouseTypeEnum.NOT_JUDGE_BOX.getType());
  3873. if (StringUtils.isNull(tWhgenle1)) { // 5、 不存在 进行新增库存
  3874. instalTWhgenleg(tWarehouseBills, wbItem);
  3875. } else { // 4、 存在 进行跟新库存
  3876. updateTWhgenlegData(wbItem, tWhgenle1.getfId(), WarehouseTypeEnum.SJRK.getType());
  3877. }
  3878. tWarehouseBills.setfCorpid(corpId);
  3879. }
  3880. i++;
  3881. int num = 0;
  3882. wbItem.setfPid(fPid);
  3883. wbItem.setfBillno(tWarehouseBills.getfBillno());
  3884. if (StringUtils.isNotNull(wbItem.getfId())) {
  3885. wbItem.setUpdateBy(loginUser.getUser().getUserName());
  3886. wbItem.setUpdateTime(new Date());
  3887. num = tWarehousebillsitemsMapper.updateTWarehousebillsitems(wbItem);
  3888. if (WarehouseTypeEnum.SJCK.getType().equals(billsType)) {
  3889. // 添加状态log
  3890. insertTWarehousebillsLog(wbItem, 40L);
  3891. }
  3892. } else {
  3893. wbItem.setCreateTime(new Date());
  3894. wbItem.setCreateBy(loginUser.getUsername());
  3895. num = tWarehousebillsitemsMapper.insertTWarehousebillsitems(wbItem);
  3896. }
  3897. if (num <= 0) {
  3898. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3899. return AjaxResult.error("库存明细更新失败");
  3900. }
  3901. }
  3902. // 箱型数据
  3903. if (StringUtils.isNotNull(tCntr) && !"[]".equals(tCntr)) {
  3904. JSONArray jsonDrArray = JSONArray.parseArray(tCntr);
  3905. List<TWarehousebillsCntr> tWarehousebillsCntrs = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsCntr.class);
  3906. int line = 0;
  3907. for (TWarehousebillsCntr cntr : tWarehousebillsCntrs) {
  3908. line++;
  3909. if (StringUtils.isNull(cntr.getfCntrid()) || StringUtils.isNull(cntr.getfCntrcount()) || cntr.getfCntrcount() == 0) {
  3910. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3911. return AjaxResult.error("箱型数据第" + line + "行数据缺少必填数据");
  3912. }
  3913. cntr.setfPid(tWarehouseBills.getfId());
  3914. cntr.setfGoodsid(0L);
  3915. cntr.setfPackageid("0");
  3916. cntr.setfCntrweight(new BigDecimal(0));
  3917. cntr.setCreateBy(loginUser.getUser().getUserName());
  3918. cntr.setCreateTime(new Date());
  3919. tWarehousebillsCntrMapper.insertTWarehousebillsCntr(cntr);
  3920. }
  3921. }
  3922. // 附件添加
  3923. if (StringUtils.isNotEmpty(tEnclosure) && !"[]".equals(tEnclosure)) {
  3924. JSONArray jsonDrArray = JSONArray.parseArray(tEnclosure);
  3925. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  3926. for (TEnclosure enclosure : tEnclosureList) {
  3927. enclosure.setfPid(tWarehouseBills.getfId());
  3928. enclosure.setCreateBy(loginUser.getUser().getUserName());
  3929. enclosure.setCreateTime(new Date());
  3930. tEnclosureMapper.insertTEnclosure(enclosure);
  3931. }
  3932. }
  3933. // 收款明细添加
  3934. if (StringUtils.isNotEmpty(warehousebillsfeesDr) && !"[]".equals(warehousebillsfeesDr)) {
  3935. JSONArray jsonDrArray = JSONArray.parseArray(warehousebillsfeesDr);
  3936. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  3937. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  3938. wbDr.setfPid(tWarehouseBills.getfId());
  3939. wbDr.setfDc("D");
  3940. wbDr.setCreateBy(loginUser.getUser().getUserName());
  3941. wbDr.setCreateTime(new Date());
  3942. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  3943. }
  3944. }
  3945. // 付款明细添加
  3946. if (StringUtils.isNotNull(warehousebillsfeesCr) && !"[]".equals(warehousebillsfeesCr)) {
  3947. JSONArray jsonCrArray = JSONArray.parseArray(warehousebillsfeesCr);
  3948. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  3949. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  3950. wbCr.setfPid(tWarehouseBills.getfId());
  3951. wbCr.setfDc("C");
  3952. wbCr.setCreateBy(loginUser.getUser().getUserName());
  3953. wbCr.setCreateTime(new Date());
  3954. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  3955. }
  3956. }
  3957. //从表更新完再查从表信息更新主表
  3958. TWarehousebillsitems itemInFo = tWarehousebillsitemsMapper.selectItemQtyByFPid(tWarehouseBills.getfId());
  3959. tWarehouseBills.setfQty(itemInFo.getfQty());
  3960. tWarehouseBills.setfNetweight(itemInFo.getfNetweight());
  3961. tWarehouseBills.setfGrossweight(itemInFo.getfGrossweight());
  3962. tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills);
  3963. map.put("fPid", fPid);
  3964. map.put("warehouse", tWarehouseBills);
  3965. map.put("warehouseItem", warehousebillsitemsList);
  3966. map.put("fees", feesList);
  3967. map.put("warehousebillsfees", warehousebillsfees);
  3968. // 添加成功 主键返回 前台
  3969. return AjaxResult.success("成功", map);
  3970. }
  3971. /**
  3972. * 判断数量、毛重、净重是否超出库存总帐
  3973. *
  3974. * @param whgenleg 库存总账
  3975. * @param wbItem 明细
  3976. * @param line 行号
  3977. */
  3978. private void judgeItemQty(TWhgenleg whgenleg, TWarehousebillsitems wbItem, int line) {
  3979. // 库存 < 出库件数
  3980. if (whgenleg.getfQtyblc() < wbItem.getfQty()) {
  3981. throw new WarehouseException("库存明细第" + line + "行库存数量不足");
  3982. }
  3983. // 库存 < 出库净重
  3984. if (whgenleg.getfNetweightblc().compareTo(wbItem.getfNetweight()) < 0) {
  3985. throw new WarehouseException("库存明细第" + line + "行库存净重不足");
  3986. }
  3987. // 库存 < 出库毛重
  3988. if (whgenleg.getfGrossweightblc().compareTo(wbItem.getfGrossweight()) < 0) {
  3989. throw new WarehouseException("库存明细第" + line + "行库存毛重不足");
  3990. }
  3991. }
  3992. /**
  3993. * 校验计费日期是等于库存总帐计费日,如果不相等则报错
  3994. *
  3995. * @param wbItem
  3996. * @param tWhgenle
  3997. */
  3998. private void checkWhgenleg(TWarehousebillsitems wbItem, TWhgenleg tWhgenle) {
  3999. // 如果仓储费计费日期超出 库存总帐的计费日期不相等则报异常
  4000. if (wbItem.getfChargedate().before(tWhgenle.getfChargedate())) {
  4001. throw new WarehouseException("仓储费计费日期与库存总帐计费日期不相符");
  4002. }
  4003. }
  4004. /**
  4005. * 打印作业单
  4006. *
  4007. * @param warehouseBills
  4008. * @param warehousebillsitems
  4009. * @param tEnclosure
  4010. * @param tWarehousebillsfeesCr
  4011. * @param tWarehousebillsfeesDr
  4012. * @param loginUser
  4013. * @param status
  4014. * @param billtystatus
  4015. * @return
  4016. */
  4017. @Override
  4018. @Transactional
  4019. public AjaxResult waitWarehousing(String warehouseBills, String warehousebillsitems,
  4020. String tEnclosure, String tWarehousebillsfeesCr, String tWarehousebillsfeesDr,
  4021. LoginUser loginUser, String tCntr, Long status, String billtystatus) {
  4022. Map<String, Object> map = new HashMap<>();
  4023. List<TWarehousebillsitems> mapList = new ArrayList<>();
  4024. if (StringUtils.isNull(warehouseBills) || "[]".equals(warehouseBills)) {
  4025. return AjaxResult.error("未找到主表信息");
  4026. }
  4027. if (StringUtils.isNull(warehousebillsitems) || "[]".equals(warehousebillsitems)) {
  4028. return AjaxResult.error("未找到入账信息");
  4029. }
  4030. TWarehouseBills tWarehouseBills = JSONArray.parseObject(warehouseBills, TWarehouseBills.class);
  4031. if (status == 20) {
  4032. tWarehouseBills.setfItemsStatus(2L);
  4033. } else if (status == 30) {
  4034. tWarehouseBills.setfItemsStatus(3L);
  4035. }
  4036. Long timestamp = DateUtils.getTimestamp(new Date());
  4037. tWarehouseBills.setfDateChanged(timestamp.toString() + (int) (Math.random() * 900) + 100);
  4038. tWarehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  4039. tWarehouseBills.setUpdateTime(new Date());
  4040. TWarehousebillsitems itemInFo = tWarehousebillsitemsMapper.selectItemQtyByFPid(tWarehouseBills.getfId());
  4041. tWarehouseBills.setfQty(itemInFo.getfQty());
  4042. tWarehouseBills.setfNetweight(itemInFo.getfNetweight());
  4043. tWarehouseBills.setfGrossweight(itemInFo.getfGrossweight());
  4044. tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills);
  4045. tEnclosureMapper.deleteByFPid(tWarehouseBills.getfId());
  4046. tWarehousebillsfeesMapper.deleteByFPid(tWarehouseBills.getfId());
  4047. tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(tWarehouseBills.getfId());
  4048. JSONArray warehouseJSON = JSONArray.parseArray(warehousebillsitems);
  4049. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  4050. /**
  4051. * 1、 查询回收表是否有可用数据
  4052. * 2、 流水号生成 --> 打印一次 只记录一个号
  4053. */
  4054. Date time = new Date();
  4055. String serialNumber = null;
  4056. if (status == 20) {
  4057. if ("RK".equals(billtystatus)) {
  4058. serialNumber = billnoSerialServiceImpl.getSerialNumber("RK", time);
  4059. } else if ("CK".equals(billtystatus)) { //生成 出库 流水号
  4060. serialNumber = billnoSerialServiceImpl.getSerialNumber("CK", time);
  4061. } else if ("DB".equals(billtystatus)) { //生成 出库 流水号
  4062. serialNumber = billnoSerialServiceImpl.getSerialNumber("DB", time);
  4063. } else if ("TG".equals(billtystatus)) { //生成 出库 流水号
  4064. serialNumber = billnoSerialServiceImpl.getSerialNumber("TG", time);
  4065. }
  4066. }
  4067. int i = 1;
  4068. for (TWarehousebillsitems item : warehousebillsitemsList) {
  4069. // 查询是否可以修改
  4070. TWarehousebillsitems tWarehousebillsitems = tWarehousebillsitemsMapper.selectTWarehousebillsitemsById(item.getfId());
  4071. if (tWarehousebillsitems.getfBillstatus() == 30) {
  4072. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  4073. return AjaxResult.error("更新库存明细第" + i + "行失败,已处理,请刷新网页");
  4074. }
  4075. if (item.getfBillstatus() < 30L) {
  4076. if (item.getfSerialNumber() == null || item.getfSerialNumber().equals("")) {
  4077. item.setfSerialNumber(serialNumber);
  4078. }
  4079. item.setfBillstatus(status);
  4080. item.setUpdateTime(new Date());
  4081. item.setUpdateBy(loginUser.getUser().getUserName());
  4082. int num = tWarehousebillsitemsMapper.updateTWarehousebillsitems(item);
  4083. // 添加状态log
  4084. insertTWarehousebillsLog(item, status);
  4085. if (num <= 0) {
  4086. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  4087. return AjaxResult.error("更新库存明细失败");
  4088. }
  4089. }
  4090. mapList.add(item);
  4091. i++;
  4092. }
  4093. // 箱型数据
  4094. if (StringUtils.isNotNull(tCntr) && !"[]".equals(tCntr)) {
  4095. JSONArray jsonDrArray = JSONArray.parseArray(tCntr);
  4096. List<TWarehousebillsCntr> tWarehousebillsCntrs = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsCntr.class);
  4097. int line = 0;
  4098. for (TWarehousebillsCntr cntr : tWarehousebillsCntrs) {
  4099. line++;
  4100. if (StringUtils.isNull(cntr.getfCntrid()) || StringUtils.isNull(cntr.getfCntrcount()) || cntr.getfCntrcount() == 0) {
  4101. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  4102. return AjaxResult.error("箱型数据第" + line + "行数据缺少必填数据");
  4103. }
  4104. cntr.setfPid(tWarehouseBills.getfId());
  4105. cntr.setfGoodsid(0L);
  4106. cntr.setfPackageid("0");
  4107. cntr.setfCntrweight(new BigDecimal(0));
  4108. cntr.setCreateBy(loginUser.getUser().getUserName());
  4109. cntr.setCreateTime(new Date());
  4110. tWarehousebillsCntrMapper.insertTWarehousebillsCntr(cntr);
  4111. }
  4112. }
  4113. // 附件添加
  4114. if (StringUtils.isNotEmpty(tEnclosure) && !"[]".equals(tEnclosure)) {
  4115. JSONArray jsonDrArray = JSONArray.parseArray(tEnclosure);
  4116. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  4117. for (TEnclosure enclosure : tEnclosureList) {
  4118. enclosure.setfPid(tWarehouseBills.getfId());
  4119. enclosure.setCreateBy(loginUser.getUser().getUserName());
  4120. enclosure.setCreateTime(new Date());
  4121. tEnclosureMapper.insertTEnclosure(enclosure);
  4122. }
  4123. }
  4124. // 收款明细添加
  4125. if (StringUtils.isNotEmpty(tWarehousebillsfeesDr) && !"[]".equals(tWarehousebillsfeesDr)) {
  4126. JSONArray jsonDrArray = JSONArray.parseArray(tWarehousebillsfeesDr);
  4127. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  4128. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  4129. wbDr.setfPid(tWarehouseBills.getfId());
  4130. wbDr.setfDc("D");
  4131. wbDr.setCreateBy(loginUser.getUser().getUserName());
  4132. wbDr.setCreateTime(new Date());
  4133. if (tWarehouseBills.getfBsdate() != null && !tWarehouseBills.getfBsdate().equals("")) {
  4134. wbDr.setfBsdate(tWarehouseBills.getfBsdate());
  4135. }
  4136. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  4137. }
  4138. }
  4139. // 付款明细添加
  4140. if (StringUtils.isNotNull(tWarehousebillsfeesCr) && !"[]".equals(tWarehousebillsfeesCr)) {
  4141. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesCr);
  4142. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  4143. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  4144. wbCr.setfPid(tWarehouseBills.getfId());
  4145. wbCr.setfDc("C");
  4146. wbCr.setCreateBy(loginUser.getUser().getUserName());
  4147. wbCr.setCreateTime(new Date());
  4148. if (tWarehouseBills.getfBsdate() != null && !tWarehouseBills.getfBsdate().equals("")) {
  4149. wbCr.setfBsdate(tWarehouseBills.getfBsdate());
  4150. }
  4151. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  4152. }
  4153. }
  4154. // 添加成功 返回 前台
  4155. TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems();
  4156. tWarehousebillsitems.setfPid(tWarehouseBills.getfId());
  4157. List<TWarehousebillsitems> mapList1 = tWarehousebillsitemsMapper.selectTWarehousebillsitemsList(tWarehousebillsitems);
  4158. map.put("fDateChanged", tWarehouseBills.getfDateChanged());
  4159. map.put("warehousebillsitems", mapList);
  4160. map.put("warehousebillsitems1", mapList1);
  4161. return AjaxResult.success("成功", map);
  4162. }
  4163. /**
  4164. * 生成计算仓储费信息
  4165. *
  4166. * @param warehouseBills
  4167. * @param loginUser
  4168. * @param cangKey
  4169. * @return
  4170. */
  4171. public StorageFeeCalculationResultVO getWarehouseItems(TWarehouseBills warehouseBills, List<CalculateStorageFeesInfoVO> feesInfoVOList, LoginUser loginUser, String cangKey) {
  4172. StorageFeeCalculationResultVO resultVO = new StorageFeeCalculationResultVO();
  4173. BigDecimal sumAmt = BigDecimal.ZERO;
  4174. List<TWarehousebillsfees> itemsList = new ArrayList<>();
  4175. // 获取税率
  4176. List<SysDictData> taxRate = sysDictDataMapper.selectDictDataByType("tax_rate");
  4177. for (CalculateStorageFeesInfoVO item : feesInfoVOList) {
  4178. // 交以计算明细计费方式必填
  4179. if (StringUtils.isNull(item.getFBillingway())) {
  4180. throw new WarehouseException("单号:" + item.getFBillno() + ",业务日期:" + item.getFBsdate() + "未找到库存总账的计费单位,请确认");
  4181. }
  4182. CalculateStorageFeesDTO storageFeesDto = new CalculateStorageFeesDTO();
  4183. storageFeesDto.setfCorpid(warehouseBills.getfCorpid());
  4184. storageFeesDto.setCangKey(cangKey);
  4185. storageFeesDto.setWarehouseId(Long.parseLong(String.valueOf(item.getWarehouse())));
  4186. // 把商品类型添加“”方便后续查询
  4187. String goodsTypeids = item.getFTypeid();
  4188. if (StringUtils.isNotEmpty(goodsTypeids)) {
  4189. goodsTypeids = "\"" + goodsTypeids + "\"";
  4190. }
  4191. storageFeesDto.setfGoodsid(goodsTypeids);
  4192. long fId = item.getFId();
  4193. // 累计计费天数 如果计费日期与原始入库日期一直代表没有计算过
  4194. if (Objects.equals(item.getFChargedate().getTime(), item.getFOriginalbilldate().getTime())) {
  4195. storageFeesDto.setEarlySumDays(0L);
  4196. } else {
  4197. storageFeesDto.setEarlySumDays(DateUtils.getDateDay(item.getFChargedate(), item.getFOriginalbilldate()) - 1);
  4198. }
  4199. // 库存天数
  4200. long fInventoryDays;
  4201. // 要计费天数
  4202. long fBillingDays;
  4203. if (WarehouseTypeEnum.SJCK.getType().equals(item.getFBilltype())) {
  4204. // 出库在库天数:业务日期-计费日期
  4205. // 出库计费天数:出库在库天数
  4206. fInventoryDays = DateUtils.getDateDay(item.getFBsdate(), item.getFOriginalbilldate());
  4207. fBillingDays = DateUtils.getDateDay(item.getFBsdate(), item.getFChargedate());
  4208. storageFeesDto.setStartTime(item.getFChargedate());
  4209. storageFeesDto.setEndTime(item.getFBsdate());
  4210. } else if (WarehouseTypeEnum.HQZY.getType().equals(item.getFBilltype())) {
  4211. // 货转在库天数:业务日期-计费日期
  4212. // 货转计费天数:出库在库天数
  4213. fInventoryDays = DateUtils.getDateDay(item.getFBsdate(), item.getFOriginalbilldate());
  4214. fBillingDays = DateUtils.getDateDay(item.getFBsdate(), item.getFChargedate());
  4215. storageFeesDto.setStartTime(item.getFChargedate());
  4216. storageFeesDto.setEndTime(item.getFBsdate());
  4217. } else {
  4218. // 库存总帐在库天数:计费截止日期-原始入库日期
  4219. // 库存总帐计费天数:计费截止日期-计费日期
  4220. fInventoryDays = DateUtils.getDateDay(warehouseBills.getfBillingDeadline(), item.getFOriginalbilldate());
  4221. fBillingDays = DateUtils.getDateDay(warehouseBills.getfBillingDeadline(), item.getFChargedate());
  4222. storageFeesDto.setStartTime(item.getFChargedate());
  4223. storageFeesDto.setEndTime(warehouseBills.getfBillingDeadline());
  4224. }
  4225. if (fBillingDays <= 0) {
  4226. continue;
  4227. }
  4228. storageFeesDto.setDays(fBillingDays);
  4229. storageFeesDto.setfMblno(item.getFMblno());
  4230. // 赋值要计算的数量单位
  4231. storageFeesDto.setfQty(new BigDecimal(item.getFQty()));
  4232. storageFeesDto.setfVolumn(item.getFVolumn());
  4233. storageFeesDto.setfNetweight(item.getFNetweight());
  4234. storageFeesDto.setfGrossweight(item.getFGrossweight());
  4235. // 仓储费协议计算
  4236. StorageFeeCalculationResultVO feeCalculationResultVO = tWarehouseAgreementService.getCarryingCost(storageFeesDto);
  4237. if (Objects.isNull(feeCalculationResultVO)) {
  4238. continue;
  4239. }
  4240. String mblno = "";
  4241. if (StringUtils.isNotNull(item.getFMblno())) {
  4242. mblno = item.getFMblno();
  4243. }
  4244. resultVO.setFeeId(feeCalculationResultVO.getFeeId());
  4245. sumAmt = sumAmt.add(feeCalculationResultVO.getAmt());
  4246. TWarehousebillsfees fees = new TWarehousebillsfees();
  4247. fees.setfFeeid(feeCalculationResultVO.getFeeId());
  4248. fees.setfDc("D");
  4249. fees.setfAmt(feeCalculationResultVO.getAmt());
  4250. fees.setSrcId(fId);
  4251. fees.setfMblno(mblno);
  4252. fees.setRemark(feeCalculationResultVO.getRemark());
  4253. fees.setfFeeunitid(2L);
  4254. fees.setfAmount(feeCalculationResultVO.getAmt());
  4255. fees.setfBillstatus(2L);
  4256. fees.setfCurrency("RMB");
  4257. fees.setfBsdate(item.getFBsdate());
  4258. fees.setfBillingQty(feeCalculationResultVO.getQty());
  4259. fees.setfUnitprice(feeCalculationResultVO.getAmt());
  4260. fees.setfBilltype(item.getFBilltype());
  4261. fees.setCreateTime(new Date());
  4262. fees.setfBillingDays(fBillingDays);
  4263. fees.setfQty(new BigDecimal(1));
  4264. fees.setfPid(warehouseBills.getfId());
  4265. fees.setfInventoryDays(fInventoryDays);
  4266. fees.setfExrate(new BigDecimal(1));
  4267. fees.setPriceDateRemarks(feeCalculationResultVO.getBillingInterval());
  4268. fees.setfCorpid(warehouseBills.getfCorpid());
  4269. fees.setfMarks(item.getFMarks());
  4270. fees.setSrcBillNo(item.getFBillno());
  4271. fees.setCreateBy(loginUser.getUser().getUserName());
  4272. fees.setfWarehouseid(storageFeesDto.getWarehouseId());
  4273. fees.setfProductName(item.getGoodsName());
  4274. if (WarehouseTypeEnum.SJCK.getType().equals(item.getFBilltype()) || WarehouseTypeEnum.HQZY.getType().equals(item.getFBilltype())) {
  4275. fees.setfBillingDeadline(item.getFBsdate());
  4276. } else {
  4277. fees.setfBillingDeadline(warehouseBills.getfBillingDeadline());
  4278. }
  4279. fees.setfChargedate(item.getFChargedate());
  4280. fees.setfTaxrate(new BigDecimal(taxRate.get(0).getDictValue()));
  4281. fees.setfOriginalbilldate(item.getFOriginalbilldate());
  4282. fees.setfBillingway(feeCalculationResultVO.getUnit());
  4283. tWarehousebillsfeesMapper.insertTWarehousebillsfees(fees);
  4284. itemsList.add(fees);
  4285. }
  4286. resultVO.setAmt(sumAmt);
  4287. resultVO.setItemFeesList(itemsList);
  4288. return resultVO;
  4289. }
  4290. /**
  4291. * 新增库存费计算
  4292. *
  4293. * @param tWarehouseBills 主表的查询条件
  4294. * @param loginUser 登录用户
  4295. * @param billsType 状态
  4296. * @return 结果
  4297. */
  4298. @Override
  4299. @Transactional
  4300. public AjaxResult calculateStorageFees(TWarehouseBills tWarehouseBills, LoginUser loginUser, String billsType) {
  4301. if (StringUtils.isNull(tWarehouseBills.getfCorpid())) {
  4302. return AjaxResult.error("请选择客户信息");
  4303. }
  4304. tWarehouseBills.setfBillingDeadline(DateUtils.dateConversionMax(tWarehouseBills.getfBillingDeadline()));
  4305. long fPid;
  4306. if (StringUtils.isNull(tWarehouseBills.getfId())) {
  4307. // 生成流水号
  4308. Date time = new Date();
  4309. String billNo = billnoSerialServiceImpl.getSerialNumber(WarehouseTypeEnum.JSCCF.getType(), time);
  4310. tWarehouseBills.setfBillno(billNo);
  4311. if (StringUtils.isNull(tWarehouseBills.getfBillstatus())) {
  4312. tWarehouseBills.setfBillstatus(2L);
  4313. }
  4314. tWarehouseBills.setfBilltype(billsType);
  4315. tWarehouseBills.setfBsdeptid(loginUser.getUser().getDeptId());
  4316. tWarehouseBills.setCreateBy(loginUser.getUser().getUserName());
  4317. tWarehouseBills.setCreateTime(new Date());
  4318. tWarehouseBillsMapper.insertTWarehousebills(tWarehouseBills);
  4319. fPid = tWarehouseBills.getfId();
  4320. } else {
  4321. tWarehousebillsfeesMapper.deleteByFPid(tWarehouseBills.getfId());
  4322. tWarehousebillsitemsMapper.deleteByFPid(tWarehouseBills.getfId());
  4323. tWarehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  4324. tWarehouseBills.setUpdateTime(new Date());
  4325. tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills);
  4326. fPid = tWarehouseBills.getfId();
  4327. }
  4328. // 计划物资明细
  4329. List<TWarehousebillsfees> itemsList = new ArrayList<>();
  4330. StorageFeeCalculationResultVO calculationResultVO = new StorageFeeCalculationResultVO();
  4331. //调一次公共方法,获取字符类型的true或者false传
  4332. String cangKey = sysConfigServiceImpl.selectConfigByKey("agreement.warehouse");
  4333. // 查出所有仓库 给后续匹配仓库名字使用
  4334. List<TWarehouse> warehouseList = tWarehouseMapper.selectTWarehouseList(new TWarehouse());
  4335. // 查询 出库 货转的库存明细
  4336. tWarehouseBills.setfId(null);
  4337. List<CalculateStorageFeesInfoVO> feesInfoVOList = tWarehousebillsitemsMapper.selectStorageFeeItemList1(tWarehouseBills);
  4338. tWarehouseBills.setfId(fPid);
  4339. if (CollectionUtils.isNotEmpty(feesInfoVOList)) {
  4340. StorageFeeCalculationResultVO resultVO = getWarehouseItems(tWarehouseBills, feesInfoVOList, loginUser, cangKey);
  4341. if (CollectionUtils.isNotEmpty(resultVO.getItemFeesList())) {
  4342. // 给仓库信息赋值
  4343. resultVO.getItemFeesList().forEach(li -> {
  4344. TWarehouse tWarehouse = warehouseList.stream().filter(warehouse -> Objects.equals(warehouse.getfId(), li.getfWarehouseid()))
  4345. .findFirst().orElseThrow(() -> new WarehouseException("找不到仓库信息"));
  4346. li.setWarehouseName(tWarehouse.getfName());
  4347. });
  4348. itemsList = resultVO.getItemFeesList();
  4349. }
  4350. }
  4351. List<CalculateStorageFeesInfoVO> whgenlegfeesInfoVOList = tWhgenlegMapper.selectStorageFeeItemList1(tWarehouseBills);
  4352. if (CollectionUtils.isNotEmpty(whgenlegfeesInfoVOList)) {
  4353. // 如果是计算之前日期的库存总帐则需要使用当时日期的准确数量
  4354. if (!tWarehouseBills.getfBillingDeadline().after(new Date())) {
  4355. updateWhgenlegs1(tWarehouseBills, whgenlegfeesInfoVOList);
  4356. }
  4357. StorageFeeCalculationResultVO resultVO = getWarehouseItems(tWarehouseBills, whgenlegfeesInfoVOList, loginUser, cangKey);
  4358. if (CollectionUtils.isNotEmpty(resultVO.getItemFeesList())) {
  4359. // 给仓库信息赋值
  4360. for (TWarehousebillsfees li : resultVO.getItemFeesList()) {
  4361. TWarehouse tWarehouse = warehouseList.stream().filter(warehouse -> Objects.equals(warehouse.getfId(), li.getfWarehouseid()))
  4362. .findFirst().orElseThrow(() -> new WarehouseException("找不到仓库信息"));
  4363. li.setWarehouseName(tWarehouse.getfName());
  4364. itemsList.add(li);
  4365. }
  4366. }
  4367. }
  4368. TFees tFees = new TFees();
  4369. tFees.setfStatus("2");
  4370. tFees.setDelFlag("0");
  4371. List<TFees> feesList = tFeesMapper.selectTFeesList(tFees);
  4372. if (CollectionUtils.isEmpty(itemsList)) {
  4373. throw new WarehouseException("未找到合适的库存明细");
  4374. }
  4375. calculationResultVO.setFeesList(feesList);
  4376. calculationResultVO.setWarehouseBills(tWarehouseBills);
  4377. calculationResultVO.setWarehouseItemList(itemsList);
  4378. return AjaxResult.success(calculationResultVO);
  4379. }
  4380. /**
  4381. * 更新库存总帐当日实际
  4382. *
  4383. * @param tWarehouseBills
  4384. * @param tWhgenlegs
  4385. * @return
  4386. */
  4387. private void updateWhgenlegs(TWarehouseBills tWarehouseBills, List<Map<String, Object>> tWhgenlegs) {
  4388. // 获取区间时间
  4389. tWarehouseBills.setItemBsDateList(timeConversion(tWarehouseBills.getfBillingDeadline(), new Date()));
  4390. // 查询时间区间内的仓储业务明细信息
  4391. List<TWarehousebillsitems> warehousebillsitemsList = tWarehousebillsitemsMapper.selectListByCorpId(tWarehouseBills);
  4392. // 如果没有则直接结束此方法
  4393. if (CollectionUtils.isEmpty(warehousebillsitemsList)) {
  4394. return;
  4395. }
  4396. tWhgenlegs.forEach(whgenleg -> {
  4397. // 判断是否计算箱号 0为 不计算 1为计算
  4398. boolean ifCntrno = "1".equals(whgenleg.get("ifCntrno").toString());
  4399. // 组合一个库存总帐类使用
  4400. TWhgenleg tWhgenleg = new TWhgenleg();
  4401. tWhgenleg.setfCorpid(tWarehouseBills.getfCorpid());
  4402. tWhgenleg.setfQtyblc(Long.parseLong(whgenleg.get("fQty").toString()));
  4403. tWhgenleg.setfMarks((String) whgenleg.get("fMarks"));
  4404. tWhgenleg.setfMblno((String) whgenleg.get("fMblno"));
  4405. tWhgenleg.setfCntrno((String) whgenleg.get("fCntrno"));
  4406. tWhgenleg.setfOriginalbilldate((Date) whgenleg.get("fOriginalbilldate"));
  4407. tWhgenleg.setfGoodsid(Long.parseLong(whgenleg.get("fGoodsid").toString()));
  4408. tWhgenleg.setfNetweightblc(new BigDecimal(whgenleg.get("fNetweight").toString()));
  4409. tWhgenleg.setfGrossweightblc(new BigDecimal(whgenleg.get("fGrossweight").toString()));
  4410. tWhgenleg.setfWarehouseid(Long.parseLong(whgenleg.get("warehouseLocationid").toString()));
  4411. log.info("每次yuan件数、毛重、净重、:{}, {}, {}, {}", tWhgenleg.getfQtyblc(), tWhgenleg.getfVolumnblc(), tWhgenleg.getfNetweightblc(),
  4412. tWhgenleg.getfGrossweightblc());
  4413. List<TWarehousebillsitems> itemList = new ArrayList<>();
  4414. for (TWarehousebillsitems li : warehousebillsitemsList) {
  4415. if ((!Objects.equals(li.getfGoodsid(), tWhgenleg.getfGoodsid())) ||
  4416. (!Objects.equals(li.getfWarehouselocid(), tWhgenleg.getfWarehouseid()) || Objects.equals(li.getfTransferWarehouselocid(), tWhgenleg.getfWarehouseid())) ||
  4417. !li.getfMblno().equals(tWhgenleg.getfMblno()) ||
  4418. !Objects.equals(li.getfOriginalbilldate(), tWhgenleg.getfOriginalbilldate()) ||
  4419. (!li.getfMarks().equals(tWhgenleg.getfMarks())) ||
  4420. (ifCntrno && !li.getfCntrno().equals(tWhgenleg.getfCntrno()))
  4421. ) {
  4422. continue;
  4423. }
  4424. itemList.add(li);
  4425. }
  4426. // 如果找不到符合条件的明细信息 直接结束此方法
  4427. if (CollectionUtils.isNotEmpty(itemList)) {
  4428. itemList.forEach(li -> updateWhgenlegCalculate(tWhgenleg, li));
  4429. }
  4430. log.info("每次的件数、毛重、净重、:{}, {}, {}, {}", tWhgenleg.getfQtyblc(), tWhgenleg.getfVolumnblc(), tWhgenleg.getfNetweightblc(),
  4431. tWhgenleg.getfGrossweightblc());
  4432. // 覆盖数量、毛重、净重
  4433. whgenleg.put("fQty", tWhgenleg.getfQtyblc());
  4434. whgenleg.put("fNetweight", tWhgenleg.getfNetweightblc());
  4435. whgenleg.put("fGrossweight", tWhgenleg.getfGrossweightblc());
  4436. });
  4437. }
  4438. private void updateWhgenlegs1(TWarehouseBills tWarehouseBills, List<CalculateStorageFeesInfoVO> infoVOList) {
  4439. // 获取区间时间
  4440. tWarehouseBills.setItemBsDateList(timeConversion(tWarehouseBills.getfBillingDeadline(), new Date()));
  4441. // 查询时间区间内的仓储业务明细信息
  4442. List<TWarehousebillsitems> warehousebillsitemsList = tWarehousebillsitemsMapper.selectListByCorpId(tWarehouseBills);
  4443. // 如果没有则直接结束此方法
  4444. if (CollectionUtils.isEmpty(warehousebillsitemsList)) {
  4445. return;
  4446. }
  4447. infoVOList.forEach(whgenleg -> {
  4448. // 判断是否计算箱号 0为 不计算 1为计算
  4449. boolean ifCntrno = "1".equals(whgenleg.getIfCntrno());
  4450. // 组合一个库存总帐类使用
  4451. TWhgenleg tWhgenleg = new TWhgenleg();
  4452. tWhgenleg.setfCorpid(tWarehouseBills.getfCorpid());
  4453. tWhgenleg.setfQtyblc(whgenleg.getFQty());
  4454. tWhgenleg.setfMarks(whgenleg.getFMarks());
  4455. tWhgenleg.setfMblno(whgenleg.getFMblno());
  4456. tWhgenleg.setfCntrno(whgenleg.getFCntrno());
  4457. tWhgenleg.setfGoodsid(whgenleg.getFGoodsid());
  4458. tWhgenleg.setfNetweightblc(whgenleg.getFNetweight());
  4459. tWhgenleg.setfGrossweightblc(whgenleg.getFGrossweight());
  4460. tWhgenleg.setfWarehouseid(whgenleg.getWarehouseLocationid());
  4461. tWhgenleg.setfOriginalbilldate(whgenleg.getFOriginalbilldate());
  4462. log.info("每次yuan件数、毛重、净重、:{}, {}, {}, {}", tWhgenleg.getfQtyblc(), tWhgenleg.getfVolumnblc(), tWhgenleg.getfNetweightblc(),
  4463. tWhgenleg.getfGrossweightblc());
  4464. List<TWarehousebillsitems> itemList = new ArrayList<>();
  4465. for (TWarehousebillsitems li : warehousebillsitemsList) {
  4466. if ((!Objects.equals(li.getfGoodsid(), tWhgenleg.getfGoodsid())) ||
  4467. (!Objects.equals(li.getfWarehouselocid(), tWhgenleg.getfWarehouseid()) ||
  4468. Objects.equals(li.getfTransferWarehouselocid(), tWhgenleg.getfWarehouseid())) ||
  4469. !li.getfMblno().equals(tWhgenleg.getfMblno()) ||
  4470. !Objects.equals(li.getfOriginalbilldate(), tWhgenleg.getfOriginalbilldate()) ||
  4471. (!li.getfMarks().equals(tWhgenleg.getfMarks())) ||
  4472. (ifCntrno && !li.getfCntrno().equals(tWhgenleg.getfCntrno()))
  4473. ) {
  4474. continue;
  4475. }
  4476. itemList.add(li);
  4477. }
  4478. // 如果找不到符合条件的明细信息 直接结束此方法
  4479. if (CollectionUtils.isNotEmpty(itemList)) {
  4480. itemList.forEach(li -> updateWhgenlegCalculate(tWhgenleg, li));
  4481. }
  4482. log.info("每次的件数、毛重、净重、:{}, {}, {}, {}", tWhgenleg.getfQtyblc(), tWhgenleg.getfVolumnblc(), tWhgenleg.getfNetweightblc(),
  4483. tWhgenleg.getfGrossweightblc());
  4484. // 覆盖数量、毛重、净重
  4485. whgenleg.setFQty(tWhgenleg.getfQtyblc());
  4486. whgenleg.setFNetweight(tWhgenleg.getfNetweightblc());
  4487. whgenleg.setFGrossweight(tWhgenleg.getfGrossweightblc());
  4488. });
  4489. }
  4490. /**
  4491. * 根据仓储明细更新库存总帐数量、毛重、净重
  4492. *
  4493. * @param whgenleg
  4494. * @param item
  4495. * @return
  4496. */
  4497. private TWhgenleg updateWhgenlegCalculate(TWhgenleg whgenleg, TWarehousebillsitems item) {
  4498. // 入库
  4499. if (WarehouseTypeEnum.SJRK.getType().equals(item.getfBilltype())) {
  4500. // 修改数量
  4501. whgenleg.setfQtyblc(whgenleg.getfQtyblc() - item.getfQty());
  4502. // 修改毛重
  4503. BigDecimal grossweightblc = whgenleg.getfGrossweightblc().subtract(item.getfGrossweight()).setScale(2, RoundingMode.HALF_UP);
  4504. whgenleg.setfGrossweightblc(grossweightblc);
  4505. // 修改净重
  4506. BigDecimal netweightcBlc = whgenleg.getfNetweightblc().subtract(item.getfNetweight()).setScale(2, RoundingMode.HALF_UP);
  4507. whgenleg.setfNetweightc(netweightcBlc);
  4508. return whgenleg;
  4509. } else
  4510. // 出库
  4511. if (WarehouseTypeEnum.SJCK.getType().equals(item.getfBilltype())) {
  4512. // 修改数量
  4513. whgenleg.setfQtyblc(whgenleg.getfQtyblc() + item.getfQty());
  4514. // 修改毛重
  4515. BigDecimal grossweightblc = whgenleg.getfGrossweightblc().add(item.getfGrossweight());
  4516. whgenleg.setfGrossweightblc(grossweightblc);
  4517. // 修改净重
  4518. BigDecimal netweightcBlc = whgenleg.getfNetweightblc().add(item.getfNetweight());
  4519. whgenleg.setfNetweightc(netweightcBlc);
  4520. return whgenleg;
  4521. } else
  4522. // 调拨
  4523. if (WarehouseTypeEnum.CKDB.getType().equals(item.getfBilltype())) {
  4524. BigDecimal netweightcBlc;
  4525. BigDecimal grossweightblc;
  4526. if (Objects.equals(item.getfTransferWarehouselocid(), whgenleg.getfWarehouseid())) {
  4527. // 修改数量
  4528. whgenleg.setfQtyblc(whgenleg.getfQtyblc() - item.getfQty());
  4529. // 修改毛重
  4530. grossweightblc = whgenleg.getfGrossweightblc().subtract(item.getfGrossweight()).setScale(2, RoundingMode.HALF_UP);
  4531. // 修改净重
  4532. netweightcBlc = whgenleg.getfNetweightblc().subtract(item.getfNetweight()).setScale(2, RoundingMode.HALF_UP);
  4533. } else {
  4534. // 修改数量
  4535. whgenleg.setfQtyblc(whgenleg.getfQtyblc() + item.getfQty());
  4536. // 修改毛重
  4537. grossweightblc = whgenleg.getfGrossweightblc().add(item.getfGrossweight());
  4538. // 修改净重
  4539. netweightcBlc = whgenleg.getfNetweightblc().add(item.getfNetweight());
  4540. }
  4541. whgenleg.setfGrossweightblc(grossweightblc);
  4542. whgenleg.setfNetweightc(netweightcBlc);
  4543. return whgenleg;
  4544. } else
  4545. // 货权转移
  4546. if (WarehouseTypeEnum.HQZY.getType().equals(item.getfBilltype())) {
  4547. BigDecimal netweightcBlc;
  4548. BigDecimal grossweightblc;
  4549. if (Objects.equals(item.getfTocorpid(), whgenleg.getfCorpid())) {
  4550. // 修改数量
  4551. whgenleg.setfQtyblc(whgenleg.getfQtyblc() - item.getfQty());
  4552. // 修改毛重
  4553. grossweightblc = whgenleg.getfGrossweightblc().subtract(item.getfGrossweight()).setScale(2, RoundingMode.HALF_UP);
  4554. // 修改净重
  4555. netweightcBlc = whgenleg.getfNetweightblc().subtract(item.getfNetweight()).setScale(2, RoundingMode.HALF_UP);
  4556. } else {
  4557. // 修改数量
  4558. whgenleg.setfQtyblc(whgenleg.getfQtyblc() + item.getfQty());
  4559. // 修改毛重
  4560. grossweightblc = whgenleg.getfGrossweightblc().add(item.getfGrossweight());
  4561. // 修改净重
  4562. netweightcBlc = whgenleg.getfNetweightblc().add(item.getfNetweight());
  4563. }
  4564. whgenleg.setfGrossweightblc(grossweightblc);
  4565. whgenleg.setfNetweightc(netweightcBlc);
  4566. return whgenleg;
  4567. }
  4568. return whgenleg;
  4569. }
  4570. /**
  4571. * 时间格式转换
  4572. *
  4573. * @param start
  4574. * @param end
  4575. * @return
  4576. */
  4577. private List<String> timeConversion(Date start, Date end) {
  4578. List<String> timeList = new ArrayList();
  4579. timeList.add(DateUtils.dateToString(DateUtils.dateConversionMax(start)));
  4580. timeList.add(DateUtils.dateToString(DateUtils.dateConversionMax(end)));
  4581. return timeList;
  4582. }
  4583. /**
  4584. * 批量生成计算仓储费信息
  4585. *
  4586. * @param warehouseBills
  4587. * @param mapItem
  4588. * @param loginUser
  4589. * @return
  4590. */
  4591. public Map<String, Object> getWarehouseItemsList(TWarehouseBills warehouseBills, List<Map<String, Object>> mapItem, LoginUser loginUser, String warehouse) {
  4592. Map<String, Object> map = new HashMap<>();
  4593. BigDecimal sumAmt = new BigDecimal(0);
  4594. List<TWarehousebillsfees> itemsList = new ArrayList<>();
  4595. List<SysDictData> taxRate = sysDictDataMapper.selectDictDataByType("tax_rate");
  4596. for (Map<String, Object> item : mapItem) {
  4597. if (StringUtils.isNull(item.get("fBillingway"))) {
  4598. map.put("error", "单号:" + item.get("fBillno") + ",业务日期:" + item.get("fBsdate") + "未找到库存总账的计费单位,请确认");
  4599. return map;
  4600. }
  4601. CalculateStorageFeesDTO storageFeesDto = new CalculateStorageFeesDTO();
  4602. storageFeesDto.setfCorpid(warehouseBills.getfCorpid());
  4603. storageFeesDto.setCangKey(warehouse);
  4604. storageFeesDto.setWarehouseId(Long.parseLong(String.valueOf(item.get("warehouse"))));
  4605. Date fBsdate = (Date) item.get("fBsdate");
  4606. String fBilltype = (String) item.get("fBilltype");
  4607. String fGoodsid = (String) item.get("fTypeid");
  4608. if (StringUtils.isNotEmpty(fGoodsid)) {
  4609. fGoodsid = "\"" + fGoodsid + "\"";
  4610. }
  4611. storageFeesDto.setfGoodsid(fGoodsid);
  4612. long fId = Long.parseLong(String.valueOf(item.get("fId")));
  4613. // 累计计费天数
  4614. storageFeesDto.setEarlySumDays(DateUtils.getDateDay((Date) item.get("fChargedate"), (Date) item.get("fOriginalbilldate")) - 1);
  4615. // 库存天数
  4616. long fInventoryDays;
  4617. // 要计费天数
  4618. long fBillingDays;
  4619. if ("SJCK".equals(fBilltype)) {
  4620. fInventoryDays = DateUtils.getDateDay(fBsdate, (Date) item.get("fOriginalbilldate"));
  4621. fBillingDays = DateUtils.getDateDay(fBsdate, (Date) item.get("fChargedate"));
  4622. storageFeesDto.setStartTime((Date) item.get("fChargedate"));
  4623. storageFeesDto.setEndTime(fBsdate);
  4624. } else if (WarehouseTypeEnum.HQZY.getType().equals(fBilltype)) {
  4625. fInventoryDays = DateUtils.getDateDay(fBsdate, (Date) item.get("fOriginalbilldate"));
  4626. fBillingDays = DateUtils.getDateDay(fBsdate, (Date) item.get("fChargedate"));
  4627. storageFeesDto.setStartTime((Date) item.get("fChargedate"));
  4628. storageFeesDto.setEndTime(fBsdate);
  4629. } else {
  4630. fInventoryDays = DateUtils.getDateDay(warehouseBills.getfBillingDeadline(), (Date) item.get("fOriginalbilldate"));
  4631. fBillingDays = DateUtils.getDateDay(warehouseBills.getfBillingDeadline(), (Date) item.get("fChargedate"));
  4632. storageFeesDto.setStartTime((Date) item.get("fChargedate"));
  4633. storageFeesDto.setEndTime(warehouseBills.getfBillingDeadline());
  4634. }
  4635. if (fBillingDays <= 0) {
  4636. continue;
  4637. }
  4638. storageFeesDto.setDays(fBillingDays);
  4639. storageFeesDto.setfMblno((String) item.get("fMblno"));
  4640. // 赋值要计算的数量单位
  4641. storageFeesDto.setfQty(new BigDecimal(String.valueOf(item.get("fQty"))));
  4642. storageFeesDto.setfVolumn(new BigDecimal(String.valueOf(item.get("fVolumn"))));
  4643. storageFeesDto.setfNetweight(new BigDecimal(String.valueOf(item.get("fNetweight"))));
  4644. storageFeesDto.setfGrossweight(new BigDecimal(String.valueOf(item.get("fGrossweight"))));
  4645. // 计算仓储费明细
  4646. StorageFeeCalculationResultVO carryingCost = tWarehouseAgreementService.getCarryingCost(storageFeesDto);
  4647. if (StringUtils.isNull(carryingCost)) {
  4648. continue;
  4649. }
  4650. String mblno = "";
  4651. if (StringUtils.isNotNull(item.get("fMblno"))) {
  4652. mblno = item.get("fMblno").toString();
  4653. }
  4654. map.put("feeId", carryingCost.getFeeId());
  4655. map.put("itemFeeId", carryingCost.getFeeId());
  4656. sumAmt = sumAmt.add(carryingCost.getAmt()).setScale(2, RoundingMode.HALF_UP);
  4657. TWarehousebillsfees fees = new TWarehousebillsfees();
  4658. fees.setfFeeid(carryingCost.getFeeId());
  4659. fees.setfDc("D");
  4660. fees.setfAmt(carryingCost.getAmt());
  4661. fees.setfQty(carryingCost.getQty());
  4662. fees.setSrcId(fId);
  4663. fees.setfMblno(mblno);
  4664. fees.setRemark(carryingCost.getRemark());
  4665. fees.setfFeeunitid(carryingCost.getUnit());
  4666. fees.setfAmount(sumAmt);
  4667. fees.setfBillstatus(2L);
  4668. fees.setfCurrency("RMB");
  4669. fees.setfBsdate(fBsdate);
  4670. fees.setfBillingQty(carryingCost.getQty());
  4671. fees.setfUnitprice(sumAmt);
  4672. fees.setfBilltype(fBilltype);
  4673. fees.setfBillingDays(fBillingDays);
  4674. fees.setCreateTime(new Date());
  4675. fees.setfWarehouseid(storageFeesDto.getWarehouseId());
  4676. fees.setfPid(warehouseBills.getfId());
  4677. fees.setfInventoryDays(fInventoryDays);
  4678. fees.setfExrate(new BigDecimal(1));
  4679. fees.setfCorpid(warehouseBills.getfCorpid());
  4680. fees.setfMarks(item.get("fMarks").toString());
  4681. fees.setSrcBillNo((String) item.get("fBillno"));
  4682. fees.setfChargedate((Date) item.get("fChargedate"));
  4683. fees.setCreateBy(loginUser.getUser().getUserName());
  4684. fees.setfProductName(item.get("fGoodsids").toString());
  4685. if ("SJCK".equals(fBilltype)) {
  4686. fees.setfBillingDeadline(fBsdate);
  4687. } else {
  4688. fees.setfBillingDeadline(warehouseBills.getfBillingDeadline());
  4689. }
  4690. fees.setfTaxrate(new BigDecimal(taxRate.get(0).getDictValue()));
  4691. fees.setfOriginalbilldate((Date) item.get("fOriginalbilldate"));
  4692. fees.setfBillingway(Long.valueOf(String.valueOf(item.get("fBillingway"))));
  4693. itemsList.add(fees);
  4694. }
  4695. map.put("sumAmt", sumAmt);
  4696. map.put("itemsList", itemsList);
  4697. return map;
  4698. }
  4699. /**
  4700. * 出库明细计算仓储费
  4701. *
  4702. * @param tWarehouseBillsList
  4703. * @param loginUser
  4704. * @param billsType
  4705. * @return
  4706. */
  4707. @Override
  4708. @Transactional
  4709. public AjaxResult calculateStorageFeesList(List<TWarehouseBills> tWarehouseBillsList, LoginUser loginUser, String billsType) {
  4710. if (CollectionUtils.isEmpty(tWarehouseBillsList)) {
  4711. return AjaxResult.error("请输入筛选条件,再计算仓储费");
  4712. }
  4713. // 取出明细id进行查询是否存在已计算仓储费的地方
  4714. List<Long> ids = tWarehouseBillsList.stream().map(TWarehouseBills::getfId).distinct().collect(toList());
  4715. // 判断是否存在仓库明细已被计算仓储费
  4716. if (CollectionUtils.isNotEmpty(ids) && tWarehousebillsitemsMapper.selectIsCalculateStorageFeesByIdsOrType(ids, WarehouseTypeEnum.CALCULATE.getType()) > 0) {
  4717. throw new WarehouseException("该出库已被计算仓储费");
  4718. }
  4719. List<TWarehousebillsfees> list = new ArrayList<>();
  4720. for (TWarehouseBills tWarehouseBills : tWarehouseBillsList) {
  4721. // 计划物资明细
  4722. List<TWarehousebillsfees> itemsList = new ArrayList<>();
  4723. // 查询 出库 货转的库存明细
  4724. List<Map<String, Object>> warehousebillsitemsList = tWarehousebillsitemsMapper.selectStorageFeeItemList(tWarehouseBills);
  4725. String cangKey = sysConfigServiceImpl.selectConfigByKey("agreement.warehouse");
  4726. if (CollectionUtils.isNotEmpty(warehousebillsitemsList)) {
  4727. Map<String, Object> mapItem = getWarehouseItemsList(tWarehouseBills, warehousebillsitemsList, loginUser, cangKey);
  4728. if (mapItem.containsKey("error")) {
  4729. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  4730. return AjaxResult.error((String) mapItem.get("error"));
  4731. }
  4732. itemsList = (List<TWarehousebillsfees>) mapItem.get("itemsList");
  4733. }
  4734. list.addAll(itemsList);
  4735. }
  4736. if (CollectionUtils.isEmpty(list)) {
  4737. throw new WarehouseException("未找到合适的库存明细");
  4738. }
  4739. return AjaxResult.success(list);
  4740. }
  4741. /**
  4742. * 计算出库仓储费
  4743. * 待完成!!!!!!!!!
  4744. *
  4745. * @param fId
  4746. * @return
  4747. */
  4748. @Override
  4749. public AjaxResult calculateOutStockFee(Long fId) {
  4750. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  4751. if (StringUtils.isNull(tWarehouseBills)) {
  4752. return AjaxResult.error("未找到出库信息,请确认是否存在出库");
  4753. }
  4754. return null;
  4755. }
  4756. /**
  4757. * 查询仓储仓管员角色用户
  4758. */
  4759. @Override
  4760. public AjaxResult queryClerkRoleList() {
  4761. return AjaxResult.success(sysUserMapper.selectUserByRole("库管"));
  4762. }
  4763. /**
  4764. * 仓储费计算提交以及暂存
  4765. *
  4766. * @param warehouseBills
  4767. * @param warehouseItems
  4768. * @param warehouseFees
  4769. * @param loginUser
  4770. * @param billsType
  4771. * @return
  4772. */
  4773. @Override
  4774. @Transactional
  4775. public AjaxResult insertStorageFee(String warehouseBills, String warehouseItems, String warehouseFees, LoginUser loginUser, String billsType) {
  4776. TWarehouseBills tWarehousebills = JSON.parseObject(warehouseBills, TWarehouseBills.class);
  4777. long fPid = 0L;
  4778. boolean billstatus = tWarehousebills.getfBillstatus().equals(4L);
  4779. if (billstatus && (StringUtils.isNull(warehouseItems) || "[]".equals(warehouseItems))) {
  4780. return AjaxResult.error("未找到计费物资明细无法提交");
  4781. }
  4782. /*if (billstatus && (StringUtils.isNull(warehouseFees) || "[]".equals(warehouseFees))) {
  4783. return AjaxResult.error("未找到应收款明细无法提交");
  4784. }*/
  4785. if (tWarehousebills.getfTimes() == null) {
  4786. tWarehousebills.setfTimes(1L);
  4787. } else {
  4788. tWarehousebills.setfTimes(tWarehousebills.getfTimes() + 1);
  4789. }
  4790. if (StringUtils.isNotNull(tWarehousebills.getfId())) {
  4791. fPid = tWarehousebills.getfId();
  4792. tWarehousebills.setfBilltype(billsType);
  4793. tWarehousebills.setUpdateTime(new Date());
  4794. tWarehousebills.setUpdateBy(loginUser.getUser().getUserName());
  4795. tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  4796. tWarehousebillsfeesMapper.deleteByFPid(fPid);
  4797. tWarehousebillsitemsMapper.deleteByFPid(fPid);
  4798. } else {
  4799. // 生成流水号
  4800. Date time = new Date();
  4801. String billNo = billnoSerialServiceImpl.getSerialNumber(WarehouseTypeEnum.JSCCF.getType(), time);
  4802. tWarehousebills.setfBillno(billNo);
  4803. tWarehousebills.setfDeptid(loginUser.getUser().getDeptId());
  4804. tWarehousebills.setfBsdeptid(loginUser.getUser().getDeptId());
  4805. tWarehousebills.setCreateBy(loginUser.getUser().getUserName());
  4806. tWarehousebills.setCreateTime(new Date());
  4807. tWarehousebills.setfBilltype(billsType);
  4808. tWarehouseBillsMapper.insertTWarehousebills(tWarehousebills);
  4809. fPid = tWarehousebills.getfId();
  4810. }
  4811. JSONArray warehouseJSON = JSONArray.parseArray(warehouseItems);
  4812. List<TWarehousebillsfees> itemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsfees.class);
  4813. for (TWarehousebillsfees item : itemsList) {
  4814. item.setSrcBillNo(tWarehousebills.getfBillno());
  4815. item.setfPid(fPid);
  4816. item.setfBillstatus(tWarehousebills.getfBillstatus());
  4817. tWarehousebillsfeesMapper.insertTWarehousebillsfees(item);
  4818. }
  4819. if (StringUtils.isNotNull(warehouseFees) && !"[]".equals(warehouseFees)) {
  4820. JSONArray feesJSON = JSON.parseArray(warehouseFees);
  4821. List<TWarehousebillsfees> warehousebillsfeesList = JSON.parseArray(feesJSON.toJSONString(), TWarehousebillsfees.class);
  4822. for (TWarehousebillsfees fees : warehousebillsfeesList) {
  4823. fees.setfPid(fPid);
  4824. fees.setfDc("D");
  4825. fees.setfBilltype(WarehouseTypeEnum.JSCCF.getType());
  4826. fees.setSrcBillNo(tWarehousebills.getfBillno());
  4827. fees.setfBillstatus(tWarehousebills.getfBillstatus());
  4828. tWarehousebillsfeesMapper.insertTWarehousebillsfees(fees);
  4829. }
  4830. }
  4831. // 计算仓库状态
  4832. calculationWarehouseService.calculationBillStatus(tWarehousebills);
  4833. tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  4834. if (billstatus) {
  4835. String key = "warehouse.storageFeeCalculation.ApprovalFlow";
  4836. SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique(key);
  4837. if (StringUtils.isNull(sysConfig)) {
  4838. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  4839. return AjaxResult.error("系统参数异常,未找到开启审批流参数");
  4840. }
  4841. if ("0".equals(sysConfig.getConfigValue())) {
  4842. AuditItems auditItems = new AuditItems();
  4843. auditItems.setLevelId(0L);
  4844. auditItems.setBillId(fPid);
  4845. auditItems.setActId(150L);
  4846. auditItems.setIffinalItem("F");
  4847. auditItems.setBillNo(tWarehousebills.getfBillno());
  4848. // 存储委托方(货权方)
  4849. auditItems.setRefno1(tWarehousebills.getfCorpid() + "");
  4850. // 存储业务类型(业务类型)
  4851. auditItems.setRefno2(tWarehousebills.getfBilltype());
  4852. // 存储提单号(提单号)
  4853. auditItems.setRefno3(tWarehousebills.getfMblno());
  4854. auditItems.setSendUserId(loginUser.getUser().getUserId());
  4855. auditItems.setSendName(loginUser.getUsername());
  4856. auditItems.setSendTime(new Date());
  4857. auditItems.setAuditUserId(loginUser.getUser().getUserId());
  4858. auditItems.setAuditItem(new Date());
  4859. auditItems.setAuditOpTime(new Date());
  4860. auditItems.setAuditMsg("提交");
  4861. auditItems.setAuditStatus("O");
  4862. auditItems.setFidStatus("f_billstatus");
  4863. auditItems.setTimes(tWarehousebills.getfTimes());
  4864. AjaxResult approvalFlow = auditItemsService.createApprovalFlow(auditItems);
  4865. String code = approvalFlow.get("code").toString();
  4866. if ("500".equals(code)) {
  4867. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  4868. }
  4869. return approvalFlow;
  4870. } else {
  4871. approvedStorageFee(fPid, 6L, new Date());
  4872. return AjaxResult.success();
  4873. }
  4874. }
  4875. return AjaxResult.success(tWarehousebills);
  4876. }
  4877. /**
  4878. * 计算仓储费审核通过
  4879. *
  4880. * @param warehouseId 主表id
  4881. * @param fettle 状态
  4882. * @param date 审核时间
  4883. */
  4884. public void approvedStorageFee(Long warehouseId, Long fettle, Date date) {
  4885. // 查出主表数据
  4886. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(warehouseId);
  4887. if (Objects.isNull(warehouseBills)) {
  4888. throw new WarehouseException("未找到仓储信息");
  4889. }
  4890. List<TWarehousebillsfees> feesList = tWarehousebillsfeesMapper.selectWarehousebillsfeesByPId(warehouseBills.getfId());
  4891. if (CollectionUtils.isEmpty(feesList)) {
  4892. throw new WarehouseException("未找到需要更新的费用信息");
  4893. }
  4894. // 过滤出明细信息查询是否存在已计算仓储费
  4895. List<Long> ids = feesList.stream().filter(li -> !li.getfBilltype().equals(WarehouseTypeEnum.KCZZ.getType()))
  4896. .map(TWarehousebillsfees::getSrcId).distinct().collect(toList());
  4897. if (CollectionUtils.isNotEmpty(ids) && tWarehousebillsitemsMapper.selectIsCalculateStorageFeesByIds(ids) > 0) {
  4898. throw new WarehouseException("计算费用中存在已计算仓储费信息");
  4899. }
  4900. for (TWarehousebillsfees fees : feesList) {
  4901. storageFeeUpdateItem(warehouseBills, fees);
  4902. }
  4903. warehouseBills.setfBillstatus(fettle);
  4904. warehouseBills.setUpdateTime(new Date());
  4905. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  4906. }
  4907. /**
  4908. * 计算仓储费计算更新出库货转信息
  4909. *
  4910. * @param warehouseBills 主表信息
  4911. * @param fees 仓储费信息
  4912. */
  4913. private void storageFeeUpdateItem(TWarehouseBills warehouseBills, TWarehousebillsfees fees) {
  4914. Date chargeDate = DateUtils.addDays(fees.getfBillingDeadline(), 1);
  4915. // 如果是库存总帐
  4916. if (WarehouseTypeEnum.KCZZ.getType().equals(fees.getfBilltype())) {
  4917. TWhgenleg whgenleg = new TWhgenleg();
  4918. whgenleg.setfId(fees.getSrcId());
  4919. whgenleg.setfChargedate(chargeDate);
  4920. tWhgenlegMapper.updateTWhgenleg(whgenleg);
  4921. // 如果计算之前信息
  4922. if (!fees.getfBillingDeadline().after(warehouseBills.getUpdateTime())) {
  4923. // 查询时间区间内的仓储业务明细信息
  4924. List<String> timeList = new ArrayList<>();
  4925. timeList.add(DateUtils.dateToString(DateUtils.dateConversionMin(fees.getfBillingDeadline())));
  4926. timeList.add(DateUtils.dateToString(DateUtils.dateConversionMax(warehouseBills.getUpdateTime())));
  4927. warehouseBills.setItemBsDateList(timeList);
  4928. List<TWarehousebillsitems> warehousebillsitemsList = tWarehousebillsitemsMapper.selectListByCorpId(warehouseBills);
  4929. // 过滤出出库、货转,更新对应仓储费计费日期
  4930. List<TWarehousebillsitems> itemList = warehousebillsitemsList.stream().filter(li ->
  4931. li.getfBilltype().equals(WarehouseTypeEnum.SJCK.getType()) ||
  4932. li.getfBilltype().equals(WarehouseTypeEnum.HQZY.getType())).collect(toList());
  4933. if (CollectionUtils.isNotEmpty(itemList)) {
  4934. itemList.forEach(li -> {
  4935. li.setfChargedate(chargeDate);
  4936. li.setUpdateTime(new Date());
  4937. tWarehousebillsitemsMapper.updateTWarehousebillsitems(li);
  4938. });
  4939. }
  4940. }
  4941. } else {
  4942. TWarehousebillsitems billsItem = new TWarehousebillsitems();
  4943. billsItem.setfId(fees.getSrcId());
  4944. billsItem.setfChargedate(chargeDate);
  4945. if ("SJCK".equals(fees.getfBilltype())) {
  4946. billsItem.setfStorageFeeDeadline(fees.getfBillingDeadline());
  4947. billsItem.setIsCalculateStorageFees(WarehouseTypeEnum.CALCULATE.getType());
  4948. }
  4949. tWarehousebillsitemsMapper.updateTWarehousebillsitems(billsItem);
  4950. }
  4951. }
  4952. @Override
  4953. public AjaxResult insertStorageFeeList(List<StorageChargeInsert> storageChargeInsert, LoginUser loginUser, String billsType) {
  4954. if (CollectionUtils.isEmpty(storageChargeInsert)) {
  4955. return AjaxResult.error("请选择要保存的数据");
  4956. }
  4957. for (StorageChargeInsert chargeInsert : storageChargeInsert) {
  4958. TWarehouseBills tWarehousebills = JSONArray.parseObject(chargeInsert.getWarehouseBills(), TWarehouseBills.class);
  4959. long fPid = 0L;
  4960. boolean billstatus = tWarehousebills.getfBillstatus().equals(4L);
  4961. if (billstatus && (StringUtils.isNull(chargeInsert.getWarehouseItems()) || "[]".equals(chargeInsert.getWarehouseItems()))) {
  4962. return AjaxResult.error("未找到计费物资明细无法提交");
  4963. }
  4964. /*if (billstatus && (StringUtils.isNull(warehouseFees) || "[]".equals(warehouseFees))) {
  4965. return AjaxResult.error("未找到应收款明细无法提交");
  4966. }*/
  4967. if (tWarehousebills.getfTimes() == null) {
  4968. tWarehousebills.setfTimes(1L);
  4969. } else {
  4970. tWarehousebills.setfTimes(tWarehousebills.getfTimes() + 1);
  4971. }
  4972. if (StringUtils.isNotNull(tWarehousebills.getfId())) {
  4973. fPid = tWarehousebills.getfId();
  4974. tWarehousebills.setUpdateTime(new Date());
  4975. tWarehousebills.setUpdateBy(loginUser.getUser().getUserName());
  4976. tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  4977. tWarehousebillsfeesMapper.deleteByFPid(fPid);
  4978. tWarehousebillsitemsMapper.deleteByFPid(fPid);
  4979. } else {
  4980. // 生成流水号
  4981. Date time = new Date();
  4982. String billNo = billnoSerialServiceImpl.getSerialNumber(WarehouseTypeEnum.JSCCF.getType(), time);
  4983. tWarehousebills.setfBillno(billNo);
  4984. tWarehousebills.setfDeptid(loginUser.getUser().getDeptId());
  4985. tWarehousebills.setfBsdeptid(loginUser.getUser().getDeptId());
  4986. tWarehousebills.setCreateBy(loginUser.getUser().getUserName());
  4987. tWarehousebills.setCreateTime(new Date());
  4988. tWarehousebills.setfBilltype(billsType);
  4989. tWarehouseBillsMapper.insertTWarehousebills(tWarehousebills);
  4990. fPid = tWarehousebills.getfId();
  4991. }
  4992. JSONArray warehouseJSON = JSONArray.parseArray(chargeInsert.getWarehouseItems());
  4993. List<TWarehousebillsfees> itemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsfees.class);
  4994. for (TWarehousebillsfees item : itemsList) {
  4995. item.setfId(null);
  4996. item.setSrcBillNo(tWarehousebills.getfBillno());
  4997. item.setfPid(fPid);
  4998. item.setfBillstatus(tWarehousebills.getfBillstatus());
  4999. tWarehousebillsfeesMapper.insertTWarehousebillsfees(item);
  5000. }
  5001. if (StringUtils.isNotNull(chargeInsert.getWarehouseFees()) && !"[]".equals(chargeInsert.getWarehouseFees())) {
  5002. JSONArray feesJSON = JSONArray.parseArray(chargeInsert.getWarehouseFees());
  5003. List<TWarehousebillsfees> warehousebillsfeesList = JSONObject.parseArray(feesJSON.toJSONString(), TWarehousebillsfees.class);
  5004. for (TWarehousebillsfees fees : warehousebillsfeesList) {
  5005. fees.setfId(null);
  5006. fees.setfPid(fPid);
  5007. fees.setfDc("D");
  5008. fees.setfBilltype(WarehouseTypeEnum.JSCCF.getType());
  5009. fees.setSrcBillNo(tWarehousebills.getfBillno());
  5010. fees.setfBillstatus(tWarehousebills.getfBillstatus());
  5011. tWarehousebillsfeesMapper.insertTWarehousebillsfees(fees);
  5012. }
  5013. }
  5014. if (billstatus) {
  5015. String key = "warehouse.storageFeeCalculation.ApprovalFlow";
  5016. SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique(key);
  5017. if (StringUtils.isNull(sysConfig)) {
  5018. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  5019. return AjaxResult.error("系统参数异常,未找到开启审批流参数");
  5020. }
  5021. if ("0".equals(sysConfig.getConfigValue())) {
  5022. AuditItems auditItems = new AuditItems();
  5023. auditItems.setLevelId(0L);
  5024. auditItems.setBillId(fPid);
  5025. auditItems.setActId(150L);
  5026. auditItems.setIffinalItem("F");
  5027. auditItems.setBillNo(tWarehousebills.getfBillno());
  5028. // 存储委托方(货权方)
  5029. auditItems.setRefno1(tWarehousebills.getfCorpid() + "");
  5030. // 存储业务类型(业务类型)
  5031. auditItems.setRefno2(billsType);
  5032. // 存储提单号(提单号)
  5033. auditItems.setRefno3(tWarehousebills.getfMblno());
  5034. auditItems.setSendUserId(loginUser.getUser().getUserId());
  5035. auditItems.setSendName(loginUser.getUsername());
  5036. auditItems.setSendTime(new Date());
  5037. auditItems.setAuditUserId(loginUser.getUser().getUserId());
  5038. auditItems.setAuditItem(new Date());
  5039. auditItems.setAuditOpTime(new Date());
  5040. auditItems.setAuditMsg("提交");
  5041. auditItems.setAuditStatus("O");
  5042. auditItems.setFidStatus("f_billstatus");
  5043. auditItems.setTimes(tWarehousebills.getfTimes());
  5044. AjaxResult approvalFlow = auditItemsService.createApprovalFlow(auditItems);
  5045. String code = approvalFlow.get("code").toString();
  5046. // Long code = Long.valueOf(String.valueOf(ajaxResult.get("code"))).longValue();
  5047. if ("500".equals(code)) {
  5048. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  5049. }
  5050. return approvalFlow;
  5051. } else {
  5052. approvedStorageFee(fPid, 6L, new Date());
  5053. return AjaxResult.success();
  5054. }
  5055. }
  5056. }
  5057. return AjaxResult.success();
  5058. }
  5059. /**
  5060. * 根据id查询仓储费计算信息
  5061. *
  5062. * @param fId
  5063. * @return
  5064. */
  5065. @Override
  5066. public AjaxResult selectStorageFeeById(Long fId) {
  5067. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  5068. if (StringUtils.isNull(tWarehouseBills)) {
  5069. return AjaxResult.error("未找到信息,请刷新页面重试");
  5070. }
  5071. Map<String, Object> map = new HashMap<>();
  5072. TWarehousebillsfees warehousebillsfees = new TWarehousebillsfees();
  5073. warehousebillsfees.setfPid(fId);
  5074. List<TWarehousebillsfees> warehouseFeesList = tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(warehousebillsfees);
  5075. List<TWarehousebillsfees> itemsList = warehouseFeesList.stream().filter(li -> StringUtils.isNotNull(li.getSrcId()))
  5076. .collect(toList());
  5077. List<TWarehousebillsfees> feesList = warehouseFeesList.stream().filter(li -> StringUtils.isNull(li.getSrcId()))
  5078. .collect(toList());
  5079. // 查出所有仓库 给后续匹配仓库名字使用
  5080. List<TWarehouse> warehouseList = tWarehouseMapper.selectTWarehouseList(new TWarehouse());
  5081. itemsList.forEach(li -> {
  5082. Optional<TWarehouse> first = warehouseList.stream().filter(warehouse -> Objects.equals(warehouse.getfId(), li.getfWarehouseid()))
  5083. .findFirst();
  5084. first.ifPresent(tWarehouse -> li.setWarehouseName(tWarehouse.getfName()));
  5085. });
  5086. TGoods tGoods = new TGoods();
  5087. tGoods.setfStatus("0");
  5088. tGoods.setDelFlag("0");
  5089. List<TGoods> goods = tGoodsMapper.selectTGoodsList(tGoods);
  5090. TFees tFees = new TFees();
  5091. tFees.setfStatus("2");
  5092. tFees.setDelFlag("0");
  5093. List<TFees> feesLists = tFeesMapper.selectTFeesList(tFees);
  5094. // 查询联系人
  5095. List<SysUser> sysUserList = new ArrayList<>();
  5096. SysUser sysUser = sysUserMapper.selectUserByUserName(tWarehouseBills.getCreateBy());
  5097. if (StringUtils.isNotNull(sysUser)) {
  5098. sysUserList.add(sysUser);
  5099. }
  5100. TCorps corps = tCorpsMapper.selectTCorpsById(tWarehouseBills.getfCorpid());
  5101. map.put("corps", corps);
  5102. map.put("goodsList", goods);
  5103. map.put("feesList", feesLists);
  5104. map.put("sysUser", sysUserList);
  5105. map.put("warehouse", tWarehouseBills);
  5106. map.put("warehouseFeesList", feesList);
  5107. map.put("warehouseItemsList", itemsList);
  5108. return AjaxResult.success(map);
  5109. }
  5110. // 入库 收费明细 校验
  5111. public Long check(BigDecimal number, BigDecimal unitPrice) {
  5112. BigDecimal result1 = number.multiply(unitPrice);
  5113. // 保留两位小数且四舍五入
  5114. result1 = result1.setScale(2, BigDecimal.ROUND_HALF_UP);
  5115. // 转换去掉小数点
  5116. String result = result1.toString().replace(".", "");
  5117. return Long.valueOf(result);
  5118. }
  5119. /**
  5120. * 修改详情主表
  5121. *
  5122. * @param tWarehousebills 详情主表
  5123. * @return 结果
  5124. */
  5125. @Override
  5126. public int updateTWarehousebills(TWarehouseBills tWarehousebills) {
  5127. tWarehousebills.setUpdateTime(DateUtils.getNowDate());
  5128. return tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  5129. }
  5130. /**
  5131. * 批量删除详情主表
  5132. *
  5133. * @param fIds 需要删除的详情主表ID
  5134. * @return 结果
  5135. */
  5136. @Override
  5137. public AjaxResult deleteTWarehousebillsByIds(Long[] fIds) {
  5138. // 取出业务编号、 放入 billno_del
  5139. for (Long id : fIds) {
  5140. // 1、查询主表信息
  5141. TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(id);
  5142. // 查询对应库存明细是否允许删除
  5143. if (tWarehousebillsitemsMapper.selectItemFStatusByFPid(id) != 0) {
  5144. return AjaxResult.error("删除失败,该单据库存明细已入账");
  5145. }
  5146. AuditItems auditItems = new AuditItems();
  5147. auditItems.setBillId(id);
  5148. auditItems.setBillNo(tWarehousebills.getfBillno());
  5149. auditItems.setRefno3(tWarehousebills.getfMblno());
  5150. auditItems.setAuditStatus("S");
  5151. if (auditItemsMapper.selectAuditItemsList(auditItems).size() > 0) {
  5152. return AjaxResult.error("删除失败,该单据已请核");
  5153. }
  5154. // 2、业务编号、客存编号 放入 billno_del
  5155. BillnoDel billnoDel = new BillnoDel();
  5156. billnoDel.setBillType(tWarehousebills.getfBilltype());
  5157. billnoDel.setBillNo(tWarehousebills.getfBillno());
  5158. billnoDelMapper.insertBillnoDel(billnoDel);
  5159. }
  5160. tWarehouseBillsMapper.deleteTWarehousebillsByIds(fIds);
  5161. return AjaxResult.success();
  5162. }
  5163. @Override
  5164. public int deleteTWarehousebills(Long[] fIds) {
  5165. // 取出业务编号、 放入 billno_del
  5166. for (Long id : fIds) {
  5167. // 1、查询主表信息
  5168. TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(id);
  5169. // 2、业务编号、客存编号 放入 billno_del
  5170. BillnoDel billnoDel = new BillnoDel();
  5171. billnoDel.setBillType(tWarehousebills.getfBilltype());
  5172. billnoDel.setBillNo(tWarehousebills.getfBillno());
  5173. billnoDelMapper.insertBillnoDel(billnoDel);
  5174. }
  5175. return tWarehouseBillsMapper.deleteKHTWarehousebillsByIds(fIds);
  5176. }
  5177. @Override
  5178. public AjaxResult queryRemove(Long fId) {
  5179. // 查询主表明细
  5180. TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  5181. // 查询仓库明细从表数据
  5182. TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems();
  5183. tWarehousebillsitems.setfPid(tWarehousebills.getfId());
  5184. List<Map<String, Object>> mapList = tWarehousebillsitemsMapper.selectGoodsTransferitemsList(tWarehousebillsitems);
  5185. // 查询仓库费用明细表数据
  5186. TWarehousebillsfees tWarehousebillsfees = new TWarehousebillsfees();
  5187. tWarehousebillsfees.setfPid(tWarehousebills.getfId());
  5188. List<TWarehousebillsfees> warehousebillsfees = tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(tWarehousebillsfees);
  5189. // 查询附件表数据
  5190. TEnclosure enclosure = new TEnclosure();
  5191. enclosure.setfPid(tWarehousebills.getfId());
  5192. List<TEnclosure> enclosures = tEnclosureMapper.selectTEnclosureList(enclosure);
  5193. if (StringUtils.isNull(tWarehousebills)) {
  5194. return AjaxResult.success("0");
  5195. } else if (StringUtils.isNotNull(tWarehousebills)
  5196. && StringUtils.isEmpty(warehousebillsfees)
  5197. && StringUtils.isEmpty(enclosures)
  5198. && StringUtils.isEmpty(mapList)) {
  5199. return AjaxResult.success("1");
  5200. } else {
  5201. return AjaxResult.success("2");
  5202. }
  5203. }
  5204. /**
  5205. * 删除详情主表信息
  5206. *
  5207. * @param fId 详情主表ID
  5208. * @return 结果
  5209. */
  5210. @Override
  5211. public int deleteTWarehousebillsById(Long fId) {
  5212. return tWarehouseBillsMapper.deleteTWarehousebillsById(fId);
  5213. }
  5214. @Override
  5215. public String getWarehouseOutStockBillsNo(TWarehouseBills tWarehouseBills) {
  5216. return null;
  5217. }
  5218. /**
  5219. * 撤销仓储费计费入库
  5220. *
  5221. * @param fId
  5222. * @param loginUser
  5223. * @param billsType
  5224. * @return
  5225. */
  5226. @Override
  5227. @Transactional
  5228. public AjaxResult revokeTWarehousebillsById(Long fId, LoginUser loginUser, String billsType) {
  5229. if (isCalculateFees(fId)) {
  5230. return AjaxResult.error("财务已计算费用");
  5231. }
  5232. // 查询 仓库主表信息、库存明细信息
  5233. TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  5234. // 修改主表信息
  5235. tWarehousebills.setUpdateBy(loginUser.getUser().getUserName());
  5236. tWarehousebills.setUpdateTime(new Date());
  5237. tWarehousebills.setfBillstatus(2L); //撤销状态
  5238. tWarehousebills.setfReviewDate(null);// 审核通过时间清空
  5239. Long timestamp = DateUtils.getTimestamp(new Date());
  5240. tWarehousebills.setfDateChanged(timestamp.toString() + (int) (Math.random() * 900) + 100);
  5241. TWarehousebillsitems itemInFo = tWarehousebillsitemsMapper.selectItemQtyByFPid(tWarehousebills.getfId());
  5242. tWarehousebills.setfQty(itemInFo.getfQty());
  5243. tWarehousebills.setfNetweight(itemInFo.getfNetweight());
  5244. tWarehousebills.setfGrossweight(itemInFo.getfGrossweight());
  5245. tWarehousebillsfeesMapper.warehouseFeesFollowUpdate(tWarehousebills.getfId(), 2L, new Date());
  5246. // 判断是否出库
  5247. if (tWarehousebills.getfBilltype().equals(WarehouseTypeEnum.SJCK.getType())) {
  5248. cancellationInStockFee(tWarehousebills);
  5249. } else if (WarehouseTypeEnum.JSCCF.getType().equals(tWarehousebills.getfBilltype())) {
  5250. List<TWarehousebillsfees> feesList = tWarehousebillsfeesMapper.selectWarehousebillsfeesByPId(fId);
  5251. // 取出本次变更的日期
  5252. Date chargedate = DateUtils.dateAdd(tWarehousebills.getfBillingDeadline(), 1);
  5253. // 过滤出总帐信息id集合查询是否存在变更的
  5254. List<Long> generalLedgerIds = feesList.stream().filter(li -> Objects.nonNull(li.getSrcId()) && Objects.equals(WarehouseTypeEnum.KCZZ.getType(), li.getfBilltype()))
  5255. .map(TWarehousebillsfees::getSrcId).collect(toList());
  5256. // 判断库存总账是否存在二次计算
  5257. if (!generalLedgerIds.isEmpty() && tWhgenlegMapper.queryChangedByFchargedate(generalLedgerIds, chargedate) > 0) {
  5258. throw new WarehouseException("审批撤销失败,库存总账存在二次计算");
  5259. }
  5260. // 过滤货转库信息id集合查询是否存在变更的
  5261. List<Long> forwardingIds = feesList.stream().filter(li -> Objects.nonNull(li.getSrcId()) && Objects.equals(WarehouseTypeEnum.HQZY.getType(), li.getfBilltype()))
  5262. .map(TWarehousebillsfees::getSrcId).collect(toList());
  5263. // 判断货转是否存在二次计算
  5264. if (!forwardingIds.isEmpty() && tWarehousebillsitemsMapper.queryChangedByFchargedate(forwardingIds, chargedate) > 0) {
  5265. throw new WarehouseException("审批撤销失败,货转明细存在二次计算");
  5266. }
  5267. for (TWarehousebillsfees wareItem : feesList) {
  5268. if (StringUtils.isNull(wareItem.getSrcId())) {
  5269. continue;
  5270. }
  5271. if ("KCZZ".equals(wareItem.getfBilltype())) {
  5272. TWhgenleg whgenleg = new TWhgenleg();
  5273. whgenleg.setfId(wareItem.getSrcId());
  5274. whgenleg.setfChargedate(wareItem.getfChargedate());
  5275. tWhgenlegMapper.updateTWhgenleg(whgenleg);
  5276. // 如果计算之前信息
  5277. if (!wareItem.getfBillingDeadline().after(tWarehousebills.getUpdateTime())) {
  5278. // 查询时间区间内的仓储业务明细信息
  5279. List<String> timeList = new ArrayList<>();
  5280. timeList.add(DateUtils.dateToString(DateUtils.dateConversionMin(wareItem.getfBillingDeadline())));
  5281. timeList.add(DateUtils.dateToString(DateUtils.dateConversionMax(tWarehousebills.getUpdateTime())));
  5282. tWarehousebills.setItemBsDateList(timeList);
  5283. List<TWarehousebillsitems> warehousebillsitemsList = tWarehousebillsitemsMapper.selectListByCorpId(tWarehousebills);
  5284. // 过滤出出库、货转,更新对应仓储费计费日期
  5285. List<TWarehousebillsitems> itemList = warehousebillsitemsList.stream().filter(li ->
  5286. li.getfBilltype().equals(WarehouseTypeEnum.SJCK.getType()) ||
  5287. li.getfBilltype().equals(WarehouseTypeEnum.HQZY.getType())).collect(toList());
  5288. if (CollectionUtils.isNotEmpty(itemList)) {
  5289. itemList.forEach(li -> {
  5290. li.setfChargedate(wareItem.getfChargedate());
  5291. li.setUpdateTime(new Date());
  5292. tWarehousebillsitemsMapper.updateTWarehousebillsitems(li);
  5293. });
  5294. }
  5295. }
  5296. } else {
  5297. TWarehousebillsitems billsItem = new TWarehousebillsitems();
  5298. billsItem.setfId(wareItem.getSrcId());
  5299. billsItem.setfId(wareItem.getSrcId());
  5300. if (!"SJCK".equals(wareItem.getfBilltype())) {
  5301. billsItem.setfChargedate(wareItem.getfBillingDeadline());
  5302. tWarehousebillsitemsMapper.updateTWarehousebillsitems(billsItem);
  5303. } else {
  5304. billsItem.setfChargedate(wareItem.getfChargedate());
  5305. billsItem.setIsCalculateStorageFees(WarehouseTypeEnum.NOT_CALCULATE.getType());
  5306. tWarehousebillsitemsMapper.agreementApprovalRejected(billsItem);
  5307. }
  5308. }
  5309. }
  5310. }
  5311. tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  5312. return AjaxResult.success(tWarehousebills.getfDateChanged());
  5313. }
  5314. /**
  5315. * 撤销入库费用信息,并更新子订单
  5316. *
  5317. * @param tWarehousebills 订单信息
  5318. */
  5319. private void cancellationInStockFee(TWarehouseBills tWarehousebills) {
  5320. // 查询出库费用信息
  5321. List<TWarehousebillsfees> feesList = tWarehousebillsfeesMapper.selectWarehousebillsfeesByPId(tWarehousebills.getfId());
  5322. // 获取仓储费,并判断费用中是否存在仓储费
  5323. TFees ccf = tFeesMapper.seletFeesByCCF();
  5324. if (Objects.isNull(ccf)) {
  5325. throw new WarehouseException("未找到仓储费费用信息");
  5326. }
  5327. // 过滤出费用类型等于仓储费并且有商机id,并取出来进行更新仓储费计费日期
  5328. List<Long> itemIds = feesList.stream().filter(li -> Objects.equals(li.getfFeeid(), ccf.getfId()) && Objects.nonNull(li.getSrcId()))
  5329. .map(TWarehousebillsfees::getSrcId).distinct().collect(toList());
  5330. itemIds.forEach(id -> tWarehousebillsitemsMapper.updatefStorageFeeDeadlinefPid(id));
  5331. }
  5332. /**
  5333. * 撤销已审核通过的接单入库信息
  5334. *
  5335. * @param fId
  5336. * @return
  5337. */
  5338. @Override
  5339. @Transactional
  5340. public AjaxResult withdrawOrdersById(Long fId) {
  5341. // 查询 仓库主表信息、库存明细信息
  5342. TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  5343. if (tWarehousebills.getWarehouseStatus() != 6L) {
  5344. return AjaxResult.error("主单据状态异常,请确认单据状态是否已审核通过");
  5345. }
  5346. tWarehousebills.setUpdateTime(new Date());
  5347. tWarehousebills.setWarehouseStatus(2L); //撤销状态
  5348. tWarehousebills.setUpdateBy(SecurityUtils.getUsername());
  5349. Long timestamp = DateUtils.getTimestamp(new Date());
  5350. tWarehousebills.setfDateChanged(timestamp.toString() + (int) (Math.random() * 900) + 100);
  5351. TWarehousebillsitems itemInFo = tWarehousebillsitemsMapper.selectItemQtyByFPid(tWarehousebills.getfId());
  5352. tWarehousebills.setfQty(itemInFo.getfQty());
  5353. tWarehousebills.setfNetweight(itemInFo.getfNetweight());
  5354. tWarehousebills.setfGrossweight(itemInFo.getfGrossweight());
  5355. tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  5356. return AjaxResult.success(tWarehousebills.getfDateChanged());
  5357. }
  5358. /**
  5359. * 查询单据是否允许变更
  5360. *
  5361. * @param sysCheckCode
  5362. * @return 结果
  5363. */
  5364. @Override
  5365. public boolean checkCode(SysCheckCode sysCheckCode) {
  5366. String dateChanged = "";
  5367. switch (sysCheckCode.getfType()) {
  5368. case "warehouse":
  5369. // 查询仓储业务
  5370. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(sysCheckCode.getfId());
  5371. if (StringUtils.isNull(warehouseBills)) {
  5372. return false;
  5373. }
  5374. if (StringUtils.isNotNull(sysCheckCode.getfId()) && StringUtils.isEmpty(warehouseBills.getfDateChanged())) {
  5375. Long timestamp = DateUtils.getTimestamp(new Date());
  5376. warehouseBills.setUpdateTime(new Date());
  5377. warehouseBills.setUpdateBy(SecurityUtils.getUsername());
  5378. warehouseBills.setfDateChanged(timestamp.toString() + (int) (Math.random() * 900) + 100);
  5379. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  5380. return true;
  5381. }
  5382. dateChanged = warehouseBills.getfDateChanged();
  5383. break;
  5384. case "freight":
  5385. // 查询运价维护业务
  5386. TSeaprice seaprice = tSeapriceMapper.selectTSeapriceById(sysCheckCode.getfId());
  5387. if (StringUtils.isNull(seaprice)) {
  5388. return false;
  5389. }
  5390. if (StringUtils.isNotNull(sysCheckCode.getfId()) && StringUtils.isEmpty(seaprice.getfDateChanged())) {
  5391. Long timestamp = DateUtils.getTimestamp(new Date());
  5392. seaprice.setUpdateTime(new Date());
  5393. seaprice.setUpdateBy(SecurityUtils.getUsername());
  5394. seaprice.setfDateChanged(timestamp.toString() + (int) (Math.random() * 900) + 100);
  5395. tSeapriceMapper.updateTSeaprice(seaprice);
  5396. return true;
  5397. }
  5398. dateChanged = seaprice.getfDateChanged();
  5399. break;
  5400. }
  5401. if (StringUtils.isEmpty(sysCheckCode.getCodeVal()) && StringUtils.isNotEmpty(dateChanged)) {
  5402. return false;
  5403. }
  5404. // 是否符合数据库编码
  5405. if (sysCheckCode.getCodeVal().equals(dateChanged)) {
  5406. return true;
  5407. }
  5408. return false;
  5409. }
  5410. /**
  5411. * 导入【入库明细箱信息】Excel
  5412. *
  5413. * @param file 文件
  5414. * @return
  5415. */
  5416. @Override
  5417. public AjaxResult importLibraryInformation(MultipartFile file) {
  5418. List<TWarehousebillsitems> itemList = new ArrayList<>();
  5419. InputStream inputStream = null;
  5420. try {
  5421. inputStream = file.getInputStream();
  5422. String originalFilename = file.getOriginalFilename();
  5423. Workbook workbook = null;
  5424. if (originalFilename.endsWith("xls")) {
  5425. workbook = WorkbookFactory.create(inputStream);
  5426. } else if (originalFilename.endsWith("xlsx")) {
  5427. workbook = new XSSFWorkbook(inputStream);
  5428. } else {
  5429. return AjaxResult.error("文件后缀异常");
  5430. }
  5431. Sheet sheet = workbook.getSheetAt(0);
  5432. int line = 0;
  5433. for (Row rows : sheet) {
  5434. line++;
  5435. if (rows.getRowNum() == 0) {
  5436. continue;
  5437. }
  5438. TWarehousebillsitems warehousebillsitems = new TWarehousebillsitems();
  5439. for (int a = 0; a < rows.getPhysicalNumberOfCells(); a++) {
  5440. if (StringUtils.isNull(rows.getCell(a))) {
  5441. continue;
  5442. }
  5443. Cell cell = rows.getCell(a);
  5444. String value = filter(sheet.getRow(0), CellReference.convertNumToColString(cell.getColumnIndex()));
  5445. switch (value) {
  5446. case "箱号":
  5447. //设置单元格类型
  5448. cell.setCellType(CellType.STRING);
  5449. if (StringUtils.isNotEmpty(cell.getStringCellValue())) {
  5450. warehousebillsitems.setfCntrno(cell.getStringCellValue());
  5451. }
  5452. break;
  5453. case "铅封号":
  5454. //设置单元格类型
  5455. cell.setCellType(CellType.STRING);
  5456. if (StringUtils.isNotEmpty(cell.getStringCellValue())) {
  5457. warehousebillsitems.setfSealno(cell.getStringCellValue());
  5458. }
  5459. break;
  5460. case "预计件数":
  5461. //设置单元格类型
  5462. cell.setCellType(CellType.STRING);
  5463. if (StringUtils.isNotEmpty(cell.getStringCellValue())) {
  5464. warehousebillsitems.setfPlanqty(Long.valueOf(cell.getStringCellValue()));
  5465. }
  5466. break;
  5467. case "预计毛重":
  5468. //设置单元格类型
  5469. cell.setCellType(CellType.STRING);
  5470. if (StringUtils.isNotEmpty(cell.getStringCellValue())) {
  5471. warehousebillsitems.setfPlangrossweight(new BigDecimal(cell.getStringCellValue()).setScale(2, BigDecimal.ROUND_HALF_UP));
  5472. }
  5473. break;
  5474. case "预计净重":
  5475. //设置单元格类型
  5476. cell.setCellType(CellType.STRING);
  5477. if (StringUtils.isNotEmpty(cell.getStringCellValue())) {
  5478. warehousebillsitems.setfPlannetweight(new BigDecimal(cell.getStringCellValue()).setScale(2, BigDecimal.ROUND_HALF_UP));
  5479. }
  5480. break;
  5481. }
  5482. }
  5483. if (StringUtils.isNotEmpty(warehousebillsitems.getfCntrno())) {
  5484. itemList.add(warehousebillsitems);
  5485. }
  5486. }
  5487. } catch (IOException e) {
  5488. return AjaxResult.error("上传文件失败,请检查文件是否损坏");
  5489. }
  5490. String errinfo = "";
  5491. int line = 1;
  5492. for (TWarehousebillsitems li : itemList) {
  5493. if (StringUtils.isEmpty(li.getfCntrno())) {
  5494. errinfo = errinfo + "第" + line + "行箱号为空,";
  5495. }
  5496. if (StringUtils.isNull(li.getfPlanqty())) {
  5497. errinfo = errinfo + "第" + line + "行预计件数为空,";
  5498. } else {
  5499. li.setfQty(li.getfPlanqty());
  5500. }
  5501. if (StringUtils.isNull(li.getfPlangrossweight())) {
  5502. errinfo = errinfo + "第" + line + "行预计毛重为空,";
  5503. } else {
  5504. li.setfGrossweight(li.getfPlangrossweight());
  5505. }
  5506. if (StringUtils.isNull(li.getfPlannetweight())) {
  5507. errinfo = errinfo + "第" + line + "行预计净重为空,";
  5508. } else {
  5509. li.setfNetweight(li.getfPlannetweight());
  5510. }
  5511. line++;
  5512. }
  5513. if (StringUtils.isEmpty(errinfo)) {
  5514. return AjaxResult.success(itemList);
  5515. } else {
  5516. return AjaxResult.success(errinfo, itemList);
  5517. }
  5518. }
  5519. @Override
  5520. public AjaxResult getMblno(TWarehouseBills tWarehousebills) {
  5521. String kh = billnoSerialServiceImpl.getMblno("KH", tWarehousebills.getfLoadportid(), tWarehousebills.getfDestportid(), tWarehousebills.getfVoyid());
  5522. return AjaxResult.success(kh);
  5523. }
  5524. @Override
  5525. @Transactional
  5526. public AjaxResult orderExamine(TWarehouseBills tWarehouseBills, LoginUser loginUser) {
  5527. String key = "";//键
  5528. long actId = 0L;//活动id
  5529. Long fPid = tWarehouseBills.getfId();
  5530. String fidStatus = "";
  5531. Long billStatus = 2L;
  5532. //判断能否提交审核
  5533. boolean b = this.judgmentMessage(tWarehouseBills.getfBilltype(), fPid);
  5534. if (b == false) {
  5535. return AjaxResult.error("已提交审核请勿重复提交审核");
  5536. }
  5537. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fPid);
  5538. if ("XGDD".equals(tWarehouseBills.getfBilltype())) {
  5539. TVoyage tVoyage = tVoyageMapper.selectTVoyageById(warehouseBills.getfVoyid());
  5540. if (tVoyage.getfAtd() != null) {
  5541. Date date = new Date();
  5542. int i = date.compareTo(tVoyage.getfAtd());
  5543. if (i >= 0) {
  5544. return AjaxResult.error("当前日期已超过开船日期不能,不能变更!");
  5545. }
  5546. }
  5547. actId = 471L;
  5548. key = "khwarehouse.updateOrderMessage.ApprovalFlow";
  5549. fidStatus = "f_updete_status";
  5550. } else if ("XGTJ".equals(tWarehouseBills.getfBilltype())) {
  5551. actId = 472L;
  5552. key = "khwarehouse.submitUpdateOrderMessage.ApprovalFlow";
  5553. fidStatus = "f_submit_update";
  5554. } else if ("DDSC".equals(tWarehouseBills.getfBilltype())) {
  5555. actId = 473L;
  5556. key = "khwarehouse.deleteOrderMessage.ApprovalFlow";
  5557. fidStatus = "f_delete_status";
  5558. }
  5559. boolean isApprove = false;//是否开启审批流
  5560. SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique(key);
  5561. if (StringUtils.isNull(sysConfig)) {
  5562. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  5563. return AjaxResult.error("系统参数异常,未找到开启审批流参数");
  5564. }
  5565. if ("0".equals(sysConfig.getConfigValue())) {
  5566. isApprove = true;
  5567. }
  5568. if (isApprove) {
  5569. billStatus = 4L;
  5570. } else {
  5571. billStatus = 6L;
  5572. }
  5573. TWarehouseBills housebills = new TWarehouseBills();
  5574. housebills.setfId(fPid);
  5575. if ("XGDD".equals(tWarehouseBills.getfBilltype())) {
  5576. housebills.setfUpdeteStatus(billStatus);
  5577. if (billStatus.longValue() == 6L) {
  5578. AjaxResult orderMessage = this.copyKhOrderMessage(fPid);
  5579. String string = orderMessage.get("code").toString();
  5580. if ("500".equals(string)) {
  5581. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  5582. return orderMessage;
  5583. }
  5584. }
  5585. } else if ("XGTJ".equals(tWarehouseBills.getfBilltype())) {
  5586. housebills.setfSubmitUpdate(billStatus);
  5587. } else if ("DDSC".equals(tWarehouseBills.getfBilltype())) {
  5588. housebills.setfDeleteStatus(billStatus);
  5589. if (billStatus.longValue() == 6L) {
  5590. housebills.setDelFlag("1");
  5591. }
  5592. }
  5593. int i = tWarehouseBillsMapper.updateKaHeOrder(housebills);
  5594. if (i <= 0) {
  5595. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  5596. return AjaxResult.error("修改订单状态出错");
  5597. }
  5598. if (isApprove) {
  5599. AuditItems auditItems = new AuditItems();
  5600. auditItems.setLevelId(0L);
  5601. auditItems.setBillId(fPid);
  5602. auditItems.setActId(actId);
  5603. auditItems.setIffinalItem("F");
  5604. auditItems.setBillNo(warehouseBills.getfBillno());
  5605. // 存储委托方(货权方)
  5606. auditItems.setRefno1(warehouseBills.getfCorpid() + "");
  5607. // 存储业务类型(业务类型)
  5608. auditItems.setRefno2(tWarehouseBills.getfBilltype());
  5609. // 存储提单号(提单号)
  5610. if (StringUtils.isNotEmpty(warehouseBills.getfMblno())) {
  5611. auditItems.setRefno3(warehouseBills.getfMblno());
  5612. } else {
  5613. auditItems.setRefno3(warehouseBills.getfBillno());
  5614. }
  5615. auditItems.setSendUserId(loginUser.getUser().getUserId());
  5616. auditItems.setSendName(SecurityUtils.getUsername());
  5617. auditItems.setSendTime(new Date());
  5618. auditItems.setAuditUserId(loginUser.getUser().getUserId());
  5619. auditItems.setAuditItem(new Date());
  5620. auditItems.setAuditOpTime(new Date());
  5621. auditItems.setAuditMsg("提交");
  5622. auditItems.setAuditStatus("O");
  5623. auditItems.setFidStatus(fidStatus);
  5624. auditItems.setTimes(1L);
  5625. AjaxResult approvalFlow = auditItemsService.createApprovalFlow(auditItems);
  5626. // Long code = Long.valueOf(String.valueOf(approvalFlow.get("code"))).longValue();
  5627. String code = approvalFlow.get("code").toString();
  5628. // Long code = Long.valueOf(String.valueOf(ajaxResult.get("code"))).longValue();
  5629. if ("500".equals(code)) {
  5630. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  5631. }
  5632. return approvalFlow;
  5633. } else {
  5634. TWarehouseBills tWarehousebillsById = tWarehouseBillsMapper.selectTWarehousebillsById(fPid);
  5635. if (tWarehousebillsById.getfSubmitUpdate().longValue() == 6L) {
  5636. TWarehouseBills bills = new TWarehouseBills();
  5637. bills.setfId(tWarehousebillsById.getfId());
  5638. bills.setfSubmitUpdate(2L);
  5639. bills.setfUpdeteStatus(2L);
  5640. tWarehouseBillsMapper.updateKaHeOrder(bills);
  5641. }
  5642. }
  5643. return AjaxResult.success();
  5644. }
  5645. @Override
  5646. @Transactional
  5647. public AjaxResult waybillChanges(String tWarehousebills, String tWarehousebillsCntr, String tWarehousebillsCntritems, LoginUser loginUser, String billsType) {
  5648. Date date = new Date();//修改时间
  5649. String userName = loginUser.getUser().getUserName();//修改人
  5650. //修改主表信息
  5651. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehousebills, TWarehouseBills.class);
  5652. warehouseBills.setUpdateBy(userName);
  5653. warehouseBills.setUpdateTime(date);
  5654. TWarehouseBills tWarehousebillsById = tWarehouseBillsMapper.selectTWarehousebillsById(warehouseBills.getfId());
  5655. if (tWarehousebillsById.getfUpdeteStatus().longValue() != 6L) {
  5656. return AjaxResult.error("修改审批未通过,请提交审批并且审批通过后再保存修改");
  5657. }
  5658. if (tWarehousebillsById.getfSubmitUpdate().longValue() == 4L
  5659. || tWarehousebillsById.getfSubmitUpdate().longValue() == 5L
  5660. || tWarehousebillsById.getfSubmitUpdate().longValue() == 6L) {
  5661. return AjaxResult.error("修改已提交审批,不支持修改");
  5662. }
  5663. int i = tWarehouseBillsMapper.updateKaHeOrder(warehouseBills);
  5664. if (i <= 0) {
  5665. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  5666. return AjaxResult.error("更新主表信息出错!");
  5667. }
  5668. //删除箱信息
  5669. tWarehousebillsCntritemsMapper.deleteTWarehousebillsCntritemsfPid(warehouseBills.getfId());
  5670. //修改货物信息
  5671. if (StringUtils.isNotEmpty(tWarehousebillsCntr) && !"[]".equals(tWarehousebillsCntr)) {
  5672. tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(warehouseBills.getfId());
  5673. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsCntr);
  5674. List<TWarehousebillsCntr> tWarehousebillsCntrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsCntr.class);
  5675. for (TWarehousebillsCntr warehousebillsCntr : tWarehousebillsCntrList) {
  5676. if (warehousebillsCntr.getfId() == null) {
  5677. warehousebillsCntr.setfPid(warehouseBills.getfId());
  5678. }
  5679. if (warehousebillsCntr.getCreateTime() == null) {
  5680. warehousebillsCntr.setCreateTime(date);
  5681. } else {
  5682. warehousebillsCntr.setUpdateTime(date);
  5683. }
  5684. if (StringUtils.isNull(warehousebillsCntr.getCreateBy())) {
  5685. warehousebillsCntr.setCreateBy(userName);
  5686. } else {
  5687. warehousebillsCntr.setUpdateBy(userName);
  5688. }
  5689. tWarehousebillsCntrMapper.insertTWarehousebillsCntr(warehousebillsCntr);
  5690. }
  5691. }
  5692. TWarehousebillsCntr warehousebillsCntr = tWarehousebillsCntrMapper.selectTWarehousebillsCntrByPId(warehouseBills.getfId());
  5693. //修改箱信息
  5694. if (StringUtils.isNotEmpty(tWarehousebillsCntritems) && !"[]".equals(tWarehousebillsCntritems)) {
  5695. JSONArray objects = JSONArray.parseArray(tWarehousebillsCntritems);
  5696. List<TWarehousebillsCntritems> tWarehousebillsCntritemsList = JSONObject.parseArray(objects.toJSONString(), TWarehousebillsCntritems.class);
  5697. for (TWarehousebillsCntritems warehousebillsCntritems : tWarehousebillsCntritemsList) {
  5698. if (warehousebillsCntritems.getfId() == null) {
  5699. warehousebillsCntritems.setfPid(warehouseBills.getfId());
  5700. }
  5701. if (warehousebillsCntritems.getCreateTime() == null) {
  5702. warehousebillsCntritems.setCreateTime(date);
  5703. } else {
  5704. warehousebillsCntritems.setUpdateTime(date);
  5705. }
  5706. if (StringUtils.isNull(warehousebillsCntritems.getCreateBy())) {
  5707. warehousebillsCntritems.setCreateBy(userName);
  5708. } else {
  5709. warehousebillsCntritems.setUpdateBy(userName);
  5710. }
  5711. //判断箱是否存在,判断箱型是否一致
  5712. AjaxResult ajaxResult = this.judgeBoxPile(warehousebillsCntritems, warehousebillsCntr.getfCntrid());
  5713. String code = ajaxResult.get("code").toString();
  5714. if ("500".equals(code)) {
  5715. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  5716. return AjaxResult.success("error", ajaxResult.get("msg").toString());
  5717. }
  5718. tWarehousebillsCntritemsMapper.insertTWarehousebillsCntritems(warehousebillsCntritems);
  5719. }
  5720. }
  5721. return AjaxResult.success();
  5722. }
  5723. @Override
  5724. @Transactional
  5725. public AjaxResult copyKhOrderMessage(Long fId) {
  5726. int i = tWarehousebillsLoggerMapper.copyTwarehousebills(fId);
  5727. tWarehousebillsCntrLoggerMapper.copyTwarehousebillsCntr(fId);
  5728. tWarehousebillsCntritemsLoggerMapper.copyTwarehousebillsCntritems(fId);
  5729. tWarehousebillsfeesLoggerMapper.copyTWarehousebillsfees(fId);
  5730. if (i > 0) {
  5731. return AjaxResult.success();
  5732. } else {
  5733. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  5734. return AjaxResult.error("运单变更记录日志出错");
  5735. }
  5736. }
  5737. @Override
  5738. public AjaxResult exportInventory(TWarehouseBills tWarehouseBills) {
  5739. //获取船名
  5740. TVessel tVessel = tVesselMapper.selectTVesselById(tWarehouseBills.getfVslid());
  5741. //获取航次
  5742. TVoyage tVoyage = tVoyageMapper.selectTVoyageById(tWarehouseBills.getfVoyid());
  5743. //1.创建一个workbook,对应一个excel文件
  5744. HSSFWorkbook wb = new HSSFWorkbook();
  5745. //2.在workbook中添加一个sheet,对应Excel中的sheet
  5746. HSSFSheet sheet = wb.createSheet("清单");
  5747. //设置每一列的列宽
  5748. sheet.setColumnWidth(0, 256 * 15);
  5749. sheet.setColumnWidth(1, 256 * 20);
  5750. sheet.setColumnWidth(2, 256 * 20);
  5751. sheet.setColumnWidth(3, 256 * 20);
  5752. sheet.setColumnWidth(4, 256 * 15);
  5753. sheet.setColumnWidth(5, 256 * 15);
  5754. sheet.setColumnWidth(6, 256 * 15);
  5755. sheet.setColumnWidth(7, 256 * 35);
  5756. sheet.setColumnWidth(8, 256 * 15);
  5757. sheet.setColumnWidth(9, 256 * 15);
  5758. sheet.setColumnWidth(10, 256 * 15);
  5759. sheet.setColumnWidth(11, 256 * 20);
  5760. sheet.setColumnWidth(12, 256 * 35);
  5761. sheet.setColumnWidth(13, 256 * 35);
  5762. sheet.setColumnWidth(14, 256 * 25);
  5763. sheet.setColumnWidth(15, 256 * 25);
  5764. //3.设置样式以及字体样式
  5765. HSSFCellStyle titleStyle = ExcelUtils.createTitleCellStyle(wb);
  5766. HSSFCellStyle headerStyle = ExcelUtils.createHeadCellStyle(wb);
  5767. HSSFCellStyle contentStyle = ExcelUtils.createContentCellStyle(wb);
  5768. //4.创建标题,合并标题单元格
  5769. //行号
  5770. int rowNum = 0;
  5771. //创建第一行,索引从0开始(标题行)
  5772. HSSFRow row0 = sheet.createRow(rowNum++);
  5773. row0.setHeight((short) 800);// 设置行高
  5774. String title = "青岛凯和志诚物流装船清单";
  5775. HSSFCell c00 = row0.createCell(0);
  5776. c00.setCellValue(title);
  5777. c00.setCellStyle(contentStyle);
  5778. // 合并单元格,参数依次为起始行,结束行,起始列,结束列 (索引0开始)
  5779. sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 15));//标题合并单元格操作,总列数为16
  5780. //第三行
  5781. HSSFRow row1 = sheet.createRow(rowNum++);
  5782. row1.setHeight((short) 500);
  5783. String string = "船名:" + tVessel.getfName() + " " + "航次:" + tVoyage.getfNo() + " " + "离港日期";
  5784. String[] row_first = {string};
  5785. for (int i = 0; i < row_first.length; i++) {
  5786. HSSFCell tempCell = row1.createCell(i);
  5787. tempCell.setCellValue(row_first[i]);
  5788. tempCell.setCellStyle(contentStyle);
  5789. }
  5790. //合并单元格
  5791. sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 15));
  5792. //第四行
  5793. HSSFRow row3 = sheet.createRow(rowNum++);
  5794. row3.setHeight((short) 500);
  5795. String[] row_third = {"序号", "提单号", "箱号", "铅封号", "尺寸", "类型", "重量", "箱公司", "始发港", "目的港", "货名", "运输条款", "订舱公司", "收货公司名称", "收货人地址", "收货电话"};
  5796. for (int i = 0; i < row_third.length; i++) {
  5797. HSSFCell tempCell = row3.createCell(i);
  5798. tempCell.setCellValue(row_third[i]);
  5799. tempCell.setCellStyle(contentStyle);
  5800. }
  5801. //根据船名航次查询清单
  5802. List<DeriveInventoryExcel> list = tWarehouseBillsMapper.deriveInventory(tWarehouseBills);
  5803. for (int i = 0; i < list.size(); i++) {
  5804. HSSFRow tempRow = sheet.createRow(rowNum++);
  5805. tempRow.setHeight((short) 500);
  5806. //循环单元格填入数据
  5807. for (int j = 0; j < 16; j++) {
  5808. HSSFCell tempCell = tempRow.createCell(j);
  5809. tempCell.setCellStyle(contentStyle);
  5810. String cellValue = "";
  5811. if (j == 0) {
  5812. //序号
  5813. cellValue = list.get(i).getRankNo().toString();
  5814. } else if (j == 1) {
  5815. //提单号
  5816. cellValue = list.get(i).getfMblno();
  5817. } else if (j == 2) {
  5818. //箱号
  5819. cellValue = list.get(i).getfCntrno();
  5820. } else if (j == 3) {
  5821. //铅封号
  5822. cellValue = list.get(i).getfSealno();
  5823. } else if (j == 4) {
  5824. //尺寸
  5825. cellValue = list.get(i).getMeasure();
  5826. } else if (j == 5) {
  5827. //类型
  5828. cellValue = list.get(i).getGenre();
  5829. } else if (j == 6) {
  5830. //重量
  5831. cellValue = list.get(i).getfCntrweight().toString();
  5832. } else if (j == 7) {
  5833. //箱公司
  5834. cellValue = list.get(i).getBoxCompany();
  5835. } else if (j == 8) {
  5836. //始发港
  5837. cellValue = list.get(i).getPortOfDeparture();
  5838. } else if (j == 9) {
  5839. //目的港
  5840. cellValue = list.get(i).getDestinationPort();
  5841. } else if (j == 10) {
  5842. //货名
  5843. cellValue = list.get(i).getGoodName();
  5844. } else if (j == 11) {
  5845. //运输条款
  5846. cellValue = list.get(i).getTransitClause();
  5847. } else if (j == 12) {
  5848. //订舱公司
  5849. cellValue = list.get(i).getBookingCompany();
  5850. } else if (j == 13) {
  5851. //收货公司名称
  5852. cellValue = list.get(i).getfConsigneername();
  5853. } else if (j == 14) {
  5854. //收货公司地址
  5855. cellValue = list.get(i).getfConsigneeattn();
  5856. } else if (j == 15) {
  5857. //收货公司电话
  5858. cellValue = list.get(i).getfConsigneetel();
  5859. }
  5860. tempCell.setCellValue(cellValue);
  5861. }
  5862. }
  5863. //导出excel
  5864. String fileName = "清单.xls";
  5865. try {
  5866. OutputStream out = null;
  5867. out = new FileOutputStream(getAbsoluteFile(fileName));
  5868. wb.write(out);
  5869. if (null != wb && null != out) {
  5870. wb.write(out);
  5871. wb.close();
  5872. out.close();
  5873. }
  5874. return AjaxResult.success(fileName);
  5875. } catch (Exception e) {
  5876. e.printStackTrace();
  5877. return AjaxResult.error("导出Excel失败");
  5878. }
  5879. }
  5880. @Override
  5881. public AjaxResult exportVoyageDetails(TWarehouseBills tWarehouseBills) {
  5882. // 1.创建一个workbook,对应一个excel文件
  5883. HSSFWorkbook wb = new HSSFWorkbook();
  5884. // 2.在workbook中添加一个sheet,对应Excel中的sheet
  5885. HSSFSheet sheet = wb.createSheet("明细");
  5886. HSSFCellStyle cellStyle = wb.createCellStyle();
  5887. // 水平居中
  5888. cellStyle.setAlignment(HorizontalAlignment.CENTER);
  5889. // 垂直居中
  5890. cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
  5891. // 上边框
  5892. cellStyle.setBorderTop(BorderStyle.THIN);
  5893. // 下边框
  5894. cellStyle.setBorderBottom(BorderStyle.THIN);
  5895. // 左边框
  5896. cellStyle.setBorderLeft(BorderStyle.THIN);
  5897. // 右边框
  5898. cellStyle.setBorderRight(BorderStyle.THIN);
  5899. // 4.创建标题,合并标题单元格
  5900. // 行号
  5901. int rowNum = 0;
  5902. // 第一行
  5903. HSSFRow first = sheet.createRow(rowNum++);
  5904. String[] left = {"序号", "提单号", "航次", "箱型", "箱量", "始发港", "目的港", "运输条款", "货名", "装船日期", "卸船日期"};
  5905. List<String> middle = tFeesMapper.selectTFeesNameList();
  5906. String[] right = {"拖车费", "场地费", "换单费", "海运费", "合计金额", "改单费", "付款单位与日期", "换单费付费情况", "订舱公司全称", "收货公司全称", "收货公司联系人及联系方式"};
  5907. List<String> all = new ArrayList<>();
  5908. Collections.addAll(all, left);
  5909. all.addAll(middle);
  5910. Collections.addAll(all, right);
  5911. int size = all.size();
  5912. for (int i = 0; i < size; i++) {
  5913. HSSFCell tempCell = first.createCell(i);
  5914. if (i > 10 && i < size - 11) {
  5915. tempCell.setCellValue(all.get(i) + "单价");
  5916. } else {
  5917. tempCell.setCellValue(all.get(i));
  5918. }
  5919. tempCell.setCellStyle(cellStyle);
  5920. }
  5921. // 根据船名航次查询清单
  5922. List<Map<String, Object>> list = tWarehouseBillsMapper.voyageDetails(tWarehouseBills);
  5923. if (list.size() < 1) {
  5924. return AjaxResult.error("无数据,导出Excel失败");
  5925. }
  5926. for (Map<String, Object> map : list) {
  5927. Long fId = Long.parseLong(StringUtils.objToStr(map.get("fId")));
  5928. List<Map<String, Object>> fees = tWarehousebillsfeesMapper.voyageFeeDetails(fId, "D");
  5929. String count = map.get("fCntrcount") == null ? "0" : String.valueOf(map.get("fCntrcount"));
  5930. BigDecimal shipping = BigDecimal.ZERO;
  5931. BigDecimal documents = BigDecimal.ZERO;
  5932. BigDecimal insurance = BigDecimal.ZERO;
  5933. BigDecimal allAmount = BigDecimal.ZERO;
  5934. Map<Integer, String> feeMap = new HashMap<>();
  5935. for (Map<String, Object> fee : fees) {
  5936. String feeName = StringUtils.objToStr(fee.get("feeName"));
  5937. String unitPrice = fee.get("fUnitprice") == null ? "0" : String.valueOf(fee.get("fUnitprice"));
  5938. allAmount = allAmount.add(new BigDecimal(fee.get("fAmount") == null ? "0" : String.valueOf(fee.get("fAmount"))));
  5939. int i = middle.indexOf(feeName);
  5940. if (i >= 0) {
  5941. feeMap.put(11 + i, StringUtils.numHandle(unitPrice));
  5942. }
  5943. if (StringUtils.equals(feeName, "海运费")) {
  5944. shipping = new BigDecimal(unitPrice);
  5945. }
  5946. if (StringUtils.equals(feeName, "换单费")) {
  5947. documents = new BigDecimal(unitPrice);
  5948. }
  5949. if (StringUtils.contains(feeName, "保险")) {
  5950. insurance = new BigDecimal(unitPrice);
  5951. }
  5952. }
  5953. HSSFRow tempRow = sheet.createRow(rowNum++);
  5954. // 循环单元格填入数据
  5955. for (int j = 0; j < size; j++) {
  5956. HSSFCell tempCell = tempRow.createCell(j);
  5957. String cellValue = "";
  5958. if (j == 0) {
  5959. // 序号
  5960. cellValue = StringUtils.objToStr(map.get("rankNo"));
  5961. } else if (j == 1) {
  5962. // 提单号
  5963. cellValue = StringUtils.objToStr(map.get("fMblno"));
  5964. } else if (j == 2) {
  5965. // 航次
  5966. cellValue = StringUtils.objToStr(map.get("voyNo"));
  5967. } else if (j == 3) {
  5968. // 箱型
  5969. cellValue = StringUtils.objToStr(map.get("fCntrno"));
  5970. } else if (j == 4) {
  5971. // 箱量
  5972. cellValue = count;
  5973. } else if (j == 5) {
  5974. // 始发港
  5975. cellValue = StringUtils.objToStr(map.get("loadportName"));
  5976. } else if (j == 6) {
  5977. // 目的港
  5978. cellValue = StringUtils.objToStr(map.get("destportName"));
  5979. } else if (j == 7) {
  5980. // 运输条款
  5981. cellValue = StringUtils.objToStr(map.get("fLoadportMode")) + "-" + StringUtils.objToStr(map.get("fDestportMode"));
  5982. } else if (j == 8) {
  5983. // 货名
  5984. cellValue = StringUtils.objToStr(map.get("goodsName"));
  5985. } else if (j == 9) {
  5986. // 装船日期
  5987. cellValue = StringUtils.objToStr(map.get("fEtd"));
  5988. } else if (j == 10) {
  5989. // 卸船日期
  5990. cellValue = StringUtils.objToStr(map.get("fEta"));
  5991. } else if (j == size - 9) {
  5992. // 换单费
  5993. cellValue = documents.multiply(new BigDecimal(count)).toString();
  5994. } else if (j == size - 8) {
  5995. // 海运费
  5996. cellValue = (shipping.add(insurance)).multiply(new BigDecimal(count)).toString();
  5997. } else if (j == size - 7) {
  5998. // 合计金额
  5999. cellValue = allAmount.toString();
  6000. } else if (j == size - 3) {
  6001. // 订舱公司全称
  6002. cellValue = StringUtils.objToStr(map.get("corpName"));
  6003. } else if (j == size - 2) {
  6004. // 收货公司全称
  6005. cellValue = StringUtils.objToStr(map.get("fConsigneername"));
  6006. } else if (j == size - 1) {
  6007. // 收货公司联系人及联系方式
  6008. cellValue = StringUtils.objToStr(map.get("fConsigneetel"));
  6009. }
  6010. tempCell.setCellValue(StringUtils.numHandle(cellValue));
  6011. tempCell.setCellStyle(cellStyle);
  6012. }
  6013. feeMap.forEach((key, value) -> {
  6014. tempRow.getCell(key).setCellValue(value);
  6015. });
  6016. }
  6017. for (int i = 0; i < size; i++) {
  6018. sheet.autoSizeColumn(i);
  6019. sheet.setColumnWidth(i, sheet.getColumnWidth(i) * 17 / 10);
  6020. }
  6021. // 导出excel
  6022. String fileName = list.get(0).get("voyNo").toString() + "航次收支明细表.xls";
  6023. try {
  6024. OutputStream out = new FileOutputStream(getAbsoluteFile(fileName));
  6025. wb.write(out);
  6026. wb.close();
  6027. out.close();
  6028. return AjaxResult.success(fileName);
  6029. } catch (Exception e) {
  6030. e.printStackTrace();
  6031. return AjaxResult.error("导出Excel失败");
  6032. }
  6033. }
  6034. @Override
  6035. public AjaxResult deleteOrder(TWarehouseBills tWarehouseBills, LoginUser loginUser) {
  6036. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(tWarehouseBills.getfId());
  6037. if (warehouseBills == null) {
  6038. return AjaxResult.error("未找到订单信息,请确认");
  6039. }
  6040. //修改订单状态
  6041. TWarehouseBills bills = new TWarehouseBills();
  6042. bills.setfId(tWarehouseBills.getfId());
  6043. bills.setDelFlag("1");
  6044. bills.setUpdateBy(loginUser.getUser().getUserName());
  6045. bills.setUpdateTime(new Date());
  6046. int i = tWarehouseBillsMapper.updateKaHeOrder(bills);
  6047. if (i <= 0) {
  6048. return AjaxResult.error("删除订单失败");
  6049. }
  6050. //删除审批流
  6051. int billId = auditItemsMapper.deleteAuditItemsByBillId(tWarehouseBills.getfId());
  6052. return AjaxResult.success();
  6053. }
  6054. @Override
  6055. @Transactional
  6056. public AjaxResult batchModifyingVesselVoyage(Long[] fIds, Long fVessel, Long fVoyage, Long fCargoPlanning) {
  6057. //先查要改的多个订单的船名航次是否一直
  6058. Long fLoadportid = null;
  6059. Long fDestportid = null;
  6060. Integer fLaneid = null;
  6061. if (fVessel != null && fVoyage != null) {
  6062. List<TWarehouseBills> tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsByIds(fIds);
  6063. //循环判断是否存在已经离港出运或者到港卸货的船名航次
  6064. if (CollectionUtils.isNotEmpty(tWarehouseBills) && fCargoPlanning.longValue() == 0) {
  6065. List<String> list = new ArrayList<>();
  6066. List<String> boxMessage = new ArrayList<>();
  6067. for (TWarehouseBills tWarehouseBill : tWarehouseBills) {
  6068. if (tWarehouseBill.getfCargoPlanning().longValue() == 0) {
  6069. list.add(tWarehouseBill.getfBillno());
  6070. }
  6071. //查询货物信息中的箱量
  6072. TWarehousebillsCntr warehousebillsCntr = tWarehousebillsCntrMapper.selectTWarehousebillsCntrByPId(tWarehouseBill.getfId());
  6073. //查询箱信息数量
  6074. List<TWarehousebillsCntritems> tWarehousebillsCntritems = tWarehousebillsCntritemsMapper.selectTWarehousebillsCntritemsByPId(tWarehouseBill.getfId());
  6075. if (CollectionUtils.isEmpty(tWarehousebillsCntritems) || tWarehousebillsCntritems.size() != warehousebillsCntr.getfCntrcount()) {
  6076. boxMessage.add(tWarehouseBill.getfBillno());
  6077. }
  6078. }
  6079. if (CollectionUtils.isNotEmpty(list) || CollectionUtils.isNotEmpty(boxMessage)) {
  6080. String message = "";
  6081. if (CollectionUtils.isNotEmpty(boxMessage) && CollectionUtils.isNotEmpty(list)) {
  6082. StringBuffer stringBuffer = new StringBuffer("订单缺少箱信息或者箱量不足,订单号为:");
  6083. stringBuffer.append(org.apache.commons.lang.StringUtils.join(boxMessage.toArray(), ","));
  6084. StringBuffer buffer = new StringBuffer("订单已配船请勿重复配船,订单号为:");
  6085. buffer.append(org.apache.commons.lang.StringUtils.join(list.toArray(), ","));
  6086. message = message + stringBuffer.toString() + "," + buffer.toString();
  6087. } else if (CollectionUtils.isNotEmpty(boxMessage) && CollectionUtils.isEmpty(list)) {
  6088. StringBuffer stringBuffer = new StringBuffer("订单缺少箱信息或者箱量不足,订单号为:");
  6089. stringBuffer.append(org.apache.commons.lang.StringUtils.join(boxMessage.toArray(), ","));
  6090. message = message + stringBuffer.toString();
  6091. } else if (CollectionUtils.isEmpty(boxMessage) && CollectionUtils.isNotEmpty(list)) {
  6092. StringBuffer buffer = new StringBuffer("订单已配船请勿重复配船,订单号为:");
  6093. buffer.append(org.apache.commons.lang.StringUtils.join(list.toArray(), ","));
  6094. message = message + buffer.toString();
  6095. }
  6096. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  6097. return AjaxResult.error(message);
  6098. }
  6099. }
  6100. ArrayList<TWarehouseBills> collect = tWarehouseBills.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(TWarehouseBills -> TWarehouseBills.getfVslid() + ";" + TWarehouseBills.getfVoyid()))), ArrayList::new));
  6101. if (collect.size() > 1) {
  6102. return AjaxResult.error("请选择相同的船名航次");
  6103. }
  6104. } else {
  6105. List<TWarehouseBills> tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsByIds(fIds);
  6106. if (CollectionUtils.isNotEmpty(tWarehouseBills) && fCargoPlanning.longValue() == 1) {
  6107. List<String> list = new ArrayList<>();
  6108. for (TWarehouseBills tWarehouseBill : tWarehouseBills) {
  6109. if (tWarehouseBill.getfArrivalStatus().longValue() != 0) {
  6110. list.add(tWarehouseBill.getfBillno());
  6111. }
  6112. }
  6113. if (CollectionUtils.isNotEmpty(list)) {
  6114. StringBuffer stringBuffer = new StringBuffer("订单已离港出运或到港卸货,订单号为:");
  6115. stringBuffer.append(org.apache.commons.lang.StringUtils.join(list.toArray(), ","));
  6116. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  6117. return AjaxResult.error(stringBuffer.toString());
  6118. }
  6119. }
  6120. }
  6121. //一致批量更改船名航次
  6122. /*if (fVoyage != null) {
  6123. TVoyage voyage = tVoyageMapper.selectTVoyageById(fVoyage);
  6124. fLoadportid = voyage.getfPortofloadid();
  6125. fDestportid = voyage.getfDistinationid();
  6126. fLaneid = voyage.getfLaneid();
  6127. }*/
  6128. int i = tWarehouseBillsMapper.updateTWarehousebillsByIds(fIds, fVessel, fVoyage, fCargoPlanning,
  6129. fLoadportid, fDestportid, fLaneid);
  6130. if (i >= 1) {
  6131. return AjaxResult.success();
  6132. } else {
  6133. return AjaxResult.error("批量更新失败");
  6134. }
  6135. }
  6136. @Override
  6137. public int updateKaHeOrder(TWarehouseBills tWarehousebills) {
  6138. return tWarehouseBillsMapper.updateKaHeOrder(tWarehousebills);
  6139. }
  6140. @Override
  6141. public List<SingleVoyageByShipExcel> singleVoyageByShip(TWarehouseBills tWarehouseBills) {
  6142. return tWarehouseBillsMapper.singleVoyageByShip(tWarehouseBills);
  6143. }
  6144. private String getAbsoluteFile(String fileName) {
  6145. String downloadPath = RuoYiConfig.getDownloadPath() + fileName;
  6146. File desc = new File(downloadPath);
  6147. if (!desc.getParentFile().exists()) {
  6148. desc.getParentFile().mkdirs();
  6149. }
  6150. return downloadPath;
  6151. }
  6152. /**
  6153. * 判断能否提交审批
  6154. *
  6155. * @param billType
  6156. * @param fid
  6157. * @return
  6158. */
  6159. public boolean judgmentMessage(String billType, Long fid) {
  6160. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fid);
  6161. if ("XGDD".equals(billType) && warehouseBills.getfUpdeteStatus() == 2L) {
  6162. return true;
  6163. } else if ("XGDD".equals(billType) && warehouseBills.getfUpdeteStatus() == 3L) {
  6164. return true;
  6165. } else if ("XGTJ".equals(billType) && warehouseBills.getfSubmitUpdate() == 2L) {
  6166. return true;
  6167. } else if ("XGTJ".equals(billType) && warehouseBills.getfSubmitUpdate() == 3L) {
  6168. return true;
  6169. } else if ("DDSC".equals(billType) && warehouseBills.getfDeleteStatus() == 2L) {
  6170. return true;
  6171. } else if ("DDSC".equals(billType) && warehouseBills.getfDeleteStatus() == 3L) {
  6172. return true;
  6173. }
  6174. return false;
  6175. }
  6176. /**
  6177. * 撤销入账
  6178. *
  6179. * @param warehouseBills 主表
  6180. * @param warehousebillsitems 明细
  6181. * @param loginUser 当前登录人
  6182. * @param billsType 状态
  6183. * @return 结果
  6184. */
  6185. @Override
  6186. @Transactional
  6187. public AjaxResult revokeTWarehousebillsById1(String warehouseBills, String warehousebillsitems, String tEnclosure,
  6188. String warehousebillsfeesCr, String warehousebillsfeesDr, LoginUser loginUser, String tCntr, String billsType) {
  6189. if (StringUtils.isNull(warehouseBills) || "[]".equals(warehouseBills)) {
  6190. return AjaxResult.error("未找到主表信息");
  6191. }
  6192. if (StringUtils.isNull(warehousebillsitems) || "[]".equals(warehousebillsitems)) {
  6193. return AjaxResult.error("未找到入账信息");
  6194. }
  6195. TWarehouseBills tWarehousebills = JSONArray.parseObject(warehouseBills, TWarehouseBills.class);
  6196. tWarehousebills.setfItemsStatus(1L); //撤销状态
  6197. tWarehousebills.setUpdateTime(new Date());
  6198. tWarehousebills.setUpdateBy(loginUser.getUsername());
  6199. Long timestamp = DateUtils.getTimestamp(new Date());
  6200. tWarehousebills.setfDateChanged(timestamp.toString() + (int) (Math.random() * 900) + 100);
  6201. tEnclosureMapper.deleteByFPid(tWarehousebills.getfId());
  6202. tWarehousebillsfeesMapper.deleteByFPid(tWarehousebills.getfId());
  6203. tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(tWarehousebills.getfId());
  6204. JSONArray warehouseJSON = JSONArray.parseArray(warehousebillsitems);
  6205. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  6206. if (StringUtils.isNotEmpty(warehousebillsitemsList)) {
  6207. int i = 1;
  6208. for (TWarehousebillsitems wb : warehousebillsitemsList) {
  6209. TGoods goods = tGoodsMapper.selectTGoodsById(wb.getfGoodsid());
  6210. if ("1".equals(goods.getIfCntrno()) && StringUtils.isNull(wb.getfCntrno())) {
  6211. return AjaxResult.error("仓库明细第" + i + "行未找到箱号");
  6212. }
  6213. if (WarehouseTypeEnum.SJRK_REVOKE.getType().equals(billsType)) { // 撤销 入库
  6214. // 查询库存总账
  6215. TWhgenleg tWhgenle = queryWhgenlegService.stockWhgenleg(tWarehousebills, wb, goods.getIfCntrno(), WarehouseTypeEnum.UNDO_OPERATION.getType());
  6216. if (wb.getfIsInventory().equals(0L)) {
  6217. if (StringUtils.isNotNull(tWhgenle) && (wb.getfQty() <= tWhgenle.getfQtyblc())) { // 非空 且 撤销数 <= 结余数
  6218. updateTWhgenlegData(wb, tWhgenle.getfId(), billsType);
  6219. TWhgenleg whgenleg = tWhgenlegMapper.selectTWhgenlegById(tWhgenle.getfId());
  6220. Long qtyd = whgenleg.getfQtyd();
  6221. BigDecimal grossweightd = whgenleg.getfGrossweightd();
  6222. BigDecimal netweightd = whgenleg.getfNetweightd();
  6223. if (qtyd == 0 && grossweightd.compareTo(BigDecimal.ZERO) == 0 && netweightd.compareTo(BigDecimal.ZERO) == 0) {
  6224. tWhgenlegMapper.deleteTWhgenlegById(whgenleg.getfId());
  6225. }
  6226. } else { // 撤销数>结余数
  6227. throw new WarehouseException("第" + i + "行撤销数大于库存结余数");
  6228. }
  6229. }
  6230. wb.setfBillstatus(10L);
  6231. } else if (WarehouseTypeEnum.SJCK_REVOKE.getType().equals(billsType)) { // 撤销出库
  6232. TWarehousebillsitems item = tWarehousebillsitemsMapper.selectTWarehousebillsitemsById(wb.getfId());
  6233. if (Objects.nonNull(item.getfStorageFeeDeadline())) {
  6234. throw new WarehouseException("明细信息已计算仓储费不允许撤销");
  6235. }
  6236. // 查询库存总账
  6237. TWhgenleg tWhgenle = queryWhgenlegService.stockWhgenleg(tWarehousebills, wb, goods.getIfCntrno(), WarehouseTypeEnum.UNDO_OPERATION.getType());
  6238. if (StringUtils.isNotNull(tWhgenle)) { // 非空
  6239. updateTWhgenlegData(wb, tWhgenle.getfId(), billsType);
  6240. } else {
  6241. throw new WarehouseException("第" + i + "行未查询到库存信息");
  6242. }
  6243. wb.setfBillstatus(10L);
  6244. } else if (WarehouseTypeEnum.CKDB_REVOKE.getType().equals(billsType)) { // 调拨 撤销
  6245. if (wb.getCreateTime().before(new Date(1637196750745L))) {
  6246. throw new WarehouseException("该单据已被锁定,请联系管理员");
  6247. }
  6248. if (!Objects.equals(wb.getfWarehouselocid(), wb.getfTransferWarehouselocid())) {
  6249. // 1、新货权方撤销入库
  6250. TWhgenleg tWhgenle = queryWhgenlegService.secondStockWhgenleg(tWarehousebills, wb, goods.getIfCntrno(), WarehouseTypeEnum.CONFIRM_OPERATION.getType());
  6251. if (StringUtils.isNotNull(tWhgenle) && (wb.getfQty() <= tWhgenle.getfQtyblc())) {
  6252. updateTWhgenlegData(wb, tWhgenle.getfId(), WarehouseTypeEnum.SJRK_REVOKE.getType());
  6253. TWhgenleg whgenleg = tWhgenlegMapper.selectTWhgenlegById(tWhgenle.getfId());
  6254. Long qtyd = whgenleg.getfQtyd();
  6255. BigDecimal grossweightd = whgenleg.getfGrossweightd();
  6256. BigDecimal netweightd = whgenleg.getfNetweightd();
  6257. if (qtyd == 0 && grossweightd.compareTo(BigDecimal.ZERO) == 0 && netweightd.compareTo(BigDecimal.ZERO) == 0) {
  6258. tWhgenlegMapper.deleteTWhgenlegById(whgenleg.getfId());
  6259. }
  6260. } else {
  6261. throw new WarehouseException("第" + i + "行撤销数大于库存结余数");
  6262. }
  6263. // 2、原货权方撤销出库
  6264. TWhgenleg whgenleg = queryWhgenlegService.stockWhgenleg(tWarehousebills, wb, goods.getIfCntrno(), WarehouseTypeEnum.UNDO_OPERATION.getType());
  6265. updateTWhgenlegData(wb, whgenleg.getfId(), WarehouseTypeEnum.SJCK_REVOKE.getType());
  6266. }
  6267. wb.setfBillstatus(10L);
  6268. } else if (WarehouseTypeEnum.HWTG_REVOKE.getType().equals(billsType)) { // 调拨 撤销
  6269. if (wb.getCreateTime().before(new Date(1637196750745L))) {
  6270. throw new WarehouseException("该单据已被锁定,请联系管理员");
  6271. }
  6272. // 1、新货权方撤销入库
  6273. // 查询库存总账
  6274. TWhgenleg tWhgenle = queryWhgenlegService.secondStockWhgenleg(tWarehousebills, wb, goods.getIfCntrno(), WarehouseTypeEnum.CONFIRM_OPERATION.getType());
  6275. if (StringUtils.isNotNull(tWhgenle) && (wb.getfQty() <= tWhgenle.getfQtyblc())) {
  6276. updateTWhgenlegData(wb, tWhgenle.getfId(), WarehouseTypeEnum.SJRK_REVOKE.getType());
  6277. } else {
  6278. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  6279. return AjaxResult.error("第" + i + "行撤销数大于库存结余数");
  6280. }
  6281. // 2、原货权方撤销出库
  6282. // 查询库存总账
  6283. TWhgenleg whgenleg = queryWhgenlegService.stockWhgenleg(tWarehousebills, wb, goods.getIfCntrno(), WarehouseTypeEnum.UNDO_OPERATION.getType());
  6284. updateTWhgenlegData(wb, whgenleg.getfId(), WarehouseTypeEnum.SJCK_REVOKE.getType());
  6285. wb.setfBillstatus(10L);
  6286. } else if (WarehouseTypeEnum.HQZY_REVOKE.getType().equals(billsType)) { // 货转撤销
  6287. if (wb.getCreateTime().before(new Date(1637196750745L))) {
  6288. throw new WarehouseException("该单据已被锁定,请联系管理员");
  6289. }
  6290. Long fCorpid = tWarehousebills.getfCorpid();// 原货权方
  6291. Long fTocorpid = tWarehousebills.getfTocorpid(); // 新货权方
  6292. // 1、新货权方撤销入库
  6293. // 查询库存总账
  6294. tWarehousebills.setfCorpid(fTocorpid);
  6295. TWhgenleg tWhgenle1 = queryWhgenlegService.secondStockWhgenleg(tWarehousebills, wb, goods.getIfCntrno(), WarehouseTypeEnum.CONFIRM_OPERATION.getType());
  6296. if (StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())) {
  6297. updateTWhgenlegData(wb, tWhgenle1.getfId(), WarehouseTypeEnum.SJRK_REVOKE.getType());
  6298. } else {
  6299. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  6300. return AjaxResult.error("第" + i + "行撤销数大于库存结余数");
  6301. }
  6302. // 2、原货权方撤销出库
  6303. // 查询库存总账
  6304. tWarehousebills.setfCorpid(fCorpid);
  6305. TWhgenleg tWhgenle2 = queryWhgenlegService.stockWhgenleg(tWarehousebills, wb, goods.getIfCntrno(), WarehouseTypeEnum.UNDO_OPERATION.getType());
  6306. updateTWhgenlegData(wb, tWhgenle2.getfId(), WarehouseTypeEnum.SJCK_REVOKE.getType());
  6307. wb.setfBillstatus(1L);
  6308. }
  6309. i++;
  6310. wb.setUpdateBy(loginUser.getUser().getUserName());
  6311. wb.setUpdateTime(new Date());
  6312. wb.setfSerialNumber(null);
  6313. if (tWarehousebillsitemsMapper.updateTWarehousebillsitems(wb) <= 0) {
  6314. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  6315. return AjaxResult.error("新增库存明细失败");
  6316. }
  6317. }
  6318. }
  6319. // 箱型数据
  6320. if (StringUtils.isNotNull(tCntr) && !"[]".equals(tCntr)) {
  6321. JSONArray jsonDrArray = JSONArray.parseArray(tCntr);
  6322. List<TWarehousebillsCntr> tWarehousebillsCntrs = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsCntr.class);
  6323. int line = 0;
  6324. for (TWarehousebillsCntr cntr : tWarehousebillsCntrs) {
  6325. line++;
  6326. if (StringUtils.isNull(cntr.getfCntrid()) || StringUtils.isNull(cntr.getfCntrcount()) || cntr.getfCntrcount() == 0) {
  6327. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  6328. return AjaxResult.error("箱型数据第" + line + "行数据缺少必填数据");
  6329. }
  6330. cntr.setfPid(tWarehousebills.getfId());
  6331. cntr.setfGoodsid(0L);
  6332. cntr.setfPackageid("0");
  6333. cntr.setfCntrweight(new BigDecimal(0));
  6334. cntr.setCreateBy(loginUser.getUser().getUserName());
  6335. cntr.setCreateTime(new Date());
  6336. tWarehousebillsCntrMapper.insertTWarehousebillsCntr(cntr);
  6337. }
  6338. }
  6339. // 附件添加
  6340. if (StringUtils.isNotEmpty(tEnclosure) && !"[]".equals(tEnclosure)) {
  6341. JSONArray jsonDrArray = JSONArray.parseArray(tEnclosure);
  6342. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  6343. for (TEnclosure enclosure : tEnclosureList) {
  6344. enclosure.setfPid(tWarehousebills.getfId());
  6345. enclosure.setCreateBy(loginUser.getUser().getUserName());
  6346. enclosure.setCreateTime(new Date());
  6347. tEnclosureMapper.insertTEnclosure(enclosure);
  6348. }
  6349. }
  6350. // 收款明细添加
  6351. if (StringUtils.isNotEmpty(warehousebillsfeesDr) && !"[]".equals(warehousebillsfeesDr)) {
  6352. JSONArray jsonDrArray = JSONArray.parseArray(warehousebillsfeesDr);
  6353. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  6354. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  6355. wbDr.setfPid(tWarehousebills.getfId());
  6356. wbDr.setfDc("D");
  6357. wbDr.setCreateBy(loginUser.getUser().getUserName());
  6358. wbDr.setCreateTime(new Date());
  6359. if (tWarehousebills.getfBsdate() != null && !"".equals(tWarehousebills.getfBsdate())) {
  6360. wbDr.setfBsdate(tWarehousebills.getfBsdate());
  6361. }
  6362. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  6363. }
  6364. }
  6365. // 付款明细添加
  6366. if (StringUtils.isNotNull(warehousebillsfeesCr) && !"[]".equals(warehousebillsfeesCr)) {
  6367. JSONArray jsonCrArray = JSONArray.parseArray(warehousebillsfeesCr);
  6368. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  6369. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  6370. wbCr.setfPid(tWarehousebills.getfId());
  6371. wbCr.setfDc("C");
  6372. wbCr.setCreateBy(loginUser.getUser().getUserName());
  6373. wbCr.setCreateTime(new Date());
  6374. if (tWarehousebills.getfBsdate() != null && !"".equals(tWarehousebills.getfBsdate())) {
  6375. wbCr.setfBsdate(tWarehousebills.getfBsdate());
  6376. }
  6377. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  6378. }
  6379. }
  6380. //从表更新完再查询主表信息修改入库件数
  6381. TWarehousebillsitems itemInFo = tWarehousebillsitemsMapper.selectItemQtyByFPid(tWarehousebills.getfId());
  6382. tWarehousebills.setfQty(itemInFo.getfQty());
  6383. tWarehousebills.setfNetweight(itemInFo.getfNetweight());
  6384. tWarehousebills.setfGrossweight(itemInFo.getfGrossweight());
  6385. tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  6386. return AjaxResult.success(tWarehousebills.getfDateChanged());
  6387. }
  6388. public static List<String> delRepeat(List<String> list) {
  6389. return list.stream().distinct().collect(Collectors.toList());
  6390. }
  6391. /**
  6392. * 添加 库存明细状态
  6393. *
  6394. * @param wbItem
  6395. * @param status
  6396. */
  6397. public void insertTWarehousebillsLog(TWarehousebillsitems wbItem, Long status) {
  6398. // 添加状态log
  6399. TWarehousebillsLog tWarehousebillsLog = new TWarehousebillsLog();
  6400. tWarehousebillsLog.setfPid(wbItem.getfPid());
  6401. tWarehousebillsLog.setfItmeid(wbItem.getfId());
  6402. tWarehousebillsLog.setfItmestatus(status);
  6403. tWarehousebillsLog.setCreateTime(new Date());
  6404. tWarehousebillsLog.setCreateBy(SecurityUtils.getUsername());
  6405. tWarehousebillsLogMapper.insertTWarehousebillsLog(tWarehousebillsLog);
  6406. }
  6407. /**
  6408. * 删除 库存明细
  6409. *
  6410. * @param fid
  6411. * @param tWarehousebillsitems
  6412. */
  6413. public void deleteBillsitems(Long fid, String tWarehousebillsitems) {
  6414. List<Long> oldList = new ArrayList<Long>();
  6415. List<Long> newList = new ArrayList<Long>();
  6416. // 查询所有从表数据
  6417. TWarehousebillsitems tWarehousebillsitem = new TWarehousebillsitems();
  6418. tWarehousebillsitem.setfPid(fid);
  6419. List<TWarehousebillsitems> warehousebillsitemsList = tWarehousebillsitemsMapper.selectTWarehousebillsitemsList(tWarehousebillsitem);
  6420. warehousebillsitemsList.forEach(wb ->
  6421. oldList.add(wb.getfId())
  6422. );
  6423. // 获取提交从表数据ID
  6424. if (tWarehousebillsitems != null) {
  6425. JSONArray warehouseJSON = JSONArray.parseArray(tWarehousebillsitems);
  6426. List<TWarehousebillsitems> warehousebillsitemsLists = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  6427. warehousebillsitemsLists.forEach(wb ->
  6428. newList.add(wb.getfId())
  6429. );
  6430. }
  6431. // 删除多余的ID
  6432. List<Long> reduce1 = oldList.stream().filter(item -> !newList.contains(item)).collect(toList());
  6433. reduce1.forEach(id ->
  6434. tWarehousebillsitemsMapper.deleteTWarehousebillsitemsById(id)
  6435. );
  6436. }
  6437. /**
  6438. * 库容-结余毛重
  6439. *
  6440. * @param fTotalgross
  6441. * @param fGrossweightblc
  6442. * @return
  6443. */
  6444. public static BigDecimal calculation1(String fTotalgross, String fGrossweightblc) {
  6445. BigDecimal num1 = new BigDecimal(fTotalgross);
  6446. BigDecimal num2 = new BigDecimal(fGrossweightblc);
  6447. BigDecimal result = num1.subtract(num2);
  6448. return result.setScale(2, RoundingMode.HALF_UP);
  6449. }
  6450. /**
  6451. * 判断 是否允许 入库
  6452. *
  6453. * @param fId
  6454. */
  6455. public int calculation(Long fId, BigDecimal fGrossweight) {
  6456. // 仓库库容
  6457. TWarehouse tWarehouse = tWarehouseMapper.selectTWarehouseById(fId);
  6458. // 毛重公斤转化为吨
  6459. fGrossweight = fGrossweight.divide(new BigDecimal(1000), 0, RoundingMode.HALF_UP);
  6460. // 总账使用
  6461. List<Map<String, Object>> whouseList = tWhgenlegMapper.selectWareHouseListWhouse(fId);
  6462. if (CollectionUtils.isNotEmpty(whouseList)) {
  6463. String fTotalgross = null;
  6464. String fGrossweightblc = null;
  6465. for (Map<String, Object> m : whouseList) {
  6466. for (String k : m.keySet()) {
  6467. // 获取毛重库容
  6468. if (k.equals("fTotalgross")) {
  6469. fTotalgross = m.get(k).toString();
  6470. }
  6471. if (k.equals("fGrossweightD")) {
  6472. fGrossweightblc = m.get(k).toString();
  6473. }
  6474. }
  6475. }
  6476. BigDecimal bd = new BigDecimal(fGrossweightblc);
  6477. fGrossweightblc = bd.divide(new BigDecimal(1000), 0, BigDecimal.ROUND_HALF_UP).toString();
  6478. BigDecimal result = calculation1(fTotalgross, fGrossweightblc);
  6479. if (result.compareTo(fGrossweight) == -1) {
  6480. return 0;// 结余库容小于入库数
  6481. } else {
  6482. return 1;
  6483. }
  6484. } else {
  6485. if (tWarehouse.getfTotalgross() != null) {
  6486. if (tWarehouse.getfTotalgross().compareTo(fGrossweight) == -1) {
  6487. return 0;// 库容小于入库数
  6488. } else {
  6489. return 1;
  6490. }
  6491. } else {
  6492. return 0;// 库容小于入库数
  6493. }
  6494. }
  6495. }
  6496. @Transactional
  6497. public AjaxResult updateKaHeOrder(Long fPid, long fettle, Date auditItem) {
  6498. if (StringUtils.isNull(fPid)) {
  6499. return AjaxResult.error("协议更新状态未找到主表信息,请与管理员联系");
  6500. }
  6501. TWarehouseBills tWarehouseBills = new TWarehouseBills();
  6502. tWarehouseBills.setfId(fPid);
  6503. tWarehouseBills.setfBillstatus(fettle);
  6504. if (fettle == 11L) {
  6505. tWarehouseBills.setfReviewDate(auditItem);
  6506. }
  6507. int tFeeUpdateResult = tWarehouseBillsMapper.updateKaHeOrder(tWarehouseBills);
  6508. if (tFeeUpdateResult <= 0) {
  6509. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  6510. return AjaxResult.error("更新订单主表状态失败,请联系管理员");
  6511. }
  6512. return AjaxResult.success();
  6513. }
  6514. /**
  6515. * 根据fid获取订单主表信息
  6516. *
  6517. * @param fid
  6518. * @return
  6519. */
  6520. public TWarehouseBills selectKaHeById(Long fid) {
  6521. return tWarehouseBillsMapper.selectTWarehousebillsById(fid);
  6522. }
  6523. /**
  6524. * 查询是否开启审批流
  6525. *
  6526. * @param billsType
  6527. * @return
  6528. */
  6529. public SysConfig queryWarehouseConfig(String billsType) {
  6530. String key = "";
  6531. if ("SJRK".equals(billsType)) {
  6532. key = "instock.orders.approval";
  6533. } else if ("SJCK".equals(billsType)) {
  6534. key = "outStock.orders.approvalFlow";
  6535. } else if (WarehouseTypeEnum.CKDB.getType().equals(billsType)) {
  6536. key = "stockTransfer.orders.approvalFlow";
  6537. } else if (WarehouseTypeEnum.HQZY.getType().equals(billsType)) {
  6538. key = "transfer.orders.approvalFlow";
  6539. } else if (WarehouseTypeEnum.HWTG.getType().equals(billsType)) {
  6540. key = "cargoClearance.orders.approvalFlow";
  6541. } else if ("SJRKITEM".equals(billsType)) {
  6542. key = "warehouse.inStockItem.ApprovalFlow";
  6543. } else if ("SJCKITEM".equals(billsType)) {
  6544. key = "warehouse.outStockItem.ApprovalFlow";
  6545. }
  6546. return sysConfigMapper.checkConfigKeyUnique(key);
  6547. }
  6548. /**
  6549. * 查询是对应仓储类型活动号
  6550. *
  6551. * @param billsType
  6552. * @return
  6553. */
  6554. public Long queryWarehouseActId(String billsType) {
  6555. long actId = 0L;
  6556. if ("SJRK".equals(billsType)) {
  6557. actId = 110L;
  6558. } else if ("SJCK".equals(billsType)) {
  6559. actId = 120L;
  6560. } else if (WarehouseTypeEnum.CKDB.getType().equals(billsType)) {
  6561. actId = 140L;
  6562. } else if (WarehouseTypeEnum.HQZY.getType().equals(billsType)) {
  6563. actId = 130L;
  6564. } else if (WarehouseTypeEnum.HWTG.getType().equals(billsType)) {
  6565. actId = 160L;
  6566. } else if ("CDZZ".equals(billsType)) {
  6567. actId = 190L;
  6568. }
  6569. return actId;
  6570. }
  6571. /**
  6572. * 校验仓储主表字段是否为空
  6573. * 后续优化进入系统
  6574. *
  6575. * @param warehousebill
  6576. * @return
  6577. */
  6578. public String checkWarehouse(TWarehouseBills warehousebill) {
  6579. if (StringUtils.isNull(warehousebill.getfCorpid())) {
  6580. return "请维护主表客户信息";
  6581. }
  6582. if (StringUtils.isNull(warehousebill.getfBsdate())) {
  6583. return "请维护主表业务日期";
  6584. }
  6585. if (StringUtils.isNull(warehousebill.getfWarehouseid())) {
  6586. return "请维护主表仓库信息";
  6587. }
  6588. if (("SJRK".equals(warehousebill.getfBilltype()) || "SJCK".equals(warehousebill.getfBilltype()))
  6589. && StringUtils.isNull(warehousebill.getfFeetunit())) {
  6590. return "请维护主表业务计费单位";
  6591. }
  6592. if (("SJRK".equals(warehousebill.getfBilltype()) || WarehouseTypeEnum.HQZY.getType().equals(warehousebill.getfBilltype()))
  6593. && StringUtils.isNull(warehousebill.getfChargedate())) {
  6594. return "请维护主表仓储费计费日期";
  6595. }
  6596. if ("SJRK".equals(warehousebill.getfBilltype()) && StringUtils.isNull(warehousebill.getfGoodsid())) {
  6597. return "请维护主表商品信息";
  6598. }
  6599. if (!WarehouseTypeEnum.HQZY.getType().equals(warehousebill.getfBilltype()) && StringUtils.isNull(warehousebill.getfStorekeeper())) {
  6600. return "请维护主表仓管员信息";
  6601. }
  6602. if ("SJRK".equals(warehousebill.getfBilltype()) && StringUtils.isEmpty(warehousebill.getfMblno())) {
  6603. return "请维护主表提单号";
  6604. }
  6605. if (WarehouseTypeEnum.CKDB.getType().equals(warehousebill.getfBilltype()) && StringUtils.isEmpty(warehousebill.getfBusinessType())) {
  6606. return "请维护主表作业类型";
  6607. }
  6608. if ((WarehouseTypeEnum.HQZY.getType().equals(warehousebill.getfBilltype()) || WarehouseTypeEnum.HWTG.getType().equals(warehousebill.getfBilltype()))
  6609. && StringUtils.isNull(warehousebill.getfTrademodeid())) {
  6610. return "请维护主表贸易方式";
  6611. }
  6612. if (WarehouseTypeEnum.HWTG.getType().equals(warehousebill.getfBilltype()) && StringUtils.isNull(warehousebill.getfNewTrademodeid())) {
  6613. return "请维护主表新贸易方式";
  6614. }
  6615. return null;
  6616. }
  6617. /**
  6618. * 获取最小仓储费计算日期
  6619. *
  6620. * @param fId
  6621. * @param date
  6622. * @return
  6623. */
  6624. public boolean getFchargedate(Long fId, Date date) {
  6625. Date fchargedate = tWarehousebillsitemsMapper.getFchargedate(fId);
  6626. if (fchargedate == null) {
  6627. return true;
  6628. }
  6629. int i = date.compareTo(fchargedate);
  6630. if (i == -1) {
  6631. return false;
  6632. } else {
  6633. return true;
  6634. }
  6635. }
  6636. /**
  6637. * 获取仓储费最小日期并更新入库明细的仓储费计算日期
  6638. *
  6639. * @param fId
  6640. * @return
  6641. */
  6642. public AjaxResult updateFchargeDate(Long fId) throws ParseException {
  6643. Date fchargedate = tWarehousebillsitemsMapper.getFchargedate(fId);
  6644. int i = tWarehousebillsitemsMapper.warehouseItemfChargedate(fId, fchargedate);
  6645. if (i > 0) {
  6646. return AjaxResult.success();
  6647. } else if (i == 0) {
  6648. return AjaxResult.error("更新最小仓储费计算日期出错,请找管理员");
  6649. } else {
  6650. return AjaxResult.success();
  6651. }
  6652. }
  6653. /**
  6654. * 判断箱号是否存在 箱型是否一致
  6655. *
  6656. * @param tWarehousebillsCntritems 箱信息表
  6657. * @param fId 货物信息表箱类型ID
  6658. * @return
  6659. */
  6660. public AjaxResult judgeBoxPile(TWarehousebillsCntritems tWarehousebillsCntritems, Long fId) {
  6661. //判断箱子是否存在
  6662. if (StringUtils.isEmpty(tWarehousebillsCntritems.getfCntrno())) {
  6663. return AjaxResult.error("箱号不能为空");
  6664. }
  6665. TCntrno tCntrno = tCntrnoMapper.selectTCnTrNoByfNo(tWarehousebillsCntritems.getfCntrno());
  6666. if (tCntrno == null) {
  6667. return AjaxResult.error("箱号" + tWarehousebillsCntritems.getfCntrno() + "不存在");
  6668. }
  6669. //判断箱型是否一致
  6670. //TCntr tCntr = tCntrMapper.selectTCntrById(fId);//查询货物信息对应的箱类型
  6671. TCntrno cnTrNo = tCntrnoMapper.selectTCnTrNoByfNo(tWarehousebillsCntritems.getfCntrno());//查询箱号对应的箱信息
  6672. TCntr tCntr = tCntrMapper.selectTCntrById(cnTrNo.getfTypeid());//查询箱类型
  6673. if (cnTrNo != null && Objects.equals(cnTrNo.getfTypeid(), tWarehousebillsCntritems.getfCntrid())) {
  6674. if (!Objects.equals(tWarehousebillsCntritems.getfCntrid(), fId)) {
  6675. TCntr cntr = tCntrMapper.selectTCntrById(fId);
  6676. return AjaxResult.error("箱号" + tWarehousebillsCntritems.getfCntrno() + "跟货物信息中箱类型不一致,箱类型应为:" + cntr.getfNo());
  6677. }
  6678. } else if (cnTrNo != null && !Objects.equals(cnTrNo.getfTypeid(), tWarehousebillsCntritems.getfCntrid())) {
  6679. return AjaxResult.error("箱号" + tWarehousebillsCntritems.getfCntrno() + "跟基础信息中箱类型不一致,箱类型应为:" + tCntr.getfNo());
  6680. }
  6681. return AjaxResult.success();
  6682. }
  6683. @Override
  6684. @Transactional
  6685. public AjaxResult updateBoxMessage(TCntrnoMessage tCntrno, LoginUser loginUser) {
  6686. String remark = tCntrno.getfVsl() + tCntrno.getfVoy();
  6687. Date date = tCntrno.getfUpdatetime();
  6688. //查询船名航次对应的信息
  6689. TWarehouseBills tWarehouseBills = new TWarehouseBills();
  6690. /* tWarehouseBills.setfVslid(tCntrno.getfVslid());
  6691. tWarehouseBills.setfVoyid(tCntrno.getfVoyid());*/
  6692. tWarehouseBills.setBillList(tCntrno.getBillList());
  6693. tWarehouseBills.setfCargoPlanning(0L);
  6694. if (tCntrno.getUpdateStatus().longValue() == 1) {
  6695. tWarehouseBills.setfArrivalStatus(0);
  6696. List<TWarehouseBills> tWarehouseBillsList = tWarehouseBillsMapper.webVersionOrderList(tWarehouseBills);
  6697. if (CollectionUtils.isEmpty(tWarehouseBillsList)) {
  6698. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  6699. return AjaxResult.error("该船名航次未配船或已离港出运或到港卸船");
  6700. }
  6701. //获取地点ID
  6702. Long aLong = tAddressMapper.selectTAddressByfName("在船");
  6703. if (aLong == null) {
  6704. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  6705. return AjaxResult.error("系统中缺少在船地点请维护");
  6706. }
  6707. //获取调箱动态ID
  6708. String fOpCTnsTaTus = sysDictDataMapper.selectDictValue("f_opctnstatus", "装船");
  6709. if (StringUtils.isEmpty(fOpCTnsTaTus)) {
  6710. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  6711. return AjaxResult.error("系统缺少箱动态装船请维护");
  6712. }
  6713. for (TWarehouseBills bills : tWarehouseBillsList) {
  6714. //查询货物信息
  6715. TWarehousebillsCntr warehousebillsCntr = tWarehousebillsCntrMapper.selectTWarehousebillsCntrByPId(bills.getfId());
  6716. //查询订单箱信息
  6717. TWarehousebillsCntritems tWarehousebillsCntritems = new TWarehousebillsCntritems();
  6718. tWarehousebillsCntritems.setfPid(bills.getfId());
  6719. List<TWarehousebillsCntritems> warehousebillsCntritems = tWarehousebillsCntritemsMapper.selectTWarehousebillsCntritemsList(tWarehousebillsCntritems);
  6720. if (CollectionUtils.isNotEmpty(warehousebillsCntritems)) {
  6721. for (TWarehousebillsCntritems warehousebillsCntritem : warehousebillsCntritems) {
  6722. TCntrno cntrno = new TCntrno();
  6723. cntrno.setfNo(warehousebillsCntritem.getfCntrno());
  6724. cntrno.setUpdateTime(date);
  6725. cntrno.setUpdateBy(loginUser.getUser().getUserName());
  6726. cntrno.setfUpdatetime(date);
  6727. cntrno.setRemark(remark);
  6728. cntrno.setfUpdateaddress(aLong.toString());
  6729. cntrno.setfOpctnstatus(fOpCTnsTaTus);
  6730. cntrno.setfCntrstatus(warehousebillsCntr.getfCntrstatus());
  6731. tCntrnoMapper.updateTCntrnoByfNo(cntrno);
  6732. //保存历史信息
  6733. TCntrno cntrnoById = tCntrnoMapper.selectTCnTrNoByfNo(warehousebillsCntritem.getfCntrno());
  6734. if (cntrnoById == null) {
  6735. continue;
  6736. }
  6737. if (cntrnoById.getfStatus().equals("T") || cntrnoById.getfStatus().equals("正常")) {
  6738. cntrnoById.setfStatus("T");
  6739. } else {
  6740. cntrnoById.setfStatus("F");
  6741. }
  6742. TCntrtracking tCntrtracking = new TCntrtracking();
  6743. BeanUtils.copyProperties(cntrnoById, tCntrtracking);
  6744. tCntrtracking.setfId(null);
  6745. tCntrtracking.setfVoy(tCntrno.getfVoy());//航次
  6746. tCntrtracking.setfVsl(tCntrno.getfVsl());//船名
  6747. tCntrtrackingMapper.insertTCntrtracking(tCntrtracking);
  6748. }
  6749. }
  6750. //修改主表状态为离港出运
  6751. TWarehouseBills warehouseBills = new TWarehouseBills();
  6752. warehouseBills.setfId(bills.getfId());
  6753. warehouseBills.setfArrivalStatus(1);
  6754. tWarehouseBillsMapper.updateKaHeOrder(warehouseBills);
  6755. }
  6756. } else if (tCntrno.getUpdateStatus().longValue() == 2) {
  6757. tWarehouseBills.setfArrivalStatus(1);
  6758. List<TWarehouseBills> tWarehouseBillsList = tWarehouseBillsMapper.webVersionOrderList(tWarehouseBills);
  6759. if (CollectionUtils.isEmpty(tWarehouseBillsList)) {
  6760. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  6761. return AjaxResult.error("该船名航次未离港出运");
  6762. }
  6763. //获取调箱动态ID
  6764. String fOpCTnsTaTus = sysDictDataMapper.selectDictValue("f_opctnstatus", "卸船");
  6765. if (StringUtils.isEmpty(fOpCTnsTaTus)) {
  6766. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  6767. return AjaxResult.error("系统缺少箱动态卸船请维护");
  6768. }
  6769. for (TWarehouseBills bills : tWarehouseBillsList) {
  6770. String address = null;
  6771. if (StringUtils.isNotEmpty(tCntrno.getfUpdateaddress())){
  6772. address = tCntrno.getfUpdateaddress();
  6773. }else {
  6774. address = bills.getfDestportid().toString();
  6775. }
  6776. //查询货物信息
  6777. TWarehousebillsCntr warehousebillsCntr = tWarehousebillsCntrMapper.selectTWarehousebillsCntrByPId(bills.getfId());
  6778. //查询订单箱信息
  6779. TWarehousebillsCntritems tWarehousebillsCntritems = new TWarehousebillsCntritems();
  6780. tWarehousebillsCntritems.setfPid(bills.getfId());
  6781. List<TWarehousebillsCntritems> warehousebillsCntritems = tWarehousebillsCntritemsMapper.selectTWarehousebillsCntritemsList(tWarehousebillsCntritems);
  6782. if (CollectionUtils.isNotEmpty(warehousebillsCntritems)) {
  6783. for (TWarehousebillsCntritems warehousebillsCntritem : warehousebillsCntritems) {
  6784. TCntrno cntrno = new TCntrno();
  6785. cntrno.setfNo(warehousebillsCntritem.getfCntrno());
  6786. cntrno.setUpdateTime(date);
  6787. cntrno.setUpdateBy(loginUser.getUser().getUserName());
  6788. cntrno.setfUpdatetime(date);
  6789. cntrno.setRemark(null);
  6790. cntrno.setfUpdateaddress(address);
  6791. cntrno.setfOpctnstatus(fOpCTnsTaTus);
  6792. cntrno.setfCntrstatus(warehousebillsCntr.getfCntrstatus());
  6793. tCntrnoMapper.updateTCntrnoByfNo(cntrno);
  6794. //保存历史信息
  6795. TCntrno cntrnoById = tCntrnoMapper.selectTCnTrNoByfNo(warehousebillsCntritem.getfCntrno());
  6796. if (cntrnoById.getfStatus().equals("T") || cntrnoById.getfStatus().equals("正常")) {
  6797. cntrnoById.setfStatus("T");
  6798. } else {
  6799. cntrnoById.setfStatus("F");
  6800. }
  6801. TCntrtracking tCntrtracking = new TCntrtracking();
  6802. BeanUtils.copyProperties(cntrnoById, tCntrtracking);
  6803. tCntrtracking.setfId(null);
  6804. tCntrtracking.setfVoy(tCntrno.getfVoy());//航次
  6805. tCntrtracking.setfVsl(tCntrno.getfVsl());//船名
  6806. tCntrtrackingMapper.insertTCntrtracking(tCntrtracking);
  6807. }
  6808. }
  6809. //修改主表状态为已到港卸货
  6810. TWarehouseBills warehouseBills = new TWarehouseBills();
  6811. warehouseBills.setfId(bills.getfId());
  6812. warehouseBills.setfArrivalStatus(2);
  6813. tWarehouseBillsMapper.updateKaHeOrder(warehouseBills);
  6814. }
  6815. } else {
  6816. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  6817. return AjaxResult.error("请选择离岗出运或到港卸船");
  6818. }
  6819. return AjaxResult.success();
  6820. }
  6821. /**
  6822. * 获取旧单的箱量与新单的箱量
  6823. * 减去新单的箱量生成旧单的箱量并保存
  6824. * 保存新单的单信息
  6825. *
  6826. * @param tWarehousebills 仓库出入表
  6827. * @param tWarehousebillsCntr 订单从表
  6828. * @param tWarehousebillsCntritems 箱明细表
  6829. * @return
  6830. */
  6831. @Override
  6832. @Transactional
  6833. public AjaxResult updateMessageSign(String tWarehousebills, String tWarehousebillsCntr, String tWarehousebillsCntritems, String fOriginalbillno) {
  6834. //保存新单主表信息
  6835. //保存新单货物信息
  6836. //保存新单想信息
  6837. boolean isApprove = false;//是否开启审批流
  6838. String key = "khwarehouse.dismountOrder.ApprovalFlow";//键
  6839. long actId = 474L;//活动id
  6840. Long billStatus = null; //状态id
  6841. SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique(key);
  6842. if (StringUtils.isNull(sysConfig)) {
  6843. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  6844. return AjaxResult.error("系统参数异常,未找到开启审批流参数");
  6845. }
  6846. if ("0".equals(sysConfig.getConfigValue())) {
  6847. isApprove = true;
  6848. }
  6849. if (isApprove) {
  6850. billStatus = 4L;
  6851. } else {
  6852. billStatus = 6L;
  6853. }
  6854. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehousebills, TWarehouseBills.class); //新单主表信息
  6855. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsCntr);
  6856. List<TWarehousebillsCntr> tWarehousebillsCntrs = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsCntr.class);//新单货物信息
  6857. JSONArray jsonCrArrayItems = JSONArray.parseArray(tWarehousebillsCntritems);
  6858. List<TWarehousebillsCntritems> tWarehousebillsCntritemsList = JSONObject.parseArray(jsonCrArrayItems.toJSONString(), TWarehousebillsCntritems.class);//新单箱信息
  6859. //获取原单信息
  6860. TWarehouseBills bills = new TWarehouseBills();
  6861. bills.setfBillno(fOriginalbillno);
  6862. List<TWarehouseBills> tWarehouseBillsList = tWarehouseBillsMapper.webVersionOrderList(bills);
  6863. if (CollectionUtils.isEmpty(tWarehouseBillsList)) {
  6864. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  6865. return AjaxResult.error("未查到原单信息");
  6866. }
  6867. TWarehouseBills selectOne = tWarehouseBillsList.get(0);
  6868. TWarehousebillsCntr Cntr = tWarehousebillsCntrMapper.selectTWarehousebillsCntrByPId(selectOne.getfId());
  6869. if (tWarehousebillsCntritemsList.size() >= Cntr.getfCntrcount()) {
  6870. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  6871. return AjaxResult.error("分单箱量不能超出原单数量");
  6872. }
  6873. if (CollectionUtils.isNotEmpty(tWarehousebillsCntrs)) {
  6874. TWarehousebillsCntr cnTrWareHouse = tWarehousebillsCntrs.get(0);
  6875. if (cnTrWareHouse.getfCntrcount() >= Cntr.getfCntrcount()) {
  6876. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  6877. return AjaxResult.error("分单箱量不能超出原单数量");
  6878. }
  6879. }
  6880. //拆单数量
  6881. Long number = 0L;
  6882. if (warehouseBills.getfId() == null) {
  6883. String billNoNew = this.getBillNoNew(selectOne.getfMblno());
  6884. String billNo = billnoSerialServiceImpl.getBillNo("SE", warehouseBills.getfBsdate());
  6885. warehouseBills.setfBillno(billNo);
  6886. warehouseBills.setfMblno(billNoNew);
  6887. warehouseBills.setCreateTime(DateUtils.getNowDate());
  6888. warehouseBills.setCreateBy(SecurityUtils.getUsername());
  6889. warehouseBills.setfBilltype("KHDD");
  6890. warehouseBills.setfTypeid(1);
  6891. warehouseBills.setfOriginalbillno(fOriginalbillno);
  6892. warehouseBills.setfDismountStatus(billStatus);
  6893. warehouseBills.setfDeptid(SecurityUtils.getLoginUser().getUser().getDeptId());
  6894. warehouseBills.setfBsdeptid(SecurityUtils.getLoginUser().getUser().getDeptId());
  6895. int i = tWarehouseBillsMapper.insertTWarehousebills(warehouseBills);
  6896. //货物信息
  6897. if (CollectionUtils.isNotEmpty(tWarehousebillsCntrs)) {
  6898. for (TWarehousebillsCntr warehousebillsCntr : tWarehousebillsCntrs) {
  6899. number = warehousebillsCntr.getfCntrcount();
  6900. warehousebillsCntr.setfPid(warehouseBills.getfId());
  6901. warehousebillsCntr.setCreateTime(DateUtils.getNowDate());
  6902. warehousebillsCntr.setCreateBy(SecurityUtils.getUsername());
  6903. int cntr = tWarehousebillsCntrMapper.insertTWarehousebillsCntr(warehousebillsCntr);
  6904. }
  6905. }
  6906. //箱信息
  6907. if (CollectionUtils.isNotEmpty(tWarehousebillsCntritemsList)) {
  6908. for (TWarehousebillsCntritems warehousebillsCntritems : tWarehousebillsCntritemsList) {
  6909. TWarehousebillsCntr billsCntr = tWarehousebillsCntrMapper.selectTWarehousebillsCntrByPId(warehouseBills.getfId());
  6910. AjaxResult ajaxResult = this.judgeBoxPile(warehousebillsCntritems, billsCntr.getfCntrid());
  6911. String code = ajaxResult.get("code").toString();
  6912. if ("500".equals(code)) {
  6913. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  6914. return AjaxResult.success("error", ajaxResult.get("msg").toString());
  6915. }
  6916. warehousebillsCntritems.setfPid(warehouseBills.getfId());
  6917. warehousebillsCntritems.setCreateTime(DateUtils.getNowDate());
  6918. warehousebillsCntritems.setCreateBy(SecurityUtils.getUsername());
  6919. int cntr = tWarehousebillsCntritemsMapper.insertTWarehousebillsCntritems(warehousebillsCntritems);
  6920. }
  6921. }
  6922. //保存新单费用信息 修改原单费用信息
  6923. List<TWarehousebillsfees> tWarehousebillsfeesList = tWarehousebillsfeesMapper.selectWarehousebillsfeesByPId(selectOne.getfId());
  6924. if (CollectionUtils.isNotEmpty(tWarehousebillsfeesList)) {
  6925. //保存新单费用
  6926. for (TWarehousebillsfees tWarehousebillsfees : tWarehousebillsfeesList) {
  6927. tWarehousebillsfees.setfId(null);
  6928. tWarehousebillsfees.setfPid(warehouseBills.getfId());
  6929. tWarehousebillsfees.setCreateBy(SecurityUtils.getUsername());
  6930. tWarehousebillsfees.setCreateTime(new Date());
  6931. tWarehousebillsfees.setSrcBillNo(warehouseBills.getfBillno());
  6932. tWarehousebillsfees.setfQty(new BigDecimal(number));
  6933. tWarehousebillsfees.setfAmount(new BigDecimal(number).multiply(tWarehousebillsfees.getfUnitprice()));
  6934. tWarehousebillsfeesMapper.insertTWarehousebillsfees(tWarehousebillsfees);
  6935. }
  6936. }
  6937. } else {
  6938. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(warehouseBills.getfId());
  6939. warehouseBills.setUpdateTime(DateUtils.getNowDate());
  6940. warehouseBills.setUpdateBy(SecurityUtils.getUsername());
  6941. warehouseBills.setfDismountStatus(billStatus);
  6942. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  6943. tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(warehouseBills.getfId());
  6944. if (CollectionUtils.isNotEmpty(tWarehousebillsCntrs)) {
  6945. for (TWarehousebillsCntr warehousebillsCntr : tWarehousebillsCntrs) {
  6946. number = warehousebillsCntr.getfCntrcount();
  6947. warehousebillsCntr.setfPid(warehouseBills.getfId());
  6948. warehousebillsCntr.setCreateTime(DateUtils.getNowDate());
  6949. warehousebillsCntr.setCreateBy(SecurityUtils.getUsername());
  6950. tWarehousebillsCntrMapper.insertTWarehousebillsCntr(warehousebillsCntr);
  6951. }
  6952. }
  6953. tWarehousebillsCntritemsMapper.deleteTWarehousebillsCntritemsfPid(warehouseBills.getfId());
  6954. if (CollectionUtils.isNotEmpty(tWarehousebillsCntritemsList)) {
  6955. for (TWarehousebillsCntritems warehousebillsCntritems : tWarehousebillsCntritemsList) {
  6956. TWarehousebillsCntr billsCntr = tWarehousebillsCntrMapper.selectTWarehousebillsCntrByPId(warehouseBills.getfId());
  6957. AjaxResult ajaxResult = this.judgeBoxPile(warehousebillsCntritems, billsCntr.getfCntrid());
  6958. String code = ajaxResult.get("code").toString();
  6959. if ("500".equals(code)) {
  6960. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  6961. return AjaxResult.success("error", ajaxResult.get("msg").toString());
  6962. }
  6963. warehousebillsCntritems.setfPid(warehouseBills.getfId());
  6964. warehousebillsCntritems.setCreateTime(DateUtils.getNowDate());
  6965. warehousebillsCntritems.setCreateBy(SecurityUtils.getUsername());
  6966. tWarehousebillsCntritemsMapper.insertTWarehousebillsCntritems(warehousebillsCntritems);
  6967. }
  6968. }
  6969. tWarehousebillsfeesMapper.deleteByFPid(warehouseBills.getfId());
  6970. //保存新单费用信息 修改原单费用信息
  6971. List<TWarehousebillsfees> tWarehousebillsfeesList = tWarehousebillsfeesMapper.selectWarehousebillsfeesByPId(selectOne.getfId());
  6972. if (CollectionUtils.isNotEmpty(tWarehousebillsfeesList)) {
  6973. //保存新单费用
  6974. for (TWarehousebillsfees tWarehousebillsfees : tWarehousebillsfeesList) {
  6975. tWarehousebillsfees.setfId(null);
  6976. tWarehousebillsfees.setfPid(warehouseBills.getfId());
  6977. tWarehousebillsfees.setCreateBy(SecurityUtils.getUsername());
  6978. tWarehousebillsfees.setCreateTime(new Date());
  6979. tWarehousebillsfees.setSrcBillNo(warehouseBills.getfBillno());
  6980. tWarehousebillsfees.setfQty(new BigDecimal(number));
  6981. tWarehousebillsfees.setfAmount(new BigDecimal(number).multiply(tWarehousebillsfees.getfUnitprice()));
  6982. tWarehousebillsfeesMapper.insertTWarehousebillsfees(tWarehousebillsfees);
  6983. }
  6984. }
  6985. }
  6986. if (isApprove) {
  6987. AuditItems auditItems = new AuditItems();
  6988. auditItems.setLevelId(0L);
  6989. auditItems.setBillId(warehouseBills.getfId());
  6990. auditItems.setActId(actId);
  6991. auditItems.setIffinalItem("F");
  6992. auditItems.setBillNo(warehouseBills.getfBillno());
  6993. // 存储委托方(货权方)
  6994. auditItems.setRefno1(warehouseBills.getfCorpid() + "");
  6995. // 存储业务类型(业务类型)
  6996. auditItems.setRefno2(warehouseBills.getfBilltype());
  6997. // 存储提单号(提单号)
  6998. if (StringUtils.isNotEmpty(warehouseBills.getfMblno())) {
  6999. auditItems.setRefno3(warehouseBills.getfMblno());
  7000. } else {
  7001. auditItems.setRefno3(warehouseBills.getfBillno());
  7002. }
  7003. auditItems.setSendUserId(SecurityUtils.getLoginUser().getUser().getUserId());
  7004. auditItems.setSendName(SecurityUtils.getUsername());
  7005. auditItems.setSendTime(new Date());
  7006. auditItems.setAuditUserId(SecurityUtils.getLoginUser().getUser().getUserId());
  7007. auditItems.setAuditItem(new Date());
  7008. auditItems.setAuditOpTime(new Date());
  7009. auditItems.setAuditMsg("提交");
  7010. auditItems.setFidStatus("f_dismount_status");
  7011. auditItems.setAuditStatus("O");
  7012. AjaxResult approvalFlow = auditItemsService.createApprovalFlow(auditItems);
  7013. // Long code = Long.valueOf(String.valueOf(approvalFlow.get("code"))).longValue();
  7014. String code = approvalFlow.get("code").toString();
  7015. // Long code = Long.valueOf(String.valueOf(ajaxResult.get("code"))).longValue();
  7016. if ("500".equals(code)) {
  7017. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  7018. }
  7019. return approvalFlow;
  7020. }
  7021. return AjaxResult.success();
  7022. }
  7023. /**
  7024. * 获取分单提单号
  7025. *
  7026. * @param fbillNo
  7027. * @return
  7028. */
  7029. public String getBillNoNew(String fbillNo) {
  7030. List<String> strings = Arrays.asList(StringUtils.split("A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z", ","));
  7031. for (String string : strings) {
  7032. String billno = fbillNo + string;
  7033. TWarehouseBills tWarehouseBills = new TWarehouseBills();
  7034. tWarehouseBills.setfMblno(billno);
  7035. List<Map<String, Object>> maps = tWarehouseBillsMapper.ruoYiVersionOrderList(tWarehouseBills);
  7036. if (CollectionUtils.isEmpty(maps)) {
  7037. return billno;
  7038. }
  7039. }
  7040. return null;
  7041. }
  7042. /**
  7043. * 审批通过修改原单信息
  7044. *
  7045. * @param orderId
  7046. * @return
  7047. */
  7048. @Override
  7049. @Transactional
  7050. public AjaxResult approveDismount(Long orderId) {
  7051. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(orderId);
  7052. //获取原单信息
  7053. TWarehouseBills bills = new TWarehouseBills();
  7054. bills.setfBillno(warehouseBills.getfOriginalbillno());
  7055. List<TWarehouseBills> tWarehouseBillsList = tWarehouseBillsMapper.webVersionOrderList(bills);
  7056. if (CollectionUtils.isEmpty(tWarehouseBillsList)) {
  7057. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  7058. return AjaxResult.error("未查到原单信息");
  7059. }
  7060. TWarehouseBills selectOne = tWarehouseBillsList.get(0);
  7061. //获取新单信息
  7062. TWarehousebillsCntr wareHouseBillsCnTr = tWarehousebillsCntrMapper.selectTWarehousebillsCntrByPId(orderId);
  7063. //获取旧单信息 修改货物信息中的箱量
  7064. TWarehousebillsCntr billsCnTr = tWarehousebillsCntrMapper.selectTWarehousebillsCntrByPId(selectOne.getfId());
  7065. if (wareHouseBillsCnTr.getfCntrcount() >= billsCnTr.getfCntrcount()) {
  7066. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  7067. return AjaxResult.error("拆单数量不能超过或等于原单数量,现在原单数量为" + billsCnTr.getfCntrcount() + "个。");
  7068. }
  7069. billsCnTr.setUpdateBy(SecurityUtils.getUsername());
  7070. billsCnTr.setUpdateTime(new Date());
  7071. billsCnTr.setfCntrcount(billsCnTr.getfCntrcount() - wareHouseBillsCnTr.getfCntrcount());
  7072. tWarehousebillsCntrMapper.updateTWarehousebillsCntr(billsCnTr);//修改原单货物信息中的箱量
  7073. //修改原单的费用信息
  7074. List<TWarehousebillsfees> WarehousebillsfeesList = tWarehousebillsfeesMapper.selectWarehousebillsfeesByPId(selectOne.getfId());
  7075. if (CollectionUtils.isNotEmpty(WarehousebillsfeesList)) {
  7076. //修改原单费用
  7077. for (TWarehousebillsfees tWarehousebillsfees : WarehousebillsfeesList) {
  7078. tWarehousebillsfees.setUpdateBy(SecurityUtils.getUsername());
  7079. tWarehousebillsfees.setUpdateTime(new Date());
  7080. tWarehousebillsfees.setfQty(tWarehousebillsfees.getfQty().subtract(new BigDecimal(wareHouseBillsCnTr.getfCntrcount())));
  7081. tWarehousebillsfees.setfAmount(tWarehousebillsfees.getfQty().multiply(tWarehousebillsfees.getfUnitprice()));
  7082. tWarehousebillsfeesMapper.updateTWarehousebillsfees(tWarehousebillsfees);
  7083. }
  7084. }
  7085. //修改原单箱信息
  7086. List<TWarehousebillsCntritems> tWarehousebillsCntritemsList = tWarehousebillsCntritemsMapper.selectTWarehousebillsCntritemsByPId(orderId);
  7087. if (CollectionUtils.isNotEmpty(tWarehousebillsCntritemsList)) {
  7088. for (TWarehousebillsCntritems warehousebillsCntritems : tWarehousebillsCntritemsList) {
  7089. tWarehousebillsCntritemsMapper.deleteTWarehousebillsCntritemOlder(selectOne.getfId(), warehousebillsCntritems.getfCntrno());
  7090. }
  7091. }
  7092. return AjaxResult.success();
  7093. }
  7094. /**
  7095. * 根据仓库id查询最新两条审核人信息
  7096. *
  7097. * @param id 仓库id
  7098. * @return
  7099. */
  7100. @Override
  7101. public AjaxResult queryReviewer(Long id) {
  7102. List<Integer> actIds = WarehouseActIdEnum.isWarehousingBusiness();
  7103. // 根据仓库id与活动号集合查询审核成功最新两条数据
  7104. List<String> userName = auditItemsMapper.selectListByRefno1AndActId(id, actIds);
  7105. if (CollectionUtils.isNotEmpty(userName)) {
  7106. return AjaxResult.success(userName);
  7107. }
  7108. return AjaxResult.success();
  7109. }
  7110. /**
  7111. * 根据费用id 更新审核信息
  7112. *
  7113. * @param id 费用id
  7114. * @return
  7115. */
  7116. @Override
  7117. public AjaxResult feeReviewSubmit(Long id) {
  7118. TWarehousebillsfees warehousebillsfees = tWarehousebillsfeesMapper.selectTWarehousebillsfeesById(id);
  7119. if (StringUtils.isNull(warehousebillsfees.getfCorpid()) || StringUtils.isNull(warehousebillsfees.getfFeeid()) ||
  7120. StringUtils.isNull(warehousebillsfees.getfFeeunitid())) {
  7121. throw new WarehouseException("请确认是否维护客户、费用信息、计价单位");
  7122. }
  7123. if (Objects.isNull(warehousebillsfees) || Objects.nonNull(warehousebillsfees.getfReviewDate())) {
  7124. throw new WarehouseException("未找到费用信息或费用已被审核");
  7125. }
  7126. tWarehousebillsfeesMapper.warehouseFeesFollowUpdateById(id, Long.parseLong(FeesTypeEnum.APPROVE.getType()), new Date());
  7127. TWarehouseBills warehouseBills = new TWarehouseBills();
  7128. warehouseBills.setfId(warehousebillsfees.getfPid());
  7129. calculationWarehouseService.calculationFeeStatus(warehouseBills);
  7130. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  7131. return AjaxResult.success(tWarehousebillsfeesMapper.selectTWarehousebillsfeesById(id));
  7132. }
  7133. /**
  7134. * 根据id撤销已费用审核状态
  7135. *
  7136. * @param id
  7137. * @return
  7138. */
  7139. @Override
  7140. public AjaxResult revokefeeReview(Long id) {
  7141. TWarehousebillsfees warehousebillsfees = tWarehousebillsfeesMapper.selectTWarehousebillsfeesById(id);
  7142. if (Objects.isNull(warehousebillsfees) || warehousebillsfees.getfAccamount().compareTo(BigDecimal.ZERO) > 0
  7143. || warehousebillsfees.getfStlamount().compareTo(BigDecimal.ZERO) > 0
  7144. || warehousebillsfees.getfInvamount().compareTo(BigDecimal.ZERO) > 0) {
  7145. throw new WarehouseException("未找到费用信息或费用已计算费用");
  7146. }
  7147. if (isCalculateFees(warehousebillsfees.getfId())) {
  7148. return AjaxResult.error("财务已计算费用");
  7149. }
  7150. tWarehousebillsfeesMapper.warehouseFeesFollowUpdateById(id, Long.parseLong(FeesTypeEnum.SAVE.getType()), new Date());
  7151. TWarehouseBills warehouseBills = new TWarehouseBills();
  7152. warehouseBills.setfId(warehousebillsfees.getfPid());
  7153. calculationWarehouseService.calculationFeeStatus(warehouseBills);
  7154. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  7155. return AjaxResult.success(tWarehousebillsfeesMapper.selectTWarehousebillsfeesById(id));
  7156. }
  7157. /**
  7158. * app根据id查询详情
  7159. *
  7160. * @param id 主表id
  7161. * @param typeEnum 类型
  7162. * @return
  7163. */
  7164. @Override
  7165. public AjaxResult appQueryInit(Long id, String typeEnum) {
  7166. if (Objects.isNull(id)) {
  7167. return AjaxResult.error("无效id");
  7168. }
  7169. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(id);
  7170. if (Objects.isNull(warehouseBills)) {
  7171. return AjaxResult.error("仓库信息无效");
  7172. }
  7173. AppWarehouseInfoVO infoVO = new AppWarehouseInfoVO();
  7174. BeanUtils.copyProperties(warehouseBills, infoVO);
  7175. // 如果是入库
  7176. if (infoVO.getfBilltype().equals(WarehouseTypeEnum.SJRK.getType())) {
  7177. isInStock(infoVO);
  7178. }
  7179. // 如果是入库
  7180. if (infoVO.getfBilltype().equals(WarehouseTypeEnum.SJCK.getType())) {
  7181. isOutStock(infoVO);
  7182. }
  7183. // 如果是货权转移
  7184. if (warehouseBills.getfBilltype().equals(WarehouseTypeEnum.HQZY.getType())) {
  7185. isGoodsForwarding(infoVO);
  7186. }
  7187. // 如果是调拨
  7188. if (warehouseBills.getfBilltype().equals(WarehouseTypeEnum.CKDB.getType())) {
  7189. isTransfer(infoVO);
  7190. }
  7191. // 查询订单附件
  7192. List<TEnclosure> tEnclosureList = tEnclosureMapper.selectTEnclosureByPId(infoVO.getfId());
  7193. if (CollectionUtils.isNotEmpty(tEnclosureList)) {
  7194. infoVO.setEnclosureList(tEnclosureList);
  7195. }
  7196. return AjaxResult.success(infoVO);
  7197. }
  7198. /**
  7199. * 货转根据提单号查询可用客户、仓库信息
  7200. *
  7201. * @param warehousebillsDTO 查询条件
  7202. * @return
  7203. */
  7204. @Override
  7205. public AjaxResult corpOrWarehouseByMblno(WarehousebillsDTO warehousebillsDTO) {
  7206. String fMblno = warehousebillsDTO.getfMblno();
  7207. WarehouseBillsVO billsVO = new WarehouseBillsVO();
  7208. // 查询客户
  7209. if (WarehouseTypeEnum.BY_MBLNO.getType().equals(warehousebillsDTO.getType())) {
  7210. // 查询符合条件的库存总帐
  7211. TWhgenleg tWhgenleg = new TWhgenleg();
  7212. tWhgenleg.setfMblno(fMblno);
  7213. List<TWhgenleg> tWhgenlegs = tWhgenlegMapper.selectTWhgenlegList(tWhgenleg);
  7214. if (CollectionUtils.isNotEmpty(tWhgenlegs)) {
  7215. // 查询客户
  7216. List<Long> corpIds = tWhgenlegs.stream().filter(leg -> Objects.nonNull(leg.getfCorpid())).map(TWhgenleg::getfCorpid)
  7217. .distinct().collect(toList());
  7218. if (CollectionUtils.isNotEmpty(corpIds)) {
  7219. List<TCorps> corpsList = tCorpsMapper.selectByIds(corpIds);
  7220. billsVO.setCorpsList(corpsList);
  7221. }
  7222. }
  7223. return AjaxResult.success(billsVO);
  7224. } else if (WarehouseTypeEnum.BY_CPRP.getType().equals(warehousebillsDTO.getType())) {
  7225. if (StringUtils.isNull(warehousebillsDTO.getCorpId())) {
  7226. throw new WarehouseException("未找到客户查询条件");
  7227. }
  7228. // 查询符合条件的库存总帐
  7229. TWhgenleg tWhgenleg = new TWhgenleg();
  7230. tWhgenleg.setfMblno(fMblno);
  7231. tWhgenleg.setfCorpid(warehousebillsDTO.getCorpId());
  7232. List<TWhgenleg> tWhgenlegs = tWhgenlegMapper.selectTWhgenlegList(tWhgenleg);
  7233. if (CollectionUtils.isNotEmpty(tWhgenlegs)) {
  7234. // 查询仓库信息
  7235. List<Long> warehouseIds = tWhgenlegs.stream().filter(leg -> Objects.nonNull(leg.getfWarehouseid()))
  7236. .map(TWhgenleg::getfWarehouseid).distinct().collect(toList());
  7237. if (CollectionUtils.isNotEmpty(warehouseIds)) {
  7238. List<TWarehouse> warehouseList = tWarehouseMapper.selectByIds(warehouseIds);
  7239. billsVO.setWarehouseList(warehouseList);
  7240. }
  7241. }
  7242. return AjaxResult.success(billsVO);
  7243. } else if (WarehouseTypeEnum.BY_WAREHOUSE.getType().equals(warehousebillsDTO.getType())) {
  7244. if (StringUtils.isNull(warehousebillsDTO.getCorpId()) ||
  7245. StringUtils.isNull(warehousebillsDTO.getWarehouseId())) {
  7246. throw new WarehouseException("未找到客户、仓库查询条件");
  7247. }
  7248. // 查询符合条件的库存总帐
  7249. TWhgenleg tWhgenleg = new TWhgenleg();
  7250. tWhgenleg.setfMblno(fMblno);
  7251. tWhgenleg.setfCorpid(warehousebillsDTO.getCorpId());
  7252. tWhgenleg.setfWarehouseid(warehousebillsDTO.getWarehouseId());
  7253. List<TWhgenleg> tWhgenlegs = tWhgenlegMapper.selectTWhgenlegList(tWhgenleg);
  7254. if (CollectionUtils.isNotEmpty(tWhgenlegs)) {
  7255. List<Long> goodsIds = tWhgenlegs.stream().filter(l -> Objects.nonNull(l.getfGoodsid())).map(TWhgenleg::getfGoodsid).distinct()
  7256. .collect(toList());
  7257. if (CollectionUtils.isNotEmpty(goodsIds)) {
  7258. List<TGoods> goodsList = tGoodsMapper.selectByIds(goodsIds);
  7259. List<GoodsVO> voList = new ArrayList<>();
  7260. goodsList.forEach(vo -> {
  7261. // TGoods goods = goodsList.stream().filter(li -> Objects.equals(vo.getfGoodsid(), li.getfId())).findFirst()
  7262. // .orElseThrow(() -> new WarehouseException("商品信息找不到"));
  7263. GoodsVO goodsVO = new GoodsVO();
  7264. goodsVO.setfId(vo.getfId());
  7265. goodsVO.setfName(vo.getfName());
  7266. // goodsVO.setFMarks(vo.getfMarks());
  7267. // goodsVO.setFBusinessType(vo.getfBusinessType());
  7268. voList.add(goodsVO);
  7269. });
  7270. billsVO.setGoodsVOList(voList);
  7271. }
  7272. return AjaxResult.success(billsVO);
  7273. }
  7274. }
  7275. return AjaxResult.success(billsVO);
  7276. }
  7277. /**
  7278. * 快速入库-暂存
  7279. *
  7280. * @param warehousebillsDTO
  7281. * @param loginUser
  7282. * @return
  7283. */
  7284. @Override
  7285. @Transactional(rollbackFor = Exception.class)
  7286. public AjaxResult quickStaging(WarehousebillsDTO warehousebillsDTO, LoginUser loginUser) {
  7287. // 校验必填项
  7288. warehouseBillsfilterService.filter(warehousebillsDTO, WarehouseTypeEnum.SAVE.getType());
  7289. // 定义计算毛重净重的仓库主表
  7290. TWarehouseBills warehouseBills = new TWarehouseBills();
  7291. // 根据客户、提单号、仓库是否存在已入库数据,若已存在则追加在其上面
  7292. TWarehouseBills warehouseCondition = new TWarehouseBills();
  7293. warehouseCondition.setfMblno(warehousebillsDTO.getfMblno());
  7294. warehouseCondition.setfCorpid(warehousebillsDTO.getfCorpid());
  7295. warehouseCondition.setfBilltype(WarehouseTypeEnum.SJRK.getType());
  7296. warehouseCondition.setfWarehouseid(warehousebillsDTO.getfWarehouseid());
  7297. warehouseCondition.setfTrademodeid(warehousebillsDTO.getfTrademodeid());
  7298. warehouseCondition.setfBillstatus(Long.parseLong(WarehouseTypeEnum.SAVE.getType()));
  7299. List<TWarehouseBills> warehouseBillsList = tWarehouseBillsMapper.selectTWarehousebillsList(warehouseCondition);
  7300. // 如果是入库、存在一条入库数据
  7301. if (warehousebillsDTO.getfBilltype().equals(WarehouseTypeEnum.SJRK.getType()) &&
  7302. CollectionUtils.isNotEmpty(warehouseBillsList) && warehouseBillsList.size() == 1) {
  7303. TWarehouseBills bills = warehouseBillsList.stream().findFirst()
  7304. .orElseThrow(() -> new WarehouseException("查询仓库信息失败"));
  7305. // 赋值新对象
  7306. BeanUtils.copyProperties(bills, warehouseBills);
  7307. warehousebillsDTO.setfId(bills.getfId());
  7308. } else {
  7309. // 生成编号
  7310. String billNo = billnoSerialServiceImpl.getBillNo(warehousebillsDTO.getfBilltype(), warehousebillsDTO.getfBsdate());
  7311. warehousebillsDTO.setfBillno(billNo);
  7312. // 如果是入库则需要赋值客户存货编号
  7313. if (WarehouseTypeEnum.SJRK.getType().equals(warehousebillsDTO.getType())) {
  7314. Date time = new Date();
  7315. String bscorpno = billnoSerialServiceImpl.getCorpNo(warehousebillsDTO.getfCorpid(), time);
  7316. warehousebillsDTO.setfBscorpno(bscorpno);
  7317. }
  7318. warehousebillsDTO.setfDateChanged(DateUtils.getTimestamp(new Date()).toString() + (int) (Math.random() * 900) + 100);
  7319. warehousebillsDTO.setCreateTime(new Date());
  7320. warehousebillsDTO.setfBillingway(2L);
  7321. warehousebillsDTO.setCreateBy(loginUser.getUsername());
  7322. warehousebillsDTO.setfBsdeptid(loginUser.getUser().getDeptId());
  7323. warehousebillsDTO.setfChargedate(warehousebillsDTO.getfBsdate());
  7324. warehousebillsDTO.setfBillstatus(Long.parseLong(WarehouseTypeEnum.SAVE.getType()));
  7325. warehousebillsDTO.setfItemsStatus(Long.parseLong(WarehouseTypeEnum.DETAILED_STATUS_PROCESSED.getType()));
  7326. tWarehouseBillsMapper.insertTWarehousebills(warehousebillsDTO);
  7327. // 赋值新对象
  7328. BeanUtils.copyProperties(warehousebillsDTO, warehouseBills);
  7329. }
  7330. // 遍历进行入库、出库确认
  7331. List<TWarehousebillsitems> itemList = warehousebillsDTO.getWarehousebillsitemsList();
  7332. int line = 1;
  7333. String serialNumber;
  7334. if (warehousebillsDTO.getfBilltype().equals(WarehouseTypeEnum.SJRK.getType())) {
  7335. serialNumber = billnoSerialServiceImpl.getSerialNumber(WarehouseTypeEnum.SJRK_NO.getType(), new Date());
  7336. } else {
  7337. serialNumber = billnoSerialServiceImpl.getSerialNumber(WarehouseTypeEnum.SJCK_NO.getType(), new Date());
  7338. }
  7339. for (TWarehousebillsitems li : itemList) {
  7340. li.setfPid(warehouseBills.getfId());
  7341. li.setfBillstatus(10L);
  7342. li.setfSerialNumber(serialNumber);
  7343. li.setfBillno(warehouseBills.getfBillno());
  7344. li.setfBilltype(warehouseBills.getfBilltype());
  7345. if (warehouseBills.getfBilltype().equals(WarehouseTypeEnum.SJRK.getType())) {
  7346. quickStorage(warehouseBills, li, WarehouseTypeEnum.SAVE.getType(), line);
  7347. } else if (warehouseBills.getfBilltype().equals(WarehouseTypeEnum.SJCK.getType())) {
  7348. quickDelivery(warehouseBills, li, WarehouseTypeEnum.SAVE.getType(), line);
  7349. line++;
  7350. }
  7351. }
  7352. // 计算明细数据件数、毛重、净重总和数量
  7353. calculationWarehouseService.calculationWarehouseQuantity(warehouseBills);
  7354. calculationWarehouseService.calculationBillStatus(warehouseBills);
  7355. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  7356. // 遍历费用信息
  7357. if (CollectionUtils.isNotEmpty(warehousebillsDTO.getWarehousebillsfeesList())) {
  7358. quickFee(warehouseBills, warehousebillsDTO.getWarehousebillsfeesList());
  7359. }
  7360. warehousebillsDTO.setBsDate(warehousebillsDTO.getfBsdate().getTime());
  7361. warehousebillsDTO.setBsTime(warehousebillsDTO.getfBstime().getTime());
  7362. return AjaxResult.success(warehousebillsDTO);
  7363. }
  7364. /**
  7365. * 快速出、入库-提交
  7366. *
  7367. * @param warehousebillsDTO 出库信息
  7368. * @param loginUser 登陆人
  7369. * @return
  7370. */
  7371. @Override
  7372. @Transactional(rollbackFor = Exception.class)
  7373. public AjaxResult quickOperation(WarehousebillsDTO warehousebillsDTO, LoginUser loginUser) {
  7374. if (CollectionUtils.isEmpty(warehousebillsDTO.getWarehousebillsitemsList())) {
  7375. throw new WarehouseException("未找到仓储的明细数据");
  7376. }
  7377. // 校验必填项
  7378. warehouseBillsfilterService.filter(warehousebillsDTO, WarehouseTypeEnum.SUBMIT.getType());
  7379. // 遍历进行入库、出库确认
  7380. List<TWarehousebillsitems> itemList = warehousebillsDTO.getWarehousebillsitemsList();
  7381. int line = 1;
  7382. for (TWarehousebillsitems li : itemList) {
  7383. // 如果业务时间超出当前时间则不允许
  7384. if (li.getfBsdate().after(new Date())) {
  7385. throw new WarehouseException("业务日期不得超出当前日期");
  7386. }
  7387. li.setfPid(warehousebillsDTO.getfId());
  7388. li.setfBillstatus(40L);
  7389. li.setfBillno(warehousebillsDTO.getfBillno());
  7390. li.setfBilltype(warehousebillsDTO.getfBilltype());
  7391. if (warehousebillsDTO.getfBilltype().equals(WarehouseTypeEnum.SJRK.getType())) {
  7392. quickStorage(warehousebillsDTO, li, WarehouseTypeEnum.SUBMIT.getType(), line);
  7393. } else if (warehousebillsDTO.getfBilltype().equals(WarehouseTypeEnum.SJCK.getType())) {
  7394. quickDelivery(warehousebillsDTO, li, WarehouseTypeEnum.SUBMIT.getType(), line);
  7395. line++;
  7396. }
  7397. }
  7398. // 计算明细数据件数、毛重、净重总和数量
  7399. calculationWarehouseService.calculationWarehouseQuantity(warehousebillsDTO);
  7400. calculationWarehouseService.calculationBillStatus(warehousebillsDTO);
  7401. tWarehouseBillsMapper.updateTWarehousebills(warehousebillsDTO);
  7402. // 遍历费用信息
  7403. if (CollectionUtils.isNotEmpty(warehousebillsDTO.getWarehousebillsfeesList())) {
  7404. quickFee(warehousebillsDTO, warehousebillsDTO.getWarehousebillsfeesList());
  7405. }
  7406. return AjaxResult.success();
  7407. }
  7408. /**
  7409. * 快速入库
  7410. *
  7411. * @param warehouseBills 主表信息
  7412. * @param item 明细信息
  7413. * @param operateType 操作类型
  7414. * @param line 序号
  7415. */
  7416. private void quickStorage(TWarehouseBills warehouseBills, TWarehousebillsitems item, String operateType, int line) {
  7417. // 查询库容量 是否可入库
  7418. if (calculation(warehouseBills.getfWarehouseid(), item.getfGrossweight()) <= 0) {
  7419. throw new WarehouseException("仓储明细第" + line + "行入库毛重大于库容");
  7420. }
  7421. if (StringUtils.isNotEmpty(warehouseBills.getfCustomno())) {
  7422. item.setfCustomno(warehouseBills.getfCustomno());
  7423. }
  7424. item.setfOriginalbilldate(item.getfBsdate());
  7425. item.setfBillingway(warehouseBills.getfBillingway());
  7426. if ("1".equals(warehouseBills.getfChargetype())) {
  7427. item.setfChargedate(item.getfBsdate());
  7428. } else {
  7429. item.setfChargedate(new Date());
  7430. }
  7431. // 校验商品是否区分箱号
  7432. TGoods goods = tGoodsMapper.selectTGoodsById(item.getfGoodsid());
  7433. if ("1".equals(goods.getIfCntrno()) && StringUtils.isNull(item.getfCntrno())) {
  7434. throw new WarehouseException("仓库明细第" + line + "行未找到箱号");
  7435. }
  7436. // 如果不为暂存的话则默认操作库存总帐
  7437. if (!operateType.equals(WarehouseTypeEnum.SAVE.getType())) {
  7438. TWhgenleg tWhgenle = queryTWhgenleg(warehouseBills, item, goods.getIfCntrno());
  7439. if (Objects.nonNull(tWhgenle)) {
  7440. updateTWhgenlegData(item, tWhgenle.getfId(), warehouseBills.getfBilltype());
  7441. } else {
  7442. instalTWhgenleg(warehouseBills, item);
  7443. }
  7444. item.setfIsInventory(Long.parseLong(WarehouseTypeEnum.INVENTORY.getType()));
  7445. }
  7446. if (Objects.nonNull(item.getfId())) {
  7447. item.setUpdateTime(new Date());
  7448. item.setUpdateBy(SecurityUtils.getUsername());
  7449. tWarehousebillsitemsMapper.updateTWarehousebillsitems(item);
  7450. } else {
  7451. item.setCreateTime(new Date());
  7452. item.setCreateBy(SecurityUtils.getUsername());
  7453. tWarehousebillsitemsMapper.insertTWarehousebillsitems(item);
  7454. }
  7455. // 添加状态log
  7456. insertTWarehousebillsLog(item, 40L);
  7457. }
  7458. /**
  7459. * 快速出库
  7460. *
  7461. * @param warehouseBills 主表信息
  7462. * @param item 明细信息
  7463. * @param operateType 是否保存
  7464. * @param line 序号
  7465. */
  7466. private void quickDelivery(TWarehouseBills warehouseBills, TWarehousebillsitems item, String operateType, int line) {
  7467. // 校验商品是否区分箱号
  7468. TGoods goods = tGoodsMapper.selectTGoodsById(item.getfGoodsid());
  7469. if ("1".equals(goods.getIfCntrno()) && StringUtils.isNull(item.getfCntrno())) {
  7470. throw new WarehouseException("仓库明细未找到箱号");
  7471. }
  7472. // 如果不为暂存的话则默认操作库存总帐
  7473. if (!operateType.equals(WarehouseTypeEnum.SAVE.getType())) {
  7474. // 查询总账是否存在
  7475. TWhgenleg tWhgenle = queryTWhgenleg(warehouseBills, item, goods.getIfCntrno());
  7476. if (Objects.nonNull(tWhgenle) && item.getfBsdate().before(tWhgenle.getfChargedate())) {
  7477. throw new WarehouseException("出库明细第" + line + "行业务日期不得超出库存总帐日期");
  7478. }
  7479. if (Objects.isNull(tWhgenle)) {
  7480. throw new WarehouseException("出库库存总帐第" + line + "行不存在");
  7481. }
  7482. //校验计费日期是等于库存总帐计费日,如果不相等则报错
  7483. checkWhgenleg(item, tWhgenle);
  7484. // 库存 < 出库件数
  7485. if (tWhgenle.getfQtyblc() < item.getfQty()) {
  7486. throw new WarehouseException("库存明细第" + line + "行库存不足");
  7487. }
  7488. // 更新库存总账
  7489. updateTWhgenlegData(item, tWhgenle.getfId(), warehouseBills.getfBilltype());
  7490. }
  7491. if (Objects.nonNull(item.getfId())) {
  7492. item.setUpdateTime(new Date());
  7493. item.setUpdateBy(SecurityUtils.getUsername());
  7494. tWarehousebillsitemsMapper.updateTWarehousebillsitems(item);
  7495. } else {
  7496. item.setCreateTime(new Date());
  7497. item.setCreateBy(SecurityUtils.getUsername());
  7498. tWarehousebillsitemsMapper.insertTWarehousebillsitems(item);
  7499. }
  7500. // 添加状态log
  7501. insertTWarehousebillsLog(item, 40L);
  7502. }
  7503. /**
  7504. * 快速-仓库费用
  7505. *
  7506. * @param warehouseBills 主表信息
  7507. * @param warehousebillsfeesList 费用信息
  7508. */
  7509. private void quickFee(TWarehouseBills warehouseBills, List<TWarehousebillsfees> warehousebillsfeesList) {
  7510. warehousebillsfeesList.forEach(fee -> {
  7511. fee.setfPid(warehouseBills.getfId());
  7512. if (Objects.nonNull(fee.getfId())) {
  7513. fee.setUpdateTime(new Date());
  7514. fee.setUpdateBy(SecurityUtils.getUsername());
  7515. tWarehousebillsfeesMapper.updateTWarehousebillsfees(fee);
  7516. } else {
  7517. fee.setCreateTime(new Date());
  7518. fee.setCreateBy(SecurityUtils.getUsername());
  7519. tWarehousebillsfeesMapper.insertTWarehousebillsfees(fee);
  7520. }
  7521. });
  7522. }
  7523. /**
  7524. * 校验提单号是否在同一天出现第二次
  7525. *
  7526. * @param warehousebillsDTO 查询条件
  7527. */
  7528. @Override
  7529. public void checkMblNoRepeat(WarehousebillsDTO warehousebillsDTO) {
  7530. if (CollectionUtils.isNotEmpty(warehousebillsDTO.getWarehousebillsitemsList())) {
  7531. List<TWarehousebillsitems> items = warehousebillsDTO.getWarehousebillsitemsList();
  7532. for (TWarehousebillsitems li : items) {
  7533. if (StringUtils.isNotEmpty(li.getfCntrno())) {
  7534. warehousebillsDTO.setfCntrno(li.getfCntrno());
  7535. }
  7536. // int num = tWarehouseBillsMapper.selectByMblnoOrCntrnoCount(warehousebillsDTO);
  7537. // if (num > 0 && StringUtils.isEmpty(li.getfCntrno())) {
  7538. // throw new WarehouseException("该提单号存在重复录入");
  7539. // }
  7540. }
  7541. }
  7542. }
  7543. /**
  7544. * app查询库存总帐明细
  7545. *
  7546. * @param id 查询条件
  7547. * @return 库存总帐明细
  7548. */
  7549. @Override
  7550. public AjaxResult selectWhgenlegDetail(Long id) {
  7551. // 查询明细
  7552. List<WarehouseBillsVO> warehouseBillsVOList = tWarehouseBillsMapper.selectWhgenlegDetailById(id);
  7553. warehouseBillsVOList.forEach(vo -> {
  7554. WarehouseTypeEnum warehouseTypeEnum = WarehouseTypeEnum.fromType(vo.getfBilltype());
  7555. vo.setBillTypeName(warehouseTypeEnum.getName());
  7556. });
  7557. return AjaxResult.success(warehouseBillsVOList);
  7558. }
  7559. @Override
  7560. @Transactional
  7561. public AjaxResult cancellationFees(String tWarehousebills, String tWarehousebillsCntr, String tWarehousebillsCntritems, String tWarehousebillsfeesCr, String tWarehousebillsfeesDr, LoginUser loginUser, String billsType) {
  7562. long actId = 460;
  7563. Long billStatus = 2L;
  7564. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehousebills, TWarehouseBills.class);
  7565. Map<String, Object> map = new HashMap<>();
  7566. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(warehouseBills.getfId());
  7567. if (tWarehouseBills == null) {
  7568. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  7569. return AjaxResult.error("找不到订单信息");
  7570. }
  7571. if (isCalculateFees(warehouseBills.getfId())) {
  7572. return AjaxResult.error("财务已计算费用");
  7573. }
  7574. AjaxResult ajaxResult = this.changeFees(warehouseBills.getfId());
  7575. String code = ajaxResult.get("code").toString();
  7576. if ("500".equals(code)) {
  7577. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  7578. return ajaxResult;
  7579. }
  7580. warehouseBills.setfTimes(tWarehouseBills.getfTimes() - 1);
  7581. Integer integer = tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  7582. map.put("tWarehouseBills", tWarehouseBills);
  7583. if (StringUtils.isNotEmpty(tWarehousebillsCntritems)) {
  7584. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsCntritems);
  7585. List<TWarehousebillsCntritems> tWarehousebillsCntritemsList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsCntritems.class);
  7586. map.put("tWarehousebillsCntritemsList", tWarehousebillsCntritemsList);
  7587. }
  7588. if (StringUtils.isNotNull(tWarehousebillsfeesCr) && !"[]".equals(tWarehousebillsfeesCr)) {
  7589. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesCr);
  7590. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  7591. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  7592. if (wbCr.getfId() == null) {
  7593. wbCr.setfPid(warehouseBills.getfId());
  7594. wbCr.setfDc("C");
  7595. wbCr.setfBilltype(billsType);
  7596. wbCr.setfBillstatus(billStatus);
  7597. wbCr.setCreateTime(new Date());
  7598. wbCr.setSrcBillNo(tWarehouseBills.getfBillno());
  7599. wbCr.setCreateBy(loginUser.getUser().getUserName());
  7600. if (warehouseBills.getfBsdate() != null && !"".equals(warehouseBills.getfBsdate())) {
  7601. wbCr.setfBsdate(warehouseBills.getfBsdate());
  7602. }
  7603. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  7604. } else {
  7605. wbCr.setfBillstatus(billStatus);
  7606. wbCr.setUpdateBy(loginUser.getUser().getUserName());
  7607. wbCr.setUpdateTime(new Date());
  7608. tWarehousebillsfeesMapper.updateTWarehousebillsfees(wbCr);
  7609. }
  7610. }
  7611. map.put("warehousebillsfeesCrList", warehousebillsfeesCrList);
  7612. }
  7613. if (StringUtils.isNotNull(tWarehousebillsfeesDr) && !"[]".equals(tWarehousebillsfeesDr)) {
  7614. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesDr);
  7615. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  7616. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  7617. if (wbDr.getfId() == null) {
  7618. wbDr.setfPid(warehouseBills.getfId());
  7619. wbDr.setfDc("D");
  7620. wbDr.setfBillstatus(billStatus);
  7621. wbDr.setfBilltype(billsType);
  7622. wbDr.setCreateTime(new Date());
  7623. wbDr.setSrcBillNo(tWarehouseBills.getfBillno());
  7624. wbDr.setCreateBy(loginUser.getUser().getUserName());
  7625. if (warehouseBills.getfBsdate() != null && !"".equals(warehouseBills.getfBsdate())) {
  7626. wbDr.setfBsdate(warehouseBills.getfBsdate());
  7627. }
  7628. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  7629. } else {
  7630. wbDr.setfBillstatus(billStatus);
  7631. wbDr.setUpdateTime(new Date());
  7632. wbDr.setUpdateBy(loginUser.getUser().getUserName());
  7633. tWarehousebillsfeesMapper.updateTWarehousebillsfees(wbDr);
  7634. }
  7635. }
  7636. map.put("warehousebillsfeesDrList", warehousebillsfeesDrList);
  7637. }
  7638. if (StringUtils.isNotEmpty(tWarehousebillsCntr) && !"[]".equals(tWarehousebillsCntr)) {
  7639. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsCntr);
  7640. List<TWarehousebillsCntr> tWarehousebillsCntrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsCntr.class);
  7641. map.put("tWarehousebillsCntrList", tWarehousebillsCntrList);
  7642. }
  7643. //删除审批流
  7644. //1.查找审批流
  7645. AuditItems auditItems = new AuditItems();
  7646. auditItems.setActId(actId);
  7647. auditItems.setBillId(warehouseBills.getfId());
  7648. auditItems.setId(warehouseBills.getfId());
  7649. auditItems.setFidStatus("f_billstatus");
  7650. //删除审批流信息
  7651. auditItemsMapper.deletePurchaseApproval(auditItems);
  7652. return AjaxResult.success("success", map);
  7653. }
  7654. /**
  7655. * 如果是入库
  7656. *
  7657. * @param infoVO
  7658. * @return
  7659. */
  7660. private void isInStock(AppWarehouseInfoVO infoVO) {
  7661. if (StringUtils.isNotNull(infoVO.getfCorpid())) {
  7662. TCorps corps = tCorpsMapper.selectTCorpsById(infoVO.getfCorpid());
  7663. // 赋值客户id
  7664. infoVO.setCorpName(corps.getfName());
  7665. }
  7666. // 计费单位
  7667. if (StringUtils.isNotNull(infoVO.getfFeetunit())) {
  7668. String type = "data_unitfees";
  7669. String dictLabel = DictUtils.getDictLabel(type, infoVO.getfFeetunit());
  7670. if (StringUtils.isNotEmpty(dictLabel)) {
  7671. infoVO.setFeetunitName(dictLabel);
  7672. }
  7673. }
  7674. // 商品信息
  7675. if (StringUtils.isNotNull(infoVO.getfGoodsid())) {
  7676. // 添加商品信息
  7677. TGoods tGoods = tGoodsMapper.selectTGoodsById(infoVO.getfGoodsid());
  7678. if (Objects.nonNull(tGoods)) {
  7679. infoVO.setGoodsName(tGoods.getfName());
  7680. }
  7681. }
  7682. // 查询仓库信息
  7683. TWarehouse tWarehouse = tWarehouseMapper.selectTWarehouseById(infoVO.getfWarehouseid());
  7684. if (Objects.nonNull(tWarehouse)) {
  7685. infoVO.setWarehouseName(tWarehouse.getfName());
  7686. }
  7687. // 入库查询箱型箱量
  7688. TWarehousebillsCntr warehousebillsCntr = new TWarehousebillsCntr();
  7689. warehousebillsCntr.setfPid(infoVO.getfId());
  7690. List<TWarehousebillsCntr> cntrsList = tWarehousebillsCntrMapper.selectTWarehousebillsCntrList(warehousebillsCntr);
  7691. if (CollectionUtils.isNotEmpty(cntrsList)) {
  7692. List<Long> cntrIds = cntrsList.stream().map(TWarehousebillsCntr::getfCntrid).distinct().collect(toList());
  7693. if (CollectionUtils.isNotEmpty(cntrIds)) {
  7694. List<TCntr> cntrList = tCntrMapper.selectByIds(cntrIds);
  7695. cntrsList.forEach(li -> {
  7696. TCntr cntr = cntrList.stream().filter(c -> Objects.equals(c.getfId(), li.getfCntrid())).findFirst()
  7697. .orElseThrow(() -> new WarehouseException("找不到集装箱信息"));
  7698. li.setCntrName(cntr.getfName());
  7699. });
  7700. }
  7701. infoVO.setCntrsList(cntrsList);
  7702. }
  7703. }
  7704. /**
  7705. * 如果是出库
  7706. *
  7707. * @param infoVO
  7708. * @return
  7709. */
  7710. private void isOutStock(AppWarehouseInfoVO infoVO) {
  7711. if (StringUtils.isNotNull(infoVO.getfCorpid())) {
  7712. TCorps corps = tCorpsMapper.selectTCorpsById(infoVO.getfCorpid());
  7713. // 赋值客户id
  7714. infoVO.setCorpName(corps.getfName());
  7715. }
  7716. // 结算方式
  7717. if (StringUtils.isNotNull(infoVO.getfStltypeid())) {
  7718. // 定义结算方式
  7719. String fStltypeid = "data_stltype_type";
  7720. String dictLabel = DictUtils.getDictLabel(fStltypeid, infoVO.getfStltypeid().toString());
  7721. infoVO.setStltypeName(dictLabel);
  7722. }
  7723. // 查询仓库信息
  7724. TWarehouse tWarehouse = tWarehouseMapper.selectTWarehouseById(infoVO.getfWarehouseid());
  7725. if (Objects.nonNull(tWarehouse)) {
  7726. infoVO.setWarehouseName(tWarehouse.getfName());
  7727. }
  7728. }
  7729. /**
  7730. * 如果是货转
  7731. *
  7732. * @param infoVO
  7733. * @return
  7734. */
  7735. private void isGoodsForwarding(AppWarehouseInfoVO infoVO) {
  7736. // 查询客户信息
  7737. List<Long> corpIds = new ArrayList<>();
  7738. // 如果是货转客户那么也要查询
  7739. if (StringUtils.isNotNull(infoVO.getfTocorpid())) {
  7740. corpIds.add(infoVO.getfTocorpid());
  7741. }
  7742. corpIds.add(infoVO.getfCorpid());
  7743. List<TCorps> corpsList = tCorpsMapper.selectByIds(corpIds);
  7744. // 赋值客户id
  7745. TCorps corps = corpsList.stream().filter(li -> Objects.equals(li.getfId(), infoVO.getfCorpid())).findFirst()
  7746. .orElseThrow(() -> new WarehouseException("客户不存在"));
  7747. infoVO.setCorpName(corps.getfName());
  7748. // 赋值货转客户id
  7749. TCorps toCorp = corpsList.stream().filter(li -> Objects.equals(li.getfId(), infoVO.getfTocorpid())).findFirst()
  7750. .orElseThrow(() -> new WarehouseException("客户不存在"));
  7751. infoVO.setToCorpName(toCorp.getfName());
  7752. // 查询仓库信息
  7753. TWarehouse tWarehouse = tWarehouseMapper.selectTWarehouseById(infoVO.getfWarehouseid());
  7754. if (Objects.nonNull(tWarehouse)) {
  7755. infoVO.setWarehouseName(tWarehouse.getfName());
  7756. }
  7757. // 结算方式
  7758. if (StringUtils.isNotNull(infoVO.getfStltypeid())) {
  7759. // 定义结算方式
  7760. String fStltypeid = "data_stltype_type";
  7761. String dictLabel = DictUtils.getDictLabel(fStltypeid, infoVO.getfStltypeid().toString());
  7762. infoVO.setStltypeName(dictLabel);
  7763. }
  7764. // 贸易方式
  7765. if (StringUtils.isNotNull(infoVO.getfTrademodeid())) {
  7766. String type = "data_trademodes";
  7767. // 转换贸易方式
  7768. String dictLabel = DictUtils.getDictLabel(type, infoVO.getfTrademodeid().toString());
  7769. if (StringUtils.isNotEmpty(dictLabel)) {
  7770. infoVO.setNewTrademodeName(dictLabel);
  7771. }
  7772. }
  7773. // 计费单位
  7774. if (StringUtils.isNotNull(infoVO.getfFeetunit())) {
  7775. String type = "data_unitfees";
  7776. String dictLabel = DictUtils.getDictLabel(type, infoVO.getfFeetunit().toString());
  7777. if (StringUtils.isNotEmpty(dictLabel)) {
  7778. infoVO.setFeetunitName(dictLabel);
  7779. }
  7780. }
  7781. // 商品信息
  7782. if (StringUtils.isNotNull(infoVO.getfGoodsid())) {
  7783. // 添加商品信息
  7784. TGoods tGoods = tGoodsMapper.selectTGoodsById(infoVO.getfGoodsid());
  7785. if (Objects.nonNull(tGoods)) {
  7786. infoVO.setGoodsName(tGoods.getfName());
  7787. }
  7788. }
  7789. }
  7790. /**
  7791. * 如果是调拨
  7792. *
  7793. * @param infoVO
  7794. * @return
  7795. */
  7796. private void isTransfer(AppWarehouseInfoVO infoVO) {
  7797. if (StringUtils.isNotNull(infoVO.getfCorpid())) {
  7798. TCorps corps = tCorpsMapper.selectTCorpsById(infoVO.getfCorpid());
  7799. // 赋值客户id
  7800. infoVO.setCorpName(corps.getfName());
  7801. }
  7802. // 作业类型
  7803. if (StringUtils.isNotNull(infoVO.getfBusinessType())) {
  7804. String type = "st_trans_type";
  7805. String dictLabel = DictUtils.getDictLabel(type, infoVO.getfBusinessType().toString());
  7806. if (StringUtils.isNotEmpty(dictLabel)) {
  7807. infoVO.setBusinessTypeName(dictLabel);
  7808. }
  7809. }
  7810. // 贸易方式
  7811. if (StringUtils.isNotNull(infoVO.getfTrademodeid())) {
  7812. String type = "data_trademodes";
  7813. // 转换贸易方式
  7814. String dictLabel = DictUtils.getDictLabel(type, infoVO.getfTrademodeid().toString());
  7815. if (StringUtils.isNotEmpty(dictLabel)) {
  7816. infoVO.setNewTrademodeName(dictLabel);
  7817. }
  7818. }
  7819. // 仓库id集合
  7820. List<Long> warehouseIds = new ArrayList<>();
  7821. if (StringUtils.isNotNull(infoVO.getfInwarehouseid())) {
  7822. warehouseIds.add(infoVO.getfInwarehouseid());
  7823. }
  7824. warehouseIds.add(infoVO.getfWarehouseid());
  7825. // 查询仓库信息
  7826. List<TWarehouse> tWarehouseList = tWarehouseMapper.selectByIds(warehouseIds);
  7827. TWarehouse tWarehouse = tWarehouseList.stream().filter(li -> Objects.equals(li.getfId(), infoVO.getfWarehouseid())).findFirst()
  7828. .orElseThrow(() -> new WarehouseException("仓库不存在"));
  7829. infoVO.setWarehouseName(tWarehouse.getfName());
  7830. if (StringUtils.isNotNull(infoVO.getfInwarehouseid())) {
  7831. // 调入仓库
  7832. TWarehouse inWarehouse = tWarehouseList.stream().filter(li -> Objects.equals(li.getfId(), infoVO.getfInwarehouseid())).findFirst()
  7833. .orElseThrow(() -> new WarehouseException("仓库不存在"));
  7834. infoVO.setInWarehouseName(inWarehouse.getfName());
  7835. }
  7836. }
  7837. /**
  7838. * 能否修改费用信息
  7839. *
  7840. * @param id 订单主表id
  7841. * @return
  7842. */
  7843. private AjaxResult changeFees(Long id) {
  7844. List<TWarehousebillsfees> warehousebillsfees = tWarehousebillsfeesMapper.selectFeesByPId(id, null);
  7845. if (CollectionUtils.isNotEmpty(warehousebillsfees)) {
  7846. for (TWarehousebillsfees warehousebillsfee : warehousebillsfees) {
  7847. if (warehousebillsfee.getfAccamount() != null && warehousebillsfee.getfAccamount().compareTo(new BigDecimal(BigInteger.ZERO)) == 1) {
  7848. return AjaxResult.error("费用已对账");
  7849. }
  7850. if (warehousebillsfee.getfStlamount() != null && warehousebillsfee.getfStlamount().compareTo(new BigDecimal(BigInteger.ZERO)) == 1) {
  7851. return AjaxResult.error("费用已收费付费");
  7852. }
  7853. if (warehousebillsfee.getfInvamount() != null && warehousebillsfee.getfInvamount().compareTo(new BigDecimal(BigInteger.ZERO)) == 1) {
  7854. return AjaxResult.error("费用已开票");
  7855. }
  7856. }
  7857. }
  7858. return AjaxResult.success();
  7859. }
  7860. private boolean isCalculateFees(Long id) {
  7861. TFeeDo feeDo = new TFeeDo();
  7862. feeDo.setfSrcpid(id);
  7863. List<TFeeDo> tFeeDoList = tFeeDoMapper.selectTFeeDoList(feeDo);
  7864. return tFeeDoList.size() > 0;
  7865. }
  7866. private boolean isCalculateFeesById(Long id) {
  7867. TFeeDo feeDo = new TFeeDo();
  7868. feeDo.setfSrcid(id);
  7869. List<TFeeDo> tFeeDoList = tFeeDoMapper.selectTFeeDoList(feeDo);
  7870. return tFeeDoList.size() > 0;
  7871. }
  7872. /**
  7873. * 出入库、库存统计
  7874. *
  7875. * @return
  7876. */
  7877. @Override
  7878. public Map<String, String> stockStatistics(String mode) {
  7879. String external = null;
  7880. String customerName;
  7881. SysUser user = SecurityUtils.getLoginUser().getUser();
  7882. if ("外部用户".equals(user.getDept().getDeptName())) {
  7883. external = user.getUserName();
  7884. customerName = String.valueOf(tCustomerContactMapper.getCustomerName(external).get("customerName"));
  7885. } else {
  7886. SysConfig config = new SysConfig();
  7887. config.setConfigKey("data_print_title");
  7888. customerName = configMapper.selectConfig(config).getConfigValue();
  7889. }
  7890. Map<String, String> data = new HashMap<>();
  7891. // 客户名称
  7892. data.put("customerName", customerName);
  7893. // 全部库存
  7894. data.put("stockTotal", stockStatistics(null, null, external, mode));
  7895. // 今天
  7896. data.put("inStockTotalToday", inAndOutStockStatistics("SJRK", DateUtils.today(), DateUtils.today(), external, mode));
  7897. data.put("outStockTotalToday", inAndOutStockStatistics("SJCK", DateUtils.today(), DateUtils.today(), external, mode));
  7898. // 昨天
  7899. data.put("inStockTotalYesterday", inAndOutStockStatistics("SJRK", DateUtils.yesterday(), DateUtils.yesterday(), external, mode));
  7900. data.put("outStockTotalYesterday", inAndOutStockStatistics("SJCK", DateUtils.yesterday(), DateUtils.yesterday(), external, mode));
  7901. // 本周
  7902. data.put("inStockTotalWeek", inAndOutStockStatistics("SJRK", DateUtils.beginOfWeek(), DateUtils.endOfWeek(), external, mode));
  7903. data.put("outStockTotalWeek", inAndOutStockStatistics("SJCK", DateUtils.beginOfWeek(), DateUtils.endOfWeek(), external, mode));
  7904. // 上周
  7905. data.put("inStockTotalLastWeek", inAndOutStockStatistics("SJRK", DateUtils.beginOfLastWeek(), DateUtils.endOfLastWeek(), external, mode));
  7906. data.put("outStockTotalLastWeek", inAndOutStockStatistics("SJCK", DateUtils.beginOfLastWeek(), DateUtils.endOfLastWeek(), external, mode));
  7907. // 本月
  7908. data.put("inStockTotalMonth", inAndOutStockStatistics("SJRK", DateUtils.beginOfMonth(), DateUtils.endOfMonth(), external, mode));
  7909. data.put("outStockTotalMonth", inAndOutStockStatistics("SJCK", DateUtils.beginOfMonth(), DateUtils.endOfMonth(), external, mode));
  7910. // 上个月
  7911. data.put("inStockTotalLastMonth", inAndOutStockStatistics("SJRK", DateUtils.beginOfLastMonth(), DateUtils.endOfLastMonth(), external, mode));
  7912. data.put("outStockTotalLastMonth", inAndOutStockStatistics("SJCK", DateUtils.beginOfLastMonth(), DateUtils.endOfLastMonth(), external, mode));
  7913. return data;
  7914. }
  7915. /**
  7916. * 周期库存统计
  7917. *
  7918. * @return
  7919. */
  7920. @Override
  7921. public Map<String, String> cycleStockStatistics(String mode) {
  7922. String external = null;
  7923. SysUser user = SecurityUtils.getLoginUser().getUser();
  7924. if ("外部用户".equals(user.getDept().getDeptName())) {
  7925. external = user.getUserName();
  7926. }
  7927. Map<String, String> data = new HashMap<>();
  7928. // 库龄
  7929. data.put("stockDays", String.valueOf(tWhgenlegMapper.stockDays(external, null, null).get("stockDays")));
  7930. // 7天
  7931. data.put("stockTotalA", stockStatistics(DateUtils.offsetDate(-6), null, external, mode));
  7932. // 15天
  7933. data.put("stockTotalB", stockStatistics(DateUtils.offsetDate(-14), DateUtils.offsetDate(-6), external, mode));
  7934. // 30天
  7935. data.put("stockTotalC", stockStatistics(DateUtils.offsetDate(-29), DateUtils.offsetDate(-14), external, mode));
  7936. // 60天
  7937. data.put("stockTotalD", stockStatistics(DateUtils.offsetDate(-59), DateUtils.offsetDate(-29), external, mode));
  7938. // 90天
  7939. data.put("stockTotalE", stockStatistics(DateUtils.offsetDate(-89), DateUtils.offsetDate(-59), external, mode));
  7940. // 180天
  7941. data.put("stockTotalF", stockStatistics(DateUtils.offsetDate(-179), DateUtils.offsetDate(-89), external, mode));
  7942. // 180天+
  7943. data.put("stockTotalG", stockStatistics(null, DateUtils.offsetDate(-179), external, mode));
  7944. return data;
  7945. }
  7946. private String inAndOutStockStatistics(String billType, String beginDate, String endDate, String external, String mode) {
  7947. beginDate += " 00:00:00";
  7948. endDate += " 23:59:59";
  7949. Map<String, Object> statistics;
  7950. if ("4".equals(mode)) {
  7951. statistics = tWarehousebillsitemsMapper.inAndOutStockTeuStatistics(billType, beginDate, endDate, external, null, null);
  7952. return String.valueOf(((Double) statistics.get("total")).longValue());
  7953. }
  7954. statistics = tWarehousebillsitemsMapper.inAndOutStockStatistics(billType, beginDate, endDate, external, null, null, mode);
  7955. return String.valueOf(statistics.get("total"));
  7956. }
  7957. private String stockStatistics(String beginDate, String endDate, String external, String mode) {
  7958. if (StringUtils.isNotEmpty(beginDate)) {
  7959. beginDate += " 00:00:00";
  7960. }
  7961. if (StringUtils.isNotEmpty(endDate)) {
  7962. endDate += " 00:00:00";
  7963. }
  7964. Map<String, Object> statistics;
  7965. if ("4".equals(mode)) {
  7966. statistics = tWhgenlegMapper.stockTeuStatistics(beginDate, endDate, external, null, null);
  7967. return String.valueOf(((Double) statistics.get("quantity")).longValue());
  7968. }
  7969. statistics = tWhgenlegMapper.stockStatistics(beginDate, endDate, external, null, null, mode);
  7970. return String.valueOf(statistics.get("quantity"));
  7971. }
  7972. /**
  7973. * 出入库列表
  7974. *
  7975. * @return
  7976. */
  7977. @Override
  7978. public List<Map<String, Object>> inAndOutStockList() {
  7979. String external = null;
  7980. SysUser user = SecurityUtils.getLoginUser().getUser();
  7981. if ("外部用户".equals(user.getDept().getDeptName())) {
  7982. external = user.getUserName();
  7983. }
  7984. return tWarehouseBillsMapper.inAndOutStockList(external);
  7985. }
  7986. /**
  7987. * 扣货 fCaregoStatus 传 3 为要改为状态扣货
  7988. * 取消扣货 fCaregoStatus 传 2 为要改为状态放货
  7989. * @param tWarehouseBills
  7990. * @param loginUser
  7991. * @return
  7992. */
  7993. @Override
  7994. public AjaxResult detention(TWarehouseBills tWarehouseBills, LoginUser loginUser) {
  7995. List<String> stringList = new ArrayList<>();
  7996. if (CollectionUtils.isNotEmpty(tWarehouseBills.getOrderList())){
  7997. tWarehouseBills.getOrderList().stream().forEach(item ->{
  7998. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(item);
  7999. TWarehouseBills bills = new TWarehouseBills();
  8000. bills.setfId(item);
  8001. bills.setfCaregoStatus(tWarehouseBills.getfCaregoStatus());
  8002. //2 取消扣货 3 扣货
  8003. //获取订舱单位
  8004. TCorps tCorps = tCorpsMapper.selectTCorpsById(warehouseBills.getfCorpid());
  8005. if (tWarehouseBills.getfCaregoStatus().equals("2") && warehouseBills.getfCaregoStatus().equals("3")){
  8006. tWarehouseBillsMapper.updateTWarehousebills(bills);
  8007. }else if (tWarehouseBills.getfCaregoStatus().equals("3") && warehouseBills.getfCaregoStatus().equals("2")){
  8008. tWarehouseBillsMapper.updateTWarehousebills(bills);
  8009. }else {
  8010. stringList.add(warehouseBills.getfMblno());
  8011. }
  8012. });
  8013. }
  8014. if (CollectionUtils.isNotEmpty(stringList) && tWarehouseBills.getfCaregoStatus().equals("2")){
  8015. return AjaxResult.error("部分取消扣货失败,订单状态不为扣货的有:"+ org.apache.commons.lang.StringUtils.join(stringList.toArray(), ","));
  8016. }else if (CollectionUtils.isNotEmpty(stringList) && tWarehouseBills.getfCaregoStatus().equals("3")){
  8017. return AjaxResult.error("部分扣货失败,订单状态不为放货的有:"+ org.apache.commons.lang.StringUtils.join(stringList.toArray(), ","));
  8018. }
  8019. else {
  8020. return AjaxResult.success("操作成功");
  8021. }
  8022. }
  8023. @Override
  8024. public void updateMessage(Long fid) {
  8025. List<TFeeDo> list = tFeeDoMapper.selectTFeeDoByfPid(fid);
  8026. if (CollectionUtils.isNotEmpty(list)){
  8027. List<Long> collect = list.stream().map(TFeeDo::getfSrcpid).collect(toList());
  8028. collect.stream().forEach(item ->{
  8029. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(item);
  8030. //获取订舱单位
  8031. TCorps tCorps = tCorpsMapper.selectTCorpsById(warehouseBills.getfCorpid());
  8032. //实收费用
  8033. List<TWarehousebillsfees> warehousebillsfees = tWarehousebillsfeesMapper.selectFeesByPId(item, "D");
  8034. //实付费用
  8035. List<TWarehousebillsfees> tWarehousebillsfees = tWarehousebillsfeesMapper.selectFeesByPId(item, "C");
  8036. TWarehouseBills tWarehouseBills = new TWarehouseBills();
  8037. tWarehouseBills.setfId(item);
  8038. tWarehouseBills.setfRecycle(warehousebillsfees.stream().filter(ei->ei.getfStlamount()!=null && ei.getfBillstatus().longValue() == 6L).map(TWarehousebillsfees::getfStlamount).reduce(BigDecimal.ZERO,BigDecimal::add));
  8039. tWarehouseBills.setfPay(tWarehousebillsfees.stream().filter(ei->ei.getfStlamount()!=null && ei.getfBillstatus().longValue() == 6L).map(TWarehousebillsfees::getfStlamount).reduce(BigDecimal.ZERO,BigDecimal::add));
  8040. //如果订舱单位是凯和 应收尾0 也是放货状态
  8041. //1: 未放货 应收>0 应收>实收
  8042. //2:放货 应收>0 应收=实收
  8043. if ((tCorps == null || tCorps.getfCname().equals("青岛凯和志诚物流有限公司")) && !warehouseBills.getfCaregoStatus().equals("3") ){
  8044. tWarehouseBills.setfCaregoStatus("2");
  8045. }else if (!warehouseBills.getfCaregoStatus().equals("3") && warehouseBills.getfReceivable().compareTo(BigDecimal.ZERO) > 0 && warehouseBills.getfReceivable().compareTo(tWarehouseBills.getfRecycle()) > 0){
  8046. tWarehouseBills.setfCaregoStatus("1");
  8047. }else if (!warehouseBills.getfCaregoStatus().equals("3") && warehouseBills.getfReceivable().compareTo(BigDecimal.ZERO) > 0 && warehouseBills.getfReceivable().compareTo(tWarehouseBills.getfRecycle()) == 0){
  8048. tWarehouseBills.setfCaregoStatus("2");
  8049. }
  8050. tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills);
  8051. });
  8052. }
  8053. }
  8054. @Override
  8055. public AjaxResult corpAnalysis() {
  8056. return AjaxResult.success(new HashMap<String, Object>() {{
  8057. this.put("all", tCorpsMapper.getCorpCount());
  8058. this.put("active", tWarehouseBillsMapper.getActiveCorpCount(DateUtils.getDayOfYear(0, -1), DateUtils.getDayOfYear(1, 0)));
  8059. this.put("series", new ArrayList<Map<String, Object>>() {{
  8060. this.add(new HashMap<String, Object>() {{
  8061. this.put("data", new ArrayList<Map<String, Object>>() {{
  8062. this.add(new HashMap<String, Object>() {{
  8063. this.put("name", "1-3个月");
  8064. this.put("value", tWarehouseBillsMapper.getActiveCorpCount(DateUtils.getDayOfMonth(0, -4), DateUtils.getDayOfMonth(1, -2)));
  8065. }});
  8066. this.add(new HashMap<String, Object>() {{
  8067. this.put("name", "3-6个月");
  8068. this.put("value", tWarehouseBillsMapper.getActiveCorpCount(DateUtils.getDayOfMonth(0, -7), DateUtils.getDayOfMonth(1, -4)));
  8069. }});
  8070. this.add(new HashMap<String, Object>() {{
  8071. this.put("name", "6-12个月");
  8072. this.put("value", tWarehouseBillsMapper.getActiveCorpCount(DateUtils.getDayOfMonth(0, -13), DateUtils.getDayOfMonth(1, -7)));
  8073. }});
  8074. this.add(new HashMap<String, Object>() {{
  8075. this.put("name", "12-24个月");
  8076. this.put("value", tWarehouseBillsMapper.getActiveCorpCount(DateUtils.getDayOfMonth(0, -25), DateUtils.getDayOfMonth(1, -13)));
  8077. }});
  8078. this.add(new HashMap<String, Object>() {{
  8079. this.put("name", "24个月以上");
  8080. this.put("value", tWarehouseBillsMapper.getActiveCorpCount(null, DateUtils.getDayOfMonth(1, -25)));
  8081. }});
  8082. }});
  8083. }});
  8084. }});
  8085. }});
  8086. }
  8087. @Override
  8088. public List<CorpAnalysis> inactiveCorpList(Integer type) {
  8089. String beginTime = null;
  8090. String endTime;
  8091. if (type == 1) {
  8092. beginTime = DateUtils.getDayOfMonth(0, -4);
  8093. endTime = DateUtils.getDayOfMonth(0, -2);
  8094. } else if (type == 2) {
  8095. beginTime = DateUtils.getDayOfMonth(0, -7);
  8096. endTime = DateUtils.getDayOfMonth(0, -4);
  8097. } else if (type == 3) {
  8098. beginTime = DateUtils.getDayOfMonth(0, -13);
  8099. endTime = DateUtils.getDayOfMonth(0, -7);
  8100. } else if (type == 4) {
  8101. beginTime = DateUtils.getDayOfMonth(0, -25);
  8102. endTime = DateUtils.getDayOfMonth(0, -13);
  8103. } else {
  8104. endTime = DateUtils.getDayOfMonth(0, -25);
  8105. }
  8106. return tWarehouseBillsMapper.getInactiveCorpList(beginTime, endTime);
  8107. }
  8108. }