success('请求成功'); } /** * 关联工资核算侧边栏 * @ApiMethod (GET) */ public function getTab() { //get请求 if(!$this->request->isGet()){ $this->error('请求方式错误'); } $rows = db('人事_关联工资设置')->alias('g') ->join('人事_基本资料 j', 'g.关联员工 = j.员工编号') ->field('DATE_FORMAT(g.日期,"%Y%m") as 日期, trim(j.所在部门) as 所在部门,j.部门编码') ->group('DATE_FORMAT(g.日期,"%Y%m"), j.所在部门') ->buildSql(); $rows = db()->table($rows . ' t') ->field('t.日期, t.所在部门') ->group('t.日期, t.所在部门') ->order('t.日期 desc, t.部门编码 asc') ->select(); $result = []; foreach ($rows as $row) { $date = $row['日期']; $department = $row['所在部门']; if (!isset($result[$date])) { $result[$date] = [ 'label' => $date, 'children' => [], ]; } $result[$date]['children'][] = [ 'label' => $department, 'rq' => $date, ]; } $result = array_values($result); $this->success('成功',$result); } /** * 关联工资核算上侧列表 * @ApiMethod (GET) * @param string $date 年月 * @param string $department 部门 */ public function getList() { //get请求 if(!$this->request->isGet()){ $this->error('请求方式错误'); } $req = $this->request->param(); $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') ->join('绩效工资汇总 j', 'r.被关联员工 = j.bh AND r.日期 = j.sczl_rq') ->join('人事_基本资料 n', 'n.员工编号 = r.关联员工') ->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['日期']])) { $data[$v['关联员工']][$v['日期']] = [ '个人计件工资' => 0, '个人加班工资' => 0, '定额补差' => 0, '计时工资' => 0 ]; } $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"],'人事_基本资料.所在部门'=>['like',$req['department'].'%']]) ->order('关联员工,日期') ->select(); 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['关联系数'],2, '.', '')); $v['关联工资合计'] = floatval(number_format( ($data[$v['员工编号']][$v['日期']]['个人计件工资'] + $data[$v['员工编号']][$v['日期']]['个人加班工资'] + $data[$v['员工编号']][$v['日期']]['定额补差'] + $data[$v['员工编号']][$v['日期']]['计时工资'] )/$v['关联人数']*$v['关联系数'],2, '.', '')); }else{ unset($res[$k]); } } $res = array_values($res); if($res===false){ $this->error('失败'); } $this->success('成功',$res); } /** * 关联工资核算下侧列表 * @ApiMethod (GET) * @param string $date 年月 * @param string $code 员工编号 */ public function getAllList() { //get请求 if(!$this->request->isGet()){ $this->error('请求方式错误'); } $req = $this->request->param(); $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') ->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['被关联员工']][$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('关联员工,日期,被关联员工') ->select(); 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['计时工资']=$data[$v['被关联员工']][$v['日期']]['计时工资']; }else{ unset($res[$k]); } } $res = array_values($res); $this->success('成功',$res); } /** * 关联工资核算详情 * @ApiMethod (GET) * @param string $date 日期 * @param string $code 员工编号 */ public function getDetail() { //get请求 if(!$this->request->isGet()){ $this->error('请求方式错误'); } $req = $this->request->param(); $start_time=$req['date'].' 00:00:00'; $end_time=$req['date'].' 23:59:59'; $gz=db('绩效工资汇总') ->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(['sczl_rq'=>$start_time]) ->select(); foreach($gz as $v){ $data[$v['bh']][$v['sczl_rq']]=$v; } $res=db('人事_关联工资设置') ->join('人事_基本资料','人事_基本资料.员工编号=人事_关联工资设置.关联员工','LEFT') ->field('DATE_FORMAT(日期,"%Y.%m.%d") as 日期,关联员工 as 员工编号,rtrim(人事_基本资料.员工姓名) as 员工姓名, rtrim(人事_基本资料.职称职务) as 职称职务,人事_基本资料.所在部门,被关联员工,权重') ->group('LEFT(日期, 10),被关联员工') ->where(['日期'=>['between',"$start_time,$end_time"],'关联员工'=>$req['code']]) ->order('关联员工,日期') ->select(); if(!$res){ $this->error('失败'); } foreach($res as &$v){ if(isset($data[$v['被关联员工']][$v['日期']])){ $v['被关联姓名']=$data[$v['被关联员工']][$v['日期']]['姓名']; $v['个人计件工资']=$data[$v['被关联员工']][$v['日期']]['个人计件工资']; $v['个人加班工资']=$data[$v['被关联员工']][$v['日期']]['个人加班工资']; }else{ $v['个人计件工资']=''; $v['个人加班工资']=''; } } $this->success('成功',$res); } /** * 定位 * @ApiMethod GET */ public function search(){ //get请求 if(!$this->request->isGet()){ $this->error('请求方式错误'); } $req = $this->request->param(); $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') ->join('绩效工资汇总 j', 'r.被关联员工 = j.bh AND r.日期 = j.sczl_rq') ->join('人事_基本资料 n', 'n.员工编号 = r.关联员工') ->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){ 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['日期']]['定额补差'] += 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"],'关联员工'=>['like','%' . $req['search'] . '%'],'人事_基本资料.所在部门'=>['like',$req['department'].'%']]) ->order('关联员工,日期') ->select(); 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['关联系数'],2, '.', '')); $v['关联工资合计'] = floatval(number_format( ($data[$v['员工编号']][$v['日期']]['个人计件工资'] + $data[$v['员工编号']][$v['日期']]['个人加班工资'] + $data[$v['员工编号']][$v['日期']]['定额补差'] + $data[$v['员工编号']][$v['日期']]['计时工资'] )/$v['关联人数']*$v['关联系数'],2, '.', '')); }else{ unset($res[$k]); } } $res = array_values($res); if($res===false){ $this->error('失败'); } $this->success('成功',$res); } /** * 关联工资设置 * @ApiMethod (GET) * @param string $date 日期 * @param string $code 员工编号 */ public function setting() { //get请求 if(!$this->request->isGet()){ $this->error('请求方式错误'); } $req = $this->request->param(); $start_time=$req['date'].' 00:00:00'; $end_time=$req['date'].' 23:59:59'; $data=db('绩效工资汇总') ->group('bh') ->where(['sczl_rq'=>$start_time]) ->column('bh,rtrim(xm) as 姓名,sum(个人计件工资) as 个人计件工资, sum(个人加班工资) as 个人加班工资'); $res = db('人事_关联工资设置')->alias('r') ->join('人事_基本资料 j1','j1.员工编号 = r.关联员工') ->join('人事_基本资料 j2','j2.员工编号 = r.被关联员工') ->field('DATE_FORMAT(r.日期,"%Y.%m.%d") as 日期, r.关联员工 as 关联人员工号, rtrim(j1.员工姓名) as 关联人员姓名, r.被关联员工 as 班组员工编号,rtrim(j2.员工姓名) as 被关联人员姓名, r.权重 as 组员权重,r.关联系数 as 日关联系数,r.UniqID') ->where(['r.日期'=>['between',"$start_time,$end_time"],'r.关联员工'=>$req['code']]) ->order('r.关联员工') ->select(); if($res===false){ $this->error('失败'); } foreach($res as &$v){ if(isset($data[$v['班组员工编号']])){ $v['计件工资基数'] = $data[$v['班组员工编号']]['个人计件工资']; $v['加班工资基数'] = $data[$v['班组员工编号']]['个人加班工资']; }else{ $v['计件工资基数'] = 0; $v['加班工资基数'] = 0; } $v['班组员工编号'] = $v['班组员工编号'].'('.$v['被关联人员姓名'].')'; $v['日关联人数'] = count($res); } $this->success('成功',$res); } /** * 更新关联系数 * @ApiMethod (GET) * @param string $date 日期 * @param string $code 员工编号 */ public function updateNum() { //get请求 if(!$this->request->isGet()){ $this->error('请求方式错误'); } $req = $this->request->param(); $req['date']=str_replace('.','-',$req['date']); $start_time=$req['date'].' 00:00:00'; // $sql=db()->table('人事_关联工资设置') // ->where(['日期'=>$start_time,'关联员工'=>$req['code']]) // ->fetchSql(true) // ->setField('关联系数',$req['num']); // Db::query($sql); $data['mod_rq'] = date('Y-m-d H:i:s'); $data['关联系数']=$req['num']; //开启事务 db()->startTrans(); try{ $sql = db()->table('人事_关联工资设置') ->where(['日期'=>$start_time,'关联员工'=>$req['code']]) ->fetchSql(true) ->update($data); $res = db()->query($sql); // 提交事务 db()->commit(); } catch (\Exception $e) { // 回滚事务 db()->rollback(); $this->error($e->getMessage()); } if($res===false) $this->error('失败'); $this->success('成功'); } /** * 关联组员权重查询 * @ApiMethod (GET) * @param string $date 日期 * @param string $code 员工编号 */ public function weightDetail() { //get请求 if(!$this->request->isGet()){ $this->error('请求方式错误'); } $req = $this->request->param(); $req['date']=str_replace('.','-',$req['date']); $start_time=$req['date'].' 00:00:00'; $end_time=$req['date'].' 23:59:59'; $res=db('人事_基本资料') ->join('人事_关联工资设置','人事_基本资料.员工编号=人事_关联工资设置.被关联员工','LEFT') ->join('人事_员工照片','人事_基本资料.照片ID=人事_员工照片.UniqId','LEFT') ->field('人事_关联工资设置.被关联员工 as 员工编号,rtrim(员工姓名) as 姓名,rtrim(所在部门) as 部门名称,人事_基本资料.职称职务 as 职务, DATE_FORMAT(聘用日期,"%Y.%m.%d") as 入职日期,权重 as 关联权重') ->group('被关联员工') ->where(['人事_关联工资设置.日期'=>['between',"$start_time,$end_time"],'人事_关联工资设置.被关联员工'=>$req['code']]) ->order('关联员工,日期') ->select(); if(!$res){ $this->error('失败'); } $this->success('成功',$res); } /** * 批量附加组员列表 * @ApiMethod (GET) * @param string $date 日期 * @param string $code 员工编号 */ public function batchAddLst() { //get请求 if(!$this->request->isGet()){ $this->error('请求方式错误'); } $req = $this->request->param(); $req['date']=str_replace('.','-',$req['date']); $start_time=$req['date'].' 00:00:00'; $end_time=$req['date'].' 23:59:59'; $res=db('绩效工资汇总')->alias('j') ->join('人事_基本资料 r','r.员工编号=j.bh') ->field('DATE_FORMAT(j.sczl_rq,"%Y.%m.%d") as 日期, trim(r.所在部门) as 所在部门,sczl_bzdh, trim(r.职称职务) as 职称职务, CONCAT(trim(j.xm),"(", j.bh, ")") as 班组员工编号, sum(j.个人计件工资) as 个人计件工资, sum(j.个人加班工资) as 个人加班工资, j.bh, j.UniqID') ->group('j.bh') ->where(['j.sczl_rq'=>['between',"$start_time,$end_time"]]) ->order('r.所在部门,r.所在部门,j.bh') ->select(); if($res===false){ $this->error('失败'); } $this->success('成功',$res); } /** * 批量附加组员定位 * @ApiMethod (GET) * @param string $date 日期 * @param string $search 员工编号 */ public function batchAddSearch() { //get请求 if(!$this->request->isGet()){ $this->error('请求方式错误'); } $req = $this->request->param(); $req['date']=str_replace('.','-',$req['date']); $start_time=$req['date'].' 00:00:00'; $end_time=$req['date'].' 23:59:59'; $gd = db('人事_基本资料')->where('员工姓名','like','%'.$req['search'].'%')->column('员工编号'); if($gd){ $where = [ 'j.sczl_rq'=>['between',"$start_time,$end_time"], 'j.bh'=>['in',$gd] ]; }else{ $where = [ 'j.sczl_rq'=>['between',"$start_time,$end_time"], 'j.bh'=>['like','%'.$req['search'].'%'] ]; } $res=db('绩效工资汇总')->alias('j') ->join('人事_基本资料 r','r.员工编号=j.bh') ->field('DATE_FORMAT(j.sczl_rq,"%Y.%m.%d") as 日期, trim(r.所在部门) as 所在部门,sczl_bzdh, trim(r.职称职务) as 职称职务, CONCAT(trim(j.xm),"(", j.bh, ")") as 班组员工编号, sum(j.个人计件工资) as 个人计件工资, sum(j.个人加班工资) as 个人加班工资, j.bh, j.UniqID') ->group('j.bh') ->where($where) ->order('r.所在部门,r.所在部门,j.bh') ->select(); if($res===false){ $this->error('失败'); } $this->success('成功',$res); } /** * 关联组员复制列表 * @ApiMethod (GET) * @param string $date 日期 */ public function copyLst() { //get请求 if(!$this->request->isGet()){ $this->error('请求方式错误'); } $req = $this->request->param(); $req['date']=str_replace('.','-',$req['date']); $start_time=$req['date'].' 00:00:00'; $end_time=$req['date'].' 23:59:59'; $res=db('人事_关联工资设置') ->join('人事_基本资料','人事_基本资料.员工编号=人事_关联工资设置.关联员工','LEFT') ->field('关联员工 as 员工编号, trim(人事_基本资料.员工姓名) as 员工姓名, trim(人事_基本资料.所在部门) as 所在部门, trim(人事_基本资料.职称职务) as 职称职务,trim(人事_基本资料.UniqID) as UniqID') ->group('关联员工') ->where(['日期'=>['between',"$start_time,$end_time"]]) ->select(); if($res===false){ $this->error('失败'); } $this->success('成功',$res); } /** * 批量附加组员 * @ApiMethod POST * @params string UniqID */ public function batchAdd(){ if (Request::instance()->isPost() == false){ $this->error('非法请求'); } $params = Request::instance()->post(); if (!isset($params) || count($params)==0){ $this->error('参数不能为空'); } $date = date('Y-m-d H:i:s'); //查询当前最大id $UniqID = db('人事_关联工资设置')->order('UniqID desc')->limit(1)->value('UniqID'); $i = 1; $rows = []; foreach($params as $k=>$v){ //查询当天此关联用户是否已经绑定过此被关联用户 $bool = db('人事_关联工资设置') ->where(['日期'=>$v['date'].' 00:00:00','关联员工'=>$v['关联员工'],'被关联员工'=>$v['被关联员工']]) ->find(); if($bool) continue; $rows[$k] = [ 'sys_id' => $v['sys_id'], '日期' => $v['date'].' 00:00:00', '关联员工' => $v['关联员工'], '关联系数' => $v['关联系数'], '被关联员工' => $v['被关联员工'], '权重' => 1.00, 'sys_rq' => $date, 'UniqID' => $UniqID+$i, ]; $i++; } if(!count($rows)) $this->success('成功'); //开启事务 db()->startTrans(); try{ $sql=db()->table('人事_关联工资设置') ->fetchSql(true) ->insertAll($rows); $res=db()->query($sql); // 提交事务 db()->commit(); } catch (\Exception $e) { // 回滚事务 db()->rollback(); $this->error($e->getMessage()); } if($res===false) $this->error('失败'); $this->success('成功'); } /** * 批量删除组员 * @ApiMethod POST * @params string UniqID */ public function batchDel(){ if (Request::instance()->isPost() == false){ $this->error('非法请求'); } $params = Request::instance()->post(); if (!isset($params) || !isset($params[0]['UniqID'])){ $this->error('参数不能为空'); } //开启事务 db()->startTrans(); try{ foreach($params as $k=>$v){ $sql=db('人事_关联工资设置') ->where(['UniqID'=>$v['UniqID']]) ->fetchSql(true) ->delete($v); $res=db()->query($sql); } // 提交事务 db()->commit(); } catch (\Exception $e) { // 回滚事务 db()->rollback(); $this->error($e->getMessage()); } if($res===false) $this->error('失败'); $this->success('成功'); } /** * 关联组员复制 * @ApiMethod POST * @params string UniqID */ public function copy(){ if (Request::instance()->isPost() == false){ $this->error('非法请求'); } $params = Request::instance()->post(); if (!isset($params) || !isset($params[0])){ $this->error('参数不能为空'); } //开启事务 db()->startTrans(); try{ foreach($params as $v){ $v['old_time']=str_replace('.','-',$v['old_time']).' 00:00:00'; $v['new_time']=str_replace('.','-',$v['new_time']).' 00:00:00'; db()->table('人事_关联工资设置') ->where(['关联员工'=>$v['关联员工'],'日期'=>$v['new_time']]) ->delete(); $data=db('人事_关联工资设置') ->field('关联员工,关联系数,被关联员工,权重') ->where(['关联员工'=>$v['关联员工'],'日期'=>$v['old_time']]) ->select(); $id=db('人事_关联工资设置')->order('UniqID desc')->limit(1)->value('UniqID'); $i=1; foreach($data as &$value){ $value['sys_id']=$v['sys_id']; $value['日期']=$v['new_time']; $value['UniqID']=$i+$id; $value['sys_rq']=date('Y-m-d H:i:s'); $i++; } $sql=db()->table('人事_关联工资设置') ->fetchSql(true) ->insertAll($data); $res=Db::query($sql); } // 提交事务 db()->commit(); } catch (\Exception $e) { // 回滚事务 db()->rollback(); $this->error($e->getMessage()); } if($res===false) $this->error('失败'); $this->success('成功'); } }