Pārlūkot izejas kodu

搜索接口优化

曹鹤洋 1 gadu atpakaļ
vecāks
revīzija
59bc1b46eb

+ 50 - 52
application/api/controller/EmployeeDailySalary.php

@@ -104,9 +104,6 @@ class EmployeeDailySalary extends Api
         $req = $this->request->param();
         $res=db('绩效工资汇总')->cache(true,86400)
             ->join('人事_基本资料','人事_基本资料.员工编号=绩效工资汇总.bh')
-            // ->field('bh,rtrim(xm) as 员工姓名,LEFT(sczl_rq, 10) as sczl_rq,sum(个人计件工资) as 计件工资,
-            // sum(个人加班工资) as 加班工资,sum(异常停机工时) as 计时时数,sum(异常停机工时)*9.5 as 计时工资,
-            // (sum(个人计件工资) + sum(个人加班工资) + sum(异常停机工时)*9.5) as 日工资合计')
             ->group('绩效工资汇总.bh,LEFT(sczl_rq, 10)')
             ->where('sys_ny',$req['date'])
             ->where(['人事_基本资料.所在部门'=>['like',$req['department'].'%']])
@@ -273,67 +270,68 @@ class EmployeeDailySalary extends Api
             $req['search']=$yg;
         }
         $res=db('绩效工资汇总')->cache(true,86400)
-            // ->join('人事_基本资料','人事_基本资料.员工编号=绩效工资汇总.bh','LEFT')
-            ->field('bh,xm as 员工姓名,LEFT(sczl_rq, 10) as sczl_rq,sum(个人计件工资) as 计件工资,
-            sum(个人加班工资) as 加班工资,(sum(个人计件工资)+sum(个人加班工资)) as 日工资合计')
+            ->join('人事_基本资料','人事_基本资料.员工编号=绩效工资汇总.bh')
             ->group('绩效工资汇总.bh,LEFT(sczl_rq, 10)')
             ->where('sys_ny',$req['date'])
             ->where('bh',$req['search'])
-            // ->where('人事_基本资料.所在部门',$req['department'])
-            ->select();
-        if(!$res){
-            $this->error('失败');
-        }
+            // ->where(['人事_基本资料.所在部门'=>['like',$req['department'].'%']])
+            ->column('CONCAT(bh, "-", DATE_FORMAT(sczl_rq,"%Y.%m.%d")) AS rq_bh,bh,rtrim(xm) as 员工姓名,DATE_FORMAT(sczl_rq,"%Y.%m.%d") as sczl_rq,sum(个人计件工资) as 计件工资,
+            sum(个人加班工资) as 加班工资,sum(异常停机工时) as 计时时数,sum(异常停机工时)*9.5 as 计时工资,
+            (sum(个人计件工资) + sum(个人加班工资) + sum(异常停机工时)*9.5) as 日工资合计');
+
         $year=substr($req['date'],0,4);
         $month=substr($req['date'],-2);
         $start_time = $year . '-' . $month . '-01 00:00:00';
         $end_time = date('Y-m-t', strtotime("$year-$month-01")) . ' 23:59:59';
-        $res1=db('db_wgjs')->cache(true,86400)
-        ->field('LEFT(wgjs_rq, 10) as wgjs_rq,wgjs_bh1 as wgjs_bh,wgjs_js1 as wgjs_js')
-        // ->join('人事_基本资料','人事_基本资料.员工编号=db_wgjs.wgjs_bh1','LEFT')
-        ->where(['wgjs_rq'=>['between',"$start_time,$end_time"],'wgjs_bh1'=>$req['search']])
-        ->select();
-        $res2=db('db_wgjs')->cache(true,86400)
-        ->field('LEFT(wgjs_rq, 10) as wgjs_rq,wgjs_bh2 as wgjs_bh,wgjs_js2 as wgjs_js')
-        // ->join('人事_基本资料','人事_基本资料.员工编号=db_wgjs.wgjs_bh2','LEFT')
-        ->where(['wgjs_rq'=>['between',"$start_time,$end_time"],'wgjs_bh2'=>$req['search']])
-        ->select();
-        $res3=db('db_wgjs')->cache(true,86400)
-        ->field('LEFT(wgjs_rq, 10) as wgjs_rq,wgjs_bh3 as wgjs_bh,wgjs_js3 as wgjs_js')
-        // ->join('人事_基本资料','人事_基本资料.员工编号=db_wgjs.wgjs_bh3','LEFT')
-        ->where(['wgjs_rq'=>['between',"$start_time,$end_time"],'wgjs_bh3'=>$req['search']])
-        ->select();
-        $res4=db('db_wgjs')->cache(true,86400)
-        ->field('LEFT(wgjs_rq, 10) as wgjs_rq,wgjs_bh4 as wgjs_bh,wgjs_js4 as wgjs_js')
-        // ->join('人事_基本资料','人事_基本资料.员工编号=db_wgjs.wgjs_bh4','LEFT')
-        ->where(['wgjs_rq'=>['between',"$start_time,$end_time"],'wgjs_bh4'=>$req['search']])
-        ->select();
-        $res5=db('db_wgjs')->cache(true,86400)
-        ->field('LEFT(wgjs_rq, 10) as wgjs_rq,wgjs_bh5 as wgjs_bh,wgjs_js5  as wgjs_js')
-        // ->join('人事_基本资料','人事_基本资料.员工编号=db_wgjs.wgjs_bh5','LEFT')
-        ->where(['wgjs_rq'=>['between',"$start_time,$end_time"],'wgjs_bh5'=>$req['search']])
-        ->select();
-        $res6=db('db_wgjs')->cache(true,86400)
-        ->field('LEFT(wgjs_rq, 10) as wgjs_rq,wgjs_bh6 as wgjs_bh,wgjs_js6 as wgjs_js')
-        // ->join('人事_基本资料','人事_基本资料.员工编号=db_wgjs.wgjs_bh6','LEFT')
-        ->where(['wgjs_rq'=>['between',"$start_time,$end_time"],'wgjs_bh6'=>$req['search']])
-        ->select();
-        $arr=array_merge($res1,$res2,$res3,$res4,$res5,$res6);
+        
+        $arr = [];
+        $columns = ['wgjs_bh1', 'wgjs_bh2', 'wgjs_bh3', 'wgjs_bh4', 'wgjs_bh5', 'wgjs_bh6'];
+        $field = 'wgjs_js';
+        for ($i = 1; $i <= 6; $i++) {
+            $column = $columns[$i-1];
+            $r = db('db_wgjs')->cache(true, 86400)
+                ->field("DATE_FORMAT(wgjs_rq,'%Y.%m.%d') as wgjs_rq, $column as wgjs_bh, trim(员工姓名) as 员工姓名, ${field}${i} as wgjs_js")
+                ->join('人事_基本资料', "人事_基本资料.员工编号=db_wgjs.$column")
+                ->where(['wgjs_rq' => ['between', "$start_time,$end_time"]])
+                ->select();
+
+            $arr = array_merge($arr, $r);
+        }
+        
+        $list = [];
         foreach($arr as $v){
-            if(isset($list[$v['wgjs_rq']][$v['wgjs_bh']])){
-                $list[$v['wgjs_rq']][$v['wgjs_bh']]+=$v['wgjs_js'];
+            if(isset($list[$v['wgjs_bh'].'-'.$v['wgjs_rq']])){
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['计时时数']+=$v['wgjs_js'];
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['计时工资']=floatval(number_format($list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['计时时数']*9.5,2));
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['日工资合计']=floatval(number_format($list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['计时时数']*9.5,2));
             }else{
-                $list[$v['wgjs_rq']][$v['wgjs_bh']]=$v['wgjs_js'];
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['bh']=$v['wgjs_bh'];
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['员工姓名']=$v['员工姓名'];
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['sczl_rq']=$v['wgjs_rq'];
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['计件工资']=0;
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['加班工资']=0;
+
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['计时时数']=$v['wgjs_js'];
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['计时工资']=floatval(number_format($v['wgjs_js']*9.5,2));
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['日工资合计']=floatval(number_format($v['wgjs_js']*9.5,2));
+            }
+        };       
+        foreach($res as $k=>&$v){
+            if(array_key_exists($k,$list)){
+                $v['计时时数'] += $list[$k]['计时时数'];
+                $v['计时工资'] = floatval(number_format($v['计时时数']*9.5,2));
+                $v['日工资合计'] = $v['计件工资'] + $v['加班工资'] + $v['计时工资'];
+                unset($list[$k]);
             }
+            unset($v['rq_bh']);
         }
-        foreach($res as &$v){
-            $v['sczl_rq']=str_replace('-','.',$v['sczl_rq']);
-            if(isset($list[$v['sczl_rq']][$v['bh']])){
-                $v['计时']=$list[$v['sczl_rq']][$v['bh']];
-            }else{
-                $v['计时']='';
-            }  
+        foreach($list as $k=>$v){
+            if(strpos($k, $req['search']) !== false){
+                $res[$k] = $v;
+            }
         }
+        ksort($res);
+        $res = array_values($res);
         $this->success('成功',$res);
     }
      /**

+ 45 - 55
application/api/controller/OvertimeVerification.php

@@ -271,68 +271,58 @@ class OvertimeVerification extends Api
         if($yg){
             $req['search']=$yg;
         }
-        $res=db('绩效工资汇总')->cache(true,86400)
-            ->join('人事_基本资料','人事_基本资料.员工编号=绩效工资汇总.bh','LEFT')
-            ->field('bh,rtrim(xm) as 员工姓名,人事_基本资料.工资表类别,LEFT(人事_基本资料.聘用日期, 10) as 聘用日期,法定天数,
-            sum(日定额) as 当月定额,(sum(班组车头产量*工序难度系数)+sum(班组换算产量)) as 月度合计产量,sum(个人计件工资) as 个人计件工资,
-            sum(个人加班工资) as 个人加班工资,sum(计时补差额工资) as 计时补差,LEFT(sczl_rq, 7) as sczl_rq')
-            ->group('绩效工资汇总.bh')
-            ->where('sys_ny',$req['date'])
-            ->where('bh',$req['search'])
-            ->select();
-        if(!$res){
-            $this->error('失败');
-        }
+        $res=db('绩效工资汇总')->alias('j')
+            ->join('人事_基本资料 r','r.员工编号=j.bh')
+            ->group('j.bh')
+            ->where('j.sys_ny',$req['date'])
+            ->where('j.bh',$req['search'])
+            // ->where(['r.所在部门'=>['like',$req['department'].'%']])
+            ->column('CONCAT(j.bh, "-", DATE_FORMAT(sczl_rq,"%Y.%m")) AS rq_bh,j.bh,rtrim(j.xm) as 员工姓名,r.工资表类别,DATE_FORMAT(r.聘用日期,"%Y.%m.%d") as 聘用日期,j.法定天数,
+            sum(j.日定额) as 当月定额,(sum(j.班组车头产量*j.工序难度系数)+sum(j.班组换算产量)) as 月度合计产量,sum(j.个人计件工资) as 个人计件工资,
+            sum(j.个人加班工资) as 个人加班工资,sum(j.异常停机工时) as 月计时时数,LEFT(j.sczl_rq, 7) as sczl_rq');
+
         $year=substr($req['date'],0,4);
         $month=substr($req['date'],-2);
-        if($month==12){
-            $start_time=$year.'-12-01 00:00:00';
-            $end_time=($year+1).'-01-01 00:00:00';
-        }else{
-            $start_time=$year.'-'.$month.'-01 00:00:00';
-            $end_time=$year.'-'.($month+1).'-01 00:00:00';
+        $start_time = $year . '-' . $month . '-01 00:00:00';
+        $end_time = date('Y-m-t', strtotime("$year-$month-01")) . ' 23:59:59';
+        $arr = [];
+        $columns = ['wgjs_bh1', 'wgjs_bh2', 'wgjs_bh3', 'wgjs_bh4', 'wgjs_bh5', 'wgjs_bh6'];
+        $field = 'wgjs_js';
+        for ($i = 1; $i <= 6; $i++) {
+            $column = $columns[$i-1];
+            $r = db('db_wgjs')->cache(true, 86400)
+                ->field("DATE_FORMAT(wgjs_rq,'%Y.%m') as wgjs_rq, $column as wgjs_bh, ${field}${i} as wgjs_js")
+                ->join('人事_基本资料', "人事_基本资料.员工编号=db_wgjs.$column")
+                ->where(['wgjs_rq' => ['between', "$start_time,$end_time"]])
+                ->select();
+
+            $arr = array_merge($arr, $r);
         }
-        $res1=db('db_wgjs')->cache(true,86400)
-        ->field('LEFT(wgjs_rq, 7) as wgjs_rq,wgjs_bh1 as wgjs_bh,wgjs_js1 as wgjs_js')
-        ->where(['wgjs_rq'=>['between',"$start_time,$end_time"],'wgjs_bh1'=>$req['search']])
-        ->select();
-        $res2=db('db_wgjs')->cache(true,86400)
-        ->field('LEFT(wgjs_rq, 7) as wgjs_rq,wgjs_bh2 as wgjs_bh,wgjs_js2 as wgjs_js')
-        ->where(['wgjs_rq'=>['between',"$start_time,$end_time"],'wgjs_bh2'=>$req['search']])
-        ->select();
-        $res3=db('db_wgjs')->cache(true,86400)
-        ->field('LEFT(wgjs_rq, 7) as wgjs_rq,wgjs_bh3 as wgjs_bh,wgjs_js3 as wgjs_js')
-        ->where(['wgjs_rq'=>['between',"$start_time,$end_time"],'wgjs_bh3'=>$req['search']])
-        ->select();
-        $res4=db('db_wgjs')->cache(true,86400)
-        ->field('LEFT(wgjs_rq, 7) as wgjs_rq,wgjs_bh4 as wgjs_bh,wgjs_js4 as wgjs_js')
-        ->where(['wgjs_rq'=>['between',"$start_time,$end_time"],'wgjs_bh4'=>$req['search']])
-        ->select();
-        $res5=db('db_wgjs')->cache(true,86400)
-        ->field('LEFT(wgjs_rq, 7) as wgjs_rq,wgjs_bh5 as wgjs_bh,wgjs_js5  as wgjs_js')
-        ->where(['wgjs_rq'=>['between',"$start_time,$end_time"],'wgjs_bh5'=>$req['search']])
-        ->select();
-        $res6=db('db_wgjs')->cache(true,86400)
-        ->field('LEFT(wgjs_rq, 7) as wgjs_rq,wgjs_bh6 as wgjs_bh,wgjs_js6 as wgjs_js')
-        ->where(['wgjs_rq'=>['between',"$start_time,$end_time"],'wgjs_bh6'=>$req['search']])
-        ->select();
-        $arr=array_merge($res1,$res2,$res3,$res4,$res5,$res6);
+
+        $list = [];
         foreach($arr as $v){
-            if(isset($list[$v['wgjs_rq']][$v['wgjs_bh']])){
-                $list[$v['wgjs_rq']][$v['wgjs_bh']]+=$v['wgjs_js'];
+            if(isset($list[$v['wgjs_bh'].'-'.$v['wgjs_rq']])){
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['月计时时数']+=$v['wgjs_js'];
             }else{
-                $list[$v['wgjs_rq']][$v['wgjs_bh']]=$v['wgjs_js'];
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['bh']=$v['wgjs_bh'];
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['sczl_rq']=$v['wgjs_rq'];
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['月计时时数']=$v['wgjs_js'];
             }
+        };
+        
+        foreach($res as $k=>&$v){
+            if(array_key_exists($k,$list)){
+                $v['月计时时数'] += $list[$k]['月计时时数'];
+            }
+            $v['工资表类别'] = trim($v['工资表类别']);
+            $v['法定天数'] = round($v['法定天数']);
+            $v['当月定额'] = round($v['当月定额']);
+            $v['月度合计产量'] = round($v['月度合计产量']);
+            $v['月计时时数'] = floatval(number_format($v['月计时时数'],2));
+            $v['计时补差'] = floatval(bcmul($v['月计时时数'], 9.5, 2));
+            unset($v['rq_bh']);
         }
-        foreach($res as &$v){
-            $v['聘用日期']=str_replace('-','.',$v['聘用日期']);
-            if(isset($list[$v['sczl_rq']][$v['bh']])){
-                $v['月计时时数']=$list[$v['sczl_rq']][$v['bh']];
-            }else{
-                $v['月计时时数']='';
-            }  
-            unset($v['sczl_rq']);
-        }
+        $res = array_values($res);
         $this->success('成功',$res);
     }
 }