huangsanjia 1 год назад
Родитель
Сommit
5aa052f115
1 измененных файлов с 91 добавлено и 74 удалено
  1. 91 74
      application/api/controller/OrderSuperLoss.php

+ 91 - 74
application/api/controller/OrderSuperLoss.php

@@ -124,92 +124,109 @@ class OrderSuperLoss extends Api
         if (empty($pages)){
             $pages = 1;
         }
-        $data = Db::table('rec_月度废品汇总')->alias('a')
-            ->join('工单_基本资料 b', 'a.Gd_gdbh = b.Gd_gdbh','left')
-            ->join('工单_印件资料 c', 'a.Gd_gdbh = c.Yj_Gdbh','left')
-            ->where($where)
-            ->field('a.Gd_gdbh, SUM(a.废品数量) AS 废品合计, a.年月, rtrim(a.Gd_cpmc) as Gd_cpmc, a.Gd_cpdh, a.实际投料, b.计量单位, c.yj_Yjno, c.yj_ls')
-            ->group('a.Gd_gdbh')
-            ->order('a.Gd_cpdh asc,a.年月 desc')
-            ->fetchSql(true)
-            ->page($pages)
-            ->limit($limit)
-            ->select();
-        foreach ($data as $key => $value){
-            //查出成品数量及日期
-            $cp_sql = "SELECT SUM(jjcp_sl) as cp_sl,MAX(jjcp_sj) as jjcp_sj FROM `成品入仓` WHERE jjcp_gdbh = '{$value['Gd_gdbh']}' GROUP BY jjcp_gdbh";
-            $cp_data = Db::query($cp_sql);
-            $data[$key]['warehousing_num'] = $cp_data[0]['cp_sl'];
-            $data[$key]['warehousing_date'] = substr($cp_data[0]['jjcp_sj'],0,10);
-            //查出进入超节损的工序,有上报产量的工序就进入超节损
-            $gxh_sql = "SELECT sczl_gxh FROM 
+        $is_have_cache = Cache::get('OrderSuperLoss/getList'.$params['date']);
+        if ($is_have_cache === false){
+            $data = db('rec_月度废品汇总')->alias('a')
+                ->join('工单_基本资料 b', 'a.Gd_gdbh = b.Gd_gdbh','left')
+                ->join('工单_印件资料 c', 'a.Gd_gdbh = c.Yj_Gdbh','left')
+                ->where($where)
+                ->field('a.Gd_gdbh, SUM(a.废品数量) AS 废品合计, a.年月, rtrim(a.Gd_cpmc) as Gd_cpmc, a.Gd_cpdh, a.实际投料, b.计量单位, c.yj_Yjno, c.yj_ls')
+                ->group('a.Gd_gdbh')
+                ->order('a.Gd_cpdh asc,a.年月 desc')
+                ->page($pages)
+                ->limit($limit)
+                ->select();
+            $total = db('rec_月度废品汇总')->alias('a')
+                ->join('工单_基本资料 b', 'a.Gd_gdbh = b.Gd_gdbh','left')
+                ->join('工单_印件资料 c', 'a.Gd_gdbh = c.Yj_Gdbh','left')
+                ->where($where)
+                ->field('a.Gd_gdbh, SUM(a.废品数量) AS 废品合计, a.年月, rtrim(a.Gd_cpmc) as Gd_cpmc, a.Gd_cpdh, a.实际投料, b.计量单位, c.yj_Yjno, c.yj_ls')
+                ->group('a.Gd_gdbh')
+                ->count();
+            foreach ($data as $key => $value){
+                //查出成品数量及日期
+                $cp_sql = "SELECT SUM(jjcp_sl) as cp_sl,MAX(jjcp_sj) as jjcp_sj FROM `成品入仓` WHERE jjcp_gdbh = '{$value['Gd_gdbh']}' GROUP BY jjcp_gdbh";
+                $cp_data = Db::query($cp_sql);
+                $data[$key]['warehousing_num'] = $cp_data[0]['cp_sl'];
+                $data[$key]['warehousing_date'] = substr($cp_data[0]['jjcp_sj'],0,10);
+                //查出进入超节损的工序,有上报产量的工序就进入超节损
+                $gxh_sql = "SELECT sczl_gxh FROM 
                         (SELECT sczl_gxh FROM 设备_产量计酬 WHERE sczl_gdbh = '{$value['Gd_gdbh']}' 
                         UNION SELECT sczl_gxh FROM db_sczl WHERE sczl_gdbh = '{$value['Gd_gdbh']}') AS combined_result";
-            $gxh_arr = Db::query($gxh_sql);
-            $gxh_values = array_column($gxh_arr, 'sczl_gxh');
-            $gy_data =db('工单_工艺资料')->where('Gy0_gdbh',$value['Gd_gdbh'])->where('Gy0_gxh','in',$gxh_values)->field('Gy0_计划接货数,Gy0_计划损耗')->select();
-            $arr = [];
-            $plan_loss = [];//工单计划损耗
-            foreach ($gy_data as $k=>$v){
-                $rate =  round($v['Gy0_计划损耗'] / $v['Gy0_计划接货数'],5);
-                $arr[$k] = floor($rate * 10000) /10000;
-                $plan_loss[$k] = $v['Gy0_计划损耗'];
-            }
-            $target_rate =  (1-array_sum($arr))*100;
-            $data[$key]['target_rate'] =$target_rate.'%'; //目标合格率
-            $real_rate = $cp_data[0]['cp_sl'] / ($value['实际投料'] * 10000) *100;
-            $data[$key]['real_rate'] = number_format($real_rate,2) . '%';//实际合格率
-            //奖惩系数及金额
-            $data[$key]['reward_rate'] = '';
-            $data[$key]['reward_money'] = '';
-            //制程废品
-            $zzfp_data =db('设备_产量计酬')->where('sczl_gdbh',$value['Gd_gdbh'])->field('SUM(sczl_zcfp) as sczl_zcfp')->select();
-            $data[$key]['zcfp'] = $zzfp_data[0]['sczl_zcfp'] * $value['yj_ls'];//制程废品
-            $data[$key]['废品合计'] = $data[$key]['zcfp'] + $value['废品合计'];//废品合计
-            $data[$key]['intangible_loss'] = $value['实际投料'] *10000 - $cp_data[0]['cp_sl'] - $data[$key]['废品合计'];//工单无形损
-            //材料废
-            $waste_l =db('rec_月度废品汇总')->where('Gd_gdbh',$value['Gd_gdbh'])->where('废品类别','like','%L%')->field('SUM(废品数量) as 废品数量')->select();
-            $data[$key]['material_waste'] = $waste_l[0]['废品数量'];
-            //零头处理
-            $waste_w = db('rec_月度废品汇总')->where('Gd_gdbh',$value['Gd_gdbh'])->where('废品类别','like','%M%')->field('SUM(废品数量) as 废品数量')->select();
-            $data[$key]['minor_processing'] = $waste_w[0]['废品数量'];
-            //外发废
-            $out_sql = "SELECT fp_sl1,fp_sl2,fp_sl3,fp_sl4,fp_sl5,fp_sl6,fp_sl7,fp_sl8,fp_sl9,fp_sl10,fp_sl11,fp_sl12,fp_sl13,
+                $gxh_arr = Db::query($gxh_sql);
+                $gxh_values = array_column($gxh_arr, 'sczl_gxh');
+                $gy_data =db('工单_工艺资料')->where('Gy0_gdbh',$value['Gd_gdbh'])->where('Gy0_gxh','in',$gxh_values)->field('Gy0_计划接货数,Gy0_计划损耗')->select();
+                $arr = [];
+                $plan_loss = [];//工单计划损耗
+                foreach ($gy_data as $k=>$v){
+                    $rate =  round($v['Gy0_计划损耗'] / $v['Gy0_计划接货数'],5);
+                    $arr[$k] = floor($rate * 10000) /10000;
+                    $plan_loss[$k] = $v['Gy0_计划损耗'];
+                }
+                $target_rate =  (1-array_sum($arr))*100;
+                $data[$key]['target_rate'] =$target_rate.'%'; //目标合格率
+                $real_rate = $cp_data[0]['cp_sl'] / ($value['实际投料'] * 10000) *100;
+                $data[$key]['real_rate'] = number_format($real_rate,2) . '%';//实际合格率
+                //奖惩系数及金额
+                $data[$key]['reward_rate'] = '';
+                $data[$key]['reward_money'] = '';
+                //制程废品
+                $zzfp_data =db('设备_产量计酬')->where('sczl_gdbh',$value['Gd_gdbh'])->field('SUM(sczl_zcfp) as sczl_zcfp')->select();
+                $data[$key]['zcfp'] = $zzfp_data[0]['sczl_zcfp'] * $value['yj_ls'];//制程废品
+                $data[$key]['废品合计'] = $data[$key]['zcfp'] + $value['废品合计'];//废品合计
+                $data[$key]['intangible_loss'] = $value['实际投料'] *10000 - $cp_data[0]['cp_sl'] - $data[$key]['废品合计'];//工单无形损
+                //材料废
+                $waste_l =db('rec_月度废品汇总')->where('Gd_gdbh',$value['Gd_gdbh'])->where('废品类别','like','%L%')->field('SUM(废品数量) as 废品数量')->select();
+                $data[$key]['material_waste'] = $waste_l[0]['废品数量'];
+                //零头处理
+                $waste_w = db('rec_月度废品汇总')->where('Gd_gdbh',$value['Gd_gdbh'])->where('废品类别','like','%M%')->field('SUM(废品数量) as 废品数量')->select();
+                $data[$key]['minor_processing'] = $waste_w[0]['废品数量'];
+                //外发废
+                $out_sql = "SELECT fp_sl1,fp_sl2,fp_sl3,fp_sl4,fp_sl5,fp_sl6,fp_sl7,fp_sl8,fp_sl9,fp_sl10,fp_sl11,fp_sl12,fp_sl13,
                         fp_lb1,fp_lb2,fp_lb3,fp_lb4,fp_lb5,fp_lb6,fp_lb7,fp_lb8,fp_lb9,fp_lb10,fp_lb11,fp_lb12,fp_lb13, 
                         fp_bh1,fp_bh2,fp_bh3,fp_bh4,fp_bh5,fp_bh6,fp_bh7,fp_bh8,fp_bh9,fp_bh10,fp_bh11,fp_bh12,fp_bh13,
                         fp_gxmc1,fp_gxmc2,fp_gxmc3,fp_gxmc4,fp_gxmc5,fp_gxmc6,fp_gxmc7,fp_gxmc8,fp_gxmc9,fp_gxmc10,fp_gxmc11,fp_gxmc12,fp_gxmc13 
                         FROM db_qczl WHERE qczl_gdbh = '{$value['Gd_gdbh']}'";
-            $waste_out = Db::query($out_sql);
-            $list = [];
-            $quality = [];
-            $j = 0;
-            $m = 0;
-            foreach ($waste_out as $entry) {
-                for ($i = 1; $i <= 13; $i++) {
-                    $labelKey = "fp_lb" . $i;
-                    $bhKey = "fp_bh" . $i;
-                    $gxmcKey = "fp_gxmc" . $i;
-                    $slKey = "fp_sl" . $i;
-                    if (!empty($entry[$labelKey])) {
-                        if (substr($entry[$gxmcKey],0,2) == '99'){
-                            $list[$j]= $entry[$slKey];
-                            $j++;
+                $waste_out = Db::query($out_sql);
+                $list = [];
+                $quality = [];
+                $j = 0;
+                $m = 0;
+                foreach ($waste_out as $entry) {
+                    for ($i = 1; $i <= 13; $i++) {
+                        $labelKey = "fp_lb" . $i;
+                        $bhKey = "fp_bh" . $i;
+                        $gxmcKey = "fp_gxmc" . $i;
+                        $slKey = "fp_sl" . $i;
+                        if (!empty($entry[$labelKey])) {
+                            if (substr($entry[$gxmcKey],0,2) == '99'){
+                                $list[$j]= $entry[$slKey];
+                                $j++;
+                            }
                         }
-                    }
-                    if (!empty($entry[$bhKey])) {
-                        if ($entry[$bhKey] != '000000' && $entry[$slKey] > 0){
-                            $quality[$m]= $entry[$slKey];
-                            $m++;
+                        if (!empty($entry[$bhKey])) {
+                            if ($entry[$bhKey] != '000000' && $entry[$slKey] > 0){
+                                $quality[$m]= $entry[$slKey];
+                                $m++;
+                            }
                         }
                     }
                 }
+                $data[$key]['waste_out'] = array_sum($list);//外发废
+                $data[$key]['waste_share'] = '';//分摊废
+                $data[$key]['plan_loss'] = array_sum($plan_loss);//工单计划损耗
+                $data[$key]['waste_quality'] =  array_sum($quality);  //质检废
             }
-            $data[$key]['waste_out'] = array_sum($list);//外发废
-            $data[$key]['waste_share'] = '';//分摊废
-            $data[$key]['plan_loss'] = array_sum($plan_loss);//工单计划损耗
-            $data[$key]['waste_quality'] =  array_sum($quality);  //质检废
+            $res = [
+                'data'=>$data,
+                'total' => $total
+            ];
+            Cache::set('OrderSuperLoss/getList'.$params['date'],$res,86400);
+        }else{
+            $res = Cache::get('OrderSuperLoss/getList'.$params['date']);
         }
-        $this->success('请求成功',$data);
+
+        $this->success('请求成功',$res);
     }
     /**
      * 获取工单超节损工艺