Browse Source

机台日报表查询速度优化

曹鹤洋 1 year ago
parent
commit
6066f41599
1 changed files with 193 additions and 248 deletions
  1. 193 248
      application/api/controller/MachineProductionReport.php

+ 193 - 248
application/api/controller/MachineProductionReport.php

@@ -32,59 +32,44 @@ class MachineProductionReport extends Api
             $this->error('请求方式错误');
         }
 
-        $rows = db('设备_产量计酬')->cache(true,300)
-            ->field('LEFT(sys_rq, 10) as date, COUNT(*) as counts')
-            ->group('date')
-            ->order('UniqId desc')
-            ->limit(30)
-            ->select();
-
-        $rows1 = db('db_sczl')->cache(true,300)
-            ->group('date')
-            ->order('UniqId desc')
-            ->limit(40)
-            ->column('LEFT(sys_rq, 10) as date, COUNT(*) as counts');
-//        $sql = 'SELECT date, COUNT(*) as counts
-//FROM (
-//    SELECT LEFT(sys_rq, 10) as date FROM db_sczl
-//    UNION ALL
-//    SELECT LEFT(sys_rq, 10) as date FROM 设备_产量计酬
-//) AS t1
-//GROUP BY date
-//ORDER BY date DESC
-//LIMIT 30';
-//        $rows = db()->query($sql);
-//halt($rows);
-        $arr2 = db('设备_产量计酬')->cache(true,300)
-            ->field('LEFT(sys_rq, 10) as date, rtrim(sys_id) as sys_id, COUNT(sys_id) as count')
-            ->where('sys_rq','>=',$rows[29]['date'])
-            ->group('date, sys_id')
-            ->select();
-
-        $arr1 = db('db_sczl')->cache(true,300)
-            ->field('LEFT(sys_rq, 10) as date, rtrim(sys_id) as sys_id, COUNT(sys_id) as count')
-            ->where('sys_rq','>=',$rows[29]['date'])
-            ->group('date, sys_id')
-            ->select();
+        $time = date('Y-m-d',time()-8640000);
+        $sql = 'SELECT date, COUNT(date) as counts
+            FROM (
+                SELECT LEFT(sys_rq, 10) as date FROM db_sczl WHERE sys_rq > "'.$time.'"
+            UNION ALL
+                SELECT LEFT(sys_rq, 10) as date FROM 设备_产量计酬 WHERE sys_rq > "'.$time.'"
+            ) AS t1
+            GROUP BY date
+            ORDER BY date DESC
+            LIMIT 30';
+        $rows = db()->query($sql);
 
+        if(count($rows) < 30){
+            $sql = 'SELECT date, COUNT(date) as counts
+            FROM (
+                SELECT LEFT(sys_rq, 10) as date FROM db_sczl WHERE sys_rq > "2023-11-01"
+            UNION ALL
+                SELECT LEFT(sys_rq, 10) as date FROM 设备_产量计酬 WHERE sys_rq > "2023-11-01"
+            ) AS t1
+            GROUP BY date
+            ORDER BY date DESC
+            LIMIT 30';
+        $rows = db()->query($sql);
+       }
+
+        $sql = 'SELECT date, sys_id, COUNT(sys_id) as count
+            FROM (
+                SELECT LEFT(sys_rq, 10) as date, rtrim(sys_id) as sys_id 
+                FROM db_sczl WHERE sys_rq >= "'.$rows[count($rows)-1]['date'].'"
+            UNION ALL
+                SELECT LEFT(sys_rq, 10) as date, rtrim(sys_id) as sys_id 
+                FROM 设备_产量计酬 WHERE sys_rq >= "'.$rows[count($rows)-1]['date'].'"
+            ) AS t1
+            GROUP BY date, sys_id';
+        $data = db()->query($sql);
+        
         $result = [];
-        // 遍历第一个数组
-        foreach ($arr1 as $item) {
-            $date = $item['date'];
-            $sysId = $item['sys_id'];
-            $count = $item['count'];
-
-            // 如果结果数组中不存在该日期和系统ID的记录,则创建新记录
-            if (!isset($result[$date][$sysId])) {
-                $result[$date][$sysId] = 0;
-            }
-
-            // 将count累加到对应的记录中
-            $result[$date][$sysId] += $count;
-        }
-
-        // 遍历第二个数组
-        foreach ($arr2 as $item) {
+        foreach ($data as $item) {
             $date = $item['date'];
             $sysId = $item['sys_id'];
             $count = $item['count'];
@@ -107,11 +92,6 @@ class MachineProductionReport extends Api
         }
 
         foreach($rows as $key=>$value){
-            if(array_key_exists($value['date'],$rows1)){
-                $rows[$key]['counts'] = $value['counts']+$rows1[$value['date']];
-            }else{
-                $rows[$key]['counts'] = $value['counts'];
-            }
             $rows[$key]['sys'] = $result[$value['date']];
             $rows[$key]['date'] = str_replace('-', '.', $rows[$key]['date']);
         }
@@ -141,16 +121,28 @@ class MachineProductionReport extends Api
         ORDER BY t1.`sczl_gdbh` DESC
         LIMIT 65';
         $rows = db()->query($sql);
-        $arr1 = db('设备_产量计酬')->cache(true,3600)
-            ->field('sczl_gdbh,rtrim(sys_id) as sys_id')
-            ->where('sczl_gdbh','>=',$rows[64]['sczl_gdbh'])
-            ->select();
 
-        $arr2 = db('db_sczl')->cache(true,3600)
-            ->field('sczl_gdbh,rtrim(sys_id) as sys_id')
-            ->where('sczl_gdbh','>=',$rows[64]['sczl_gdbh'])
-            ->select();
-        $arr = array_merge($arr1,$arr2);
+        $sql = 'SELECT sczl_gdbh,rtrim(sys_id) as sys_id
+            FROM (
+                SELECT sczl_gdbh,rtrim(sys_id) as sys_id
+                FROM db_sczl WHERE sczl_gdbh >= "'.$rows[count($rows)-1]['sczl_gdbh'].'"
+            UNION ALL
+                SELECT sczl_gdbh,rtrim(sys_id) as sys_id
+                FROM 设备_产量计酬 WHERE sczl_gdbh >= "'.$rows[count($rows)-1]['sczl_gdbh'].'"
+            ) AS t1
+            ORDER BY sys_id';
+        $arr = db()->query($sql);
+
+        // $arr1 = db('设备_产量计酬')->cache(true,3600)
+        //     ->field('sczl_gdbh,rtrim(sys_id) as sys_id')
+        //     ->where('sczl_gdbh','>=',$rows[count($rows)-1]['sczl_gdbh'])
+        //     ->select();
+
+        // $arr2 = db('db_sczl')->cache(true,3600)
+        //     ->field('sczl_gdbh,rtrim(sys_id) as sys_id')
+        //     ->where('sczl_gdbh','>=',$rows[count($rows)-1]['sczl_gdbh'])
+        //     ->select();
+        // $arr = array_merge($arr1,$arr2);
 
         $brr = [];
         foreach($arr as $k=>$v){
@@ -194,60 +186,46 @@ class MachineProductionReport extends Api
         if (isset($req['page']) && !empty($req['page'])) $page = $req['page'];
         if (isset($req['limit']) && !empty($req['limit'])) $limit = $req['limit'];
 
-        if(strpos($req['date'],'-')){
-            $where = ['a.sys_rq'=>['like','%'.$req['date'].'%']];
-            $option = ['sys_rq'=>['like','%'.$req['date'].'%']];
-        }else{
-            $where = ['a.sczl_gdbh'=>$req['date']];
-            $option = ['sczl_gdbh'=>$req['date']];
-        }
-        if (isset($req['sys_id']) && !empty($req['sys_id'])){
-            $where['a.sys_id'] = ['LIKE','%'.$req['sys_id'].'%'];
-            $option['sys_id'] = ['LIKE','%'.$req['sys_id'].'%'];
-        }
-        $total1 = db('设备_产量计酬')->where($option)->count();
-        $total2 = db('db_sczl')->where($option)->count();
-
+        //获取total
+        $sql = 'SELECT sum(count) AS count FROM (
+            SELECT COUNT(*) AS count FROM `设备_产量计酬` ';
+            $sql .= strpos($req['date'],'-') ? 'WHERE `sys_rq` LIKE "%'.$req['date'].'%" ' : 'WHERE `sczl_gdbh` = "'.$req['date'].'" ';
+            $sql .= isset($req['sys_id']) && !empty($req['sys_id']) ? 'AND `sys_id` LIKE "%'.$req['sys_id'].'%" ' : '';
+            $sql .= 'UNION ALL SELECT COUNT(*) AS count FROM `db_sczl`';
+            $sql .= strpos($req['date'],'-') ? 'WHERE `sys_rq` LIKE "%'.$req['date'].'%" ' : 'WHERE `sczl_gdbh` = "'.$req['date'].'" ';
+            $sql .= isset($req['sys_id']) && !empty($req['sys_id']) ? 'AND `sys_id` LIKE "%'.$req['sys_id'].'%" ' : '';
+            $sql .= ') as t';
+        $total = db()->query($sql)[0]['count'];
+
+        //判断是否存在缓存
         if (!cache('ReportGetList-'.$req['date'].'-'.$req['sys_id'].'-'.$req['page'].'-'.$req['limit'])){
-            // a.sczl_来料少数,
-            //a.拆片联拼系数, a.拆片条小盒系数,
+            //UNION 查询两表数据
+            // db_sczl缺少数据 --> 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'].'" ';
-            }
-
-            if (isset($req['sys_id']) && !empty($req['sys_id'])){
-                $sql .= 'AND `a`.`sys_id` LIKE "%'.$req['sys_id'].'%" ';
-            }
+                        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 .= strpos($req['date'],'-') ? 'WHERE `a`.`sys_rq` LIKE "%'.$req['date'].'%" ' : 'WHERE `a`.`sczl_gdbh` = "'.$req['date'].'" ';
+            $sql .= isset($req['sys_id']) && !empty($req['sys_id']) ? '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'].'" ';
-            }
-
-            if (isset($req['sys_id']) && !empty($req['sys_id'])){
-                $sql .= 'AND `a`.`sys_id` LIKE "%'.$req['sys_id'].'%" ';
-            }
+                    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 .= strpos($req['date'],'-') ? 'WHERE `a`.`sys_rq` LIKE "%'.$req['date'].'%" ' : 'WHERE `a`.`sczl_gdbh` = "'.$req['date'].'" ';
+            $sql .= isset($req['sys_id']) && !empty($req['sys_id']) ? '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);
+            //设置缓存
+            cache('ReportGetList-'.$req['date'].'-'.$req['sys_id'].'-'.$req['page'].'-'.$req['limit'],$rows,3600);
         }else{
             $rows = cache('ReportGetList-'.$req['date'].'-'.$req['sys_id'].'-'.$req['page'].'-'.$req['limit']);
         }
@@ -292,7 +270,7 @@ class MachineProductionReport extends Api
         }
 
         $data = [
-            'total'          => $total1+$total2,
+            'total'         => $total,
             'rows'          => $rows,
         ];
         $this->success('成功',$data);
@@ -320,27 +298,34 @@ class MachineProductionReport extends Api
         if (isset($req['limit']) && !empty($req['limit'])) $limit = $req['limit'];
 
         if (isset($req['gdbh']) && !empty($req['gdbh'])){
-            $option = [
-                'sczl_gdbh'=>[ 'like', '%' . $req['gdbh'] . '%']
-            ];
+            //获取total
+            $sql = 'SELECT sum(count) AS count FROM (
+                SELECT COUNT(*) AS count FROM `设备_产量计酬` ';
+                $sql .= 'WHERE `sczl_gdbh` LIKE "%'.$req['gdbh'].'%" ';
+                $sql .= 'UNION ALL SELECT COUNT(*) AS count FROM `db_sczl`';
+                $sql .= 'WHERE `sczl_gdbh` LIKE "%'.$req['gdbh'].'%" ';
+                $sql .= ') as t';
+            $total = db()->query($sql)[0]['count'];
+
+            //判断缓存是否存在
             if (!cache('ReportGetList-'.$req['gdbh'].'-'.$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` ';
+                            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`';
+                        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);
@@ -349,38 +334,40 @@ class MachineProductionReport extends Api
             }else{
                 $rows = cache('ReportGetList-'.$req['gdbh'].'-'.$req['page'].'-'.$req['limit']);
             }
-
-            $total1 = db('设备_产量计酬')->where($option)->count();
-            $total2 = db('db_sczl')->where($option)->count();
         }else{
             if (isset($req['cpmc']) && !empty($req['cpmc'])){
-                //查询工单表
+                //查询包括该名称的工单号
                 $gd = db('工单_基本资料')
                     ->where('Gd_cpmc', 'LIKE', '%'.$req['cpmc'].'%')
                     ->column('Gd_gdbh');
                 $in = "'" . implode("','", $gd) . "'";
 
-                $option = [
-                    'sczl_gdbh'=>['in', $gd]
-                ];
+                //获取total
+                $sql = 'SELECT sum(count) AS count FROM (
+                    SELECT COUNT(*) AS count FROM `设备_产量计酬` ';
+                    $sql .= 'WHERE `sczl_gdbh` IN ('.$in.') ';
+                    $sql .= 'UNION ALL SELECT COUNT(*) AS count FROM `db_sczl`';
+                    $sql .= 'WHERE `sczl_gdbh` IN ('.$in.') ';
+                    $sql .= ') as t';
+                $total = db()->query($sql)[0]['count'];
 
                 if (!cache('ReportGetList-'.$req['gdbh'].'-'.$req['cpmc'].'-'.$req['limit'])){
                     $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` ';
+                                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` ';
+                            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);
@@ -388,10 +375,6 @@ class MachineProductionReport extends Api
                 }else{
                     $rows = cache('ReportGetList-'.$req['cpmc'].'-'.$req['page'].'-'.$req['limit']);
                 }
-
-
-                $total1 = db('设备_产量计酬')->where($option)->count();
-                $total2 = db('db_sczl')->where($option)->count();
             }else{
                 $this->error('参数错误');
             }
@@ -437,7 +420,7 @@ class MachineProductionReport extends Api
         }
 
         $data = [
-            'total'          => $total1+$total2,
+            'total'         => $total,
             'rows'          => $rows,
         ];
         $this->success('成功',$data);
@@ -809,47 +792,39 @@ class MachineProductionReport extends Api
         if (!(isset($req['fields']) && count($req['fields'])!=0)){
             $this->error('参数错误','fields',100);
         }
-        if(strpos($req['date'],'-')){
-            $where = ['a.sys_rq'=>['like','%'.$req['date'].'%']];
-        }else{
-            $where = ['a.sczl_gdbh'=>$req['date']];
-        }
-        if (isset($req['sys_id']) && !empty($req['sys_id'])){
-            $where['a.sys_id'] = ['LIKE','%'.$req['sys_id'].'%'];
-        }
 
         $arr = [
-            'sczl_gdbh'         =>['工单编号'],
-            'Gd_cpmc'           =>['产品名称'],
-            'jyno_gxmc'         =>['印件及工序'],
-            'sczl_rq'           =>['生产日期'],
-            'sczl_jtbh'         =>['机台'],
-            'sczl_bzdh'         =>['班组'],
-            'sczl_num'          =>['流程单'],
-            'sczl_cl'           =>['车头产量'],
-            'sczl_ms'           =>['色度数'],
-            'sczl_zcfp'         =>['制程废'],
-            'sczl_zccp'         =>['次品'],
+            'sczl_gdbh'          =>['工单编号'],
+            'Gd_cpmc'            =>['产品名称'],
+            'jyno_gxmc'          =>['印件及工序'],
+            'sczl_rq'            =>['生产日期'],
+            'sczl_jtbh'          =>['机台'],
+            'sczl_bzdh'          =>['班组'],
+            'sczl_num'           =>['流程单'],
+            'sczl_cl'            =>['车头产量'],
+            'sczl_ms'            =>['色度数'],
+            'sczl_zcfp'          =>['制程废'],
+            'sczl_zccp'          =>['次品'],
             'sczl_来料异常'      =>['来料异常'],
             'sczl_装版工时'      =>['装版工时'],
             'sczl_保养工时'      =>['保养工时'],
             'sczl_打样工时'      =>['打样工时'],
-            'sczl_异常停机工时'   =>['异常停机工时'],
-            'sczl_设备运行工时'   =>['设备运行工时'],
-            'sczl_bh1'          =>['组员编号1'],
-            'sczl_bh1_name'     =>['组员姓名1'],
-            'sczl_bh2'          =>['组员编号2'],
-            'sczl_bh2_name'     =>['组员姓名2'],
-            'sczl_bh3'          =>['组员编号3'],
-            'sczl_bh3_name'     =>['组员姓名3'],
-            'sczl_bh4'          =>['组员编号4'],
-            'sczl_bh4_name'     =>['组员姓名4'],
-            'sczl_bh5'          =>['组员编号5'],
-            'sczl_bh5_name'     =>['组员姓名5'],
-            'sczl_bh6'          =>['组员编号6'],
-            'sczl_bh6_name'     =>['组员姓名6'],
-            '拆片联拼系数'        =>['拆片联拼系数'],
-            '拆片条小盒系数'      =>['拆片条小盒系数'],
+            'sczl_异常停机工时'  =>['异常停机工时'],
+            'sczl_设备运行工时'  =>['设备运行工时'],
+            'sczl_bh1'           =>['组员编号1'],
+            'sczl_bh1_name'      =>['组员姓名1'],
+            'sczl_bh2'           =>['组员编号2'],
+            'sczl_bh2_name'      =>['组员姓名2'],
+            'sczl_bh3'           =>['组员编号3'],
+            'sczl_bh3_name'      =>['组员姓名3'],
+            'sczl_bh4'           =>['组员编号4'],
+            'sczl_bh4_name'      =>['组员姓名4'],
+            'sczl_bh5'           =>['组员编号5'],
+            'sczl_bh5_name'      =>['组员姓名5'],
+            'sczl_bh6'           =>['组员编号6'],
+            'sczl_bh6_name'      =>['组员姓名6'],
+            '拆片联拼系数'       =>['拆片联拼系数'],
+            '拆片条小盒系数'     =>['拆片条小盒系数'],
             'sczl_工价系数'      =>['工价系数'],
             '日定额'             =>['日定额'],
             '千件工价'           =>['千件工价'],
@@ -862,38 +837,38 @@ class MachineProductionReport extends Api
             }
         }
 
-        //拆片联拼系数 拆片条小盒系数
-        $rows1 = db('设备_产量计酬')->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_来料少数 as 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.补产标准 
-            ')
-            ->where($where)
-            ->join(['dic_lzde'=>'d'],'a.sczl_dedh = d.sys_bh')
-            ->order('a.sys_id asc, a.sczl_num asc')
-            ->select();
-
-        $rows2 = db('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.补产标准
-            ')
-            ->where($where)
-            ->join(['dic_lzde'=>'d'],'a.sczl_dedh=d.sys_bh')
-            ->order('a.sys_id asc, a.sczl_num asc')
-            ->select();
+        // UNION 查询两表数据
+        // db_sczl缺少数据 --> 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_来料少数 as 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 .= strpos($req['date'],'-') ? 'WHERE `a`.`sys_rq` LIKE "%'.$req['date'].'%" ' : 'WHERE `a`.`sczl_gdbh` = "'.$req['date'].'" ';
+        $sql .= isset($req['sys_id']) && !empty($req['sys_id']) ? '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`';
+        $sql .= strpos($req['date'],'-') ? 'WHERE `a`.`sys_rq` LIKE "%'.$req['date'].'%" ' : 'WHERE `a`.`sczl_gdbh` = "'.$req['date'].'" ';
+        $sql .= isset($req['sys_id']) && !empty($req['sys_id']) ? 'AND `a`.`sys_id` LIKE "%'.$req['sys_id'].'%" ' : '';
+        $sql .= 'ORDER BY sys_id ASC, sczl_num ASC';
+        $rows = db()->query($sql);
 
         $gd = db('工单_基本资料')->column('Gd_gdbh, 成品名称 as Gd_cpmc');
         $rs = db('人事_基本资料')->column('员工编号, 员工姓名');
-        foreach ($rows2 as $key=>$value){
+        foreach ($rows as $key=>$value){
             $subArray = [];
             foreach ($arr as $k=>$v){
-                if($k=='sczl_来料异常'){
-                    $subArray[$k] = '';
+                if($k=='sczl_来料异常' || $k=='拆片联拼系数' || $k=='拆片条小盒系数'){
+                    $subArray[$k] = $value[$k] == null ? '' : floatval($value[$k]);
                 }else if($k=='Gd_cpmc'){
                     if(trim($value['sczl_gdbh']) != '' && array_key_exists($value['sczl_gdbh'],$gd)){
                         $subArray[$k] = trim($gd[$value['sczl_gdbh']]);
@@ -914,37 +889,7 @@ class MachineProductionReport extends Api
                 }else if($k=='jyno_gxmc'){
                     $subArray['jyno_gxmc'] = sprintf("%02d", $value['sczl_yjno']).'-'.sprintf("%02d", $value['sczl_gxh']).'-->'.trim($value['sczl_type']);
                 }else{
-                    $subArray[$k] = $rows2[$key][$k];
-                }
-            }
-            array_push($data,$subArray);
-        }
-        foreach ($rows1 as $key=>$value){
-            $subArray = [];
-            foreach ($arr as $k=>$v){
-                if($k=='拆片联拼系数' || $k=='拆片条小盒系数'){
-                    $subArray[$k] = '';
-                }else if($k=='Gd_cpmc'){
-                    if(trim($value['sczl_gdbh']) != '' && array_key_exists($value['sczl_gdbh'],$gd)){
-                        $subArray[$k] = trim($gd[$value['sczl_gdbh']]);
-                    }else{
-                        $subArray[$k] = '';
-                    }
-                }else if($k=='sczl_bh1_name' || $k=='sczl_bh2_name' || $k=='sczl_bh3_name' || $k=='sczl_bh4_name' || $k=='sczl_bh5_name' || $k=='sczl_bh6_name'){
-                    if(trim($value[substr($k,0,8)]) != '' && array_key_exists($value[substr($k,0,8)],$rs)){
-                        $subArray[$k] = trim($rs[$value[substr($k,0,8)]]);
-                    }else{
-                        $subArray[$k] = '';
-                    }
-                }else if($k=='sczl_num' || $k=='sczl_cl' || $k=='sczl_zcfp' || $k=='sczl_zccp' || $k=='sczl_来料异常' || $k=='sczl_装版工时' ||
-                    $k=='sczl_保养工时' || $k=='sczl_打样工时' || $k=='sczl_异常停机工时' || $k=='sczl_设备运行工时' || $k=='sczl_工价系数' || $k=='千件工价'){
-                    $subArray[$k] = $value[$k] == 0 ? '' : floatval($value[$k]);
-                }else if($k=='sczl_ms'){
-                    $subArray[$k] = $value[$k] == 0 ? 1 : floatval($value[$k]);
-                }else if($k=='jyno_gxmc'){
-                    $subArray['jyno_gxmc'] = sprintf("%02d", $value['sczl_yjno']).'-'.sprintf("%02d", $value['sczl_gxh']).'-->'.trim($value['sczl_type']);
-                }else{
-                    $subArray[$k] = $rows1[$key][$k];
+                    $subArray[$k] = $rows[$key][$k];
                 }
             }
             array_push($data,$subArray);