缓存 public function scztone_redis(){ $redis = redis(); $redis_key = md5('scztone_redis'); $sql = "SELECT dd.订单状态, dd.订单数, ROUND(dd.纸令数, 0) AS 纸令数, dd.册数, CAST(zd.已装册数 AS SIGNED) AS 已装册数, CAST(zd.未装册数 AS SIGNED) AS 未装册数, CAST(ys.已印纸令 AS SIGNED) AS 已印纸令, CAST(ys.未印纸令 AS SIGNED) AS 未印纸令 FROM (SELECT hz.订单状态, Count(hz.订单状态)订单数, Sum(hz.NZDLS) 纸令数, Sum(hz.NCS) 册数 FROM (SELECT a.CCYDH, a.CYJMC, a.CYJLX, a.DCYRQ, a.DJFRQ, a.CHY, zds.NCS, a.ICYDSTATE, CASE WHEN a.ICYDTYPE = 2 THEN '零活订单' WHEN a.ICYDTYPE = 1 THEN '书刊订单' ELSE '其他' END 订单类型, yss.NZDLS, CASE WHEN a.iCommited = 0 THEN '未提交,未审核' WHEN a.iCommited = 1 THEN '已审核,已提交生产' ELSE '其他' END 订单状态 FROM mcyd a LEFT JOIN (SELECT a1.CCYDH, a1.NZDLS, a1.iCommited FROM mcyd a1 WHERE a1.CHY <> '集团教材外')yss ON a.CCYDH = yss.CCYDH LEFT JOIN (SELECT a2.CCYDH, a2.NCS, a2.iCommited FROM mcyd a2 WHERE a2.CHY <> '集团教材外' AND a2.cdf <> '散装' AND a2.cdf <> '单片')zds ON a.CCYDH = zds.CCYDH WHERE a.ICYDID > 0 AND a.iCydState <> -1 AND a.lwcbs = 0 AND a.ICYDSTATE > -1 )hz GROUP BY hz.订单状态)dd LEFT JOIN (SELECT '已审核,已提交生产' AS 订单状态, Sum(hz.纸令) 纸令, Sum(hz.发外数量) 发外令数, Sum(hz.纸令) - Sum(hz.发外数量) 本厂应生产纸令, Sum(hz.已印) 已印纸令, Sum(hz.纸令) - Sum(hz.发外数量) - Sum(hz.已印) 未印纸令 FROM (SELECT hj.承印日期, hj.订单号, hj.印件名称, hj.开本, hj.订法, hj.业务单位名称, hj.印件类型, hj.活源, hj.纸令, hj.已印, hj.发外数量, hj.未印量 FROM (SELECT IFnull(LWCBS, 0) 完工, DATE_FORMAT(cyd.dCyrq, '%Y-%m-%d') AS 承印日期, cyd.ccydh AS 订单号, cyd.cyjmc AS 印件名称, cyd.czwkb 开本, cyd.cdf AS 订法, cyd.CYWDWMC AS 业务单位名称, cyd.CYJLX AS 印件类型, cyd.CHY AS 活源, cyd.NZDLS AS 纸令, yy.已印数 已印, IFnull(t.数量, 0) 发外数量, CASE WHEN cyd.nzdls - yy.已印数 - IFnull(t.数量, 0) < 20 THEN 0 ELSE Round(cyd.nzdls - yy.已印数 - IFnull(t.数量, 0), 0) END 未印量 FROM mcyd cyd LEFT JOIN (SELECT D3.订单号 AS 订单号, SUM(D3.已印纸令) AS 已印数 FROM ( SELECT a.ccydh AS 订单号, COALESCE(SUM( CASE WHEN c.dFinishsl > c.NGZL * 1.5 THEN c.dFinishsl / 2 ELSE c.dFinishsl END / 1000), 0) AS 已印纸令 FROM mcyd a LEFT JOIN ( SELECT cd.id, cd.icydid, cd.CDXMC, cd.csc, yscp.cyfa FROM scyddx cd LEFT JOIN YSCPDXXX yscp ON yscp.dxid = cd.id ) DX ON a.ICYDID = dx.ICYDID LEFT JOIN YSJZZYFK ZYFK ON DX.id = ZYFK.Cyddxid LEFT JOIN scydgy c ON a.ICYDID = c.ICYDID AND dx.CDXMC = c.CDXMC WHERE a.ICYDSTATE >= 0 AND a.icydid > 0 AND cyfa <> '' AND (cgymc = '平印' OR cgymc = '轮印') AND a.chy <> '集团教材外' GROUP BY a.ccydh, dx.CSC, cYm, a.cyjlx, cyfa, a.CZWKB ) D3 GROUP BY D3.订单号) yy ON yy.订单号 = cyd.CCYDH LEFT JOIN (SELECT hz.CCYDH, Sum(COALESCE(hz.发外纸令, hz.发外数量, 0))数量 FROM (SELECT fw.CHY, fw.CCYDH, Sum(fw.发外数量)发外数量, fwx.发外纸令 FROM (SELECT w3.CHY, w3.ccydh, w12.cSccpMc, w12.cdxmc, w12.chjxmmc, w3.cyf, w3.NYYL 发外数量 FROM (SELECT w1.csccpbh, w2.cSccpMc, w1.cdw, w1.cdxmc, w1.chjxmmc, w2.csccj, w2.iCydId, w2.cKhmc, w1.fsl FROM ZBHJXM w1 LEFT JOIN SCCP w2 ON w1.SCCPID = w2.SCCPID AND bOutProcess = 1) w12 LEFT JOIN (SELECT a.icydid, dx.fZzl nyyl, a.chy, a.icydstate, a.ncs, a.CZWKB, a.dCyrq, a.CCPCC, dx.cyf, dx.CDXMC, CYJLX, CSC, a.ccydh FROM MCYD a LEFT JOIN (SELECT dd.fZzl fZzl, da.cdxmc, da.icydid, da.cyf cyf, da.csc csc FROM scyddx da LEFT JOIN (SELECT cp.CSCCJ, yscpdxxx .dxid, yscpdxxx .cdx, yscpdxxx .fzzl FROM YSCPDXXX yscpdxxx LEFT JOIN yscp cp ON cp.sccpid = yscpdxxx.yscpid WHERE ( csccj <> '轮转联动中心' AND csccj <> '平版印刷中心' ))dd ON dd.dxid = da.id) DX ON dx.ICYDID = a.ICYDID) W3 ON w12.icydid = w3.icydid AND LEFT(w12.chjxmmc, 1) = LEFT(W3.cyf, 1) AND w12.cdxmc = w3.CDXMC AND W3.ICYDSTATE <> '-1')fw LEFT JOIN (SELECT aa.ccydh, CASE WHEN Sum(aa.nfysl) = 0 THEN NULL ELSE Sum(aa.nfysl) END 发外纸令 FROM (SELECT LEFT(csccpbh, 10) ccydh, nfysl FROM ZbHjXm WHERE 1 = 1 AND ( cGymc = '印刷' OR cGymc = '平印' OR cGymc = '轮印' ) AND cGzzxmc = '' AND cdxmc <> '封面')aa LEFT JOIN (SELECT tt.ccydh, Sum(nfysl)nfysl FROM (SELECT LEFT(csccpbh, 10) ccydh, nfysl FROM ZbHjXm WHERE 1 = 1 AND ( cGymc LIKE '%联动' ) AND cGzzxmc = '')tt GROUP BY tt.ccydh)bb ON bb.ccydh = aa.ccydh GROUP BY aa.ccydh, bb.nfysl) fwx ON fw.CCYDH = fwx.ccydh GROUP BY fw.CHY, fw.CCYDH, fwx.发外纸令)hz GROUP BY hz.CCYDH) t ON t.ccydh = cyd.ccydh WHERE 1 = 1 AND ICYDSTATE > -1 AND cyd.CHY <> '集团教材外' AND cyd.lwcbs = 0 AND cyd.iCommited = 1)hj WHERE 1 = 1 /*Wheres*/ )hz)ys ON dd.订单状态 = ys.订单状态 LEFT JOIN (SELECT '已审核,已提交生产' AS 订单状态, Sum(hz.印数) 印数, Sum(hz.发外册数) 发外册数, Sum(hz.印数) - Sum(hz.发外册数) 本厂应装订册数, Sum(hz.装订数量) 已装册数, Sum(hz.印数) - Sum(hz.发外册数) - Sum(hz.装订数量) 未装册数 FROM (SELECT hj.承印日期, hj.订单号, hj.印件名称, hj.开本, hj.订法, hj.业务单位名称, hj.印件类型, hj.活源, hj.印数, hj.装订数量, hj.发外册数, hj.未装订数量 FROM (SELECT IFnull(LWCBS, 0) 完工, DATE_FORMAT(cyd.dCyrq, '%Y-%m-%d') AS 承印日期, cyd.ccydh AS 订单号, cyd.cyjmc AS 印件名称, cyd.czwkb 开本, cyd.cdf AS 订法, cyd.CYWDWMC AS 业务单位名称, cyd.CYJLX AS 印件类型, cyd.CHY AS 活源, cyd.ncs AS 印数, ( IFnull(nyzsl, 0) + IFnull(nyzsl2, 0) ) 装订数量, IFnull(t.发外册数, 0) 发外册数, CASE WHEN cyd.ncs - ( IFnull(nyzsl, 0) + IFnull(nyzsl2, 0) ) - IFnull(t.发外册数, 0) < 0 THEN 0 ELSE cyd.ncs - ( IFnull(nyzsl, 0) + IFnull(nyzsl2, 0) ) - IFnull(t.发外册数, 0) END 未装订数量 FROM mcyd cyd LEFT JOIN (SELECT mcyd.icydid, Sum(iWcl)AS nyzsl FROM cpjtfk LEFT JOIN mcyd ON mcyd.ICYDID = ID_CYD AND ( CASE WHEN mcyd.cdf = '无线胶订' OR mcyd.cdf = '索线胶订' THEN RIGHT(mcyd.cdf, 2) ELSE crwmc END ) = crwmc WHERE 1 = 1 AND ( crwmc = '胶订' OR crwmc = '骑马订' OR crwmc = '生产' ) GROUP BY mcyd.icydid) ZD ON cyd.ICYDID = ZD.ICYDID LEFT JOIN (SELECT mcyd.icydid, Sum(c. dfinishsl) AS nyzsl2 FROM SCYDGY c LEFT JOIN mcyd ON mcyd.ICYDID = c.icydid WHERE 1 = 1 AND ( c.cgymc = '胶订联动' OR c.cgymc = '骑马联动' OR c.cgymc = '精装联动' OR c.cgymc = '胶头' ) GROUP BY mcyd.icydid) ZD1 ON cyd.ICYDID = ZD1.ICYDID LEFT JOIN (SELECT hz.CCYDH, Sum(COALESCE(hz.发外册数, hz.册数, 0)) 发外册数 FROM (SELECT fw.CHY, fw.CCYDH, fw.册数, fwx.发外册数 FROM (SELECT w3.CHY, w3.ccydh, w12.cSccpMc, w12.cdxmc, w12.chjxmmc, w3.cyf, w3.ncs 册数 FROM (SELECT w1.csccpbh, w2.cSccpMc, w1.cdw, w1.cdxmc, w1.chjxmmc, w2.csccj, w2.iCydId, w2.cKhmc, w1.fsl FROM ZBHJXM w1 LEFT JOIN SCCP w2 ON w1.SCCPID = w2.SCCPID AND bOutProcess = 1) w12 LEFT JOIN (SELECT a.icydid, dx.fZzl nyyl, a.chy, a.icydstate, a.ncs, a.CZWKB, a.dCyrq, a.CCPCC, dx.cyf, dx.CDXMC, CYJLX, CSC, a.ccydh FROM MCYD a LEFT JOIN (SELECT dd.fZzl fZzl, da.cdxmc, da.icydid, da.cyf cyf, da.csc csc FROM scyddx da LEFT JOIN (SELECT cp.CSCCJ, yscpdxxx .dxid, yscpdxxx .cdx, yscpdxxx .fzzl FROM YSCPDXXX yscpdxxx LEFT JOIN yscp cp ON cp.sccpid = yscpdxxx.yscpid WHERE ( csccj <> '轮转联动中心' AND csccj <> '平版印刷中心' ))dd ON dd.dxid = da.id) DX ON dx.ICYDID = a.ICYDID) W3 ON w12.icydid = w3.icydid AND LEFT(w12.chjxmmc, 1) = LEFT(W3.cyf, 1) AND w12.cdxmc = w3.CDXMC AND W3.ICYDSTATE <> '-1')fw LEFT JOIN (SELECT bb.ccydh, CASE WHEN CAST(bb.nfysl AS SIGNED) = 0 THEN NULL ELSE CAST(bb.nfysl AS SIGNED) END AS 发外册数 FROM (SELECT tt.ccydh, Sum(nfysl)nfysl FROM (SELECT LEFT(csccpbh, 10) ccydh, nfysl FROM ZbHjXm WHERE 1 = 1 AND ( cGymc LIKE '%联动' ) AND cGzzxmc = '')tt GROUP BY tt.ccydh)bb GROUP BY bb.ccydh, bb.nfysl) fwx ON fw.CCYDH = fwx.ccydh GROUP BY fw.CHY, fw.CCYDH, fw.册数, fwx.发外册数)hz GROUP BY hz.CCYDH) t ON t.ccydh = cyd.ccydh WHERE 1 = 1 AND ICYDSTATE > -1 AND cyd.CHY <> '集团教材外' AND cyd.cdf <> '单片' AND cyd.cdf <> '散装' AND cyd.lwcbs = 0 AND cyd.iCommited = 1)hj WHERE 1 = 1 )hz)zd ON dd.订单状态 = zd.订单状态 "; $res=Db::query($sql); //将查询结果存入 Redis 缓存中 $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").' 存进去了'; return json($res); } //未提交未审核->接口 public function scwtj(){ $redis = redis(); $sczt_one = json_decode($redis->get(md5('scztone_redis')), true); // 初始化变量用于存放结果 $result = [ '未提交未审核订单' => 0, '未提交未审核纸令' => 0, '未提交未审核册数' => 0, ]; // 遍历第一个数组 foreach ($sczt_one as $va) { if ($va['订单状态'] == '未提交,未审核') { $result['未提交未审核订单'] = $va['订单数']; $result['未提交未审核纸令'] = $va['纸令数']; $result['未提交未审核册数'] = $va['册数']; } } // 格式化为新的数组格式,并将'name'替换为具体名称 $formattedResult = array_map(function ($key, $value) { return ['name' => ' ', 'value' => $value]; }, array_keys($result), $result); // 构造返回数据 $res = [ 'status' => 0, 'msg' => '', 'data' => $formattedResult, ]; // 返回JSON格式的结果 return json($res); } //已提交待生产->接口 public function scysh(){ $redis = redis(); $sczt_one = json_decode($redis->get(md5('scztone_redis')),true); $result = [ '已提交待生产订单' => 0, '已提交待生产纸令' => 0, '已提交待生产册数' => 0, ]; // 遍历第一个数组 foreach ($sczt_one as $va) { if ($va['订单状态'] == '已审核,已提交生产') { $result['已提交待生产订单'] = $va['订单数']; $result['已提交待生产纸令'] = $va['未印纸令']; $result['已提交待生产册数'] = $va['未装册数']; } } // 格式化为新的数组格式 $formattedResult = array_map(function ($key, $value) { return ['name' => ' ', 'value' => $value]; }, array_keys($result), $result); // 构造返回数据 $res = [ 'status' => 0, 'msg' => '', 'data' => $formattedResult, ]; // 返回JSON格式的结果 return json($res); } //已提交已生产->接口 public function sczsc(){ $redis = redis(); $sczt_one = json_decode($redis->get(md5('scztone_redis')),true); // 初始化变量用于存放结果 $result = [ '已提交已生产纸令' => 0, '已提交已生产册数' => 0, ]; // 遍历第一个数组 foreach ($sczt_one as $va) { if ($va['订单状态'] == '已审核,已提交生产') { $result['已提交已生产纸令'] = $va['已印纸令']; $result['已提交已生产册数'] = $va['已装册数']; } } // 格式化为新的数组格式 $formattedResult = array_map(function ($key, $value) { return ['name' => ' ', 'value' => $value]; }, array_keys($result), $result); // 构造返回数据 $res = [ 'status' => 0, 'msg' => '', 'data' => $formattedResult, ]; // 返回JSON格式的结果 return json($res); } /** * 原 */ //在线重点产品生产进度情况 缓存(暂时不用) public function zdcp_completion_redis_ssssss(){ $redis=redis(); $redis_key = md5('zdcp_completion_redis'); //--以下为昨日印刷数据 $sql = "SELECT CONVERT(a.dcyrq,CHAR(10)) 承印日期, a.zt 状态, a.tj, a.icydid, a.ccydh 订单编号, a.cyjlx 印件类型,a.Czlyq 质量要求, CONVERT(a.DJFRQ,CHAR(10)) 交付日期, a.NZWYZ 正文印张, a.cyjmc 印件名称, a.CYWDWMC 委印单位名称, a.CDF 订法, a.chy 活源, a.czwkb 正文开本, a.csc 色次, a.ncs 印数, a.zdzl 装订纸令, a.ydzl 已订令, a.NGZL, a.ydct 已订册数, a.wdct 未定册数, a.fm 封面, a.fmyy 封面已印, a.fmwy 封面未印, a.zw 正文, a.zwyy 正文已印, a.zwwy 正文未印, a.zw1, a.zwyy1, a.zwwy1, a.zw2, a.zwyy2, a.zwwy2, a.cy 插页, a.cyyy 插页已印, a.cywy 插页未印, a.hc 环衬, a.hcyy 环衬已印, a.hcwy 环衬未印, a.wy, a.wd, a.pt, a.出库数量 iAmount_Out, a.未发数量 nAmount from ( SELECT a.dcyrq, CASE WHEN a.iCommited = 0 THEN '未提交' WHEN a.LWCBS = '0' THEN '未完' ELSE '完成' END zt, a.iCommited tj, a.icydid, a.DJFRQ, a.NZWYZ, a.ccydh, a.cyjmc, a.CYWDWMC, a.CDF, a.chy, a.cyjlx, a.Czlyq, a.czwkb, m.csc, a.ncs, IFNULL(b.纸令数, 0) zdzl, CASE WHEN l.izdsl > 0 THEN CONVERT(IFNULL(b.纸令数, 0) * IFNULL(c.dFinishsl, 0) / l.izdsl,DECIMAL(10, 3)) ELSE 0 END ydzl, c.NGZL, IFNULL(c.dFinishsl, 0) ydct, c.NGZL - IFNULL(c.dFinishsl, 0) wdct, IFNULL(d.fLlyl, 0) fm, IFNULL(d.nzl, 0) fmyy, CASE WHEN IFNULL(d.fLlyl, 0) < IFNULL(d.nzl, 0) THEN 0 ELSE IFNULL(d.fLlyl, 0) - IFNULL(d.nzl, 0) END fmwy, IFNULL(e.fLlyl, 0) zw, IFNULL(e.nzl, 0) zwyy, CASE WHEN IFNULL(e.fLlyl, 0) < IFNULL(e.nzl, 0) THEN 0 ELSE IFNULL(e.fLlyl, 0) - IFNULL(e.nzl, 0) END zwwy, IFNULL(i.fLlyl1, 0) zw1, IFNULL(i.nzl1, 0) zwyy1, CASE WHEN IFNULL(i.fLlyl1, 0) < IFNULL(i.nzl1, 0) THEN 0 ELSE IFNULL(i.fLlyl1, 0) - IFNULL(i.nzl1, 0) END zwwy1, IFNULL(j.fLlyl2, 0) zw2, IFNULL(j.nzl2, 0) zwyy2, CASE WHEN IFNULL(j.fLlyl2, 0) < IFNULL(j.nzl2, 0) THEN 0 ELSE IFNULL(j.fLlyl2, 0) - IFNULL(j.nzl2, 0) END zwwy2, IFNULL(f.fLlyl, 0) cy, IFNULL(f.nzl, 0) cyyy, CASE WHEN IFNULL(f.fLlyl, 0) < IFNULL(f.nzl, 0) THEN 0 ELSE IFNULL(f.fLlyl, 0) - IFNULL(f.nzl, 0) END cywy, IFNULL(k.fLlyl, 0) hc, IFNULL(k.nzl, 0) hcyy, CASE WHEN IFNULL(k.fLlyl, 0) < IFNULL(k.nzl, 0) THEN 0 ELSE IFNULL(k.fLlyl, 0) - IFNULL(k.nzl, 0) END hcwy, IFNULL(g.fLlyl, 0) wy, IFNULL(h.fZhls, 0) wd, CASE WHEN c.NGZL - IFNULL(c.dFinishsl, 0) <= 1 THEN 4 WHEN IFNULL(e.fLlyl, 0) - IFNULL(e.nzl, 0) < 0.1 AND IFNULL(d.fLlyl, 0) - IFNULL(d.nzl, 0) < 0.1 AND IFNULL(f.fLlyl, 0) - IFNULL(f.nzl, 0) < 0.1 AND c.NGZL - IFNULL(c.dFinishsl, 0) > 10 THEN 1 WHEN IFNULL(e.fLlyl, 0) - IFNULL(e.nzl, 0) < 0.1 AND ( IFNULL(d.fLlyl, 0) - IFNULL(d.nzl, 0) >= 0.1 OR IFNULL(f.fLlyl, 0) - IFNULL(f.nzl, 0) >= 0.1 ) THEN 2 WHEN IFNULL(e.fLlyl, 0) - IFNULL(e.nzl, 0) >= 0.1 AND IFNULL(d.fLlyl, 0) - IFNULL(d.nzl, 0) < 0.1 AND IFNULL(f.fLlyl, 0) - IFNULL(f.nzl, 0) < 0.1 THEN 3 ELSE 0 END pt ,cast(case when CK.ncksl=0 then ck1.ncksl else ck.ncksl+IFNULL(ck1.ncksl,0) end as decimal (18,0)) as 出库数量, cast( a.ncs- case when CK.ncksl=0 then ck1.ncksl else ck.ncksl+IFNULL(ck1.ncksl,0) end as decimal (18,0))未发数量 FROM MCYD a LEFT JOIN (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 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, c.cName AS cPName, a.CYJLX, 1 AS iVers, c.cUnit, CASE WHEN a.LWCBS = 1 THEN 4 ELSE CASE WHEN a.iCommited = 1 THEN 3 ELSE a.ICYDSTATE END END AS iState, a.NCS AS nOrderAmount, 0 AS nOrderAmount_Sample, d.NSL AS iAmount, c.cSize, 0 AS nRang_num, 0 AS iAmount_Sample, b.iAmount AS iRang_MaxAmount, b.iAmount AS iRang_MinAmount, c.iTag_Group, c.ID AS ID_Request, IFNULL(op.nAmount_Notice, 0) AS nAmount_Notice, IFNULL(op.nAmount_Sample_Notice, 0) AS nAmount_Sample_Notice, 0 AS iAmount_S, IFNULL(op.nAmount_Out, 0) + 0 AS nAmount_Out, IFNULL(op.nAmount_Sample_Out, 0) AS nAmount_Sample_Out, '' AS cCustomerCode, '' AS cCustomerName, '' AS cCustomerUnit, '' AS cSaleIndex, CAST(d.LJSBS AS SIGNED INTEGER) AS LJSBS, a.CWYDH AS cCode_CBill, d.CQXMC AS cSaleName, d.cAreaCode, d.cAddress, d.cshr AS cLinkman, d.ctel, DZYWDW.cdwmc AS cClientName, a.IYWDWID AS ID_Client, 0 AS ID_LinkMan, d.ID AS ID_Address, a.IYWYID AS ID_Seller, a.CYWYXM AS cSeller, d.dfhrq AS dDate_Send, 0 AS iSign_FSC, '' AS cPayType, d.iState AS iSendState, a.DZDRQ AS CreateOrderDate, a.DJFRQ, d.mbz AS cRemark, CASE WHEN b.ID_Parent = 0 THEN 0 ELSE 1 END AS iChildFlag, b.ID_Parent, '' AS cRemark_Detail, b.nUnitPlanWeight, b.nActualWeight, CASE WHEN a.CBCYEAR <> '' THEN a.CBCYEAR + '年' ELSE '' END + CASE WHEN a.CBCmonth <> '' THEN a.CBCmonth + '月' ELSE '' END + CASE WHEN a.CBC <> '' THEN a.CBC + '版' ELSE '' END + CASE WHEN a.cYCyear <> '' THEN a.cYCyear + '年' ELSE '' END + CASE WHEN a.cYCmonth <> '' THEN a.cYCmonth + '月' ELSE '' END + CASE WHEN a.CYC <> '' THEN a.CYC + '次' ELSE '' END AS cBanCi, a.NYJDJ AS nPrice, a.CYJSH, a.NZWKB, IFNULL ((SELECT SUM(nje) AS Expr1 FROM SCYDGXHJ WHERE (iType = 2) AND (icydid = a.ICYDID)), 0) AS nFreight, 0 AS iIsCalc_Sample FROM MCYD AS a INNER JOIN qlOrderProduct AS b ON b.ID_Mcyd = a.ICYDID INNER JOIN qlAProduct AS c ON c.ID = b.ID_qlAProduct LEFT OUTER JOIN SCYDYSQX AS d ON d.ICYDID = a.ICYDID AND d.ID_qlOrderProduct = b.ID LEFT OUTER JOIN fnSaleOrderOutAmount AS op ON op.ID_SaleProductDetail = d.ID AND op.ID_scSaleOrder_Product = b.ID LEFT OUTER JOIN DZYWDW ON DZYWDW.iywdwid = a.IYWDWID WHERE (a.iCommited = 1) AND (a.ICYDSTATE <> - 1)) ck GROUP BY ck.cCode) CK ON a.ccydh=CK.cCode LEFT JOIN ( SELECT icydid, MIN(csc) csc FROM scyddx WHERE INSTR(CDXLXMC,'正文') > 0 GROUP BY icydid ) m ON m.icydid = a.icydid LEFT JOIN ( SELECT a.ICYDID, SUM(a.NZDLS) 纸令数 FROM SCYDDX a GROUP BY a.ICYDID ) b ON b.ICYDID = a.ICYDID LEFT JOIN ( SELECT a.cProductCode, SUM(a.nPAmount) ngzl, SUM(a.nCompleteAmount) dFinishsl FROM ( SELECT a.cProductCode, a.nPAmount, a.nCompleteAmount, c.cGymc 工序名称 FROM scMachineJob a INNER JOIN scMachineJobTech b ON b.ID_scMachineJob = a.ID INNER JOIN DZTECH c ON c.iGyid = b.ID_ATech WHERE c.cGymc IN ( '骑订联动','骑马联动' , '胶订联动','精装联动') ) a GROUP BY a.cProductCode ) c ON c.cProductCode = a.ccydh LEFT JOIN ( SELECT a.iCydId, a.CydDxlxMc, SUM(a.fLlyl) fLlyl, SUM(IFNULL(a.nzl, 0)) nzl FROM ( SELECT a.iCydid, b.cDx, b.CydDxlxMc, b.fLlyl, SUM(CASE WHEN job.nDeliverAmount > 0 THEN IFNULL(c.nzl, 0) * job.nStdAmount / job.nDeliverAmount ELSE 0 END) nzl FROM Yscp a INNER JOIN Yscpdxxx b ON b.YscpId = a.SccpId LEFT JOIN QL_Report_FeedBack_Day c ON c.iSccpID = a.sccpid AND INSTR(b.cDx,c.cCyddxMc) > 0 LEFT JOIN scMachineJob job ON job.id = c.iMJobID WHERE a.bOutProcess = 0 AND ( ( INSTR(b.CydDxlxMc,'封面') > 0 ) OR b.cDx LIKE '%封面合印%' ) AND A.ISCCPLX <> 9 GROUP BY a.iCydid, b.cDx, b.CydDxlxMc, b.fLlyl ) a GROUP BY a.ICYDID, a.CydDxlxMc ) d ON d.ICYDID = a.ICYDID LEFT JOIN ( SELECT a.iCydId, a.CydDxlxMc, SUM(a.fLlyl) fLlyl, SUM(IFNULL(a.nzl, 0)) nzl FROM ( SELECT a.iCydid, b.cDx, b.CydDxlxMc, b.fLlyl, SUM(CASE WHEN job.nDeliverAmount > 0 THEN IFNULL(c.nzl, 0) * job.nStdAmount / job.nDeliverAmount ELSE 0 END) nzl FROM Yscp a INNER JOIN Yscpdxxx b ON b.YscpId = a.SccpId LEFT JOIN QL_Report_FeedBack_Day c ON c.iSccpID = a.sccpid AND c.cCyddxMc = b.cDx LEFT JOIN scMachineJob job ON job.id = c.iMJobID WHERE a.bOutProcess = 0 AND ( INSTR(b.CydDxlxMc,'正文') > 0 ) AND A.ISCCPLX <> 9 GROUP BY a.iCydid, b.cDx, b.CydDxlxMc, b.fLlyl ) a GROUP BY a.ICYDID, a.CydDxlxMc ) e ON e.ICYDID = a.ICYDID LEFT JOIN ( SELECT a.iCydId, a.CydDxlxMc, SUM(a.fLlyl) fLlyl1, SUM(IFNULL(a.nzl, 0)) nzl1 FROM ( SELECT a.iCydid, b.cDx, b.CydDxlxMc, b.fLlyl, SUM(CASE WHEN job.nDeliverAmount > 0 THEN IFNULL(c.nzl, 0) * job.nStdAmount / job.nDeliverAmount ELSE 0 END) nzl FROM Yscp a INNER JOIN Yscpdxxx b ON b.YscpId = a.SccpId LEFT JOIN QL_Report_FeedBack_Day c ON c.iSccpID = a.sccpid AND c.cCyddxMc = b.cDx LEFT JOIN scMachineJob job ON job.id = c.iMJobID WHERE a.bOutProcess = 0 AND ( INSTR(b.CydDxlxMc,'正文') > 0 ) AND b.CYFA IN ( '彩平', '胶平' ) AND A.ISCCPLX <> 9 GROUP BY a.iCydid, b.cDx, b.CydDxlxMc, b.fLlyl ) a GROUP BY a.ICYDID, a.CydDxlxMc ) i ON i.ICYDID = a.ICYDID LEFT JOIN ( SELECT a.iCydId, a.CydDxlxMc, SUM(a.fLlyl) fLlyl2, SUM(IFNULL(a.nzl, 0)) nzl2 FROM ( SELECT a.iCydid, b.cDx, b.CydDxlxMc, b.fLlyl, SUM(CASE WHEN job.nDeliverAmount > 0 THEN IFNULL(c.nzl, 0) * job.nStdAmount / job.nDeliverAmount ELSE 0 END) nzl FROM Yscp a INNER JOIN Yscpdxxx b ON b.YscpId = a.SccpId LEFT JOIN QL_Report_FeedBack_Day c ON c.iSccpID = a.sccpid AND c.cCyddxMc = b.cDx LEFT JOIN scMachineJob job ON job.id = c.iMJobID WHERE a.bOutProcess = 0 AND ( INSTR(b.CydDxlxMc,'正文') > 0 ) AND b.CYFA IN ( '彩轮', '胶轮' ) AND A.ISCCPLX <> 9 GROUP BY a.iCydid, b.cDx, b.CydDxlxMc, b.fLlyl ) a GROUP BY a.ICYDID, a.CydDxlxMc ) j ON j.ICYDID = a.ICYDID LEFT JOIN ( SELECT a.iCydId, a.CydDxlxMc, SUM(a.fLlyl) fLlyl, SUM(IFNULL(a.nzl, 0)) nzl FROM ( SELECT a.iCydid, b.cDx, b.CydDxlxMc, b.fLlyl, SUM(CASE WHEN job.nDeliverAmount > 0 THEN IFNULL(c.nzl, 0) * job.nStdAmount / job.nDeliverAmount ELSE 0 END) nzl FROM Yscp a INNER JOIN Yscpdxxx b ON b.YscpId = a.SccpId LEFT JOIN QL_Report_FeedBack_Day c ON c.iSccpID = a.sccpid AND INSTR(b.cDx,c.cCyddxMc) > 0 LEFT JOIN scMachineJob job ON job.id = c.iMJobID WHERE a.bOutProcess = 0 AND ( b.CydDxlxMc = '插页' OR b.cDx LIKE '%插页合印%' ) AND A.ISCCPLX <> 9 GROUP BY a.iCydid, b.cDx, b.CydDxlxMc, b.fLlyl ) a GROUP BY a.ICYDID, a.CydDxlxMc ) f ON f.ICYDID = a.ICYDID LEFT JOIN ( SELECT a.iCydId, a.CydDxlxMc, SUM(a.fLlyl) fLlyl, SUM(IFNULL(a.nzl, 0)) nzl FROM ( SELECT a.iCydid, b.cDx, b.CydDxlxMc, b.fLlyl, SUM(CASE WHEN job.nDeliverAmount > 0 THEN IFNULL(c.nzl, 0) * job.nStdAmount / job.nDeliverAmount ELSE 0 END) nzl FROM Yscp a INNER JOIN Yscpdxxx b ON b.YscpId = a.SccpId LEFT JOIN QL_Report_FeedBack_Day c ON c.iSccpID = a.sccpid AND INSTR(b.cDx,c.cCyddxMc) > 0 LEFT JOIN scMachineJob job ON job.id = c.iMJobID WHERE a.bOutProcess = 0 AND ( b.CydDxlxMc = '环衬' OR b.cDx LIKE '%环衬合印%' ) AND A.ISCCPLX <> 9 GROUP BY a.iCydid, b.cDx, b.CydDxlxMc, b.fLlyl ) a GROUP BY a.ICYDID, a.CydDxlxMc ) k ON k.ICYDID = a.ICYDID LEFT JOIN ( SELECT a.iCydId, SUM(b.fLlyl) fLlyl FROM Yscp a INNER JOIN sccp c ON a.SccpId = c.SccpId INNER JOIN Yscpdxxx b ON b.YscpId = a.SccpId WHERE a.bOutProcess = 1 AND c.bZfbz = 0 GROUP BY a.iCydId ) g ON g.ICYDID = a.iCydId LEFT JOIN ( SELECT a.iCydid, SUM(a.fZhls) fZhls FROM Zdcp a WHERE bOutProcess = 1 GROUP BY iCydid ) h ON h.iCydid = a.iCydid LEFT JOIN ( SELECT a.iCydid, SUM(distinct a.izdsl) izdsl, SUM(distinct a.fZls) fzls FROM Zdcp a WHERE bOutProcess = 0 GROUP BY iCydid ) l ON l.iCydid = a.iCydid WHERE a.ICYDID > 0 AND a.icydState <> -1 -- AND a.CCYDH = '202306211S' and a.Czlyq='重点产品' ) a WHERE 1 = 1 and ((a.zt = '未完')) ORDER BY 承印日期 DESC -- 在线重点产品生产进度20231018 "; $res = Db::query($sql); if ($res) { $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").' 存进去了'; return $res; } } //在线重点产品生产进度情况 接口(暂时不用) public function zdcp_completion_ssssss(){ $redis=redis(); $list = json_decode($redis->get(md5('zdcp_completion_redis')), true); $result['columns']=[ ['name'=>'订单号','id'=>'ddh','width'=>'10','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'印件名称','id'=>'yjmc','width'=>'26','textAlign'=>'left'], ['name'=>'印数','id'=>'ys','width'=>'8','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'承印日期','id'=>'cyrq','width'=>'10','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'交付日期','id'=>'jfrq','width'=>'10','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'封面印刷完成率','id'=>'fmwcl','width'=>'10','autoWrap'=>"true",'textAlign'=>'center'], ['name'=>'正文印刷完成率','id'=>'zwysl','width'=>'10','autoWrap'=>"true",'textAlign'=>'center'], ['name'=>' 装 订 完成率','id'=>'zdwcl','width'=>'8','autoWrap'=>"true",'textAlign'=>'center'], ['name'=>' 发 货 完成率','id'=>'fhwcl','width'=>'8','autoWrap'=>"true",'textAlign'=>'center'] // ['name'=>'封面印刷','id'=>'fmwcl','width'=>'12','autoWrap'=>"true",'textAlign'=>'center','remark'=>'封面印刷完成率'], // ['name'=>'正文印刷','id'=>'zwysl','width'=>'12','autoWrap'=>"true",'textAlign'=>'center','remark'=>'正文印刷完成率'], // ['name'=>'装订','id'=>'zdwcl','width'=>'8','autoWrap'=>"true",'textAlign'=>'left','remark'=>'装订完成率'], // ['name'=>'发货','id'=>'fhwcl','width'=>'8','autoWrap'=>"true",'textAlign'=>'left','remark'=>'发货完成率'] ]; foreach($list as $k=>$v){ $result['rows'][$k]['ddh']=$v['订单编号']; $result['rows'][$k]['yjmc']=$v['印件名称']; $result['rows'][$k]['ys']=$v['印数']; $result['rows'][$k]['cyrq']=$v['承印日期']; $result['rows'][$k]['jfrq'] = $v['交付日期']; $result['rows'][$k]['fmwcl']=round(($v['封面']==0? 1 : $v['封面已印']/$v['封面'])*100).'%'; $result['rows'][$k]['zwysl']=round(($v['正文']==0? 1 : $v['正文已印']/$v['正文'])*100).'%'; $result['rows'][$k]['zdwcl']=round(($v['装订纸令']==0? 1 : $v['已订令']/$v['装订纸令'])*100).'%'; $result['rows'][$k]['fhwcl']=round(($v['印数']==0? 1 : $v['iAmount_Out']/$v['印数'])*100).'%'; $result['rows'][$k]['fmwcl']=substr($result['rows'][$k]['fmwcl'],0,-1)>100 ? '100%' : $result['rows'][$k]['fmwcl']; $result['rows'][$k]['zwysl']=substr($result['rows'][$k]['zwysl'],0,-1)>100 ? '100%' : $result['rows'][$k]['zwysl']; $result['rows'][$k]['zdwcl']=substr($result['rows'][$k]['zdwcl'],0,-1)>100 ? '100%' : $result['rows'][$k]['zdwcl']; $result['rows'][$k]['fhwcl']=substr($result['rows'][$k]['fhwcl'],0,-1)>100 ? '100%' : $result['rows'][$k]['fhwcl']; } $res['status']=0; $res['msg']=''; $res['data']=$result; return json($res); } /** * 现 */ //工作中心负荷 缓存 public function zdcp_completion_redis(){ $redis=redis(); $redis_key = md5('zdcp_completion_redis'); //--以下为昨日印刷数据 $sql = "SELECT /*CONVERT(VARCHAR(10), Getdate(), 23) 日期,*/ b.cGzzxMc 工作中心, a.cGymc 工序, Sum(a.nGzl) 已下达总量, Sum(a.dFinishsl) 已完成总量, Sum(nSyl + nPrepareAmount) 未完成量, CASE WHEN b.cBmmc = '轮转联动中心'THEN ( CASE WHEN b.cGzzxMc = '手工工作中心' THEN 0 ELSE b.iGzzxfh END ) * 24 ELSE( CASE WHEN b.cGzzxMc = '手工工作中心' THEN 0 ELSE b.iGzzxfh END ) * 20 END 日产能, CASE WHEN b.cGzzxMc = '手工工作中心' THEN '' ELSE ( CASE WHEN SUM(nSyl + nPrepareAmount) > 0 AND b.iGzzxfh > 0 THEN CONCAT( CAST(FLOOR(SUM(nSyl + nPrepareAmount) / b.iGzzxfh / 20) AS CHAR), '天', CAST(ROUND(SUM(nSyl + nPrepareAmount) / b.iGzzxfh - FLOOR(SUM(nSyl + nPrepareAmount) / b.iGzzxfh / 20) * 20) AS CHAR), '时' ) ELSE '' END ) END AS 生产天数 FROM (SELECT a.cGzzxBh, a.cGzzxMc, a.cBmmc, a.cGymc, a.nGzl, a.dFinishsl, a.nSyl, a.nPrepareTime * nRationValue nPrepareAmount, a.nAmountTime, a.nPrepareTime, a.nAmountTime + a.nPrepareTime nRemainTime FROM (SELECT GY.cGzzxBh, GY.cGzzxMc, Cp.cSccpBh, Cp.cSccpMc, GY.ngzl, Gy.dFinishsl, gy.CGYMC, Ord.CDF, Ord.NCS, Ord.nZWKB, Ord.cZWKB, Ord.DJFRQ, Obj.cDx, Obj.cSc, IFnull(scRation.cValue, GZzx.iGzzxfh) AS nRationValue, ( CASE WHEN NGZL > dFinishsl THEN NGZL - dFinishsl ELSE 0 END ) AS nSYL, CASE WHEN IFnull(scRation.cValue, GZzx.iGzzxfh) > 0 THEN ( ( CASE WHEN NGZL > dFinishsl THEN NGZL - dFinishsl ELSE 0 END ) / IFnull(scRation.cValue, GZzx.iGzzxfh) ) ELSE 0.00 END AS nAmountTime, CASE WHEN ( GY.dFinishsl < gy.NGZL ) AND ( gy.nPrepareTime > 0 ) THEN ( gy.NGZL - gy.dFinishsl ) / gy.NGZL * gy.nPrepareTime ELSE 0 END nPrepareTime, ( CASE GY.iType WHEN 20 THEN 1 WHEN 3 THEN 2 ELSE 0 END ) AS iTechState, GY.iScxh iScxh_Gy, GY.DQSRQ, gzzx.cBmmc, GY.DJSRQ, ( CASE WHEN GY.iScxh > 0 THEN 0 ELSE 1 END ) iScxh_L FROM SCYDGY GY INNER JOIN Sccp Cp ON GY.ISCCPID = Cp.SccpId INNER JOIN DZTECH Tech ON GY.IGYID = Tech.IGYID LEFT JOIN Yscpdxxx Obj ON GY.ISCCPID = Obj.YscpId AND GY.IDXID = Obj.DxId LEFT JOIN MCYD Ord ON GY.ICYDID = Ord.ICYDID INNER JOIN MKernel GZzx ON GY.cGzzxBh = GZzx.cBh LEFT JOIN (SELECT a.id_Parent, b.igyid_dzTech, a.cValue FROM scRation a INNER JOIN scRationDetail b ON b.id_scRation = a.ID) scRation ON scRation.id_Parent = Gzzx.ID AND scRation.igyid_dzTech = GY.iGyID WHERE ( Cp.bxdbz = 1 ) AND ( Cp.bWcbz = 0 ) AND ( Cp.bZfbz = 0 ) AND ( GY.iType IN ( 2, 3, 20 ) ) AND ( GY.iEndBz = 0 ) AND ( Cp.iSccpLx <> 5 ) AND ( GY.pid <> -1 ) AND gy.cGzzxBh IN( '069', '071', '081', '086', '087', '065', '066', '075', '076', '078', '079', '083', '084' )) a UNION /*ALL*/ SELECT a.cGzzxBh, a.cGzzxMc, a.cBmmc, a.CGYMC, a.nSyl, a.NGZL, a.dFinishsl, a.nPrepareTime * nRationValue nPrepareAmount, a.nAmountTime, a.nPrepareTime, a.nAmountTime + a.nPrepareTime nRemainTime FROM (SELECT GY.cGzzxBh, GY.cGzzxMc, Cp.cSccpBh, Cp.cSccpMc, gy.CGYMC, GY.ngzl, Gy.dFinishsl, Ord.CDF, Ord.NCS, Ord.nZWKB, Ord.cZWKB, Ord.DJFRQ, Obj.cDx, Obj.cSc, IFnull(scRation.cValue, GZzx.iGzzxfh) AS nRationValue, ( CASE WHEN NGZL > dFinishsl THEN NGZL - dFinishsl ELSE 0 END ) AS nSYL, CASE WHEN IFnull(scRation.cValue, GZzx.iGzzxfh) > 0 THEN ( ( CASE WHEN NGZL > dFinishsl THEN NGZL - dFinishsl ELSE 0 END ) / IFnull(scRation.cValue, GZzx.iGzzxfh) ) ELSE 0.00 END AS nAmountTime, CASE WHEN ( GY.dFinishsl < gy.NGZL ) AND ( gy.nPrepareTime > 0 ) THEN ( gy.NGZL - gy.dFinishsl ) / gy.NGZL * gy.nPrepareTime ELSE 0 END nPrepareTime, ( CASE GY.iType WHEN 20 THEN 1 WHEN 3 THEN 2 ELSE 0 END ) AS iTechState, GY.iScxh iScxh_Gy, gzzx.cBmmc, GY.DQSRQ, GY.DJSRQ, ( CASE WHEN GY.iScxh > 0 THEN 0 ELSE 1 END ) iScxh_L FROM YsBan INNER JOIN SCYDGY GY ON GY.ISCCPID = ysban.iSccpId AND GY.iPbId = YsBan.MBanID AND gy.ICYDID = YsBan.iCydId INNER JOIN Sccp Cp ON GY.ISCCPID = Cp.SccpId INNER JOIN DZTECH Tech ON GY.IGYID = Tech.IGYID LEFT JOIN Yscpdxxx Obj ON GY.ISCCPID = Obj.YscpId AND YsBan.YSBanID = Obj.DxId LEFT JOIN MCYD Ord ON GY.ICYDID = Ord.ICYDID INNER JOIN MKernel GZzx ON GY.cGzzxBh = GZzx.cBh LEFT JOIN (SELECT a.id_Parent, b.igyid_dzTech, a.cValue FROM scRation a INNER JOIN scRationDetail b ON b.id_scRation = a.ID) scRation ON scRation.id_Parent = Gzzx.ID AND scRation.igyid_dzTech = GY.iGyID WHERE ( Cp.bxdbz = 1 ) AND ( Cp.bWcbz = 0 ) AND ( Cp.bZfbz = 0 ) AND ( GY.iType IN ( 2, 3, 20 ) ) AND ( GY.iEndBz = 0 ) AND ( Cp.iSccpLx IN ( 5 ) ) AND ( GY.IDXID >= 0 ) AND ( GY.pid <> -1 ) AND Tech.cTechType = '印刷' AND gy.cGzzxBh IN( '069', '071', '081', '086', '087', '065', '066', '075', '076', '078', '079', '083', '084' )) a) a INNER JOIN Mkernel b ON b.cbh = a.cGzzxbh AND b.bgzfh = 1 GROUP BY a.cGzzxBh, b.cGzzxMc, b.cBmbh, b.cBmmc, a.CGYMC, b.iGzzxfh, a.cBmmc ORDER BY b.cBmmc DESC, a.cGzzxBh, a.CGYMC "; $res = Db::query($sql); if ($res) { $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").' 存进去了'; return $res; } } //工作中心负荷 接口 public function zdcp_completion(){ $redis=redis(); $list = json_decode($redis->get(md5('zdcp_completion_redis')), true); $result['columns']=[ ['name'=>'工作中心','id'=>'gzzx','width'=>'20','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'工序','id'=>'gx','width'=>'14','textAlign'=>'left'], ['name'=>'已下达总量','id'=>'yxdzl','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'已完成总量','id'=>'ywczl','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'未完成量','id'=>'jwwczl','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'日产能','id'=>'rcn','width'=>'14','autoWrap'=>"true",'textAlign'=>'center'], ['name'=>'生产天数','id'=>'scts','width'=>'14','autoWrap'=>"true",'textAlign'=>'center'], ]; foreach($list as $k=>$v){ $result['rows'][$k]['gzzx']=$v['工作中心']; $result['rows'][$k]['gx']=$v['工序']; $result['rows'][$k]['yxdzl']=$v['已下达总量']; $result['rows'][$k]['ywczl']=$v['已完成总量']; $result['rows'][$k]['jwwczl'] = $v['未完成量']; $result['rows'][$k]['rcn'] = $v['日产能']; $result['rows'][$k]['scts'] = $v['生产天数']; } $res['status']=0; $res['msg']=''; $res['data']=$result; return json($res); } //机台缓存【下面的三个机台汇总】缓存(暂时用不到) public function machine__redis(){ $redis=redis(); $redis_key = md5('machine__redis'); $sql = "SELECT * FROM(SELECT MKernel.cGzzxmc 工作中心, IFnull(Dev.cName, '') 机台名称, CASE WHEN Job.iStatus = '2' THEN '进行中' WHEN Job.iStatus = '1' THEN '已下达' WHEN Job.iStatus = '10' THEN '作业暂停' WHEN Job.iStatus = '20' THEN '下班挂起' ELSE '其他' END 状态, Row_number() OVER ( PARTITION BY Dev.cName ORDER BY CASE Dev.iType WHEN 2 THEN Dev.id ELSE Job.Id_Machine END, ischeduled DESC, CASE Job.iStatus WHEN 2 THEN 1 ELSE Job.iXH END, Job.iSubXH, Job.ID ) AS 序列, job.cJobCode 作业编号, job.cJobName 作业名称, job.cPartName 对象, ttATech.cName AS 工序, job.nDeliverAmount 工作量, DATE_FORMAT( job.dFactStart, '%Y-%m-%d %H:%i:%s' ) AS 开始时间, DATE_FORMAT( job.dFactEnd, '%Y-%m-%d %H:%i:%s' ) AS 完成时间, job.nPlanTime 计划用时, d.cPlanRemark 排产备注 FROM scMachineJob Job LEFT JOIN (SELECT iType, ID, cCode, cName, iGzzxId, ID_BM, cbmbh, cbmmc, cType_Sys, iStop, cType_Dev, cShortName, iTypeWage, iOverProductType FROM (SELECT 0 AS iType, MKernel.ID, MKernel.cBh AS cCode, MKernel.cGzzxmc AS cName, MKernel.ID AS iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, Mkernel.cGzzxlx AS cType_Sys, MKernel.iStopUse AS iStop, MKernel.cGzzxlx AS cType_Dev, MKernel.cShortName, 0 iTypeWage, 0 iOverProductType FROM MKernel INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh UNION SELECT 1 AS iType, dzyssb.ID, dzyssb.csbbh AS cCode, dzyssb.csbmc AS cName, Mkernel.ID AS iGzzxId, dzBM.id AS ID_BM, dzBM.cbmbh, dzBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, dzyssb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, dzyssb.cShortName, 0 iTypeWage, 0 iOverProductType FROM dzyssb INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh UNION SELECT 2 AS iType, MKerJzmb.ID, MKerJzmb.cJzbh AS cCode, MKerJzmb.cJzmc AS cName, MKerJzmb.iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, MKerJzmb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, MKerJzmb.cShortName, MKerJzmb.iType AS iTypeWage, MKerJzmb.iOverProductType FROM MKerJzmb INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid UNION SELECT 3 AS iType, iywdwid AS ID, cywdwbh AS cCode, cdwmc AS cName, iywdwid AS iGzzxId, iywdwid AS ID_BM, cywdwbh AS cbmbh, cdwmc AS cbmmc, '' AS cType_Sys, CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop, '' AS cType_Dev, DZYWDW.cjc AS cShortName, 0 iTypeWage, 0 iOverProductType FROM dzywdw WHERE bwjg = 1 UNION SELECT 3 AS iType, - 1, '', '外厂资源', - 1, - 1 AS ID_BM, '' AS cbmbh, '' AS cbmmc, '' AS cType_Sys, 0 AS iStop, '' AS cType_Dev, '外厂' AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType)scvDeviceAll WHERE (iStop = 0) ) Dev ON Dev.iType <> 3 AND Job.id_Machine = Dev.Id AND Job.iType_Res = 0 LEFT JOIN scMachineJobTech c ON c.ID_scMachineJob = Job.id AND c.iIndex = 1 LEFT JOIN sysTech ttATech ON ttATech.ID = c.ID_ATech LEFT JOIN scMachineJobRemark d ON d.ID_scMachineJob = Job.id LEFT JOIN MKernel ON MKernel.ID = Dev.iGzzxid WHERE 1 = 1 AND Job.iStatus IN( 2, 1, 10, 20 ) AND Job.iJobType IN ( 0, 4, 5 ) AND Job.iType_Res = 0 ORDER BY CASE Dev.iType WHEN 2 THEN Dev.id ELSE Job.Id_Machine END, ischeduled DESC, CASE Job.iStatus WHEN 2 THEN 1 ELSE Job.iXH END, Job.iSubXH, Job.ID ) aa WHERE 序列=1 "; $res = Db::query($sql); $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").'存进去了'; return $res; } //印刷机台实时生产进度->缓存 public function ys_schedule_redis(){ $redis=redis(); $redis_key = md5('ys_schedule_redis'); $sql = " SELECT Row_number() OVER ( PARTITION BY tb.机台名称 ORDER BY tb.状态 desc ) AS 排序, tb.* from (SELECT MKernel.cGzzxmc 工作中心, Ifnull(Dev.cName, '') 机台名称, CASE WHEN Job.iStatus = '2' THEN '进行中' WHEN Job.iStatus = '1' THEN '已排产' WHEN Job.iStatus = '10' THEN '作业暂停' WHEN Job.iStatus = '20' THEN '下班挂起' ELSE '其他' END 状态, Row_number() OVER ( PARTITION BY Dev.cName, Job.iStatus ORDER BY job.iXh) AS 序列, job.cJobCode 作业编号, job.cJobName 作业名称, job.cPartName 对象, ttATech.cName AS 工序, job.nDeliverAmount 工作量, CASE WHEN job.dFactStart = '1900-01-01 00:00:00' THEN NULL ELSE job.dFactStart END AS '开始时间', Cast(Timestampdiff(MINUTE, CASE WHEN job.dFactStart = '1900-01-01 00:00:00' THEN NULL ELSE job.dFactStart END, Now()) / 60.0 AS DECIMAL(18, 2)) AS '持续时间', job.nPlanTime 计划用时, d.cPlanRemark 排产备注 FROM scMachineJob Job LEFT JOIN (SELECT iType, ID, cCode, cName, iGzzxId, ID_BM, cbmbh, cbmmc, cType_Sys, iStop, cType_Dev, cShortName, iTypeWage, iOverProductType FROM (SELECT 0 AS iType, MKernel.ID, MKernel.cBh AS cCode, MKernel.cGzzxmc AS cName, MKernel.ID AS iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, Mkernel.cGzzxlx AS cType_Sys, MKernel.iStopUse AS iStop, MKernel.cGzzxlx AS cType_Dev, MKernel.cShortName, 0 iTypeWage, 0 iOverProductType FROM MKernel INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh UNION SELECT 1 AS iType, dzyssb.ID, dzyssb.csbbh AS cCode, dzyssb.csbmc AS cName, Mkernel.ID AS iGzzxId, dzBM.id AS ID_BM, dzBM.cbmbh, dzBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, dzyssb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, dzyssb.cShortName, 0 iTypeWage, 0 iOverProductType FROM dzyssb INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh UNION SELECT 2 AS iType, MKerJzmb.ID, MKerJzmb.cJzbh AS cCode, MKerJzmb.cJzmc AS cName, MKerJzmb.iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, MKerJzmb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, MKerJzmb.cShortName, MKerJzmb.iType AS iTypeWage, MKerJzmb.iOverProductType FROM MKerJzmb INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid UNION SELECT 3 AS iType, iywdwid AS ID, cywdwbh AS cCode, cdwmc AS cName, iywdwid AS iGzzxId, iywdwid AS ID_BM, cywdwbh AS cbmbh, cdwmc AS cbmmc, '' AS cType_Sys, CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop, '' AS cType_Dev, DZYWDW.cjc AS cShortName, 0 iTypeWage, 0 iOverProductType FROM dzywdw WHERE bwjg = 1 UNION SELECT 3 AS iType, -1, '', '外厂资源', -1, -1 AS ID_BM, '' AS cbmbh, '' AS cbmmc, '' AS cType_Sys, 0 AS iStop, '' AS cType_Dev, '外厂' AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType)scvDeviceAll WHERE ( iStop = 0 )) Dev ON Dev.iType <> 3 AND Job.id_Machine = Dev.Id AND Job.iType_Res = 0 LEFT JOIN scMachineJobTech c ON c.ID_scMachineJob = Job.id AND c.iIndex = 1 LEFT JOIN sysTech ttATech ON ttATech.ID = c.ID_ATech LEFT JOIN scMachineJobRemark d ON d.ID_scMachineJob = Job.id LEFT JOIN MKernel ON MKernel.ID = Dev.iGzzxid WHERE 1 = 1 AND Job.iStatus IN( 2, 1, 10, 20 ) AND Job.iJobType IN ( 0, 4, 5 ) AND Job.iType_Res = 0 -- AND Job.iStatus = '2' ) tb where tb.序列<=5 -- and tb.状态='进行中' -- and tb.机台名称='折页机05号' GROUP BY tb.工作中心, tb.机台名称, tb.状态, tb.序列, tb.作业编号, tb.作业名称, tb.对象, tb.工序, tb.工作量, tb.开始时间, tb.持续时间, tb.计划用时, tb.排产备注 "; //order by tb.排序,tb.机台名称 "; $res = Db::query($sql); if($res){ $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").'存进去了'; return $res; } } //折、配、锁、糊机台实时生产进度->缓存 public function zpsh_schedule_redis(){ $redis=redis(); $redis_key = md5('zpsh_schedule_redis'); $sql = "(SELECT Row_number() OVER ( PARTITION BY tb.机台名称 ORDER BY tb.状态 ) AS 排序, tb.* FROM (SELECT * FROM (SELECT MKernel.cGzzxmc 工作中心, IFnull(Dev.cName, '') 机台名称, CASE WHEN Job.iStatus = '2' THEN '进行中' WHEN Job.iStatus = '1' THEN '已排产' WHEN Job.iStatus = '10' THEN '作业暂停' WHEN Job.iStatus = '20' THEN '下班挂起' ELSE '其他' END 状态, Row_number() OVER ( PARTITION BY Dev.cName, Job.iStatus ORDER BY job.iXh) AS 序列, job.cJobCode 作业编号, job.cJobName 作业名称, job.cPartName 对象, ttATech.cName AS 工序, job.nDeliverAmount 工作量, CASE WHEN CAST(job.dFactStart AS DATETIME) = '1900-01-01 00:00:00' THEN NULL ELSE CAST(job.dFactStart AS DATETIME) END AS 开始时间, CAST( TIMESTAMPDIFF( MINUTE, CASE WHEN CAST(job.dFactStart AS DATETIME) = '1900-01-01 00:00:00' THEN NULL ELSE CAST(job.dFactStart AS DATETIME) END, NOW() ) / 60.0 AS DECIMAL(18, 2) ) AS 持续时间, job.nPlanTime 计划用时, d.cPlanRemark 排产备注 FROM scMachineJob Job LEFT JOIN ((SELECT iType, ID, cCode, cName, iGzzxId, ID_BM, cbmbh, cbmmc, cType_Sys, iStop, cType_Dev, cShortName, iTypeWage, iOverProductType FROM (SELECT 0 AS iType, MKernel.ID, MKernel.cBh AS cCode, MKernel.cGzzxmc AS cName, MKernel.ID AS iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, Mkernel.cGzzxlx AS cType_Sys, MKernel.iStopUse AS iStop, MKernel.cGzzxlx AS cType_Dev, MKernel.cShortName, 0 iTypeWage, 0 iOverProductType FROM MKernel INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh UNION SELECT 1 AS iType, dzyssb.ID, dzyssb.csbbh AS cCode, dzyssb.csbmc AS cName, Mkernel.ID AS iGzzxId, dzBM.id AS ID_BM, dzBM.cbmbh, dzBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, dzyssb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, dzyssb.cShortName, 0 iTypeWage, 0 iOverProductType FROM dzyssb INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh UNION SELECT 2 AS iType, MKerJzmb.ID, MKerJzmb.cJzbh AS cCode, MKerJzmb.cJzmc AS cName, MKerJzmb.iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, MKerJzmb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, MKerJzmb.cShortName, MKerJzmb.iType AS iTypeWage, MKerJzmb.iOverProductType FROM MKerJzmb INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid UNION SELECT 3 AS iType, iywdwid AS ID, cywdwbh AS cCode, cdwmc AS cName, iywdwid AS iGzzxId, iywdwid AS ID_BM, cywdwbh AS cbmbh, cdwmc AS cbmmc, '' AS cType_Sys, CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop, '' AS cType_Dev, DZYWDW.cjc AS cShortName, 0 iTypeWage, 0 iOverProductType FROM dzywdw WHERE bwjg = 1 UNION SELECT 3 AS iType, - 1, '', '外厂资源', - 1, - 1 AS ID_BM, '' AS cbmbh, '' AS cbmmc, '' AS cType_Sys, 0 AS iStop, '' AS cType_Dev, '外厂' AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType)scvDeviceAll WHERE (iStop = 0) ) ) Dev ON Dev.iType <> 3 AND Job.id_Machine = Dev.Id AND Job.iType_Res = 0 LEFT JOIN scMachineJobTech c ON c.ID_scMachineJob = Job.id AND c.iIndex = 1 LEFT JOIN sysTech ttATech ON ttATech.ID = c.ID_ATech LEFT JOIN scMachineJobRemark d ON d.ID_scMachineJob = Job.id LEFT JOIN MKernel ON MKernel.ID = Dev.iGzzxid WHERE 1 = 1 AND Job.iStatus IN( 2, 1, 10, 20 ) AND Job.iJobType IN ( 0, 4, 5 ) AND Job.iType_Res = 0) tb WHERE tb.序列 <= 5 GROUP BY tb.工作中心, tb.机台名称, tb.状态, tb.序列, tb.作业编号, tb.作业名称, tb.对象, tb.工序, tb.工作量, tb.开始时间, tb.持续时间, tb.计划用时, tb.排产备注) tb)"; $res = Db::query($sql); if($res){ $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").'存进去了'; return $res; } } //装订机台实时生产进度->缓存 public function zd_schedule_redis(){ $redis=redis(); $redis_key = md5('zd_schedule_redis'); $sql = "(SELECT Row_number() OVER ( PARTITION BY tb.机台名称 ORDER BY tb.状态 ) AS 排序, tb.* FROM (SELECT * FROM (SELECT MKernel.cGzzxmc 工作中心, IFnull(Dev.cName, '') 机台名称, CASE WHEN Job.iStatus = '2' THEN '进行中' WHEN Job.iStatus = '1' THEN '已排产' WHEN Job.iStatus = '10' THEN '作业暂停' WHEN Job.iStatus = '20' THEN '下班挂起' ELSE '其他' END 状态, Row_number() OVER ( PARTITION BY Dev.cName, Job.iStatus ORDER BY job.iXh) AS 序列, job.cJobCode 作业编号, job.cJobName 作业名称, job.cPartName 对象, ttATech.cName AS 工序, job.nDeliverAmount 工作量, CASE WHEN CAST(job.dFactStart AS DATETIME) = '1900-01-01 00:00:00' THEN NULL ELSE CAST(job.dFactStart AS DATETIME) END AS 开始时间, CAST( TIMESTAMPDIFF( MINUTE, CASE WHEN CAST(job.dFactStart AS DATETIME) = '1900-01-01 00:00:00' THEN NULL ELSE CAST(job.dFactStart AS DATETIME) END, NOW() ) / 60.0 AS DECIMAL(18, 2) ) AS 持续时间, job.nPlanTime 计划用时, d.cPlanRemark 排产备注 FROM scMachineJob Job LEFT JOIN ((SELECT iType, ID, cCode, cName, iGzzxId, ID_BM, cbmbh, cbmmc, cType_Sys, iStop, cType_Dev, cShortName, iTypeWage, iOverProductType FROM (SELECT 0 AS iType, MKernel.ID, MKernel.cBh AS cCode, MKernel.cGzzxmc AS cName, MKernel.ID AS iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, Mkernel.cGzzxlx AS cType_Sys, MKernel.iStopUse AS iStop, MKernel.cGzzxlx AS cType_Dev, MKernel.cShortName, 0 iTypeWage, 0 iOverProductType FROM MKernel INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh UNION SELECT 1 AS iType, dzyssb.ID, dzyssb.csbbh AS cCode, dzyssb.csbmc AS cName, Mkernel.ID AS iGzzxId, dzBM.id AS ID_BM, dzBM.cbmbh, dzBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, dzyssb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, dzyssb.cShortName, 0 iTypeWage, 0 iOverProductType FROM dzyssb INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh UNION SELECT 2 AS iType, MKerJzmb.ID, MKerJzmb.cJzbh AS cCode, MKerJzmb.cJzmc AS cName, MKerJzmb.iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, MKerJzmb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, MKerJzmb.cShortName, MKerJzmb.iType AS iTypeWage, MKerJzmb.iOverProductType FROM MKerJzmb INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid UNION SELECT 3 AS iType, iywdwid AS ID, cywdwbh AS cCode, cdwmc AS cName, iywdwid AS iGzzxId, iywdwid AS ID_BM, cywdwbh AS cbmbh, cdwmc AS cbmmc, '' AS cType_Sys, CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop, '' AS cType_Dev, DZYWDW.cjc AS cShortName, 0 iTypeWage, 0 iOverProductType FROM dzywdw WHERE bwjg = 1 UNION SELECT 3 AS iType, - 1, '', '外厂资源', - 1, - 1 AS ID_BM, '' AS cbmbh, '' AS cbmmc, '' AS cType_Sys, 0 AS iStop, '' AS cType_Dev, '外厂' AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType)scvDeviceAll WHERE (iStop = 0) ) ) Dev ON Dev.iType <> 3 AND Job.id_Machine = Dev.Id AND Job.iType_Res = 0 LEFT JOIN scMachineJobTech c ON c.ID_scMachineJob = Job.id AND c.iIndex = 1 LEFT JOIN sysTech ttATech ON ttATech.ID = c.ID_ATech LEFT JOIN scMachineJobRemark d ON d.ID_scMachineJob = Job.id LEFT JOIN MKernel ON MKernel.ID = Dev.iGzzxid WHERE 1 = 1 AND Job.iStatus IN( 2, 1, 10, 20 ) AND Job.iJobType IN ( 0, 4, 5 ) AND Job.iType_Res = 0) tb WHERE tb.序列 <= 5 GROUP BY tb.工作中心, tb.机台名称, tb.状态, tb.序列, tb.作业编号, tb.作业名称, tb.对象, tb.工序, tb.工作量, tb.开始时间, tb.持续时间, tb.计划用时, tb.排产备注) tb)"; $res = Db::query($sql); if($res){ $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").'存进去了'; return $res; } } //印刷机台实时生产进度->接口 public function ys_schedule(){ $redis = redis(); $list = json_decode($redis->get(md5('ys_schedule_redis')), true); // 按排序顺序排序 usort($list, function($a, $b) { return $a['排序'] - $b['排序']; }); // 工作中心相同的,先按状态排序 $status_order = ['进行中', '已排产', '作业暂停', '下班挂起']; usort($list, function($a, $b) use ($status_order) { $work_center_cmp = strcmp($a['机台名称'], $b['机台名称']); if ($work_center_cmp === 0) { $status_cmp = array_search($a['状态'], $status_order) - array_search($b['状态'], $status_order); if ($status_cmp === 0) { return $a['排序'] - $b['排序']; } return $status_cmp; } return $work_center_cmp; }); $machineSerialData = Db::table("machineneserial")->where('status', 1)->select(); $machineSerials = array_column($machineSerialData, null, 'machinen_name'); $result = [ 'columns' => [ ['name' => '机台名称', 'id' => 'jtmc', 'width' => '19', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '作业编号', 'id' => 'zybh', 'width' => '18', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '作业名称', 'id' => 'zymc', 'width' => '32', 'textAlign' => 'left'], ['name' => '持续时间', 'id' => 'cxsj', 'width' => '14', 'textAlign' => 'left'], ['name' => '状态', 'id' => 'zt', 'width' => '12', 'textAlign' => 'left'], ['name' => '应交页子', 'id' => 'gzl', 'width' => '10', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '计划用时', 'id' => 'jhys', 'width' => '8', 'autoWrap' => "true", 'textAlign' => 'left'] ], 'rows' => [] ]; // 将 $list 转换为一个以 '机台名称' 为键的数组 $listIndexed = []; foreach ($list as $item) { if (!isset($listIndexed[$item['机台名称']])) { $listIndexed[$item['机台名称']] = []; } $listIndexed[$item['机台名称']][] = $item; } foreach ($machineSerials as $machineName => $v) { if (isset($listIndexed[$machineName])) { foreach ($listIndexed[$machineName] as $v1) { $result['rows'][] = [ 'jtmc' => $machineName, 'zt' => $v1['状态'], 'cxsj' => $v1['持续时间'], 'zybh' => $v1['作业编号'], 'zymc' => $v1['作业名称'], 'gzl' => round($v1['工作量'], 2), 'jhys' => round($v1['计划用时'], 2) ]; } } else { $result['rows'][] = [ 'jtmc' => $machineName, 'zt' => $v['status'] == 1 ? '未排产' : $v['status'], 'cxsj' => '', 'zybh' => '', 'zymc' => '', 'gzl' => '', 'jhys' => '' ]; } } // 不再需要 ksort 和 array_values,因为 $result['rows'] 已经是按顺序添加的 $res = ['status' => 0, 'msg' => '', 'data' => $result]; return json($res); } //折、配、锁、糊机台实时生产进度->接口 public function zpsh_schedule(){ $redis = redis(); $list = json_decode($redis->get(md5('zpsh_schedule_redis')), true); // 按排序顺序排序 usort($list, function($a, $b) { return $a['排序'] - $b['排序']; }); // 工作中心相同的,先按状态排序 $status_order = ['进行中', '已排产', '作业暂停', '下班挂起']; usort($list, function($a, $b) use ($status_order) { $work_center_cmp = strcmp($a['机台名称'], $b['机台名称']); if ($work_center_cmp === 0) { $status_cmp = array_search($a['状态'], $status_order) - array_search($b['状态'], $status_order); if ($status_cmp === 0) { return $a['排序'] - $b['排序']; } return $status_cmp; } return $work_center_cmp; }); $machineSerialData = Db::table("machineneserial")->where('status', 2)->select(); $machineSerials = array_column($machineSerialData, null, 'machinen_name'); $result = [ 'columns' => [ ['name' => '机台名称', 'id' => 'jtmc', 'width' => '19', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '作业编号', 'id' => 'zybh', 'width' => '18', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '作业名称', 'id' => 'zymc', 'width' => '32', 'textAlign' => 'left'], ['name' => '持续时间', 'id' => 'cxsj', 'width' => '14', 'textAlign' => 'left'], ['name' => '状态', 'id' => 'zt', 'width' => '12', 'textAlign' => 'left'], ['name' => '工作量 ', 'id' => 'gzl', 'width' => '12', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '计划用时', 'id' => 'jhys', 'width' => '8', 'autoWrap' => "true", 'textAlign' => 'left'] ], 'rows' => [] ]; // 将 $list 转换为一个以 '机台' 为键的数组的数组 $listIndexed = []; foreach ($list as $item) { if (!isset($listIndexed[$item['机台名称']])) { $listIndexed[$item['机台名称']] = []; } $listIndexed[$item['机台名称']][] = $item; } foreach ($machineSerials as $machineName => $v) { $serial = $v['serial']; if (isset($listIndexed[$machineName])) { foreach ($listIndexed[$machineName] as $v1) { $result['rows'][] = [ 'jtmc' => $v['machinen_name'], 'zt' => $v1['状态'], 'cxsj' => $v1['持续时间'], 'zybh' => $v1['作业编号'], 'zymc' => $v1['作业名称'], 'gzl' => round($v1['工作量'], 2), 'jhys' => round($v1['计划用时'], 2) ]; } } else { $result['rows'][] = [ 'jtmc' => $machineName, 'zt' => $v['status'] == 2 ? '未排产' : $v['status'], 'zybh' => '', 'zymc' => '', 'gzl' => '', 'jhys' => '', 'zt1' => '' // 添加这个字段,确保结构一致 ]; } } // 不再需要 ksort 和 array_values,因为 $result['rows'] 已经是按顺序添加的 $res = ['status' => 0, 'msg' => '', 'data' => $result]; return json($res); } //装订机台实时生产进度->接口 public function zd_schedule(){ $redis = redis(); $list = json_decode($redis->get(md5('zd_schedule_redis')), true); // 按排序顺序排序 usort($list, function($a, $b) { return $a['排序'] - $b['排序']; }); // 工作中心相同的,先按状态排序 $status_order = ['进行中', '已排产', '作业暂停', '下班挂起']; usort($list, function($a, $b) use ($status_order) { $work_center_cmp = strcmp($a['机台名称'], $b['机台名称']); if ($work_center_cmp === 0) { $status_cmp = array_search($a['状态'], $status_order) - array_search($b['状态'], $status_order); if ($status_cmp === 0) { return $a['排序'] - $b['排序']; } return $status_cmp; } return $work_center_cmp; }); $machineSerialData = Db::table("machineneserial")->where('status', 3)->select(); $machineSerials = array_column($machineSerialData, null, 'machinen_name'); $result = [ 'columns' => [ ['name' => '机台名称', 'id' => 'jtmc', 'width' => '19', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '作业编号', 'id' => 'zybh', 'width' => '18', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '作业名称', 'id' => 'zymc', 'width' => '32', 'textAlign' => 'left'], ['name' => '持续时间', 'id' => 'cxsj', 'width' => '14', 'textAlign' => 'left'], ['name' => '状态', 'id' => 'zt', 'width' => '12', 'textAlign' => 'left'], ['name' => '工作量 ', 'id' => 'gzl', 'width' => '12', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '计划用时', 'id' => 'jhys', 'width' => '8', 'autoWrap' => "true", 'textAlign' => 'left'] ], 'rows' => [] ]; // 将 $list 转换为一个以 '机台' 为键的数组的数组 $listIndexed = []; foreach ($list as $item) { if (!isset($listIndexed[$item['机台名称']])) { $listIndexed[$item['机台名称']] = []; } $listIndexed[$item['机台名称']][] = $item; } foreach ($machineSerials as $machineName => $v) { $serial = $v['serial']; if (isset($listIndexed[$machineName])) { foreach ($listIndexed[$machineName] as $v1) { $result['rows'][] = [ 'jtmc' => $v['machinen_name'], 'zt' => $v1['状态'], 'cxsj' => $v1['持续时间'], 'zybh' => $v1['作业编号'], 'zymc' => $v1['作业名称'], 'gzl' => round($v1['工作量'], 2), 'jhys' => round($v1['计划用时'], 2) ]; } } else { $result['rows'][] = [ 'jtmc' => $machineName, 'zt' => $v['status'] == 3 ? '未排产' : $v['status'], 'zybh' => '', 'zymc' => '', 'gzl' => '', 'jhys' => '', 'zt1' => '' // 添加这个字段,确保结构一致 ]; } } // 不再需要 ksort 和 array_values,因为 $result['rows'] 已经是按顺序添加的 $res = ['status' => 0, 'msg' => '', 'data' => $result]; return json($res); } /** * 第三屏第二页 机台生产效率看板 */ //饼状图分组【Bi根据饼状图分组轮播,柱状图机台变化】 public function machine_grouping() { $result = ['单双色印刷机台', '四色印刷机', '标规轮转印刷机', '大规轮转印刷机', '胶订联动线', '骑马精装联动线']; $data = [ "columns" => [ ["name" => "分组", "id" => "subsys"] ], "rows" => [] ]; foreach ($result as $value) { $data["rows"][] = ["subsys" => $value]; } $res = [ 'status' => 0, 'msg' => '', 'data' => $data ]; return json_encode($res, JSON_UNESCAPED_UNICODE); } //单双色印刷机台 缓存 public function dssj_scxl_redis(){ //设置redis缓存 $redis=redis(); $redis_key = md5('dssj_scxl_redis'); //查询近30天 $start_time = date('Y-m-d', strtotime('-30 days')); $end_time = date('Y-m-d', time()); //单双色机 $res1 = Db::query("SELECT '{$start_time}' 提交起始日期, '{$end_time}' 提交结束日期, DATEDIFF(DATE_ADD('{$end_time}',INTERVAL 1 day),'{$start_time}') AS 统计周期, TBU.机台名称, TBU.班组名称, (SELECT GROUP_CONCAT(DISTINCT aa.机长) FROM (SELECT TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期 FROM (SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期, TB1.机台名称, TB1.班组名称, TB1.机长 AS 机长 FROM (SELECT CASE WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day) ELSE ttt.dOnDuty END 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, DTp.cName 机长 FROM scDayRpt_Teams ttT LEFT JOIN scDayRpt_Teams_People DTP ON ttT.ID = DTP.ID_Teams AND DTP.cStation = '机长' WHERE ttt.nOutput_RZ > 0 GROUP BY ttt.dOnDuty, ttt.Name_Machine, ttt.Name_WorkGroup, DTp.cName)TB1 WHERE LEFT(TB1.机台名称, 3) = 'BB机' OR TB1.机台名称 IN ( '海德堡SM1号', '海德堡SM2号' ) GROUP BY TB1.生产日期, TB1.机台名称, TB1.班组名称, TB1.机长)TBU WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}' GROUP BY TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期 )aa WHERE aa.班组名称 = tbu.班组名称 ) AS 机长信息, Cast(Sum(TBU.班组产量) AS SIGNED) AS 实物总产量, Cast(Sum(TBU.有效工作时间 * TBU.定额 ) AS SIGNED) AS 折算后总产量, Sum(TBU.考核工作时间 * TBU.定额) AS 考核总产量, CASE WHEN Sum(TBU.有效工作时间 * TBU.定额 ) >= Sum(TBU.考核工作时间 * TBU.定额) THEN '1' ELSE '未完成' END AS 效率分析, Cast(Sum(TBU.有效工作时间) AS DECIMAL(6, 1)) AS 总工作时间, TBU.考核工作时间 * Count(*) AS 总应工作时间, Cast(Sum(TBU.班组产量) / ( TBU.考核工作时间 * Count(*) )AS SIGNED) AS 平均产量, Sum(TBU.定额) / Count(*) AS 平均定额, Count(*) AS 开机总次数, Sum(CASE WHEN TBU.效率分析 = '未完成' THEN 1 ELSE 0 END) AS 未完成次数, Sum(CASE WHEN TBU.效率分析 = '1' THEN 1 ELSE 0 END) AS 完成次数, Cast(Cast(Sum(CASE WHEN TBU.效率分析 = '1' THEN 1 ELSE 0 END)AS DECIMAL(5, 0)) / Count(*) AS DECIMAL(6, 4))AS 完成率 FROM (SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期, TB1.机台名称, 5500 定额, TB1.班组名称, Sum(TB1.实际工作时间) 实际工作时间, Sum(TB1.班组产量) 班组产量, Cast(Sum(TB1.班组产量) / 5500 AS DECIMAL(5, 2)) 产量折算时间, Sum(TB1.改墨次数) 改墨次数, Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(5, 2)) AS 改墨时间, Sum(TB1.上版块数) 上版块数, Cast(Sum(TB1.上版块数) * 10 / 60.00 AS DECIMAL(5, 2)) AS 上版时间, Sum(TB1.周保养时间) 周保养时间, Cast(Sum(TB1.班组产量) / 5500 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间, 10 AS 考核工作时间, CASE 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 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)) END AS 完成百分比, CASE WHEN Cast(Sum(TB1.班组产量) / 5500 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) >= 10 THEN '1' ELSE '未完成' END AS 效率分析 FROM (SELECT CASE WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day) ELSE ttt.dOnDuty END 生产日期, ttT.id, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, ttt.nOutput_RZ 班组产量, Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(5, 2)) 实际工作时间, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3)) ELSE 0 END) AS 周保养时间 FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar LEFT JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0 GROUP BY ttt.dOnDuty, ttt.Name_Machine, ttT.id, ttt.Name_WorkGroup, ttt.nOutput_RZ, ttt.iWorkingHours)TB1 WHERE LEFT(TB1.机台名称, 3) = 'BB机' OR TB1.机台名称 IN ( '海德堡SM1号', '海德堡SM2号' ) GROUP BY TB1.生产日期, TB1.机台名称, TB1.班组名称)TBU WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}' AND TBU.班组产量 > 0 GROUP BY TBU.机台名称, TBU.班组名称, TBU.考核工作时间 ORDER BY TBU.机台名称, TBU.班组名称 DESC"); foreach($res1 as $k=>$v){ $res[$k]['完成率']=round($v['完成率']*100); $res[$k]['班组名称']=$v['班组名称']; $res[$k]['开机总次数']=$v['开机总次数']; $res[$k]['完成次数']=$v['完成次数']; } $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").'机台生产效率单双色机、四色机缓存 存进去了'; return json($res); } //四色印刷机 缓存 public function ssj_scxl_redis(){ //设置redis缓存 $redis=redis(); $redis_key = md5('ssj_scxl_redis'); //查询近30天 $start_time = date('Y-m-d', strtotime('-30 days')); $end_time = date('Y-m-d', time()); //四色机 $res2 = Db::query("SELECT '{$start_time}' 提交起始日期, '{$end_time}' 提交结束日期, DATEDIFF(DATE_ADD('{$end_time}',INTERVAL 1 day),'{$start_time}') AS 统计周期, TBU.机台名称, TBU.班组名称, (SELECT GROUP_CONCAT(DISTINCT aa.机长) FROM (SELECT TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期 FROM (SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期, TB1.机台名称, TB1.班组名称, TB1.机长 AS 机长 FROM (SELECT CASE WHEN CONVERT(ttt.dOnDuty, CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day) ELSE ttt.dOnDuty END 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, DTp.cName 机长 FROM scDayRpt_Teams ttT LEFT JOIN scDayRpt_Teams_People DTP ON ttT.ID = DTP.ID_Teams AND DTP.cStation = '机长' WHERE ttt.nOutput_RZ > 0 GROUP BY ttt.dOnDuty, ttt.Name_Machine, ttt.Name_WorkGroup, DTp.cName)TB1 WHERE TB1.机台名称 IN ( '四色机02号机', '海德堡5+L 01号机', '海德堡01号机', '三菱机02号机', '三菱机01号机', '小森八色01号机', '小森八色02号机' ) GROUP BY TB1.生产日期, TB1.机台名称, TB1.班组名称, TB1.机长)TBU WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}' GROUP BY TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期 )aa WHERE aa.班组名称 = tbu.班组名称) AS 机长信息, Cast(Sum(TBU.班组产量) AS SIGNED) AS 实物总产量, Cast(Sum(TBU.有效工作时间* TBU.定额 ) AS SIGNED) AS 折算后总产量, Sum(TBU.考核工作时间 * TBU.定额) AS 考核总产量, CASE WHEN Sum(TBU.有效工作时间 ) >= Sum(TBU.考核工作时间 ) THEN '1' ELSE '未完成' END AS 效率分析, Cast(Sum(TBU.有效工作时间) AS DECIMAL(6, 1)) AS 总工作时间, TBU.考核工作时间 * Count(*) AS 总应工作时间, Cast(Sum(TBU.班组产量) / ( TBU.考核工作时间 * Count(*) )AS SIGNED) AS 平均产量, Sum(TBU.定额) / Count(*) AS 平均定额, Count(*) AS 开机总次数, Sum(CASE WHEN TBU.效率分析 = '未完成' THEN 1 ELSE 0 END) AS 未完成次数, Sum(CASE WHEN TBU.效率分析 = '1' THEN 1 ELSE 0 END) AS 完成次数, Cast(Cast(Sum(CASE WHEN TBU.效率分析 = '1' THEN 1 ELSE 0 END)AS DECIMAL(6, 0)) / Count(*) AS DECIMAL(5, 2))AS 完成率 FROM (SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期, TB1.机台名称, 8000 定额, TB1.班组名称, Sum(TB1.班组产量) 班组产量, Sum(TB1.实际工作时间) 实际工作时间, Cast(Sum(TB1.班组产量) / 8000 AS DECIMAL(5, 2)) 产量折算时间, Sum(TB1.改墨次数) 改墨次数, Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(5, 2)) AS 改墨时间, Sum(TB1.上版块数) 上版块数, Cast(Sum(TB1.上版块数) * 10 / 60.00 AS DECIMAL(5, 2)) AS 上版时间, Sum(TB1.周保养时间) 周保养时间, Cast(Sum(TB1.班组产量) / 8000 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间, 10 AS 考核工作时间, CASE 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 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)) END AS 完成百分比, CASE WHEN Cast(Sum(TB1.班组产量) / 8000 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) >= 10 THEN '1' ELSE '未完成' END AS 效率分析 FROM (SELECT CASE WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day) ELSE ttt.dOnDuty END 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, ttt.nOutput_RZ 班组产量, Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(5, 2)) 实际工作时间, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3)) ELSE 0 END) AS 周保养时间 -- 上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040 FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar left JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >=0 GROUP BY ttt.dOnDuty, ttt.Name_Machine, ttT.id, ttt.Name_WorkGroup, ttt.nOutput_RZ, ttt.iWorkingHours)TB1 WHERE TB1.机台名称 IN( '四色机02号机', '海德堡5+L 01号机', '海德堡01号机', '三菱机02号机', '三菱机01号机' ) GROUP BY TB1.生产日期, TB1.机台名称, TB1.班组名称 UNION ALL SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期, TB1.机台名称, 7000 定额, TB1.班组名称, Sum(TB1.班组产量) 班组产量, Sum(TB1.实际工作时间) 实际工作时间, Cast(Sum(TB1.班组产量) / 7000 AS DECIMAL(5, 3)) 产量折算时间, Sum(TB1.改墨次数) 改墨次数, Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(5, 3)) AS 改墨时间, Sum(TB1.上版块数) 上版块数, Cast(Sum(TB1.上版块数) * 10 / 60.00 AS DECIMAL(5, 3)) AS 上版时间, Sum(TB1.周保养时间) 周保养时间, Cast(Sum(TB1.班组产量) / 7000 AS DECIMAL(5, 3)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间, 10 AS 考核工作时间, CASE 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 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)) END AS 完成百分比, CASE WHEN Cast(Sum(TB1.班组产量) / 7000 AS DECIMAL(5, 3)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) >= 10 THEN '1' ELSE '未完成' END AS 效率分析 FROM (SELECT CASE WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day) ELSE ttt.dOnDuty END 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, ttt.nOutput_RZ 班组产量, Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(5, 2)) 实际工作时间, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3)) ELSE 0 END) AS 周保养时间 -- 上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040 FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar LEFT JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0 GROUP BY ttt.dOnDuty, ttt.Name_Machine, ttT.id, ttt.iWorkingHours, ttt.Name_WorkGroup, ttt.nOutput_RZ)TB1 WHERE TB1.机台名称 = '小森八色01号机' GROUP BY TB1.生产日期, TB1.机台名称, TB1.班组名称 UNION ALL SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期, TB1.机台名称, 10000 定额, TB1.班组名称, Sum(TB1.班组产量) 班组产量, Sum(TB1.实际工作时间) 实际工作时间, Cast(Sum(TB1.班组产量) / 10000 AS DECIMAL(5, 2)) 产量折算时间, Sum(TB1.改墨次数) 改墨次数, Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(5, 2)) AS 改墨时间, Sum(TB1.上版块数) 上版块数, Cast(Sum(TB1.上版块数) * 2.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间, Sum(TB1.周保养时间) 周保养时间, Cast(Sum(TB1.班组产量) / 10000 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 2.5 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间, 12 AS 考核工作时间, 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 完成百分比, CASE WHEN Cast(Sum(TB1.班组产量) / 10000 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 2.5 / 60.00 + Sum(TB1.周保养时间) >= 12 THEN '1' ELSE '未完成' END AS 效率分析 FROM (SELECT CASE WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day) ELSE ttt.dOnDuty END 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, ttt.nOutput_RZ 班组产量, Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(5, 2)) 实际工作时间, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3)) ELSE 0 END) AS 周保养时间 FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar LEFT JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0 GROUP BY ttt.dOnDuty, ttt.Name_Machine, ttT.id, ttt.iWorkingHours, ttt.Name_WorkGroup, ttt.nOutput_RZ)TB1 WHERE TB1.机台名称 = '小森八色02号机' GROUP BY TB1.生产日期, TB1.机台名称, TB1.班组名称 )TBU WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}' AND TBU.班组产量 > 0 GROUP BY TBU.机台名称, TBU.班组名称, TBU.考核工作时间 ORDER BY TBU.机台名称, TBU.班组名称 DESC "); foreach($res2 as $k=>$v){ $res[$k]['完成率']=round($v['完成率']*100); $res[$k]['班组名称']=$v['班组名称']; $res[$k]['开机总次数']=$v['开机总次数']; $res[$k]['完成次数']=$v['完成次数']; } $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").'机台生产效率单双色机、四色机缓存 存进去了'; return json($res); } //标规轮转印刷机 public function bglz_scxl_redis(){ //设置redis缓存 $redis=redis(); $redis_key = md5('bglz_scxl_redis'); //查询近30天 $start_time = date('Y-m-d', strtotime('-30 days')); $end_time = date('Y-m-d', time()); //标规轮转印刷机 $res5 = Db::query("SELECT '{$start_time}' 提交起始日期, '{$end_time}' 提交结束日期, DATEDIFF(DATE_ADD('{$end_time}',INTERVAL 1 day),'{$start_time}') AS 统计周期, TBU.机台名称, TBU.班组名称, (SELECT GROUP_CONCAT(DISTINCT aa.机长)FROM (SELECT TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期 FROM (SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期, TB1.机台名称, TB1.班组名称, TB1.机长 AS 机长 FROM (SELECT CASE WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day) ELSE ttt.dOnDuty END 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, DTp.cName 机长 FROM scDayRpt_Teams ttT LEFT JOIN scDayRpt_Teams_People DTP ON ttT.ID = DTP.ID_Teams AND DTP.cStation = '机长' WHERE ttt.nOutput_RZ > 0 GROUP BY ttt.dOnDuty, ttt.Name_Machine, ttt.Name_WorkGroup, DTp.cName)TB1 WHERE TB1.机台名称 IN ( '标规小森商轮1号', '标规小森商轮2号', '标规三菱商轮1号', '标规三菱商轮2号', '标规高斯轮转1号', '标规报轮1号', '标规204胶轮1号' ) GROUP BY TB1.生产日期, TB1.机台名称, TB1.班组名称, TB1.机长)TBU WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}' GROUP BY TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期 )aa WHERE aa.班组名称 = tbu.班组名称) AS 机长, Cast(Sum(TBU.班组产量) AS SIGNED) AS 实物总产量, Cast(Sum(TBU.考核工作时间 * TBU.定额 * TBU.完成百分比 / 100) AS SIGNED) AS 折算后总产量, Sum(TBU.考核工作时间 * TBU.定额) AS 考核总产量, CASE WHEN Cast(Sum(TBU.考核工作时间 * TBU.定额 * TBU.完成百分比 / 100) AS SIGNED) >= Sum(TBU.考核工作时间 * TBU.定额)THEN '1' ELSE '未完成' END AS 效率分析, Cast(Sum(TBU.有效工作时间) AS DECIMAL(6, 1)) AS 总工作时间, TBU.考核工作时间 * Count(*) AS 总应工作时间, Cast(Sum(TBU.班组产量) / ( TBU.考核工作时间 * Count(*) )AS SIGNED) AS 平均产量, Sum(TBU.定额) / Count(*) AS 平均定额, Count(*) AS 开机总次数, Sum(CASE WHEN TBU.效率分析 = '未完成' THEN 1 ELSE 0 END) AS 未完成次数, Sum(CASE WHEN TBU.效率分析 = '1' THEN 1 ELSE 0 END) AS 完成次数, Cast(Cast(Sum(CASE WHEN TBU.效率分析 = '1' THEN 1 ELSE 0 END)AS DECIMAL(2, 0)) / Count(*) AS DECIMAL(5, 2))AS 完成率 FROM (SELECT TBU2.机台名称, TBU2.班组名称, TBU2.生产日期, DATE_FORMAT(TBU2.生产日期,'%w') 备注, CASE WHEN ( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间) + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间) + Sum(TBU2.周保养时间) ) >= TBU2.考核工作时间 THEN '1' ELSE '未完成' END AS 效率分析, TBU2.定额, TBU2.考核工作时间, Sum(TBU2.班组产量) 班组产量, Sum(TBU2.产量折算时间) 产量折算时间, Sum(TBU2.改墨次数) 改墨次数, Sum(TBU2.改墨时间) 改墨时间, Sum(TBU2.改纸路次数) 改纸路次数, Sum(TBU2.改纸路时间) 改纸路时间, Sum(TBU2.上版块数) 上版块数, Sum(TBU2.上版时间) 上版时间, Sum(TBU2.周保养时间) 周保养时间, ( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间) + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间) + Sum(TBU2.周保养时间) ) AS 有效工作时间, Cast(( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间) + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间) + Sum(TBU2.周保养时间) ) / TBU2.考核工作时间 * 100 AS DECIMAL(5, 2)) 完成百分比 FROM (SELECT TB1.生产日期, TB1.机台名称, 14000 定额, TB1.班组名称, TB1.班组产量, Cast(TB1.班组产量 / 14000 AS DECIMAL(5, 2)) 产量折算时间, TB1.改墨次数, Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间, TB1.上版块数, Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间, TB1.改纸路次数 AS 改纸路次数, Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间, TB1.周保养时间, Cast(TB1.班组产量 / 14000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间, 12 AS 考核工作时间 FROM (SELECT CONVERT(ttt.drptdate,CHAR(10)) 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, ttt.nOutput_RZ 班组产量, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type ELSE 0 END) AS 改纸路次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2)) ELSE 0 END) AS 周保养时间 /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/ FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar LEFT JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0 /*iDayRptStatus=0未审核,iDayRptStatus=10为已审核,iDayRptStatus=-10为作废单*/ GROUP BY ttt.drptdate, ttt.Name_Machine, ttT.id, ttt.Name_WorkGroup, ttt.nOutput_RZ)TB1 WHERE TB1.机台名称 = '标规小森商轮1号' UNION ALL SELECT TB1.生产日期, TB1.机台名称, 18000 定额, TB1.班组名称, TB1.班组产量, Cast(TB1.班组产量 / 18000 AS DECIMAL(5, 2)) 产量折算时间, TB1.改墨次数, Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间, TB1.上版块数, Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间, TB1.改纸路次数 AS 改纸路次数, Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间, TB1.周保养时间, Cast(TB1.班组产量 / 18000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间, 12 AS 考核工作时间 FROM (SELECT CONVERT(ttt.drptdate,CHAR(10)) 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, ttt.nOutput_RZ 班组产量, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type ELSE 0 END) AS 改纸路次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2)) ELSE 0 END) AS 周保养时间 /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/ FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar LEFT JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0 /*iDayRptStatus=0未审核,iDayRptStatus=10为已审核,iDayRptStatus=-10为作废单*/ GROUP BY ttt.drptdate, ttt.Name_Machine, ttt.ID, ttt.Name_WorkGroup, ttt.nOutput_RZ)TB1 WHERE TB1.机台名称 = '标规小森商轮1号' UNION ALL SELECT TB1.生产日期, TB1.机台名称, 20000 定额, TB1.班组名称, TB1.班组产量, Cast(TB1.班组产量 / 20000 AS DECIMAL(5, 2)) 产量折算时间, TB1.改墨次数, Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间, TB1.上版块数, Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间, TB1.改纸路次数 AS 改纸路次数, Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间, TB1.周保养时间, Cast(TB1.班组产量 / 20000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间, 12 AS 考核工作时间 FROM (SELECT CONVERT(ttt.drptdate,CHAR(10)) 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, ttt.nOutput_RZ 班组产量, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type ELSE 0 END) AS 改纸路次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2)) ELSE 0 END) AS 周保养时间 /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/ FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar LEFT JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0 GROUP BY ttt.drptdate, ttt.Name_Machine, ttt.ID, ttt.Name_WorkGroup, ttt.nOutput_RZ)TB1 WHERE TB1.机台名称 IN( '标规小森商轮2号', '标规三菱商轮1号', '标规三菱商轮2号', '标规204胶轮1号', '标规高斯轮转1号' ) UNION ALL SELECT TB1.生产日期, TB1.机台名称, 12000 定额, TB1.班组名称, TB1.班组产量, Cast(TB1.班组产量 / 12000 AS DECIMAL(5, 2)) 产量折算时间, TB1.改墨次数, Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间, TB1.上版块数, Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间, TB1.改纸路次数 AS 改纸路次数, Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间, TB1.周保养时间, Cast(TB1.班组产量 / 12000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间, 12 AS 考核工作时间 FROM (SELECT CONVERT(ttt.drptdate,CHAR(10)) 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, ttt.nOutput_RZ 班组产量, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type ELSE 0 END) AS 改纸路次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2)) ELSE 0 END) AS 周保养时间 FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar LEFT JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0 GROUP BY ttt.drptdate, ttt.Name_Machine, ttt.ID, ttt.Name_WorkGroup, ttt.nOutput_RZ)TB1 WHERE TB1.机台名称 IN( '标规高斯轮转1号', '标规报轮1号' ))TBU2 WHERE TBU2.生产日期 BETWEEN '{$start_time}' AND '{$end_time}' AND TBU2.班组产量 > 0 /*Wheres*/ GROUP BY TBU2.机台名称, TBU2.班组名称, TBU2.生产日期, TBU2.定额, TBU2.考核工作时间)TBU WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}' AND TBU.班组产量 > 0 GROUP BY TBU.机台名称, TBU.班组名称, TBU.考核工作时间 ORDER BY TBU.机台名称, TBU.班组名称 DESC "); foreach($res5 as $k=>$v){ $res[$k]['完成率']=round($v['完成率']*100); $res[$k]['班组名称']=$v['班组名称']; $res[$k]['开机总次数']=$v['开机总次数']; $res[$k]['完成次数']=$v['完成次数']; } $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").'轮转缓存 存进去了'; return json($res); } //大规轮转印刷机 public function dglz_scxl_redis(){ //设置redis缓存 $redis=redis(); $redis_key = md5('dglz_scxl_redis'); //查询近30天 $start_time = date('Y-m-d', strtotime('-30 days')); $end_time = date('Y-m-d', time()); //大规轮转印刷机 $res5 = Db::query("SELECT '{$start_time}' 提交起始日期, '{$end_time}' 提交结束日期, DATEDIFF(DATE_ADD('{$end_time}',INTERVAL 1 day),'{$start_time}') AS 统计周期, TBU.机台名称, TBU.班组名称, (SELECT GROUP_CONCAT(DISTINCT aa.机长)FROM (SELECT TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期 FROM (SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期, TB1.机台名称, TB1.班组名称, TB1.机长 AS 机长 FROM (SELECT CASE WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day) ELSE ttt.dOnDuty END 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, DTp.cName 机长 FROM scDayRpt_Teams ttT LEFT JOIN scDayRpt_Teams_People DTP ON ttT.ID = DTP.ID_Teams AND DTP.cStation = '机长' WHERE ttt.nOutput_RZ > 0 GROUP BY ttt.dOnDuty, ttt.Name_Machine, ttt.Name_WorkGroup, DTp.cName)TB1 WHERE TB1.机台名称 IN ( '大规三菱商轮1号', '大规小森商轮1号') GROUP BY TB1.生产日期, TB1.机台名称, TB1.班组名称, TB1.机长)TBU WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}' GROUP BY TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期 )aa WHERE aa.班组名称 = tbu.班组名称) AS 机长, Cast(Sum(TBU.班组产量) AS SIGNED) AS 实物总产量, Cast(Sum(TBU.考核工作时间 * TBU.定额 * TBU.完成百分比 / 100) AS SIGNED) AS 折算后总产量, Sum(TBU.考核工作时间 * TBU.定额) AS 考核总产量, CASE WHEN Cast(Sum(TBU.考核工作时间 * TBU.定额 * TBU.完成百分比 / 100) AS SIGNED) >= Sum(TBU.考核工作时间 * TBU.定额)THEN '1' ELSE '未完成' END AS 效率分析, Cast(Sum(TBU.有效工作时间) AS DECIMAL(6, 1)) AS 总工作时间, TBU.考核工作时间 * Count(*) AS 总应工作时间, Cast(Sum(TBU.班组产量) / ( TBU.考核工作时间 * Count(*) )AS SIGNED) AS 平均产量, Sum(TBU.定额) / Count(*) AS 平均定额, Count(*) AS 开机总次数, Sum(CASE WHEN TBU.效率分析 = '未完成' THEN 1 ELSE 0 END) AS 未完成次数, Sum(CASE WHEN TBU.效率分析 = '1' THEN 1 ELSE 0 END) AS 完成次数, Cast(Cast(Sum(CASE WHEN TBU.效率分析 = '1' THEN 1 ELSE 0 END)AS DECIMAL(2, 0)) / Count(*) AS DECIMAL(5, 2))AS 完成率 FROM (SELECT TBU2.机台名称, TBU2.班组名称, TBU2.生产日期, DATE_FORMAT(TBU2.生产日期,'%w') 备注, CASE WHEN ( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间) + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间) + Sum(TBU2.周保养时间) ) >= TBU2.考核工作时间 THEN '1' ELSE '未完成' END AS 效率分析, TBU2.定额, TBU2.考核工作时间, Sum(TBU2.班组产量) 班组产量, Sum(TBU2.产量折算时间) 产量折算时间, Sum(TBU2.改墨次数) 改墨次数, Sum(TBU2.改墨时间) 改墨时间, Sum(TBU2.改纸路次数) 改纸路次数, Sum(TBU2.改纸路时间) 改纸路时间, Sum(TBU2.上版块数) 上版块数, Sum(TBU2.上版时间) 上版时间, Sum(TBU2.周保养时间) 周保养时间, ( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间) + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间) + Sum(TBU2.周保养时间) ) AS 有效工作时间, Cast(( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间) + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间) + Sum(TBU2.周保养时间) ) / TBU2.考核工作时间 * 100 AS DECIMAL(5, 2)) 完成百分比 FROM (SELECT TB1.生产日期, TB1.机台名称, 14000 定额, TB1.班组名称, TB1.班组产量, Cast(TB1.班组产量 / 14000 AS DECIMAL(5, 2)) 产量折算时间, TB1.改墨次数, Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间, TB1.上版块数, Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间, TB1.改纸路次数 AS 改纸路次数, Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间, TB1.周保养时间, Cast(TB1.班组产量 / 14000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间, 12 AS 考核工作时间 FROM (SELECT CONVERT(ttt.drptdate,CHAR(10)) 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, ttt.nOutput_RZ 班组产量, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type ELSE 0 END) AS 改纸路次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2)) ELSE 0 END) AS 周保养时间 /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/ FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar LEFT JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0 /*iDayRptStatus=0未审核,iDayRptStatus=10为已审核,iDayRptStatus=-10为作废单*/ GROUP BY ttt.drptdate, ttt.Name_Machine, ttT.id, ttt.Name_WorkGroup, ttt.nOutput_RZ)TB1 WHERE TB1.机台名称 = '大规三菱商轮1号' UNION ALL SELECT TB1.生产日期, TB1.机台名称, 18000 定额, TB1.班组名称, TB1.班组产量, Cast(TB1.班组产量 / 18000 AS DECIMAL(5, 2)) 产量折算时间, TB1.改墨次数, Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间, TB1.上版块数, Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间, TB1.改纸路次数 AS 改纸路次数, Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间, TB1.周保养时间, Cast(TB1.班组产量 / 18000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间, 12 AS 考核工作时间 FROM (SELECT CONVERT(ttt.drptdate,CHAR(10)) 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, ttt.nOutput_RZ 班组产量, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type ELSE 0 END) AS 改纸路次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2)) ELSE 0 END) AS 周保养时间 /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/ FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar LEFT JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0 /*iDayRptStatus=0未审核,iDayRptStatus=10为已审核,iDayRptStatus=-10为作废单*/ GROUP BY ttt.drptdate, ttt.Name_Machine, ttt.ID, ttt.Name_WorkGroup, ttt.nOutput_RZ)TB1 WHERE TB1.机台名称 = '大规小森商轮1号' UNION ALL SELECT TB1.生产日期, TB1.机台名称, 20000 定额, TB1.班组名称, TB1.班组产量, Cast(TB1.班组产量 / 20000 AS DECIMAL(5, 2)) 产量折算时间, TB1.改墨次数, Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间, TB1.上版块数, Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间, TB1.改纸路次数 AS 改纸路次数, Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间, TB1.周保养时间, Cast(TB1.班组产量 / 20000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间, 12 AS 考核工作时间 FROM (SELECT CONVERT(ttt.drptdate,CHAR(10)) 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, ttt.nOutput_RZ 班组产量, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type ELSE 0 END) AS 改纸路次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2)) ELSE 0 END) AS 周保养时间 /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/ FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar LEFT JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0 GROUP BY ttt.drptdate, ttt.Name_Machine, ttt.ID, ttt.Name_WorkGroup, ttt.nOutput_RZ)TB1 WHERE TB1.机台名称 IN('大规小森商轮1号') UNION ALL SELECT TB1.生产日期, TB1.机台名称, 12000 定额, TB1.班组名称, TB1.班组产量, Cast(TB1.班组产量 / 12000 AS DECIMAL(5, 2)) 产量折算时间, TB1.改墨次数, Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间, TB1.上版块数, Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间, TB1.改纸路次数 AS 改纸路次数, Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间, TB1.周保养时间, Cast(TB1.班组产量 / 12000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间, 12 AS 考核工作时间 FROM (SELECT CONVERT(ttt.drptdate,CHAR(10)) 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, ttt.nOutput_RZ 班组产量, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type ELSE 0 END) AS 改纸路次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2)) ELSE 0 END) AS 周保养时间 FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar LEFT JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0 GROUP BY ttt.drptdate, ttt.Name_Machine, ttt.ID, ttt.Name_WorkGroup, ttt.nOutput_RZ)TB1 WHERE TB1.机台名称 IN( '大规三菱商轮1号', '大规小森商轮1号' ))TBU2 WHERE TBU2.生产日期 BETWEEN '{$start_time}' AND '{$end_time}' AND TBU2.班组产量 > 0 /*Wheres*/ GROUP BY TBU2.机台名称, TBU2.班组名称, TBU2.生产日期, TBU2.定额, TBU2.考核工作时间)TBU WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}' AND TBU.班组产量 > 0 GROUP BY TBU.机台名称, TBU.班组名称, TBU.考核工作时间 ORDER BY TBU.机台名称, TBU.班组名称 DESC "); foreach($res5 as $k=>$v){ $res[$k]['完成率']=round($v['完成率']*100); $res[$k]['班组名称']=$v['班组名称']; $res[$k]['开机总次数']=$v['开机总次数']; $res[$k]['完成次数']=$v['完成次数']; } $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").'轮转缓存 存进去了'; return json($res); } //胶订联动线 public function jdld_scxl_redis(){ //设置redis缓存 $redis=redis(); $redis_key = md5('jdld_scxl_redis'); //查询近30天 $start_time = date('Y-m-d', strtotime('-30 days')); $end_time = date('Y-m-d', time()); //胶订 $res4 = Db::query("SELECT '{$start_time}' 提交起始日期, '{$end_time}' 提交结束日期, DATEDIFF(DATE_ADD('{$end_time}',INTERVAL 1 day),'{$start_time}') AS 统计周期, TBU.机台名称, TBU.班组名称, -- TBU.机长, -- (SELECT GROUP_CONCAT(DISTINCT aa.机长)FROM (SELECT TBU.机台名称, -- TBU.班组名称, -- TBU.机长, -- TBU.生产日期 -- FROM (SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期, -- TB1.机台名称, -- TB1.班组名称 -- TB1.机长 AS 机长 -- FROM (SELECT CASE -- WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00' -- FROM sysetup -- WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(dOnDuty,INTERVAL -1 day) -- ELSE ttt.dOnDuty -- END 生产日期, -- ttt.Name_Machine 机台名称, -- ttt.Name_WorkGroup 班组名称, -- DTp.cName 机长 -- FROM scDayRpt_Teams ttT -- LEFT JOIN scDayRpt_Teams_People DTP -- ON ttT.ID = DTP.ID_Teams -- AND DTP.cStation = '机长' -- WHERE ttt.nOutput_RZ > 0 and ttt.dOnDuty BETWEEN '{$start_time}' AND '{$end_time}' -- GROUP BY ttt.dOnDuty, -- ttt.Name_Machine, -- ttt.Name_WorkGroup, -- DTp.cName)TB1 -- WHERE TB1.机台名称 IN ( '胶订潮流1号', '胶订潮流2号', '胶订潮流2号', '胶订精工1号', -- '胶订精密达1号', '胶订精密达2号' ) -- GROUP BY TB1.生产日期, -- TB1.机台名称, -- TB1.班组名称, -- TB1.机长)TBU -- WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}' -- GROUP BY TBU.机台名称, -- TBU.班组名称, -- TBU.机长, -- TBU.生产日期)aa -- WHERE aa.班组名称 = tbu.班组名称) AS 机长信息, Cast(Sum(TBU.班组产量) AS SIGNED) AS 总产量, Cast(Sum(TBU.有效工作时间) AS DECIMAL(6, 1)) AS 总工作时间, Sum(TBU.考核工作时间) AS 总应工作时间, Cast(Sum(TBU.班组产量) / ( Sum(TBU.考核工作时间) )AS SIGNED) AS 平均产量, Sum(TBU.定额) / Count(*) AS 平均定额, Count(*) AS 开机总次数, Sum(CASE WHEN TBU.效率分析 = '未完成' THEN 1 ELSE 0 END) AS 未完成次数, Sum(CASE WHEN TBU.效率分析 = '1' THEN 1 ELSE 0 END) AS 完成次数, Cast(Cast(Sum(CASE WHEN TBU.效率分析 = '1' THEN 1 ELSE 0 END)AS DECIMAL(2, 0)) / Count(*) AS DECIMAL(5, 2)) AS 完成率 FROM (SELECT TBU.机台名称, TBU.班组名称, TBU.生产日期, TBU.备注, CASE WHEN Sum(TBU.有效工作时间) >= TBU.考核工作时间 THEN '1' ELSE '未完成' END AS 效率分析, TBU.定额, TBU.考核工作时间, Sum(TBU.班组产量) 班组产量, Sum(TBU.产量折算工时) 产量折算工时, Sum(TBU.改规次数) 改规次数, Sum(TBU.改规时间) 改规时间, Sum(TBU.做零活时间) 做零活时间, Sum(TBU.周保养时间) 周保养时间, Sum(TBU.有效工作时间) 有效工作时间 FROM (SELECT TBU2.机台名称, TBU2.班组名称, TBU2.生产日期, TBU2.备注, TBU2.定额, TBU2.考核工时 考核工作时间, TBU2.班组产量, TBU2.产量折算工时, TBU2.改规次数, TBU2.改规时间, TBU2.做零活时间, TBU2.周保养时间, TBU2.有效工作时间 FROM (SELECT TBU.ID_Calendar, TBU.机台名称, TBU.班组名称, TBU.生产日期, TBU.备注, TBU.定额, IFNULL(AttFB2.班次时长, 10) 考核工时, Sum(TBU.班组产量) 班组产量, Sum(TBU.产量折算工时) 产量折算工时, IFNULL(ATTFB1.改规次数, 0) AS 改规次数, IFNULL(AttFB1.改规时间, 0) AS 改规时间, IFNULL(AttFB1.做零活时间, 0) 做零活时间, IFNULL(AttFB1.周保养时间, 0) 周保养时间, ( Sum(TBU.产量折算工时) + IFNULL(AttFB1.改规时间, 0) + IFNULL(AttFB1.做零活时间, 0) + IFNULL( AttFB1.周保养时间, 0) ) 有效工作时间 FROM (SELECT JobTB.ID ID_Calendar, JobTB.机台名称, JobTB.班组名称, JobTB.生产日期, DATE_FORMAT(JobTB.生产日期,'%W') 备注, Avg(JobTB.定额) 定额, Sum(JobTB.班组产量) 班组产量, Cast(Sum(产量折算工时) AS DECIMAL(5, 2)) 产量折算工时 FROM (SELECT ttFC.ID, CONVERT (dRealRptDate,CHAR(10)) 生产日期, TB2.ID_Teams, TB2.cJtmc 机台名称, CASE WHEN a.CZWKB LIKE '大16%' THEN ( CASE WHEN a.NZWYZ >= 9.75 THEN 4500 ELSE 7000 END ) ELSE ( CASE WHEN a.NZWYZ >= 9.75 THEN 4500 ELSE 7500 END ) END AS 定额, TB2.cName_Team 班组名称, ttFc.ID_TeamManRecord, ttTJ.cCode_ProductOrder AS cCode_ProductOrder, ttTJ.cCode_JobM AS cCode_JobM, ttTJ.cName_JobM AS cName_JobM, ttTj.cType_AProduct, a.NZWYZ, ttTJ.nOutput_R AS 班组产量, 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 产量折算工时 FROM scDayRpt_Teams_JobContent ttTJ INNER JOIN scmachinejob b ON b.ID = ttTJ.ID_JobM LEFT JOIN scFactoryCalendar ttFC ON ttTJ.id_scFactoryCalendar = ttFC.id LEFT JOIN (SELECT CONVERT(CONVERT(ttDRpt_T.dRealRptDate,CHAR(10)),DATETIME) dRealRptDate, ttT.cJtmc AS cJtmc, ttT.cBanzuMc AS cName_Team, ttT.cBmbh AS cBmbh, ttT.cBmmc AS cbmmc, ttDRpt_T.ID_WorkCenter, ttT.cGzzxmc AS cgzzxmc, tvD.cName AS cname, ttS.cName AS cName_S, ttDRpt_T.dOnDuty AS dStart, ttDRpt_T.dOffDuty AS dEnd, ttDRpt_T.nOutput_RZ AS nAmount_R, IFNULL(ttDRpt_T.iDayRptStatus, -1) AS iDayRptStatus, ttFC.ID AS ID_TC, IFNULL(ttDRpt_T.ID, -1) AS ID_TDRpt, ttDRpt_T.dstamp, ttDRpt_T.id AS ID_Teams FROM scFactoryCalendar ttFC LEFT JOIN scShift ttS ON ttS.ID = ttFC.id_scShift LEFT JOIN (SELECT *, CASE WHEN CONVERT(dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(dOnDuty,INTERVAL -1 DAY) ELSE dOnDuty END dRealRptDate FROM scDayRpt_Teams) ttDRpt_T ON ttDRpt_T.ID_Calendar = ttFC.ID AND ttDRpt_T.iDayRptStatus >= 0 LEFT JOIN banzu ttT ON ttT.banzuId = ttFC.id_Machine LEFT JOIN (SELECT iType, ID, cCode, cName, iGzzxId, ID_BM, cbmbh, cbmmc, cType_Sys, iStop, cType_Dev, cShortName, iTypeWage, iOverProductType FROM (SELECT 0 AS iType, MKernel.ID, MKernel.cBh AS cCode, MKernel.cGzzxmc AS cName, MKernel.ID AS iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, Mkernel.cGzzxlx AS cType_Sys, MKernel.iStopUse AS iStop, MKernel.cGzzxlx AS cType_Dev, MKernel.cShortName, 0 iTypeWage, 0 iOverProductType FROM MKernel INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh UNION SELECT 1 AS iType, dzyssb.ID, dzyssb.csbbh AS cCode, dzyssb.csbmc AS cName, Mkernel.ID AS iGzzxId, dzBM.id AS ID_BM, dzBM.cbmbh, dzBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, dzyssb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, dzyssb.cShortName, 0 iTypeWage, 0 iOverProductType FROM dzyssb INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh UNION SELECT 2 AS iType, MKerJzmb.ID, MKerJzmb.cJzbh AS cCode, MKerJzmb.cJzmc AS cName, MKerJzmb.iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, MKerJzmb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, MKerJzmb.cShortName, MKerJzmb.iType AS iTypeWage, MKerJzmb.iOverProductType FROM MKerJzmb INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid UNION SELECT 3 AS iType, iywdwid AS ID, cywdwbh AS cCode, cdwmc AS cName, iywdwid AS iGzzxId, iywdwid AS ID_BM, cywdwbh AS cbmbh, cdwmc AS cbmmc, '' AS cType_Sys, CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop, '' AS cType_Dev, DZYWDW.cjc AS cShortName, 0 iTypeWage, 0 iOverProductType FROM dzywdw WHERE bwjg = 1 UNION SELECT 3 AS iType, - 1, '', '外厂资源', - 1, - 1 AS ID_BM, '' AS cbmbh, '' AS cbmmc, '' AS cType_Sys, 0 AS iStop, '' AS cType_Dev, '外厂' AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType)scvDeviceAll WHERE (iStop = 0)) tvD ON tvD.ID = ttFC.ID_Parent AND tvD.iType IN ( 0, 1, 2 )) TB2 ON TB2.ID_Teams = ttTJ.ID_Teams LEFT JOIN MCYD a ON a.CCYDH = ttTJ.cCode_AProduct where dRealRptDate BETWEEN '{$this->start_time()}' AND '{$this->end_time()}')JobTB GROUP BY 生产日期, JobTB.ID, 机台名称, 班组名称) tbu LEFT JOIN(SELECT a.ID_Calendar, Sum(CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END) * 1 AS 改规时间, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2)) ELSE 0 END) AS 周保养时间, Sum(CASE WHEN a.cCode_Item = 'U0070' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3)) ELSE 0 END) AS 做零活时间 FROM sctMJobFeedBackDetail_AttFB a LEFT JOIN MCYD b ON a.cProductBillCode = b.CCYDH /*改规U0036,改规U0064,骑订改规矩U0075,骑订项目U0076,周保养U0040*/ GROUP BY ID_Calendar) AttFB1 ON TBU.ID_Calendar = AttFB1.ID_Calendar LEFT JOIN(SELECT ID_Calendar, 班次时长, 最晚时间 FROM (SELECT a.ID_Calendar, CASE WHEN a.cCode_Item = 'U0077' THEN Cast(a.nAmount_Item AS DECIMAL(4, 2)) ELSE 0 END AS 班次时长, a.dTime AS 最晚时间, Row_number() OVER ( PARTITION BY a.ID_Calendar ORDER BY a.dTime DESC) AS RowNumber FROM sctMJobFeedBackDetail_AttFB a WHERE a.cCode_Item = 'U0077') AS subquery WHERE RowNumber = 1) AttFB2 ON TBU.ID_Calendar = AttFB2.ID_Calendar GROUP BY TBU.ID_Calendar, TBU.机台名称, TBU.班组名称, TBU.生产日期, TBU.备注, TBU.定额, AttFB2.班次时长, AttFB1.做零活时间, AttFB1.周保养时间, ATTFB1.改规次数, AttFB1.改规时间) TBU2 WHERE TBU2.机台名称 LIKE '%胶订精密达%' GROUP BY TBU2.机台名称, TBU2.班组名称, TBU2.生产日期, TBU2.备注, TBU2.定额, TBU2.考核工时, TBU2.班组产量, TBU2.产量折算工时, TBU2.改规次数, TBU2.改规时间, TBU2.做零活时间, TBU2.周保养时间, TBU2.有效工作时间 UNION ALL SELECT TBU2.机台名称, TBU2.班组名称, TBU2.生产日期, TBU2.备注, TBU2.定额, TBU2.考核工时 考核工作时间, TBU2.班组产量, TBU2.产量折算工时, TBU2.改规次数, TBU2.改规时间, TBU2.做零活时间, TBU2.周保养时间, TBU2.有效工作时间 FROM (SELECT TBU.ID_Calendar, TBU.机台名称, TBU.班组名称, TBU.生产日期, TBU.备注, TBU.定额, IFNULL(AttFB2.班次时长, 10) 考核工时, Sum(TBU.班组产量) 班组产量, Sum(TBU.产量折算工时) 产量折算工时, IFNULL(ATTFB1.改规次数, 0) AS 改规次数, IFNULL(AttFB1.改规时间, 0) AS 改规时间, IFNULL(AttFB1.做零活时间, 0) 做零活时间, IFNULL(AttFB1.周保养时间, 0) 周保养时间, ( Sum(TBU.产量折算工时) + IFNULL(AttFB1.改规时间, 0) + IFNULL(AttFB1.做零活时间, 0) + IFNULL( AttFB1.周保养时间, 0) ) 有效工作时间 FROM (SELECT JobTB.ID ID_Calendar, JobTB.机台名称, JobTB.班组名称, JobTB.生产日期, DATE_FORMAT(JobTB.生产日期,'%W') 备注, Avg(JobTB.定额) 定额, Sum(班组产量) 班组产量, Cast(Sum(产量折算工时) AS DECIMAL(5, 2)) 产量折算工时 FROM (SELECT ttFC.ID, CONVERT (dRealRptDate,CHAR(10)) 生产日期, TB2.ID_Teams, TB2.cJtmc 机台名称, CASE WHEN a.CYJLX LIKE '%课本%' OR a.CYJLX LIKE'%教辅%' THEN 4500 ELSE 3000 END 定额, TB2.cName_Team 班组名称, -- TB2.机长 机长, ttFc.ID_TeamManRecord, ttTJ.cCode_ProductOrder AS cCode_ProductOrder, ttTJ.cCode_JobM AS cCode_JobM, ttTJ.cName_JobM AS cName_JobM, ttTj.cType_AProduct, a.CYJLX, ttTJ.nOutput_R AS 班组产量, CASE WHEN a.CYJLX LIKE'%课本%' OR a.CYJLX LIKE'%教辅%' THEN Cast(Round(ttTJ.nOutput_R / 4500, 3)AS DECIMAL(6, 3)) ELSE Cast(Round(ttTJ.nOutput_R / 3000, 3)AS DECIMAL(6, 3)) END AS 产量折算工时 FROM scDayRpt_Teams_JobContent ttTJ INNER JOIN scmachinejob b ON b.ID = ttTJ.ID_JobM LEFT JOIN scFactoryCalendar ttFC ON ttTJ.id_scFactoryCalendar = ttFC.id LEFT JOIN (SELECT CONVERT(CONVERT(ttDRpt_T.dRealRptDate,CHAR(10)),DATETIME) dRealRptDate, ttT.cJtmc AS cJtmc, ttT.cBanzuMc AS cName_Team, ttT.cBmbh AS cBmbh, ttT.cBmmc AS cbmmc, ttDRpt_T.ID_WorkCenter, ttT.cGzzxmc AS cgzzxmc, tvD.cName AS cname, ttS.cName AS cName_S, ttDRpt_T.dOnDuty AS dStart, ttDRpt_T.dOffDuty AS dEnd, ttDRpt_T.nOutput_RZ AS nAmount_R, IFNULL(ttDRpt_T.iDayRptStatus, -1) AS iDayRptStatus, ttFC.ID AS ID_TC, IFNULL(ttDRpt_T.ID, -1) AS ID_TDRpt, ttDRpt_T.dstamp, ttDRpt_T.id AS ID_Teams FROM scFactoryCalendar ttFC LEFT JOIN scShift ttS ON ttS.ID = ttFC.id_scShift LEFT JOIN (SELECT *, CASE WHEN CONVERT(dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(dOnDuty,INTERVAL -1 DAY) ELSE dOnDuty END dRealRptDate FROM scDayRpt_Teams) ttDRpt_T ON ttDRpt_T.ID_Calendar = ttFC.ID AND ttDRpt_T.iDayRptStatus >= 0 LEFT JOIN banzu ttT ON ttT.banzuId = ttFC.id_Machine LEFT JOIN (SELECT iType, ID, cCode, cName, iGzzxId, ID_BM, cbmbh, cbmmc, cType_Sys, iStop, cType_Dev, cShortName, iTypeWage, iOverProductType FROM (SELECT 0 AS iType, MKernel.ID, MKernel.cBh AS cCode, MKernel.cGzzxmc AS cName, MKernel.ID AS iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, Mkernel.cGzzxlx AS cType_Sys, MKernel.iStopUse AS iStop, MKernel.cGzzxlx AS cType_Dev, MKernel.cShortName, 0 iTypeWage, 0 iOverProductType FROM MKernel INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh UNION SELECT 1 AS iType, dzyssb.ID, dzyssb.csbbh AS cCode, dzyssb.csbmc AS cName, Mkernel.ID AS iGzzxId, dzBM.id AS ID_BM, dzBM.cbmbh, dzBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, dzyssb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, dzyssb.cShortName, 0 iTypeWage, 0 iOverProductType FROM dzyssb INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh UNION SELECT 2 AS iType, MKerJzmb.ID, MKerJzmb.cJzbh AS cCode, MKerJzmb.cJzmc AS cName, MKerJzmb.iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, MKerJzmb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, MKerJzmb.cShortName, MKerJzmb.iType AS iTypeWage, MKerJzmb.iOverProductType FROM MKerJzmb INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid UNION SELECT 3 AS iType, iywdwid AS ID, cywdwbh AS cCode, cdwmc AS cName, iywdwid AS iGzzxId, iywdwid AS ID_BM, cywdwbh AS cbmbh, cdwmc AS cbmmc, '' AS cType_Sys, CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop, '' AS cType_Dev, DZYWDW.cjc AS cShortName, 0 iTypeWage, 0 iOverProductType FROM dzywdw WHERE bwjg = 1 UNION SELECT 3 AS iType, - 1, '', '外厂资源', - 1, - 1 AS ID_BM, '' AS cbmbh, '' AS cbmmc, '' AS cType_Sys, 0 AS iStop, '' AS cType_Dev, '外厂' AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType)scvDeviceAll WHERE (iStop = 0)) tvD ON tvD.ID = ttFC.ID_Parent AND tvD.iType IN ( 0, 1, 2 )) TB2 ON TB2.ID_Teams = ttTJ.ID_Teams LEFT JOIN MCYD a ON a.CCYDH = ttTJ.cCode_AProduct where dRealRptDate BETWEEN '{$this->start_time()}' AND '{$this->end_time()}')JobTB GROUP BY 生产日期, JobTB.ID, 机台名称, 班组名称 ) tbu LEFT JOIN(SELECT a.ID_Calendar, Sum(CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END) * 0.75 AS 改规时间, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2)) ELSE 0 END) AS 周保养时间, Sum(CASE WHEN a.cCode_Item = 'U0070' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3)) ELSE 0 END) AS 做零活时间 FROM sctMJobFeedBackDetail_AttFB a LEFT JOIN MCYD b ON a.cProductBillCode = b.CCYDH /*改规U0036,改规U0064,骑订改规矩U0075,骑订项目U0076,周保养U0040*/ GROUP BY ID_Calendar) AttFB1 ON TBU.ID_Calendar = AttFB1.ID_Calendar LEFT JOIN(SELECT ID_Calendar, 班次时长, 最晚时间 FROM (SELECT a.ID_Calendar, CASE WHEN a.cCode_Item = 'U0077' THEN Cast(a.nAmount_Item AS DECIMAL(4, 2)) ELSE 0 END AS 班次时长, a.dTime AS 最晚时间, Row_number() OVER ( PARTITION BY a.ID_Calendar ORDER BY a.dTime DESC) AS RowNumber FROM sctMJobFeedBackDetail_AttFB a WHERE a.cCode_Item = 'U0077') AS subquery WHERE RowNumber = 1) AttFB2 ON TBU.ID_Calendar = AttFB2.ID_Calendar GROUP BY TBU.ID_Calendar, TBU.机台名称, TBU.班组名称, TBU.生产日期, TBU.备注, TBU.定额, AttFB2.班次时长, AttFB1.做零活时间, AttFB1.周保养时间, ATTFB1.改规次数, AttFB1.改规时间) TBU2 WHERE TBU2.机台名称 LIKE '%胶订精工%' GROUP BY TBU2.机台名称, TBU2.班组名称, TBU2.生产日期, TBU2.备注, TBU2.定额, TBU2.考核工时, TBU2.班组产量, TBU2.产量折算工时, TBU2.改规次数, TBU2.改规时间, TBU2.做零活时间, TBU2.周保养时间, TBU2.有效工作时间 UNION ALL SELECT TBU2.机台名称, TBU2.班组名称, TBU2.生产日期, TBU2.备注, TBU2.定额, TBU2.考核工时 考核工作时间, TBU2.班组产量, TBU2.产量折算工时, TBU2.改规次数, TBU2.改规时间, TBU2.做零活时间, TBU2.周保养时间, TBU2.有效工作时间 FROM (SELECT TBU.ID_Calendar, TBU.机台名称, TBU.班组名称, TBU.生产日期, TBU.备注, TBU.定额, IFNULL(AttFB2.班次时长, 10) 考核工时, Sum(TBU.班组产量) 班组产量, Sum(TBU.产量折算工时) 产量折算工时, IFNULL(ATTFB1.改规次数, 0) AS 改规次数, IFNULL(AttFB1.改规时间, 0) AS 改规时间, IFNULL(AttFB1.做零活时间, 0) 做零活时间, IFNULL(AttFB1.周保养时间, 0) 周保养时间, ( Sum(TBU.产量折算工时) + IFNULL(AttFB1.改规时间, 0) + IFNULL(AttFB1.做零活时间, 0) + IFNULL( AttFB1.周保养时间, 0) ) 有效工作时间 FROM (SELECT JobTB.ID ID_Calendar, JobTB.机台名称, JobTB.班组名称, JobTB.生产日期, DATE_FORMAT(JobTB.生产日期,'%W') 备注, Avg(JobTB.定额) 定额, Sum(班组产量) 班组产量, Cast(Sum(产量折算工时) AS DECIMAL(5, 2)) 产量折算工时 FROM (SELECT ttFC.ID, CONVERT (dRealRptDate,CHAR(10)) 生产日期, TB2.ID_Teams, TB2.cJtmc 机台名称, CASE WHEN a.CYJLX LIKE '%课本%' OR a.CYJLX LIKE'%教辅%' THEN 4500 ELSE 3000 END 定额, TB2.cName_Team 班组名称, ttFc.ID_TeamManRecord, ttTJ.cCode_ProductOrder AS cCode_ProductOrder, ttTJ.cCode_JobM AS cCode_JobM, ttTJ.cName_JobM AS cName_JobM, ttTj.cType_AProduct, a.CYJLX, ttTJ.nOutput_R AS 班组产量, CASE WHEN a.CYJLX LIKE'%课本%' OR a.CYJLX LIKE'%教辅%' THEN Cast(Round(ttTJ.nOutput_R / 4500, 3)AS DECIMAL(6, 3)) ELSE Cast(Round(ttTJ.nOutput_R / 3000, 3)AS DECIMAL(6, 3)) END AS 产量折算工时 FROM scDayRpt_Teams_JobContent ttTJ INNER JOIN scmachinejob b ON b.ID = ttTJ.ID_JobM LEFT JOIN scFactoryCalendar ttFC ON ttTJ.id_scFactoryCalendar = ttFC.id LEFT JOIN (SELECT CONVERT(CONVERT(ttDRpt_T.dRealRptDate,CHAR(10)),DATETIME) dRealRptDate, ttT.cJtmc AS cJtmc, ttT.cBanzuMc AS cName_Team, ttT.cBmbh AS cBmbh, ttT.cBmmc AS cbmmc, ttDRpt_T.ID_WorkCenter, ttT.cGzzxmc AS cgzzxmc, tvD.cName AS cname, ttS.cName AS cName_S, ttDRpt_T.dOnDuty AS dStart, ttDRpt_T.dOffDuty AS dEnd, ttDRpt_T.nOutput_RZ AS nAmount_R, IFNULL(ttDRpt_T.iDayRptStatus, -1) AS iDayRptStatus, ttFC.ID AS ID_TC, IFNULL(ttDRpt_T.ID, -1) AS ID_TDRpt, ttDRpt_T.dstamp, ttDRpt_T.id AS ID_Teams FROM scFactoryCalendar ttFC LEFT JOIN scShift ttS ON ttS.ID = ttFC.id_scShift LEFT JOIN (SELECT *, CASE WHEN CONVERT(dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(dOnDuty,INTERVAL -1 DAY) ELSE dOnDuty END dRealRptDate FROM scDayRpt_Teams) ttDRpt_T ON ttDRpt_T.ID_Calendar = ttFC.ID AND ttDRpt_T.iDayRptStatus >= 0 LEFT JOIN banzu ttT ON ttT.banzuId = ttFC.id_Machine LEFT JOIN (SELECT iType, ID, cCode, cName, iGzzxId, ID_BM, cbmbh, cbmmc, cType_Sys, iStop, cType_Dev, cShortName, iTypeWage, iOverProductType FROM (SELECT 0 AS iType, MKernel.ID, MKernel.cBh AS cCode, MKernel.cGzzxmc AS cName, MKernel.ID AS iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, Mkernel.cGzzxlx AS cType_Sys, MKernel.iStopUse AS iStop, MKernel.cGzzxlx AS cType_Dev, MKernel.cShortName, 0 iTypeWage, 0 iOverProductType FROM MKernel INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh UNION SELECT 1 AS iType, dzyssb.ID, dzyssb.csbbh AS cCode, dzyssb.csbmc AS cName, Mkernel.ID AS iGzzxId, dzBM.id AS ID_BM, dzBM.cbmbh, dzBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, dzyssb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, dzyssb.cShortName, 0 iTypeWage, 0 iOverProductType FROM dzyssb INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh UNION SELECT 2 AS iType, MKerJzmb.ID, MKerJzmb.cJzbh AS cCode, MKerJzmb.cJzmc AS cName, MKerJzmb.iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, MKerJzmb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, MKerJzmb.cShortName, MKerJzmb.iType AS iTypeWage, MKerJzmb.iOverProductType FROM MKerJzmb INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid UNION SELECT 3 AS iType, iywdwid AS ID, cywdwbh AS cCode, cdwmc AS cName, iywdwid AS iGzzxId, iywdwid AS ID_BM, cywdwbh AS cbmbh, cdwmc AS cbmmc, '' AS cType_Sys, CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop, '' AS cType_Dev, DZYWDW.cjc AS cShortName, 0 iTypeWage, 0 iOverProductType FROM dzywdw WHERE bwjg = 1 UNION SELECT 3 AS iType, - 1, '', '外厂资源', - 1, - 1 AS ID_BM, '' AS cbmbh, '' AS cbmmc, '' AS cType_Sys, 0 AS iStop, '' AS cType_Dev, '外厂' AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType)scvDeviceAll WHERE (iStop = 0)) tvD ON tvD.ID = ttFC.ID_Parent AND tvD.iType IN ( 0, 1, 2 )) TB2 ON TB2.ID_Teams = ttTJ.ID_Teams LEFT JOIN MCYD a ON a.CCYDH = ttTJ.cCode_AProduct where dRealRptDate BETWEEN '{$this->start_time()}' AND '{$this->end_time()}')JobTB GROUP BY 生产日期, JobTB.ID, 机台名称, 班组名称 ) tbu LEFT JOIN(SELECT a.ID_Calendar, Sum(CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END) * 0.67 AS 改规时间, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2)) ELSE 0 END) AS 周保养时间, Sum(CASE WHEN a.cCode_Item = 'U0070' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3)) ELSE 0 END) AS 做零活时间 FROM sctMJobFeedBackDetail_AttFB a LEFT JOIN MCYD b ON a.cProductBillCode = b.CCYDH /*改规U0036,改规U0064,骑订改规矩U0075,骑订项目U0076,周保养U0040*/ GROUP BY ID_Calendar) AttFB1 ON TBU.ID_Calendar = AttFB1.ID_Calendar LEFT JOIN(SELECT ID_Calendar, 班次时长, 最晚时间 FROM (SELECT a.ID_Calendar, CASE WHEN a.cCode_Item = 'U0077' THEN Cast(a.nAmount_Item AS DECIMAL(4, 2)) ELSE 0 END AS 班次时长, a.dTime AS 最晚时间, Row_number() OVER ( PARTITION BY a.ID_Calendar ORDER BY a.dTime DESC) AS RowNumber FROM sctMJobFeedBackDetail_AttFB a WHERE a.cCode_Item = 'U0077') AS subquery WHERE RowNumber = 1) AttFB2 ON TBU.ID_Calendar = AttFB2.ID_Calendar GROUP BY TBU.ID_Calendar, TBU.机台名称, TBU.班组名称, TBU.生产日期, TBU.备注, TBU.定额, AttFB2.班次时长, AttFB1.做零活时间, AttFB1.周保养时间, ATTFB1.改规次数, AttFB1.改规时间) TBU2 WHERE TBU2.机台名称 LIKE '%胶订潮流%' GROUP BY TBU2.机台名称, TBU2.班组名称, TBU2.生产日期, TBU2.备注, TBU2.定额, TBU2.考核工时, TBU2.班组产量, TBU2.产量折算工时, TBU2.改规次数, TBU2.改规时间, TBU2.做零活时间, TBU2.周保养时间, TBU2.有效工作时间)TBU GROUP BY TBU.机台名称, TBU.班组名称, TBU.生产日期, TBU.备注, TBU.定额, TBU.考核工作时间)TBU WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}' AND TBU.班组产量 > 0 GROUP BY TBU.机台名称, TBU.班组名称 ORDER BY TBU.机台名称, TBU.班组名称 DESC "); foreach($res4 as $k=>$v){ $res[$k]['完成率']=round($v['完成率']*100); $res[$k]['班组名称']=$v['班组名称']; $res[$k]['开机总次数']=$v['开机总次数']; $res[$k]['完成次数']=$v['完成次数']; } $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").'胶订联动缓存 存进去了'; return json($res); } //骑马精装联动线 public function qmjz_scxl_redis(){ //设置redis缓存 $redis=redis(); $redis_key = md5('qmjz_scxl_redis'); //查询近30天 $start_time = date('Y-m-d', strtotime('-30 days')); $end_time = date('Y-m-d', time()); //骑马 $res6 = Db::query("SELECT '{$start_time}' 提交起始日期, '{$end_time}' 提交结束日期, DATEDIFF(DATE_ADD('{$end_time}',INTERVAL 1 day),'{$start_time}') AS 统计周期, TBU.机台名称, TBU.班组名称, (SELECT GROUP_CONCAT(DISTINCT aa.机长) FROM (SELECT TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期 FROM (SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期, TB1.机台名称, TB1.班组名称, TB1.机长 AS 机长 FROM (SELECT CASE WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day) ELSE ttt.dOnDuty END 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, DTp.cName 机长 FROM scDayRpt_Teams ttT LEFT JOIN scDayRpt_Teams_People DTP ON ttT.ID = DTP.ID_Teams AND DTP.cStation = '机长' WHERE ttt.nOutput_RZ > 0 GROUP BY ttt.dOnDuty, ttt.Name_Machine, ttt.Name_WorkGroup, DTp.cName)TB1 WHERE TB1.机台名称 IN ( '骑马联动01号', '骑马联动02号', '骑马联动03号' ) GROUP BY TB1.生产日期, TB1.机台名称, TB1.班组名称, TB1.机长)TBU WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}' GROUP BY TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期)aa WHERE aa.班组名称 = tbu.班组名称) AS 机长, Cast(Sum(TBU.班组产量) AS SIGNED) AS 总产量, Cast(Sum(TBU.有效工作时间) AS DECIMAL(6, 1)) AS 总工作时间, Sum(TBU.考核工作时间) AS 总应工作时间, Cast(Sum(TBU.班组产量) / ( Sum(TBU.考核工作时间) )AS SIGNED) AS 平均产量, Sum(TBU.定额) / Count(*) AS 平均定额, Count(*) AS 开机总次数, Sum(CASE WHEN TBU.效率分析 = '未完成' THEN 1 ELSE 0 END) AS 未完成次数, Sum(CASE WHEN TBU.效率分析 = '1' THEN 1 ELSE 0 END) AS 完成次数, Cast(Cast(Sum(CASE WHEN TBU.效率分析 = '1' THEN 1 ELSE 0 END)AS DECIMAL(2, 0)) / Count(*) AS DECIMAL(5, 2)) AS 完成率 FROM ( SELECT TBU.机台名称, TBU.班组名称, TBU.生产日期, TBU.备注, CASE WHEN Sum(TBU.产量折算工时) + Sum(TBU.改规时间) + Sum(TBU.周保养时间) + Sum(TBU.做零活时间) >= TBU.考核工时 THEN '1' ELSE '未完成' END 效率分析, TBU.定额, TBU.考核工时 考核工作时间, Sum(TBU.班组产量) 班组产量, Sum(TBU.产量折算工时) 产量折算工时, Sum(TBU.改规次数) 改规次数, Sum(TBU.改规时间) 改规时间, Sum(TBU.做零活时间) 做零活时间, Sum(TBU.周保养时间) 周保养时间, Sum(TBU.产量折算工时) + Sum(TBU.改规时间) + Sum(TBU.周保养时间) + Sum(TBU.做零活时间) 有效工作时间, CASE WHEN Sum(TBU.产量折算工时) + Sum(TBU.改规时间) + Sum(TBU.周保养时间) + Sum(TBU.做零活时间) >= TBU.考核工时 THEN 100 ELSE Cast(( Sum(TBU.产量折算工时) + Sum(TBU.改规时间) + Sum(TBU.周保养时间) + Sum(TBU.做零活时间) ) / TBU.考核工时 * 100 AS DECIMAL (4, 2)) END 完成百分比 FROM (SELECT ttt.Name_Machine 机台名称, CONVERT(ttt.dRealRptDate,CHAR(10)) 生产日期, DATE_FORMAT(ttt.dRealRptDate,'%W') 备注, ttt.Name_WorkGroup 班组名称, CASE WHEN ttt.Name_Machine = '骑马联动01号' THEN 4000 WHEN ttt.Name_Machine = '骑马联动02号'THEN 4500 WHEN ttt.Name_Machine = '骑马联动03号'THEN 5000 ELSE 5000 END 定额, ttt.nOutput_RZ 班组产量, CASE WHEN ttt.Name_Machine = '骑马联动01号' THEN Cast(ttt.nOutput_RZ / 4000 AS DECIMAL(5, 1)) WHEN ttt.Name_Machine = '骑马联动02号'THEN Cast(ttt.nOutput_RZ / 4500 AS DECIMAL(5, 1)) WHEN ttt.Name_Machine = '骑马联动03号'THEN Cast(ttt.nOutput_RZ / 5000 AS DECIMAL(5, 1)) ELSE Cast(ttt.nOutput_RZ / 5000 AS DECIMAL(5, 1)) END 产量折算工时, IFNULL(AttFB2.班次时长, 10) 考核工时, Sum(CASE WHEN a.cCode_Item = 'U0075' THEN a.iReported ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0075' THEN a.iReported ELSE 0 END) * 0.5 AS 改规时间, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3)) ELSE 0 END) AS 周保养时间, Sum(CASE WHEN a.cCode_Item = 'U0070' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3)) ELSE 0 END) AS 做零活时间 /*做零活U0070,上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/ FROM (SELECT *, CASE WHEN CONVERT(dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(dOnDuty,INTERVAL -1 day) ELSE dOnDuty END dRealRptDate FROM scDayRpt_Teams WHERE iDayRptStatus >= 0) ttT /*iDayRptStatus=0未审核,iDayRptStatus=-10产量为0,iDayRptStatus=10正常*/ LEFT JOIN(SELECT ID_Calendar, 班次时长, 最晚时间 FROM (SELECT a.ID_Calendar, CASE WHEN a.cCode_Item = 'U0077' THEN Cast(a.nAmount_Item AS DECIMAL(4, 2)) ELSE 0 END AS 班次时长, a.dTime AS 最晚时间, Row_number() OVER ( PARTITION BY a.ID_Calendar ORDER BY a.dTime DESC) AS RowNumber FROM sctMJobFeedBackDetail_AttFB a WHERE a.cCode_Item = 'U0077') AS subquery WHERE RowNumber = 1) AttFB2 ON ttT.ID_Calendar = AttFB2.ID_Calendar LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar GROUP BY ttt.dRealRptDate, ttt.Name_Machine, ttT.id, AttFB2.班次时长, ttt.Name_WorkGroup, ttt.nOutput_RZ)TBU WHERE TBU.机台名称 IN( '骑马联动01号', '骑马联动02号', '骑马联动03号' ) GROUP BY TBU.机台名称, TBU.班组名称, TBU.生产日期, TBU.备注, TBU.定额, TBU.考核工时 )TBU WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}' AND TBU.班组产量 > 0 GROUP BY TBU.机台名称, TBU.班组名称 ORDER BY TBU.机台名称, TBU.班组名称 DESC "); //精装联动 $res3 = Db::query("SELECT '{$start_time}' 提交起始日期, '{$end_time}' 提交结束日期, DATEDIFF(DATE_ADD('{$end_time}',INTERVAL 1 day),'{$start_time}') AS 统计周期, TBU.机台名称, TBU.班组名称, (SELECT GROUP_CONCAT(DISTINCT aa.机长) FROM (SELECT TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期 FROM (SELECT CONVERT (TB1.生产日期,CHAR(10)) 生产日期, TB1.机台名称, TB1.班组名称, TB1.机长 AS 机长 FROM (SELECT CASE WHEN CONVERT(ttt.dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day) ELSE ttt.dOnDuty END 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, DTp.cName 机长 FROM scDayRpt_Teams ttT LEFT JOIN scDayRpt_Teams_People DTP ON ttT.ID = DTP.ID_Teams AND DTP.cStation = '机长' WHERE ttt.nOutput_RZ > 0 AND ttT.iDayRptStatus >= 0 GROUP BY ttt.dOnDuty, ttt.Name_Machine, ttt.Name_WorkGroup, DTp.cName)TB1 WHERE TB1.机台名称 = '精装联动线01号' GROUP BY TB1.生产日期, TB1.机台名称, TB1.班组名称, TB1.机长)TBU WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}' GROUP BY TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期)aa WHERE aa.班组名称 = tbu.班组名称) AS 机长, Cast(Sum(TBU.班组产量) AS SIGNED) AS 总产量, Cast(Sum(TBU.有效工作时间) AS DECIMAL(6, 1)) AS 总工作时间, Sum(TBU.考核工作时间) AS 总应工作时间, Cast(Sum(TBU.班组产量) / ( Sum(TBU.考核工作时间) )AS SIGNED) AS 平均产量, Sum(TBU.定额) / Count(*) AS 平均定额, Count(*) AS 开机总次数, Sum(CASE WHEN TBU.效率分析 = '未完成' THEN 1 ELSE 0 END) AS 未完成次数, Sum(CASE WHEN TBU.效率分析 = '1' THEN 1 ELSE 0 END) AS 完成次数, Cast(Cast(Sum(CASE WHEN TBU.效率分析 = '1' THEN 1 ELSE 0 END)AS DECIMAL(2, 0)) / Count(*) AS DECIMAL(5, 2)) AS 完成率 FROM (SELECT TBU.机台名称, TBU.班组名称, TBU.生产日期, TBU.备注, CASE WHEN Sum(TBU.产量折算工时) + Sum(TBU.改规时间) + Sum(TBU.周保养时间) + Sum(TBU.做零活时间) >= TBU.考核工时 THEN '1' ELSE '未完成' END 效率分析, TBU.定额, TBU.考核工时 考核工作时间, Sum(TBU.班组产量) 班组产量, Sum(TBU.产量折算工时) 产量折算工时, Sum(TBU.改规次数) 改规次数, Sum(TBU.改规时间) 改规时间, Sum(TBU.做零活时间) 做零活时间, Sum(TBU.周保养时间) 周保养时间, Sum(TBU.产量折算工时) + Sum(TBU.改规时间) + Sum(TBU.周保养时间) + Sum(TBU.做零活时间) 有效工作时间, CASE WHEN Sum(TBU.产量折算工时) + Sum(TBU.改规时间) + Sum(TBU.周保养时间) + Sum(TBU.做零活时间) >= TBU.考核工时 THEN 100 ELSE Cast(( Sum(TBU.产量折算工时) + Sum(TBU.改规时间) + Sum(TBU.周保养时间) + Sum(TBU.做零活时间) ) / TBU.考核工时 * 100 AS DECIMAL (4, 2)) END 完成百分比 FROM (SELECT ttt.Name_Machine 机台名称, CONVERT(ttt.dRealRptDate,CHAR(10)) 生产日期, DATE_FORMAT(ttt.dRealRptDate,'%W') 备注, ttt.Name_WorkGroup 班组名称, 900 定额, ttt.nOutput_RZ 班组产量, Cast(ttt.nOutput_RZ / 900 AS DECIMAL(5, 1)) 产量折算工时, IFNULL(AttFB2.班次时长, 10) 考核工时, Sum(CASE WHEN a.cCode_Item = 'U0071' THEN a.iReported ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0071' THEN a.iReported ELSE 0 END) * 1 AS 改规时间, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3)) ELSE 0 END) AS 周保养时间, Sum(CASE WHEN a.cCode_Item = 'U0070' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3)) ELSE 0 END) AS 做零活时间 /*做零活U0070,上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/ FROM (SELECT *, CASE WHEN CONVERT(dOnDuty,CHAR(10)) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(dOnDuty,INTERVAL -1 day) ELSE dOnDuty END dRealRptDate FROM scDayRpt_Teams WHERE iDayRptStatus >= 0) ttT /*iDayRptStatus=0未审核,iDayRptStatus=-10产量为0,iDayRptStatus=10正常*/ LEFT JOIN(SELECT ID_Calendar, 班次时长, 最晚时间 FROM (SELECT a.ID_Calendar, CASE WHEN a.cCode_Item = 'U0077' THEN Cast(a.nAmount_Item AS DECIMAL(4, 2)) ELSE 0 END AS 班次时长, a.dTime AS 最晚时间, Row_number() OVER ( PARTITION BY a.ID_Calendar ORDER BY a.dTime DESC) AS RowNumber FROM sctMJobFeedBackDetail_AttFB a WHERE a.cCode_Item = 'U0077') AS subquery WHERE RowNumber = 1) AttFB2 ON ttT.ID_Calendar = AttFB2.ID_Calendar LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar GROUP BY ttt.dRealRptDate, ttt.Name_Machine, ttT.id, AttFB2.班次时长, ttt.Name_WorkGroup, ttt.nOutput_RZ)TBU WHERE TBU.机台名称 LIKE '%精装联动%' GROUP BY TBU.机台名称, TBU.班组名称, TBU.生产日期, TBU.考核工时, TBU.备注, TBU.定额)TBU WHERE TBU.生产日期 BETWEEN '{$start_time}' AND '{$end_time}' AND TBU.班组产量 > 0 GROUP BY TBU.机台名称, TBU.班组名称 ORDER BY TBU.机台名称, TBU.班组名称 DESC "); $result =array_merge($res6,$res3); foreach($result as $k=>$v){ $res[$k]['完成率']=round($v['完成率']*100); $res[$k]['班组名称']=$v['班组名称']; $res[$k]['开机总次数']=$v['开机总次数']; $res[$k]['完成次数']=$v['完成次数']; } $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").'轮转缓存 存进去了'; return json($res); } //近30天班组生产效率完成情况 生产异常情况统计->接口 public function machine_scxl(){ // $postData = input('post.dependence.item.name'); $postData = input('post.dependence.item.subsys'); $redisKeys = [ "单双色印刷机台" => 'dssj_scxl_redis', "四色印刷机" => 'ssj_scxl_redis', "标规轮转印刷机" => 'bglz_scxl_redis', "大规轮转印刷机" => 'dglz_scxl_redis', "胶订联动线" => 'jdld_scxl_redis', "骑马精装联动线" => 'qmjz_scxl_redis' ]; $redis_key = isset($redisKeys[$postData]) ? md5($redisKeys[$postData]) : md5('dssj_scxl_redis'); $redis = redis(); $result = json_decode($redis->get($redis_key), true); if (!$result) { // 处理没有数据的情况 $response_data = [ 'status' => 1, 'msg' => '没有找到相关数据', 'data' => [] ]; return json_encode($response_data, JSON_UNESCAPED_UNICODE); } // 进行数据排序和截取 $staval = 1; if($postData == '单双色印刷机台') { $staval = 1; } else if($postData == '四色印刷机') { $staval = 2; } else if($postData == '标规轮转印刷机') { $staval = 3; } else if($postData == '大规轮转印刷机') { $staval = 4; } else if($postData == '胶订联动线') { $staval = 5; } else if($postData == '骑马精装联动线') { $staval = 6; } $machineSerialData = Db::table('machineneserial')->where('staval', '=', $staval)->select(); $machineSerials = array_column($machineSerialData, 'serial', 'machinen_name'); usort($result, function($a, $b) use ($machineSerials) { $aMatchedSerial = $bMatchedSerial = 0; foreach ($machineSerials as $machinen_name => $serial) { if (stripos($a["班组名称"], $machinen_name) !== false) { $aMatchedSerial = $serial; } if (stripos($b["班组名称"], $machinen_name) !== false) { $bMatchedSerial = $serial; } } return $aMatchedSerial - $bMatchedSerial; }); // 只按完成率排序,并截取前100项 $result = array_slice($result, 0, 100); // 格式化数据 $categories = array_column($result, '班组名称'); $values = array_column($result, '完成率'); $kjsum = array_column($result, '开机总次数'); $wcsum = array_column($result, '完成次数'); // 构建响应数据 $response_data = [ 'status' => 0, 'msg' => '', 'data' => [ 'categories' => $categories, 'series' => [ [ 'name' => '完成率', 'data' => $values, 'type' => 'line', "yAxisIndex" => 1 ], [ 'name' => '开机总次数', 'data' => $kjsum, 'type' => 'bar', "yAxisIndex" => 0 ], [ 'name' => '完成次数', 'data' => $wcsum, 'type' => 'bar', "yAxisIndex" => 0 ] ] ] ]; // 返回 JSON 数据 return json($response_data); } //2.1平版印刷机昨日生产料率分析(查询前一天数据)缓存 public function yester_pb_redis(){ $redis=redis(); $redis_key = md5('yester_pb_redis'); $ztday = date("Y-m-d",strtotime("-1 day")); $sql = "SELECT DATE_FORMAT(tt.生产日期,'%Y-%m-%d') 生产日期, -- tt.生产日期, -- tt.机台名称, tt.班组名称, tt.机长, tt.定额, CASE WHEN ( Sum(tt.产量折算时间) + Sum(tt.改墨时间) + Sum(tt.上版时间) + Sum(tt.周保养时间) ) >= tt.考核工作时间 THEN '已完成' ELSE '未完成' END 效率分析, Cast(CASE WHEN ( Sum(tt.产量折算时间) + Sum(tt.改墨时间) + Sum(tt.上版时间) + Sum(tt.周保养时间) ) >= tt.考核工作时间 THEN '100' ELSE ( Sum(tt.产量折算时间) + Sum(tt.改墨时间) + Sum(tt.上版时间) + Sum(tt.周保养时间) ) / tt.考核工作时间 * 100 END AS SIGNED) 完成百分比, -- Sum(tt.实际工作时间) 实际工作时间, Sum(tt.班组产量) 班组产量 -- Sum(tt.产量折算时间) 产量折算时间, -- Sum(tt.改墨次数) 改墨次数, -- Sum(tt.改墨时间) 改墨时间, -- Sum(tt.上版块数) 上版块数, -- Sum(tt.上版时间) 上版时间, -- Sum(tt.周保养时间) 周保养时间, -- Sum(tt.有效工作时间) 有效工作时间, -- tt.考核工作时间 FROM (SELECT CONVERT (TB1.生产日期, CHAR) 生产日期, 1 AS 序号, TB1.机台名称, TB1.定额, TB1.班组名称, TB1.机长 AS 机长, Sum(TB1.实际工作时间) 实际工作时间, Sum(TB1.班组产量) 班组产量, Cast(Sum(TB1.班组产量) / 5500 AS DECIMAL(8, 2)) 产量折算时间, Sum(TB1.改墨次数) 改墨次数, Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(8, 2)) AS 改墨时间, Sum(TB1.上版块数) 上版块数, Cast(Sum(TB1.上版块数) * 10 / 60.00 AS DECIMAL(8, 2)) AS 上版时间, Sum(TB1.周保养时间) 周保养时间, Cast(Sum(TB1.班组产量) / 5500 AS DECIMAL(8, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间, 10 AS 考核工作时间 FROM (SELECT CASE WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day) ELSE ttt.dOnDuty END 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, 5500 定额, (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttT.ID AND b.cStation = '机长') 机长, ttt.nOutput_RZ 班组产量, Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(8, 2)) 实际工作时间, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3)) ELSE 0 END) AS 周保养时间 /***上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040***/ FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar LEFT JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >=0 GROUP BY ttt.dOnDuty, ttt.Name_Machine, ttT.id, ttt.Name_WorkGroup, ttt.nOutput_RZ, ttt.iWorkingHours)TB1 WHERE LEFT(TB1.机台名称, 3) = 'BB机' OR TB1.机台名称 IN ( '海德堡SM1号', '海德堡SM2号' ) GROUP BY TB1.生产日期, TB1.机台名称, TB1.班组名称, TB1.机长, TB1.定额, TB1.班组产量, TB1.实际工作时间 UNION ALL SELECT CONVERT (TB1.生产日期, CHAR) 生产日期, 2 AS 序号, TB1.机台名称, TB1.定额, TB1.班组名称, TB1.机长 AS 机长, Sum(TB1.实际工作时间) 实际工作时间, Sum(TB1.班组产量) 班组产量, Cast(Sum(TB1.班组产量) / 8000 AS DECIMAL(5, 2)) 产量折算时间, Sum(TB1.改墨次数) 改墨次数, Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(5, 2)) AS 改墨时间, Sum(TB1.上版块数) 上版块数, Cast(Sum(TB1.上版块数) * 10 / 60.00 AS DECIMAL(5, 2)) AS 上版时间, Sum(TB1.周保养时间) 周保养时间, Cast(Sum(TB1.班组产量) / 8000 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间, 10 AS 考核工作时间 FROM (SELECT CASE WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day) ELSE ttt.dOnDuty END 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttT.ID AND b.cStation = '机长') 机长, 8000 定额, ttt.nOutput_RZ 班组产量, Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(5, 2)) 实际工作时间, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3)) ELSE 0 END) AS 周保养时间 -- 上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040 FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar LEFT JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0 GROUP BY ttt.dOnDuty, ttt.Name_Machine, ttT.id, ttt.Name_WorkGroup, ttt.nOutput_RZ, ttt.iWorkingHours)TB1 WHERE TB1.机台名称 IN( '四色机02号机', '海德堡5+L 01号机', '海德堡01号机', '三菱机02号机', '三菱机01号机' ) GROUP BY TB1.生产日期, TB1.机台名称, TB1.班组名称, TB1.机长, TB1.定额, TB1.班组产量, TB1.实际工作时间 UNION ALL SELECT CONVERT (TB1.生产日期, CHAR) 生产日期, 3 AS 序号, TB1.机台名称, TB1.定额, TB1.班组名称, TB1.机长 AS 机长, Sum(TB1.实际工作时间) 实际工作时间, Sum(TB1.班组产量) 班组产量, Cast(Sum(TB1.班组产量) / 7000 AS DECIMAL(5, 3)) 产量折算时间, Sum(TB1.改墨次数) 改墨次数, Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(5, 3)) AS 改墨时间, Sum(TB1.上版块数) 上版块数, Cast(Sum(TB1.上版块数) * 10 / 60.00 AS DECIMAL(5, 3)) AS 上版时间, Sum(TB1.周保养时间) 周保养时间, Cast(Sum(TB1.班组产量) / 7000 AS DECIMAL(5, 3)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 10 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间, 10 AS 考核工作时间 FROM (SELECT CASE WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day) ELSE ttt.dOnDuty END 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, 7000 定额, (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttT.ID AND b.cStation = '机长') 机长, ttt.nOutput_RZ 班组产量, Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(5, 2)) 实际工作时间, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3)) ELSE 0 END) AS 周保养时间 -- 上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040 FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar LEFT JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0 GROUP BY ttt.dOnDuty, ttt.Name_Machine, ttT.id, ttt.iWorkingHours, ttt.Name_WorkGroup, ttt.nOutput_RZ)TB1 WHERE TB1.机台名称 = '小森八色01号机' GROUP BY TB1.生产日期, TB1.机台名称, TB1.班组名称, TB1.机长, TB1.定额, TB1.班组产量, TB1.实际工作时间 UNION ALL SELECT CONVERT (TB1.生产日期, CHAR) 生产日期, 4 AS 序号, TB1.机台名称, TB1.定额, TB1.班组名称, TB1.机长 AS 机长, Sum(TB1.实际工作时间) 实际工作时间, Sum(TB1.班组产量) 班组产量, Cast(Sum(TB1.班组产量) / 10000 AS DECIMAL(5, 2)) 产量折算时间, Sum(TB1.改墨次数) 改墨次数, Cast(Sum(TB1.改墨次数) * 1.0 AS DECIMAL(5, 2)) AS 改墨时间, Sum(TB1.上版块数) 上版块数, Cast(Sum(TB1.上版块数) * 2.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间, Sum(TB1.周保养时间) 周保养时间, Cast(Sum(TB1.班组产量) / 10000 AS DECIMAL(5, 2)) + Sum(TB1.改墨次数) * 1.0 + Sum(TB1.上版块数) * 2.5 / 60.00 + Sum(TB1.周保养时间) AS 有效工作时间, 12 AS 考核工作时间 FROM (SELECT CASE WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day) ELSE ttt.dOnDuty END 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, 10000 定额, (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttT.ID AND b.cStation = '机长') 机长, ttt.nOutput_RZ 班组产量, Cast(ttt.iWorkingHours / 60.0 AS DECIMAL(5, 2)) 实际工作时间, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0041', 'U0037' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 3)) ELSE 0 END) AS 周保养时间 -- 上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040 FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar LEFT JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0 GROUP BY ttt.dOnDuty, ttt.Name_Machine, ttT.id, ttt.iWorkingHours, ttt.Name_WorkGroup, ttt.nOutput_RZ)TB1 WHERE TB1.机台名称 = '小森八色02号机' GROUP BY TB1.生产日期, TB1.机台名称, TB1.班组名称, TB1.机长, TB1.定额, TB1.班组产量, TB1.实际工作时间)tt WHERE tt.生产日期 >= '{$ztday}' AND tt.班组产量 > 0 GROUP BY tt.生产日期, tt.序号, tt.机台名称, tt.班组名称, tt.机长, tt.定额, tt.实际工作时间, tt.考核工作时间 ORDER BY 完成百分比 desc, tt.序号, tt.机台名称, tt.班组名称 "; $res = Db::query($sql); // echo "
";print_r($list);echo "
";die; $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").' 平版印刷机昨日生产料率分析 存进去了'; return $res; } //2.1平版印刷机昨日生产料率分析 public function yester_pb(){ $redis=redis(); $list = json_decode($redis->get(md5('yester_pb_redis')), true); $result['columns']=[ ['name'=>'日期','id'=>'rq','width'=>'11','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'班组名称','id'=>'bzmc','width'=>'24','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'机长','id'=>'jz','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'定额','id'=>'dl','width'=>'16','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'班组产量','id'=>'bzcl','width'=>'11','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'生产效率分析','id'=>'scxlfx','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'完成百分比','id'=>'wcbfb','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'] ]; foreach($list as $k=>$v){ $result['rows'][$k]['rq']=$v['生产日期']; $result['rows'][$k]['bzmc']=$v['班组名称']; $result['rows'][$k]['jz']=$v['机长']; $result['rows'][$k]['dl']=$v['定额']; $result['rows'][$k]['bzcl']=round($v['班组产量']); $result['rows'][$k]['scxlfx']=$v['效率分析']; $result['rows'][$k]['wcbfb']=round($v['完成百分比']); } if($list==[]){ $result['rows'][0]['rq']=''; $result['rows'][0]['bzmc']=''; $result['rows'][0]['jz']=''; $result['rows'][0]['dl']=''; $result['rows'][0]['bzcl']=''; $result['rows'][0]['scxlfx']=''; $result['rows'][0]['wcbfb']=''; } $res['status']=0; $res['msg']=''; $res['data']=$result; return json($res); } //2.2装订印刷机昨日生产料率分析(查询前一天数据)缓存 public function yester_zd_redis(){ $redis=redis(); $redis_key = md5('yester_zd_redis'); $ztday = date("Y-m-d",strtotime("-1 day")); $sql = " SELECT DATE_FORMAT(tt.生产日期,'%Y-%m-%d') 生产日期, tt.班组名称, tt.机长, tt.定额, tt.班组产量, tt.生产效率分析, tt.完成百分比 FROM( SELECT TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期, TBU.备注, CASE WHEN Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) >= TBU.考核工时 THEN '已完成' ELSE '未完成' END 生产效率分析, TBU.定额, TBU.考核工时 考核工作时间, Sum( TBU.班组产量 ) 班组产量, Sum( TBU.产量折算工时 ) 产量折算工时, Sum( TBU.改规次数 ) 改规次数, Sum( TBU.改规时间 ) 改规时间, Sum( TBU.做零活时间 ) 做零活时间, Sum( TBU.周保养时间 ) 周保养时间, Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) 有效工作时间, CASE WHEN Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) >= TBU.考核工时 THEN 100 ELSE Cast( ( Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) ) / TBU.考核工时 * 100 AS DECIMAL ( 4, 2 ) ) END 完成百分比 FROM ( SELECT ttt.Name_Machine 机台名称, CONVERT ( ttt.dRealRptDate, CHAR) 生产日期, DATE_FORMAT( ttt.dRealRptDate, '%W' ) 备注,-- Datename(WEEKDAY, ttt.dRealRptDate) 备注, ttt.Name_WorkGroup 班组名称, ( SELECT GROUP_CONCAT( b.cName ) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttT.ID AND b.cStation = '机长' ) 机长, '900' 定额, ttt.nOutput_RZ 班组产量, Cast( ttt.nOutput_RZ / 900 AS DECIMAL ( 5, 1 ) ) 产量折算工时, IFNULL( AttFB2.班次时长, 10 ) 考核工时, Sum( CASE WHEN a.cCode_Item = 'U0071' THEN a.iReported ELSE 0 END ) AS 改规次数, Sum( CASE WHEN a.cCode_Item = 'U0071' THEN a.iReported ELSE 0 END ) * 1 AS 改规时间, Sum( CASE WHEN a.cCode_Item = 'U0040' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 周保养时间, Sum( CASE WHEN a.cCode_Item = 'U0070' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 做零活时间 FROM ( SELECT *, 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 FROM scDayRpt_Teams WHERE iDayRptStatus >= 0 ) ttT LEFT JOIN ( SELECT ID_Calendar, 班次时长, 最晚时间 FROM ( SELECT a.ID_Calendar, CASE WHEN a.cCode_Item = 'U0077' THEN Cast( a.nAmount_Item AS DECIMAL ( 4, 2 ) ) ELSE 0 END AS 班次时长, a.dTime AS 最晚时间, Row_number ( ) OVER ( PARTITION BY a.ID_Calendar ORDER BY a.dTime DESC ) AS RowNumber FROM sctMJobFeedBackDetail_AttFB a WHERE a.cCode_Item = 'U0077' ) AS subquery WHERE RowNumber = 1 ) AttFB2 ON ttT.ID_Calendar = AttFB2.ID_Calendar LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar GROUP BY ttt.dRealRptDate, ttt.Name_Machine, ttT.id, AttFB2.班次时长, ttt.Name_WorkGroup, ttt.nOutput_RZ) TBU WHERE TBU.机台名称 LIKE '%精装联动%' GROUP BY TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期, TBU.考核工时, TBU.备注, TBU.定额 UNION ALL SELECT TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期, TBU.备注, CASE WHEN Sum( TBU.有效工作时间 ) >= TBU.考核工作时间 THEN '已完成' ELSE '未完成' END AS 生产效率分析, TBU.定额, TBU.考核工作时间, CONVERT ( Sum( TBU.班组产量 ), SIGNED ) 班组产量, Sum( TBU.产量折算工时 ) 产量折算工时, Sum( TBU.改规次数 ) 改规次数, Sum( TBU.改规时间 ) 改规时间, Sum( TBU.做零活时间 ) 做零活时间, Sum( TBU.周保养时间 ) 周保养时间, Sum( TBU.有效工作时间 ) 有效工作时间, Cast( CASE WHEN Sum( TBU.有效工作时间 ) / TBU.考核工作时间 >= 1 THEN 100 ELSE ( Sum( TBU.有效工作时间 ) / TBU.考核工作时间 ) * 100 END AS DECIMAL ( 5, 2 ) ) 完成百分比 FROM(SELECT TBU2.机台名称, TBU2.班组名称, TBU2.机长, TBU2.生产日期, TBU2.备注, TBU2.定额, TBU2.考核工时 考核工作时间, TBU2.班组产量, TBU2.产量折算工时, TBU2.改规次数, TBU2.改规时间, TBU2.做零活时间, TBU2.周保养时间, TBU2.有效工作时间 FROM(SELECT TBU.ID_Calendar, TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期, TBU.备注, TBU.定额, IFNULL( AttFB2.班次时长, 10 ) 考核工时, Sum( TBU.班组产量 ) 班组产量, Sum( TBU.产量折算工时 ) 产量折算工时, IFNULL( ATTFB1.改规次数, 0 ) AS 改规次数, IFNULL( AttFB1.改规时间, 0 ) AS 改规时间, IFNULL( AttFB1.做零活时间, 0 ) 做零活时间, IFNULL( AttFB1.周保养时间, 0 ) 周保养时间, (Sum( TBU.产量折算工时 ) + IFNULL( AttFB1.改规时间, 0 ) + IFNULL( AttFB1.做零活时间, 0 ) + IFNULL( AttFB1.周保养时间, 0 ) ) 有效工作时间 FROM(SELECT JobTB.ID ID_Calendar, JobTB.机台名称, JobTB.班组名称, JobTB.机长, JobTB.生产日期, DATE_FORMAT( JobTB.生产日期, '%W' ) 备注,-- Datename(WEEKDAY, JobTB.生产日期) 备注, JobTB.定额 定额, Sum( JobTB.班组产量 ) 班组产量, Cast( Sum( 产量折算工时 ) AS DECIMAL ( 5, 2 ) ) 产量折算工时, 12 AS 考核工时 FROM(SELECT ttFC.ID, CONVERT ( dRealRptDate, CHAR ) 生产日期, TB2.ID_Teams, TB2.cJtmc 机台名称, '7500/7000/4500' 定额, TB2.cName_Team 班组名称, TB2.机长, ttFc.ID_TeamManRecord, ttTJ.cCode_ProductOrder AS cCode_ProductOrder, ttTJ.cCode_JobM AS cCode_JobM, ttTJ.cName_JobM AS cName_JobM, ttTj.cType_AProduct, a.NZWYZ, ttTJ.nOutput_R AS 班组产量, 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 产量折算工时 FROM scDayRpt_Teams_JobContent ttTJ INNER JOIN scmachinejob b ON b.ID = ttTJ.ID_JobM LEFT JOIN scFactoryCalendar ttFC ON ttTJ.id_scFactoryCalendar = ttFC.id LEFT JOIN ( SELECT CONVERT ( CONVERT ( ttDRpt_T.dRealRptDate, CHAR ), DATETIME ) dRealRptDate, ttT.cJtmc AS cJtmc, ttT.cBanzuMc AS cName_Team, ttT.cBmbh AS cBmbh, ttT.cBmmc AS cbmmc, ttDRpt_T.ID_WorkCenter, ttT.cGzzxmc AS cgzzxmc, tvD.cName AS cname, ttS.cName AS cName_S, ttDRpt_T.dOnDuty AS dStart, ttDRpt_T.dOffDuty AS dEnd, ttDRpt_T.nOutput_RZ AS nAmount_R, IFNULL( ttDRpt_T.iDayRptStatus, - 1 ) AS iDayRptStatus, ttFC.ID AS ID_TC, IFNULL( ttDRpt_T.ID, - 1 ) AS ID_TDRpt, ttDRpt_T.dstamp, ttDRpt_T.id AS ID_Teams, ( SELECT GROUP_CONCAT( b.cName ) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttDRpt_T.id AND b.cStation = '机长' ) 机长 FROM scFactoryCalendar ttFC LEFT JOIN scShift ttS ON ttS.ID = ttFC.id_scShift LEFT JOIN ( SELECT *, 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 FROM scDayRpt_Teams ) ttDRpt_T ON ttDRpt_T.ID_Calendar = ttFC.ID AND ttDRpt_T.iDayRptStatus >= 0 LEFT JOIN banzu ttT ON ttT.banzuId = ttFC.id_Machine LEFT JOIN ( SELECT scvDeviceAll.iType, scvDeviceAll.ID, scvDeviceAll.cCode, scvDeviceAll.cName, scvDeviceAll.iGzzxId, scvDeviceAll.ID_BM, scvDeviceAll.cbmbh, scvDeviceAll.cbmmc, scvDeviceAll.cType_Sys, scvDeviceAll.iStop, scvDeviceAll.cType_Dev, scvDeviceAll.cShortName, scvDeviceAll.iTypeWage, iOverProductType FROM ( SELECT 0 AS iType, MKernel.ID, MKernel.cBh AS cCode, MKernel.cGzzxmc AS cName, MKernel.ID AS iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, Mkernel.cGzzxlx AS cType_Sys, MKernel.iStopUse AS iStop, MKernel.cGzzxlx AS cType_Dev, MKernel.cShortName, 0 iTypeWage, 0 iOverProductType FROM MKernel INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh UNION SELECT 1 AS iType, dzyssb.ID, dzyssb.csbbh AS cCode, dzyssb.csbmc AS cName, Mkernel.ID AS iGzzxId, dzBM.id AS ID_BM, dzBM.cbmbh, dzBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, dzyssb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, dzyssb.cShortName, 0 iTypeWage, 0 iOverProductType FROM dzyssb INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh UNION SELECT 2 AS iType, MKerJzmb.ID, MKerJzmb.cJzbh AS cCode, MKerJzmb.cJzmc AS cName, MKerJzmb.iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, MKerJzmb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, MKerJzmb.cShortName, MKerJzmb.iType AS iTypeWage, MKerJzmb.iOverProductType FROM MKerJzmb INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid UNION SELECT 3 AS iType, iywdwid AS ID, cywdwbh AS cCode, cdwmc AS cName, iywdwid AS iGzzxId, iywdwid AS ID_BM, cywdwbh AS cbmbh, cdwmc AS cbmmc, '' AS cType_Sys, CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop, '' AS cType_Dev, DZYWDW.cjc AS cShortName, 0 iTypeWage, 0 iOverProductType FROM dzywdw WHERE bwjg = 1 UNION SELECT 3 AS iType, - 1, '', '外厂资源', - 1, - 1 AS ID_BM, '' AS cbmbh, '' AS cbmmc, '' AS cType_Sys, 0 AS iStop, '' AS cType_Dev, '外厂' AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType ) scvDeviceAll WHERE ( iStop = 0 ) ) tvD ON tvD.ID = ttFC.ID_Parent AND tvD.iType IN ( 0, 1, 2 ) ) TB2 ON TB2.ID_Teams = ttTJ.ID_Teams LEFT JOIN MCYD a ON a.CCYDH = ttTJ.cCode_AProduct ) JobTB GROUP BY 生产日期, JobTB.ID, 定额, 机台名称, 班组名称, 机长 ) tbu LEFT JOIN ( SELECT a.ID_Calendar, Sum( CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END ) AS 改规次数, Sum( CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END ) * 1 AS 改规时间, Sum( CASE WHEN a.cCode_Item = 'U0040' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 2 ) ) ELSE 0 END ) AS 周保养时间, Sum( CASE WHEN a.cCode_Item = 'U0070' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 做零活时间 FROM sctMJobFeedBackDetail_AttFB a LEFT JOIN MCYD b ON a.cProductBillCode = b.CCYDH GROUP BY ID_Calendar ) AttFB1 ON TBU.ID_Calendar = AttFB1.ID_Calendar LEFT JOIN ( SELECT ID_Calendar, 班次时长, 最晚时间 FROM ( SELECT a.ID_Calendar, CASE WHEN a.cCode_Item = 'U0077' THEN Cast( a.nAmount_Item AS DECIMAL ( 4, 2 ) ) ELSE 0 END AS 班次时长, a.dTime AS 最晚时间, Row_number ( ) OVER ( PARTITION BY a.ID_Calendar ORDER BY a.dTime DESC ) AS RowNumber FROM sctMJobFeedBackDetail_AttFB a WHERE a.cCode_Item = 'U0077' ) AS subquery WHERE RowNumber = 1 ) AttFB2 ON TBU.ID_Calendar = AttFB2.ID_Calendar GROUP BY TBU.ID_Calendar, TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期, TBU.备注, TBU.定额, AttFB2.班次时长, AttFB1.做零活时间, AttFB1.周保养时间, ATTFB1.改规次数, AttFB1.改规时间 ) TBU2 WHERE 1 = 1 AND TBU2.机台名称 LIKE '%胶订精密达%' GROUP BY TBU2.机台名称, TBU2.班组名称, TBU2.机长, TBU2.生产日期, TBU2.备注, TBU2.定额, TBU2.考核工时, TBU2.班组产量, TBU2.产量折算工时, TBU2.改规次数, TBU2.改规时间, TBU2.做零活时间, TBU2.周保养时间, TBU2.有效工作时间 UNION ALL SELECT TBU2.机台名称, TBU2.班组名称, TBU2.机长, TBU2.生产日期, TBU2.备注, TBU2.定额, TBU2.考核工时 考核工作时间, TBU2.班组产量, TBU2.产量折算工时, TBU2.改规次数, TBU2.改规时间, TBU2.做零活时间, TBU2.周保养时间, TBU2.有效工作时间 FROM ( SELECT TBU.ID_Calendar, TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期, TBU.备注, TBU.定额, IFNULL( AttFB2.班次时长, 10 ) 考核工时, Sum( TBU.班组产量 ) 班组产量, Sum( TBU.产量折算工时 ) 产量折算工时, IFNULL( ATTFB1.改规次数, 0 ) AS 改规次数, IFNULL( AttFB1.改规时间, 0 ) AS 改规时间, IFNULL( AttFB1.做零活时间, 0 ) 做零活时间, IFNULL( AttFB1.周保养时间, 0 ) 周保养时间, ( Sum( TBU.产量折算工时 ) + IFNULL( AttFB1.改规时间, 0 ) + IFNULL( AttFB1.做零活时间, 0 ) + IFNULL( AttFB1.周保养时间, 0 ) ) 有效工作时间 FROM ( SELECT JobTB.ID ID_Calendar, JobTB.机台名称, JobTB.班组名称, JobTB.机长, JobTB.生产日期, DATE_FORMAT( JobTB.生产日期, '%W' ) 备注,-- Datename(WEEKDAY, JobTB.生产日期) 备注, JobTB.定额 定额, Sum( 班组产量 ) 班组产量, Cast( Sum( 产量折算工时 ) AS DECIMAL ( 5, 2 ) ) 产量折算工时 FROM ( SELECT ttFC.ID, CONVERT ( dRealRptDate, CHAR ) 生产日期, TB2.ID_Teams, TB2.cJtmc 机台名称, '3000/4500' 定额, TB2.cName_Team 班组名称, TB2.机长 机长, ttFc.ID_TeamManRecord, ttTJ.cCode_ProductOrder AS cCode_ProductOrder, ttTJ.cCode_JobM AS cCode_JobM, ttTJ.cName_JobM AS cName_JobM, ttTj.cType_AProduct, a.CYJLX, ttTJ.nOutput_R AS 班组产量, CASE WHEN a.CYJLX LIKE '%课本%' OR a.CYJLX LIKE '%教辅%' THEN Cast( Round( ttTJ.nOutput_R / 4500, 3 ) AS DECIMAL ( 6, 3 ) ) ELSE Cast( Round( ttTJ.nOutput_R / 3000, 3 ) AS DECIMAL ( 6, 3 ) ) END AS 产量折算工时 FROM scDayRpt_Teams_JobContent ttTJ INNER JOIN scmachinejob b ON b.ID = ttTJ.ID_JobM LEFT JOIN scFactoryCalendar ttFC ON ttTJ.id_scFactoryCalendar = ttFC.id LEFT JOIN ( SELECT CONVERT ( CONVERT ( ttDRpt_T.dRealRptDate, CHAR ), DATETIME ) dRealRptDate, ttT.cJtmc AS cJtmc, ttT.cBanzuMc AS cName_Team, ttT.cBmbh AS cBmbh, ttT.cBmmc AS cbmmc, ttDRpt_T.ID_WorkCenter, ttT.cGzzxmc AS cgzzxmc, tvD.cName AS cname, ttS.cName AS cName_S, ttDRpt_T.dOnDuty AS dStart, ttDRpt_T.dOffDuty AS dEnd, ttDRpt_T.nOutput_RZ AS nAmount_R, IFNULL( ttDRpt_T.iDayRptStatus, - 1 ) AS iDayRptStatus, ttFC.ID AS ID_TC, IFNULL( ttDRpt_T.ID, - 1 ) AS ID_TDRpt, ttDRpt_T.dstamp, ttDRpt_T.id AS ID_Teams, ( SELECT GROUP_CONCAT( b.cName ) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttDRpt_T.id AND b.cStation = '机长' ) 机长 FROM scFactoryCalendar ttFC LEFT JOIN scShift ttS ON ttS.ID = ttFC.id_scShift LEFT JOIN ( SELECT *, 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 FROM scDayRpt_Teams ) ttDRpt_T ON ttDRpt_T.ID_Calendar = ttFC.ID AND ttDRpt_T.iDayRptStatus >= 0 LEFT JOIN banzu ttT ON ttT.banzuId = ttFC.id_Machine LEFT JOIN ( SELECT scvDeviceAll.iType, scvDeviceAll.ID, scvDeviceAll.cCode, scvDeviceAll.cName, scvDeviceAll.iGzzxId, scvDeviceAll.ID_BM, scvDeviceAll.cbmbh, scvDeviceAll.cbmmc, scvDeviceAll.cType_Sys, scvDeviceAll.iStop, scvDeviceAll.cType_Dev, scvDeviceAll.cShortName, scvDeviceAll.iTypeWage, iOverProductType FROM ( SELECT 0 AS iType, MKernel.ID, MKernel.cBh AS cCode, MKernel.cGzzxmc AS cName, MKernel.ID AS iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, Mkernel.cGzzxlx AS cType_Sys, MKernel.iStopUse AS iStop, MKernel.cGzzxlx AS cType_Dev, MKernel.cShortName, 0 iTypeWage, 0 iOverProductType FROM MKernel INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh UNION SELECT 1 AS iType, dzyssb.ID, dzyssb.csbbh AS cCode, dzyssb.csbmc AS cName, Mkernel.ID AS iGzzxId, dzBM.id AS ID_BM, dzBM.cbmbh, dzBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, dzyssb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, dzyssb.cShortName, 0 iTypeWage, 0 iOverProductType FROM dzyssb INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh UNION SELECT 2 AS iType, MKerJzmb.ID, MKerJzmb.cJzbh AS cCode, MKerJzmb.cJzmc AS cName, MKerJzmb.iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, MKerJzmb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, MKerJzmb.cShortName, MKerJzmb.iType AS iTypeWage, MKerJzmb.iOverProductType FROM MKerJzmb INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid UNION SELECT 3 AS iType, iywdwid AS ID, cywdwbh AS cCode, cdwmc AS cName, iywdwid AS iGzzxId, iywdwid AS ID_BM, cywdwbh AS cbmbh, cdwmc AS cbmmc, '' AS cType_Sys, CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop, '' AS cType_Dev, DZYWDW.cjc AS cShortName, 0 iTypeWage, 0 iOverProductType FROM dzywdw WHERE bwjg = 1 UNION SELECT 3 AS iType, - 1, '', '外厂资源', - 1, - 1 AS ID_BM, '' AS cbmbh, '' AS cbmmc, '' AS cType_Sys, 0 AS iStop, '' AS cType_Dev, '外厂' AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType ) scvDeviceAll WHERE ( iStop = 0 ) ) tvD ON tvD.ID = ttFC.ID_Parent AND tvD.iType IN ( 0, 1, 2 ) ) TB2 ON TB2.ID_Teams = ttTJ.ID_Teams LEFT JOIN MCYD a ON a.CCYDH = ttTJ.cCode_AProduct ) JobTB GROUP BY 生产日期, JobTB.ID, 定额, 机台名称, 班组名称, 机长 ) tbu LEFT JOIN ( SELECT a.ID_Calendar, Sum( CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END ) AS 改规次数, Sum( CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END ) * 0.75 AS 改规时间, Sum( CASE WHEN a.cCode_Item = 'U0040' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 2 ) ) ELSE 0 END ) AS 周保养时间, Sum( CASE WHEN a.cCode_Item = 'U0070' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 做零活时间 FROM sctMJobFeedBackDetail_AttFB a LEFT JOIN MCYD b ON a.cProductBillCode = b.CCYDH GROUP BY ID_Calendar ) AttFB1 ON TBU.ID_Calendar = AttFB1.ID_Calendar LEFT JOIN ( SELECT ID_Calendar, 班次时长, 最晚时间 FROM ( SELECT a.ID_Calendar, CASE WHEN a.cCode_Item = 'U0077' THEN Cast( a.nAmount_Item AS DECIMAL ( 4, 2 ) ) ELSE 0 END AS 班次时长, a.dTime AS 最晚时间, Row_number ( ) OVER ( PARTITION BY a.ID_Calendar ORDER BY a.dTime DESC ) AS RowNumber FROM sctMJobFeedBackDetail_AttFB a WHERE a.cCode_Item = 'U0077' ) AS subquery WHERE RowNumber = 1 ) AttFB2 ON TBU.ID_Calendar = AttFB2.ID_Calendar GROUP BY TBU.ID_Calendar, TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期, TBU.备注, TBU.定额, AttFB2.班次时长, AttFB1.做零活时间, AttFB1.周保养时间, ATTFB1.改规次数, AttFB1.改规时间 ) TBU2 WHERE 1 = 1 AND TBU2.机台名称 LIKE '%胶订精工%' GROUP BY TBU2.机台名称, TBU2.班组名称, TBU2.机长, TBU2.生产日期, TBU2.备注, TBU2.定额, TBU2.考核工时, TBU2.班组产量, TBU2.产量折算工时, TBU2.改规次数, TBU2.改规时间, TBU2.做零活时间, TBU2.周保养时间, TBU2.有效工作时间 UNION ALL SELECT TBU2.机台名称, TBU2.班组名称, TBU2.机长, TBU2.生产日期, TBU2.备注, TBU2.定额, TBU2.考核工时 考核工作时间, TBU2.班组产量, TBU2.产量折算工时, TBU2.改规次数, TBU2.改规时间, TBU2.做零活时间, TBU2.周保养时间, TBU2.有效工作时间 FROM ( SELECT TBU.ID_Calendar, TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期, TBU.备注, TBU.定额, IFNULL( AttFB2.班次时长, 10 ) 考核工时, Sum( TBU.班组产量 ) 班组产量, Sum( TBU.产量折算工时 ) 产量折算工时, IFNULL( ATTFB1.改规次数, 0 ) AS 改规次数, IFNULL( AttFB1.改规时间, 0 ) AS 改规时间, IFNULL( AttFB1.做零活时间, 0 ) 做零活时间, IFNULL( AttFB1.周保养时间, 0 ) 周保养时间, ( Sum( TBU.产量折算工时 ) + IFNULL( AttFB1.改规时间, 0 ) + IFNULL( AttFB1.做零活时间, 0 ) + IFNULL( AttFB1.周保养时间, 0 ) ) 有效工作时间 FROM ( SELECT JobTB.ID ID_Calendar, JobTB.机台名称, JobTB.班组名称, JobTB.机长, JobTB.生产日期, DATE_FORMAT( JobTB.生产日期, '%W' ) 备注,-- Datename(WEEKDAY, JobTB.生产日期) 备注, JobTB.定额 定额, Sum( 班组产量 ) 班组产量, Cast( Sum( 产量折算工时 ) AS DECIMAL ( 5, 2 ) ) 产量折算工时 FROM ( SELECT ttFC.ID, CONVERT ( dRealRptDate, CHAR ) 生产日期, TB2.ID_Teams, TB2.cJtmc 机台名称, '3000/4500' 定额, TB2.cName_Team 班组名称, TB2.机长 机长, ttFc.ID_TeamManRecord, ttTJ.cCode_ProductOrder AS cCode_ProductOrder, ttTJ.cCode_JobM AS cCode_JobM, ttTJ.cName_JobM AS cName_JobM, ttTj.cType_AProduct, a.CYJLX, ttTJ.nOutput_R AS 班组产量, CASE WHEN a.CYJLX LIKE '%课本%' OR a.CYJLX LIKE '%教辅%' THEN Cast( Round( ttTJ.nOutput_R / 4500, 3 ) AS DECIMAL ( 6, 3 ) ) ELSE Cast( Round( ttTJ.nOutput_R / 3000, 3 ) AS DECIMAL ( 6, 3 ) ) END AS 产量折算工时 FROM scDayRpt_Teams_JobContent ttTJ INNER JOIN scmachinejob b ON b.ID = ttTJ.ID_JobM LEFT JOIN scFactoryCalendar ttFC ON ttTJ.id_scFactoryCalendar = ttFC.id LEFT JOIN ( SELECT CONVERT ( CONVERT ( ttDRpt_T.dRealRptDate, CHAR ), DATETIME ) dRealRptDate, ttT.cJtmc AS cJtmc, ttT.cBanzuMc AS cName_Team, ttT.cBmbh AS cBmbh, ttT.cBmmc AS cbmmc, ttDRpt_T.ID_WorkCenter, ttT.cGzzxmc AS cgzzxmc, tvD.cName AS cname, ttS.cName AS cName_S, ttDRpt_T.dOnDuty AS dStart, ttDRpt_T.dOffDuty AS dEnd, ttDRpt_T.nOutput_RZ AS nAmount_R, IFNULL( ttDRpt_T.iDayRptStatus, - 1 ) AS iDayRptStatus, ttFC.ID AS ID_TC, IFNULL( ttDRpt_T.ID, - 1 ) AS ID_TDRpt, ttDRpt_T.dstamp, ttDRpt_T.id AS ID_Teams, ( SELECT GROUP_CONCAT( b.cName ) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttDRpt_T.id AND b.cStation = '机长' ) 机长 FROM scFactoryCalendar ttFC LEFT JOIN scShift ttS ON ttS.ID = ttFC.id_scShift LEFT JOIN ( SELECT *, 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 FROM scDayRpt_Teams ) ttDRpt_T ON ttDRpt_T.ID_Calendar = ttFC.ID AND ttDRpt_T.iDayRptStatus >= 0 LEFT JOIN banzu ttT ON ttT.banzuId = ttFC.id_Machine LEFT JOIN ( SELECT scvDeviceAll.iType, scvDeviceAll.ID, scvDeviceAll.cCode, scvDeviceAll.cName, scvDeviceAll.iGzzxId, scvDeviceAll.ID_BM, scvDeviceAll.cbmbh, scvDeviceAll.cbmmc, scvDeviceAll.cType_Sys, scvDeviceAll.iStop, scvDeviceAll.cType_Dev, scvDeviceAll.cShortName, scvDeviceAll.iTypeWage, iOverProductType FROM ( SELECT 0 AS iType, MKernel.ID, MKernel.cBh AS cCode, MKernel.cGzzxmc AS cName, MKernel.ID AS iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, Mkernel.cGzzxlx AS cType_Sys, MKernel.iStopUse AS iStop, MKernel.cGzzxlx AS cType_Dev, MKernel.cShortName, 0 iTypeWage, 0 iOverProductType FROM MKernel INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh UNION SELECT 1 AS iType, dzyssb.ID, dzyssb.csbbh AS cCode, dzyssb.csbmc AS cName, Mkernel.ID AS iGzzxId, dzBM.id AS ID_BM, dzBM.cbmbh, dzBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, dzyssb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, dzyssb.cShortName, 0 iTypeWage, 0 iOverProductType FROM dzyssb INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh UNION SELECT 2 AS iType, MKerJzmb.ID, MKerJzmb.cJzbh AS cCode, MKerJzmb.cJzmc AS cName, MKerJzmb.iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, MKerJzmb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, MKerJzmb.cShortName, MKerJzmb.iType AS iTypeWage, MKerJzmb.iOverProductType FROM MKerJzmb INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid UNION SELECT 3 AS iType, iywdwid AS ID, cywdwbh AS cCode, cdwmc AS cName, iywdwid AS iGzzxId, iywdwid AS ID_BM, cywdwbh AS cbmbh, cdwmc AS cbmmc, '' AS cType_Sys, CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop, '' AS cType_Dev, DZYWDW.cjc AS cShortName, 0 iTypeWage, 0 iOverProductType FROM dzywdw WHERE bwjg = 1 UNION SELECT 3 AS iType, - 1, '', '外厂资源', - 1, - 1 AS ID_BM, '' AS cbmbh, '' AS cbmmc, '' AS cType_Sys, 0 AS iStop, '' AS cType_Dev, '外厂' AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType ) scvDeviceAll WHERE ( iStop = 0 ) ) tvD ON tvD.ID = ttFC.ID_Parent AND tvD.iType IN ( 0, 1, 2 ) LEFT JOIN scDayRpt_Teams_People DTP ON ttDRpt_T.ID = DTP.ID_Teams AND dtp.cStation = '机长' ) TB2 ON TB2.ID_Teams = ttTJ.ID_Teams LEFT JOIN MCYD a ON a.CCYDH = ttTJ.cCode_AProduct ) JobTB GROUP BY 生产日期, JobTB.ID, 定额, 机台名称, 班组名称, 机长 ) tbu LEFT JOIN ( SELECT a.ID_Calendar, Sum( CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END ) AS 改规次数, Sum( CASE WHEN a.cCode_Item = 'U0073' THEN a.iState ELSE 0 END ) * 0.67 AS 改规时间, Sum( CASE WHEN a.cCode_Item = 'U0040' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 2 ) ) ELSE 0 END ) AS 周保养时间, Sum( CASE WHEN a.cCode_Item = 'U0070' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 做零活时间 FROM sctMJobFeedBackDetail_AttFB a LEFT JOIN MCYD b ON a.cProductBillCode = b.CCYDH GROUP BY ID_Calendar ) AttFB1 ON TBU.ID_Calendar = AttFB1.ID_Calendar LEFT JOIN ( SELECT a.ID_Calendar, CASE WHEN a.cCode_Item = 'U0077' THEN Cast( a.nAmount_Item AS DECIMAL ( 4, 2 ) ) ELSE 0 END AS 班次时长, Max( a.dTime ) AS 最晚时间 FROM sctMJobFeedBackDetail_AttFB a WHERE a.cCode_Item = 'U0077' GROUP BY a.ID_Calendar, a.nAmount_Item, a.cCode_Item ) AttFB2 ON TBU.ID_Calendar = AttFB2.ID_Calendar GROUP BY TBU.ID_Calendar, TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期, TBU.备注, TBU.定额, AttFB2.班次时长, AttFB1.做零活时间, AttFB1.周保养时间, ATTFB1.改规次数, AttFB1.改规时间 ) TBU2 WHERE 1 = 1 AND TBU2.机台名称 LIKE '%胶订潮流%' GROUP BY TBU2.机台名称, TBU2.班组名称, TBU2.机长, TBU2.生产日期, TBU2.备注, TBU2.定额, TBU2.考核工时, TBU2.班组产量, TBU2.产量折算工时, TBU2.改规次数, TBU2.改规时间, TBU2.做零活时间, TBU2.周保养时间, TBU2.有效工作时间 ) TBU GROUP BY TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期, TBU.备注, TBU.定额, TBU.考核工作时间 UNION ALL SELECT TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期, TBU.备注, CASE WHEN Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) >= TBU.考核工时 THEN '已完成' ELSE '未完成' END 效率分析, TBU.定额, TBU.考核工时 考核工作时间, Sum( TBU.班组产量 ) 班组产量, Sum( TBU.产量折算工时 ) 产量折算工时, Sum( TBU.改规次数 ) 改规次数, Sum( TBU.改规时间 ) 改规时间, Sum( TBU.做零活时间 ) 做零活时间, Sum( TBU.周保养时间 ) 周保养时间, Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) 有效工作时间, CASE WHEN Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) >= TBU.考核工时 THEN 100 ELSE Cast( ( Sum( TBU.产量折算工时 ) + Sum( TBU.改规时间 ) + Sum( TBU.周保养时间 ) + Sum( TBU.做零活时间 ) ) / TBU.考核工时 * 100 AS DECIMAL ( 4, 2 ) ) END 完成百分比 FROM (SELECT ttt.Name_Machine 机台名称, CONVERT ( ttt.dRealRptDate, CHAR ) 生产日期, DATE_FORMAT( ttt.dRealRptDate, '%W' ) 备注, ttt.Name_WorkGroup 班组名称, ( SELECT GROUP_CONCAT( b.cName ) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttT.ID AND b.cStation = '机长' ) 机长, CASE WHEN ttt.Name_Machine = '骑马联动01号' THEN '4000' WHEN ttt.Name_Machine = '骑马联动02号' THEN '4500' WHEN ttt.Name_Machine = '骑马联动03号' THEN '5000' ELSE '5000' END 定额, ttt.nOutput_RZ 班组产量, CASE WHEN ttt.Name_Machine = '骑马联动01号' THEN Cast( ttt.nOutput_RZ / 4000 AS DECIMAL ( 5, 1 ) ) WHEN ttt.Name_Machine = '骑马联动02号' THEN Cast( ttt.nOutput_RZ / 4500 AS DECIMAL ( 5, 1 ) ) WHEN ttt.Name_Machine = '骑马联动03号' THEN Cast( ttt.nOutput_RZ / 5000 AS DECIMAL ( 5, 1 ) ) ELSE Cast( ttt.nOutput_RZ / 5000 AS DECIMAL ( 5, 1 ) ) END 产量折算工时, IFNULL( AttFB2.班次时长, 10 ) 考核工时, Sum( CASE WHEN a.cCode_Item = 'U0075' THEN a.iReported ELSE 0 END ) AS 改规次数, Sum( CASE WHEN a.cCode_Item = 'U0075' THEN a.iReported ELSE 0 END ) * 0.5 AS 改规时间, Sum( CASE WHEN a.cCode_Item = 'U0040' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 周保养时间, Sum( CASE WHEN a.cCode_Item = 'U0070' THEN Cast( a.nAmount_Item AS DECIMAL ( 8, 3 ) ) ELSE 0 END ) AS 做零活时间 FROM ( SELECT *, 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 FROM scDayRpt_Teams WHERE iDayRptStatus >= 0 ) ttT LEFT JOIN ( SELECT ID_Calendar, 班次时长, 最晚时间 FROM ( SELECT a.ID_Calendar, CASE WHEN a.cCode_Item = 'U0077' THEN Cast( a.nAmount_Item AS DECIMAL ( 4, 2 ) ) ELSE 0 END AS 班次时长, a.dTime AS 最晚时间, Row_number ( ) OVER ( PARTITION BY a.ID_Calendar ORDER BY a.dTime DESC ) AS RowNumber FROM sctMJobFeedBackDetail_AttFB a WHERE a.cCode_Item = 'U0077' ) AS subquery WHERE RowNumber = 1 ) AttFB2 ON ttT.ID_Calendar = AttFB2.ID_Calendar LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar GROUP BY ttt.dRealRptDate, ttt.Name_Machine, ttT.id, AttFB2.班次时长, ttt.Name_WorkGroup, ttt.nOutput_RZ ) TBU WHERE TBU.机台名称 IN ( '骑马联动01号', '骑马联动02号', '骑马联动03号' ) GROUP BY TBU.机台名称, TBU.班组名称, TBU.机长, TBU.生产日期, TBU.备注, TBU.定额, TBU.考核工时 ) tt WHERE tt.生产日期 >= '{$ztday}' ORDER BY 完成百分比 DESC"; $res = Db::query($sql); $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").' 存进去了'; return $res; } //2.2装订印刷机昨日生产料率分析 public function yester_zd(){ $redis=redis(); $list = json_decode($redis->get(md5('yester_zd_redis')),true); // 定义班组名称的排序规则 $order = ['胶订精工', '胶订潮流', '胶订精密达', '骑马联动', '精装']; //按照班组名称排序 usort($list, function ($a, $b) use ($order) { // 获取班组名称中的关键词 preg_match('/('.implode('|', $order).')/', $a['班组名称'], $matchesA); preg_match('/('.implode('|', $order).')/', $b['班组名称'], $matchesB); // 获取关键词在排序数组中的索引 $indexA = array_search($matchesA[1], $order); $indexB = array_search($matchesB[1], $order); // 比较索引,返回比较结果 return $indexA - $indexB; }); $result['columns']=[ ['name'=>'日期','id'=>'rq','width'=>'11','color'=>'red','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'班组名称','id'=>'bzmc','width'=>'24','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'机长','id'=>'jz','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'定额','id'=>'dl','width'=>'16','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'班组产量','id'=>'bzcl','width'=>'11','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'生产效率分析','id'=>'scxlfx','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'完成百分比','id'=>'wcbfb','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'] ]; foreach($list as $k=>$v){ $result['rows'][$k]['rq']=$v['生产日期']; $result['rows'][$k]['bzmc']=$v['班组名称']; $result['rows'][$k]['jz']=$v['机长']; $result['rows'][$k]['dl']=$v['定额']; $result['rows'][$k]['bzcl']=round($v['班组产量']); $result['rows'][$k]['scxlfx']=$v['生产效率分析']; $result['rows'][$k]['wcbfb']=round($v['完成百分比']); } if($list==[]){ $result['rows'][0]['rq']=''; $result['rows'][0]['bzmc']=''; $result['rows'][0]['jz']=''; $result['rows'][0]['dl']=''; $result['rows'][0]['bzcl']=''; $result['rows'][0]['scxlfx']=''; $result['rows'][0]['wcbfb']=''; } $res['status']=0; $res['msg']=''; $res['data']=$result; return json($res); } //2.3轮转印刷机昨日生产料率分析(查询前一天数据)缓存 public function yester_lz_redis(){ $redis=redis(); $redis_key = md5('yester_lz_redis'); $ztday = date("Y-m-d",strtotime("-1 day")); $sql = "SELECT DATE_FORMAT(TBU2.生产日期,'%Y-%m-%d') 生产日期, -- TBU2.生产日期, -- TBU2.机台名称, TBU2.班组名称, TBU2.机长, -- DATE_FORMAT(TBU2.生产日期,'%W') 备注, -- Datename(WEEKDAY, TBU2.生产日期) 备注, CASE WHEN ( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间) + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间) + Sum(TBU2.周保养时间) ) >= TBU2.考核工作时间 THEN '已完成' ELSE '未完成' END AS 效率分析, TBU2.定额, -- TBU2.考核工作时间, Sum(TBU2.班组产量) 班组产量, -- Sum(TBU2.产量折算时间) 产量折算时间, -- Sum(TBU2.改墨次数) 改墨次数, -- Sum(TBU2.改墨时间) 改墨时间, -- Sum(TBU2.改纸路次数) 改纸路次数, -- Sum(TBU2.改纸路时间) 改纸路时间, -- Sum(TBU2.上版块数) 上版块数, -- Sum(TBU2.上版时间) 上版时间, -- Sum(TBU2.周保养时间) 周保养时间, -- ( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间) -- + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间) -- + Sum(TBU2.周保养时间) ) AS 有效工作时间, CASE WHEN ( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间) + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间) + Sum(TBU2.周保养时间) ) >= TBU2.考核工作时间 THEN 100 ELSE Cast(( Sum(TBU2.产量折算时间) + Sum(TBU2.改墨时间) + Sum(TBU2.改纸路时间) + Sum(TBU2.上版时间) + Sum(TBU2.周保养时间) ) / TBU2.考核工作时间 * 100 AS DECIMAL(5, 2)) END 完成百分比 FROM (SELECT CONVERT(TB1.生产日期,CHAR) 生产日期, TB1.机台名称, 14000 定额, TB1.班组名称, TB1.机长 AS 机长, TB1.班组产量, Cast(TB1.班组产量 / 14000 AS DECIMAL(5, 2)) 产量折算时间, TB1.改墨次数, Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间, TB1.上版块数, Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间, TB1.改纸路次数 AS 改纸路次数, Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间, TB1.周保养时间, Cast(TB1.班组产量 / 14000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间, 12 AS 考核工作时间 FROM (SELECT CASE WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day) ELSE ttt.dOnDuty END 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttT.ID AND b.cStation = '机长') 机长, ttt.nOutput_RZ 班组产量, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type ELSE 0 END) AS 改纸路次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2)) ELSE 0 END) AS 周保养时间 /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/ FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar LEFT JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0 /*iDayRptStatus=0未审核,iDayRptStatus=10为已审核,iDayRptStatus=-10为作废单*/ GROUP BY ttt.dOnDuty, ttt.Name_Machine, ttT.id, ttt.Name_WorkGroup, ttt.nOutput_RZ)TB1 WHERE TB1.机台名称 = '标规小森商轮1号' UNION ALL SELECT CONVERT(TB1.生产日期, CHAR) 生产日期, TB1.机台名称, 18000 定额, TB1.班组名称, tb1.机长 AS 机长, TB1.班组产量, Cast(TB1.班组产量 / 18000 AS DECIMAL(5, 2)) 产量折算时间, TB1.改墨次数, Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间, TB1.上版块数, Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间, TB1.改纸路次数 AS 改纸路次数, Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间, TB1.周保养时间, Cast(TB1.班组产量 / 18000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间, 12 AS 考核工作时间 FROM (SELECT CASE WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day) ELSE ttt.dOnDuty END 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttT.ID AND b.cStation = '机长') 机长, ttt.nOutput_RZ 班组产量, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type ELSE 0 END) AS 改纸路次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2)) ELSE 0 END) AS 周保养时间 /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/ FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar LEFT JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0 /*iDayRptStatus=0未审核,iDayRptStatus=10为已审核,iDayRptStatus=-10为作废单*/ GROUP BY ttt.dOnDuty, ttt.Name_Machine, ttt.ID, ttt.Name_WorkGroup, ttt.nOutput_RZ)TB1 WHERE TB1.机台名称 = '大规三菱商轮1号' UNION ALL SELECT CONVERT(TB1.生产日期, CHAR) 生产日期, TB1.机台名称, 20000 定额, TB1.班组名称, TB1.机长 AS 机长, TB1.班组产量, Cast(TB1.班组产量 / 20000 AS DECIMAL(5, 2)) 产量折算时间, TB1.改墨次数, Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间, TB1.上版块数, Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间, TB1.改纸路次数 AS 改纸路次数, Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间, TB1.周保养时间, Cast(TB1.班组产量 / 20000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间, 12 AS 考核工作时间 FROM (SELECT CASE WHEN CONVERT(ttt.dOnDuty, CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day) ELSE ttt.dOnDuty END 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttT.ID AND b.cStation = '机长') 机长, ttt.nOutput_RZ 班组产量, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type ELSE 0 END) AS 改纸路次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2)) ELSE 0 END) AS 周保养时间 /*上版次数 U0033,改墨U0037,交接班改墨U0041,轮转改墨色U0047,改规U0036,无生活U0039,改纸路U0042,周保养U0040*/ FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar LEFT JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0 /*iDayRptStatus=0未审核,iDayRptStatus=10为已审核,iDayRptStatus=-10为作废单*/ GROUP BY ttt.dOnDuty, ttt.Name_Machine, ttt.ID, ttt.Name_WorkGroup, ttt.nOutput_RZ)TB1 WHERE TB1.机台名称 IN( '标规小森商轮2号', '标规三菱商轮1号', '标规三菱商轮2号', '大规小森商轮1号', '标规高斯轮转1号' ) UNION ALL SELECT CONVERT(TB1.生产日期, CHAR) 生产日期, TB1.机台名称, 12000 定额, TB1.班组名称, TB1.机长 机长, TB1.班组产量, Cast(TB1.班组产量 / 12000 AS DECIMAL(5, 2)) 产量折算时间, TB1.改墨次数, Cast(TB1.改墨次数 * 0.5 AS DECIMAL(5, 2)) AS 改墨时间, TB1.上版块数, Cast(TB1.上版块数 * 7.5 / 60.00 AS DECIMAL(5, 2)) AS 上版时间, TB1.改纸路次数 AS 改纸路次数, Cast(TB1.改纸路次数 * 0.5 AS DECIMAL(5, 2)) AS 改纸路时间, TB1.周保养时间, Cast(TB1.班组产量 / 12000 AS DECIMAL(5, 2)) + TB1.改墨次数 * 0.5 + TB1.上版块数 * 7.5 / 60.00 + TB1.周保养时间 AS 有效工作时间, 12 AS 考核工作时间 FROM (SELECT CASE WHEN CONVERT(ttt.dOnDuty,CHAR) < (SELECT IFNULL(csetvalue, '00:00') + ':00' FROM sysetup WHERE csetname = 'frmFSetupAtt.dxtdBegin') THEN DATE_ADD(ttt.dOnDuty,INTERVAL -1 day) ELSE ttt.dOnDuty END 生产日期, ttt.Name_Machine 机台名称, ttt.Name_WorkGroup 班组名称, (SELECT GROUP_CONCAT(b.cName) FROM scDayRpt_Teams_People b WHERE b.ID_Teams = ttT.ID AND b.cStation = '机长') 机长, ttt.nOutput_RZ 班组产量, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN b.iAttFB_Type ELSE 0 END) AS 上版次数, Sum(CASE WHEN a.cCode_Item = 'U0033' THEN CONVERT(RIGHT(a.cText_Item, 1),SIGNED) ELSE 0 END) AS 上版块数, Sum(CASE WHEN a.cCode_Item IN( 'U0047', 'U0041' ) THEN b.iAttFB_Type ELSE 0 END) AS 改墨次数, Sum(CASE WHEN a.cCode_Item = 'U0036' THEN a.nAmount_Item ELSE 0 END) AS 改规次数, Sum(CASE WHEN a.cCode_Item = 'U0042' THEN b.iAttFB_Type ELSE 0 END) AS 改纸路次数, Sum(CASE WHEN a.cCode_Item = 'U0040' THEN Cast(a.nAmount_Item AS DECIMAL(8, 2)) ELSE 0 END) AS 周保养时间 FROM scDayRpt_Teams ttT LEFT JOIN sctMJobFeedBackDetail_AttFB a ON ttT.ID_Calendar = a.ID_Calendar LEFT JOIN sctJFBActive b ON b.ID = a.ID_Act WHERE ttT.iDayRptStatus >= 0 GROUP BY ttt.dOnDuty, ttt.Name_Machine, ttt.ID, ttt.Name_WorkGroup, ttt.nOutput_RZ)TB1 WHERE TB1.机台名称 IN( '标规报轮1号', '标规204胶轮1号' ))TBU2 WHERE TBU2.生产日期 >= '{$ztday}' AND TBU2.班组产量 > 0 GROUP BY TBU2.机台名称, TBU2.班组名称, TBU2.机长, TBU2.生产日期, TBU2.定额, TBU2.考核工作时间 ORDER BY 完成百分比 DESC"; $res = Db::query($sql); $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").' 存进去了'; return $res; } //2.3轮转印刷机昨日生产料率分析 public function yester_lz(){ $redis=redis(); $list = json_decode($redis->get(md5('yester_lz_redis')), true); // 定义班组名称的排序规则 $order = ['标规', '大规']; //按照班组名称排序 usort($list, function ($a, $b) use ($order) { // 获取班组名称中的关键词 preg_match('/('.implode('|', $order).')/', $a['班组名称'], $matchesA); preg_match('/('.implode('|', $order).')/', $b['班组名称'], $matchesB); // 获取关键词在排序数组中的索引 $indexA = array_search($matchesA[1], $order); $indexB = array_search($matchesB[1], $order); // 比较索引,返回比较结果 return $indexA - $indexB; }); $result['columns']=[ ['name'=>'日期','id'=>'rq','width'=>'11','color'=>'red','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'班组名称','id'=>'bzmc','width'=>'24','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'机长','id'=>'jz','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'定额','id'=>'dl','width'=>'16','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'班组产量','id'=>'bzcl','width'=>'11','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'生产效率分析','id'=>'scxlfx','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'完成百分比','id'=>'wcbfb','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'] ]; foreach($list as $k=>$v){ $result['rows'][$k]['rq']=$v['生产日期']; $result['rows'][$k]['bzmc']=$v['班组名称']; $result['rows'][$k]['jz']=$v['机长']; $result['rows'][$k]['dl']=$v['定额']; $result['rows'][$k]['bzcl']=round($v['班组产量']); $result['rows'][$k]['scxlfx']=$v['效率分析']; $result['rows'][$k]['wcbfb']=round($v['完成百分比']); } if($list==[]){ $result['rows'][0]['rq']=''; $result['rows'][0]['bzmc']=''; $result['rows'][0]['jz']=''; $result['rows'][0]['dl']=''; $result['rows'][0]['bzcl']=''; $result['rows'][0]['scxlfx']=''; $result['rows'][0]['wcbfb']=''; } $res['status']=0; $res['msg']=''; $res['data']=$result; return json($res); } /** * 第三屏第三页 质量管控看板 */ //按客户 按质量问题 按责任部门-->分组【Bi根据饼状图分组轮播变化】【暂时未用到 可以删除】 public function zlgk_grouping() { $result = ['按部门', '按质量问题', '按责任部门']; $data = [ "columns" => [ ["name" => "分组", "id" => "subsys"] ], "rows" => [] ]; foreach ($result as $value) { $data["rows"][] = ["subsys" => $value]; } $res = [ 'status' => 0, 'msg' => '', 'data' => $data ]; return json_encode($res, JSON_UNESCAPED_UNICODE); } //同期投诉增减比 按客户->今年缓存 public function qkhzl_redis(){ $redis=redis(); $redis_key = md5('qkhzl_redis'); // $startDate = date("Y-04-22"); $startDate = date("Y-m-d", strtotime("-1 year")); $endDate = date("Y-m-d"); $res= Db::query("SELECT resp.cReasonCName,D.cdwmc FROM ecComplainFeedback B LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd LEFT JOIN (SELECT a.ID_qlOrderProduct,Sum(a.iAmountOut) iAmount_Out FROM SCYDYSQX a GROUP BY a.ID_qlOrderProduct) c ON c.ID_qlOrderProduct = p.ID LEFT JOIN ecComplainContent DD ON DD.iComplainFBID = B.iID LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P LEFT JOIN (SELECT R.iComplainFBID, PP.strSubName AS cReasonPName, CC2.strSubName AS cReasonCName, CR.cRespPerson, CR.cRespDept, CR.cRespTech, CR.cRespCorp, CR.nMoney FROM ecComplainReasonAnalysis R LEFT JOIN tbConfig CC2 ON CC2.iNoConfig = R.iReasonID_C LEFT JOIN tbConfig PP ON PP.iNoConfig = R.iReasonID_P LEFT JOIN ecComplainResponsibility CR ON CR.iComplainRAID = R.iID) resp ON resp.iComplainFBID = B.iID WHERE 1 = 1 AND b.dFeedbackDate >= '{$startDate}' AND b.dFeedbackDate <= '{$endDate}'"); if($res){ $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").'存进去了'; return $res; } } //同期投诉增减比 按客户->去年缓存 public function qiankhzl_redis(){ $redis=redis(); $redis_key = md5('qiankhzl_redis'); // 获取当前的年、月、日 $currentYear = date("Y"); $currentMonth = date("m"); $currentDay = date("d"); // 计算前一年和前两年的年份 $lastYear = $currentYear - 1; $twoYearsAgo = $currentYear - 2; // 构造日期字符串 $startDate = date("Y-m-d", strtotime("$twoYearsAgo-$currentMonth-$currentDay")); $endDate = date("Y-m-d", strtotime("$lastYear-$currentMonth-$currentDay")); $res= Db::query("SELECT resp.cReasonCName,D.cdwmc FROM ecComplainFeedback B LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd LEFT JOIN (SELECT a.ID_qlOrderProduct,Sum(a.iAmountOut) iAmount_Out FROM SCYDYSQX a GROUP BY a.ID_qlOrderProduct) c ON c.ID_qlOrderProduct = p.ID LEFT JOIN ecComplainContent DD ON DD.iComplainFBID = B.iID LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P LEFT JOIN (SELECT R.iComplainFBID, PP.strSubName AS cReasonPName, CC2.strSubName AS cReasonCName, CR.cRespPerson, CR.cRespDept, CR.cRespTech, CR.cRespCorp, CR.nMoney FROM ecComplainReasonAnalysis R LEFT JOIN tbConfig CC2 ON CC2.iNoConfig = R.iReasonID_C LEFT JOIN tbConfig PP ON PP.iNoConfig = R.iReasonID_P LEFT JOIN ecComplainResponsibility CR ON CR.iComplainRAID = R.iID) resp ON resp.iComplainFBID = B.iID WHERE 1 = 1 AND b.dFeedbackDate >= '{$startDate}' AND b.dFeedbackDate <= '{$endDate}'"); if($res){ $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").'存进去了'; return $res; } } //同期投诉增减比 按责任部门->今年缓存 public function qbmzl_redis(){ $redis=redis(); $redis_key = md5('qbmzl_redis'); $startDate = date("Y-m-d", strtotime("-1 year")); $endDate = date("Y-m-d"); $res1=Db::query("SELECT IFNULL(责任部门, '其他') AS 部门, COUNT(*) AS 投诉次数 FROM ( SELECT e.cDept AS 责任部门, F.MergedStrSubName AS 小类 FROM ecComplainFeedback B LEFT JOIN ecComplainContent C ON B.iID = C.iComplainFBID LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID LEFT JOIN ecComplainDeptOpinion e ON B.iID = e.iComplainFBID LEFT JOIN ( SELECT R.iComplainFBID, ( SELECT GROUP_CONCAT(cc.strSubName ORDER BY cc.strSubName SEPARATOR ',') FROM ecComplainReasonAnalysis AS R2 LEFT JOIN tbConfig AS cc ON cc.iNoConfig = R2.iReasonID_C WHERE R2.iComplainFBID = R.iComplainFBID ) AS MergedStrSubName FROM ecComplainReasonAnalysis AS R LEFT JOIN tbConfig AS cc ON cc.iNoConfig = R.iReasonID_C WHERE 1 = 1 GROUP BY R.iComplainFBID ) F ON B.iID = F.iComplainFBID WHERE DATE_FORMAT(B.dComplainDate, '%Y-%m-%d') BETWEEN '{$startDate}' AND '{$endDate}' AND B.iState = 30 ) AS MainQuery GROUP BY MainQuery.责任部门 ORDER BY COUNT(*) DESC"); if($res1){ $redis->set($redis_key, json_encode($res1)); echo date("Y-m-d H:i:s").'存进去了'; return $res1; } } //同期投诉增减比 按责任部门->去年缓存 public function qianbmzl_redis(){ $redis=redis(); $redis_key = md5('qianbmzl_redis'); // 获取当前的年、月、日 $currentYear = date("Y"); $currentMonth = date("m"); $currentDay = date("d"); // 计算前一年和前两年的年份 $lastYear = $currentYear - 1; $twoYearsAgo = $currentYear - 2; // 构造日期字符串 $startDate = date("Y-m-d", strtotime("$twoYearsAgo-$currentMonth-$currentDay")); $endDate = date("Y-m-d", strtotime("$lastYear-$currentMonth-$currentDay")); $res1=Db::query("SELECT IFNULL(责任部门, '其他') AS 部门, COUNT(*) AS 投诉次数 FROM ( SELECT e.cDept AS 责任部门, F.MergedStrSubName AS 小类 FROM ecComplainFeedback B LEFT JOIN ecComplainContent C ON B.iID = C.iComplainFBID LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID LEFT JOIN ecComplainDeptOpinion e ON B.iID = e.iComplainFBID LEFT JOIN ( SELECT R.iComplainFBID, ( SELECT GROUP_CONCAT(cc.strSubName ORDER BY cc.strSubName SEPARATOR ',') FROM ecComplainReasonAnalysis AS R2 LEFT JOIN tbConfig AS cc ON cc.iNoConfig = R2.iReasonID_C WHERE R2.iComplainFBID = R.iComplainFBID ) AS MergedStrSubName FROM ecComplainReasonAnalysis AS R LEFT JOIN tbConfig AS cc ON cc.iNoConfig = R.iReasonID_C WHERE 1 = 1 GROUP BY R.iComplainFBID ) F ON B.iID = F.iComplainFBID WHERE DATE_FORMAT(B.dComplainDate, '%Y-%m-%d') BETWEEN '{$startDate}' AND '{$endDate}' AND B.iState = 30 ) AS MainQuery GROUP BY MainQuery.责任部门 ORDER BY COUNT(*) DESC"); if($res1){ $redis->set($redis_key, json_encode($res1)); echo date("Y-m-d H:i:s").'存进去了'; return $res1; } } //同期投诉增减比 按责任部门->今年缓存【可以删】 public function qbmzl_rediss(){ $redis=redis(); $redis_key = md5('qbmzl_redis'); $startDate = date("Y-m-d", strtotime("-1 year")); $endDate = date("Y-m-d"); $res1=Db::query("SELECT CASE WHEN CR.cRespDept = '' THEN '外协单位' ELSE CR.cRespDept END AS 部门, Count(*) AS 投诉次数 FROM ecComplainFeedback B LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd LEFT JOIN (SELECT a.ID_qlOrderProduct, Sum(a.iAmountOut) iAmount_Out FROM SCYDYSQX a GROUP BY a.ID_qlOrderProduct) c ON c.ID_qlOrderProduct = p.ID LEFT JOIN ecComplainContent DD ON DD.iComplainFBID = B.iID LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P LEFT JOIN (SELECT R.iComplainFBID,CR1.cRespDept FROM ecComplainReasonAnalysis R LEFT JOIN ecComplainResponsibility CR1 ON CR1.iComplainRAID = R.iID) CR ON B.iID = CR.iComplainFBID WHERE 1 = 1 AND b.dFeedbackDate >= '{$startDate}' AND b.dFeedbackDate <= '{$endDate}' GROUP BY CR.cRespDept ORDER BY 投诉次数 DESC, CR.cRespDept; "); foreach($res1 as $k=>$v){ if($v['部门']=='全部'){ unset($res1[$k]); } } foreach($res1 as $k=>$v){ if($v['部门']===null){ $res1[$k]['部门']='全部'; } } $res = Db::query("SELECT CR2.cReasonPName,CR2.cRespDept FROM ecComplainFeedback B2 LEFT JOIN (SELECT R2.iComplainFBID, CR1.cRespDept, CC.strSubName AS cReasonPName FROM ecComplainReasonAnalysis R2 LEFT JOIN ecComplainResponsibility CR1 ON CR1.iComplainRAID = R2.iID LEFT JOIN tbConfig CC ON CC.iNoConfig = R2.iReasonID_C LEFT JOIN tbConfig PP ON PP.iNoConfig = R2.iReasonID_P) CR2 ON B2.iID = CR2.iComplainFBID WHERE b2.dFeedbackDate >= '{$startDate}' AND b2.dFeedbackDate <= '{$endDate}'"); $list = []; for ($i = 0; $i < count($res); $i++) { if($res[$i]['cRespDept']===''){ $res[$i]['cRespDept']='外协单位'; } if($res[$i]['cRespDept']===null){ $res[$i]['cRespDept']='全部'; } $list[$res[$i]['cRespDept']][] = $res[$i]['cReasonPName']; } array_multisort($list, SORT_DESC); $result = []; $i = 0; foreach ($list as $k => $v) { // $result[$i]['部门'] = $k; // $result[$i]['投诉次数'] = count($v); // $result[$i]['合并原因'] = ''; $result[$k]=''; foreach ($v as $key => $value) { if ($value == null) { unset($v[$key]); } } foreach (array_count_values($v) as $a => $b) { // $result[$i]['合并原因'] .= $a . $b . '/'; $result[$k] .= $a . $b . '/'; } // $result[$i]['合并原因'] = substr($result[$i]['合并原因'], 0, -1); $result[$k] = substr($result[$k], 0, -1); $i++; } foreach($res1 as $k=>$v){ if($v['部门']!==null)$res1[$k]['合并原因']=$result[$v['部门']]; if($v['部门']=='全部'){ $res1[$k]['投诉次数']=count($list['全部']); } } if($res1){ $redis->set($redis_key, json_encode($res1)); echo date("Y-m-d H:i:s").'存进去了'; return $res1; } } //同期投诉增减比 按责任部门->去年缓存【可以删】 public function qianbmzl_rediss(){ $redis=redis(); $redis_key = md5('qianbmzl_redis'); // 获取当前的年、月、日 $currentYear = date("Y"); $currentMonth = date("m"); $currentDay = date("d"); // 计算前一年和前两年的年份 $lastYear = $currentYear - 1; $twoYearsAgo = $currentYear - 2; // 构造日期字符串 $startDate = date("Y-m-d", strtotime("$twoYearsAgo-$currentMonth-$currentDay")); $endDate = date("Y-m-d", strtotime("$lastYear-$currentMonth-$currentDay")); $res1=Db::query("SELECT CASE WHEN CR.cRespDept = '' THEN '外协单位' ELSE CR.cRespDept END AS 部门, Count(*) AS 投诉次数 FROM ecComplainFeedback B LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd LEFT JOIN (SELECT a.ID_qlOrderProduct, Sum(a.iAmountOut) iAmount_Out FROM SCYDYSQX a GROUP BY a.ID_qlOrderProduct) c ON c.ID_qlOrderProduct = p.ID LEFT JOIN ecComplainContent DD ON DD.iComplainFBID = B.iID LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P LEFT JOIN (SELECT R.iComplainFBID,CR1.cRespDept FROM ecComplainReasonAnalysis R LEFT JOIN ecComplainResponsibility CR1 ON CR1.iComplainRAID = R.iID) CR ON B.iID = CR.iComplainFBID WHERE 1 = 1 AND b.dFeedbackDate >= '{$startDate}' AND b.dFeedbackDate <= '{$endDate}' GROUP BY CR.cRespDept ORDER BY 投诉次数 DESC, CR.cRespDept; "); foreach($res1 as $k=>$v){ if($v['部门']=='全部'){ unset($res1[$k]); } } foreach($res1 as $k=>$v){ if($v['部门']===null){ $res1[$k]['部门']='全部'; } } $res = Db::query("SELECT CR2.cReasonPName,CR2.cRespDept FROM ecComplainFeedback B2 LEFT JOIN (SELECT R2.iComplainFBID, CR1.cRespDept, CC.strSubName AS cReasonPName FROM ecComplainReasonAnalysis R2 LEFT JOIN ecComplainResponsibility CR1 ON CR1.iComplainRAID = R2.iID LEFT JOIN tbConfig CC ON CC.iNoConfig = R2.iReasonID_C LEFT JOIN tbConfig PP ON PP.iNoConfig = R2.iReasonID_P) CR2 ON B2.iID = CR2.iComplainFBID WHERE b2.dFeedbackDate >= '{$startDate}' AND b2.dFeedbackDate <= '{$endDate}'"); $list = []; for ($i = 0; $i < count($res); $i++) { if($res[$i]['cRespDept']===''){ $res[$i]['cRespDept']='外协单位'; } if($res[$i]['cRespDept']===null){ $res[$i]['cRespDept']='全部'; } $list[$res[$i]['cRespDept']][] = $res[$i]['cReasonPName']; } array_multisort($list, SORT_DESC); $result = []; $i = 0; foreach ($list as $k => $v) { // $result[$i]['部门'] = $k; // $result[$i]['投诉次数'] = count($v); // $result[$i]['合并原因'] = ''; $result[$k]=''; foreach ($v as $key => $value) { if ($value == null) { unset($v[$key]); } } foreach (array_count_values($v) as $a => $b) { // $result[$i]['合并原因'] .= $a . $b . '/'; $result[$k] .= $a . $b . '/'; } // $result[$i]['合并原因'] = substr($result[$i]['合并原因'], 0, -1); $result[$k] = substr($result[$k], 0, -1); $i++; } foreach($res1 as $k=>$v){ if($v['部门']!==null)$res1[$k]['合并原因']=$result[$v['部门']]; if($v['部门']=='全部'){ $res1[$k]['投诉次数']=count($list['全部']); } } if($res1){ $redis->set($redis_key, json_encode($res1)); echo date("Y-m-d H:i:s").'存进去了'; return $res1; } } //同期投诉增减比 按质量问题->今年缓存 public function qzlwt_redis(){ $redis=redis(); $redis_key = md5('qzlwt_redis'); $startDate = date("Y-m-d", strtotime("-1 year")); $endDate = date("Y-m-d"); $res = Db::query("SELECT D1.cdwmc,resp1.cReasonCName FROM ecComplainFeedback B LEFT JOIN DZYWDW D1 ON D1.iywdwid = B.iClientID LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd LEFT JOIN (SELECT a.ID_qlOrderProduct, Sum(a.iAmountOut) iAmount_Out FROM SCYDYSQX a GROUP BY a.ID_qlOrderProduct) c ON c.ID_qlOrderProduct = p.ID LEFT JOIN ecComplainContent DD ON DD.iComplainFBID = B.iID LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P LEFT JOIN (SELECT R.iComplainFBID, PP.strSubName AS cReasonPName, CC2.strSubName AS cReasonCName, CR.cRespPerson, CR.cRespDept, CR.cRespTech, CR.cRespCorp, CR.nMoney FROM ecComplainReasonAnalysis R LEFT JOIN tbConfig CC2 ON CC2.iNoConfig = R.iReasonID_C LEFT JOIN tbConfig PP ON PP.iNoConfig = R.iReasonID_P LEFT JOIN ecComplainResponsibility CR ON CR.iComplainRAID = R.iID) resp1 ON resp1.iComplainFBID = B.iID WHERE b.dFeedbackDate >= '{$startDate}' AND b.dFeedbackDate <= '{$endDate}'"); if($res){ $list = []; for ($i = 0; $i < count($res); $i++) { $list[$res[$i]['cReasonCName']][] = $res[$i]['cdwmc']; } array_multisort($list, SORT_DESC); $result = []; $i = 0; foreach ($list as $k => $v) { $result[$i]['质量问题'] = $k; $result[$i]['投诉次数'] = count($v); $result[$i]['合并原因'] = ''; foreach ($v as $key => $value) { if ($value == null) { unset($v[$key]); } } foreach (array_count_values($v) as $a => $b) { $result[$i]['合并原因'] .= $a . $b . '/'; } $result[$i]['合并原因'] = substr($result[$i]['合并原因'], 0, -1); $i++; } $result=array_splice($result,0,6); $list=[]; foreach($result as $k=>$v){ $list[$k]['name']=$v['质量问题']; $list[$k]['value']=$v['投诉次数']; } $redis->set($redis_key, json_encode($list)); echo date("Y-m-d H:i:s").'存进去了'; return $list; } } //同期投诉增减比 按质量问题->去年缓存 public function qianzlwt_redis(){ $redis=redis(); $redis_key = md5('qianzlwt_redis'); // 获取当前的年、月、日 $currentYear = date("Y"); $currentMonth = date("m"); $currentDay = date("d"); // 计算前一年和前两年的年份 $lastYear = $currentYear - 1; $twoYearsAgo = $currentYear - 2; // 构造日期字符串 $startDate = date("Y-m-d", strtotime("$twoYearsAgo-$currentMonth-$currentDay")); $endDate = date("Y-m-d", strtotime("$lastYear-$currentMonth-$currentDay")); $res = Db::query("SELECT D1.cdwmc,resp1.cReasonCName FROM ecComplainFeedback B LEFT JOIN DZYWDW D1 ON D1.iywdwid = B.iClientID LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd LEFT JOIN (SELECT a.ID_qlOrderProduct, Sum(a.iAmountOut) iAmount_Out FROM SCYDYSQX a GROUP BY a.ID_qlOrderProduct) c ON c.ID_qlOrderProduct = p.ID LEFT JOIN ecComplainContent DD ON DD.iComplainFBID = B.iID LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P LEFT JOIN (SELECT R.iComplainFBID, PP.strSubName AS cReasonPName, CC2.strSubName AS cReasonCName, CR.cRespPerson, CR.cRespDept, CR.cRespTech, CR.cRespCorp, CR.nMoney FROM ecComplainReasonAnalysis R LEFT JOIN tbConfig CC2 ON CC2.iNoConfig = R.iReasonID_C LEFT JOIN tbConfig PP ON PP.iNoConfig = R.iReasonID_P LEFT JOIN ecComplainResponsibility CR ON CR.iComplainRAID = R.iID) resp1 ON resp1.iComplainFBID = B.iID WHERE b.dFeedbackDate >= '{$startDate}' AND b.dFeedbackDate <= '{$endDate}'"); if($res){ $list = []; for ($i = 0; $i < count($res); $i++) { $list[$res[$i]['cReasonCName']][] = $res[$i]['cdwmc']; } array_multisort($list, SORT_DESC); $result = []; $i = 0; foreach ($list as $k => $v) { $result[$i]['质量问题'] = $k; $result[$i]['投诉次数'] = count($v); $result[$i]['合并原因'] = ''; foreach ($v as $key => $value) { if ($value == null) { unset($v[$key]); } } foreach (array_count_values($v) as $a => $b) { $result[$i]['合并原因'] .= $a . $b . '/'; } $result[$i]['合并原因'] = substr($result[$i]['合并原因'], 0, -1); $i++; } $result=array_splice($result,0,6); $list=[]; foreach($result as $k=>$v){ $list[$k]['name']=$v['质量问题']; $list[$k]['value']=$v['投诉次数']; } $redis->set($redis_key, json_encode($list)); echo date("Y-m-d H:i:s").'存进去了'; return $list; } } //同期投诉增减比->接口 public function tqts_list(){ $postData = input('post.dependence.item.name'); $redisKeys = [ "按客户" => 'qkhzl_redis', "按质量问题" => 'qzlwt_redis', "按责任部门" => 'qbmzl_redis' ]; $redis_key = isset($redisKeys[$postData]) ? md5($redisKeys[$postData]) : md5('qkhzl_redis'); $redis = redis(); $r_list = json_decode($redis->get($redis_key), true); if (!$r_list) { // 处理没有数据的情况 $response_data = [ 'status' => 1, 'msg' => '没有找到相关数据', 'data' => [] ]; return json_encode($response_data, JSON_UNESCAPED_UNICODE); } if($postData == '按客户') { $qr_list = json_decode($redis->get(md5('qiankhzl_redis')),true); $c_list = []; foreach ($r_list as $item) { $c_list[$item['cdwmc']][] = $item['cReasonCName']; } array_multisort($c_list, SORT_DESC); $result = []; $i = 0; foreach ($c_list as $cdwmc => $reasons) { $complaint_count = count($reasons); $unique_reasons = array_count_values(array_filter($reasons)); // 去除空值并计算出现次数 // 构建质量问题的描述 $quality_issues = ''; foreach ($unique_reasons as $reason => $count) { $quality_issues .= "{$reason}{$count}/"; } // 去掉最后一个斜杠 $quality_issues = rtrim($quality_issues, '/'); // 添加到结果数组 $result[] = [ '客户单位' => $cdwmc, '投诉次数' => $complaint_count ]; } $qc_list = []; foreach ($qr_list as $qitem) { $qc_list[$qitem['cdwmc']][] = $qitem['cReasonCName']; } array_multisort($qc_list, SORT_DESC); $qresult = []; $qi = 0; foreach ($qc_list as $qcdwmc => $qreasons) { $qcomplaint_count = count($qreasons); $qunique_reasons = array_count_values(array_filter($qreasons)); // 去除空值并计算出现次数 // 构建质量问题的描述 $qquality_issues = ''; foreach ($qunique_reasons as $qreason => $qcount) { $qquality_issues .= "{$qreason}{$qcount}/"; } // 去掉最后一个斜杠 $qquality_issues = rtrim($qquality_issues, '/'); // 添加到结果数组 $qresult[] = [ '客户单位' => $qcdwmc, '投诉次数' => $qcomplaint_count ]; } $result = array_slice($result, 0, 10); $qresult = array_slice($qresult, 0, 10); foreach ($result as $index => $rv) { $list['categories'][] = $rv['客户单位']; } // 初始数据结构 $data = [ "categories" => [], // 客户单位 "series" => [ [ "name" => "同比增减百分比", "type" => "line", "yAxisIndex" => 1, "data" => [] ], [ "name" => date('Y').'年', "type" => "bar", "yAxisIndex" => 0, "data" => [] ], [ "name" => (date('Y')-1).'年', "type" => "bar", "yAxisIndex" => 0, "data" => [], ] ] ]; // 确保 $result 和 $qresult 索引的一致性 foreach ($result as $index => $rv) { // 添加客户单位 $data['categories'][] = $rv['客户单位']; // 计算同比增减百分比,并添加到相应的数据数组 if (isset($rv['投诉次数']) && isset($qresult[$index]['投诉次数']) && $qresult[$index]['投诉次数'] != 0) { $percentage_change = round(($rv['投诉次数'] - $qresult[$index]['投诉次数']) / $qresult[$index]['投诉次数'] ,2); $data['series'][0]['data'][] = $percentage_change; // 同比增减百分比 } else { $data['series'][0]['data'][] = 0; // 防止错误计算 } // 添加今年的数据 if (isset($rv['投诉次数'])) { $data['series'][1]['data'][] = $rv['投诉次数']; } else { $data['series'][1]['data'][] = 0; // 防止空值 } // 添加去年的数据 if (isset($qresult[$index]['投诉次数'])) { $data['series'][2]['data'][] = $qresult[$index]['投诉次数']; } else { $data['series'][2]['data'][] = 0; // 防止空值 } } // 组织JSON返回结构 $res = [ 'status' => 0, 'msg' => '', 'data' => $data ]; // 返回JSON响应 return json($res); } else if($postData == '按质量问题') { $qr_list = json_decode($redis->get(md5('qiankhzl_redis')),true); $qresult = json_decode($redis->get(md5('qianzlwt_redis')),true); // 初始数据结构 $data = [ "categories" => [], // 客户单位 "series" => [ [ "name" => "同比增减百分比", "type" => "line", "yAxisIndex" => 1, "data" => [] ], [ "name" => date('Y').'年', "type" => "bar", "yAxisIndex" => 0, "data" => [] ], [ "name" => (date('Y')-1).'年', "type" => "bar", "yAxisIndex" => 0, "data" => [], ] ] ]; foreach ($r_list as $index => $rv) { // 添加客户单位 $data['categories'][] = $rv['name']; // 计算同比增减百分比,并添加到相应的数据数组 if (isset($rv['value']) && isset($qresult[$index]['value']) && $qresult[$index]['value'] != 0) { $percentage_change = round(($rv['value'] - $qresult[$index]['value']) / $qresult[$index]['value'] ,2); $data['series'][0]['data'][] = $percentage_change; // 同比增减百分比 } else { $data['series'][0]['data'][] = 0; // 防止错误计算 } // 添加今年的数据 if (isset($rv['value'])) { $data['series'][1]['data'][] = $rv['value']; } else { $data['series'][1]['data'][] = 0; // 防止空值 } // 添加去年的数据 if (isset($qresult[$index]['value'])) { $data['series'][2]['data'][] = $qresult[$index]['value']; } else { $data['series'][2]['data'][] = 0; // 防止空值 } } // 组织JSON返回结构 $res = [ 'status' => 0, 'msg' => '', 'data' => $data ]; // 返回JSON响应 return json($res); } else if($postData == '按责任部门') { $qresult = json_decode($redis->get(md5('qianbmzl_redis')),true); // 初始数据结构 $data = [ "categories" => [], // 客户单位 "series" => [ [ "name" => "同比增减百分比", "type" => "line", "yAxisIndex" => 1, "data" => [] ], [ "name" => date('Y').'年', "type" => "bar", "yAxisIndex" => 0, "data" => [] ], [ "name" => (date('Y')-1).'年', "type" => "bar", "yAxisIndex" => 0, "data" => [], ] ] ]; foreach ($r_list as $index => $rv) { // 添加客户单位 $data['categories'][] = $rv['部门']; // 计算同比增减百分比,并添加到相应的数据数组 if (isset($rv['投诉次数']) && isset($qresult[$index]['投诉次数']) && $qresult[$index]['投诉次数'] != 0) { $percentage_change = round(($rv['投诉次数'] - $qresult[$index]['投诉次数']) / $qresult[$index]['投诉次数'] ,2); $data['series'][0]['data'][] = $percentage_change; // 同比增减百分比 } else { $data['series'][0]['data'][] = 0; // 防止错误计算 } // 添加今年的数据 if (isset($rv['投诉次数'])) { $data['series'][1]['data'][] = $rv['投诉次数']; } else { $data['series'][1]['data'][] = 0; // 防止空值 } // 添加去年的数据 if (isset($qresult[$index]['投诉次数'])) { $data['series'][2]['data'][] = $qresult[$index]['投诉次数']; } else { $data['series'][2]['data'][] = 0; // 防止空值 } } // 组织JSON返回结构 $res = [ 'status' => 0, 'msg' => '', 'data' => $data ]; // 返回JSON响应 return json($res); }else{ $qr_list = json_decode($redis->get(md5('qiankhzl_redis')),true); $c_list = []; foreach ($r_list as $item) { $c_list[$item['cdwmc']][] = $item['cReasonCName']; } array_multisort($c_list, SORT_DESC); $result = []; $i = 0; foreach ($c_list as $cdwmc => $reasons) { $complaint_count = count($reasons); $unique_reasons = array_count_values(array_filter($reasons)); // 去除空值并计算出现次数 // 构建质量问题的描述 $quality_issues = ''; foreach ($unique_reasons as $reason => $count) { $quality_issues .= "{$reason}{$count}/"; } // 去掉最后一个斜杠 $quality_issues = rtrim($quality_issues, '/'); // 添加到结果数组 $result[] = [ '客户单位' => $cdwmc, '投诉次数' => $complaint_count ]; } $qc_list = []; foreach ($qr_list as $qitem) { $qc_list[$qitem['cdwmc']][] = $qitem['cReasonCName']; } array_multisort($qc_list, SORT_DESC); $qresult = []; $qi = 0; foreach ($qc_list as $qcdwmc => $qreasons) { $qcomplaint_count = count($qreasons); $qunique_reasons = array_count_values(array_filter($qreasons)); // 去除空值并计算出现次数 // 构建质量问题的描述 $qquality_issues = ''; foreach ($qunique_reasons as $qreason => $qcount) { $qquality_issues .= "{$qreason}{$qcount}/"; } // 去掉最后一个斜杠 $qquality_issues = rtrim($qquality_issues, '/'); // 添加到结果数组 $qresult[] = [ '客户单位' => $qcdwmc, '投诉次数' => $qcomplaint_count ]; } $result = array_slice($result, 0, 10); $qresult = array_slice($qresult, 0, 10); foreach ($result as $index => $rv) { $list['categories'][] = $rv['客户单位']; } // 初始数据结构 $data = [ "categories" => [], // 客户单位 "series" => [ [ "name" => "同比增减百分比", "type" => "line", "yAxisIndex" => 1, "data" => [] ], [ "name" => date('Y').'年', "type" => "bar", "yAxisIndex" => 0, "data" => [] ], [ "name" => (date('Y')-1).'年', "type" => "bar", "yAxisIndex" => 0, "data" => [], ] ] ]; // 确保 $result 和 $qresult 索引的一致性 foreach ($result as $index => $rv) { // 添加客户单位 $data['categories'][] = $rv['客户单位']; // 计算同比增减百分比,并添加到相应的数据数组 if (isset($rv['投诉次数']) && isset($qresult[$index]['投诉次数']) && $qresult[$index]['投诉次数'] != 0) { $percentage_change = round(($rv['投诉次数'] - $qresult[$index]['投诉次数']) / $qresult[$index]['投诉次数'] ,2); $data['series'][0]['data'][] = $percentage_change; // 同比增减百分比 } else { $data['series'][0]['data'][] = 0; // 防止错误计算 } // 添加今年的数据 if (isset($rv['投诉次数'])) { $data['series'][1]['data'][] = $rv['投诉次数']; } else { $data['series'][1]['data'][] = 0; // 防止空值 } // 添加去年的数据 if (isset($qresult[$index]['投诉次数'])) { $data['series'][2]['data'][] = $qresult[$index]['投诉次数']; } else { $data['series'][2]['data'][] = 0; // 防止空值 } } // 组织JSON返回结构 $res = [ 'status' => 0, 'msg' => '', 'data' => $data ]; // 返回JSON响应 return json($res); } } //当日重点产品机台检验情况->缓存 public function drzdcpjtjyqk_redis(){ $redis=redis(); $redis_key = md5('drzdcpjtjyqk_redis'); $sql = "SELECT zd.订单号, zd.印件名称, zd.生产机台, jy.检验工序, jy.检验类型, jy.检验结果, DATE_FORMAT(jy.检验时间, '%Y-%m-%d %H:%i') AS 检验时间, jy.检验人 FROM (SELECT DISTINCT Dev.cName 生产机台, job.cProductCode 订单号, job.cProductName 印件名称, dd.czlyq 质量等级, dd.CZWKB 开本, dd.ncs 印数, dd.CYWDWMC 业务单位, DATE_FORMAT(NOW(), '%Y-%m-%d') AS 生产日期 FROM scMachineJob Job LEFT JOIN mcyd dd ON dd.ccydh = job.cProductCode LEFT JOIN (SELECT t.iType, t.ID, t.cCode, t.cName, t.iGzzxId, t.ID_BM, t.cbmbh, t.cbmmc, t.cType_Sys, t.iStop, t.cType_Dev, t.cShortName, t.iTypeWage, t.iOverProductType FROM ( SELECT 0 AS iType, MKernel.ID, MKernel.cBh AS cCode, MKernel.cGzzxmc AS cName, MKernel.ID AS iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, Mkernel.cGzzxlx AS cType_Sys, MKernel.iStopUse AS iStop, MKernel.cGzzxlx AS cType_Dev, MKernel.cShortName, 0 AS iTypeWage, 0 AS iOverProductType FROM MKernel INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh UNION SELECT 1 AS iType, dzyssb.ID, dzyssb.csbbh AS cCode, dzyssb.csbmc AS cName, Mkernel.ID AS iGzzxId, dzBM.id AS ID_BM, dzBM.cbmbh, dzBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, dzyssb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, dzyssb.cShortName, 0 AS iTypeWage, 0 AS iOverProductType FROM dzyssb INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh UNION SELECT 2 AS iType, MKerJzmb.ID, MKerJzmb.cJzbh AS cCode, MKerJzmb.cJzmc AS cName, MKerJzmb.iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, MKerJzmb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, MKerJzmb.cShortName, MKerJzmb.iType AS iTypeWage, MKerJzmb.iOverProductType FROM MKerJzmb INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid UNION SELECT 3 AS iType, iywdwid AS ID, cywdwbh AS cCode, cdwmc AS cName, iywdwid AS iGzzxId, iywdwid AS ID_BM, cywdwbh AS cbmbh, cdwmc AS cbmmc, '' AS cType_Sys, CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop, '' AS cType_Dev, DZYWDW.cjc AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType FROM dzywdw WHERE bwjg = 1 UNION SELECT 3 AS iType, -1, '', '外厂资源', -1, -1 AS ID_BM, '', '', '' AS cType_Sys, 0 AS iStop, '' AS cType_Dev, '外厂' AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType ) AS t WHERE (t.iStop = 0)) Dev ON Dev.iType <> 3 AND Job.id_Machine = Dev.Id AND Job.iType_Res = 0 WHERE Job.iStatus IN ( 0, 1, 2, 10, 20 ) AND Job.iJobType IN ( 0, 4 ) AND Job.iType_Res = 0 AND dd.cyjmc LIKE '%求是%' OR ( Job.iStatus IN ( 0, 1, 2, 10, 20 ) AND Job.iJobType IN ( 0, 4 ) AND Job.iType_Res = 0 AND ( dd.Czlyq = '重点产品' AND dd.cyjlx <> '杂志' ) ) AND ( Dev.cName <> '塑封机01号' AND Dev.cName <> '塑封机02号' ) AND job.dPlanStart > DATE_FORMAT(NOW(), '%Y-%m-%d') AND job.dPlanStart < DATE_FORMAT(NOW() + INTERVAL 2 DAY, '%Y-%m-%d'))zd LEFT JOIN (SELECT t.productcode 订单号, t.cName 印件名称, t.iDetectionType 检验类型, t.dFirstTime 检验时间, t.cProcess 检验工序, t.status 检验结果, t.czgxm 检验人, t.cJzmc FROM (SELECT b.ID, c.ID AS mainid, 'XJBB' AS keyword, b.Code_ProductOrder AS productcode, b.Code_AProduct AS aproductcode, b.Name_AProduct AS cName, b.iVers, '' AS salacode, c.iDetectionNum, CASE c.iDetectionType WHEN 0 THEN '首检单' WHEN 1 THEN '巡检单' WHEN 2 THEN '自检单' END AS iDetectionType, c.dFirstTime, c.cTeams, c.cProcess, e.cJzmc, CASE c.iJobStatus WHEN 0 THEN '合格' WHEN 1 THEN '不合格' WHEN 2 THEN '让步接收' END AS status, d.czgxm, '' AS cResultNote FROM (SELECT a.ID, a.cCode AS Code_ProductOrder, b.cCode AS Code_AProduct, b.cName AS Name_AProduct, b.ID AS ID_Request, a.ID_Mcyd, 1 AS iVers, b.cSize, b.cUnit, a.iAmount, a.iAmount_In, 0 AS nAmount_OB, a.iAmount AS nAmount_W, a.iState, a.nUnitPlanWeight, a.nActualWeight, '' AS cCustomerCode, '' AS cCustomerName, d.cywdwbh, d.cdwmc, b.iTag_Group, 0 AS iType, 1 AS iNodePage, 0 AS iType_P, 1 AS iType_Origin, a.ID AS id_origin, c.DZDRQ AS dDate, c.Dwcrq AS dInFinishDate, c.CYWYXM, c.DJFRQ, c.CDF, CONCAT( IF(c.CBCYEAR <> '', CONCAT(c.CBCYEAR, '年'), ''), IF(c.CBCmonth <> '', CONCAT(c.CBCmonth, '月'), ''), IF(c.CBC <> '', CONCAT(c.CBC, '版'), ''), IF(c.cYCyear <> '', CONCAT(c.cYCyear, '年'), ''), IF(c.cYCmonth <> '', CONCAT(c.cYCmonth, '月'), ''), IF(c.CYC <> '', CONCAT(c.CYC, '版'), '') ) AS cBanCi FROM qlOrderProduct AS a INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID WHERE (c.iCommited = 1) AND (c.ICYDSTATE <> -1)) b INNER JOIN qcDetectionMain c ON c.iOrder_Num = b.Code_ProductOrder INNER JOIN dzZG d ON c.iID_Roals = d.id INNER JOIN MKerJzmb e ON e.ID = c.cBoard UNION ALL SELECT b.ID, g.ID AS mainid, 'RQBB' AS keyword, b.Code_ProductOrder AS productcode, b.Code_AProduct AS aproductcode, b.Name_AProduct AS cName, b.iVers, '' AS salacode, h.cBillCode AS iDetectionNum, '入库检验' AS iDetectionType, h.dCheckDate AS dFirstTime, '' AS cTeams, '' AS cProcess, '' AS cJzmc, CASE g.iCheckResult WHEN 0 THEN '合格' WHEN 1 THEN '不合格' WHEN 2 THEN '让步接收' END AS status, h.cCheckMan, g.cResultNote FROM (SELECT a.ID, a.cCode AS Code_ProductOrder, b.cCode AS Code_AProduct, b.cName AS Name_AProduct, b.ID AS ID_Request, a.ID_Mcyd, 1 AS iVers, b.cSize, b.cUnit, a.iAmount, a.iAmount_In, 0 AS nAmount_OB, a.iAmount AS nAmount_W, a.iState, a.nUnitPlanWeight, a.nActualWeight, '' AS cCustomerCode, '' AS cCustomerName, d.cywdwbh, d.cdwmc, b.iTag_Group, 0 AS iType, 1 AS iNodePage, 0 AS iType_P, 1 AS iType_Origin, a.ID AS id_origin, c.DZDRQ AS dDate, c.Dwcrq AS dInFinishDate, c.CYWYXM, c.DJFRQ, c.CDF, CONCAT( IF(c.CBCYEAR <> '', CONCAT(c.CBCYEAR, '年'), ''), IF(c.CBCmonth <> '', CONCAT(c.CBCmonth, '月'), ''), IF(c.CBC <> '', CONCAT(c.CBC, '版'), ''), IF(c.cYCyear <> '', CONCAT(c.cYCyear, '年'), ''), IF(c.cYCmonth <> '', CONCAT(c.cYCmonth, '月'), ''), IF(c.CYC <> '', CONCAT(c.CYC, '版'), '') ) AS cBanCi FROM qlOrderProduct AS a INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID WHERE (c.iCommited = 1) AND (c.ICYDSTATE <> -1)) b INNER JOIN mtMaterialQualityCheckDetail g ON g.ID_scProduct = b.ID INNER JOIN mtMaterialQualityCheck h ON h.ID = g.ID_Main WHERE h.iStatus > 0 ) AS t WHERE 1 = 1 AND t.iDetectionType ='巡检单' )JY ON zd.订单号 = JY.订单号 and zd.生产机台 =JY.cJzmc WHERE jy.检验时间 is not null ORDER BY zd.订单号 ,jy.检验时间 desc"; $res = Db::query($sql); if($res){ $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").'存进去了'; return $res; } } // 当日重点产品机台检验情况->接口 public function drzdcpjtjyqk() { $redis = redis(); $drzdcpjtjyqk_data = json_decode($redis->get(md5('drzdcpjtjyqk_redis')), true); // $drzdcpjtjyqk_data = array_filter($drzdcpjtjyqk_datas, function($item) { // // 获取当前日期 // $current_date = date('Y-m-d'); // // 从检验时间中提取日期部分 // $inspection_date = substr($item['检验时间'], 0, 10); // // 比较日期是否相等 // return $inspection_date === $current_date; // }); $data = ['status' => 0, 'msg' => '', 'data' => ['columns' => [ ['name' => '订单号', 'id' => 'ddh', 'width' => '12', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '印件名称', 'id' => 'yjmc', 'width' => '34', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '生产机台', 'id' => 'scjt', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '检验工序', 'id' => 'yjgx', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '检验类型', 'id' => 'jylx', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '检验结果', 'id' => 'jyjg', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '检验时间', 'id' => 'jysj', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '检验人', 'id' => 'jyr', 'width' => '9', 'autoWrap' => "true", 'textAlign' => 'left'] ], 'rows' => []]]; if (is_array($drzdcpjtjyqk_data) && !empty($drzdcpjtjyqk_data)) { foreach ($drzdcpjtjyqk_data as $v) { $data['data']['rows'][] = [ 'ddh' => $v['订单号'], 'yjmc' => $v['印件名称'], 'scjt' => $v['生产机台'], 'yjgx' => $v['检验工序'], 'jylx' => $v['检验类型'], 'jyjg' => $v['检验结果'], 'jysj' => $v['检验时间'], 'jyr' => $v['检验人'] ]; } } else { $data['data']['rows'][] = ['ddh' => '', 'yjmc' => '', 'scjt' => '', 'yjgx' => '', 'jylx' => '', 'jyjg' => '', 'jysj' => '', 'jyr' => '']; } return json($data); } //无线胶订线近日重点产品检验情况->缓存 public function jd_zdcpjy_redis(){ $redis=redis(); $redis_key = md5('jd_zdcpjy_redis'); $sql = "SELECT zd.订单号, zd.印件名称, zd.生产机台, jy.检验工序, jy.检验类型, jy.检验结果, DATE_FORMAT(jy.检验时间, '%Y-%m-%d %H:%i') AS 检验时间, jy.检验人 FROM (SELECT DISTINCT Dev.cName 生产机台, job.cProductCode 订单号, job.cProductName 印件名称, dd.czlyq 质量等级, dd.CZWKB 开本, dd.ncs 印数, dd.CYWDWMC 业务单位, DATE_FORMAT(NOW(), '%Y-%m-%d') AS 生产日期 FROM scMachineJob Job LEFT JOIN mcyd dd ON dd.ccydh = job.cProductCode LEFT JOIN (SELECT t.iType, t.ID, t.cCode, t.cName, t.iGzzxId, t.ID_BM, t.cbmbh, t.cbmmc, t.cType_Sys, t.iStop, t.cType_Dev, t.cShortName, t.iTypeWage, t.iOverProductType FROM ( SELECT 0 AS iType, MKernel.ID, MKernel.cBh AS cCode, MKernel.cGzzxmc AS cName, MKernel.ID AS iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, Mkernel.cGzzxlx AS cType_Sys, MKernel.iStopUse AS iStop, MKernel.cGzzxlx AS cType_Dev, MKernel.cShortName, 0 AS iTypeWage, 0 AS iOverProductType FROM MKernel INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh UNION SELECT 1 AS iType, dzyssb.ID, dzyssb.csbbh AS cCode, dzyssb.csbmc AS cName, Mkernel.ID AS iGzzxId, dzBM.id AS ID_BM, dzBM.cbmbh, dzBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, dzyssb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, dzyssb.cShortName, 0 AS iTypeWage, 0 AS iOverProductType FROM dzyssb INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh UNION SELECT 2 AS iType, MKerJzmb.ID, MKerJzmb.cJzbh AS cCode, MKerJzmb.cJzmc AS cName, MKerJzmb.iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, MKerJzmb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, MKerJzmb.cShortName, MKerJzmb.iType AS iTypeWage, MKerJzmb.iOverProductType FROM MKerJzmb INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid UNION SELECT 3 AS iType, iywdwid AS ID, cywdwbh AS cCode, cdwmc AS cName, iywdwid AS iGzzxId, iywdwid AS ID_BM, cywdwbh AS cbmbh, cdwmc AS cbmmc, '' AS cType_Sys, CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop, '' AS cType_Dev, DZYWDW.cjc AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType FROM dzywdw WHERE bwjg = 1 UNION SELECT 3 AS iType, -1, '', '外厂资源', -1, -1 AS ID_BM, '', '', '' AS cType_Sys, 0 AS iStop, '' AS cType_Dev, '外厂' AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType ) AS t WHERE (t.iStop = 0)) Dev ON Dev.iType <> 3 AND Job.id_Machine = Dev.Id AND Job.iType_Res = 0 WHERE Job.iStatus IN ( 0, 1, 2, 10, 20 ) AND Job.iJobType IN ( 0, 4 ) AND Job.iType_Res = 0 AND dd.cyjmc LIKE '%求是%' OR ( Job.iStatus IN ( 0, 1, 2, 10, 20 ) AND Job.iJobType IN ( 0, 4 ) AND Job.iType_Res = 0 AND ( dd.cyjlx <> '杂志' ) ) AND ( Dev.cName <> '塑封机01号' AND Dev.cName <> '塑封机02号' ) AND job.dPlanStart > DATE_FORMAT(NOW(), '%Y-%m-%d') AND job.dPlanStart < DATE_FORMAT(NOW() + INTERVAL 2 DAY, '%Y-%m-%d'))zd LEFT JOIN (SELECT t.productcode 订单号, t.cName 印件名称, t.iDetectionType 检验类型, t.dFirstTime 检验时间, t.cProcess 检验工序, t.status 检验结果, t.czgxm 检验人, t.cJzmc FROM (SELECT b.ID, c.ID AS mainid, 'XJBB' AS keyword, b.Code_ProductOrder AS productcode, b.Code_AProduct AS aproductcode, b.Name_AProduct AS cName, b.iVers, '' AS salacode, c.iDetectionNum, CASE c.iDetectionType WHEN 0 THEN '首检单' WHEN 1 THEN '巡检单' WHEN 2 THEN '自检单' END AS iDetectionType, c.dFirstTime, c.cTeams, c.cProcess, e.cJzmc, CASE c.iJobStatus WHEN 0 THEN '合格' WHEN 1 THEN '不合格' WHEN 2 THEN '让步接收' END AS status, d.czgxm, '' AS cResultNote FROM (SELECT a.ID, a.cCode AS Code_ProductOrder, b.cCode AS Code_AProduct, b.cName AS Name_AProduct, b.ID AS ID_Request, a.ID_Mcyd, 1 AS iVers, b.cSize, b.cUnit, a.iAmount, a.iAmount_In, 0 AS nAmount_OB, a.iAmount AS nAmount_W, a.iState, a.nUnitPlanWeight, a.nActualWeight, '' AS cCustomerCode, '' AS cCustomerName, d.cywdwbh, d.cdwmc, b.iTag_Group, 0 AS iType, 1 AS iNodePage, 0 AS iType_P, 1 AS iType_Origin, a.ID AS id_origin, c.DZDRQ AS dDate, c.Dwcrq AS dInFinishDate, c.CYWYXM, c.DJFRQ, c.CDF, CONCAT( IF(c.CBCYEAR <> '', CONCAT(c.CBCYEAR, '年'), ''), IF(c.CBCmonth <> '', CONCAT(c.CBCmonth, '月'), ''), IF(c.CBC <> '', CONCAT(c.CBC, '版'), ''), IF(c.cYCyear <> '', CONCAT(c.cYCyear, '年'), ''), IF(c.cYCmonth <> '', CONCAT(c.cYCmonth, '月'), ''), IF(c.CYC <> '', CONCAT(c.CYC, '版'), '') ) AS cBanCi FROM qlOrderProduct AS a INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID WHERE (c.iCommited = 1) AND (c.ICYDSTATE <> -1)) b INNER JOIN qcDetectionMain c ON c.iOrder_Num = b.Code_ProductOrder INNER JOIN dzZG d ON c.iID_Roals = d.id INNER JOIN MKerJzmb e ON e.ID = c.cBoard UNION ALL SELECT b.ID, g.ID AS mainid, 'RQBB' AS keyword, b.Code_ProductOrder AS productcode, b.Code_AProduct AS aproductcode, b.Name_AProduct AS cName, b.iVers, '' AS salacode, h.cBillCode AS iDetectionNum, '入库检验' AS iDetectionType, h.dCheckDate AS dFirstTime, '' AS cTeams, '' AS cProcess, '' AS cJzmc, CASE g.iCheckResult WHEN 0 THEN '合格' WHEN 1 THEN '不合格' WHEN 2 THEN '让步接收' END AS status, h.cCheckMan, g.cResultNote FROM (SELECT a.ID, a.cCode AS Code_ProductOrder, b.cCode AS Code_AProduct, b.cName AS Name_AProduct, b.ID AS ID_Request, a.ID_Mcyd, 1 AS iVers, b.cSize, b.cUnit, a.iAmount, a.iAmount_In, 0 AS nAmount_OB, a.iAmount AS nAmount_W, a.iState, a.nUnitPlanWeight, a.nActualWeight, '' AS cCustomerCode, '' AS cCustomerName, d.cywdwbh, d.cdwmc, b.iTag_Group, 0 AS iType, 1 AS iNodePage, 0 AS iType_P, 1 AS iType_Origin, a.ID AS id_origin, c.DZDRQ AS dDate, c.Dwcrq AS dInFinishDate, c.CYWYXM, c.DJFRQ, c.CDF, CONCAT( IF(c.CBCYEAR <> '', CONCAT(c.CBCYEAR, '年'), ''), IF(c.CBCmonth <> '', CONCAT(c.CBCmonth, '月'), ''), IF(c.CBC <> '', CONCAT(c.CBC, '版'), ''), IF(c.cYCyear <> '', CONCAT(c.cYCyear, '年'), ''), IF(c.cYCmonth <> '', CONCAT(c.cYCmonth, '月'), ''), IF(c.CYC <> '', CONCAT(c.CYC, '版'), '') ) AS cBanCi FROM qlOrderProduct AS a INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID WHERE (c.iCommited = 1) AND (c.ICYDSTATE <> -1)) b INNER JOIN mtMaterialQualityCheckDetail g ON g.ID_scProduct = b.ID INNER JOIN mtMaterialQualityCheck h ON h.ID = g.ID_Main WHERE h.iStatus > 0 ) AS t WHERE 1 = 1 -- AND t.iDetectionType ='巡检单' )JY ON zd.订单号 = JY.订单号 and zd.生产机台 =JY.cJzmc WHERE jy.检验时间 is not null and zd.生产机台 IN('胶订潮流1号', '胶订潮流2号', '胶订精密达1号', '胶订精密达2号', '胶订精密达3号') ORDER BY zd.订单号 ,jy.检验时间 desc "; $res = Db::query($sql); if($res){ $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").'存进去了'; return $res; } } //无线胶订线近日重点产品检验情况->接口 public function jd_zdcpjy(){ $redis = redis(); $drzdcpjtjyqk_datas = json_decode($redis->get(md5('jd_zdcpjy_redis')), true); // $drzdcpjtjyqk_data = array_filter($drzdcpjtjyqk_datas, function($item) { // // 获取当前日期 // $current_date = date('Y-m-d'); // // 获取三天前的日期 // $three_days_ago = date('Y-m-d'); // //$three_days_ago = date('Y-m-d', strtotime('-1 days')); // // 从检验时间中提取日期部分 // $inspection_date = substr($item['检验时间'], 0, 10); // // 比较日期是否在近三天内 // return $inspection_date >= $three_days_ago && $inspection_date <= $current_date; // }); //时间排序【倒序排序】 // usort($drzdcpjtjyqk_data, function($a, $b) { // return strcmp($b['检验时间'], $a['检验时间']); // }); //接口显示字段 $data = ['status' => 0, 'msg' => '', 'data' => ['columns' => [ ['name' => '订单号', 'id' => 'ddh', 'width' => '12', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '印件名称', 'id' => 'yjmc', 'width' => '34', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '生产机台', 'id' => 'scjt', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '检验工序', 'id' => 'yjgx', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '检验类型', 'id' => 'jylx', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '检验结果', 'id' => 'jyjg', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '检验时间', 'id' => 'jysj', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '检验人', 'id' => 'jyr', 'width' => '9', 'autoWrap' => "true", 'textAlign' => 'left'] ], 'rows' => []]]; //取数据 if (is_array($drzdcpjtjyqk_datas) && !empty($drzdcpjtjyqk_datas)) { foreach ($drzdcpjtjyqk_datas as $v) { $data['data']['rows'][] = [ 'ddh' => $v['订单号'], 'yjmc' => $v['印件名称'], 'scjt' => $v['生产机台'], 'yjgx' => $v['检验工序'], 'jylx' => $v['检验类型'], 'jyjg' => $v['检验结果'], 'jysj' => $v['检验时间'], 'jyr' => $v['检验人'] ]; } } else { //数据为空赋值为空 $data['data']['rows'][] = ['ddh' => '', 'yjmc' => '', 'scjt' => '', 'yjgx' => '', 'jylx' => '', 'jyjg' => '', 'jysj' => '', 'jyr' => '']; } return json($data); } //本周常情况反馈->缓存 public function ycfk_redis(){ $redis=redis(); $redis_key = md5('ycfk_redis'); $sql = "SELECT CASE iState WHEN 0 THEN '未提交' WHEN 10 THEN '未确认' WHEN 20 THEN '未结案' WHEN 30 THEN '已结案' END AS 状态, EFB.cProduceOrder AS 订单号, EFB.cProductName AS 印件名称, EFB.cFBPerson AS 反馈人, DATE_FORMAT(EFB.dFBDate, '%Y-%m-%d %H:%i') AS 反馈时间, EFB.cWorkStation AS 工作机台, IFNULL(D.cExceptionItem, '') AS 异常项目, COALESCE(D.cDescription, D.cExceptionItem, '') AS 异常描述 FROM ecExceptionFeedBack EFB LEFT JOIN ecExceptionDetail D ON EFB.iID = D.iMainID LEFT JOIN ecExceptionResponsibility R ON D.iID = R.iExDetailID 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') ORDER BY EFB.dFBDate DESC;"; $res = Db::query($sql); if($res){ $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").'存进去了'; return $res; } } //本周常情况反馈->接口 public function ycfk() { $redis = redis(); $list = json_decode($redis->get(md5('ycfk_redis')), true); $result['columns']=[ ['name'=>'状态','id'=>'zt','width'=>'8','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'订单号','id'=>'ddh','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'印件名称','id'=>'yjmc','width'=>'26','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'反馈人','id'=>'fkr','width'=>'10','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'反馈时间','id'=>'fksj','width'=>'13','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'工作机台','id'=>'hzjt','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'异常项目','id'=>'fkxm','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'异常描述','id'=>'ycms','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'] ]; foreach($list as $k=>$v){ $result['rows'][$k]['zt'] = $v['状态']; $result['rows'][$k]['ddh'] = $v['订单号']; $result['rows'][$k]['yjmc'] = $v['印件名称']; $result['rows'][$k]['fkr'] = $v['反馈人']; $result['rows'][$k]['fksj'] = $v['反馈时间']; $result['rows'][$k]['hzjt'] = $v['工作机台']; $result['rows'][$k]['fkxm'] = $v['异常项目']; $result['rows'][$k]['ycms'] = $v['异常描述']; } // 如果过滤后的列表为空,则添加空数据行 // 注意:这里似乎有一个未定义的变量$filtered_list,你可能需要确保它在使用前已被正确定义和过滤 if(empty($filtered_list)){ $result['rows'][] = ['zt'=>'', 'ddh'=>'', 'yjmc'=>'','fkr'=>'', 'fksj'=>'', 'hzjt'=>'', 'fkxm'=>'', 'ycms'=>'']; } $res['status'] = 0; $res['msg'] = ''; $res['data'] = $result; return json($res); } //当日生产的印件巡检情况->缓存 public function scyjxjqk_redis(){ $redis=redis(); $redis_key = md5('scyjxjqk_redis'); $sql = "SELECT zd.订单号, zd.印件名称, zd.生产机台, jy.检验工序, jy.检验类型, jy.检验结果, DATE_FORMAT(jy.检验时间, '%Y-%m-%d %H:%i') AS 检验时间, jy.检验人 FROM (SELECT DISTINCT Dev.cName 生产机台, job.cProductCode 订单号, job.cProductName 印件名称, dd.czlyq 质量等级, dd.CZWKB 开本, dd.ncs 印数, dd.CYWDWMC 业务单位, DATE_FORMAT(NOW(), '%Y-%m-%d') AS 生产日期 FROM scMachineJob Job LEFT JOIN mcyd dd ON dd.ccydh = job.cProductCode LEFT JOIN (SELECT t.iType, t.ID, t.cCode, t.cName, t.iGzzxId, t.ID_BM, t.cbmbh, t.cbmmc, t.cType_Sys, t.iStop, t.cType_Dev, t.cShortName, t.iTypeWage, t.iOverProductType FROM ( SELECT 0 AS iType, MKernel.ID, MKernel.cBh AS cCode, MKernel.cGzzxmc AS cName, MKernel.ID AS iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, Mkernel.cGzzxlx AS cType_Sys, MKernel.iStopUse AS iStop, MKernel.cGzzxlx AS cType_Dev, MKernel.cShortName, 0 AS iTypeWage, 0 AS iOverProductType FROM MKernel INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cBmbh UNION SELECT 1 AS iType, dzyssb.ID, dzyssb.csbbh AS cCode, dzyssb.csbmc AS cName, Mkernel.ID AS iGzzxId, dzBM.id AS ID_BM, dzBM.cbmbh, dzBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, dzyssb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, dzyssb.cShortName, 0 AS iTypeWage, 0 AS iOverProductType FROM dzyssb INNER JOIN MKernel ON MKernel.ID = dzyssb.ID_Center INNER JOIN dzBM ON dzBM.cbmbh = MKernel.cBmbh UNION SELECT 2 AS iType, MKerJzmb.ID, MKerJzmb.cJzbh AS cCode, MKerJzmb.cJzmc AS cName, MKerJzmb.iGzzxId, dzBM.id AS ID_BM, DZBM.cbmbh, DZBM.cbmmc, MKernel.cGzzxlx AS cType_Sys, MKerJzmb.iStopUse AS iStop, dzyssb.csblb AS cType_Dev, MKerJzmb.cShortName, MKerJzmb.iType AS iTypeWage, MKerJzmb.iOverProductType FROM MKerJzmb INNER JOIN MKernel ON MKernel.ID = MKerJzmb.iGzzxId INNER JOIN DZBM ON DZBM.cbmbh = MKernel.cbmbh INNER JOIN dzyssb ON dzyssb.id = MKerJzmb.ijzlxid UNION SELECT 3 AS iType, iywdwid AS ID, cywdwbh AS cCode, cdwmc AS cName, iywdwid AS iGzzxId, iywdwid AS ID_BM, cywdwbh AS cbmbh, cdwmc AS cbmmc, '' AS cType_Sys, CASE WHEN DZYWDW.nstate < 0 THEN 1 ELSE 0 END AS iStop, '' AS cType_Dev, DZYWDW.cjc AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType FROM dzywdw WHERE bwjg = 1 UNION SELECT 3 AS iType, -1, '', '外厂资源', -1, -1 AS ID_BM, '', '', '' AS cType_Sys, 0 AS iStop, '' AS cType_Dev, '外厂' AS cShortName, 0 AS iTypeWage, 0 AS iOverProductType ) AS t WHERE (t.iStop = 0)) Dev ON Dev.iType <> 3 AND Job.id_Machine = Dev.Id AND Job.iType_Res = 0 WHERE Job.iStatus IN ( 0, 1, 2, 10, 20 ) AND Job.iJobType IN ( 0, 4 ) AND Job.iType_Res = 0 AND dd.cyjmc LIKE '%求是%' OR ( Job.iStatus IN ( 0, 1, 2, 10, 20 ) AND Job.iJobType IN ( 0, 4 ) AND Job.iType_Res = 0 AND ( dd.Czlyq <> '重点产品' AND dd.cyjlx <> '杂志' ) ) AND ( Dev.cName <> '塑封机01号' AND Dev.cName <> '塑封机02号' ) AND job.dPlanStart > DATE_FORMAT(NOW(), '%Y-%m-%d') AND job.dPlanStart < DATE_FORMAT(NOW() + INTERVAL 2 DAY, '%Y-%m-%d'))zd LEFT JOIN (SELECT t.productcode 订单号, t.cName 印件名称, t.iDetectionType 检验类型, t.dFirstTime 检验时间, t.cProcess 检验工序, t.status 检验结果, t.czgxm 检验人, t.cJzmc FROM (SELECT b.ID, c.ID AS mainid, 'XJBB' AS keyword, b.Code_ProductOrder AS productcode, b.Code_AProduct AS aproductcode, b.Name_AProduct AS cName, b.iVers, '' AS salacode, c.iDetectionNum, CASE c.iDetectionType WHEN 0 THEN '首检单' WHEN 1 THEN '巡检单' WHEN 2 THEN '自检单' END AS iDetectionType, c.dFirstTime, c.cTeams, c.cProcess, e.cJzmc, CASE c.iJobStatus WHEN 0 THEN '合格' WHEN 1 THEN '不合格' WHEN 2 THEN '让步接收' END AS status, d.czgxm, '' AS cResultNote FROM (SELECT a.ID, a.cCode AS Code_ProductOrder, b.cCode AS Code_AProduct, b.cName AS Name_AProduct, b.ID AS ID_Request, a.ID_Mcyd, 1 AS iVers, b.cSize, b.cUnit, a.iAmount, a.iAmount_In, 0 AS nAmount_OB, a.iAmount AS nAmount_W, a.iState, a.nUnitPlanWeight, a.nActualWeight, '' AS cCustomerCode, '' AS cCustomerName, d.cywdwbh, d.cdwmc, b.iTag_Group, 0 AS iType, 1 AS iNodePage, 0 AS iType_P, 1 AS iType_Origin, a.ID AS id_origin, c.DZDRQ AS dDate, c.Dwcrq AS dInFinishDate, c.CYWYXM, c.DJFRQ, c.CDF, CONCAT( IF(c.CBCYEAR <> '', CONCAT(c.CBCYEAR, '年'), ''), IF(c.CBCmonth <> '', CONCAT(c.CBCmonth, '月'), ''), IF(c.CBC <> '', CONCAT(c.CBC, '版'), ''), IF(c.cYCyear <> '', CONCAT(c.cYCyear, '年'), ''), IF(c.cYCmonth <> '', CONCAT(c.cYCmonth, '月'), ''), IF(c.CYC <> '', CONCAT(c.CYC, '版'), '') ) AS cBanCi FROM qlOrderProduct AS a INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID WHERE (c.iCommited = 1) AND (c.ICYDSTATE <> -1)) b INNER JOIN qcDetectionMain c ON c.iOrder_Num = b.Code_ProductOrder INNER JOIN dzZG d ON c.iID_Roals = d.id INNER JOIN MKerJzmb e ON e.ID = c.cBoard UNION ALL SELECT b.ID, g.ID AS mainid, 'RQBB' AS keyword, b.Code_ProductOrder AS productcode, b.Code_AProduct AS aproductcode, b.Name_AProduct AS cName, b.iVers, '' AS salacode, h.cBillCode AS iDetectionNum, '入库检验' AS iDetectionType, h.dCheckDate AS dFirstTime, '' AS cTeams, '' AS cProcess, '' AS cJzmc, CASE g.iCheckResult WHEN 0 THEN '合格' WHEN 1 THEN '不合格' WHEN 2 THEN '让步接收' END AS status, h.cCheckMan, g.cResultNote FROM (SELECT a.ID, a.cCode AS Code_ProductOrder, b.cCode AS Code_AProduct, b.cName AS Name_AProduct, b.ID AS ID_Request, a.ID_Mcyd, 1 AS iVers, b.cSize, b.cUnit, a.iAmount, a.iAmount_In, 0 AS nAmount_OB, a.iAmount AS nAmount_W, a.iState, a.nUnitPlanWeight, a.nActualWeight, '' AS cCustomerCode, '' AS cCustomerName, d.cywdwbh, d.cdwmc, b.iTag_Group, 0 AS iType, 1 AS iNodePage, 0 AS iType_P, 1 AS iType_Origin, a.ID AS id_origin, c.DZDRQ AS dDate, c.Dwcrq AS dInFinishDate, c.CYWYXM, c.DJFRQ, c.CDF, CONCAT( IF(c.CBCYEAR <> '', CONCAT(c.CBCYEAR, '年'), ''), IF(c.CBCmonth <> '', CONCAT(c.CBCmonth, '月'), ''), IF(c.CBC <> '', CONCAT(c.CBC, '版'), ''), IF(c.cYCyear <> '', CONCAT(c.cYCyear, '年'), ''), IF(c.cYCmonth <> '', CONCAT(c.cYCmonth, '月'), ''), IF(c.CYC <> '', CONCAT(c.CYC, '版'), '') ) AS cBanCi FROM qlOrderProduct AS a INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID WHERE (c.iCommited = 1) AND (c.ICYDSTATE <> -1)) b INNER JOIN mtMaterialQualityCheckDetail g ON g.ID_scProduct = b.ID INNER JOIN mtMaterialQualityCheck h ON h.ID = g.ID_Main WHERE h.iStatus > 0 ) AS t WHERE 1 = 1 AND t.iDetectionType ='巡检单' )JY ON zd.订单号 = JY.订单号 and zd.生产机台 =JY.cJzmc WHERE jy.检验时间 is not null ORDER BY zd.订单号,jy.检验时间 desc"; $res = Db::query($sql); if($res){ $redis->set($redis_key, json_encode($res)); echo date("Y-m-d H:i:s").'存进去了'; return $res; } } // 当日生产的印件巡检情况->接口 public function scyjxjqk() { $redis = redis(); $list = json_decode($redis->get(md5('scyjxjqk_redis')), true); // $list = array_filter($lists, function($item) { // // 获取当前日期 // $current_date = date('Y-m-d'); // // 从检验时间中提取日期部分 // $inspection_date = substr($item['检验时间'], 0, 10); // // 比较日期是否相等 // return $inspection_date === $current_date; // }); $data = ['status' => 0, 'msg' => '', 'data' => ['columns' => [ ['name' => '订单号', 'id' => 'ddh', 'width' => '12', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '印件名称', 'id' => 'yjmc', 'width' => '34', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '生产机台', 'id' => 'scjt', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '检验工序', 'id' => 'yjgx', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '检验类型', 'id' => 'jylx', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '检验结果', 'id' => 'jyjg', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '检验时间', 'id' => 'jysj', 'width' => '11', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '检验人', 'id' => 'jyr', 'width' => '9', 'autoWrap' => "true", 'textAlign' => 'left'] ], 'rows' => []]]; if (is_array($list) && !empty($list)) { foreach ($list as $v) { $data['data']['rows'][] = [ 'ddh' => $v['订单号'], 'yjmc'=> $v['印件名称'], 'scjt' => $v['生产机台'], 'jygx' => $v['检验工序'], 'jylx' => $v['检验类型'], 'jyjg' => $v['检验结果'], 'jysj' => $v['检验时间'], 'jyr'=> $v['检验人'] ]; } } else { $data['data']['rows'][] = ['ddh'=>'', 'yjmc'=>'', 'scjt'=>'','jygx'=>'', 'jylx'=>'', 'jyjg'=>'', 'jysj'=>'', 'jyr'=>'']; } return json($data); } //客户投诉 (质量问题(按客户))---》暂时用不到 public function khts(){ $redis=redis(); $redis_key = md5('khzl_redis'); $redis_data = $redis->get($redis_key); $result=json_decode($redis_data,true); $result=$result['data']['rows']; $result=array_splice($result,0,6); // halt($result); foreach($result as $k=>$v){ // $list[$k]['name']=$v['khdw']; // 截取前十一个字符 $list[$k]['name'] = mb_substr(str_replace('有限公司', '', $v['khdw']), 0, 9).'...'; $list[$k]['value']=$v['tscs']; } $res['status']=0; $res['msg']=''; $res['data']=$list; // halt($res); return json($res); } //责任部门 (质量问题(按部门))---》暂时用不到 public function zrbm(){ $redis=redis(); $redis_key = md5('bmzl_redis'); $redis_data = $redis->get($redis_key); $result=json_decode($redis_data,true); $result=$result['data']['rows']; $result = array_splice($result, 0, 6); foreach($result as $k => $v){ $list[$k]['name'] = $v['bm']; $list[$k]['value'] = $v['tscs']; } $res['status'] = 0; $res['msg'] = ''; $res['data'] = $list; return json($res); } //质量问题->缓存---》暂时用不到 public function zlwt_redis(){ $redis=redis(); $redis_key = md5('zlwt_redis'); // 获取当前日期时间 $endDate = date("Y-m-d H:i:s"); // 获取一年前的日期时间 $startDate = date("Y-m-d H:i:s", strtotime("-1 year")); $res = Db::query("SELECT D1.cdwmc,resp1.cReasonCName FROM ecComplainFeedback B LEFT JOIN DZYWDW D1 ON D1.iywdwid = B.iClientID LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd LEFT JOIN (SELECT a.ID_qlOrderProduct, Sum(a.iAmountOut) iAmount_Out FROM SCYDYSQX a GROUP BY a.ID_qlOrderProduct) c ON c.ID_qlOrderProduct = p.ID LEFT JOIN ecComplainContent DD ON DD.iComplainFBID = B.iID LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P LEFT JOIN (SELECT R.iComplainFBID, PP.strSubName AS cReasonPName, CC2.strSubName AS cReasonCName, CR.cRespPerson, CR.cRespDept, CR.cRespTech, CR.cRespCorp, CR.nMoney FROM ecComplainReasonAnalysis R LEFT JOIN tbConfig CC2 ON CC2.iNoConfig = R.iReasonID_C LEFT JOIN tbConfig PP ON PP.iNoConfig = R.iReasonID_P LEFT JOIN ecComplainResponsibility CR ON CR.iComplainRAID = R.iID) resp1 ON resp1.iComplainFBID = B.iID WHERE b.dFeedbackDate >= '{$startDate}' AND b.dFeedbackDate <= '{$endDate}'"); if(empty($res)) { $res = []; $res['status'] = 0; $res['msg'] = ''; $res['data'] = [ ['name' => '色差(与原稿偏差)', 'value' => 0], ['name' => '精装质量问题', 'value' => 0], ['name' => '工艺缺项', 'value' => 0], ['name' => '双影', 'value' => 0], ['name' => '烫金不实', 'value' => 0], ['name' => '色差(批量不统一)', 'value' => 0], ]; $redis->set($redis_key, json_encode($res)); return json($res); }else{ $list = []; for ($i = 0; $i < count($res); $i++) { $list[$res[$i]['cReasonCName']][] = $res[$i]['cdwmc']; } array_multisort($list, SORT_DESC); $result = []; $i = 0; foreach ($list as $k => $v) { $result[$i]['质量问题'] = $k; $result[$i]['投诉次数'] = count($v); $result[$i]['合并原因'] = ''; foreach ($v as $key => $value) { if ($value == null) { unset($v[$key]); } } foreach (array_count_values($v) as $a => $b) { $result[$i]['合并原因'] .= $a . $b . '/'; } $result[$i]['合并原因'] = substr($result[$i]['合并原因'], 0, -1); $i++; } $result=array_splice($result,0,6); $list=[]; foreach($result as $k=>$v){ $list[$k]['name']=$v['质量问题']; $list[$k]['value']=$v['投诉次数']; } $res=[]; $res['status']=0; $res['msg']=''; $res['data']=$list; $redis->set($redis_key, json_encode($res)); return json($res); } } //质量问题->接口---》暂时用不到 public function zlwt(){ $redis=redis(); $redis_key = md5('zlwt_redis'); $redis_data = $redis->get($redis_key); return $redis_data; } //质检记录一览表->缓存---》暂时用不到 public function zjjl_redis(){ $redis=redis(); $redis_key = md5('zjjl_redis'); $list=Db::query("SELECT t.productcode 订单号, t.cName 印件名称, t.iDetectionType 检验类型, t.dFirstTime 检验时间, t.cProcess 检验工序, t.status 检验结果, t.czgxm 检验人 FROM (SELECT b.ID, c.ID AS mainid, 'XJBB' AS keyword, b.Code_ProductOrder AS productcode, b.Code_AProduct AS aproductcode, b.Name_AProduct AS cName, b.iVers, '' AS salacode, c.iDetectionNum, CASE c.iDetectionType WHEN 0 THEN '首检单' WHEN 1 THEN '巡检单' WHEN 2 THEN '自检单' END AS iDetectionType, c.dFirstTime, c.cTeams, c.cProcess, e.cJzmc, CASE c.iJobStatus WHEN 0 THEN '合格' WHEN 1 THEN '不合格' WHEN 2 THEN '让步接收' END AS status, d.czgxm, '' AS cResultNote FROM (SELECT a.ID, a.cCode AS Code_ProductOrder, b.cCode AS Code_AProduct, b.cName AS Name_AProduct, b.ID AS ID_Request, a.ID_Mcyd, 1 AS iVers, b.cSize, b.cUnit, a.iAmount, a.iAmount_In, 0 AS nAmount_OB, a.iAmount AS nAmount_W, a.iState, a.nUnitPlanWeight, a.nActualWeight, '' AS cCustomerCode, '' AS cCustomerName, d.cywdwbh, d.cdwmc, b.iTag_Group, 0 AS iType, 1 AS iNodePage, 0 AS iType_P, 1 AS iType_Origin, a.ID AS id_origin, c.DZDRQ AS dDate, c.Dwcrq AS dInFinishDate, c.CYWYXM, c.DJFRQ, c.CDF, CASE WHEN c.CBCYEAR <> '' THEN c.CBCYEAR + '年' ELSE '' END + CASE WHEN c.CBCmonth <> '' THEN c.CBCmonth + '月' ELSE '' END + CASE WHEN c.CBC <> '' THEN c.CBC + '版' ELSE '' END + CASE WHEN c.cYCyear <> '' THEN c.cYCyear + '年' ELSE '' END + CASE WHEN c.cYCmonth <> '' THEN c.cYCmonth + '月' ELSE '' END + CASE WHEN c.CYC <> '' THEN c.CYC + '版' ELSE '' END AS cBanCi FROM qlOrderProduct AS a INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID WHERE ( c.iCommited = 1 ) AND ( c.ICYDSTATE <> -1 ) ) as b INNER JOIN qcDetectionMain c ON c.iOrder_Num = b.Code_ProductOrder INNER JOIN dzZG d ON c.iID_Roals = d.id INNER JOIN MKerJzmb e ON e.ID = c.cBoard UNION ALL SELECT b.ID, g.ID AS mainid, 'RQBB' AS keyword, b.Code_ProductOrder AS productcode, b.Code_AProduct AS aproductcode, b.Name_AProduct AS cName, b.iVers, '' AS salacode, h.cBillCode AS iDetectionNum, '入库检验' AS iDetectionType, h.dCheckDate AS dFirstTime, '' AS cTeams, '' AS cProcess, '' AS cJzmc, CASE g.iCheckResult WHEN 0 THEN '合格' WHEN 1 THEN '不合格' WHEN 2 THEN '让步接收' END AS status, h.cCheckMan, g.cResultNote FROM (SELECT a.ID, a.cCode AS Code_ProductOrder, b.cCode AS Code_AProduct, b.cName AS Name_AProduct, b.ID AS ID_Request, a.ID_Mcyd, 1 AS iVers, b.cSize, b.cUnit, a.iAmount, a.iAmount_In, 0 AS nAmount_OB, a.iAmount AS nAmount_W, a.iState, a.nUnitPlanWeight, a.nActualWeight, '' AS cCustomerCode, '' AS cCustomerName, d.cywdwbh, d.cdwmc, b.iTag_Group, 0 AS iType, 1 AS iNodePage, 0 AS iType_P, 1 AS iType_Origin, a.ID AS id_origin, c.DZDRQ AS dDate, c.Dwcrq AS dInFinishDate, c.CYWYXM, c.DJFRQ, c.CDF, CASE WHEN c.CBCYEAR <> '' THEN c.CBCYEAR + '年' ELSE '' END + CASE WHEN c.CBCmonth <> '' THEN c.CBCmonth + '月' ELSE '' END + CASE WHEN c.CBC <> '' THEN c.CBC + '版' ELSE '' END + CASE WHEN c.cYCyear <> '' THEN c.cYCyear + '年' ELSE '' END + CASE WHEN c.cYCmonth <> '' THEN c.cYCmonth + '月' ELSE '' END + CASE WHEN c.CYC <> '' THEN c.CYC + '版' ELSE '' END AS cBanCi FROM qlOrderProduct AS a INNER JOIN qlAProduct AS b ON b.ID = a.ID_qlAProduct INNER JOIN MCYD AS c ON c.ICYDID = a.ID_Mcyd AND c.CCYDH = a.cCode LEFT OUTER JOIN DZYWDW AS d ON d.iywdwid = c.IYWDWID WHERE ( c.iCommited = 1 ) AND ( c.ICYDSTATE <> -1 ) ) as b INNER JOIN mtMaterialQualityCheckDetail g ON g.ID_scProduct = b.ID INNER JOIN mtMaterialQualityCheck h ON h.ID = g.ID_Main WHERE h.iStatus > 0) AS t WHERE 1 = 1 -- AND DATE_FORMAT(t.dFirstTime, '%Y-%m-%d')= '2023-11-12' ORDER BY t.dFirstTime DESC limit 8 "); $redis->set($redis_key, json_encode($list)); return $list; } //质检记录一览表->接口---》暂时用不到 public function zjjl(){ $redis=redis(); // $redis_key = md5('zjjl_redis'); // $redis_data = $redis->get($redis_key); $list = json_decode($redis->get(md5('zjjl_redis')), true); $result['columns']=[ ['name'=>'订单号','id'=>'ddh','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'印件名称','id'=>'yjmc','width'=>'22','textAlign'=>'left'], ['name'=>'检验类型','id'=>'jylx','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'检验时间','id'=>'jysj','width'=>'20','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'检验工序','id'=>'jygx','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'检验结果','id'=>'jyjg','width'=>'14','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'检验人','id'=>'jyr','width'=>'10','autoWrap'=>"true",'textAlign'=>'left'] ]; foreach($list as $k=>$v){ $result['rows'][$k]['ddh']=$v['订单号']; $result['rows'][$k]['yjmc']=$v['印件名称']; $result['rows'][$k]['jylx']=$v['检验类型']; $result['rows'][$k]['jysj']=$v['检验时间']; $result['rows'][$k]['jygx']=$v['检验工序']; $result['rows'][$k]['jyjg']=$v['检验结果']; $result['rows'][$k]['jyr']=$v['检验人']; } if($list==[]){ $result['rows'][0]['ddh']=''; $result['rows'][0]['yjmc']=''; $result['rows'][0]['jylx']=''; $result['rows'][0]['jysj']=''; $result['rows'][0]['jygx']=''; $result['rows'][0]['jyjg']=''; $result['rows'][0]['jyr']=''; } $res['status']=0; $res['msg']=''; $res['data']=$result; return json($res); } //客户质量投诉一览表->缓存---》暂时用不到 public function khzl_redis(){ $redis=redis(); $redis_key = md5('khzl_redis'); // 获取当前日期时间 $endDate = date("Y-m-d H:i:s"); // 获取一年前的日期时间 $startDate = date("Y-m-d H:i:s", strtotime("-1 year")); $r_list= Db::query("SELECT resp.cReasonCName,D.cdwmc FROM ecComplainFeedback B LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd LEFT JOIN (SELECT a.ID_qlOrderProduct,Sum(a.iAmountOut) iAmount_Out FROM SCYDYSQX a GROUP BY a.ID_qlOrderProduct) c ON c.ID_qlOrderProduct = p.ID LEFT JOIN ecComplainContent DD ON DD.iComplainFBID = B.iID LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P LEFT JOIN (SELECT R.iComplainFBID, PP.strSubName AS cReasonPName, CC2.strSubName AS cReasonCName, CR.cRespPerson, CR.cRespDept, CR.cRespTech, CR.cRespCorp, CR.nMoney FROM ecComplainReasonAnalysis R LEFT JOIN tbConfig CC2 ON CC2.iNoConfig = R.iReasonID_C LEFT JOIN tbConfig PP ON PP.iNoConfig = R.iReasonID_P LEFT JOIN ecComplainResponsibility CR ON CR.iComplainRAID = R.iID) resp ON resp.iComplainFBID = B.iID WHERE 1 = 1 AND b.dFeedbackDate >= '{$startDate}' AND b.dFeedbackDate <= '{$endDate}'"); if(empty($r_list)) { $res['status'] = 0; $res['msg'] = '没有找到数据'; $res['data'] = [ 'columns' => [ ['name' => '客户单位', 'id' => 'khdw', 'width' => '36', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '投诉次数', 'id' => 'tscs', 'width' => '12', 'autoWrap' => "true", 'textAlign' => 'left'], ['name' => '质量问题', 'id' => 'zlwt', 'width' => '52', 'textAlign' => 'left'] ], 'rows' => [ ['khdw' => '中信出版集团股份有限公司', 'tscs' => '0', 'zlwt' => ''], ['khdw' => '大星(上海)文化传媒有限公司(浙江文艺)', 'tscs' => '0', 'zlwt' => ''], ['khdw' => '上海译文出版社有限公司', 'tscs' => '0', 'zlwt' => ''], ['khdw' => '浙江人民美术出版社有限公司', 'tscs' => '0', 'zlwt' => ''], ['khdw' => '浙江文艺出版社有限公司', 'tscs' => '0', 'zlwt' => ''], ['khdw' => '浙江华硕国际贸易有限责任公司', 'tscs' => '0', 'zlwt' => ''], ['khdw' => '浙江人民出版社有限公司', 'tscs' => '0', 'zlwt' => ''], ['khdw' => '上海古籍出版社有限公司', 'tscs' => '0', 'zlwt' => ''], ] ]; $redis->set($redis_key, json_encode($res)); return json($res); }else{ $c_list = []; for ($i = 0; $i < count($r_list); $i++) { $c_list[$r_list[$i]['cdwmc']][] = $r_list[$i]['cReasonCName']; } array_multisort($c_list, SORT_DESC); $result = []; $i = 0; foreach ($c_list as $k => $v) { $result[$i]['客户单位'] = $k; $result[$i]['投诉次数'] = count($v); $result[$i]['质量问题'] = ''; foreach ($v as $key => $value) { if ($value == null) { unset($v[$key]); } } foreach (array_count_values($v) as $a => $b) { $result[$i]['质量问题'] .= $a . $b . '/'; } $result[$i]['质量问题'] = substr($result[$i]['质量问题'], 0, -1); $i++; } $result=array_splice($result,0,8); $list['columns']=[ ['name'=>'客户单位','id'=>'khdw','width'=>'36','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'投诉次数','id'=>'tscs','width'=>'12','autoWrap'=>"true",'textAlign'=>'left'], ['name'=>'质量问题','id'=>'zlwt','width'=>'52','autoWrap'=>"true",'textAlign'=>'left'] ]; foreach($result as $k=>$v){ $list['rows'][$k]['khdw']=$v['客户单位']; $list['rows'][$k]['tscs']=$v['投诉次数']; $list['rows'][$k]['zlwt']=$v['质量问题']; } $res['status']=0; $res['msg']=''; $res['data']=$list; $redis->set($redis_key, json_encode($res)); return json($res); } } //客户质量投诉一览表->接口---》暂时用不到 public function khzl(){ $redis=redis(); $redis_key = md5('khzl_redis'); $redis_data = $redis->get($redis_key); return $redis_data; } //质量问题一览表(按部门->缓存---》暂时用不到 public function bmzl_redis(){ $redis=redis(); $redis_key = md5('bmzl_redis'); // 获取当前日期时间 $endDate = date("Y-m-d H:i:s"); // 获取一年前的日期时间 $startDate = date("Y-m-d H:i:s", strtotime("-1 year")); $res1=Db::query("SELECT CASE WHEN CR.cRespDept = '' THEN '外协单位' ELSE CR.cRespDept END AS 部门, Count(*) AS 投诉次数 FROM ecComplainFeedback B LEFT JOIN DZYWDW D ON D.iywdwid = B.iClientID LEFT JOIN MCYD M ON M.CCYDH = B.cOrderBillCode INNER JOIN qlOrderProduct p ON M.ICYDID = p.ID_Mcyd LEFT JOIN (SELECT a.ID_qlOrderProduct, Sum(a.iAmountOut) iAmount_Out FROM SCYDYSQX a GROUP BY a.ID_qlOrderProduct) c ON c.ID_qlOrderProduct = p.ID LEFT JOIN ecComplainContent DD ON DD.iComplainFBID = B.iID LEFT JOIN tbConfig E ON E.iNoConfig = DD.iClassID_C LEFT JOIN tbConfig T ON T.iNoConfig = DD.iClassID_P LEFT JOIN (SELECT R.iComplainFBID,CR1.cRespDept FROM ecComplainReasonAnalysis R LEFT JOIN ecComplainResponsibility CR1 ON CR1.iComplainRAID = R.iID) CR ON B.iID = CR.iComplainFBID WHERE 1 = 1 AND b.dFeedbackDate >= '{$startDate}' AND b.dFeedbackDate <= '{$endDate}' GROUP BY CR.cRespDept ORDER BY 投诉次数 DESC, CR.cRespDept; "); foreach($res1 as $k=>$v){ if($v['部门']=='全部'){ unset($res1[$k]); } } foreach($res1 as $k=>$v){ if($v['部门']===null){ $res1[$k]['部门']='全部'; } } $res = Db::query("SELECT CR2.cReasonPName,CR2.cRespDept FROM ecComplainFeedback B2 LEFT JOIN (SELECT R2.iComplainFBID, CR1.cRespDept, CC.strSubName AS cReasonPName FROM ecComplainReasonAnalysis R2 LEFT JOIN ecComplainResponsibility CR1 ON CR1.iComplainRAID = R2.iID LEFT JOIN tbConfig CC ON CC.iNoConfig = R2.iReasonID_C LEFT JOIN tbConfig PP ON PP.iNoConfig = R2.iReasonID_P) CR2 ON B2.iID = CR2.iComplainFBID WHERE b2.dFeedbackDate >= '{$startDate}' AND b2.dFeedbackDate <= '{$endDate}'"); if(empty($res1) || empty($res)) { $res['status'] = 0; $res['msg'] = '没有找到数据'; $res['data'] = [ 'columns' => [ ['name' => '部门', 'id' => 'bm', 'width' => '18', 'textAlign' => 'left'], ['name' => '投诉次数', 'id' => 'tscs', 'width' => '12', 'textAlign' => 'left'], ['name' => '合并原因', 'id' => 'hbyy', 'width' => '58', 'textAlign' => 'left'] ], 'rows' => [ ['bm' => '全部', 'tscs' => '0', 'hbyy' => ''], ['bm' => '平版印刷中心', 'tscs' => '0', 'hbyy' => ''], ['bm' => '精平装中心', 'tscs' => '0', 'hbyy' => ''], ['bm' => '轮转联动中心', 'tscs' => '0', 'hbyy' => ''], ['bm' => '外协单位', 'tscs' => '0', 'hbyy' => ''], ['bm' => '生产部', 'tscs' => '0', 'hbyy' => ''] ] ]; $redis->set($redis_key, json_encode($res)); return json($res); }else{ $list = []; for ($i = 0; $i < count($res); $i++) { if($res[$i]['cRespDept']===''){ $res[$i]['cRespDept']='外协单位'; } if($res[$i]['cRespDept']===null){ $res[$i]['cRespDept']='全部'; } $list[$res[$i]['cRespDept']][] = $res[$i]['cReasonPName']; } array_multisort($list, SORT_DESC); $result = []; $i = 0; foreach ($list as $k => $v) { // $result[$i]['部门'] = $k; // $result[$i]['投诉次数'] = count($v); // $result[$i]['合并原因'] = ''; $result[$k]=''; foreach ($v as $key => $value) { if ($value == null) { unset($v[$key]); } } foreach (array_count_values($v) as $a => $b) { // $result[$i]['合并原因'] .= $a . $b . '/'; $result[$k] .= $a . $b . '/'; } // $result[$i]['合并原因'] = substr($result[$i]['合并原因'], 0, -1); $result[$k] = substr($result[$k], 0, -1); $i++; } foreach($res1 as $k=>$v){ if($v['部门']!==null)$res1[$k]['合并原因']=$result[$v['部门']]; if($v['部门']=='全部'){ $res1[$k]['投诉次数']=count($list['全部']); } } // halt($res1); $result=[]; $result['columns']=[ ['name'=>'部门','id'=>'bm','width'=>'18','textAlign'=>'left'], ['name'=>'投诉次数','id'=>'tscs','width'=>'12','textAlign'=>'left'], ['name'=>'合并原因','id'=>'hbyy','width'=>'58','textAlign'=>'left'] ]; $i=0; foreach($res1 as $k=>$v){ $result['rows'][$i]['bm']=$v['部门']; $result['rows'][$i]['tscs']=$v['投诉次数']; $result['rows'][$i]['hbyy']=$v['合并原因']; $i++; } $res=[]; $res['status']=0; $res['msg']=''; $res['data']=$result; $redis->set($redis_key, json_encode($res)); return json($res); } } //质量问题一览表(按部门)->接口---》暂时用不到 public function bmzl(){ $redis=redis(); $redis_key = md5('bmzl_redis'); $redis_data = $redis->get($redis_key); return $redis_data; } }