Third.php 477 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234
  1. <?php
  2. namespace app\api\controller;
  3. use think\console\command\make\Model;
  4. use think\Controller;
  5. use think\Db;
  6. use think\Request;
  7. use think\Route;
  8. use think\Session;
  9. //第三屏数据
  10. class Third extends Controller{
  11. //开始时间方法--当年-01-01 00:00:00
  12. public function start_time(){
  13. return gettimeinfo();
  14. }
  15. //结束时间方法--当年-12-31 23:59:59
  16. public function end_time(){
  17. return gettimeinfo(1);
  18. }
  19. //开始时间方法--去年-01-01 00:00:00
  20. public function qstart_time(){
  21. return getLastYear();
  22. }
  23. //结束时间方法--去年-12-31 23:59:59
  24. public function qend_time(){
  25. return getLastYear(1);
  26. }
  27. /**
  28. * 第三屏第一页 实时生产进度看板
  29. */
  30. //实时生产进度
  31. //未审核未提交、已提交待生产、已提交已生产->缓存
  32. public function scztone_redis(){
  33. $redis = redis();
  34. $redis_key = md5('scztone_redis');
  35. $sql = "SELECT
  36. dd.订单状态,
  37. dd.订单数,
  38. ROUND(dd.纸令数, 0) AS 纸令数,
  39. dd.册数,
  40. CAST(zd.已装册数 AS SIGNED) AS 已装册数,
  41. CAST(zd.未装册数 AS SIGNED) AS 未装册数,
  42. CAST(ys.已印纸令 AS SIGNED) AS 已印纸令,
  43. CAST(ys.未印纸令 AS SIGNED) AS 未印纸令
  44. FROM (SELECT hz.订单状态,
  45. Count(hz.订单状态)订单数,
  46. Sum(hz.NZDLS) 纸令数,
  47. Sum(hz.NCS) 册数
  48. FROM (SELECT a.CCYDH,
  49. a.CYJMC,
  50. a.CYJLX,
  51. a.DCYRQ,
  52. a.DJFRQ,
  53. a.CHY,
  54. zds.NCS,
  55. a.ICYDSTATE,
  56. CASE
  57. WHEN a.ICYDTYPE = 2 THEN '零活订单'
  58. WHEN a.ICYDTYPE = 1 THEN '书刊订单'
  59. ELSE '其他'
  60. END 订单类型,
  61. yss.NZDLS,
  62. CASE
  63. WHEN a.iCommited = 0 THEN '未提交,未审核'
  64. WHEN a.iCommited = 1 THEN '已审核,已提交生产'
  65. ELSE '其他'
  66. END 订单状态
  67. FROM mcyd a
  68. LEFT JOIN (SELECT a1.CCYDH,
  69. a1.NZDLS,
  70. a1.iCommited
  71. FROM mcyd a1
  72. WHERE a1.CHY <> '集团教材外')yss
  73. ON a.CCYDH = yss.CCYDH
  74. LEFT JOIN (SELECT a2.CCYDH,
  75. a2.NCS,
  76. a2.iCommited
  77. FROM mcyd a2
  78. WHERE a2.CHY <> '集团教材外'
  79. AND a2.cdf <> '散装'
  80. AND a2.cdf <> '单片')zds
  81. ON a.CCYDH = zds.CCYDH
  82. WHERE a.ICYDID > 0
  83. AND a.iCydState <> -1
  84. AND a.lwcbs = 0
  85. AND a.ICYDSTATE > -1
  86. )hz
  87. GROUP BY hz.订单状态)dd
  88. LEFT JOIN (SELECT '已审核,已提交生产' AS 订单状态,
  89. Sum(hz.纸令) 纸令,
  90. Sum(hz.发外数量) 发外令数,
  91. Sum(hz.纸令) - Sum(hz.发外数量) 本厂应生产纸令,
  92. Sum(hz.已印) 已印纸令,
  93. Sum(hz.纸令) - Sum(hz.发外数量) - Sum(hz.已印) 未印纸令
  94. FROM (SELECT hj.承印日期,
  95. hj.订单号,
  96. hj.印件名称,
  97. hj.开本,
  98. hj.订法,
  99. hj.业务单位名称,
  100. hj.印件类型,
  101. hj.活源,
  102. hj.纸令,
  103. hj.已印,
  104. hj.发外数量,
  105. hj.未印量
  106. FROM (SELECT IFnull(LWCBS, 0) 完工,
  107. DATE_FORMAT(cyd.dCyrq, '%Y-%m-%d') AS 承印日期,
  108. cyd.ccydh AS 订单号,
  109. cyd.cyjmc AS 印件名称,
  110. cyd.czwkb 开本,
  111. cyd.cdf AS 订法,
  112. cyd.CYWDWMC AS 业务单位名称,
  113. cyd.CYJLX AS 印件类型,
  114. cyd.CHY AS 活源,
  115. cyd.NZDLS AS 纸令,
  116. yy.已印数 已印,
  117. IFnull(t.数量, 0) 发外数量,
  118. CASE
  119. WHEN cyd.nzdls - yy.已印数 - IFnull(t.数量, 0) < 20 THEN 0
  120. ELSE Round(cyd.nzdls - yy.已印数 - IFnull(t.数量, 0), 0)
  121. END 未印量
  122. FROM mcyd cyd
  123. LEFT JOIN (SELECT
  124. D3.订单号 AS 订单号,
  125. SUM(D3.已印纸令) AS 已印数
  126. FROM
  127. (
  128. SELECT
  129. a.ccydh AS 订单号,
  130. COALESCE(SUM(
  131. CASE
  132. WHEN c.dFinishsl > c.NGZL * 1.5 THEN c.dFinishsl / 2
  133. ELSE c.dFinishsl
  134. END / 1000), 0) AS 已印纸令
  135. FROM
  136. mcyd a
  137. LEFT JOIN (
  138. SELECT
  139. cd.id,
  140. cd.icydid,
  141. cd.CDXMC,
  142. cd.csc,
  143. yscp.cyfa
  144. FROM
  145. scyddx cd
  146. LEFT JOIN YSCPDXXX yscp ON yscp.dxid = cd.id
  147. ) DX ON a.ICYDID = dx.ICYDID
  148. LEFT JOIN YSJZZYFK ZYFK ON DX.id = ZYFK.Cyddxid
  149. LEFT JOIN scydgy c ON a.ICYDID = c.ICYDID AND dx.CDXMC = c.CDXMC
  150. WHERE
  151. a.ICYDSTATE >= 0
  152. AND a.icydid > 0
  153. AND cyfa <> ''
  154. AND (cgymc = '平印' OR cgymc = '轮印')
  155. AND a.chy <> '集团教材外'
  156. GROUP BY
  157. a.ccydh, dx.CSC, cYm, a.cyjlx, cyfa, a.CZWKB
  158. ) D3
  159. GROUP BY
  160. D3.订单号) yy
  161. ON yy.订单号 = cyd.CCYDH
  162. LEFT JOIN (SELECT hz.CCYDH,
  163. Sum(COALESCE(hz.发外纸令, hz.发外数量, 0))数量
  164. FROM (SELECT fw.CHY,
  165. fw.CCYDH,
  166. Sum(fw.发外数量)发外数量,
  167. fwx.发外纸令
  168. FROM (SELECT w3.CHY,
  169. w3.ccydh,
  170. w12.cSccpMc,
  171. w12.cdxmc,
  172. w12.chjxmmc,
  173. w3.cyf,
  174. w3.NYYL 发外数量
  175. FROM (SELECT w1.csccpbh,
  176. w2.cSccpMc,
  177. w1.cdw,
  178. w1.cdxmc,
  179. w1.chjxmmc,
  180. w2.csccj,
  181. w2.iCydId,
  182. w2.cKhmc,
  183. w1.fsl
  184. FROM ZBHJXM w1
  185. LEFT JOIN SCCP w2
  186. ON w1.SCCPID = w2.SCCPID
  187. AND bOutProcess = 1) w12
  188. LEFT JOIN (SELECT a.icydid,
  189. dx.fZzl nyyl,
  190. a.chy,
  191. a.icydstate,
  192. a.ncs,
  193. a.CZWKB,
  194. a.dCyrq,
  195. a.CCPCC,
  196. dx.cyf,
  197. dx.CDXMC,
  198. CYJLX,
  199. CSC,
  200. a.ccydh
  201. FROM MCYD a
  202. LEFT JOIN (SELECT dd.fZzl fZzl,
  203. da.cdxmc,
  204. da.icydid,
  205. da.cyf cyf,
  206. da.csc csc
  207. FROM scyddx da
  208. LEFT JOIN (SELECT cp.CSCCJ,
  209. yscpdxxx .dxid,
  210. yscpdxxx .cdx,
  211. yscpdxxx .fzzl
  212. FROM YSCPDXXX yscpdxxx
  213. LEFT JOIN yscp cp
  214. ON cp.sccpid = yscpdxxx.yscpid
  215. WHERE ( csccj <> '轮转联动中心'
  216. AND csccj <> '平版印刷中心' ))dd
  217. ON dd.dxid = da.id) DX
  218. ON dx.ICYDID = a.ICYDID) W3
  219. ON w12.icydid = w3.icydid
  220. AND LEFT(w12.chjxmmc, 1) = LEFT(W3.cyf, 1)
  221. AND w12.cdxmc = w3.CDXMC
  222. AND W3.ICYDSTATE <> '-1')fw
  223. LEFT JOIN (SELECT aa.ccydh,
  224. CASE
  225. WHEN Sum(aa.nfysl) = 0 THEN NULL
  226. ELSE Sum(aa.nfysl)
  227. END 发外纸令
  228. FROM (SELECT LEFT(csccpbh, 10) ccydh,
  229. nfysl
  230. FROM ZbHjXm
  231. WHERE 1 = 1
  232. AND ( cGymc = '印刷'
  233. OR cGymc = '平印'
  234. OR cGymc = '轮印' )
  235. AND cGzzxmc = ''
  236. AND cdxmc <> '封面')aa
  237. LEFT JOIN (SELECT tt.ccydh,
  238. Sum(nfysl)nfysl
  239. FROM (SELECT LEFT(csccpbh, 10) ccydh,
  240. nfysl
  241. FROM ZbHjXm
  242. WHERE 1 = 1
  243. AND ( cGymc LIKE '%联动' )
  244. AND cGzzxmc = '')tt
  245. GROUP BY tt.ccydh)bb
  246. ON bb.ccydh = aa.ccydh
  247. GROUP BY aa.ccydh,
  248. bb.nfysl) fwx
  249. ON fw.CCYDH = fwx.ccydh
  250. GROUP BY fw.CHY,
  251. fw.CCYDH,
  252. fwx.发外纸令)hz
  253. GROUP BY hz.CCYDH) t
  254. ON t.ccydh = cyd.ccydh
  255. WHERE 1 = 1
  256. AND ICYDSTATE > -1
  257. AND cyd.CHY <> '集团教材外'
  258. AND cyd.lwcbs = 0
  259. AND cyd.iCommited = 1)hj
  260. WHERE 1 = 1 /*Wheres*/
  261. )hz)ys
  262. ON dd.订单状态 = ys.订单状态
  263. LEFT JOIN (SELECT '已审核,已提交生产' AS 订单状态,
  264. Sum(hz.印数) 印数,
  265. Sum(hz.发外册数) 发外册数,
  266. Sum(hz.印数) - Sum(hz.发外册数) 本厂应装订册数,
  267. Sum(hz.装订数量) 已装册数,
  268. Sum(hz.印数) - Sum(hz.发外册数) - Sum(hz.装订数量) 未装册数
  269. FROM (SELECT hj.承印日期,
  270. hj.订单号,
  271. hj.印件名称,
  272. hj.开本,
  273. hj.订法,
  274. hj.业务单位名称,
  275. hj.印件类型,
  276. hj.活源,
  277. hj.印数,
  278. hj.装订数量,
  279. hj.发外册数,
  280. hj.未装订数量
  281. FROM (SELECT IFnull(LWCBS, 0) 完工,
  282. DATE_FORMAT(cyd.dCyrq, '%Y-%m-%d') AS 承印日期,
  283. cyd.ccydh AS 订单号,
  284. cyd.cyjmc AS 印件名称,
  285. cyd.czwkb 开本,
  286. cyd.cdf AS 订法,
  287. cyd.CYWDWMC AS 业务单位名称,
  288. cyd.CYJLX AS 印件类型,
  289. cyd.CHY AS 活源,
  290. cyd.ncs AS 印数,
  291. ( IFnull(nyzsl, 0) + IFnull(nyzsl2, 0) ) 装订数量,
  292. IFnull(t.发外册数, 0) 发外册数,
  293. CASE
  294. WHEN cyd.ncs - ( IFnull(nyzsl, 0) + IFnull(nyzsl2, 0) ) - IFnull(t.发外册数, 0) < 0 THEN 0
  295. ELSE cyd.ncs - ( IFnull(nyzsl, 0) + IFnull(nyzsl2, 0) ) - IFnull(t.发外册数, 0)
  296. END 未装订数量
  297. FROM mcyd cyd
  298. LEFT JOIN (SELECT mcyd.icydid,
  299. Sum(iWcl)AS nyzsl
  300. FROM cpjtfk
  301. LEFT JOIN mcyd
  302. ON mcyd.ICYDID = ID_CYD
  303. AND ( CASE
  304. WHEN mcyd.cdf = '无线胶订'
  305. OR mcyd.cdf = '索线胶订' THEN RIGHT(mcyd.cdf, 2)
  306. ELSE crwmc
  307. END ) = crwmc
  308. WHERE 1 = 1
  309. AND ( crwmc = '胶订'
  310. OR crwmc = '骑马订'
  311. OR crwmc = '生产' )
  312. GROUP BY mcyd.icydid) ZD
  313. ON cyd.ICYDID = ZD.ICYDID
  314. LEFT JOIN (SELECT mcyd.icydid,
  315. Sum(c. dfinishsl) AS nyzsl2
  316. FROM SCYDGY c
  317. LEFT JOIN mcyd
  318. ON mcyd.ICYDID = c.icydid
  319. WHERE 1 = 1
  320. AND ( c.cgymc = '胶订联动'
  321. OR c.cgymc = '骑马联动'
  322. OR c.cgymc = '精装联动'
  323. OR c.cgymc = '胶头' )
  324. GROUP BY mcyd.icydid) ZD1
  325. ON cyd.ICYDID = ZD1.ICYDID
  326. LEFT JOIN (SELECT hz.CCYDH,
  327. Sum(COALESCE(hz.发外册数, hz.册数, 0)) 发外册数
  328. FROM (SELECT fw.CHY,
  329. fw.CCYDH,
  330. fw.册数,
  331. fwx.发外册数
  332. FROM (SELECT w3.CHY,
  333. w3.ccydh,
  334. w12.cSccpMc,
  335. w12.cdxmc,
  336. w12.chjxmmc,
  337. w3.cyf,
  338. w3.ncs 册数
  339. FROM (SELECT w1.csccpbh,
  340. w2.cSccpMc,
  341. w1.cdw,
  342. w1.cdxmc,
  343. w1.chjxmmc,
  344. w2.csccj,
  345. w2.iCydId,
  346. w2.cKhmc,
  347. w1.fsl
  348. FROM ZBHJXM w1
  349. LEFT JOIN SCCP w2
  350. ON w1.SCCPID = w2.SCCPID
  351. AND bOutProcess = 1) w12
  352. LEFT JOIN (SELECT a.icydid,
  353. dx.fZzl nyyl,
  354. a.chy,
  355. a.icydstate,
  356. a.ncs,
  357. a.CZWKB,
  358. a.dCyrq,
  359. a.CCPCC,
  360. dx.cyf,
  361. dx.CDXMC,
  362. CYJLX,
  363. CSC,
  364. a.ccydh
  365. FROM MCYD a
  366. LEFT JOIN (SELECT dd.fZzl fZzl,
  367. da.cdxmc,
  368. da.icydid,
  369. da.cyf cyf,
  370. da.csc csc
  371. FROM scyddx da
  372. LEFT JOIN (SELECT cp.CSCCJ,
  373. yscpdxxx .dxid,
  374. yscpdxxx .cdx,
  375. yscpdxxx .fzzl
  376. FROM YSCPDXXX yscpdxxx
  377. LEFT JOIN yscp cp
  378. ON cp.sccpid = yscpdxxx.yscpid
  379. WHERE ( csccj <> '轮转联动中心'
  380. AND csccj <> '平版印刷中心' ))dd
  381. ON dd.dxid = da.id) DX
  382. ON dx.ICYDID = a.ICYDID) W3
  383. ON w12.icydid = w3.icydid
  384. AND LEFT(w12.chjxmmc, 1) = LEFT(W3.cyf, 1)
  385. AND w12.cdxmc = w3.CDXMC
  386. AND W3.ICYDSTATE <> '-1')fw
  387. LEFT JOIN (SELECT bb.ccydh,
  388. CASE
  389. WHEN CAST(bb.nfysl AS SIGNED) = 0 THEN NULL
  390. ELSE CAST(bb.nfysl AS SIGNED)
  391. END AS 发外册数
  392. FROM (SELECT tt.ccydh,
  393. Sum(nfysl)nfysl
  394. FROM (SELECT LEFT(csccpbh, 10) ccydh,
  395. nfysl
  396. FROM ZbHjXm
  397. WHERE 1 = 1
  398. AND ( cGymc LIKE '%联动' )
  399. AND cGzzxmc = '')tt
  400. GROUP BY tt.ccydh)bb
  401. GROUP BY bb.ccydh,
  402. bb.nfysl) fwx
  403. ON fw.CCYDH = fwx.ccydh
  404. GROUP BY fw.CHY,
  405. fw.CCYDH,
  406. fw.册数,
  407. fwx.发外册数)hz
  408. GROUP BY hz.CCYDH) t
  409. ON t.ccydh = cyd.ccydh
  410. WHERE 1 = 1
  411. AND ICYDSTATE > -1
  412. AND cyd.CHY <> '集团教材外'
  413. AND cyd.cdf <> '单片'
  414. AND cyd.cdf <> '散装'
  415. AND cyd.lwcbs = 0
  416. AND cyd.iCommited = 1)hj
  417. WHERE 1 = 1
  418. )hz)zd
  419. ON dd.订单状态 = zd.订单状态
  420. ";
  421. $res=Db::query($sql);
  422. //将查询结果存入 Redis 缓存中
  423. $redis->set($redis_key, json_encode($res));
  424. echo date("Y-m-d H:i:s").' 存进去了';
  425. return json($res);
  426. }
  427. //未提交未审核->接口
  428. public function scwtj(){
  429. $redis = redis();
  430. $sczt_one = json_decode($redis->get(md5('scztone_redis')), true);
  431. // 初始化变量用于存放结果
  432. $result = [
  433. '未提交未审核订单' => 0,
  434. '未提交未审核纸令' => 0,
  435. '未提交未审核册数' => 0,
  436. ];
  437. // 遍历第一个数组
  438. foreach ($sczt_one as $va) {
  439. if ($va['订单状态'] == '未提交,未审核') {
  440. $result['未提交未审核订单'] = $va['订单数'];
  441. $result['未提交未审核纸令'] = $va['纸令数'];
  442. $result['未提交未审核册数'] = $va['册数'];
  443. }
  444. }
  445. // 格式化为新的数组格式,并将'name'替换为具体名称
  446. $formattedResult = array_map(function ($key, $value) {
  447. return ['name' => ' ', 'value' => $value];
  448. }, array_keys($result), $result);
  449. // 构造返回数据
  450. $res = [
  451. 'status' => 0,
  452. 'msg' => '',
  453. 'data' => $formattedResult,
  454. ];
  455. // 返回JSON格式的结果
  456. return json($res);
  457. }
  458. //已提交待生产->接口
  459. public function scysh(){
  460. $redis = redis();
  461. $sczt_one = json_decode($redis->get(md5('scztone_redis')),true);
  462. $result = [
  463. '已提交待生产订单' => 0,
  464. '已提交待生产纸令' => 0,
  465. '已提交待生产册数' => 0,
  466. ];
  467. // 遍历第一个数组
  468. foreach ($sczt_one as $va) {
  469. if ($va['订单状态'] == '已审核,已提交生产') {
  470. $result['已提交待生产订单'] = $va['订单数'];
  471. $result['已提交待生产纸令'] = $va['未印纸令'];
  472. $result['已提交待生产册数'] = $va['未装册数'];
  473. }
  474. }
  475. // 格式化为新的数组格式
  476. $formattedResult = array_map(function ($key, $value) {
  477. return ['name' => ' ', 'value' => $value];
  478. }, array_keys($result), $result);
  479. // 构造返回数据
  480. $res = [
  481. 'status' => 0,
  482. 'msg' => '',
  483. 'data' => $formattedResult,
  484. ];
  485. // 返回JSON格式的结果
  486. return json($res);
  487. }
  488. //已提交已生产->接口
  489. public function sczsc(){
  490. $redis = redis();
  491. $sczt_one = json_decode($redis->get(md5('scztone_redis')),true);
  492. // 初始化变量用于存放结果
  493. $result = [
  494. '已提交已生产纸令' => 0,
  495. '已提交已生产册数' => 0,
  496. ];
  497. // 遍历第一个数组
  498. foreach ($sczt_one as $va) {
  499. if ($va['订单状态'] == '已审核,已提交生产') {
  500. $result['已提交已生产纸令'] = $va['已印纸令'];
  501. $result['已提交已生产册数'] = $va['已装册数'];
  502. }
  503. }
  504. // 格式化为新的数组格式
  505. $formattedResult = array_map(function ($key, $value) {
  506. return ['name' => ' ', 'value' => $value];
  507. }, array_keys($result), $result);
  508. // 构造返回数据
  509. $res = [
  510. 'status' => 0,
  511. 'msg' => '',
  512. 'data' => $formattedResult,
  513. ];
  514. // 返回JSON格式的结果
  515. return json($res);
  516. }
  517. /**
  518. * 原
  519. */
  520. //在线重点产品生产进度情况 缓存(暂时不用)
  521. public function zdcp_completion_redis_ssssss(){
  522. $redis=redis();
  523. $redis_key = md5('zdcp_completion_redis');
  524. //--以下为昨日印刷数据
  525. $sql = "SELECT
  526. CONVERT(a.dcyrq,CHAR(10)) 承印日期,
  527. a.zt 状态,
  528. a.tj,
  529. a.icydid,
  530. a.ccydh 订单编号,
  531. a.cyjlx 印件类型,a.Czlyq 质量要求,
  532. CONVERT(a.DJFRQ,CHAR(10)) 交付日期,
  533. a.NZWYZ 正文印张,
  534. a.cyjmc 印件名称,
  535. a.CYWDWMC 委印单位名称,
  536. a.CDF 订法,
  537. a.chy 活源,
  538. a.czwkb 正文开本,
  539. a.csc 色次,
  540. a.ncs 印数,
  541. a.zdzl 装订纸令,
  542. a.ydzl 已订令,
  543. a.NGZL,
  544. a.ydct 已订册数,
  545. a.wdct 未定册数,
  546. a.fm 封面,
  547. a.fmyy 封面已印,
  548. a.fmwy 封面未印,
  549. a.zw 正文,
  550. a.zwyy 正文已印,
  551. a.zwwy 正文未印,
  552. a.zw1,
  553. a.zwyy1,
  554. a.zwwy1,
  555. a.zw2,
  556. a.zwyy2,
  557. a.zwwy2,
  558. a.cy 插页,
  559. a.cyyy 插页已印,
  560. a.cywy 插页未印,
  561. a.hc 环衬,
  562. a.hcyy 环衬已印,
  563. a.hcwy 环衬未印,
  564. a.wy,
  565. a.wd,
  566. a.pt,
  567. a.出库数量 iAmount_Out,
  568. a.未发数量 nAmount from
  569. (
  570. SELECT
  571. a.dcyrq,
  572. CASE WHEN a.iCommited = 0 THEN '未提交'
  573. WHEN a.LWCBS = '0' THEN '未完'
  574. ELSE '完成'
  575. END zt,
  576. a.iCommited tj,
  577. a.icydid,
  578. a.DJFRQ,
  579. a.NZWYZ,
  580. a.ccydh,
  581. a.cyjmc,
  582. a.CYWDWMC,
  583. a.CDF,
  584. a.chy,
  585. a.cyjlx,
  586. a.Czlyq,
  587. a.czwkb,
  588. m.csc,
  589. a.ncs,
  590. IFNULL(b.纸令数, 0) zdzl,
  591. CASE WHEN l.izdsl > 0
  592. THEN CONVERT(IFNULL(b.纸令数, 0)
  593. * IFNULL(c.dFinishsl, 0) / l.izdsl,DECIMAL(10, 3))
  594. ELSE 0
  595. END ydzl,
  596. c.NGZL,
  597. IFNULL(c.dFinishsl, 0) ydct,
  598. c.NGZL - IFNULL(c.dFinishsl, 0) wdct,
  599. IFNULL(d.fLlyl, 0) fm,
  600. IFNULL(d.nzl, 0) fmyy,
  601. CASE WHEN IFNULL(d.fLlyl, 0) < IFNULL(d.nzl, 0) THEN 0
  602. ELSE IFNULL(d.fLlyl, 0) - IFNULL(d.nzl, 0)
  603. END fmwy,
  604. IFNULL(e.fLlyl, 0) zw,
  605. IFNULL(e.nzl, 0) zwyy,
  606. CASE WHEN IFNULL(e.fLlyl, 0) < IFNULL(e.nzl, 0) THEN 0
  607. ELSE IFNULL(e.fLlyl, 0) - IFNULL(e.nzl, 0)
  608. END zwwy,
  609. IFNULL(i.fLlyl1, 0) zw1,
  610. IFNULL(i.nzl1, 0) zwyy1,
  611. CASE WHEN IFNULL(i.fLlyl1, 0) < IFNULL(i.nzl1, 0) THEN 0
  612. ELSE IFNULL(i.fLlyl1, 0) - IFNULL(i.nzl1, 0)
  613. END zwwy1,
  614. IFNULL(j.fLlyl2, 0) zw2,
  615. IFNULL(j.nzl2, 0) zwyy2,
  616. CASE WHEN IFNULL(j.fLlyl2, 0) < IFNULL(j.nzl2, 0) THEN 0
  617. ELSE IFNULL(j.fLlyl2, 0) - IFNULL(j.nzl2, 0)
  618. END zwwy2,
  619. IFNULL(f.fLlyl, 0) cy,
  620. IFNULL(f.nzl, 0) cyyy,
  621. CASE WHEN IFNULL(f.fLlyl, 0) < IFNULL(f.nzl, 0) THEN 0
  622. ELSE IFNULL(f.fLlyl, 0) - IFNULL(f.nzl, 0)
  623. END cywy,
  624. IFNULL(k.fLlyl, 0) hc,
  625. IFNULL(k.nzl, 0) hcyy,
  626. CASE WHEN IFNULL(k.fLlyl, 0) < IFNULL(k.nzl, 0) THEN 0
  627. ELSE IFNULL(k.fLlyl, 0) - IFNULL(k.nzl, 0)
  628. END hcwy,
  629. IFNULL(g.fLlyl, 0) wy,
  630. IFNULL(h.fZhls, 0) wd,
  631. CASE WHEN c.NGZL - IFNULL(c.dFinishsl, 0) <= 1 THEN 4
  632. WHEN IFNULL(e.fLlyl, 0) - IFNULL(e.nzl, 0) < 0.1
  633. AND IFNULL(d.fLlyl, 0) - IFNULL(d.nzl, 0) < 0.1
  634. AND IFNULL(f.fLlyl, 0) - IFNULL(f.nzl, 0) < 0.1
  635. AND c.NGZL - IFNULL(c.dFinishsl, 0) > 10 THEN 1
  636. WHEN IFNULL(e.fLlyl, 0) - IFNULL(e.nzl, 0) < 0.1
  637. AND ( IFNULL(d.fLlyl, 0) - IFNULL(d.nzl, 0) >= 0.1
  638. OR IFNULL(f.fLlyl, 0) - IFNULL(f.nzl, 0) >= 0.1
  639. ) THEN 2
  640. WHEN IFNULL(e.fLlyl, 0) - IFNULL(e.nzl, 0) >= 0.1
  641. AND IFNULL(d.fLlyl, 0) - IFNULL(d.nzl, 0) < 0.1
  642. AND IFNULL(f.fLlyl, 0) - IFNULL(f.nzl, 0) < 0.1 THEN 3
  643. ELSE 0
  644. END pt
  645. ,cast(case when CK.ncksl=0 then ck1.ncksl else ck.ncksl+IFNULL(ck1.ncksl,0) end as decimal (18,0)) as 出库数量,
  646. cast( a.ncs- case when CK.ncksl=0 then ck1.ncksl else ck.ncksl+IFNULL(ck1.ncksl,0) end as decimal (18,0))未发数量
  647. FROM
  648. MCYD a
  649. LEFT JOIN
  650. (SELECT MCYD.ccydh,SUM(ncksl) AS ncksl FROM sexpstore LEFT JOIN MCYD ON MCYD.CCYDH = sexpstore.ccydh GROUP BY mcyd.ccydh) CK1 ON a.ccydh=CK1.ccydh
  651. LEFT JOIN ( SELECT ck.cCode cCode,SUM(nAmount_Out) AS ncksl FROM (SELECT d.ID, b.ID AS ID_Detail, b.ID_Mcyd AS ID_Order, a.ICYDID AS ID_Vers, a.CCYDH AS cCode, c.cCode AS cPCode,
  652. c.cName AS cPName, a.CYJLX, 1 AS iVers, c.cUnit,
  653. CASE WHEN a.LWCBS = 1 THEN 4 ELSE CASE WHEN a.iCommited = 1 THEN 3 ELSE a.ICYDSTATE END END AS iState,
  654. a.NCS AS nOrderAmount, 0 AS nOrderAmount_Sample, d.NSL AS iAmount, c.cSize, 0 AS nRang_num,
  655. 0 AS iAmount_Sample, b.iAmount AS iRang_MaxAmount, b.iAmount AS iRang_MinAmount, c.iTag_Group,
  656. c.ID AS ID_Request, IFNULL(op.nAmount_Notice, 0) AS nAmount_Notice, IFNULL(op.nAmount_Sample_Notice, 0)
  657. AS nAmount_Sample_Notice, 0 AS iAmount_S, IFNULL(op.nAmount_Out, 0) + 0 AS nAmount_Out,
  658. IFNULL(op.nAmount_Sample_Out, 0) AS nAmount_Sample_Out, '' AS cCustomerCode, '' AS cCustomerName,
  659. '' AS cCustomerUnit, '' AS cSaleIndex, CAST(d.LJSBS AS SIGNED INTEGER) AS LJSBS, a.CWYDH AS cCode_CBill,
  660. d.CQXMC AS cSaleName, d.cAreaCode, d.cAddress, d.cshr AS cLinkman, d.ctel, DZYWDW.cdwmc AS cClientName,
  661. a.IYWDWID AS ID_Client, 0 AS ID_LinkMan, d.ID AS ID_Address, a.IYWYID AS ID_Seller, a.CYWYXM AS cSeller,
  662. d.dfhrq AS dDate_Send, 0 AS iSign_FSC, '' AS cPayType, d.iState AS iSendState, a.DZDRQ AS CreateOrderDate,
  663. a.DJFRQ, d.mbz AS cRemark, CASE WHEN b.ID_Parent = 0 THEN 0 ELSE 1 END AS iChildFlag, b.ID_Parent,
  664. '' AS cRemark_Detail, b.nUnitPlanWeight, b.nActualWeight,
  665. CASE WHEN a.CBCYEAR <> '' THEN a.CBCYEAR + '年' ELSE '' END + CASE WHEN a.CBCmonth <> '' THEN a.CBCmonth +
  666. '月' ELSE '' END + CASE WHEN a.CBC <> '' THEN a.CBC + '版' ELSE '' END + CASE WHEN a.cYCyear <> '' THEN a.cYCyear
  667. + '年' ELSE '' END + CASE WHEN a.cYCmonth <> '' THEN a.cYCmonth + '月' ELSE '' END + CASE WHEN a.CYC <> '' THEN
  668. a.CYC + '次' ELSE '' END AS cBanCi, a.NYJDJ AS nPrice, a.CYJSH, a.NZWKB, IFNULL
  669. ((SELECT SUM(nje) AS Expr1
  670. FROM SCYDGXHJ
  671. WHERE (iType = 2) AND (icydid = a.ICYDID)), 0) AS nFreight, 0 AS iIsCalc_Sample
  672. FROM MCYD AS a INNER JOIN
  673. qlOrderProduct AS b ON b.ID_Mcyd = a.ICYDID INNER JOIN
  674. qlAProduct AS c ON c.ID = b.ID_qlAProduct LEFT OUTER JOIN
  675. SCYDYSQX AS d ON d.ICYDID = a.ICYDID AND d.ID_qlOrderProduct = b.ID LEFT OUTER JOIN
  676. fnSaleOrderOutAmount AS op ON op.ID_SaleProductDetail = d.ID AND
  677. op.ID_scSaleOrder_Product = b.ID LEFT OUTER JOIN
  678. DZYWDW ON DZYWDW.iywdwid = a.IYWDWID
  679. WHERE (a.iCommited = 1) AND (a.ICYDSTATE <> - 1)) ck GROUP BY ck.cCode) CK ON a.ccydh=CK.cCode
  680. LEFT JOIN (
  681. SELECT
  682. icydid,
  683. MIN(csc) csc
  684. FROM
  685. scyddx
  686. WHERE
  687. INSTR(CDXLXMC,'正文') > 0
  688. GROUP BY
  689. icydid
  690. ) m ON m.icydid = a.icydid
  691. LEFT JOIN (
  692. SELECT
  693. a.ICYDID,
  694. SUM(a.NZDLS) 纸令数
  695. FROM
  696. SCYDDX a
  697. GROUP BY
  698. a.ICYDID
  699. ) b ON b.ICYDID = a.ICYDID
  700. LEFT JOIN (
  701. SELECT
  702. a.cProductCode,
  703. SUM(a.nPAmount) ngzl,
  704. SUM(a.nCompleteAmount) dFinishsl
  705. FROM
  706. (
  707. SELECT
  708. a.cProductCode,
  709. a.nPAmount,
  710. a.nCompleteAmount,
  711. c.cGymc 工序名称
  712. FROM
  713. scMachineJob a
  714. INNER JOIN scMachineJobTech b ON b.ID_scMachineJob = a.ID
  715. INNER JOIN DZTECH c ON c.iGyid = b.ID_ATech
  716. WHERE
  717. c.cGymc IN ( '骑订联动','骑马联动' , '胶订联动','精装联动')
  718. ) a
  719. GROUP BY
  720. a.cProductCode
  721. ) c ON c.cProductCode = a.ccydh
  722. LEFT JOIN (
  723. SELECT
  724. a.iCydId,
  725. a.CydDxlxMc,
  726. SUM(a.fLlyl) fLlyl,
  727. SUM(IFNULL(a.nzl, 0)) nzl
  728. FROM
  729. (
  730. SELECT
  731. a.iCydid,
  732. b.cDx,
  733. b.CydDxlxMc,
  734. b.fLlyl,
  735. SUM(CASE WHEN job.nDeliverAmount > 0
  736. THEN IFNULL(c.nzl, 0) * job.nStdAmount
  737. / job.nDeliverAmount
  738. ELSE 0
  739. END) nzl
  740. FROM
  741. Yscp a
  742. INNER JOIN Yscpdxxx b ON b.YscpId = a.SccpId
  743. LEFT JOIN QL_Report_FeedBack_Day c ON c.iSccpID = a.sccpid
  744. AND INSTR(b.cDx,c.cCyddxMc) > 0
  745. LEFT JOIN scMachineJob job ON job.id = c.iMJobID
  746. WHERE
  747. a.bOutProcess = 0
  748. AND ( ( INSTR(b.CydDxlxMc,'封面') > 0 )
  749. OR b.cDx LIKE '%封面合印%'
  750. )
  751. AND A.ISCCPLX <> 9
  752. GROUP BY
  753. a.iCydid,
  754. b.cDx,
  755. b.CydDxlxMc,
  756. b.fLlyl
  757. ) a
  758. GROUP BY
  759. a.ICYDID,
  760. a.CydDxlxMc
  761. ) d ON d.ICYDID = a.ICYDID
  762. LEFT JOIN (
  763. SELECT
  764. a.iCydId,
  765. a.CydDxlxMc,
  766. SUM(a.fLlyl) fLlyl,
  767. SUM(IFNULL(a.nzl, 0)) nzl
  768. FROM
  769. (
  770. SELECT
  771. a.iCydid,
  772. b.cDx,
  773. b.CydDxlxMc,
  774. b.fLlyl,
  775. SUM(CASE WHEN job.nDeliverAmount > 0
  776. THEN IFNULL(c.nzl, 0) * job.nStdAmount
  777. / job.nDeliverAmount
  778. ELSE 0
  779. END) nzl
  780. FROM
  781. Yscp a
  782. INNER JOIN Yscpdxxx b ON b.YscpId = a.SccpId
  783. LEFT JOIN QL_Report_FeedBack_Day c ON c.iSccpID = a.sccpid
  784. AND c.cCyddxMc = b.cDx
  785. LEFT JOIN scMachineJob job ON job.id = c.iMJobID
  786. WHERE
  787. a.bOutProcess = 0
  788. AND ( INSTR(b.CydDxlxMc,'正文') > 0 )
  789. AND A.ISCCPLX <> 9
  790. GROUP BY
  791. a.iCydid,
  792. b.cDx,
  793. b.CydDxlxMc,
  794. b.fLlyl
  795. ) a
  796. GROUP BY
  797. a.ICYDID,
  798. a.CydDxlxMc
  799. ) e ON e.ICYDID = a.ICYDID
  800. LEFT JOIN (
  801. SELECT
  802. a.iCydId,
  803. a.CydDxlxMc,
  804. SUM(a.fLlyl) fLlyl1,
  805. SUM(IFNULL(a.nzl, 0)) nzl1
  806. FROM
  807. (
  808. SELECT
  809. a.iCydid,
  810. b.cDx,
  811. b.CydDxlxMc,
  812. b.fLlyl,
  813. SUM(CASE WHEN job.nDeliverAmount > 0
  814. THEN IFNULL(c.nzl, 0) * job.nStdAmount
  815. / job.nDeliverAmount
  816. ELSE 0
  817. END) nzl
  818. FROM
  819. Yscp a
  820. INNER JOIN Yscpdxxx b ON b.YscpId = a.SccpId
  821. LEFT JOIN QL_Report_FeedBack_Day c ON c.iSccpID = a.sccpid
  822. AND c.cCyddxMc = b.cDx
  823. LEFT JOIN scMachineJob job ON job.id = c.iMJobID
  824. WHERE
  825. a.bOutProcess = 0
  826. AND ( INSTR(b.CydDxlxMc,'正文') > 0 )
  827. AND b.CYFA IN ( '彩平', '胶平' )
  828. AND A.ISCCPLX <> 9
  829. GROUP BY
  830. a.iCydid,
  831. b.cDx,
  832. b.CydDxlxMc,
  833. b.fLlyl
  834. ) a
  835. GROUP BY
  836. a.ICYDID,
  837. a.CydDxlxMc
  838. ) i ON i.ICYDID = a.ICYDID
  839. LEFT JOIN (
  840. SELECT
  841. a.iCydId,
  842. a.CydDxlxMc,
  843. SUM(a.fLlyl) fLlyl2,
  844. SUM(IFNULL(a.nzl, 0)) nzl2
  845. FROM
  846. (
  847. SELECT
  848. a.iCydid,
  849. b.cDx,
  850. b.CydDxlxMc,
  851. b.fLlyl,
  852. SUM(CASE WHEN job.nDeliverAmount > 0
  853. THEN IFNULL(c.nzl, 0) * job.nStdAmount
  854. / job.nDeliverAmount
  855. ELSE 0
  856. END) nzl
  857. FROM
  858. Yscp a
  859. INNER JOIN Yscpdxxx b ON b.YscpId = a.SccpId
  860. LEFT JOIN QL_Report_FeedBack_Day c ON c.iSccpID = a.sccpid
  861. AND c.cCyddxMc = b.cDx
  862. LEFT JOIN scMachineJob job ON job.id = c.iMJobID
  863. WHERE
  864. a.bOutProcess = 0
  865. AND ( INSTR(b.CydDxlxMc,'正文') > 0 )
  866. AND b.CYFA IN ( '彩轮', '胶轮' )
  867. AND A.ISCCPLX <> 9
  868. GROUP BY
  869. a.iCydid,
  870. b.cDx,
  871. b.CydDxlxMc,
  872. b.fLlyl
  873. ) a
  874. GROUP BY
  875. a.ICYDID,
  876. a.CydDxlxMc
  877. ) j ON j.ICYDID = a.ICYDID
  878. LEFT JOIN (
  879. SELECT
  880. a.iCydId,
  881. a.CydDxlxMc,
  882. SUM(a.fLlyl) fLlyl,
  883. SUM(IFNULL(a.nzl, 0)) nzl
  884. FROM
  885. (
  886. SELECT
  887. a.iCydid,
  888. b.cDx,
  889. b.CydDxlxMc,
  890. b.fLlyl,
  891. SUM(CASE WHEN job.nDeliverAmount > 0
  892. THEN IFNULL(c.nzl, 0) * job.nStdAmount
  893. / job.nDeliverAmount
  894. ELSE 0
  895. END) nzl
  896. FROM
  897. Yscp a
  898. INNER JOIN Yscpdxxx b ON b.YscpId = a.SccpId
  899. LEFT JOIN QL_Report_FeedBack_Day c ON c.iSccpID = a.sccpid
  900. AND INSTR(b.cDx,c.cCyddxMc) > 0
  901. LEFT JOIN scMachineJob job ON job.id = c.iMJobID
  902. WHERE
  903. a.bOutProcess = 0
  904. AND ( b.CydDxlxMc = '插页'
  905. OR b.cDx LIKE '%插页合印%'
  906. )
  907. AND A.ISCCPLX <> 9
  908. GROUP BY
  909. a.iCydid,
  910. b.cDx,
  911. b.CydDxlxMc,
  912. b.fLlyl
  913. ) a
  914. GROUP BY
  915. a.ICYDID,
  916. a.CydDxlxMc
  917. ) f ON f.ICYDID = a.ICYDID
  918. LEFT JOIN (
  919. SELECT
  920. a.iCydId,
  921. a.CydDxlxMc,
  922. SUM(a.fLlyl) fLlyl,
  923. SUM(IFNULL(a.nzl, 0)) nzl
  924. FROM
  925. (
  926. SELECT
  927. a.iCydid,
  928. b.cDx,
  929. b.CydDxlxMc,
  930. b.fLlyl,
  931. SUM(CASE WHEN job.nDeliverAmount > 0
  932. THEN IFNULL(c.nzl, 0) * job.nStdAmount
  933. / job.nDeliverAmount
  934. ELSE 0
  935. END) nzl
  936. FROM
  937. Yscp a
  938. INNER JOIN Yscpdxxx b ON b.YscpId = a.SccpId
  939. LEFT JOIN QL_Report_FeedBack_Day c ON c.iSccpID = a.sccpid
  940. AND INSTR(b.cDx,c.cCyddxMc) > 0
  941. LEFT JOIN scMachineJob job ON job.id = c.iMJobID
  942. WHERE
  943. a.bOutProcess = 0
  944. AND ( b.CydDxlxMc = '环衬'
  945. OR b.cDx LIKE '%环衬合印%'
  946. )
  947. AND A.ISCCPLX <> 9
  948. GROUP BY
  949. a.iCydid,
  950. b.cDx,
  951. b.CydDxlxMc,
  952. b.fLlyl
  953. ) a
  954. GROUP BY
  955. a.ICYDID,
  956. a.CydDxlxMc
  957. ) k ON k.ICYDID = a.ICYDID
  958. LEFT JOIN (
  959. SELECT
  960. a.iCydId,
  961. SUM(b.fLlyl) fLlyl
  962. FROM
  963. Yscp a
  964. INNER JOIN sccp c ON a.SccpId = c.SccpId
  965. INNER JOIN Yscpdxxx b ON b.YscpId = a.SccpId
  966. WHERE
  967. a.bOutProcess = 1
  968. AND c.bZfbz = 0
  969. GROUP BY
  970. a.iCydId
  971. ) g ON g.ICYDID = a.iCydId
  972. LEFT JOIN (
  973. SELECT
  974. a.iCydid,
  975. SUM(a.fZhls) fZhls
  976. FROM
  977. Zdcp a
  978. WHERE
  979. bOutProcess = 1
  980. GROUP BY
  981. iCydid
  982. ) h ON h.iCydid = a.iCydid
  983. LEFT JOIN (
  984. SELECT
  985. a.iCydid,
  986. SUM(distinct a.izdsl) izdsl,
  987. SUM(distinct a.fZls) fzls
  988. FROM
  989. Zdcp a
  990. WHERE
  991. bOutProcess = 0
  992. GROUP BY
  993. iCydid
  994. ) l ON l.iCydid = a.iCydid
  995. WHERE
  996. a.ICYDID > 0
  997. AND a.icydState <> -1
  998. -- AND a.CCYDH = '202306211S'
  999. and a.Czlyq='重点产品'
  1000. ) a
  1001. WHERE
  1002. 1 = 1 and ((a.zt = '未完'))
  1003. ORDER BY 承印日期 DESC
  1004. -- 在线重点产品生产进度20231018
  1005. ";
  1006. $res = Db::query($sql);
  1007. if ($res) {
  1008. $redis->set($redis_key, json_encode($res));
  1009. echo date("Y-m-d H:i:s").' 存进去了';
  1010. return $res;
  1011. }
  1012. }
  1013. //在线重点产品生产进度情况 接口(暂时不用)
  1014. public function zdcp_completion_ssssss(){
  1015. $redis=redis();
  1016. $list = json_decode($redis->get(md5('zdcp_completion_redis')), true);
  1017. $result['columns']=[
  1018. ['name'=>'订单号','id'=>'ddh','width'=>'10','autoWrap'=>"true",'textAlign'=>'left'],
  1019. ['name'=>'印件名称','id'=>'yjmc','width'=>'26','textAlign'=>'left'],
  1020. ['name'=>'印数','id'=>'ys','width'=>'8','autoWrap'=>"true",'textAlign'=>'left'],
  1021. ['name'=>'承印日期','id'=>'cyrq','width'=>'10','autoWrap'=>"true",'textAlign'=>'left'],
  1022. ['name'=>'交付日期','id'=>'jfrq','width'=>'10','autoWrap'=>"true",'textAlign'=>'left'],
  1023. ['name'=>'封面印刷完成率','id'=>'fmwcl','width'=>'10','autoWrap'=>"true",'textAlign'=>'center'],
  1024. ['name'=>'正文印刷完成率','id'=>'zwysl','width'=>'10','autoWrap'=>"true",'textAlign'=>'center'],
  1025. ['name'=>' 装 订 完成率','id'=>'zdwcl','width'=>'8','autoWrap'=>"true",'textAlign'=>'center'],
  1026. ['name'=>' 发 货 完成率','id'=>'fhwcl','width'=>'8','autoWrap'=>"true",'textAlign'=>'center']
  1027. // ['name'=>'封面印刷','id'=>'fmwcl','width'=>'12','autoWrap'=>"true",'textAlign'=>'center','remark'=>'封面印刷完成率'],
  1028. // ['name'=>'正文印刷','id'=>'zwysl','width'=>'12','autoWrap'=>"true",'textAlign'=>'center','remark'=>'正文印刷完成率'],
  1029. // ['name'=>'装订','id'=>'zdwcl','width'=>'8','autoWrap'=>"true",'textAlign'=>'left','remark'=>'装订完成率'],
  1030. // ['name'=>'发货','id'=>'fhwcl','width'=>'8','autoWrap'=>"true",'textAlign'=>'left','remark'=>'发货完成率']
  1031. ];
  1032. foreach($list as $k=>$v){
  1033. $result['rows'][$k]['ddh']=$v['订单编号'];
  1034. $result['rows'][$k]['yjmc']=$v['印件名称'];
  1035. $result['rows'][$k]['ys']=$v['印数'];
  1036. $result['rows'][$k]['cyrq']=$v['承印日期'];
  1037. $result['rows'][$k]['jfrq'] = $v['交付日期'];
  1038. $result['rows'][$k]['fmwcl']=round(($v['封面']==0? 1 : $v['封面已印']/$v['封面'])*100).'%';
  1039. $result['rows'][$k]['zwysl']=round(($v['正文']==0? 1 : $v['正文已印']/$v['正文'])*100).'%';
  1040. $result['rows'][$k]['zdwcl']=round(($v['装订纸令']==0? 1 : $v['已订令']/$v['装订纸令'])*100).'%';
  1041. $result['rows'][$k]['fhwcl']=round(($v['印数']==0? 1 : $v['iAmount_Out']/$v['印数'])*100).'%';
  1042. $result['rows'][$k]['fmwcl']=substr($result['rows'][$k]['fmwcl'],0,-1)>100 ? '100%' : $result['rows'][$k]['fmwcl'];
  1043. $result['rows'][$k]['zwysl']=substr($result['rows'][$k]['zwysl'],0,-1)>100 ? '100%' : $result['rows'][$k]['zwysl'];
  1044. $result['rows'][$k]['zdwcl']=substr($result['rows'][$k]['zdwcl'],0,-1)>100 ? '100%' : $result['rows'][$k]['zdwcl'];
  1045. $result['rows'][$k]['fhwcl']=substr($result['rows'][$k]['fhwcl'],0,-1)>100 ? '100%' : $result['rows'][$k]['fhwcl'];
  1046. }
  1047. $res['status']=0;
  1048. $res['msg']='';
  1049. $res['data']=$result;
  1050. return json($res);
  1051. }
  1052. /**
  1053. * 现
  1054. */
  1055. //工作中心负荷 缓存
  1056. public function zdcp_completion_redis(){
  1057. $redis=redis();
  1058. $redis_key = md5('zdcp_completion_redis');
  1059. //--以下为昨日印刷数据
  1060. $sql = "SELECT /*CONVERT(VARCHAR(10), Getdate(), 23) 日期,*/ b.cGzzxMc 工作中心,
  1061. a.cGymc 工序,
  1062. Sum(a.nGzl) 已下达总量,
  1063. Sum(a.dFinishsl) 已完成总量,
  1064. Sum(nSyl + nPrepareAmount) 未完成量,
  1065. CASE
  1066. WHEN b.cBmmc = '轮转联动中心'THEN ( CASE
  1067. WHEN b.cGzzxMc = '手工工作中心' THEN 0
  1068. ELSE b.iGzzxfh
  1069. END ) * 24
  1070. ELSE( CASE
  1071. WHEN b.cGzzxMc = '手工工作中心' THEN 0
  1072. ELSE b.iGzzxfh
  1073. END ) * 20
  1074. END 日产能,
  1075. CASE
  1076. WHEN b.cGzzxMc = '手工工作中心' THEN ''
  1077. ELSE ( CASE
  1078. WHEN SUM(nSyl + nPrepareAmount) > 0 AND b.iGzzxfh > 0 THEN CONCAT(
  1079. CAST(FLOOR(SUM(nSyl + nPrepareAmount) / b.iGzzxfh / 20) AS CHAR), '天',
  1080. CAST(ROUND(SUM(nSyl + nPrepareAmount) / b.iGzzxfh - FLOOR(SUM(nSyl + nPrepareAmount) / b.iGzzxfh / 20) * 20) AS CHAR), '时'
  1081. )
  1082. ELSE ''
  1083. END )
  1084. END AS 生产天数
  1085. FROM (SELECT a.cGzzxBh,
  1086. a.cGzzxMc,
  1087. a.cBmmc,
  1088. a.cGymc,
  1089. a.nGzl,
  1090. a.dFinishsl,
  1091. a.nSyl,
  1092. a.nPrepareTime * nRationValue nPrepareAmount,
  1093. a.nAmountTime,
  1094. a.nPrepareTime,
  1095. a.nAmountTime + a.nPrepareTime nRemainTime
  1096. FROM (SELECT GY.cGzzxBh,
  1097. GY.cGzzxMc,
  1098. Cp.cSccpBh,
  1099. Cp.cSccpMc,
  1100. GY.ngzl,
  1101. Gy.dFinishsl,
  1102. gy.CGYMC,
  1103. Ord.CDF,
  1104. Ord.NCS,
  1105. Ord.nZWKB,
  1106. Ord.cZWKB,
  1107. Ord.DJFRQ,
  1108. Obj.cDx,
  1109. Obj.cSc,
  1110. IFnull(scRation.cValue, GZzx.iGzzxfh) AS nRationValue,
  1111. ( CASE
  1112. WHEN NGZL > dFinishsl THEN NGZL - dFinishsl
  1113. ELSE 0
  1114. END ) AS nSYL,
  1115. CASE
  1116. WHEN IFnull(scRation.cValue, GZzx.iGzzxfh) > 0 THEN ( ( CASE
  1117. WHEN NGZL > dFinishsl THEN NGZL - dFinishsl
  1118. ELSE 0
  1119. END ) / IFnull(scRation.cValue, GZzx.iGzzxfh) )
  1120. ELSE 0.00
  1121. END AS nAmountTime,
  1122. CASE
  1123. WHEN ( GY.dFinishsl < gy.NGZL )
  1124. AND ( gy.nPrepareTime > 0 ) THEN ( gy.NGZL - gy.dFinishsl ) / gy.NGZL * gy.nPrepareTime
  1125. ELSE 0
  1126. END nPrepareTime,
  1127. ( CASE GY.iType
  1128. WHEN 20 THEN 1
  1129. WHEN 3 THEN 2
  1130. ELSE 0
  1131. END ) AS iTechState,
  1132. GY.iScxh iScxh_Gy,
  1133. GY.DQSRQ,
  1134. gzzx.cBmmc,
  1135. GY.DJSRQ,
  1136. ( CASE
  1137. WHEN GY.iScxh > 0 THEN 0
  1138. ELSE 1
  1139. END ) iScxh_L
  1140. FROM SCYDGY GY
  1141. INNER JOIN Sccp Cp
  1142. ON GY.ISCCPID = Cp.SccpId
  1143. INNER JOIN DZTECH Tech
  1144. ON GY.IGYID = Tech.IGYID
  1145. LEFT JOIN Yscpdxxx Obj
  1146. ON GY.ISCCPID = Obj.YscpId
  1147. AND GY.IDXID = Obj.DxId
  1148. LEFT JOIN MCYD Ord
  1149. ON GY.ICYDID = Ord.ICYDID
  1150. INNER JOIN MKernel GZzx
  1151. ON GY.cGzzxBh = GZzx.cBh
  1152. LEFT JOIN (SELECT a.id_Parent,
  1153. b.igyid_dzTech,
  1154. a.cValue
  1155. FROM scRation a
  1156. INNER JOIN scRationDetail b
  1157. ON b.id_scRation = a.ID) scRation
  1158. ON scRation.id_Parent = Gzzx.ID
  1159. AND scRation.igyid_dzTech = GY.iGyID
  1160. WHERE ( Cp.bxdbz = 1 )
  1161. AND ( Cp.bWcbz = 0 )
  1162. AND ( Cp.bZfbz = 0 )
  1163. AND ( GY.iType IN ( 2, 3, 20 ) )
  1164. AND ( GY.iEndBz = 0 )
  1165. AND ( Cp.iSccpLx <> 5 )
  1166. AND ( GY.pid <> -1 )
  1167. AND gy.cGzzxBh IN( '069', '071', '081', '086',
  1168. '087', '065', '066', '075',
  1169. '076', '078', '079', '083', '084' )) a
  1170. UNION /*ALL*/
  1171. SELECT a.cGzzxBh,
  1172. a.cGzzxMc,
  1173. a.cBmmc,
  1174. a.CGYMC,
  1175. a.nSyl,
  1176. a.NGZL,
  1177. a.dFinishsl,
  1178. a.nPrepareTime * nRationValue nPrepareAmount,
  1179. a.nAmountTime,
  1180. a.nPrepareTime,
  1181. a.nAmountTime + a.nPrepareTime nRemainTime
  1182. FROM (SELECT GY.cGzzxBh,
  1183. GY.cGzzxMc,
  1184. Cp.cSccpBh,
  1185. Cp.cSccpMc,
  1186. gy.CGYMC,
  1187. GY.ngzl,
  1188. Gy.dFinishsl,
  1189. Ord.CDF,
  1190. Ord.NCS,
  1191. Ord.nZWKB,
  1192. Ord.cZWKB,
  1193. Ord.DJFRQ,
  1194. Obj.cDx,
  1195. Obj.cSc,
  1196. IFnull(scRation.cValue, GZzx.iGzzxfh) AS nRationValue,
  1197. ( CASE
  1198. WHEN NGZL > dFinishsl THEN NGZL - dFinishsl
  1199. ELSE 0
  1200. END ) AS nSYL,
  1201. CASE
  1202. WHEN IFnull(scRation.cValue, GZzx.iGzzxfh) > 0 THEN ( ( CASE
  1203. WHEN NGZL > dFinishsl THEN NGZL - dFinishsl
  1204. ELSE 0
  1205. END ) / IFnull(scRation.cValue, GZzx.iGzzxfh) )
  1206. ELSE 0.00
  1207. END AS nAmountTime,
  1208. CASE
  1209. WHEN ( GY.dFinishsl < gy.NGZL )
  1210. AND ( gy.nPrepareTime > 0 ) THEN ( gy.NGZL - gy.dFinishsl ) / gy.NGZL * gy.nPrepareTime
  1211. ELSE 0
  1212. END nPrepareTime,
  1213. ( CASE GY.iType
  1214. WHEN 20 THEN 1
  1215. WHEN 3 THEN 2
  1216. ELSE 0
  1217. END ) AS iTechState,
  1218. GY.iScxh iScxh_Gy,
  1219. gzzx.cBmmc,
  1220. GY.DQSRQ,
  1221. GY.DJSRQ,
  1222. ( CASE
  1223. WHEN GY.iScxh > 0 THEN 0
  1224. ELSE 1
  1225. END ) iScxh_L
  1226. FROM YsBan
  1227. INNER JOIN SCYDGY GY
  1228. ON GY.ISCCPID = ysban.iSccpId
  1229. AND GY.iPbId = YsBan.MBanID
  1230. AND gy.ICYDID = YsBan.iCydId
  1231. INNER JOIN Sccp Cp
  1232. ON GY.ISCCPID = Cp.SccpId
  1233. INNER JOIN DZTECH Tech
  1234. ON GY.IGYID = Tech.IGYID
  1235. LEFT JOIN Yscpdxxx Obj
  1236. ON GY.ISCCPID = Obj.YscpId
  1237. AND YsBan.YSBanID = Obj.DxId
  1238. LEFT JOIN MCYD Ord
  1239. ON GY.ICYDID = Ord.ICYDID
  1240. INNER JOIN MKernel GZzx
  1241. ON GY.cGzzxBh = GZzx.cBh
  1242. LEFT JOIN (SELECT a.id_Parent,
  1243. b.igyid_dzTech,
  1244. a.cValue
  1245. FROM scRation a
  1246. INNER JOIN scRationDetail b
  1247. ON b.id_scRation = a.ID) scRation
  1248. ON scRation.id_Parent = Gzzx.ID
  1249. AND scRation.igyid_dzTech = GY.iGyID
  1250. WHERE ( Cp.bxdbz = 1 )
  1251. AND ( Cp.bWcbz = 0 )
  1252. AND ( Cp.bZfbz = 0 )
  1253. AND ( GY.iType IN ( 2, 3, 20 ) )
  1254. AND ( GY.iEndBz = 0 )
  1255. AND ( Cp.iSccpLx IN ( 5 ) )
  1256. AND ( GY.IDXID >= 0 )
  1257. AND ( GY.pid <> -1 )
  1258. AND Tech.cTechType = '印刷'
  1259. AND gy.cGzzxBh IN( '069', '071', '081', '086',
  1260. '087', '065', '066', '075',
  1261. '076', '078', '079', '083', '084' )) a) a
  1262. INNER JOIN Mkernel b
  1263. ON b.cbh = a.cGzzxbh
  1264. AND b.bgzfh = 1
  1265. GROUP BY a.cGzzxBh,
  1266. b.cGzzxMc,
  1267. b.cBmbh,
  1268. b.cBmmc,
  1269. a.CGYMC,
  1270. b.iGzzxfh,
  1271. a.cBmmc
  1272. ORDER BY b.cBmmc DESC,
  1273. a.cGzzxBh,
  1274. a.CGYMC ";
  1275. $res = Db::query($sql);
  1276. if ($res) {
  1277. $redis->set($redis_key, json_encode($res));
  1278. echo date("Y-m-d H:i:s").' 存进去了';
  1279. return $res;
  1280. }
  1281. }
  1282. //工作中心负荷 接口
  1283. public function zdcp_completion(){
  1284. $redis=redis();
  1285. $list = json_decode($redis->get(md5('zdcp_completion_redis')), true);
  1286. $result['columns']=[
  1287. ['name'=>'工作中心','id'=>'gzzx','width'=>'20','autoWrap'=>"true",'textAlign'=>'left'],
  1288. ['name'=>'工序','id'=>'gx','width'=>'14','textAlign'=>'left'],
  1289. ['name'=>'已下达总量','id'=>'yxdzl','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'],
  1290. ['name'=>'已完成总量','id'=>'ywczl','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'],
  1291. ['name'=>'未完成量','id'=>'jwwczl','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'],
  1292. ['name'=>'日产能','id'=>'rcn','width'=>'14','autoWrap'=>"true",'textAlign'=>'center'],
  1293. ['name'=>'生产天数','id'=>'scts','width'=>'14','autoWrap'=>"true",'textAlign'=>'center'],
  1294. ];
  1295. foreach($list as $k=>$v){
  1296. $result['rows'][$k]['gzzx']=$v['工作中心'];
  1297. $result['rows'][$k]['gx']=$v['工序'];
  1298. $result['rows'][$k]['yxdzl']=$v['已下达总量'];
  1299. $result['rows'][$k]['ywczl']=$v['已完成总量'];
  1300. $result['rows'][$k]['jwwczl'] = $v['未完成量'];
  1301. $result['rows'][$k]['rcn'] = $v['日产能'];
  1302. $result['rows'][$k]['scts'] = $v['生产天数'];
  1303. }
  1304. $res['status']=0;
  1305. $res['msg']='';
  1306. $res['data']=$result;
  1307. return json($res);
  1308. }
  1309. //机台缓存【下面的三个机台汇总】缓存(暂时用不到)
  1310. public function machine__redis(){
  1311. $redis=redis();
  1312. $redis_key = md5('machine__redis');
  1313. $sql = "SELECT * FROM(SELECT
  1314. MKernel.cGzzxmc 工作中心,
  1315. IFnull(Dev.cName, '') 机台名称,
  1316. CASE
  1317. WHEN Job.iStatus = '2' THEN '进行中'
  1318. WHEN Job.iStatus = '1' THEN '已下达'
  1319. WHEN Job.iStatus = '10' THEN '作业暂停'
  1320. WHEN Job.iStatus = '20' THEN '下班挂起'
  1321. ELSE '其他'
  1322. END 状态,
  1323. Row_number()
  1324. OVER (
  1325. PARTITION BY Dev.cName
  1326. ORDER BY CASE Dev.iType
  1327. WHEN 2 THEN Dev.id
  1328. ELSE Job.Id_Machine
  1329. END,
  1330. ischeduled DESC,
  1331. CASE Job.iStatus
  1332. WHEN 2 THEN 1
  1333. ELSE Job.iXH
  1334. END,
  1335. Job.iSubXH,
  1336. Job.ID ) AS 序列,
  1337. job.cJobCode 作业编号,
  1338. job.cJobName 作业名称,
  1339. job.cPartName 对象,
  1340. ttATech.cName AS 工序,
  1341. job.nDeliverAmount 工作量,
  1342. DATE_FORMAT( job.dFactStart, '%Y-%m-%d %H:%i:%s' ) AS 开始时间,
  1343. DATE_FORMAT( job.dFactEnd, '%Y-%m-%d %H:%i:%s' ) AS 完成时间,
  1344. job.nPlanTime 计划用时,
  1345. d.cPlanRemark 排产备注
  1346. FROM scMachineJob Job
  1347. LEFT JOIN (SELECT iType, ID, cCode, cName, iGzzxId, ID_BM, cbmbh, cbmmc, cType_Sys, iStop, cType_Dev, cShortName, iTypeWage,
  1348. iOverProductType
  1349. FROM (SELECT 0 AS iType, MKernel.ID, MKernel.cBh AS cCode, MKernel.cGzzxmc AS cName, MKernel.ID AS iGzzxId,
  1350. dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, Mkernel.cGzzxlx AS cType_Sys, MKernel.iStopUse AS iStop,
  1351. MKernel.cGzzxlx AS cType_Dev, MKernel.cShortName, 0 iTypeWage, 0 iOverProductType
  1352. FROM MKernel INNER JOIN
  1353. DZBM ON DZBM.cbmbh = MKernel.cBmbh
  1354. UNION
  1355. SELECT 1 AS iType, dzyssb.ID, dzyssb.csbbh AS cCode, dzyssb.csbmc AS cName, Mkernel.ID AS iGzzxId, dzBM.id AS ID_BM,
  1356. dzBM.cbmbh, dzBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, dzyssb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev,
  1357. dzyssb.cShortName, 0 iTypeWage, 0 iOverProductType
  1358. FROM dzyssb INNER JOIN
  1359. MKernel ON MKernel.ID = dzyssb.ID_Center INNER JOIN
  1360. dzBM ON dzBM.cbmbh = MKernel.cBmbh
  1361. UNION
  1362. SELECT 2 AS iType, MKerJzmb.ID, MKerJzmb.cJzbh AS cCode, MKerJzmb.cJzmc AS cName, MKerJzmb.iGzzxId,
  1363. dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, MKerJzmb.iStopUse AS iStop,
  1364. dzyssb.csblb AS cType_Dev, MKerJzmb.cShortName, MKerJzmb.iType AS iTypeWage,
  1365. MKerJzmb.iOverProductType
  1366. FROM MKerJzmb INNER JOIN
  1367. MKernel ON MKernel.ID = MKerJzmb.iGzzxId INNER JOIN
  1368. DZBM ON DZBM.cbmbh = MKernel.cbmbh INNER JOIN
  1369. dzyssb ON dzyssb.id = MKerJzmb.ijzlxid
  1370. UNION
  1371. SELECT 3 AS iType, iywdwid AS ID, cywdwbh AS cCode, cdwmc AS cName, iywdwid AS iGzzxId, iywdwid AS ID_BM,
  1372. cywdwbh AS cbmbh, cdwmc AS cbmmc, '' AS cType_Sys,
  1373. CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop, '' AS cType_Dev, DZYWDW.cjc AS cShortName,
  1374. 0 iTypeWage, 0 iOverProductType
  1375. FROM dzywdw
  1376. WHERE bwjg = 1
  1377. UNION
  1378. SELECT 3 AS iType, - 1, '', '外厂资源', - 1, - 1 AS ID_BM, '' AS cbmbh, '' AS cbmmc, '' AS cType_Sys, 0 AS iStop, '' AS cType_Dev,
  1379. '外厂' AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType)scvDeviceAll
  1380. WHERE (iStop = 0)
  1381. ) Dev
  1382. ON Dev.iType <> 3
  1383. AND Job.id_Machine = Dev.Id
  1384. AND Job.iType_Res = 0
  1385. LEFT JOIN scMachineJobTech c
  1386. ON c.ID_scMachineJob = Job.id
  1387. AND c.iIndex = 1
  1388. LEFT JOIN sysTech ttATech
  1389. ON ttATech.ID = c.ID_ATech
  1390. LEFT JOIN scMachineJobRemark d
  1391. ON d.ID_scMachineJob = Job.id
  1392. LEFT JOIN MKernel
  1393. ON MKernel.ID = Dev.iGzzxid
  1394. WHERE 1 = 1
  1395. AND Job.iStatus IN( 2, 1, 10, 20 )
  1396. AND Job.iJobType IN ( 0, 4, 5 )
  1397. AND Job.iType_Res = 0
  1398. ORDER BY CASE Dev.iType
  1399. WHEN 2 THEN Dev.id
  1400. ELSE Job.Id_Machine
  1401. END,
  1402. ischeduled DESC,
  1403. CASE Job.iStatus
  1404. WHEN 2 THEN 1
  1405. ELSE Job.iXH
  1406. END,
  1407. Job.iSubXH,
  1408. Job.ID
  1409. ) aa
  1410. WHERE 序列=1
  1411. ";
  1412. $res = Db::query($sql);
  1413. $redis->set($redis_key, json_encode($res));
  1414. echo date("Y-m-d H:i:s").'存进去了';
  1415. return $res;
  1416. }
  1417. //印刷机台实时生产进度->缓存
  1418. public function ys_schedule_redis(){
  1419. $redis=redis();
  1420. $redis_key = md5('ys_schedule_redis');
  1421. $sql = "
  1422. SELECT Row_number()
  1423. OVER (
  1424. PARTITION BY tb.机台名称
  1425. ORDER BY tb.状态 desc ) AS 排序,
  1426. tb.*
  1427. from
  1428. (SELECT MKernel.cGzzxmc 工作中心,
  1429. Ifnull(Dev.cName, '') 机台名称,
  1430. CASE
  1431. WHEN Job.iStatus = '2' THEN '进行中'
  1432. WHEN Job.iStatus = '1' THEN '已排产'
  1433. WHEN Job.iStatus = '10' THEN '作业暂停'
  1434. WHEN Job.iStatus = '20' THEN '下班挂起'
  1435. ELSE '其他'
  1436. END 状态,
  1437. Row_number()
  1438. OVER (
  1439. PARTITION BY Dev.cName, Job.iStatus
  1440. ORDER BY job.iXh) AS 序列,
  1441. job.cJobCode 作业编号,
  1442. job.cJobName 作业名称,
  1443. job.cPartName 对象,
  1444. ttATech.cName AS 工序,
  1445. job.nDeliverAmount 工作量,
  1446. CASE
  1447. WHEN job.dFactStart = '1900-01-01 00:00:00' THEN NULL
  1448. ELSE job.dFactStart
  1449. END AS '开始时间',
  1450. Cast(Timestampdiff(MINUTE, CASE
  1451. WHEN job.dFactStart = '1900-01-01 00:00:00' THEN NULL
  1452. ELSE job.dFactStart
  1453. END, Now()) / 60.0 AS DECIMAL(18, 2)) AS '持续时间',
  1454. job.nPlanTime 计划用时,
  1455. d.cPlanRemark 排产备注
  1456. FROM scMachineJob Job
  1457. LEFT JOIN (SELECT iType,
  1458. ID,
  1459. cCode,
  1460. cName,
  1461. iGzzxId,
  1462. ID_BM,
  1463. cbmbh,
  1464. cbmmc,
  1465. cType_Sys,
  1466. iStop,
  1467. cType_Dev,
  1468. cShortName,
  1469. iTypeWage,
  1470. iOverProductType
  1471. FROM (SELECT 0 AS iType,
  1472. MKernel.ID,
  1473. MKernel.cBh AS cCode,
  1474. MKernel.cGzzxmc AS cName,
  1475. MKernel.ID AS iGzzxId,
  1476. dzBM.id AS ID_BM,
  1477. DZBM.cbmbh,
  1478. DZBM.cbmmc,
  1479. Mkernel.cGzzxlx AS cType_Sys,
  1480. MKernel.iStopUse AS iStop,
  1481. MKernel.cGzzxlx AS cType_Dev,
  1482. MKernel.cShortName,
  1483. 0 iTypeWage,
  1484. 0 iOverProductType
  1485. FROM MKernel
  1486. INNER JOIN DZBM
  1487. ON DZBM.cbmbh = MKernel.cBmbh
  1488. UNION
  1489. SELECT 1 AS iType,
  1490. dzyssb.ID,
  1491. dzyssb.csbbh AS cCode,
  1492. dzyssb.csbmc AS cName,
  1493. Mkernel.ID AS iGzzxId,
  1494. dzBM.id AS ID_BM,
  1495. dzBM.cbmbh,
  1496. dzBM.cbmmc,
  1497. MKernel.cGzzxlx AS cType_Sys,
  1498. dzyssb.iStopUse AS iStop,
  1499. dzyssb.csblb AS cType_Dev,
  1500. dzyssb.cShortName,
  1501. 0 iTypeWage,
  1502. 0 iOverProductType
  1503. FROM dzyssb
  1504. INNER JOIN MKernel
  1505. ON MKernel.ID = dzyssb.ID_Center
  1506. INNER JOIN dzBM
  1507. ON dzBM.cbmbh = MKernel.cBmbh
  1508. UNION
  1509. SELECT 2 AS iType,
  1510. MKerJzmb.ID,
  1511. MKerJzmb.cJzbh AS cCode,
  1512. MKerJzmb.cJzmc AS cName,
  1513. MKerJzmb.iGzzxId,
  1514. dzBM.id AS ID_BM,
  1515. DZBM.cbmbh,
  1516. DZBM.cbmmc,
  1517. MKernel.cGzzxlx AS cType_Sys,
  1518. MKerJzmb.iStopUse AS iStop,
  1519. dzyssb.csblb AS cType_Dev,
  1520. MKerJzmb.cShortName,
  1521. MKerJzmb.iType AS iTypeWage,
  1522. MKerJzmb.iOverProductType
  1523. FROM MKerJzmb
  1524. INNER JOIN MKernel
  1525. ON MKernel.ID = MKerJzmb.iGzzxId
  1526. INNER JOIN DZBM
  1527. ON DZBM.cbmbh = MKernel.cbmbh
  1528. INNER JOIN dzyssb
  1529. ON dzyssb.id = MKerJzmb.ijzlxid
  1530. UNION
  1531. SELECT 3 AS iType,
  1532. iywdwid AS ID,
  1533. cywdwbh AS cCode,
  1534. cdwmc AS cName,
  1535. iywdwid AS iGzzxId,
  1536. iywdwid AS ID_BM,
  1537. cywdwbh AS cbmbh,
  1538. cdwmc AS cbmmc,
  1539. '' AS cType_Sys,
  1540. CASE
  1541. WHEN DZYWDW.nstate < 0 THEN 1
  1542. ELSE 0
  1543. END AS iStop,
  1544. '' AS cType_Dev,
  1545. DZYWDW.cjc AS cShortName,
  1546. 0 iTypeWage,
  1547. 0 iOverProductType
  1548. FROM dzywdw
  1549. WHERE bwjg = 1
  1550. UNION
  1551. SELECT 3 AS iType,
  1552. -1,
  1553. '',
  1554. '外厂资源',
  1555. -1,
  1556. -1 AS ID_BM,
  1557. '' AS cbmbh,
  1558. '' AS cbmmc,
  1559. '' AS cType_Sys,
  1560. 0 AS iStop,
  1561. '' AS cType_Dev,
  1562. '外厂' AS cShortName,
  1563. 0 AS iTypeWage,
  1564. 0 AS iOverProductType)scvDeviceAll
  1565. WHERE ( iStop = 0 )) Dev
  1566. ON Dev.iType <> 3
  1567. AND Job.id_Machine = Dev.Id
  1568. AND Job.iType_Res = 0
  1569. LEFT JOIN scMachineJobTech c
  1570. ON c.ID_scMachineJob = Job.id
  1571. AND c.iIndex = 1
  1572. LEFT JOIN sysTech ttATech
  1573. ON ttATech.ID = c.ID_ATech
  1574. LEFT JOIN scMachineJobRemark d
  1575. ON d.ID_scMachineJob = Job.id
  1576. LEFT JOIN MKernel
  1577. ON MKernel.ID = Dev.iGzzxid
  1578. WHERE 1 = 1
  1579. AND Job.iStatus IN( 2, 1, 10, 20 )
  1580. AND Job.iJobType IN ( 0, 4, 5 )
  1581. AND Job.iType_Res = 0
  1582. -- AND Job.iStatus = '2'
  1583. ) tb
  1584. where tb.序列<=5
  1585. -- and tb.状态='进行中'
  1586. -- and tb.机台名称='折页机05号'
  1587. GROUP BY tb.工作中心,
  1588. tb.机台名称,
  1589. tb.状态,
  1590. tb.序列,
  1591. tb.作业编号,
  1592. tb.作业名称,
  1593. tb.对象,
  1594. tb.工序,
  1595. tb.工作量,
  1596. tb.开始时间,
  1597. tb.持续时间,
  1598. tb.计划用时,
  1599. tb.排产备注
  1600. ";
  1601. //order by tb.排序,tb.机台名称 ";
  1602. $res = Db::query($sql);
  1603. if($res){
  1604. $redis->set($redis_key, json_encode($res));
  1605. echo date("Y-m-d H:i:s").'存进去了';
  1606. return $res;
  1607. }
  1608. }
  1609. //折、配、锁、糊机台实时生产进度->缓存
  1610. public function zpsh_schedule_redis(){
  1611. $redis=redis();
  1612. $redis_key = md5('zpsh_schedule_redis');
  1613. $sql = "(SELECT Row_number()
  1614. OVER (
  1615. PARTITION BY tb.机台名称
  1616. ORDER BY tb.状态 ) AS 排序,
  1617. tb.*
  1618. FROM (SELECT *
  1619. FROM (SELECT MKernel.cGzzxmc 工作中心,
  1620. IFnull(Dev.cName, '') 机台名称,
  1621. CASE
  1622. WHEN Job.iStatus = '2' THEN '进行中'
  1623. WHEN Job.iStatus = '1' THEN '已排产'
  1624. WHEN Job.iStatus = '10' THEN '作业暂停'
  1625. WHEN Job.iStatus = '20' THEN '下班挂起'
  1626. ELSE '其他'
  1627. END 状态,
  1628. Row_number()
  1629. OVER (
  1630. PARTITION BY Dev.cName, Job.iStatus
  1631. ORDER BY job.iXh) AS 序列,
  1632. job.cJobCode 作业编号,
  1633. job.cJobName 作业名称,
  1634. job.cPartName 对象,
  1635. ttATech.cName AS 工序,
  1636. job.nDeliverAmount 工作量,
  1637. CASE
  1638. WHEN CAST(job.dFactStart AS DATETIME) = '1900-01-01 00:00:00' THEN NULL
  1639. ELSE CAST(job.dFactStart AS DATETIME)
  1640. END AS 开始时间,
  1641. CAST(
  1642. TIMESTAMPDIFF(
  1643. MINUTE,
  1644. CASE
  1645. WHEN CAST(job.dFactStart AS DATETIME) = '1900-01-01 00:00:00' THEN NULL
  1646. ELSE CAST(job.dFactStart AS DATETIME)
  1647. END,
  1648. NOW()
  1649. ) / 60.0 AS DECIMAL(18, 2)
  1650. ) AS 持续时间,
  1651. job.nPlanTime 计划用时,
  1652. d.cPlanRemark 排产备注
  1653. FROM scMachineJob Job
  1654. LEFT JOIN ((SELECT iType, ID, cCode, cName, iGzzxId, ID_BM, cbmbh, cbmmc, cType_Sys, iStop, cType_Dev, cShortName, iTypeWage,
  1655. iOverProductType
  1656. FROM (SELECT 0 AS iType, MKernel.ID, MKernel.cBh AS cCode, MKernel.cGzzxmc AS cName, MKernel.ID AS iGzzxId,
  1657. dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, Mkernel.cGzzxlx AS cType_Sys, MKernel.iStopUse AS iStop,
  1658. MKernel.cGzzxlx AS cType_Dev, MKernel.cShortName, 0 iTypeWage, 0 iOverProductType
  1659. FROM MKernel INNER JOIN
  1660. DZBM ON DZBM.cbmbh = MKernel.cBmbh
  1661. UNION
  1662. SELECT 1 AS iType, dzyssb.ID, dzyssb.csbbh AS cCode, dzyssb.csbmc AS cName, Mkernel.ID AS iGzzxId, dzBM.id AS ID_BM,
  1663. dzBM.cbmbh, dzBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, dzyssb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev,
  1664. dzyssb.cShortName, 0 iTypeWage, 0 iOverProductType
  1665. FROM dzyssb INNER JOIN
  1666. MKernel ON MKernel.ID = dzyssb.ID_Center INNER JOIN
  1667. dzBM ON dzBM.cbmbh = MKernel.cBmbh
  1668. UNION
  1669. SELECT 2 AS iType, MKerJzmb.ID, MKerJzmb.cJzbh AS cCode, MKerJzmb.cJzmc AS cName, MKerJzmb.iGzzxId,
  1670. dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, MKerJzmb.iStopUse AS iStop,
  1671. dzyssb.csblb AS cType_Dev, MKerJzmb.cShortName, MKerJzmb.iType AS iTypeWage,
  1672. MKerJzmb.iOverProductType
  1673. FROM MKerJzmb INNER JOIN
  1674. MKernel ON MKernel.ID = MKerJzmb.iGzzxId INNER JOIN
  1675. DZBM ON DZBM.cbmbh = MKernel.cbmbh INNER JOIN
  1676. dzyssb ON dzyssb.id = MKerJzmb.ijzlxid
  1677. UNION
  1678. SELECT 3 AS iType, iywdwid AS ID, cywdwbh AS cCode, cdwmc AS cName, iywdwid AS iGzzxId, iywdwid AS ID_BM,
  1679. cywdwbh AS cbmbh, cdwmc AS cbmmc, '' AS cType_Sys,
  1680. CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop, '' AS cType_Dev, DZYWDW.cjc AS cShortName,
  1681. 0 iTypeWage, 0 iOverProductType
  1682. FROM dzywdw
  1683. WHERE bwjg = 1
  1684. UNION
  1685. SELECT 3 AS iType, - 1, '', '外厂资源', - 1, - 1 AS ID_BM, '' AS cbmbh, '' AS cbmmc, '' AS cType_Sys, 0 AS iStop, '' AS cType_Dev,
  1686. '外厂' AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType)scvDeviceAll
  1687. WHERE (iStop = 0)
  1688. ) ) Dev
  1689. ON Dev.iType <> 3
  1690. AND Job.id_Machine = Dev.Id
  1691. AND Job.iType_Res = 0
  1692. LEFT JOIN scMachineJobTech c
  1693. ON c.ID_scMachineJob = Job.id
  1694. AND c.iIndex = 1
  1695. LEFT JOIN sysTech ttATech
  1696. ON ttATech.ID = c.ID_ATech
  1697. LEFT JOIN scMachineJobRemark d
  1698. ON d.ID_scMachineJob = Job.id
  1699. LEFT JOIN MKernel
  1700. ON MKernel.ID = Dev.iGzzxid
  1701. WHERE 1 = 1
  1702. AND Job.iStatus IN( 2, 1, 10, 20 )
  1703. AND Job.iJobType IN ( 0, 4, 5 )
  1704. AND Job.iType_Res = 0) tb
  1705. WHERE tb.序列 <= 5
  1706. GROUP BY tb.工作中心,
  1707. tb.机台名称,
  1708. tb.状态,
  1709. tb.序列,
  1710. tb.作业编号,
  1711. tb.作业名称,
  1712. tb.对象,
  1713. tb.工序,
  1714. tb.工作量,
  1715. tb.开始时间,
  1716. tb.持续时间,
  1717. tb.计划用时,
  1718. tb.排产备注) tb)";
  1719. $res = Db::query($sql);
  1720. if($res){
  1721. $redis->set($redis_key, json_encode($res));
  1722. echo date("Y-m-d H:i:s").'存进去了';
  1723. return $res;
  1724. }
  1725. }
  1726. //装订机台实时生产进度->缓存
  1727. public function zd_schedule_redis(){
  1728. $redis=redis();
  1729. $redis_key = md5('zd_schedule_redis');
  1730. $sql = "(SELECT Row_number()
  1731. OVER (
  1732. PARTITION BY tb.机台名称
  1733. ORDER BY tb.状态 ) AS 排序,
  1734. tb.*
  1735. FROM (SELECT *
  1736. FROM (SELECT MKernel.cGzzxmc 工作中心,
  1737. IFnull(Dev.cName, '') 机台名称,
  1738. CASE
  1739. WHEN Job.iStatus = '2' THEN '进行中'
  1740. WHEN Job.iStatus = '1' THEN '已排产'
  1741. WHEN Job.iStatus = '10' THEN '作业暂停'
  1742. WHEN Job.iStatus = '20' THEN '下班挂起'
  1743. ELSE '其他'
  1744. END 状态,
  1745. Row_number()
  1746. OVER (
  1747. PARTITION BY Dev.cName, Job.iStatus
  1748. ORDER BY job.iXh) AS 序列,
  1749. job.cJobCode 作业编号,
  1750. job.cJobName 作业名称,
  1751. job.cPartName 对象,
  1752. ttATech.cName AS 工序,
  1753. job.nDeliverAmount 工作量,
  1754. CASE
  1755. WHEN CAST(job.dFactStart AS DATETIME) = '1900-01-01 00:00:00' THEN NULL
  1756. ELSE CAST(job.dFactStart AS DATETIME)
  1757. END AS 开始时间,
  1758. CAST(
  1759. TIMESTAMPDIFF(
  1760. MINUTE,
  1761. CASE
  1762. WHEN CAST(job.dFactStart AS DATETIME) = '1900-01-01 00:00:00' THEN NULL
  1763. ELSE CAST(job.dFactStart AS DATETIME)
  1764. END,
  1765. NOW()
  1766. ) / 60.0 AS DECIMAL(18, 2)
  1767. ) AS 持续时间,
  1768. job.nPlanTime 计划用时,
  1769. d.cPlanRemark 排产备注
  1770. FROM scMachineJob Job
  1771. LEFT JOIN ((SELECT iType, ID, cCode, cName, iGzzxId, ID_BM, cbmbh, cbmmc, cType_Sys, iStop, cType_Dev, cShortName, iTypeWage,
  1772. iOverProductType
  1773. FROM (SELECT 0 AS iType, MKernel.ID, MKernel.cBh AS cCode, MKernel.cGzzxmc AS cName, MKernel.ID AS iGzzxId,
  1774. dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, Mkernel.cGzzxlx AS cType_Sys, MKernel.iStopUse AS iStop,
  1775. MKernel.cGzzxlx AS cType_Dev, MKernel.cShortName, 0 iTypeWage, 0 iOverProductType
  1776. FROM MKernel INNER JOIN
  1777. DZBM ON DZBM.cbmbh = MKernel.cBmbh
  1778. UNION
  1779. SELECT 1 AS iType, dzyssb.ID, dzyssb.csbbh AS cCode, dzyssb.csbmc AS cName, Mkernel.ID AS iGzzxId, dzBM.id AS ID_BM,
  1780. dzBM.cbmbh, dzBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, dzyssb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev,
  1781. dzyssb.cShortName, 0 iTypeWage, 0 iOverProductType
  1782. FROM dzyssb INNER JOIN
  1783. MKernel ON MKernel.ID = dzyssb.ID_Center INNER JOIN
  1784. dzBM ON dzBM.cbmbh = MKernel.cBmbh
  1785. UNION
  1786. SELECT 2 AS iType, MKerJzmb.ID, MKerJzmb.cJzbh AS cCode, MKerJzmb.cJzmc AS cName, MKerJzmb.iGzzxId,
  1787. dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, MKerJzmb.iStopUse AS iStop,
  1788. dzyssb.csblb AS cType_Dev, MKerJzmb.cShortName, MKerJzmb.iType AS iTypeWage,
  1789. MKerJzmb.iOverProductType
  1790. FROM MKerJzmb INNER JOIN
  1791. MKernel ON MKernel.ID = MKerJzmb.iGzzxId INNER JOIN
  1792. DZBM ON DZBM.cbmbh = MKernel.cbmbh INNER JOIN
  1793. dzyssb ON dzyssb.id = MKerJzmb.ijzlxid
  1794. UNION
  1795. SELECT 3 AS iType, iywdwid AS ID, cywdwbh AS cCode, cdwmc AS cName, iywdwid AS iGzzxId, iywdwid AS ID_BM,
  1796. cywdwbh AS cbmbh, cdwmc AS cbmmc, '' AS cType_Sys,
  1797. CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop, '' AS cType_Dev, DZYWDW.cjc AS cShortName,
  1798. 0 iTypeWage, 0 iOverProductType
  1799. FROM dzywdw
  1800. WHERE bwjg = 1
  1801. UNION
  1802. SELECT 3 AS iType, - 1, '', '外厂资源', - 1, - 1 AS ID_BM, '' AS cbmbh, '' AS cbmmc, '' AS cType_Sys, 0 AS iStop, '' AS cType_Dev,
  1803. '外厂' AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType)scvDeviceAll
  1804. WHERE (iStop = 0)
  1805. ) ) Dev
  1806. ON Dev.iType <> 3
  1807. AND Job.id_Machine = Dev.Id
  1808. AND Job.iType_Res = 0
  1809. LEFT JOIN scMachineJobTech c
  1810. ON c.ID_scMachineJob = Job.id
  1811. AND c.iIndex = 1
  1812. LEFT JOIN sysTech ttATech
  1813. ON ttATech.ID = c.ID_ATech
  1814. LEFT JOIN scMachineJobRemark d
  1815. ON d.ID_scMachineJob = Job.id
  1816. LEFT JOIN MKernel
  1817. ON MKernel.ID = Dev.iGzzxid
  1818. WHERE 1 = 1
  1819. AND Job.iStatus IN( 2, 1, 10, 20 )
  1820. AND Job.iJobType IN ( 0, 4, 5 )
  1821. AND Job.iType_Res = 0) tb
  1822. WHERE tb.序列 <= 5
  1823. GROUP BY tb.工作中心,
  1824. tb.机台名称,
  1825. tb.状态,
  1826. tb.序列,
  1827. tb.作业编号,
  1828. tb.作业名称,
  1829. tb.对象,
  1830. tb.工序,
  1831. tb.工作量,
  1832. tb.开始时间,
  1833. tb.持续时间,
  1834. tb.计划用时,
  1835. tb.排产备注) tb)";
  1836. $res = Db::query($sql);
  1837. if($res){
  1838. $redis->set($redis_key, json_encode($res));
  1839. echo date("Y-m-d H:i:s").'存进去了';
  1840. return $res;
  1841. }
  1842. }
  1843. //印刷机台实时生产进度->接口
  1844. public function ys_schedule(){
  1845. $redis = redis();
  1846. $list = json_decode($redis->get(md5('ys_schedule_redis')), true);
  1847. // 按排序顺序排序
  1848. usort($list, function($a, $b) {
  1849. return $a['排序'] - $b['排序'];
  1850. });
  1851. // 工作中心相同的,先按状态排序
  1852. $status_order = ['进行中', '已排产', '作业暂停', '下班挂起'];
  1853. usort($list, function($a, $b) use ($status_order) {
  1854. $work_center_cmp = strcmp($a['机台名称'], $b['机台名称']);
  1855. if ($work_center_cmp === 0) {
  1856. $status_cmp = array_search($a['状态'], $status_order) - array_search($b['状态'], $status_order);
  1857. if ($status_cmp === 0) {
  1858. return $a['排序'] - $b['排序'];
  1859. }
  1860. return $status_cmp;
  1861. }
  1862. return $work_center_cmp;
  1863. });
  1864. $machineSerialData = Db::table("machineneserial")->where('status', 1)->select();
  1865. $machineSerials = array_column($machineSerialData, null, 'machinen_name');
  1866. $result = [
  1867. 'columns' => [
  1868. ['name' => '机台名称', 'id' => 'jtmc', 'width' => '19', 'autoWrap' => "true", 'textAlign' => 'left'],
  1869. ['name' => '作业编号', 'id' => 'zybh', 'width' => '18', 'autoWrap' => "true", 'textAlign' => 'left'],
  1870. ['name' => '作业名称', 'id' => 'zymc', 'width' => '32', 'textAlign' => 'left'],
  1871. ['name' => '持续时间', 'id' => 'cxsj', 'width' => '14', 'textAlign' => 'left'],
  1872. ['name' => '状态', 'id' => 'zt', 'width' => '12', 'textAlign' => 'left'],
  1873. ['name' => '应交页子', 'id' => 'gzl', 'width' => '10', 'autoWrap' => "true", 'textAlign' => 'left'],
  1874. ['name' => '计划用时', 'id' => 'jhys', 'width' => '8', 'autoWrap' => "true", 'textAlign' => 'left']
  1875. ],
  1876. 'rows' => []
  1877. ];
  1878. // 将 $list 转换为一个以 '机台名称' 为键的数组
  1879. $listIndexed = [];
  1880. foreach ($list as $item) {
  1881. if (!isset($listIndexed[$item['机台名称']])) {
  1882. $listIndexed[$item['机台名称']] = [];
  1883. }
  1884. $listIndexed[$item['机台名称']][] = $item;
  1885. }
  1886. foreach ($machineSerials as $machineName => $v) {
  1887. if (isset($listIndexed[$machineName])) {
  1888. foreach ($listIndexed[$machineName] as $v1) {
  1889. $result['rows'][] = [
  1890. 'jtmc' => $machineName,
  1891. 'zt' => $v1['状态'],
  1892. 'cxsj' => $v1['持续时间'],
  1893. 'zybh' => $v1['作业编号'],
  1894. 'zymc' => $v1['作业名称'],
  1895. 'gzl' => round($v1['工作量'], 2),
  1896. 'jhys' => round($v1['计划用时'], 2)
  1897. ];
  1898. }
  1899. } else {
  1900. $result['rows'][] = [
  1901. 'jtmc' => $machineName,
  1902. 'zt' => $v['status'] == 1 ? '未排产' : $v['status'],
  1903. 'cxsj' => '',
  1904. 'zybh' => '',
  1905. 'zymc' => '',
  1906. 'gzl' => '',
  1907. 'jhys' => ''
  1908. ];
  1909. }
  1910. }
  1911. // 不再需要 ksort 和 array_values,因为 $result['rows'] 已经是按顺序添加的
  1912. $res = ['status' => 0, 'msg' => '', 'data' => $result];
  1913. return json($res);
  1914. }
  1915. //折、配、锁、糊机台实时生产进度->接口
  1916. public function zpsh_schedule(){
  1917. $redis = redis();
  1918. $list = json_decode($redis->get(md5('zpsh_schedule_redis')), true);
  1919. // 按排序顺序排序
  1920. usort($list, function($a, $b) {
  1921. return $a['排序'] - $b['排序'];
  1922. });
  1923. // 工作中心相同的,先按状态排序
  1924. $status_order = ['进行中', '已排产', '作业暂停', '下班挂起'];
  1925. usort($list, function($a, $b) use ($status_order) {
  1926. $work_center_cmp = strcmp($a['机台名称'], $b['机台名称']);
  1927. if ($work_center_cmp === 0) {
  1928. $status_cmp = array_search($a['状态'], $status_order) - array_search($b['状态'], $status_order);
  1929. if ($status_cmp === 0) {
  1930. return $a['排序'] - $b['排序'];
  1931. }
  1932. return $status_cmp;
  1933. }
  1934. return $work_center_cmp;
  1935. });
  1936. $machineSerialData = Db::table("machineneserial")->where('status', 2)->select();
  1937. $machineSerials = array_column($machineSerialData, null, 'machinen_name');
  1938. $result = [
  1939. 'columns' => [
  1940. ['name' => '机台名称', 'id' => 'jtmc', 'width' => '19', 'autoWrap' => "true", 'textAlign' => 'left'],
  1941. ['name' => '作业编号', 'id' => 'zybh', 'width' => '18', 'autoWrap' => "true", 'textAlign' => 'left'],
  1942. ['name' => '作业名称', 'id' => 'zymc', 'width' => '32', 'textAlign' => 'left'],
  1943. ['name' => '持续时间', 'id' => 'cxsj', 'width' => '14', 'textAlign' => 'left'],
  1944. ['name' => '状态', 'id' => 'zt', 'width' => '12', 'textAlign' => 'left'],
  1945. ['name' => '工作量 ', 'id' => 'gzl', 'width' => '12', 'autoWrap' => "true", 'textAlign' => 'left'],
  1946. ['name' => '计划用时', 'id' => 'jhys', 'width' => '8', 'autoWrap' => "true", 'textAlign' => 'left']
  1947. ],
  1948. 'rows' => []
  1949. ];
  1950. // 将 $list 转换为一个以 '机台' 为键的数组的数组
  1951. $listIndexed = [];
  1952. foreach ($list as $item) {
  1953. if (!isset($listIndexed[$item['机台名称']])) {
  1954. $listIndexed[$item['机台名称']] = [];
  1955. }
  1956. $listIndexed[$item['机台名称']][] = $item;
  1957. }
  1958. foreach ($machineSerials as $machineName => $v) {
  1959. $serial = $v['serial'];
  1960. if (isset($listIndexed[$machineName])) {
  1961. foreach ($listIndexed[$machineName] as $v1) {
  1962. $result['rows'][] = [
  1963. 'jtmc' => $v['machinen_name'],
  1964. 'zt' => $v1['状态'],
  1965. 'cxsj' => $v1['持续时间'],
  1966. 'zybh' => $v1['作业编号'],
  1967. 'zymc' => $v1['作业名称'],
  1968. 'gzl' => round($v1['工作量'], 2),
  1969. 'jhys' => round($v1['计划用时'], 2)
  1970. ];
  1971. }
  1972. } else {
  1973. $result['rows'][] = [
  1974. 'jtmc' => $machineName,
  1975. 'zt' => $v['status'] == 2 ? '未排产' : $v['status'],
  1976. 'zybh' => '',
  1977. 'zymc' => '',
  1978. 'gzl' => '',
  1979. 'jhys' => '',
  1980. 'zt1' => '' // 添加这个字段,确保结构一致
  1981. ];
  1982. }
  1983. }
  1984. // 不再需要 ksort 和 array_values,因为 $result['rows'] 已经是按顺序添加的
  1985. $res = ['status' => 0, 'msg' => '', 'data' => $result];
  1986. return json($res);
  1987. }
  1988. //装订机台实时生产进度->接口
  1989. public function zd_schedule(){
  1990. $redis = redis();
  1991. $list = json_decode($redis->get(md5('zd_schedule_redis')), true);
  1992. // 按排序顺序排序
  1993. usort($list, function($a, $b) {
  1994. return $a['排序'] - $b['排序'];
  1995. });
  1996. // 工作中心相同的,先按状态排序
  1997. $status_order = ['进行中', '已排产', '作业暂停', '下班挂起'];
  1998. usort($list, function($a, $b) use ($status_order) {
  1999. $work_center_cmp = strcmp($a['机台名称'], $b['机台名称']);
  2000. if ($work_center_cmp === 0) {
  2001. $status_cmp = array_search($a['状态'], $status_order) - array_search($b['状态'], $status_order);
  2002. if ($status_cmp === 0) {
  2003. return $a['排序'] - $b['排序'];
  2004. }
  2005. return $status_cmp;
  2006. }
  2007. return $work_center_cmp;
  2008. });
  2009. $machineSerialData = Db::table("machineneserial")->where('status', 3)->select();
  2010. $machineSerials = array_column($machineSerialData, null, 'machinen_name');
  2011. $result = [
  2012. 'columns' => [
  2013. ['name' => '机台名称', 'id' => 'jtmc', 'width' => '19', 'autoWrap' => "true", 'textAlign' => 'left'],
  2014. ['name' => '作业编号', 'id' => 'zybh', 'width' => '18', 'autoWrap' => "true", 'textAlign' => 'left'],
  2015. ['name' => '作业名称', 'id' => 'zymc', 'width' => '32', 'textAlign' => 'left'],
  2016. ['name' => '持续时间', 'id' => 'cxsj', 'width' => '14', 'textAlign' => 'left'],
  2017. ['name' => '状态', 'id' => 'zt', 'width' => '12', 'textAlign' => 'left'],
  2018. ['name' => '工作量 ', 'id' => 'gzl', 'width' => '12', 'autoWrap' => "true", 'textAlign' => 'left'],
  2019. ['name' => '计划用时', 'id' => 'jhys', 'width' => '8', 'autoWrap' => "true", 'textAlign' => 'left']
  2020. ],
  2021. 'rows' => []
  2022. ];
  2023. // 将 $list 转换为一个以 '机台' 为键的数组的数组
  2024. $listIndexed = [];
  2025. foreach ($list as $item) {
  2026. if (!isset($listIndexed[$item['机台名称']])) {
  2027. $listIndexed[$item['机台名称']] = [];
  2028. }
  2029. $listIndexed[$item['机台名称']][] = $item;
  2030. }
  2031. foreach ($machineSerials as $machineName => $v) {
  2032. $serial = $v['serial'];
  2033. if (isset($listIndexed[$machineName])) {
  2034. foreach ($listIndexed[$machineName] as $v1) {
  2035. $result['rows'][] = [
  2036. 'jtmc' => $v['machinen_name'],
  2037. 'zt' => $v1['状态'],
  2038. 'cxsj' => $v1['持续时间'],
  2039. 'zybh' => $v1['作业编号'],
  2040. 'zymc' => $v1['作业名称'],
  2041. 'gzl' => round($v1['工作量'], 2),
  2042. 'jhys' => round($v1['计划用时'], 2)
  2043. ];
  2044. }
  2045. } else {
  2046. $result['rows'][] = [
  2047. 'jtmc' => $machineName,
  2048. 'zt' => $v['status'] == 3 ? '未排产' : $v['status'],
  2049. 'zybh' => '',
  2050. 'zymc' => '',
  2051. 'gzl' => '',
  2052. 'jhys' => '',
  2053. 'zt1' => '' // 添加这个字段,确保结构一致
  2054. ];
  2055. }
  2056. }
  2057. // 不再需要 ksort 和 array_values,因为 $result['rows'] 已经是按顺序添加的
  2058. $res = ['status' => 0, 'msg' => '', 'data' => $result];
  2059. return json($res);
  2060. }
  2061. /**
  2062. * 第三屏第二页 机台生产效率看板
  2063. */
  2064. //饼状图分组【Bi根据饼状图分组轮播,柱状图机台变化】
  2065. public function machine_grouping() {
  2066. $result = ['单双色印刷机台', '四色印刷机', '标规轮转印刷机', '大规轮转印刷机', '胶订联动线', '骑马精装联动线'];
  2067. $data = [
  2068. "columns" => [
  2069. ["name" => "分组", "id" => "subsys"]
  2070. ],
  2071. "rows" => []
  2072. ];
  2073. foreach ($result as $value) {
  2074. $data["rows"][] = ["subsys" => $value];
  2075. }
  2076. $res = [
  2077. 'status' => 0,
  2078. 'msg' => '',
  2079. 'data' => $data
  2080. ];
  2081. return json_encode($res, JSON_UNESCAPED_UNICODE);
  2082. }
  2083. //单双色印刷机台 缓存
  2084. public function dssj_scxl_redis(){
  2085. //设置redis缓存
  2086. $redis=redis();
  2087. $redis_key = md5('dssj_scxl_redis');
  2088. //查询近30天
  2089. $start_time = date('Y-m-d', strtotime('-30 days'));
  2090. $end_time = date('Y-m-d', time());
  2091. //单双色机
  2092. $res1 = Db::query("SELECT '{$start_time}' 提交起始日期,
  2093. '{$end_time}' 提交结束日期,
  2094. DATEDIFF(DATE_ADD('{$end_time}',INTERVAL 1 day),'{$start_time}') AS 统计周期,
  2095. TBU.机台名称,
  2096. TBU.班组名称,
  2097. (SELECT GROUP_CONCAT(DISTINCT aa.机长) FROM (SELECT TBU.机台名称,
  2098. TBU.班组名称,
  2099. TBU.机长,
  2100. TBU.生产日期
  2101. FROM (SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期,
  2102. TB1.机台名称,
  2103. TB1.班组名称,
  2104. TB1.机长 AS 机长
  2105. FROM (SELECT CASE
  2106. WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  2107. FROM sysetup
  2108. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  2109. ELSE ttt.dOnDuty
  2110. END 生产日期,
  2111. ttt.Name_Machine 机台名称,
  2112. ttt.Name_WorkGroup 班组名称,
  2113. DTp.cName 机长
  2114. FROM scDayRpt_Teams ttT
  2115. LEFT JOIN scDayRpt_Teams_People DTP
  2116. ON ttT.ID = DTP.ID_Teams
  2117. AND DTP.cStation = '机长'
  2118. WHERE ttt.nOutput_RZ > 0
  2119. GROUP BY ttt.dOnDuty,
  2120. ttt.Name_Machine,
  2121. ttt.Name_WorkGroup,
  2122. DTp.cName)TB1
  2123. WHERE LEFT(TB1.机台名称, 3) = 'BB机'
  2124. OR TB1.机台名称 IN ( '海德堡SM1号', '海德堡SM2号' )
  2125. GROUP BY TB1.生产日期,
  2126. TB1.机台名称,
  2127. TB1.班组名称,
  2128. TB1.机长)TBU
  2129. WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}'
  2130. GROUP BY TBU.机台名称,
  2131. TBU.班组名称,
  2132. TBU.机长,
  2133. TBU.生产日期
  2134. )aa
  2135. WHERE aa.班组名称 = tbu.班组名称
  2136. ) AS 机长信息, Cast(Sum(TBU.班组产量) AS SIGNED) AS 实物总产量,
  2137. Cast(Sum(TBU.有效工作时间 * TBU.定额 ) AS SIGNED) AS 折算后总产量,
  2138. Sum(TBU.考核工作时间 * TBU.定额) AS 考核总产量,
  2139. CASE
  2140. WHEN Sum(TBU.有效工作时间 * TBU.定额 ) >= Sum(TBU.考核工作时间 * TBU.定额) THEN '1'
  2141. ELSE '未完成'
  2142. END AS 效率分析,
  2143. Cast(Sum(TBU.有效工作时间) AS DECIMAL(6, 1)) AS 总工作时间,
  2144. TBU.考核工作时间 * Count(*) AS 总应工作时间,
  2145. Cast(Sum(TBU.班组产量) / ( TBU.考核工作时间 * Count(*) )AS SIGNED) AS 平均产量,
  2146. Sum(TBU.定额) / Count(*) AS 平均定额,
  2147. Count(*) AS 开机总次数,
  2148. Sum(CASE
  2149. WHEN TBU.效率分析 = '未完成' THEN 1
  2150. ELSE 0
  2151. END) AS 未完成次数,
  2152. Sum(CASE
  2153. WHEN TBU.效率分析 = '1' THEN 1
  2154. ELSE 0
  2155. END) AS 完成次数,
  2156. Cast(Cast(Sum(CASE
  2157. WHEN TBU.效率分析 = '1' THEN 1
  2158. ELSE 0
  2159. END)AS DECIMAL(5, 0)) / Count(*) AS DECIMAL(6, 4))AS 完成率
  2160. FROM (SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期,
  2161. TB1.机台名称,
  2162. 5500 定额,
  2163. TB1.班组名称,
  2164. Sum(TB1.实际工作时间) 实际工作时间,
  2165. Sum(TB1.班组产量) 班组产量,
  2166. Cast(Sum(TB1.班组产量) / 5500 AS DECIMAL(5, 2)) 产量折算时间,
  2167. Sum(TB1.改墨次数) 改墨次数,
  2168. Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(5, 2)) AS 改墨时间,
  2169. Sum(TB1.上版块数) 上版块数,
  2170. Cast(Sum(TB1.上版块数) * 10 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  2171. Sum(TB1.周保养时间) 周保养时间,
  2172. Cast(Sum(TB1.班组产量) / 5500 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间,
  2173. 10 AS 考核工作时间,
  2174. CASE
  2175. WHEN Cast(( Cast(Sum(TB1.班组产量) / 5500 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) ) / 10 * 100 AS DECIMAL(5, 2)) >= 100 THEN 100
  2176. ELSE Cast(( Cast(Sum(TB1.班组产量) / 5500 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) ) / 10 * 100 AS DECIMAL(5, 2))
  2177. END AS 完成百分比,
  2178. CASE
  2179. WHEN Cast(Sum(TB1.班组产量) / 5500 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) >= 10 THEN '1'
  2180. ELSE '未完成'
  2181. END AS 效率分析
  2182. FROM (SELECT CASE
  2183. WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  2184. FROM sysetup
  2185. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  2186. ELSE ttt.dOnDuty
  2187. END 生产日期,
  2188. ttT.id,
  2189. ttt.Name_Machine 机台名称,
  2190. ttt.Name_WorkGroup 班组名称,
  2191. ttt.nOutput_RZ 班组产量,
  2192. Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(5, 2)) 实际工作时间,
  2193. Sum(CASE
  2194. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  2195. ELSE 0
  2196. END) AS 上版次数,
  2197. Sum(CASE
  2198. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  2199. ELSE 0
  2200. END) AS 上版块数,
  2201. Sum(CASE
  2202. WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type
  2203. ELSE 0
  2204. END) AS 改墨次数,
  2205. Sum(CASE
  2206. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  2207. ELSE 0
  2208. END) AS 改规次数,
  2209. Sum(CASE
  2210. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3))
  2211. ELSE 0
  2212. END) AS 周保养时间
  2213. FROM scDayRpt_Teams ttT
  2214. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  2215. ON ttT.ID_Calendar = a.ID_Calendar
  2216. LEFT JOIN sctJFBActive b
  2217. ON b.ID = a.ID_Act
  2218. WHERE ttT.iDayRptStatus >= 0
  2219. GROUP BY ttt.dOnDuty,
  2220. ttt.Name_Machine,
  2221. ttT.id,
  2222. ttt.Name_WorkGroup,
  2223. ttt.nOutput_RZ,
  2224. ttt.iWorkingHours)TB1
  2225. WHERE LEFT(TB1.机台名称, 3) = 'BB机'
  2226. OR TB1.机台名称 IN ( '海德堡SM1号', '海德堡SM2号' )
  2227. GROUP BY TB1.生产日期,
  2228. TB1.机台名称,
  2229. TB1.班组名称)TBU
  2230. WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}'
  2231. AND TBU.班组产量 > 0
  2232. GROUP BY TBU.机台名称,
  2233. TBU.班组名称,
  2234. TBU.考核工作时间
  2235. ORDER BY TBU.机台名称,
  2236. TBU.班组名称 DESC");
  2237. foreach($res1 as $k=>$v){
  2238. $res[$k]['完成率']=round($v['完成率']*100);
  2239. $res[$k]['班组名称']=$v['班组名称'];
  2240. $res[$k]['开机总次数']=$v['开机总次数'];
  2241. $res[$k]['完成次数']=$v['完成次数'];
  2242. }
  2243. $redis->set($redis_key, json_encode($res));
  2244. echo date("Y-m-d H:i:s").'机台生产效率单双色机、四色机缓存 存进去了';
  2245. return json($res);
  2246. }
  2247. //四色印刷机 缓存
  2248. public function ssj_scxl_redis(){
  2249. //设置redis缓存
  2250. $redis=redis();
  2251. $redis_key = md5('ssj_scxl_redis');
  2252. //查询近30天
  2253. $start_time = date('Y-m-d', strtotime('-30 days'));
  2254. $end_time = date('Y-m-d', time());
  2255. //四色机
  2256. $res2 = Db::query("SELECT '{$start_time}' 提交起始日期,
  2257. '{$end_time}' 提交结束日期,
  2258. DATEDIFF(DATE_ADD('{$end_time}',INTERVAL 1 day),'{$start_time}') AS 统计周期,
  2259. TBU.机台名称,
  2260. TBU.班组名称,
  2261. (SELECT GROUP_CONCAT(DISTINCT aa.机长) FROM (SELECT TBU.机台名称,
  2262. TBU.班组名称,
  2263. TBU.机长,
  2264. TBU.生产日期
  2265. FROM (SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期,
  2266. TB1.机台名称,
  2267. TB1.班组名称,
  2268. TB1.机长 AS 机长
  2269. FROM (SELECT CASE
  2270. WHEN CONVERT(ttt.dOnDuty, CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  2271. FROM sysetup
  2272. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  2273. ELSE ttt.dOnDuty
  2274. END 生产日期,
  2275. ttt.Name_Machine 机台名称,
  2276. ttt.Name_WorkGroup 班组名称,
  2277. DTp.cName 机长
  2278. FROM scDayRpt_Teams ttT
  2279. LEFT JOIN scDayRpt_Teams_People DTP
  2280. ON ttT.ID = DTP.ID_Teams
  2281. AND DTP.cStation = '机长'
  2282. WHERE ttt.nOutput_RZ > 0
  2283. GROUP BY ttt.dOnDuty,
  2284. ttt.Name_Machine,
  2285. ttt.Name_WorkGroup,
  2286. DTp.cName)TB1
  2287. WHERE TB1.机台名称 IN ( '四色机02号机', '海德堡5+L 01号机', '海德堡01号机', '三菱机02号机',
  2288. '三菱机01号机', '小森八色01号机', '小森八色02号机' )
  2289. GROUP BY TB1.生产日期,
  2290. TB1.机台名称,
  2291. TB1.班组名称,
  2292. TB1.机长)TBU
  2293. WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}'
  2294. GROUP BY TBU.机台名称,
  2295. TBU.班组名称,
  2296. TBU.机长,
  2297. TBU.生产日期
  2298. )aa
  2299. WHERE aa.班组名称 = tbu.班组名称) AS 机长信息,
  2300. Cast(Sum(TBU.班组产量) AS SIGNED) AS 实物总产量,
  2301. Cast(Sum(TBU.有效工作时间* TBU.定额 ) AS SIGNED) AS 折算后总产量,
  2302. Sum(TBU.考核工作时间 * TBU.定额) AS 考核总产量,
  2303. CASE
  2304. WHEN Sum(TBU.有效工作时间 ) >= Sum(TBU.考核工作时间 ) THEN '1'
  2305. ELSE '未完成'
  2306. END AS 效率分析,
  2307. Cast(Sum(TBU.有效工作时间) AS DECIMAL(6, 1)) AS 总工作时间,
  2308. TBU.考核工作时间 * Count(*) AS 总应工作时间,
  2309. Cast(Sum(TBU.班组产量) / ( TBU.考核工作时间 * Count(*) )AS SIGNED) AS 平均产量,
  2310. Sum(TBU.定额) / Count(*) AS 平均定额,
  2311. Count(*) AS 开机总次数,
  2312. Sum(CASE
  2313. WHEN TBU.效率分析 = '未完成' THEN 1
  2314. ELSE 0
  2315. END) AS 未完成次数,
  2316. Sum(CASE
  2317. WHEN TBU.效率分析 = '1' THEN 1
  2318. ELSE 0
  2319. END) AS 完成次数,
  2320. Cast(Cast(Sum(CASE
  2321. WHEN TBU.效率分析 = '1' THEN 1
  2322. ELSE 0
  2323. END)AS DECIMAL(6, 0)) / Count(*) AS DECIMAL(5, 2))AS 完成率
  2324. FROM (SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期,
  2325. TB1.机台名称,
  2326. 8000 定额,
  2327. TB1.班组名称,
  2328. Sum(TB1.班组产量) 班组产量,
  2329. Sum(TB1.实际工作时间) 实际工作时间,
  2330. Cast(Sum(TB1.班组产量) / 8000 AS DECIMAL(5, 2)) 产量折算时间,
  2331. Sum(TB1.改墨次数) 改墨次数,
  2332. Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(5, 2)) AS 改墨时间,
  2333. Sum(TB1.上版块数) 上版块数,
  2334. Cast(Sum(TB1.上版块数) * 10 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  2335. Sum(TB1.周保养时间) 周保养时间,
  2336. Cast(Sum(TB1.班组产量) / 8000 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间,
  2337. 10 AS 考核工作时间,
  2338. CASE
  2339. WHEN Cast(( Cast(Sum(TB1.班组产量) / 8000 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) ) / 10 * 100 AS DECIMAL(5, 2)) >= 100 THEN 100
  2340. ELSE Cast(( Cast(Sum(TB1.班组产量) / 8000 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) ) / 10 * 100 AS DECIMAL(5, 2))
  2341. END AS 完成百分比,
  2342. CASE
  2343. WHEN Cast(Sum(TB1.班组产量) / 8000 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) >= 10 THEN '1'
  2344. ELSE '未完成'
  2345. END AS 效率分析
  2346. FROM (SELECT CASE
  2347. WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  2348. FROM sysetup
  2349. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  2350. ELSE ttt.dOnDuty
  2351. END 生产日期,
  2352. ttt.Name_Machine 机台名称,
  2353. ttt.Name_WorkGroup 班组名称,
  2354. ttt.nOutput_RZ 班组产量,
  2355. Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(5, 2)) 实际工作时间,
  2356. Sum(CASE
  2357. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  2358. ELSE 0
  2359. END) AS 上版次数,
  2360. Sum(CASE
  2361. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  2362. ELSE 0
  2363. END) AS 上版块数,
  2364. Sum(CASE
  2365. WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type
  2366. ELSE 0
  2367. END) AS 改墨次数,
  2368. Sum(CASE
  2369. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  2370. ELSE 0
  2371. END) AS 改规次数,
  2372. Sum(CASE
  2373. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3))
  2374. ELSE 0
  2375. END) AS 周保养时间
  2376. -- 上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040
  2377. FROM scDayRpt_Teams ttT
  2378. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  2379. ON ttT.ID_Calendar = a.ID_Calendar
  2380. left JOIN sctJFBActive b
  2381. ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >=0
  2382. GROUP BY ttt.dOnDuty,
  2383. ttt.Name_Machine,
  2384. ttT.id,
  2385. ttt.Name_WorkGroup,
  2386. ttt.nOutput_RZ,
  2387. ttt.iWorkingHours)TB1
  2388. WHERE TB1.机台名称 IN( '四色机02号机', '海德堡5+L 01号机', '海德堡01号机', '三菱机02号机', '三菱机01号机' )
  2389. GROUP BY TB1.生产日期,
  2390. TB1.机台名称,
  2391. TB1.班组名称
  2392. UNION ALL
  2393. SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期,
  2394. TB1.机台名称,
  2395. 7000 定额,
  2396. TB1.班组名称,
  2397. Sum(TB1.班组产量) 班组产量,
  2398. Sum(TB1.实际工作时间) 实际工作时间,
  2399. Cast(Sum(TB1.班组产量) / 7000 AS DECIMAL(5, 3)) 产量折算时间,
  2400. Sum(TB1.改墨次数) 改墨次数,
  2401. Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(5, 3)) AS 改墨时间,
  2402. Sum(TB1.上版块数) 上版块数,
  2403. Cast(Sum(TB1.上版块数) * 10 / 60.00 AS DECIMAL(5, 3)) AS 上版时间,
  2404. Sum(TB1.周保养时间) 周保养时间,
  2405. Cast(Sum(TB1.班组产量) / 7000 AS DECIMAL(5, 3)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间,
  2406. 10 AS 考核工作时间,
  2407. CASE
  2408. WHEN Cast(( Cast(Sum(TB1.班组产量) / 7000 AS DECIMAL(5, 3)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) ) / 10 * 100 AS DECIMAL(5, 2)) >= 100 THEN 100
  2409. ELSE Cast(( Cast(Sum(TB1.班组产量) / 7000 AS DECIMAL(5, 3)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) ) / 10 * 100 AS DECIMAL(5, 2))
  2410. END AS 完成百分比,
  2411. CASE
  2412. WHEN Cast(Sum(TB1.班组产量) / 7000 AS DECIMAL(5, 3)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) >= 10 THEN '1'
  2413. ELSE '未完成'
  2414. END AS 效率分析
  2415. FROM (SELECT CASE
  2416. WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  2417. FROM sysetup
  2418. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  2419. ELSE ttt.dOnDuty
  2420. END 生产日期,
  2421. ttt.Name_Machine 机台名称,
  2422. ttt.Name_WorkGroup 班组名称,
  2423. ttt.nOutput_RZ 班组产量,
  2424. Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(5, 2)) 实际工作时间,
  2425. Sum(CASE
  2426. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  2427. ELSE 0
  2428. END) AS 上版次数,
  2429. Sum(CASE
  2430. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  2431. ELSE 0
  2432. END) AS 上版块数,
  2433. Sum(CASE
  2434. WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type
  2435. ELSE 0
  2436. END) AS 改墨次数,
  2437. Sum(CASE
  2438. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  2439. ELSE 0
  2440. END) AS 改规次数,
  2441. Sum(CASE
  2442. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3))
  2443. ELSE 0
  2444. END) AS 周保养时间
  2445. -- 上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040
  2446. FROM scDayRpt_Teams ttT
  2447. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  2448. ON ttT.ID_Calendar = a.ID_Calendar
  2449. LEFT JOIN sctJFBActive b
  2450. ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0
  2451. GROUP BY ttt.dOnDuty,
  2452. ttt.Name_Machine,
  2453. ttT.id,
  2454. ttt.iWorkingHours,
  2455. ttt.Name_WorkGroup,
  2456. ttt.nOutput_RZ)TB1
  2457. WHERE TB1.机台名称 = '小森八色01号机'
  2458. GROUP BY TB1.生产日期,
  2459. TB1.机台名称,
  2460. TB1.班组名称
  2461. UNION ALL
  2462. SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期,
  2463. TB1.机台名称,
  2464. 10000 定额, TB1.班组名称,
  2465. Sum(TB1.班组产量) 班组产量,
  2466. Sum(TB1.实际工作时间) 实际工作时间,
  2467. Cast(Sum(TB1.班组产量) / 10000 AS DECIMAL(5, 2)) 产量折算时间,
  2468. Sum(TB1.改墨次数) 改墨次数,
  2469. Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(5, 2)) AS 改墨时间,
  2470. Sum(TB1.上版块数) 上版块数,
  2471. Cast(Sum(TB1.上版块数) * 2.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  2472. Sum(TB1.周保养时间) 周保养时间,
  2473. Cast(Sum(TB1.班组产量) / 10000 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 2.5 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间,
  2474. 12 AS 考核工作时间,
  2475. Cast(( Cast(Sum(TB1.班组产量) / 10000 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 2.5 / 60.00 + Sum(TB1.周保养时间) ) / 12 * 100 AS DECIMAL(5, 2)) AS 完成百分比,
  2476. CASE
  2477. WHEN Cast(Sum(TB1.班组产量) / 10000 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 2.5 / 60.00 + Sum(TB1.周保养时间) >= 12 THEN '1'
  2478. ELSE '未完成'
  2479. END AS 效率分析
  2480. FROM (SELECT CASE
  2481. WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  2482. FROM sysetup
  2483. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  2484. ELSE ttt.dOnDuty
  2485. END 生产日期,
  2486. ttt.Name_Machine 机台名称,
  2487. ttt.Name_WorkGroup 班组名称,
  2488. ttt.nOutput_RZ 班组产量,
  2489. Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(5, 2)) 实际工作时间,
  2490. Sum(CASE
  2491. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  2492. ELSE 0
  2493. END) AS 上版次数,
  2494. Sum(CASE
  2495. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  2496. ELSE 0
  2497. END) AS 上版块数,
  2498. Sum(CASE
  2499. WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type
  2500. ELSE 0
  2501. END) AS 改墨次数,
  2502. Sum(CASE
  2503. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  2504. ELSE 0
  2505. END) AS 改规次数,
  2506. Sum(CASE
  2507. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3))
  2508. ELSE 0
  2509. END) AS 周保养时间
  2510. FROM scDayRpt_Teams ttT
  2511. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  2512. ON ttT.ID_Calendar = a.ID_Calendar
  2513. LEFT JOIN sctJFBActive b
  2514. ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0
  2515. GROUP BY ttt.dOnDuty,
  2516. ttt.Name_Machine,
  2517. ttT.id,
  2518. ttt.iWorkingHours,
  2519. ttt.Name_WorkGroup,
  2520. ttt.nOutput_RZ)TB1
  2521. WHERE TB1.机台名称 = '小森八色02号机'
  2522. GROUP BY TB1.生产日期,
  2523. TB1.机台名称,
  2524. TB1.班组名称
  2525. )TBU
  2526. WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}'
  2527. AND TBU.班组产量 > 0
  2528. GROUP BY TBU.机台名称,
  2529. TBU.班组名称,
  2530. TBU.考核工作时间
  2531. ORDER BY TBU.机台名称,
  2532. TBU.班组名称 DESC
  2533. ");
  2534. foreach($res2 as $k=>$v){
  2535. $res[$k]['完成率']=round($v['完成率']*100);
  2536. $res[$k]['班组名称']=$v['班组名称'];
  2537. $res[$k]['开机总次数']=$v['开机总次数'];
  2538. $res[$k]['完成次数']=$v['完成次数'];
  2539. }
  2540. $redis->set($redis_key, json_encode($res));
  2541. echo date("Y-m-d H:i:s").'机台生产效率单双色机、四色机缓存 存进去了';
  2542. return json($res);
  2543. }
  2544. //标规轮转印刷机
  2545. public function bglz_scxl_redis(){
  2546. //设置redis缓存
  2547. $redis=redis();
  2548. $redis_key = md5('bglz_scxl_redis');
  2549. //查询近30天
  2550. $start_time = date('Y-m-d', strtotime('-30 days'));
  2551. $end_time = date('Y-m-d', time());
  2552. //标规轮转印刷机
  2553. $res5 = Db::query("SELECT '{$start_time}' 提交起始日期,
  2554. '{$end_time}' 提交结束日期,
  2555. DATEDIFF(DATE_ADD('{$end_time}',INTERVAL 1 day),'{$start_time}') AS 统计周期,
  2556. TBU.机台名称,
  2557. TBU.班组名称,
  2558. (SELECT GROUP_CONCAT(DISTINCT aa.机长)FROM (SELECT TBU.机台名称,
  2559. TBU.班组名称,
  2560. TBU.机长,
  2561. TBU.生产日期
  2562. FROM (SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期,
  2563. TB1.机台名称,
  2564. TB1.班组名称,
  2565. TB1.机长 AS 机长
  2566. FROM (SELECT CASE
  2567. WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  2568. FROM sysetup
  2569. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  2570. ELSE ttt.dOnDuty
  2571. END 生产日期,
  2572. ttt.Name_Machine 机台名称,
  2573. ttt.Name_WorkGroup 班组名称,
  2574. DTp.cName 机长
  2575. FROM scDayRpt_Teams ttT
  2576. LEFT JOIN scDayRpt_Teams_People DTP
  2577. ON ttT.ID = DTP.ID_Teams
  2578. AND DTP.cStation = '机长'
  2579. WHERE ttt.nOutput_RZ > 0
  2580. GROUP BY ttt.dOnDuty,
  2581. ttt.Name_Machine,
  2582. ttt.Name_WorkGroup,
  2583. DTp.cName)TB1
  2584. WHERE TB1.机台名称 IN ( '标规小森商轮1号', '标规小森商轮2号', '标规三菱商轮1号',
  2585. '标规三菱商轮2号', '标规高斯轮转1号', '标规报轮1号', '标规204胶轮1号' )
  2586. GROUP BY TB1.生产日期,
  2587. TB1.机台名称,
  2588. TB1.班组名称,
  2589. TB1.机长)TBU
  2590. WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}'
  2591. GROUP BY TBU.机台名称,
  2592. TBU.班组名称,
  2593. TBU.机长,
  2594. TBU.生产日期
  2595. )aa
  2596. WHERE aa.班组名称 = tbu.班组名称) AS 机长,
  2597. Cast(Sum(TBU.班组产量) AS SIGNED) AS 实物总产量,
  2598. Cast(Sum(TBU.考核工作时间 * TBU.定额 * TBU.完成百分比 / 100) AS SIGNED) AS 折算后总产量,
  2599. Sum(TBU.考核工作时间 * TBU.定额) AS 考核总产量,
  2600. CASE
  2601. WHEN Cast(Sum(TBU.考核工作时间 * TBU.定额 * TBU.完成百分比 / 100) AS SIGNED) >= Sum(TBU.考核工作时间 * TBU.定额)THEN '1'
  2602. ELSE '未完成'
  2603. END AS 效率分析,
  2604. Cast(Sum(TBU.有效工作时间) AS DECIMAL(6, 1)) AS 总工作时间,
  2605. TBU.考核工作时间 * Count(*) AS 总应工作时间,
  2606. Cast(Sum(TBU.班组产量) / ( TBU.考核工作时间 * Count(*) )AS SIGNED) AS 平均产量,
  2607. Sum(TBU.定额) / Count(*) AS 平均定额,
  2608. Count(*) AS 开机总次数,
  2609. Sum(CASE
  2610. WHEN TBU.效率分析 = '未完成' THEN 1
  2611. ELSE 0
  2612. END) AS 未完成次数,
  2613. Sum(CASE
  2614. WHEN TBU.效率分析 = '1' THEN 1
  2615. ELSE 0
  2616. END) AS 完成次数,
  2617. Cast(Cast(Sum(CASE
  2618. WHEN TBU.效率分析 = '1' THEN 1
  2619. ELSE 0
  2620. END)AS DECIMAL(2, 0)) / Count(*) AS DECIMAL(5, 2))AS 完成率
  2621. FROM (SELECT TBU2.机台名称,
  2622. TBU2.班组名称,
  2623. TBU2.生产日期,
  2624. DATE_FORMAT(TBU2.生产日期,'%w') 备注,
  2625. CASE
  2626. WHEN ( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间)
  2627. + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间)
  2628. + Sum(TBU2.周保养时间) ) >= TBU2.考核工作时间 THEN '1'
  2629. ELSE '未完成'
  2630. END AS 效率分析,
  2631. TBU2.定额,
  2632. TBU2.考核工作时间,
  2633. Sum(TBU2.班组产量) 班组产量,
  2634. Sum(TBU2.产量折算时间) 产量折算时间,
  2635. Sum(TBU2.改墨次数) 改墨次数,
  2636. Sum(TBU2.改墨时间) 改墨时间,
  2637. Sum(TBU2.改纸路次数) 改纸路次数,
  2638. Sum(TBU2.改纸路时间) 改纸路时间,
  2639. Sum(TBU2.上版块数) 上版块数,
  2640. Sum(TBU2.上版时间) 上版时间,
  2641. Sum(TBU2.周保养时间) 周保养时间,
  2642. ( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间)
  2643. + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间)
  2644. + Sum(TBU2.周保养时间) ) AS 有效工作时间,
  2645. Cast(( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间)
  2646. + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间)
  2647. + Sum(TBU2.周保养时间) ) / TBU2.考核工作时间 * 100 AS DECIMAL(5, 2)) 完成百分比
  2648. FROM (SELECT TB1.生产日期,
  2649. TB1.机台名称,
  2650. 14000 定额,
  2651. TB1.班组名称,
  2652. TB1.班组产量,
  2653. Cast(TB1.班组产量 / 14000 AS DECIMAL(5, 2)) 产量折算时间,
  2654. TB1.改墨次数,
  2655. Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间,
  2656. TB1.上版块数,
  2657. Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  2658. TB1.改纸路次数 AS 改纸路次数,
  2659. Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间,
  2660. TB1.周保养时间,
  2661. Cast(TB1.班组产量 / 14000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间,
  2662. 12 AS 考核工作时间
  2663. FROM (SELECT CONVERT(ttt.drptdate,CHAR(10)) 生产日期,
  2664. ttt.Name_Machine 机台名称,
  2665. ttt.Name_WorkGroup 班组名称,
  2666. ttt.nOutput_RZ 班组产量,
  2667. Sum(CASE
  2668. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  2669. ELSE 0
  2670. END) AS 上版次数,
  2671. Sum(CASE
  2672. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  2673. ELSE 0
  2674. END) AS 上版块数,
  2675. Sum(CASE
  2676. WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type
  2677. ELSE 0
  2678. END) AS 改墨次数,
  2679. Sum(CASE
  2680. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  2681. ELSE 0
  2682. END) AS 改规次数,
  2683. Sum(CASE
  2684. WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type
  2685. ELSE 0
  2686. END) AS 改纸路次数,
  2687. Sum(CASE
  2688. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2))
  2689. ELSE 0
  2690. END) AS 周保养时间
  2691. /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/
  2692. FROM scDayRpt_Teams ttT
  2693. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  2694. ON ttT.ID_Calendar = a.ID_Calendar
  2695. LEFT JOIN sctJFBActive b
  2696. ON b.ID = a.ID_Act
  2697. WHERE ttT.iDayRptStatus >= 0 /*iDayRptStatus=0未审核,iDayRptStatus=10为已审核,iDayRptStatus=-10为作废单*/
  2698. GROUP BY ttt.drptdate,
  2699. ttt.Name_Machine,
  2700. ttT.id,
  2701. ttt.Name_WorkGroup,
  2702. ttt.nOutput_RZ)TB1
  2703. WHERE TB1.机台名称 = '标规小森商轮1号'
  2704. UNION ALL
  2705. SELECT TB1.生产日期,
  2706. TB1.机台名称,
  2707. 18000 定额,
  2708. TB1.班组名称,
  2709. TB1.班组产量,
  2710. Cast(TB1.班组产量 / 18000 AS DECIMAL(5, 2)) 产量折算时间,
  2711. TB1.改墨次数,
  2712. Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间,
  2713. TB1.上版块数,
  2714. Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  2715. TB1.改纸路次数 AS 改纸路次数,
  2716. Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间,
  2717. TB1.周保养时间,
  2718. Cast(TB1.班组产量 / 18000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间,
  2719. 12 AS 考核工作时间
  2720. FROM (SELECT CONVERT(ttt.drptdate,CHAR(10)) 生产日期,
  2721. ttt.Name_Machine 机台名称,
  2722. ttt.Name_WorkGroup 班组名称,
  2723. ttt.nOutput_RZ 班组产量,
  2724. Sum(CASE
  2725. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  2726. ELSE 0
  2727. END) AS 上版次数,
  2728. Sum(CASE
  2729. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  2730. ELSE 0
  2731. END) AS 上版块数,
  2732. Sum(CASE
  2733. WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type
  2734. ELSE 0
  2735. END) AS 改墨次数,
  2736. Sum(CASE
  2737. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  2738. ELSE 0
  2739. END) AS 改规次数,
  2740. Sum(CASE
  2741. WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type
  2742. ELSE 0
  2743. END) AS 改纸路次数,
  2744. Sum(CASE
  2745. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2))
  2746. ELSE 0
  2747. END) AS 周保养时间
  2748. /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/
  2749. FROM scDayRpt_Teams ttT
  2750. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  2751. ON ttT.ID_Calendar = a.ID_Calendar
  2752. LEFT JOIN sctJFBActive b
  2753. ON b.ID = a.ID_Act
  2754. WHERE ttT.iDayRptStatus >= 0 /*iDayRptStatus=0未审核,iDayRptStatus=10为已审核,iDayRptStatus=-10为作废单*/
  2755. GROUP BY ttt.drptdate,
  2756. ttt.Name_Machine,
  2757. ttt.ID,
  2758. ttt.Name_WorkGroup,
  2759. ttt.nOutput_RZ)TB1
  2760. WHERE TB1.机台名称 = '标规小森商轮1号'
  2761. UNION ALL
  2762. SELECT TB1.生产日期,
  2763. TB1.机台名称,
  2764. 20000 定额,
  2765. TB1.班组名称,
  2766. TB1.班组产量,
  2767. Cast(TB1.班组产量 / 20000 AS DECIMAL(5, 2)) 产量折算时间,
  2768. TB1.改墨次数,
  2769. Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间,
  2770. TB1.上版块数,
  2771. Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  2772. TB1.改纸路次数 AS 改纸路次数,
  2773. Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间,
  2774. TB1.周保养时间,
  2775. Cast(TB1.班组产量 / 20000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间,
  2776. 12 AS 考核工作时间
  2777. FROM (SELECT CONVERT(ttt.drptdate,CHAR(10)) 生产日期,
  2778. ttt.Name_Machine 机台名称,
  2779. ttt.Name_WorkGroup 班组名称,
  2780. ttt.nOutput_RZ 班组产量,
  2781. Sum(CASE
  2782. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  2783. ELSE 0
  2784. END) AS 上版次数,
  2785. Sum(CASE
  2786. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  2787. ELSE 0
  2788. END) AS 上版块数,
  2789. Sum(CASE
  2790. WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type
  2791. ELSE 0
  2792. END) AS 改墨次数,
  2793. Sum(CASE
  2794. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  2795. ELSE 0
  2796. END) AS 改规次数,
  2797. Sum(CASE
  2798. WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type
  2799. ELSE 0
  2800. END) AS 改纸路次数,
  2801. Sum(CASE
  2802. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2))
  2803. ELSE 0
  2804. END) AS 周保养时间
  2805. /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/
  2806. FROM scDayRpt_Teams ttT
  2807. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  2808. ON ttT.ID_Calendar = a.ID_Calendar
  2809. LEFT JOIN sctJFBActive b
  2810. ON b.ID = a.ID_Act
  2811. WHERE ttT.iDayRptStatus >= 0
  2812. GROUP BY ttt.drptdate,
  2813. ttt.Name_Machine,
  2814. ttt.ID,
  2815. ttt.Name_WorkGroup,
  2816. ttt.nOutput_RZ)TB1
  2817. WHERE TB1.机台名称 IN( '标规小森商轮2号', '标规三菱商轮1号', '标规三菱商轮2号', '标规204胶轮1号', '标规高斯轮转1号' )
  2818. UNION ALL
  2819. SELECT TB1.生产日期,
  2820. TB1.机台名称,
  2821. 12000 定额,
  2822. TB1.班组名称,
  2823. TB1.班组产量,
  2824. Cast(TB1.班组产量 / 12000 AS DECIMAL(5, 2)) 产量折算时间,
  2825. TB1.改墨次数,
  2826. Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间,
  2827. TB1.上版块数,
  2828. Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  2829. TB1.改纸路次数 AS 改纸路次数,
  2830. Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间,
  2831. TB1.周保养时间,
  2832. Cast(TB1.班组产量 / 12000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间,
  2833. 12 AS 考核工作时间
  2834. FROM (SELECT CONVERT(ttt.drptdate,CHAR(10)) 生产日期,
  2835. ttt.Name_Machine 机台名称,
  2836. ttt.Name_WorkGroup 班组名称,
  2837. ttt.nOutput_RZ 班组产量,
  2838. Sum(CASE
  2839. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  2840. ELSE 0
  2841. END) AS 上版次数,
  2842. Sum(CASE
  2843. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  2844. ELSE 0
  2845. END) AS 上版块数,
  2846. Sum(CASE
  2847. WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type
  2848. ELSE 0
  2849. END) AS 改墨次数,
  2850. Sum(CASE
  2851. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  2852. ELSE 0
  2853. END) AS 改规次数,
  2854. Sum(CASE
  2855. WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type
  2856. ELSE 0
  2857. END) AS 改纸路次数,
  2858. Sum(CASE
  2859. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2))
  2860. ELSE 0
  2861. END) AS 周保养时间
  2862. FROM scDayRpt_Teams ttT
  2863. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  2864. ON ttT.ID_Calendar = a.ID_Calendar
  2865. LEFT JOIN sctJFBActive b
  2866. ON b.ID = a.ID_Act
  2867. WHERE ttT.iDayRptStatus >= 0
  2868. GROUP BY ttt.drptdate,
  2869. ttt.Name_Machine,
  2870. ttt.ID,
  2871. ttt.Name_WorkGroup,
  2872. ttt.nOutput_RZ)TB1
  2873. WHERE TB1.机台名称 IN( '标规高斯轮转1号', '标规报轮1号' ))TBU2
  2874. WHERE TBU2.生产日期 BETWEEN '{$start_time}' AND '{$end_time}'
  2875. AND TBU2.班组产量 > 0 /*Wheres*/
  2876. GROUP BY TBU2.机台名称,
  2877. TBU2.班组名称,
  2878. TBU2.生产日期,
  2879. TBU2.定额,
  2880. TBU2.考核工作时间)TBU
  2881. WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}'
  2882. AND TBU.班组产量 > 0
  2883. GROUP BY TBU.机台名称,
  2884. TBU.班组名称,
  2885. TBU.考核工作时间
  2886. ORDER BY TBU.机台名称,
  2887. TBU.班组名称 DESC
  2888. ");
  2889. foreach($res5 as $k=>$v){
  2890. $res[$k]['完成率']=round($v['完成率']*100);
  2891. $res[$k]['班组名称']=$v['班组名称'];
  2892. $res[$k]['开机总次数']=$v['开机总次数'];
  2893. $res[$k]['完成次数']=$v['完成次数'];
  2894. }
  2895. $redis->set($redis_key, json_encode($res));
  2896. echo date("Y-m-d H:i:s").'轮转缓存 存进去了';
  2897. return json($res);
  2898. }
  2899. //大规轮转印刷机
  2900. public function dglz_scxl_redis(){
  2901. //设置redis缓存
  2902. $redis=redis();
  2903. $redis_key = md5('dglz_scxl_redis');
  2904. //查询近30天
  2905. $start_time = date('Y-m-d', strtotime('-30 days'));
  2906. $end_time = date('Y-m-d', time());
  2907. //大规轮转印刷机
  2908. $res5 = Db::query("SELECT '{$start_time}' 提交起始日期,
  2909. '{$end_time}' 提交结束日期,
  2910. DATEDIFF(DATE_ADD('{$end_time}',INTERVAL 1 day),'{$start_time}') AS 统计周期,
  2911. TBU.机台名称,
  2912. TBU.班组名称,
  2913. (SELECT GROUP_CONCAT(DISTINCT aa.机长)FROM (SELECT TBU.机台名称,
  2914. TBU.班组名称,
  2915. TBU.机长,
  2916. TBU.生产日期
  2917. FROM (SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期,
  2918. TB1.机台名称,
  2919. TB1.班组名称,
  2920. TB1.机长 AS 机长
  2921. FROM (SELECT CASE
  2922. WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  2923. FROM sysetup
  2924. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  2925. ELSE ttt.dOnDuty
  2926. END 生产日期,
  2927. ttt.Name_Machine 机台名称,
  2928. ttt.Name_WorkGroup 班组名称,
  2929. DTp.cName 机长
  2930. FROM scDayRpt_Teams ttT
  2931. LEFT JOIN scDayRpt_Teams_People DTP
  2932. ON ttT.ID = DTP.ID_Teams
  2933. AND DTP.cStation = '机长'
  2934. WHERE ttt.nOutput_RZ > 0
  2935. GROUP BY ttt.dOnDuty,
  2936. ttt.Name_Machine,
  2937. ttt.Name_WorkGroup,
  2938. DTp.cName)TB1
  2939. WHERE TB1.机台名称 IN ( '大规三菱商轮1号', '大规小森商轮1号')
  2940. GROUP BY TB1.生产日期,
  2941. TB1.机台名称,
  2942. TB1.班组名称,
  2943. TB1.机长)TBU
  2944. WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}'
  2945. GROUP BY TBU.机台名称,
  2946. TBU.班组名称,
  2947. TBU.机长,
  2948. TBU.生产日期
  2949. )aa
  2950. WHERE aa.班组名称 = tbu.班组名称) AS 机长,
  2951. Cast(Sum(TBU.班组产量) AS SIGNED) AS 实物总产量,
  2952. Cast(Sum(TBU.考核工作时间 * TBU.定额 * TBU.完成百分比 / 100) AS SIGNED) AS 折算后总产量,
  2953. Sum(TBU.考核工作时间 * TBU.定额) AS 考核总产量,
  2954. CASE
  2955. WHEN Cast(Sum(TBU.考核工作时间 * TBU.定额 * TBU.完成百分比 / 100) AS SIGNED) >= Sum(TBU.考核工作时间 * TBU.定额)THEN '1'
  2956. ELSE '未完成'
  2957. END AS 效率分析,
  2958. Cast(Sum(TBU.有效工作时间) AS DECIMAL(6, 1)) AS 总工作时间,
  2959. TBU.考核工作时间 * Count(*) AS 总应工作时间,
  2960. Cast(Sum(TBU.班组产量) / ( TBU.考核工作时间 * Count(*) )AS SIGNED) AS 平均产量,
  2961. Sum(TBU.定额) / Count(*) AS 平均定额,
  2962. Count(*) AS 开机总次数,
  2963. Sum(CASE
  2964. WHEN TBU.效率分析 = '未完成' THEN 1
  2965. ELSE 0
  2966. END) AS 未完成次数,
  2967. Sum(CASE
  2968. WHEN TBU.效率分析 = '1' THEN 1
  2969. ELSE 0
  2970. END) AS 完成次数,
  2971. Cast(Cast(Sum(CASE
  2972. WHEN TBU.效率分析 = '1' THEN 1
  2973. ELSE 0
  2974. END)AS DECIMAL(2, 0)) / Count(*) AS DECIMAL(5, 2))AS 完成率
  2975. FROM (SELECT TBU2.机台名称,
  2976. TBU2.班组名称,
  2977. TBU2.生产日期,
  2978. DATE_FORMAT(TBU2.生产日期,'%w') 备注,
  2979. CASE
  2980. WHEN ( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间)
  2981. + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间)
  2982. + Sum(TBU2.周保养时间) ) >= TBU2.考核工作时间 THEN '1'
  2983. ELSE '未完成'
  2984. END AS 效率分析,
  2985. TBU2.定额,
  2986. TBU2.考核工作时间,
  2987. Sum(TBU2.班组产量) 班组产量,
  2988. Sum(TBU2.产量折算时间) 产量折算时间,
  2989. Sum(TBU2.改墨次数) 改墨次数,
  2990. Sum(TBU2.改墨时间) 改墨时间,
  2991. Sum(TBU2.改纸路次数) 改纸路次数,
  2992. Sum(TBU2.改纸路时间) 改纸路时间,
  2993. Sum(TBU2.上版块数) 上版块数,
  2994. Sum(TBU2.上版时间) 上版时间,
  2995. Sum(TBU2.周保养时间) 周保养时间,
  2996. ( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间)
  2997. + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间)
  2998. + Sum(TBU2.周保养时间) ) AS 有效工作时间,
  2999. Cast(( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间)
  3000. + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间)
  3001. + Sum(TBU2.周保养时间) ) / TBU2.考核工作时间 * 100 AS DECIMAL(5, 2)) 完成百分比
  3002. FROM (SELECT TB1.生产日期,
  3003. TB1.机台名称,
  3004. 14000 定额,
  3005. TB1.班组名称,
  3006. TB1.班组产量,
  3007. Cast(TB1.班组产量 / 14000 AS DECIMAL(5, 2)) 产量折算时间,
  3008. TB1.改墨次数,
  3009. Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间,
  3010. TB1.上版块数,
  3011. Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  3012. TB1.改纸路次数 AS 改纸路次数,
  3013. Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间,
  3014. TB1.周保养时间,
  3015. Cast(TB1.班组产量 / 14000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间,
  3016. 12 AS 考核工作时间
  3017. FROM (SELECT CONVERT(ttt.drptdate,CHAR(10)) 生产日期,
  3018. ttt.Name_Machine 机台名称,
  3019. ttt.Name_WorkGroup 班组名称,
  3020. ttt.nOutput_RZ 班组产量,
  3021. Sum(CASE
  3022. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  3023. ELSE 0
  3024. END) AS 上版次数,
  3025. Sum(CASE
  3026. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  3027. ELSE 0
  3028. END) AS 上版块数,
  3029. Sum(CASE
  3030. WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type
  3031. ELSE 0
  3032. END) AS 改墨次数,
  3033. Sum(CASE
  3034. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  3035. ELSE 0
  3036. END) AS 改规次数,
  3037. Sum(CASE
  3038. WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type
  3039. ELSE 0
  3040. END) AS 改纸路次数,
  3041. Sum(CASE
  3042. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2))
  3043. ELSE 0
  3044. END) AS 周保养时间
  3045. /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/
  3046. FROM scDayRpt_Teams ttT
  3047. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  3048. ON ttT.ID_Calendar = a.ID_Calendar
  3049. LEFT JOIN sctJFBActive b
  3050. ON b.ID = a.ID_Act
  3051. WHERE ttT.iDayRptStatus >= 0 /*iDayRptStatus=0未审核,iDayRptStatus=10为已审核,iDayRptStatus=-10为作废单*/
  3052. GROUP BY ttt.drptdate,
  3053. ttt.Name_Machine,
  3054. ttT.id,
  3055. ttt.Name_WorkGroup,
  3056. ttt.nOutput_RZ)TB1
  3057. WHERE TB1.机台名称 = '大规三菱商轮1号'
  3058. UNION ALL
  3059. SELECT TB1.生产日期,
  3060. TB1.机台名称,
  3061. 18000 定额,
  3062. TB1.班组名称,
  3063. TB1.班组产量,
  3064. Cast(TB1.班组产量 / 18000 AS DECIMAL(5, 2)) 产量折算时间,
  3065. TB1.改墨次数,
  3066. Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间,
  3067. TB1.上版块数,
  3068. Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  3069. TB1.改纸路次数 AS 改纸路次数,
  3070. Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间,
  3071. TB1.周保养时间,
  3072. Cast(TB1.班组产量 / 18000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间,
  3073. 12 AS 考核工作时间
  3074. FROM (SELECT CONVERT(ttt.drptdate,CHAR(10)) 生产日期,
  3075. ttt.Name_Machine 机台名称,
  3076. ttt.Name_WorkGroup 班组名称,
  3077. ttt.nOutput_RZ 班组产量,
  3078. Sum(CASE
  3079. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  3080. ELSE 0
  3081. END) AS 上版次数,
  3082. Sum(CASE
  3083. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  3084. ELSE 0
  3085. END) AS 上版块数,
  3086. Sum(CASE
  3087. WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type
  3088. ELSE 0
  3089. END) AS 改墨次数,
  3090. Sum(CASE
  3091. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  3092. ELSE 0
  3093. END) AS 改规次数,
  3094. Sum(CASE
  3095. WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type
  3096. ELSE 0
  3097. END) AS 改纸路次数,
  3098. Sum(CASE
  3099. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2))
  3100. ELSE 0
  3101. END) AS 周保养时间
  3102. /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/
  3103. FROM scDayRpt_Teams ttT
  3104. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  3105. ON ttT.ID_Calendar = a.ID_Calendar
  3106. LEFT JOIN sctJFBActive b
  3107. ON b.ID = a.ID_Act
  3108. WHERE ttT.iDayRptStatus >= 0 /*iDayRptStatus=0未审核,iDayRptStatus=10为已审核,iDayRptStatus=-10为作废单*/
  3109. GROUP BY ttt.drptdate,
  3110. ttt.Name_Machine,
  3111. ttt.ID,
  3112. ttt.Name_WorkGroup,
  3113. ttt.nOutput_RZ)TB1
  3114. WHERE TB1.机台名称 = '大规小森商轮1号'
  3115. UNION ALL
  3116. SELECT TB1.生产日期,
  3117. TB1.机台名称,
  3118. 20000 定额,
  3119. TB1.班组名称,
  3120. TB1.班组产量,
  3121. Cast(TB1.班组产量 / 20000 AS DECIMAL(5, 2)) 产量折算时间,
  3122. TB1.改墨次数,
  3123. Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间,
  3124. TB1.上版块数,
  3125. Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  3126. TB1.改纸路次数 AS 改纸路次数,
  3127. Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间,
  3128. TB1.周保养时间,
  3129. Cast(TB1.班组产量 / 20000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间,
  3130. 12 AS 考核工作时间
  3131. FROM (SELECT CONVERT(ttt.drptdate,CHAR(10)) 生产日期,
  3132. ttt.Name_Machine 机台名称,
  3133. ttt.Name_WorkGroup 班组名称,
  3134. ttt.nOutput_RZ 班组产量,
  3135. Sum(CASE
  3136. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  3137. ELSE 0
  3138. END) AS 上版次数,
  3139. Sum(CASE
  3140. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  3141. ELSE 0
  3142. END) AS 上版块数,
  3143. Sum(CASE
  3144. WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type
  3145. ELSE 0
  3146. END) AS 改墨次数,
  3147. Sum(CASE
  3148. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  3149. ELSE 0
  3150. END) AS 改规次数,
  3151. Sum(CASE
  3152. WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type
  3153. ELSE 0
  3154. END) AS 改纸路次数,
  3155. Sum(CASE
  3156. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2))
  3157. ELSE 0
  3158. END) AS 周保养时间
  3159. /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/
  3160. FROM scDayRpt_Teams ttT
  3161. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  3162. ON ttT.ID_Calendar = a.ID_Calendar
  3163. LEFT JOIN sctJFBActive b
  3164. ON b.ID = a.ID_Act
  3165. WHERE ttT.iDayRptStatus >= 0
  3166. GROUP BY ttt.drptdate,
  3167. ttt.Name_Machine,
  3168. ttt.ID,
  3169. ttt.Name_WorkGroup,
  3170. ttt.nOutput_RZ)TB1
  3171. WHERE TB1.机台名称 IN('大规小森商轮1号')
  3172. UNION ALL
  3173. SELECT TB1.生产日期,
  3174. TB1.机台名称,
  3175. 12000 定额,
  3176. TB1.班组名称,
  3177. TB1.班组产量,
  3178. Cast(TB1.班组产量 / 12000 AS DECIMAL(5, 2)) 产量折算时间,
  3179. TB1.改墨次数,
  3180. Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间,
  3181. TB1.上版块数,
  3182. Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  3183. TB1.改纸路次数 AS 改纸路次数,
  3184. Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间,
  3185. TB1.周保养时间,
  3186. Cast(TB1.班组产量 / 12000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间,
  3187. 12 AS 考核工作时间
  3188. FROM (SELECT CONVERT(ttt.drptdate,CHAR(10)) 生产日期,
  3189. ttt.Name_Machine 机台名称,
  3190. ttt.Name_WorkGroup 班组名称,
  3191. ttt.nOutput_RZ 班组产量,
  3192. Sum(CASE
  3193. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  3194. ELSE 0
  3195. END) AS 上版次数,
  3196. Sum(CASE
  3197. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  3198. ELSE 0
  3199. END) AS 上版块数,
  3200. Sum(CASE
  3201. WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type
  3202. ELSE 0
  3203. END) AS 改墨次数,
  3204. Sum(CASE
  3205. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  3206. ELSE 0
  3207. END) AS 改规次数,
  3208. Sum(CASE
  3209. WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type
  3210. ELSE 0
  3211. END) AS 改纸路次数,
  3212. Sum(CASE
  3213. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2))
  3214. ELSE 0
  3215. END) AS 周保养时间
  3216. FROM scDayRpt_Teams ttT
  3217. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  3218. ON ttT.ID_Calendar = a.ID_Calendar
  3219. LEFT JOIN sctJFBActive b
  3220. ON b.ID = a.ID_Act
  3221. WHERE ttT.iDayRptStatus >= 0
  3222. GROUP BY ttt.drptdate,
  3223. ttt.Name_Machine,
  3224. ttt.ID,
  3225. ttt.Name_WorkGroup,
  3226. ttt.nOutput_RZ)TB1
  3227. WHERE TB1.机台名称 IN( '大规三菱商轮1号', '大规小森商轮1号' ))TBU2
  3228. WHERE TBU2.生产日期 BETWEEN '{$start_time}' AND '{$end_time}'
  3229. AND TBU2.班组产量 > 0 /*Wheres*/
  3230. GROUP BY TBU2.机台名称,
  3231. TBU2.班组名称,
  3232. TBU2.生产日期,
  3233. TBU2.定额,
  3234. TBU2.考核工作时间)TBU
  3235. WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}'
  3236. AND TBU.班组产量 > 0
  3237. GROUP BY TBU.机台名称,
  3238. TBU.班组名称,
  3239. TBU.考核工作时间
  3240. ORDER BY TBU.机台名称,
  3241. TBU.班组名称 DESC
  3242. ");
  3243. foreach($res5 as $k=>$v){
  3244. $res[$k]['完成率']=round($v['完成率']*100);
  3245. $res[$k]['班组名称']=$v['班组名称'];
  3246. $res[$k]['开机总次数']=$v['开机总次数'];
  3247. $res[$k]['完成次数']=$v['完成次数'];
  3248. }
  3249. $redis->set($redis_key, json_encode($res));
  3250. echo date("Y-m-d H:i:s").'轮转缓存 存进去了';
  3251. return json($res);
  3252. }
  3253. //胶订联动线
  3254. public function jdld_scxl_redis(){
  3255. //设置redis缓存
  3256. $redis=redis();
  3257. $redis_key = md5('jdld_scxl_redis');
  3258. //查询近30天
  3259. $start_time = date('Y-m-d', strtotime('-30 days'));
  3260. $end_time = date('Y-m-d', time());
  3261. //胶订
  3262. $res4 = Db::query("SELECT '{$start_time}' 提交起始日期,
  3263. '{$end_time}' 提交结束日期,
  3264. DATEDIFF(DATE_ADD('{$end_time}',INTERVAL 1 day),'{$start_time}') AS 统计周期,
  3265. TBU.机台名称,
  3266. TBU.班组名称,
  3267. -- TBU.机长,
  3268. -- (SELECT GROUP_CONCAT(DISTINCT aa.机长)FROM (SELECT TBU.机台名称,
  3269. -- TBU.班组名称,
  3270. -- TBU.机长,
  3271. -- TBU.生产日期
  3272. -- FROM (SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期,
  3273. -- TB1.机台名称,
  3274. -- TB1.班组名称
  3275. -- TB1.机长 AS 机长
  3276. -- FROM (SELECT CASE
  3277. -- WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  3278. -- FROM sysetup
  3279. -- WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(dOnDuty,INTERVAL -1 day)
  3280. -- ELSE ttt.dOnDuty
  3281. -- END 生产日期,
  3282. -- ttt.Name_Machine 机台名称,
  3283. -- ttt.Name_WorkGroup 班组名称,
  3284. -- DTp.cName 机长
  3285. -- FROM scDayRpt_Teams ttT
  3286. -- LEFT JOIN scDayRpt_Teams_People DTP
  3287. -- ON ttT.ID = DTP.ID_Teams
  3288. -- AND DTP.cStation = '机长'
  3289. -- WHERE ttt.nOutput_RZ > 0 and ttt.dOnDuty BETWEEN '{$start_time}' AND '{$end_time}'
  3290. -- GROUP BY ttt.dOnDuty,
  3291. -- ttt.Name_Machine,
  3292. -- ttt.Name_WorkGroup,
  3293. -- DTp.cName)TB1
  3294. -- WHERE TB1.机台名称 IN ( '胶订潮流1号', '胶订潮流2号', '胶订潮流2号', '胶订精工1号',
  3295. -- '胶订精密达1号', '胶订精密达2号' )
  3296. -- GROUP BY TB1.生产日期,
  3297. -- TB1.机台名称,
  3298. -- TB1.班组名称,
  3299. -- TB1.机长)TBU
  3300. -- WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}'
  3301. -- GROUP BY TBU.机台名称,
  3302. -- TBU.班组名称,
  3303. -- TBU.机长,
  3304. -- TBU.生产日期)aa
  3305. -- WHERE aa.班组名称 = tbu.班组名称) AS 机长信息,
  3306. Cast(Sum(TBU.班组产量) AS SIGNED) AS 总产量,
  3307. Cast(Sum(TBU.有效工作时间) AS DECIMAL(6, 1)) AS 总工作时间,
  3308. Sum(TBU.考核工作时间) AS 总应工作时间,
  3309. Cast(Sum(TBU.班组产量) / ( Sum(TBU.考核工作时间) )AS SIGNED) AS 平均产量,
  3310. Sum(TBU.定额) / Count(*) AS 平均定额,
  3311. Count(*) AS 开机总次数,
  3312. Sum(CASE
  3313. WHEN TBU.效率分析 = '未完成' THEN 1
  3314. ELSE 0
  3315. END) AS 未完成次数,
  3316. Sum(CASE
  3317. WHEN TBU.效率分析 = '1' THEN 1
  3318. ELSE 0
  3319. END) AS 完成次数,
  3320. Cast(Cast(Sum(CASE
  3321. WHEN TBU.效率分析 = '1' THEN 1
  3322. ELSE 0
  3323. END)AS DECIMAL(2, 0)) / Count(*) AS DECIMAL(5, 2)) AS 完成率
  3324. FROM (SELECT TBU.机台名称,
  3325. TBU.班组名称,
  3326. TBU.生产日期,
  3327. TBU.备注,
  3328. CASE
  3329. WHEN Sum(TBU.有效工作时间) >= TBU.考核工作时间 THEN '1'
  3330. ELSE '未完成'
  3331. END AS 效率分析,
  3332. TBU.定额,
  3333. TBU.考核工作时间,
  3334. Sum(TBU.班组产量) 班组产量,
  3335. Sum(TBU.产量折算工时) 产量折算工时,
  3336. Sum(TBU.改规次数) 改规次数,
  3337. Sum(TBU.改规时间) 改规时间,
  3338. Sum(TBU.做零活时间) 做零活时间,
  3339. Sum(TBU.周保养时间) 周保养时间,
  3340. Sum(TBU.有效工作时间) 有效工作时间
  3341. FROM (SELECT TBU2.机台名称,
  3342. TBU2.班组名称,
  3343. TBU2.生产日期,
  3344. TBU2.备注,
  3345. TBU2.定额,
  3346. TBU2.考核工时 考核工作时间,
  3347. TBU2.班组产量,
  3348. TBU2.产量折算工时,
  3349. TBU2.改规次数,
  3350. TBU2.改规时间,
  3351. TBU2.做零活时间,
  3352. TBU2.周保养时间,
  3353. TBU2.有效工作时间
  3354. FROM (SELECT TBU.ID_Calendar,
  3355. TBU.机台名称,
  3356. TBU.班组名称,
  3357. TBU.生产日期,
  3358. TBU.备注,
  3359. TBU.定额,
  3360. IFNULL(AttFB2.班次时长, 10) 考核工时,
  3361. Sum(TBU.班组产量) 班组产量,
  3362. Sum(TBU.产量折算工时) 产量折算工时,
  3363. IFNULL(ATTFB1.改规次数, 0) AS 改规次数,
  3364. IFNULL(AttFB1.改规时间, 0) AS 改规时间,
  3365. IFNULL(AttFB1.做零活时间, 0) 做零活时间,
  3366. IFNULL(AttFB1.周保养时间, 0) 周保养时间,
  3367. ( Sum(TBU.产量折算工时) + IFNULL(AttFB1.改规时间, 0)
  3368. + IFNULL(AttFB1.做零活时间, 0)
  3369. + IFNULL( AttFB1.周保养时间, 0) ) 有效工作时间
  3370. FROM (SELECT JobTB.ID ID_Calendar,
  3371. JobTB.机台名称,
  3372. JobTB.班组名称,
  3373. JobTB.生产日期,
  3374. DATE_FORMAT(JobTB.生产日期,'%W') 备注,
  3375. Avg(JobTB.定额) 定额,
  3376. Sum(JobTB.班组产量) 班组产量,
  3377. Cast(Sum(产量折算工时) AS DECIMAL(5, 2)) 产量折算工时
  3378. FROM (SELECT ttFC.ID,
  3379. CONVERT (dRealRptDate,CHAR(10)) 生产日期,
  3380. TB2.ID_Teams,
  3381. TB2.cJtmc 机台名称,
  3382. CASE
  3383. WHEN a.CZWKB LIKE '大16%' THEN ( CASE
  3384. WHEN a.NZWYZ >= 9.75 THEN 4500
  3385. ELSE 7000
  3386. END )
  3387. ELSE ( CASE
  3388. WHEN a.NZWYZ >= 9.75 THEN 4500
  3389. ELSE 7500
  3390. END )
  3391. END AS 定额,
  3392. TB2.cName_Team 班组名称,
  3393. ttFc.ID_TeamManRecord,
  3394. ttTJ.cCode_ProductOrder AS cCode_ProductOrder,
  3395. ttTJ.cCode_JobM AS cCode_JobM,
  3396. ttTJ.cName_JobM AS cName_JobM,
  3397. ttTj.cType_AProduct,
  3398. a.NZWYZ,
  3399. ttTJ.nOutput_R AS 班组产量,
  3400. CASE
  3401. WHEN a.CZWKB LIKE '大16%' THEN ( CASE
  3402. WHEN a.NZWYZ >= 9.75 THEN Cast(Round(ttTJ.nOutput_R / 4500, 3)AS DECIMAL(6, 3))
  3403. ELSE Cast(Round(ttTJ.nOutput_R / 7000, 3)AS DECIMAL(6, 3))
  3404. END )
  3405. ELSE ( CASE
  3406. WHEN a.NZWYZ >= 9.75 THEN Cast(Round(ttTJ.nOutput_R / 4500, 3)AS DECIMAL(6, 3))
  3407. ELSE Cast(Round(ttTJ.nOutput_R / 7500, 3)AS DECIMAL(6, 3))
  3408. END )
  3409. END AS 产量折算工时
  3410. FROM scDayRpt_Teams_JobContent ttTJ
  3411. INNER JOIN scmachinejob b
  3412. ON b.ID = ttTJ.ID_JobM
  3413. LEFT JOIN scFactoryCalendar ttFC
  3414. ON ttTJ.id_scFactoryCalendar = ttFC.id
  3415. LEFT JOIN (SELECT CONVERT(CONVERT(ttDRpt_T.dRealRptDate,CHAR(10)),DATETIME) dRealRptDate,
  3416. ttT.cJtmc AS cJtmc,
  3417. ttT.cBanzuMc AS cName_Team,
  3418. ttT.cBmbh AS cBmbh,
  3419. ttT.cBmmc AS cbmmc,
  3420. ttDRpt_T.ID_WorkCenter,
  3421. ttT.cGzzxmc AS cgzzxmc,
  3422. tvD.cName AS cname,
  3423. ttS.cName AS cName_S,
  3424. ttDRpt_T.dOnDuty AS dStart,
  3425. ttDRpt_T.dOffDuty AS dEnd,
  3426. ttDRpt_T.nOutput_RZ AS nAmount_R,
  3427. IFNULL(ttDRpt_T.iDayRptStatus, -1) AS iDayRptStatus,
  3428. ttFC.ID AS ID_TC,
  3429. IFNULL(ttDRpt_T.ID, -1) AS ID_TDRpt,
  3430. ttDRpt_T.dstamp,
  3431. ttDRpt_T.id AS ID_Teams
  3432. FROM scFactoryCalendar ttFC
  3433. LEFT JOIN scShift ttS
  3434. ON ttS.ID = ttFC.id_scShift
  3435. LEFT JOIN (SELECT *,
  3436. CASE
  3437. WHEN CONVERT(dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  3438. FROM sysetup
  3439. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(dOnDuty,INTERVAL -1 DAY)
  3440. ELSE dOnDuty
  3441. END dRealRptDate
  3442. FROM scDayRpt_Teams) ttDRpt_T
  3443. ON ttDRpt_T.ID_Calendar = ttFC.ID
  3444. AND ttDRpt_T.iDayRptStatus >= 0
  3445. LEFT JOIN banzu ttT
  3446. ON ttT.banzuId = ttFC.id_Machine
  3447. LEFT JOIN (SELECT iType, ID, cCode, cName, iGzzxId, ID_BM, cbmbh, cbmmc, cType_Sys, iStop, cType_Dev, cShortName, iTypeWage,
  3448. iOverProductType
  3449. FROM (SELECT 0 AS iType, MKernel.ID, MKernel.cBh AS cCode, MKernel.cGzzxmc AS cName, MKernel.ID AS iGzzxId,
  3450. dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, Mkernel.cGzzxlx AS cType_Sys, MKernel.iStopUse AS iStop,
  3451. MKernel.cGzzxlx AS cType_Dev, MKernel.cShortName, 0 iTypeWage, 0 iOverProductType
  3452. FROM MKernel INNER JOIN
  3453. DZBM ON DZBM.cbmbh = MKernel.cBmbh
  3454. UNION
  3455. SELECT 1 AS iType, dzyssb.ID, dzyssb.csbbh AS cCode, dzyssb.csbmc AS cName, Mkernel.ID AS iGzzxId, dzBM.id AS ID_BM,
  3456. dzBM.cbmbh, dzBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, dzyssb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev,
  3457. dzyssb.cShortName, 0 iTypeWage, 0 iOverProductType
  3458. FROM dzyssb INNER JOIN
  3459. MKernel ON MKernel.ID = dzyssb.ID_Center INNER JOIN
  3460. dzBM ON dzBM.cbmbh = MKernel.cBmbh
  3461. UNION
  3462. SELECT 2 AS iType, MKerJzmb.ID, MKerJzmb.cJzbh AS cCode, MKerJzmb.cJzmc AS cName, MKerJzmb.iGzzxId,
  3463. dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, MKerJzmb.iStopUse AS iStop,
  3464. dzyssb.csblb AS cType_Dev, MKerJzmb.cShortName, MKerJzmb.iType AS iTypeWage,
  3465. MKerJzmb.iOverProductType
  3466. FROM MKerJzmb INNER JOIN
  3467. MKernel ON MKernel.ID = MKerJzmb.iGzzxId INNER JOIN
  3468. DZBM ON DZBM.cbmbh = MKernel.cbmbh INNER JOIN
  3469. dzyssb ON dzyssb.id = MKerJzmb.ijzlxid
  3470. UNION
  3471. SELECT 3 AS iType, iywdwid AS ID, cywdwbh AS cCode, cdwmc AS cName, iywdwid AS iGzzxId, iywdwid AS ID_BM,
  3472. cywdwbh AS cbmbh, cdwmc AS cbmmc, '' AS cType_Sys,
  3473. CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop, '' AS cType_Dev, DZYWDW.cjc AS cShortName,
  3474. 0 iTypeWage, 0 iOverProductType
  3475. FROM dzywdw
  3476. WHERE bwjg = 1
  3477. UNION
  3478. SELECT 3 AS iType, - 1, '', '外厂资源', - 1, - 1 AS ID_BM, '' AS cbmbh, '' AS cbmmc, '' AS cType_Sys, 0 AS iStop, '' AS cType_Dev,
  3479. '外厂' AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType)scvDeviceAll
  3480. WHERE (iStop = 0)) tvD
  3481. ON tvD.ID = ttFC.ID_Parent
  3482. AND tvD.iType IN ( 0, 1, 2 )) TB2
  3483. ON TB2.ID_Teams = ttTJ.ID_Teams
  3484. LEFT JOIN MCYD a
  3485. ON a.CCYDH = ttTJ.cCode_AProduct where dRealRptDate BETWEEN '{$this->start_time()}' AND '{$this->end_time()}')JobTB
  3486. GROUP BY 生产日期,
  3487. JobTB.ID,
  3488. 机台名称,
  3489. 班组名称) tbu
  3490. LEFT JOIN(SELECT a.ID_Calendar,
  3491. Sum(CASE
  3492. WHEN a.cCode_Item = 'U0073' THEN a.iState
  3493. ELSE 0
  3494. END) AS 改规次数,
  3495. Sum(CASE
  3496. WHEN a.cCode_Item = 'U0073' THEN a.iState
  3497. ELSE 0
  3498. END) * 1 AS 改规时间,
  3499. Sum(CASE
  3500. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2))
  3501. ELSE 0
  3502. END) AS 周保养时间,
  3503. Sum(CASE
  3504. WHEN a.cCode_Item = 'U0070' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3))
  3505. ELSE 0
  3506. END) AS 做零活时间
  3507. FROM sctMJobFeedBackDetail_AttFB a
  3508. LEFT JOIN MCYD b
  3509. ON a.cProductBillCode = b.CCYDH
  3510. /*改规U0036,改规U0064,骑订改规矩U0075,骑订项目U0076,周保养U0040*/
  3511. GROUP BY ID_Calendar) AttFB1
  3512. ON TBU.ID_Calendar = AttFB1.ID_Calendar
  3513. LEFT JOIN(SELECT ID_Calendar,
  3514. 班次时长,
  3515. 最晚时间
  3516. FROM (SELECT a.ID_Calendar,
  3517. CASE
  3518. WHEN a.cCode_Item = 'U0077' THEN Cast(a.nAmount_Item AS DECIMAL(4, 2))
  3519. ELSE 0
  3520. END AS 班次时长,
  3521. a.dTime AS 最晚时间,
  3522. Row_number()
  3523. OVER (
  3524. PARTITION BY a.ID_Calendar
  3525. ORDER BY a.dTime DESC) AS RowNumber
  3526. FROM sctMJobFeedBackDetail_AttFB a
  3527. WHERE a.cCode_Item = 'U0077') AS subquery
  3528. WHERE RowNumber = 1) AttFB2
  3529. ON TBU.ID_Calendar = AttFB2.ID_Calendar
  3530. GROUP BY TBU.ID_Calendar,
  3531. TBU.机台名称,
  3532. TBU.班组名称,
  3533. TBU.生产日期,
  3534. TBU.备注,
  3535. TBU.定额,
  3536. AttFB2.班次时长,
  3537. AttFB1.做零活时间,
  3538. AttFB1.周保养时间,
  3539. ATTFB1.改规次数,
  3540. AttFB1.改规时间) TBU2
  3541. WHERE TBU2.机台名称 LIKE '%胶订精密达%'
  3542. GROUP BY TBU2.机台名称,
  3543. TBU2.班组名称,
  3544. TBU2.生产日期,
  3545. TBU2.备注,
  3546. TBU2.定额,
  3547. TBU2.考核工时,
  3548. TBU2.班组产量,
  3549. TBU2.产量折算工时,
  3550. TBU2.改规次数,
  3551. TBU2.改规时间,
  3552. TBU2.做零活时间,
  3553. TBU2.周保养时间,
  3554. TBU2.有效工作时间
  3555. UNION ALL
  3556. SELECT TBU2.机台名称,
  3557. TBU2.班组名称,
  3558. TBU2.生产日期,
  3559. TBU2.备注,
  3560. TBU2.定额,
  3561. TBU2.考核工时 考核工作时间,
  3562. TBU2.班组产量,
  3563. TBU2.产量折算工时,
  3564. TBU2.改规次数,
  3565. TBU2.改规时间,
  3566. TBU2.做零活时间,
  3567. TBU2.周保养时间,
  3568. TBU2.有效工作时间
  3569. FROM (SELECT TBU.ID_Calendar,
  3570. TBU.机台名称,
  3571. TBU.班组名称,
  3572. TBU.生产日期,
  3573. TBU.备注,
  3574. TBU.定额,
  3575. IFNULL(AttFB2.班次时长, 10) 考核工时,
  3576. Sum(TBU.班组产量) 班组产量,
  3577. Sum(TBU.产量折算工时) 产量折算工时,
  3578. IFNULL(ATTFB1.改规次数, 0) AS 改规次数,
  3579. IFNULL(AttFB1.改规时间, 0) AS 改规时间,
  3580. IFNULL(AttFB1.做零活时间, 0) 做零活时间,
  3581. IFNULL(AttFB1.周保养时间, 0) 周保养时间,
  3582. ( Sum(TBU.产量折算工时) + IFNULL(AttFB1.改规时间, 0)
  3583. + IFNULL(AttFB1.做零活时间, 0)
  3584. + IFNULL( AttFB1.周保养时间, 0) ) 有效工作时间
  3585. FROM (SELECT JobTB.ID ID_Calendar,
  3586. JobTB.机台名称,
  3587. JobTB.班组名称,
  3588. JobTB.生产日期,
  3589. DATE_FORMAT(JobTB.生产日期,'%W') 备注,
  3590. Avg(JobTB.定额) 定额,
  3591. Sum(班组产量) 班组产量,
  3592. Cast(Sum(产量折算工时) AS DECIMAL(5, 2)) 产量折算工时
  3593. FROM (SELECT ttFC.ID,
  3594. CONVERT (dRealRptDate,CHAR(10)) 生产日期,
  3595. TB2.ID_Teams,
  3596. TB2.cJtmc 机台名称,
  3597. CASE
  3598. WHEN a.CYJLX LIKE '%课本%'
  3599. OR a.CYJLX LIKE'%教辅%' THEN 4500
  3600. ELSE 3000
  3601. END 定额,
  3602. TB2.cName_Team 班组名称,
  3603. -- TB2.机长 机长,
  3604. ttFc.ID_TeamManRecord,
  3605. ttTJ.cCode_ProductOrder AS cCode_ProductOrder,
  3606. ttTJ.cCode_JobM AS cCode_JobM,
  3607. ttTJ.cName_JobM AS cName_JobM,
  3608. ttTj.cType_AProduct,
  3609. a.CYJLX,
  3610. ttTJ.nOutput_R AS 班组产量,
  3611. CASE
  3612. WHEN a.CYJLX LIKE'%课本%'
  3613. OR a.CYJLX LIKE'%教辅%' THEN Cast(Round(ttTJ.nOutput_R / 4500, 3)AS DECIMAL(6, 3))
  3614. ELSE Cast(Round(ttTJ.nOutput_R / 3000, 3)AS DECIMAL(6, 3))
  3615. END AS 产量折算工时
  3616. FROM scDayRpt_Teams_JobContent ttTJ
  3617. INNER JOIN scmachinejob b
  3618. ON b.ID = ttTJ.ID_JobM
  3619. LEFT JOIN scFactoryCalendar ttFC
  3620. ON ttTJ.id_scFactoryCalendar = ttFC.id
  3621. LEFT JOIN (SELECT CONVERT(CONVERT(ttDRpt_T.dRealRptDate,CHAR(10)),DATETIME) dRealRptDate,
  3622. ttT.cJtmc AS cJtmc,
  3623. ttT.cBanzuMc AS cName_Team,
  3624. ttT.cBmbh AS cBmbh,
  3625. ttT.cBmmc AS cbmmc,
  3626. ttDRpt_T.ID_WorkCenter,
  3627. ttT.cGzzxmc AS cgzzxmc,
  3628. tvD.cName AS cname,
  3629. ttS.cName AS cName_S,
  3630. ttDRpt_T.dOnDuty AS dStart,
  3631. ttDRpt_T.dOffDuty AS dEnd,
  3632. ttDRpt_T.nOutput_RZ AS nAmount_R,
  3633. IFNULL(ttDRpt_T.iDayRptStatus, -1) AS iDayRptStatus,
  3634. ttFC.ID AS ID_TC,
  3635. IFNULL(ttDRpt_T.ID, -1) AS ID_TDRpt,
  3636. ttDRpt_T.dstamp,
  3637. ttDRpt_T.id AS ID_Teams
  3638. FROM scFactoryCalendar ttFC
  3639. LEFT JOIN scShift ttS
  3640. ON ttS.ID = ttFC.id_scShift
  3641. LEFT JOIN (SELECT *,
  3642. CASE
  3643. WHEN CONVERT(dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  3644. FROM sysetup
  3645. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(dOnDuty,INTERVAL -1 DAY)
  3646. ELSE dOnDuty
  3647. END dRealRptDate
  3648. FROM scDayRpt_Teams) ttDRpt_T
  3649. ON ttDRpt_T.ID_Calendar = ttFC.ID
  3650. AND ttDRpt_T.iDayRptStatus >= 0
  3651. LEFT JOIN banzu ttT
  3652. ON ttT.banzuId = ttFC.id_Machine
  3653. LEFT JOIN (SELECT iType, ID, cCode, cName, iGzzxId, ID_BM, cbmbh, cbmmc, cType_Sys, iStop, cType_Dev, cShortName, iTypeWage,
  3654. iOverProductType
  3655. FROM (SELECT 0 AS iType, MKernel.ID, MKernel.cBh AS cCode, MKernel.cGzzxmc AS cName, MKernel.ID AS iGzzxId,
  3656. dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, Mkernel.cGzzxlx AS cType_Sys, MKernel.iStopUse AS iStop,
  3657. MKernel.cGzzxlx AS cType_Dev, MKernel.cShortName, 0 iTypeWage, 0 iOverProductType
  3658. FROM MKernel INNER JOIN
  3659. DZBM ON DZBM.cbmbh = MKernel.cBmbh
  3660. UNION
  3661. SELECT 1 AS iType, dzyssb.ID, dzyssb.csbbh AS cCode, dzyssb.csbmc AS cName, Mkernel.ID AS iGzzxId, dzBM.id AS ID_BM,
  3662. dzBM.cbmbh, dzBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, dzyssb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev,
  3663. dzyssb.cShortName, 0 iTypeWage, 0 iOverProductType
  3664. FROM dzyssb INNER JOIN
  3665. MKernel ON MKernel.ID = dzyssb.ID_Center INNER JOIN
  3666. dzBM ON dzBM.cbmbh = MKernel.cBmbh
  3667. UNION
  3668. SELECT 2 AS iType, MKerJzmb.ID, MKerJzmb.cJzbh AS cCode, MKerJzmb.cJzmc AS cName, MKerJzmb.iGzzxId,
  3669. dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, MKerJzmb.iStopUse AS iStop,
  3670. dzyssb.csblb AS cType_Dev, MKerJzmb.cShortName, MKerJzmb.iType AS iTypeWage,
  3671. MKerJzmb.iOverProductType
  3672. FROM MKerJzmb INNER JOIN
  3673. MKernel ON MKernel.ID = MKerJzmb.iGzzxId INNER JOIN
  3674. DZBM ON DZBM.cbmbh = MKernel.cbmbh INNER JOIN
  3675. dzyssb ON dzyssb.id = MKerJzmb.ijzlxid
  3676. UNION
  3677. SELECT 3 AS iType, iywdwid AS ID, cywdwbh AS cCode, cdwmc AS cName, iywdwid AS iGzzxId, iywdwid AS ID_BM,
  3678. cywdwbh AS cbmbh, cdwmc AS cbmmc, '' AS cType_Sys,
  3679. CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop, '' AS cType_Dev, DZYWDW.cjc AS cShortName,
  3680. 0 iTypeWage, 0 iOverProductType
  3681. FROM dzywdw
  3682. WHERE bwjg = 1
  3683. UNION
  3684. SELECT 3 AS iType, - 1, '', '外厂资源', - 1, - 1 AS ID_BM, '' AS cbmbh, '' AS cbmmc, '' AS cType_Sys, 0 AS iStop, '' AS cType_Dev,
  3685. '外厂' AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType)scvDeviceAll
  3686. WHERE (iStop = 0)) tvD
  3687. ON tvD.ID = ttFC.ID_Parent
  3688. AND tvD.iType IN ( 0, 1, 2 )) TB2
  3689. ON TB2.ID_Teams = ttTJ.ID_Teams
  3690. LEFT JOIN MCYD a
  3691. ON a.CCYDH = ttTJ.cCode_AProduct where dRealRptDate BETWEEN '{$this->start_time()}' AND '{$this->end_time()}')JobTB
  3692. GROUP BY 生产日期,
  3693. JobTB.ID,
  3694. 机台名称,
  3695. 班组名称
  3696. ) tbu
  3697. LEFT JOIN(SELECT a.ID_Calendar,
  3698. Sum(CASE
  3699. WHEN a.cCode_Item = 'U0073' THEN a.iState
  3700. ELSE 0
  3701. END) AS 改规次数,
  3702. Sum(CASE
  3703. WHEN a.cCode_Item = 'U0073' THEN a.iState
  3704. ELSE 0
  3705. END) * 0.75 AS 改规时间,
  3706. Sum(CASE
  3707. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2))
  3708. ELSE 0
  3709. END) AS 周保养时间,
  3710. Sum(CASE
  3711. WHEN a.cCode_Item = 'U0070' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3))
  3712. ELSE 0
  3713. END) AS 做零活时间
  3714. FROM sctMJobFeedBackDetail_AttFB a
  3715. LEFT JOIN MCYD b
  3716. ON a.cProductBillCode = b.CCYDH
  3717. /*改规U0036,改规U0064,骑订改规矩U0075,骑订项目U0076,周保养U0040*/
  3718. GROUP BY ID_Calendar) AttFB1
  3719. ON TBU.ID_Calendar = AttFB1.ID_Calendar
  3720. LEFT JOIN(SELECT ID_Calendar,
  3721. 班次时长,
  3722. 最晚时间
  3723. FROM (SELECT a.ID_Calendar,
  3724. CASE
  3725. WHEN a.cCode_Item = 'U0077' THEN Cast(a.nAmount_Item AS DECIMAL(4, 2))
  3726. ELSE 0
  3727. END AS 班次时长,
  3728. a.dTime AS 最晚时间,
  3729. Row_number()
  3730. OVER (
  3731. PARTITION BY a.ID_Calendar
  3732. ORDER BY a.dTime DESC) AS RowNumber
  3733. FROM sctMJobFeedBackDetail_AttFB a
  3734. WHERE a.cCode_Item = 'U0077') AS subquery
  3735. WHERE RowNumber = 1) AttFB2
  3736. ON TBU.ID_Calendar = AttFB2.ID_Calendar
  3737. GROUP BY TBU.ID_Calendar,
  3738. TBU.机台名称,
  3739. TBU.班组名称,
  3740. TBU.生产日期,
  3741. TBU.备注,
  3742. TBU.定额,
  3743. AttFB2.班次时长,
  3744. AttFB1.做零活时间,
  3745. AttFB1.周保养时间,
  3746. ATTFB1.改规次数,
  3747. AttFB1.改规时间) TBU2
  3748. WHERE TBU2.机台名称 LIKE '%胶订精工%'
  3749. GROUP BY TBU2.机台名称,
  3750. TBU2.班组名称,
  3751. TBU2.生产日期,
  3752. TBU2.备注,
  3753. TBU2.定额,
  3754. TBU2.考核工时,
  3755. TBU2.班组产量,
  3756. TBU2.产量折算工时,
  3757. TBU2.改规次数,
  3758. TBU2.改规时间,
  3759. TBU2.做零活时间,
  3760. TBU2.周保养时间,
  3761. TBU2.有效工作时间
  3762. UNION ALL
  3763. SELECT TBU2.机台名称,
  3764. TBU2.班组名称,
  3765. TBU2.生产日期,
  3766. TBU2.备注,
  3767. TBU2.定额,
  3768. TBU2.考核工时 考核工作时间,
  3769. TBU2.班组产量,
  3770. TBU2.产量折算工时,
  3771. TBU2.改规次数,
  3772. TBU2.改规时间,
  3773. TBU2.做零活时间,
  3774. TBU2.周保养时间,
  3775. TBU2.有效工作时间
  3776. FROM (SELECT TBU.ID_Calendar,
  3777. TBU.机台名称,
  3778. TBU.班组名称,
  3779. TBU.生产日期,
  3780. TBU.备注,
  3781. TBU.定额,
  3782. IFNULL(AttFB2.班次时长, 10) 考核工时,
  3783. Sum(TBU.班组产量) 班组产量,
  3784. Sum(TBU.产量折算工时) 产量折算工时,
  3785. IFNULL(ATTFB1.改规次数, 0) AS 改规次数,
  3786. IFNULL(AttFB1.改规时间, 0) AS 改规时间,
  3787. IFNULL(AttFB1.做零活时间, 0) 做零活时间,
  3788. IFNULL(AttFB1.周保养时间, 0) 周保养时间,
  3789. ( Sum(TBU.产量折算工时) + IFNULL(AttFB1.改规时间, 0)
  3790. + IFNULL(AttFB1.做零活时间, 0)
  3791. + IFNULL( AttFB1.周保养时间, 0) ) 有效工作时间
  3792. FROM (SELECT JobTB.ID ID_Calendar,
  3793. JobTB.机台名称,
  3794. JobTB.班组名称,
  3795. JobTB.生产日期,
  3796. DATE_FORMAT(JobTB.生产日期,'%W') 备注,
  3797. Avg(JobTB.定额) 定额,
  3798. Sum(班组产量) 班组产量,
  3799. Cast(Sum(产量折算工时) AS DECIMAL(5, 2)) 产量折算工时
  3800. FROM (SELECT ttFC.ID,
  3801. CONVERT (dRealRptDate,CHAR(10)) 生产日期,
  3802. TB2.ID_Teams,
  3803. TB2.cJtmc 机台名称,
  3804. CASE
  3805. WHEN a.CYJLX LIKE '%课本%'
  3806. OR a.CYJLX LIKE'%教辅%' THEN 4500
  3807. ELSE 3000
  3808. END 定额,
  3809. TB2.cName_Team 班组名称,
  3810. ttFc.ID_TeamManRecord,
  3811. ttTJ.cCode_ProductOrder AS cCode_ProductOrder,
  3812. ttTJ.cCode_JobM AS cCode_JobM,
  3813. ttTJ.cName_JobM AS cName_JobM,
  3814. ttTj.cType_AProduct,
  3815. a.CYJLX,
  3816. ttTJ.nOutput_R AS 班组产量,
  3817. CASE
  3818. WHEN a.CYJLX LIKE'%课本%'
  3819. OR a.CYJLX LIKE'%教辅%' THEN Cast(Round(ttTJ.nOutput_R / 4500, 3)AS DECIMAL(6, 3))
  3820. ELSE Cast(Round(ttTJ.nOutput_R / 3000, 3)AS DECIMAL(6, 3))
  3821. END AS 产量折算工时
  3822. FROM scDayRpt_Teams_JobContent ttTJ
  3823. INNER JOIN scmachinejob b
  3824. ON b.ID = ttTJ.ID_JobM
  3825. LEFT JOIN scFactoryCalendar ttFC
  3826. ON ttTJ.id_scFactoryCalendar = ttFC.id
  3827. LEFT JOIN (SELECT CONVERT(CONVERT(ttDRpt_T.dRealRptDate,CHAR(10)),DATETIME) dRealRptDate,
  3828. ttT.cJtmc AS cJtmc,
  3829. ttT.cBanzuMc AS cName_Team,
  3830. ttT.cBmbh AS cBmbh,
  3831. ttT.cBmmc AS cbmmc,
  3832. ttDRpt_T.ID_WorkCenter,
  3833. ttT.cGzzxmc AS cgzzxmc,
  3834. tvD.cName AS cname,
  3835. ttS.cName AS cName_S,
  3836. ttDRpt_T.dOnDuty AS dStart,
  3837. ttDRpt_T.dOffDuty AS dEnd,
  3838. ttDRpt_T.nOutput_RZ AS nAmount_R,
  3839. IFNULL(ttDRpt_T.iDayRptStatus, -1) AS iDayRptStatus,
  3840. ttFC.ID AS ID_TC,
  3841. IFNULL(ttDRpt_T.ID, -1) AS ID_TDRpt,
  3842. ttDRpt_T.dstamp,
  3843. ttDRpt_T.id AS ID_Teams
  3844. FROM scFactoryCalendar ttFC
  3845. LEFT JOIN scShift ttS
  3846. ON ttS.ID = ttFC.id_scShift
  3847. LEFT JOIN (SELECT *,
  3848. CASE
  3849. WHEN CONVERT(dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  3850. FROM sysetup
  3851. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(dOnDuty,INTERVAL -1 DAY)
  3852. ELSE dOnDuty
  3853. END dRealRptDate
  3854. FROM scDayRpt_Teams) ttDRpt_T
  3855. ON ttDRpt_T.ID_Calendar = ttFC.ID
  3856. AND ttDRpt_T.iDayRptStatus >= 0
  3857. LEFT JOIN banzu ttT
  3858. ON ttT.banzuId = ttFC.id_Machine
  3859. LEFT JOIN (SELECT iType, ID, cCode, cName, iGzzxId, ID_BM, cbmbh, cbmmc, cType_Sys, iStop, cType_Dev, cShortName, iTypeWage,
  3860. iOverProductType
  3861. FROM (SELECT 0 AS iType, MKernel.ID, MKernel.cBh AS cCode, MKernel.cGzzxmc AS cName, MKernel.ID AS iGzzxId,
  3862. dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, Mkernel.cGzzxlx AS cType_Sys, MKernel.iStopUse AS iStop,
  3863. MKernel.cGzzxlx AS cType_Dev, MKernel.cShortName, 0 iTypeWage, 0 iOverProductType
  3864. FROM MKernel INNER JOIN
  3865. DZBM ON DZBM.cbmbh = MKernel.cBmbh
  3866. UNION
  3867. SELECT 1 AS iType, dzyssb.ID, dzyssb.csbbh AS cCode, dzyssb.csbmc AS cName, Mkernel.ID AS iGzzxId, dzBM.id AS ID_BM,
  3868. dzBM.cbmbh, dzBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, dzyssb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev,
  3869. dzyssb.cShortName, 0 iTypeWage, 0 iOverProductType
  3870. FROM dzyssb INNER JOIN
  3871. MKernel ON MKernel.ID = dzyssb.ID_Center INNER JOIN
  3872. dzBM ON dzBM.cbmbh = MKernel.cBmbh
  3873. UNION
  3874. SELECT 2 AS iType, MKerJzmb.ID, MKerJzmb.cJzbh AS cCode, MKerJzmb.cJzmc AS cName, MKerJzmb.iGzzxId,
  3875. dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, MKerJzmb.iStopUse AS iStop,
  3876. dzyssb.csblb AS cType_Dev, MKerJzmb.cShortName, MKerJzmb.iType AS iTypeWage,
  3877. MKerJzmb.iOverProductType
  3878. FROM MKerJzmb INNER JOIN
  3879. MKernel ON MKernel.ID = MKerJzmb.iGzzxId INNER JOIN
  3880. DZBM ON DZBM.cbmbh = MKernel.cbmbh INNER JOIN
  3881. dzyssb ON dzyssb.id = MKerJzmb.ijzlxid
  3882. UNION
  3883. SELECT 3 AS iType, iywdwid AS ID, cywdwbh AS cCode, cdwmc AS cName, iywdwid AS iGzzxId, iywdwid AS ID_BM,
  3884. cywdwbh AS cbmbh, cdwmc AS cbmmc, '' AS cType_Sys,
  3885. CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop, '' AS cType_Dev, DZYWDW.cjc AS cShortName,
  3886. 0 iTypeWage, 0 iOverProductType
  3887. FROM dzywdw
  3888. WHERE bwjg = 1
  3889. UNION
  3890. SELECT 3 AS iType, - 1, '', '外厂资源', - 1, - 1 AS ID_BM, '' AS cbmbh, '' AS cbmmc, '' AS cType_Sys, 0 AS iStop, '' AS cType_Dev,
  3891. '外厂' AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType)scvDeviceAll
  3892. WHERE (iStop = 0)) tvD
  3893. ON tvD.ID = ttFC.ID_Parent
  3894. AND tvD.iType IN ( 0, 1, 2 )) TB2
  3895. ON TB2.ID_Teams = ttTJ.ID_Teams
  3896. LEFT JOIN MCYD a
  3897. ON a.CCYDH = ttTJ.cCode_AProduct where dRealRptDate BETWEEN '{$this->start_time()}' AND '{$this->end_time()}')JobTB
  3898. GROUP BY 生产日期,
  3899. JobTB.ID,
  3900. 机台名称,
  3901. 班组名称
  3902. ) tbu
  3903. LEFT JOIN(SELECT a.ID_Calendar,
  3904. Sum(CASE
  3905. WHEN a.cCode_Item = 'U0073' THEN a.iState
  3906. ELSE 0
  3907. END) AS 改规次数,
  3908. Sum(CASE
  3909. WHEN a.cCode_Item = 'U0073' THEN a.iState
  3910. ELSE 0
  3911. END) * 0.67 AS 改规时间,
  3912. Sum(CASE
  3913. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2))
  3914. ELSE 0
  3915. END) AS 周保养时间,
  3916. Sum(CASE
  3917. WHEN a.cCode_Item = 'U0070' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3))
  3918. ELSE 0
  3919. END) AS 做零活时间
  3920. FROM sctMJobFeedBackDetail_AttFB a
  3921. LEFT JOIN MCYD b
  3922. ON a.cProductBillCode = b.CCYDH
  3923. /*改规U0036,改规U0064,骑订改规矩U0075,骑订项目U0076,周保养U0040*/
  3924. GROUP BY ID_Calendar) AttFB1
  3925. ON TBU.ID_Calendar = AttFB1.ID_Calendar
  3926. LEFT JOIN(SELECT ID_Calendar,
  3927. 班次时长,
  3928. 最晚时间
  3929. FROM (SELECT a.ID_Calendar,
  3930. CASE
  3931. WHEN a.cCode_Item = 'U0077' THEN Cast(a.nAmount_Item AS DECIMAL(4, 2))
  3932. ELSE 0
  3933. END AS 班次时长,
  3934. a.dTime AS 最晚时间,
  3935. Row_number()
  3936. OVER (
  3937. PARTITION BY a.ID_Calendar
  3938. ORDER BY a.dTime DESC) AS RowNumber
  3939. FROM sctMJobFeedBackDetail_AttFB a
  3940. WHERE a.cCode_Item = 'U0077') AS subquery
  3941. WHERE RowNumber = 1) AttFB2
  3942. ON TBU.ID_Calendar = AttFB2.ID_Calendar
  3943. GROUP BY TBU.ID_Calendar,
  3944. TBU.机台名称,
  3945. TBU.班组名称,
  3946. TBU.生产日期,
  3947. TBU.备注,
  3948. TBU.定额,
  3949. AttFB2.班次时长,
  3950. AttFB1.做零活时间,
  3951. AttFB1.周保养时间,
  3952. ATTFB1.改规次数,
  3953. AttFB1.改规时间) TBU2
  3954. WHERE TBU2.机台名称 LIKE '%胶订潮流%'
  3955. GROUP BY TBU2.机台名称,
  3956. TBU2.班组名称,
  3957. TBU2.生产日期,
  3958. TBU2.备注,
  3959. TBU2.定额,
  3960. TBU2.考核工时,
  3961. TBU2.班组产量,
  3962. TBU2.产量折算工时,
  3963. TBU2.改规次数,
  3964. TBU2.改规时间,
  3965. TBU2.做零活时间,
  3966. TBU2.周保养时间,
  3967. TBU2.有效工作时间)TBU
  3968. GROUP BY TBU.机台名称,
  3969. TBU.班组名称,
  3970. TBU.生产日期,
  3971. TBU.备注,
  3972. TBU.定额,
  3973. TBU.考核工作时间)TBU
  3974. WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}'
  3975. AND TBU.班组产量 > 0
  3976. GROUP BY TBU.机台名称,
  3977. TBU.班组名称
  3978. ORDER BY TBU.机台名称,
  3979. TBU.班组名称 DESC
  3980. ");
  3981. foreach($res4 as $k=>$v){
  3982. $res[$k]['完成率']=round($v['完成率']*100);
  3983. $res[$k]['班组名称']=$v['班组名称'];
  3984. $res[$k]['开机总次数']=$v['开机总次数'];
  3985. $res[$k]['完成次数']=$v['完成次数'];
  3986. }
  3987. $redis->set($redis_key, json_encode($res));
  3988. echo date("Y-m-d H:i:s").'胶订联动缓存 存进去了';
  3989. return json($res);
  3990. }
  3991. //骑马精装联动线
  3992. public function qmjz_scxl_redis(){
  3993. //设置redis缓存
  3994. $redis=redis();
  3995. $redis_key = md5('qmjz_scxl_redis');
  3996. //查询近30天
  3997. $start_time = date('Y-m-d', strtotime('-30 days'));
  3998. $end_time = date('Y-m-d', time());
  3999. //骑马
  4000. $res6 = Db::query("SELECT '{$start_time}' 提交起始日期,
  4001. '{$end_time}' 提交结束日期,
  4002. DATEDIFF(DATE_ADD('{$end_time}',INTERVAL 1 day),'{$start_time}') AS 统计周期,
  4003. TBU.机台名称,
  4004. TBU.班组名称,
  4005. (SELECT GROUP_CONCAT(DISTINCT aa.机长) FROM (SELECT TBU.机台名称,
  4006. TBU.班组名称,
  4007. TBU.机长,
  4008. TBU.生产日期
  4009. FROM (SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期,
  4010. TB1.机台名称,
  4011. TB1.班组名称,
  4012. TB1.机长 AS 机长
  4013. FROM (SELECT CASE
  4014. WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  4015. FROM sysetup
  4016. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  4017. ELSE ttt.dOnDuty
  4018. END 生产日期,
  4019. ttt.Name_Machine 机台名称,
  4020. ttt.Name_WorkGroup 班组名称,
  4021. DTp.cName 机长
  4022. FROM scDayRpt_Teams ttT
  4023. LEFT JOIN scDayRpt_Teams_People DTP
  4024. ON ttT.ID = DTP.ID_Teams
  4025. AND DTP.cStation = '机长'
  4026. WHERE ttt.nOutput_RZ > 0
  4027. GROUP BY ttt.dOnDuty,
  4028. ttt.Name_Machine,
  4029. ttt.Name_WorkGroup,
  4030. DTp.cName)TB1
  4031. WHERE TB1.机台名称 IN ( '骑马联动01号', '骑马联动02号', '骑马联动03号' )
  4032. GROUP BY TB1.生产日期,
  4033. TB1.机台名称,
  4034. TB1.班组名称,
  4035. TB1.机长)TBU
  4036. WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}'
  4037. GROUP BY TBU.机台名称,
  4038. TBU.班组名称,
  4039. TBU.机长,
  4040. TBU.生产日期)aa
  4041. WHERE aa.班组名称 = tbu.班组名称) AS 机长,
  4042. Cast(Sum(TBU.班组产量) AS SIGNED) AS 总产量,
  4043. Cast(Sum(TBU.有效工作时间) AS DECIMAL(6, 1)) AS 总工作时间,
  4044. Sum(TBU.考核工作时间) AS 总应工作时间,
  4045. Cast(Sum(TBU.班组产量) / ( Sum(TBU.考核工作时间) )AS SIGNED) AS 平均产量,
  4046. Sum(TBU.定额) / Count(*) AS 平均定额,
  4047. Count(*) AS 开机总次数,
  4048. Sum(CASE
  4049. WHEN TBU.效率分析 = '未完成' THEN 1
  4050. ELSE 0
  4051. END) AS 未完成次数,
  4052. Sum(CASE
  4053. WHEN TBU.效率分析 = '1' THEN 1
  4054. ELSE 0
  4055. END) AS 完成次数,
  4056. Cast(Cast(Sum(CASE
  4057. WHEN TBU.效率分析 = '1' THEN 1
  4058. ELSE 0
  4059. END)AS DECIMAL(2, 0)) / Count(*) AS DECIMAL(5, 2)) AS 完成率
  4060. FROM (
  4061. SELECT TBU.机台名称,
  4062. TBU.班组名称,
  4063. TBU.生产日期,
  4064. TBU.备注,
  4065. CASE
  4066. WHEN Sum(TBU.产量折算工时) + Sum(TBU.改规时间)
  4067. + Sum(TBU.周保养时间) + Sum(TBU.做零活时间) >= TBU.考核工时 THEN '1'
  4068. ELSE '未完成'
  4069. END 效率分析,
  4070. TBU.定额,
  4071. TBU.考核工时 考核工作时间,
  4072. Sum(TBU.班组产量) 班组产量,
  4073. Sum(TBU.产量折算工时) 产量折算工时,
  4074. Sum(TBU.改规次数) 改规次数,
  4075. Sum(TBU.改规时间) 改规时间,
  4076. Sum(TBU.做零活时间) 做零活时间,
  4077. Sum(TBU.周保养时间) 周保养时间,
  4078. Sum(TBU.产量折算工时) + Sum(TBU.改规时间)
  4079. + Sum(TBU.周保养时间) + Sum(TBU.做零活时间) 有效工作时间,
  4080. CASE
  4081. WHEN Sum(TBU.产量折算工时) + Sum(TBU.改规时间)
  4082. + Sum(TBU.周保养时间) + Sum(TBU.做零活时间) >= TBU.考核工时 THEN 100
  4083. ELSE Cast(( Sum(TBU.产量折算工时) + Sum(TBU.改规时间)
  4084. + Sum(TBU.周保养时间) + Sum(TBU.做零活时间) ) / TBU.考核工时 * 100 AS DECIMAL (4, 2))
  4085. END 完成百分比
  4086. FROM (SELECT ttt.Name_Machine 机台名称,
  4087. CONVERT(ttt.dRealRptDate,CHAR(10)) 生产日期,
  4088. DATE_FORMAT(ttt.dRealRptDate,'%W') 备注,
  4089. ttt.Name_WorkGroup 班组名称,
  4090. CASE
  4091. WHEN ttt.Name_Machine = '骑马联动01号' THEN 4000
  4092. WHEN ttt.Name_Machine = '骑马联动02号'THEN 4500
  4093. WHEN ttt.Name_Machine = '骑马联动03号'THEN 5000
  4094. ELSE 5000
  4095. END 定额,
  4096. ttt.nOutput_RZ 班组产量,
  4097. CASE
  4098. WHEN ttt.Name_Machine = '骑马联动01号' THEN Cast(ttt.nOutput_RZ / 4000 AS DECIMAL(5, 1))
  4099. WHEN ttt.Name_Machine = '骑马联动02号'THEN Cast(ttt.nOutput_RZ / 4500 AS DECIMAL(5, 1))
  4100. WHEN ttt.Name_Machine = '骑马联动03号'THEN Cast(ttt.nOutput_RZ / 5000 AS DECIMAL(5, 1))
  4101. ELSE Cast(ttt.nOutput_RZ / 5000 AS DECIMAL(5, 1))
  4102. END 产量折算工时,
  4103. IFNULL(AttFB2.班次时长, 10) 考核工时,
  4104. Sum(CASE
  4105. WHEN a.cCode_Item = 'U0075' THEN a.iReported
  4106. ELSE 0
  4107. END) AS 改规次数,
  4108. Sum(CASE
  4109. WHEN a.cCode_Item = 'U0075' THEN a.iReported
  4110. ELSE 0
  4111. END) * 0.5 AS 改规时间,
  4112. Sum(CASE
  4113. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3))
  4114. ELSE 0
  4115. END) AS 周保养时间,
  4116. Sum(CASE
  4117. WHEN a.cCode_Item = 'U0070' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3))
  4118. ELSE 0
  4119. END) AS 做零活时间
  4120. /*做零活U0070,上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/
  4121. FROM (SELECT *,
  4122. CASE
  4123. WHEN CONVERT(dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  4124. FROM sysetup
  4125. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(dOnDuty,INTERVAL -1 day)
  4126. ELSE dOnDuty
  4127. END dRealRptDate
  4128. FROM scDayRpt_Teams
  4129. WHERE iDayRptStatus >= 0) ttT /*iDayRptStatus=0未审核,iDayRptStatus=-10产量为0,iDayRptStatus=10正常*/
  4130. LEFT JOIN(SELECT ID_Calendar,
  4131. 班次时长,
  4132. 最晚时间
  4133. FROM (SELECT a.ID_Calendar,
  4134. CASE
  4135. WHEN a.cCode_Item = 'U0077' THEN Cast(a.nAmount_Item AS DECIMAL(4, 2))
  4136. ELSE 0
  4137. END AS 班次时长,
  4138. a.dTime AS 最晚时间,
  4139. Row_number()
  4140. OVER (
  4141. PARTITION BY a.ID_Calendar
  4142. ORDER BY a.dTime DESC) AS RowNumber
  4143. FROM sctMJobFeedBackDetail_AttFB a
  4144. WHERE a.cCode_Item = 'U0077') AS subquery
  4145. WHERE RowNumber = 1) AttFB2
  4146. ON ttT.ID_Calendar = AttFB2.ID_Calendar
  4147. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  4148. ON ttT.ID_Calendar = a.ID_Calendar
  4149. GROUP BY ttt.dRealRptDate,
  4150. ttt.Name_Machine,
  4151. ttT.id,
  4152. AttFB2.班次时长,
  4153. ttt.Name_WorkGroup,
  4154. ttt.nOutput_RZ)TBU
  4155. WHERE TBU.机台名称 IN( '骑马联动01号', '骑马联动02号', '骑马联动03号' )
  4156. GROUP BY TBU.机台名称,
  4157. TBU.班组名称,
  4158. TBU.生产日期,
  4159. TBU.备注,
  4160. TBU.定额,
  4161. TBU.考核工时
  4162. )TBU
  4163. WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}'
  4164. AND TBU.班组产量 > 0
  4165. GROUP BY TBU.机台名称,
  4166. TBU.班组名称
  4167. ORDER BY TBU.机台名称,
  4168. TBU.班组名称 DESC
  4169. ");
  4170. //精装联动
  4171. $res3 = Db::query("SELECT '{$start_time}' 提交起始日期,
  4172. '{$end_time}' 提交结束日期,
  4173. DATEDIFF(DATE_ADD('{$end_time}',INTERVAL 1 day),'{$start_time}') AS 统计周期,
  4174. TBU.机台名称,
  4175. TBU.班组名称,
  4176. (SELECT GROUP_CONCAT(DISTINCT aa.机长) FROM (SELECT TBU.机台名称,
  4177. TBU.班组名称,
  4178. TBU.机长,
  4179. TBU.生产日期
  4180. FROM (SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期,
  4181. TB1.机台名称,
  4182. TB1.班组名称,
  4183. TB1.机长 AS 机长
  4184. FROM (SELECT CASE
  4185. WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  4186. FROM sysetup
  4187. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  4188. ELSE ttt.dOnDuty
  4189. END 生产日期,
  4190. ttt.Name_Machine 机台名称,
  4191. ttt.Name_WorkGroup 班组名称,
  4192. DTp.cName 机长
  4193. FROM scDayRpt_Teams ttT
  4194. LEFT JOIN scDayRpt_Teams_People DTP
  4195. ON ttT.ID = DTP.ID_Teams
  4196. AND DTP.cStation = '机长'
  4197. WHERE ttt.nOutput_RZ > 0
  4198. AND ttT.iDayRptStatus >= 0
  4199. GROUP BY ttt.dOnDuty,
  4200. ttt.Name_Machine,
  4201. ttt.Name_WorkGroup,
  4202. DTp.cName)TB1
  4203. WHERE TB1.机台名称 = '精装联动线01号'
  4204. GROUP BY TB1.生产日期,
  4205. TB1.机台名称,
  4206. TB1.班组名称,
  4207. TB1.机长)TBU
  4208. WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}'
  4209. GROUP BY TBU.机台名称,
  4210. TBU.班组名称,
  4211. TBU.机长,
  4212. TBU.生产日期)aa
  4213. WHERE aa.班组名称 = tbu.班组名称) AS 机长,
  4214. Cast(Sum(TBU.班组产量) AS SIGNED) AS 总产量,
  4215. Cast(Sum(TBU.有效工作时间) AS DECIMAL(6, 1)) AS 总工作时间,
  4216. Sum(TBU.考核工作时间) AS 总应工作时间,
  4217. Cast(Sum(TBU.班组产量) / ( Sum(TBU.考核工作时间) )AS SIGNED) AS 平均产量,
  4218. Sum(TBU.定额) / Count(*) AS 平均定额,
  4219. Count(*) AS 开机总次数,
  4220. Sum(CASE
  4221. WHEN TBU.效率分析 = '未完成' THEN 1
  4222. ELSE 0
  4223. END) AS 未完成次数,
  4224. Sum(CASE
  4225. WHEN TBU.效率分析 = '1' THEN 1
  4226. ELSE 0
  4227. END) AS 完成次数,
  4228. Cast(Cast(Sum(CASE
  4229. WHEN TBU.效率分析 = '1' THEN 1
  4230. ELSE 0
  4231. END)AS DECIMAL(2, 0)) / Count(*) AS DECIMAL(5, 2)) AS 完成率
  4232. FROM (SELECT TBU.机台名称,
  4233. TBU.班组名称,
  4234. TBU.生产日期,
  4235. TBU.备注,
  4236. CASE
  4237. WHEN Sum(TBU.产量折算工时) + Sum(TBU.改规时间)
  4238. + Sum(TBU.周保养时间) + Sum(TBU.做零活时间) >= TBU.考核工时 THEN '1'
  4239. ELSE '未完成'
  4240. END 效率分析,
  4241. TBU.定额,
  4242. TBU.考核工时 考核工作时间,
  4243. Sum(TBU.班组产量) 班组产量,
  4244. Sum(TBU.产量折算工时) 产量折算工时,
  4245. Sum(TBU.改规次数) 改规次数,
  4246. Sum(TBU.改规时间) 改规时间,
  4247. Sum(TBU.做零活时间) 做零活时间,
  4248. Sum(TBU.周保养时间) 周保养时间,
  4249. Sum(TBU.产量折算工时) + Sum(TBU.改规时间)
  4250. + Sum(TBU.周保养时间) + Sum(TBU.做零活时间) 有效工作时间,
  4251. CASE
  4252. WHEN Sum(TBU.产量折算工时) + Sum(TBU.改规时间)
  4253. + Sum(TBU.周保养时间) + Sum(TBU.做零活时间) >= TBU.考核工时 THEN 100
  4254. ELSE Cast(( Sum(TBU.产量折算工时) + Sum(TBU.改规时间)
  4255. + Sum(TBU.周保养时间) + Sum(TBU.做零活时间) ) / TBU.考核工时 * 100 AS DECIMAL (4, 2))
  4256. END 完成百分比
  4257. FROM (SELECT ttt.Name_Machine 机台名称,
  4258. CONVERT(ttt.dRealRptDate,CHAR(10)) 生产日期,
  4259. DATE_FORMAT(ttt.dRealRptDate,'%W') 备注,
  4260. ttt.Name_WorkGroup 班组名称,
  4261. 900 定额,
  4262. ttt.nOutput_RZ 班组产量,
  4263. Cast(ttt.nOutput_RZ / 900 AS DECIMAL(5, 1)) 产量折算工时,
  4264. IFNULL(AttFB2.班次时长, 10) 考核工时,
  4265. Sum(CASE
  4266. WHEN a.cCode_Item = 'U0071' THEN a.iReported
  4267. ELSE 0
  4268. END) AS 改规次数,
  4269. Sum(CASE
  4270. WHEN a.cCode_Item = 'U0071' THEN a.iReported
  4271. ELSE 0
  4272. END) * 1 AS 改规时间,
  4273. Sum(CASE
  4274. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3))
  4275. ELSE 0
  4276. END) AS 周保养时间,
  4277. Sum(CASE
  4278. WHEN a.cCode_Item = 'U0070' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3))
  4279. ELSE 0
  4280. END) AS 做零活时间
  4281. /*做零活U0070,上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/
  4282. FROM (SELECT *,
  4283. CASE
  4284. WHEN CONVERT(dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  4285. FROM sysetup
  4286. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(dOnDuty,INTERVAL -1 day)
  4287. ELSE dOnDuty
  4288. END dRealRptDate
  4289. FROM scDayRpt_Teams
  4290. WHERE iDayRptStatus >= 0) ttT /*iDayRptStatus=0未审核,iDayRptStatus=-10产量为0,iDayRptStatus=10正常*/
  4291. LEFT JOIN(SELECT ID_Calendar,
  4292. 班次时长,
  4293. 最晚时间
  4294. FROM (SELECT a.ID_Calendar,
  4295. CASE
  4296. WHEN a.cCode_Item = 'U0077' THEN Cast(a.nAmount_Item AS DECIMAL(4, 2))
  4297. ELSE 0
  4298. END AS 班次时长,
  4299. a.dTime AS 最晚时间,
  4300. Row_number()
  4301. OVER (
  4302. PARTITION BY a.ID_Calendar
  4303. ORDER BY a.dTime DESC) AS RowNumber
  4304. FROM sctMJobFeedBackDetail_AttFB a
  4305. WHERE a.cCode_Item = 'U0077') AS subquery
  4306. WHERE RowNumber = 1) AttFB2
  4307. ON ttT.ID_Calendar = AttFB2.ID_Calendar
  4308. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  4309. ON ttT.ID_Calendar = a.ID_Calendar
  4310. GROUP BY ttt.dRealRptDate,
  4311. ttt.Name_Machine,
  4312. ttT.id,
  4313. AttFB2.班次时长,
  4314. ttt.Name_WorkGroup,
  4315. ttt.nOutput_RZ)TBU
  4316. WHERE TBU.机台名称 LIKE '%精装联动%'
  4317. GROUP BY TBU.机台名称,
  4318. TBU.班组名称,
  4319. TBU.生产日期,
  4320. TBU.考核工时,
  4321. TBU.备注,
  4322. TBU.定额)TBU
  4323. WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}'
  4324. AND TBU.班组产量 > 0
  4325. GROUP BY TBU.机台名称,
  4326. TBU.班组名称
  4327. ORDER BY TBU.机台名称,
  4328. TBU.班组名称 DESC
  4329. ");
  4330. $result =array_merge($res6,$res3);
  4331. foreach($result as $k=>$v){
  4332. $res[$k]['完成率']=round($v['完成率']*100);
  4333. $res[$k]['班组名称']=$v['班组名称'];
  4334. $res[$k]['开机总次数']=$v['开机总次数'];
  4335. $res[$k]['完成次数']=$v['完成次数'];
  4336. }
  4337. $redis->set($redis_key, json_encode($res));
  4338. echo date("Y-m-d H:i:s").'轮转缓存 存进去了';
  4339. return json($res);
  4340. }
  4341. //近30天班组生产效率完成情况 生产异常情况统计->接口
  4342. public function machine_scxl(){
  4343. $postData = input('post.dependence.item.name');
  4344. $redisKeys = [
  4345. "单双色印刷机台" => 'dssj_scxl_redis',
  4346. "四色印刷机" => 'ssj_scxl_redis',
  4347. "标规轮转印刷机" => 'bglz_scxl_redis',
  4348. "大规轮转印刷机" => 'dglz_scxl_redis',
  4349. "胶订联动线" => 'jdld_scxl_redis',
  4350. "骑马精装联动线" => 'qmjz_scxl_redis'
  4351. ];
  4352. $redis_key = isset($redisKeys[$postData]) ? md5($redisKeys[$postData]) : md5('dssj_scxl_redis');
  4353. $redis = redis();
  4354. $result = json_decode($redis->get($redis_key), true);
  4355. if (!$result) {
  4356. // 处理没有数据的情况
  4357. $response_data = [
  4358. 'status' => 1,
  4359. 'msg' => '没有找到相关数据',
  4360. 'data' => []
  4361. ];
  4362. return json_encode($response_data, JSON_UNESCAPED_UNICODE);
  4363. }
  4364. // 进行数据排序和截取
  4365. $staval = 1;
  4366. if($postData == '单双色印刷机台') {
  4367. $staval = 1;
  4368. } else if($postData == '四色印刷机') {
  4369. $staval = 2;
  4370. } else if($postData == '标规轮转印刷机') {
  4371. $staval = 3;
  4372. } else if($postData == '大规轮转印刷机') {
  4373. $staval = 4;
  4374. } else if($postData == '胶订联动线') {
  4375. $staval = 5;
  4376. } else if($postData == '骑马精装联动线') {
  4377. $staval = 6;
  4378. }
  4379. $machineSerialData = Db::table('machineneserial')->where('staval', '=', $staval)->select();
  4380. $machineSerials = array_column($machineSerialData, 'serial', 'machinen_name');
  4381. usort($result, function($a, $b) use ($machineSerials) {
  4382. $aMatchedSerial = $bMatchedSerial = 0;
  4383. foreach ($machineSerials as $machinen_name => $serial) {
  4384. if (stripos($a["班组名称"], $machinen_name) !== false) {
  4385. $aMatchedSerial = $serial;
  4386. }
  4387. if (stripos($b["班组名称"], $machinen_name) !== false) {
  4388. $bMatchedSerial = $serial;
  4389. }
  4390. }
  4391. return $aMatchedSerial - $bMatchedSerial;
  4392. });
  4393. // 只按完成率排序,并截取前100项
  4394. $result = array_slice($result, 0, 100);
  4395. // 格式化数据
  4396. $categories = array_column($result, '班组名称');
  4397. $values = array_column($result, '完成率');
  4398. $kjsum = array_column($result, '开机总次数');
  4399. $wcsum = array_column($result, '完成次数');
  4400. // 构建响应数据
  4401. $response_data = [
  4402. 'status' => 0,
  4403. 'msg' => '',
  4404. 'data' => [
  4405. 'categories' => $categories,
  4406. 'series' => [
  4407. [
  4408. 'name' => '完成率',
  4409. 'data' => $values,
  4410. 'type' => 'line',
  4411. "yAxisIndex" => 1
  4412. ],
  4413. [
  4414. 'name' => '开机总次数',
  4415. 'data' => $kjsum,
  4416. 'type' => 'bar',
  4417. "yAxisIndex" => 0
  4418. ],
  4419. [
  4420. 'name' => '完成次数',
  4421. 'data' => $wcsum,
  4422. 'type' => 'bar',
  4423. "yAxisIndex" => 0
  4424. ]
  4425. ]
  4426. ]
  4427. ];
  4428. // 返回 JSON 数据
  4429. return json($response_data);
  4430. }
  4431. //2.1平版印刷机昨日生产料率分析(查询前一天数据)缓存
  4432. public function yester_pb_redis(){
  4433. $redis=redis();
  4434. $redis_key = md5('yester_pb_redis');
  4435. $ztday = date("Y-m-d",strtotime("-1 day"));
  4436. $sql = "SELECT DATE_FORMAT(tt.生产日期,'%Y-%m-%d') 生产日期,
  4437. -- tt.生产日期,
  4438. -- tt.机台名称,
  4439. tt.班组名称,
  4440. tt.机长,
  4441. tt.定额,
  4442. CASE
  4443. WHEN ( Sum(tt.产量折算时间) + Sum(tt.改墨时间) + Sum(tt.上版时间)
  4444. + Sum(tt.周保养时间) ) >= tt.考核工作时间 THEN '已完成'
  4445. ELSE '未完成'
  4446. END 效率分析,
  4447. Cast(CASE
  4448. WHEN ( Sum(tt.产量折算时间) + Sum(tt.改墨时间) + Sum(tt.上版时间)
  4449. + Sum(tt.周保养时间) ) >= tt.考核工作时间 THEN '100'
  4450. ELSE ( Sum(tt.产量折算时间) + Sum(tt.改墨时间) + Sum(tt.上版时间)
  4451. + Sum(tt.周保养时间) ) / tt.考核工作时间 * 100
  4452. END AS SIGNED) 完成百分比,
  4453. -- Sum(tt.实际工作时间) 实际工作时间,
  4454. Sum(tt.班组产量) 班组产量
  4455. -- Sum(tt.产量折算时间) 产量折算时间,
  4456. -- Sum(tt.改墨次数) 改墨次数,
  4457. -- Sum(tt.改墨时间) 改墨时间,
  4458. -- Sum(tt.上版块数) 上版块数,
  4459. -- Sum(tt.上版时间) 上版时间,
  4460. -- Sum(tt.周保养时间) 周保养时间,
  4461. -- Sum(tt.有效工作时间) 有效工作时间,
  4462. -- tt.考核工作时间
  4463. FROM (SELECT CONVERT (TB1.生产日期, CHAR) 生产日期,
  4464. 1 AS 序号,
  4465. TB1.机台名称,
  4466. TB1.定额,
  4467. TB1.班组名称,
  4468. TB1.机长 AS 机长,
  4469. Sum(TB1.实际工作时间) 实际工作时间,
  4470. Sum(TB1.班组产量) 班组产量,
  4471. Cast(Sum(TB1.班组产量) / 5500 AS DECIMAL(8, 2)) 产量折算时间,
  4472. Sum(TB1.改墨次数) 改墨次数,
  4473. Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(8, 2)) AS 改墨时间,
  4474. Sum(TB1.上版块数) 上版块数,
  4475. Cast(Sum(TB1.上版块数) * 10 / 60.00 AS DECIMAL(8, 2)) AS 上版时间,
  4476. Sum(TB1.周保养时间) 周保养时间,
  4477. Cast(Sum(TB1.班组产量) / 5500 AS DECIMAL(8, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间,
  4478. 10 AS 考核工作时间
  4479. FROM (SELECT CASE
  4480. WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  4481. FROM sysetup
  4482. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  4483. ELSE ttt.dOnDuty
  4484. END 生产日期,
  4485. ttt.Name_Machine 机台名称,
  4486. ttt.Name_WorkGroup 班组名称,
  4487. 5500 定额,
  4488. (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b
  4489. WHERE b.ID_Teams = ttT.ID
  4490. AND b.cStation = '机长') 机长,
  4491. ttt.nOutput_RZ 班组产量,
  4492. Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(8, 2)) 实际工作时间,
  4493. Sum(CASE
  4494. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  4495. ELSE 0
  4496. END) AS 上版次数,
  4497. Sum(CASE
  4498. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  4499. ELSE 0
  4500. END) AS 上版块数,
  4501. Sum(CASE
  4502. WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type
  4503. ELSE 0
  4504. END) AS 改墨次数,
  4505. Sum(CASE
  4506. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  4507. ELSE 0
  4508. END) AS 改规次数,
  4509. Sum(CASE
  4510. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3))
  4511. ELSE 0
  4512. END) AS 周保养时间
  4513. /***上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040***/
  4514. FROM scDayRpt_Teams ttT
  4515. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  4516. ON ttT.ID_Calendar = a.ID_Calendar
  4517. LEFT JOIN sctJFBActive b
  4518. ON b.ID = a.ID_Act
  4519. WHERE ttT.iDayRptStatus >=0
  4520. GROUP BY ttt.dOnDuty,
  4521. ttt.Name_Machine,
  4522. ttT.id,
  4523. ttt.Name_WorkGroup,
  4524. ttt.nOutput_RZ,
  4525. ttt.iWorkingHours)TB1
  4526. WHERE LEFT(TB1.机台名称, 3) = 'BB机'
  4527. OR TB1.机台名称 IN ( '海德堡SM1号', '海德堡SM2号' )
  4528. GROUP BY TB1.生产日期,
  4529. TB1.机台名称,
  4530. TB1.班组名称,
  4531. TB1.机长,
  4532. TB1.定额,
  4533. TB1.班组产量,
  4534. TB1.实际工作时间
  4535. UNION ALL
  4536. SELECT CONVERT (TB1.生产日期, CHAR) 生产日期,
  4537. 2 AS 序号,
  4538. TB1.机台名称,
  4539. TB1.定额,
  4540. TB1.班组名称,
  4541. TB1.机长 AS 机长,
  4542. Sum(TB1.实际工作时间) 实际工作时间,
  4543. Sum(TB1.班组产量) 班组产量,
  4544. Cast(Sum(TB1.班组产量) / 8000 AS DECIMAL(5, 2)) 产量折算时间,
  4545. Sum(TB1.改墨次数) 改墨次数,
  4546. Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(5, 2)) AS 改墨时间,
  4547. Sum(TB1.上版块数) 上版块数,
  4548. Cast(Sum(TB1.上版块数) * 10 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  4549. Sum(TB1.周保养时间) 周保养时间,
  4550. Cast(Sum(TB1.班组产量) / 8000 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间,
  4551. 10 AS 考核工作时间
  4552. FROM (SELECT CASE
  4553. WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  4554. FROM sysetup
  4555. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  4556. ELSE ttt.dOnDuty
  4557. END 生产日期,
  4558. ttt.Name_Machine 机台名称,
  4559. ttt.Name_WorkGroup 班组名称,
  4560. (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b
  4561. WHERE b.ID_Teams = ttT.ID
  4562. AND b.cStation = '机长') 机长,
  4563. 8000 定额,
  4564. ttt.nOutput_RZ 班组产量,
  4565. Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(5, 2)) 实际工作时间,
  4566. Sum(CASE
  4567. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  4568. ELSE 0
  4569. END) AS 上版次数,
  4570. Sum(CASE
  4571. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  4572. ELSE 0
  4573. END) AS 上版块数,
  4574. Sum(CASE
  4575. WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type
  4576. ELSE 0
  4577. END) AS 改墨次数,
  4578. Sum(CASE
  4579. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  4580. ELSE 0
  4581. END) AS 改规次数,
  4582. Sum(CASE
  4583. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3))
  4584. ELSE 0
  4585. END) AS 周保养时间
  4586. -- 上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040
  4587. FROM scDayRpt_Teams ttT
  4588. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  4589. ON ttT.ID_Calendar = a.ID_Calendar
  4590. LEFT JOIN sctJFBActive b
  4591. ON b.ID = a.ID_Act
  4592. WHERE ttT.iDayRptStatus >= 0
  4593. GROUP BY ttt.dOnDuty,
  4594. ttt.Name_Machine,
  4595. ttT.id,
  4596. ttt.Name_WorkGroup,
  4597. ttt.nOutput_RZ,
  4598. ttt.iWorkingHours)TB1
  4599. WHERE TB1.机台名称 IN( '四色机02号机', '海德堡5+L 01号机', '海德堡01号机', '三菱机02号机', '三菱机01号机' )
  4600. GROUP BY TB1.生产日期,
  4601. TB1.机台名称,
  4602. TB1.班组名称,
  4603. TB1.机长,
  4604. TB1.定额,
  4605. TB1.班组产量,
  4606. TB1.实际工作时间
  4607. UNION ALL
  4608. SELECT CONVERT (TB1.生产日期, CHAR) 生产日期,
  4609. 3 AS 序号,
  4610. TB1.机台名称,
  4611. TB1.定额,
  4612. TB1.班组名称,
  4613. TB1.机长 AS 机长,
  4614. Sum(TB1.实际工作时间) 实际工作时间,
  4615. Sum(TB1.班组产量) 班组产量,
  4616. Cast(Sum(TB1.班组产量) / 7000 AS DECIMAL(5, 3)) 产量折算时间,
  4617. Sum(TB1.改墨次数) 改墨次数,
  4618. Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(5, 3)) AS 改墨时间,
  4619. Sum(TB1.上版块数) 上版块数,
  4620. Cast(Sum(TB1.上版块数) * 10 / 60.00 AS DECIMAL(5, 3)) AS 上版时间,
  4621. Sum(TB1.周保养时间) 周保养时间,
  4622. Cast(Sum(TB1.班组产量) / 7000 AS DECIMAL(5, 3)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间,
  4623. 10 AS 考核工作时间
  4624. FROM (SELECT CASE
  4625. WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  4626. FROM sysetup
  4627. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  4628. ELSE ttt.dOnDuty
  4629. END 生产日期,
  4630. ttt.Name_Machine 机台名称,
  4631. ttt.Name_WorkGroup 班组名称,
  4632. 7000 定额,
  4633. (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b
  4634. WHERE b.ID_Teams = ttT.ID
  4635. AND b.cStation = '机长') 机长,
  4636. ttt.nOutput_RZ 班组产量,
  4637. Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(5, 2)) 实际工作时间,
  4638. Sum(CASE
  4639. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  4640. ELSE 0
  4641. END) AS 上版次数,
  4642. Sum(CASE
  4643. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  4644. ELSE 0
  4645. END) AS 上版块数,
  4646. Sum(CASE
  4647. WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type
  4648. ELSE 0
  4649. END) AS 改墨次数,
  4650. Sum(CASE
  4651. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  4652. ELSE 0
  4653. END) AS 改规次数,
  4654. Sum(CASE
  4655. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3))
  4656. ELSE 0
  4657. END) AS 周保养时间
  4658. -- 上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040
  4659. FROM scDayRpt_Teams ttT
  4660. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  4661. ON ttT.ID_Calendar = a.ID_Calendar
  4662. LEFT JOIN sctJFBActive b
  4663. ON b.ID = a.ID_Act
  4664. WHERE ttT.iDayRptStatus >= 0
  4665. GROUP BY ttt.dOnDuty,
  4666. ttt.Name_Machine,
  4667. ttT.id,
  4668. ttt.iWorkingHours,
  4669. ttt.Name_WorkGroup,
  4670. ttt.nOutput_RZ)TB1
  4671. WHERE TB1.机台名称 = '小森八色01号机'
  4672. GROUP BY TB1.生产日期,
  4673. TB1.机台名称,
  4674. TB1.班组名称,
  4675. TB1.机长,
  4676. TB1.定额,
  4677. TB1.班组产量,
  4678. TB1.实际工作时间
  4679. UNION ALL
  4680. SELECT CONVERT (TB1.生产日期, CHAR) 生产日期,
  4681. 4 AS 序号,
  4682. TB1.机台名称,
  4683. TB1.定额,
  4684. TB1.班组名称,
  4685. TB1.机长 AS 机长,
  4686. Sum(TB1.实际工作时间) 实际工作时间,
  4687. Sum(TB1.班组产量) 班组产量,
  4688. Cast(Sum(TB1.班组产量) / 10000 AS DECIMAL(5, 2)) 产量折算时间,
  4689. Sum(TB1.改墨次数) 改墨次数,
  4690. Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(5, 2)) AS 改墨时间,
  4691. Sum(TB1.上版块数) 上版块数,
  4692. Cast(Sum(TB1.上版块数) * 2.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  4693. Sum(TB1.周保养时间) 周保养时间,
  4694. Cast(Sum(TB1.班组产量) / 10000 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 2.5 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间,
  4695. 12 AS 考核工作时间
  4696. FROM (SELECT CASE
  4697. WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  4698. FROM sysetup
  4699. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  4700. ELSE ttt.dOnDuty
  4701. END 生产日期,
  4702. ttt.Name_Machine 机台名称,
  4703. ttt.Name_WorkGroup 班组名称,
  4704. 10000 定额,
  4705. (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b
  4706. WHERE b.ID_Teams = ttT.ID
  4707. AND b.cStation = '机长') 机长,
  4708. ttt.nOutput_RZ 班组产量,
  4709. Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(5, 2)) 实际工作时间,
  4710. Sum(CASE
  4711. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  4712. ELSE 0
  4713. END) AS 上版次数,
  4714. Sum(CASE
  4715. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  4716. ELSE 0
  4717. END) AS 上版块数,
  4718. Sum(CASE
  4719. WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type
  4720. ELSE 0
  4721. END) AS 改墨次数,
  4722. Sum(CASE
  4723. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  4724. ELSE 0
  4725. END) AS 改规次数,
  4726. Sum(CASE
  4727. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3))
  4728. ELSE 0
  4729. END) AS 周保养时间
  4730. -- 上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040
  4731. FROM scDayRpt_Teams ttT
  4732. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  4733. ON ttT.ID_Calendar = a.ID_Calendar
  4734. LEFT JOIN sctJFBActive b
  4735. ON b.ID = a.ID_Act
  4736. WHERE ttT.iDayRptStatus >= 0
  4737. GROUP BY ttt.dOnDuty,
  4738. ttt.Name_Machine,
  4739. ttT.id,
  4740. ttt.iWorkingHours,
  4741. ttt.Name_WorkGroup,
  4742. ttt.nOutput_RZ)TB1
  4743. WHERE TB1.机台名称 = '小森八色02号机'
  4744. GROUP BY TB1.生产日期,
  4745. TB1.机台名称,
  4746. TB1.班组名称,
  4747. TB1.机长,
  4748. TB1.定额,
  4749. TB1.班组产量,
  4750. TB1.实际工作时间)tt
  4751. WHERE tt.生产日期 >= '{$ztday}'
  4752. AND tt.班组产量 > 0
  4753. GROUP BY tt.生产日期,
  4754. tt.序号,
  4755. tt.机台名称,
  4756. tt.班组名称,
  4757. tt.机长,
  4758. tt.定额,
  4759. tt.实际工作时间,
  4760. tt.考核工作时间
  4761. ORDER BY 完成百分比 desc,
  4762. tt.序号,
  4763. tt.机台名称,
  4764. tt.班组名称 ";
  4765. $res = Db::query($sql);
  4766. // echo "<pre>";print_r($list);echo "</pre>";die;
  4767. $redis->set($redis_key, json_encode($res));
  4768. echo date("Y-m-d H:i:s").' 平版印刷机昨日生产料率分析 存进去了';
  4769. return $res;
  4770. }
  4771. //2.1平版印刷机昨日生产料率分析
  4772. public function yester_pb(){
  4773. $redis=redis();
  4774. $list = json_decode($redis->get(md5('yester_pb_redis')), true);
  4775. $result['columns']=[
  4776. ['name'=>'日期','id'=>'rq','width'=>'11','autoWrap'=>"true",'textAlign'=>'left'],
  4777. ['name'=>'班组名称','id'=>'bzmc','width'=>'24','autoWrap'=>"true",'textAlign'=>'left'],
  4778. ['name'=>'机长','id'=>'jz','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'],
  4779. ['name'=>'定额','id'=>'dl','width'=>'16','autoWrap'=>"true",'textAlign'=>'left'],
  4780. ['name'=>'班组产量','id'=>'bzcl','width'=>'11','autoWrap'=>"true",'textAlign'=>'left'],
  4781. ['name'=>'生产效率分析','id'=>'scxlfx','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'],
  4782. ['name'=>'完成百分比','id'=>'wcbfb','width'=>'12','autoWrap'=>"true",'textAlign'=>'left']
  4783. ];
  4784. foreach($list as $k=>$v){
  4785. $result['rows'][$k]['rq']=$v['生产日期'];
  4786. $result['rows'][$k]['bzmc']=$v['班组名称'];
  4787. $result['rows'][$k]['jz']=$v['机长'];
  4788. $result['rows'][$k]['dl']=$v['定额'];
  4789. $result['rows'][$k]['bzcl']=round($v['班组产量']);
  4790. $result['rows'][$k]['scxlfx']=$v['效率分析'];
  4791. $result['rows'][$k]['wcbfb']=round($v['完成百分比']);
  4792. }
  4793. if($list==[]){
  4794. $result['rows'][0]['rq']='';
  4795. $result['rows'][0]['bzmc']='';
  4796. $result['rows'][0]['jz']='';
  4797. $result['rows'][0]['dl']='';
  4798. $result['rows'][0]['bzcl']='';
  4799. $result['rows'][0]['scxlfx']='';
  4800. $result['rows'][0]['wcbfb']='';
  4801. }
  4802. $res['status']=0;
  4803. $res['msg']='';
  4804. $res['data']=$result;
  4805. return json($res);
  4806. }
  4807. //2.2装订印刷机昨日生产料率分析(查询前一天数据)缓存
  4808. public function yester_zd_redis(){
  4809. $redis=redis();
  4810. $redis_key = md5('yester_zd_redis');
  4811. $ztday = date("Y-m-d",strtotime("-1 day"));
  4812. $sql = "
  4813. SELECT DATE_FORMAT(tt.生产日期,'%Y-%m-%d') 生产日期,
  4814. tt.班组名称,
  4815. tt.机长,
  4816. tt.定额,
  4817. tt.班组产量,
  4818. tt.生产效率分析,
  4819. tt.完成百分比
  4820. FROM(
  4821. SELECT
  4822. TBU.机台名称,
  4823. TBU.班组名称,
  4824. TBU.机长,
  4825. TBU.生产日期,
  4826. TBU.备注,
  4827. CASE
  4828. WHEN Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) >= TBU.考核工时 THEN
  4829. '已完成' ELSE '未完成'
  4830. END 生产效率分析,
  4831. TBU.定额,
  4832. TBU.考核工时 考核工作时间,
  4833. Sum( TBU.班组产量 ) 班组产量,
  4834. Sum( TBU.产量折算工时 ) 产量折算工时,
  4835. Sum( TBU.改规次数 ) 改规次数,
  4836. Sum( TBU.改规时间 ) 改规时间,
  4837. Sum( TBU.做零活时间 ) 做零活时间,
  4838. Sum( TBU.周保养时间 ) 周保养时间,
  4839. Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) 有效工作时间,
  4840. CASE
  4841. WHEN Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) >= TBU.考核工时 THEN
  4842. 100 ELSE Cast(
  4843. ( Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) ) / TBU.考核工时 * 100 AS DECIMAL ( 4, 2 )
  4844. )
  4845. END 完成百分比
  4846. FROM
  4847. (
  4848. SELECT
  4849. ttt.Name_Machine 机台名称,
  4850. CONVERT ( ttt.dRealRptDate, CHAR) 生产日期,
  4851. DATE_FORMAT( ttt.dRealRptDate, '%W' ) 备注,-- Datename(WEEKDAY, ttt.dRealRptDate) 备注,
  4852. ttt.Name_WorkGroup 班组名称,
  4853. ( SELECT GROUP_CONCAT( b.cName ) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttT.ID AND b.cStation = '机长' ) 机长,
  4854. '900' 定额,
  4855. ttt.nOutput_RZ 班组产量,
  4856. Cast( ttt.nOutput_RZ / 900 AS DECIMAL ( 5, 1 ) ) 产量折算工时,
  4857. IFNULL( AttFB2.班次时长, 10 ) 考核工时,
  4858. Sum( CASE WHEN a.cCode_Item = 'U0071' THEN a.iReported ELSE 0 END ) AS 改规次数,
  4859. Sum( CASE WHEN a.cCode_Item = 'U0071' THEN a.iReported ELSE 0 END ) * 1 AS 改规时间,
  4860. Sum( CASE WHEN a.cCode_Item = 'U0040' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 周保养时间,
  4861. Sum( CASE WHEN a.cCode_Item = 'U0070' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 做零活时间
  4862. FROM
  4863. (
  4864. SELECT
  4865. *,
  4866. CASE
  4867. WHEN CONVERT ( dOnDuty, CHAR ) < ( SELECT IFNULL( csetvalue, '00:00' ) + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin' ) THEN
  4868. DATE_ADD( dOnDuty, INTERVAL - 1 DAY ) ELSE dOnDuty
  4869. END dRealRptDate
  4870. FROM
  4871. scDayRpt_Teams
  4872. WHERE
  4873. iDayRptStatus >= 0
  4874. ) ttT
  4875. LEFT JOIN (
  4876. SELECT
  4877. ID_Calendar,
  4878. 班次时长,
  4879. 最晚时间
  4880. FROM
  4881. (
  4882. SELECT
  4883. a.ID_Calendar,
  4884. CASE
  4885. WHEN a.cCode_Item = 'U0077' THEN
  4886. Cast( a.nAmount_Item AS DECIMAL ( 4, 2 ) ) ELSE 0
  4887. END AS 班次时长,
  4888. a.dTime AS 最晚时间,
  4889. Row_number ( ) OVER ( PARTITION BY a.ID_Calendar ORDER BY a.dTime DESC ) AS RowNumber
  4890. FROM
  4891. sctMJobFeedBackDetail_AttFB a
  4892. WHERE
  4893. a.cCode_Item = 'U0077'
  4894. ) AS subquery
  4895. WHERE
  4896. RowNumber = 1
  4897. ) AttFB2 ON ttT.ID_Calendar = AttFB2.ID_Calendar
  4898. LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar
  4899. GROUP BY
  4900. ttt.dRealRptDate,
  4901. ttt.Name_Machine,
  4902. ttT.id,
  4903. AttFB2.班次时长,
  4904. ttt.Name_WorkGroup,
  4905. ttt.nOutput_RZ) TBU
  4906. WHERE
  4907. TBU.机台名称 LIKE '%精装联动%'
  4908. GROUP BY
  4909. TBU.机台名称,
  4910. TBU.班组名称,
  4911. TBU.机长,
  4912. TBU.生产日期,
  4913. TBU.考核工时,
  4914. TBU.备注,
  4915. TBU.定额 UNION ALL
  4916. SELECT
  4917. TBU.机台名称,
  4918. TBU.班组名称,
  4919. TBU.机长,
  4920. TBU.生产日期,
  4921. TBU.备注,
  4922. CASE
  4923. WHEN Sum( TBU.有效工作时间 ) >= TBU.考核工作时间 THEN
  4924. '已完成' ELSE '未完成'
  4925. END AS 生产效率分析,
  4926. TBU.定额,
  4927. TBU.考核工作时间,
  4928. CONVERT ( Sum( TBU.班组产量 ), SIGNED ) 班组产量,
  4929. Sum( TBU.产量折算工时 ) 产量折算工时,
  4930. Sum( TBU.改规次数 ) 改规次数,
  4931. Sum( TBU.改规时间 ) 改规时间,
  4932. Sum( TBU.做零活时间 ) 做零活时间,
  4933. Sum( TBU.周保养时间 ) 周保养时间,
  4934. Sum( TBU.有效工作时间 ) 有效工作时间,
  4935. Cast(
  4936. CASE
  4937. WHEN Sum( TBU.有效工作时间 ) / TBU.考核工作时间 >= 1 THEN
  4938. 100 ELSE ( Sum( TBU.有效工作时间 ) / TBU.考核工作时间 ) * 100
  4939. END AS DECIMAL ( 5, 2 )
  4940. ) 完成百分比
  4941. FROM(SELECT
  4942. TBU2.机台名称,
  4943. TBU2.班组名称,
  4944. TBU2.机长,
  4945. TBU2.生产日期,
  4946. TBU2.备注,
  4947. TBU2.定额,
  4948. TBU2.考核工时 考核工作时间,
  4949. TBU2.班组产量,
  4950. TBU2.产量折算工时,
  4951. TBU2.改规次数,
  4952. TBU2.改规时间,
  4953. TBU2.做零活时间,
  4954. TBU2.周保养时间,
  4955. TBU2.有效工作时间
  4956. FROM(SELECT
  4957. TBU.ID_Calendar,
  4958. TBU.机台名称,
  4959. TBU.班组名称,
  4960. TBU.机长,
  4961. TBU.生产日期,
  4962. TBU.备注,
  4963. TBU.定额,
  4964. IFNULL( AttFB2.班次时长, 10 ) 考核工时,
  4965. Sum( TBU.班组产量 ) 班组产量,
  4966. Sum( TBU.产量折算工时 ) 产量折算工时,
  4967. IFNULL( ATTFB1.改规次数, 0 ) AS 改规次数,
  4968. IFNULL( AttFB1.改规时间, 0 ) AS 改规时间,
  4969. IFNULL( AttFB1.做零活时间, 0 ) 做零活时间,
  4970. IFNULL( AttFB1.周保养时间, 0 ) 周保养时间,
  4971. (Sum( TBU.产量折算工时 ) + IFNULL( AttFB1.改规时间, 0 ) + IFNULL( AttFB1.做零活时间, 0 ) + IFNULL( AttFB1.周保养时间, 0 ) ) 有效工作时间
  4972. FROM(SELECT
  4973. JobTB.ID ID_Calendar,
  4974. JobTB.机台名称,
  4975. JobTB.班组名称,
  4976. JobTB.机长,
  4977. JobTB.生产日期,
  4978. DATE_FORMAT( JobTB.生产日期, '%W' ) 备注,-- Datename(WEEKDAY, JobTB.生产日期) 备注,
  4979. JobTB.定额 定额,
  4980. Sum( JobTB.班组产量 ) 班组产量,
  4981. Cast( Sum( 产量折算工时 ) AS DECIMAL ( 5, 2 ) ) 产量折算工时,
  4982. 12 AS 考核工时
  4983. FROM(SELECT
  4984. ttFC.ID,
  4985. CONVERT ( dRealRptDate, CHAR ) 生产日期,
  4986. TB2.ID_Teams,
  4987. TB2.cJtmc 机台名称,
  4988. '7500/7000/4500' 定额,
  4989. TB2.cName_Team 班组名称,
  4990. TB2.机长,
  4991. ttFc.ID_TeamManRecord,
  4992. ttTJ.cCode_ProductOrder AS cCode_ProductOrder,
  4993. ttTJ.cCode_JobM AS cCode_JobM,
  4994. ttTJ.cName_JobM AS cName_JobM,
  4995. ttTj.cType_AProduct,
  4996. a.NZWYZ,
  4997. ttTJ.nOutput_R AS 班组产量,
  4998. CASE WHEN a.CZWKB LIKE '大16%' THEN( CASE WHEN a.NZWYZ >= 9.75 THEN Cast( Round( ttTJ.nOutput_R / 4500, 3 ) AS DECIMAL ( 6, 3 ) ) ELSE Cast( Round( ttTJ.nOutput_R / 7000, 3 ) AS DECIMAL ( 6, 3 ) ) END) ELSE (CASE WHEN a.NZWYZ >= 9.75 THEN Cast( Round( ttTJ.nOutput_R / 4500, 3 ) AS DECIMAL ( 6, 3 ) ) ELSE Cast( Round( ttTJ.nOutput_R / 7500, 3 ) AS DECIMAL ( 6, 3 ) ) END ) END AS 产量折算工时
  4999. FROM scDayRpt_Teams_JobContent ttTJ
  5000. INNER JOIN scmachinejob b ON b.ID = ttTJ.ID_JobM
  5001. LEFT JOIN scFactoryCalendar ttFC ON ttTJ.id_scFactoryCalendar = ttFC.id
  5002. LEFT JOIN (
  5003. SELECT CONVERT
  5004. ( CONVERT ( ttDRpt_T.dRealRptDate, CHAR ), DATETIME ) dRealRptDate,
  5005. ttT.cJtmc AS cJtmc,
  5006. ttT.cBanzuMc AS cName_Team,
  5007. ttT.cBmbh AS cBmbh,
  5008. ttT.cBmmc AS cbmmc,
  5009. ttDRpt_T.ID_WorkCenter,
  5010. ttT.cGzzxmc AS cgzzxmc,
  5011. tvD.cName AS cname,
  5012. ttS.cName AS cName_S,
  5013. ttDRpt_T.dOnDuty AS dStart,
  5014. ttDRpt_T.dOffDuty AS dEnd,
  5015. ttDRpt_T.nOutput_RZ AS nAmount_R,
  5016. IFNULL( ttDRpt_T.iDayRptStatus, - 1 ) AS iDayRptStatus,
  5017. ttFC.ID AS ID_TC,
  5018. IFNULL( ttDRpt_T.ID, - 1 ) AS ID_TDRpt,
  5019. ttDRpt_T.dstamp,
  5020. ttDRpt_T.id AS ID_Teams,
  5021. ( SELECT GROUP_CONCAT( b.cName ) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttDRpt_T.id AND b.cStation = '机长' ) 机长
  5022. FROM
  5023. scFactoryCalendar ttFC
  5024. LEFT JOIN scShift ttS ON ttS.ID = ttFC.id_scShift
  5025. LEFT JOIN (
  5026. SELECT
  5027. *,
  5028. CASE
  5029. WHEN CONVERT ( dOnDuty, CHAR ) < ( SELECT IFNULL( csetvalue, '00:00' ) + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin' ) THEN
  5030. DATE_ADD( dOnDuty, INTERVAL - 1 DAY ) ELSE dOnDuty
  5031. END dRealRptDate
  5032. FROM
  5033. scDayRpt_Teams
  5034. ) ttDRpt_T ON ttDRpt_T.ID_Calendar = ttFC.ID
  5035. AND ttDRpt_T.iDayRptStatus >= 0
  5036. LEFT JOIN banzu ttT ON ttT.banzuId = ttFC.id_Machine
  5037. LEFT JOIN (
  5038. SELECT
  5039. scvDeviceAll.iType,
  5040. scvDeviceAll.ID,
  5041. scvDeviceAll.cCode,
  5042. scvDeviceAll.cName,
  5043. scvDeviceAll.iGzzxId,
  5044. scvDeviceAll.ID_BM,
  5045. scvDeviceAll.cbmbh,
  5046. scvDeviceAll.cbmmc,
  5047. scvDeviceAll.cType_Sys,
  5048. scvDeviceAll.iStop,
  5049. scvDeviceAll.cType_Dev,
  5050. scvDeviceAll.cShortName,
  5051. scvDeviceAll.iTypeWage,
  5052. iOverProductType
  5053. FROM
  5054. (
  5055. SELECT
  5056. 0 AS iType,
  5057. MKernel.ID,
  5058. MKernel.cBh AS cCode,
  5059. MKernel.cGzzxmc AS cName,
  5060. MKernel.ID AS iGzzxId,
  5061. dzBM.id AS ID_BM,
  5062. DZBM.cbmbh,
  5063. DZBM.cbmmc,
  5064. Mkernel.cGzzxlx AS cType_Sys,
  5065. MKernel.iStopUse AS iStop,
  5066. MKernel.cGzzxlx AS cType_Dev,
  5067. MKernel.cShortName,
  5068. 0 iTypeWage,
  5069. 0 iOverProductType
  5070. FROM
  5071. MKernel
  5072. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh UNION
  5073. SELECT
  5074. 1 AS iType,
  5075. dzyssb.ID,
  5076. dzyssb.csbbh AS cCode,
  5077. dzyssb.csbmc AS cName,
  5078. Mkernel.ID AS iGzzxId,
  5079. dzBM.id AS ID_BM,
  5080. dzBM.cbmbh,
  5081. dzBM.cbmmc,
  5082. MKernel.cGzzxlx AS cType_Sys,
  5083. dzyssb.iStopUse AS iStop,
  5084. dzyssb.csblb AS cType_Dev,
  5085. dzyssb.cShortName,
  5086. 0 iTypeWage,
  5087. 0 iOverProductType
  5088. FROM
  5089. dzyssb
  5090. INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center
  5091. INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh UNION
  5092. SELECT
  5093. 2 AS iType,
  5094. MKerJzmb.ID,
  5095. MKerJzmb.cJzbh AS cCode,
  5096. MKerJzmb.cJzmc AS cName,
  5097. MKerJzmb.iGzzxId,
  5098. dzBM.id AS ID_BM,
  5099. DZBM.cbmbh,
  5100. DZBM.cbmmc,
  5101. MKernel.cGzzxlx AS cType_Sys,
  5102. MKerJzmb.iStopUse AS iStop,
  5103. dzyssb.csblb AS cType_Dev,
  5104. MKerJzmb.cShortName,
  5105. MKerJzmb.iType AS iTypeWage,
  5106. MKerJzmb.iOverProductType
  5107. FROM
  5108. MKerJzmb
  5109. INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId
  5110. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh
  5111. INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid UNION
  5112. SELECT
  5113. 3 AS iType,
  5114. iywdwid AS ID,
  5115. cywdwbh AS cCode,
  5116. cdwmc AS cName,
  5117. iywdwid AS iGzzxId,
  5118. iywdwid AS ID_BM,
  5119. cywdwbh AS cbmbh,
  5120. cdwmc AS cbmmc,
  5121. '' AS cType_Sys,
  5122. CASE
  5123. WHEN DZYWDW.nstate < 0 THEN
  5124. 1 ELSE 0
  5125. END AS iStop,
  5126. '' AS cType_Dev,
  5127. DZYWDW.cjc AS cShortName,
  5128. 0 iTypeWage,
  5129. 0 iOverProductType
  5130. FROM
  5131. dzywdw
  5132. WHERE
  5133. bwjg = 1 UNION
  5134. SELECT
  5135. 3 AS iType,
  5136. - 1,
  5137. '',
  5138. '外厂资源',
  5139. - 1,
  5140. - 1 AS ID_BM,
  5141. '' AS cbmbh,
  5142. '' AS cbmmc,
  5143. '' AS cType_Sys,
  5144. 0 AS iStop,
  5145. '' AS cType_Dev,
  5146. '外厂' AS cShortName,
  5147. 0 AS iTypeWage,
  5148. 0 AS iOverProductType
  5149. ) scvDeviceAll
  5150. WHERE
  5151. ( iStop = 0 )
  5152. ) tvD ON tvD.ID = ttFC.ID_Parent
  5153. AND tvD.iType IN ( 0, 1, 2 )
  5154. ) TB2 ON TB2.ID_Teams = ttTJ.ID_Teams
  5155. LEFT JOIN MCYD a ON a.CCYDH = ttTJ.cCode_AProduct
  5156. ) JobTB
  5157. GROUP BY
  5158. 生产日期,
  5159. JobTB.ID,
  5160. 定额,
  5161. 机台名称,
  5162. 班组名称,
  5163. 机长
  5164. ) tbu
  5165. LEFT JOIN (
  5166. SELECT
  5167. a.ID_Calendar,
  5168. Sum( CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END ) AS 改规次数,
  5169. Sum( CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END ) * 1 AS 改规时间,
  5170. Sum( CASE WHEN a.cCode_Item = 'U0040' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 2 ) ) ELSE 0 END ) AS 周保养时间,
  5171. Sum( CASE WHEN a.cCode_Item = 'U0070' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 做零活时间
  5172. FROM
  5173. sctMJobFeedBackDetail_AttFB a
  5174. LEFT JOIN MCYD b ON a.cProductBillCode = b.CCYDH
  5175. GROUP BY
  5176. ID_Calendar
  5177. ) AttFB1 ON TBU.ID_Calendar = AttFB1.ID_Calendar
  5178. LEFT JOIN (
  5179. SELECT
  5180. ID_Calendar,
  5181. 班次时长,
  5182. 最晚时间
  5183. FROM
  5184. (
  5185. SELECT
  5186. a.ID_Calendar,
  5187. CASE
  5188. WHEN a.cCode_Item = 'U0077' THEN
  5189. Cast( a.nAmount_Item AS DECIMAL ( 4, 2 ) ) ELSE 0
  5190. END AS 班次时长,
  5191. a.dTime AS 最晚时间,
  5192. Row_number ( ) OVER ( PARTITION BY a.ID_Calendar ORDER BY a.dTime DESC ) AS RowNumber
  5193. FROM
  5194. sctMJobFeedBackDetail_AttFB a
  5195. WHERE
  5196. a.cCode_Item = 'U0077'
  5197. ) AS subquery
  5198. WHERE
  5199. RowNumber = 1
  5200. ) AttFB2 ON TBU.ID_Calendar = AttFB2.ID_Calendar
  5201. GROUP BY
  5202. TBU.ID_Calendar,
  5203. TBU.机台名称,
  5204. TBU.班组名称,
  5205. TBU.机长,
  5206. TBU.生产日期,
  5207. TBU.备注,
  5208. TBU.定额,
  5209. AttFB2.班次时长,
  5210. AttFB1.做零活时间,
  5211. AttFB1.周保养时间,
  5212. ATTFB1.改规次数,
  5213. AttFB1.改规时间
  5214. ) TBU2
  5215. WHERE
  5216. 1 = 1
  5217. AND TBU2.机台名称 LIKE '%胶订精密达%'
  5218. GROUP BY
  5219. TBU2.机台名称,
  5220. TBU2.班组名称,
  5221. TBU2.机长,
  5222. TBU2.生产日期,
  5223. TBU2.备注,
  5224. TBU2.定额,
  5225. TBU2.考核工时,
  5226. TBU2.班组产量,
  5227. TBU2.产量折算工时,
  5228. TBU2.改规次数,
  5229. TBU2.改规时间,
  5230. TBU2.做零活时间,
  5231. TBU2.周保养时间,
  5232. TBU2.有效工作时间 UNION ALL
  5233. SELECT
  5234. TBU2.机台名称,
  5235. TBU2.班组名称,
  5236. TBU2.机长,
  5237. TBU2.生产日期,
  5238. TBU2.备注,
  5239. TBU2.定额,
  5240. TBU2.考核工时 考核工作时间,
  5241. TBU2.班组产量,
  5242. TBU2.产量折算工时,
  5243. TBU2.改规次数,
  5244. TBU2.改规时间,
  5245. TBU2.做零活时间,
  5246. TBU2.周保养时间,
  5247. TBU2.有效工作时间
  5248. FROM
  5249. (
  5250. SELECT
  5251. TBU.ID_Calendar,
  5252. TBU.机台名称,
  5253. TBU.班组名称,
  5254. TBU.机长,
  5255. TBU.生产日期,
  5256. TBU.备注,
  5257. TBU.定额,
  5258. IFNULL( AttFB2.班次时长, 10 ) 考核工时,
  5259. Sum( TBU.班组产量 ) 班组产量,
  5260. Sum( TBU.产量折算工时 ) 产量折算工时,
  5261. IFNULL( ATTFB1.改规次数, 0 ) AS 改规次数,
  5262. IFNULL( AttFB1.改规时间, 0 ) AS 改规时间,
  5263. IFNULL( AttFB1.做零活时间, 0 ) 做零活时间,
  5264. IFNULL( AttFB1.周保养时间, 0 ) 周保养时间,
  5265. (
  5266. Sum( TBU.产量折算工时 ) + IFNULL( AttFB1.改规时间, 0 ) + IFNULL( AttFB1.做零活时间, 0 ) + IFNULL( AttFB1.周保养时间, 0 )
  5267. ) 有效工作时间
  5268. FROM
  5269. (
  5270. SELECT
  5271. JobTB.ID ID_Calendar,
  5272. JobTB.机台名称,
  5273. JobTB.班组名称,
  5274. JobTB.机长,
  5275. JobTB.生产日期,
  5276. DATE_FORMAT( JobTB.生产日期, '%W' ) 备注,-- Datename(WEEKDAY, JobTB.生产日期) 备注,
  5277. JobTB.定额 定额,
  5278. Sum( 班组产量 ) 班组产量,
  5279. Cast( Sum( 产量折算工时 ) AS DECIMAL ( 5, 2 ) ) 产量折算工时
  5280. FROM
  5281. (
  5282. SELECT
  5283. ttFC.ID,
  5284. CONVERT ( dRealRptDate, CHAR ) 生产日期,
  5285. TB2.ID_Teams,
  5286. TB2.cJtmc 机台名称,
  5287. '3000/4500' 定额,
  5288. TB2.cName_Team 班组名称,
  5289. TB2.机长 机长,
  5290. ttFc.ID_TeamManRecord,
  5291. ttTJ.cCode_ProductOrder AS cCode_ProductOrder,
  5292. ttTJ.cCode_JobM AS cCode_JobM,
  5293. ttTJ.cName_JobM AS cName_JobM,
  5294. ttTj.cType_AProduct,
  5295. a.CYJLX,
  5296. ttTJ.nOutput_R AS 班组产量,
  5297. CASE
  5298. WHEN a.CYJLX LIKE '%课本%'
  5299. OR a.CYJLX LIKE '%教辅%' THEN
  5300. Cast( Round( ttTJ.nOutput_R / 4500, 3 ) AS DECIMAL ( 6, 3 ) ) ELSE Cast( Round( ttTJ.nOutput_R / 3000, 3 ) AS DECIMAL ( 6, 3 ) )
  5301. END AS 产量折算工时
  5302. FROM
  5303. scDayRpt_Teams_JobContent ttTJ
  5304. INNER JOIN scmachinejob b ON b.ID = ttTJ.ID_JobM
  5305. LEFT JOIN scFactoryCalendar ttFC ON ttTJ.id_scFactoryCalendar = ttFC.id
  5306. LEFT JOIN (
  5307. SELECT CONVERT
  5308. ( CONVERT ( ttDRpt_T.dRealRptDate, CHAR ), DATETIME ) dRealRptDate,
  5309. ttT.cJtmc AS cJtmc,
  5310. ttT.cBanzuMc AS cName_Team,
  5311. ttT.cBmbh AS cBmbh,
  5312. ttT.cBmmc AS cbmmc,
  5313. ttDRpt_T.ID_WorkCenter,
  5314. ttT.cGzzxmc AS cgzzxmc,
  5315. tvD.cName AS cname,
  5316. ttS.cName AS cName_S,
  5317. ttDRpt_T.dOnDuty AS dStart,
  5318. ttDRpt_T.dOffDuty AS dEnd,
  5319. ttDRpt_T.nOutput_RZ AS nAmount_R,
  5320. IFNULL( ttDRpt_T.iDayRptStatus, - 1 ) AS iDayRptStatus,
  5321. ttFC.ID AS ID_TC,
  5322. IFNULL( ttDRpt_T.ID, - 1 ) AS ID_TDRpt,
  5323. ttDRpt_T.dstamp,
  5324. ttDRpt_T.id AS ID_Teams,
  5325. ( SELECT GROUP_CONCAT( b.cName ) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttDRpt_T.id AND b.cStation = '机长' ) 机长
  5326. FROM
  5327. scFactoryCalendar ttFC
  5328. LEFT JOIN scShift ttS ON ttS.ID = ttFC.id_scShift
  5329. LEFT JOIN (
  5330. SELECT
  5331. *,
  5332. CASE
  5333. WHEN CONVERT ( dOnDuty, CHAR ) < ( SELECT IFNULL( csetvalue, '00:00' ) + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin' ) THEN
  5334. DATE_ADD( dOnDuty, INTERVAL - 1 DAY ) ELSE dOnDuty
  5335. END dRealRptDate
  5336. FROM
  5337. scDayRpt_Teams
  5338. ) ttDRpt_T ON ttDRpt_T.ID_Calendar = ttFC.ID
  5339. AND ttDRpt_T.iDayRptStatus >= 0
  5340. LEFT JOIN banzu ttT ON ttT.banzuId = ttFC.id_Machine
  5341. LEFT JOIN (
  5342. SELECT
  5343. scvDeviceAll.iType,
  5344. scvDeviceAll.ID,
  5345. scvDeviceAll.cCode,
  5346. scvDeviceAll.cName,
  5347. scvDeviceAll.iGzzxId,
  5348. scvDeviceAll.ID_BM,
  5349. scvDeviceAll.cbmbh,
  5350. scvDeviceAll.cbmmc,
  5351. scvDeviceAll.cType_Sys,
  5352. scvDeviceAll.iStop,
  5353. scvDeviceAll.cType_Dev,
  5354. scvDeviceAll.cShortName,
  5355. scvDeviceAll.iTypeWage,
  5356. iOverProductType
  5357. FROM
  5358. (
  5359. SELECT
  5360. 0 AS iType,
  5361. MKernel.ID,
  5362. MKernel.cBh AS cCode,
  5363. MKernel.cGzzxmc AS cName,
  5364. MKernel.ID AS iGzzxId,
  5365. dzBM.id AS ID_BM,
  5366. DZBM.cbmbh,
  5367. DZBM.cbmmc,
  5368. Mkernel.cGzzxlx AS cType_Sys,
  5369. MKernel.iStopUse AS iStop,
  5370. MKernel.cGzzxlx AS cType_Dev,
  5371. MKernel.cShortName,
  5372. 0 iTypeWage,
  5373. 0 iOverProductType
  5374. FROM
  5375. MKernel
  5376. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh UNION
  5377. SELECT
  5378. 1 AS iType,
  5379. dzyssb.ID,
  5380. dzyssb.csbbh AS cCode,
  5381. dzyssb.csbmc AS cName,
  5382. Mkernel.ID AS iGzzxId,
  5383. dzBM.id AS ID_BM,
  5384. dzBM.cbmbh,
  5385. dzBM.cbmmc,
  5386. MKernel.cGzzxlx AS cType_Sys,
  5387. dzyssb.iStopUse AS iStop,
  5388. dzyssb.csblb AS cType_Dev,
  5389. dzyssb.cShortName,
  5390. 0 iTypeWage,
  5391. 0 iOverProductType
  5392. FROM
  5393. dzyssb
  5394. INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center
  5395. INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh UNION
  5396. SELECT
  5397. 2 AS iType,
  5398. MKerJzmb.ID,
  5399. MKerJzmb.cJzbh AS cCode,
  5400. MKerJzmb.cJzmc AS cName,
  5401. MKerJzmb.iGzzxId,
  5402. dzBM.id AS ID_BM,
  5403. DZBM.cbmbh,
  5404. DZBM.cbmmc,
  5405. MKernel.cGzzxlx AS cType_Sys,
  5406. MKerJzmb.iStopUse AS iStop,
  5407. dzyssb.csblb AS cType_Dev,
  5408. MKerJzmb.cShortName,
  5409. MKerJzmb.iType AS iTypeWage,
  5410. MKerJzmb.iOverProductType
  5411. FROM
  5412. MKerJzmb
  5413. INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId
  5414. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh
  5415. INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid UNION
  5416. SELECT
  5417. 3 AS iType,
  5418. iywdwid AS ID,
  5419. cywdwbh AS cCode,
  5420. cdwmc AS cName,
  5421. iywdwid AS iGzzxId,
  5422. iywdwid AS ID_BM,
  5423. cywdwbh AS cbmbh,
  5424. cdwmc AS cbmmc,
  5425. '' AS cType_Sys,
  5426. CASE
  5427. WHEN DZYWDW.nstate < 0 THEN
  5428. 1 ELSE 0
  5429. END AS iStop,
  5430. '' AS cType_Dev,
  5431. DZYWDW.cjc AS cShortName,
  5432. 0 iTypeWage,
  5433. 0 iOverProductType
  5434. FROM
  5435. dzywdw
  5436. WHERE
  5437. bwjg = 1 UNION
  5438. SELECT
  5439. 3 AS iType,
  5440. - 1,
  5441. '',
  5442. '外厂资源',
  5443. - 1,
  5444. - 1 AS ID_BM,
  5445. '' AS cbmbh,
  5446. '' AS cbmmc,
  5447. '' AS cType_Sys,
  5448. 0 AS iStop,
  5449. '' AS cType_Dev,
  5450. '外厂' AS cShortName,
  5451. 0 AS iTypeWage,
  5452. 0 AS iOverProductType
  5453. ) scvDeviceAll
  5454. WHERE
  5455. ( iStop = 0 )
  5456. ) tvD ON tvD.ID = ttFC.ID_Parent
  5457. AND tvD.iType IN ( 0, 1, 2 )
  5458. ) TB2 ON TB2.ID_Teams = ttTJ.ID_Teams
  5459. LEFT JOIN MCYD a ON a.CCYDH = ttTJ.cCode_AProduct
  5460. ) JobTB
  5461. GROUP BY
  5462. 生产日期,
  5463. JobTB.ID,
  5464. 定额,
  5465. 机台名称,
  5466. 班组名称,
  5467. 机长
  5468. ) tbu
  5469. LEFT JOIN (
  5470. SELECT
  5471. a.ID_Calendar,
  5472. Sum( CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END ) AS 改规次数,
  5473. Sum( CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END ) * 0.75 AS 改规时间,
  5474. Sum( CASE WHEN a.cCode_Item = 'U0040' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 2 ) ) ELSE 0 END ) AS 周保养时间,
  5475. Sum( CASE WHEN a.cCode_Item = 'U0070' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 做零活时间
  5476. FROM
  5477. sctMJobFeedBackDetail_AttFB a
  5478. LEFT JOIN MCYD b ON a.cProductBillCode = b.CCYDH
  5479. GROUP BY
  5480. ID_Calendar
  5481. ) AttFB1 ON TBU.ID_Calendar = AttFB1.ID_Calendar
  5482. LEFT JOIN (
  5483. SELECT
  5484. ID_Calendar,
  5485. 班次时长,
  5486. 最晚时间
  5487. FROM
  5488. (
  5489. SELECT
  5490. a.ID_Calendar,
  5491. CASE
  5492. WHEN a.cCode_Item = 'U0077' THEN
  5493. Cast( a.nAmount_Item AS DECIMAL ( 4, 2 ) ) ELSE 0
  5494. END AS 班次时长,
  5495. a.dTime AS 最晚时间,
  5496. Row_number ( ) OVER ( PARTITION BY a.ID_Calendar ORDER BY a.dTime DESC ) AS RowNumber
  5497. FROM
  5498. sctMJobFeedBackDetail_AttFB a
  5499. WHERE
  5500. a.cCode_Item = 'U0077'
  5501. ) AS subquery
  5502. WHERE
  5503. RowNumber = 1
  5504. ) AttFB2 ON TBU.ID_Calendar = AttFB2.ID_Calendar
  5505. GROUP BY
  5506. TBU.ID_Calendar,
  5507. TBU.机台名称,
  5508. TBU.班组名称,
  5509. TBU.机长,
  5510. TBU.生产日期,
  5511. TBU.备注,
  5512. TBU.定额,
  5513. AttFB2.班次时长,
  5514. AttFB1.做零活时间,
  5515. AttFB1.周保养时间,
  5516. ATTFB1.改规次数,
  5517. AttFB1.改规时间
  5518. ) TBU2
  5519. WHERE
  5520. 1 = 1
  5521. AND TBU2.机台名称 LIKE '%胶订精工%'
  5522. GROUP BY
  5523. TBU2.机台名称,
  5524. TBU2.班组名称,
  5525. TBU2.机长,
  5526. TBU2.生产日期,
  5527. TBU2.备注,
  5528. TBU2.定额,
  5529. TBU2.考核工时,
  5530. TBU2.班组产量,
  5531. TBU2.产量折算工时,
  5532. TBU2.改规次数,
  5533. TBU2.改规时间,
  5534. TBU2.做零活时间,
  5535. TBU2.周保养时间,
  5536. TBU2.有效工作时间 UNION ALL
  5537. SELECT
  5538. TBU2.机台名称,
  5539. TBU2.班组名称,
  5540. TBU2.机长,
  5541. TBU2.生产日期,
  5542. TBU2.备注,
  5543. TBU2.定额,
  5544. TBU2.考核工时 考核工作时间,
  5545. TBU2.班组产量,
  5546. TBU2.产量折算工时,
  5547. TBU2.改规次数,
  5548. TBU2.改规时间,
  5549. TBU2.做零活时间,
  5550. TBU2.周保养时间,
  5551. TBU2.有效工作时间
  5552. FROM
  5553. (
  5554. SELECT
  5555. TBU.ID_Calendar,
  5556. TBU.机台名称,
  5557. TBU.班组名称,
  5558. TBU.机长,
  5559. TBU.生产日期,
  5560. TBU.备注,
  5561. TBU.定额,
  5562. IFNULL( AttFB2.班次时长, 10 ) 考核工时,
  5563. Sum( TBU.班组产量 ) 班组产量,
  5564. Sum( TBU.产量折算工时 ) 产量折算工时,
  5565. IFNULL( ATTFB1.改规次数, 0 ) AS 改规次数,
  5566. IFNULL( AttFB1.改规时间, 0 ) AS 改规时间,
  5567. IFNULL( AttFB1.做零活时间, 0 ) 做零活时间,
  5568. IFNULL( AttFB1.周保养时间, 0 ) 周保养时间,
  5569. (
  5570. Sum( TBU.产量折算工时 ) + IFNULL( AttFB1.改规时间, 0 ) + IFNULL( AttFB1.做零活时间, 0 ) + IFNULL( AttFB1.周保养时间, 0 )
  5571. ) 有效工作时间
  5572. FROM
  5573. (
  5574. SELECT
  5575. JobTB.ID ID_Calendar,
  5576. JobTB.机台名称,
  5577. JobTB.班组名称,
  5578. JobTB.机长,
  5579. JobTB.生产日期,
  5580. DATE_FORMAT( JobTB.生产日期, '%W' ) 备注,-- Datename(WEEKDAY, JobTB.生产日期) 备注,
  5581. JobTB.定额 定额,
  5582. Sum( 班组产量 ) 班组产量,
  5583. Cast( Sum( 产量折算工时 ) AS DECIMAL ( 5, 2 ) ) 产量折算工时
  5584. FROM
  5585. (
  5586. SELECT
  5587. ttFC.ID,
  5588. CONVERT ( dRealRptDate, CHAR ) 生产日期,
  5589. TB2.ID_Teams,
  5590. TB2.cJtmc 机台名称,
  5591. '3000/4500' 定额,
  5592. TB2.cName_Team 班组名称,
  5593. TB2.机长 机长,
  5594. ttFc.ID_TeamManRecord,
  5595. ttTJ.cCode_ProductOrder AS cCode_ProductOrder,
  5596. ttTJ.cCode_JobM AS cCode_JobM,
  5597. ttTJ.cName_JobM AS cName_JobM,
  5598. ttTj.cType_AProduct,
  5599. a.CYJLX,
  5600. ttTJ.nOutput_R AS 班组产量,
  5601. CASE WHEN a.CYJLX LIKE '%课本%'
  5602. OR a.CYJLX LIKE '%教辅%' THEN
  5603. Cast( Round( ttTJ.nOutput_R / 4500, 3 ) AS DECIMAL ( 6, 3 ) ) ELSE Cast( Round( ttTJ.nOutput_R / 3000, 3 ) AS DECIMAL ( 6, 3 ) )
  5604. END AS 产量折算工时
  5605. FROM
  5606. scDayRpt_Teams_JobContent ttTJ
  5607. INNER JOIN scmachinejob b ON b.ID = ttTJ.ID_JobM
  5608. LEFT JOIN scFactoryCalendar ttFC ON ttTJ.id_scFactoryCalendar = ttFC.id
  5609. LEFT JOIN (
  5610. SELECT CONVERT
  5611. ( CONVERT ( ttDRpt_T.dRealRptDate, CHAR ), DATETIME ) dRealRptDate,
  5612. ttT.cJtmc AS cJtmc,
  5613. ttT.cBanzuMc AS cName_Team,
  5614. ttT.cBmbh AS cBmbh,
  5615. ttT.cBmmc AS cbmmc,
  5616. ttDRpt_T.ID_WorkCenter,
  5617. ttT.cGzzxmc AS cgzzxmc,
  5618. tvD.cName AS cname,
  5619. ttS.cName AS cName_S,
  5620. ttDRpt_T.dOnDuty AS dStart,
  5621. ttDRpt_T.dOffDuty AS dEnd,
  5622. ttDRpt_T.nOutput_RZ AS nAmount_R,
  5623. IFNULL( ttDRpt_T.iDayRptStatus, - 1 ) AS iDayRptStatus,
  5624. ttFC.ID AS ID_TC,
  5625. IFNULL( ttDRpt_T.ID, - 1 ) AS ID_TDRpt,
  5626. ttDRpt_T.dstamp,
  5627. ttDRpt_T.id AS ID_Teams,
  5628. ( SELECT GROUP_CONCAT( b.cName ) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttDRpt_T.id AND b.cStation = '机长' ) 机长
  5629. FROM scFactoryCalendar ttFC
  5630. LEFT JOIN scShift ttS ON ttS.ID = ttFC.id_scShift
  5631. LEFT JOIN (
  5632. SELECT *,
  5633. CASE WHEN CONVERT ( dOnDuty, CHAR ) < ( SELECT IFNULL( csetvalue, '00:00' ) + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin' ) THEN DATE_ADD( dOnDuty, INTERVAL - 1 DAY ) ELSE dOnDuty END dRealRptDate
  5634. FROM scDayRpt_Teams ) ttDRpt_T ON ttDRpt_T.ID_Calendar = ttFC.ID
  5635. AND ttDRpt_T.iDayRptStatus >= 0
  5636. LEFT JOIN banzu ttT ON ttT.banzuId = ttFC.id_Machine
  5637. LEFT JOIN ( SELECT
  5638. scvDeviceAll.iType,
  5639. scvDeviceAll.ID,
  5640. scvDeviceAll.cCode,
  5641. scvDeviceAll.cName,
  5642. scvDeviceAll.iGzzxId,
  5643. scvDeviceAll.ID_BM,
  5644. scvDeviceAll.cbmbh,
  5645. scvDeviceAll.cbmmc,
  5646. scvDeviceAll.cType_Sys,
  5647. scvDeviceAll.iStop,
  5648. scvDeviceAll.cType_Dev,
  5649. scvDeviceAll.cShortName,
  5650. scvDeviceAll.iTypeWage,
  5651. iOverProductType
  5652. FROM ( SELECT
  5653. 0 AS iType,
  5654. MKernel.ID,
  5655. MKernel.cBh AS cCode,
  5656. MKernel.cGzzxmc AS cName,
  5657. MKernel.ID AS iGzzxId,
  5658. dzBM.id AS ID_BM,
  5659. DZBM.cbmbh,
  5660. DZBM.cbmmc,
  5661. Mkernel.cGzzxlx AS cType_Sys,
  5662. MKernel.iStopUse AS iStop,
  5663. MKernel.cGzzxlx AS cType_Dev,
  5664. MKernel.cShortName,
  5665. 0 iTypeWage,
  5666. 0 iOverProductType
  5667. FROM MKernel
  5668. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh UNION
  5669. SELECT 1 AS iType,
  5670. dzyssb.ID,
  5671. dzyssb.csbbh AS cCode,
  5672. dzyssb.csbmc AS cName,
  5673. Mkernel.ID AS iGzzxId,
  5674. dzBM.id AS ID_BM,
  5675. dzBM.cbmbh,
  5676. dzBM.cbmmc,
  5677. MKernel.cGzzxlx AS cType_Sys,
  5678. dzyssb.iStopUse AS iStop,
  5679. dzyssb.csblb AS cType_Dev,
  5680. dzyssb.cShortName,
  5681. 0 iTypeWage,
  5682. 0 iOverProductType
  5683. FROM dzyssb
  5684. INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center
  5685. INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh UNION
  5686. SELECT
  5687. 2 AS iType,
  5688. MKerJzmb.ID,
  5689. MKerJzmb.cJzbh AS cCode,
  5690. MKerJzmb.cJzmc AS cName,
  5691. MKerJzmb.iGzzxId,
  5692. dzBM.id AS ID_BM,
  5693. DZBM.cbmbh,
  5694. DZBM.cbmmc,
  5695. MKernel.cGzzxlx AS cType_Sys,
  5696. MKerJzmb.iStopUse AS iStop,
  5697. dzyssb.csblb AS cType_Dev,
  5698. MKerJzmb.cShortName,
  5699. MKerJzmb.iType AS iTypeWage,
  5700. MKerJzmb.iOverProductType
  5701. FROM MKerJzmb
  5702. INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId
  5703. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh
  5704. INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid UNION
  5705. SELECT
  5706. 3 AS iType,
  5707. iywdwid AS ID,
  5708. cywdwbh AS cCode,
  5709. cdwmc AS cName,
  5710. iywdwid AS iGzzxId,
  5711. iywdwid AS ID_BM,
  5712. cywdwbh AS cbmbh,
  5713. cdwmc AS cbmmc,
  5714. '' AS cType_Sys,
  5715. CASE WHEN DZYWDW.nstate < 0 THEN
  5716. 1 ELSE 0
  5717. END AS iStop,
  5718. '' AS cType_Dev,
  5719. DZYWDW.cjc AS cShortName,
  5720. 0 iTypeWage,
  5721. 0 iOverProductType
  5722. FROM dzywdw
  5723. WHERE bwjg = 1 UNION
  5724. SELECT
  5725. 3 AS iType,
  5726. - 1,
  5727. '',
  5728. '外厂资源',
  5729. - 1,
  5730. - 1 AS ID_BM,
  5731. '' AS cbmbh,
  5732. '' AS cbmmc,
  5733. '' AS cType_Sys,
  5734. 0 AS iStop,
  5735. '' AS cType_Dev,
  5736. '外厂' AS cShortName,
  5737. 0 AS iTypeWage,
  5738. 0 AS iOverProductType
  5739. ) scvDeviceAll
  5740. WHERE
  5741. ( iStop = 0 )
  5742. ) tvD ON tvD.ID = ttFC.ID_Parent
  5743. AND tvD.iType IN ( 0, 1, 2 )
  5744. LEFT JOIN scDayRpt_Teams_People DTP ON ttDRpt_T.ID = DTP.ID_Teams
  5745. AND dtp.cStation = '机长'
  5746. ) TB2 ON TB2.ID_Teams = ttTJ.ID_Teams
  5747. LEFT JOIN MCYD a ON a.CCYDH = ttTJ.cCode_AProduct
  5748. ) JobTB
  5749. GROUP BY
  5750. 生产日期,
  5751. JobTB.ID,
  5752. 定额,
  5753. 机台名称,
  5754. 班组名称,
  5755. 机长 ) tbu
  5756. LEFT JOIN (
  5757. SELECT
  5758. a.ID_Calendar,
  5759. Sum( CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END ) AS 改规次数,
  5760. Sum( CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END ) * 0.67 AS 改规时间,
  5761. Sum( CASE WHEN a.cCode_Item = 'U0040' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 2 ) ) ELSE 0 END ) AS 周保养时间,
  5762. Sum( CASE WHEN a.cCode_Item = 'U0070' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 做零活时间
  5763. FROM sctMJobFeedBackDetail_AttFB a
  5764. LEFT JOIN MCYD b ON a.cProductBillCode = b.CCYDH
  5765. GROUP BY ID_Calendar ) AttFB1 ON TBU.ID_Calendar = AttFB1.ID_Calendar
  5766. LEFT JOIN (
  5767. SELECT
  5768. a.ID_Calendar,
  5769. CASE
  5770. WHEN a.cCode_Item = 'U0077' THEN
  5771. Cast( a.nAmount_Item AS DECIMAL ( 4, 2 ) ) ELSE 0
  5772. END AS 班次时长,
  5773. Max( a.dTime ) AS 最晚时间
  5774. FROM sctMJobFeedBackDetail_AttFB a
  5775. WHERE a.cCode_Item = 'U0077'
  5776. GROUP BY
  5777. a.ID_Calendar,
  5778. a.nAmount_Item,
  5779. a.cCode_Item
  5780. ) AttFB2 ON TBU.ID_Calendar = AttFB2.ID_Calendar
  5781. GROUP BY
  5782. TBU.ID_Calendar,
  5783. TBU.机台名称,
  5784. TBU.班组名称,
  5785. TBU.机长,
  5786. TBU.生产日期,
  5787. TBU.备注,
  5788. TBU.定额,
  5789. AttFB2.班次时长,
  5790. AttFB1.做零活时间,
  5791. AttFB1.周保养时间,
  5792. ATTFB1.改规次数,
  5793. AttFB1.改规时间
  5794. ) TBU2
  5795. WHERE 1 = 1 AND TBU2.机台名称 LIKE '%胶订潮流%'
  5796. GROUP BY
  5797. TBU2.机台名称,
  5798. TBU2.班组名称,
  5799. TBU2.机长,
  5800. TBU2.生产日期,
  5801. TBU2.备注,
  5802. TBU2.定额,
  5803. TBU2.考核工时,
  5804. TBU2.班组产量,
  5805. TBU2.产量折算工时,
  5806. TBU2.改规次数,
  5807. TBU2.改规时间,
  5808. TBU2.做零活时间,
  5809. TBU2.周保养时间,
  5810. TBU2.有效工作时间
  5811. ) TBU
  5812. GROUP BY
  5813. TBU.机台名称,
  5814. TBU.班组名称,
  5815. TBU.机长,
  5816. TBU.生产日期,
  5817. TBU.备注,
  5818. TBU.定额,
  5819. TBU.考核工作时间 UNION ALL
  5820. SELECT
  5821. TBU.机台名称,
  5822. TBU.班组名称,
  5823. TBU.机长,
  5824. TBU.生产日期,
  5825. TBU.备注,
  5826. CASE
  5827. WHEN Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) >= TBU.考核工时 THEN
  5828. '已完成' ELSE '未完成'
  5829. END 效率分析,
  5830. TBU.定额,
  5831. TBU.考核工时 考核工作时间,
  5832. Sum( TBU.班组产量 ) 班组产量,
  5833. Sum( TBU.产量折算工时 ) 产量折算工时,
  5834. Sum( TBU.改规次数 ) 改规次数,
  5835. Sum( TBU.改规时间 ) 改规时间,
  5836. Sum( TBU.做零活时间 ) 做零活时间,
  5837. Sum( TBU.周保养时间 ) 周保养时间,
  5838. Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) 有效工作时间,
  5839. CASE
  5840. WHEN Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) >= TBU.考核工时 THEN
  5841. 100 ELSE Cast(
  5842. ( Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) ) / TBU.考核工时 * 100 AS DECIMAL ( 4, 2 )
  5843. )
  5844. END 完成百分比
  5845. FROM
  5846. (SELECT
  5847. ttt.Name_Machine 机台名称,
  5848. CONVERT ( ttt.dRealRptDate, CHAR ) 生产日期,
  5849. DATE_FORMAT( ttt.dRealRptDate, '%W' ) 备注,
  5850. ttt.Name_WorkGroup 班组名称,
  5851. ( SELECT GROUP_CONCAT( b.cName ) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttT.ID AND b.cStation = '机长' ) 机长,
  5852. CASE
  5853. WHEN ttt.Name_Machine = '骑马联动01号' THEN
  5854. '4000'
  5855. WHEN ttt.Name_Machine = '骑马联动02号' THEN
  5856. '4500'
  5857. WHEN ttt.Name_Machine = '骑马联动03号' THEN
  5858. '5000' ELSE '5000'
  5859. END 定额,
  5860. ttt.nOutput_RZ 班组产量,
  5861. CASE
  5862. WHEN ttt.Name_Machine = '骑马联动01号' THEN
  5863. Cast( ttt.nOutput_RZ / 4000 AS DECIMAL ( 5, 1 ) )
  5864. WHEN ttt.Name_Machine = '骑马联动02号' THEN
  5865. Cast( ttt.nOutput_RZ / 4500 AS DECIMAL ( 5, 1 ) )
  5866. WHEN ttt.Name_Machine = '骑马联动03号' THEN
  5867. Cast( ttt.nOutput_RZ / 5000 AS DECIMAL ( 5, 1 ) ) ELSE Cast( ttt.nOutput_RZ / 5000 AS DECIMAL ( 5, 1 ) )
  5868. END 产量折算工时,
  5869. IFNULL( AttFB2.班次时长, 10 ) 考核工时,
  5870. Sum( CASE WHEN a.cCode_Item = 'U0075' THEN a.iReported ELSE 0 END ) AS 改规次数,
  5871. Sum( CASE WHEN a.cCode_Item = 'U0075' THEN a.iReported ELSE 0 END ) * 0.5 AS 改规时间,
  5872. Sum( CASE WHEN a.cCode_Item = 'U0040' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 周保养时间,
  5873. Sum( CASE WHEN a.cCode_Item = 'U0070' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 做零活时间
  5874. FROM
  5875. (
  5876. SELECT
  5877. *,
  5878. CASE
  5879. WHEN CONVERT ( dOnDuty, CHAR ) < ( SELECT IFNULL( csetvalue, '00:00' ) + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin' ) THEN
  5880. DATE_ADD( dOnDuty, INTERVAL - 1 DAY ) ELSE dOnDuty
  5881. END dRealRptDate
  5882. FROM
  5883. scDayRpt_Teams
  5884. WHERE
  5885. iDayRptStatus >= 0
  5886. ) ttT
  5887. LEFT JOIN (
  5888. SELECT
  5889. ID_Calendar,
  5890. 班次时长,
  5891. 最晚时间
  5892. FROM
  5893. (
  5894. SELECT
  5895. a.ID_Calendar,
  5896. CASE
  5897. WHEN a.cCode_Item = 'U0077' THEN
  5898. Cast( a.nAmount_Item AS DECIMAL ( 4, 2 ) ) ELSE 0
  5899. END AS 班次时长,
  5900. a.dTime AS 最晚时间,
  5901. Row_number ( ) OVER ( PARTITION BY a.ID_Calendar ORDER BY a.dTime DESC ) AS RowNumber
  5902. FROM
  5903. sctMJobFeedBackDetail_AttFB a
  5904. WHERE
  5905. a.cCode_Item = 'U0077'
  5906. ) AS subquery
  5907. WHERE
  5908. RowNumber = 1
  5909. ) AttFB2 ON ttT.ID_Calendar = AttFB2.ID_Calendar
  5910. LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar
  5911. GROUP BY
  5912. ttt.dRealRptDate,
  5913. ttt.Name_Machine,
  5914. ttT.id,
  5915. AttFB2.班次时长,
  5916. ttt.Name_WorkGroup,
  5917. ttt.nOutput_RZ
  5918. ) TBU
  5919. WHERE
  5920. TBU.机台名称 IN ( '骑马联动01号', '骑马联动02号', '骑马联动03号' )
  5921. GROUP BY
  5922. TBU.机台名称,
  5923. TBU.班组名称,
  5924. TBU.机长,
  5925. TBU.生产日期,
  5926. TBU.备注,
  5927. TBU.定额,
  5928. TBU.考核工时 ) tt
  5929. WHERE tt.生产日期 >= '{$ztday}'
  5930. ORDER BY 完成百分比 DESC";
  5931. $res = Db::query($sql);
  5932. $redis->set($redis_key, json_encode($res));
  5933. echo date("Y-m-d H:i:s").' 存进去了';
  5934. return $res;
  5935. }
  5936. //2.2装订印刷机昨日生产料率分析
  5937. public function yester_zd(){
  5938. $redis=redis();
  5939. $list = json_decode($redis->get(md5('yester_zd_redis')),true);
  5940. // 定义班组名称的排序规则
  5941. $order = ['胶订精工', '胶订潮流', '胶订精密达', '骑马联动', '精装'];
  5942. //按照班组名称排序
  5943. usort($list, function ($a, $b) use ($order) {
  5944. // 获取班组名称中的关键词
  5945. preg_match('/('.implode('|', $order).')/', $a['班组名称'], $matchesA);
  5946. preg_match('/('.implode('|', $order).')/', $b['班组名称'], $matchesB);
  5947. // 获取关键词在排序数组中的索引
  5948. $indexA = array_search($matchesA[1], $order);
  5949. $indexB = array_search($matchesB[1], $order);
  5950. // 比较索引,返回比较结果
  5951. return $indexA - $indexB;
  5952. });
  5953. $result['columns']=[
  5954. ['name'=>'日期','id'=>'rq','width'=>'11','color'=>'red','autoWrap'=>"true",'textAlign'=>'left'],
  5955. ['name'=>'班组名称','id'=>'bzmc','width'=>'24','autoWrap'=>"true",'textAlign'=>'left'],
  5956. ['name'=>'机长','id'=>'jz','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'],
  5957. ['name'=>'定额','id'=>'dl','width'=>'16','autoWrap'=>"true",'textAlign'=>'left'],
  5958. ['name'=>'班组产量','id'=>'bzcl','width'=>'11','autoWrap'=>"true",'textAlign'=>'left'],
  5959. ['name'=>'生产效率分析','id'=>'scxlfx','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'],
  5960. ['name'=>'完成百分比','id'=>'wcbfb','width'=>'12','autoWrap'=>"true",'textAlign'=>'left']
  5961. ];
  5962. foreach($list as $k=>$v){
  5963. $result['rows'][$k]['rq']=$v['生产日期'];
  5964. $result['rows'][$k]['bzmc']=$v['班组名称'];
  5965. $result['rows'][$k]['jz']=$v['机长'];
  5966. $result['rows'][$k]['dl']=$v['定额'];
  5967. $result['rows'][$k]['bzcl']=round($v['班组产量']);
  5968. $result['rows'][$k]['scxlfx']=$v['生产效率分析'];
  5969. $result['rows'][$k]['wcbfb']=round($v['完成百分比']);
  5970. }
  5971. if($list==[]){
  5972. $result['rows'][0]['rq']='';
  5973. $result['rows'][0]['bzmc']='';
  5974. $result['rows'][0]['jz']='';
  5975. $result['rows'][0]['dl']='';
  5976. $result['rows'][0]['bzcl']='';
  5977. $result['rows'][0]['scxlfx']='';
  5978. $result['rows'][0]['wcbfb']='';
  5979. }
  5980. $res['status']=0;
  5981. $res['msg']='';
  5982. $res['data']=$result;
  5983. return json($res);
  5984. }
  5985. //2.3轮转印刷机昨日生产料率分析(查询前一天数据)缓存
  5986. public function yester_lz_redis(){
  5987. $redis=redis();
  5988. $redis_key = md5('yester_lz_redis');
  5989. $ztday = date("Y-m-d",strtotime("-1 day"));
  5990. $sql = "SELECT DATE_FORMAT(TBU2.生产日期,'%Y-%m-%d') 生产日期,
  5991. -- TBU2.生产日期,
  5992. -- TBU2.机台名称,
  5993. TBU2.班组名称,
  5994. TBU2.机长,
  5995. -- DATE_FORMAT(TBU2.生产日期,'%W') 备注,
  5996. -- Datename(WEEKDAY, TBU2.生产日期) 备注,
  5997. CASE
  5998. WHEN ( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间)
  5999. + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间)
  6000. + Sum(TBU2.周保养时间) ) >= TBU2.考核工作时间 THEN '已完成'
  6001. ELSE '未完成'
  6002. END AS 效率分析,
  6003. TBU2.定额,
  6004. -- TBU2.考核工作时间,
  6005. Sum(TBU2.班组产量) 班组产量,
  6006. -- Sum(TBU2.产量折算时间) 产量折算时间,
  6007. -- Sum(TBU2.改墨次数) 改墨次数,
  6008. -- Sum(TBU2.改墨时间) 改墨时间,
  6009. -- Sum(TBU2.改纸路次数) 改纸路次数,
  6010. -- Sum(TBU2.改纸路时间) 改纸路时间,
  6011. -- Sum(TBU2.上版块数) 上版块数,
  6012. -- Sum(TBU2.上版时间) 上版时间,
  6013. -- Sum(TBU2.周保养时间) 周保养时间,
  6014. -- ( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间)
  6015. -- + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间)
  6016. -- + Sum(TBU2.周保养时间) ) AS 有效工作时间,
  6017. CASE
  6018. WHEN ( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间)
  6019. + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间)
  6020. + Sum(TBU2.周保养时间) ) >= TBU2.考核工作时间 THEN 100
  6021. ELSE Cast(( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间)
  6022. + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间)
  6023. + Sum(TBU2.周保养时间) ) / TBU2.考核工作时间 * 100 AS DECIMAL(5, 2))
  6024. END 完成百分比
  6025. FROM (SELECT CONVERT(TB1.生产日期,CHAR) 生产日期,
  6026. TB1.机台名称,
  6027. 14000 定额,
  6028. TB1.班组名称,
  6029. TB1.机长 AS 机长,
  6030. TB1.班组产量,
  6031. Cast(TB1.班组产量 / 14000 AS DECIMAL(5, 2)) 产量折算时间,
  6032. TB1.改墨次数,
  6033. Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间,
  6034. TB1.上版块数,
  6035. Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  6036. TB1.改纸路次数 AS 改纸路次数,
  6037. Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间,
  6038. TB1.周保养时间,
  6039. Cast(TB1.班组产量 / 14000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间,
  6040. 12 AS 考核工作时间
  6041. FROM (SELECT CASE
  6042. WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  6043. FROM sysetup
  6044. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  6045. ELSE ttt.dOnDuty
  6046. END 生产日期,
  6047. ttt.Name_Machine 机台名称,
  6048. ttt.Name_WorkGroup 班组名称,
  6049. (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b
  6050. WHERE b.ID_Teams = ttT.ID
  6051. AND b.cStation = '机长') 机长,
  6052. ttt.nOutput_RZ 班组产量,
  6053. Sum(CASE
  6054. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  6055. ELSE 0
  6056. END) AS 上版次数,
  6057. Sum(CASE
  6058. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  6059. ELSE 0
  6060. END) AS 上版块数,
  6061. Sum(CASE
  6062. WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type
  6063. ELSE 0
  6064. END) AS 改墨次数,
  6065. Sum(CASE
  6066. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  6067. ELSE 0
  6068. END) AS 改规次数,
  6069. Sum(CASE
  6070. WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type
  6071. ELSE 0
  6072. END) AS 改纸路次数,
  6073. Sum(CASE
  6074. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2))
  6075. ELSE 0
  6076. END) AS 周保养时间
  6077. /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/
  6078. FROM scDayRpt_Teams ttT
  6079. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  6080. ON ttT.ID_Calendar = a.ID_Calendar
  6081. LEFT JOIN sctJFBActive b
  6082. ON b.ID = a.ID_Act
  6083. WHERE ttT.iDayRptStatus >= 0 /*iDayRptStatus=0未审核,iDayRptStatus=10为已审核,iDayRptStatus=-10为作废单*/
  6084. GROUP BY ttt.dOnDuty,
  6085. ttt.Name_Machine,
  6086. ttT.id,
  6087. ttt.Name_WorkGroup,
  6088. ttt.nOutput_RZ)TB1
  6089. WHERE TB1.机台名称 = '标规小森商轮1号'
  6090. UNION ALL
  6091. SELECT CONVERT(TB1.生产日期, CHAR) 生产日期,
  6092. TB1.机台名称,
  6093. 18000 定额,
  6094. TB1.班组名称,
  6095. tb1.机长 AS 机长,
  6096. TB1.班组产量,
  6097. Cast(TB1.班组产量 / 18000 AS DECIMAL(5, 2)) 产量折算时间,
  6098. TB1.改墨次数,
  6099. Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间,
  6100. TB1.上版块数,
  6101. Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  6102. TB1.改纸路次数 AS 改纸路次数,
  6103. Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间,
  6104. TB1.周保养时间,
  6105. Cast(TB1.班组产量 / 18000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间,
  6106. 12 AS 考核工作时间
  6107. FROM (SELECT CASE
  6108. WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  6109. FROM sysetup
  6110. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  6111. ELSE ttt.dOnDuty
  6112. END 生产日期,
  6113. ttt.Name_Machine 机台名称,
  6114. ttt.Name_WorkGroup 班组名称,
  6115. (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b
  6116. WHERE b.ID_Teams = ttT.ID
  6117. AND b.cStation = '机长') 机长,
  6118. ttt.nOutput_RZ 班组产量,
  6119. Sum(CASE
  6120. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  6121. ELSE 0
  6122. END) AS 上版次数,
  6123. Sum(CASE
  6124. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  6125. ELSE 0
  6126. END) AS 上版块数,
  6127. Sum(CASE
  6128. WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type
  6129. ELSE 0
  6130. END) AS 改墨次数,
  6131. Sum(CASE
  6132. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  6133. ELSE 0
  6134. END) AS 改规次数,
  6135. Sum(CASE
  6136. WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type
  6137. ELSE 0
  6138. END) AS 改纸路次数,
  6139. Sum(CASE
  6140. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2))
  6141. ELSE 0
  6142. END) AS 周保养时间
  6143. /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/
  6144. FROM scDayRpt_Teams ttT
  6145. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  6146. ON ttT.ID_Calendar = a.ID_Calendar
  6147. LEFT JOIN sctJFBActive b
  6148. ON b.ID = a.ID_Act
  6149. WHERE ttT.iDayRptStatus >= 0 /*iDayRptStatus=0未审核,iDayRptStatus=10为已审核,iDayRptStatus=-10为作废单*/
  6150. GROUP BY ttt.dOnDuty,
  6151. ttt.Name_Machine,
  6152. ttt.ID,
  6153. ttt.Name_WorkGroup,
  6154. ttt.nOutput_RZ)TB1
  6155. WHERE TB1.机台名称 = '大规三菱商轮1号'
  6156. UNION ALL
  6157. SELECT CONVERT(TB1.生产日期, CHAR) 生产日期,
  6158. TB1.机台名称,
  6159. 20000 定额,
  6160. TB1.班组名称,
  6161. TB1.机长 AS 机长,
  6162. TB1.班组产量,
  6163. Cast(TB1.班组产量 / 20000 AS DECIMAL(5, 2)) 产量折算时间,
  6164. TB1.改墨次数,
  6165. Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间,
  6166. TB1.上版块数,
  6167. Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  6168. TB1.改纸路次数 AS 改纸路次数,
  6169. Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间,
  6170. TB1.周保养时间,
  6171. Cast(TB1.班组产量 / 20000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间,
  6172. 12 AS 考核工作时间
  6173. FROM (SELECT CASE
  6174. WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  6175. FROM sysetup
  6176. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  6177. ELSE ttt.dOnDuty
  6178. END 生产日期,
  6179. ttt.Name_Machine 机台名称,
  6180. ttt.Name_WorkGroup 班组名称,
  6181. (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b
  6182. WHERE b.ID_Teams = ttT.ID
  6183. AND b.cStation = '机长') 机长,
  6184. ttt.nOutput_RZ 班组产量,
  6185. Sum(CASE
  6186. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  6187. ELSE 0
  6188. END) AS 上版次数,
  6189. Sum(CASE
  6190. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  6191. ELSE 0
  6192. END) AS 上版块数,
  6193. Sum(CASE
  6194. WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type
  6195. ELSE 0
  6196. END) AS 改墨次数,
  6197. Sum(CASE
  6198. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  6199. ELSE 0
  6200. END) AS 改规次数,
  6201. Sum(CASE
  6202. WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type
  6203. ELSE 0
  6204. END) AS 改纸路次数,
  6205. Sum(CASE
  6206. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2))
  6207. ELSE 0
  6208. END) AS 周保养时间
  6209. /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/
  6210. FROM scDayRpt_Teams ttT
  6211. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  6212. ON ttT.ID_Calendar = a.ID_Calendar
  6213. LEFT JOIN sctJFBActive b
  6214. ON b.ID = a.ID_Act
  6215. WHERE ttT.iDayRptStatus >= 0 /*iDayRptStatus=0未审核,iDayRptStatus=10为已审核,iDayRptStatus=-10为作废单*/
  6216. GROUP BY ttt.dOnDuty,
  6217. ttt.Name_Machine,
  6218. ttt.ID,
  6219. ttt.Name_WorkGroup,
  6220. ttt.nOutput_RZ)TB1
  6221. WHERE TB1.机台名称 IN( '标规小森商轮2号', '标规三菱商轮1号', '标规三菱商轮2号', '大规小森商轮1号', '标规高斯轮转1号' )
  6222. UNION ALL
  6223. SELECT CONVERT(TB1.生产日期, CHAR) 生产日期,
  6224. TB1.机台名称,
  6225. 12000 定额,
  6226. TB1.班组名称,
  6227. TB1.机长 机长,
  6228. TB1.班组产量,
  6229. Cast(TB1.班组产量 / 12000 AS DECIMAL(5, 2)) 产量折算时间,
  6230. TB1.改墨次数,
  6231. Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间,
  6232. TB1.上版块数,
  6233. Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  6234. TB1.改纸路次数 AS 改纸路次数,
  6235. Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间,
  6236. TB1.周保养时间,
  6237. Cast(TB1.班组产量 / 12000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间,
  6238. 12 AS 考核工作时间
  6239. FROM (SELECT CASE
  6240. WHEN CONVERT(ttt.dOnDuty,CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  6241. FROM sysetup
  6242. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  6243. ELSE ttt.dOnDuty
  6244. END 生产日期,
  6245. ttt.Name_Machine 机台名称,
  6246. ttt.Name_WorkGroup 班组名称,
  6247. (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b
  6248. WHERE b.ID_Teams = ttT.ID
  6249. AND b.cStation = '机长') 机长,
  6250. ttt.nOutput_RZ 班组产量,
  6251. Sum(CASE
  6252. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  6253. ELSE 0
  6254. END) AS 上版次数,
  6255. Sum(CASE
  6256. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  6257. ELSE 0
  6258. END) AS 上版块数,
  6259. Sum(CASE
  6260. WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type
  6261. ELSE 0
  6262. END) AS 改墨次数,
  6263. Sum(CASE
  6264. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  6265. ELSE 0
  6266. END) AS 改规次数,
  6267. Sum(CASE
  6268. WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type
  6269. ELSE 0
  6270. END) AS 改纸路次数,
  6271. Sum(CASE
  6272. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2))
  6273. ELSE 0
  6274. END) AS 周保养时间
  6275. FROM scDayRpt_Teams ttT
  6276. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  6277. ON ttT.ID_Calendar = a.ID_Calendar
  6278. LEFT JOIN sctJFBActive b
  6279. ON b.ID = a.ID_Act
  6280. WHERE ttT.iDayRptStatus >= 0
  6281. GROUP BY ttt.dOnDuty,
  6282. ttt.Name_Machine,
  6283. ttt.ID,
  6284. ttt.Name_WorkGroup,
  6285. ttt.nOutput_RZ)TB1
  6286. WHERE TB1.机台名称 IN( '标规报轮1号', '标规204胶轮1号' ))TBU2
  6287. WHERE TBU2.生产日期 >= '{$ztday}'
  6288. AND TBU2.班组产量 > 0
  6289. GROUP BY TBU2.机台名称,
  6290. TBU2.班组名称,
  6291. TBU2.机长,
  6292. TBU2.生产日期,
  6293. TBU2.定额,
  6294. TBU2.考核工作时间
  6295. ORDER BY 完成百分比 DESC";
  6296. $res = Db::query($sql);
  6297. $redis->set($redis_key, json_encode($res));
  6298. echo date("Y-m-d H:i:s").' 存进去了';
  6299. return $res;
  6300. }
  6301. //2.3轮转印刷机昨日生产料率分析
  6302. public function yester_lz(){
  6303. $redis=redis();
  6304. $list = json_decode($redis->get(md5('yester_lz_redis')), true);
  6305. // 定义班组名称的排序规则
  6306. $order = ['标规', '大规'];
  6307. //按照班组名称排序
  6308. usort($list, function ($a, $b) use ($order) {
  6309. // 获取班组名称中的关键词
  6310. preg_match('/('.implode('|', $order).')/', $a['班组名称'], $matchesA);
  6311. preg_match('/('.implode('|', $order).')/', $b['班组名称'], $matchesB);
  6312. // 获取关键词在排序数组中的索引
  6313. $indexA = array_search($matchesA[1], $order);
  6314. $indexB = array_search($matchesB[1], $order);
  6315. // 比较索引,返回比较结果
  6316. return $indexA - $indexB;
  6317. });
  6318. $result['columns']=[
  6319. ['name'=>'日期','id'=>'rq','width'=>'11','color'=>'red','autoWrap'=>"true",'textAlign'=>'left'],
  6320. ['name'=>'班组名称','id'=>'bzmc','width'=>'24','autoWrap'=>"true",'textAlign'=>'left'],
  6321. ['name'=>'机长','id'=>'jz','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'],
  6322. ['name'=>'定额','id'=>'dl','width'=>'16','autoWrap'=>"true",'textAlign'=>'left'],
  6323. ['name'=>'班组产量','id'=>'bzcl','width'=>'11','autoWrap'=>"true",'textAlign'=>'left'],
  6324. ['name'=>'生产效率分析','id'=>'scxlfx','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'],
  6325. ['name'=>'完成百分比','id'=>'wcbfb','width'=>'12','autoWrap'=>"true",'textAlign'=>'left']
  6326. ];
  6327. foreach($list as $k=>$v){
  6328. $result['rows'][$k]['rq']=$v['生产日期'];
  6329. $result['rows'][$k]['bzmc']=$v['班组名称'];
  6330. $result['rows'][$k]['jz']=$v['机长'];
  6331. $result['rows'][$k]['dl']=$v['定额'];
  6332. $result['rows'][$k]['bzcl']=round($v['班组产量']);
  6333. $result['rows'][$k]['scxlfx']=$v['效率分析'];
  6334. $result['rows'][$k]['wcbfb']=round($v['完成百分比']);
  6335. }
  6336. if($list==[]){
  6337. $result['rows'][0]['rq']='';
  6338. $result['rows'][0]['bzmc']='';
  6339. $result['rows'][0]['jz']='';
  6340. $result['rows'][0]['dl']='';
  6341. $result['rows'][0]['bzcl']='';
  6342. $result['rows'][0]['scxlfx']='';
  6343. $result['rows'][0]['wcbfb']='';
  6344. }
  6345. $res['status']=0;
  6346. $res['msg']='';
  6347. $res['data']=$result;
  6348. return json($res);
  6349. }
  6350. /**
  6351. * 第三屏第三页 质量管控看板
  6352. */
  6353. //按客户 按质量问题 按责任部门-->分组【Bi根据饼状图分组轮播变化】【暂时未用到 可以删除】
  6354. public function zlgk_grouping() {
  6355. $result = ['按部门', '按质量问题', '按责任部门'];
  6356. $data = [
  6357. "columns" => [
  6358. ["name" => "分组", "id" => "subsys"]
  6359. ],
  6360. "rows" => []
  6361. ];
  6362. foreach ($result as $value) {
  6363. $data["rows"][] = ["subsys" => $value];
  6364. }
  6365. $res = [
  6366. 'status' => 0,
  6367. 'msg' => '',
  6368. 'data' => $data
  6369. ];
  6370. return json_encode($res, JSON_UNESCAPED_UNICODE);
  6371. }
  6372. //同期投诉增减比 按客户->今年缓存
  6373. public function qkhzl_redis(){
  6374. $redis=redis();
  6375. $redis_key = md5('qkhzl_redis');
  6376. // $startDate = date("Y-04-22");
  6377. $startDate = date("Y-m-d", strtotime("-1 year"));
  6378. $endDate = date("Y-m-d");
  6379. $res= Db::query("SELECT resp.cReasonCName,D.cdwmc FROM ecComplainFeedback B LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID
  6380. LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd
  6381. LEFT JOIN (SELECT a.ID_qlOrderProduct,Sum(a.iAmountOut) iAmount_Out FROM SCYDYSQX a
  6382. GROUP BY a.ID_qlOrderProduct) c ON c.ID_qlOrderProduct = p.ID LEFT JOIN ecComplainContent DD
  6383. ON DD.iComplainFBID = B.iID LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C
  6384. LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P
  6385. LEFT JOIN (SELECT R.iComplainFBID,
  6386. PP.strSubName AS cReasonPName,
  6387. CC2.strSubName AS cReasonCName,
  6388. CR.cRespPerson,
  6389. CR.cRespDept,
  6390. CR.cRespTech,
  6391. CR.cRespCorp,
  6392. CR.nMoney
  6393. FROM ecComplainReasonAnalysis R
  6394. LEFT JOIN tbConfig CC2
  6395. ON CC2.iNoConfig = R.iReasonID_C
  6396. LEFT JOIN tbConfig PP
  6397. ON PP.iNoConfig = R.iReasonID_P
  6398. LEFT JOIN ecComplainResponsibility CR
  6399. ON CR.iComplainRAID = R.iID) resp
  6400. ON resp.iComplainFBID = B.iID
  6401. WHERE 1 = 1
  6402. AND b.dFeedbackDate >= '{$startDate}'
  6403. AND b.dFeedbackDate <= '{$endDate}'");
  6404. if($res){
  6405. $redis->set($redis_key, json_encode($res));
  6406. echo date("Y-m-d H:i:s").'存进去了';
  6407. return $res;
  6408. }
  6409. }
  6410. //同期投诉增减比 按客户->去年缓存
  6411. public function qiankhzl_redis(){
  6412. $redis=redis();
  6413. $redis_key = md5('qiankhzl_redis');
  6414. // 获取当前的年、月、日
  6415. $currentYear = date("Y");
  6416. $currentMonth = date("m");
  6417. $currentDay = date("d");
  6418. // 计算前一年和前两年的年份
  6419. $lastYear = $currentYear - 1;
  6420. $twoYearsAgo = $currentYear - 2;
  6421. // 构造日期字符串
  6422. $startDate = date("Y-m-d", strtotime("$twoYearsAgo-$currentMonth-$currentDay"));
  6423. $endDate = date("Y-m-d", strtotime("$lastYear-$currentMonth-$currentDay"));
  6424. $res= Db::query("SELECT resp.cReasonCName,D.cdwmc FROM ecComplainFeedback B LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID
  6425. LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd
  6426. LEFT JOIN (SELECT a.ID_qlOrderProduct,Sum(a.iAmountOut) iAmount_Out FROM SCYDYSQX a
  6427. GROUP BY a.ID_qlOrderProduct) c ON c.ID_qlOrderProduct = p.ID LEFT JOIN ecComplainContent DD
  6428. ON DD.iComplainFBID = B.iID LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C
  6429. LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P
  6430. LEFT JOIN (SELECT R.iComplainFBID,
  6431. PP.strSubName AS cReasonPName,
  6432. CC2.strSubName AS cReasonCName,
  6433. CR.cRespPerson,
  6434. CR.cRespDept,
  6435. CR.cRespTech,
  6436. CR.cRespCorp,
  6437. CR.nMoney
  6438. FROM ecComplainReasonAnalysis R
  6439. LEFT JOIN tbConfig CC2
  6440. ON CC2.iNoConfig = R.iReasonID_C
  6441. LEFT JOIN tbConfig PP
  6442. ON PP.iNoConfig = R.iReasonID_P
  6443. LEFT JOIN ecComplainResponsibility CR
  6444. ON CR.iComplainRAID = R.iID) resp
  6445. ON resp.iComplainFBID = B.iID
  6446. WHERE 1 = 1
  6447. AND b.dFeedbackDate >= '{$startDate}'
  6448. AND b.dFeedbackDate <= '{$endDate}'");
  6449. if($res){
  6450. $redis->set($redis_key, json_encode($res));
  6451. echo date("Y-m-d H:i:s").'存进去了';
  6452. return $res;
  6453. }
  6454. }
  6455. //同期投诉增减比 按责任部门->今年缓存
  6456. public function qbmzl_redis(){
  6457. $redis=redis();
  6458. $redis_key = md5('qbmzl_redis');
  6459. $startDate = date("Y-m-d", strtotime("-1 year"));
  6460. $endDate = date("Y-m-d");
  6461. $res1=Db::query("SELECT
  6462. IFNULL(责任部门, '其他') AS 部门, COUNT(*) AS 投诉次数
  6463. FROM (
  6464. SELECT
  6465. e.cDept AS 责任部门,
  6466. F.MergedStrSubName AS 小类
  6467. FROM
  6468. ecComplainFeedback B
  6469. LEFT JOIN ecComplainContent C ON B.iID = C.iComplainFBID
  6470. LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID
  6471. LEFT JOIN ecComplainDeptOpinion e ON B.iID = e.iComplainFBID
  6472. LEFT JOIN (
  6473. SELECT
  6474. R.iComplainFBID,
  6475. (
  6476. SELECT
  6477. GROUP_CONCAT(cc.strSubName ORDER BY cc.strSubName SEPARATOR ',')
  6478. FROM
  6479. ecComplainReasonAnalysis AS R2
  6480. LEFT JOIN
  6481. tbConfig AS cc ON cc.iNoConfig = R2.iReasonID_C
  6482. WHERE
  6483. R2.iComplainFBID = R.iComplainFBID
  6484. ) AS MergedStrSubName
  6485. FROM
  6486. ecComplainReasonAnalysis AS R
  6487. LEFT JOIN
  6488. tbConfig AS cc ON cc.iNoConfig = R.iReasonID_C
  6489. WHERE
  6490. 1 = 1
  6491. GROUP BY
  6492. R.iComplainFBID
  6493. ) F ON B.iID = F.iComplainFBID
  6494. WHERE
  6495. DATE_FORMAT(B.dComplainDate, '%Y-%m-%d') BETWEEN '{$startDate}' AND '{$endDate}'
  6496. AND B.iState = 30
  6497. ) AS MainQuery
  6498. GROUP BY
  6499. MainQuery.责任部门
  6500. ORDER BY COUNT(*) DESC");
  6501. if($res1){
  6502. $redis->set($redis_key, json_encode($res1));
  6503. echo date("Y-m-d H:i:s").'存进去了';
  6504. return $res1;
  6505. }
  6506. }
  6507. //同期投诉增减比 按责任部门->去年缓存
  6508. public function qianbmzl_redis(){
  6509. $redis=redis();
  6510. $redis_key = md5('qianbmzl_redis');
  6511. // 获取当前的年、月、日
  6512. $currentYear = date("Y");
  6513. $currentMonth = date("m");
  6514. $currentDay = date("d");
  6515. // 计算前一年和前两年的年份
  6516. $lastYear = $currentYear - 1;
  6517. $twoYearsAgo = $currentYear - 2;
  6518. // 构造日期字符串
  6519. $startDate = date("Y-m-d", strtotime("$twoYearsAgo-$currentMonth-$currentDay"));
  6520. $endDate = date("Y-m-d", strtotime("$lastYear-$currentMonth-$currentDay"));
  6521. $res1=Db::query("SELECT
  6522. IFNULL(责任部门, '其他') AS 部门, COUNT(*) AS 投诉次数
  6523. FROM (
  6524. SELECT
  6525. e.cDept AS 责任部门,
  6526. F.MergedStrSubName AS 小类
  6527. FROM
  6528. ecComplainFeedback B
  6529. LEFT JOIN ecComplainContent C ON B.iID = C.iComplainFBID
  6530. LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID
  6531. LEFT JOIN ecComplainDeptOpinion e ON B.iID = e.iComplainFBID
  6532. LEFT JOIN (
  6533. SELECT
  6534. R.iComplainFBID,
  6535. (
  6536. SELECT
  6537. GROUP_CONCAT(cc.strSubName ORDER BY cc.strSubName SEPARATOR ',')
  6538. FROM
  6539. ecComplainReasonAnalysis AS R2
  6540. LEFT JOIN
  6541. tbConfig AS cc ON cc.iNoConfig = R2.iReasonID_C
  6542. WHERE
  6543. R2.iComplainFBID = R.iComplainFBID
  6544. ) AS MergedStrSubName
  6545. FROM
  6546. ecComplainReasonAnalysis AS R
  6547. LEFT JOIN
  6548. tbConfig AS cc ON cc.iNoConfig = R.iReasonID_C
  6549. WHERE
  6550. 1 = 1
  6551. GROUP BY
  6552. R.iComplainFBID
  6553. ) F ON B.iID = F.iComplainFBID
  6554. WHERE
  6555. DATE_FORMAT(B.dComplainDate, '%Y-%m-%d') BETWEEN '{$startDate}' AND '{$endDate}'
  6556. AND B.iState = 30
  6557. ) AS MainQuery
  6558. GROUP BY
  6559. MainQuery.责任部门
  6560. ORDER BY COUNT(*) DESC");
  6561. if($res1){
  6562. $redis->set($redis_key, json_encode($res1));
  6563. echo date("Y-m-d H:i:s").'存进去了';
  6564. return $res1;
  6565. }
  6566. }
  6567. //同期投诉增减比 按责任部门->今年缓存【可以删】
  6568. public function qbmzl_rediss(){
  6569. $redis=redis();
  6570. $redis_key = md5('qbmzl_redis');
  6571. $startDate = date("Y-m-d", strtotime("-1 year"));
  6572. $endDate = date("Y-m-d");
  6573. $res1=Db::query("SELECT CASE
  6574. WHEN CR.cRespDept = '' THEN '外协单位'
  6575. ELSE CR.cRespDept
  6576. END AS 部门,
  6577. Count(*) AS 投诉次数
  6578. FROM ecComplainFeedback B
  6579. LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID
  6580. LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode
  6581. INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd
  6582. LEFT JOIN (SELECT a.ID_qlOrderProduct,
  6583. Sum(a.iAmountOut) iAmount_Out
  6584. FROM SCYDYSQX a
  6585. GROUP BY a.ID_qlOrderProduct) c
  6586. ON c.ID_qlOrderProduct = p.ID
  6587. LEFT JOIN ecComplainContent DD ON DD.iComplainFBID = B.iID
  6588. LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C
  6589. LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P
  6590. LEFT JOIN (SELECT R.iComplainFBID,CR1.cRespDept
  6591. FROM ecComplainReasonAnalysis R
  6592. LEFT JOIN ecComplainResponsibility CR1 ON CR1.iComplainRAID = R.iID) CR
  6593. ON B.iID = CR.iComplainFBID
  6594. WHERE 1 = 1 AND b.dFeedbackDate >= '{$startDate}' AND b.dFeedbackDate <= '{$endDate}'
  6595. GROUP BY CR.cRespDept ORDER BY 投诉次数 DESC,
  6596. CR.cRespDept; ");
  6597. foreach($res1 as $k=>$v){
  6598. if($v['部门']=='全部'){
  6599. unset($res1[$k]);
  6600. }
  6601. }
  6602. foreach($res1 as $k=>$v){
  6603. if($v['部门']===null){
  6604. $res1[$k]['部门']='全部';
  6605. }
  6606. }
  6607. $res = Db::query("SELECT CR2.cReasonPName,CR2.cRespDept
  6608. FROM ecComplainFeedback B2
  6609. LEFT JOIN (SELECT R2.iComplainFBID,
  6610. CR1.cRespDept,
  6611. CC.strSubName AS cReasonPName
  6612. FROM ecComplainReasonAnalysis R2
  6613. LEFT JOIN ecComplainResponsibility CR1
  6614. ON CR1.iComplainRAID = R2.iID
  6615. LEFT JOIN tbConfig CC
  6616. ON CC.iNoConfig = R2.iReasonID_C
  6617. LEFT JOIN tbConfig PP
  6618. ON PP.iNoConfig = R2.iReasonID_P) CR2
  6619. ON B2.iID = CR2.iComplainFBID
  6620. WHERE b2.dFeedbackDate >= '{$startDate}'
  6621. AND b2.dFeedbackDate <= '{$endDate}'");
  6622. $list = [];
  6623. for ($i = 0; $i < count($res); $i++) {
  6624. if($res[$i]['cRespDept']===''){
  6625. $res[$i]['cRespDept']='外协单位';
  6626. }
  6627. if($res[$i]['cRespDept']===null){
  6628. $res[$i]['cRespDept']='全部';
  6629. }
  6630. $list[$res[$i]['cRespDept']][] = $res[$i]['cReasonPName'];
  6631. }
  6632. array_multisort($list, SORT_DESC);
  6633. $result = [];
  6634. $i = 0;
  6635. foreach ($list as $k => $v) {
  6636. // $result[$i]['部门'] = $k;
  6637. // $result[$i]['投诉次数'] = count($v);
  6638. // $result[$i]['合并原因'] = '';
  6639. $result[$k]='';
  6640. foreach ($v as $key => $value) {
  6641. if ($value == null) {
  6642. unset($v[$key]);
  6643. }
  6644. }
  6645. foreach (array_count_values($v) as $a => $b) {
  6646. // $result[$i]['合并原因'] .= $a . $b . '/';
  6647. $result[$k] .= $a . $b . '/';
  6648. }
  6649. // $result[$i]['合并原因'] = substr($result[$i]['合并原因'], 0, -1);
  6650. $result[$k] = substr($result[$k], 0, -1);
  6651. $i++;
  6652. }
  6653. foreach($res1 as $k=>$v){
  6654. if($v['部门']!==null)$res1[$k]['合并原因']=$result[$v['部门']];
  6655. if($v['部门']=='全部'){
  6656. $res1[$k]['投诉次数']=count($list['全部']);
  6657. }
  6658. }
  6659. if($res1){
  6660. $redis->set($redis_key, json_encode($res1));
  6661. echo date("Y-m-d H:i:s").'存进去了';
  6662. return $res1;
  6663. }
  6664. }
  6665. //同期投诉增减比 按责任部门->去年缓存【可以删】
  6666. public function qianbmzl_rediss(){
  6667. $redis=redis();
  6668. $redis_key = md5('qianbmzl_redis');
  6669. // 获取当前的年、月、日
  6670. $currentYear = date("Y");
  6671. $currentMonth = date("m");
  6672. $currentDay = date("d");
  6673. // 计算前一年和前两年的年份
  6674. $lastYear = $currentYear - 1;
  6675. $twoYearsAgo = $currentYear - 2;
  6676. // 构造日期字符串
  6677. $startDate = date("Y-m-d", strtotime("$twoYearsAgo-$currentMonth-$currentDay"));
  6678. $endDate = date("Y-m-d", strtotime("$lastYear-$currentMonth-$currentDay"));
  6679. $res1=Db::query("SELECT CASE
  6680. WHEN CR.cRespDept = '' THEN '外协单位'
  6681. ELSE CR.cRespDept
  6682. END AS 部门,
  6683. Count(*) AS 投诉次数
  6684. FROM ecComplainFeedback B
  6685. LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID
  6686. LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode
  6687. INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd
  6688. LEFT JOIN (SELECT a.ID_qlOrderProduct,
  6689. Sum(a.iAmountOut) iAmount_Out
  6690. FROM SCYDYSQX a
  6691. GROUP BY a.ID_qlOrderProduct) c
  6692. ON c.ID_qlOrderProduct = p.ID
  6693. LEFT JOIN ecComplainContent DD ON DD.iComplainFBID = B.iID
  6694. LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C
  6695. LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P
  6696. LEFT JOIN (SELECT R.iComplainFBID,CR1.cRespDept
  6697. FROM ecComplainReasonAnalysis R
  6698. LEFT JOIN ecComplainResponsibility CR1 ON CR1.iComplainRAID = R.iID) CR
  6699. ON B.iID = CR.iComplainFBID
  6700. WHERE 1 = 1 AND b.dFeedbackDate >= '{$startDate}' AND b.dFeedbackDate <= '{$endDate}'
  6701. GROUP BY CR.cRespDept ORDER BY 投诉次数 DESC,
  6702. CR.cRespDept; ");
  6703. foreach($res1 as $k=>$v){
  6704. if($v['部门']=='全部'){
  6705. unset($res1[$k]);
  6706. }
  6707. }
  6708. foreach($res1 as $k=>$v){
  6709. if($v['部门']===null){
  6710. $res1[$k]['部门']='全部';
  6711. }
  6712. }
  6713. $res = Db::query("SELECT CR2.cReasonPName,CR2.cRespDept
  6714. FROM ecComplainFeedback B2
  6715. LEFT JOIN (SELECT R2.iComplainFBID,
  6716. CR1.cRespDept,
  6717. CC.strSubName AS cReasonPName
  6718. FROM ecComplainReasonAnalysis R2
  6719. LEFT JOIN ecComplainResponsibility CR1
  6720. ON CR1.iComplainRAID = R2.iID
  6721. LEFT JOIN tbConfig CC
  6722. ON CC.iNoConfig = R2.iReasonID_C
  6723. LEFT JOIN tbConfig PP
  6724. ON PP.iNoConfig = R2.iReasonID_P) CR2
  6725. ON B2.iID = CR2.iComplainFBID
  6726. WHERE b2.dFeedbackDate >= '{$startDate}'
  6727. AND b2.dFeedbackDate <= '{$endDate}'");
  6728. $list = [];
  6729. for ($i = 0; $i < count($res); $i++) {
  6730. if($res[$i]['cRespDept']===''){
  6731. $res[$i]['cRespDept']='外协单位';
  6732. }
  6733. if($res[$i]['cRespDept']===null){
  6734. $res[$i]['cRespDept']='全部';
  6735. }
  6736. $list[$res[$i]['cRespDept']][] = $res[$i]['cReasonPName'];
  6737. }
  6738. array_multisort($list, SORT_DESC);
  6739. $result = [];
  6740. $i = 0;
  6741. foreach ($list as $k => $v) {
  6742. // $result[$i]['部门'] = $k;
  6743. // $result[$i]['投诉次数'] = count($v);
  6744. // $result[$i]['合并原因'] = '';
  6745. $result[$k]='';
  6746. foreach ($v as $key => $value) {
  6747. if ($value == null) {
  6748. unset($v[$key]);
  6749. }
  6750. }
  6751. foreach (array_count_values($v) as $a => $b) {
  6752. // $result[$i]['合并原因'] .= $a . $b . '/';
  6753. $result[$k] .= $a . $b . '/';
  6754. }
  6755. // $result[$i]['合并原因'] = substr($result[$i]['合并原因'], 0, -1);
  6756. $result[$k] = substr($result[$k], 0, -1);
  6757. $i++;
  6758. }
  6759. foreach($res1 as $k=>$v){
  6760. if($v['部门']!==null)$res1[$k]['合并原因']=$result[$v['部门']];
  6761. if($v['部门']=='全部'){
  6762. $res1[$k]['投诉次数']=count($list['全部']);
  6763. }
  6764. }
  6765. if($res1){
  6766. $redis->set($redis_key, json_encode($res1));
  6767. echo date("Y-m-d H:i:s").'存进去了';
  6768. return $res1;
  6769. }
  6770. }
  6771. //同期投诉增减比 按质量问题->今年缓存
  6772. public function qzlwt_redis(){
  6773. $redis=redis();
  6774. $redis_key = md5('qzlwt_redis');
  6775. $startDate = date("Y-m-d", strtotime("-1 year"));
  6776. $endDate = date("Y-m-d");
  6777. $res = Db::query("SELECT D1.cdwmc,resp1.cReasonCName
  6778. FROM ecComplainFeedback B
  6779. LEFT JOIN DZYWDW D1
  6780. ON D1.iywdwid = B.iClientID
  6781. LEFT JOIN MCYD M
  6782. ON M.CCYDH = B.cOrderBillCode
  6783. INNER JOIN qlOrderProduct p
  6784. ON M.ICYDID = p.ID_Mcyd
  6785. LEFT JOIN (SELECT a.ID_qlOrderProduct,
  6786. Sum(a.iAmountOut) iAmount_Out
  6787. FROM SCYDYSQX a
  6788. GROUP BY a.ID_qlOrderProduct) c
  6789. ON c.ID_qlOrderProduct = p.ID
  6790. LEFT JOIN ecComplainContent DD
  6791. ON DD.iComplainFBID = B.iID
  6792. LEFT JOIN tbConfig E
  6793. ON E.iNoConfig = DD.iClassID_C
  6794. LEFT JOIN tbConfig T
  6795. ON T.iNoConfig = DD.iClassID_P
  6796. LEFT JOIN (SELECT R.iComplainFBID,
  6797. PP.strSubName AS cReasonPName,
  6798. CC2.strSubName AS cReasonCName,
  6799. CR.cRespPerson,
  6800. CR.cRespDept,
  6801. CR.cRespTech,
  6802. CR.cRespCorp,
  6803. CR.nMoney
  6804. FROM ecComplainReasonAnalysis R
  6805. LEFT JOIN tbConfig CC2
  6806. ON CC2.iNoConfig = R.iReasonID_C
  6807. LEFT JOIN tbConfig PP
  6808. ON PP.iNoConfig = R.iReasonID_P
  6809. LEFT JOIN ecComplainResponsibility CR
  6810. ON CR.iComplainRAID = R.iID) resp1
  6811. ON resp1.iComplainFBID = B.iID
  6812. WHERE b.dFeedbackDate >= '{$startDate}'
  6813. AND b.dFeedbackDate <= '{$endDate}'");
  6814. if($res){
  6815. $list = [];
  6816. for ($i = 0; $i < count($res); $i++) {
  6817. $list[$res[$i]['cReasonCName']][] = $res[$i]['cdwmc'];
  6818. }
  6819. array_multisort($list, SORT_DESC);
  6820. $result = [];
  6821. $i = 0;
  6822. foreach ($list as $k => $v) {
  6823. $result[$i]['质量问题'] = $k;
  6824. $result[$i]['投诉次数'] = count($v);
  6825. $result[$i]['合并原因'] = '';
  6826. foreach ($v as $key => $value) {
  6827. if ($value == null) {
  6828. unset($v[$key]);
  6829. }
  6830. }
  6831. foreach (array_count_values($v) as $a => $b) {
  6832. $result[$i]['合并原因'] .= $a . $b . '/';
  6833. }
  6834. $result[$i]['合并原因'] = substr($result[$i]['合并原因'], 0, -1);
  6835. $i++;
  6836. }
  6837. $result=array_splice($result,0,6);
  6838. $list=[];
  6839. foreach($result as $k=>$v){
  6840. $list[$k]['name']=$v['质量问题'];
  6841. $list[$k]['value']=$v['投诉次数'];
  6842. }
  6843. $redis->set($redis_key, json_encode($list));
  6844. echo date("Y-m-d H:i:s").'存进去了';
  6845. return $list;
  6846. }
  6847. }
  6848. //同期投诉增减比 按质量问题->去年缓存
  6849. public function qianzlwt_redis(){
  6850. $redis=redis();
  6851. $redis_key = md5('qianzlwt_redis');
  6852. // 获取当前的年、月、日
  6853. $currentYear = date("Y");
  6854. $currentMonth = date("m");
  6855. $currentDay = date("d");
  6856. // 计算前一年和前两年的年份
  6857. $lastYear = $currentYear - 1;
  6858. $twoYearsAgo = $currentYear - 2;
  6859. // 构造日期字符串
  6860. $startDate = date("Y-m-d", strtotime("$twoYearsAgo-$currentMonth-$currentDay"));
  6861. $endDate = date("Y-m-d", strtotime("$lastYear-$currentMonth-$currentDay"));
  6862. $res = Db::query("SELECT D1.cdwmc,resp1.cReasonCName
  6863. FROM ecComplainFeedback B
  6864. LEFT JOIN DZYWDW D1
  6865. ON D1.iywdwid = B.iClientID
  6866. LEFT JOIN MCYD M
  6867. ON M.CCYDH = B.cOrderBillCode
  6868. INNER JOIN qlOrderProduct p
  6869. ON M.ICYDID = p.ID_Mcyd
  6870. LEFT JOIN (SELECT a.ID_qlOrderProduct,
  6871. Sum(a.iAmountOut) iAmount_Out
  6872. FROM SCYDYSQX a
  6873. GROUP BY a.ID_qlOrderProduct) c
  6874. ON c.ID_qlOrderProduct = p.ID
  6875. LEFT JOIN ecComplainContent DD
  6876. ON DD.iComplainFBID = B.iID
  6877. LEFT JOIN tbConfig E
  6878. ON E.iNoConfig = DD.iClassID_C
  6879. LEFT JOIN tbConfig T
  6880. ON T.iNoConfig = DD.iClassID_P
  6881. LEFT JOIN (SELECT R.iComplainFBID,
  6882. PP.strSubName AS cReasonPName,
  6883. CC2.strSubName AS cReasonCName,
  6884. CR.cRespPerson,
  6885. CR.cRespDept,
  6886. CR.cRespTech,
  6887. CR.cRespCorp,
  6888. CR.nMoney
  6889. FROM ecComplainReasonAnalysis R
  6890. LEFT JOIN tbConfig CC2
  6891. ON CC2.iNoConfig = R.iReasonID_C
  6892. LEFT JOIN tbConfig PP
  6893. ON PP.iNoConfig = R.iReasonID_P
  6894. LEFT JOIN ecComplainResponsibility CR
  6895. ON CR.iComplainRAID = R.iID) resp1
  6896. ON resp1.iComplainFBID = B.iID
  6897. WHERE b.dFeedbackDate >= '{$startDate}'
  6898. AND b.dFeedbackDate <= '{$endDate}'");
  6899. if($res){
  6900. $list = [];
  6901. for ($i = 0; $i < count($res); $i++) {
  6902. $list[$res[$i]['cReasonCName']][] = $res[$i]['cdwmc'];
  6903. }
  6904. array_multisort($list, SORT_DESC);
  6905. $result = [];
  6906. $i = 0;
  6907. foreach ($list as $k => $v) {
  6908. $result[$i]['质量问题'] = $k;
  6909. $result[$i]['投诉次数'] = count($v);
  6910. $result[$i]['合并原因'] = '';
  6911. foreach ($v as $key => $value) {
  6912. if ($value == null) {
  6913. unset($v[$key]);
  6914. }
  6915. }
  6916. foreach (array_count_values($v) as $a => $b) {
  6917. $result[$i]['合并原因'] .= $a . $b . '/';
  6918. }
  6919. $result[$i]['合并原因'] = substr($result[$i]['合并原因'], 0, -1);
  6920. $i++;
  6921. }
  6922. $result=array_splice($result,0,6);
  6923. $list=[];
  6924. foreach($result as $k=>$v){
  6925. $list[$k]['name']=$v['质量问题'];
  6926. $list[$k]['value']=$v['投诉次数'];
  6927. }
  6928. $redis->set($redis_key, json_encode($list));
  6929. echo date("Y-m-d H:i:s").'存进去了';
  6930. return $list;
  6931. }
  6932. }
  6933. //同期投诉增减比->接口
  6934. public function tqts_list(){
  6935. $postData = input('post.dependence.item.name');
  6936. $redisKeys = [
  6937. "按客户" => 'qkhzl_redis',
  6938. "按质量问题" => 'qzlwt_redis',
  6939. "按责任部门" => 'qbmzl_redis'
  6940. ];
  6941. $redis_key = isset($redisKeys[$postData]) ? md5($redisKeys[$postData]) : md5('qkhzl_redis');
  6942. $redis = redis();
  6943. $r_list = json_decode($redis->get($redis_key), true);
  6944. if (!$r_list) {
  6945. // 处理没有数据的情况
  6946. $response_data = [
  6947. 'status' => 1,
  6948. 'msg' => '没有找到相关数据',
  6949. 'data' => []
  6950. ];
  6951. return json_encode($response_data, JSON_UNESCAPED_UNICODE);
  6952. }
  6953. if($postData == '按客户') {
  6954. $qr_list = json_decode($redis->get(md5('qiankhzl_redis')),true);
  6955. $c_list = [];
  6956. foreach ($r_list as $item) {
  6957. $c_list[$item['cdwmc']][] = $item['cReasonCName'];
  6958. }
  6959. array_multisort($c_list, SORT_DESC);
  6960. $result = [];
  6961. $i = 0;
  6962. foreach ($c_list as $cdwmc => $reasons) {
  6963. $complaint_count = count($reasons);
  6964. $unique_reasons = array_count_values(array_filter($reasons)); // 去除空值并计算出现次数
  6965. // 构建质量问题的描述
  6966. $quality_issues = '';
  6967. foreach ($unique_reasons as $reason => $count) {
  6968. $quality_issues .= "{$reason}{$count}/";
  6969. }
  6970. // 去掉最后一个斜杠
  6971. $quality_issues = rtrim($quality_issues, '/');
  6972. // 添加到结果数组
  6973. $result[] = [
  6974. '客户单位' => $cdwmc,
  6975. '投诉次数' => $complaint_count
  6976. ];
  6977. }
  6978. $qc_list = [];
  6979. foreach ($qr_list as $qitem) {
  6980. $qc_list[$qitem['cdwmc']][] = $qitem['cReasonCName'];
  6981. }
  6982. array_multisort($qc_list, SORT_DESC);
  6983. $qresult = [];
  6984. $qi = 0;
  6985. foreach ($qc_list as $qcdwmc => $qreasons) {
  6986. $qcomplaint_count = count($qreasons);
  6987. $qunique_reasons = array_count_values(array_filter($qreasons)); // 去除空值并计算出现次数
  6988. // 构建质量问题的描述
  6989. $qquality_issues = '';
  6990. foreach ($qunique_reasons as $qreason => $qcount) {
  6991. $qquality_issues .= "{$qreason}{$qcount}/";
  6992. }
  6993. // 去掉最后一个斜杠
  6994. $qquality_issues = rtrim($qquality_issues, '/');
  6995. // 添加到结果数组
  6996. $qresult[] = [
  6997. '客户单位' => $qcdwmc,
  6998. '投诉次数' => $qcomplaint_count
  6999. ];
  7000. }
  7001. $result = array_slice($result, 0, 10);
  7002. $qresult = array_slice($qresult, 0, 10);
  7003. foreach ($result as $index => $rv) {
  7004. $list['categories'][] = $rv['客户单位'];
  7005. }
  7006. // 初始数据结构
  7007. $data = [
  7008. "categories" => [], // 客户单位
  7009. "series" => [
  7010. [
  7011. "name" => "同比增减百分比",
  7012. "type" => "line",
  7013. "yAxisIndex" => 1,
  7014. "data" => []
  7015. ],
  7016. [
  7017. "name" => date('Y').'年',
  7018. "type" => "bar",
  7019. "yAxisIndex" => 0,
  7020. "data" => []
  7021. ],
  7022. [
  7023. "name" => (date('Y')-1).'年',
  7024. "type" => "bar",
  7025. "yAxisIndex" => 0,
  7026. "data" => [],
  7027. ]
  7028. ]
  7029. ];
  7030. // 确保 $result 和 $qresult 索引的一致性
  7031. foreach ($result as $index => $rv) {
  7032. // 添加客户单位
  7033. $data['categories'][] = $rv['客户单位'];
  7034. // 计算同比增减百分比,并添加到相应的数据数组
  7035. if (isset($rv['投诉次数']) && isset($qresult[$index]['投诉次数']) && $qresult[$index]['投诉次数'] != 0) {
  7036. $percentage_change = round(($rv['投诉次数'] - $qresult[$index]['投诉次数']) / $qresult[$index]['投诉次数'] ,2);
  7037. $data['series'][0]['data'][] = $percentage_change; // 同比增减百分比
  7038. } else {
  7039. $data['series'][0]['data'][] = 0; // 防止错误计算
  7040. }
  7041. // 添加今年的数据
  7042. if (isset($rv['投诉次数'])) {
  7043. $data['series'][1]['data'][] = $rv['投诉次数'];
  7044. } else {
  7045. $data['series'][1]['data'][] = 0; // 防止空值
  7046. }
  7047. // 添加去年的数据
  7048. if (isset($qresult[$index]['投诉次数'])) {
  7049. $data['series'][2]['data'][] = $qresult[$index]['投诉次数'];
  7050. } else {
  7051. $data['series'][2]['data'][] = 0; // 防止空值
  7052. }
  7053. }
  7054. // 组织JSON返回结构
  7055. $res = [
  7056. 'status' => 0,
  7057. 'msg' => '',
  7058. 'data' => $data
  7059. ];
  7060. // 返回JSON响应
  7061. return json($res);
  7062. } else if($postData == '按质量问题') {
  7063. $qr_list = json_decode($redis->get(md5('qiankhzl_redis')),true);
  7064. $qresult = json_decode($redis->get(md5('qianzlwt_redis')),true);
  7065. // 初始数据结构
  7066. $data = [
  7067. "categories" => [], // 客户单位
  7068. "series" => [
  7069. [
  7070. "name" => "同比增减百分比",
  7071. "type" => "line",
  7072. "yAxisIndex" => 1,
  7073. "data" => []
  7074. ],
  7075. [
  7076. "name" => date('Y').'年',
  7077. "type" => "bar",
  7078. "yAxisIndex" => 0,
  7079. "data" => []
  7080. ],
  7081. [
  7082. "name" => (date('Y')-1).'年',
  7083. "type" => "bar",
  7084. "yAxisIndex" => 0,
  7085. "data" => [],
  7086. ]
  7087. ]
  7088. ];
  7089. foreach ($r_list as $index => $rv) {
  7090. // 添加客户单位
  7091. $data['categories'][] = $rv['name'];
  7092. // 计算同比增减百分比,并添加到相应的数据数组
  7093. if (isset($rv['value']) && isset($qresult[$index]['value']) && $qresult[$index]['value'] != 0) {
  7094. $percentage_change = round(($rv['value'] - $qresult[$index]['value']) / $qresult[$index]['value'] ,2);
  7095. $data['series'][0]['data'][] = $percentage_change; // 同比增减百分比
  7096. } else {
  7097. $data['series'][0]['data'][] = 0; // 防止错误计算
  7098. }
  7099. // 添加今年的数据
  7100. if (isset($rv['value'])) {
  7101. $data['series'][1]['data'][] = $rv['value'];
  7102. } else {
  7103. $data['series'][1]['data'][] = 0; // 防止空值
  7104. }
  7105. // 添加去年的数据
  7106. if (isset($qresult[$index]['value'])) {
  7107. $data['series'][2]['data'][] = $qresult[$index]['value'];
  7108. } else {
  7109. $data['series'][2]['data'][] = 0; // 防止空值
  7110. }
  7111. }
  7112. // 组织JSON返回结构
  7113. $res = [
  7114. 'status' => 0,
  7115. 'msg' => '',
  7116. 'data' => $data
  7117. ];
  7118. // 返回JSON响应
  7119. return json($res);
  7120. } else if($postData == '按责任部门') {
  7121. $qresult = json_decode($redis->get(md5('qianbmzl_redis')),true);
  7122. // 初始数据结构
  7123. $data = [
  7124. "categories" => [], // 客户单位
  7125. "series" => [
  7126. [
  7127. "name" => "同比增减百分比",
  7128. "type" => "line",
  7129. "yAxisIndex" => 1,
  7130. "data" => []
  7131. ],
  7132. [
  7133. "name" => date('Y').'年',
  7134. "type" => "bar",
  7135. "yAxisIndex" => 0,
  7136. "data" => []
  7137. ],
  7138. [
  7139. "name" => (date('Y')-1).'年',
  7140. "type" => "bar",
  7141. "yAxisIndex" => 0,
  7142. "data" => [],
  7143. ]
  7144. ]
  7145. ];
  7146. foreach ($r_list as $index => $rv) {
  7147. // 添加客户单位
  7148. $data['categories'][] = $rv['部门'];
  7149. // 计算同比增减百分比,并添加到相应的数据数组
  7150. if (isset($rv['投诉次数']) && isset($qresult[$index]['投诉次数']) && $qresult[$index]['投诉次数'] != 0) {
  7151. $percentage_change = round(($rv['投诉次数'] - $qresult[$index]['投诉次数']) / $qresult[$index]['投诉次数'] ,2);
  7152. $data['series'][0]['data'][] = $percentage_change; // 同比增减百分比
  7153. } else {
  7154. $data['series'][0]['data'][] = 0; // 防止错误计算
  7155. }
  7156. // 添加今年的数据
  7157. if (isset($rv['投诉次数'])) {
  7158. $data['series'][1]['data'][] = $rv['投诉次数'];
  7159. } else {
  7160. $data['series'][1]['data'][] = 0; // 防止空值
  7161. }
  7162. // 添加去年的数据
  7163. if (isset($qresult[$index]['投诉次数'])) {
  7164. $data['series'][2]['data'][] = $qresult[$index]['投诉次数'];
  7165. } else {
  7166. $data['series'][2]['data'][] = 0; // 防止空值
  7167. }
  7168. }
  7169. // 组织JSON返回结构
  7170. $res = [
  7171. 'status' => 0,
  7172. 'msg' => '',
  7173. 'data' => $data
  7174. ];
  7175. // 返回JSON响应
  7176. return json($res);
  7177. }else{
  7178. $qr_list = json_decode($redis->get(md5('qiankhzl_redis')),true);
  7179. $c_list = [];
  7180. foreach ($r_list as $item) {
  7181. $c_list[$item['cdwmc']][] = $item['cReasonCName'];
  7182. }
  7183. array_multisort($c_list, SORT_DESC);
  7184. $result = [];
  7185. $i = 0;
  7186. foreach ($c_list as $cdwmc => $reasons) {
  7187. $complaint_count = count($reasons);
  7188. $unique_reasons = array_count_values(array_filter($reasons)); // 去除空值并计算出现次数
  7189. // 构建质量问题的描述
  7190. $quality_issues = '';
  7191. foreach ($unique_reasons as $reason => $count) {
  7192. $quality_issues .= "{$reason}{$count}/";
  7193. }
  7194. // 去掉最后一个斜杠
  7195. $quality_issues = rtrim($quality_issues, '/');
  7196. // 添加到结果数组
  7197. $result[] = [
  7198. '客户单位' => $cdwmc,
  7199. '投诉次数' => $complaint_count
  7200. ];
  7201. }
  7202. $qc_list = [];
  7203. foreach ($qr_list as $qitem) {
  7204. $qc_list[$qitem['cdwmc']][] = $qitem['cReasonCName'];
  7205. }
  7206. array_multisort($qc_list, SORT_DESC);
  7207. $qresult = [];
  7208. $qi = 0;
  7209. foreach ($qc_list as $qcdwmc => $qreasons) {
  7210. $qcomplaint_count = count($qreasons);
  7211. $qunique_reasons = array_count_values(array_filter($qreasons)); // 去除空值并计算出现次数
  7212. // 构建质量问题的描述
  7213. $qquality_issues = '';
  7214. foreach ($qunique_reasons as $qreason => $qcount) {
  7215. $qquality_issues .= "{$qreason}{$qcount}/";
  7216. }
  7217. // 去掉最后一个斜杠
  7218. $qquality_issues = rtrim($qquality_issues, '/');
  7219. // 添加到结果数组
  7220. $qresult[] = [
  7221. '客户单位' => $qcdwmc,
  7222. '投诉次数' => $qcomplaint_count
  7223. ];
  7224. }
  7225. $result = array_slice($result, 0, 10);
  7226. $qresult = array_slice($qresult, 0, 10);
  7227. foreach ($result as $index => $rv) {
  7228. $list['categories'][] = $rv['客户单位'];
  7229. }
  7230. // 初始数据结构
  7231. $data = [
  7232. "categories" => [], // 客户单位
  7233. "series" => [
  7234. [
  7235. "name" => "同比增减百分比",
  7236. "type" => "line",
  7237. "yAxisIndex" => 1,
  7238. "data" => []
  7239. ],
  7240. [
  7241. "name" => date('Y').'年',
  7242. "type" => "bar",
  7243. "yAxisIndex" => 0,
  7244. "data" => []
  7245. ],
  7246. [
  7247. "name" => (date('Y')-1).'年',
  7248. "type" => "bar",
  7249. "yAxisIndex" => 0,
  7250. "data" => [],
  7251. ]
  7252. ]
  7253. ];
  7254. // 确保 $result 和 $qresult 索引的一致性
  7255. foreach ($result as $index => $rv) {
  7256. // 添加客户单位
  7257. $data['categories'][] = $rv['客户单位'];
  7258. // 计算同比增减百分比,并添加到相应的数据数组
  7259. if (isset($rv['投诉次数']) && isset($qresult[$index]['投诉次数']) && $qresult[$index]['投诉次数'] != 0) {
  7260. $percentage_change = round(($rv['投诉次数'] - $qresult[$index]['投诉次数']) / $qresult[$index]['投诉次数'] ,2);
  7261. $data['series'][0]['data'][] = $percentage_change; // 同比增减百分比
  7262. } else {
  7263. $data['series'][0]['data'][] = 0; // 防止错误计算
  7264. }
  7265. // 添加今年的数据
  7266. if (isset($rv['投诉次数'])) {
  7267. $data['series'][1]['data'][] = $rv['投诉次数'];
  7268. } else {
  7269. $data['series'][1]['data'][] = 0; // 防止空值
  7270. }
  7271. // 添加去年的数据
  7272. if (isset($qresult[$index]['投诉次数'])) {
  7273. $data['series'][2]['data'][] = $qresult[$index]['投诉次数'];
  7274. } else {
  7275. $data['series'][2]['data'][] = 0; // 防止空值
  7276. }
  7277. }
  7278. // 组织JSON返回结构
  7279. $res = [
  7280. 'status' => 0,
  7281. 'msg' => '',
  7282. 'data' => $data
  7283. ];
  7284. // 返回JSON响应
  7285. return json($res);
  7286. }
  7287. }
  7288. //当日重点产品机台检验情况->缓存
  7289. public function drzdcpjtjyqk_redis(){
  7290. $redis=redis();
  7291. $redis_key = md5('drzdcpjtjyqk_redis');
  7292. $sql = "SELECT zd.订单号,
  7293. zd.印件名称,
  7294. zd.生产机台,
  7295. jy.检验工序,
  7296. jy.检验类型,
  7297. jy.检验结果,
  7298. DATE_FORMAT(jy.检验时间, '%Y-%m-%d %H:%i') AS 检验时间,
  7299. jy.检验人
  7300. FROM (SELECT DISTINCT Dev.cName 生产机台,
  7301. job.cProductCode 订单号,
  7302. job.cProductName 印件名称,
  7303. dd.czlyq 质量等级,
  7304. dd.CZWKB 开本,
  7305. dd.ncs 印数,
  7306. dd.CYWDWMC 业务单位,
  7307. DATE_FORMAT(NOW(), '%Y-%m-%d') AS 生产日期
  7308. FROM scMachineJob Job
  7309. LEFT JOIN mcyd dd
  7310. ON dd.ccydh = job.cProductCode
  7311. LEFT JOIN (SELECT
  7312. t.iType,
  7313. t.ID,
  7314. t.cCode,
  7315. t.cName,
  7316. t.iGzzxId,
  7317. t.ID_BM,
  7318. t.cbmbh,
  7319. t.cbmmc,
  7320. t.cType_Sys,
  7321. t.iStop,
  7322. t.cType_Dev,
  7323. t.cShortName,
  7324. t.iTypeWage,
  7325. t.iOverProductType
  7326. FROM (
  7327. SELECT
  7328. 0 AS iType,
  7329. MKernel.ID,
  7330. MKernel.cBh AS cCode,
  7331. MKernel.cGzzxmc AS cName,
  7332. MKernel.ID AS iGzzxId,
  7333. dzBM.id AS ID_BM,
  7334. DZBM.cbmbh,
  7335. DZBM.cbmmc,
  7336. Mkernel.cGzzxlx AS cType_Sys,
  7337. MKernel.iStopUse AS iStop,
  7338. MKernel.cGzzxlx AS cType_Dev,
  7339. MKernel.cShortName,
  7340. 0 AS iTypeWage,
  7341. 0 AS iOverProductType
  7342. FROM
  7343. MKernel
  7344. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh
  7345. UNION
  7346. SELECT
  7347. 1 AS iType,
  7348. dzyssb.ID,
  7349. dzyssb.csbbh AS cCode,
  7350. dzyssb.csbmc AS cName,
  7351. Mkernel.ID AS iGzzxId,
  7352. dzBM.id AS ID_BM,
  7353. dzBM.cbmbh,
  7354. dzBM.cbmmc,
  7355. MKernel.cGzzxlx AS cType_Sys,
  7356. dzyssb.iStopUse AS iStop,
  7357. dzyssb.csblb AS cType_Dev,
  7358. dzyssb.cShortName,
  7359. 0 AS iTypeWage,
  7360. 0 AS iOverProductType
  7361. FROM
  7362. dzyssb
  7363. INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center
  7364. INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh
  7365. UNION
  7366. SELECT
  7367. 2 AS iType,
  7368. MKerJzmb.ID,
  7369. MKerJzmb.cJzbh AS cCode,
  7370. MKerJzmb.cJzmc AS cName,
  7371. MKerJzmb.iGzzxId,
  7372. dzBM.id AS ID_BM,
  7373. DZBM.cbmbh,
  7374. DZBM.cbmmc,
  7375. MKernel.cGzzxlx AS cType_Sys,
  7376. MKerJzmb.iStopUse AS iStop,
  7377. dzyssb.csblb AS cType_Dev,
  7378. MKerJzmb.cShortName,
  7379. MKerJzmb.iType AS iTypeWage,
  7380. MKerJzmb.iOverProductType
  7381. FROM
  7382. MKerJzmb
  7383. INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId
  7384. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh
  7385. INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid
  7386. UNION
  7387. SELECT
  7388. 3 AS iType,
  7389. iywdwid AS ID,
  7390. cywdwbh AS cCode,
  7391. cdwmc AS cName,
  7392. iywdwid AS iGzzxId,
  7393. iywdwid AS ID_BM,
  7394. cywdwbh AS cbmbh,
  7395. cdwmc AS cbmmc,
  7396. '' AS cType_Sys,
  7397. CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop,
  7398. '' AS cType_Dev,
  7399. DZYWDW.cjc AS cShortName,
  7400. 0 AS iTypeWage,
  7401. 0 AS iOverProductType
  7402. FROM
  7403. dzywdw
  7404. WHERE
  7405. bwjg = 1
  7406. UNION
  7407. SELECT
  7408. 3 AS iType,
  7409. -1,
  7410. '',
  7411. '外厂资源',
  7412. -1,
  7413. -1 AS ID_BM,
  7414. '',
  7415. '',
  7416. '' AS cType_Sys,
  7417. 0 AS iStop,
  7418. '' AS cType_Dev,
  7419. '外厂' AS cShortName,
  7420. 0 AS iTypeWage,
  7421. 0 AS iOverProductType
  7422. ) AS t
  7423. WHERE
  7424. (t.iStop = 0)) Dev
  7425. ON Dev.iType <> 3
  7426. AND Job.id_Machine = Dev.Id
  7427. AND Job.iType_Res = 0
  7428. WHERE Job.iStatus IN ( 0, 1, 2, 10, 20 )
  7429. AND Job.iJobType IN ( 0, 4 )
  7430. AND Job.iType_Res = 0
  7431. AND dd.cyjmc LIKE '%求是%'
  7432. OR ( Job.iStatus IN ( 0, 1, 2, 10, 20 )
  7433. AND Job.iJobType IN ( 0, 4 )
  7434. AND Job.iType_Res = 0
  7435. AND ( dd.Czlyq = '重点产品'
  7436. AND dd.cyjlx <> '杂志' ) )
  7437. AND ( Dev.cName <> '塑封机01号'
  7438. AND Dev.cName <> '塑封机02号' )
  7439. AND job.dPlanStart > DATE_FORMAT(NOW(), '%Y-%m-%d')
  7440. AND job.dPlanStart < DATE_FORMAT(NOW() + INTERVAL 2 DAY, '%Y-%m-%d'))zd
  7441. LEFT JOIN (SELECT t.productcode 订单号,
  7442. t.cName 印件名称,
  7443. t.iDetectionType 检验类型,
  7444. t.dFirstTime 检验时间,
  7445. t.cProcess 检验工序,
  7446. t.status 检验结果,
  7447. t.czgxm 检验人,
  7448. t.cJzmc
  7449. FROM (SELECT b.ID,
  7450. c.ID AS mainid,
  7451. 'XJBB' AS keyword,
  7452. b.Code_ProductOrder AS productcode,
  7453. b.Code_AProduct AS aproductcode,
  7454. b.Name_AProduct AS cName,
  7455. b.iVers,
  7456. '' AS salacode,
  7457. c.iDetectionNum,
  7458. CASE c.iDetectionType
  7459. WHEN 0 THEN '首检单'
  7460. WHEN 1 THEN '巡检单'
  7461. WHEN 2 THEN '自检单'
  7462. END AS iDetectionType,
  7463. c.dFirstTime,
  7464. c.cTeams,
  7465. c.cProcess,
  7466. e.cJzmc,
  7467. CASE c.iJobStatus
  7468. WHEN 0 THEN '合格'
  7469. WHEN 1 THEN '不合格'
  7470. WHEN 2 THEN '让步接收'
  7471. END AS status,
  7472. d.czgxm,
  7473. '' AS cResultNote
  7474. FROM (SELECT
  7475. a.ID,
  7476. a.cCode AS Code_ProductOrder,
  7477. b.cCode AS Code_AProduct,
  7478. b.cName AS Name_AProduct,
  7479. b.ID AS ID_Request,
  7480. a.ID_Mcyd,
  7481. 1 AS iVers,
  7482. b.cSize,
  7483. b.cUnit,
  7484. a.iAmount,
  7485. a.iAmount_In,
  7486. 0 AS nAmount_OB,
  7487. a.iAmount AS nAmount_W,
  7488. a.iState,
  7489. a.nUnitPlanWeight,
  7490. a.nActualWeight,
  7491. '' AS cCustomerCode,
  7492. '' AS cCustomerName,
  7493. d.cywdwbh,
  7494. d.cdwmc,
  7495. b.iTag_Group,
  7496. 0 AS iType,
  7497. 1 AS iNodePage,
  7498. 0 AS iType_P,
  7499. 1 AS iType_Origin,
  7500. a.ID AS id_origin,
  7501. c.DZDRQ AS dDate,
  7502. c.Dwcrq AS dInFinishDate,
  7503. c.CYWYXM,
  7504. c.DJFRQ,
  7505. c.CDF,
  7506. CONCAT(
  7507. IF(c.CBCYEAR <> '', CONCAT(c.CBCYEAR, '年'), ''),
  7508. IF(c.CBCmonth <> '', CONCAT(c.CBCmonth, '月'), ''),
  7509. IF(c.CBC <> '', CONCAT(c.CBC, '版'), ''),
  7510. IF(c.cYCyear <> '', CONCAT(c.cYCyear, '年'), ''),
  7511. IF(c.cYCmonth <> '', CONCAT(c.cYCmonth, '月'), ''),
  7512. IF(c.CYC <> '', CONCAT(c.CYC, '版'), '')
  7513. ) AS cBanCi
  7514. FROM
  7515. qlOrderProduct AS a
  7516. INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct
  7517. INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode
  7518. LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID
  7519. WHERE
  7520. (c.iCommited = 1) AND (c.ICYDSTATE <> -1)) b
  7521. INNER JOIN qcDetectionMain c
  7522. ON c.iOrder_Num = b.Code_ProductOrder
  7523. INNER JOIN dzZG d
  7524. ON c.iID_Roals = d.id
  7525. INNER JOIN MKerJzmb e
  7526. ON e.ID = c.cBoard
  7527. UNION ALL
  7528. SELECT b.ID,
  7529. g.ID AS mainid,
  7530. 'RQBB' AS keyword,
  7531. b.Code_ProductOrder AS productcode,
  7532. b.Code_AProduct AS aproductcode,
  7533. b.Name_AProduct AS cName,
  7534. b.iVers,
  7535. '' AS salacode,
  7536. h.cBillCode AS iDetectionNum,
  7537. '入库检验' AS iDetectionType,
  7538. h.dCheckDate AS dFirstTime,
  7539. '' AS cTeams,
  7540. '' AS cProcess,
  7541. '' AS cJzmc,
  7542. CASE g.iCheckResult
  7543. WHEN 0 THEN '合格'
  7544. WHEN 1 THEN '不合格'
  7545. WHEN 2 THEN '让步接收'
  7546. END AS status,
  7547. h.cCheckMan,
  7548. g.cResultNote
  7549. FROM (SELECT
  7550. a.ID,
  7551. a.cCode AS Code_ProductOrder,
  7552. b.cCode AS Code_AProduct,
  7553. b.cName AS Name_AProduct,
  7554. b.ID AS ID_Request,
  7555. a.ID_Mcyd,
  7556. 1 AS iVers,
  7557. b.cSize,
  7558. b.cUnit,
  7559. a.iAmount,
  7560. a.iAmount_In,
  7561. 0 AS nAmount_OB,
  7562. a.iAmount AS nAmount_W,
  7563. a.iState,
  7564. a.nUnitPlanWeight,
  7565. a.nActualWeight,
  7566. '' AS cCustomerCode,
  7567. '' AS cCustomerName,
  7568. d.cywdwbh,
  7569. d.cdwmc,
  7570. b.iTag_Group,
  7571. 0 AS iType,
  7572. 1 AS iNodePage,
  7573. 0 AS iType_P,
  7574. 1 AS iType_Origin,
  7575. a.ID AS id_origin,
  7576. c.DZDRQ AS dDate,
  7577. c.Dwcrq AS dInFinishDate,
  7578. c.CYWYXM,
  7579. c.DJFRQ,
  7580. c.CDF,
  7581. CONCAT(
  7582. IF(c.CBCYEAR <> '', CONCAT(c.CBCYEAR, '年'), ''),
  7583. IF(c.CBCmonth <> '', CONCAT(c.CBCmonth, '月'), ''),
  7584. IF(c.CBC <> '', CONCAT(c.CBC, '版'), ''),
  7585. IF(c.cYCyear <> '', CONCAT(c.cYCyear, '年'), ''),
  7586. IF(c.cYCmonth <> '', CONCAT(c.cYCmonth, '月'), ''),
  7587. IF(c.CYC <> '', CONCAT(c.CYC, '版'), '')
  7588. ) AS cBanCi
  7589. FROM
  7590. qlOrderProduct AS a
  7591. INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct
  7592. INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode
  7593. LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID
  7594. WHERE
  7595. (c.iCommited = 1) AND (c.ICYDSTATE <> -1)) b
  7596. INNER JOIN mtMaterialQualityCheckDetail g
  7597. ON g.ID_scProduct = b.ID
  7598. INNER JOIN mtMaterialQualityCheck h
  7599. ON h.ID = g.ID_Main
  7600. WHERE h.iStatus > 0
  7601. ) AS t
  7602. WHERE 1 = 1
  7603. AND t.iDetectionType ='巡检单'
  7604. )JY
  7605. ON zd.订单号 = JY.订单号 and
  7606. zd.生产机台 =JY.cJzmc
  7607. WHERE
  7608. jy.检验时间 is not null
  7609. ORDER BY zd.订单号 ,jy.检验时间 desc";
  7610. $res = Db::query($sql);
  7611. if($res){
  7612. $redis->set($redis_key, json_encode($res));
  7613. echo date("Y-m-d H:i:s").'存进去了';
  7614. return $res;
  7615. }
  7616. }
  7617. // 当日重点产品机台检验情况->接口
  7618. public function drzdcpjtjyqk() {
  7619. $redis = redis();
  7620. $drzdcpjtjyqk_data = json_decode($redis->get(md5('drzdcpjtjyqk_redis')), true);
  7621. // $drzdcpjtjyqk_data = array_filter($drzdcpjtjyqk_datas, function($item) {
  7622. // // 获取当前日期
  7623. // $current_date = date('Y-m-d');
  7624. // // 从检验时间中提取日期部分
  7625. // $inspection_date = substr($item['检验时间'], 0, 10);
  7626. // // 比较日期是否相等
  7627. // return $inspection_date === $current_date;
  7628. // });
  7629. $data = ['status' => 0, 'msg' => '', 'data' => ['columns' => [
  7630. ['name' => '订单号', 'id' => 'ddh', 'width' => '12', 'autoWrap' => "true", 'textAlign' => 'left'],
  7631. ['name' => '印件名称', 'id' => 'yjmc', 'width' => '34', 'autoWrap' => "true", 'textAlign' => 'left'],
  7632. ['name' => '生产机台', 'id' => 'scjt', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  7633. ['name' => '检验工序', 'id' => 'yjgx', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  7634. ['name' => '检验类型', 'id' => 'jylx', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  7635. ['name' => '检验结果', 'id' => 'jyjg', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  7636. ['name' => '检验时间', 'id' => 'jysj', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  7637. ['name' => '检验人', 'id' => 'jyr', 'width' => '9', 'autoWrap' => "true", 'textAlign' => 'left']
  7638. ], 'rows' => []]];
  7639. if (is_array($drzdcpjtjyqk_data) && !empty($drzdcpjtjyqk_data)) {
  7640. foreach ($drzdcpjtjyqk_data as $v) {
  7641. $data['data']['rows'][] = [
  7642. 'ddh' => $v['订单号'],
  7643. 'yjmc' => $v['印件名称'],
  7644. 'scjt' => $v['生产机台'],
  7645. 'yjgx' => $v['检验工序'],
  7646. 'jylx' => $v['检验类型'],
  7647. 'jyjg' => $v['检验结果'],
  7648. 'jysj' => $v['检验时间'],
  7649. 'jyr' => $v['检验人']
  7650. ];
  7651. }
  7652. } else {
  7653. $data['data']['rows'][] = ['ddh' => '', 'yjmc' => '', 'scjt' => '', 'yjgx' => '', 'jylx' => '', 'jyjg' => '', 'jysj' => '', 'jyr' => ''];
  7654. }
  7655. return json($data);
  7656. }
  7657. //无线胶订线近日重点产品检验情况->缓存
  7658. public function jd_zdcpjy_redis(){
  7659. $redis=redis();
  7660. $redis_key = md5('jd_zdcpjy_redis');
  7661. $sql = "SELECT zd.订单号,
  7662. zd.印件名称,
  7663. zd.生产机台,
  7664. jy.检验工序,
  7665. jy.检验类型,
  7666. jy.检验结果,
  7667. DATE_FORMAT(jy.检验时间, '%Y-%m-%d %H:%i') AS 检验时间,
  7668. jy.检验人
  7669. FROM (SELECT DISTINCT Dev.cName 生产机台,
  7670. job.cProductCode 订单号,
  7671. job.cProductName 印件名称,
  7672. dd.czlyq 质量等级,
  7673. dd.CZWKB 开本,
  7674. dd.ncs 印数,
  7675. dd.CYWDWMC 业务单位,
  7676. DATE_FORMAT(NOW(), '%Y-%m-%d') AS 生产日期
  7677. FROM scMachineJob Job
  7678. LEFT JOIN mcyd dd
  7679. ON dd.ccydh = job.cProductCode
  7680. LEFT JOIN (SELECT
  7681. t.iType,
  7682. t.ID,
  7683. t.cCode,
  7684. t.cName,
  7685. t.iGzzxId,
  7686. t.ID_BM,
  7687. t.cbmbh,
  7688. t.cbmmc,
  7689. t.cType_Sys,
  7690. t.iStop,
  7691. t.cType_Dev,
  7692. t.cShortName,
  7693. t.iTypeWage,
  7694. t.iOverProductType
  7695. FROM (
  7696. SELECT
  7697. 0 AS iType,
  7698. MKernel.ID,
  7699. MKernel.cBh AS cCode,
  7700. MKernel.cGzzxmc AS cName,
  7701. MKernel.ID AS iGzzxId,
  7702. dzBM.id AS ID_BM,
  7703. DZBM.cbmbh,
  7704. DZBM.cbmmc,
  7705. Mkernel.cGzzxlx AS cType_Sys,
  7706. MKernel.iStopUse AS iStop,
  7707. MKernel.cGzzxlx AS cType_Dev,
  7708. MKernel.cShortName,
  7709. 0 AS iTypeWage,
  7710. 0 AS iOverProductType
  7711. FROM
  7712. MKernel
  7713. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh
  7714. UNION
  7715. SELECT
  7716. 1 AS iType,
  7717. dzyssb.ID,
  7718. dzyssb.csbbh AS cCode,
  7719. dzyssb.csbmc AS cName,
  7720. Mkernel.ID AS iGzzxId,
  7721. dzBM.id AS ID_BM,
  7722. dzBM.cbmbh,
  7723. dzBM.cbmmc,
  7724. MKernel.cGzzxlx AS cType_Sys,
  7725. dzyssb.iStopUse AS iStop,
  7726. dzyssb.csblb AS cType_Dev,
  7727. dzyssb.cShortName,
  7728. 0 AS iTypeWage,
  7729. 0 AS iOverProductType
  7730. FROM
  7731. dzyssb
  7732. INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center
  7733. INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh
  7734. UNION
  7735. SELECT
  7736. 2 AS iType,
  7737. MKerJzmb.ID,
  7738. MKerJzmb.cJzbh AS cCode,
  7739. MKerJzmb.cJzmc AS cName,
  7740. MKerJzmb.iGzzxId,
  7741. dzBM.id AS ID_BM,
  7742. DZBM.cbmbh,
  7743. DZBM.cbmmc,
  7744. MKernel.cGzzxlx AS cType_Sys,
  7745. MKerJzmb.iStopUse AS iStop,
  7746. dzyssb.csblb AS cType_Dev,
  7747. MKerJzmb.cShortName,
  7748. MKerJzmb.iType AS iTypeWage,
  7749. MKerJzmb.iOverProductType
  7750. FROM
  7751. MKerJzmb
  7752. INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId
  7753. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh
  7754. INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid
  7755. UNION
  7756. SELECT
  7757. 3 AS iType,
  7758. iywdwid AS ID,
  7759. cywdwbh AS cCode,
  7760. cdwmc AS cName,
  7761. iywdwid AS iGzzxId,
  7762. iywdwid AS ID_BM,
  7763. cywdwbh AS cbmbh,
  7764. cdwmc AS cbmmc,
  7765. '' AS cType_Sys,
  7766. CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop,
  7767. '' AS cType_Dev,
  7768. DZYWDW.cjc AS cShortName,
  7769. 0 AS iTypeWage,
  7770. 0 AS iOverProductType
  7771. FROM
  7772. dzywdw
  7773. WHERE
  7774. bwjg = 1
  7775. UNION
  7776. SELECT
  7777. 3 AS iType,
  7778. -1,
  7779. '',
  7780. '外厂资源',
  7781. -1,
  7782. -1 AS ID_BM,
  7783. '',
  7784. '',
  7785. '' AS cType_Sys,
  7786. 0 AS iStop,
  7787. '' AS cType_Dev,
  7788. '外厂' AS cShortName,
  7789. 0 AS iTypeWage,
  7790. 0 AS iOverProductType
  7791. ) AS t
  7792. WHERE
  7793. (t.iStop = 0)) Dev
  7794. ON Dev.iType <> 3
  7795. AND Job.id_Machine = Dev.Id
  7796. AND Job.iType_Res = 0
  7797. WHERE Job.iStatus IN ( 0, 1, 2, 10, 20 )
  7798. AND Job.iJobType IN ( 0, 4 )
  7799. AND Job.iType_Res = 0
  7800. AND dd.cyjmc LIKE '%求是%'
  7801. OR ( Job.iStatus IN ( 0, 1, 2, 10, 20 )
  7802. AND Job.iJobType IN ( 0, 4 )
  7803. AND Job.iType_Res = 0
  7804. AND ( dd.cyjlx <> '杂志' ) )
  7805. AND ( Dev.cName <> '塑封机01号'
  7806. AND Dev.cName <> '塑封机02号' )
  7807. AND job.dPlanStart > DATE_FORMAT(NOW(), '%Y-%m-%d')
  7808. AND job.dPlanStart < DATE_FORMAT(NOW() + INTERVAL 2 DAY, '%Y-%m-%d'))zd
  7809. LEFT JOIN (SELECT t.productcode 订单号,
  7810. t.cName 印件名称,
  7811. t.iDetectionType 检验类型,
  7812. t.dFirstTime 检验时间,
  7813. t.cProcess 检验工序,
  7814. t.status 检验结果,
  7815. t.czgxm 检验人,
  7816. t.cJzmc
  7817. FROM (SELECT b.ID,
  7818. c.ID AS mainid,
  7819. 'XJBB' AS keyword,
  7820. b.Code_ProductOrder AS productcode,
  7821. b.Code_AProduct AS aproductcode,
  7822. b.Name_AProduct AS cName,
  7823. b.iVers,
  7824. '' AS salacode,
  7825. c.iDetectionNum,
  7826. CASE c.iDetectionType
  7827. WHEN 0 THEN '首检单'
  7828. WHEN 1 THEN '巡检单'
  7829. WHEN 2 THEN '自检单'
  7830. END AS iDetectionType,
  7831. c.dFirstTime,
  7832. c.cTeams,
  7833. c.cProcess,
  7834. e.cJzmc,
  7835. CASE c.iJobStatus
  7836. WHEN 0 THEN '合格'
  7837. WHEN 1 THEN '不合格'
  7838. WHEN 2 THEN '让步接收'
  7839. END AS status,
  7840. d.czgxm,
  7841. '' AS cResultNote
  7842. FROM (SELECT
  7843. a.ID,
  7844. a.cCode AS Code_ProductOrder,
  7845. b.cCode AS Code_AProduct,
  7846. b.cName AS Name_AProduct,
  7847. b.ID AS ID_Request,
  7848. a.ID_Mcyd,
  7849. 1 AS iVers,
  7850. b.cSize,
  7851. b.cUnit,
  7852. a.iAmount,
  7853. a.iAmount_In,
  7854. 0 AS nAmount_OB,
  7855. a.iAmount AS nAmount_W,
  7856. a.iState,
  7857. a.nUnitPlanWeight,
  7858. a.nActualWeight,
  7859. '' AS cCustomerCode,
  7860. '' AS cCustomerName,
  7861. d.cywdwbh,
  7862. d.cdwmc,
  7863. b.iTag_Group,
  7864. 0 AS iType,
  7865. 1 AS iNodePage,
  7866. 0 AS iType_P,
  7867. 1 AS iType_Origin,
  7868. a.ID AS id_origin,
  7869. c.DZDRQ AS dDate,
  7870. c.Dwcrq AS dInFinishDate,
  7871. c.CYWYXM,
  7872. c.DJFRQ,
  7873. c.CDF,
  7874. CONCAT(
  7875. IF(c.CBCYEAR <> '', CONCAT(c.CBCYEAR, '年'), ''),
  7876. IF(c.CBCmonth <> '', CONCAT(c.CBCmonth, '月'), ''),
  7877. IF(c.CBC <> '', CONCAT(c.CBC, '版'), ''),
  7878. IF(c.cYCyear <> '', CONCAT(c.cYCyear, '年'), ''),
  7879. IF(c.cYCmonth <> '', CONCAT(c.cYCmonth, '月'), ''),
  7880. IF(c.CYC <> '', CONCAT(c.CYC, '版'), '')
  7881. ) AS cBanCi
  7882. FROM
  7883. qlOrderProduct AS a
  7884. INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct
  7885. INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode
  7886. LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID
  7887. WHERE
  7888. (c.iCommited = 1) AND (c.ICYDSTATE <> -1)) b
  7889. INNER JOIN qcDetectionMain c
  7890. ON c.iOrder_Num = b.Code_ProductOrder
  7891. INNER JOIN dzZG d
  7892. ON c.iID_Roals = d.id
  7893. INNER JOIN MKerJzmb e
  7894. ON e.ID = c.cBoard
  7895. UNION ALL
  7896. SELECT b.ID,
  7897. g.ID AS mainid,
  7898. 'RQBB' AS keyword,
  7899. b.Code_ProductOrder AS productcode,
  7900. b.Code_AProduct AS aproductcode,
  7901. b.Name_AProduct AS cName,
  7902. b.iVers,
  7903. '' AS salacode,
  7904. h.cBillCode AS iDetectionNum,
  7905. '入库检验' AS iDetectionType,
  7906. h.dCheckDate AS dFirstTime,
  7907. '' AS cTeams,
  7908. '' AS cProcess,
  7909. '' AS cJzmc,
  7910. CASE g.iCheckResult
  7911. WHEN 0 THEN '合格'
  7912. WHEN 1 THEN '不合格'
  7913. WHEN 2 THEN '让步接收'
  7914. END AS status,
  7915. h.cCheckMan,
  7916. g.cResultNote
  7917. FROM (SELECT
  7918. a.ID,
  7919. a.cCode AS Code_ProductOrder,
  7920. b.cCode AS Code_AProduct,
  7921. b.cName AS Name_AProduct,
  7922. b.ID AS ID_Request,
  7923. a.ID_Mcyd,
  7924. 1 AS iVers,
  7925. b.cSize,
  7926. b.cUnit,
  7927. a.iAmount,
  7928. a.iAmount_In,
  7929. 0 AS nAmount_OB,
  7930. a.iAmount AS nAmount_W,
  7931. a.iState,
  7932. a.nUnitPlanWeight,
  7933. a.nActualWeight,
  7934. '' AS cCustomerCode,
  7935. '' AS cCustomerName,
  7936. d.cywdwbh,
  7937. d.cdwmc,
  7938. b.iTag_Group,
  7939. 0 AS iType,
  7940. 1 AS iNodePage,
  7941. 0 AS iType_P,
  7942. 1 AS iType_Origin,
  7943. a.ID AS id_origin,
  7944. c.DZDRQ AS dDate,
  7945. c.Dwcrq AS dInFinishDate,
  7946. c.CYWYXM,
  7947. c.DJFRQ,
  7948. c.CDF,
  7949. CONCAT(
  7950. IF(c.CBCYEAR <> '', CONCAT(c.CBCYEAR, '年'), ''),
  7951. IF(c.CBCmonth <> '', CONCAT(c.CBCmonth, '月'), ''),
  7952. IF(c.CBC <> '', CONCAT(c.CBC, '版'), ''),
  7953. IF(c.cYCyear <> '', CONCAT(c.cYCyear, '年'), ''),
  7954. IF(c.cYCmonth <> '', CONCAT(c.cYCmonth, '月'), ''),
  7955. IF(c.CYC <> '', CONCAT(c.CYC, '版'), '')
  7956. ) AS cBanCi
  7957. FROM
  7958. qlOrderProduct AS a
  7959. INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct
  7960. INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode
  7961. LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID
  7962. WHERE
  7963. (c.iCommited = 1) AND (c.ICYDSTATE <> -1)) b
  7964. INNER JOIN mtMaterialQualityCheckDetail g
  7965. ON g.ID_scProduct = b.ID
  7966. INNER JOIN mtMaterialQualityCheck h
  7967. ON h.ID = g.ID_Main
  7968. WHERE h.iStatus > 0
  7969. ) AS t
  7970. WHERE 1 = 1
  7971. -- AND t.iDetectionType ='巡检单'
  7972. )JY
  7973. ON zd.订单号 = JY.订单号 and
  7974. zd.生产机台 =JY.cJzmc
  7975. WHERE
  7976. jy.检验时间 is not null
  7977. and zd.生产机台 IN('胶订潮流1号', '胶订潮流2号', '胶订精密达1号', '胶订精密达2号', '胶订精密达3号')
  7978. ORDER BY zd.订单号 ,jy.检验时间 desc ";
  7979. $res = Db::query($sql);
  7980. if($res){
  7981. $redis->set($redis_key, json_encode($res));
  7982. echo date("Y-m-d H:i:s").'存进去了';
  7983. return $res;
  7984. }
  7985. }
  7986. //无线胶订线近日重点产品检验情况->接口
  7987. public function jd_zdcpjy(){
  7988. $redis = redis();
  7989. $drzdcpjtjyqk_datas = json_decode($redis->get(md5('jd_zdcpjy_redis')), true);
  7990. // $drzdcpjtjyqk_data = array_filter($drzdcpjtjyqk_datas, function($item) {
  7991. // // 获取当前日期
  7992. // $current_date = date('Y-m-d');
  7993. // // 获取三天前的日期
  7994. // $three_days_ago = date('Y-m-d');
  7995. // //$three_days_ago = date('Y-m-d', strtotime('-1 days'));
  7996. // // 从检验时间中提取日期部分
  7997. // $inspection_date = substr($item['检验时间'], 0, 10);
  7998. // // 比较日期是否在近三天内
  7999. // return $inspection_date >= $three_days_ago && $inspection_date <= $current_date;
  8000. // });
  8001. //时间排序【倒序排序】
  8002. // usort($drzdcpjtjyqk_data, function($a, $b) {
  8003. // return strcmp($b['检验时间'], $a['检验时间']);
  8004. // });
  8005. //接口显示字段
  8006. $data = ['status' => 0, 'msg' => '', 'data' => ['columns' => [
  8007. ['name' => '订单号', 'id' => 'ddh', 'width' => '12', 'autoWrap' => "true", 'textAlign' => 'left'],
  8008. ['name' => '印件名称', 'id' => 'yjmc', 'width' => '34', 'autoWrap' => "true", 'textAlign' => 'left'],
  8009. ['name' => '生产机台', 'id' => 'scjt', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8010. ['name' => '检验工序', 'id' => 'yjgx', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8011. ['name' => '检验类型', 'id' => 'jylx', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8012. ['name' => '检验结果', 'id' => 'jyjg', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8013. ['name' => '检验时间', 'id' => 'jysj', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8014. ['name' => '检验人', 'id' => 'jyr', 'width' => '9', 'autoWrap' => "true", 'textAlign' => 'left']
  8015. ], 'rows' => []]];
  8016. //取数据
  8017. if (is_array($drzdcpjtjyqk_datas) && !empty($drzdcpjtjyqk_datas)) {
  8018. foreach ($drzdcpjtjyqk_datas as $v) {
  8019. $data['data']['rows'][] = [
  8020. 'ddh' => $v['订单号'],
  8021. 'yjmc' => $v['印件名称'],
  8022. 'scjt' => $v['生产机台'],
  8023. 'yjgx' => $v['检验工序'],
  8024. 'jylx' => $v['检验类型'],
  8025. 'jyjg' => $v['检验结果'],
  8026. 'jysj' => $v['检验时间'],
  8027. 'jyr' => $v['检验人']
  8028. ];
  8029. }
  8030. } else {
  8031. //数据为空赋值为空
  8032. $data['data']['rows'][] = ['ddh' => '', 'yjmc' => '', 'scjt' => '', 'yjgx' => '', 'jylx' => '', 'jyjg' => '', 'jysj' => '', 'jyr' => ''];
  8033. }
  8034. return json($data);
  8035. }
  8036. //本周常情况反馈->缓存
  8037. public function ycfk_redis(){
  8038. $redis=redis();
  8039. $redis_key = md5('ycfk_redis');
  8040. $sql = "SELECT CASE iState
  8041. WHEN 0 THEN '未提交'
  8042. WHEN 10 THEN '未确认'
  8043. WHEN 20 THEN '未结案'
  8044. WHEN 30 THEN '已结案'
  8045. END AS 状态,
  8046. EFB.cProduceOrder AS 订单号,
  8047. EFB.cProductName AS 印件名称,
  8048. EFB.cFBPerson AS 反馈人,
  8049. DATE_FORMAT(EFB.dFBDate, '%Y-%m-%d %H:%i') AS 反馈时间,
  8050. EFB.cWorkStation AS 工作机台,
  8051. IFNULL(D.cExceptionItem, '') AS 异常项目,
  8052. COALESCE(D.cDescription, D.cExceptionItem, '') AS 异常描述
  8053. FROM ecExceptionFeedBack EFB
  8054. LEFT JOIN ecExceptionDetail D
  8055. ON EFB.iID = D.iMainID
  8056. LEFT JOIN ecExceptionResponsibility R
  8057. ON D.iID = R.iExDetailID
  8058. WHERE DATE_FORMAT(EFB.dFBDate, '%Y-%m-%d') BETWEEN DATE_FORMAT(DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY), '%Y-%m-%d') AND DATE_FORMAT(CURRENT_DATE, '%Y-%m-%d')
  8059. ORDER BY EFB.dFBDate DESC;";
  8060. $res = Db::query($sql);
  8061. if($res){
  8062. $redis->set($redis_key, json_encode($res));
  8063. echo date("Y-m-d H:i:s").'存进去了';
  8064. return $res;
  8065. }
  8066. }
  8067. //本周常情况反馈->接口
  8068. public function ycfk() {
  8069. $redis = redis();
  8070. $list = json_decode($redis->get(md5('ycfk_redis')), true);
  8071. $result['columns']=[
  8072. ['name'=>'状态','id'=>'zt','width'=>'8','autoWrap'=>"true",'textAlign'=>'left'],
  8073. ['name'=>'订单号','id'=>'ddh','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'],
  8074. ['name'=>'印件名称','id'=>'yjmc','width'=>'26','autoWrap'=>"true",'textAlign'=>'left'],
  8075. ['name'=>'反馈人','id'=>'fkr','width'=>'10','autoWrap'=>"true",'textAlign'=>'left'],
  8076. ['name'=>'反馈时间','id'=>'fksj','width'=>'13','autoWrap'=>"true",'textAlign'=>'left'],
  8077. ['name'=>'工作机台','id'=>'hzjt','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'],
  8078. ['name'=>'异常项目','id'=>'fkxm','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'],
  8079. ['name'=>'异常描述','id'=>'ycms','width'=>'14','autoWrap'=>"true",'textAlign'=>'left']
  8080. ];
  8081. foreach($list as $k=>$v){
  8082. $result['rows'][$k]['zt'] = $v['状态'];
  8083. $result['rows'][$k]['ddh'] = $v['订单号'];
  8084. $result['rows'][$k]['yjmc'] = $v['印件名称'];
  8085. $result['rows'][$k]['fkr'] = $v['反馈人'];
  8086. $result['rows'][$k]['fksj'] = $v['反馈时间'];
  8087. $result['rows'][$k]['hzjt'] = $v['工作机台'];
  8088. $result['rows'][$k]['fkxm'] = $v['异常项目'];
  8089. $result['rows'][$k]['ycms'] = $v['异常描述'];
  8090. }
  8091. // 如果过滤后的列表为空,则添加空数据行
  8092. // 注意:这里似乎有一个未定义的变量$filtered_list,你可能需要确保它在使用前已被正确定义和过滤
  8093. if(empty($filtered_list)){
  8094. $result['rows'][] = ['zt'=>'', 'ddh'=>'', 'yjmc'=>'','fkr'=>'', 'fksj'=>'', 'hzjt'=>'', 'fkxm'=>'', 'ycms'=>''];
  8095. }
  8096. $res['status'] = 0;
  8097. $res['msg'] = '';
  8098. $res['data'] = $result;
  8099. return json($res);
  8100. }
  8101. //当日生产的印件巡检情况->缓存
  8102. public function scyjxjqk_redis(){
  8103. $redis=redis();
  8104. $redis_key = md5('scyjxjqk_redis');
  8105. $sql = "SELECT zd.订单号,
  8106. zd.印件名称,
  8107. zd.生产机台,
  8108. jy.检验工序,
  8109. jy.检验类型,
  8110. jy.检验结果,
  8111. DATE_FORMAT(jy.检验时间, '%Y-%m-%d %H:%i') AS 检验时间,
  8112. jy.检验人
  8113. FROM (SELECT DISTINCT Dev.cName 生产机台,
  8114. job.cProductCode 订单号,
  8115. job.cProductName 印件名称,
  8116. dd.czlyq 质量等级,
  8117. dd.CZWKB 开本,
  8118. dd.ncs 印数,
  8119. dd.CYWDWMC 业务单位,
  8120. DATE_FORMAT(NOW(), '%Y-%m-%d') AS 生产日期
  8121. FROM scMachineJob Job
  8122. LEFT JOIN mcyd dd
  8123. ON dd.ccydh = job.cProductCode
  8124. LEFT JOIN (SELECT
  8125. t.iType,
  8126. t.ID,
  8127. t.cCode,
  8128. t.cName,
  8129. t.iGzzxId,
  8130. t.ID_BM,
  8131. t.cbmbh,
  8132. t.cbmmc,
  8133. t.cType_Sys,
  8134. t.iStop,
  8135. t.cType_Dev,
  8136. t.cShortName,
  8137. t.iTypeWage,
  8138. t.iOverProductType
  8139. FROM (
  8140. SELECT
  8141. 0 AS iType,
  8142. MKernel.ID,
  8143. MKernel.cBh AS cCode,
  8144. MKernel.cGzzxmc AS cName,
  8145. MKernel.ID AS iGzzxId,
  8146. dzBM.id AS ID_BM,
  8147. DZBM.cbmbh,
  8148. DZBM.cbmmc,
  8149. Mkernel.cGzzxlx AS cType_Sys,
  8150. MKernel.iStopUse AS iStop,
  8151. MKernel.cGzzxlx AS cType_Dev,
  8152. MKernel.cShortName,
  8153. 0 AS iTypeWage,
  8154. 0 AS iOverProductType
  8155. FROM
  8156. MKernel
  8157. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh
  8158. UNION
  8159. SELECT
  8160. 1 AS iType,
  8161. dzyssb.ID,
  8162. dzyssb.csbbh AS cCode,
  8163. dzyssb.csbmc AS cName,
  8164. Mkernel.ID AS iGzzxId,
  8165. dzBM.id AS ID_BM,
  8166. dzBM.cbmbh,
  8167. dzBM.cbmmc,
  8168. MKernel.cGzzxlx AS cType_Sys,
  8169. dzyssb.iStopUse AS iStop,
  8170. dzyssb.csblb AS cType_Dev,
  8171. dzyssb.cShortName,
  8172. 0 AS iTypeWage,
  8173. 0 AS iOverProductType
  8174. FROM
  8175. dzyssb
  8176. INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center
  8177. INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh
  8178. UNION
  8179. SELECT
  8180. 2 AS iType,
  8181. MKerJzmb.ID,
  8182. MKerJzmb.cJzbh AS cCode,
  8183. MKerJzmb.cJzmc AS cName,
  8184. MKerJzmb.iGzzxId,
  8185. dzBM.id AS ID_BM,
  8186. DZBM.cbmbh,
  8187. DZBM.cbmmc,
  8188. MKernel.cGzzxlx AS cType_Sys,
  8189. MKerJzmb.iStopUse AS iStop,
  8190. dzyssb.csblb AS cType_Dev,
  8191. MKerJzmb.cShortName,
  8192. MKerJzmb.iType AS iTypeWage,
  8193. MKerJzmb.iOverProductType
  8194. FROM
  8195. MKerJzmb
  8196. INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId
  8197. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh
  8198. INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid
  8199. UNION
  8200. SELECT
  8201. 3 AS iType,
  8202. iywdwid AS ID,
  8203. cywdwbh AS cCode,
  8204. cdwmc AS cName,
  8205. iywdwid AS iGzzxId,
  8206. iywdwid AS ID_BM,
  8207. cywdwbh AS cbmbh,
  8208. cdwmc AS cbmmc,
  8209. '' AS cType_Sys,
  8210. CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop,
  8211. '' AS cType_Dev,
  8212. DZYWDW.cjc AS cShortName,
  8213. 0 AS iTypeWage,
  8214. 0 AS iOverProductType
  8215. FROM
  8216. dzywdw
  8217. WHERE
  8218. bwjg = 1
  8219. UNION
  8220. SELECT
  8221. 3 AS iType,
  8222. -1,
  8223. '',
  8224. '外厂资源',
  8225. -1,
  8226. -1 AS ID_BM,
  8227. '',
  8228. '',
  8229. '' AS cType_Sys,
  8230. 0 AS iStop,
  8231. '' AS cType_Dev,
  8232. '外厂' AS cShortName,
  8233. 0 AS iTypeWage,
  8234. 0 AS iOverProductType
  8235. ) AS t
  8236. WHERE
  8237. (t.iStop = 0)) Dev
  8238. ON Dev.iType <> 3
  8239. AND Job.id_Machine = Dev.Id
  8240. AND Job.iType_Res = 0
  8241. WHERE Job.iStatus IN ( 0, 1, 2, 10, 20 )
  8242. AND Job.iJobType IN ( 0, 4 )
  8243. AND Job.iType_Res = 0
  8244. AND dd.cyjmc LIKE '%求是%'
  8245. OR ( Job.iStatus IN ( 0, 1, 2, 10, 20 )
  8246. AND Job.iJobType IN ( 0, 4 )
  8247. AND Job.iType_Res = 0
  8248. AND ( dd.Czlyq <> '重点产品'
  8249. AND dd.cyjlx <> '杂志' ) )
  8250. AND ( Dev.cName <> '塑封机01号'
  8251. AND Dev.cName <> '塑封机02号' )
  8252. AND job.dPlanStart > DATE_FORMAT(NOW(), '%Y-%m-%d')
  8253. AND job.dPlanStart < DATE_FORMAT(NOW() + INTERVAL 2 DAY, '%Y-%m-%d'))zd
  8254. LEFT JOIN (SELECT t.productcode 订单号,
  8255. t.cName 印件名称,
  8256. t.iDetectionType 检验类型,
  8257. t.dFirstTime 检验时间,
  8258. t.cProcess 检验工序,
  8259. t.status 检验结果,
  8260. t.czgxm 检验人,
  8261. t.cJzmc
  8262. FROM (SELECT b.ID,
  8263. c.ID AS mainid,
  8264. 'XJBB' AS keyword,
  8265. b.Code_ProductOrder AS productcode,
  8266. b.Code_AProduct AS aproductcode,
  8267. b.Name_AProduct AS cName,
  8268. b.iVers,
  8269. '' AS salacode,
  8270. c.iDetectionNum,
  8271. CASE c.iDetectionType
  8272. WHEN 0 THEN '首检单'
  8273. WHEN 1 THEN '巡检单'
  8274. WHEN 2 THEN '自检单'
  8275. END AS iDetectionType,
  8276. c.dFirstTime,
  8277. c.cTeams,
  8278. c.cProcess,
  8279. e.cJzmc,
  8280. CASE c.iJobStatus
  8281. WHEN 0 THEN '合格'
  8282. WHEN 1 THEN '不合格'
  8283. WHEN 2 THEN '让步接收'
  8284. END AS status,
  8285. d.czgxm,
  8286. '' AS cResultNote
  8287. FROM (SELECT
  8288. a.ID,
  8289. a.cCode AS Code_ProductOrder,
  8290. b.cCode AS Code_AProduct,
  8291. b.cName AS Name_AProduct,
  8292. b.ID AS ID_Request,
  8293. a.ID_Mcyd,
  8294. 1 AS iVers,
  8295. b.cSize,
  8296. b.cUnit,
  8297. a.iAmount,
  8298. a.iAmount_In,
  8299. 0 AS nAmount_OB,
  8300. a.iAmount AS nAmount_W,
  8301. a.iState,
  8302. a.nUnitPlanWeight,
  8303. a.nActualWeight,
  8304. '' AS cCustomerCode,
  8305. '' AS cCustomerName,
  8306. d.cywdwbh,
  8307. d.cdwmc,
  8308. b.iTag_Group,
  8309. 0 AS iType,
  8310. 1 AS iNodePage,
  8311. 0 AS iType_P,
  8312. 1 AS iType_Origin,
  8313. a.ID AS id_origin,
  8314. c.DZDRQ AS dDate,
  8315. c.Dwcrq AS dInFinishDate,
  8316. c.CYWYXM,
  8317. c.DJFRQ,
  8318. c.CDF,
  8319. CONCAT(
  8320. IF(c.CBCYEAR <> '', CONCAT(c.CBCYEAR, '年'), ''),
  8321. IF(c.CBCmonth <> '', CONCAT(c.CBCmonth, '月'), ''),
  8322. IF(c.CBC <> '', CONCAT(c.CBC, '版'), ''),
  8323. IF(c.cYCyear <> '', CONCAT(c.cYCyear, '年'), ''),
  8324. IF(c.cYCmonth <> '', CONCAT(c.cYCmonth, '月'), ''),
  8325. IF(c.CYC <> '', CONCAT(c.CYC, '版'), '')
  8326. ) AS cBanCi
  8327. FROM
  8328. qlOrderProduct AS a
  8329. INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct
  8330. INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode
  8331. LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID
  8332. WHERE
  8333. (c.iCommited = 1) AND (c.ICYDSTATE <> -1)) b
  8334. INNER JOIN qcDetectionMain c
  8335. ON c.iOrder_Num = b.Code_ProductOrder
  8336. INNER JOIN dzZG d
  8337. ON c.iID_Roals = d.id
  8338. INNER JOIN MKerJzmb e
  8339. ON e.ID = c.cBoard
  8340. UNION ALL
  8341. SELECT b.ID,
  8342. g.ID AS mainid,
  8343. 'RQBB' AS keyword,
  8344. b.Code_ProductOrder AS productcode,
  8345. b.Code_AProduct AS aproductcode,
  8346. b.Name_AProduct AS cName,
  8347. b.iVers,
  8348. '' AS salacode,
  8349. h.cBillCode AS iDetectionNum,
  8350. '入库检验' AS iDetectionType,
  8351. h.dCheckDate AS dFirstTime,
  8352. '' AS cTeams,
  8353. '' AS cProcess,
  8354. '' AS cJzmc,
  8355. CASE g.iCheckResult
  8356. WHEN 0 THEN '合格'
  8357. WHEN 1 THEN '不合格'
  8358. WHEN 2 THEN '让步接收'
  8359. END AS status,
  8360. h.cCheckMan,
  8361. g.cResultNote
  8362. FROM (SELECT
  8363. a.ID,
  8364. a.cCode AS Code_ProductOrder,
  8365. b.cCode AS Code_AProduct,
  8366. b.cName AS Name_AProduct,
  8367. b.ID AS ID_Request,
  8368. a.ID_Mcyd,
  8369. 1 AS iVers,
  8370. b.cSize,
  8371. b.cUnit,
  8372. a.iAmount,
  8373. a.iAmount_In,
  8374. 0 AS nAmount_OB,
  8375. a.iAmount AS nAmount_W,
  8376. a.iState,
  8377. a.nUnitPlanWeight,
  8378. a.nActualWeight,
  8379. '' AS cCustomerCode,
  8380. '' AS cCustomerName,
  8381. d.cywdwbh,
  8382. d.cdwmc,
  8383. b.iTag_Group,
  8384. 0 AS iType,
  8385. 1 AS iNodePage,
  8386. 0 AS iType_P,
  8387. 1 AS iType_Origin,
  8388. a.ID AS id_origin,
  8389. c.DZDRQ AS dDate,
  8390. c.Dwcrq AS dInFinishDate,
  8391. c.CYWYXM,
  8392. c.DJFRQ,
  8393. c.CDF,
  8394. CONCAT(
  8395. IF(c.CBCYEAR <> '', CONCAT(c.CBCYEAR, '年'), ''),
  8396. IF(c.CBCmonth <> '', CONCAT(c.CBCmonth, '月'), ''),
  8397. IF(c.CBC <> '', CONCAT(c.CBC, '版'), ''),
  8398. IF(c.cYCyear <> '', CONCAT(c.cYCyear, '年'), ''),
  8399. IF(c.cYCmonth <> '', CONCAT(c.cYCmonth, '月'), ''),
  8400. IF(c.CYC <> '', CONCAT(c.CYC, '版'), '')
  8401. ) AS cBanCi
  8402. FROM
  8403. qlOrderProduct AS a
  8404. INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct
  8405. INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode
  8406. LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID
  8407. WHERE
  8408. (c.iCommited = 1) AND (c.ICYDSTATE <> -1)) b
  8409. INNER JOIN mtMaterialQualityCheckDetail g
  8410. ON g.ID_scProduct = b.ID
  8411. INNER JOIN mtMaterialQualityCheck h
  8412. ON h.ID = g.ID_Main
  8413. WHERE h.iStatus > 0
  8414. ) AS t
  8415. WHERE 1 = 1
  8416. AND t.iDetectionType ='巡检单'
  8417. )JY
  8418. ON zd.订单号 = JY.订单号 and
  8419. zd.生产机台 =JY.cJzmc
  8420. WHERE
  8421. jy.检验时间 is not null
  8422. ORDER BY zd.订单号,jy.检验时间 desc";
  8423. $res = Db::query($sql);
  8424. if($res){
  8425. $redis->set($redis_key, json_encode($res));
  8426. echo date("Y-m-d H:i:s").'存进去了';
  8427. return $res;
  8428. }
  8429. }
  8430. // 当日生产的印件巡检情况->接口
  8431. public function scyjxjqk() {
  8432. $redis = redis();
  8433. $list = json_decode($redis->get(md5('scyjxjqk_redis')), true);
  8434. // $list = array_filter($lists, function($item) {
  8435. // // 获取当前日期
  8436. // $current_date = date('Y-m-d');
  8437. // // 从检验时间中提取日期部分
  8438. // $inspection_date = substr($item['检验时间'], 0, 10);
  8439. // // 比较日期是否相等
  8440. // return $inspection_date === $current_date;
  8441. // });
  8442. $data = ['status' => 0, 'msg' => '', 'data' => ['columns' => [
  8443. ['name' => '订单号', 'id' => 'ddh', 'width' => '12', 'autoWrap' => "true", 'textAlign' => 'left'],
  8444. ['name' => '印件名称', 'id' => 'yjmc', 'width' => '34', 'autoWrap' => "true", 'textAlign' => 'left'],
  8445. ['name' => '生产机台', 'id' => 'scjt', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8446. ['name' => '检验工序', 'id' => 'yjgx', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8447. ['name' => '检验类型', 'id' => 'jylx', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8448. ['name' => '检验结果', 'id' => 'jyjg', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8449. ['name' => '检验时间', 'id' => 'jysj', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8450. ['name' => '检验人', 'id' => 'jyr', 'width' => '9', 'autoWrap' => "true", 'textAlign' => 'left']
  8451. ], 'rows' => []]];
  8452. if (is_array($list) && !empty($list)) {
  8453. foreach ($list as $v) {
  8454. $data['data']['rows'][] = [
  8455. 'ddh' => $v['订单号'],
  8456. 'yjmc'=> $v['印件名称'],
  8457. 'scjt' => $v['生产机台'],
  8458. 'jygx' => $v['检验工序'],
  8459. 'jylx' => $v['检验类型'],
  8460. 'jyjg' => $v['检验结果'],
  8461. 'jysj' => $v['检验时间'],
  8462. 'jyr'=> $v['检验人']
  8463. ];
  8464. }
  8465. } else {
  8466. $data['data']['rows'][] = ['ddh'=>'', 'yjmc'=>'', 'scjt'=>'','jygx'=>'', 'jylx'=>'', 'jyjg'=>'', 'jysj'=>'', 'jyr'=>''];
  8467. }
  8468. return json($data);
  8469. }
  8470. //客户投诉 (质量问题(按客户))---》暂时用不到
  8471. public function khts(){
  8472. $redis=redis();
  8473. $redis_key = md5('khzl_redis');
  8474. $redis_data = $redis->get($redis_key);
  8475. $result=json_decode($redis_data,true);
  8476. $result=$result['data']['rows'];
  8477. $result=array_splice($result,0,6);
  8478. // halt($result);
  8479. foreach($result as $k=>$v){
  8480. // $list[$k]['name']=$v['khdw'];
  8481. // 截取前十一个字符
  8482. $list[$k]['name'] = mb_substr(str_replace('有限公司', '', $v['khdw']), 0, 9).'...';
  8483. $list[$k]['value']=$v['tscs'];
  8484. }
  8485. $res['status']=0;
  8486. $res['msg']='';
  8487. $res['data']=$list;
  8488. // halt($res);
  8489. return json($res);
  8490. }
  8491. //责任部门 (质量问题(按部门))---》暂时用不到
  8492. public function zrbm(){
  8493. $redis=redis();
  8494. $redis_key = md5('bmzl_redis');
  8495. $redis_data = $redis->get($redis_key);
  8496. $result=json_decode($redis_data,true);
  8497. $result=$result['data']['rows'];
  8498. $result = array_splice($result, 0, 6);
  8499. foreach($result as $k => $v){
  8500. $list[$k]['name'] = $v['bm'];
  8501. $list[$k]['value'] = $v['tscs'];
  8502. }
  8503. $res['status'] = 0;
  8504. $res['msg'] = '';
  8505. $res['data'] = $list;
  8506. return json($res);
  8507. }
  8508. //质量问题->缓存---》暂时用不到
  8509. public function zlwt_redis(){
  8510. $redis=redis();
  8511. $redis_key = md5('zlwt_redis');
  8512. // 获取当前日期时间
  8513. $endDate = date("Y-m-d H:i:s");
  8514. // 获取一年前的日期时间
  8515. $startDate = date("Y-m-d H:i:s", strtotime("-1 year"));
  8516. $res = Db::query("SELECT D1.cdwmc,resp1.cReasonCName
  8517. FROM ecComplainFeedback B
  8518. LEFT JOIN DZYWDW D1
  8519. ON D1.iywdwid = B.iClientID
  8520. LEFT JOIN MCYD M
  8521. ON M.CCYDH = B.cOrderBillCode
  8522. INNER JOIN qlOrderProduct p
  8523. ON M.ICYDID = p.ID_Mcyd
  8524. LEFT JOIN (SELECT a.ID_qlOrderProduct,
  8525. Sum(a.iAmountOut) iAmount_Out
  8526. FROM SCYDYSQX a
  8527. GROUP BY a.ID_qlOrderProduct) c
  8528. ON c.ID_qlOrderProduct = p.ID
  8529. LEFT JOIN ecComplainContent DD
  8530. ON DD.iComplainFBID = B.iID
  8531. LEFT JOIN tbConfig E
  8532. ON E.iNoConfig = DD.iClassID_C
  8533. LEFT JOIN tbConfig T
  8534. ON T.iNoConfig = DD.iClassID_P
  8535. LEFT JOIN (SELECT R.iComplainFBID,
  8536. PP.strSubName AS cReasonPName,
  8537. CC2.strSubName AS cReasonCName,
  8538. CR.cRespPerson,
  8539. CR.cRespDept,
  8540. CR.cRespTech,
  8541. CR.cRespCorp,
  8542. CR.nMoney
  8543. FROM ecComplainReasonAnalysis R
  8544. LEFT JOIN tbConfig CC2
  8545. ON CC2.iNoConfig = R.iReasonID_C
  8546. LEFT JOIN tbConfig PP
  8547. ON PP.iNoConfig = R.iReasonID_P
  8548. LEFT JOIN ecComplainResponsibility CR
  8549. ON CR.iComplainRAID = R.iID) resp1
  8550. ON resp1.iComplainFBID = B.iID
  8551. WHERE b.dFeedbackDate >= '{$startDate}'
  8552. AND b.dFeedbackDate <= '{$endDate}'");
  8553. if(empty($res)) {
  8554. $res = [];
  8555. $res['status'] = 0;
  8556. $res['msg'] = '';
  8557. $res['data'] = [
  8558. ['name' => '色差(与原稿偏差)', 'value' => 0],
  8559. ['name' => '精装质量问题', 'value' => 0],
  8560. ['name' => '工艺缺项', 'value' => 0],
  8561. ['name' => '双影', 'value' => 0],
  8562. ['name' => '烫金不实', 'value' => 0],
  8563. ['name' => '色差(批量不统一)', 'value' => 0],
  8564. ];
  8565. $redis->set($redis_key, json_encode($res));
  8566. return json($res);
  8567. }else{
  8568. $list = [];
  8569. for ($i = 0; $i < count($res); $i++) {
  8570. $list[$res[$i]['cReasonCName']][] = $res[$i]['cdwmc'];
  8571. }
  8572. array_multisort($list, SORT_DESC);
  8573. $result = [];
  8574. $i = 0;
  8575. foreach ($list as $k => $v) {
  8576. $result[$i]['质量问题'] = $k;
  8577. $result[$i]['投诉次数'] = count($v);
  8578. $result[$i]['合并原因'] = '';
  8579. foreach ($v as $key => $value) {
  8580. if ($value == null) {
  8581. unset($v[$key]);
  8582. }
  8583. }
  8584. foreach (array_count_values($v) as $a => $b) {
  8585. $result[$i]['合并原因'] .= $a . $b . '/';
  8586. }
  8587. $result[$i]['合并原因'] = substr($result[$i]['合并原因'], 0, -1);
  8588. $i++;
  8589. }
  8590. $result=array_splice($result,0,6);
  8591. $list=[];
  8592. foreach($result as $k=>$v){
  8593. $list[$k]['name']=$v['质量问题'];
  8594. $list[$k]['value']=$v['投诉次数'];
  8595. }
  8596. $res=[];
  8597. $res['status']=0;
  8598. $res['msg']='';
  8599. $res['data']=$list;
  8600. $redis->set($redis_key, json_encode($res));
  8601. return json($res);
  8602. }
  8603. }
  8604. //质量问题->接口---》暂时用不到
  8605. public function zlwt(){
  8606. $redis=redis();
  8607. $redis_key = md5('zlwt_redis');
  8608. $redis_data = $redis->get($redis_key);
  8609. return $redis_data;
  8610. }
  8611. //质检记录一览表->缓存---》暂时用不到
  8612. public function zjjl_redis(){
  8613. $redis=redis();
  8614. $redis_key = md5('zjjl_redis');
  8615. $list=Db::query("SELECT t.productcode 订单号,
  8616. t.cName 印件名称,
  8617. t.iDetectionType 检验类型,
  8618. t.dFirstTime 检验时间,
  8619. t.cProcess 检验工序,
  8620. t.status 检验结果,
  8621. t.czgxm 检验人
  8622. FROM (SELECT b.ID,
  8623. c.ID AS mainid,
  8624. 'XJBB' AS keyword,
  8625. b.Code_ProductOrder AS productcode,
  8626. b.Code_AProduct AS aproductcode,
  8627. b.Name_AProduct AS cName,
  8628. b.iVers,
  8629. '' AS salacode,
  8630. c.iDetectionNum,
  8631. CASE c.iDetectionType
  8632. WHEN 0 THEN '首检单'
  8633. WHEN 1 THEN '巡检单'
  8634. WHEN 2 THEN '自检单'
  8635. END AS iDetectionType,
  8636. c.dFirstTime,
  8637. c.cTeams,
  8638. c.cProcess,
  8639. e.cJzmc,
  8640. CASE c.iJobStatus
  8641. WHEN 0 THEN '合格'
  8642. WHEN 1 THEN '不合格'
  8643. WHEN 2 THEN '让步接收'
  8644. END AS status,
  8645. d.czgxm,
  8646. '' AS cResultNote
  8647. FROM (SELECT a.ID,
  8648. a.cCode AS Code_ProductOrder,
  8649. b.cCode AS Code_AProduct,
  8650. b.cName AS Name_AProduct,
  8651. b.ID AS ID_Request,
  8652. a.ID_Mcyd,
  8653. 1 AS iVers,
  8654. b.cSize,
  8655. b.cUnit,
  8656. a.iAmount,
  8657. a.iAmount_In,
  8658. 0 AS nAmount_OB,
  8659. a.iAmount AS nAmount_W,
  8660. a.iState,
  8661. a.nUnitPlanWeight,
  8662. a.nActualWeight,
  8663. '' AS cCustomerCode,
  8664. '' AS cCustomerName,
  8665. d.cywdwbh,
  8666. d.cdwmc,
  8667. b.iTag_Group,
  8668. 0 AS iType,
  8669. 1 AS iNodePage,
  8670. 0 AS iType_P,
  8671. 1 AS iType_Origin,
  8672. a.ID AS id_origin,
  8673. c.DZDRQ AS dDate,
  8674. c.Dwcrq AS dInFinishDate,
  8675. c.CYWYXM,
  8676. c.DJFRQ,
  8677. c.CDF,
  8678. CASE
  8679. WHEN c.CBCYEAR <> '' THEN c.CBCYEAR + '年'
  8680. ELSE ''
  8681. END
  8682. + CASE
  8683. WHEN c.CBCmonth <> '' THEN c.CBCmonth + '月'
  8684. ELSE ''
  8685. END
  8686. + CASE
  8687. WHEN c.CBC <> '' THEN c.CBC + '版'
  8688. ELSE ''
  8689. END
  8690. + CASE
  8691. WHEN c.cYCyear <> '' THEN c.cYCyear + '年'
  8692. ELSE ''
  8693. END
  8694. + CASE
  8695. WHEN c.cYCmonth <> '' THEN c.cYCmonth + '月'
  8696. ELSE ''
  8697. END
  8698. + CASE
  8699. WHEN c.CYC <> '' THEN c.CYC + '版'
  8700. ELSE ''
  8701. END AS cBanCi
  8702. FROM qlOrderProduct AS a
  8703. INNER JOIN qlAProduct AS b
  8704. ON b.ID = a.ID_qlAProduct
  8705. INNER JOIN MCYD AS c
  8706. ON c.ICYDID = a.ID_Mcyd
  8707. AND c.CCYDH = a.cCode
  8708. LEFT OUTER JOIN DZYWDW AS d
  8709. ON d.iywdwid = c.IYWDWID
  8710. WHERE ( c.iCommited = 1 )
  8711. AND ( c.ICYDSTATE <> -1 )
  8712. ) as b
  8713. INNER JOIN qcDetectionMain c
  8714. ON c.iOrder_Num = b.Code_ProductOrder
  8715. INNER JOIN dzZG d
  8716. ON c.iID_Roals = d.id
  8717. INNER JOIN MKerJzmb e
  8718. ON e.ID = c.cBoard
  8719. UNION ALL
  8720. SELECT b.ID,
  8721. g.ID AS mainid,
  8722. 'RQBB' AS keyword,
  8723. b.Code_ProductOrder AS productcode,
  8724. b.Code_AProduct AS aproductcode,
  8725. b.Name_AProduct AS cName,
  8726. b.iVers,
  8727. '' AS salacode,
  8728. h.cBillCode AS iDetectionNum,
  8729. '入库检验' AS iDetectionType,
  8730. h.dCheckDate AS dFirstTime,
  8731. '' AS cTeams,
  8732. '' AS cProcess,
  8733. '' AS cJzmc,
  8734. CASE g.iCheckResult
  8735. WHEN 0 THEN '合格'
  8736. WHEN 1 THEN '不合格'
  8737. WHEN 2 THEN '让步接收'
  8738. END AS status,
  8739. h.cCheckMan,
  8740. g.cResultNote
  8741. FROM (SELECT a.ID,
  8742. a.cCode AS Code_ProductOrder,
  8743. b.cCode AS Code_AProduct,
  8744. b.cName AS Name_AProduct,
  8745. b.ID AS ID_Request,
  8746. a.ID_Mcyd,
  8747. 1 AS iVers,
  8748. b.cSize,
  8749. b.cUnit,
  8750. a.iAmount,
  8751. a.iAmount_In,
  8752. 0 AS nAmount_OB,
  8753. a.iAmount AS nAmount_W,
  8754. a.iState,
  8755. a.nUnitPlanWeight,
  8756. a.nActualWeight,
  8757. '' AS cCustomerCode,
  8758. '' AS cCustomerName,
  8759. d.cywdwbh,
  8760. d.cdwmc,
  8761. b.iTag_Group,
  8762. 0 AS iType,
  8763. 1 AS iNodePage,
  8764. 0 AS iType_P,
  8765. 1 AS iType_Origin,
  8766. a.ID AS id_origin,
  8767. c.DZDRQ AS dDate,
  8768. c.Dwcrq AS dInFinishDate,
  8769. c.CYWYXM,
  8770. c.DJFRQ,
  8771. c.CDF,
  8772. CASE
  8773. WHEN c.CBCYEAR <> '' THEN c.CBCYEAR + '年'
  8774. ELSE ''
  8775. END
  8776. + CASE
  8777. WHEN c.CBCmonth <> '' THEN c.CBCmonth + '月'
  8778. ELSE ''
  8779. END
  8780. + CASE
  8781. WHEN c.CBC <> '' THEN c.CBC + '版'
  8782. ELSE ''
  8783. END
  8784. + CASE
  8785. WHEN c.cYCyear <> '' THEN c.cYCyear + '年'
  8786. ELSE ''
  8787. END
  8788. + CASE
  8789. WHEN c.cYCmonth <> '' THEN c.cYCmonth + '月'
  8790. ELSE ''
  8791. END
  8792. + CASE
  8793. WHEN c.CYC <> '' THEN c.CYC + '版'
  8794. ELSE ''
  8795. END AS cBanCi
  8796. FROM qlOrderProduct AS a
  8797. INNER JOIN qlAProduct AS b
  8798. ON b.ID = a.ID_qlAProduct
  8799. INNER JOIN MCYD AS c
  8800. ON c.ICYDID = a.ID_Mcyd
  8801. AND c.CCYDH = a.cCode
  8802. LEFT OUTER JOIN DZYWDW AS d
  8803. ON d.iywdwid = c.IYWDWID
  8804. WHERE ( c.iCommited = 1 )
  8805. AND ( c.ICYDSTATE <> -1 )
  8806. ) as b
  8807. INNER JOIN mtMaterialQualityCheckDetail g
  8808. ON g.ID_scProduct = b.ID
  8809. INNER JOIN mtMaterialQualityCheck h
  8810. ON h.ID = g.ID_Main
  8811. WHERE h.iStatus > 0) AS t
  8812. WHERE 1 = 1
  8813. -- AND DATE_FORMAT(t.dFirstTime, '%Y-%m-%d')= '2023-11-12'
  8814. ORDER BY t.dFirstTime DESC
  8815. limit 8
  8816. ");
  8817. $redis->set($redis_key, json_encode($list));
  8818. return $list;
  8819. }
  8820. //质检记录一览表->接口---》暂时用不到
  8821. public function zjjl(){
  8822. $redis=redis();
  8823. // $redis_key = md5('zjjl_redis');
  8824. // $redis_data = $redis->get($redis_key);
  8825. $list = json_decode($redis->get(md5('zjjl_redis')), true);
  8826. $result['columns']=[
  8827. ['name'=>'订单号','id'=>'ddh','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'],
  8828. ['name'=>'印件名称','id'=>'yjmc','width'=>'22','textAlign'=>'left'],
  8829. ['name'=>'检验类型','id'=>'jylx','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'],
  8830. ['name'=>'检验时间','id'=>'jysj','width'=>'20','autoWrap'=>"true",'textAlign'=>'left'],
  8831. ['name'=>'检验工序','id'=>'jygx','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'],
  8832. ['name'=>'检验结果','id'=>'jyjg','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'],
  8833. ['name'=>'检验人','id'=>'jyr','width'=>'10','autoWrap'=>"true",'textAlign'=>'left']
  8834. ];
  8835. foreach($list as $k=>$v){
  8836. $result['rows'][$k]['ddh']=$v['订单号'];
  8837. $result['rows'][$k]['yjmc']=$v['印件名称'];
  8838. $result['rows'][$k]['jylx']=$v['检验类型'];
  8839. $result['rows'][$k]['jysj']=$v['检验时间'];
  8840. $result['rows'][$k]['jygx']=$v['检验工序'];
  8841. $result['rows'][$k]['jyjg']=$v['检验结果'];
  8842. $result['rows'][$k]['jyr']=$v['检验人'];
  8843. }
  8844. if($list==[]){
  8845. $result['rows'][0]['ddh']='';
  8846. $result['rows'][0]['yjmc']='';
  8847. $result['rows'][0]['jylx']='';
  8848. $result['rows'][0]['jysj']='';
  8849. $result['rows'][0]['jygx']='';
  8850. $result['rows'][0]['jyjg']='';
  8851. $result['rows'][0]['jyr']='';
  8852. }
  8853. $res['status']=0;
  8854. $res['msg']='';
  8855. $res['data']=$result;
  8856. return json($res);
  8857. }
  8858. //客户质量投诉一览表->缓存---》暂时用不到
  8859. public function khzl_redis(){
  8860. $redis=redis();
  8861. $redis_key = md5('khzl_redis');
  8862. // 获取当前日期时间
  8863. $endDate = date("Y-m-d H:i:s");
  8864. // 获取一年前的日期时间
  8865. $startDate = date("Y-m-d H:i:s", strtotime("-1 year"));
  8866. $r_list= Db::query("SELECT resp.cReasonCName,D.cdwmc FROM ecComplainFeedback B LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID
  8867. LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd
  8868. LEFT JOIN (SELECT a.ID_qlOrderProduct,Sum(a.iAmountOut) iAmount_Out FROM SCYDYSQX a
  8869. GROUP BY a.ID_qlOrderProduct) c ON c.ID_qlOrderProduct = p.ID LEFT JOIN ecComplainContent DD
  8870. ON DD.iComplainFBID = B.iID LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C
  8871. LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P
  8872. LEFT JOIN (SELECT R.iComplainFBID,
  8873. PP.strSubName AS cReasonPName,
  8874. CC2.strSubName AS cReasonCName,
  8875. CR.cRespPerson,
  8876. CR.cRespDept,
  8877. CR.cRespTech,
  8878. CR.cRespCorp,
  8879. CR.nMoney
  8880. FROM ecComplainReasonAnalysis R
  8881. LEFT JOIN tbConfig CC2
  8882. ON CC2.iNoConfig = R.iReasonID_C
  8883. LEFT JOIN tbConfig PP
  8884. ON PP.iNoConfig = R.iReasonID_P
  8885. LEFT JOIN ecComplainResponsibility CR
  8886. ON CR.iComplainRAID = R.iID) resp
  8887. ON resp.iComplainFBID = B.iID
  8888. WHERE 1 = 1
  8889. AND b.dFeedbackDate >= '{$startDate}'
  8890. AND b.dFeedbackDate <= '{$endDate}'");
  8891. if(empty($r_list)) {
  8892. $res['status'] = 0;
  8893. $res['msg'] = '没有找到数据';
  8894. $res['data'] = [
  8895. 'columns' => [
  8896. ['name' => '客户单位', 'id' => 'khdw', 'width' => '36', 'autoWrap' => "true", 'textAlign' => 'left'],
  8897. ['name' => '投诉次数', 'id' => 'tscs', 'width' => '12', 'autoWrap' => "true", 'textAlign' => 'left'],
  8898. ['name' => '质量问题', 'id' => 'zlwt', 'width' => '52', 'textAlign' => 'left']
  8899. ],
  8900. 'rows' => [
  8901. ['khdw' => '中信出版集团股份有限公司', 'tscs' => '0', 'zlwt' => ''],
  8902. ['khdw' => '大星(上海)文化传媒有限公司(浙江文艺)', 'tscs' => '0', 'zlwt' => ''],
  8903. ['khdw' => '上海译文出版社有限公司', 'tscs' => '0', 'zlwt' => ''],
  8904. ['khdw' => '浙江人民美术出版社有限公司', 'tscs' => '0', 'zlwt' => ''],
  8905. ['khdw' => '浙江文艺出版社有限公司', 'tscs' => '0', 'zlwt' => ''],
  8906. ['khdw' => '浙江华硕国际贸易有限责任公司', 'tscs' => '0', 'zlwt' => ''],
  8907. ['khdw' => '浙江人民出版社有限公司', 'tscs' => '0', 'zlwt' => ''],
  8908. ['khdw' => '上海古籍出版社有限公司', 'tscs' => '0', 'zlwt' => ''],
  8909. ]
  8910. ];
  8911. $redis->set($redis_key, json_encode($res));
  8912. return json($res);
  8913. }else{
  8914. $c_list = [];
  8915. for ($i = 0; $i < count($r_list); $i++) {
  8916. $c_list[$r_list[$i]['cdwmc']][] = $r_list[$i]['cReasonCName'];
  8917. }
  8918. array_multisort($c_list, SORT_DESC);
  8919. $result = [];
  8920. $i = 0;
  8921. foreach ($c_list as $k => $v) {
  8922. $result[$i]['客户单位'] = $k;
  8923. $result[$i]['投诉次数'] = count($v);
  8924. $result[$i]['质量问题'] = '';
  8925. foreach ($v as $key => $value) {
  8926. if ($value == null) {
  8927. unset($v[$key]);
  8928. }
  8929. }
  8930. foreach (array_count_values($v) as $a => $b) {
  8931. $result[$i]['质量问题'] .= $a . $b . '/';
  8932. }
  8933. $result[$i]['质量问题'] = substr($result[$i]['质量问题'], 0, -1);
  8934. $i++;
  8935. }
  8936. $result=array_splice($result,0,8);
  8937. $list['columns']=[
  8938. ['name'=>'客户单位','id'=>'khdw','width'=>'36','autoWrap'=>"true",'textAlign'=>'left'],
  8939. ['name'=>'投诉次数','id'=>'tscs','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'],
  8940. ['name'=>'质量问题','id'=>'zlwt','width'=>'52','autoWrap'=>"true",'textAlign'=>'left']
  8941. ];
  8942. foreach($result as $k=>$v){
  8943. $list['rows'][$k]['khdw']=$v['客户单位'];
  8944. $list['rows'][$k]['tscs']=$v['投诉次数'];
  8945. $list['rows'][$k]['zlwt']=$v['质量问题'];
  8946. }
  8947. $res['status']=0;
  8948. $res['msg']='';
  8949. $res['data']=$list;
  8950. $redis->set($redis_key, json_encode($res));
  8951. return json($res);
  8952. }
  8953. }
  8954. //客户质量投诉一览表->接口---》暂时用不到
  8955. public function khzl(){
  8956. $redis=redis();
  8957. $redis_key = md5('khzl_redis');
  8958. $redis_data = $redis->get($redis_key);
  8959. return $redis_data;
  8960. }
  8961. //质量问题一览表(按部门->缓存---》暂时用不到
  8962. public function bmzl_redis(){
  8963. $redis=redis();
  8964. $redis_key = md5('bmzl_redis');
  8965. // 获取当前日期时间
  8966. $endDate = date("Y-m-d H:i:s");
  8967. // 获取一年前的日期时间
  8968. $startDate = date("Y-m-d H:i:s", strtotime("-1 year"));
  8969. $res1=Db::query("SELECT CASE
  8970. WHEN CR.cRespDept = '' THEN '外协单位'
  8971. ELSE CR.cRespDept
  8972. END AS 部门,
  8973. Count(*) AS 投诉次数
  8974. FROM ecComplainFeedback B
  8975. LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID
  8976. LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode
  8977. INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd
  8978. LEFT JOIN (SELECT a.ID_qlOrderProduct,
  8979. Sum(a.iAmountOut) iAmount_Out
  8980. FROM SCYDYSQX a
  8981. GROUP BY a.ID_qlOrderProduct) c
  8982. ON c.ID_qlOrderProduct = p.ID
  8983. LEFT JOIN ecComplainContent DD ON DD.iComplainFBID = B.iID
  8984. LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C
  8985. LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P
  8986. LEFT JOIN (SELECT R.iComplainFBID,CR1.cRespDept
  8987. FROM ecComplainReasonAnalysis R
  8988. LEFT JOIN ecComplainResponsibility CR1 ON CR1.iComplainRAID = R.iID) CR
  8989. ON B.iID = CR.iComplainFBID
  8990. WHERE 1 = 1 AND b.dFeedbackDate >= '{$startDate}' AND b.dFeedbackDate <= '{$endDate}'
  8991. GROUP BY CR.cRespDept ORDER BY 投诉次数 DESC,
  8992. CR.cRespDept; ");
  8993. foreach($res1 as $k=>$v){
  8994. if($v['部门']=='全部'){
  8995. unset($res1[$k]);
  8996. }
  8997. }
  8998. foreach($res1 as $k=>$v){
  8999. if($v['部门']===null){
  9000. $res1[$k]['部门']='全部';
  9001. }
  9002. }
  9003. $res = Db::query("SELECT CR2.cReasonPName,CR2.cRespDept
  9004. FROM ecComplainFeedback B2
  9005. LEFT JOIN (SELECT R2.iComplainFBID,
  9006. CR1.cRespDept,
  9007. CC.strSubName AS cReasonPName
  9008. FROM ecComplainReasonAnalysis R2
  9009. LEFT JOIN ecComplainResponsibility CR1
  9010. ON CR1.iComplainRAID = R2.iID
  9011. LEFT JOIN tbConfig CC
  9012. ON CC.iNoConfig = R2.iReasonID_C
  9013. LEFT JOIN tbConfig PP
  9014. ON PP.iNoConfig = R2.iReasonID_P) CR2
  9015. ON B2.iID = CR2.iComplainFBID
  9016. WHERE b2.dFeedbackDate >= '{$startDate}'
  9017. AND b2.dFeedbackDate <= '{$endDate}'");
  9018. if(empty($res1) || empty($res)) {
  9019. $res['status'] = 0;
  9020. $res['msg'] = '没有找到数据';
  9021. $res['data'] = [
  9022. 'columns' => [
  9023. ['name' => '部门', 'id' => 'bm', 'width' => '18', 'textAlign' => 'left'],
  9024. ['name' => '投诉次数', 'id' => 'tscs', 'width' => '12', 'textAlign' => 'left'],
  9025. ['name' => '合并原因', 'id' => 'hbyy', 'width' => '58', 'textAlign' => 'left']
  9026. ],
  9027. 'rows' => [
  9028. ['bm' => '全部', 'tscs' => '0', 'hbyy' => ''],
  9029. ['bm' => '平版印刷中心', 'tscs' => '0', 'hbyy' => ''],
  9030. ['bm' => '精平装中心', 'tscs' => '0', 'hbyy' => ''],
  9031. ['bm' => '轮转联动中心', 'tscs' => '0', 'hbyy' => ''],
  9032. ['bm' => '外协单位', 'tscs' => '0', 'hbyy' => ''],
  9033. ['bm' => '生产部', 'tscs' => '0', 'hbyy' => '']
  9034. ]
  9035. ];
  9036. $redis->set($redis_key, json_encode($res));
  9037. return json($res);
  9038. }else{
  9039. $list = [];
  9040. for ($i = 0; $i < count($res); $i++) {
  9041. if($res[$i]['cRespDept']===''){
  9042. $res[$i]['cRespDept']='外协单位';
  9043. }
  9044. if($res[$i]['cRespDept']===null){
  9045. $res[$i]['cRespDept']='全部';
  9046. }
  9047. $list[$res[$i]['cRespDept']][] = $res[$i]['cReasonPName'];
  9048. }
  9049. array_multisort($list, SORT_DESC);
  9050. $result = [];
  9051. $i = 0;
  9052. foreach ($list as $k => $v) {
  9053. // $result[$i]['部门'] = $k;
  9054. // $result[$i]['投诉次数'] = count($v);
  9055. // $result[$i]['合并原因'] = '';
  9056. $result[$k]='';
  9057. foreach ($v as $key => $value) {
  9058. if ($value == null) {
  9059. unset($v[$key]);
  9060. }
  9061. }
  9062. foreach (array_count_values($v) as $a => $b) {
  9063. // $result[$i]['合并原因'] .= $a . $b . '/';
  9064. $result[$k] .= $a . $b . '/';
  9065. }
  9066. // $result[$i]['合并原因'] = substr($result[$i]['合并原因'], 0, -1);
  9067. $result[$k] = substr($result[$k], 0, -1);
  9068. $i++;
  9069. }
  9070. foreach($res1 as $k=>$v){
  9071. if($v['部门']!==null)$res1[$k]['合并原因']=$result[$v['部门']];
  9072. if($v['部门']=='全部'){
  9073. $res1[$k]['投诉次数']=count($list['全部']);
  9074. }
  9075. }
  9076. // halt($res1);
  9077. $result=[];
  9078. $result['columns']=[
  9079. ['name'=>'部门','id'=>'bm','width'=>'18','textAlign'=>'left'],
  9080. ['name'=>'投诉次数','id'=>'tscs','width'=>'12','textAlign'=>'left'],
  9081. ['name'=>'合并原因','id'=>'hbyy','width'=>'58','textAlign'=>'left']
  9082. ];
  9083. $i=0;
  9084. foreach($res1 as $k=>$v){
  9085. $result['rows'][$i]['bm']=$v['部门'];
  9086. $result['rows'][$i]['tscs']=$v['投诉次数'];
  9087. $result['rows'][$i]['hbyy']=$v['合并原因'];
  9088. $i++;
  9089. }
  9090. $res=[];
  9091. $res['status']=0;
  9092. $res['msg']='';
  9093. $res['data']=$result;
  9094. $redis->set($redis_key, json_encode($res));
  9095. return json($res);
  9096. }
  9097. }
  9098. //质量问题一览表(按部门)->接口---》暂时用不到
  9099. public function bmzl(){
  9100. $redis=redis();
  9101. $redis_key = md5('bmzl_redis');
  9102. $redis_data = $redis->get($redis_key);
  9103. return $redis_data;
  9104. }
  9105. }