曹鹤洋 1 жил өмнө
parent
commit
3f735687ee

+ 45 - 26
application/api/controller/RelatedSalaryAccounting.php

@@ -253,47 +253,66 @@ class RelatedSalaryAccounting extends Api
             $this->error('请求方式错误');
         }
         $req = $this->request->param();
-        $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';
-        }
-        $gd = db()->table('工单_基本资料')->where('Gd_cpmc',$req['search'])->value('Gd_gdbh');
-        if($gd){
-            $req['search']=$gd;
-        }
-        $gz=db('绩效工资汇总')
-            ->cache(true,86400)
-            ->field('bh,rtrim(xm) as 姓名,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']])
+        $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';
+        
+        $gz = db('人事_关联工资设置')->alias('r')->cache(true,3600)
+            ->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')
             ->select();
+
+        $data = [];
         foreach($gz as $v){
-           $data[$v['bh']][$v['sczl_rq']]=$v;
+            if (!isset($data[$v['关联员工']][$v['日期']])) {
+                $data[$v['关联员工']][$v['日期']] = [
+                    '个人计件工资' => 0,
+                    '个人加班工资' => 0,
+                    '定额补差' => 0,
+                    '计时工资' => 0
+                ];
+            }
+            $data[$v['关联员工']][$v['日期']]['个人计件工资'] += (float) $v['个人计件工资'];
+            $data[$v['关联员工']][$v['日期']]['个人加班工资'] += (float) $v['个人加班工资'];
+            $data[$v['关联员工']][$v['日期']]['定额补差'] += (float) $v['定额补差'];
+            $data[$v['关联员工']][$v['日期']]['计时工资'] += (float) $v['计时工资'];
         }
         $res=db('人事_关联工资设置')->cache(true,86400)
             ->join('人事_基本资料','人事_基本资料.员工编号=人事_关联工资设置.关联员工','LEFT')
             ->field('关联员工 as 员工编号,rtrim(人事_基本资料.员工姓名) as 员工姓名,rtrim(人事_基本资料.职称职务) as 职称职务,
-            人事_基本资料.所在部门,DATE_FORMAT(日期,"%Y.%m.%d") as 日期,关联系数,count(被关联员工) as 关联人数')
+            rtrim(人事_基本资料.所在部门) as 所在部门,DATE_FORMAT(日期,"%Y.%m.%d") as 日期,关联系数,count(被关联员工) as 关联人数')
             ->group('LEFT(日期, 10),关联员工')
             ->where(['日期'=>['between',"$start_time,$end_time"],'关联员工'=>$req['search']])
             ->order('关联员工,日期')
             ->select();
         foreach($res as &$v){
             if(isset($data[$v['员工编号']][$v['日期']])){
-                $v['个人计件工资']=$data[$v['员工编号']][$v['日期']]['个人计件工资'];
-                $v['个人加班工资']=$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['日期']]['个人计件工资'] + 
+                    $data[$v['员工编号']][$v['日期']]['个人加班工资'] +
+                    $data[$v['员工编号']][$v['日期']]['定额补差'] + 
+                    $data[$v['员工编号']][$v['日期']]['计时工资']*9.5
+                    )/$v['关联人数']*$v['关联系数'],2));
             }else{
-                $v['个人计件工资']='';
-                $v['个人加班工资']='';
+                $v['关联计件工资'] = '';
+                $v['关联加班工资'] = '';
+                $v['关联定额补差'] = '';
+                $v['关联计时工资'] = '';
+                $v['关联工资合计'] = '';
             }
         }
-        if(!$res){
+        if($res===false){
             $this->error('失败');
         }
         $this->success('成功',$res);