Browse Source

机台日报表查询速度优化

曹鹤洋 1 year ago
parent
commit
c291c268d5
1 changed files with 147 additions and 215 deletions
  1. 147 215
      application/api/controller/MachineProductionReport.php

+ 147 - 215
application/api/controller/MachineProductionReport.php

@@ -195,113 +195,91 @@ class MachineProductionReport extends Api
             $where['a.sys_id'] = ['LIKE','%'.$req['sys_id'].'%'];
             $option['sys_id'] = ['LIKE','%'.$req['sys_id'].'%'];
         }
+        $total1 = db()->table('设备_产量计酬')->where($option)->count();
+        $total2 = db()->table('db_sczl')->where($option)->count();
 
-        //拆片联拼系数 拆片条小盒系数
-        $rows1 = db()->table('设备_产量计酬')->alias('a')
-            ->field('a.sczl_gdbh, a.sczl_yjno, a.sczl_gxh, a.sczl_type, LEFT(a.sczl_rq, 10) as sczl_rq, a.sczl_jtbh, 
-            a.sczl_bzdh, a.sczl_num, a.sczl_cl, a.sczl_ms, a.sczl_zcfp, a.sczl_zccp, a.sczl_来料少数, 
-            a.sczl_装版工时, a.sczl_保养工时, a.sczl_打样工时, a.sczl_异常停机工时, a.sczl_设备运行工时, 
-            a.sczl_bh1, a.sczl_bh2, a.sczl_bh3, a.sczl_bh4, a.sczl_bh5, a.sczl_bh6, a.sczl_工价系数, 
-            d.日定额, d.千件工价, d.补产标准, 
-            rtrim(a.sys_id) as sys_id, a.sys_rq, a.mod_rq, a.UniqId')
-            ->where($where)
-            ->join(['dic_lzde'=>'d'],'a.sczl_dedh=d.sys_bh')
-            ->order('a.sys_id asc, a.sczl_num asc')
-//            ->page($page,$limit)
-            ->select();
+        if (!cache('ReportGetList-'.$req['date'].'-'.$req['sys_id'].'-'.$req['page'].'-'.$req['limit'])){
+            // a.sczl_来料少数,
+            //a.拆片联拼系数, a.拆片条小盒系数,
+            $sql = 'SELECT a.sczl_gdbh, a.sczl_yjno, a.sczl_gxh, a.sczl_type, LEFT(a.sczl_rq, 10) as sczl_rq, a.sczl_jtbh, 
+        a.sczl_bzdh, a.sczl_num, a.sczl_cl, a.sczl_ms, a.sczl_zcfp, a.sczl_zccp,
+        a.sczl_装版工时, a.sczl_保养工时, a.sczl_打样工时, a.sczl_异常停机工时, a.sczl_设备运行工时, 
+        a.sczl_bh1, a.sczl_bh2, a.sczl_bh3, a.sczl_bh4, a.sczl_bh5, a.sczl_bh6, a.sczl_工价系数, 
+        d.日定额, d.千件工价, d.补产标准, a.sczl_来料少数, NULL AS 拆片联拼系数, NULL AS 拆片条小盒系数, 
+        rtrim(a.sys_id) as sys_id, a.sys_rq, a.mod_rq, a.UniqId, "设备_产量计酬" AS table_type
+        FROM `设备_产量计酬` `a` INNER JOIN `dic_lzde` `d` ON `a`.`sczl_dedh`=`d`.`sys_bh` ';
+            if (strpos($req['date'],'-')){
+                $sql .= 'WHERE `a`.`sys_rq` LIKE "%'.$req['date'].'%" ';
+            }else{
+                $sql .= 'WHERE `a`.`sczl_gdbh` = "'.$req['date'].'" ';
+            }
 
-        $total1 = db()->table('设备_产量计酬')->where($option)->count();
+            if (isset($req['sys_id']) && !empty($req['sys_id'])){
+                $sql .= 'AND `a`.`sys_id` LIKE "%'.$req['sys_id'].'%" ';
+            }
+            $sql .= 'UNION ALL
+        SELECT a.sczl_gdbh, a.sczl_yjno, a.sczl_gxh, a.sczl_type, LEFT(a.sczl_rq, 10) as sczl_rq, a.sczl_jtbh,
+        a.sczl_bzdh, a.sczl_num, a.sczl_cl, a.sczl_ms, a.sczl_fp as sczl_zcfp, a.sczl_cp as sczl_zccp,
+        a.sczl_装版工时, a.sczl_保养工时, a.sczl_打样工时, a.sczl_异常停机工时, a.sczl_设备运行工时,
+        a.sczl_bh1, a.sczl_bh2, a.sczl_bh3, a.sczl_bh4, a.sczl_bh5, a.sczl_bh6, a.sczl_工价系数, 
+        d.日定额, d.千件工价, d.补产标准, NULL AS sczl_来料少数, a.拆片联拼系数, a.拆片条小盒系数,
+        rtrim(a.sys_id) as sys_id, a.sys_rq, a.mod_rq, a.UniqId, "db_sczl" AS table_type
+        FROM `db_sczl` `a` INNER JOIN `dic_lzde` `d` ON `a`.`sczl_dedh`=`d`.`sys_bh`';
+            if (strpos($req['date'],'-')){
+                $sql .= 'WHERE `a`.`sys_rq` LIKE "%'.$req['date'].'%" ';
+            }else{
+                $sql .= 'WHERE `a`.`sczl_gdbh` = "'.$req['date'].'" ';
+            }
 
-        //来料异常
-        $rows2 = db()->table('db_sczl')->alias('a')
-            ->field('a.sczl_gdbh, a.sczl_yjno, a.sczl_gxh, a.sczl_type, LEFT(a.sczl_rq, 10) as sczl_rq, a.sczl_jtbh, 
-            a.sczl_bzdh, a.sczl_num, a.sczl_cl, a.sczl_ms, a.sczl_fp as sczl_zcfp, a.sczl_cp as sczl_zccp, 
-            a.sczl_装版工时, a.sczl_保养工时, a.sczl_打样工时, a.sczl_异常停机工时, a.sczl_设备运行工时, 
-            a.sczl_bh1, a.sczl_bh2, a.sczl_bh3, a.sczl_bh4, a.sczl_bh5, a.sczl_bh6, 
-            a.拆片联拼系数, a.拆片条小盒系数, a.sczl_工价系数, d.日定额, d.千件工价, d.补产标准, 
-            rtrim(a.sys_id) as sys_id, a.sys_rq, a.mod_rq, a.UniqId')
-            ->where($where)
-            ->join(['dic_lzde'=>'d'],'a.sczl_dedh=d.sys_bh')
-            ->order('a.sys_id asc, a.sczl_num asc')
-//            ->page($page,$limit)
-            ->select();
-        $total2 = db()->table('db_sczl')->where($option)->count();
+            if (isset($req['sys_id']) && !empty($req['sys_id'])){
+                $sql .= 'AND `a`.`sys_id` LIKE "%'.$req['sys_id'].'%" ';
+            }
+            $sql .= 'ORDER BY sys_id ASC, sczl_num ASC LIMIT '.($page-1)*$limit.','.$limit;
+            $rows = db()->query($sql);
+
+            cache('ReportGetList',$rows,3600);
+        }else{
+            $rows = cache('ReportGetList-'.$req['date'].'-'.$req['sys_id'].'-'.$req['page'].'-'.$req['limit']);
+        }
 
         $gd = db()->table('工单_基本资料')->column('Gd_gdbh, Gd_cpmc');
         $rs = db()->table('人事_基本资料')->column('员工编号, 员工姓名');
-        foreach ($rows2 as $key=>$value){
+        foreach ($rows as $key=>$value){
             $rows[$key]['mod_rq'] = $value['mod_rq']=='1900-01-01 00:00:00' ? '' :$value['mod_rq'];
-            $rows2[$key]['Gd_cpmc'] = array_key_exists($value['sczl_gdbh'],$gd) ? trim($gd[$value['sczl_gdbh']]) : '';
-            $rows2[$key]['name1'] = array_key_exists($value['sczl_bh1'],$rs) ? trim($rs[$value['sczl_bh1']]) : '';
+            $rows[$key]['Gd_cpmc'] = array_key_exists($value['sczl_gdbh'],$gd) ? trim($gd[$value['sczl_gdbh']]) : '';
+            $rows[$key]['name1'] = array_key_exists($value['sczl_bh1'],$rs) ? trim($rs[$value['sczl_bh1']]) : '';
             for ($i=2;$i<=6;$i++){
                 if ($value['sczl_bh'.$i]){
                     if ($value['sczl_bh'.$i]==$value['sczl_bh1']){
-                        $rows2[$key]['name'.$i] = $rows2[$key]['name1'];
+                        $rows[$key]['name'.$i] = $rows[$key]['name1'];
                     }else{
-                        $rows2[$key]['name1'] = array_key_exists($value['sczl_bh1'],$rs) ? trim($rs[$value['sczl_bh1']]) : '';
+                        $rows[$key]['name1'] = array_key_exists($value['sczl_bh1'],$rs) ? trim($rs[$value['sczl_bh1']]) : '';
                     }
                 }else{
-                    $rows2[$key]['name'.$i] = '';
+                    $rows[$key]['name'.$i] = '';
                 }
             }
-            $rows2[$key]['jyno_gxmc'] = sprintf("%02d", $value['sczl_yjno']).'-'.sprintf("%02d", $value['sczl_gxh']).'-->'.trim($value['sczl_type']);
-            $rows2[$key]['sczl_num'] = $value['sczl_num'] == 0 ? '' : $value['sczl_num'];
-            $rows2[$key]['sczl_cl'] = $value['sczl_cl'] == 0 ? '' : floatval($value['sczl_cl']);
-            $rows2[$key]['sczl_ms'] = $value['sczl_ms'] == 0 ? 1 : floatval($value['sczl_ms']);
-            $rows2[$key]['sczl_zcfp'] = $value['sczl_zcfp'] == 0 ? '' : floatval($value['sczl_zcfp']);
-            $rows2[$key]['sczl_zccp'] = $value['sczl_zccp'] == 0 ? '' : floatval($value['sczl_zccp']);
-            $rows2[$key]['sczl_装版工时'] = $value['sczl_装版工时'] == 0 ? '' : floatval($value['sczl_装版工时']);
-            $rows2[$key]['sczl_保养工时'] = $value['sczl_保养工时'] == 0 ? '' : floatval($value['sczl_保养工时']);
-            $rows2[$key]['sczl_打样工时'] = $value['sczl_打样工时'] == 0 ? '' : floatval($value['sczl_打样工时']);
-            $rows2[$key]['sczl_异常停机工时'] = $value['sczl_异常停机工时'] == 0 ? '' : floatval($value['sczl_异常停机工时']);
-            $rows2[$key]['sczl_设备运行工时'] = $value['sczl_设备运行工时'] == 0 ? '' : floatval($value['sczl_设备运行工时']);
-            $rows2[$key]['拆片联拼系数'] = $value['拆片联拼系数'] == 0 ? '' : floatval($value['拆片联拼系数']);
-            $rows2[$key]['拆片条小盒系数'] = $value['拆片条小盒系数'] == 0 ? '' : floatval($value['拆片条小盒系数']);
-            $rows2[$key]['sczl_工价系数'] = $value['sczl_工价系数'] == 0 ? '' : floatval($value['sczl_工价系数']);
-            $rows2[$key]['千件工价'] = $value['千件工价'] == 0 ? '' : floatval($value['千件工价']);
-            $rows2[$key]['table_type']='db_sczl';
-
-            unset($rows2[$key]['sczl_yjno']);
-            unset($rows2[$key]['sczl_gxh']);
-            unset($rows2[$key]['sczl_type']);
+            $rows[$key]['jyno_gxmc'] = sprintf("%02d", $value['sczl_yjno']).'-'.sprintf("%02d", $value['sczl_gxh']).'-->'.trim($value['sczl_type']);
+            $rows[$key]['sczl_num'] = $value['sczl_num'] == 0 ? '' : $value['sczl_num'];
+            $rows[$key]['sczl_cl'] = $value['sczl_cl'] == 0 ? '' : floatval($value['sczl_cl']);
+            $rows[$key]['sczl_ms'] = $value['sczl_ms'] == 0 ? 1 : floatval($value['sczl_ms']);
+            $rows[$key]['sczl_zcfp'] = $value['sczl_zcfp'] == 0 ? '' : floatval($value['sczl_zcfp']);
+            $rows[$key]['sczl_zccp'] = $value['sczl_zccp'] == 0 ? '' : floatval($value['sczl_zccp']);
+            $rows[$key]['sczl_装版工时'] = $value['sczl_装版工时'] == 0 ? '' : floatval($value['sczl_装版工时']);
+            $rows[$key]['sczl_保养工时'] = $value['sczl_保养工时'] == 0 ? '' : floatval($value['sczl_保养工时']);
+            $rows[$key]['sczl_打样工时'] = $value['sczl_打样工时'] == 0 ? '' : floatval($value['sczl_打样工时']);
+            $rows[$key]['sczl_异常停机工时'] = $value['sczl_异常停机工时'] == 0 ? '' : floatval($value['sczl_异常停机工时']);
+            $rows[$key]['sczl_设备运行工时'] = $value['sczl_设备运行工时'] == 0 ? '' : floatval($value['sczl_设备运行工时']);
+            $rows[$key]['sczl_工价系数'] = $value['sczl_工价系数'] == 0 ? '' : floatval($value['sczl_工价系数']);
+            $rows[$key]['千件工价'] = $value['千件工价'] == 0 ? '' : floatval($value['千件工价']);
+            $rows[$key]['sczl_来料少数'] = $value['sczl_来料少数'] == 0 ? '' : floatval($value['sczl_来料少数']);
+            $rows[$key]['拆片联拼系数'] = $value['拆片联拼系数'] == 0 ? '' : floatval($value['拆片联拼系数']);
+            $rows[$key]['拆片条小盒系数'] = $value['拆片条小盒系数'] == 0 ? '' : floatval($value['拆片条小盒系数']);
+
+            unset($rows[$key]['sczl_yjno']);
+            unset($rows[$key]['sczl_gxh']);
+            unset($rows[$key]['sczl_type']);
         }
-        foreach ($rows1 as $key=>$value){
-            $rows[$key]['mod_rq'] = $value['mod_rq']=='1900-01-01 00:00:00' ? '' :$value['mod_rq'];
-            $rows1[$key]['Gd_cpmc'] = array_key_exists($value['sczl_gdbh'],$gd) ? trim($gd[$value['sczl_gdbh']]) : '';
-            $rows1[$key]['name1'] = array_key_exists($value['sczl_bh1'],$rs) ? trim($rs[$value['sczl_bh1']]) : '';
-            for ($i=2;$i<=6;$i++){
-                if ($value['sczl_bh'.$i]){
-                    if ($value['sczl_bh'.$i]==$value['sczl_bh1']){
-                        $rows1[$key]['name'.$i] = $rows1[$key]['name1'];
-                    }else{
-                        $rows1[$key]['name1'] = array_key_exists($value['sczl_bh1'],$rs) ? trim($rs[$value['sczl_bh1']]) : '';
-                    }
-                }else{
-                    $rows1[$key]['name'.$i] = '';
-                }
-            }
-            $rows1[$key]['jyno_gxmc'] = sprintf("%02d", $value['sczl_yjno']).'-'.sprintf("%02d", $value['sczl_gxh']).'-->'.trim($value['sczl_type']);
-            $rows1[$key]['sczl_num'] = $value['sczl_num'] == 0 ? '' : $value['sczl_num'];
-            $rows1[$key]['sczl_cl'] = $value['sczl_cl'] == 0 ? '' : floatval($value['sczl_cl']);
-            $rows1[$key]['sczl_ms'] = $value['sczl_ms'] == 0 ? 1 : floatval($value['sczl_ms']);
-            $rows1[$key]['sczl_zcfp'] = $value['sczl_zcfp'] == 0 ? '' : floatval($value['sczl_zcfp']);
-            $rows1[$key]['sczl_zccp'] = $value['sczl_zccp'] == 0 ? '' : floatval($value['sczl_zccp']);
-            $rows1[$key]['sczl_来料少数'] = $value['sczl_来料少数'] == 0 ? '' : floatval($value['sczl_来料少数']);
-            $rows1[$key]['sczl_装版工时'] = $value['sczl_装版工时'] == 0 ? '' : floatval($value['sczl_装版工时']);
-            $rows1[$key]['sczl_保养工时'] = $value['sczl_保养工时'] == 0 ? '' : floatval($value['sczl_保养工时']);
-            $rows1[$key]['sczl_打样工时'] = $value['sczl_打样工时'] == 0 ? '' : floatval($value['sczl_打样工时']);
-            $rows1[$key]['sczl_异常停机工时'] = $value['sczl_异常停机工时'] == 0 ? '' : floatval($value['sczl_异常停机工时']);
-            $rows1[$key]['sczl_设备运行工时'] = $value['sczl_设备运行工时'] == 0 ? '' : floatval($value['sczl_设备运行工时']);
-            $rows1[$key]['sczl_工价系数'] = $value['sczl_工价系数'] == 0 ? '' : floatval($value['sczl_工价系数']);
-            $rows1[$key]['千件工价'] = $value['千件工价'] == 0 ? '' : floatval($value['千件工价']);
-            $rows1[$key]['table_type']='设备_产量计酬';
-
-            unset($rows1[$key]['sczl_yjno']);
-            unset($rows1[$key]['sczl_gxh']);
-            unset($rows1[$key]['sczl_type']);
-        }
-
-        $rows = array_merge($rows2,$rows1);
 
         $data = [
             'total'          => $total1+$total2,
@@ -332,42 +310,37 @@ class MachineProductionReport extends Api
         if (isset($req['limit']) && !empty($req['limit'])) $limit = $req['limit'];
 
         if (isset($req['gdbh']) && !empty($req['gdbh'])){
-            $where = [
-                'a.sczl_gdbh'=>[ 'like', '%' . $req['gdbh'] . '%']
-            ];
             $option = [
                 'sczl_gdbh'=>[ 'like', '%' . $req['gdbh'] . '%']
             ];
-
-            //拆片联拼系数 拆片条小盒系数
-            $rows1 = db()->table('设备_产量计酬')->alias('a')->cache(true)
-                ->field('a.sczl_gdbh, a.sczl_yjno, a.sczl_gxh, a.sczl_type, LEFT(a.sczl_rq, 10) as sczl_rq, a.sczl_jtbh, 
-            a.sczl_bzdh, a.sczl_num, a.sczl_cl, a.sczl_ms, a.sczl_zcfp, a.sczl_zccp, a.sczl_来料少数, 
-            a.sczl_装版工时, a.sczl_保养工时, a.sczl_打样工时, a.sczl_异常停机工时, a.sczl_设备运行工时, 
-            a.sczl_bh1, a.sczl_bh2, a.sczl_bh3, a.sczl_bh4, a.sczl_bh5, a.sczl_bh6, a.sczl_工价系数, 
-            d.日定额, d.千件工价, d.补产标准, 
-            rtrim(a.sys_id) as sys_id, a.sys_rq, a.mod_rq, a.UniqId')
-                ->where($where)
-                ->join(['dic_lzde'=>'d'],'a.sczl_dedh=d.sys_bh')
-                ->order('a.sczl_yjno asc, a.sczl_gxh asc, a.sczl_type asc, a.sczl_rq asc')
-                ->page($page,$limit)
-                ->select();
+            if (!cache('ReportGetList-'.$req['gdbh'].'-'.$req['cpmc'].'-'.$req['page'].'-'.$req['limit'])){
+                //a.拆片联拼系数, a.拆片条小盒系数,
+                $sql = 'SELECT a.sczl_gdbh, a.sczl_yjno, a.sczl_gxh, a.sczl_type, LEFT(a.sczl_rq, 10) as sczl_rq, a.sczl_jtbh, 
+        a.sczl_bzdh, a.sczl_num, a.sczl_cl, a.sczl_ms, a.sczl_zcfp, a.sczl_zccp,
+        a.sczl_装版工时, a.sczl_保养工时, a.sczl_打样工时, a.sczl_异常停机工时, a.sczl_设备运行工时, 
+        a.sczl_bh1, a.sczl_bh2, a.sczl_bh3, a.sczl_bh4, a.sczl_bh5, a.sczl_bh6, a.sczl_工价系数, 
+        d.日定额, d.千件工价, d.补产标准, a.sczl_来料少数, NULL AS 拆片联拼系数, NULL AS 拆片条小盒系数, 
+        rtrim(a.sys_id) as sys_id, a.sys_rq, a.mod_rq, a.UniqId, "设备_产量计酬" AS table_type
+        FROM `设备_产量计酬` `a` INNER JOIN `dic_lzde` `d` ON `a`.`sczl_dedh`=`d`.`sys_bh` ';
+                $sql .= 'WHERE `a`.`sczl_gdbh` LIKE "%'.$req['gdbh'].'%" ';
+                $sql .= 'UNION ALL
+        SELECT a.sczl_gdbh, a.sczl_yjno, a.sczl_gxh, a.sczl_type, LEFT(a.sczl_rq, 10) as sczl_rq, a.sczl_jtbh,
+        a.sczl_bzdh, a.sczl_num, a.sczl_cl, a.sczl_ms, a.sczl_fp as sczl_zcfp, a.sczl_cp as sczl_zccp,
+        a.sczl_装版工时, a.sczl_保养工时, a.sczl_打样工时, a.sczl_异常停机工时, a.sczl_设备运行工时,
+        a.sczl_bh1, a.sczl_bh2, a.sczl_bh3, a.sczl_bh4, a.sczl_bh5, a.sczl_bh6, a.sczl_工价系数, 
+        d.日定额, d.千件工价, d.补产标准, NULL AS sczl_来料少数, a.拆片联拼系数, a.拆片条小盒系数,
+        rtrim(a.sys_id) as sys_id, a.sys_rq, a.mod_rq, a.UniqId, "db_sczl" AS table_type
+        FROM `db_sczl` `a` INNER JOIN `dic_lzde` `d` ON `a`.`sczl_dedh`=`d`.`sys_bh`';
+                $sql .= 'WHERE `a`.`sczl_gdbh` LIKE "%'.$req['gdbh'].'%" ';
+                $sql .= 'ORDER BY sys_id ASC, sczl_num ASC LIMIT '.($page-1)*$limit.','.$limit;
+                $rows = db()->query($sql);
+
+                cache('ReportGetList-'.$req['gdbh'].'-'.$req['cpmc'].'-'.$req['page'].'-'.$req['limit'],$rows,3600);
+            }else{
+                $rows = cache('ReportGetList-'.$req['gdbh'].'-'.$req['cpmc'].'-'.$req['page'].'-'.$req['limit']);
+            }
 
             $total1 = db()->table('设备_产量计酬')->where($option)->count();
-
-            //来料异常
-            $rows2 = db()->table('db_sczl')->alias('a')
-                ->field('a.sczl_gdbh, a.sczl_yjno, a.sczl_gxh, a.sczl_type, LEFT(a.sczl_rq, 10) as sczl_rq, a.sczl_jtbh, 
-            a.sczl_bzdh, a.sczl_num, a.sczl_cl, a.sczl_ms, a.sczl_fp as sczl_zcfp, a.sczl_cp as sczl_zccp, 
-            a.sczl_装版工时, a.sczl_保养工时, a.sczl_打样工时, a.sczl_异常停机工时, a.sczl_设备运行工时, 
-            a.sczl_bh1, a.sczl_bh2, a.sczl_bh3, a.sczl_bh4, a.sczl_bh5, a.sczl_bh6, 
-            a.拆片联拼系数, a.拆片条小盒系数, a.sczl_工价系数, d.日定额, d.千件工价, d.补产标准, 
-            rtrim(a.sys_id) as sys_id, a.sys_rq, a.mod_rq, a.UniqId')
-                ->where($where)
-                ->join(['dic_lzde'=>'d'],'a.sczl_dedh=d.sys_bh')
-                ->order('a.sczl_yjno asc, a.sczl_gxh asc, a.sczl_type asc, a.sczl_rq asc')
-                ->page($page,$limit)
-                ->select();
             $total2 = db()->table('db_sczl')->where($option)->count();
         }else{
             if (isset($req['cpmc']) && !empty($req['cpmc'])){
@@ -375,42 +348,38 @@ class MachineProductionReport extends Api
                 $gd = db()->table('工单_基本资料')
                     ->where('Gd_cpmc', 'LIKE', '%'.$req['cpmc'].'%')
                     ->column('Gd_gdbh');
-                $where = [
-                    'a.sczl_gdbh'=>['in', $gd]
-                ];
+                $in = "'" . implode("','", $gd) . "'";
+
                 $option = [
                     'sczl_gdbh'=>['in', $gd]
                 ];
 
-                //拆片联拼系数 拆片条小盒系数
-                $rows1 = db()->table('设备_产量计酬')->alias('a')->cache(true)
-                    ->field('a.sczl_gdbh, a.sczl_yjno, a.sczl_gxh, a.sczl_type, LEFT(a.sczl_rq, 10) as sczl_rq, a.sczl_jtbh, 
-            a.sczl_bzdh, a.sczl_num, a.sczl_cl, a.sczl_ms, a.sczl_zcfp, a.sczl_zccp, a.sczl_来料少数, 
-            a.sczl_装版工时, a.sczl_保养工时, a.sczl_打样工时, a.sczl_异常停机工时, a.sczl_设备运行工时, 
-            a.sczl_bh1, a.sczl_bh2, a.sczl_bh3, a.sczl_bh4, a.sczl_bh5, a.sczl_bh6, a.sczl_工价系数, 
-            d.日定额, d.千件工价, d.补产标准, 
-            rtrim(a.sys_id) as sys_id, a.sys_rq, a.mod_rq, a.UniqId')
-                    ->where($where)
-                    ->join(['dic_lzde'=>'d'],'a.sczl_dedh=d.sys_bh')
-                    ->order('a.sczl_yjno asc, a.sczl_gxh asc, a.sczl_type asc, a.sczl_rq asc')
-                    ->page($page,$limit)
-                    ->select();
+                if (!cache('ReportLocate')){
+                    $sql = 'SELECT a.sczl_gdbh, a.sczl_yjno, a.sczl_gxh, a.sczl_type, LEFT(a.sczl_rq, 10) as sczl_rq, a.sczl_jtbh, 
+        a.sczl_bzdh, a.sczl_num, a.sczl_cl, a.sczl_ms, a.sczl_zcfp, a.sczl_zccp,
+        a.sczl_装版工时, a.sczl_保养工时, a.sczl_打样工时, a.sczl_异常停机工时, a.sczl_设备运行工时, 
+        a.sczl_bh1, a.sczl_bh2, a.sczl_bh3, a.sczl_bh4, a.sczl_bh5, a.sczl_bh6, a.sczl_工价系数, 
+        d.日定额, d.千件工价, d.补产标准, a.sczl_来料少数, NULL AS 拆片联拼系数, NULL AS 拆片条小盒系数, 
+        rtrim(a.sys_id) as sys_id, a.sys_rq, a.mod_rq, a.UniqId, "设备_产量计酬" AS table_type 
+        FROM `设备_产量计酬` `a` INNER JOIN `dic_lzde` `d` ON `a`.`sczl_dedh`=`d`.`sys_bh` ';
+                    $sql .= 'WHERE `a`.`sczl_gdbh` IN ('.$in.') ';
+                    $sql .= 'UNION ALL
+        SELECT a.sczl_gdbh, a.sczl_yjno, a.sczl_gxh, a.sczl_type, LEFT(a.sczl_rq, 10) as sczl_rq, a.sczl_jtbh,
+        a.sczl_bzdh, a.sczl_num, a.sczl_cl, a.sczl_ms, a.sczl_fp as sczl_zcfp, a.sczl_cp as sczl_zccp,
+        a.sczl_装版工时, a.sczl_保养工时, a.sczl_打样工时, a.sczl_异常停机工时, a.sczl_设备运行工时,
+        a.sczl_bh1, a.sczl_bh2, a.sczl_bh3, a.sczl_bh4, a.sczl_bh5, a.sczl_bh6, a.sczl_工价系数, 
+        d.日定额, d.千件工价, d.补产标准, NULL AS sczl_来料少数, a.拆片联拼系数, a.拆片条小盒系数,
+        rtrim(a.sys_id) as sys_id, a.sys_rq, a.mod_rq, a.UniqId, "db_sczl" AS table_type 
+        FROM `db_sczl` `a` INNER JOIN `dic_lzde` `d` ON `a`.`sczl_dedh`=`d`.`sys_bh` ';
+                    $sql .= 'WHERE `a`.`sczl_gdbh` IN ('.$in.') ';
+                    $sql .= 'ORDER BY sys_id ASC, sczl_num ASC LIMIT '.($page-1)*$limit.','.$limit;
+                    $rows = db()->query($sql);
+                }else{
 
-                $total1 = db()->table('设备_产量计酬')->where($option)->count();
+                }
 
-                //来料异常
-                $rows2 = db()->table('db_sczl')->alias('a')
-                    ->field('a.sczl_gdbh, a.sczl_yjno, a.sczl_gxh, a.sczl_type, LEFT(a.sczl_rq, 10) as sczl_rq, a.sczl_jtbh, 
-            a.sczl_bzdh, a.sczl_num, a.sczl_cl, a.sczl_ms, a.sczl_fp as sczl_zcfp, a.sczl_cp as sczl_zccp, 
-            a.sczl_装版工时, a.sczl_保养工时, a.sczl_打样工时, a.sczl_异常停机工时, a.sczl_设备运行工时, 
-            a.sczl_bh1, a.sczl_bh2, a.sczl_bh3, a.sczl_bh4, a.sczl_bh5, a.sczl_bh6, 
-            a.拆片联拼系数, a.拆片条小盒系数, a.sczl_工价系数, d.日定额, d.千件工价, d.补产标准, 
-            rtrim(a.sys_id) as sys_id, a.sys_rq, a.mod_rq, a.UniqId')
-                    ->where($where)
-                    ->join(['dic_lzde'=>'d'],'a.sczl_dedh=d.sys_bh')
-                    ->order('a.sczl_yjno asc, a.sczl_gxh asc, a.sczl_type asc, a.sczl_rq asc')
-                    ->page($page,$limit)
-                    ->select();
+
+                $total1 = db()->table('设备_产量计酬')->where($option)->count();
                 $total2 = db()->table('db_sczl')->where($option)->count();
             }else{
                 $this->error('参数错误');
@@ -419,79 +388,42 @@ class MachineProductionReport extends Api
 
         $gd = db()->table('工单_基本资料')->column('Gd_gdbh, Gd_cpmc');
         $rs = db()->table('人事_基本资料')->column('员工编号, 员工姓名');
-        foreach ($rows2 as $key=>$value){
+        foreach ($rows as $key=>$value){
             $rows[$key]['mod_rq'] = $value['mod_rq']=='1900-01-01 00:00:00' ? '' :$value['mod_rq'];
-            $rows2[$key]['Gd_cpmc'] = array_key_exists($value['sczl_gdbh'],$gd) ? trim($gd[$value['sczl_gdbh']]) : '';
-            $rows2[$key]['name1'] = array_key_exists($value['sczl_bh1'],$rs) ? trim($rs[$value['sczl_bh1']]) : '';
+            $rows[$key]['Gd_cpmc'] = array_key_exists($value['sczl_gdbh'],$gd) ? trim($gd[$value['sczl_gdbh']]) : '';
+            $rows[$key]['name1'] = array_key_exists($value['sczl_bh1'],$rs) ? trim($rs[$value['sczl_bh1']]) : '';
             for ($i=2;$i<=6;$i++){
                 if ($value['sczl_bh'.$i]){
                     if ($value['sczl_bh'.$i]==$value['sczl_bh1']){
-                        $rows2[$key]['name'.$i] = $rows2[$key]['name1'];
+                        $rows[$key]['name'.$i] = $rows[$key]['name1'];
                     }else{
-                        $rows2[$key]['name1'] = array_key_exists($value['sczl_bh1'],$rs) ? trim($rs[$value['sczl_bh1']]) : '';
+                        $rows[$key]['name1'] = array_key_exists($value['sczl_bh1'],$rs) ? trim($rs[$value['sczl_bh1']]) : '';
                     }
                 }else{
-                    $rows2[$key]['name'.$i] = '';
+                    $rows[$key]['name'.$i] = '';
                 }
             }
-            $rows2[$key]['jyno_gxmc'] = sprintf("%02d", $value['sczl_yjno']).'-'.sprintf("%02d", $value['sczl_gxh']).'-->'.trim($value['sczl_type']);
-            $rows2[$key]['sczl_num'] = $value['sczl_num'] == 0 ? '' : $value['sczl_num'];
-            $rows2[$key]['sczl_cl'] = $value['sczl_cl'] == 0 ? '' : floatval($value['sczl_cl']);
-            $rows2[$key]['sczl_ms'] = $value['sczl_ms'] == 0 ? 1 : floatval($value['sczl_ms']);
-            $rows2[$key]['sczl_zcfp'] = $value['sczl_zcfp'] == 0 ? '' : floatval($value['sczl_zcfp']);
-            $rows2[$key]['sczl_zccp'] = $value['sczl_zccp'] == 0 ? '' : floatval($value['sczl_zccp']);
-            $rows2[$key]['sczl_装版工时'] = $value['sczl_装版工时'] == 0 ? '' : floatval($value['sczl_装版工时']);
-            $rows2[$key]['sczl_保养工时'] = $value['sczl_保养工时'] == 0 ? '' : floatval($value['sczl_保养工时']);
-            $rows2[$key]['sczl_打样工时'] = $value['sczl_打样工时'] == 0 ? '' : floatval($value['sczl_打样工时']);
-            $rows2[$key]['sczl_异常停机工时'] = $value['sczl_异常停机工时'] == 0 ? '' : floatval($value['sczl_异常停机工时']);
-            $rows2[$key]['sczl_设备运行工时'] = $value['sczl_设备运行工时'] == 0 ? '' : floatval($value['sczl_设备运行工时']);
-            $rows2[$key]['拆片联拼系数'] = $value['拆片联拼系数'] == 0 ? '' : floatval($value['拆片联拼系数']);
-            $rows2[$key]['拆片条小盒系数'] = $value['拆片条小盒系数'] == 0 ? '' : floatval($value['拆片条小盒系数']);
-            $rows2[$key]['sczl_工价系数'] = $value['sczl_工价系数'] == 0 ? '' : floatval($value['sczl_工价系数']);
-            $rows2[$key]['千件工价'] = $value['千件工价'] == 0 ? '' : floatval($value['千件工价']);
-            $rows2[$key]['table_type']='db_sczl';
-
-            unset($rows2[$key]['sczl_yjno']);
-            unset($rows2[$key]['sczl_gxh']);
-            unset($rows2[$key]['sczl_type']);
+            $rows[$key]['jyno_gxmc'] = sprintf("%02d", $value['sczl_yjno']).'-'.sprintf("%02d", $value['sczl_gxh']).'-->'.trim($value['sczl_type']);
+            $rows[$key]['sczl_num'] = $value['sczl_num'] == 0 ? '' : $value['sczl_num'];
+            $rows[$key]['sczl_cl'] = $value['sczl_cl'] == 0 ? '' : floatval($value['sczl_cl']);
+            $rows[$key]['sczl_ms'] = $value['sczl_ms'] == 0 ? 1 : floatval($value['sczl_ms']);
+            $rows[$key]['sczl_zcfp'] = $value['sczl_zcfp'] == 0 ? '' : floatval($value['sczl_zcfp']);
+            $rows[$key]['sczl_zccp'] = $value['sczl_zccp'] == 0 ? '' : floatval($value['sczl_zccp']);
+            $rows[$key]['sczl_装版工时'] = $value['sczl_装版工时'] == 0 ? '' : floatval($value['sczl_装版工时']);
+            $rows[$key]['sczl_保养工时'] = $value['sczl_保养工时'] == 0 ? '' : floatval($value['sczl_保养工时']);
+            $rows[$key]['sczl_打样工时'] = $value['sczl_打样工时'] == 0 ? '' : floatval($value['sczl_打样工时']);
+            $rows[$key]['sczl_异常停机工时'] = $value['sczl_异常停机工时'] == 0 ? '' : floatval($value['sczl_异常停机工时']);
+            $rows[$key]['sczl_设备运行工时'] = $value['sczl_设备运行工时'] == 0 ? '' : floatval($value['sczl_设备运行工时']);
+            $rows[$key]['sczl_工价系数'] = $value['sczl_工价系数'] == 0 ? '' : floatval($value['sczl_工价系数']);
+            $rows[$key]['千件工价'] = $value['千件工价'] == 0 ? '' : floatval($value['千件工价']);
+            $rows[$key]['sczl_来料少数'] = $value['sczl_来料少数'] == 0 ? '' : floatval($value['sczl_来料少数']);
+            $rows[$key]['拆片联拼系数'] = $value['拆片联拼系数'] == 0 ? '' : floatval($value['拆片联拼系数']);
+            $rows[$key]['拆片条小盒系数'] = $value['拆片条小盒系数'] == 0 ? '' : floatval($value['拆片条小盒系数']);
+
+            unset($rows[$key]['sczl_yjno']);
+            unset($rows[$key]['sczl_gxh']);
+            unset($rows[$key]['sczl_type']);
         }
-        foreach ($rows1 as $key=>$value){
-            $rows[$key]['mod_rq'] = $value['mod_rq']=='1900-01-01 00:00:00' ? '' :$value['mod_rq'];
-            $rows1[$key]['Gd_cpmc'] = array_key_exists($value['sczl_gdbh'],$gd) ? trim($gd[$value['sczl_gdbh']]) : '';
-            $rows1[$key]['name1'] = array_key_exists($value['sczl_bh1'],$rs) ? trim($rs[$value['sczl_bh1']]) : '';
-            for ($i=2;$i<=6;$i++){
-                if ($value['sczl_bh'.$i]){
-                    if ($value['sczl_bh'.$i]==$value['sczl_bh1']){
-                        $rows1[$key]['name'.$i] = $rows1[$key]['name1'];
-                    }else{
-                        $rows1[$key]['name1'] = array_key_exists($value['sczl_bh1'],$rs) ? trim($rs[$value['sczl_bh1']]) : '';
-                    }
-                }else{
-                    $rows1[$key]['name'.$i] = '';
-                }
-            }
-            $rows1[$key]['jyno_gxmc'] = sprintf("%02d", $value['sczl_yjno']).'-'.sprintf("%02d", $value['sczl_gxh']).'-->'.trim($value['sczl_type']);
-            $rows1[$key]['sczl_num'] = $value['sczl_num'] == 0 ? '' : $value['sczl_num'];
-            $rows1[$key]['sczl_cl'] = $value['sczl_cl'] == 0 ? '' : floatval($value['sczl_cl']);
-            $rows1[$key]['sczl_ms'] = $value['sczl_ms'] == 0 ? 1 : floatval($value['sczl_ms']);
-            $rows1[$key]['sczl_zcfp'] = $value['sczl_zcfp'] == 0 ? '' : floatval($value['sczl_zcfp']);
-            $rows1[$key]['sczl_zccp'] = $value['sczl_zccp'] == 0 ? '' : floatval($value['sczl_zccp']);
-            $rows1[$key]['sczl_来料少数'] = $value['sczl_来料少数'] == 0 ? '' : floatval($value['sczl_来料少数']);
-            $rows1[$key]['sczl_装版工时'] = $value['sczl_装版工时'] == 0 ? '' : floatval($value['sczl_装版工时']);
-            $rows1[$key]['sczl_保养工时'] = $value['sczl_保养工时'] == 0 ? '' : floatval($value['sczl_保养工时']);
-            $rows1[$key]['sczl_打样工时'] = $value['sczl_打样工时'] == 0 ? '' : floatval($value['sczl_打样工时']);
-            $rows1[$key]['sczl_异常停机工时'] = $value['sczl_异常停机工时'] == 0 ? '' : floatval($value['sczl_异常停机工时']);
-            $rows1[$key]['sczl_设备运行工时'] = $value['sczl_设备运行工时'] == 0 ? '' : floatval($value['sczl_设备运行工时']);
-            $rows1[$key]['sczl_工价系数'] = $value['sczl_工价系数'] == 0 ? '' : floatval($value['sczl_工价系数']);
-            $rows1[$key]['千件工价'] = $value['千件工价'] == 0 ? '' : floatval($value['千件工价']);
-            $rows1[$key]['table_type']='设备_产量计酬';
-
-            unset($rows1[$key]['sczl_yjno']);
-            unset($rows1[$key]['sczl_gxh']);
-            unset($rows1[$key]['sczl_type']);
-        }
-
-        $rows = array_merge($rows1,$rows2);
 
         $data = [
             'total'          => $total1+$total2,