Browse Source

Merge branch 'master' of https://git.7in6.com/Minong/mes-server-api

曹鹤洋 1 year ago
parent
commit
e5a86c3c72

+ 9 - 0
application/api/controller/Facility.php

@@ -1241,6 +1241,7 @@ class Facility extends Api
             ->where('开工时间',$param['start'])
             ->where('设备编号',$param['machine'])
             ->where('sys_rq','>',$param['start'])
+            ->where('工单编号',$machineDetail['工单编号'])
             ->field('rtrim(类别) as 类别,提交时间')
             ->select();
         $data['首件'] = $data['自检'] = $data['IPQC'] = [];
@@ -1899,6 +1900,14 @@ class Facility extends Api
                     ];
                 }
             }
+            if (empty($list['sczl_bh'.$i])){
+                $list['组员'.$i] = [
+                    '编号' => '',
+                    '姓名' => '',
+                    '比例' => ''
+                ];
+            }
+
             unset($list['sczl_bh'.$i],$list['sczl_rate'.$i]);
         }
         $list['拉料'] = [

+ 3 - 2
application/api/controller/Manufacture.php

@@ -201,8 +201,10 @@ class Manufacture extends Api
                     'b.Gy0_sj1' => '1900-01-01 00:00:00',
                     'c.状态' => '',
                 ])
+                ->where("
+                        b.Gy0_sj1 <> '1900-01-01 00:00:00' 
+                    ")
                 ->where($where)
-                ->cache(true,720)
                 ->group('a.Gd_gdbh')
                 ->select();
         }else{
@@ -231,7 +233,6 @@ class Manufacture extends Api
                     'c.状态' => '',
                 ])
                 ->where($where)
-                ->cache(true,720)
                 ->group('a.Gd_gdbh')
                 ->select();
         }

+ 79 - 22
application/api/controller/OrderSuperLoss.php

@@ -84,6 +84,7 @@ class OrderSuperLoss extends Api
      * 报废定额=(基础损耗+损耗率*计划产量)*损耗系数*计损色数(特定工序会有,如果无就不乘)
      * 允损比例=报废定额/计划产量
      * 目标合格率 = 100%-超节损工单中显示工序的允损比例之和
+     * 节损奖 小盒0.02 大盒0.09
      *
     */
     public function getList(){
@@ -110,7 +111,7 @@ class OrderSuperLoss extends Api
             if (!empty($params['date']) || !empty($params['code'])) {
                $this->error('参数错误');
             }
-            $where['a.成品名称'] = array('like','%'.$params['search'].'%');
+            $where['a.成品名称|a.jjcp_gdbh'] = array('like','%'.$params['search'].'%');
         }
         $where['b.行号' ] = 1;
         $where['a.jjcp_smb' ] = array('IN', array('末 板', '末板'));
@@ -122,8 +123,11 @@ class OrderSuperLoss extends Api
         if (empty($pages)){
             $pages = 1;
         }
-//        halt($where);
-        $is_have_cache = false;
+        $str = '';
+        if (empty($params['search'])){
+            $str = '/'.$date . '/' . $params['code'].'/'.$pages;
+        }
+        $is_have_cache = Cache::get('OrderSuperLoss/getList'.$str);
         if ($is_have_cache === false){
             if (!empty($params['code'])){
                 $data = db('成品入仓')->alias('a')
@@ -172,18 +176,22 @@ class OrderSuperLoss extends Api
                         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();
+                $gy_data =db('工单_工艺资料')->where('Gy0_gdbh',$value['Gd_gdbh'])->where('Gy0_gxh','in',$gxh_values)->field('Gy0_gxmc,Gy0_计划接货数,Gy0_计划损耗')->select();
                 $arr = [];
                 $plan_loss = [];//工单计划损耗
+                $machine_plan_loss = 0;//机检计划损耗
                 foreach ($gy_data as $k=>$v){
                     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_计划损耗'];
+
+//                    if (strpos($v['Gy0_gxmc'],'机检') !== false){
+//                        $machine_plan_loss = $v['Gy0_计划损耗'];
+//                    }
                 }
                 if ($value['实际投料'] >0 ){
                     $target_rate =  (1-array_sum($arr))*100;
@@ -194,10 +202,6 @@ class OrderSuperLoss extends Api
                     $data[$key]['target_rate'] = ''; //目标合格率
                     $data[$key]['real_rate'] = '';//实际合格率
                 }
-
-                //奖惩系数及金额
-                $data[$key]['reward_rate'] = '1';
-                $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'];//制程废品
@@ -218,10 +222,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;
@@ -247,23 +253,50 @@ class OrderSuperLoss extends Api
                                 $quality[$m]= $entry[$slKey];
                                 $m++;
                             }
+//                            if ($entry[$bhKey] != '000000' && substr($entry[$labelKey],0,3) == 'K01'){
+//                                $machine[$o]= $entry[$slKey];
+//                                $o++;
+//                            }
                         }
                     }
                 }
+//                $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]['废品合计'] - $machine_loss;
+//                if (strpos($data[$key]['成品名称'],'小盒')){
+//                    $moneyRate = 0.02;
+//                }else{
+//                    $moneyRate = 0.09;
+//                }
+//                $reward = $order_loss * $moneyRate;
+                $data[$key]['reward_rate'] = '1';
+//                $data[$key]['reward_money'] = number_format($reward,2);
+                $data[$key]['reward_money'] = '';
                 $data[$key]['材料废'] = array_sum($material); //材料废
                 $data[$key]['零头处理'] = array_sum($change); //零头处理
                 $data[$key]['外发废'] = array_sum($list);//外发废
                 $data[$key]['分摊废'] = '';//分摊废
-                $data[$key]['工单计划损耗'] = array_sum($plan_loss);//工单计划损耗
                 $data[$key]['工单质检废'] =  array_sum($quality);  //质检废
             }
             $res = [
                 'data'=>$data,
                 'total' => $total
             ];
-//            Cache::set('OrderSuperLoss/getList'.$params['date'],$res,3600);
+            if ($str != false){
+                Cache::set('OrderSuperLoss/getList'.$str,$res,3600);
+            }
         }else{
-//            $res = Cache::get('OrderSuperLoss/getList'.$params['date']);
+            $res = Cache::get('OrderSuperLoss/getList'.$str);
         }
         $this->success('请求成功',$res);
     }
@@ -306,6 +339,7 @@ class OrderSuperLoss extends Api
      * 工单超节损统计
      * @ApiMethod GET
      * @params string order
+     * 节损奖 小盒0.02 大盒0.09
     */
     public function getOrderSuperLossCount(){
         if (Request::instance()->isGet() == false) {
@@ -360,9 +394,9 @@ class OrderSuperLoss extends Api
         //制程废品
         $zzfp_data =db('设备_产量计酬')->where('sczl_gdbh',$order)->field('SUM(sczl_zcfp) as sczl_zcfp')->select();
         //联数
-        $ls =db('工单_印件资料')->where('Yj_Gdbh',$order)->value('yj_ls');
+        $ls =db('工单_工艺资料')->where('Gy0_gdbh',$order)->field('Gy0_ls')->find();
         //制程废品*ls
-        $data['zcfp'] = $zzfp_data[0]['sczl_zcfp'] * $ls;
+        $data['zcfp'] = $zzfp_data[0]['sczl_zcfp'] * $ls['Gy0_ls'];
         //废品数量
         $wasteTotal = db('db_qczl')->where('qczl_gdbh',$order)->sum('qczl_fp');
         if (empty($wasteTotal)){
@@ -427,6 +461,7 @@ class OrderSuperLoss extends Api
         $total['total_fp'] = 0;
         $total['waste_quality'] = 0;
         $total['waste_intangible'] = 0;
+        $total['reward'] = 0;
         //按工序打印
         if ($params['type'] == 1){
             $total['total_waste'] = 0;
@@ -436,7 +471,7 @@ class OrderSuperLoss extends Api
                 $gy_data[$k]['total_fp'] = $item['total_fp'] * $item['Gy0_ls'];
                 $gy_data[$k]['total_cl'] = $item['total_cl'] * $item['Gy0_ls'];
                 //无形损
-                $gy_data[$k]['intangible_loss'] = round($item['Gy0_计划损耗'] / $plan_total * $data['intangible_loss']);
+                $gy_data[$k]['intangible_loss'] = round(number_format($item['Gy0_计划损耗']/$plan_total,4) * $data['intangible_loss']);
                 foreach ($waste_out as $entry) {
                     for ($i = 1; $i <= 13; $i++) {
                         $gxmcKey = "fp_gxmc" . $i;
@@ -466,14 +501,26 @@ class OrderSuperLoss extends Api
                 //工序实际报废率
                 $gy_data[$k]['actual_loss_rate'] = number_format($gy_data[$k]['total_waste'] / $item['Gy0_计划接货数'],4) * 100 .'%';
                 $gy_data[$k]['超节损承担比例'] = number_format($item['超节损承担比例'],4) * 100 .'%';
-
+                //工序超节损金额
+                if (strpos($data['成品名称'],'小盒')){
+                    $moneyRate = 0.02;
+                }else{
+                    $moneyRate = 0.09;
+                }
+                if (strpos($item['Gy0_gxmc'],'机检') !== false){
+                    $gy_data[$k]['工序超节损金额'] = '0.000000';
+                }else{
+                    $gy_data[$k]['工序超节损金额'] = number_format($gy_data[$k]['loss'] * $item['超节损承担比例'] * $moneyRate,4);
+                }
                 $total['plan_loss'] += $gy_data[$k]['Gy0_计划损耗'];
                 $total['total_fp'] += $gy_data[$k]['total_fp'];
                 $total['waste_quality'] += $gy_data[$k]['waste_quality'];
                 $total['waste_intangible'] += $gy_data[$k]['intangible_loss'];
                 $total['total_waste'] += $gy_data[$k]['total_waste'];
                 $total['loss'] += $gy_data[$k]['loss'];
+                $total['reward'] += $gy_data[$k]['工序超节损金额'];
             }
+            $total['reward'] = number_format($total['reward'],2);
             $data['gy_data'] = $gy_data;
             $data['total'] = $total;
             $this->success('请求成功',$data);
@@ -511,9 +558,7 @@ class OrderSuperLoss extends Api
                 ->group('b.sczl_gxh, b.sczl_bh1, CASE WHEN b.sczl_bh2 = "000000" THEN "" ELSE b.sczl_bh2 END, b.sczl_bh3, 
                          b.sczl_bh4, b.sczl_bh5, b.sczl_bh6, b.sczl_bh7, b.sczl_bh8, b.sczl_bh9, c.sczl_bh1')
                 ->order('a.Gy0_gxh asc, b.开工时间 asc, c.sczl_rq desc')
-//                ->fetchSql(true)
                 ->select();
-//            halt($gy_data);
             foreach ($gy_data as $key=>$value){
                 $gy_data[$key]['Gy0_yjno'] = $value['Gy0_yjno'] > 10 ? $value['Gy0_yjno'] : '0'.$value['Gy0_yjno'];
                 //每道工序的产量(按班组分)
@@ -554,13 +599,11 @@ class OrderSuperLoss extends Api
                         $bhKey = "fp_bh" . $i;
                         if ((int)substr($entry[$gxmcKey],0,2) == $value['Gy0_gxh'] && $entry[$bhKey] == $value['sczl_bh1']){
                             $gy_data[$key]['质检废'] += $entry[$slKey];
-
                         }
                     }
                 }
                 //无形损分摊
                 $gy_data[$key]['无形损分摊'] = round($gy_data[$key]['计划损耗'] / $plan_total * $data['intangible_loss']);
-                $gy_data[$key]['超节损承担比例'] = number_format($value['超节损承担比例'],4) * 100 .'%';
                 //班组成员
                 $nameArr = [];
                 for ($j = 1; $j <= 10; $j++) {
@@ -578,7 +621,6 @@ class OrderSuperLoss extends Api
                 unset($gy_data[$key]['sczl_bh']);
 
             }
-//            halt($gy_data);
             //重新计算多班组同组长的质检废,质检废 = 班组产量 / 总产量 * 质检废
             $totals = [];
             foreach ($gy_data as $item) {
@@ -607,12 +649,27 @@ class OrderSuperLoss extends Api
                     $total_waste = $item['质检废']  +  $item['sczl_zcfp'];
                 }
                 $gy_data[$i]['节损数量'] = $item['计划损耗'] - $total_waste;
-                $i++;
+                //节损奖
+                if (strpos($data['成品名称'],'小盒')){
+                    $moneyRate = 0.02;
+                }else{
+                    $moneyRate = 0.09;
+                }
+                if (strpos($item['sczl_gxmc'],'机检') !== false){
+                    $gy_data[$i]['节损奖'] = 0;
+                }else{
+                    $gy_data[$i]['节损奖'] = number_format($gy_data[$i]['节损数量'] *  $item['超节损承担比例'] * $moneyRate,4);
+                }
+                $gy_data[$i]['超节损承担比例'] = number_format($item['超节损承担比例'],4) * 100 .'%';
+
                 $total['plan_loss'] += $item['计划损耗'];
                 $total['total_fp'] += $item['sczl_zcfp'];
                 $total['waste_quality'] += $item['质检废'];
                 $total['waste_intangible'] += $item['无形损分摊'];
+                $total['reward'] += $gy_data[$i]['节损奖'];
+                $i++;
             }
+            $total['reward'] = number_format($total['reward'],2);
             $data['gy_data'] = $gy_data;
             $data['total'] = $total;
             $this->success('请求成功',$data);