qiuenguang 1 год назад
Родитель
Сommit
e34d67db35
1 измененных файлов с 576 добавлено и 272 удалено
  1. 576 272
      application/api/controller/OrderSuperLoss.php

+ 576 - 272
application/api/controller/OrderSuperLoss.php

@@ -107,263 +107,263 @@ class OrderSuperLoss extends Api
      * 节损奖 小盒0.02 大盒0.09
      *
      */
-    public function getList(){
-        if (Request::instance()->isGet() == false) {
-            $this->error('非法请求');
-        }
-        $params = Request::instance()->param();
-        $where = [];
-        if (!empty($params['code'])) {
-            if (!empty($params['search'])) {
-                $this->error('参数错误');
-            }
-        }
-        if (!empty($params['date'])) {
-            if (!empty($params['search'])) {
-                $this->error('参数错误');
-            }
-            $date_year = substr($params['date'],0,4);
-            $date_mon = substr($params['date'],4);
-            $date = $date_year.'-'.$date_mon;
-            $where['a.jjcp_sj' ] = array('like',$date.'%');
-        }
-        if (!empty($params['search'])) {
-            if (!empty($params['date']) || !empty($params['code'])) {
-                $this->error('参数错误');
-            }
-            $where['a.jjcp_gdbh|a.成品名称|a.jjcp_cpmc'] = array('like','%'.$params['search'].'%');
-        }
-        $where['a.jjcp_smb' ] = array('IN', array('末 板', '末板'));
-        $limit = $params['limit'];
-        if (empty($limit)){
-            $limit = 15;
-        }
-        $pages = $params['page'];
-        if (empty($pages)){
-            $pages = 1;
-        }
-        $is_have_cache = false;
-        $num = config('product_code_digit');
-        if ($is_have_cache === false){
-            if (!empty($params['code'])){
-                $sql= db('物料_收发记录')
-                    ->alias('d')
-                    ->where('d.仓库编号', 'Y101')
-                    ->whereOr('d.仓库编号', '101')
-                    ->group('d.st_gdbh, d.cpdh')
-                    ->field('d.st_gdbh, d.cpdh,d.st_rq, SUM(d.st_sl) as 实际投料,d.仓库编号')
-                    ->buildSql();
-                $data = db('成品入仓')->alias('a')
-                    ->join('工单_基本资料 b', 'a.jjcp_gdbh = b.Gd_gdbh', 'left')
-                    ->join('工单_印件资料 c', 'a.jjcp_gdbh = c.Yj_Gdbh AND a.jjcp_cpdh = c.yj_Yjdh', 'left')
-                    ->join([$sql => 'd'], 'a.jjcp_gdbh = d.st_gdbh AND a.jjcp_cpdh = d.cpdh', 'left')
-                    ->where($where)
-                    ->where(function($query) {
-                        $query->where('d.仓库编号', '101')
-                            ->whereOr('d.仓库编号', 'Y101');})
-                    ->whereRaw('LEFT(a.成品编码, CASE WHEN a.成品编码 REGEXP "[a-zA-Z]" THEN 5 ELSE 4 END) = ?', [$params['code']])
-                    ->field('a.jjcp_gdbh as Gd_gdbh, a.jjcp_yjno, rtrim(a.jjcp_cpdh) as 成品编码, rtrim(a.jjcp_cpmc) as 成品名称,
-             a.jjcp_sj, a.jjcp_smb, b.计量单位, b.Gd_khdh, d.实际投料, c.yj_Yjno, c.yj_ls, c.yj_ks, c.质量考核')
-                    ->group('a.jjcp_gdbh, a.jjcp_yjno')
-                    ->order('b.Gd_khdh, a.成品编码 asc, a.jjcp_yjno,d.st_rq desc')
-                    ->page($pages)
-                    ->limit($limit)
-                    ->select();
-                $total = db('成品入仓')->alias('a')
-                    ->join('工单_基本资料 b', 'a.jjcp_gdbh = b.Gd_gdbh','left')
-                    ->join('工单_印件资料 c', 'a.jjcp_gdbh = c.Yj_Gdbh','left')
-                    ->where($where)
-                    ->whereRaw('LEFT(a.成品编码, CASE WHEN a.成品编码 REGEXP "[a-zA-Z]" THEN 5 ELSE 4 END) = ?', [$params['code']])
-                    ->count();
-            }else{
-                $sql= db('物料_收发记录')
-                    ->alias('d')
-                    ->where('d.仓库编号', 'Y101')
-                    ->whereOr('d.仓库编号', '101')
-                    ->group('d.st_gdbh, d.cpdh')
-                    ->field('d.st_gdbh, d.cpdh,d.st_rq, SUM(d.st_sl) as 实际投料,d.仓库编号')
-                    ->buildSql();
-                $data = db('成品入仓')->alias('a')
-                    ->join('工单_基本资料 b', 'a.jjcp_gdbh = b.Gd_gdbh', 'left')
-                    ->join('工单_印件资料 c', 'a.jjcp_gdbh = c.Yj_Gdbh AND a.jjcp_cpdh = c.yj_Yjdh', 'left')
-                    ->join([$sql => 'd'], 'a.jjcp_gdbh = d.st_gdbh AND a.jjcp_cpdh = d.cpdh', 'left')
-                    ->where($where)
-                    ->field('a.jjcp_gdbh as Gd_gdbh, a.jjcp_yjno, rtrim(a.jjcp_cpdh) as 成品编码, rtrim(a.jjcp_cpmc) as 成品名称,
-             a.jjcp_sj, a.jjcp_smb, b.计量单位, b.Gd_khdh, d.实际投料, c.yj_Yjno, c.yj_ls, c.yj_ks, c.质量考核')
-                    ->group('a.jjcp_gdbh, a.jjcp_yjno')
-                    ->order('b.Gd_khdh, a.成品编码 asc, a.jjcp_yjno, d.st_rq desc')
-                    ->page($pages)
-                    ->limit($limit)
-                    ->select();
-                $total = db('成品入仓')->alias('a')
-                    ->join('工单_基本资料 b', 'a.jjcp_gdbh = b.Gd_gdbh','left')
-                    ->join('工单_印件资料 c', 'a.jjcp_gdbh = c.Yj_Gdbh','left')
-                    ->where($where)
-                    ->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']}' AND jjcp_yjno = '{$value['jjcp_yjno']}' GROUP BY jjcp_gdbh,jjcp_yjno";
-                $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']}' AND sczl_yjno = '{$value['jjcp_yjno']}'
-                        UNION SELECT sczl_gxh FROM db_sczl WHERE sczl_gdbh = '{$value['Gd_gdbh']}' AND sczl_yjno = '{$value['jjcp_yjno']}') AS combined_result";
-                $gxh_arr = Db::query($gxh_sql);
-                $gxh_values = array_column($gxh_arr, 'sczl_gxh');
-                $gy_data =db('工单_工艺资料')
-                    ->alias('a')
-                    ->field([
-                        'a.Gy0_yjno', 'a.Gy0_gxh', 'RTRIM(a.Gy0_gxmc) as Gy0_gxmc','RTRIM(a.Add_gxmc) as Add_gxmc','a.Gy0_ks', 'a.Gy0_ls', 'a.Gy0_计划接货数',
-                        'a.Gy0_计划损耗', 'a.超节损承担比例','SUM(b.sczl_zcfp) as total_fp','SUM(b.sczl_cl) as total_cl','SUM(c.sczl_cl) as cl','SUM(c.sczl_fp) as fp',
-                    ])
-                    ->join('设备_产量计酬 b', 'a.Gy0_gdbh = b.sczl_gdbh AND a.Gy0_yjno = b.sczl_yjno AND a.Gy0_gxh = b.sczl_gxh','left')
-                    ->join('db_sczl c', 'a.Gy0_gdbh = c.sczl_gdbh AND a.Gy0_yjno = c.sczl_yjno AND a.Gy0_gxh = c.sczl_gxh','left')
-                    ->where([
-                        'a.Gy0_gdbh' => $value['Gd_gdbh'],
-                        'a.Gy0_yjno' =>$value['jjcp_yjno'],
-                        'a.Gy0_gxh' => ['in', $gxh_values]
-                    ])
-                    ->group('a.Gy0_yjno,a.Gy0_gxh')
-                    ->select();
-                $arr = [];
-                $plan_loss = [];//工单计划损耗
-                $machine_plan_loss = 0;//机检计划损耗
-                foreach ($gy_data as $k=>$v){
-                    if (strpos($v['Gy0_gxmc'],'检') === false){
-                        if ($v['Gy0_计划接货数'] > 0){
-                            $rate =  round($v['Gy0_计划损耗'] / $v['Gy0_计划接货数'],5);
-                        }else{
-                            $rate = 0;
-                        }
-                        $arr[$k] = floor($rate * 10000) /10000;
-                        $plan_loss[$k] = $v['Gy0_计划损耗']*$v['Gy0_ls']*$value['yj_ks'];
-                    }
-                }
-                if ((int)$value['yj_ls'] > 0){
-                    $value['实际投料'] = number_format(((int)$value['实际投料']/10000)*$value['yj_ls']*$value['yj_ks'],4);
-                }else{
-                    $value['实际投料'] = number_format($value['实际投料']/10000,4);
-                }
-                $data[$key]['实际投料'] = $value['实际投料'];
-                if ($value['实际投料'] >0 ){
-                    $target_rate =  (1-array_sum($arr))*100;
-                    $data[$key]['target_rate'] =$target_rate.'%'; //目标合格率
-                    $real_rate = $cp_data[0]['cp_sl'] / ((float)str_replace(',', '', $value['实际投料']) * 10000) *100;
-                    $data[$key]['real_rate'] = number_format($real_rate,2) . '%';//实际合格率
-                }else{
-                    $data[$key]['target_rate'] = ''; //目标合格率
-                    $data[$key]['real_rate'] = '';//实际合格率
-                }
-
-                //制程废品
-                $zzfp_data =db('设备_产量计酬')->where('sczl_gdbh',$value['Gd_gdbh'])->where('sczl_yjno',$value['jjcp_yjno'])->value('SUM(sczl_zcfp) as sczl_zcfp');
-                $data[$key]['zcfp'] = $zzfp_data * $value['yj_ls'];//制程废品
-                //废品合计
-                $wasteTotal = db('db_qczl')->where('qczl_gdbh',$value['Gd_gdbh'])->where('qczl_yjno',$value['jjcp_yjno'])->sum('qczl_fp');
-                if (empty($wasteTotal)){
-                    $wasteTotal = 0;
-                }
-                $data[$key]['废品合计'] = $wasteTotal + $data[$key]['zcfp'];//废品合计
-                $data[$key]['工单无形损'] = (int)((float)str_replace(',', '', $value['实际投料']) *10000) - $cp_data[0]['cp_sl'] - $data[$key]['废品合计'];//工单无形损
-                $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']}' AND  qczl_yjno = '{$value['jjcp_yjno']}'";
-                $waste_out = Db::query($out_sql);
-                $list = []; //外发废数组
-                $quality = [];//质检废数组
-                $material = [];//材料废数组
-                $change = [];//零头处理数组
-                $machine = [];//机检废品数组
-                $j = 0;
-                $m = 0;
-                $n = 0;
-                $l = 0;
-                $o = 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[$labelKey],0,3) == 'M04'){
-                                $list[$j]= $entry[$slKey];
-                                $j++;
-                            }
-                            //材料废
-                            if (substr($entry[$labelKey],0,1) == 'L' ){
-                                $material[$n]= $entry[$slKey];
-                                $n++;
-                            }
-                            //零头处理
-                            if (substr($entry[$labelKey],0,3) == 'M01' ){
-                                $change[$l]= $entry[$slKey];
-                                $l++;
-                            }
-
-                            //机检废品
-                            if (substr($entry[$labelKey],0,1) == 'K' ){
-                                $machine[$o]= $entry[$slKey];
-                                $o++;
-                            }
-                        }
-                        $quality[$m]= $entry[$slKey];
-                        $m++;
-                    }
-                }
-                $machine_waste = array_sum($machine);//机检废品
-                if ($data[$key]['Gd_gdbh'] == '2401746'){
-                    halt($machine_waste);
-                }
-                $data[$key]['工单计划损耗'] = array_sum($plan_loss);//工单计划损耗
-                /**
-                 * 奖惩系数及金额
-                 * 奖惩金额 = 工单节损数 * 0.02(0.09)
-                 * 工单节损数 = 工单计划损耗 - 废品总数 - 机检节损数
-                 * 机检节损数 = 机检计划损耗 - 机检质检废品
-                 */
-                $machine_loss = $machine_plan_loss - $machine_waste;
-                $order_loss = $data[$key]['工单计划损耗'] - ($data[$key]['废品合计'] - array_sum($list) - array_sum($material)+$data[$key]['工单无形损'] - $machine_waste);
-                $guige = \db('物料_存货编码')
-                    ->where('物料代码',$data[$key]['成品编码'])
-                    ->value('rtrim(规格)');
-                //工序超节损金额
-                if ($guige === '小盒'){
-                    $moneyRate = 0.02;
-                }else{
-                    $moneyRate = 0.09;
-                }
-                $reward = $order_loss * $moneyRate;
-                $data[$key]['reward_rate'] = '1';
-                if ($data[$key]['质量考核'] === 0){
-                    $data[$key]['reward_money'] = number_format($reward,2);
-                    $data[$key]['考核'] = '是';
-                }else{
-                    $data[$key]['reward_money'] = '';
-                    $data[$key]['考核'] = '否';
-                }
-                $data[$key]['材料废'] = array_sum($material); //材料废
-                $data[$key]['零头处理'] = array_sum($change); //零头处理
-                $data[$key]['外发废'] = array_sum($list);//外发废
-                $data[$key]['分摊废'] = '';//分摊废
-                $data[$key]['工单质检废'] =  array_sum($quality);  //质检废
-                $data[$key]['机检废'] = $machine_waste;
-            }
-            $res = [
-                'data'=>$data,
-                'total' => $total
-            ];
-
-        }
-        $this->success('请求成功',$res);
-    }
+//    public function getList(){
+//        if (Request::instance()->isGet() == false) {
+//            $this->error('非法请求');
+//        }
+//        $params = Request::instance()->param();
+//        $where = [];
+//        if (!empty($params['code'])) {
+//            if (!empty($params['search'])) {
+//                $this->error('参数错误');
+//            }
+//        }
+//        if (!empty($params['date'])) {
+//            if (!empty($params['search'])) {
+//                $this->error('参数错误');
+//            }
+//            $date_year = substr($params['date'],0,4);
+//            $date_mon = substr($params['date'],4);
+//            $date = $date_year.'-'.$date_mon;
+//            $where['a.jjcp_sj' ] = array('like',$date.'%');
+//        }
+//        if (!empty($params['search'])) {
+//            if (!empty($params['date']) || !empty($params['code'])) {
+//                $this->error('参数错误');
+//            }
+//            $where['a.jjcp_gdbh|a.成品名称|a.jjcp_cpmc'] = array('like','%'.$params['search'].'%');
+//        }
+//        $where['a.jjcp_smb' ] = array('IN', array('末 板', '末板'));
+//        $limit = $params['limit'];
+//        if (empty($limit)){
+//            $limit = 15;
+//        }
+//        $pages = $params['page'];
+//        if (empty($pages)){
+//            $pages = 1;
+//        }
+//        $is_have_cache = false;
+//        $num = config('product_code_digit');
+//        if ($is_have_cache === false){
+//            if (!empty($params['code'])){
+//                $sql= db('物料_收发记录')
+//                    ->alias('d')
+//                    ->where('d.仓库编号', 'Y101')
+//                    ->whereOr('d.仓库编号', '101')
+//                    ->group('d.st_gdbh, d.cpdh')
+//                    ->field('d.st_gdbh, d.cpdh,d.st_rq, SUM(d.st_sl) as 实际投料,d.仓库编号')
+//                    ->buildSql();
+//                $data = db('成品入仓')->alias('a')
+//                    ->join('工单_基本资料 b', 'a.jjcp_gdbh = b.Gd_gdbh', 'left')
+//                    ->join('工单_印件资料 c', 'a.jjcp_gdbh = c.Yj_Gdbh AND a.jjcp_cpdh = c.yj_Yjdh', 'left')
+//                    ->join([$sql => 'd'], 'a.jjcp_gdbh = d.st_gdbh AND a.jjcp_cpdh = d.cpdh', 'left')
+//                    ->where($where)
+//                    ->where(function($query) {
+//                        $query->where('d.仓库编号', '101')
+//                            ->whereOr('d.仓库编号', 'Y101');})
+//                    ->whereRaw('LEFT(a.成品编码, CASE WHEN a.成品编码 REGEXP "[a-zA-Z]" THEN 5 ELSE 4 END) = ?', [$params['code']])
+//                    ->field('a.jjcp_gdbh as Gd_gdbh, a.jjcp_yjno, rtrim(a.jjcp_cpdh) as 成品编码, rtrim(a.jjcp_cpmc) as 成品名称,
+//             a.jjcp_sj, a.jjcp_smb, b.计量单位, b.Gd_khdh, d.实际投料, c.yj_Yjno, c.yj_ls, c.yj_ks, c.质量考核')
+//                    ->group('a.jjcp_gdbh, a.jjcp_yjno')
+//                    ->order('b.Gd_khdh, a.成品编码 asc, a.jjcp_yjno,d.st_rq desc')
+//                    ->page($pages)
+//                    ->limit($limit)
+//                    ->select();
+//                $total = db('成品入仓')->alias('a')
+//                    ->join('工单_基本资料 b', 'a.jjcp_gdbh = b.Gd_gdbh','left')
+//                    ->join('工单_印件资料 c', 'a.jjcp_gdbh = c.Yj_Gdbh','left')
+//                    ->where($where)
+//                    ->whereRaw('LEFT(a.成品编码, CASE WHEN a.成品编码 REGEXP "[a-zA-Z]" THEN 5 ELSE 4 END) = ?', [$params['code']])
+//                    ->count();
+//            }else{
+//                $sql= db('物料_收发记录')
+//                    ->alias('d')
+//                    ->where('d.仓库编号', 'Y101')
+//                    ->whereOr('d.仓库编号', '101')
+//                    ->group('d.st_gdbh, d.cpdh')
+//                    ->field('d.st_gdbh, d.cpdh,d.st_rq, SUM(d.st_sl) as 实际投料,d.仓库编号')
+//                    ->buildSql();
+//                $data = db('成品入仓')->alias('a')
+//                    ->join('工单_基本资料 b', 'a.jjcp_gdbh = b.Gd_gdbh', 'left')
+//                    ->join('工单_印件资料 c', 'a.jjcp_gdbh = c.Yj_Gdbh AND a.jjcp_cpdh = c.yj_Yjdh', 'left')
+//                    ->join([$sql => 'd'], 'a.jjcp_gdbh = d.st_gdbh AND a.jjcp_cpdh = d.cpdh', 'left')
+//                    ->where($where)
+//                    ->field('a.jjcp_gdbh as Gd_gdbh, a.jjcp_yjno, rtrim(a.jjcp_cpdh) as 成品编码, rtrim(a.jjcp_cpmc) as 成品名称,
+//             a.jjcp_sj, a.jjcp_smb, b.计量单位, b.Gd_khdh, d.实际投料, c.yj_Yjno, c.yj_ls, c.yj_ks, c.质量考核')
+//                    ->group('a.jjcp_gdbh, a.jjcp_yjno')
+//                    ->order('b.Gd_khdh, a.成品编码 asc, a.jjcp_yjno, d.st_rq desc')
+//                    ->page($pages)
+//                    ->limit($limit)
+//                    ->select();
+//                $total = db('成品入仓')->alias('a')
+//                    ->join('工单_基本资料 b', 'a.jjcp_gdbh = b.Gd_gdbh','left')
+//                    ->join('工单_印件资料 c', 'a.jjcp_gdbh = c.Yj_Gdbh','left')
+//                    ->where($where)
+//                    ->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']}' AND jjcp_yjno = '{$value['jjcp_yjno']}' GROUP BY jjcp_gdbh,jjcp_yjno";
+//                $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']}' AND sczl_yjno = '{$value['jjcp_yjno']}'
+//                        UNION SELECT sczl_gxh FROM db_sczl WHERE sczl_gdbh = '{$value['Gd_gdbh']}' AND sczl_yjno = '{$value['jjcp_yjno']}') AS combined_result";
+//                $gxh_arr = Db::query($gxh_sql);
+//                $gxh_values = array_column($gxh_arr, 'sczl_gxh');
+//                $gy_data =db('工单_工艺资料')
+//                    ->alias('a')
+//                    ->field([
+//                        'a.Gy0_yjno', 'a.Gy0_gxh', 'RTRIM(a.Gy0_gxmc) as Gy0_gxmc','RTRIM(a.Add_gxmc) as Add_gxmc','a.Gy0_ks', 'a.Gy0_ls', 'a.Gy0_计划接货数',
+//                        'a.Gy0_计划损耗', 'a.超节损承担比例','SUM(b.sczl_zcfp) as total_fp','SUM(b.sczl_cl) as total_cl','SUM(c.sczl_cl) as cl','SUM(c.sczl_fp) as fp',
+//                    ])
+//                    ->join('设备_产量计酬 b', 'a.Gy0_gdbh = b.sczl_gdbh AND a.Gy0_yjno = b.sczl_yjno AND a.Gy0_gxh = b.sczl_gxh','left')
+//                    ->join('db_sczl c', 'a.Gy0_gdbh = c.sczl_gdbh AND a.Gy0_yjno = c.sczl_yjno AND a.Gy0_gxh = c.sczl_gxh','left')
+//                    ->where([
+//                        'a.Gy0_gdbh' => $value['Gd_gdbh'],
+//                        'a.Gy0_yjno' =>$value['jjcp_yjno'],
+//                        'a.Gy0_gxh' => ['in', $gxh_values]
+//                    ])
+//                    ->group('a.Gy0_yjno,a.Gy0_gxh')
+//                    ->select();
+//                $arr = [];
+//                $plan_loss = [];//工单计划损耗
+//                $machine_plan_loss = 0;//机检计划损耗
+//                foreach ($gy_data as $k=>$v){
+//                    if (strpos($v['Gy0_gxmc'],'检') === false){
+//                        if ($v['Gy0_计划接货数'] > 0){
+//                            $rate =  round($v['Gy0_计划损耗'] / $v['Gy0_计划接货数'],5);
+//                        }else{
+//                            $rate = 0;
+//                        }
+//                        $arr[$k] = floor($rate * 10000) /10000;
+//                        $plan_loss[$k] = $v['Gy0_计划损耗']*$v['Gy0_ls']*$value['yj_ks'];
+//                    }
+//                }
+//                if ((int)$value['yj_ls'] > 0){
+//                    $value['实际投料'] = number_format(((int)$value['实际投料']/10000)*$value['yj_ls']*$value['yj_ks'],4);
+//                }else{
+//                    $value['实际投料'] = number_format($value['实际投料']/10000,4);
+//                }
+//                $data[$key]['实际投料'] = $value['实际投料'];
+//                if ($value['实际投料'] >0 ){
+//                    $target_rate =  (1-array_sum($arr))*100;
+//                    $data[$key]['target_rate'] =$target_rate.'%'; //目标合格率
+//                    $real_rate = $cp_data[0]['cp_sl'] / ((float)str_replace(',', '', $value['实际投料']) * 10000) *100;
+//                    $data[$key]['real_rate'] = number_format($real_rate,2) . '%';//实际合格率
+//                }else{
+//                    $data[$key]['target_rate'] = ''; //目标合格率
+//                    $data[$key]['real_rate'] = '';//实际合格率
+//                }
+//
+//                //制程废品
+//                $zzfp_data =db('设备_产量计酬')->where('sczl_gdbh',$value['Gd_gdbh'])->where('sczl_yjno',$value['jjcp_yjno'])->value('SUM(sczl_zcfp) as sczl_zcfp');
+//                $data[$key]['zcfp'] = $zzfp_data * $value['yj_ls'];//制程废品
+//                //废品合计
+//                $wasteTotal = db('db_qczl')->where('qczl_gdbh',$value['Gd_gdbh'])->where('qczl_yjno',$value['jjcp_yjno'])->sum('qczl_fp');
+//                if (empty($wasteTotal)){
+//                    $wasteTotal = 0;
+//                }
+//                $data[$key]['废品合计'] = $wasteTotal + $data[$key]['zcfp'];//废品合计
+//                $data[$key]['工单无形损'] = (int)((float)str_replace(',', '', $value['实际投料']) *10000) - $cp_data[0]['cp_sl'] - $data[$key]['废品合计'];//工单无形损
+//                $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']}' AND  qczl_yjno = '{$value['jjcp_yjno']}'";
+//                $waste_out = Db::query($out_sql);
+//                $list = []; //外发废数组
+//                $quality = [];//质检废数组
+//                $material = [];//材料废数组
+//                $change = [];//零头处理数组
+//                $machine = [];//机检废品数组
+//                $j = 0;
+//                $m = 0;
+//                $n = 0;
+//                $l = 0;
+//                $o = 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[$labelKey],0,3) == 'M04'){
+//                                $list[$j]= $entry[$slKey];
+//                                $j++;
+//                            }
+//                            //材料废
+//                            if (substr($entry[$labelKey],0,1) == 'L' ){
+//                                $material[$n]= $entry[$slKey];
+//                                $n++;
+//                            }
+//                            //零头处理
+//                            if (substr($entry[$labelKey],0,3) == 'M01' ){
+//                                $change[$l]= $entry[$slKey];
+//                                $l++;
+//                            }
+//
+//                            //机检废品
+//                            if (substr($entry[$labelKey],0,1) == 'K' ){
+//                                $machine[$o]= $entry[$slKey];
+//                                $o++;
+//                            }
+//                        }
+//                        $quality[$m]= $entry[$slKey];
+//                        $m++;
+//                    }
+//                }
+//                $machine_waste = array_sum($machine);//机检废品
+//                if ($data[$key]['Gd_gdbh'] == '2401746'){
+//                    halt($machine_waste);
+//                }
+//                $data[$key]['工单计划损耗'] = array_sum($plan_loss);//工单计划损耗
+//                /**
+//                 * 奖惩系数及金额
+//                 * 奖惩金额 = 工单节损数 * 0.02(0.09)
+//                 * 工单节损数 = 工单计划损耗 - 废品总数 - 机检节损数
+//                 * 机检节损数 = 机检计划损耗 - 机检质检废品
+//                 */
+//                $machine_loss = $machine_plan_loss - $machine_waste;
+//                $order_loss = $data[$key]['工单计划损耗'] - ($data[$key]['废品合计'] - array_sum($list) - array_sum($material)+$data[$key]['工单无形损'] - $machine_waste);
+//                $guige = \db('物料_存货编码')
+//                    ->where('物料代码',$data[$key]['成品编码'])
+//                    ->value('rtrim(规格)');
+//                //工序超节损金额
+//                if ($guige === '小盒'){
+//                    $moneyRate = 0.02;
+//                }else{
+//                    $moneyRate = 0.09;
+//                }
+//                $reward = $order_loss * $moneyRate;
+//                $data[$key]['reward_rate'] = '1';
+//                if ($data[$key]['质量考核'] === 0){
+//                    $data[$key]['reward_money'] = number_format($reward,2);
+//                    $data[$key]['考核'] = '是';
+//                }else{
+//                    $data[$key]['reward_money'] = '';
+//                    $data[$key]['考核'] = '否';
+//                }
+//                $data[$key]['材料废'] = array_sum($material); //材料废
+//                $data[$key]['零头处理'] = array_sum($change); //零头处理
+//                $data[$key]['外发废'] = array_sum($list);//外发废
+//                $data[$key]['分摊废'] = '';//分摊废
+//                $data[$key]['工单质检废'] =  array_sum($quality);  //质检废
+//                $data[$key]['机检废'] = $machine_waste;
+//            }
+//            $res = [
+//                'data'=>$data,
+//                'total' => $total
+//            ];
+//
+//        }
+//        $this->success('请求成功',$res);
+//    }
     /**
      * 获取工单超节损工艺
      * @ApiMethod GET
@@ -1222,10 +1222,11 @@ class OrderSuperLoss extends Api
      */
     public function OneOrderSuperLoss($gdbh,$yjno)
     {
-        $param = [
-            'gdbh' => $gdbh,
-            'yjno' => $yjno
-        ];
+        $param = $this->request->param();
+//        $param = [
+//            'gdbh' => $gdbh,
+//            'yjno' => $yjno
+//        ];
         //查询工单入仓数据
         $workOrderData = \db('成品入仓')
             ->where('jjcp_gdbh', $param['gdbh'])
@@ -1316,10 +1317,12 @@ class OrderSuperLoss extends Api
         $quality = [];//质检废数组
         $material = [];//材料废数组
         $change = [];//零头处理数组
+        $machine = [];//机检废品数组
         $j = 0;
         $m = 0;
         $n = 0;
         $l = 0;
+        $o = 0;
         foreach ($waste_out as $entry) {
             for ($i = 1; $i <= 13; $i++) {
                 $labelKey = "fp_lb" . $i;
@@ -1328,23 +1331,28 @@ class OrderSuperLoss extends Api
                 $slKey = "fp_sl" . $i;
                 if (!empty($entry[$labelKey])) {
                     //外发加工废
-                    if (substr($entry[$labelKey], 0, 3) == 'M04') {
-                        $list[$j] = $entry[$slKey];
+                    if (substr($entry[$labelKey],0,3) == 'M04'){
+                        $list[$j]= $entry[$slKey];
                         $j++;
                     }
                     //材料废
-                    if (substr($entry[$labelKey], 0, 1) == 'L') {
-                        $material[$n] = $entry[$slKey];
+                    if (substr($entry[$labelKey],0,1) == 'L' ){
+                        $material[$n]= $entry[$slKey];
                         $n++;
                     }
                     //零头处理
-                    if (substr($entry[$labelKey], 0, 3) == 'M01') {
-                        $change[$l] = $entry[$slKey];
+                    if (substr($entry[$labelKey],0,3) == 'M01' ){
+                        $change[$l]= $entry[$slKey];
                         $l++;
                     }
+
+                    //机检废品
+                    if (substr($entry[$labelKey],0,1) == 'K' ){
+                        $machine[$o]= $entry[$slKey];
+                        $o++;
+                    }
                 }
-                //质检废
-                $quality[$m] = $entry[$slKey];
+                $quality[$m]= $entry[$slKey];
                 $m++;
             }
         }
@@ -1352,6 +1360,7 @@ class OrderSuperLoss extends Api
         $data['零头处理'] = array_sum($change); //零头处理
         $data['外发废'] = array_sum($list);//外发废
         $data['工单质检废'] = array_sum($quality);//质检废
+        $data['机检废'] = array_sum($machine);//机检废
         //查询计划损耗
         $plan_total = db('工单_工艺资料')
             ->where(['Gy0_gdbh' => $workOrderData['jjcp_gdbh'], 'Gy0_yjno' => $workOrderData['jjcp_yjno'], 'Gy0_gxh' => ['in', $gxh_values]])
@@ -1443,11 +1452,16 @@ class OrderSuperLoss extends Api
             foreach ($waste_out as $entry) {
                 for ($i = 1; $i <= 13; $i++) {
                     $gxmcKey = "fp_gxmc" . $i;
+                    $gxlbKey = "fp_lb" . $i;
                     $slKey = "fp_sl" . $i;
                     $bhKey = "fp_bh" . $i;
                     if ((int)substr($entry[$gxmcKey], 0, 2) == $vv['Gy0_gxh'] && $entry[$bhKey] == $vv['sczl_bh1']) {
                         $gy_data[$kk]['质检废'] += $entry[$slKey];
                     }
+//                    if (substr($entry[$gxlbKey], 0, 1) == 'K'){
+//                        $gy_data[$kk]['质检废'] = $data['机检废'];
+//                        echo $entry[$slKey];
+//                    }
                 }
             }
             //无形损分摊
@@ -1518,6 +1532,7 @@ class OrderSuperLoss extends Api
         }
         //整合数据
         $result = [];
+//        halt($gy_data);
         foreach ($gy_data as $key => $value) {
             $result[$key] = [
                 'sys_ny' => $value['sys_ny'],
@@ -1537,7 +1552,7 @@ class OrderSuperLoss extends Api
                 '班组产量' => $value['total_cl'],
                 '班组制程废品' => $value['sczl_zcfp'],
                 '班组质检废品' => $value['质检废'],
-                '班组分摊质检废品' => $total['waste_quality'],
+                '班组分摊质检废品' => $data['工单质检废'],
                 '无班组废品' => 0,
                 '外发废' => $data['外发废'],
                 '材料废' => $data['材料废'],
@@ -1589,13 +1604,302 @@ class OrderSuperLoss extends Api
                 '入仓数量' => $total_number[0],
                 '入仓日期' => $workOrderData['jjcp_sj'],
                 '大箱数' => $value['投料大箱'],
-                '废品合计' => $data['intangible_loss'],
+                '废品合计' => $data['工单质检废'] + $data['zcfp'],
                 'sys_id' => '',
                 'sys_rq' => date('Y-m-d H:i:s', time()),
                 '车间名称' => $value['Gy0_SITE']
             ];
         }
-        return $result;
+//        return $result;
+        $sql = \db('工单_质量考核汇总')
+            ->fetchSql(true)
+            ->insertAll($result);
+        $res = \db()->query($sql);
+    }
+
+
+
+    //超节损列表
+    public function getList()
+    {
+        if (Request::instance()->isGet() == false) {
+            $this->error('非法请求');
+        }
+        $params = Request::instance()->param();
+        $where = [];
+        if (!empty($params['code'])) {
+            if (!empty($params['search'])) {
+                $this->error('参数错误');
+            }
+        }
+        if (!empty($params['date'])) {
+            if (!empty($params['search'])) {
+                $this->error('参数错误');
+            }
+            $where['sys_ny' ] = $params['date'];
+        }
+        if (!empty($params['search'])) {
+            if (!empty($params['date']) || !empty($params['code'])) {
+                $this->error('参数错误');
+            }
+            $where['Gy0_gdbh|产品名称|产品代号'] = array('like','%'.$params['search'].'%');
+        }
+        $limit = $params['limit'];
+        if (empty($limit)){
+            $limit = 15;
+        }
+        $pages = $params['page'];
+        if (empty($pages)){
+            $pages = 1;
+        }
+        // 定义字段
+        $field = '
+            sys_ny,  
+            Gy0_gdbh,  
+            `印件及工序`,  
+            `联数`,  
+            `产品代号`,  
+            `产品名称`,  
+            `实际投料`,  
+            `计量单位`,  
+            `入仓日期`,  
+            `入仓数量`,  
+            SUM(DISTINCT `计划损耗`) AS `计划损耗`,  
+            `废品合计`,  
+            SUM(`CjsJe`) AS `奖惩金额合计`,  
+            `印件无形损`,  
+            `材料废`,  
+            `零头处理`,  
+            `外发废`,  
+            SUM(`班组制程废品`) AS `工单制程废`,  
+            `班组分摊质检废品`  
+        ';
+        $list = \db('工单_质量考核汇总')
+            ->field($field)
+            ->where($where)
+            ->group('Gy0_gdbh, `印件及工序`')
+            ->order('sys_rq DESC')
+            ->page($pages)
+            ->limit($limit)
+            ->select();
+        foreach ($list as $key=>$value){
+            $value['实际投料'] = $value['实际投料']*10000;
+            //目标合格率
+            $list[$key]['目标合格率'] = ($value['实际投料']-$value['计划损耗'])/$value['实际投料']*100;
+            $list[$key]['目标合格率'] = number_format($list[$key]['目标合格率'],2);
+            $list[$key]['目标合格率'] = $list[$key]['目标合格率'].'%';
+            //实际合格率
+            $list[$key]['实际合格率'] = ($value['实际投料']-$value['废品合计'])/$value['实际投料']*100;
+            $list[$key]['实际合格率'] = number_format($list[$key]['实际合格率'],2);
+            $list[$key]['实际合格率'] = $list[$key]['实际合格率'].'%';
+        }
+        if (!empty($list)){
+            $this->success('成功',$list);
+        }else{
+            $this->error('未找到数据');
+        }
+    }
+
+    //工序超节损
+    public function ProcessLoss()
+    {
+        if ($this->request->isGet() === false){
+            $this->error('请求错误');
+        }
+        $param = $this->request->param();
+        if (empty($param) || empty($param['order']) || empty($param['yjno'])){
+            $this->error('参数错误');
+        }
+        $where = ['Gy0_gdbh'=>$param['order'],'印件及工序'=>$param['yjno']];
+        //查询订单印件数据
+        $field = '  
+            Gy0_gdbh AS Gd_gdbh,   
+            `印件及工序` AS yjno,   
+            `联数` AS ls,  
+            `产品代号` AS `成品代号`,  
+            `产品名称` AS `成品名称`,  
+            `实际投料`,  
+            `计量单位`,  
+            `入仓日期` AS warehousing_date,  
+            `入仓数量` AS warehousing_num,  
+            SUM(DISTINCT `计划损耗`) AS `计划损耗`,  
+            `废品合计`,  
+            `印件无形损` as intangible_loss,  
+            `材料废`,  
+            `零头处理`,  
+            `外发废`,  
+            SUM(`班组制程废品`) AS `zcfp`,  
+            `班组分摊质检废品`,  
+            `订单数量`,  
+            `销售订单号`
+            
+        ';
+        $list = \db('工单_质量考核汇总')
+            ->field($field)
+            ->where($where)
+            ->group('Gy0_gdbh, `印件及工序`')
+            ->order('sys_rq DESC')
+            ->find();
+
+        $list['实际投料'] = $list['实际投料']*10000;
+        //目标合格率
+        $list['target_rate'] = ($list['实际投料']-$list['计划损耗'])/$list['实际投料']*100;
+        $list['target_rate'] = number_format($list['target_rate'],2);
+        $list['target_rate'] = $list['target_rate'].'%';
+        //实际合格率
+        $list['real_rate'] = ($list['实际投料']-$list['废品合计'])/$list['实际投料']*100;
+        $list['real_rate'] = number_format($list['real_rate'],2);
+        $list['real_rate'] = $list['real_rate'].'%';
+
+        //查询工序数据
+        $gy_field = '  
+            `工序` AS Gy0_gxh,  
+            `工序名称` AS Gy0_gxmc,  
+            `印件及工序` AS Gy0_yjno,  
+            `联数` AS Gy0_ls,  
+            SUM(`计划损耗`) AS Gy0_计划损耗,  
+            `计划产量` AS Gy0_计划接货数,  
+            SUM(`班组分摊无形损`) AS Gy0_无形损,  
+            `CjsSl` AS loss,  
+            `印件工序产量` AS total_cl,  
+            `班组制程废品` AS total_fp,  
+            `班组质检废品` AS waste_quality,
+            SUM(`CjsJe`) AS 工序超节损金额,
+            `无形损承担比例`,
+            `超节损承担比例`
+        ';
+        $gy_data = \db('工单_质量考核汇总')
+            ->field($gy_field)
+            ->where($where)
+            ->group('Gy0_gxh')
+            ->select();
+        foreach ($gy_data as $key=>$value){
+
+            //报废合计
+            $gy_data[$key]['total_waste'] = $value['Gy0_无形损'] + $value['total_fp'] + $value['waste_quality'];
+            //工序实际报废率
+            $gy_data[$key]['actual_loss_rate'] = ((number_format($gy_data[$key]['total_waste']/$value['Gy0_计划接货数'],4))*100).'%';
+            //占投料报废率
+            $gy_data[$key]['loss_rate'] = ((number_format(($value['Gy0_计划损耗']-$gy_data[$key]['total_waste'])/$value['Gy0_计划接货数'],4))*100).'%';
+            //工序目标报废率
+            $gy_data[$key]['target_loss_rate'] = ((number_format($value['Gy0_计划损耗']/$value['Gy0_计划接货数'],4))*100).'%';
+        }
+        $list['gy_data'] = $gy_data;
+        //工单节损数据
+        $total_field = '
+            `班组分摊质检废品` as total_waste,
+            SUM(`班组质检废品`) as total_zjfp,
+            SUM(`班组制程废品`) as total_fp,
+            SUM(DISTINCT `计划损耗`) AS plan_loss,
+            `材料废`,
+            `印件无形损` as waste_intangible,
+            SUM(CjsSl) as loss,
+            SUM(CjsJe) as reward
+        ';
+        $total = \db('工单_质量考核汇总')
+            ->where($where)
+            ->field($total_field)
+            ->find();
+        $list['total'] = $total;
+        $this->success('成功',$list);
+    }
+
+
+    //班组超节损数据
+    public function ClassLossData()
+    {
+        if ($this->request->isGet() === false){
+            $this->error('请求错误');
+        }
+        $param = $this->request->param();
+        if (empty($param) || empty($param['order']) || empty($param['yjno'])){
+            $this->error('参数错误');
+        }
+        $where = ['Gy0_gdbh'=>$param['order'],'印件及工序'=>$param['yjno']];
+        //查询订单印件数据
+        $field = '  
+            Gy0_gdbh AS Gd_gdbh,   
+            `印件及工序` AS yjno,   
+            `联数` AS ls,  
+            `产品代号` AS `成品代号`,  
+            `产品名称` AS `成品名称`,  
+            `实际投料`,  
+            `计量单位`,  
+            `入仓日期` AS warehousing_date,  
+            `入仓数量` AS warehousing_num,  
+            SUM(DISTINCT `计划损耗`) AS `计划损耗`,  
+            `废品合计`,  
+            `印件无形损` as intangible_loss,  
+            `材料废`,  
+            `零头处理`,  
+            `外发废`,  
+            SUM(`班组制程废品`) AS `zcfp`,  
+            `班组分摊质检废品`,  
+            `订单数量`,  
+            `销售订单号`
+            
+        ';
+        $list = \db('工单_质量考核汇总')
+            ->field($field)
+            ->where($where)
+            ->group('Gy0_gdbh, `印件及工序`')
+            ->order('sys_rq DESC')
+            ->find();
+
+        $list['实际投料'] = $list['实际投料']*10000;
+        //目标合格率
+        $list['target_rate'] = ($list['实际投料']-$list['计划损耗'])/$list['实际投料']*100;
+        $list['target_rate'] = number_format($list['target_rate'],2);
+        $list['target_rate'] = $list['target_rate'].'%';
+        //实际合格率
+        $list['real_rate'] = ($list['实际投料']-$list['废品合计'])/$list['实际投料']*100;
+        $list['real_rate'] = number_format($list['real_rate'],2);
+        $list['real_rate'] = $list['real_rate'].'%';
+        //班组数据
+        $gy_data = \db('工单_质量考核汇总')
+            ->where($where)
+            ->select();
+        $class_data = [];
+        foreach ($gy_data as $item){
+            $name = '';
+            for ($i=1;$i<9;$i++){
+                if ($item['Xm'.$i] !== ''){
+                    $name = $name.' '.$item['Xm'.$i];
+                }
+            }
+            $data = [
+                'member' => $name,
+                'sczl_gxmc' => $item['工序名称'],
+                'total_cl' => $item['班组产量'],
+                '计划损耗' => $item['班组分摊计划损耗'],
+                '无形损分摊' => $item['班组分摊无形损'],
+                '节损奖' => $item['CjsJe'],
+                '节损数量' => $item['CjsSl'],
+                'sczl_zcfp' => $item['班组制程废品'],
+                '质检废' => $item['班组质检废品'],
+                '超节损承担比例' => ($item['超节损承担比例']*100).'%',
+            ];
+            array_push($class_data,$data);
+        }
+        $list['gy_data'] = $class_data;
+        //工单节损数据
+        $total_field = '
+            `班组分摊质检废品` as total_waste,
+            SUM(`班组质检废品`) as total_zjfp,
+            SUM(`班组制程废品`) as total_fp,
+            SUM(DISTINCT `计划损耗`) AS plan_loss,
+            `材料废`,
+            `印件无形损` as waste_intangible,
+            SUM(CjsSl) as loss,
+            SUM(CjsJe) as reward
+        ';
+        $total = \db('工单_质量考核汇总')
+            ->where($where)
+            ->field($total_field)
+            ->find();
+        $list['total'] = $total;
+        $this->success('成功',$list);
+
     }
 }