Third.php 477 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235
  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. $postData = input('post.dependence.item.subsys');
  4345. $redisKeys = [
  4346. "单双色印刷机台" => 'dssj_scxl_redis',
  4347. "四色印刷机" => 'ssj_scxl_redis',
  4348. "标规轮转印刷机" => 'bglz_scxl_redis',
  4349. "大规轮转印刷机" => 'dglz_scxl_redis',
  4350. "胶订联动线" => 'jdld_scxl_redis',
  4351. "骑马精装联动线" => 'qmjz_scxl_redis'
  4352. ];
  4353. $redis_key = isset($redisKeys[$postData]) ? md5($redisKeys[$postData]) : md5('dssj_scxl_redis');
  4354. $redis = redis();
  4355. $result = json_decode($redis->get($redis_key), true);
  4356. if (!$result) {
  4357. // 处理没有数据的情况
  4358. $response_data = [
  4359. 'status' => 1,
  4360. 'msg' => '没有找到相关数据',
  4361. 'data' => []
  4362. ];
  4363. return json_encode($response_data, JSON_UNESCAPED_UNICODE);
  4364. }
  4365. // 进行数据排序和截取
  4366. $staval = 1;
  4367. if($postData == '单双色印刷机台') {
  4368. $staval = 1;
  4369. } else if($postData == '四色印刷机') {
  4370. $staval = 2;
  4371. } else if($postData == '标规轮转印刷机') {
  4372. $staval = 3;
  4373. } else if($postData == '大规轮转印刷机') {
  4374. $staval = 4;
  4375. } else if($postData == '胶订联动线') {
  4376. $staval = 5;
  4377. } else if($postData == '骑马精装联动线') {
  4378. $staval = 6;
  4379. }
  4380. $machineSerialData = Db::table('machineneserial')->where('staval', '=', $staval)->select();
  4381. $machineSerials = array_column($machineSerialData, 'serial', 'machinen_name');
  4382. usort($result, function($a, $b) use ($machineSerials) {
  4383. $aMatchedSerial = $bMatchedSerial = 0;
  4384. foreach ($machineSerials as $machinen_name => $serial) {
  4385. if (stripos($a["班组名称"], $machinen_name) !== false) {
  4386. $aMatchedSerial = $serial;
  4387. }
  4388. if (stripos($b["班组名称"], $machinen_name) !== false) {
  4389. $bMatchedSerial = $serial;
  4390. }
  4391. }
  4392. return $aMatchedSerial - $bMatchedSerial;
  4393. });
  4394. // 只按完成率排序,并截取前100项
  4395. $result = array_slice($result, 0, 100);
  4396. // 格式化数据
  4397. $categories = array_column($result, '班组名称');
  4398. $values = array_column($result, '完成率');
  4399. $kjsum = array_column($result, '开机总次数');
  4400. $wcsum = array_column($result, '完成次数');
  4401. // 构建响应数据
  4402. $response_data = [
  4403. 'status' => 0,
  4404. 'msg' => '',
  4405. 'data' => [
  4406. 'categories' => $categories,
  4407. 'series' => [
  4408. [
  4409. 'name' => '完成率',
  4410. 'data' => $values,
  4411. 'type' => 'line',
  4412. "yAxisIndex" => 1
  4413. ],
  4414. [
  4415. 'name' => '开机总次数',
  4416. 'data' => $kjsum,
  4417. 'type' => 'bar',
  4418. "yAxisIndex" => 0
  4419. ],
  4420. [
  4421. 'name' => '完成次数',
  4422. 'data' => $wcsum,
  4423. 'type' => 'bar',
  4424. "yAxisIndex" => 0
  4425. ]
  4426. ]
  4427. ]
  4428. ];
  4429. // 返回 JSON 数据
  4430. return json($response_data);
  4431. }
  4432. //2.1平版印刷机昨日生产料率分析(查询前一天数据)缓存
  4433. public function yester_pb_redis(){
  4434. $redis=redis();
  4435. $redis_key = md5('yester_pb_redis');
  4436. $ztday = date("Y-m-d",strtotime("-1 day"));
  4437. $sql = "SELECT DATE_FORMAT(tt.生产日期,'%Y-%m-%d') 生产日期,
  4438. -- tt.生产日期,
  4439. -- tt.机台名称,
  4440. tt.班组名称,
  4441. tt.机长,
  4442. tt.定额,
  4443. CASE
  4444. WHEN ( Sum(tt.产量折算时间) + Sum(tt.改墨时间) + Sum(tt.上版时间)
  4445. + Sum(tt.周保养时间) ) >= tt.考核工作时间 THEN '已完成'
  4446. ELSE '未完成'
  4447. END 效率分析,
  4448. Cast(CASE
  4449. WHEN ( Sum(tt.产量折算时间) + Sum(tt.改墨时间) + Sum(tt.上版时间)
  4450. + Sum(tt.周保养时间) ) >= tt.考核工作时间 THEN '100'
  4451. ELSE ( Sum(tt.产量折算时间) + Sum(tt.改墨时间) + Sum(tt.上版时间)
  4452. + Sum(tt.周保养时间) ) / tt.考核工作时间 * 100
  4453. END AS SIGNED) 完成百分比,
  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. -- Sum(tt.有效工作时间) 有效工作时间,
  4463. -- tt.考核工作时间
  4464. FROM (SELECT CONVERT (TB1.生产日期, CHAR) 生产日期,
  4465. 1 AS 序号,
  4466. TB1.机台名称,
  4467. TB1.定额,
  4468. TB1.班组名称,
  4469. TB1.机长 AS 机长,
  4470. Sum(TB1.实际工作时间) 实际工作时间,
  4471. Sum(TB1.班组产量) 班组产量,
  4472. Cast(Sum(TB1.班组产量) / 5500 AS DECIMAL(8, 2)) 产量折算时间,
  4473. Sum(TB1.改墨次数) 改墨次数,
  4474. Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(8, 2)) AS 改墨时间,
  4475. Sum(TB1.上版块数) 上版块数,
  4476. Cast(Sum(TB1.上版块数) * 10 / 60.00 AS DECIMAL(8, 2)) AS 上版时间,
  4477. Sum(TB1.周保养时间) 周保养时间,
  4478. Cast(Sum(TB1.班组产量) / 5500 AS DECIMAL(8, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间,
  4479. 10 AS 考核工作时间
  4480. FROM (SELECT CASE
  4481. WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  4482. FROM sysetup
  4483. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  4484. ELSE ttt.dOnDuty
  4485. END 生产日期,
  4486. ttt.Name_Machine 机台名称,
  4487. ttt.Name_WorkGroup 班组名称,
  4488. 5500 定额,
  4489. (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b
  4490. WHERE b.ID_Teams = ttT.ID
  4491. AND b.cStation = '机长') 机长,
  4492. ttt.nOutput_RZ 班组产量,
  4493. Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(8, 2)) 实际工作时间,
  4494. Sum(CASE
  4495. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  4496. ELSE 0
  4497. END) AS 上版次数,
  4498. Sum(CASE
  4499. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  4500. ELSE 0
  4501. END) AS 上版块数,
  4502. Sum(CASE
  4503. WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type
  4504. ELSE 0
  4505. END) AS 改墨次数,
  4506. Sum(CASE
  4507. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  4508. ELSE 0
  4509. END) AS 改规次数,
  4510. Sum(CASE
  4511. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3))
  4512. ELSE 0
  4513. END) AS 周保养时间
  4514. /***上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040***/
  4515. FROM scDayRpt_Teams ttT
  4516. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  4517. ON ttT.ID_Calendar = a.ID_Calendar
  4518. LEFT JOIN sctJFBActive b
  4519. ON b.ID = a.ID_Act
  4520. WHERE ttT.iDayRptStatus >=0
  4521. GROUP BY ttt.dOnDuty,
  4522. ttt.Name_Machine,
  4523. ttT.id,
  4524. ttt.Name_WorkGroup,
  4525. ttt.nOutput_RZ,
  4526. ttt.iWorkingHours)TB1
  4527. WHERE LEFT(TB1.机台名称, 3) = 'BB机'
  4528. OR TB1.机台名称 IN ( '海德堡SM1号', '海德堡SM2号' )
  4529. GROUP BY TB1.生产日期,
  4530. TB1.机台名称,
  4531. TB1.班组名称,
  4532. TB1.机长,
  4533. TB1.定额,
  4534. TB1.班组产量,
  4535. TB1.实际工作时间
  4536. UNION ALL
  4537. SELECT CONVERT (TB1.生产日期, CHAR) 生产日期,
  4538. 2 AS 序号,
  4539. TB1.机台名称,
  4540. TB1.定额,
  4541. TB1.班组名称,
  4542. TB1.机长 AS 机长,
  4543. Sum(TB1.实际工作时间) 实际工作时间,
  4544. Sum(TB1.班组产量) 班组产量,
  4545. Cast(Sum(TB1.班组产量) / 8000 AS DECIMAL(5, 2)) 产量折算时间,
  4546. Sum(TB1.改墨次数) 改墨次数,
  4547. Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(5, 2)) AS 改墨时间,
  4548. Sum(TB1.上版块数) 上版块数,
  4549. Cast(Sum(TB1.上版块数) * 10 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  4550. Sum(TB1.周保养时间) 周保养时间,
  4551. Cast(Sum(TB1.班组产量) / 8000 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间,
  4552. 10 AS 考核工作时间
  4553. FROM (SELECT CASE
  4554. WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  4555. FROM sysetup
  4556. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  4557. ELSE ttt.dOnDuty
  4558. END 生产日期,
  4559. ttt.Name_Machine 机台名称,
  4560. ttt.Name_WorkGroup 班组名称,
  4561. (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b
  4562. WHERE b.ID_Teams = ttT.ID
  4563. AND b.cStation = '机长') 机长,
  4564. 8000 定额,
  4565. ttt.nOutput_RZ 班组产量,
  4566. Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(5, 2)) 实际工作时间,
  4567. Sum(CASE
  4568. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  4569. ELSE 0
  4570. END) AS 上版次数,
  4571. Sum(CASE
  4572. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  4573. ELSE 0
  4574. END) AS 上版块数,
  4575. Sum(CASE
  4576. WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type
  4577. ELSE 0
  4578. END) AS 改墨次数,
  4579. Sum(CASE
  4580. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  4581. ELSE 0
  4582. END) AS 改规次数,
  4583. Sum(CASE
  4584. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3))
  4585. ELSE 0
  4586. END) AS 周保养时间
  4587. -- 上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040
  4588. FROM scDayRpt_Teams ttT
  4589. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  4590. ON ttT.ID_Calendar = a.ID_Calendar
  4591. LEFT JOIN sctJFBActive b
  4592. ON b.ID = a.ID_Act
  4593. WHERE ttT.iDayRptStatus >= 0
  4594. GROUP BY ttt.dOnDuty,
  4595. ttt.Name_Machine,
  4596. ttT.id,
  4597. ttt.Name_WorkGroup,
  4598. ttt.nOutput_RZ,
  4599. ttt.iWorkingHours)TB1
  4600. WHERE TB1.机台名称 IN( '四色机02号机', '海德堡5+L 01号机', '海德堡01号机', '三菱机02号机', '三菱机01号机' )
  4601. GROUP BY TB1.生产日期,
  4602. TB1.机台名称,
  4603. TB1.班组名称,
  4604. TB1.机长,
  4605. TB1.定额,
  4606. TB1.班组产量,
  4607. TB1.实际工作时间
  4608. UNION ALL
  4609. SELECT CONVERT (TB1.生产日期, CHAR) 生产日期,
  4610. 3 AS 序号,
  4611. TB1.机台名称,
  4612. TB1.定额,
  4613. TB1.班组名称,
  4614. TB1.机长 AS 机长,
  4615. Sum(TB1.实际工作时间) 实际工作时间,
  4616. Sum(TB1.班组产量) 班组产量,
  4617. Cast(Sum(TB1.班组产量) / 7000 AS DECIMAL(5, 3)) 产量折算时间,
  4618. Sum(TB1.改墨次数) 改墨次数,
  4619. Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(5, 3)) AS 改墨时间,
  4620. Sum(TB1.上版块数) 上版块数,
  4621. Cast(Sum(TB1.上版块数) * 10 / 60.00 AS DECIMAL(5, 3)) AS 上版时间,
  4622. Sum(TB1.周保养时间) 周保养时间,
  4623. Cast(Sum(TB1.班组产量) / 7000 AS DECIMAL(5, 3)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间,
  4624. 10 AS 考核工作时间
  4625. FROM (SELECT CASE
  4626. WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  4627. FROM sysetup
  4628. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  4629. ELSE ttt.dOnDuty
  4630. END 生产日期,
  4631. ttt.Name_Machine 机台名称,
  4632. ttt.Name_WorkGroup 班组名称,
  4633. 7000 定额,
  4634. (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b
  4635. WHERE b.ID_Teams = ttT.ID
  4636. AND b.cStation = '机长') 机长,
  4637. ttt.nOutput_RZ 班组产量,
  4638. Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(5, 2)) 实际工作时间,
  4639. Sum(CASE
  4640. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  4641. ELSE 0
  4642. END) AS 上版次数,
  4643. Sum(CASE
  4644. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  4645. ELSE 0
  4646. END) AS 上版块数,
  4647. Sum(CASE
  4648. WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type
  4649. ELSE 0
  4650. END) AS 改墨次数,
  4651. Sum(CASE
  4652. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  4653. ELSE 0
  4654. END) AS 改规次数,
  4655. Sum(CASE
  4656. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3))
  4657. ELSE 0
  4658. END) AS 周保养时间
  4659. -- 上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040
  4660. FROM scDayRpt_Teams ttT
  4661. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  4662. ON ttT.ID_Calendar = a.ID_Calendar
  4663. LEFT JOIN sctJFBActive b
  4664. ON b.ID = a.ID_Act
  4665. WHERE ttT.iDayRptStatus >= 0
  4666. GROUP BY ttt.dOnDuty,
  4667. ttt.Name_Machine,
  4668. ttT.id,
  4669. ttt.iWorkingHours,
  4670. ttt.Name_WorkGroup,
  4671. ttt.nOutput_RZ)TB1
  4672. WHERE TB1.机台名称 = '小森八色01号机'
  4673. GROUP BY TB1.生产日期,
  4674. TB1.机台名称,
  4675. TB1.班组名称,
  4676. TB1.机长,
  4677. TB1.定额,
  4678. TB1.班组产量,
  4679. TB1.实际工作时间
  4680. UNION ALL
  4681. SELECT CONVERT (TB1.生产日期, CHAR) 生产日期,
  4682. 4 AS 序号,
  4683. TB1.机台名称,
  4684. TB1.定额,
  4685. TB1.班组名称,
  4686. TB1.机长 AS 机长,
  4687. Sum(TB1.实际工作时间) 实际工作时间,
  4688. Sum(TB1.班组产量) 班组产量,
  4689. Cast(Sum(TB1.班组产量) / 10000 AS DECIMAL(5, 2)) 产量折算时间,
  4690. Sum(TB1.改墨次数) 改墨次数,
  4691. Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(5, 2)) AS 改墨时间,
  4692. Sum(TB1.上版块数) 上版块数,
  4693. Cast(Sum(TB1.上版块数) * 2.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  4694. Sum(TB1.周保养时间) 周保养时间,
  4695. Cast(Sum(TB1.班组产量) / 10000 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 2.5 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间,
  4696. 12 AS 考核工作时间
  4697. FROM (SELECT CASE
  4698. WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  4699. FROM sysetup
  4700. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  4701. ELSE ttt.dOnDuty
  4702. END 生产日期,
  4703. ttt.Name_Machine 机台名称,
  4704. ttt.Name_WorkGroup 班组名称,
  4705. 10000 定额,
  4706. (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b
  4707. WHERE b.ID_Teams = ttT.ID
  4708. AND b.cStation = '机长') 机长,
  4709. ttt.nOutput_RZ 班组产量,
  4710. Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(5, 2)) 实际工作时间,
  4711. Sum(CASE
  4712. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  4713. ELSE 0
  4714. END) AS 上版次数,
  4715. Sum(CASE
  4716. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  4717. ELSE 0
  4718. END) AS 上版块数,
  4719. Sum(CASE
  4720. WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type
  4721. ELSE 0
  4722. END) AS 改墨次数,
  4723. Sum(CASE
  4724. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  4725. ELSE 0
  4726. END) AS 改规次数,
  4727. Sum(CASE
  4728. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3))
  4729. ELSE 0
  4730. END) AS 周保养时间
  4731. -- 上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040
  4732. FROM scDayRpt_Teams ttT
  4733. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  4734. ON ttT.ID_Calendar = a.ID_Calendar
  4735. LEFT JOIN sctJFBActive b
  4736. ON b.ID = a.ID_Act
  4737. WHERE ttT.iDayRptStatus >= 0
  4738. GROUP BY ttt.dOnDuty,
  4739. ttt.Name_Machine,
  4740. ttT.id,
  4741. ttt.iWorkingHours,
  4742. ttt.Name_WorkGroup,
  4743. ttt.nOutput_RZ)TB1
  4744. WHERE TB1.机台名称 = '小森八色02号机'
  4745. GROUP BY TB1.生产日期,
  4746. TB1.机台名称,
  4747. TB1.班组名称,
  4748. TB1.机长,
  4749. TB1.定额,
  4750. TB1.班组产量,
  4751. TB1.实际工作时间)tt
  4752. WHERE tt.生产日期 >= '{$ztday}'
  4753. AND tt.班组产量 > 0
  4754. GROUP BY tt.生产日期,
  4755. tt.序号,
  4756. tt.机台名称,
  4757. tt.班组名称,
  4758. tt.机长,
  4759. tt.定额,
  4760. tt.实际工作时间,
  4761. tt.考核工作时间
  4762. ORDER BY 完成百分比 desc,
  4763. tt.序号,
  4764. tt.机台名称,
  4765. tt.班组名称 ";
  4766. $res = Db::query($sql);
  4767. // echo "<pre>";print_r($list);echo "</pre>";die;
  4768. $redis->set($redis_key, json_encode($res));
  4769. echo date("Y-m-d H:i:s").' 平版印刷机昨日生产料率分析 存进去了';
  4770. return $res;
  4771. }
  4772. //2.1平版印刷机昨日生产料率分析
  4773. public function yester_pb(){
  4774. $redis=redis();
  4775. $list = json_decode($redis->get(md5('yester_pb_redis')), true);
  4776. $result['columns']=[
  4777. ['name'=>'日期','id'=>'rq','width'=>'11','autoWrap'=>"true",'textAlign'=>'left'],
  4778. ['name'=>'班组名称','id'=>'bzmc','width'=>'24','autoWrap'=>"true",'textAlign'=>'left'],
  4779. ['name'=>'机长','id'=>'jz','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'],
  4780. ['name'=>'定额','id'=>'dl','width'=>'16','autoWrap'=>"true",'textAlign'=>'left'],
  4781. ['name'=>'班组产量','id'=>'bzcl','width'=>'11','autoWrap'=>"true",'textAlign'=>'left'],
  4782. ['name'=>'生产效率分析','id'=>'scxlfx','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'],
  4783. ['name'=>'完成百分比','id'=>'wcbfb','width'=>'12','autoWrap'=>"true",'textAlign'=>'left']
  4784. ];
  4785. foreach($list as $k=>$v){
  4786. $result['rows'][$k]['rq']=$v['生产日期'];
  4787. $result['rows'][$k]['bzmc']=$v['班组名称'];
  4788. $result['rows'][$k]['jz']=$v['机长'];
  4789. $result['rows'][$k]['dl']=$v['定额'];
  4790. $result['rows'][$k]['bzcl']=round($v['班组产量']);
  4791. $result['rows'][$k]['scxlfx']=$v['效率分析'];
  4792. $result['rows'][$k]['wcbfb']=round($v['完成百分比']);
  4793. }
  4794. if($list==[]){
  4795. $result['rows'][0]['rq']='';
  4796. $result['rows'][0]['bzmc']='';
  4797. $result['rows'][0]['jz']='';
  4798. $result['rows'][0]['dl']='';
  4799. $result['rows'][0]['bzcl']='';
  4800. $result['rows'][0]['scxlfx']='';
  4801. $result['rows'][0]['wcbfb']='';
  4802. }
  4803. $res['status']=0;
  4804. $res['msg']='';
  4805. $res['data']=$result;
  4806. return json($res);
  4807. }
  4808. //2.2装订印刷机昨日生产料率分析(查询前一天数据)缓存
  4809. public function yester_zd_redis(){
  4810. $redis=redis();
  4811. $redis_key = md5('yester_zd_redis');
  4812. $ztday = date("Y-m-d",strtotime("-1 day"));
  4813. $sql = "
  4814. SELECT DATE_FORMAT(tt.生产日期,'%Y-%m-%d') 生产日期,
  4815. tt.班组名称,
  4816. tt.机长,
  4817. tt.定额,
  4818. tt.班组产量,
  4819. tt.生产效率分析,
  4820. tt.完成百分比
  4821. FROM(
  4822. SELECT
  4823. TBU.机台名称,
  4824. TBU.班组名称,
  4825. TBU.机长,
  4826. TBU.生产日期,
  4827. TBU.备注,
  4828. CASE
  4829. WHEN Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) >= TBU.考核工时 THEN
  4830. '已完成' ELSE '未完成'
  4831. END 生产效率分析,
  4832. TBU.定额,
  4833. TBU.考核工时 考核工作时间,
  4834. Sum( TBU.班组产量 ) 班组产量,
  4835. Sum( TBU.产量折算工时 ) 产量折算工时,
  4836. Sum( TBU.改规次数 ) 改规次数,
  4837. Sum( TBU.改规时间 ) 改规时间,
  4838. Sum( TBU.做零活时间 ) 做零活时间,
  4839. Sum( TBU.周保养时间 ) 周保养时间,
  4840. Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) 有效工作时间,
  4841. CASE
  4842. WHEN Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) >= TBU.考核工时 THEN
  4843. 100 ELSE Cast(
  4844. ( Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) ) / TBU.考核工时 * 100 AS DECIMAL ( 4, 2 )
  4845. )
  4846. END 完成百分比
  4847. FROM
  4848. (
  4849. SELECT
  4850. ttt.Name_Machine 机台名称,
  4851. CONVERT ( ttt.dRealRptDate, CHAR) 生产日期,
  4852. DATE_FORMAT( ttt.dRealRptDate, '%W' ) 备注,-- Datename(WEEKDAY, ttt.dRealRptDate) 备注,
  4853. ttt.Name_WorkGroup 班组名称,
  4854. ( SELECT GROUP_CONCAT( b.cName ) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttT.ID AND b.cStation = '机长' ) 机长,
  4855. '900' 定额,
  4856. ttt.nOutput_RZ 班组产量,
  4857. Cast( ttt.nOutput_RZ / 900 AS DECIMAL ( 5, 1 ) ) 产量折算工时,
  4858. IFNULL( AttFB2.班次时长, 10 ) 考核工时,
  4859. Sum( CASE WHEN a.cCode_Item = 'U0071' THEN a.iReported ELSE 0 END ) AS 改规次数,
  4860. Sum( CASE WHEN a.cCode_Item = 'U0071' THEN a.iReported ELSE 0 END ) * 1 AS 改规时间,
  4861. Sum( CASE WHEN a.cCode_Item = 'U0040' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 周保养时间,
  4862. Sum( CASE WHEN a.cCode_Item = 'U0070' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 做零活时间
  4863. FROM
  4864. (
  4865. SELECT
  4866. *,
  4867. CASE
  4868. WHEN CONVERT ( dOnDuty, CHAR ) < ( SELECT IFNULL( csetvalue, '00:00' ) + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin' ) THEN
  4869. DATE_ADD( dOnDuty, INTERVAL - 1 DAY ) ELSE dOnDuty
  4870. END dRealRptDate
  4871. FROM
  4872. scDayRpt_Teams
  4873. WHERE
  4874. iDayRptStatus >= 0
  4875. ) ttT
  4876. LEFT JOIN (
  4877. SELECT
  4878. ID_Calendar,
  4879. 班次时长,
  4880. 最晚时间
  4881. FROM
  4882. (
  4883. SELECT
  4884. a.ID_Calendar,
  4885. CASE
  4886. WHEN a.cCode_Item = 'U0077' THEN
  4887. Cast( a.nAmount_Item AS DECIMAL ( 4, 2 ) ) ELSE 0
  4888. END AS 班次时长,
  4889. a.dTime AS 最晚时间,
  4890. Row_number ( ) OVER ( PARTITION BY a.ID_Calendar ORDER BY a.dTime DESC ) AS RowNumber
  4891. FROM
  4892. sctMJobFeedBackDetail_AttFB a
  4893. WHERE
  4894. a.cCode_Item = 'U0077'
  4895. ) AS subquery
  4896. WHERE
  4897. RowNumber = 1
  4898. ) AttFB2 ON ttT.ID_Calendar = AttFB2.ID_Calendar
  4899. LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar
  4900. GROUP BY
  4901. ttt.dRealRptDate,
  4902. ttt.Name_Machine,
  4903. ttT.id,
  4904. AttFB2.班次时长,
  4905. ttt.Name_WorkGroup,
  4906. ttt.nOutput_RZ) TBU
  4907. WHERE
  4908. TBU.机台名称 LIKE '%精装联动%'
  4909. GROUP BY
  4910. TBU.机台名称,
  4911. TBU.班组名称,
  4912. TBU.机长,
  4913. TBU.生产日期,
  4914. TBU.考核工时,
  4915. TBU.备注,
  4916. TBU.定额 UNION ALL
  4917. SELECT
  4918. TBU.机台名称,
  4919. TBU.班组名称,
  4920. TBU.机长,
  4921. TBU.生产日期,
  4922. TBU.备注,
  4923. CASE
  4924. WHEN Sum( TBU.有效工作时间 ) >= TBU.考核工作时间 THEN
  4925. '已完成' ELSE '未完成'
  4926. END AS 生产效率分析,
  4927. TBU.定额,
  4928. TBU.考核工作时间,
  4929. CONVERT ( Sum( TBU.班组产量 ), SIGNED ) 班组产量,
  4930. Sum( TBU.产量折算工时 ) 产量折算工时,
  4931. Sum( TBU.改规次数 ) 改规次数,
  4932. Sum( TBU.改规时间 ) 改规时间,
  4933. Sum( TBU.做零活时间 ) 做零活时间,
  4934. Sum( TBU.周保养时间 ) 周保养时间,
  4935. Sum( TBU.有效工作时间 ) 有效工作时间,
  4936. Cast(
  4937. CASE
  4938. WHEN Sum( TBU.有效工作时间 ) / TBU.考核工作时间 >= 1 THEN
  4939. 100 ELSE ( Sum( TBU.有效工作时间 ) / TBU.考核工作时间 ) * 100
  4940. END AS DECIMAL ( 5, 2 )
  4941. ) 完成百分比
  4942. FROM(SELECT
  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. TBU2.有效工作时间
  4957. FROM(SELECT
  4958. TBU.ID_Calendar,
  4959. TBU.机台名称,
  4960. TBU.班组名称,
  4961. TBU.机长,
  4962. TBU.生产日期,
  4963. TBU.备注,
  4964. TBU.定额,
  4965. IFNULL( AttFB2.班次时长, 10 ) 考核工时,
  4966. Sum( TBU.班组产量 ) 班组产量,
  4967. Sum( TBU.产量折算工时 ) 产量折算工时,
  4968. IFNULL( ATTFB1.改规次数, 0 ) AS 改规次数,
  4969. IFNULL( AttFB1.改规时间, 0 ) AS 改规时间,
  4970. IFNULL( AttFB1.做零活时间, 0 ) 做零活时间,
  4971. IFNULL( AttFB1.周保养时间, 0 ) 周保养时间,
  4972. (Sum( TBU.产量折算工时 ) + IFNULL( AttFB1.改规时间, 0 ) + IFNULL( AttFB1.做零活时间, 0 ) + IFNULL( AttFB1.周保养时间, 0 ) ) 有效工作时间
  4973. FROM(SELECT
  4974. JobTB.ID ID_Calendar,
  4975. JobTB.机台名称,
  4976. JobTB.班组名称,
  4977. JobTB.机长,
  4978. JobTB.生产日期,
  4979. DATE_FORMAT( JobTB.生产日期, '%W' ) 备注,-- Datename(WEEKDAY, JobTB.生产日期) 备注,
  4980. JobTB.定额 定额,
  4981. Sum( JobTB.班组产量 ) 班组产量,
  4982. Cast( Sum( 产量折算工时 ) AS DECIMAL ( 5, 2 ) ) 产量折算工时,
  4983. 12 AS 考核工时
  4984. FROM(SELECT
  4985. ttFC.ID,
  4986. CONVERT ( dRealRptDate, CHAR ) 生产日期,
  4987. TB2.ID_Teams,
  4988. TB2.cJtmc 机台名称,
  4989. '7500/7000/4500' 定额,
  4990. TB2.cName_Team 班组名称,
  4991. TB2.机长,
  4992. ttFc.ID_TeamManRecord,
  4993. ttTJ.cCode_ProductOrder AS cCode_ProductOrder,
  4994. ttTJ.cCode_JobM AS cCode_JobM,
  4995. ttTJ.cName_JobM AS cName_JobM,
  4996. ttTj.cType_AProduct,
  4997. a.NZWYZ,
  4998. ttTJ.nOutput_R AS 班组产量,
  4999. 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 产量折算工时
  5000. FROM scDayRpt_Teams_JobContent ttTJ
  5001. INNER JOIN scmachinejob b ON b.ID = ttTJ.ID_JobM
  5002. LEFT JOIN scFactoryCalendar ttFC ON ttTJ.id_scFactoryCalendar = ttFC.id
  5003. LEFT JOIN (
  5004. SELECT CONVERT
  5005. ( CONVERT ( ttDRpt_T.dRealRptDate, CHAR ), DATETIME ) dRealRptDate,
  5006. ttT.cJtmc AS cJtmc,
  5007. ttT.cBanzuMc AS cName_Team,
  5008. ttT.cBmbh AS cBmbh,
  5009. ttT.cBmmc AS cbmmc,
  5010. ttDRpt_T.ID_WorkCenter,
  5011. ttT.cGzzxmc AS cgzzxmc,
  5012. tvD.cName AS cname,
  5013. ttS.cName AS cName_S,
  5014. ttDRpt_T.dOnDuty AS dStart,
  5015. ttDRpt_T.dOffDuty AS dEnd,
  5016. ttDRpt_T.nOutput_RZ AS nAmount_R,
  5017. IFNULL( ttDRpt_T.iDayRptStatus, - 1 ) AS iDayRptStatus,
  5018. ttFC.ID AS ID_TC,
  5019. IFNULL( ttDRpt_T.ID, - 1 ) AS ID_TDRpt,
  5020. ttDRpt_T.dstamp,
  5021. ttDRpt_T.id AS ID_Teams,
  5022. ( SELECT GROUP_CONCAT( b.cName ) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttDRpt_T.id AND b.cStation = '机长' ) 机长
  5023. FROM
  5024. scFactoryCalendar ttFC
  5025. LEFT JOIN scShift ttS ON ttS.ID = ttFC.id_scShift
  5026. LEFT JOIN (
  5027. SELECT
  5028. *,
  5029. CASE
  5030. WHEN CONVERT ( dOnDuty, CHAR ) < ( SELECT IFNULL( csetvalue, '00:00' ) + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin' ) THEN
  5031. DATE_ADD( dOnDuty, INTERVAL - 1 DAY ) ELSE dOnDuty
  5032. END dRealRptDate
  5033. FROM
  5034. scDayRpt_Teams
  5035. ) ttDRpt_T ON ttDRpt_T.ID_Calendar = ttFC.ID
  5036. AND ttDRpt_T.iDayRptStatus >= 0
  5037. LEFT JOIN banzu ttT ON ttT.banzuId = ttFC.id_Machine
  5038. LEFT JOIN (
  5039. SELECT
  5040. scvDeviceAll.iType,
  5041. scvDeviceAll.ID,
  5042. scvDeviceAll.cCode,
  5043. scvDeviceAll.cName,
  5044. scvDeviceAll.iGzzxId,
  5045. scvDeviceAll.ID_BM,
  5046. scvDeviceAll.cbmbh,
  5047. scvDeviceAll.cbmmc,
  5048. scvDeviceAll.cType_Sys,
  5049. scvDeviceAll.iStop,
  5050. scvDeviceAll.cType_Dev,
  5051. scvDeviceAll.cShortName,
  5052. scvDeviceAll.iTypeWage,
  5053. iOverProductType
  5054. FROM
  5055. (
  5056. SELECT
  5057. 0 AS iType,
  5058. MKernel.ID,
  5059. MKernel.cBh AS cCode,
  5060. MKernel.cGzzxmc AS cName,
  5061. MKernel.ID AS iGzzxId,
  5062. dzBM.id AS ID_BM,
  5063. DZBM.cbmbh,
  5064. DZBM.cbmmc,
  5065. Mkernel.cGzzxlx AS cType_Sys,
  5066. MKernel.iStopUse AS iStop,
  5067. MKernel.cGzzxlx AS cType_Dev,
  5068. MKernel.cShortName,
  5069. 0 iTypeWage,
  5070. 0 iOverProductType
  5071. FROM
  5072. MKernel
  5073. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh UNION
  5074. SELECT
  5075. 1 AS iType,
  5076. dzyssb.ID,
  5077. dzyssb.csbbh AS cCode,
  5078. dzyssb.csbmc AS cName,
  5079. Mkernel.ID AS iGzzxId,
  5080. dzBM.id AS ID_BM,
  5081. dzBM.cbmbh,
  5082. dzBM.cbmmc,
  5083. MKernel.cGzzxlx AS cType_Sys,
  5084. dzyssb.iStopUse AS iStop,
  5085. dzyssb.csblb AS cType_Dev,
  5086. dzyssb.cShortName,
  5087. 0 iTypeWage,
  5088. 0 iOverProductType
  5089. FROM
  5090. dzyssb
  5091. INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center
  5092. INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh UNION
  5093. SELECT
  5094. 2 AS iType,
  5095. MKerJzmb.ID,
  5096. MKerJzmb.cJzbh AS cCode,
  5097. MKerJzmb.cJzmc AS cName,
  5098. MKerJzmb.iGzzxId,
  5099. dzBM.id AS ID_BM,
  5100. DZBM.cbmbh,
  5101. DZBM.cbmmc,
  5102. MKernel.cGzzxlx AS cType_Sys,
  5103. MKerJzmb.iStopUse AS iStop,
  5104. dzyssb.csblb AS cType_Dev,
  5105. MKerJzmb.cShortName,
  5106. MKerJzmb.iType AS iTypeWage,
  5107. MKerJzmb.iOverProductType
  5108. FROM
  5109. MKerJzmb
  5110. INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId
  5111. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh
  5112. INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid UNION
  5113. SELECT
  5114. 3 AS iType,
  5115. iywdwid AS ID,
  5116. cywdwbh AS cCode,
  5117. cdwmc AS cName,
  5118. iywdwid AS iGzzxId,
  5119. iywdwid AS ID_BM,
  5120. cywdwbh AS cbmbh,
  5121. cdwmc AS cbmmc,
  5122. '' AS cType_Sys,
  5123. CASE
  5124. WHEN DZYWDW.nstate < 0 THEN
  5125. 1 ELSE 0
  5126. END AS iStop,
  5127. '' AS cType_Dev,
  5128. DZYWDW.cjc AS cShortName,
  5129. 0 iTypeWage,
  5130. 0 iOverProductType
  5131. FROM
  5132. dzywdw
  5133. WHERE
  5134. bwjg = 1 UNION
  5135. SELECT
  5136. 3 AS iType,
  5137. - 1,
  5138. '',
  5139. '外厂资源',
  5140. - 1,
  5141. - 1 AS ID_BM,
  5142. '' AS cbmbh,
  5143. '' AS cbmmc,
  5144. '' AS cType_Sys,
  5145. 0 AS iStop,
  5146. '' AS cType_Dev,
  5147. '外厂' AS cShortName,
  5148. 0 AS iTypeWage,
  5149. 0 AS iOverProductType
  5150. ) scvDeviceAll
  5151. WHERE
  5152. ( iStop = 0 )
  5153. ) tvD ON tvD.ID = ttFC.ID_Parent
  5154. AND tvD.iType IN ( 0, 1, 2 )
  5155. ) TB2 ON TB2.ID_Teams = ttTJ.ID_Teams
  5156. LEFT JOIN MCYD a ON a.CCYDH = ttTJ.cCode_AProduct
  5157. ) JobTB
  5158. GROUP BY
  5159. 生产日期,
  5160. JobTB.ID,
  5161. 定额,
  5162. 机台名称,
  5163. 班组名称,
  5164. 机长
  5165. ) tbu
  5166. LEFT JOIN (
  5167. SELECT
  5168. a.ID_Calendar,
  5169. Sum( CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END ) AS 改规次数,
  5170. Sum( CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END ) * 1 AS 改规时间,
  5171. Sum( CASE WHEN a.cCode_Item = 'U0040' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 2 ) ) ELSE 0 END ) AS 周保养时间,
  5172. Sum( CASE WHEN a.cCode_Item = 'U0070' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 做零活时间
  5173. FROM
  5174. sctMJobFeedBackDetail_AttFB a
  5175. LEFT JOIN MCYD b ON a.cProductBillCode = b.CCYDH
  5176. GROUP BY
  5177. ID_Calendar
  5178. ) AttFB1 ON TBU.ID_Calendar = AttFB1.ID_Calendar
  5179. LEFT JOIN (
  5180. SELECT
  5181. ID_Calendar,
  5182. 班次时长,
  5183. 最晚时间
  5184. FROM
  5185. (
  5186. SELECT
  5187. a.ID_Calendar,
  5188. CASE
  5189. WHEN a.cCode_Item = 'U0077' THEN
  5190. Cast( a.nAmount_Item AS DECIMAL ( 4, 2 ) ) ELSE 0
  5191. END AS 班次时长,
  5192. a.dTime AS 最晚时间,
  5193. Row_number ( ) OVER ( PARTITION BY a.ID_Calendar ORDER BY a.dTime DESC ) AS RowNumber
  5194. FROM
  5195. sctMJobFeedBackDetail_AttFB a
  5196. WHERE
  5197. a.cCode_Item = 'U0077'
  5198. ) AS subquery
  5199. WHERE
  5200. RowNumber = 1
  5201. ) AttFB2 ON TBU.ID_Calendar = AttFB2.ID_Calendar
  5202. GROUP BY
  5203. TBU.ID_Calendar,
  5204. TBU.机台名称,
  5205. TBU.班组名称,
  5206. TBU.机长,
  5207. TBU.生产日期,
  5208. TBU.备注,
  5209. TBU.定额,
  5210. AttFB2.班次时长,
  5211. AttFB1.做零活时间,
  5212. AttFB1.周保养时间,
  5213. ATTFB1.改规次数,
  5214. AttFB1.改规时间
  5215. ) TBU2
  5216. WHERE
  5217. 1 = 1
  5218. AND TBU2.机台名称 LIKE '%胶订精密达%'
  5219. GROUP BY
  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.周保养时间,
  5233. TBU2.有效工作时间 UNION ALL
  5234. SELECT
  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. TBU2.有效工作时间
  5249. FROM
  5250. (
  5251. SELECT
  5252. TBU.ID_Calendar,
  5253. TBU.机台名称,
  5254. TBU.班组名称,
  5255. TBU.机长,
  5256. TBU.生产日期,
  5257. TBU.备注,
  5258. TBU.定额,
  5259. IFNULL( AttFB2.班次时长, 10 ) 考核工时,
  5260. Sum( TBU.班组产量 ) 班组产量,
  5261. Sum( TBU.产量折算工时 ) 产量折算工时,
  5262. IFNULL( ATTFB1.改规次数, 0 ) AS 改规次数,
  5263. IFNULL( AttFB1.改规时间, 0 ) AS 改规时间,
  5264. IFNULL( AttFB1.做零活时间, 0 ) 做零活时间,
  5265. IFNULL( AttFB1.周保养时间, 0 ) 周保养时间,
  5266. (
  5267. Sum( TBU.产量折算工时 ) + IFNULL( AttFB1.改规时间, 0 ) + IFNULL( AttFB1.做零活时间, 0 ) + IFNULL( AttFB1.周保养时间, 0 )
  5268. ) 有效工作时间
  5269. FROM
  5270. (
  5271. SELECT
  5272. JobTB.ID ID_Calendar,
  5273. JobTB.机台名称,
  5274. JobTB.班组名称,
  5275. JobTB.机长,
  5276. JobTB.生产日期,
  5277. DATE_FORMAT( JobTB.生产日期, '%W' ) 备注,-- Datename(WEEKDAY, JobTB.生产日期) 备注,
  5278. JobTB.定额 定额,
  5279. Sum( 班组产量 ) 班组产量,
  5280. Cast( Sum( 产量折算工时 ) AS DECIMAL ( 5, 2 ) ) 产量折算工时
  5281. FROM
  5282. (
  5283. SELECT
  5284. ttFC.ID,
  5285. CONVERT ( dRealRptDate, CHAR ) 生产日期,
  5286. TB2.ID_Teams,
  5287. TB2.cJtmc 机台名称,
  5288. '3000/4500' 定额,
  5289. TB2.cName_Team 班组名称,
  5290. TB2.机长 机长,
  5291. ttFc.ID_TeamManRecord,
  5292. ttTJ.cCode_ProductOrder AS cCode_ProductOrder,
  5293. ttTJ.cCode_JobM AS cCode_JobM,
  5294. ttTJ.cName_JobM AS cName_JobM,
  5295. ttTj.cType_AProduct,
  5296. a.CYJLX,
  5297. ttTJ.nOutput_R AS 班组产量,
  5298. CASE
  5299. WHEN a.CYJLX LIKE '%课本%'
  5300. OR a.CYJLX LIKE '%教辅%' THEN
  5301. Cast( Round( ttTJ.nOutput_R / 4500, 3 ) AS DECIMAL ( 6, 3 ) ) ELSE Cast( Round( ttTJ.nOutput_R / 3000, 3 ) AS DECIMAL ( 6, 3 ) )
  5302. END AS 产量折算工时
  5303. FROM
  5304. scDayRpt_Teams_JobContent ttTJ
  5305. INNER JOIN scmachinejob b ON b.ID = ttTJ.ID_JobM
  5306. LEFT JOIN scFactoryCalendar ttFC ON ttTJ.id_scFactoryCalendar = ttFC.id
  5307. LEFT JOIN (
  5308. SELECT CONVERT
  5309. ( CONVERT ( ttDRpt_T.dRealRptDate, CHAR ), DATETIME ) dRealRptDate,
  5310. ttT.cJtmc AS cJtmc,
  5311. ttT.cBanzuMc AS cName_Team,
  5312. ttT.cBmbh AS cBmbh,
  5313. ttT.cBmmc AS cbmmc,
  5314. ttDRpt_T.ID_WorkCenter,
  5315. ttT.cGzzxmc AS cgzzxmc,
  5316. tvD.cName AS cname,
  5317. ttS.cName AS cName_S,
  5318. ttDRpt_T.dOnDuty AS dStart,
  5319. ttDRpt_T.dOffDuty AS dEnd,
  5320. ttDRpt_T.nOutput_RZ AS nAmount_R,
  5321. IFNULL( ttDRpt_T.iDayRptStatus, - 1 ) AS iDayRptStatus,
  5322. ttFC.ID AS ID_TC,
  5323. IFNULL( ttDRpt_T.ID, - 1 ) AS ID_TDRpt,
  5324. ttDRpt_T.dstamp,
  5325. ttDRpt_T.id AS ID_Teams,
  5326. ( SELECT GROUP_CONCAT( b.cName ) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttDRpt_T.id AND b.cStation = '机长' ) 机长
  5327. FROM
  5328. scFactoryCalendar ttFC
  5329. LEFT JOIN scShift ttS ON ttS.ID = ttFC.id_scShift
  5330. LEFT JOIN (
  5331. SELECT
  5332. *,
  5333. CASE
  5334. WHEN CONVERT ( dOnDuty, CHAR ) < ( SELECT IFNULL( csetvalue, '00:00' ) + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin' ) THEN
  5335. DATE_ADD( dOnDuty, INTERVAL - 1 DAY ) ELSE dOnDuty
  5336. END dRealRptDate
  5337. FROM
  5338. scDayRpt_Teams
  5339. ) ttDRpt_T ON ttDRpt_T.ID_Calendar = ttFC.ID
  5340. AND ttDRpt_T.iDayRptStatus >= 0
  5341. LEFT JOIN banzu ttT ON ttT.banzuId = ttFC.id_Machine
  5342. LEFT JOIN (
  5343. SELECT
  5344. scvDeviceAll.iType,
  5345. scvDeviceAll.ID,
  5346. scvDeviceAll.cCode,
  5347. scvDeviceAll.cName,
  5348. scvDeviceAll.iGzzxId,
  5349. scvDeviceAll.ID_BM,
  5350. scvDeviceAll.cbmbh,
  5351. scvDeviceAll.cbmmc,
  5352. scvDeviceAll.cType_Sys,
  5353. scvDeviceAll.iStop,
  5354. scvDeviceAll.cType_Dev,
  5355. scvDeviceAll.cShortName,
  5356. scvDeviceAll.iTypeWage,
  5357. iOverProductType
  5358. FROM
  5359. (
  5360. SELECT
  5361. 0 AS iType,
  5362. MKernel.ID,
  5363. MKernel.cBh AS cCode,
  5364. MKernel.cGzzxmc AS cName,
  5365. MKernel.ID AS iGzzxId,
  5366. dzBM.id AS ID_BM,
  5367. DZBM.cbmbh,
  5368. DZBM.cbmmc,
  5369. Mkernel.cGzzxlx AS cType_Sys,
  5370. MKernel.iStopUse AS iStop,
  5371. MKernel.cGzzxlx AS cType_Dev,
  5372. MKernel.cShortName,
  5373. 0 iTypeWage,
  5374. 0 iOverProductType
  5375. FROM
  5376. MKernel
  5377. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh UNION
  5378. SELECT
  5379. 1 AS iType,
  5380. dzyssb.ID,
  5381. dzyssb.csbbh AS cCode,
  5382. dzyssb.csbmc AS cName,
  5383. Mkernel.ID AS iGzzxId,
  5384. dzBM.id AS ID_BM,
  5385. dzBM.cbmbh,
  5386. dzBM.cbmmc,
  5387. MKernel.cGzzxlx AS cType_Sys,
  5388. dzyssb.iStopUse AS iStop,
  5389. dzyssb.csblb AS cType_Dev,
  5390. dzyssb.cShortName,
  5391. 0 iTypeWage,
  5392. 0 iOverProductType
  5393. FROM
  5394. dzyssb
  5395. INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center
  5396. INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh UNION
  5397. SELECT
  5398. 2 AS iType,
  5399. MKerJzmb.ID,
  5400. MKerJzmb.cJzbh AS cCode,
  5401. MKerJzmb.cJzmc AS cName,
  5402. MKerJzmb.iGzzxId,
  5403. dzBM.id AS ID_BM,
  5404. DZBM.cbmbh,
  5405. DZBM.cbmmc,
  5406. MKernel.cGzzxlx AS cType_Sys,
  5407. MKerJzmb.iStopUse AS iStop,
  5408. dzyssb.csblb AS cType_Dev,
  5409. MKerJzmb.cShortName,
  5410. MKerJzmb.iType AS iTypeWage,
  5411. MKerJzmb.iOverProductType
  5412. FROM
  5413. MKerJzmb
  5414. INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId
  5415. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh
  5416. INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid UNION
  5417. SELECT
  5418. 3 AS iType,
  5419. iywdwid AS ID,
  5420. cywdwbh AS cCode,
  5421. cdwmc AS cName,
  5422. iywdwid AS iGzzxId,
  5423. iywdwid AS ID_BM,
  5424. cywdwbh AS cbmbh,
  5425. cdwmc AS cbmmc,
  5426. '' AS cType_Sys,
  5427. CASE
  5428. WHEN DZYWDW.nstate < 0 THEN
  5429. 1 ELSE 0
  5430. END AS iStop,
  5431. '' AS cType_Dev,
  5432. DZYWDW.cjc AS cShortName,
  5433. 0 iTypeWage,
  5434. 0 iOverProductType
  5435. FROM
  5436. dzywdw
  5437. WHERE
  5438. bwjg = 1 UNION
  5439. SELECT
  5440. 3 AS iType,
  5441. - 1,
  5442. '',
  5443. '外厂资源',
  5444. - 1,
  5445. - 1 AS ID_BM,
  5446. '' AS cbmbh,
  5447. '' AS cbmmc,
  5448. '' AS cType_Sys,
  5449. 0 AS iStop,
  5450. '' AS cType_Dev,
  5451. '外厂' AS cShortName,
  5452. 0 AS iTypeWage,
  5453. 0 AS iOverProductType
  5454. ) scvDeviceAll
  5455. WHERE
  5456. ( iStop = 0 )
  5457. ) tvD ON tvD.ID = ttFC.ID_Parent
  5458. AND tvD.iType IN ( 0, 1, 2 )
  5459. ) TB2 ON TB2.ID_Teams = ttTJ.ID_Teams
  5460. LEFT JOIN MCYD a ON a.CCYDH = ttTJ.cCode_AProduct
  5461. ) JobTB
  5462. GROUP BY
  5463. 生产日期,
  5464. JobTB.ID,
  5465. 定额,
  5466. 机台名称,
  5467. 班组名称,
  5468. 机长
  5469. ) tbu
  5470. LEFT JOIN (
  5471. SELECT
  5472. a.ID_Calendar,
  5473. Sum( CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END ) AS 改规次数,
  5474. Sum( CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END ) * 0.75 AS 改规时间,
  5475. Sum( CASE WHEN a.cCode_Item = 'U0040' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 2 ) ) ELSE 0 END ) AS 周保养时间,
  5476. Sum( CASE WHEN a.cCode_Item = 'U0070' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 做零活时间
  5477. FROM
  5478. sctMJobFeedBackDetail_AttFB a
  5479. LEFT JOIN MCYD b ON a.cProductBillCode = b.CCYDH
  5480. GROUP BY
  5481. ID_Calendar
  5482. ) AttFB1 ON TBU.ID_Calendar = AttFB1.ID_Calendar
  5483. LEFT JOIN (
  5484. SELECT
  5485. ID_Calendar,
  5486. 班次时长,
  5487. 最晚时间
  5488. FROM
  5489. (
  5490. SELECT
  5491. a.ID_Calendar,
  5492. CASE
  5493. WHEN a.cCode_Item = 'U0077' THEN
  5494. Cast( a.nAmount_Item AS DECIMAL ( 4, 2 ) ) ELSE 0
  5495. END AS 班次时长,
  5496. a.dTime AS 最晚时间,
  5497. Row_number ( ) OVER ( PARTITION BY a.ID_Calendar ORDER BY a.dTime DESC ) AS RowNumber
  5498. FROM
  5499. sctMJobFeedBackDetail_AttFB a
  5500. WHERE
  5501. a.cCode_Item = 'U0077'
  5502. ) AS subquery
  5503. WHERE
  5504. RowNumber = 1
  5505. ) AttFB2 ON TBU.ID_Calendar = AttFB2.ID_Calendar
  5506. GROUP BY
  5507. TBU.ID_Calendar,
  5508. TBU.机台名称,
  5509. TBU.班组名称,
  5510. TBU.机长,
  5511. TBU.生产日期,
  5512. TBU.备注,
  5513. TBU.定额,
  5514. AttFB2.班次时长,
  5515. AttFB1.做零活时间,
  5516. AttFB1.周保养时间,
  5517. ATTFB1.改规次数,
  5518. AttFB1.改规时间
  5519. ) TBU2
  5520. WHERE
  5521. 1 = 1
  5522. AND TBU2.机台名称 LIKE '%胶订精工%'
  5523. GROUP BY
  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.周保养时间,
  5537. TBU2.有效工作时间 UNION ALL
  5538. SELECT
  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. TBU2.有效工作时间
  5553. FROM
  5554. (
  5555. SELECT
  5556. TBU.ID_Calendar,
  5557. TBU.机台名称,
  5558. TBU.班组名称,
  5559. TBU.机长,
  5560. TBU.生产日期,
  5561. TBU.备注,
  5562. TBU.定额,
  5563. IFNULL( AttFB2.班次时长, 10 ) 考核工时,
  5564. Sum( TBU.班组产量 ) 班组产量,
  5565. Sum( TBU.产量折算工时 ) 产量折算工时,
  5566. IFNULL( ATTFB1.改规次数, 0 ) AS 改规次数,
  5567. IFNULL( AttFB1.改规时间, 0 ) AS 改规时间,
  5568. IFNULL( AttFB1.做零活时间, 0 ) 做零活时间,
  5569. IFNULL( AttFB1.周保养时间, 0 ) 周保养时间,
  5570. (
  5571. Sum( TBU.产量折算工时 ) + IFNULL( AttFB1.改规时间, 0 ) + IFNULL( AttFB1.做零活时间, 0 ) + IFNULL( AttFB1.周保养时间, 0 )
  5572. ) 有效工作时间
  5573. FROM
  5574. (
  5575. SELECT
  5576. JobTB.ID ID_Calendar,
  5577. JobTB.机台名称,
  5578. JobTB.班组名称,
  5579. JobTB.机长,
  5580. JobTB.生产日期,
  5581. DATE_FORMAT( JobTB.生产日期, '%W' ) 备注,-- Datename(WEEKDAY, JobTB.生产日期) 备注,
  5582. JobTB.定额 定额,
  5583. Sum( 班组产量 ) 班组产量,
  5584. Cast( Sum( 产量折算工时 ) AS DECIMAL ( 5, 2 ) ) 产量折算工时
  5585. FROM
  5586. (
  5587. SELECT
  5588. ttFC.ID,
  5589. CONVERT ( dRealRptDate, CHAR ) 生产日期,
  5590. TB2.ID_Teams,
  5591. TB2.cJtmc 机台名称,
  5592. '3000/4500' 定额,
  5593. TB2.cName_Team 班组名称,
  5594. TB2.机长 机长,
  5595. ttFc.ID_TeamManRecord,
  5596. ttTJ.cCode_ProductOrder AS cCode_ProductOrder,
  5597. ttTJ.cCode_JobM AS cCode_JobM,
  5598. ttTJ.cName_JobM AS cName_JobM,
  5599. ttTj.cType_AProduct,
  5600. a.CYJLX,
  5601. ttTJ.nOutput_R AS 班组产量,
  5602. CASE WHEN a.CYJLX LIKE '%课本%'
  5603. OR a.CYJLX LIKE '%教辅%' THEN
  5604. Cast( Round( ttTJ.nOutput_R / 4500, 3 ) AS DECIMAL ( 6, 3 ) ) ELSE Cast( Round( ttTJ.nOutput_R / 3000, 3 ) AS DECIMAL ( 6, 3 ) )
  5605. END AS 产量折算工时
  5606. FROM
  5607. scDayRpt_Teams_JobContent ttTJ
  5608. INNER JOIN scmachinejob b ON b.ID = ttTJ.ID_JobM
  5609. LEFT JOIN scFactoryCalendar ttFC ON ttTJ.id_scFactoryCalendar = ttFC.id
  5610. LEFT JOIN (
  5611. SELECT CONVERT
  5612. ( CONVERT ( ttDRpt_T.dRealRptDate, CHAR ), DATETIME ) dRealRptDate,
  5613. ttT.cJtmc AS cJtmc,
  5614. ttT.cBanzuMc AS cName_Team,
  5615. ttT.cBmbh AS cBmbh,
  5616. ttT.cBmmc AS cbmmc,
  5617. ttDRpt_T.ID_WorkCenter,
  5618. ttT.cGzzxmc AS cgzzxmc,
  5619. tvD.cName AS cname,
  5620. ttS.cName AS cName_S,
  5621. ttDRpt_T.dOnDuty AS dStart,
  5622. ttDRpt_T.dOffDuty AS dEnd,
  5623. ttDRpt_T.nOutput_RZ AS nAmount_R,
  5624. IFNULL( ttDRpt_T.iDayRptStatus, - 1 ) AS iDayRptStatus,
  5625. ttFC.ID AS ID_TC,
  5626. IFNULL( ttDRpt_T.ID, - 1 ) AS ID_TDRpt,
  5627. ttDRpt_T.dstamp,
  5628. ttDRpt_T.id AS ID_Teams,
  5629. ( SELECT GROUP_CONCAT( b.cName ) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttDRpt_T.id AND b.cStation = '机长' ) 机长
  5630. FROM scFactoryCalendar ttFC
  5631. LEFT JOIN scShift ttS ON ttS.ID = ttFC.id_scShift
  5632. LEFT JOIN (
  5633. SELECT *,
  5634. 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
  5635. FROM scDayRpt_Teams ) ttDRpt_T ON ttDRpt_T.ID_Calendar = ttFC.ID
  5636. AND ttDRpt_T.iDayRptStatus >= 0
  5637. LEFT JOIN banzu ttT ON ttT.banzuId = ttFC.id_Machine
  5638. LEFT JOIN ( SELECT
  5639. scvDeviceAll.iType,
  5640. scvDeviceAll.ID,
  5641. scvDeviceAll.cCode,
  5642. scvDeviceAll.cName,
  5643. scvDeviceAll.iGzzxId,
  5644. scvDeviceAll.ID_BM,
  5645. scvDeviceAll.cbmbh,
  5646. scvDeviceAll.cbmmc,
  5647. scvDeviceAll.cType_Sys,
  5648. scvDeviceAll.iStop,
  5649. scvDeviceAll.cType_Dev,
  5650. scvDeviceAll.cShortName,
  5651. scvDeviceAll.iTypeWage,
  5652. iOverProductType
  5653. FROM ( SELECT
  5654. 0 AS iType,
  5655. MKernel.ID,
  5656. MKernel.cBh AS cCode,
  5657. MKernel.cGzzxmc AS cName,
  5658. MKernel.ID AS iGzzxId,
  5659. dzBM.id AS ID_BM,
  5660. DZBM.cbmbh,
  5661. DZBM.cbmmc,
  5662. Mkernel.cGzzxlx AS cType_Sys,
  5663. MKernel.iStopUse AS iStop,
  5664. MKernel.cGzzxlx AS cType_Dev,
  5665. MKernel.cShortName,
  5666. 0 iTypeWage,
  5667. 0 iOverProductType
  5668. FROM MKernel
  5669. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh UNION
  5670. SELECT 1 AS iType,
  5671. dzyssb.ID,
  5672. dzyssb.csbbh AS cCode,
  5673. dzyssb.csbmc AS cName,
  5674. Mkernel.ID AS iGzzxId,
  5675. dzBM.id AS ID_BM,
  5676. dzBM.cbmbh,
  5677. dzBM.cbmmc,
  5678. MKernel.cGzzxlx AS cType_Sys,
  5679. dzyssb.iStopUse AS iStop,
  5680. dzyssb.csblb AS cType_Dev,
  5681. dzyssb.cShortName,
  5682. 0 iTypeWage,
  5683. 0 iOverProductType
  5684. FROM dzyssb
  5685. INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center
  5686. INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh UNION
  5687. SELECT
  5688. 2 AS iType,
  5689. MKerJzmb.ID,
  5690. MKerJzmb.cJzbh AS cCode,
  5691. MKerJzmb.cJzmc AS cName,
  5692. MKerJzmb.iGzzxId,
  5693. dzBM.id AS ID_BM,
  5694. DZBM.cbmbh,
  5695. DZBM.cbmmc,
  5696. MKernel.cGzzxlx AS cType_Sys,
  5697. MKerJzmb.iStopUse AS iStop,
  5698. dzyssb.csblb AS cType_Dev,
  5699. MKerJzmb.cShortName,
  5700. MKerJzmb.iType AS iTypeWage,
  5701. MKerJzmb.iOverProductType
  5702. FROM MKerJzmb
  5703. INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId
  5704. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh
  5705. INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid UNION
  5706. SELECT
  5707. 3 AS iType,
  5708. iywdwid AS ID,
  5709. cywdwbh AS cCode,
  5710. cdwmc AS cName,
  5711. iywdwid AS iGzzxId,
  5712. iywdwid AS ID_BM,
  5713. cywdwbh AS cbmbh,
  5714. cdwmc AS cbmmc,
  5715. '' AS cType_Sys,
  5716. CASE WHEN DZYWDW.nstate < 0 THEN
  5717. 1 ELSE 0
  5718. END AS iStop,
  5719. '' AS cType_Dev,
  5720. DZYWDW.cjc AS cShortName,
  5721. 0 iTypeWage,
  5722. 0 iOverProductType
  5723. FROM dzywdw
  5724. WHERE bwjg = 1 UNION
  5725. SELECT
  5726. 3 AS iType,
  5727. - 1,
  5728. '',
  5729. '外厂资源',
  5730. - 1,
  5731. - 1 AS ID_BM,
  5732. '' AS cbmbh,
  5733. '' AS cbmmc,
  5734. '' AS cType_Sys,
  5735. 0 AS iStop,
  5736. '' AS cType_Dev,
  5737. '外厂' AS cShortName,
  5738. 0 AS iTypeWage,
  5739. 0 AS iOverProductType
  5740. ) scvDeviceAll
  5741. WHERE
  5742. ( iStop = 0 )
  5743. ) tvD ON tvD.ID = ttFC.ID_Parent
  5744. AND tvD.iType IN ( 0, 1, 2 )
  5745. LEFT JOIN scDayRpt_Teams_People DTP ON ttDRpt_T.ID = DTP.ID_Teams
  5746. AND dtp.cStation = '机长'
  5747. ) TB2 ON TB2.ID_Teams = ttTJ.ID_Teams
  5748. LEFT JOIN MCYD a ON a.CCYDH = ttTJ.cCode_AProduct
  5749. ) JobTB
  5750. GROUP BY
  5751. 生产日期,
  5752. JobTB.ID,
  5753. 定额,
  5754. 机台名称,
  5755. 班组名称,
  5756. 机长 ) tbu
  5757. LEFT JOIN (
  5758. SELECT
  5759. a.ID_Calendar,
  5760. Sum( CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END ) AS 改规次数,
  5761. Sum( CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END ) * 0.67 AS 改规时间,
  5762. Sum( CASE WHEN a.cCode_Item = 'U0040' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 2 ) ) ELSE 0 END ) AS 周保养时间,
  5763. Sum( CASE WHEN a.cCode_Item = 'U0070' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 做零活时间
  5764. FROM sctMJobFeedBackDetail_AttFB a
  5765. LEFT JOIN MCYD b ON a.cProductBillCode = b.CCYDH
  5766. GROUP BY ID_Calendar ) AttFB1 ON TBU.ID_Calendar = AttFB1.ID_Calendar
  5767. LEFT JOIN (
  5768. SELECT
  5769. a.ID_Calendar,
  5770. CASE
  5771. WHEN a.cCode_Item = 'U0077' THEN
  5772. Cast( a.nAmount_Item AS DECIMAL ( 4, 2 ) ) ELSE 0
  5773. END AS 班次时长,
  5774. Max( a.dTime ) AS 最晚时间
  5775. FROM sctMJobFeedBackDetail_AttFB a
  5776. WHERE a.cCode_Item = 'U0077'
  5777. GROUP BY
  5778. a.ID_Calendar,
  5779. a.nAmount_Item,
  5780. a.cCode_Item
  5781. ) AttFB2 ON TBU.ID_Calendar = AttFB2.ID_Calendar
  5782. GROUP BY
  5783. TBU.ID_Calendar,
  5784. TBU.机台名称,
  5785. TBU.班组名称,
  5786. TBU.机长,
  5787. TBU.生产日期,
  5788. TBU.备注,
  5789. TBU.定额,
  5790. AttFB2.班次时长,
  5791. AttFB1.做零活时间,
  5792. AttFB1.周保养时间,
  5793. ATTFB1.改规次数,
  5794. AttFB1.改规时间
  5795. ) TBU2
  5796. WHERE 1 = 1 AND TBU2.机台名称 LIKE '%胶订潮流%'
  5797. GROUP BY
  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. TBU2.有效工作时间
  5812. ) TBU
  5813. GROUP BY
  5814. TBU.机台名称,
  5815. TBU.班组名称,
  5816. TBU.机长,
  5817. TBU.生产日期,
  5818. TBU.备注,
  5819. TBU.定额,
  5820. TBU.考核工作时间 UNION ALL
  5821. SELECT
  5822. TBU.机台名称,
  5823. TBU.班组名称,
  5824. TBU.机长,
  5825. TBU.生产日期,
  5826. TBU.备注,
  5827. CASE
  5828. WHEN Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) >= TBU.考核工时 THEN
  5829. '已完成' ELSE '未完成'
  5830. END 效率分析,
  5831. TBU.定额,
  5832. TBU.考核工时 考核工作时间,
  5833. Sum( TBU.班组产量 ) 班组产量,
  5834. Sum( TBU.产量折算工时 ) 产量折算工时,
  5835. Sum( TBU.改规次数 ) 改规次数,
  5836. Sum( TBU.改规时间 ) 改规时间,
  5837. Sum( TBU.做零活时间 ) 做零活时间,
  5838. Sum( TBU.周保养时间 ) 周保养时间,
  5839. Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) 有效工作时间,
  5840. CASE
  5841. WHEN Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) >= TBU.考核工时 THEN
  5842. 100 ELSE Cast(
  5843. ( Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) ) / TBU.考核工时 * 100 AS DECIMAL ( 4, 2 )
  5844. )
  5845. END 完成百分比
  5846. FROM
  5847. (SELECT
  5848. ttt.Name_Machine 机台名称,
  5849. CONVERT ( ttt.dRealRptDate, CHAR ) 生产日期,
  5850. DATE_FORMAT( ttt.dRealRptDate, '%W' ) 备注,
  5851. ttt.Name_WorkGroup 班组名称,
  5852. ( SELECT GROUP_CONCAT( b.cName ) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttT.ID AND b.cStation = '机长' ) 机长,
  5853. CASE
  5854. WHEN ttt.Name_Machine = '骑马联动01号' THEN
  5855. '4000'
  5856. WHEN ttt.Name_Machine = '骑马联动02号' THEN
  5857. '4500'
  5858. WHEN ttt.Name_Machine = '骑马联动03号' THEN
  5859. '5000' ELSE '5000'
  5860. END 定额,
  5861. ttt.nOutput_RZ 班组产量,
  5862. CASE
  5863. WHEN ttt.Name_Machine = '骑马联动01号' THEN
  5864. Cast( ttt.nOutput_RZ / 4000 AS DECIMAL ( 5, 1 ) )
  5865. WHEN ttt.Name_Machine = '骑马联动02号' THEN
  5866. Cast( ttt.nOutput_RZ / 4500 AS DECIMAL ( 5, 1 ) )
  5867. WHEN ttt.Name_Machine = '骑马联动03号' THEN
  5868. Cast( ttt.nOutput_RZ / 5000 AS DECIMAL ( 5, 1 ) ) ELSE Cast( ttt.nOutput_RZ / 5000 AS DECIMAL ( 5, 1 ) )
  5869. END 产量折算工时,
  5870. IFNULL( AttFB2.班次时长, 10 ) 考核工时,
  5871. Sum( CASE WHEN a.cCode_Item = 'U0075' THEN a.iReported ELSE 0 END ) AS 改规次数,
  5872. Sum( CASE WHEN a.cCode_Item = 'U0075' THEN a.iReported ELSE 0 END ) * 0.5 AS 改规时间,
  5873. Sum( CASE WHEN a.cCode_Item = 'U0040' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 周保养时间,
  5874. Sum( CASE WHEN a.cCode_Item = 'U0070' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 做零活时间
  5875. FROM
  5876. (
  5877. SELECT
  5878. *,
  5879. CASE
  5880. WHEN CONVERT ( dOnDuty, CHAR ) < ( SELECT IFNULL( csetvalue, '00:00' ) + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin' ) THEN
  5881. DATE_ADD( dOnDuty, INTERVAL - 1 DAY ) ELSE dOnDuty
  5882. END dRealRptDate
  5883. FROM
  5884. scDayRpt_Teams
  5885. WHERE
  5886. iDayRptStatus >= 0
  5887. ) ttT
  5888. LEFT JOIN (
  5889. SELECT
  5890. ID_Calendar,
  5891. 班次时长,
  5892. 最晚时间
  5893. FROM
  5894. (
  5895. SELECT
  5896. a.ID_Calendar,
  5897. CASE
  5898. WHEN a.cCode_Item = 'U0077' THEN
  5899. Cast( a.nAmount_Item AS DECIMAL ( 4, 2 ) ) ELSE 0
  5900. END AS 班次时长,
  5901. a.dTime AS 最晚时间,
  5902. Row_number ( ) OVER ( PARTITION BY a.ID_Calendar ORDER BY a.dTime DESC ) AS RowNumber
  5903. FROM
  5904. sctMJobFeedBackDetail_AttFB a
  5905. WHERE
  5906. a.cCode_Item = 'U0077'
  5907. ) AS subquery
  5908. WHERE
  5909. RowNumber = 1
  5910. ) AttFB2 ON ttT.ID_Calendar = AttFB2.ID_Calendar
  5911. LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar
  5912. GROUP BY
  5913. ttt.dRealRptDate,
  5914. ttt.Name_Machine,
  5915. ttT.id,
  5916. AttFB2.班次时长,
  5917. ttt.Name_WorkGroup,
  5918. ttt.nOutput_RZ
  5919. ) TBU
  5920. WHERE
  5921. TBU.机台名称 IN ( '骑马联动01号', '骑马联动02号', '骑马联动03号' )
  5922. GROUP BY
  5923. TBU.机台名称,
  5924. TBU.班组名称,
  5925. TBU.机长,
  5926. TBU.生产日期,
  5927. TBU.备注,
  5928. TBU.定额,
  5929. TBU.考核工时 ) tt
  5930. WHERE tt.生产日期 >= '{$ztday}'
  5931. ORDER BY 完成百分比 DESC";
  5932. $res = Db::query($sql);
  5933. $redis->set($redis_key, json_encode($res));
  5934. echo date("Y-m-d H:i:s").' 存进去了';
  5935. return $res;
  5936. }
  5937. //2.2装订印刷机昨日生产料率分析
  5938. public function yester_zd(){
  5939. $redis=redis();
  5940. $list = json_decode($redis->get(md5('yester_zd_redis')),true);
  5941. // 定义班组名称的排序规则
  5942. $order = ['胶订精工', '胶订潮流', '胶订精密达', '骑马联动', '精装'];
  5943. //按照班组名称排序
  5944. usort($list, function ($a, $b) use ($order) {
  5945. // 获取班组名称中的关键词
  5946. preg_match('/('.implode('|', $order).')/', $a['班组名称'], $matchesA);
  5947. preg_match('/('.implode('|', $order).')/', $b['班组名称'], $matchesB);
  5948. // 获取关键词在排序数组中的索引
  5949. $indexA = array_search($matchesA[1], $order);
  5950. $indexB = array_search($matchesB[1], $order);
  5951. // 比较索引,返回比较结果
  5952. return $indexA - $indexB;
  5953. });
  5954. $result['columns']=[
  5955. ['name'=>'日期','id'=>'rq','width'=>'11','color'=>'red','autoWrap'=>"true",'textAlign'=>'left'],
  5956. ['name'=>'班组名称','id'=>'bzmc','width'=>'24','autoWrap'=>"true",'textAlign'=>'left'],
  5957. ['name'=>'机长','id'=>'jz','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'],
  5958. ['name'=>'定额','id'=>'dl','width'=>'16','autoWrap'=>"true",'textAlign'=>'left'],
  5959. ['name'=>'班组产量','id'=>'bzcl','width'=>'11','autoWrap'=>"true",'textAlign'=>'left'],
  5960. ['name'=>'生产效率分析','id'=>'scxlfx','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'],
  5961. ['name'=>'完成百分比','id'=>'wcbfb','width'=>'12','autoWrap'=>"true",'textAlign'=>'left']
  5962. ];
  5963. foreach($list as $k=>$v){
  5964. $result['rows'][$k]['rq']=$v['生产日期'];
  5965. $result['rows'][$k]['bzmc']=$v['班组名称'];
  5966. $result['rows'][$k]['jz']=$v['机长'];
  5967. $result['rows'][$k]['dl']=$v['定额'];
  5968. $result['rows'][$k]['bzcl']=round($v['班组产量']);
  5969. $result['rows'][$k]['scxlfx']=$v['生产效率分析'];
  5970. $result['rows'][$k]['wcbfb']=round($v['完成百分比']);
  5971. }
  5972. if($list==[]){
  5973. $result['rows'][0]['rq']='';
  5974. $result['rows'][0]['bzmc']='';
  5975. $result['rows'][0]['jz']='';
  5976. $result['rows'][0]['dl']='';
  5977. $result['rows'][0]['bzcl']='';
  5978. $result['rows'][0]['scxlfx']='';
  5979. $result['rows'][0]['wcbfb']='';
  5980. }
  5981. $res['status']=0;
  5982. $res['msg']='';
  5983. $res['data']=$result;
  5984. return json($res);
  5985. }
  5986. //2.3轮转印刷机昨日生产料率分析(查询前一天数据)缓存
  5987. public function yester_lz_redis(){
  5988. $redis=redis();
  5989. $redis_key = md5('yester_lz_redis');
  5990. $ztday = date("Y-m-d",strtotime("-1 day"));
  5991. $sql = "SELECT DATE_FORMAT(TBU2.生产日期,'%Y-%m-%d') 生产日期,
  5992. -- TBU2.生产日期,
  5993. -- TBU2.机台名称,
  5994. TBU2.班组名称,
  5995. TBU2.机长,
  5996. -- DATE_FORMAT(TBU2.生产日期,'%W') 备注,
  5997. -- Datename(WEEKDAY, TBU2.生产日期) 备注,
  5998. CASE
  5999. WHEN ( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间)
  6000. + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间)
  6001. + Sum(TBU2.周保养时间) ) >= TBU2.考核工作时间 THEN '已完成'
  6002. ELSE '未完成'
  6003. END AS 效率分析,
  6004. TBU2.定额,
  6005. -- 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.周保养时间) 周保养时间,
  6015. -- ( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间)
  6016. -- + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间)
  6017. -- + Sum(TBU2.周保养时间) ) AS 有效工作时间,
  6018. CASE
  6019. WHEN ( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间)
  6020. + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间)
  6021. + Sum(TBU2.周保养时间) ) >= TBU2.考核工作时间 THEN 100
  6022. ELSE Cast(( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间)
  6023. + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间)
  6024. + Sum(TBU2.周保养时间) ) / TBU2.考核工作时间 * 100 AS DECIMAL(5, 2))
  6025. END 完成百分比
  6026. FROM (SELECT CONVERT(TB1.生产日期,CHAR) 生产日期,
  6027. TB1.机台名称,
  6028. 14000 定额,
  6029. TB1.班组名称,
  6030. TB1.机长 AS 机长,
  6031. TB1.班组产量,
  6032. Cast(TB1.班组产量 / 14000 AS DECIMAL(5, 2)) 产量折算时间,
  6033. TB1.改墨次数,
  6034. Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间,
  6035. TB1.上版块数,
  6036. Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  6037. TB1.改纸路次数 AS 改纸路次数,
  6038. Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间,
  6039. TB1.周保养时间,
  6040. Cast(TB1.班组产量 / 14000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间,
  6041. 12 AS 考核工作时间
  6042. FROM (SELECT CASE
  6043. WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  6044. FROM sysetup
  6045. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  6046. ELSE ttt.dOnDuty
  6047. END 生产日期,
  6048. ttt.Name_Machine 机台名称,
  6049. ttt.Name_WorkGroup 班组名称,
  6050. (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b
  6051. WHERE b.ID_Teams = ttT.ID
  6052. AND b.cStation = '机长') 机长,
  6053. ttt.nOutput_RZ 班组产量,
  6054. Sum(CASE
  6055. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  6056. ELSE 0
  6057. END) AS 上版次数,
  6058. Sum(CASE
  6059. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  6060. ELSE 0
  6061. END) AS 上版块数,
  6062. Sum(CASE
  6063. WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type
  6064. ELSE 0
  6065. END) AS 改墨次数,
  6066. Sum(CASE
  6067. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  6068. ELSE 0
  6069. END) AS 改规次数,
  6070. Sum(CASE
  6071. WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type
  6072. ELSE 0
  6073. END) AS 改纸路次数,
  6074. Sum(CASE
  6075. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2))
  6076. ELSE 0
  6077. END) AS 周保养时间
  6078. /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/
  6079. FROM scDayRpt_Teams ttT
  6080. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  6081. ON ttT.ID_Calendar = a.ID_Calendar
  6082. LEFT JOIN sctJFBActive b
  6083. ON b.ID = a.ID_Act
  6084. WHERE ttT.iDayRptStatus >= 0 /*iDayRptStatus=0未审核,iDayRptStatus=10为已审核,iDayRptStatus=-10为作废单*/
  6085. GROUP BY ttt.dOnDuty,
  6086. ttt.Name_Machine,
  6087. ttT.id,
  6088. ttt.Name_WorkGroup,
  6089. ttt.nOutput_RZ)TB1
  6090. WHERE TB1.机台名称 = '标规小森商轮1号'
  6091. UNION ALL
  6092. SELECT CONVERT(TB1.生产日期, CHAR) 生产日期,
  6093. TB1.机台名称,
  6094. 18000 定额,
  6095. TB1.班组名称,
  6096. tb1.机长 AS 机长,
  6097. TB1.班组产量,
  6098. Cast(TB1.班组产量 / 18000 AS DECIMAL(5, 2)) 产量折算时间,
  6099. TB1.改墨次数,
  6100. Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间,
  6101. TB1.上版块数,
  6102. Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  6103. TB1.改纸路次数 AS 改纸路次数,
  6104. Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间,
  6105. TB1.周保养时间,
  6106. Cast(TB1.班组产量 / 18000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间,
  6107. 12 AS 考核工作时间
  6108. FROM (SELECT CASE
  6109. WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  6110. FROM sysetup
  6111. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  6112. ELSE ttt.dOnDuty
  6113. END 生产日期,
  6114. ttt.Name_Machine 机台名称,
  6115. ttt.Name_WorkGroup 班组名称,
  6116. (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b
  6117. WHERE b.ID_Teams = ttT.ID
  6118. AND b.cStation = '机长') 机长,
  6119. ttt.nOutput_RZ 班组产量,
  6120. Sum(CASE
  6121. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  6122. ELSE 0
  6123. END) AS 上版次数,
  6124. Sum(CASE
  6125. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  6126. ELSE 0
  6127. END) AS 上版块数,
  6128. Sum(CASE
  6129. WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type
  6130. ELSE 0
  6131. END) AS 改墨次数,
  6132. Sum(CASE
  6133. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  6134. ELSE 0
  6135. END) AS 改规次数,
  6136. Sum(CASE
  6137. WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type
  6138. ELSE 0
  6139. END) AS 改纸路次数,
  6140. Sum(CASE
  6141. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2))
  6142. ELSE 0
  6143. END) AS 周保养时间
  6144. /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/
  6145. FROM scDayRpt_Teams ttT
  6146. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  6147. ON ttT.ID_Calendar = a.ID_Calendar
  6148. LEFT JOIN sctJFBActive b
  6149. ON b.ID = a.ID_Act
  6150. WHERE ttT.iDayRptStatus >= 0 /*iDayRptStatus=0未审核,iDayRptStatus=10为已审核,iDayRptStatus=-10为作废单*/
  6151. GROUP BY ttt.dOnDuty,
  6152. ttt.Name_Machine,
  6153. ttt.ID,
  6154. ttt.Name_WorkGroup,
  6155. ttt.nOutput_RZ)TB1
  6156. WHERE TB1.机台名称 = '大规三菱商轮1号'
  6157. UNION ALL
  6158. SELECT CONVERT(TB1.生产日期, CHAR) 生产日期,
  6159. TB1.机台名称,
  6160. 20000 定额,
  6161. TB1.班组名称,
  6162. TB1.机长 AS 机长,
  6163. TB1.班组产量,
  6164. Cast(TB1.班组产量 / 20000 AS DECIMAL(5, 2)) 产量折算时间,
  6165. TB1.改墨次数,
  6166. Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间,
  6167. TB1.上版块数,
  6168. Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  6169. TB1.改纸路次数 AS 改纸路次数,
  6170. Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间,
  6171. TB1.周保养时间,
  6172. Cast(TB1.班组产量 / 20000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间,
  6173. 12 AS 考核工作时间
  6174. FROM (SELECT CASE
  6175. WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  6176. FROM sysetup
  6177. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  6178. ELSE ttt.dOnDuty
  6179. END 生产日期,
  6180. ttt.Name_Machine 机台名称,
  6181. ttt.Name_WorkGroup 班组名称,
  6182. (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b
  6183. WHERE b.ID_Teams = ttT.ID
  6184. AND b.cStation = '机长') 机长,
  6185. ttt.nOutput_RZ 班组产量,
  6186. Sum(CASE
  6187. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  6188. ELSE 0
  6189. END) AS 上版次数,
  6190. Sum(CASE
  6191. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  6192. ELSE 0
  6193. END) AS 上版块数,
  6194. Sum(CASE
  6195. WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type
  6196. ELSE 0
  6197. END) AS 改墨次数,
  6198. Sum(CASE
  6199. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  6200. ELSE 0
  6201. END) AS 改规次数,
  6202. Sum(CASE
  6203. WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type
  6204. ELSE 0
  6205. END) AS 改纸路次数,
  6206. Sum(CASE
  6207. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2))
  6208. ELSE 0
  6209. END) AS 周保养时间
  6210. /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/
  6211. FROM scDayRpt_Teams ttT
  6212. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  6213. ON ttT.ID_Calendar = a.ID_Calendar
  6214. LEFT JOIN sctJFBActive b
  6215. ON b.ID = a.ID_Act
  6216. WHERE ttT.iDayRptStatus >= 0 /*iDayRptStatus=0未审核,iDayRptStatus=10为已审核,iDayRptStatus=-10为作废单*/
  6217. GROUP BY ttt.dOnDuty,
  6218. ttt.Name_Machine,
  6219. ttt.ID,
  6220. ttt.Name_WorkGroup,
  6221. ttt.nOutput_RZ)TB1
  6222. WHERE TB1.机台名称 IN( '标规小森商轮2号', '标规三菱商轮1号', '标规三菱商轮2号', '大规小森商轮1号', '标规高斯轮转1号' )
  6223. UNION ALL
  6224. SELECT CONVERT(TB1.生产日期, CHAR) 生产日期,
  6225. TB1.机台名称,
  6226. 12000 定额,
  6227. TB1.班组名称,
  6228. TB1.机长 机长,
  6229. TB1.班组产量,
  6230. Cast(TB1.班组产量 / 12000 AS DECIMAL(5, 2)) 产量折算时间,
  6231. TB1.改墨次数,
  6232. Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间,
  6233. TB1.上版块数,
  6234. Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间,
  6235. TB1.改纸路次数 AS 改纸路次数,
  6236. Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间,
  6237. TB1.周保养时间,
  6238. Cast(TB1.班组产量 / 12000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间,
  6239. 12 AS 考核工作时间
  6240. FROM (SELECT CASE
  6241. WHEN CONVERT(ttt.dOnDuty,CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00'
  6242. FROM sysetup
  6243. WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day)
  6244. ELSE ttt.dOnDuty
  6245. END 生产日期,
  6246. ttt.Name_Machine 机台名称,
  6247. ttt.Name_WorkGroup 班组名称,
  6248. (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b
  6249. WHERE b.ID_Teams = ttT.ID
  6250. AND b.cStation = '机长') 机长,
  6251. ttt.nOutput_RZ 班组产量,
  6252. Sum(CASE
  6253. WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type
  6254. ELSE 0
  6255. END) AS 上版次数,
  6256. Sum(CASE
  6257. WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED)
  6258. ELSE 0
  6259. END) AS 上版块数,
  6260. Sum(CASE
  6261. WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type
  6262. ELSE 0
  6263. END) AS 改墨次数,
  6264. Sum(CASE
  6265. WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item
  6266. ELSE 0
  6267. END) AS 改规次数,
  6268. Sum(CASE
  6269. WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type
  6270. ELSE 0
  6271. END) AS 改纸路次数,
  6272. Sum(CASE
  6273. WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2))
  6274. ELSE 0
  6275. END) AS 周保养时间
  6276. FROM scDayRpt_Teams ttT
  6277. LEFT JOIN sctMJobFeedBackDetail_AttFB a
  6278. ON ttT.ID_Calendar = a.ID_Calendar
  6279. LEFT JOIN sctJFBActive b
  6280. ON b.ID = a.ID_Act
  6281. WHERE ttT.iDayRptStatus >= 0
  6282. GROUP BY ttt.dOnDuty,
  6283. ttt.Name_Machine,
  6284. ttt.ID,
  6285. ttt.Name_WorkGroup,
  6286. ttt.nOutput_RZ)TB1
  6287. WHERE TB1.机台名称 IN( '标规报轮1号', '标规204胶轮1号' ))TBU2
  6288. WHERE TBU2.生产日期 >= '{$ztday}'
  6289. AND TBU2.班组产量 > 0
  6290. GROUP BY TBU2.机台名称,
  6291. TBU2.班组名称,
  6292. TBU2.机长,
  6293. TBU2.生产日期,
  6294. TBU2.定额,
  6295. TBU2.考核工作时间
  6296. ORDER BY 完成百分比 DESC";
  6297. $res = Db::query($sql);
  6298. $redis->set($redis_key, json_encode($res));
  6299. echo date("Y-m-d H:i:s").' 存进去了';
  6300. return $res;
  6301. }
  6302. //2.3轮转印刷机昨日生产料率分析
  6303. public function yester_lz(){
  6304. $redis=redis();
  6305. $list = json_decode($redis->get(md5('yester_lz_redis')), true);
  6306. // 定义班组名称的排序规则
  6307. $order = ['标规', '大规'];
  6308. //按照班组名称排序
  6309. usort($list, function ($a, $b) use ($order) {
  6310. // 获取班组名称中的关键词
  6311. preg_match('/('.implode('|', $order).')/', $a['班组名称'], $matchesA);
  6312. preg_match('/('.implode('|', $order).')/', $b['班组名称'], $matchesB);
  6313. // 获取关键词在排序数组中的索引
  6314. $indexA = array_search($matchesA[1], $order);
  6315. $indexB = array_search($matchesB[1], $order);
  6316. // 比较索引,返回比较结果
  6317. return $indexA - $indexB;
  6318. });
  6319. $result['columns']=[
  6320. ['name'=>'日期','id'=>'rq','width'=>'11','color'=>'red','autoWrap'=>"true",'textAlign'=>'left'],
  6321. ['name'=>'班组名称','id'=>'bzmc','width'=>'24','autoWrap'=>"true",'textAlign'=>'left'],
  6322. ['name'=>'机长','id'=>'jz','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'],
  6323. ['name'=>'定额','id'=>'dl','width'=>'16','autoWrap'=>"true",'textAlign'=>'left'],
  6324. ['name'=>'班组产量','id'=>'bzcl','width'=>'11','autoWrap'=>"true",'textAlign'=>'left'],
  6325. ['name'=>'生产效率分析','id'=>'scxlfx','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'],
  6326. ['name'=>'完成百分比','id'=>'wcbfb','width'=>'12','autoWrap'=>"true",'textAlign'=>'left']
  6327. ];
  6328. foreach($list as $k=>$v){
  6329. $result['rows'][$k]['rq']=$v['生产日期'];
  6330. $result['rows'][$k]['bzmc']=$v['班组名称'];
  6331. $result['rows'][$k]['jz']=$v['机长'];
  6332. $result['rows'][$k]['dl']=$v['定额'];
  6333. $result['rows'][$k]['bzcl']=round($v['班组产量']);
  6334. $result['rows'][$k]['scxlfx']=$v['效率分析'];
  6335. $result['rows'][$k]['wcbfb']=round($v['完成百分比']);
  6336. }
  6337. if($list==[]){
  6338. $result['rows'][0]['rq']='';
  6339. $result['rows'][0]['bzmc']='';
  6340. $result['rows'][0]['jz']='';
  6341. $result['rows'][0]['dl']='';
  6342. $result['rows'][0]['bzcl']='';
  6343. $result['rows'][0]['scxlfx']='';
  6344. $result['rows'][0]['wcbfb']='';
  6345. }
  6346. $res['status']=0;
  6347. $res['msg']='';
  6348. $res['data']=$result;
  6349. return json($res);
  6350. }
  6351. /**
  6352. * 第三屏第三页 质量管控看板
  6353. */
  6354. //按客户 按质量问题 按责任部门-->分组【Bi根据饼状图分组轮播变化】【暂时未用到 可以删除】
  6355. public function zlgk_grouping() {
  6356. $result = ['按部门', '按质量问题', '按责任部门'];
  6357. $data = [
  6358. "columns" => [
  6359. ["name" => "分组", "id" => "subsys"]
  6360. ],
  6361. "rows" => []
  6362. ];
  6363. foreach ($result as $value) {
  6364. $data["rows"][] = ["subsys" => $value];
  6365. }
  6366. $res = [
  6367. 'status' => 0,
  6368. 'msg' => '',
  6369. 'data' => $data
  6370. ];
  6371. return json_encode($res, JSON_UNESCAPED_UNICODE);
  6372. }
  6373. //同期投诉增减比 按客户->今年缓存
  6374. public function qkhzl_redis(){
  6375. $redis=redis();
  6376. $redis_key = md5('qkhzl_redis');
  6377. // $startDate = date("Y-04-22");
  6378. $startDate = date("Y-m-d", strtotime("-1 year"));
  6379. $endDate = date("Y-m-d");
  6380. $res= Db::query("SELECT resp.cReasonCName,D.cdwmc FROM ecComplainFeedback B LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID
  6381. LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd
  6382. LEFT JOIN (SELECT a.ID_qlOrderProduct,Sum(a.iAmountOut) iAmount_Out FROM SCYDYSQX a
  6383. GROUP BY a.ID_qlOrderProduct) c ON c.ID_qlOrderProduct = p.ID LEFT JOIN ecComplainContent DD
  6384. ON DD.iComplainFBID = B.iID LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C
  6385. LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P
  6386. LEFT JOIN (SELECT R.iComplainFBID,
  6387. PP.strSubName AS cReasonPName,
  6388. CC2.strSubName AS cReasonCName,
  6389. CR.cRespPerson,
  6390. CR.cRespDept,
  6391. CR.cRespTech,
  6392. CR.cRespCorp,
  6393. CR.nMoney
  6394. FROM ecComplainReasonAnalysis R
  6395. LEFT JOIN tbConfig CC2
  6396. ON CC2.iNoConfig = R.iReasonID_C
  6397. LEFT JOIN tbConfig PP
  6398. ON PP.iNoConfig = R.iReasonID_P
  6399. LEFT JOIN ecComplainResponsibility CR
  6400. ON CR.iComplainRAID = R.iID) resp
  6401. ON resp.iComplainFBID = B.iID
  6402. WHERE 1 = 1
  6403. AND b.dFeedbackDate >= '{$startDate}'
  6404. AND b.dFeedbackDate <= '{$endDate}'");
  6405. if($res){
  6406. $redis->set($redis_key, json_encode($res));
  6407. echo date("Y-m-d H:i:s").'存进去了';
  6408. return $res;
  6409. }
  6410. }
  6411. //同期投诉增减比 按客户->去年缓存
  6412. public function qiankhzl_redis(){
  6413. $redis=redis();
  6414. $redis_key = md5('qiankhzl_redis');
  6415. // 获取当前的年、月、日
  6416. $currentYear = date("Y");
  6417. $currentMonth = date("m");
  6418. $currentDay = date("d");
  6419. // 计算前一年和前两年的年份
  6420. $lastYear = $currentYear - 1;
  6421. $twoYearsAgo = $currentYear - 2;
  6422. // 构造日期字符串
  6423. $startDate = date("Y-m-d", strtotime("$twoYearsAgo-$currentMonth-$currentDay"));
  6424. $endDate = date("Y-m-d", strtotime("$lastYear-$currentMonth-$currentDay"));
  6425. $res= Db::query("SELECT resp.cReasonCName,D.cdwmc FROM ecComplainFeedback B LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID
  6426. LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd
  6427. LEFT JOIN (SELECT a.ID_qlOrderProduct,Sum(a.iAmountOut) iAmount_Out FROM SCYDYSQX a
  6428. GROUP BY a.ID_qlOrderProduct) c ON c.ID_qlOrderProduct = p.ID LEFT JOIN ecComplainContent DD
  6429. ON DD.iComplainFBID = B.iID LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C
  6430. LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P
  6431. LEFT JOIN (SELECT R.iComplainFBID,
  6432. PP.strSubName AS cReasonPName,
  6433. CC2.strSubName AS cReasonCName,
  6434. CR.cRespPerson,
  6435. CR.cRespDept,
  6436. CR.cRespTech,
  6437. CR.cRespCorp,
  6438. CR.nMoney
  6439. FROM ecComplainReasonAnalysis R
  6440. LEFT JOIN tbConfig CC2
  6441. ON CC2.iNoConfig = R.iReasonID_C
  6442. LEFT JOIN tbConfig PP
  6443. ON PP.iNoConfig = R.iReasonID_P
  6444. LEFT JOIN ecComplainResponsibility CR
  6445. ON CR.iComplainRAID = R.iID) resp
  6446. ON resp.iComplainFBID = B.iID
  6447. WHERE 1 = 1
  6448. AND b.dFeedbackDate >= '{$startDate}'
  6449. AND b.dFeedbackDate <= '{$endDate}'");
  6450. if($res){
  6451. $redis->set($redis_key, json_encode($res));
  6452. echo date("Y-m-d H:i:s").'存进去了';
  6453. return $res;
  6454. }
  6455. }
  6456. //同期投诉增减比 按责任部门->今年缓存
  6457. public function qbmzl_redis(){
  6458. $redis=redis();
  6459. $redis_key = md5('qbmzl_redis');
  6460. $startDate = date("Y-m-d", strtotime("-1 year"));
  6461. $endDate = date("Y-m-d");
  6462. $res1=Db::query("SELECT
  6463. IFNULL(责任部门, '其他') AS 部门, COUNT(*) AS 投诉次数
  6464. FROM (
  6465. SELECT
  6466. e.cDept AS 责任部门,
  6467. F.MergedStrSubName AS 小类
  6468. FROM
  6469. ecComplainFeedback B
  6470. LEFT JOIN ecComplainContent C ON B.iID = C.iComplainFBID
  6471. LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID
  6472. LEFT JOIN ecComplainDeptOpinion e ON B.iID = e.iComplainFBID
  6473. LEFT JOIN (
  6474. SELECT
  6475. R.iComplainFBID,
  6476. (
  6477. SELECT
  6478. GROUP_CONCAT(cc.strSubName ORDER BY cc.strSubName SEPARATOR ',')
  6479. FROM
  6480. ecComplainReasonAnalysis AS R2
  6481. LEFT JOIN
  6482. tbConfig AS cc ON cc.iNoConfig = R2.iReasonID_C
  6483. WHERE
  6484. R2.iComplainFBID = R.iComplainFBID
  6485. ) AS MergedStrSubName
  6486. FROM
  6487. ecComplainReasonAnalysis AS R
  6488. LEFT JOIN
  6489. tbConfig AS cc ON cc.iNoConfig = R.iReasonID_C
  6490. WHERE
  6491. 1 = 1
  6492. GROUP BY
  6493. R.iComplainFBID
  6494. ) F ON B.iID = F.iComplainFBID
  6495. WHERE
  6496. DATE_FORMAT(B.dComplainDate, '%Y-%m-%d') BETWEEN '{$startDate}' AND '{$endDate}'
  6497. AND B.iState = 30
  6498. ) AS MainQuery
  6499. GROUP BY
  6500. MainQuery.责任部门
  6501. ORDER BY COUNT(*) DESC");
  6502. if($res1){
  6503. $redis->set($redis_key, json_encode($res1));
  6504. echo date("Y-m-d H:i:s").'存进去了';
  6505. return $res1;
  6506. }
  6507. }
  6508. //同期投诉增减比 按责任部门->去年缓存
  6509. public function qianbmzl_redis(){
  6510. $redis=redis();
  6511. $redis_key = md5('qianbmzl_redis');
  6512. // 获取当前的年、月、日
  6513. $currentYear = date("Y");
  6514. $currentMonth = date("m");
  6515. $currentDay = date("d");
  6516. // 计算前一年和前两年的年份
  6517. $lastYear = $currentYear - 1;
  6518. $twoYearsAgo = $currentYear - 2;
  6519. // 构造日期字符串
  6520. $startDate = date("Y-m-d", strtotime("$twoYearsAgo-$currentMonth-$currentDay"));
  6521. $endDate = date("Y-m-d", strtotime("$lastYear-$currentMonth-$currentDay"));
  6522. $res1=Db::query("SELECT
  6523. IFNULL(责任部门, '其他') AS 部门, COUNT(*) AS 投诉次数
  6524. FROM (
  6525. SELECT
  6526. e.cDept AS 责任部门,
  6527. F.MergedStrSubName AS 小类
  6528. FROM
  6529. ecComplainFeedback B
  6530. LEFT JOIN ecComplainContent C ON B.iID = C.iComplainFBID
  6531. LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID
  6532. LEFT JOIN ecComplainDeptOpinion e ON B.iID = e.iComplainFBID
  6533. LEFT JOIN (
  6534. SELECT
  6535. R.iComplainFBID,
  6536. (
  6537. SELECT
  6538. GROUP_CONCAT(cc.strSubName ORDER BY cc.strSubName SEPARATOR ',')
  6539. FROM
  6540. ecComplainReasonAnalysis AS R2
  6541. LEFT JOIN
  6542. tbConfig AS cc ON cc.iNoConfig = R2.iReasonID_C
  6543. WHERE
  6544. R2.iComplainFBID = R.iComplainFBID
  6545. ) AS MergedStrSubName
  6546. FROM
  6547. ecComplainReasonAnalysis AS R
  6548. LEFT JOIN
  6549. tbConfig AS cc ON cc.iNoConfig = R.iReasonID_C
  6550. WHERE
  6551. 1 = 1
  6552. GROUP BY
  6553. R.iComplainFBID
  6554. ) F ON B.iID = F.iComplainFBID
  6555. WHERE
  6556. DATE_FORMAT(B.dComplainDate, '%Y-%m-%d') BETWEEN '{$startDate}' AND '{$endDate}'
  6557. AND B.iState = 30
  6558. ) AS MainQuery
  6559. GROUP BY
  6560. MainQuery.责任部门
  6561. ORDER BY COUNT(*) DESC");
  6562. if($res1){
  6563. $redis->set($redis_key, json_encode($res1));
  6564. echo date("Y-m-d H:i:s").'存进去了';
  6565. return $res1;
  6566. }
  6567. }
  6568. //同期投诉增减比 按责任部门->今年缓存【可以删】
  6569. public function qbmzl_rediss(){
  6570. $redis=redis();
  6571. $redis_key = md5('qbmzl_redis');
  6572. $startDate = date("Y-m-d", strtotime("-1 year"));
  6573. $endDate = date("Y-m-d");
  6574. $res1=Db::query("SELECT CASE
  6575. WHEN CR.cRespDept = '' THEN '外协单位'
  6576. ELSE CR.cRespDept
  6577. END AS 部门,
  6578. Count(*) AS 投诉次数
  6579. FROM ecComplainFeedback B
  6580. LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID
  6581. LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode
  6582. INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd
  6583. LEFT JOIN (SELECT a.ID_qlOrderProduct,
  6584. Sum(a.iAmountOut) iAmount_Out
  6585. FROM SCYDYSQX a
  6586. GROUP BY a.ID_qlOrderProduct) c
  6587. ON c.ID_qlOrderProduct = p.ID
  6588. LEFT JOIN ecComplainContent DD ON DD.iComplainFBID = B.iID
  6589. LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C
  6590. LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P
  6591. LEFT JOIN (SELECT R.iComplainFBID,CR1.cRespDept
  6592. FROM ecComplainReasonAnalysis R
  6593. LEFT JOIN ecComplainResponsibility CR1 ON CR1.iComplainRAID = R.iID) CR
  6594. ON B.iID = CR.iComplainFBID
  6595. WHERE 1 = 1 AND b.dFeedbackDate >= '{$startDate}' AND b.dFeedbackDate <= '{$endDate}'
  6596. GROUP BY CR.cRespDept ORDER BY 投诉次数 DESC,
  6597. CR.cRespDept; ");
  6598. foreach($res1 as $k=>$v){
  6599. if($v['部门']=='全部'){
  6600. unset($res1[$k]);
  6601. }
  6602. }
  6603. foreach($res1 as $k=>$v){
  6604. if($v['部门']===null){
  6605. $res1[$k]['部门']='全部';
  6606. }
  6607. }
  6608. $res = Db::query("SELECT CR2.cReasonPName,CR2.cRespDept
  6609. FROM ecComplainFeedback B2
  6610. LEFT JOIN (SELECT R2.iComplainFBID,
  6611. CR1.cRespDept,
  6612. CC.strSubName AS cReasonPName
  6613. FROM ecComplainReasonAnalysis R2
  6614. LEFT JOIN ecComplainResponsibility CR1
  6615. ON CR1.iComplainRAID = R2.iID
  6616. LEFT JOIN tbConfig CC
  6617. ON CC.iNoConfig = R2.iReasonID_C
  6618. LEFT JOIN tbConfig PP
  6619. ON PP.iNoConfig = R2.iReasonID_P) CR2
  6620. ON B2.iID = CR2.iComplainFBID
  6621. WHERE b2.dFeedbackDate >= '{$startDate}'
  6622. AND b2.dFeedbackDate <= '{$endDate}'");
  6623. $list = [];
  6624. for ($i = 0; $i < count($res); $i++) {
  6625. if($res[$i]['cRespDept']===''){
  6626. $res[$i]['cRespDept']='外协单位';
  6627. }
  6628. if($res[$i]['cRespDept']===null){
  6629. $res[$i]['cRespDept']='全部';
  6630. }
  6631. $list[$res[$i]['cRespDept']][] = $res[$i]['cReasonPName'];
  6632. }
  6633. array_multisort($list, SORT_DESC);
  6634. $result = [];
  6635. $i = 0;
  6636. foreach ($list as $k => $v) {
  6637. // $result[$i]['部门'] = $k;
  6638. // $result[$i]['投诉次数'] = count($v);
  6639. // $result[$i]['合并原因'] = '';
  6640. $result[$k]='';
  6641. foreach ($v as $key => $value) {
  6642. if ($value == null) {
  6643. unset($v[$key]);
  6644. }
  6645. }
  6646. foreach (array_count_values($v) as $a => $b) {
  6647. // $result[$i]['合并原因'] .= $a . $b . '/';
  6648. $result[$k] .= $a . $b . '/';
  6649. }
  6650. // $result[$i]['合并原因'] = substr($result[$i]['合并原因'], 0, -1);
  6651. $result[$k] = substr($result[$k], 0, -1);
  6652. $i++;
  6653. }
  6654. foreach($res1 as $k=>$v){
  6655. if($v['部门']!==null)$res1[$k]['合并原因']=$result[$v['部门']];
  6656. if($v['部门']=='全部'){
  6657. $res1[$k]['投诉次数']=count($list['全部']);
  6658. }
  6659. }
  6660. if($res1){
  6661. $redis->set($redis_key, json_encode($res1));
  6662. echo date("Y-m-d H:i:s").'存进去了';
  6663. return $res1;
  6664. }
  6665. }
  6666. //同期投诉增减比 按责任部门->去年缓存【可以删】
  6667. public function qianbmzl_rediss(){
  6668. $redis=redis();
  6669. $redis_key = md5('qianbmzl_redis');
  6670. // 获取当前的年、月、日
  6671. $currentYear = date("Y");
  6672. $currentMonth = date("m");
  6673. $currentDay = date("d");
  6674. // 计算前一年和前两年的年份
  6675. $lastYear = $currentYear - 1;
  6676. $twoYearsAgo = $currentYear - 2;
  6677. // 构造日期字符串
  6678. $startDate = date("Y-m-d", strtotime("$twoYearsAgo-$currentMonth-$currentDay"));
  6679. $endDate = date("Y-m-d", strtotime("$lastYear-$currentMonth-$currentDay"));
  6680. $res1=Db::query("SELECT CASE
  6681. WHEN CR.cRespDept = '' THEN '外协单位'
  6682. ELSE CR.cRespDept
  6683. END AS 部门,
  6684. Count(*) AS 投诉次数
  6685. FROM ecComplainFeedback B
  6686. LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID
  6687. LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode
  6688. INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd
  6689. LEFT JOIN (SELECT a.ID_qlOrderProduct,
  6690. Sum(a.iAmountOut) iAmount_Out
  6691. FROM SCYDYSQX a
  6692. GROUP BY a.ID_qlOrderProduct) c
  6693. ON c.ID_qlOrderProduct = p.ID
  6694. LEFT JOIN ecComplainContent DD ON DD.iComplainFBID = B.iID
  6695. LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C
  6696. LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P
  6697. LEFT JOIN (SELECT R.iComplainFBID,CR1.cRespDept
  6698. FROM ecComplainReasonAnalysis R
  6699. LEFT JOIN ecComplainResponsibility CR1 ON CR1.iComplainRAID = R.iID) CR
  6700. ON B.iID = CR.iComplainFBID
  6701. WHERE 1 = 1 AND b.dFeedbackDate >= '{$startDate}' AND b.dFeedbackDate <= '{$endDate}'
  6702. GROUP BY CR.cRespDept ORDER BY 投诉次数 DESC,
  6703. CR.cRespDept; ");
  6704. foreach($res1 as $k=>$v){
  6705. if($v['部门']=='全部'){
  6706. unset($res1[$k]);
  6707. }
  6708. }
  6709. foreach($res1 as $k=>$v){
  6710. if($v['部门']===null){
  6711. $res1[$k]['部门']='全部';
  6712. }
  6713. }
  6714. $res = Db::query("SELECT CR2.cReasonPName,CR2.cRespDept
  6715. FROM ecComplainFeedback B2
  6716. LEFT JOIN (SELECT R2.iComplainFBID,
  6717. CR1.cRespDept,
  6718. CC.strSubName AS cReasonPName
  6719. FROM ecComplainReasonAnalysis R2
  6720. LEFT JOIN ecComplainResponsibility CR1
  6721. ON CR1.iComplainRAID = R2.iID
  6722. LEFT JOIN tbConfig CC
  6723. ON CC.iNoConfig = R2.iReasonID_C
  6724. LEFT JOIN tbConfig PP
  6725. ON PP.iNoConfig = R2.iReasonID_P) CR2
  6726. ON B2.iID = CR2.iComplainFBID
  6727. WHERE b2.dFeedbackDate >= '{$startDate}'
  6728. AND b2.dFeedbackDate <= '{$endDate}'");
  6729. $list = [];
  6730. for ($i = 0; $i < count($res); $i++) {
  6731. if($res[$i]['cRespDept']===''){
  6732. $res[$i]['cRespDept']='外协单位';
  6733. }
  6734. if($res[$i]['cRespDept']===null){
  6735. $res[$i]['cRespDept']='全部';
  6736. }
  6737. $list[$res[$i]['cRespDept']][] = $res[$i]['cReasonPName'];
  6738. }
  6739. array_multisort($list, SORT_DESC);
  6740. $result = [];
  6741. $i = 0;
  6742. foreach ($list as $k => $v) {
  6743. // $result[$i]['部门'] = $k;
  6744. // $result[$i]['投诉次数'] = count($v);
  6745. // $result[$i]['合并原因'] = '';
  6746. $result[$k]='';
  6747. foreach ($v as $key => $value) {
  6748. if ($value == null) {
  6749. unset($v[$key]);
  6750. }
  6751. }
  6752. foreach (array_count_values($v) as $a => $b) {
  6753. // $result[$i]['合并原因'] .= $a . $b . '/';
  6754. $result[$k] .= $a . $b . '/';
  6755. }
  6756. // $result[$i]['合并原因'] = substr($result[$i]['合并原因'], 0, -1);
  6757. $result[$k] = substr($result[$k], 0, -1);
  6758. $i++;
  6759. }
  6760. foreach($res1 as $k=>$v){
  6761. if($v['部门']!==null)$res1[$k]['合并原因']=$result[$v['部门']];
  6762. if($v['部门']=='全部'){
  6763. $res1[$k]['投诉次数']=count($list['全部']);
  6764. }
  6765. }
  6766. if($res1){
  6767. $redis->set($redis_key, json_encode($res1));
  6768. echo date("Y-m-d H:i:s").'存进去了';
  6769. return $res1;
  6770. }
  6771. }
  6772. //同期投诉增减比 按质量问题->今年缓存
  6773. public function qzlwt_redis(){
  6774. $redis=redis();
  6775. $redis_key = md5('qzlwt_redis');
  6776. $startDate = date("Y-m-d", strtotime("-1 year"));
  6777. $endDate = date("Y-m-d");
  6778. $res = Db::query("SELECT D1.cdwmc,resp1.cReasonCName
  6779. FROM ecComplainFeedback B
  6780. LEFT JOIN DZYWDW D1
  6781. ON D1.iywdwid = B.iClientID
  6782. LEFT JOIN MCYD M
  6783. ON M.CCYDH = B.cOrderBillCode
  6784. INNER JOIN qlOrderProduct p
  6785. ON M.ICYDID = p.ID_Mcyd
  6786. LEFT JOIN (SELECT a.ID_qlOrderProduct,
  6787. Sum(a.iAmountOut) iAmount_Out
  6788. FROM SCYDYSQX a
  6789. GROUP BY a.ID_qlOrderProduct) c
  6790. ON c.ID_qlOrderProduct = p.ID
  6791. LEFT JOIN ecComplainContent DD
  6792. ON DD.iComplainFBID = B.iID
  6793. LEFT JOIN tbConfig E
  6794. ON E.iNoConfig = DD.iClassID_C
  6795. LEFT JOIN tbConfig T
  6796. ON T.iNoConfig = DD.iClassID_P
  6797. LEFT JOIN (SELECT R.iComplainFBID,
  6798. PP.strSubName AS cReasonPName,
  6799. CC2.strSubName AS cReasonCName,
  6800. CR.cRespPerson,
  6801. CR.cRespDept,
  6802. CR.cRespTech,
  6803. CR.cRespCorp,
  6804. CR.nMoney
  6805. FROM ecComplainReasonAnalysis R
  6806. LEFT JOIN tbConfig CC2
  6807. ON CC2.iNoConfig = R.iReasonID_C
  6808. LEFT JOIN tbConfig PP
  6809. ON PP.iNoConfig = R.iReasonID_P
  6810. LEFT JOIN ecComplainResponsibility CR
  6811. ON CR.iComplainRAID = R.iID) resp1
  6812. ON resp1.iComplainFBID = B.iID
  6813. WHERE b.dFeedbackDate >= '{$startDate}'
  6814. AND b.dFeedbackDate <= '{$endDate}'");
  6815. if($res){
  6816. $list = [];
  6817. for ($i = 0; $i < count($res); $i++) {
  6818. $list[$res[$i]['cReasonCName']][] = $res[$i]['cdwmc'];
  6819. }
  6820. array_multisort($list, SORT_DESC);
  6821. $result = [];
  6822. $i = 0;
  6823. foreach ($list as $k => $v) {
  6824. $result[$i]['质量问题'] = $k;
  6825. $result[$i]['投诉次数'] = count($v);
  6826. $result[$i]['合并原因'] = '';
  6827. foreach ($v as $key => $value) {
  6828. if ($value == null) {
  6829. unset($v[$key]);
  6830. }
  6831. }
  6832. foreach (array_count_values($v) as $a => $b) {
  6833. $result[$i]['合并原因'] .= $a . $b . '/';
  6834. }
  6835. $result[$i]['合并原因'] = substr($result[$i]['合并原因'], 0, -1);
  6836. $i++;
  6837. }
  6838. $result=array_splice($result,0,6);
  6839. $list=[];
  6840. foreach($result as $k=>$v){
  6841. $list[$k]['name']=$v['质量问题'];
  6842. $list[$k]['value']=$v['投诉次数'];
  6843. }
  6844. $redis->set($redis_key, json_encode($list));
  6845. echo date("Y-m-d H:i:s").'存进去了';
  6846. return $list;
  6847. }
  6848. }
  6849. //同期投诉增减比 按质量问题->去年缓存
  6850. public function qianzlwt_redis(){
  6851. $redis=redis();
  6852. $redis_key = md5('qianzlwt_redis');
  6853. // 获取当前的年、月、日
  6854. $currentYear = date("Y");
  6855. $currentMonth = date("m");
  6856. $currentDay = date("d");
  6857. // 计算前一年和前两年的年份
  6858. $lastYear = $currentYear - 1;
  6859. $twoYearsAgo = $currentYear - 2;
  6860. // 构造日期字符串
  6861. $startDate = date("Y-m-d", strtotime("$twoYearsAgo-$currentMonth-$currentDay"));
  6862. $endDate = date("Y-m-d", strtotime("$lastYear-$currentMonth-$currentDay"));
  6863. $res = Db::query("SELECT D1.cdwmc,resp1.cReasonCName
  6864. FROM ecComplainFeedback B
  6865. LEFT JOIN DZYWDW D1
  6866. ON D1.iywdwid = B.iClientID
  6867. LEFT JOIN MCYD M
  6868. ON M.CCYDH = B.cOrderBillCode
  6869. INNER JOIN qlOrderProduct p
  6870. ON M.ICYDID = p.ID_Mcyd
  6871. LEFT JOIN (SELECT a.ID_qlOrderProduct,
  6872. Sum(a.iAmountOut) iAmount_Out
  6873. FROM SCYDYSQX a
  6874. GROUP BY a.ID_qlOrderProduct) c
  6875. ON c.ID_qlOrderProduct = p.ID
  6876. LEFT JOIN ecComplainContent DD
  6877. ON DD.iComplainFBID = B.iID
  6878. LEFT JOIN tbConfig E
  6879. ON E.iNoConfig = DD.iClassID_C
  6880. LEFT JOIN tbConfig T
  6881. ON T.iNoConfig = DD.iClassID_P
  6882. LEFT JOIN (SELECT R.iComplainFBID,
  6883. PP.strSubName AS cReasonPName,
  6884. CC2.strSubName AS cReasonCName,
  6885. CR.cRespPerson,
  6886. CR.cRespDept,
  6887. CR.cRespTech,
  6888. CR.cRespCorp,
  6889. CR.nMoney
  6890. FROM ecComplainReasonAnalysis R
  6891. LEFT JOIN tbConfig CC2
  6892. ON CC2.iNoConfig = R.iReasonID_C
  6893. LEFT JOIN tbConfig PP
  6894. ON PP.iNoConfig = R.iReasonID_P
  6895. LEFT JOIN ecComplainResponsibility CR
  6896. ON CR.iComplainRAID = R.iID) resp1
  6897. ON resp1.iComplainFBID = B.iID
  6898. WHERE b.dFeedbackDate >= '{$startDate}'
  6899. AND b.dFeedbackDate <= '{$endDate}'");
  6900. if($res){
  6901. $list = [];
  6902. for ($i = 0; $i < count($res); $i++) {
  6903. $list[$res[$i]['cReasonCName']][] = $res[$i]['cdwmc'];
  6904. }
  6905. array_multisort($list, SORT_DESC);
  6906. $result = [];
  6907. $i = 0;
  6908. foreach ($list as $k => $v) {
  6909. $result[$i]['质量问题'] = $k;
  6910. $result[$i]['投诉次数'] = count($v);
  6911. $result[$i]['合并原因'] = '';
  6912. foreach ($v as $key => $value) {
  6913. if ($value == null) {
  6914. unset($v[$key]);
  6915. }
  6916. }
  6917. foreach (array_count_values($v) as $a => $b) {
  6918. $result[$i]['合并原因'] .= $a . $b . '/';
  6919. }
  6920. $result[$i]['合并原因'] = substr($result[$i]['合并原因'], 0, -1);
  6921. $i++;
  6922. }
  6923. $result=array_splice($result,0,6);
  6924. $list=[];
  6925. foreach($result as $k=>$v){
  6926. $list[$k]['name']=$v['质量问题'];
  6927. $list[$k]['value']=$v['投诉次数'];
  6928. }
  6929. $redis->set($redis_key, json_encode($list));
  6930. echo date("Y-m-d H:i:s").'存进去了';
  6931. return $list;
  6932. }
  6933. }
  6934. //同期投诉增减比->接口
  6935. public function tqts_list(){
  6936. $postData = input('post.dependence.item.name');
  6937. $redisKeys = [
  6938. "按客户" => 'qkhzl_redis',
  6939. "按质量问题" => 'qzlwt_redis',
  6940. "按责任部门" => 'qbmzl_redis'
  6941. ];
  6942. $redis_key = isset($redisKeys[$postData]) ? md5($redisKeys[$postData]) : md5('qkhzl_redis');
  6943. $redis = redis();
  6944. $r_list = json_decode($redis->get($redis_key), true);
  6945. if (!$r_list) {
  6946. // 处理没有数据的情况
  6947. $response_data = [
  6948. 'status' => 1,
  6949. 'msg' => '没有找到相关数据',
  6950. 'data' => []
  6951. ];
  6952. return json_encode($response_data, JSON_UNESCAPED_UNICODE);
  6953. }
  6954. if($postData == '按客户') {
  6955. $qr_list = json_decode($redis->get(md5('qiankhzl_redis')),true);
  6956. $c_list = [];
  6957. foreach ($r_list as $item) {
  6958. $c_list[$item['cdwmc']][] = $item['cReasonCName'];
  6959. }
  6960. array_multisort($c_list, SORT_DESC);
  6961. $result = [];
  6962. $i = 0;
  6963. foreach ($c_list as $cdwmc => $reasons) {
  6964. $complaint_count = count($reasons);
  6965. $unique_reasons = array_count_values(array_filter($reasons)); // 去除空值并计算出现次数
  6966. // 构建质量问题的描述
  6967. $quality_issues = '';
  6968. foreach ($unique_reasons as $reason => $count) {
  6969. $quality_issues .= "{$reason}{$count}/";
  6970. }
  6971. // 去掉最后一个斜杠
  6972. $quality_issues = rtrim($quality_issues, '/');
  6973. // 添加到结果数组
  6974. $result[] = [
  6975. '客户单位' => $cdwmc,
  6976. '投诉次数' => $complaint_count
  6977. ];
  6978. }
  6979. $qc_list = [];
  6980. foreach ($qr_list as $qitem) {
  6981. $qc_list[$qitem['cdwmc']][] = $qitem['cReasonCName'];
  6982. }
  6983. array_multisort($qc_list, SORT_DESC);
  6984. $qresult = [];
  6985. $qi = 0;
  6986. foreach ($qc_list as $qcdwmc => $qreasons) {
  6987. $qcomplaint_count = count($qreasons);
  6988. $qunique_reasons = array_count_values(array_filter($qreasons)); // 去除空值并计算出现次数
  6989. // 构建质量问题的描述
  6990. $qquality_issues = '';
  6991. foreach ($qunique_reasons as $qreason => $qcount) {
  6992. $qquality_issues .= "{$qreason}{$qcount}/";
  6993. }
  6994. // 去掉最后一个斜杠
  6995. $qquality_issues = rtrim($qquality_issues, '/');
  6996. // 添加到结果数组
  6997. $qresult[] = [
  6998. '客户单位' => $qcdwmc,
  6999. '投诉次数' => $qcomplaint_count
  7000. ];
  7001. }
  7002. $result = array_slice($result, 0, 10);
  7003. $qresult = array_slice($qresult, 0, 10);
  7004. foreach ($result as $index => $rv) {
  7005. $list['categories'][] = $rv['客户单位'];
  7006. }
  7007. // 初始数据结构
  7008. $data = [
  7009. "categories" => [], // 客户单位
  7010. "series" => [
  7011. [
  7012. "name" => "同比增减百分比",
  7013. "type" => "line",
  7014. "yAxisIndex" => 1,
  7015. "data" => []
  7016. ],
  7017. [
  7018. "name" => date('Y').'年',
  7019. "type" => "bar",
  7020. "yAxisIndex" => 0,
  7021. "data" => []
  7022. ],
  7023. [
  7024. "name" => (date('Y')-1).'年',
  7025. "type" => "bar",
  7026. "yAxisIndex" => 0,
  7027. "data" => [],
  7028. ]
  7029. ]
  7030. ];
  7031. // 确保 $result 和 $qresult 索引的一致性
  7032. foreach ($result as $index => $rv) {
  7033. // 添加客户单位
  7034. $data['categories'][] = $rv['客户单位'];
  7035. // 计算同比增减百分比,并添加到相应的数据数组
  7036. if (isset($rv['投诉次数']) && isset($qresult[$index]['投诉次数']) && $qresult[$index]['投诉次数'] != 0) {
  7037. $percentage_change = round(($rv['投诉次数'] - $qresult[$index]['投诉次数']) / $qresult[$index]['投诉次数'] ,2);
  7038. $data['series'][0]['data'][] = $percentage_change; // 同比增减百分比
  7039. } else {
  7040. $data['series'][0]['data'][] = 0; // 防止错误计算
  7041. }
  7042. // 添加今年的数据
  7043. if (isset($rv['投诉次数'])) {
  7044. $data['series'][1]['data'][] = $rv['投诉次数'];
  7045. } else {
  7046. $data['series'][1]['data'][] = 0; // 防止空值
  7047. }
  7048. // 添加去年的数据
  7049. if (isset($qresult[$index]['投诉次数'])) {
  7050. $data['series'][2]['data'][] = $qresult[$index]['投诉次数'];
  7051. } else {
  7052. $data['series'][2]['data'][] = 0; // 防止空值
  7053. }
  7054. }
  7055. // 组织JSON返回结构
  7056. $res = [
  7057. 'status' => 0,
  7058. 'msg' => '',
  7059. 'data' => $data
  7060. ];
  7061. // 返回JSON响应
  7062. return json($res);
  7063. } else if($postData == '按质量问题') {
  7064. $qr_list = json_decode($redis->get(md5('qiankhzl_redis')),true);
  7065. $qresult = json_decode($redis->get(md5('qianzlwt_redis')),true);
  7066. // 初始数据结构
  7067. $data = [
  7068. "categories" => [], // 客户单位
  7069. "series" => [
  7070. [
  7071. "name" => "同比增减百分比",
  7072. "type" => "line",
  7073. "yAxisIndex" => 1,
  7074. "data" => []
  7075. ],
  7076. [
  7077. "name" => date('Y').'年',
  7078. "type" => "bar",
  7079. "yAxisIndex" => 0,
  7080. "data" => []
  7081. ],
  7082. [
  7083. "name" => (date('Y')-1).'年',
  7084. "type" => "bar",
  7085. "yAxisIndex" => 0,
  7086. "data" => [],
  7087. ]
  7088. ]
  7089. ];
  7090. foreach ($r_list as $index => $rv) {
  7091. // 添加客户单位
  7092. $data['categories'][] = $rv['name'];
  7093. // 计算同比增减百分比,并添加到相应的数据数组
  7094. if (isset($rv['value']) && isset($qresult[$index]['value']) && $qresult[$index]['value'] != 0) {
  7095. $percentage_change = round(($rv['value'] - $qresult[$index]['value']) / $qresult[$index]['value'] ,2);
  7096. $data['series'][0]['data'][] = $percentage_change; // 同比增减百分比
  7097. } else {
  7098. $data['series'][0]['data'][] = 0; // 防止错误计算
  7099. }
  7100. // 添加今年的数据
  7101. if (isset($rv['value'])) {
  7102. $data['series'][1]['data'][] = $rv['value'];
  7103. } else {
  7104. $data['series'][1]['data'][] = 0; // 防止空值
  7105. }
  7106. // 添加去年的数据
  7107. if (isset($qresult[$index]['value'])) {
  7108. $data['series'][2]['data'][] = $qresult[$index]['value'];
  7109. } else {
  7110. $data['series'][2]['data'][] = 0; // 防止空值
  7111. }
  7112. }
  7113. // 组织JSON返回结构
  7114. $res = [
  7115. 'status' => 0,
  7116. 'msg' => '',
  7117. 'data' => $data
  7118. ];
  7119. // 返回JSON响应
  7120. return json($res);
  7121. } else if($postData == '按责任部门') {
  7122. $qresult = json_decode($redis->get(md5('qianbmzl_redis')),true);
  7123. // 初始数据结构
  7124. $data = [
  7125. "categories" => [], // 客户单位
  7126. "series" => [
  7127. [
  7128. "name" => "同比增减百分比",
  7129. "type" => "line",
  7130. "yAxisIndex" => 1,
  7131. "data" => []
  7132. ],
  7133. [
  7134. "name" => date('Y').'年',
  7135. "type" => "bar",
  7136. "yAxisIndex" => 0,
  7137. "data" => []
  7138. ],
  7139. [
  7140. "name" => (date('Y')-1).'年',
  7141. "type" => "bar",
  7142. "yAxisIndex" => 0,
  7143. "data" => [],
  7144. ]
  7145. ]
  7146. ];
  7147. foreach ($r_list as $index => $rv) {
  7148. // 添加客户单位
  7149. $data['categories'][] = $rv['部门'];
  7150. // 计算同比增减百分比,并添加到相应的数据数组
  7151. if (isset($rv['投诉次数']) && isset($qresult[$index]['投诉次数']) && $qresult[$index]['投诉次数'] != 0) {
  7152. $percentage_change = round(($rv['投诉次数'] - $qresult[$index]['投诉次数']) / $qresult[$index]['投诉次数'] ,2);
  7153. $data['series'][0]['data'][] = $percentage_change; // 同比增减百分比
  7154. } else {
  7155. $data['series'][0]['data'][] = 0; // 防止错误计算
  7156. }
  7157. // 添加今年的数据
  7158. if (isset($rv['投诉次数'])) {
  7159. $data['series'][1]['data'][] = $rv['投诉次数'];
  7160. } else {
  7161. $data['series'][1]['data'][] = 0; // 防止空值
  7162. }
  7163. // 添加去年的数据
  7164. if (isset($qresult[$index]['投诉次数'])) {
  7165. $data['series'][2]['data'][] = $qresult[$index]['投诉次数'];
  7166. } else {
  7167. $data['series'][2]['data'][] = 0; // 防止空值
  7168. }
  7169. }
  7170. // 组织JSON返回结构
  7171. $res = [
  7172. 'status' => 0,
  7173. 'msg' => '',
  7174. 'data' => $data
  7175. ];
  7176. // 返回JSON响应
  7177. return json($res);
  7178. }else{
  7179. $qr_list = json_decode($redis->get(md5('qiankhzl_redis')),true);
  7180. $c_list = [];
  7181. foreach ($r_list as $item) {
  7182. $c_list[$item['cdwmc']][] = $item['cReasonCName'];
  7183. }
  7184. array_multisort($c_list, SORT_DESC);
  7185. $result = [];
  7186. $i = 0;
  7187. foreach ($c_list as $cdwmc => $reasons) {
  7188. $complaint_count = count($reasons);
  7189. $unique_reasons = array_count_values(array_filter($reasons)); // 去除空值并计算出现次数
  7190. // 构建质量问题的描述
  7191. $quality_issues = '';
  7192. foreach ($unique_reasons as $reason => $count) {
  7193. $quality_issues .= "{$reason}{$count}/";
  7194. }
  7195. // 去掉最后一个斜杠
  7196. $quality_issues = rtrim($quality_issues, '/');
  7197. // 添加到结果数组
  7198. $result[] = [
  7199. '客户单位' => $cdwmc,
  7200. '投诉次数' => $complaint_count
  7201. ];
  7202. }
  7203. $qc_list = [];
  7204. foreach ($qr_list as $qitem) {
  7205. $qc_list[$qitem['cdwmc']][] = $qitem['cReasonCName'];
  7206. }
  7207. array_multisort($qc_list, SORT_DESC);
  7208. $qresult = [];
  7209. $qi = 0;
  7210. foreach ($qc_list as $qcdwmc => $qreasons) {
  7211. $qcomplaint_count = count($qreasons);
  7212. $qunique_reasons = array_count_values(array_filter($qreasons)); // 去除空值并计算出现次数
  7213. // 构建质量问题的描述
  7214. $qquality_issues = '';
  7215. foreach ($qunique_reasons as $qreason => $qcount) {
  7216. $qquality_issues .= "{$qreason}{$qcount}/";
  7217. }
  7218. // 去掉最后一个斜杠
  7219. $qquality_issues = rtrim($qquality_issues, '/');
  7220. // 添加到结果数组
  7221. $qresult[] = [
  7222. '客户单位' => $qcdwmc,
  7223. '投诉次数' => $qcomplaint_count
  7224. ];
  7225. }
  7226. $result = array_slice($result, 0, 10);
  7227. $qresult = array_slice($qresult, 0, 10);
  7228. foreach ($result as $index => $rv) {
  7229. $list['categories'][] = $rv['客户单位'];
  7230. }
  7231. // 初始数据结构
  7232. $data = [
  7233. "categories" => [], // 客户单位
  7234. "series" => [
  7235. [
  7236. "name" => "同比增减百分比",
  7237. "type" => "line",
  7238. "yAxisIndex" => 1,
  7239. "data" => []
  7240. ],
  7241. [
  7242. "name" => date('Y').'年',
  7243. "type" => "bar",
  7244. "yAxisIndex" => 0,
  7245. "data" => []
  7246. ],
  7247. [
  7248. "name" => (date('Y')-1).'年',
  7249. "type" => "bar",
  7250. "yAxisIndex" => 0,
  7251. "data" => [],
  7252. ]
  7253. ]
  7254. ];
  7255. // 确保 $result 和 $qresult 索引的一致性
  7256. foreach ($result as $index => $rv) {
  7257. // 添加客户单位
  7258. $data['categories'][] = $rv['客户单位'];
  7259. // 计算同比增减百分比,并添加到相应的数据数组
  7260. if (isset($rv['投诉次数']) && isset($qresult[$index]['投诉次数']) && $qresult[$index]['投诉次数'] != 0) {
  7261. $percentage_change = round(($rv['投诉次数'] - $qresult[$index]['投诉次数']) / $qresult[$index]['投诉次数'] ,2);
  7262. $data['series'][0]['data'][] = $percentage_change; // 同比增减百分比
  7263. } else {
  7264. $data['series'][0]['data'][] = 0; // 防止错误计算
  7265. }
  7266. // 添加今年的数据
  7267. if (isset($rv['投诉次数'])) {
  7268. $data['series'][1]['data'][] = $rv['投诉次数'];
  7269. } else {
  7270. $data['series'][1]['data'][] = 0; // 防止空值
  7271. }
  7272. // 添加去年的数据
  7273. if (isset($qresult[$index]['投诉次数'])) {
  7274. $data['series'][2]['data'][] = $qresult[$index]['投诉次数'];
  7275. } else {
  7276. $data['series'][2]['data'][] = 0; // 防止空值
  7277. }
  7278. }
  7279. // 组织JSON返回结构
  7280. $res = [
  7281. 'status' => 0,
  7282. 'msg' => '',
  7283. 'data' => $data
  7284. ];
  7285. // 返回JSON响应
  7286. return json($res);
  7287. }
  7288. }
  7289. //当日重点产品机台检验情况->缓存
  7290. public function drzdcpjtjyqk_redis(){
  7291. $redis=redis();
  7292. $redis_key = md5('drzdcpjtjyqk_redis');
  7293. $sql = "SELECT zd.订单号,
  7294. zd.印件名称,
  7295. zd.生产机台,
  7296. jy.检验工序,
  7297. jy.检验类型,
  7298. jy.检验结果,
  7299. DATE_FORMAT(jy.检验时间, '%Y-%m-%d %H:%i') AS 检验时间,
  7300. jy.检验人
  7301. FROM (SELECT DISTINCT Dev.cName 生产机台,
  7302. job.cProductCode 订单号,
  7303. job.cProductName 印件名称,
  7304. dd.czlyq 质量等级,
  7305. dd.CZWKB 开本,
  7306. dd.ncs 印数,
  7307. dd.CYWDWMC 业务单位,
  7308. DATE_FORMAT(NOW(), '%Y-%m-%d') AS 生产日期
  7309. FROM scMachineJob Job
  7310. LEFT JOIN mcyd dd
  7311. ON dd.ccydh = job.cProductCode
  7312. LEFT JOIN (SELECT
  7313. t.iType,
  7314. t.ID,
  7315. t.cCode,
  7316. t.cName,
  7317. t.iGzzxId,
  7318. t.ID_BM,
  7319. t.cbmbh,
  7320. t.cbmmc,
  7321. t.cType_Sys,
  7322. t.iStop,
  7323. t.cType_Dev,
  7324. t.cShortName,
  7325. t.iTypeWage,
  7326. t.iOverProductType
  7327. FROM (
  7328. SELECT
  7329. 0 AS iType,
  7330. MKernel.ID,
  7331. MKernel.cBh AS cCode,
  7332. MKernel.cGzzxmc AS cName,
  7333. MKernel.ID AS iGzzxId,
  7334. dzBM.id AS ID_BM,
  7335. DZBM.cbmbh,
  7336. DZBM.cbmmc,
  7337. Mkernel.cGzzxlx AS cType_Sys,
  7338. MKernel.iStopUse AS iStop,
  7339. MKernel.cGzzxlx AS cType_Dev,
  7340. MKernel.cShortName,
  7341. 0 AS iTypeWage,
  7342. 0 AS iOverProductType
  7343. FROM
  7344. MKernel
  7345. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh
  7346. UNION
  7347. SELECT
  7348. 1 AS iType,
  7349. dzyssb.ID,
  7350. dzyssb.csbbh AS cCode,
  7351. dzyssb.csbmc AS cName,
  7352. Mkernel.ID AS iGzzxId,
  7353. dzBM.id AS ID_BM,
  7354. dzBM.cbmbh,
  7355. dzBM.cbmmc,
  7356. MKernel.cGzzxlx AS cType_Sys,
  7357. dzyssb.iStopUse AS iStop,
  7358. dzyssb.csblb AS cType_Dev,
  7359. dzyssb.cShortName,
  7360. 0 AS iTypeWage,
  7361. 0 AS iOverProductType
  7362. FROM
  7363. dzyssb
  7364. INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center
  7365. INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh
  7366. UNION
  7367. SELECT
  7368. 2 AS iType,
  7369. MKerJzmb.ID,
  7370. MKerJzmb.cJzbh AS cCode,
  7371. MKerJzmb.cJzmc AS cName,
  7372. MKerJzmb.iGzzxId,
  7373. dzBM.id AS ID_BM,
  7374. DZBM.cbmbh,
  7375. DZBM.cbmmc,
  7376. MKernel.cGzzxlx AS cType_Sys,
  7377. MKerJzmb.iStopUse AS iStop,
  7378. dzyssb.csblb AS cType_Dev,
  7379. MKerJzmb.cShortName,
  7380. MKerJzmb.iType AS iTypeWage,
  7381. MKerJzmb.iOverProductType
  7382. FROM
  7383. MKerJzmb
  7384. INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId
  7385. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh
  7386. INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid
  7387. UNION
  7388. SELECT
  7389. 3 AS iType,
  7390. iywdwid AS ID,
  7391. cywdwbh AS cCode,
  7392. cdwmc AS cName,
  7393. iywdwid AS iGzzxId,
  7394. iywdwid AS ID_BM,
  7395. cywdwbh AS cbmbh,
  7396. cdwmc AS cbmmc,
  7397. '' AS cType_Sys,
  7398. CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop,
  7399. '' AS cType_Dev,
  7400. DZYWDW.cjc AS cShortName,
  7401. 0 AS iTypeWage,
  7402. 0 AS iOverProductType
  7403. FROM
  7404. dzywdw
  7405. WHERE
  7406. bwjg = 1
  7407. UNION
  7408. SELECT
  7409. 3 AS iType,
  7410. -1,
  7411. '',
  7412. '外厂资源',
  7413. -1,
  7414. -1 AS ID_BM,
  7415. '',
  7416. '',
  7417. '' AS cType_Sys,
  7418. 0 AS iStop,
  7419. '' AS cType_Dev,
  7420. '外厂' AS cShortName,
  7421. 0 AS iTypeWage,
  7422. 0 AS iOverProductType
  7423. ) AS t
  7424. WHERE
  7425. (t.iStop = 0)) Dev
  7426. ON Dev.iType <> 3
  7427. AND Job.id_Machine = Dev.Id
  7428. AND Job.iType_Res = 0
  7429. WHERE Job.iStatus IN ( 0, 1, 2, 10, 20 )
  7430. AND Job.iJobType IN ( 0, 4 )
  7431. AND Job.iType_Res = 0
  7432. AND dd.cyjmc LIKE '%求是%'
  7433. OR ( Job.iStatus IN ( 0, 1, 2, 10, 20 )
  7434. AND Job.iJobType IN ( 0, 4 )
  7435. AND Job.iType_Res = 0
  7436. AND ( dd.Czlyq = '重点产品'
  7437. AND dd.cyjlx <> '杂志' ) )
  7438. AND ( Dev.cName <> '塑封机01号'
  7439. AND Dev.cName <> '塑封机02号' )
  7440. AND job.dPlanStart > DATE_FORMAT(NOW(), '%Y-%m-%d')
  7441. AND job.dPlanStart < DATE_FORMAT(NOW() + INTERVAL 2 DAY, '%Y-%m-%d'))zd
  7442. LEFT JOIN (SELECT t.productcode 订单号,
  7443. t.cName 印件名称,
  7444. t.iDetectionType 检验类型,
  7445. t.dFirstTime 检验时间,
  7446. t.cProcess 检验工序,
  7447. t.status 检验结果,
  7448. t.czgxm 检验人,
  7449. t.cJzmc
  7450. FROM (SELECT b.ID,
  7451. c.ID AS mainid,
  7452. 'XJBB' AS keyword,
  7453. b.Code_ProductOrder AS productcode,
  7454. b.Code_AProduct AS aproductcode,
  7455. b.Name_AProduct AS cName,
  7456. b.iVers,
  7457. '' AS salacode,
  7458. c.iDetectionNum,
  7459. CASE c.iDetectionType
  7460. WHEN 0 THEN '首检单'
  7461. WHEN 1 THEN '巡检单'
  7462. WHEN 2 THEN '自检单'
  7463. END AS iDetectionType,
  7464. c.dFirstTime,
  7465. c.cTeams,
  7466. c.cProcess,
  7467. e.cJzmc,
  7468. CASE c.iJobStatus
  7469. WHEN 0 THEN '合格'
  7470. WHEN 1 THEN '不合格'
  7471. WHEN 2 THEN '让步接收'
  7472. END AS status,
  7473. d.czgxm,
  7474. '' AS cResultNote
  7475. FROM (SELECT
  7476. a.ID,
  7477. a.cCode AS Code_ProductOrder,
  7478. b.cCode AS Code_AProduct,
  7479. b.cName AS Name_AProduct,
  7480. b.ID AS ID_Request,
  7481. a.ID_Mcyd,
  7482. 1 AS iVers,
  7483. b.cSize,
  7484. b.cUnit,
  7485. a.iAmount,
  7486. a.iAmount_In,
  7487. 0 AS nAmount_OB,
  7488. a.iAmount AS nAmount_W,
  7489. a.iState,
  7490. a.nUnitPlanWeight,
  7491. a.nActualWeight,
  7492. '' AS cCustomerCode,
  7493. '' AS cCustomerName,
  7494. d.cywdwbh,
  7495. d.cdwmc,
  7496. b.iTag_Group,
  7497. 0 AS iType,
  7498. 1 AS iNodePage,
  7499. 0 AS iType_P,
  7500. 1 AS iType_Origin,
  7501. a.ID AS id_origin,
  7502. c.DZDRQ AS dDate,
  7503. c.Dwcrq AS dInFinishDate,
  7504. c.CYWYXM,
  7505. c.DJFRQ,
  7506. c.CDF,
  7507. CONCAT(
  7508. IF(c.CBCYEAR <> '', CONCAT(c.CBCYEAR, '年'), ''),
  7509. IF(c.CBCmonth <> '', CONCAT(c.CBCmonth, '月'), ''),
  7510. IF(c.CBC <> '', CONCAT(c.CBC, '版'), ''),
  7511. IF(c.cYCyear <> '', CONCAT(c.cYCyear, '年'), ''),
  7512. IF(c.cYCmonth <> '', CONCAT(c.cYCmonth, '月'), ''),
  7513. IF(c.CYC <> '', CONCAT(c.CYC, '版'), '')
  7514. ) AS cBanCi
  7515. FROM
  7516. qlOrderProduct AS a
  7517. INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct
  7518. INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode
  7519. LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID
  7520. WHERE
  7521. (c.iCommited = 1) AND (c.ICYDSTATE <> -1)) b
  7522. INNER JOIN qcDetectionMain c
  7523. ON c.iOrder_Num = b.Code_ProductOrder
  7524. INNER JOIN dzZG d
  7525. ON c.iID_Roals = d.id
  7526. INNER JOIN MKerJzmb e
  7527. ON e.ID = c.cBoard
  7528. UNION ALL
  7529. SELECT b.ID,
  7530. g.ID AS mainid,
  7531. 'RQBB' AS keyword,
  7532. b.Code_ProductOrder AS productcode,
  7533. b.Code_AProduct AS aproductcode,
  7534. b.Name_AProduct AS cName,
  7535. b.iVers,
  7536. '' AS salacode,
  7537. h.cBillCode AS iDetectionNum,
  7538. '入库检验' AS iDetectionType,
  7539. h.dCheckDate AS dFirstTime,
  7540. '' AS cTeams,
  7541. '' AS cProcess,
  7542. '' AS cJzmc,
  7543. CASE g.iCheckResult
  7544. WHEN 0 THEN '合格'
  7545. WHEN 1 THEN '不合格'
  7546. WHEN 2 THEN '让步接收'
  7547. END AS status,
  7548. h.cCheckMan,
  7549. g.cResultNote
  7550. FROM (SELECT
  7551. a.ID,
  7552. a.cCode AS Code_ProductOrder,
  7553. b.cCode AS Code_AProduct,
  7554. b.cName AS Name_AProduct,
  7555. b.ID AS ID_Request,
  7556. a.ID_Mcyd,
  7557. 1 AS iVers,
  7558. b.cSize,
  7559. b.cUnit,
  7560. a.iAmount,
  7561. a.iAmount_In,
  7562. 0 AS nAmount_OB,
  7563. a.iAmount AS nAmount_W,
  7564. a.iState,
  7565. a.nUnitPlanWeight,
  7566. a.nActualWeight,
  7567. '' AS cCustomerCode,
  7568. '' AS cCustomerName,
  7569. d.cywdwbh,
  7570. d.cdwmc,
  7571. b.iTag_Group,
  7572. 0 AS iType,
  7573. 1 AS iNodePage,
  7574. 0 AS iType_P,
  7575. 1 AS iType_Origin,
  7576. a.ID AS id_origin,
  7577. c.DZDRQ AS dDate,
  7578. c.Dwcrq AS dInFinishDate,
  7579. c.CYWYXM,
  7580. c.DJFRQ,
  7581. c.CDF,
  7582. CONCAT(
  7583. IF(c.CBCYEAR <> '', CONCAT(c.CBCYEAR, '年'), ''),
  7584. IF(c.CBCmonth <> '', CONCAT(c.CBCmonth, '月'), ''),
  7585. IF(c.CBC <> '', CONCAT(c.CBC, '版'), ''),
  7586. IF(c.cYCyear <> '', CONCAT(c.cYCyear, '年'), ''),
  7587. IF(c.cYCmonth <> '', CONCAT(c.cYCmonth, '月'), ''),
  7588. IF(c.CYC <> '', CONCAT(c.CYC, '版'), '')
  7589. ) AS cBanCi
  7590. FROM
  7591. qlOrderProduct AS a
  7592. INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct
  7593. INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode
  7594. LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID
  7595. WHERE
  7596. (c.iCommited = 1) AND (c.ICYDSTATE <> -1)) b
  7597. INNER JOIN mtMaterialQualityCheckDetail g
  7598. ON g.ID_scProduct = b.ID
  7599. INNER JOIN mtMaterialQualityCheck h
  7600. ON h.ID = g.ID_Main
  7601. WHERE h.iStatus > 0
  7602. ) AS t
  7603. WHERE 1 = 1
  7604. AND t.iDetectionType ='巡检单'
  7605. )JY
  7606. ON zd.订单号 = JY.订单号 and
  7607. zd.生产机台 =JY.cJzmc
  7608. WHERE
  7609. jy.检验时间 is not null
  7610. ORDER BY zd.订单号 ,jy.检验时间 desc";
  7611. $res = Db::query($sql);
  7612. if($res){
  7613. $redis->set($redis_key, json_encode($res));
  7614. echo date("Y-m-d H:i:s").'存进去了';
  7615. return $res;
  7616. }
  7617. }
  7618. // 当日重点产品机台检验情况->接口
  7619. public function drzdcpjtjyqk() {
  7620. $redis = redis();
  7621. $drzdcpjtjyqk_data = json_decode($redis->get(md5('drzdcpjtjyqk_redis')), true);
  7622. // $drzdcpjtjyqk_data = array_filter($drzdcpjtjyqk_datas, function($item) {
  7623. // // 获取当前日期
  7624. // $current_date = date('Y-m-d');
  7625. // // 从检验时间中提取日期部分
  7626. // $inspection_date = substr($item['检验时间'], 0, 10);
  7627. // // 比较日期是否相等
  7628. // return $inspection_date === $current_date;
  7629. // });
  7630. $data = ['status' => 0, 'msg' => '', 'data' => ['columns' => [
  7631. ['name' => '订单号', 'id' => 'ddh', 'width' => '12', 'autoWrap' => "true", 'textAlign' => 'left'],
  7632. ['name' => '印件名称', 'id' => 'yjmc', 'width' => '34', 'autoWrap' => "true", 'textAlign' => 'left'],
  7633. ['name' => '生产机台', 'id' => 'scjt', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  7634. ['name' => '检验工序', 'id' => 'yjgx', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  7635. ['name' => '检验类型', 'id' => 'jylx', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  7636. ['name' => '检验结果', 'id' => 'jyjg', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  7637. ['name' => '检验时间', 'id' => 'jysj', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  7638. ['name' => '检验人', 'id' => 'jyr', 'width' => '9', 'autoWrap' => "true", 'textAlign' => 'left']
  7639. ], 'rows' => []]];
  7640. if (is_array($drzdcpjtjyqk_data) && !empty($drzdcpjtjyqk_data)) {
  7641. foreach ($drzdcpjtjyqk_data as $v) {
  7642. $data['data']['rows'][] = [
  7643. 'ddh' => $v['订单号'],
  7644. 'yjmc' => $v['印件名称'],
  7645. 'scjt' => $v['生产机台'],
  7646. 'yjgx' => $v['检验工序'],
  7647. 'jylx' => $v['检验类型'],
  7648. 'jyjg' => $v['检验结果'],
  7649. 'jysj' => $v['检验时间'],
  7650. 'jyr' => $v['检验人']
  7651. ];
  7652. }
  7653. } else {
  7654. $data['data']['rows'][] = ['ddh' => '', 'yjmc' => '', 'scjt' => '', 'yjgx' => '', 'jylx' => '', 'jyjg' => '', 'jysj' => '', 'jyr' => ''];
  7655. }
  7656. return json($data);
  7657. }
  7658. //无线胶订线近日重点产品检验情况->缓存
  7659. public function jd_zdcpjy_redis(){
  7660. $redis=redis();
  7661. $redis_key = md5('jd_zdcpjy_redis');
  7662. $sql = "SELECT zd.订单号,
  7663. zd.印件名称,
  7664. zd.生产机台,
  7665. jy.检验工序,
  7666. jy.检验类型,
  7667. jy.检验结果,
  7668. DATE_FORMAT(jy.检验时间, '%Y-%m-%d %H:%i') AS 检验时间,
  7669. jy.检验人
  7670. FROM (SELECT DISTINCT Dev.cName 生产机台,
  7671. job.cProductCode 订单号,
  7672. job.cProductName 印件名称,
  7673. dd.czlyq 质量等级,
  7674. dd.CZWKB 开本,
  7675. dd.ncs 印数,
  7676. dd.CYWDWMC 业务单位,
  7677. DATE_FORMAT(NOW(), '%Y-%m-%d') AS 生产日期
  7678. FROM scMachineJob Job
  7679. LEFT JOIN mcyd dd
  7680. ON dd.ccydh = job.cProductCode
  7681. LEFT JOIN (SELECT
  7682. t.iType,
  7683. t.ID,
  7684. t.cCode,
  7685. t.cName,
  7686. t.iGzzxId,
  7687. t.ID_BM,
  7688. t.cbmbh,
  7689. t.cbmmc,
  7690. t.cType_Sys,
  7691. t.iStop,
  7692. t.cType_Dev,
  7693. t.cShortName,
  7694. t.iTypeWage,
  7695. t.iOverProductType
  7696. FROM (
  7697. SELECT
  7698. 0 AS iType,
  7699. MKernel.ID,
  7700. MKernel.cBh AS cCode,
  7701. MKernel.cGzzxmc AS cName,
  7702. MKernel.ID AS iGzzxId,
  7703. dzBM.id AS ID_BM,
  7704. DZBM.cbmbh,
  7705. DZBM.cbmmc,
  7706. Mkernel.cGzzxlx AS cType_Sys,
  7707. MKernel.iStopUse AS iStop,
  7708. MKernel.cGzzxlx AS cType_Dev,
  7709. MKernel.cShortName,
  7710. 0 AS iTypeWage,
  7711. 0 AS iOverProductType
  7712. FROM
  7713. MKernel
  7714. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh
  7715. UNION
  7716. SELECT
  7717. 1 AS iType,
  7718. dzyssb.ID,
  7719. dzyssb.csbbh AS cCode,
  7720. dzyssb.csbmc AS cName,
  7721. Mkernel.ID AS iGzzxId,
  7722. dzBM.id AS ID_BM,
  7723. dzBM.cbmbh,
  7724. dzBM.cbmmc,
  7725. MKernel.cGzzxlx AS cType_Sys,
  7726. dzyssb.iStopUse AS iStop,
  7727. dzyssb.csblb AS cType_Dev,
  7728. dzyssb.cShortName,
  7729. 0 AS iTypeWage,
  7730. 0 AS iOverProductType
  7731. FROM
  7732. dzyssb
  7733. INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center
  7734. INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh
  7735. UNION
  7736. SELECT
  7737. 2 AS iType,
  7738. MKerJzmb.ID,
  7739. MKerJzmb.cJzbh AS cCode,
  7740. MKerJzmb.cJzmc AS cName,
  7741. MKerJzmb.iGzzxId,
  7742. dzBM.id AS ID_BM,
  7743. DZBM.cbmbh,
  7744. DZBM.cbmmc,
  7745. MKernel.cGzzxlx AS cType_Sys,
  7746. MKerJzmb.iStopUse AS iStop,
  7747. dzyssb.csblb AS cType_Dev,
  7748. MKerJzmb.cShortName,
  7749. MKerJzmb.iType AS iTypeWage,
  7750. MKerJzmb.iOverProductType
  7751. FROM
  7752. MKerJzmb
  7753. INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId
  7754. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh
  7755. INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid
  7756. UNION
  7757. SELECT
  7758. 3 AS iType,
  7759. iywdwid AS ID,
  7760. cywdwbh AS cCode,
  7761. cdwmc AS cName,
  7762. iywdwid AS iGzzxId,
  7763. iywdwid AS ID_BM,
  7764. cywdwbh AS cbmbh,
  7765. cdwmc AS cbmmc,
  7766. '' AS cType_Sys,
  7767. CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop,
  7768. '' AS cType_Dev,
  7769. DZYWDW.cjc AS cShortName,
  7770. 0 AS iTypeWage,
  7771. 0 AS iOverProductType
  7772. FROM
  7773. dzywdw
  7774. WHERE
  7775. bwjg = 1
  7776. UNION
  7777. SELECT
  7778. 3 AS iType,
  7779. -1,
  7780. '',
  7781. '外厂资源',
  7782. -1,
  7783. -1 AS ID_BM,
  7784. '',
  7785. '',
  7786. '' AS cType_Sys,
  7787. 0 AS iStop,
  7788. '' AS cType_Dev,
  7789. '外厂' AS cShortName,
  7790. 0 AS iTypeWage,
  7791. 0 AS iOverProductType
  7792. ) AS t
  7793. WHERE
  7794. (t.iStop = 0)) Dev
  7795. ON Dev.iType <> 3
  7796. AND Job.id_Machine = Dev.Id
  7797. AND Job.iType_Res = 0
  7798. WHERE Job.iStatus IN ( 0, 1, 2, 10, 20 )
  7799. AND Job.iJobType IN ( 0, 4 )
  7800. AND Job.iType_Res = 0
  7801. AND dd.cyjmc LIKE '%求是%'
  7802. OR ( Job.iStatus IN ( 0, 1, 2, 10, 20 )
  7803. AND Job.iJobType IN ( 0, 4 )
  7804. AND Job.iType_Res = 0
  7805. AND ( dd.cyjlx <> '杂志' ) )
  7806. AND ( Dev.cName <> '塑封机01号'
  7807. AND Dev.cName <> '塑封机02号' )
  7808. AND job.dPlanStart > DATE_FORMAT(NOW(), '%Y-%m-%d')
  7809. AND job.dPlanStart < DATE_FORMAT(NOW() + INTERVAL 2 DAY, '%Y-%m-%d'))zd
  7810. LEFT JOIN (SELECT t.productcode 订单号,
  7811. t.cName 印件名称,
  7812. t.iDetectionType 检验类型,
  7813. t.dFirstTime 检验时间,
  7814. t.cProcess 检验工序,
  7815. t.status 检验结果,
  7816. t.czgxm 检验人,
  7817. t.cJzmc
  7818. FROM (SELECT b.ID,
  7819. c.ID AS mainid,
  7820. 'XJBB' AS keyword,
  7821. b.Code_ProductOrder AS productcode,
  7822. b.Code_AProduct AS aproductcode,
  7823. b.Name_AProduct AS cName,
  7824. b.iVers,
  7825. '' AS salacode,
  7826. c.iDetectionNum,
  7827. CASE c.iDetectionType
  7828. WHEN 0 THEN '首检单'
  7829. WHEN 1 THEN '巡检单'
  7830. WHEN 2 THEN '自检单'
  7831. END AS iDetectionType,
  7832. c.dFirstTime,
  7833. c.cTeams,
  7834. c.cProcess,
  7835. e.cJzmc,
  7836. CASE c.iJobStatus
  7837. WHEN 0 THEN '合格'
  7838. WHEN 1 THEN '不合格'
  7839. WHEN 2 THEN '让步接收'
  7840. END AS status,
  7841. d.czgxm,
  7842. '' AS cResultNote
  7843. FROM (SELECT
  7844. a.ID,
  7845. a.cCode AS Code_ProductOrder,
  7846. b.cCode AS Code_AProduct,
  7847. b.cName AS Name_AProduct,
  7848. b.ID AS ID_Request,
  7849. a.ID_Mcyd,
  7850. 1 AS iVers,
  7851. b.cSize,
  7852. b.cUnit,
  7853. a.iAmount,
  7854. a.iAmount_In,
  7855. 0 AS nAmount_OB,
  7856. a.iAmount AS nAmount_W,
  7857. a.iState,
  7858. a.nUnitPlanWeight,
  7859. a.nActualWeight,
  7860. '' AS cCustomerCode,
  7861. '' AS cCustomerName,
  7862. d.cywdwbh,
  7863. d.cdwmc,
  7864. b.iTag_Group,
  7865. 0 AS iType,
  7866. 1 AS iNodePage,
  7867. 0 AS iType_P,
  7868. 1 AS iType_Origin,
  7869. a.ID AS id_origin,
  7870. c.DZDRQ AS dDate,
  7871. c.Dwcrq AS dInFinishDate,
  7872. c.CYWYXM,
  7873. c.DJFRQ,
  7874. c.CDF,
  7875. CONCAT(
  7876. IF(c.CBCYEAR <> '', CONCAT(c.CBCYEAR, '年'), ''),
  7877. IF(c.CBCmonth <> '', CONCAT(c.CBCmonth, '月'), ''),
  7878. IF(c.CBC <> '', CONCAT(c.CBC, '版'), ''),
  7879. IF(c.cYCyear <> '', CONCAT(c.cYCyear, '年'), ''),
  7880. IF(c.cYCmonth <> '', CONCAT(c.cYCmonth, '月'), ''),
  7881. IF(c.CYC <> '', CONCAT(c.CYC, '版'), '')
  7882. ) AS cBanCi
  7883. FROM
  7884. qlOrderProduct AS a
  7885. INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct
  7886. INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode
  7887. LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID
  7888. WHERE
  7889. (c.iCommited = 1) AND (c.ICYDSTATE <> -1)) b
  7890. INNER JOIN qcDetectionMain c
  7891. ON c.iOrder_Num = b.Code_ProductOrder
  7892. INNER JOIN dzZG d
  7893. ON c.iID_Roals = d.id
  7894. INNER JOIN MKerJzmb e
  7895. ON e.ID = c.cBoard
  7896. UNION ALL
  7897. SELECT b.ID,
  7898. g.ID AS mainid,
  7899. 'RQBB' AS keyword,
  7900. b.Code_ProductOrder AS productcode,
  7901. b.Code_AProduct AS aproductcode,
  7902. b.Name_AProduct AS cName,
  7903. b.iVers,
  7904. '' AS salacode,
  7905. h.cBillCode AS iDetectionNum,
  7906. '入库检验' AS iDetectionType,
  7907. h.dCheckDate AS dFirstTime,
  7908. '' AS cTeams,
  7909. '' AS cProcess,
  7910. '' AS cJzmc,
  7911. CASE g.iCheckResult
  7912. WHEN 0 THEN '合格'
  7913. WHEN 1 THEN '不合格'
  7914. WHEN 2 THEN '让步接收'
  7915. END AS status,
  7916. h.cCheckMan,
  7917. g.cResultNote
  7918. FROM (SELECT
  7919. a.ID,
  7920. a.cCode AS Code_ProductOrder,
  7921. b.cCode AS Code_AProduct,
  7922. b.cName AS Name_AProduct,
  7923. b.ID AS ID_Request,
  7924. a.ID_Mcyd,
  7925. 1 AS iVers,
  7926. b.cSize,
  7927. b.cUnit,
  7928. a.iAmount,
  7929. a.iAmount_In,
  7930. 0 AS nAmount_OB,
  7931. a.iAmount AS nAmount_W,
  7932. a.iState,
  7933. a.nUnitPlanWeight,
  7934. a.nActualWeight,
  7935. '' AS cCustomerCode,
  7936. '' AS cCustomerName,
  7937. d.cywdwbh,
  7938. d.cdwmc,
  7939. b.iTag_Group,
  7940. 0 AS iType,
  7941. 1 AS iNodePage,
  7942. 0 AS iType_P,
  7943. 1 AS iType_Origin,
  7944. a.ID AS id_origin,
  7945. c.DZDRQ AS dDate,
  7946. c.Dwcrq AS dInFinishDate,
  7947. c.CYWYXM,
  7948. c.DJFRQ,
  7949. c.CDF,
  7950. CONCAT(
  7951. IF(c.CBCYEAR <> '', CONCAT(c.CBCYEAR, '年'), ''),
  7952. IF(c.CBCmonth <> '', CONCAT(c.CBCmonth, '月'), ''),
  7953. IF(c.CBC <> '', CONCAT(c.CBC, '版'), ''),
  7954. IF(c.cYCyear <> '', CONCAT(c.cYCyear, '年'), ''),
  7955. IF(c.cYCmonth <> '', CONCAT(c.cYCmonth, '月'), ''),
  7956. IF(c.CYC <> '', CONCAT(c.CYC, '版'), '')
  7957. ) AS cBanCi
  7958. FROM
  7959. qlOrderProduct AS a
  7960. INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct
  7961. INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode
  7962. LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID
  7963. WHERE
  7964. (c.iCommited = 1) AND (c.ICYDSTATE <> -1)) b
  7965. INNER JOIN mtMaterialQualityCheckDetail g
  7966. ON g.ID_scProduct = b.ID
  7967. INNER JOIN mtMaterialQualityCheck h
  7968. ON h.ID = g.ID_Main
  7969. WHERE h.iStatus > 0
  7970. ) AS t
  7971. WHERE 1 = 1
  7972. -- AND t.iDetectionType ='巡检单'
  7973. )JY
  7974. ON zd.订单号 = JY.订单号 and
  7975. zd.生产机台 =JY.cJzmc
  7976. WHERE
  7977. jy.检验时间 is not null
  7978. and zd.生产机台 IN('胶订潮流1号', '胶订潮流2号', '胶订精密达1号', '胶订精密达2号', '胶订精密达3号')
  7979. ORDER BY zd.订单号 ,jy.检验时间 desc ";
  7980. $res = Db::query($sql);
  7981. if($res){
  7982. $redis->set($redis_key, json_encode($res));
  7983. echo date("Y-m-d H:i:s").'存进去了';
  7984. return $res;
  7985. }
  7986. }
  7987. //无线胶订线近日重点产品检验情况->接口
  7988. public function jd_zdcpjy(){
  7989. $redis = redis();
  7990. $drzdcpjtjyqk_datas = json_decode($redis->get(md5('jd_zdcpjy_redis')), true);
  7991. // $drzdcpjtjyqk_data = array_filter($drzdcpjtjyqk_datas, function($item) {
  7992. // // 获取当前日期
  7993. // $current_date = date('Y-m-d');
  7994. // // 获取三天前的日期
  7995. // $three_days_ago = date('Y-m-d');
  7996. // //$three_days_ago = date('Y-m-d', strtotime('-1 days'));
  7997. // // 从检验时间中提取日期部分
  7998. // $inspection_date = substr($item['检验时间'], 0, 10);
  7999. // // 比较日期是否在近三天内
  8000. // return $inspection_date >= $three_days_ago && $inspection_date <= $current_date;
  8001. // });
  8002. //时间排序【倒序排序】
  8003. // usort($drzdcpjtjyqk_data, function($a, $b) {
  8004. // return strcmp($b['检验时间'], $a['检验时间']);
  8005. // });
  8006. //接口显示字段
  8007. $data = ['status' => 0, 'msg' => '', 'data' => ['columns' => [
  8008. ['name' => '订单号', 'id' => 'ddh', 'width' => '12', 'autoWrap' => "true", 'textAlign' => 'left'],
  8009. ['name' => '印件名称', 'id' => 'yjmc', 'width' => '34', 'autoWrap' => "true", 'textAlign' => 'left'],
  8010. ['name' => '生产机台', 'id' => 'scjt', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8011. ['name' => '检验工序', 'id' => 'yjgx', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8012. ['name' => '检验类型', 'id' => 'jylx', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8013. ['name' => '检验结果', 'id' => 'jyjg', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8014. ['name' => '检验时间', 'id' => 'jysj', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8015. ['name' => '检验人', 'id' => 'jyr', 'width' => '9', 'autoWrap' => "true", 'textAlign' => 'left']
  8016. ], 'rows' => []]];
  8017. //取数据
  8018. if (is_array($drzdcpjtjyqk_datas) && !empty($drzdcpjtjyqk_datas)) {
  8019. foreach ($drzdcpjtjyqk_datas as $v) {
  8020. $data['data']['rows'][] = [
  8021. 'ddh' => $v['订单号'],
  8022. 'yjmc' => $v['印件名称'],
  8023. 'scjt' => $v['生产机台'],
  8024. 'yjgx' => $v['检验工序'],
  8025. 'jylx' => $v['检验类型'],
  8026. 'jyjg' => $v['检验结果'],
  8027. 'jysj' => $v['检验时间'],
  8028. 'jyr' => $v['检验人']
  8029. ];
  8030. }
  8031. } else {
  8032. //数据为空赋值为空
  8033. $data['data']['rows'][] = ['ddh' => '', 'yjmc' => '', 'scjt' => '', 'yjgx' => '', 'jylx' => '', 'jyjg' => '', 'jysj' => '', 'jyr' => ''];
  8034. }
  8035. return json($data);
  8036. }
  8037. //本周常情况反馈->缓存
  8038. public function ycfk_redis(){
  8039. $redis=redis();
  8040. $redis_key = md5('ycfk_redis');
  8041. $sql = "SELECT CASE iState
  8042. WHEN 0 THEN '未提交'
  8043. WHEN 10 THEN '未确认'
  8044. WHEN 20 THEN '未结案'
  8045. WHEN 30 THEN '已结案'
  8046. END AS 状态,
  8047. EFB.cProduceOrder AS 订单号,
  8048. EFB.cProductName AS 印件名称,
  8049. EFB.cFBPerson AS 反馈人,
  8050. DATE_FORMAT(EFB.dFBDate, '%Y-%m-%d %H:%i') AS 反馈时间,
  8051. EFB.cWorkStation AS 工作机台,
  8052. IFNULL(D.cExceptionItem, '') AS 异常项目,
  8053. COALESCE(D.cDescription, D.cExceptionItem, '') AS 异常描述
  8054. FROM ecExceptionFeedBack EFB
  8055. LEFT JOIN ecExceptionDetail D
  8056. ON EFB.iID = D.iMainID
  8057. LEFT JOIN ecExceptionResponsibility R
  8058. ON D.iID = R.iExDetailID
  8059. 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')
  8060. ORDER BY EFB.dFBDate DESC;";
  8061. $res = Db::query($sql);
  8062. if($res){
  8063. $redis->set($redis_key, json_encode($res));
  8064. echo date("Y-m-d H:i:s").'存进去了';
  8065. return $res;
  8066. }
  8067. }
  8068. //本周常情况反馈->接口
  8069. public function ycfk() {
  8070. $redis = redis();
  8071. $list = json_decode($redis->get(md5('ycfk_redis')), true);
  8072. $result['columns']=[
  8073. ['name'=>'状态','id'=>'zt','width'=>'8','autoWrap'=>"true",'textAlign'=>'left'],
  8074. ['name'=>'订单号','id'=>'ddh','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'],
  8075. ['name'=>'印件名称','id'=>'yjmc','width'=>'26','autoWrap'=>"true",'textAlign'=>'left'],
  8076. ['name'=>'反馈人','id'=>'fkr','width'=>'10','autoWrap'=>"true",'textAlign'=>'left'],
  8077. ['name'=>'反馈时间','id'=>'fksj','width'=>'13','autoWrap'=>"true",'textAlign'=>'left'],
  8078. ['name'=>'工作机台','id'=>'hzjt','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'],
  8079. ['name'=>'异常项目','id'=>'fkxm','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'],
  8080. ['name'=>'异常描述','id'=>'ycms','width'=>'14','autoWrap'=>"true",'textAlign'=>'left']
  8081. ];
  8082. foreach($list as $k=>$v){
  8083. $result['rows'][$k]['zt'] = $v['状态'];
  8084. $result['rows'][$k]['ddh'] = $v['订单号'];
  8085. $result['rows'][$k]['yjmc'] = $v['印件名称'];
  8086. $result['rows'][$k]['fkr'] = $v['反馈人'];
  8087. $result['rows'][$k]['fksj'] = $v['反馈时间'];
  8088. $result['rows'][$k]['hzjt'] = $v['工作机台'];
  8089. $result['rows'][$k]['fkxm'] = $v['异常项目'];
  8090. $result['rows'][$k]['ycms'] = $v['异常描述'];
  8091. }
  8092. // 如果过滤后的列表为空,则添加空数据行
  8093. // 注意:这里似乎有一个未定义的变量$filtered_list,你可能需要确保它在使用前已被正确定义和过滤
  8094. if(empty($filtered_list)){
  8095. $result['rows'][] = ['zt'=>'', 'ddh'=>'', 'yjmc'=>'','fkr'=>'', 'fksj'=>'', 'hzjt'=>'', 'fkxm'=>'', 'ycms'=>''];
  8096. }
  8097. $res['status'] = 0;
  8098. $res['msg'] = '';
  8099. $res['data'] = $result;
  8100. return json($res);
  8101. }
  8102. //当日生产的印件巡检情况->缓存
  8103. public function scyjxjqk_redis(){
  8104. $redis=redis();
  8105. $redis_key = md5('scyjxjqk_redis');
  8106. $sql = "SELECT zd.订单号,
  8107. zd.印件名称,
  8108. zd.生产机台,
  8109. jy.检验工序,
  8110. jy.检验类型,
  8111. jy.检验结果,
  8112. DATE_FORMAT(jy.检验时间, '%Y-%m-%d %H:%i') AS 检验时间,
  8113. jy.检验人
  8114. FROM (SELECT DISTINCT Dev.cName 生产机台,
  8115. job.cProductCode 订单号,
  8116. job.cProductName 印件名称,
  8117. dd.czlyq 质量等级,
  8118. dd.CZWKB 开本,
  8119. dd.ncs 印数,
  8120. dd.CYWDWMC 业务单位,
  8121. DATE_FORMAT(NOW(), '%Y-%m-%d') AS 生产日期
  8122. FROM scMachineJob Job
  8123. LEFT JOIN mcyd dd
  8124. ON dd.ccydh = job.cProductCode
  8125. LEFT JOIN (SELECT
  8126. t.iType,
  8127. t.ID,
  8128. t.cCode,
  8129. t.cName,
  8130. t.iGzzxId,
  8131. t.ID_BM,
  8132. t.cbmbh,
  8133. t.cbmmc,
  8134. t.cType_Sys,
  8135. t.iStop,
  8136. t.cType_Dev,
  8137. t.cShortName,
  8138. t.iTypeWage,
  8139. t.iOverProductType
  8140. FROM (
  8141. SELECT
  8142. 0 AS iType,
  8143. MKernel.ID,
  8144. MKernel.cBh AS cCode,
  8145. MKernel.cGzzxmc AS cName,
  8146. MKernel.ID AS iGzzxId,
  8147. dzBM.id AS ID_BM,
  8148. DZBM.cbmbh,
  8149. DZBM.cbmmc,
  8150. Mkernel.cGzzxlx AS cType_Sys,
  8151. MKernel.iStopUse AS iStop,
  8152. MKernel.cGzzxlx AS cType_Dev,
  8153. MKernel.cShortName,
  8154. 0 AS iTypeWage,
  8155. 0 AS iOverProductType
  8156. FROM
  8157. MKernel
  8158. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh
  8159. UNION
  8160. SELECT
  8161. 1 AS iType,
  8162. dzyssb.ID,
  8163. dzyssb.csbbh AS cCode,
  8164. dzyssb.csbmc AS cName,
  8165. Mkernel.ID AS iGzzxId,
  8166. dzBM.id AS ID_BM,
  8167. dzBM.cbmbh,
  8168. dzBM.cbmmc,
  8169. MKernel.cGzzxlx AS cType_Sys,
  8170. dzyssb.iStopUse AS iStop,
  8171. dzyssb.csblb AS cType_Dev,
  8172. dzyssb.cShortName,
  8173. 0 AS iTypeWage,
  8174. 0 AS iOverProductType
  8175. FROM
  8176. dzyssb
  8177. INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center
  8178. INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh
  8179. UNION
  8180. SELECT
  8181. 2 AS iType,
  8182. MKerJzmb.ID,
  8183. MKerJzmb.cJzbh AS cCode,
  8184. MKerJzmb.cJzmc AS cName,
  8185. MKerJzmb.iGzzxId,
  8186. dzBM.id AS ID_BM,
  8187. DZBM.cbmbh,
  8188. DZBM.cbmmc,
  8189. MKernel.cGzzxlx AS cType_Sys,
  8190. MKerJzmb.iStopUse AS iStop,
  8191. dzyssb.csblb AS cType_Dev,
  8192. MKerJzmb.cShortName,
  8193. MKerJzmb.iType AS iTypeWage,
  8194. MKerJzmb.iOverProductType
  8195. FROM
  8196. MKerJzmb
  8197. INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId
  8198. INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh
  8199. INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid
  8200. UNION
  8201. SELECT
  8202. 3 AS iType,
  8203. iywdwid AS ID,
  8204. cywdwbh AS cCode,
  8205. cdwmc AS cName,
  8206. iywdwid AS iGzzxId,
  8207. iywdwid AS ID_BM,
  8208. cywdwbh AS cbmbh,
  8209. cdwmc AS cbmmc,
  8210. '' AS cType_Sys,
  8211. CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop,
  8212. '' AS cType_Dev,
  8213. DZYWDW.cjc AS cShortName,
  8214. 0 AS iTypeWage,
  8215. 0 AS iOverProductType
  8216. FROM
  8217. dzywdw
  8218. WHERE
  8219. bwjg = 1
  8220. UNION
  8221. SELECT
  8222. 3 AS iType,
  8223. -1,
  8224. '',
  8225. '外厂资源',
  8226. -1,
  8227. -1 AS ID_BM,
  8228. '',
  8229. '',
  8230. '' AS cType_Sys,
  8231. 0 AS iStop,
  8232. '' AS cType_Dev,
  8233. '外厂' AS cShortName,
  8234. 0 AS iTypeWage,
  8235. 0 AS iOverProductType
  8236. ) AS t
  8237. WHERE
  8238. (t.iStop = 0)) Dev
  8239. ON Dev.iType <> 3
  8240. AND Job.id_Machine = Dev.Id
  8241. AND Job.iType_Res = 0
  8242. WHERE Job.iStatus IN ( 0, 1, 2, 10, 20 )
  8243. AND Job.iJobType IN ( 0, 4 )
  8244. AND Job.iType_Res = 0
  8245. AND dd.cyjmc LIKE '%求是%'
  8246. OR ( Job.iStatus IN ( 0, 1, 2, 10, 20 )
  8247. AND Job.iJobType IN ( 0, 4 )
  8248. AND Job.iType_Res = 0
  8249. AND ( dd.Czlyq <> '重点产品'
  8250. AND dd.cyjlx <> '杂志' ) )
  8251. AND ( Dev.cName <> '塑封机01号'
  8252. AND Dev.cName <> '塑封机02号' )
  8253. AND job.dPlanStart > DATE_FORMAT(NOW(), '%Y-%m-%d')
  8254. AND job.dPlanStart < DATE_FORMAT(NOW() + INTERVAL 2 DAY, '%Y-%m-%d'))zd
  8255. LEFT JOIN (SELECT t.productcode 订单号,
  8256. t.cName 印件名称,
  8257. t.iDetectionType 检验类型,
  8258. t.dFirstTime 检验时间,
  8259. t.cProcess 检验工序,
  8260. t.status 检验结果,
  8261. t.czgxm 检验人,
  8262. t.cJzmc
  8263. FROM (SELECT b.ID,
  8264. c.ID AS mainid,
  8265. 'XJBB' AS keyword,
  8266. b.Code_ProductOrder AS productcode,
  8267. b.Code_AProduct AS aproductcode,
  8268. b.Name_AProduct AS cName,
  8269. b.iVers,
  8270. '' AS salacode,
  8271. c.iDetectionNum,
  8272. CASE c.iDetectionType
  8273. WHEN 0 THEN '首检单'
  8274. WHEN 1 THEN '巡检单'
  8275. WHEN 2 THEN '自检单'
  8276. END AS iDetectionType,
  8277. c.dFirstTime,
  8278. c.cTeams,
  8279. c.cProcess,
  8280. e.cJzmc,
  8281. CASE c.iJobStatus
  8282. WHEN 0 THEN '合格'
  8283. WHEN 1 THEN '不合格'
  8284. WHEN 2 THEN '让步接收'
  8285. END AS status,
  8286. d.czgxm,
  8287. '' AS cResultNote
  8288. FROM (SELECT
  8289. a.ID,
  8290. a.cCode AS Code_ProductOrder,
  8291. b.cCode AS Code_AProduct,
  8292. b.cName AS Name_AProduct,
  8293. b.ID AS ID_Request,
  8294. a.ID_Mcyd,
  8295. 1 AS iVers,
  8296. b.cSize,
  8297. b.cUnit,
  8298. a.iAmount,
  8299. a.iAmount_In,
  8300. 0 AS nAmount_OB,
  8301. a.iAmount AS nAmount_W,
  8302. a.iState,
  8303. a.nUnitPlanWeight,
  8304. a.nActualWeight,
  8305. '' AS cCustomerCode,
  8306. '' AS cCustomerName,
  8307. d.cywdwbh,
  8308. d.cdwmc,
  8309. b.iTag_Group,
  8310. 0 AS iType,
  8311. 1 AS iNodePage,
  8312. 0 AS iType_P,
  8313. 1 AS iType_Origin,
  8314. a.ID AS id_origin,
  8315. c.DZDRQ AS dDate,
  8316. c.Dwcrq AS dInFinishDate,
  8317. c.CYWYXM,
  8318. c.DJFRQ,
  8319. c.CDF,
  8320. CONCAT(
  8321. IF(c.CBCYEAR <> '', CONCAT(c.CBCYEAR, '年'), ''),
  8322. IF(c.CBCmonth <> '', CONCAT(c.CBCmonth, '月'), ''),
  8323. IF(c.CBC <> '', CONCAT(c.CBC, '版'), ''),
  8324. IF(c.cYCyear <> '', CONCAT(c.cYCyear, '年'), ''),
  8325. IF(c.cYCmonth <> '', CONCAT(c.cYCmonth, '月'), ''),
  8326. IF(c.CYC <> '', CONCAT(c.CYC, '版'), '')
  8327. ) AS cBanCi
  8328. FROM
  8329. qlOrderProduct AS a
  8330. INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct
  8331. INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode
  8332. LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID
  8333. WHERE
  8334. (c.iCommited = 1) AND (c.ICYDSTATE <> -1)) b
  8335. INNER JOIN qcDetectionMain c
  8336. ON c.iOrder_Num = b.Code_ProductOrder
  8337. INNER JOIN dzZG d
  8338. ON c.iID_Roals = d.id
  8339. INNER JOIN MKerJzmb e
  8340. ON e.ID = c.cBoard
  8341. UNION ALL
  8342. SELECT b.ID,
  8343. g.ID AS mainid,
  8344. 'RQBB' AS keyword,
  8345. b.Code_ProductOrder AS productcode,
  8346. b.Code_AProduct AS aproductcode,
  8347. b.Name_AProduct AS cName,
  8348. b.iVers,
  8349. '' AS salacode,
  8350. h.cBillCode AS iDetectionNum,
  8351. '入库检验' AS iDetectionType,
  8352. h.dCheckDate AS dFirstTime,
  8353. '' AS cTeams,
  8354. '' AS cProcess,
  8355. '' AS cJzmc,
  8356. CASE g.iCheckResult
  8357. WHEN 0 THEN '合格'
  8358. WHEN 1 THEN '不合格'
  8359. WHEN 2 THEN '让步接收'
  8360. END AS status,
  8361. h.cCheckMan,
  8362. g.cResultNote
  8363. FROM (SELECT
  8364. a.ID,
  8365. a.cCode AS Code_ProductOrder,
  8366. b.cCode AS Code_AProduct,
  8367. b.cName AS Name_AProduct,
  8368. b.ID AS ID_Request,
  8369. a.ID_Mcyd,
  8370. 1 AS iVers,
  8371. b.cSize,
  8372. b.cUnit,
  8373. a.iAmount,
  8374. a.iAmount_In,
  8375. 0 AS nAmount_OB,
  8376. a.iAmount AS nAmount_W,
  8377. a.iState,
  8378. a.nUnitPlanWeight,
  8379. a.nActualWeight,
  8380. '' AS cCustomerCode,
  8381. '' AS cCustomerName,
  8382. d.cywdwbh,
  8383. d.cdwmc,
  8384. b.iTag_Group,
  8385. 0 AS iType,
  8386. 1 AS iNodePage,
  8387. 0 AS iType_P,
  8388. 1 AS iType_Origin,
  8389. a.ID AS id_origin,
  8390. c.DZDRQ AS dDate,
  8391. c.Dwcrq AS dInFinishDate,
  8392. c.CYWYXM,
  8393. c.DJFRQ,
  8394. c.CDF,
  8395. CONCAT(
  8396. IF(c.CBCYEAR <> '', CONCAT(c.CBCYEAR, '年'), ''),
  8397. IF(c.CBCmonth <> '', CONCAT(c.CBCmonth, '月'), ''),
  8398. IF(c.CBC <> '', CONCAT(c.CBC, '版'), ''),
  8399. IF(c.cYCyear <> '', CONCAT(c.cYCyear, '年'), ''),
  8400. IF(c.cYCmonth <> '', CONCAT(c.cYCmonth, '月'), ''),
  8401. IF(c.CYC <> '', CONCAT(c.CYC, '版'), '')
  8402. ) AS cBanCi
  8403. FROM
  8404. qlOrderProduct AS a
  8405. INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct
  8406. INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode
  8407. LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID
  8408. WHERE
  8409. (c.iCommited = 1) AND (c.ICYDSTATE <> -1)) b
  8410. INNER JOIN mtMaterialQualityCheckDetail g
  8411. ON g.ID_scProduct = b.ID
  8412. INNER JOIN mtMaterialQualityCheck h
  8413. ON h.ID = g.ID_Main
  8414. WHERE h.iStatus > 0
  8415. ) AS t
  8416. WHERE 1 = 1
  8417. AND t.iDetectionType ='巡检单'
  8418. )JY
  8419. ON zd.订单号 = JY.订单号 and
  8420. zd.生产机台 =JY.cJzmc
  8421. WHERE
  8422. jy.检验时间 is not null
  8423. ORDER BY zd.订单号,jy.检验时间 desc";
  8424. $res = Db::query($sql);
  8425. if($res){
  8426. $redis->set($redis_key, json_encode($res));
  8427. echo date("Y-m-d H:i:s").'存进去了';
  8428. return $res;
  8429. }
  8430. }
  8431. // 当日生产的印件巡检情况->接口
  8432. public function scyjxjqk() {
  8433. $redis = redis();
  8434. $list = json_decode($redis->get(md5('scyjxjqk_redis')), true);
  8435. // $list = array_filter($lists, function($item) {
  8436. // // 获取当前日期
  8437. // $current_date = date('Y-m-d');
  8438. // // 从检验时间中提取日期部分
  8439. // $inspection_date = substr($item['检验时间'], 0, 10);
  8440. // // 比较日期是否相等
  8441. // return $inspection_date === $current_date;
  8442. // });
  8443. $data = ['status' => 0, 'msg' => '', 'data' => ['columns' => [
  8444. ['name' => '订单号', 'id' => 'ddh', 'width' => '12', 'autoWrap' => "true", 'textAlign' => 'left'],
  8445. ['name' => '印件名称', 'id' => 'yjmc', 'width' => '34', 'autoWrap' => "true", 'textAlign' => 'left'],
  8446. ['name' => '生产机台', 'id' => 'scjt', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8447. ['name' => '检验工序', 'id' => 'yjgx', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8448. ['name' => '检验类型', 'id' => 'jylx', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8449. ['name' => '检验结果', 'id' => 'jyjg', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8450. ['name' => '检验时间', 'id' => 'jysj', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'],
  8451. ['name' => '检验人', 'id' => 'jyr', 'width' => '9', 'autoWrap' => "true", 'textAlign' => 'left']
  8452. ], 'rows' => []]];
  8453. if (is_array($list) && !empty($list)) {
  8454. foreach ($list as $v) {
  8455. $data['data']['rows'][] = [
  8456. 'ddh' => $v['订单号'],
  8457. 'yjmc'=> $v['印件名称'],
  8458. 'scjt' => $v['生产机台'],
  8459. 'jygx' => $v['检验工序'],
  8460. 'jylx' => $v['检验类型'],
  8461. 'jyjg' => $v['检验结果'],
  8462. 'jysj' => $v['检验时间'],
  8463. 'jyr'=> $v['检验人']
  8464. ];
  8465. }
  8466. } else {
  8467. $data['data']['rows'][] = ['ddh'=>'', 'yjmc'=>'', 'scjt'=>'','jygx'=>'', 'jylx'=>'', 'jyjg'=>'', 'jysj'=>'', 'jyr'=>''];
  8468. }
  8469. return json($data);
  8470. }
  8471. //客户投诉 (质量问题(按客户))---》暂时用不到
  8472. public function khts(){
  8473. $redis=redis();
  8474. $redis_key = md5('khzl_redis');
  8475. $redis_data = $redis->get($redis_key);
  8476. $result=json_decode($redis_data,true);
  8477. $result=$result['data']['rows'];
  8478. $result=array_splice($result,0,6);
  8479. // halt($result);
  8480. foreach($result as $k=>$v){
  8481. // $list[$k]['name']=$v['khdw'];
  8482. // 截取前十一个字符
  8483. $list[$k]['name'] = mb_substr(str_replace('有限公司', '', $v['khdw']), 0, 9).'...';
  8484. $list[$k]['value']=$v['tscs'];
  8485. }
  8486. $res['status']=0;
  8487. $res['msg']='';
  8488. $res['data']=$list;
  8489. // halt($res);
  8490. return json($res);
  8491. }
  8492. //责任部门 (质量问题(按部门))---》暂时用不到
  8493. public function zrbm(){
  8494. $redis=redis();
  8495. $redis_key = md5('bmzl_redis');
  8496. $redis_data = $redis->get($redis_key);
  8497. $result=json_decode($redis_data,true);
  8498. $result=$result['data']['rows'];
  8499. $result = array_splice($result, 0, 6);
  8500. foreach($result as $k => $v){
  8501. $list[$k]['name'] = $v['bm'];
  8502. $list[$k]['value'] = $v['tscs'];
  8503. }
  8504. $res['status'] = 0;
  8505. $res['msg'] = '';
  8506. $res['data'] = $list;
  8507. return json($res);
  8508. }
  8509. //质量问题->缓存---》暂时用不到
  8510. public function zlwt_redis(){
  8511. $redis=redis();
  8512. $redis_key = md5('zlwt_redis');
  8513. // 获取当前日期时间
  8514. $endDate = date("Y-m-d H:i:s");
  8515. // 获取一年前的日期时间
  8516. $startDate = date("Y-m-d H:i:s", strtotime("-1 year"));
  8517. $res = Db::query("SELECT D1.cdwmc,resp1.cReasonCName
  8518. FROM ecComplainFeedback B
  8519. LEFT JOIN DZYWDW D1
  8520. ON D1.iywdwid = B.iClientID
  8521. LEFT JOIN MCYD M
  8522. ON M.CCYDH = B.cOrderBillCode
  8523. INNER JOIN qlOrderProduct p
  8524. ON M.ICYDID = p.ID_Mcyd
  8525. LEFT JOIN (SELECT a.ID_qlOrderProduct,
  8526. Sum(a.iAmountOut) iAmount_Out
  8527. FROM SCYDYSQX a
  8528. GROUP BY a.ID_qlOrderProduct) c
  8529. ON c.ID_qlOrderProduct = p.ID
  8530. LEFT JOIN ecComplainContent DD
  8531. ON DD.iComplainFBID = B.iID
  8532. LEFT JOIN tbConfig E
  8533. ON E.iNoConfig = DD.iClassID_C
  8534. LEFT JOIN tbConfig T
  8535. ON T.iNoConfig = DD.iClassID_P
  8536. LEFT JOIN (SELECT R.iComplainFBID,
  8537. PP.strSubName AS cReasonPName,
  8538. CC2.strSubName AS cReasonCName,
  8539. CR.cRespPerson,
  8540. CR.cRespDept,
  8541. CR.cRespTech,
  8542. CR.cRespCorp,
  8543. CR.nMoney
  8544. FROM ecComplainReasonAnalysis R
  8545. LEFT JOIN tbConfig CC2
  8546. ON CC2.iNoConfig = R.iReasonID_C
  8547. LEFT JOIN tbConfig PP
  8548. ON PP.iNoConfig = R.iReasonID_P
  8549. LEFT JOIN ecComplainResponsibility CR
  8550. ON CR.iComplainRAID = R.iID) resp1
  8551. ON resp1.iComplainFBID = B.iID
  8552. WHERE b.dFeedbackDate >= '{$startDate}'
  8553. AND b.dFeedbackDate <= '{$endDate}'");
  8554. if(empty($res)) {
  8555. $res = [];
  8556. $res['status'] = 0;
  8557. $res['msg'] = '';
  8558. $res['data'] = [
  8559. ['name' => '色差(与原稿偏差)', 'value' => 0],
  8560. ['name' => '精装质量问题', 'value' => 0],
  8561. ['name' => '工艺缺项', 'value' => 0],
  8562. ['name' => '双影', 'value' => 0],
  8563. ['name' => '烫金不实', 'value' => 0],
  8564. ['name' => '色差(批量不统一)', 'value' => 0],
  8565. ];
  8566. $redis->set($redis_key, json_encode($res));
  8567. return json($res);
  8568. }else{
  8569. $list = [];
  8570. for ($i = 0; $i < count($res); $i++) {
  8571. $list[$res[$i]['cReasonCName']][] = $res[$i]['cdwmc'];
  8572. }
  8573. array_multisort($list, SORT_DESC);
  8574. $result = [];
  8575. $i = 0;
  8576. foreach ($list as $k => $v) {
  8577. $result[$i]['质量问题'] = $k;
  8578. $result[$i]['投诉次数'] = count($v);
  8579. $result[$i]['合并原因'] = '';
  8580. foreach ($v as $key => $value) {
  8581. if ($value == null) {
  8582. unset($v[$key]);
  8583. }
  8584. }
  8585. foreach (array_count_values($v) as $a => $b) {
  8586. $result[$i]['合并原因'] .= $a . $b . '/';
  8587. }
  8588. $result[$i]['合并原因'] = substr($result[$i]['合并原因'], 0, -1);
  8589. $i++;
  8590. }
  8591. $result=array_splice($result,0,6);
  8592. $list=[];
  8593. foreach($result as $k=>$v){
  8594. $list[$k]['name']=$v['质量问题'];
  8595. $list[$k]['value']=$v['投诉次数'];
  8596. }
  8597. $res=[];
  8598. $res['status']=0;
  8599. $res['msg']='';
  8600. $res['data']=$list;
  8601. $redis->set($redis_key, json_encode($res));
  8602. return json($res);
  8603. }
  8604. }
  8605. //质量问题->接口---》暂时用不到
  8606. public function zlwt(){
  8607. $redis=redis();
  8608. $redis_key = md5('zlwt_redis');
  8609. $redis_data = $redis->get($redis_key);
  8610. return $redis_data;
  8611. }
  8612. //质检记录一览表->缓存---》暂时用不到
  8613. public function zjjl_redis(){
  8614. $redis=redis();
  8615. $redis_key = md5('zjjl_redis');
  8616. $list=Db::query("SELECT t.productcode 订单号,
  8617. t.cName 印件名称,
  8618. t.iDetectionType 检验类型,
  8619. t.dFirstTime 检验时间,
  8620. t.cProcess 检验工序,
  8621. t.status 检验结果,
  8622. t.czgxm 检验人
  8623. FROM (SELECT b.ID,
  8624. c.ID AS mainid,
  8625. 'XJBB' AS keyword,
  8626. b.Code_ProductOrder AS productcode,
  8627. b.Code_AProduct AS aproductcode,
  8628. b.Name_AProduct AS cName,
  8629. b.iVers,
  8630. '' AS salacode,
  8631. c.iDetectionNum,
  8632. CASE c.iDetectionType
  8633. WHEN 0 THEN '首检单'
  8634. WHEN 1 THEN '巡检单'
  8635. WHEN 2 THEN '自检单'
  8636. END AS iDetectionType,
  8637. c.dFirstTime,
  8638. c.cTeams,
  8639. c.cProcess,
  8640. e.cJzmc,
  8641. CASE c.iJobStatus
  8642. WHEN 0 THEN '合格'
  8643. WHEN 1 THEN '不合格'
  8644. WHEN 2 THEN '让步接收'
  8645. END AS status,
  8646. d.czgxm,
  8647. '' AS cResultNote
  8648. FROM (SELECT a.ID,
  8649. a.cCode AS Code_ProductOrder,
  8650. b.cCode AS Code_AProduct,
  8651. b.cName AS Name_AProduct,
  8652. b.ID AS ID_Request,
  8653. a.ID_Mcyd,
  8654. 1 AS iVers,
  8655. b.cSize,
  8656. b.cUnit,
  8657. a.iAmount,
  8658. a.iAmount_In,
  8659. 0 AS nAmount_OB,
  8660. a.iAmount AS nAmount_W,
  8661. a.iState,
  8662. a.nUnitPlanWeight,
  8663. a.nActualWeight,
  8664. '' AS cCustomerCode,
  8665. '' AS cCustomerName,
  8666. d.cywdwbh,
  8667. d.cdwmc,
  8668. b.iTag_Group,
  8669. 0 AS iType,
  8670. 1 AS iNodePage,
  8671. 0 AS iType_P,
  8672. 1 AS iType_Origin,
  8673. a.ID AS id_origin,
  8674. c.DZDRQ AS dDate,
  8675. c.Dwcrq AS dInFinishDate,
  8676. c.CYWYXM,
  8677. c.DJFRQ,
  8678. c.CDF,
  8679. CASE
  8680. WHEN c.CBCYEAR <> '' THEN c.CBCYEAR + '年'
  8681. ELSE ''
  8682. END
  8683. + CASE
  8684. WHEN c.CBCmonth <> '' THEN c.CBCmonth + '月'
  8685. ELSE ''
  8686. END
  8687. + CASE
  8688. WHEN c.CBC <> '' THEN c.CBC + '版'
  8689. ELSE ''
  8690. END
  8691. + CASE
  8692. WHEN c.cYCyear <> '' THEN c.cYCyear + '年'
  8693. ELSE ''
  8694. END
  8695. + CASE
  8696. WHEN c.cYCmonth <> '' THEN c.cYCmonth + '月'
  8697. ELSE ''
  8698. END
  8699. + CASE
  8700. WHEN c.CYC <> '' THEN c.CYC + '版'
  8701. ELSE ''
  8702. END AS cBanCi
  8703. FROM qlOrderProduct AS a
  8704. INNER JOIN qlAProduct AS b
  8705. ON b.ID = a.ID_qlAProduct
  8706. INNER JOIN MCYD AS c
  8707. ON c.ICYDID = a.ID_Mcyd
  8708. AND c.CCYDH = a.cCode
  8709. LEFT OUTER JOIN DZYWDW AS d
  8710. ON d.iywdwid = c.IYWDWID
  8711. WHERE ( c.iCommited = 1 )
  8712. AND ( c.ICYDSTATE <> -1 )
  8713. ) as b
  8714. INNER JOIN qcDetectionMain c
  8715. ON c.iOrder_Num = b.Code_ProductOrder
  8716. INNER JOIN dzZG d
  8717. ON c.iID_Roals = d.id
  8718. INNER JOIN MKerJzmb e
  8719. ON e.ID = c.cBoard
  8720. UNION ALL
  8721. SELECT b.ID,
  8722. g.ID AS mainid,
  8723. 'RQBB' AS keyword,
  8724. b.Code_ProductOrder AS productcode,
  8725. b.Code_AProduct AS aproductcode,
  8726. b.Name_AProduct AS cName,
  8727. b.iVers,
  8728. '' AS salacode,
  8729. h.cBillCode AS iDetectionNum,
  8730. '入库检验' AS iDetectionType,
  8731. h.dCheckDate AS dFirstTime,
  8732. '' AS cTeams,
  8733. '' AS cProcess,
  8734. '' AS cJzmc,
  8735. CASE g.iCheckResult
  8736. WHEN 0 THEN '合格'
  8737. WHEN 1 THEN '不合格'
  8738. WHEN 2 THEN '让步接收'
  8739. END AS status,
  8740. h.cCheckMan,
  8741. g.cResultNote
  8742. FROM (SELECT a.ID,
  8743. a.cCode AS Code_ProductOrder,
  8744. b.cCode AS Code_AProduct,
  8745. b.cName AS Name_AProduct,
  8746. b.ID AS ID_Request,
  8747. a.ID_Mcyd,
  8748. 1 AS iVers,
  8749. b.cSize,
  8750. b.cUnit,
  8751. a.iAmount,
  8752. a.iAmount_In,
  8753. 0 AS nAmount_OB,
  8754. a.iAmount AS nAmount_W,
  8755. a.iState,
  8756. a.nUnitPlanWeight,
  8757. a.nActualWeight,
  8758. '' AS cCustomerCode,
  8759. '' AS cCustomerName,
  8760. d.cywdwbh,
  8761. d.cdwmc,
  8762. b.iTag_Group,
  8763. 0 AS iType,
  8764. 1 AS iNodePage,
  8765. 0 AS iType_P,
  8766. 1 AS iType_Origin,
  8767. a.ID AS id_origin,
  8768. c.DZDRQ AS dDate,
  8769. c.Dwcrq AS dInFinishDate,
  8770. c.CYWYXM,
  8771. c.DJFRQ,
  8772. c.CDF,
  8773. CASE
  8774. WHEN c.CBCYEAR <> '' THEN c.CBCYEAR + '年'
  8775. ELSE ''
  8776. END
  8777. + CASE
  8778. WHEN c.CBCmonth <> '' THEN c.CBCmonth + '月'
  8779. ELSE ''
  8780. END
  8781. + CASE
  8782. WHEN c.CBC <> '' THEN c.CBC + '版'
  8783. ELSE ''
  8784. END
  8785. + CASE
  8786. WHEN c.cYCyear <> '' THEN c.cYCyear + '年'
  8787. ELSE ''
  8788. END
  8789. + CASE
  8790. WHEN c.cYCmonth <> '' THEN c.cYCmonth + '月'
  8791. ELSE ''
  8792. END
  8793. + CASE
  8794. WHEN c.CYC <> '' THEN c.CYC + '版'
  8795. ELSE ''
  8796. END AS cBanCi
  8797. FROM qlOrderProduct AS a
  8798. INNER JOIN qlAProduct AS b
  8799. ON b.ID = a.ID_qlAProduct
  8800. INNER JOIN MCYD AS c
  8801. ON c.ICYDID = a.ID_Mcyd
  8802. AND c.CCYDH = a.cCode
  8803. LEFT OUTER JOIN DZYWDW AS d
  8804. ON d.iywdwid = c.IYWDWID
  8805. WHERE ( c.iCommited = 1 )
  8806. AND ( c.ICYDSTATE <> -1 )
  8807. ) as b
  8808. INNER JOIN mtMaterialQualityCheckDetail g
  8809. ON g.ID_scProduct = b.ID
  8810. INNER JOIN mtMaterialQualityCheck h
  8811. ON h.ID = g.ID_Main
  8812. WHERE h.iStatus > 0) AS t
  8813. WHERE 1 = 1
  8814. -- AND DATE_FORMAT(t.dFirstTime, '%Y-%m-%d')= '2023-11-12'
  8815. ORDER BY t.dFirstTime DESC
  8816. limit 8
  8817. ");
  8818. $redis->set($redis_key, json_encode($list));
  8819. return $list;
  8820. }
  8821. //质检记录一览表->接口---》暂时用不到
  8822. public function zjjl(){
  8823. $redis=redis();
  8824. // $redis_key = md5('zjjl_redis');
  8825. // $redis_data = $redis->get($redis_key);
  8826. $list = json_decode($redis->get(md5('zjjl_redis')), true);
  8827. $result['columns']=[
  8828. ['name'=>'订单号','id'=>'ddh','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'],
  8829. ['name'=>'印件名称','id'=>'yjmc','width'=>'22','textAlign'=>'left'],
  8830. ['name'=>'检验类型','id'=>'jylx','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'],
  8831. ['name'=>'检验时间','id'=>'jysj','width'=>'20','autoWrap'=>"true",'textAlign'=>'left'],
  8832. ['name'=>'检验工序','id'=>'jygx','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'],
  8833. ['name'=>'检验结果','id'=>'jyjg','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'],
  8834. ['name'=>'检验人','id'=>'jyr','width'=>'10','autoWrap'=>"true",'textAlign'=>'left']
  8835. ];
  8836. foreach($list as $k=>$v){
  8837. $result['rows'][$k]['ddh']=$v['订单号'];
  8838. $result['rows'][$k]['yjmc']=$v['印件名称'];
  8839. $result['rows'][$k]['jylx']=$v['检验类型'];
  8840. $result['rows'][$k]['jysj']=$v['检验时间'];
  8841. $result['rows'][$k]['jygx']=$v['检验工序'];
  8842. $result['rows'][$k]['jyjg']=$v['检验结果'];
  8843. $result['rows'][$k]['jyr']=$v['检验人'];
  8844. }
  8845. if($list==[]){
  8846. $result['rows'][0]['ddh']='';
  8847. $result['rows'][0]['yjmc']='';
  8848. $result['rows'][0]['jylx']='';
  8849. $result['rows'][0]['jysj']='';
  8850. $result['rows'][0]['jygx']='';
  8851. $result['rows'][0]['jyjg']='';
  8852. $result['rows'][0]['jyr']='';
  8853. }
  8854. $res['status']=0;
  8855. $res['msg']='';
  8856. $res['data']=$result;
  8857. return json($res);
  8858. }
  8859. //客户质量投诉一览表->缓存---》暂时用不到
  8860. public function khzl_redis(){
  8861. $redis=redis();
  8862. $redis_key = md5('khzl_redis');
  8863. // 获取当前日期时间
  8864. $endDate = date("Y-m-d H:i:s");
  8865. // 获取一年前的日期时间
  8866. $startDate = date("Y-m-d H:i:s", strtotime("-1 year"));
  8867. $r_list= Db::query("SELECT resp.cReasonCName,D.cdwmc FROM ecComplainFeedback B LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID
  8868. LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd
  8869. LEFT JOIN (SELECT a.ID_qlOrderProduct,Sum(a.iAmountOut) iAmount_Out FROM SCYDYSQX a
  8870. GROUP BY a.ID_qlOrderProduct) c ON c.ID_qlOrderProduct = p.ID LEFT JOIN ecComplainContent DD
  8871. ON DD.iComplainFBID = B.iID LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C
  8872. LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P
  8873. LEFT JOIN (SELECT R.iComplainFBID,
  8874. PP.strSubName AS cReasonPName,
  8875. CC2.strSubName AS cReasonCName,
  8876. CR.cRespPerson,
  8877. CR.cRespDept,
  8878. CR.cRespTech,
  8879. CR.cRespCorp,
  8880. CR.nMoney
  8881. FROM ecComplainReasonAnalysis R
  8882. LEFT JOIN tbConfig CC2
  8883. ON CC2.iNoConfig = R.iReasonID_C
  8884. LEFT JOIN tbConfig PP
  8885. ON PP.iNoConfig = R.iReasonID_P
  8886. LEFT JOIN ecComplainResponsibility CR
  8887. ON CR.iComplainRAID = R.iID) resp
  8888. ON resp.iComplainFBID = B.iID
  8889. WHERE 1 = 1
  8890. AND b.dFeedbackDate >= '{$startDate}'
  8891. AND b.dFeedbackDate <= '{$endDate}'");
  8892. if(empty($r_list)) {
  8893. $res['status'] = 0;
  8894. $res['msg'] = '没有找到数据';
  8895. $res['data'] = [
  8896. 'columns' => [
  8897. ['name' => '客户单位', 'id' => 'khdw', 'width' => '36', 'autoWrap' => "true", 'textAlign' => 'left'],
  8898. ['name' => '投诉次数', 'id' => 'tscs', 'width' => '12', 'autoWrap' => "true", 'textAlign' => 'left'],
  8899. ['name' => '质量问题', 'id' => 'zlwt', 'width' => '52', 'textAlign' => 'left']
  8900. ],
  8901. 'rows' => [
  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. ['khdw' => '上海古籍出版社有限公司', 'tscs' => '0', 'zlwt' => ''],
  8910. ]
  8911. ];
  8912. $redis->set($redis_key, json_encode($res));
  8913. return json($res);
  8914. }else{
  8915. $c_list = [];
  8916. for ($i = 0; $i < count($r_list); $i++) {
  8917. $c_list[$r_list[$i]['cdwmc']][] = $r_list[$i]['cReasonCName'];
  8918. }
  8919. array_multisort($c_list, SORT_DESC);
  8920. $result = [];
  8921. $i = 0;
  8922. foreach ($c_list as $k => $v) {
  8923. $result[$i]['客户单位'] = $k;
  8924. $result[$i]['投诉次数'] = count($v);
  8925. $result[$i]['质量问题'] = '';
  8926. foreach ($v as $key => $value) {
  8927. if ($value == null) {
  8928. unset($v[$key]);
  8929. }
  8930. }
  8931. foreach (array_count_values($v) as $a => $b) {
  8932. $result[$i]['质量问题'] .= $a . $b . '/';
  8933. }
  8934. $result[$i]['质量问题'] = substr($result[$i]['质量问题'], 0, -1);
  8935. $i++;
  8936. }
  8937. $result=array_splice($result,0,8);
  8938. $list['columns']=[
  8939. ['name'=>'客户单位','id'=>'khdw','width'=>'36','autoWrap'=>"true",'textAlign'=>'left'],
  8940. ['name'=>'投诉次数','id'=>'tscs','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'],
  8941. ['name'=>'质量问题','id'=>'zlwt','width'=>'52','autoWrap'=>"true",'textAlign'=>'left']
  8942. ];
  8943. foreach($result as $k=>$v){
  8944. $list['rows'][$k]['khdw']=$v['客户单位'];
  8945. $list['rows'][$k]['tscs']=$v['投诉次数'];
  8946. $list['rows'][$k]['zlwt']=$v['质量问题'];
  8947. }
  8948. $res['status']=0;
  8949. $res['msg']='';
  8950. $res['data']=$list;
  8951. $redis->set($redis_key, json_encode($res));
  8952. return json($res);
  8953. }
  8954. }
  8955. //客户质量投诉一览表->接口---》暂时用不到
  8956. public function khzl(){
  8957. $redis=redis();
  8958. $redis_key = md5('khzl_redis');
  8959. $redis_data = $redis->get($redis_key);
  8960. return $redis_data;
  8961. }
  8962. //质量问题一览表(按部门->缓存---》暂时用不到
  8963. public function bmzl_redis(){
  8964. $redis=redis();
  8965. $redis_key = md5('bmzl_redis');
  8966. // 获取当前日期时间
  8967. $endDate = date("Y-m-d H:i:s");
  8968. // 获取一年前的日期时间
  8969. $startDate = date("Y-m-d H:i:s", strtotime("-1 year"));
  8970. $res1=Db::query("SELECT CASE
  8971. WHEN CR.cRespDept = '' THEN '外协单位'
  8972. ELSE CR.cRespDept
  8973. END AS 部门,
  8974. Count(*) AS 投诉次数
  8975. FROM ecComplainFeedback B
  8976. LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID
  8977. LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode
  8978. INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd
  8979. LEFT JOIN (SELECT a.ID_qlOrderProduct,
  8980. Sum(a.iAmountOut) iAmount_Out
  8981. FROM SCYDYSQX a
  8982. GROUP BY a.ID_qlOrderProduct) c
  8983. ON c.ID_qlOrderProduct = p.ID
  8984. LEFT JOIN ecComplainContent DD ON DD.iComplainFBID = B.iID
  8985. LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C
  8986. LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P
  8987. LEFT JOIN (SELECT R.iComplainFBID,CR1.cRespDept
  8988. FROM ecComplainReasonAnalysis R
  8989. LEFT JOIN ecComplainResponsibility CR1 ON CR1.iComplainRAID = R.iID) CR
  8990. ON B.iID = CR.iComplainFBID
  8991. WHERE 1 = 1 AND b.dFeedbackDate >= '{$startDate}' AND b.dFeedbackDate <= '{$endDate}'
  8992. GROUP BY CR.cRespDept ORDER BY 投诉次数 DESC,
  8993. CR.cRespDept; ");
  8994. foreach($res1 as $k=>$v){
  8995. if($v['部门']=='全部'){
  8996. unset($res1[$k]);
  8997. }
  8998. }
  8999. foreach($res1 as $k=>$v){
  9000. if($v['部门']===null){
  9001. $res1[$k]['部门']='全部';
  9002. }
  9003. }
  9004. $res = Db::query("SELECT CR2.cReasonPName,CR2.cRespDept
  9005. FROM ecComplainFeedback B2
  9006. LEFT JOIN (SELECT R2.iComplainFBID,
  9007. CR1.cRespDept,
  9008. CC.strSubName AS cReasonPName
  9009. FROM ecComplainReasonAnalysis R2
  9010. LEFT JOIN ecComplainResponsibility CR1
  9011. ON CR1.iComplainRAID = R2.iID
  9012. LEFT JOIN tbConfig CC
  9013. ON CC.iNoConfig = R2.iReasonID_C
  9014. LEFT JOIN tbConfig PP
  9015. ON PP.iNoConfig = R2.iReasonID_P) CR2
  9016. ON B2.iID = CR2.iComplainFBID
  9017. WHERE b2.dFeedbackDate >= '{$startDate}'
  9018. AND b2.dFeedbackDate <= '{$endDate}'");
  9019. if(empty($res1) || empty($res)) {
  9020. $res['status'] = 0;
  9021. $res['msg'] = '没有找到数据';
  9022. $res['data'] = [
  9023. 'columns' => [
  9024. ['name' => '部门', 'id' => 'bm', 'width' => '18', 'textAlign' => 'left'],
  9025. ['name' => '投诉次数', 'id' => 'tscs', 'width' => '12', 'textAlign' => 'left'],
  9026. ['name' => '合并原因', 'id' => 'hbyy', 'width' => '58', 'textAlign' => 'left']
  9027. ],
  9028. 'rows' => [
  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. ['bm' => '生产部', 'tscs' => '0', 'hbyy' => '']
  9035. ]
  9036. ];
  9037. $redis->set($redis_key, json_encode($res));
  9038. return json($res);
  9039. }else{
  9040. $list = [];
  9041. for ($i = 0; $i < count($res); $i++) {
  9042. if($res[$i]['cRespDept']===''){
  9043. $res[$i]['cRespDept']='外协单位';
  9044. }
  9045. if($res[$i]['cRespDept']===null){
  9046. $res[$i]['cRespDept']='全部';
  9047. }
  9048. $list[$res[$i]['cRespDept']][] = $res[$i]['cReasonPName'];
  9049. }
  9050. array_multisort($list, SORT_DESC);
  9051. $result = [];
  9052. $i = 0;
  9053. foreach ($list as $k => $v) {
  9054. // $result[$i]['部门'] = $k;
  9055. // $result[$i]['投诉次数'] = count($v);
  9056. // $result[$i]['合并原因'] = '';
  9057. $result[$k]='';
  9058. foreach ($v as $key => $value) {
  9059. if ($value == null) {
  9060. unset($v[$key]);
  9061. }
  9062. }
  9063. foreach (array_count_values($v) as $a => $b) {
  9064. // $result[$i]['合并原因'] .= $a . $b . '/';
  9065. $result[$k] .= $a . $b . '/';
  9066. }
  9067. // $result[$i]['合并原因'] = substr($result[$i]['合并原因'], 0, -1);
  9068. $result[$k] = substr($result[$k], 0, -1);
  9069. $i++;
  9070. }
  9071. foreach($res1 as $k=>$v){
  9072. if($v['部门']!==null)$res1[$k]['合并原因']=$result[$v['部门']];
  9073. if($v['部门']=='全部'){
  9074. $res1[$k]['投诉次数']=count($list['全部']);
  9075. }
  9076. }
  9077. // halt($res1);
  9078. $result=[];
  9079. $result['columns']=[
  9080. ['name'=>'部门','id'=>'bm','width'=>'18','textAlign'=>'left'],
  9081. ['name'=>'投诉次数','id'=>'tscs','width'=>'12','textAlign'=>'left'],
  9082. ['name'=>'合并原因','id'=>'hbyy','width'=>'58','textAlign'=>'left']
  9083. ];
  9084. $i=0;
  9085. foreach($res1 as $k=>$v){
  9086. $result['rows'][$i]['bm']=$v['部门'];
  9087. $result['rows'][$i]['tscs']=$v['投诉次数'];
  9088. $result['rows'][$i]['hbyy']=$v['合并原因'];
  9089. $i++;
  9090. }
  9091. $res=[];
  9092. $res['status']=0;
  9093. $res['msg']='';
  9094. $res['data']=$result;
  9095. $redis->set($redis_key, json_encode($res));
  9096. return json($res);
  9097. }
  9098. }
  9099. //质量问题一览表(按部门)->接口---》暂时用不到
  9100. public function bmzl(){
  9101. $redis=redis();
  9102. $redis_key = md5('bmzl_redis');
  9103. $redis_data = $redis->get($redis_key);
  9104. return $redis_data;
  9105. }
  9106. }