瀏覽代碼

员工日工资, 关联工资核算计时工资定额补差

曹鹤洋 1 年之前
父節點
當前提交
d755757a16

+ 161 - 51
application/api/controller/EmployeeDailySalary.php

@@ -32,28 +32,16 @@ class EmployeeDailySalary extends Api
         if(!$this->request->isGet()){
             $this->error('请求方式错误');
         }
-        // $rows = db()->table('绩效工资汇总')
-        // ->whereTime('sczl_rq', '>=', strtotime('-15 months'))
-        // ->group('sys_ny')
-        // ->order('sys_ny desc')
-        // ->limit(15)
-        // ->column('sys_ny');
-        $rows = db('db_大废品')->cache(true,86400)
-        ->whereTime('sys_rq', '>=', strtotime('-15 months'))
-        ->group("DATE_FORMAT(`sys_rq`, '%Y%m')")
-        ->order('sys_rq desc')
-        ->limit(15)
-        ->column("DATE_FORMAT(`sys_rq`, '%Y%m')");
-        $res=db('绩效工资汇总')->cache(true,86400)
-            ->field('sys_ny,bh')
-            ->group('sys_ny,bh')
-            ->where(['sys_ny'=>['between',"$rows[14],$rows[0]"]])
-            ->order('sys_ny desc')
+        $res=db('绩效工资汇总')
+            ->field('DATE_FORMAT(`sczl_rq`, "%Y%m") as sys_ny,bh')
+            ->group('DATE_FORMAT(`sczl_rq`, "%Y%m"),bh')
+            ->whereTime('sczl_rq', '>=', strtotime('-14 months'))
+            ->order('sczl_rq desc')
             ->select();
         foreach($res as $v){
             $arr[$v['sys_ny'].'-'][]=$v['bh'];
         }
-        $rs = db('人事_基本资料')->cache(true,86400)->column('员工编号,所在部门');
+        $rs = db('人事_基本资料')->column('员工编号,所在部门');
         foreach($arr as $k=>$v){
             foreach($v as $key=>$value){
                 $data[$k][$key]=rtrim($rs[$value]);
@@ -102,14 +90,13 @@ class EmployeeDailySalary extends Api
             $this->error('请求方式错误');
         }
         $req = $this->request->param();
-        $res=db('绩效工资汇总')->cache(true,86400)
+        $res=db('绩效工资汇总')
             ->join('人事_基本资料','人事_基本资料.员工编号=绩效工资汇总.bh')
             ->group('绩效工资汇总.bh,LEFT(sczl_rq, 10)')
             ->where('sys_ny',$req['date'])
             ->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 日工资合计');
+            sum(个人加班工资) as 加班工资,sum(异常停机工时) as 计时时数');
 
         $year=substr($req['date'],0,4);
         $month=substr($req['date'],-2);
@@ -118,11 +105,10 @@ class EmployeeDailySalary extends Api
         
         $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")
+            $r = db('db_wgjs')
+                ->field("DATE_FORMAT(wgjs_rq,'%Y.%m.%d') as wgjs_rq, $column as wgjs_bh, trim(员工姓名) as 员工姓名, wgjs_js$i as wgjs_js, wgjs_冲定额$i as wgjs_冲定额")
                 ->join('人事_基本资料', "人事_基本资料.员工编号=db_wgjs.$column")
                 ->where(['wgjs_rq' => ['between', "$start_time,$end_time"], '人事_基本资料.所在部门' => ['like', $req['department'] . '%']])
                 ->select();
@@ -142,20 +128,82 @@ class EmployeeDailySalary extends Api
                 $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));
             }
         };
-        
+        $list1 = [];
+        foreach($arr as $v){
+            if(isset($list1[$v['wgjs_bh']])){
+                if($v['wgjs_冲定额']=='是'){
+                    $list1[$v['wgjs_bh']]['计时时数']+=$v['wgjs_js'];
+                }
+            }else{
+                if($v['wgjs_冲定额']=='是'){
+                    $list1[$v['wgjs_bh']]['计时时数']=$v['wgjs_js'];
+                }else{
+                    $list1[$v['wgjs_bh']]['计时时数']=0;
+                }
+            }
+        };
+
+        //获取每个员工计时补差天数
+        $arr1 = db('绩效工资汇总')->alias('j')
+            ->field('j.bh,j.sczl_rq')
+            ->join('人事_基本资料 r','r.员工编号=j.bh')
+            ->group('j.bh,j.sczl_rq')
+            ->where('j.sys_ny',$req['date'])
+            ->where('j.达标定额','<>',0)
+            ->where(['r.所在部门'=>['like',$req['department'].'%']])
+            ->buildSql();
+        $arr1 = db()->table($arr1 . ' t')
+            ->group('t.bh, LEFT(t.sczl_rq, 7)')
+            ->column('t.bh,count(LEFT(t.sczl_rq, 7)) as num');
+
+        //查询该员工当月停机工时
+        $res1=db('绩效工资汇总')
+            ->join('人事_基本资料','人事_基本资料.员工编号=绩效工资汇总.bh')
+            ->group('绩效工资汇总.bh,LEFT(sczl_rq, 7)')
+            ->where('sys_ny',$req['date'])
+            ->where(['人事_基本资料.所在部门'=>['like',$req['department'].'%']])
+            ->column('bh,rtrim(xm) as 员工姓名,DATE_FORMAT(sczl_rq,"%Y.%m.%d") as sczl_rq,
+            sum(异常停机工时) as 计时时数');
+
+        //查询每条记录
+        $arr2 = db('绩效工资汇总')->alias('j')
+            ->field('j.bh, DATE_FORMAT(j.sczl_rq,"%Y.%m.%d") as sczl_rq,
+            sum(j.达标定额) as 达标定额, j.Rate, j.千件工价, sum(j.异常停机工时) as 异常停机工时')
+            ->join('人事_基本资料 r','r.员工编号=j.bh')
+            ->where('j.sys_ny',$req['date'])
+            ->where('j.达标定额','<>',0)
+            ->where(['r.所在部门'=>['like',$req['department'].'%']])
+            ->group('j.bh,j.sczl_rq,j.sczl_gdbh')
+            ->select();
+        //计算每条记录的计时补差
+        $brr = [];
+        foreach($arr2 as $v){
+            $yjsss1 = array_key_exists($v['bh'],$list1) ? $list1[$v['bh']]['计时时数'] : 0;
+            $yjsss2 = array_key_exists($v['bh'],$res1) ? $res1[$v['bh']]['计时时数'] : 0;
+            $yjsss = $yjsss1 + $yjsss2;
+
+            $a = $yjsss/$arr1[$v['bh']]/11*0.6*$v['达标定额']*$v['Rate']*0.5/1000*$v['千件工价'];
+                
+            if(array_key_exists($v['bh'].'-'.$v['sczl_rq'],$brr)){
+                $brr[$v['bh'].'-'.$v['sczl_rq']] += $a;
+            }else{
+                $brr[$v['bh'].'-'.$v['sczl_rq']] = $a;
+            }
+        }
+
         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]);
             }
+            $v['计时工资'] = array_key_exists($k,$brr) ? floatval(number_format($v['计时时数']*9.5+$brr[$k],2)) : floatval(number_format($v['计时时数']*9.5,2));
+            $v['日工资合计'] = floatval(number_format($v['计件工资'] + $v['加班工资'] + $v['计时工资'],2));
+            
             unset($v['rq_bh']);
         }
 
@@ -177,7 +225,7 @@ class EmployeeDailySalary extends Api
             $this->error('请求方式错误');
         }
         $req = $this->request->param();
-        $res=db('绩效工资汇总')->cache(true,86400)
+        $res=db('绩效工资汇总')
             ->field('LEFT(sczl_rq, 10) as sczl_rq,sczl_gdbh,rtrim(g.Gd_cpmc) as Gd_cpmc,sczl_yjno,sczl_gxh,sczl_type,
             sczl_jtbh,sum(班组车头产量) as 班组车头产量,sum(班组换算产量) as 班组换算产量,工序难度系数,sum(个人计件工资)
             as 个人计件工资,sum(个人加班工资) as 个人加班工资,sum(装版工时) as 装版工时,sum(保养工时) as 保养工时,
@@ -223,7 +271,7 @@ class EmployeeDailySalary extends Api
         $req = $this->request->param();
         $start_time=$req['date'].' 00:00:00';
         $end_time=$req['date'].' 23:59:59';
-        $res=db('绩效工资汇总')->cache(true,86400)
+        $res=db('绩效工资汇总')
             ->field('LEFT(sczl_rq, 10) as sczl_rq,sczl_gdbh,rtrim(g.Gd_cpmc) as Gd_cpmc,sczl_yjno,sczl_gxh,sczl_type,
             sczl_jtbh,sum(班组车头产量) as 班组车头产量,sum(班组换算产量) as 班组换算产量,工序难度系数,sum(个人计件工资)
             as 个人计件工资,sum(个人加班工资) as 个人加班工资,sum(装版工时) as 装版工时,sum(保养工时) as 保养工时,
@@ -265,19 +313,18 @@ class EmployeeDailySalary extends Api
             $this->error('请求方式错误');
         }
         $req = $this->request->param();
-        $yg = db('人事_基本资料')->cache(true,86400)->where('员工姓名',$req['search'])->value('员工编号');
+        $yg = db('人事_基本资料')->where('员工姓名',$req['search'])->value('员工编号');
         if($yg){
             $req['search']=$yg;
         }
-        $res=db('绩效工资汇总')->cache(true,86400)
+        $res=db('绩效工资汇总')
             ->join('人事_基本资料','人事_基本资料.员工编号=绩效工资汇总.bh')
             ->group('绩效工资汇总.bh,LEFT(sczl_rq, 10)')
             ->where('sys_ny',$req['date'])
             ->where('bh',$req['search'])
             // ->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 日工资合计');
+            sum(个人加班工资) as 加班工资,sum(异常停机工时) as 计时时数');
 
         $year=substr($req['date'],0,4);
         $month=substr($req['date'],-2);
@@ -286,12 +333,12 @@ class EmployeeDailySalary extends Api
         
         $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")
+            $r = db('db_wgjs')
+                ->field("DATE_FORMAT(wgjs_rq,'%Y.%m.%d') as wgjs_rq, $column as wgjs_bh, trim(员工姓名) as 员工姓名, wgjs_js$i as wgjs_js, wgjs_冲定额$i as wgjs_冲定额")
                 ->join('人事_基本资料', "人事_基本资料.员工编号=db_wgjs.$column")
+                ->where($column,$req['search'])
                 ->where(['wgjs_rq' => ['between', "$start_time,$end_time"]])
                 ->select();
 
@@ -310,29 +357,92 @@ class EmployeeDailySalary extends Api
                 $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));
             }
-        };       
+        };
+        $list1 = [];
+        foreach($arr as $v){
+            if(isset($list1[$v['wgjs_bh']])){
+                if($v['wgjs_冲定额']=='是'){
+                    $list1[$v['wgjs_bh']]['计时时数']+=$v['wgjs_js'];
+                }
+            }else{
+                if($v['wgjs_冲定额']=='是'){
+                    $list1[$v['wgjs_bh']]['计时时数']=$v['wgjs_js'];
+                }else{
+                    $list1[$v['wgjs_bh']]['计时时数']=0;
+                }
+            }
+        };
+
+        //获取每个员工计时补差天数
+        $arr1 = db('绩效工资汇总')->alias('j')
+            ->field('j.bh,j.sczl_rq')
+            ->join('人事_基本资料 r','r.员工编号=j.bh')
+            ->group('j.bh,j.sczl_rq')
+            ->where('j.sys_ny',$req['date'])
+            ->where('j.达标定额','<>',0)
+            ->where('j.bh',$req['search'])
+            // ->where(['r.所在部门'=>['like',$req['department'].'%']])
+            ->buildSql();
+        $arr1 = db()->table($arr1 . ' t')
+            ->group('t.bh, LEFT(t.sczl_rq, 7)')
+            ->column('t.bh,count(LEFT(t.sczl_rq, 7)) as num');
+
+        //查询该员工当月停机工时
+        $res1=db('绩效工资汇总')
+            ->join('人事_基本资料','人事_基本资料.员工编号=绩效工资汇总.bh')
+            ->group('绩效工资汇总.bh,LEFT(sczl_rq, 7)')
+            ->where('sys_ny',$req['date'])
+            ->where('bh',$req['search'])
+            // ->where(['人事_基本资料.所在部门'=>['like',$req['department'].'%']])
+            ->column('bh,rtrim(xm) as 员工姓名,DATE_FORMAT(sczl_rq,"%Y.%m.%d") as sczl_rq,
+            sum(异常停机工时) as 计时时数');
+
+        //查询每条记录
+        $arr2 = db('绩效工资汇总')->alias('j')
+            ->field('j.bh, DATE_FORMAT(j.sczl_rq,"%Y.%m.%d") as sczl_rq,
+            sum(j.达标定额) as 达标定额, j.Rate, j.千件工价, sum(j.异常停机工时) as 异常停机工时')
+            ->join('人事_基本资料 r','r.员工编号=j.bh')
+            ->where('j.sys_ny',$req['date'])
+            ->where('j.达标定额','<>',0)
+            ->where('j.bh',$req['search'])
+            // ->where(['r.所在部门'=>['like',$req['department'].'%']])
+            ->group('j.bh,j.sczl_rq,j.sczl_gdbh')
+            ->select();
+        //计算每条记录的计时补差
+        $brr = [];
+        foreach($arr2 as $v){
+            $yjsss1 = array_key_exists($v['bh'],$list1) ? $list1[$v['bh']]['计时时数'] : 0;
+            $yjsss2 = array_key_exists($v['bh'],$res1) ? $res1[$v['bh']]['计时时数'] : 0;
+            $yjsss = $yjsss1 + $yjsss2;
+
+            $a = $yjsss/$arr1[$v['bh']]/11*0.6*$v['达标定额']*$v['Rate']*0.5/1000*$v['千件工价'];
+                
+            if(array_key_exists($v['bh'].'-'.$v['sczl_rq'],$brr)){
+                $brr[$v['bh'].'-'.$v['sczl_rq']] += $a;
+            }else{
+                $brr[$v['bh'].'-'.$v['sczl_rq']] = $a;
+            }
+        }
+
         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]);
             }
+            $v['计时工资'] = array_key_exists($k,$brr) ? floatval(number_format($v['计时时数']*9.5+$brr[$k],2)) : floatval(number_format($v['计时时数']*9.5,2));
+            $v['日工资合计'] = floatval(number_format($v['计件工资'] + $v['加班工资'] + $v['计时工资'],2));
+            
             unset($v['rq_bh']);
         }
-        foreach($list as $k=>$v){
-            if(strpos($k, $req['search']) !== false){
-                $res[$k] = $v;
-            }
-        }
-        ksort($res);
-        $res = array_values($res);
-        $this->success('成功',$res);
+
+        $rows = array_merge($res,$list);
+        ksort($rows);
+        $rows = array_values($rows);
+        $this->success('成功',$rows);
     }
      /**
      * 员工计件明细
@@ -352,7 +462,7 @@ class EmployeeDailySalary extends Api
         $req['end_time']=str_replace('.','-',$req['end_time']);
         $start_time=$req['start_time'].' 00:00:00';
         $end_time=$req['end_time'].' 23:59:59';
-        $res=db('绩效工资汇总')->cache(true,86400)
+        $res=db('绩效工资汇总')
            ->field('LEFT(sczl_rq, 10) as sczl_rq,sczl_gdbh,rtrim(g.员工姓名) as 员工资料,sczl_yjno,sczl_gxh,sczl_type,
             sczl_jtbh,班组车头产量,保养工时,装版工时,打样工时,异常停机工时,补产标准,计时补差额工资 as 班组补产,日定额,达标定额,千件工价,
             个人计件工资,个人加班工资,Rate as 个人比例')
@@ -394,7 +504,7 @@ class EmployeeDailySalary extends Api
             $this->error('请求方式错误');
         }
         $req = $this->request->param();
-        $res=db('绩效工资汇总')->cache(true,86400)
+        $res=db('绩效工资汇总')
             ->join('人事_基本资料','人事_基本资料.员工编号=绩效工资汇总.bh','LEFT')
             ->field('bh,rtrim(xm) as 员工姓名,LEFT(sczl_rq, 10) as sczl_rq,sum(个人计件工资) as 计件工资,
             sum(个人加班工资) as 加班工资')

+ 1 - 0
application/api/controller/Inspect.php

@@ -79,6 +79,7 @@ class Inspect extends Api
 //            ->select();
 
         foreach ($list as $key => $value){
+            dump($value['sczl_gdbh']);
             $dataCount = db('db_手工检验')->alias('d')
                 ->where('sczl_gdbh',$value['sczl_gdbh'])
                 ->where('SUBSTR(d.sczl_yjgx,1,2) = g.yj_Yjno')

+ 91 - 6
application/api/controller/OvertimeVerification.php

@@ -41,7 +41,7 @@ class OvertimeVerification extends Api
         foreach($res as $v){
             $arr[$v['sys_ny'].'('][]=$v['bh'];
         }
-        $rs = db('人事_基本资料')->cache(true,86400)->column('员工编号,所在部门');
+        $rs = db('人事_基本资料')->column('员工编号,所在部门');
         foreach($arr as $k=>$v){
             foreach($v as $value){
                 $data[$k.count($v).'人)'][rtrim($rs[$value])][]=rtrim($rs[$value]);
@@ -118,7 +118,7 @@ class OvertimeVerification extends Api
         $columns = ['wgjs_bh1', 'wgjs_bh2', 'wgjs_bh3', 'wgjs_bh4', 'wgjs_bh5', 'wgjs_bh6'];
         for ($i = 1; $i <= 6; $i++) {
             $column = $columns[$i-1];
-            $r = db('db_wgjs')->cache(true, 86400)
+            $r = db('db_wgjs')
                 ->field("DATE_FORMAT(wgjs_rq,'%Y.%m') as wgjs_rq, $column as wgjs_bh, wgjs_js$i as wgjs_js, wgjs_冲定额$i as wgjs_冲定额")
                 ->join('人事_基本资料', "人事_基本资料.员工编号=db_wgjs.$column")
                 ->where(['wgjs_rq' => ['between', "$start_time,$end_time"], '人事_基本资料.所在部门' => ['like', $req['department'] . '%']])
@@ -210,7 +210,7 @@ class OvertimeVerification extends Api
             $this->error('请求方式错误');
         }
         $req = $this->request->param();
-        $res=db('绩效工资汇总')->cache(true,86400)
+        $res=db('绩效工资汇总')
             ->field('LEFT(sczl_rq, 10) as sczl_rq,sczl_gdbh,rtrim(g.成品名称) as Gd_cpmc,sczl_yjno,sczl_gxh,sczl_type,
             sczl_jtbh,sum(班组车头产量) as 班组车头产量,工序难度系数 as 产量系数,(sum(班组车头产量*工序难度系数)) as 计件产量,
             sum(班组换算产量) as 补产产量,(sum(班组车头产量*工序难度系数)+sum(班组换算产量)) as 核算产量,日定额,sum(达标定额)
@@ -256,7 +256,7 @@ class OvertimeVerification extends Api
         $req = $this->request->param();
         $start_time=$req['date'].' 00:00:00';
         $end_time=$req['date'].' 23:59:59';
-        $res=db('绩效工资汇总')->cache(true,86400)
+        $res=db('绩效工资汇总')
            ->field('LEFT(sczl_rq, 10) as sczl_rq,sczl_gdbh,rtrim(g.Gd_cpmc) as Gd_cpmc,sczl_yjno,sczl_gxh,sczl_type,
             sczl_jtbh,sum(班组车头产量) as 班组车头产量,工序难度系数 as 产量系数,(sum(班组车头产量*工序难度系数)) as 计件产量,
             sum(班组换算产量) as 补产产量,(sum(班组车头产量*工序难度系数)+sum(班组换算产量)) as 核算产量,日定额,sum(达标定额)
@@ -311,7 +311,7 @@ class OvertimeVerification extends Api
             ->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.班组车头产量*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);
@@ -320,10 +320,95 @@ class OvertimeVerification extends Api
         $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'];
+        for ($i = 1; $i <= 6; $i++) {
+            $column = $columns[$i-1];
+            $r = db('db_wgjs')
+                ->field("DATE_FORMAT(wgjs_rq,'%Y.%m') as wgjs_rq, $column as wgjs_bh, wgjs_js$i as wgjs_js, wgjs_冲定额$i as wgjs_冲定额")
+                ->join('人事_基本资料', "人事_基本资料.员工编号=db_wgjs.$column")
+                ->where($column,$req['search'])
+                ->where(['wgjs_rq' => ['between', "$start_time,$end_time"]])
+                ->select();
+
+            $arr = array_merge($arr, $r);
+        }
+
+        $list = [];
+        foreach($arr as $v){
+            if(isset($list[$v['wgjs_bh'].'-'.$v['wgjs_rq']])){
+                if($v['wgjs_冲定额']=='是'){
+                    $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['月计时时数']+=$v['wgjs_js'];
+                }
+            }else{
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['bh']=$v['wgjs_bh'];
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['sczl_rq']=$v['wgjs_rq'];
+                if($v['wgjs_冲定额']=='是'){
+                    $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['月计时时数']=$v['wgjs_js'];
+                }else{
+                    $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['月计时时数']=0;
+                }
+            }
+        };
+
+        //获取每个员工计时补差天数
+        $arr1 = db('绩效工资汇总')->alias('j')
+            ->field('j.bh,j.sczl_rq')
+            ->join('人事_基本资料 r','r.员工编号=j.bh')
+            ->group('j.bh,j.sczl_rq')
+            ->where('j.sys_ny',$req['date'])
+            ->where('j.bh',$req['search'])
+            ->where('j.达标定额','<>',0)
+            // ->where(['r.所在部门'=>['like',$req['department'].'%']])
+            ->buildSql();
+        $arr1 = db()->table($arr1 . ' t')
+            ->group('t.bh, LEFT(t.sczl_rq, 7)')
+            ->column('t.bh,count(LEFT(t.sczl_rq, 7)) as num');
+
+        //查询每条记录
+        $arr2 = db('绩效工资汇总')->alias('j')
+            ->field('j.bh, DATE_FORMAT(j.sczl_rq,"%Y.%m") as sczl_rq,
+            sum(j.达标定额) as 达标定额, j.Rate, j.千件工价')
+            ->join('人事_基本资料 r','r.员工编号=j.bh')
+            ->where('j.sys_ny',$req['date'])
+            ->where('j.达标定额','<>',0)
+            ->where('j.bh',$req['search'])
+            // ->where(['r.所在部门'=>['like',$req['department'].'%']])
+            ->group('j.bh,j.sczl_rq,j.sczl_gdbh')
+            ->select();
+        //计算每条记录的计时补差
+        $brr = [];
+        foreach($arr2 as $v){
+            $yjsss1 = array_key_exists($v['bh'].'-'.$v['sczl_rq'],$list) ? $list[$v['bh'].'-'.$v['sczl_rq']]['月计时时数'] : 0;
+            $yjsss2 = array_key_exists($v['bh'].'-'.$v['sczl_rq'],$res) ? $res[$v['bh'].'-'.$v['sczl_rq']]['月计时时数'] : 0;
+            $yjsss = $yjsss1 + $yjsss2;
+            $a = $yjsss/$arr1[$v['bh']]/11*0.6*$v['达标定额']*$v['Rate']*0.5/1000*$v['千件工价'];
+                
+            if(array_key_exists($v['bh'].'-'.$v['sczl_rq'],$brr)){
+                $brr[$v['bh'].'-'.$v['sczl_rq']] += $a;
+            }else{
+                $brr[$v['bh'].'-'.$v['sczl_rq']] = $a;
+            }
+        }
+
+        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(number_format($brr[$k],2));
+            unset($v['rq_bh']);
+        }
+        $res = array_values($res);
+        $this->success('成功',$res);
+        $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)
+            $r = db('db_wgjs')
                 ->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"]])

+ 382 - 42
application/api/controller/RelatedSalaryAccounting.php

@@ -86,12 +86,110 @@ class RelatedSalaryAccounting extends Api
         $gz = db('人事_关联工资设置')->alias('r')
             ->join('绩效工资汇总 j', 'r.被关联员工 = j.bh AND r.日期 = j.sczl_rq')
             ->join('人事_基本资料 n', 'n.员工编号 = r.关联员工')
-            ->field('r.关联员工, j.bh, sum(j.个人计件工资) as 个人计件工资, sum(j.个人加班工资) as 个人加班工资,
-            sum(j.装版工时,j.保养工时,j.打样工时) as 定额补差, sum(j.异常停机工时) as 计时工资, DATE_FORMAT(j.sczl_rq,"%Y.%m.%d") as 日期')
             ->where('r.日期', 'between', [$start_time, $end_time])
             ->where('n.所在部门', $req['department'])
             ->group('LEFT(j.sczl_rq, 10), j.bh')
+            ->column('CONCAT(j.bh, "-", DATE_FORMAT(j.sczl_rq,"%Y.%m.%d")) AS rq_bh,r.关联员工, j.bh, sum(j.个人计件工资) as 个人计件工资, sum(j.个人加班工资) as 个人加班工资,
+            sum(j.异常停机工时) as 异常停机工时, DATE_FORMAT(j.sczl_rq,"%Y.%m.%d") as 日期');
+
+        $arr = [];
+        $columns = ['wgjs_bh1', 'wgjs_bh2', 'wgjs_bh3', 'wgjs_bh4', 'wgjs_bh5', 'wgjs_bh6'];
+        for ($i = 1; $i <= 6; $i++) {
+            $column = $columns[$i-1];
+            $r = db('db_wgjs')
+                ->field("DATE_FORMAT(wgjs_rq,'%Y.%m.%d') as wgjs_rq, $column as wgjs_bh, 人事_关联工资设置.关联员工, wgjs_js$i as wgjs_js, wgjs_冲定额$i as wgjs_冲定额")
+                ->join('人事_关联工资设置', "人事_关联工资设置.被关联员工=db_wgjs.$column and 人事_关联工资设置.日期 = db_wgjs.wgjs_rq")
+                ->join('人事_基本资料', "人事_基本资料.员工编号=人事_关联工资设置.关联员工")
+                ->where(['人事_关联工资设置.日期' => ['between', "$start_time,$end_time"], '人事_基本资料.所在部门' => ['like', $req['department'] . '%']])
+                ->select();
+            // $r = db('db_wgjs')
+            //     ->field("DATE_FORMAT(wgjs_rq,'%Y.%m.%d') as wgjs_rq, $column as wgjs_bh, 人事_关联工资设置.关联员工, wgjs_js$i as wgjs_js, wgjs_冲定额$i as wgjs_冲定额")
+            //     ->join('人事_基本资料', "人事_基本资料.员工编号=db_wgjs.$column")
+            //     ->join('人事_关联工资设置', "人事_关联工资设置.被关联员工=db_wgjs.$column and 人事_关联工资设置.日期 = db_wgjs.wgjs_rq")
+            //     ->where(['wgjs_rq' => ['between', "$start_time,$end_time"], '人事_基本资料.所在部门' => ['like', $req['department'] . '%']])
+            //     ->select();
+            $arr = array_merge($arr, $r);
+        }
+        
+        //wgjs员工每日时长统计
+        $list = [];
+        foreach($arr as $v){
+            if(isset($list[$v['wgjs_bh'].'-'.$v['wgjs_rq']])){
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['异常停机工时']+=$v['wgjs_js'];
+            }else{
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['关联员工']=$v['关联员工'];
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['bh']=$v['wgjs_bh'];
+                $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']]['日期']=$v['wgjs_rq'];
+            }
+        };
+        
+        //wgjs员工冲定额时长统计
+        $list1 = [];
+        foreach($arr as $v){
+            if(isset($list1[$v['wgjs_bh']])){
+                if($v['wgjs_冲定额']=='是'){
+                    $list1[$v['wgjs_bh']] += $v['wgjs_js'];
+                }
+            }else{
+                if($v['wgjs_冲定额']=='是'){
+                    $list1[$v['wgjs_bh']] = $v['wgjs_js'];
+                }else{
+                    $list1[$v['wgjs_bh']] = 0;
+                }
+            }
+        };
+
+        //获取每个员工计时补差天数
+        $arr1 = db('绩效工资汇总')->alias('j')
+            ->field('j.bh,j.sczl_rq')
+            ->join('人事_基本资料 r','r.员工编号=j.bh')
+            ->group('j.bh,j.sczl_rq')
+            ->where('j.sys_ny',$req['date'])
+            ->where('j.达标定额','<>',0)
+            ->where(['r.所在部门'=>['like',$req['department'].'%']])
+            ->buildSql();
+        $arr1 = db()->table($arr1 . ' t')
+            ->group('t.bh, LEFT(t.sczl_rq, 7)')
+            ->column('t.bh,count(LEFT(t.sczl_rq, 7)) as num');
+
+        //查询该员工当月停机工时
+        $res1=db('绩效工资汇总')
+            ->join('人事_基本资料','人事_基本资料.员工编号=绩效工资汇总.bh')
+            ->group('绩效工资汇总.bh,LEFT(sczl_rq, 7)')
+            ->where('sys_ny',$req['date'])
+            ->where(['人事_基本资料.所在部门'=>['like',$req['department'].'%']])
+            ->column('bh, sum(异常停机工时) as 计时时数');
+
+        //查询每条记录
+        $arr2 = db('绩效工资汇总')->alias('j')
+            ->field('j.bh, DATE_FORMAT(j.sczl_rq,"%Y.%m.%d") as sczl_rq,
+            sum(j.达标定额) as 达标定额, j.Rate, j.千件工价, sum(j.异常停机工时) as 异常停机工时')
+            ->join('人事_基本资料 r','r.员工编号=j.bh')
+            ->where('j.sys_ny',$req['date'])
+            ->where('j.达标定额','<>',0)
+            ->where(['r.所在部门'=>['like',$req['department'].'%']])
+            ->group('j.bh,j.sczl_rq,j.sczl_gdbh')
             ->select();
+            
+        //计算每条记录的计时补差
+        $brr = [];
+        foreach($arr2 as $v){
+            $yjsss1 = array_key_exists($v['bh'],$list1) ? $list1[$v['bh']] : 0;
+            $yjsss2 = array_key_exists($v['bh'],$res1) ? $res1[$v['bh']] : 0;
+            $yjsss = $yjsss1 + $yjsss2;
+
+            $a = $yjsss/$arr1[$v['bh']]/11*0.6*$v['达标定额']*$v['Rate']*0.5/1000*$v['千件工价'];
+                
+            if(array_key_exists($v['bh'].'-'.$v['sczl_rq'],$brr)){
+                $brr[$v['bh'].'-'.$v['sczl_rq']] += $a;
+            }else{
+                $brr[$v['bh'].'-'.$v['sczl_rq']] = $a;
+            }
+        }
+
         $data = [];
         foreach($gz as $v){
             if (!isset($data[$v['关联员工']][$v['日期']])) {
@@ -104,8 +202,25 @@ class RelatedSalaryAccounting extends Api
             }
             $data[$v['关联员工']][$v['日期']]['个人计件工资'] += (float) $v['个人计件工资'];
             $data[$v['关联员工']][$v['日期']]['个人加班工资'] += (float) $v['个人加班工资'];
-            $data[$v['关联员工']][$v['日期']]['定额补差'] += (float) $v['定额补差'];
-            $data[$v['关联员工']][$v['日期']]['计时工资'] += (float) $v['计时工资'];
+            
+            $data[$v['关联员工']][$v['日期']]['定额补差'] += array_key_exists($v['bh'].'-'.$v['日期'],$brr) ? floatval(number_format($brr[$v['bh'].'-'.$v['日期']],2)) : 0;
+            if(array_key_exists($v['bh'].'-'.$v['日期'],$list)){
+                $data[$v['关联员工']][$v['日期']]['计时工资'] += floatval(number_format(($v['异常停机工时'] + $list[$v['bh'].'-'.$v['日期']]['异常停机工时'])*9.5,2));
+                unset($list[$v['bh'].'-'.$v['日期']]);
+            }else{
+                $data[$v['关联员工']][$v['日期']]['计时工资'] += floatval(number_format($v['异常停机工时']*9.5,2));
+            }
+        }
+        foreach($list as $v){
+            if(array_key_exists($v['关联员工'],$data) && array_key_exists($v['日期'],$data[$v['关联员工']])){
+                $data[$v['关联员工']][$v['日期']]['计时工资'] += floatval(number_format($v['异常停机工时']*9.5,2));
+            }else{
+                $data[$v['关联员工']][$v['日期']]['个人计件工资'] = 0;
+                $data[$v['关联员工']][$v['日期']]['个人加班工资'] = 0;
+                $data[$v['关联员工']][$v['日期']]['定额补差'] = 0;
+                $data[$v['关联员工']][$v['日期']]['计时工资'] = floatval(number_format($v['异常停机工时']*9.5,2));
+            }
+            
         }
 
         $res=db('人事_关联工资设置')
@@ -116,26 +231,23 @@ class RelatedSalaryAccounting extends Api
             ->where(['日期'=>['between',"$start_time,$end_time"],'人事_基本资料.所在部门'=>['like',$req['department'].'%']])
             ->order('关联员工,日期')
             ->select();
-        foreach($res as &$v){
+        foreach($res as $k=>&$v){
             if(isset($data[$v['员工编号']][$v['日期']])){
                 $v['关联计件工资'] = floatval(number_format($data[$v['员工编号']][$v['日期']]['个人计件工资']/$v['关联人数']*$v['关联系数'],2));
                 $v['关联加班工资'] = floatval(number_format($data[$v['员工编号']][$v['日期']]['个人加班工资']/$v['关联人数']*$v['关联系数'],2));
                 $v['关联定额补差'] = floatval(number_format($data[$v['员工编号']][$v['日期']]['定额补差']/$v['关联人数']*$v['关联系数'],2));
-                $v['关联计时工资'] = floatval(number_format($data[$v['员工编号']][$v['日期']]['计时工资']/$v['关联人数']*$v['关联系数']*9.5,2));
+                $v['关联计时工资'] = floatval(number_format($data[$v['员工编号']][$v['日期']]['计时工资']/$v['关联人数']*$v['关联系数'],2));
                 $v['关联工资合计'] = floatval(number_format(
                     ($data[$v['员工编号']][$v['日期']]['个人计件工资'] + 
                     $data[$v['员工编号']][$v['日期']]['个人加班工资'] +
                     $data[$v['员工编号']][$v['日期']]['定额补差'] + 
-                    $data[$v['员工编号']][$v['日期']]['计时工资']*9.5
+                    $data[$v['员工编号']][$v['日期']]['计时工资']
                     )/$v['关联人数']*$v['关联系数'],2));
             }else{
-                $v['关联计件工资'] = '';
-                $v['关联加班工资'] = '';
-                $v['关联定额补差'] = '';
-                $v['关联计时工资'] = '';
-                $v['关联工资合计'] = '';
+                unset($res[$k]);
             }
         }
+        $res = array_values($res);
         if($res===false){
             $this->error('失败');
         }
@@ -158,41 +270,158 @@ class RelatedSalaryAccounting extends Api
         $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';
-        $gz=db('绩效工资汇总')
-            ->field('bh,rtrim(xm) as 姓名,sum(个人计件工资) as 个人计件工资,sum(个人加班工资) as 个人加班工资,
-            (sum(装版工时) + sum(保养工时) + sum(打样工时)) as 定额补差, sum(异常停机工时) as 计时工资, DATE_FORMAT(sczl_rq,"%Y.%m.%d") as sczl_rq')
-            ->group('LEFT(sczl_rq, 10),bh')
-            ->where(['sys_ny'=>$req['date']])
+        $gz = db('人事_关联工资设置')->alias('r')
+            ->join('绩效工资汇总 j', 'r.被关联员工 = j.bh AND r.日期 = j.sczl_rq')
+            ->join('人事_基本资料 n', 'n.员工编号 = r.关联员工')
+            ->where('r.日期', 'between', [$start_time, $end_time])
+            ->where('r.关联员工', $req['code'])
+            ->group('LEFT(j.sczl_rq, 10), j.bh')
+            ->column('CONCAT(j.bh, "-", DATE_FORMAT(j.sczl_rq,"%Y.%m.%d")) AS rq_bh,r.关联员工,r.被关联员工, j.bh,rtrim(j.xm) as 姓名, sum(j.个人计件工资) as 个人计件工资, sum(j.个人加班工资) as 个人加班工资,
+            sum(j.异常停机工时) as 异常停机工时, DATE_FORMAT(j.sczl_rq,"%Y.%m.%d") as 日期');
+
+        $arr = [];
+        $columns = ['wgjs_bh1', 'wgjs_bh2', 'wgjs_bh3', 'wgjs_bh4', 'wgjs_bh5', 'wgjs_bh6'];
+        for ($i = 1; $i <= 6; $i++) {
+            $column = $columns[$i-1];
+            $r = db('db_wgjs')
+                ->field("DATE_FORMAT(wgjs_rq,'%Y.%m.%d') as wgjs_rq, $column as wgjs_bh, 人事_关联工资设置.关联员工, trim(人事_基本资料.员工姓名) as 姓名, wgjs_js$i as wgjs_js, wgjs_冲定额$i as wgjs_冲定额")
+                ->join('人事_关联工资设置', "人事_关联工资设置.被关联员工=db_wgjs.$column and 人事_关联工资设置.日期 = db_wgjs.wgjs_rq")
+                ->join('人事_基本资料', "人事_基本资料.员工编号=db_wgjs.$column")
+                ->where(['人事_关联工资设置.日期' => ['between', "$start_time,$end_time"], '人事_关联工资设置.关联员工' => $req['code']])
+                ->select();
+            $arr = array_merge($arr, $r);
+        }
+        
+        //wgjs员工每日时长统计
+        $list = [];
+        foreach($arr as $v){
+            if(isset($list[$v['wgjs_bh'].'-'.$v['wgjs_rq']])){
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['异常停机工时']+=$v['wgjs_js'];
+            }else{
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['关联员工']=$v['关联员工'];
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['姓名']=$v['姓名'];
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['bh']=$v['wgjs_bh'];
+                $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']]['日期']=$v['wgjs_rq'];
+            }
+        };
+        
+        //wgjs员工冲定额时长统计
+        $list1 = [];
+        foreach($arr as $v){
+            if(isset($list1[$v['wgjs_bh']])){
+                if($v['wgjs_冲定额']=='是'){
+                    $list1[$v['wgjs_bh']] += $v['wgjs_js'];
+                }
+            }else{
+                if($v['wgjs_冲定额']=='是'){
+                    $list1[$v['wgjs_bh']] = $v['wgjs_js'];
+                }else{
+                    $list1[$v['wgjs_bh']] = 0;
+                }
+            }
+        };
+
+        //查询该员工所在部门
+        $department = db('人事_基本资料')
+            ->where('员工编号',$req['code'])
+            ->value('trim(所在部门)');
+        //获取每个员工计时补差天数
+        $arr1 = db('绩效工资汇总')->alias('j')
+            ->field('j.bh,j.sczl_rq')
+            ->join('人事_基本资料 r','r.员工编号=j.bh')
+            ->group('j.bh,j.sczl_rq')
+            ->where('j.sys_ny',$req['date'])
+            ->where('j.达标定额','<>',0)
+            ->where(['r.所在部门'=>$department])
+            ->buildSql();
+        $arr1 = db()->table($arr1 . ' t')
+            ->group('t.bh, LEFT(t.sczl_rq, 7)')
+            ->column('t.bh,count(LEFT(t.sczl_rq, 7)) as num');
+
+        //查询该员工当月停机工时
+        $res1=db('绩效工资汇总')
+            ->join('人事_基本资料','人事_基本资料.员工编号=绩效工资汇总.bh')
+            ->group('绩效工资汇总.bh,LEFT(sczl_rq, 7)')
+            ->where('sys_ny',$req['date'])
+            ->where(['人事_基本资料.所在部门'=>$department])
+            ->column('bh, sum(异常停机工时) as 计时时数');
+
+        //查询每条记录
+        $arr2 = db('绩效工资汇总')->alias('j')
+            ->field('j.bh, DATE_FORMAT(j.sczl_rq,"%Y.%m.%d") as sczl_rq,
+            sum(j.达标定额) as 达标定额, j.Rate, j.千件工价, sum(j.异常停机工时) as 异常停机工时')
+            ->join('人事_基本资料 r','r.员工编号=j.bh')
+            ->where('j.sys_ny',$req['date'])
+            ->where('j.达标定额','<>',0)
+            ->where(['r.所在部门'=>$department])
+            ->group('j.bh,j.sczl_rq,j.sczl_gdbh')
             ->select();
+            
+        //计算每条记录的计时补差
+        $brr = [];
+        foreach($arr2 as $v){
+            $yjsss1 = array_key_exists($v['bh'],$list1) ? $list1[$v['bh']] : 0;
+            $yjsss2 = array_key_exists($v['bh'],$res1) ? $res1[$v['bh']] : 0;
+            $yjsss = $yjsss1 + $yjsss2;
+
+            $a = $yjsss/$arr1[$v['bh']]/11*0.6*$v['达标定额']*$v['Rate']*0.5/1000*$v['千件工价'];
+                
+            if(array_key_exists($v['bh'].'-'.$v['sczl_rq'],$brr)){
+                $brr[$v['bh'].'-'.$v['sczl_rq']] += $a;
+            }else{
+                $brr[$v['bh'].'-'.$v['sczl_rq']] = $a;
+            }
+        }
+        $data = [];
         foreach($gz as $v){
-           $data[$v['bh']][$v['sczl_rq']]=$v;
+            $data[$v['被关联员工']][$v['日期']]['个人计件工资'] = (float) $v['个人计件工资'];
+            $data[$v['被关联员工']][$v['日期']]['个人加班工资'] = (float) $v['个人加班工资'];
+            $data[$v['被关联员工']][$v['日期']]['姓名'] = $v['姓名'];
+            
+            $data[$v['被关联员工']][$v['日期']]['定额补差'] = array_key_exists($v['bh'].'-'.$v['日期'],$brr) ? floatval(number_format($brr[$v['bh'].'-'.$v['日期']],2)) : 0;
+            if(array_key_exists($v['bh'].'-'.$v['日期'],$list)){
+                $data[$v['被关联员工']][$v['日期']]['计时工资'] = floatval(number_format(($v['异常停机工时'] + $list[$v['bh'].'-'.$v['日期']]['异常停机工时'])*9.5,2));
+                unset($list[$v['bh'].'-'.$v['日期']]);
+            }else{
+                $data[$v['被关联员工']][$v['日期']]['计时工资'] = floatval(number_format($v['异常停机工时']*9.5,2));
+            }
         }
+        foreach($list as $v){
+            if(array_key_exists($v['bh'],$data) && array_key_exists($v['日期'],$data[$v['bh']])){
+                $data[$v['bh']][$v['日期']]['计时工资'] += floatval(number_format($v['异常停机工时']*9.5,2));
+            }else{
+                $data[$v['bh']][$v['日期']]['姓名'] = $v['姓名'];
+                $data[$v['bh']][$v['日期']]['个人计件工资'] = 0;
+                $data[$v['bh']][$v['日期']]['个人加班工资'] = 0;
+                $data[$v['bh']][$v['日期']]['定额补差'] = 0;
+                $data[$v['bh']][$v['日期']]['计时工资'] = floatval(number_format($v['异常停机工时']*9.5,2));
+            }
+        }
+        
         $res=db('人事_关联工资设置')
             ->join('人事_基本资料','人事_基本资料.员工编号=人事_关联工资设置.关联员工','LEFT')
             ->field('DATE_FORMAT(日期,"%Y.%m.%d") as 日期,关联员工 as 员工编号,rtrim(人事_基本资料.员工姓名) as 员工姓名,
             rtrim(人事_基本资料.职称职务) as 职称职务,rtrim(人事_基本资料.所在部门) as 所在部门,被关联员工,权重')
             ->group('LEFT(日期, 10),被关联员工')
             ->where(['日期'=>['between',"$start_time,$end_time"],'关联员工'=>$req['code']])
-            ->order('关联员工,日期')
+            ->order('关联员工,日期,被关联员工')
             ->select();
-        if(!$res){
-            $this->error('失败');
-        }
-         foreach($res as &$v){
+
+         foreach($res as $k=>&$v){
             if(isset($data[$v['被关联员工']][$v['日期']])){
                 $v['被关联姓名']=$data[$v['被关联员工']][$v['日期']]['姓名'];
                 $v['计件工资']=$data[$v['被关联员工']][$v['日期']]['个人计件工资'];
                 $v['加班工资']=$data[$v['被关联员工']][$v['日期']]['个人加班工资'];
                 $v['定额补差']=$data[$v['被关联员工']][$v['日期']]['定额补差'];
-                $v['计时工资']=floatval(number_format($data[$v['被关联员工']][$v['日期']]['计时工资']*9.5,2));
+                $v['计时工资']=$data[$v['被关联员工']][$v['日期']]['计时工资'];
             }else{
-                $v['被关联姓名']='';
-                $v['计件工资']='';
-                $v['加班工资']='';
-                $v['定额补差']='';
-                $v['计时工资']='';
+                unset($res[$k]);
             }
         }
+        $res = array_values($res);
         $this->success('成功',$res);
     }
      /**
@@ -260,13 +489,109 @@ class RelatedSalaryAccounting extends Api
         $gz = db('人事_关联工资设置')->alias('r')
             ->join('绩效工资汇总 j', 'r.被关联员工 = j.bh AND r.日期 = j.sczl_rq')
             ->join('人事_基本资料 n', 'n.员工编号 = r.关联员工')
-            ->field('r.关联员工, j.bh, sum(j.个人计件工资) as 个人计件工资, sum(j.个人加班工资) as 个人加班工资,
-            sum(j.装版工时,j.保养工时,j.打样工时) as 定额补差, sum(j.异常停机工时) as 计时工资, DATE_FORMAT(j.sczl_rq,"%Y.%m.%d") as 日期')
             ->where('r.日期', 'between', [$start_time, $end_time])
             ->where('n.所在部门', 'like', $req['department'] . '%')
             ->where('r.关联员工', 'like', '%' . $req['search'] . '%')
             ->group('LEFT(j.sczl_rq, 10), j.bh')
+            ->column('CONCAT(j.bh, "-", DATE_FORMAT(j.sczl_rq,"%Y.%m.%d")) AS rq_bh,r.关联员工, j.bh, sum(j.个人计件工资) as 个人计件工资, sum(j.个人加班工资) as 个人加班工资,
+            sum(j.异常停机工时) as 异常停机工时, DATE_FORMAT(j.sczl_rq,"%Y.%m.%d") as 日期');
+        $arr = [];
+        $columns = ['wgjs_bh1', 'wgjs_bh2', 'wgjs_bh3', 'wgjs_bh4', 'wgjs_bh5', 'wgjs_bh6'];
+        for ($i = 1; $i <= 6; $i++) {
+            $column = $columns[$i-1];
+            $r = db('db_wgjs')
+                ->field("DATE_FORMAT(wgjs_rq,'%Y.%m.%d') as wgjs_rq, $column as wgjs_bh, 人事_关联工资设置.关联员工, wgjs_js$i as wgjs_js, wgjs_冲定额$i as wgjs_冲定额")
+                ->join('人事_关联工资设置', "人事_关联工资设置.被关联员工=db_wgjs.$column and 人事_关联工资设置.日期 = db_wgjs.wgjs_rq")
+                ->join('人事_基本资料', "人事_基本资料.员工编号=人事_关联工资设置.关联员工")
+                ->where(['人事_关联工资设置.日期' => ['between', "$start_time,$end_time"], '人事_基本资料.所在部门' => ['like', $req['department'] . '%']])
+                ->select();
+            // $r = db('db_wgjs')
+            //     ->field("DATE_FORMAT(wgjs_rq,'%Y.%m.%d') as wgjs_rq, $column as wgjs_bh, 人事_关联工资设置.关联员工, wgjs_js$i as wgjs_js, wgjs_冲定额$i as wgjs_冲定额")
+            //     ->join('人事_基本资料', "人事_基本资料.员工编号=db_wgjs.$column")
+            //     ->join('人事_关联工资设置', "人事_关联工资设置.被关联员工=db_wgjs.$column and 人事_关联工资设置.日期 = db_wgjs.wgjs_rq")
+            //     ->where(['wgjs_rq' => ['between', "$start_time,$end_time"], '人事_基本资料.所在部门' => ['like', $req['department'] . '%']])
+            //     ->select();
+            $arr = array_merge($arr, $r);
+        }
+        
+        //wgjs员工每日时长统计
+        $list = [];
+        foreach($arr as $v){
+            if(isset($list[$v['wgjs_bh'].'-'.$v['wgjs_rq']])){
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['异常停机工时']+=$v['wgjs_js'];
+            }else{
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['关联员工']=$v['关联员工'];
+                $list[$v['wgjs_bh'].'-'.$v['wgjs_rq']]['bh']=$v['wgjs_bh'];
+                $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']]['日期']=$v['wgjs_rq'];
+            }
+        };
+        
+        //wgjs员工冲定额时长统计
+        $list1 = [];
+        foreach($arr as $v){
+            if(isset($list1[$v['wgjs_bh']])){
+                if($v['wgjs_冲定额']=='是'){
+                    $list1[$v['wgjs_bh']] += $v['wgjs_js'];
+                }
+            }else{
+                if($v['wgjs_冲定额']=='是'){
+                    $list1[$v['wgjs_bh']] = $v['wgjs_js'];
+                }else{
+                    $list1[$v['wgjs_bh']] = 0;
+                }
+            }
+        };
+
+        //获取每个员工计时补差天数
+        $arr1 = db('绩效工资汇总')->alias('j')
+            ->field('j.bh,j.sczl_rq')
+            ->join('人事_基本资料 r','r.员工编号=j.bh')
+            ->group('j.bh,j.sczl_rq')
+            ->where('j.sys_ny',$req['date'])
+            ->where('j.达标定额','<>',0)
+            ->where(['r.所在部门'=>['like',$req['department'].'%']])
+            ->buildSql();
+        $arr1 = db()->table($arr1 . ' t')
+            ->group('t.bh, LEFT(t.sczl_rq, 7)')
+            ->column('t.bh,count(LEFT(t.sczl_rq, 7)) as num');
+
+        //查询该员工当月停机工时
+        $res1=db('绩效工资汇总')
+            ->join('人事_基本资料','人事_基本资料.员工编号=绩效工资汇总.bh')
+            ->group('绩效工资汇总.bh,LEFT(sczl_rq, 7)')
+            ->where('sys_ny',$req['date'])
+            ->where(['人事_基本资料.所在部门'=>['like',$req['department'].'%']])
+            ->column('bh, sum(异常停机工时) as 计时时数');
+
+        //查询每条记录
+        $arr2 = db('绩效工资汇总')->alias('j')
+            ->field('j.bh, DATE_FORMAT(j.sczl_rq,"%Y.%m.%d") as sczl_rq,
+            sum(j.达标定额) as 达标定额, j.Rate, j.千件工价, sum(j.异常停机工时) as 异常停机工时')
+            ->join('人事_基本资料 r','r.员工编号=j.bh')
+            ->where('j.sys_ny',$req['date'])
+            ->where('j.达标定额','<>',0)
+            ->where(['r.所在部门'=>['like',$req['department'].'%']])
+            ->group('j.bh,j.sczl_rq,j.sczl_gdbh')
             ->select();
+            
+        //计算每条记录的计时补差
+        $brr = [];
+        foreach($arr2 as $v){
+            $yjsss1 = array_key_exists($v['bh'],$list1) ? $list1[$v['bh']] : 0;
+            $yjsss2 = array_key_exists($v['bh'],$res1) ? $res1[$v['bh']] : 0;
+            $yjsss = $yjsss1 + $yjsss2;
+
+            $a = $yjsss/$arr1[$v['bh']]/11*0.6*$v['达标定额']*$v['Rate']*0.5/1000*$v['千件工价'];
+                
+            if(array_key_exists($v['bh'].'-'.$v['sczl_rq'],$brr)){
+                $brr[$v['bh'].'-'.$v['sczl_rq']] += $a;
+            }else{
+                $brr[$v['bh'].'-'.$v['sczl_rq']] = $a;
+            }
+        }
 
         $data = [];
         foreach($gz as $v){
@@ -280,37 +605,52 @@ class RelatedSalaryAccounting extends Api
             }
             $data[$v['关联员工']][$v['日期']]['个人计件工资'] += (float) $v['个人计件工资'];
             $data[$v['关联员工']][$v['日期']]['个人加班工资'] += (float) $v['个人加班工资'];
-            $data[$v['关联员工']][$v['日期']]['定额补差'] += (float) $v['定额补差'];
-            $data[$v['关联员工']][$v['日期']]['计时工资'] += (float) $v['计时工资'];
+            
+            $data[$v['关联员工']][$v['日期']]['定额补差'] += array_key_exists($v['bh'].'-'.$v['日期'],$brr) ? floatval(number_format($brr[$v['bh'].'-'.$v['日期']],2)) : 0;
+            if(array_key_exists($v['bh'].'-'.$v['日期'],$list)){
+                $data[$v['关联员工']][$v['日期']]['计时工资'] += floatval(number_format(($v['异常停机工时'] + $list[$v['bh'].'-'.$v['日期']]['异常停机工时'])*9.5,2));
+                unset($list[$v['bh'].'-'.$v['日期']]);
+            }else{
+                $data[$v['关联员工']][$v['日期']]['计时工资'] += floatval(number_format($v['异常停机工时']*9.5,2));
+            }
+        }
+        foreach($list as $v){
+            if(array_key_exists($v['关联员工'],$data) && array_key_exists($v['日期'],$data[$v['关联员工']])){
+                $data[$v['关联员工']][$v['日期']]['计时工资'] += floatval(number_format($v['异常停机工时']*9.5,2));
+            }else{
+                $data[$v['关联员工']][$v['日期']]['个人计件工资'] = 0;
+                $data[$v['关联员工']][$v['日期']]['个人加班工资'] = 0;
+                $data[$v['关联员工']][$v['日期']]['定额补差'] = 0;
+                $data[$v['关联员工']][$v['日期']]['计时工资'] = floatval(number_format($v['异常停机工时']*9.5,2));
+            }
+            
         }
+
         $res=db('人事_关联工资设置')
             ->join('人事_基本资料','人事_基本资料.员工编号=人事_关联工资设置.关联员工','LEFT')
             ->field('关联员工 as 员工编号,rtrim(人事_基本资料.员工姓名) as 员工姓名,rtrim(人事_基本资料.职称职务) as 职称职务,
             rtrim(人事_基本资料.所在部门) as 所在部门,DATE_FORMAT(日期,"%Y.%m.%d") as 日期,关联系数,count(被关联员工) as 关联人数')
             ->group('LEFT(日期, 10),关联员工')
-            ->where(['日期'=>['between',"$start_time,$end_time"],'关联员工'=>$req['search']])
+            ->where(['日期'=>['between',"$start_time,$end_time"],'关联员工'=>['like','%' . $req['search'] . '%'],'人事_基本资料.所在部门'=>['like',$req['department'].'%']])
             ->order('关联员工,日期')
             ->select();
-        foreach($res as &$v){
+        foreach($res as $k=>&$v){
             if(isset($data[$v['员工编号']][$v['日期']])){
                 $v['关联计件工资'] = floatval(number_format($data[$v['员工编号']][$v['日期']]['个人计件工资']/$v['关联人数']*$v['关联系数'],2));
                 $v['关联加班工资'] = floatval(number_format($data[$v['员工编号']][$v['日期']]['个人加班工资']/$v['关联人数']*$v['关联系数'],2));
                 $v['关联定额补差'] = floatval(number_format($data[$v['员工编号']][$v['日期']]['定额补差']/$v['关联人数']*$v['关联系数'],2));
-                $v['关联计时工资'] = floatval(number_format($data[$v['员工编号']][$v['日期']]['计时工资']/$v['关联人数']*$v['关联系数']*9.5,2));
+                $v['关联计时工资'] = floatval(number_format($data[$v['员工编号']][$v['日期']]['计时工资']/$v['关联人数']*$v['关联系数'],2));
                 $v['关联工资合计'] = floatval(number_format(
                     ($data[$v['员工编号']][$v['日期']]['个人计件工资'] + 
                     $data[$v['员工编号']][$v['日期']]['个人加班工资'] +
                     $data[$v['员工编号']][$v['日期']]['定额补差'] + 
-                    $data[$v['员工编号']][$v['日期']]['计时工资']*9.5
+                    $data[$v['员工编号']][$v['日期']]['计时工资']
                     )/$v['关联人数']*$v['关联系数'],2));
             }else{
-                $v['关联计件工资'] = '';
-                $v['关联加班工资'] = '';
-                $v['关联定额补差'] = '';
-                $v['关联计时工资'] = '';
-                $v['关联工资合计'] = '';
+                unset($res[$k]);
             }
         }
+        $res = array_values($res);
         if($res===false){
             $this->error('失败');
         }