input('type/d',0), 'month' => input('month','','trim'), 'types' => input('types','','trim'), 'remark' => input('remark','','trim'), 'user_id' => input('userId/d',0), 'users' => input('users','','trim') ]; $orgId = input('orgId/d',0); $result = validate('SalaryRecord')->check($data,[],''); if(true !== $result){ HelpHander::error(validate('SalaryRecord')->getError()); } // 检查是否已设置审批流程 $apply = model('SalaryApply')->all2($data['type']); if(!$apply){ HelpHander::error('该类型工资的发放未设置审批节点'); } $curinfo = $apply[0]; $data['apply'] = json_encode($apply); $data['cur_node'] = $curinfo['id']; Db::startTrans(); try{ $users = json_decode($data['users'],true); unset($data['users']); $sdata = $data; $sdata['nums'] = count($users); $sdata['create_time'] = date('Y-m-d H:i:s'); $salaryId = Db::name('SalaryRecord')->insertGetId($sdata); if(!$salaryId){ \exception('操作失败'); } $data['users'] = $users; $data['salary_record_id'] = $salaryId; if($data['type'] == 5){ //1=中心编制 2=新华聘用 3=中心劳务 4=新华劳务 5=中心退休 $ret = model('UserRetiredSalary')->sendSalary($data); }else if(in_array($data['type'],[1,2,3,4])){ $ret = model('SalaryRecord')->sendSalary($data); } else{ // 年绩效 6=中心编制 7=新华聘用 8=中心劳务 9=新华劳务 $ret = model('SalaryRecord')->sendSalaryJx($data); } if(!$ret){ \exception('操作失败'); } // 生成审核记录 $uids = explode(',',$curinfo['userids']); foreach ($uids as $k=>$v){ $sd = [ 'salary_record_id' => $salaryId, 'user_id' => $v, 'status' => 0, 'create_time' => date('Y-m-d H:i:s'), 'salary_apply_id' => $curinfo['id'], 'sign' => $curinfo['sign'], ]; $ret = Db::name('salary_apply_record')->insertGetId($sd); if(!$ret){ \exception('操作失败'); } model('Message')->add(3,$salaryId,12,$v,$orgId,'工资流程待您的审核确认'); } if(!$ret){ \exception('操作失败'); } Db::commit(); }catch (Exception $e){ Db::rollback(); HelpHander::error($e->getMessage()); } return true; } // 重新发工资 public function resend(){ $salaryRecordId = input('salaryRecordId/d',0); $id = input('id/d',0); $users = input('users','','trim'); $userId = input('userId/d',0); $info = Db::name('salary_record')->where('id',$salaryRecordId)->where('del',0)->find(); if(!$info){ HelpHander::error('记录不存在'); } if($info['status'] != 0 && $info['status'] != 3){ //审核中或已打回 HelpHander::error('无权限操作'); } if($info['status'] == 3 && $info['user_id'] != $userId){ HelpHander::error('无权限操作'); } if($info['status'] == 0){ $sar = Db::name('salary_apply_record') ->where('salary_apply_id',$info['cur_node']) ->where('salary_record_id',$salaryRecordId) ->where('user_id',$userId) ->where('status',0) ->where('del',0) ->find(); if(!$sar){ HelpHander::error('无权限修改3'); } } $users = json_decode($users,true); if(!$users){ HelpHander::error('参数错误'); } Db::startTrans(); try{ if($info['type'] === 5){ $ret = model('UserRetiredSalary')->sendOneSalary($users[0],$info,$id); }else if(in_array($info['type'],[1,2,3,4])){ $ret = model('SalaryRecord')->sendOneSalary($users[0],$info,$id); }else{ $ret = model('SalaryRecord')->sendOneSalaryJx($users[0],$info,$id); } if(!$ret){ \exception('操作失败'); } Db::commit(); }catch (Exception $e){ Db::rollback(); HelpHander::error($e->getMessage()); } return true; } // 删除工资项 public function delsalary(){ $salaryRecordId = input('salaryRecordId/d',0); $tids = input('tids','','trim'); if(!$tids){ HelpHander::error('未选择要删除的工资项'); } $tids = array_unique(explode(',',$tids)); $userId = input('userId/d',0); $orgId = input('orgId/d',0); $info = Db::name('salary_record')->where('id',$salaryRecordId)->where('del',0)->find(); if(!$info){ HelpHander::error('记录不存在'); } if($info['status'] != 0 && $info['status'] != 3){ //审核中或已打回 HelpHander::error('无权限操作'); } if(!$info['types']){ HelpHander::error('无可删除工资项'); } if($info['status'] == 0){ $sar = Db::name('salary_apply_record') ->where('salary_apply_id',$info['cur_node']) ->where('salary_record_id',$salaryRecordId) ->where('user_id',$userId) ->where('status',0) ->where('del',0) ->find(); if(!$sar){ HelpHander::error('无权限修改'); } } $ntypes = []; $otypes = explode(',',$info['types']); foreach ($otypes as $v){ if(!in_array($v,$tids)){ $ntypes[] = $v; } } $info['types'] = !empty($ntypes)?implode(',',$ntypes):''; Db::startTrans(); try{ // 更新工资项 $ret = Db::name('salary_record')->where('id',$salaryRecordId)->update([ 'types' => $info['types'], ]); if(!$ret){ \exception('操作失败'); } // 重新计算每个人的工资 $logs = Db::name('salary_record_log')->where('salary_record_id',$salaryRecordId)->field('id,user_id')->select(); foreach ($logs as $k=>$v){ $rdata = array_change_line_to_hump($this->reloadAdd($salaryRecordId,$v['user_id'],$orgId,0)); $types = $rdata['types']; $users = $rdata['list']; foreach ($users as $uk=>$uv){ foreach ($types as $tk=>$tv){ if(in_array($tv['id'],$tids)){ unset($users[$uk]['subsidies'.$tv['id']]); } } } if($info['type'] === 5){ $ret = model('UserRetiredSalary')->sendOneSalary($users[0],$info,$v['id']); }else if(in_array($info['type'],[1,2,3,4])){ $ret = model('SalaryRecord')->sendOneSalary($users[0],$info,$v['id']); }else{ $ret = model('SalaryRecord')->sendOneSalaryJx($users[0],$info,$v['id']); } if(!$ret){ \exception('操作失败'); } } Db::commit(); }catch (Exception $e){ Db::rollback(); HelpHander::error($e->getMessage()); } return true; } // 添加工资项 public function addsalary(){ $salaryRecordId = input('salaryRecordId/d',0); $tids = input('tids','','trim'); if(!$tids){ HelpHander::error('未选择要添加的工资项'); } $tids = array_unique(explode(',',$tids)); $userId = input('userId/d',0); $orgId = input('orgId/d',0); $info = Db::name('salary_record')->where('id',$salaryRecordId)->where('del',0)->find(); if(!$info){ HelpHander::error('记录不存在'); } if($info['status'] != 0 && $info['status'] != 3){ //审核中或已打回 HelpHander::error('无权限操作'); } if($info['status'] == 0){ $sar = Db::name('salary_apply_record') ->where('salary_apply_id',$info['cur_node']) ->where('salary_record_id',$salaryRecordId) ->where('user_id',$userId) ->where('status',0) ->where('del',0) ->find(); if(!$sar){ HelpHander::error('无权限修改'); } } $postusers = input('users','','trim'); $postusers = json_decode($postusers,true); if(!$postusers){ HelpHander::error('参数错误'); } $otypes = explode(',',$info['types']); if(array_intersect($tids,$otypes)){ // 有交集说明参数错误 HelpHander::error('部分工资项已存在,不能添加'); } $ntypes = $otypes; foreach ($tids as $v){ if(!in_array($v,$otypes)){ $ntypes[] = $v; } } $info['types'] = !empty($ntypes)?implode(',',$ntypes):''; Db::startTrans(); try{ // 更新工资项 $ret = Db::name('salary_record')->where('id',$salaryRecordId)->update([ 'types' => $info['types'], ]); if(!$ret){ \exception('操作失败'); } // 重新计算每个人的工资 $logs = Db::name('salary_record_log')->where('salary_record_id',$salaryRecordId)->field('id,user_id')->select(); foreach ($logs as $k=>$v){ $rdata = array_change_line_to_hump($this->reloadAdd($salaryRecordId,$v['user_id'],$orgId,0)); $users = $rdata['list']; foreach ($users as $uk=>$uv){ $userSn = think_encrypt($uv['userId']); foreach ($tids as $tk=>$tv){ foreach ($postusers as $puk=>$puv){ if($userSn == $puv['userSn']){ $users[$uk]['subsidies'.$tv] = !empty($puv['subsidies'.$tv])?$puv['subsidies'.$tv]:0; break; } } } } if($info['type'] === 5){ $ret = model('UserRetiredSalary')->sendOneSalary($users[0],$info,$v['id']); }else if(in_array($info['type'],[1,2,3,4])){ $ret = model('SalaryRecord')->sendOneSalary($users[0],$info,$v['id']); }else{ $ret = model('SalaryRecord')->sendOneSalaryJx($users[0],$info,$v['id']); } if(!$ret){ \exception('操作失败'); } } Db::commit(); }catch (Exception $e){ Db::rollback(); HelpHander::error($e->getMessage()); } return true; } // 修改工资项 public function modifysalary(){ $salaryRecordId = input('salaryRecordId/d',0); $tids = input('tids','','trim'); if(!$tids){ HelpHander::error('未选择要修改的工资项'); } $tids = array_unique(explode(',',$tids)); $userId = input('userId/d',0); $orgId = input('orgId/d',0); $info = Db::name('salary_record')->where('id',$salaryRecordId)->where('del',0)->find(); if(!$info){ HelpHander::error('记录不存在'); } if($info['status'] != 0 && $info['status'] != 3){ //审核中或已打回 HelpHander::error('无权限操作'); } if($info['status'] == 0){ $sar = Db::name('salary_apply_record') ->where('salary_apply_id',$info['cur_node']) ->where('salary_record_id',$salaryRecordId) ->where('user_id',$userId) ->where('status',0) ->where('del',0) ->find(); if(!$sar){ HelpHander::error('无权限修改'); } } $postusers = input('users','','trim'); $postusers = json_decode($postusers,true); if(!$postusers){ HelpHander::error('参数错误'); } $otypes = explode(',',$info['types']); if(array_intersect($tids,$otypes) != $tids){ // 不是子集 HelpHander::error('修改的工资项不存在'); } Db::startTrans(); try{ // 重新计算每个人的工资 $logs = Db::name('salary_record_log')->where('salary_record_id',$salaryRecordId)->field('id,user_id')->select(); foreach ($logs as $k=>$v){ $rdata = array_change_line_to_hump($this->reloadAdd($salaryRecordId,$v['user_id'],$orgId,0)); $users = $rdata['list']; foreach ($users as $uk=>$uv){ $userSn = think_encrypt($uv['userId']); foreach ($tids as $tk=>$tv){ foreach ($postusers as $puk=>$puv){ if($userSn == $puv['userSn']){ $users[$uk]['subsidies'.$tv] = !empty($puv['subsidies'.$tv])?$puv['subsidies'.$tv]:0; break; } } } } if($info['type'] === 5){ $ret = model('UserRetiredSalary')->sendOneSalary($users[0],$info,$v['id']); }else if(in_array($info['type'],[1,2,3,4])){ $ret = model('SalaryRecord')->sendOneSalary($users[0],$info,$v['id']); }else{ $ret = model('SalaryRecord')->sendOneSalaryJx($users[0],$info,$v['id']); } if(!$ret){ \exception('操作失败'); } } Db::commit(); }catch (Exception $e){ Db::rollback(); HelpHander::error($e->getMessage()); } return true; } // 重新计算个税 public function resendtax(){ $id = input('id/d',0); $userId = input('userId/d',0); $log = Db::name('salary_record_log')->where('id',$id)->find(); if(!$log){ HelpHander::error('记录不存在'); } $salaryRecordId = $log['salary_record_id']; $info = Db::name('salary_record')->where('id',$salaryRecordId)->where('del',0)->find(); if(!$info){ HelpHander::error('记录不存在'); } if($info['status'] != 0){ HelpHander::error('无权限操作'); } $sar = Db::name('salary_apply_record') ->where('salary_apply_id',$info['cur_node']) ->where('salary_record_id',$salaryRecordId) ->where('user_id',$userId) ->where('status',0) ->where('del',0) ->find(); if(!$sar){ HelpHander::error('无权限修改'); } if(!in_array($info['type'],[1,2])){ HelpHander::error('无权限修改'); } $sbdata = Db::name('salary_record_sb')->where('user_id',$log['user_id'])->where('salary_record_id',$salaryRecordId)->find(); $jbsalary = $log['gwgz'] + $log['xjgz'] + $log['jcjx'] + $log['yjx']; $srid = Db::name('salary_record') ->alias('sr') ->join('salary_record_special srs','srs.salary_record_id = sr.id') ->where('sr.month',$info['month']) ->where('srs.user_id',$log['user_id']) ->where('sr.type',$info['type']) ->where('sr.del',0) ->order('sr.id desc') ->value('sr.id'); $spdata = $this->getSalaryTax($log['should_total'],$sbdata,$log['user_id'],$log['company_id'],$info['month'],$info['type'],$jbsalary,$srid); // 计算个税 $tax = $spdata['tax']; if($tax == $log['tax']){ return true; } Db::startTrans(); try{ $salary = $log['salary'] - ($tax - $log['tax']); $sdata = [ 'tax' => $tax, 'salary' => $salary, ]; $ret = Db::name('salary_record_log')->where('id',$id)->update($sdata); if(!$ret){ \exception('操作失败'); } $spdata['salary_record_id'] = $salaryRecordId; $spdata['user_id'] = $log['user_id']; $m = intval(date('m',strtotime($info['month'].'-01'))); if($m == 1 && $spdata['type'] != 1){ // 一月的第一次发工资 $spdata['tax'] = 0; } $ret = Db::name('salary_record_special') ->where('salary_record_id',$salaryRecordId) ->where('user_id',$log['user_id']) ->strict(false) ->update($spdata); if(!$ret){ \exception('操作失败'); } Db::commit(); }catch (Exception $e){ Db::rollback(); HelpHander::error($e->getMessage()); } return true; } private function sendOneSalary($user,$data,$id){ $user['psmoney'] = (float)$user['psmoney']; $user['pwmoney'] = (float)$user['pwmoney']; $user['fixedPerformance'] = (float)$user['fixedPerformance']; $user['psmonth'] = (float)$user['psmonth']; $types = []; if($data['types']){ $types = Db::name('user_subsidies') ->where('id','in',$data['types']) ->where('del',0) ->order('sorts asc,id asc') ->select(); } if($data['type'] == 3||$data['type'] == 4){ // 劳务费 $sdata = [ 'salary_record_id' => $data['id'], 'user_id' => $user['userId'], 'gwgz' => $user['psmoney'], 'xjgz' => $user['pwmoney'], 'jcjx' => $user['fixedPerformance'], 'yjx' => $user['psmonth'], 'pwlevel' => $user['pwlevel'], 'psid' => $user['psid'], 'type' => $user['type'], 'company_id' => $user['companyId'], 'child' => 0 ]; $should_total = $user['psmoney'] + $user['pwmoney'] + $user['fixedPerformance'] + $user['psmonth']; $jbsalary = $should_total; $btjson = []; $kcsalary = 0; foreach ($user as $key=>$val){ if(strpos($key,'subsidies') === 0){ foreach ($types as $kk=>$vv){ if($vv['id'] == str_ireplace('subsidies','',$key)){ // $val = (float)$val > 0?(float)$val:0; // 不填或小于0的值默认成0 $val = (float)$val; // 支持负值 $btjson[] = [ 'id' => $vv['id'], 'cate' => $vv['cate'], 'title' => $vv['title'], 'money' => $val ]; if($vv['cate'] == 1){ // 补贴 $should_total += $val; }else{ $kcsalary += $val; } } } } } $sdata['should_total'] = $should_total; $sdata['tax'] = $this->getLaborTax($should_total,$user['userId']); $sdata['salary'] = round($should_total - $sdata['tax'] - $sdata['child'] - $kcsalary,2); if($sdata['salary'] < 0){ return false; } $sdata['btjson'] = json_encode($btjson,JSON_UNESCAPED_UNICODE); $res = Db::name('salary_record_log')->where('id',$id)->update($sdata); if($res === false){ return false; } }else if($data['type'] == 1||$data['type'] == 2){ // 新华聘算社保及累计数 $sdata = [ 'salary_record_id' => $data['id'], 'user_id' => $user['userId'], 'gwgz' => $user['psmoney'], 'xjgz' => $user['pwmoney'], 'jcjx' => $user['fixedPerformance'], 'yjx' => $user['psmonth'], 'pwlevel' => $user['pwlevel'], 'psid' => $user['psid'], 'type' => $user['type'], 'company_id' => $user['companyId'], 'child' => 0 ]; $should_total = $user['psmoney'] + $user['pwmoney'] + $user['fixedPerformance'] + $user['psmonth']; $jbsalary = $should_total; // 基本工资,如果不发基本工资,专项附件不累计,如果发基本工资,按正常工资走 $btjson = []; $kcsalary = 0; $bkdata = [ 'ggj' => 0, // 补扣公积金 'qynj' => 0, // 补扣企业年金 'yla' => 0, // 补扣养老保险 'yli' => 0, // 补扣医疗保险 'sye' => 0 // 补扣失业保险 ]; foreach ($user as $key=>$val){ if(strpos($key,'subsidies') === 0){ foreach ($types as $kk=>$vv){ if($vv['id'] == str_ireplace('subsidies','',$key)){ // $val = (float)$val > 0?(float)$val:0; // 不填或小于0的值默认成0 $val = (float)$val; // 支持负值 $btjson[] = [ 'id' => $vv['id'], 'cate' => $vv['cate'], 'title' => $vv['title'], 'money' => $val, 'sbtype' => $vv['sbtype'] ]; $vvl = 0; if($vv['cate'] == 1){ // 补贴 $should_total += $val; $vvl = $val; }else{ $kcsalary += $val; $vvl = -$val; } // 是否关联社保公积金 // 1=公积金 2=企业年金 3=养老保险 4=医疗保险 5=失业保险 if($vv['sbtype'] == 1){ $bkdata['ggj'] += $vvl; }else if($vv['sbtype'] == 2){ $bkdata['qynj'] += $vvl; }else if($vv['sbtype'] == 3){ $bkdata['yla'] += $vvl; }else if($vv['sbtype'] == 4){ $bkdata['yli'] += $vvl; }else if($vv['sbtype'] == 5){ $bkdata['sye'] += $vvl; } } } } } $sbdata = $this->getShebao($user['userId'],$user['companyId'],$user,$jbsalary); $sbdata['salary_record_id'] = $data['id']; $sbdata['user_id'] = $user['userId']; // 社保扣除金额 $sbkc = $sbdata['gjjp'] + $sbdata['qynjp'] +$sbdata['ylip'] +$sbdata['syep'] +$sbdata['ylap']; $sdata['should_total'] = $should_total; $sdata['sbgjj'] = $sbkc; $srid = Db::name('salary_record') ->alias('sr') ->join('salary_record_special srs','srs.salary_record_id = sr.id') ->where('sr.month',$data['month']) ->where('srs.user_id',$user['userId']) ->where('sr.type',$data['type']) ->where('sr.del',0) ->order('sr.id desc') ->value('sr.id'); $spdata = $this->getSalaryTax($should_total,$sbdata,$user['userId'],$user['companyId'],$data['month'],$data['type'],$jbsalary,$srid,$bkdata); // 计算个税 $spdata['salary_record_id'] = $data['id']; $spdata['user_id'] = $user['userId']; $tax = $spdata['tax']; $m = intval(date('m',strtotime($data['month'].'-01'))); if($m == 1 && $spdata['type'] != 1){ // 一月的第一次发工资 $spdata['tax'] = 0; }else if($m == 1 && $spdata['type'] == 1){ // 补交不算税 /*$count = Db::name('salary_record') ->alias('sr') ->join('salary_record_log srl','srl.salary_record_id = sr.id') ->join('salary_record_special srs','srs.salary_record_id = sr.id') ->where('sr.month',$data['month']) ->where('sr.id','<>',$id) ->where('srs.user_id',$data['userId']) ->where('sr.type',$data['type']) ->where('sr.del',0) ->order('sr.id desc') ->count(); if($count == 1){ $tax = Db::name('salary_record') ->alias('sr') ->join('salary_record_log srl','srl.salary_record_id = sr.id') ->join('salary_record_special srs','srs.salary_record_id = sr.id') ->where('sr.month',$data['month']) ->where('srs.user_id',$data['userId']) ->where('sr.type',$data['type']) ->where('sr.del',0) ->order('sr.id desc') ->value('srl.tax'); $spdata['tax'] = $tax; }*/ } unset($sdata['type']); $sparr[] = $spdata; if($jbsalary > 0){ $sdata['salary'] = round($should_total - $tax - $sbkc - $kcsalary,2); }else{ $sdata['salary'] = round($should_total - $tax - $kcsalary,2); } if($sdata['salary'] < 0){ return false; } $sdata['btjson'] = json_encode($btjson,JSON_UNESCAPED_UNICODE); $sdata['tax'] = $tax; $res = Db::name('salary_record_log')->where('id',$id)->update($sdata); if($res === false){ return false; } $res2 = Db::name('salary_record_sb') ->where('user_id',$user['userId']) ->where('salary_record_id',$data['id']) ->update($sbdata); if($res2 === false){ return false; } $res3 = Db::name('salary_record_special') ->where('user_id',$user['userId']) ->where('salary_record_id',$data['id']) ->strict(false) ->update($spdata); if($res3 === false){ return false; } } return true; } private function sendOneSalaryJx($user,$data,$id){ // 判断下记录是否存在 $ret = Db::name('salary_record_log') ->where('id',$id) ->where('salary_record_id',$data['id']) ->where('user_id',$user['userId']) ->find(); if(!$ret){ return false; } $sdata = [ 'salary_record_id' => $data['id'], 'user_id' => $user['userId'], 'njx' => floatval($user['psyear']) > 0?floatval($user['psyear']):0, 'pwlevel' => $user['pwlevel'], 'psid' => $user['psid'], 'type' => $user['type'], 'company_id' => $user['companyId'], 'should_total' => floatval($user['shouldTotal']) > 0?floatval($user['shouldTotal']):0, 'salary' => floatval($user['salary']) > 0?floatval($user['salary']):0, 'tax' => floatval($user['tax']) > 0?floatval($user['tax']):0, ]; if($data['type'] == 6||$data['type'] == 7){ $sdata['level'] = trim($user['level'])?trim($user['level']):''; $sdata['factor'] = floatval($user['factor']) > 0?floatval($user['factor']):0; $sdata['months'] = intval($user['months']) > 0?intval($user['months']):0; $sdata['taxrate'] = floatval($user['taxrate']) > 0?floatval($user['taxrate']):0; } $res = Db::name('salary_record_log')->where('id',$id)->update($sdata); if($res === false){ return false; } return true; } private function sendSalary($data){ $types = []; if($data['types']){ $types = Db::name('user_subsidies') ->where('id','in',$data['types']) ->where('del',0) ->order('sorts asc,id asc') ->select(); } $users = $data['users']; foreach ($users as $k=>$v){ $users[$k]['psmoney'] = (float)$v['psmoney']; $users[$k]['pwmoney'] = (float)$v['pwmoney']; $users[$k]['fixedPerformance'] = (float)$v['fixedPerformance']; $users[$k]['psmonth'] = (float)$v['psmonth']; } if($data['type'] == 3||$data['type'] == 4){ // 劳务费 $arr = []; foreach ($users as $k=>$v){ $sdata = [ 'salary_record_id' => $data['salary_record_id'], 'user_id' => $v['userId'], 'gwgz' => $v['psmoney'], 'xjgz' => $v['pwmoney'], 'jcjx' => $v['fixedPerformance'], 'yjx' => $v['psmonth'], 'pwlevel' => $v['pwlevel'], 'psid' => $v['psid'], 'type' => $v['type'], 'company_id' => $v['companyId'], 'child' => $v['child'] ]; $should_total = $v['psmoney'] + $v['pwmoney'] + $v['fixedPerformance'] + $v['psmonth']; $btjson = []; $kcsalary = 0; foreach ($v as $key=>$val){ if(strpos($key,'subsidies') === 0){ foreach ($types as $kk=>$vv){ if($vv['id'] == str_ireplace('subsidies','',$key)){ // $val = (float)$val > 0?(float)$val:0; // 不填或小于0的值默认成0 $val = (float)$val; // 支持负值 $btjson[] = [ 'id' => $vv['id'], 'cate' => $vv['cate'], 'title' => $vv['title'], 'money' => $val ]; if($vv['cate'] == 1){ // 补贴 $should_total += $val; }else{ $kcsalary += $val; } } } } } $sdata['should_total'] = $should_total; $sdata['tax'] = $this->getLaborTax($should_total,$v['userId']); $sdata['salary'] = round($should_total - $sdata['tax'] - $kcsalary,2); if($sdata['salary'] < 0){ return false; } $sdata['btjson'] = json_encode($btjson,JSON_UNESCAPED_UNICODE); $arr[] = $sdata; if(count($arr) == 300){ $res = Db::name('salary_record_log')->insertAll($arr); if($res != count($arr)){ return false; } } } if($arr){ $res = Db::name('salary_record_log')->insertAll($arr); if($res != count($arr)){ return false; } } }else if($data['type'] == 1||$data['type'] == 2){ // 新华聘算社保及累计数 $arr = []; $sbarr = []; $sparr = []; foreach ($users as $k=>$v){ $sdata = [ 'salary_record_id' => $data['salary_record_id'], 'user_id' => $v['userId'], 'gwgz' => $v['psmoney'], 'xjgz' => $v['pwmoney'], 'jcjx' => $v['fixedPerformance'], 'yjx' => $v['psmonth'], 'pwlevel' => $v['pwlevel'], 'psid' => $v['psid'], 'type' => $v['pwlevel'], 'company_id' => $v['companyId'], 'child' => $v['child'] ]; $should_total = $v['psmoney'] + $v['pwmoney'] + $v['fixedPerformance'] + $v['psmonth']; $jbsalary = $should_total; // 基本工资,如果不发基本工资,专项附件不累计,如果发基本工资,按正常工资走 $btjson = []; $kcsalary = 0; $bkdata = [ 'ggj' => 0, // 补扣公积金 'qynj' => 0, // 补扣企业年金 'yla' => 0, // 补扣养老保险 'yli' => 0, // 补扣医疗保险 'sye' => 0 // 补扣失业保险 ]; foreach ($v as $key=>$val){ if(strpos($key,'subsidies') === 0){ foreach ($types as $kk=>$vv){ if($vv['id'] == str_ireplace('subsidies','',$key)){ // $val = (float)$val > 0?(float)$val:0; // 不填或小于0的值默认成0 $val = (float)$val; // 支持负值 $btjson[] = [ 'id' => $vv['id'], 'cate' => $vv['cate'], 'title' => $vv['title'], 'money' => $val, 'sbtype' => $vv['sbtype'] ]; $vvl = 0; if($vv['cate'] == 1){ // 补贴 $should_total += $val; $vvl = $val; }else{ $kcsalary += $val; $vvl = -$val; } // 是否关联社保公积金 // 1=公积金 2=企业年金 3=养老保险 4=医疗保险 5=失业保险 if($vv['sbtype'] == 1){ $bkdata['ggj'] += $vvl; }else if($vv['sbtype'] == 2){ $bkdata['qynj'] += $vvl; }else if($vv['sbtype'] == 3){ $bkdata['yla'] += $vvl; }else if($vv['sbtype'] == 4){ $bkdata['yli'] += $vvl; }else if($vv['sbtype'] == 5){ $bkdata['sye'] += $vvl; } } } } } if($should_total <= 0){ return false; } $sbdata = $this->getShebao($v['userId'],$v['companyId'],$v,$jbsalary); $sbdata['salary_record_id'] = $data['salary_record_id']; $sbdata['user_id'] = $v['userId']; $sbarr[] = $sbdata; // 社保扣除金额 $sbkc = $sbdata['gjjp'] + $sbdata['qynjp'] +$sbdata['ylip'] +$sbdata['syep'] +$sbdata['ylap']; $sdata['should_total'] = $should_total; $sdata['sbgjj'] = $sbkc; $spdata = $this->getSalaryTax($should_total,$sbdata,$v['userId'],$v['companyId'],$data['month'],$data['type'],$jbsalary,0,$bkdata); // 计算个税 trace($spdata); $spdata['salary_record_id'] = $data['salary_record_id']; $spdata['user_id'] = $v['userId']; $tax = $spdata['tax']; $m = intval(date('m',strtotime($data['month'].'-01'))); if($m == 1 && $spdata['type'] != 1){ // 一月的第一次发工资 $spdata['tax'] = 0; }else if($m == 1 && $spdata['type'] == 1){ // 补交不算税 /*$count = Db::name('salary_record') ->alias('sr') ->join('salary_record_log srl','srl.salary_record_id = sr.id') ->join('salary_record_special srs','srs.salary_record_id = sr.id') ->where('sr.month',$data['month']) ->where('srs.user_id',$v['userId']) ->where('sr.type',$data['type']) ->where('sr.del',0) ->order('sr.id desc') ->count(); if($count == 1){ $tax = Db::name('salary_record') ->alias('sr') ->join('salary_record_log srl','srl.salary_record_id = sr.id') ->join('salary_record_special srs','srs.salary_record_id = sr.id') ->where('sr.month',$data['month']) ->where('srs.user_id',$v['userId']) ->where('sr.type',$data['type']) ->where('sr.del',0) ->order('sr.id desc') ->value('srl.tax'); $spdata['tax'] = $tax; }*/ } unset($spdata['type']); $sparr[] = $spdata; if($jbsalary > 0){ $sdata['salary'] = round($should_total - $tax - $sbkc - $kcsalary,2); }else{ $sdata['salary'] = round($should_total - $tax - $kcsalary,2); } if($sdata['salary'] < 0){ // 实发金额不能小于0 return false; } $sdata['btjson'] = json_encode($btjson,JSON_UNESCAPED_UNICODE); $sdata['tax'] = $tax; $arr[] = $sdata; if(count($arr) == 300){ $res = Db::name('salary_record_log')->insertAll($arr); if($res != count($arr)){ return false; } } if(count($sbarr) == 300){ $res = Db::name('salary_record_sb')->insertAll($sbarr); if($res != count($sbarr)){ return false; } } if(count($sparr) == 300){ $res = Db::name('salary_record_special')->insertAll($sparr); if($res != count($sparr)){ return false; } } } if($arr){ $res = Db::name('salary_record_log')->insertAll($arr); if($res != count($arr)){ return false; } } if($sbarr){ $res = Db::name('salary_record_sb')->insertAll($sbarr); if($res != count($sbarr)){ return false; } } if($sparr){ $res = Db::name('salary_record_special')->insertAll($sparr); if($res != count($sparr)){ return false; } } trace($sparr); } return true; } private function sendSalaryJx($data){ $users = $data['users']; $arr = []; $uids = []; foreach ($users as $k=>$v){ if(in_array($v['userId'],$uids)){ continue; } $uids[] = $v['userId']; $sdata = [ 'salary_record_id' => $data['salary_record_id'], 'user_id' => $v['userId'], 'njx' => floatval($v['psyear']) > 0?floatval($v['psyear']):0, 'pwlevel' => $v['pwlevel'], 'psid' => $v['psid'], 'type' => $v['type'], 'company_id' => $v['companyId'], 'should_total' => floatval($v['shouldTotal']) > 0?floatval($v['shouldTotal']):0, 'salary' => floatval($v['salary']) > 0?floatval($v['salary']):0, 'tax' => floatval($v['tax']) > 0?floatval($v['tax']):0, ]; if($data['type'] == 6||$data['type'] == 7){ $sdata['level'] = trim($v['level'])?trim($v['level']):''; $sdata['factor'] = floatval($v['factor']) > 0?floatval($v['factor']):0; $sdata['months'] = intval($v['months']) > 0?intval($v['months']):0; $sdata['taxrate'] = floatval($v['taxrate']) > 0?floatval($v['taxrate']):0; } $arr[] = $sdata; if(count($arr) == 300){ $res = Db::name('salary_record_log')->insertAll($arr); if($res != count($arr)){ return false; } } } if($arr){ $res = Db::name('salary_record_log')->insertAll($arr); if($res != count($arr)){ return false; } } return true; } // 新华聘用税/编制个税 private function getSalaryTax($should_total,$sbdata,$userId,$companyId,$month,$type,$jbsalary,$from=0,$bkdata=[]){// from 0=新增 0<重新计算 $data = [ 'salary' => 0, 'mssr' => 0, 'sr' => 0, 'ljsr' => 0, 'ljjc' => 0, 'ljgjj' => 0, 'ljylobx' => 0, 'ljsybx' => 0, 'ljylibx' => 0, 'ljnj' => 0, 'ljznjy' => 0, 'ljjxjy' => 0, 'ljzfdklx' => 0, 'ljzfzj' => 0, 'ljsylr' => 0, 'syjkbx' => 0, 'ysylbx' => 0, 'grbk' => 0, 'jzjbjsb' => 0, 'ljgzds' => 0, 'qtkc' => 0, 'ljsqljxmhj' => 0, 'ljykjse' => 0, 'tax' => 0, 'zykcjze' => 0, 'jmsebl' => 0, 'extratax' => 0, 'ljyyezh' => 0, 'ljgrylj' => 0, ]; $lastinfo = []; if($from > 0){ // 每月发多次工资,先找本月是否已经发放过工资,没有的话获取上个月的记录,在没有的话获取初始值 $lastinfo = Db::name('salary_record') ->alias('sr') ->join('salary_record_special srs','srs.salary_record_id = sr.id') ->where('sr.month',$month) ->where('srs.user_id',$userId) ->where('sr.id','<>',$from) ->where('sr.type',$type) ->where('sr.del',0) ->field('srs.*') ->order('sr.id desc') ->find(); }else{ // 每月发多次工资,先找本月是否已经发放过工资,没有的话获取上个月的记录,在没有的话获取初始值 $lastinfo = Db::name('salary_record') ->alias('sr') ->join('salary_record_special srs','srs.salary_record_id = sr.id') ->where('sr.month',$month) ->where('srs.user_id',$userId) ->where('sr.type',$type) ->where('sr.del',0) ->field('srs.*') ->order('sr.id desc') ->find(); } $stype = 0; // 无累计 if(!$lastinfo){ $lastmonth = date('Y-m',strtotime($month.'-01') - 24*60*60); // 上个月 $lastinfo = Db::name('salary_record') ->alias('sr') ->join('salary_record_special srs','srs.salary_record_id = sr.id') ->where('sr.month',$lastmonth) ->where('srs.user_id',$userId) ->where('sr.type',$type) ->where('sr.del',0) ->field('srs.*') ->order('sr.id desc') ->find(); if($lastinfo){ $stype = 2; // 有上月累计 } }else{ $stype = 1; // 有本月累计 } if(!$lastinfo){ $lastinfo = Db::name('user_total')->where('user_id',$userId)->find(); if($lastinfo){ $stype = 3; // 有初始累计 } } if($lastinfo){ $data = [ 'salary' => $lastinfo['salary'], 'mssr' => $lastinfo['mssr'], 'sr' => $lastinfo['sr'], 'ljsr' => $lastinfo['ljsr'], 'ljjc' => $lastinfo['ljjc'], 'ljgjj' => $lastinfo['ljgjj'], 'ljylobx' => $lastinfo['ljylobx'], 'ljsybx' => $lastinfo['ljsybx'], 'ljylibx' => $lastinfo['ljylibx'], 'ljnj' => $lastinfo['ljnj'], 'ljznjy' => $lastinfo['ljznjy'], 'ljjxjy' => $lastinfo['ljjxjy'], 'ljzfdklx' => $lastinfo['ljzfdklx'], 'ljzfzj' => $lastinfo['ljzfzj'], 'ljsylr' => $lastinfo['ljsylr'], 'ljyyezh' => $lastinfo['ljyyezh'], 'syjkbx' => $lastinfo['syjkbx'], 'ysylbx' => $lastinfo['ysylbx'], 'grbk' => $lastinfo['grbk'], 'jzjbjsb' => $lastinfo['jzjbjsb'], 'ljgzds' => $lastinfo['ljgzds'], 'qtkc' => $lastinfo['qtkc'], 'ljsqljxmhj' => $lastinfo['ljsqljxmhj'], 'ljykjse' => $lastinfo['ljykjse'], 'tax' => $lastinfo['tax'], 'zykcjze' => $lastinfo['zykcjze'], 'jmsebl' => $lastinfo['jmsebl'], 'ljgrylj' => $lastinfo['ljgrylj'], 'extratax' => isset($lastinfo['extratax'])?$lastinfo['extratax']:0 ]; } $extratax = $data['extratax']; // 额外税差额 unset($data['extratax']); // 使用上月数据计算个税 $ljkc = $data['ljsr'] - $data['ljsqljxmhj']; // 累计预扣预缴应纳税所得额 if($ljkc > 0){ $tax = $this->getYkyjTax($ljkc);// 累计应预扣预缴税额 $jmse = round($tax*$data['jmsebl'],2); // 减免税额 $ljykjse = $data['ljykjse'] + $data['tax']; $tax = round($tax - $jmse - $ljykjse,2); $tax = $tax>0?$tax:0; $data['ljykjse'] = $ljykjse; }else{ $tax = 0; } $data['tax'] = round($tax + $extratax,2); $data['salary'] = $should_total; $mssr = 0; $m = intval(date('m',strtotime($month.'-01'))); if($jbsalary > 0){ // 发基本工资 // 加累计值 $mssr = 0; $special = Db::name('user_special')->where('user_id',$userId)->find(); if($special){} $mssr = $special?$special['mssr']:0; if($m > 1){ $data['ljjc'] += 5000; // 减除费用每月只能使用1次 $data['ljgjj'] += $sbdata['gjjp'] - (!empty($bkdata)?$bkdata['ggj']:0); $data['ljylobx'] += $sbdata['ylap'] - (!empty($bkdata)?$bkdata['yla']:0); $data['ljsybx'] += $sbdata['syep'] - (!empty($bkdata)?$bkdata['sye']:0); $data['ljylibx'] += $sbdata['ylip'] - (!empty($bkdata)?$bkdata['yli']:0); $data['ljnj'] += $sbdata['qynjp'] - (!empty($bkdata)?$bkdata['qynj']:0); $data['ljznjy'] += $special?$special['znjy']:0; $data['ljjxjy'] += $special?$special['jxjy']:0; $data['ljzfdklx'] += $special?$special['zfdklx']:0; $data['ljzfzj'] += $special?$special['zfzj']:0; $data['ljsylr'] += $special?$special['sylr']:0; $data['ljyyezh'] += $special?$special['yyezh']:0; $data['ljgzds'] += $special?$special['gzds']:0; $data['syjkbx'] += $special?$special['syjkbx']:0; $data['ysylbx'] += $special?$special['ysylbx']:0; $data['grbk'] += $special?$special['grbk']:0; $data['jzjbjsb'] += $special?$special['nzjds']:0; $data['qtkc'] += $special?$special['qtkc']:0; $data['zykcjze'] += $special?$special['zykcjze']:0; $data['ljgrylj'] += $special?$special['grylj']:0; }else{ $data['ljjc'] = 5000; $data['ljgjj'] = $sbdata['gjjp'] - (!empty($bkdata)?$bkdata['ggj']:0); $data['ljylobx'] = $sbdata['ylap'] - (!empty($bkdata)?$bkdata['yla']:0); $data['ljsybx'] = $sbdata['syep'] - (!empty($bkdata)?$bkdata['sye']:0); $data['ljylibx'] = $sbdata['ylip'] - (!empty($bkdata)?$bkdata['yli']:0); $data['ljnj'] = $sbdata['qynjp'] - (!empty($bkdata)?$bkdata['qynj']:0); $data['ljznjy'] = $special?$special['znjy']:0; $data['ljjxjy'] = $special?$special['jxjy']:0; $data['ljzfdklx'] = $special?$special['zfdklx']:0; $data['ljzfzj'] = $special?$special['zfzj']:0; $data['ljsylr'] = $special?$special['sylr']:0; $data['ljgzds'] = $special?$special['gzds']:0; $data['ljyyezh'] = $special?$special['yyezh']:0; $data['ljykjse'] = 0; $data['ljsr'] = 0; $data['syjkbx'] = $special?$special['syjkbx']:0; $data['ysylbx'] = $special?$special['ysylbx']:0; $data['grbk'] = $special?$special['grbk']:0; $data['jzjbjsb'] = $special?$special['nzjds']:0; $data['qtkc'] = $special?$special['qtkc']:0; $data['zykcjze'] = $special?$special['zykcjze']:0; $data['ljgrylj'] = $special?$special['grylj']:0; } $data['jmsebl'] = $special?$special['jmsebl']:0; $data['mssr'] = $special?$special['mssr']:0; }else{ if($m == 1 && $stype != 1){ $data['ljjc'] = 0; $data['ljgjj'] = 0; $data['ljylobx'] = 0; $data['ljsybx'] = 0; $data['ljylibx'] = 0; $data['ljnj'] = 0; $data['ljznjy'] = 0; $data['ljjxjy'] = 0; $data['ljzfdklx'] = 0; $data['ljzfzj'] = 0; $data['ljsylr'] = 0; $data['ljgzds'] = 0; $data['ljykjse'] = 0; $data['ljsr'] = 0; $data['syjkbx'] = 0; $data['ysylbx'] = 0; $data['grbk'] = 0; $data['jzjbjsb'] = 0; $data['qtkc'] = 0; $data['zykcjze'] = 0; $data['ljsqljxmhj'] = 0; $data['jmsebl'] = 0; $data['ljyyezh'] = 0; $data['ljgrylj'] = 0; } $data['tax'] = 0; // 补助不算个税,只累计值 } $data['mssr'] = $mssr; $data['sr'] = $should_total - $mssr; $data['ljsr'] += $data['sr']; $data['type'] = $stype; $data['ljsqljxmhj'] = $data['ljjc'] + $data['ljgjj'] + $data['ljyyezh'] + $data['ljgrylj'] + $data['ljylobx'] + $data['ljsybx'] + $data['ljylibx'] + $data['ljnj'] + $data['ljznjy'] + $data['ljjxjy'] + $data['ljzfdklx'] + $data['ljzfzj'] + $data['ljsylr'] + $data['ljgzds'] + $data['syjkbx'] + $data['ysylbx'] + $data['grbk'] + $data['jzjbjsb'] + $data['zykcjze'] + $data['qtkc']; return $data; } // 社保公积金 private function getShebao($userId,$companyId,$info,$jbsalary){ $bls = Db::name('user_bl')->select(); // 社保比例 $base = Db::name('user_base')->where('user_id',$userId)->find(); $data = [ 'qynj' => 0, 'gjj' => 0, 'sb' => 0, 'syyl' => 0, 'gssy' => 0, 'ylnj' => 0, 'ylap' => 0, 'ylac' => 0, 'syep' => 0, 'syec' => 0, 'ylip' => 0, 'ylic' => 0, 'gsc' => 0, 'qynjp' => 0, 'qynjc' => 0, 'gjjp' => 0, 'gjjc' => 0, ]; if(!$base||$jbsalary == 0){ //不是发基本工资就不扣缴社保 return $data; } $data['qynj'] = $base['qynj']; $data['gjj'] = $base['gjj']; $data['sb'] = $base['sb']; $data['syyl'] = $base['syyl']; $data['gssy'] = $base['gssy']; $data['ylnj'] = $base['ylnj']; // 计算各项扣除 foreach ($bls as $key=>$val){ if($val['company_id'] == $companyId){ switch ($val['name']){ case 'gjj': // 住房公积金,企业和个人只保留整数,四舍五入 $data['gjjp'] = round(calculate_money($base['gjj'],$val['p_bl'],$val['p_bl_type'],$val['p_bl_extra'],$val['p_free_bl'])); $data['gjjc'] = round(calculate_money($base['gjj'],$val['c_bl'],$val['c_bl_type'],$val['c_bl_extra'],$val['c_free_bl'])); break; case 'qynj': if ($val['company_id'] == 1) { $data['qynjp'] = calculate_money($base['ylnj'], $val['p_bl'], $val['p_bl_type'], $val['p_bl_extra'], $val['p_free_bl']); $data['qynjc'] = calculate_money($base['ylnj'], $val['c_bl'], $val['c_bl_type'], $val['c_bl_extra'], $val['c_free_bl']); } else { $data['qynjp'] = calculate_money($base['qynj'], $val['p_bl'], $val['p_bl_type'], $val['p_bl_extra'], $val['p_free_bl']); $data['qynjc'] = calculate_money($base['qynj'], $val['c_bl'], $val['c_bl_type'], $val['c_bl_extra'], $val['c_free_bl']); } break; case 'yla': if($info['yla']) { if($val['company_id'] == 1){ $data['ylap'] = calculate_money($base['ylnj'],$val['p_bl'],$val['p_bl_type'],$val['p_bl_extra'],$val['p_free_bl']); $data['ylac'] = calculate_money($base['ylnj'],$val['c_bl'],$val['c_bl_type'],$val['c_bl_extra'],$val['c_free_bl']); } else { $data['ylap'] = calculate_money($base['sb'],$val['p_bl'],$val['p_bl_type'],$val['p_bl_extra'],$val['p_free_bl']); $data['ylac'] = calculate_money($base['sb'],$val['c_bl'],$val['c_bl_type'],$val['c_bl_extra'],$val['c_free_bl']); } } break; case 'sye': if($val['company_id'] == 1){ $data['syep'] = calculate_money($base['gssy'],$val['p_bl'],$val['p_bl_type'],$val['p_bl_extra'],$val['p_free_bl']); $data['syec'] = calculate_money($base['gssy'],$val['c_bl'],$val['c_bl_type'],$val['c_bl_extra'],$val['c_free_bl']); } else { $data['syep'] = calculate_money($base['sb'],$val['p_bl'],$val['p_bl_type'],$val['p_bl_extra'],$val['p_free_bl']); $data['syec'] = calculate_money($base['sb'],$val['c_bl'],$val['c_bl_type'],$val['c_bl_extra'],$val['c_free_bl']); } break; case 'yli': if($val['company_id'] == 1){ $data['ylip'] = calculate_money($base['syyl'],$val['p_bl'],$val['p_bl_type'],$val['p_bl_extra'],$val['p_free_bl']); $data['ylic'] = calculate_money($base['syyl'],$val['c_bl'],$val['c_bl_type'],$val['c_bl_extra'],$val['c_free_bl']); } else { $data['ylip'] = calculate_money($base['sb'],$val['p_bl'],$val['p_bl_type'],$val['p_bl_extra'],$val['p_free_bl']); $data['ylic'] = calculate_money($base['sb'],$val['c_bl'],$val['c_bl_type'],$val['c_bl_extra'],$val['c_free_bl']); } break; case 'gs': if($val['company_id'] == 1){ $data['gsc'] = calculate_money($base['gssy'],$val['c_bl'],$val['c_bl_type'],$val['c_bl_extra'],$val['c_free_bl']); } else { $data['gsc'] = calculate_money($base['sb'],$val['c_bl'],$val['c_bl_type'],$val['c_bl_extra'],$val['c_free_bl']); } break; } } } if(!$info['gjj']){ $data['gjjp'] = 0; $data['gjjc'] = 0; } if(!$info['qynj']){ $data['qynjp'] = 0; $data['gjjc'] = 0; } if(!$info['yla']){ $data['ylap'] = 0; $data['ylac'] = 0; } if(!$info['sye']){ $data['syep'] = 0; $data['syec'] = 0; } if(!$info['yli']){ $data['ylip'] = 0; $data['ylic'] = 0; } if(!$info['gs']){ $data['gsc'] = 0; } return $data; } // 获取劳务费个税 public function getLaborTax($salary,$userId){ // =ROUND(MAX((MIN((G4)*0.8,(G4)-800)*{0;20;30;40}%-1000*{0;0;2;7}),0),2) //计算公式 if($salary*0.8 <= $salary - 800){ $salary = $salary*0.8; }else{ $salary = $salary - 800; } $arr = [ $salary*0 - 0, $salary*0.2 - 0, $salary*0.3 - 2000, $salary*0.4 - 7000, 0 ]; $tax = max($arr); if($tax > 0){ $bl = Db::name('user_jmlabor')->where('user_id',$userId)->value('jmsebl'); $bl = $bl?$bl:0; if($bl > 0){ $tax = (1 - $bl)*$tax; } } $tax = round($tax,2); return $tax; } public function preAdd($data,$orgId){ $uids = model('User')->getAdminUsers(); if($uids){ $map[] = ['u.id','not in',$uids]; } $map[] = ['u.del','=',0]; $map[] = ['r.type','=',3]; $map[] = ['r.org_id','=',$orgId]; if($data['type'] == 6){ $map[] = ['ui.pay_type','=',1]; } else if($data['type'] == 7){ $map[] = ['ui.pay_type','=',2]; } else if($data['type'] == 8){ $map[] = ['ui.pay_type','=',3]; } else if($data['type'] == 9){ $map[] = ['ui.pay_type','=',4]; } else { $map[] = ['ui.pay_type','=',$data['type']]; } $lists = Db::name('user_info') ->alias('ui') ->join('user u','ui.user_id = u.id') ->join('user_roles ur','ur.user_id = u.id') ->join('roles r','ur.roles_id = r.id') ->where($map) ->field('u.phone,ui.company_id,ui.user_id,ui.name,ui.gender,ui.work_date,ui.company_id,ui.pwlevel,ui.type,ui.psid,ui.fixed_performance,ui.child') ->order('ui.sorts3 asc,u.id desc') ->select(); if(!$lists){ HelpHander::error('该工资类型下无可发放工资的人员'); } $types = []; if($data['types']){ $types = Db::name('user_subsidies') ->where('id','in',$data['types']) ->where('del',0) ->order('sorts asc,id asc') ->select(); } foreach ($lists as $k=>$v){ $lists[$k]['user_sn'] = think_encrypt($v['user_id']); if(in_array($data['type'],[6,7,8,9])){ $lists[$k]['level'] = ''; $lists[$k]['factor'] = ''; $lists[$k]['months'] = ''; $lists[$k]['taxrate'] = ''; $lists[$k]['tax'] = ''; $lists[$k]['salary'] = ''; $lists[$k]['should_total'] = ''; $lists[$k]['psyear'] = ''; } $lists[$k]['pwstatus'] = 0; // 薪级变化状态 $lists[$k]['work_age'] = $v['work_date']?calculate_age($v['work_date']):0; // 工龄 if($data['type'] == 5){ $retired = Db::name('user_retired')->where('user_id',$v['user_id'])->find(); $lists[$k]['bz'] = $retired?$retired['bz']:0; $lists[$k]['zysdbt'] = $retired?$retired['zysdbt']:0; $lists[$k]['fb'] = $retired?$retired['fb']:0; $lists[$k]['wybt'] = $retired?$retired['wybt']:0; }else{ $lists[$k]['psname'] = ''; $lists[$k]['psmonth'] = 0; // $lists[$k]['psyear'] = 0; $lists[$k]['psmoney'] = 0; if($lists[$k]['psid'] > 0){ $psinfo = Db::name('post_salary')->where('id',$v['psid'])->find(); if($psinfo){ $lists[$k]['psname'] = $psinfo['job']; $lists[$k]['psmoney'] = $psinfo['money']; // $lists[$k]['psyear'] = $psinfo['year_performance']; $lists[$k]['psmonth'] = $psinfo['month_performance']; if($lists[$k]['work_age'] > 25 && $psinfo['month_performance2'] > 0){ $lists[$k]['psmonth'] = $psinfo['month_performance2']; } // if($lists[$k]['work_age'] > 25 && $psinfo['year_performance2'] > 0){ // $lists[$k]['psyear'] = $psinfo['year_performance2']; // } } } $lists[$k]['pwmoney'] = 0; if($v['type'] > 0 && $v['company_id'] > 0){ $pay_wages = Db::name('pay_wages') ->where('company_id',$v['company_id']) ->where('type',$v['type']) ->value('content'); $pay_wages = $pay_wages?json_decode($pay_wages,true):[]; foreach ($pay_wages as $kk=>$vv){ if($v['pwlevel'] == $vv['level']){ $lists[$k]['pwmoney'] = $vv['money']; break; } } } if($data['type'] == 1||$data['type'] == 2){ $lists[$k]['gjj'] = true; $lists[$k]['yla'] = true; $lists[$k]['sye'] = true; $lists[$k]['yli'] = true; $lists[$k]['qynj'] = true; $lists[$k]['gs'] = true; } } $lastmonth = date('Y-m',strtotime($data['month'].'-01') - 1000); $btjson = null; $log = null; if($data['type'] != 5 && $data['continue'] == 1){ //延续上月,获取上月补贴,只获取基本工资的补贴项 $log = Db::name('salary_record_log') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where('sr.month',$data['month']) ->where('srl.user_id',$v['user_id']) ->where('sr.status','in',[1,2]) ->where('srl.gwgz','>',0) ->where('sr.del',0) ->field('srl.*') ->order('srl.id desc') ->find(); if(!$log){ $log = Db::name('salary_record_log') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where('sr.month',$lastmonth) ->where('srl.user_id',$v['user_id']) ->where('sr.status','in',[1,2]) ->where('srl.gwgz','>',0) ->where('sr.del',0) ->field('srl.*') ->order('srl.id desc') ->find(); } if(!empty($log) && ($data['type'] == 3||$data['type'] == 4)){ // 劳务基本工资项也要继承上次的 $lists[$k]['psmoney'] = $log['gwgz']; $lists[$k]['pwmoney'] = $log['xjgz']; $lists[$k]['fixed_performance'] = $log['jcjx']; $lists[$k]['psmonth'] = $log['yjx']; } if(!empty($log) && ($v['pwlevel'] != $log['pwlevel'])){ // 有薪级变化 $lists[$k]['pwstatus'] = 1; } $btjson = !empty($log)?$log['btjson']:null; /*$btjson = Db::name('salary_record_log') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where('sr.month',$data['month']) ->where('srl.user_id',$v['user_id']) ->where('sr.status','in',[1,2]) ->where('srl.gwgz','>',0) ->where('sr.del',0) ->value('btjson'); if(!$btjson){ $btjson = Db::name('salary_record_log') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where('sr.month',$lastmonth) ->where('srl.user_id',$v['user_id']) ->where('sr.status','in',[1,2]) ->where('srl.gwgz','>',0) ->where('sr.del',0) ->value('btjson'); }*/ }else if($data['type'] == 5 && $data['continue'] == 1){ $btjson = Db::name('user_retired_salary') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where('sr.month',$data['month']) ->where('srl.user_id',$v['user_id']) ->where('sr.status','in',[1,2]) ->where('sr.del',0) ->order('srl.id desc') ->value('btjson'); if(!$btjson){ $btjson = Db::name('user_retired_salary') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where('sr.month',$lastmonth) ->where('srl.user_id',$v['user_id']) ->where('sr.status','in',[1,2]) ->where('sr.del',0) ->order('srl.id desc') ->value('btjson'); } } $btjson = !empty($btjson)?json_decode($btjson,true):[]; foreach ($types as $kk=>$vv){ if(empty($btjson)){ $lists[$k]['subsidies'.$vv['id']] = $this->getBtByName($vv,$lists[$k]['psid'],$lists[$k]['work_age'],$data['type'],$v['gender']); }else{ $flag = 1; foreach ($btjson as $key=>$val){ if($val['id'] == $vv['id']){ $flag = 0; $lists[$k]['subsidies'.$vv['id']] = $val['money']; } } if($flag == 1){ // 无相同的分类 $lists[$k]['subsidies'.$vv['id']] = $this->getBtByName($vv,$lists[$k]['psid'],$lists[$k]['work_age'],$data['type'],$v['gender']); } } } } return ['types' => $types,'list' => $lists]; } // 重新计算 public function reloadAdd($salaryRecordId,$uid,$orgId,$verification=1){ $data = Db::name('salary_record')->where('id',$salaryRecordId)->find(); // 判断下记录是否存在 $ret = Db::name('salary_record_log')->where('salary_record_id',$salaryRecordId)->where('user_id',$uid)->find(); if($verification == 1 && !$ret){ HelpHander::error('记录不存在'); } $map[] = ['u.id','=',$uid]; $map[] = ['u.del','=',0]; $map[] = ['r.type','=',3]; $map[] = ['r.org_id','=',$orgId]; // 不再判断类型,已发放时为准 /*if($data['type'] == 1||$data['type'] == 6){ $map[] = ['ui.pay_type','=',1]; }else if($data['type'] == 2||$data['type'] == 7){ $map[] = ['ui.pay_type','=',2]; }else if($data['type'] == 3||$data['type'] == 8){ $map[] = ['ui.pay_type','=',3]; }else if($data['type'] == 4||$data['type'] == 9){ $map[] = ['ui.pay_type','=',4]; }else{ $map[] = ['ui.pay_type','=',$data['type']]; }*/ $lists = Db::name('user_info') ->alias('ui') ->join('user u','ui.user_id = u.id') ->join('user_roles ur','ur.user_id = u.id') ->join('roles r','ur.roles_id = r.id') ->where($map) ->field('u.phone,ui.company_id,ui.user_id,ui.name,ui.gender,ui.work_date,ui.company_id,ui.pwlevel,ui.type,ui.psid,ui.fixed_performance,ui.child') ->order('ui.sorts3 asc,u.id desc') ->select(); if($verification == 1 && !$lists){ HelpHander::error('该工资类型下无可发放工资的人员'); } $types = []; if($data['types']){ $types = Db::name('user_subsidies')->where('id','in',$data['types'])->where('del',0)->order('sorts asc')->select(); } foreach ($lists as $k=>$v){ if(in_array($data['type'],[6,7,8,9])){ $log = Db::name('salary_record_log') ->where('salary_record_id',$salaryRecordId) ->where('user_id',$v['user_id']) ->find(); $lists[$k]['level'] = $log?$log['level']:''; $lists[$k]['factor'] = $log?$log['factor']:''; $lists[$k]['months'] = $log?$log['months']:''; $lists[$k]['taxrate'] = $log?$log['taxrate']:''; $lists[$k]['tax'] = $log?$log['tax']:''; $lists[$k]['salary'] = $log?$log['salary']:''; $lists[$k]['should_total'] = $log?$log['should_total']:''; $lists[$k]['psyear'] = $log?$log['njx']:''; } $lists[$k]['work_age'] = $v['work_date']?calculate_age($v['work_date']):0; // 工龄 if($data['type'] == 5){ $retired = Db::name('user_retired')->where('user_id',$v['user_id'])->find(); $lists[$k]['bz'] = $retired?$retired['bz']:0; $lists[$k]['zysdbt'] = $retired?$retired['zysdbt']:0; $lists[$k]['fb'] = $retired?$retired['fb']:0; $lists[$k]['wybt'] = $retired?$retired['wybt']:0; }else{ $lists[$k]['psname'] = ''; $lists[$k]['psmonth'] = 0; $lists[$k]['psmoney'] = 0; if($lists[$k]['psid'] > 0){ $psinfo = Db::name('post_salary')->where('id',$v['psid'])->find(); if($psinfo){ $lists[$k]['psname'] = $psinfo['job']; $lists[$k]['psmoney'] = $psinfo['money']; $lists[$k]['psmonth'] = $psinfo['month_performance']; if($lists[$k]['work_age'] > 25 && $psinfo['month_performance2'] > 0){ $lists[$k]['psmonth'] = $psinfo['month_performance2']; } } } $lists[$k]['pwmoney'] = 0; if($v['type'] > 0 && $v['company_id'] > 0){ $pay_wages = Db::name('pay_wages') ->where('company_id',$v['company_id']) ->where('type',$v['type']) ->value('content'); $pay_wages = $pay_wages?json_decode($pay_wages,true):[]; foreach ($pay_wages as $kk=>$vv){ if($v['pwlevel'] == $vv['level']){ $lists[$k]['pwmoney'] = $vv['money']; break; } } } if($data['type'] == 1||$data['type'] == 2){ $lists[$k]['gjj'] = true; $lists[$k]['yla'] = true; $lists[$k]['sye'] = true; $lists[$k]['yli'] = true; $lists[$k]['qynj'] = true; $lists[$k]['gs'] = true; // 检查开关 $sbinfo = Db::name('salary_record_sb')->where('salary_record_id',$salaryRecordId)->where('user_id',$v['user_id'])->find(); if($sbinfo){ if($sbinfo['gjjp'] <= 0){ $lists[$k]['gjj'] = false; } if($sbinfo['ylap'] <= 0){ $lists[$k]['yla'] = false; } if($sbinfo['syep'] <= 0){ $lists[$k]['sye'] = false; } if($sbinfo['ylip'] <= 0){ $lists[$k]['yli'] = false; } if($sbinfo['gsc'] <= 0){ $lists[$k]['gs'] = false; } if($sbinfo['qynjp'] <= 0){ $lists[$k]['qynj'] = false; } }else{ $lists[$k]['gjj'] = false; $lists[$k]['yla'] = false; $lists[$k]['sye'] = false; $lists[$k]['yli'] = false; $lists[$k]['qynj'] = false; $lists[$k]['gs'] = false; } } } $btjson = null; $log = null; if($data['type'] != 5){ $log = Db::name('salary_record_log') ->where('salary_record_id',$salaryRecordId) ->where('user_id',$uid) ->find(); if(!empty($log)){ $lists[$k]['psmoney'] = $log['gwgz']; $lists[$k]['pwmoney'] = $log['xjgz']; $lists[$k]['fixed_performance'] = $log['jcjx']; $lists[$k]['psmonth'] = $log['yjx']; } $btjson = !empty($log)?$log['btjson']:null; }else{ $btjson = Db::name('user_retired_salary') ->where('salary_record_id',$salaryRecordId) ->where('user_id',$uid) ->value('btjson'); } $btjson = !empty($btjson)?json_decode($btjson,true):[]; foreach ($types as $kk=>$vv){ if(empty($btjson)){ $lists[$k]['subsidies'.$vv['id']] = $this->getBtByName($vv,$lists[$k]['psid'],$lists[$k]['work_age'],$data['type'],$v['gender']); }else{ $flag = 1; foreach ($btjson as $key=>$val){ if($val['id'] == $vv['id']){ $flag = 0; $lists[$k]['subsidies'.$vv['id']] = $val['money']; } } if($flag == 1){ // 无相同的分类 $lists[$k]['subsidies'.$vv['id']] = $this->getBtByName($vv,$lists[$k]['psid'],$lists[$k]['work_age'],$data['type'],$v['gender']); } } } // foreach ($types as $kk=>$vv){ // $lists[$k]['subsidies'.$vv['id']] = $this->getBtByName($vv,$lists[$k]['psid'],$lists[$k]['work_age'],$data['type'],$v['gender']); // } } return ['types' => $types,'list' => $lists]; } private function getBtByName($info,$psid,$age,$payType,$gender){ $val = 0; if($payType == 1){ // 中心在编 if($info['type'] == 1){ if($info['gender'] == 0){ $val = $info['money']; }else if($info['gender'] != 0&&$info['gender'] == $gender){ $val = $info['money']; } }else if($info['type'] == 3){ // 检测上个月的记录 $val = 0; } else { $dd = json_decode($info['values'],true); $dd = $dd?$dd:[]; foreach ($dd as $k=>$v){ if($v['id'] == $psid){ if($v['money2']){ if($age < 15){ $val = $v['money1']; } else if ($age >= 15 && $age < 25){ $val = $v['money2']; }else{ $val = $v['money3']; } }else{ $val = $v['money1']; } break; } } if($info['gender'] != 0&&$info['gender'] != $gender){ $val = 0; } } }else{ if($info['type'] == 1){ if($info['gender'] == 0){ $val = $info['money']; }else if($info['gender'] != 0&&$info['gender'] == $gender){ $val = $info['money']; } }else if($info['type'] == 3){ // 检测上个月的记录 $val = 0; } } return $val; } public function info($id){ $info = Db::name('salary_record')->where('id',$id)->where('del',0)->find(); if(!$info){ HelpHander::error('数据不存在'); } $types = []; $tids = []; if($info['types']){ $tids = explode(',',$info['types']); $types = Db::name('user_subsidies')->where('id','in',$info['types'])->select(); } $info['types'] = $types; $alltypes = Db::name('user_subsidies')->where('del',0)->where('pay_type',$info['type'])->select(); $addtypes = []; foreach ($alltypes as $v){ if(!in_array($v['id'],$tids)){ $addtypes[] = $v; } } $info['addtypes'] = $addtypes; $info['sarlist'] = []; if($info['status'] == 0){ // 审核中 $sarlist = Db::name('salary_apply_record') ->alias('sar') ->join('salary_apply sa','sa.id = sar.salary_apply_id') ->where('sar.salary_apply_id',$info['cur_node']) ->where('sar.salary_record_id',$info['id']) ->where('sar.del',0) ->field('sa.cate,sar.*') ->order('sar.id asc') ->select(); foreach ($sarlist as $k=>$v){ $sarlist[$k]['userName'] = Db::name('user_info')->where('user_id',$v['user_id'])->value('name'); } $info['sarlist'] = $sarlist; } // 计算实发总金额 if($info['type'] == 5){ $totalSalary = Db::name('user_retired_salary')->where('salary_record_id',$id)->sum('salary'); }else{ $totalSalary = Db::name('salary_record_log')->where('salary_record_id',$id)->sum('salary'); } $info['total_salary'] = $totalSalary; //获取已审批人员 $alist = Db::name('salary_apply_record') ->alias('sar') ->join('salary_record sr','sr.id = sar.salary_record_id') ->join('user_info ui','ui.user_id = sar.user_id') ->where('sar.salary_record_id',$id) ->where('sar.status',1) ->where('sar.del',0) ->field('sar.*,ui.name as user_name') ->order('sar.id desc') ->select(); $info['alist'] = $alist?$alist:[]; return $info; } public function lists($page,$size,$month,$type){ if($month != ''){ $map[] = ['month','=',$month]; } if($type >= 0){ $map[] = ['type','=',$type]; } $map[] = ['del','=',0]; $map = empty($map)?true:$map; $lists = Db::name('salary_record') ->where($map) ->page($page,$size) ->order('id desc') ->select(); foreach ($lists as $k=>$v){ // 计算实发总金额 if($v['type'] == 5){ $totalSalary = Db::name('user_retired_salary')->where('salary_record_id',$v['id'])->sum('salary'); }else{ $totalSalary = Db::name('salary_record_log')->where('salary_record_id',$v['id'])->sum('salary'); } $lists[$k]['total_salary'] = $totalSalary; } $total = Db::name('salary_record') ->where($map)->count(); $data = [ 'total' => $total, 'list' => $lists?$lists:[] ]; return $data; } public function payinfo($id){ $info = Db::name('salary_record')->where('id',$id)->where('del',0)->find(); if(!$info){ HelpHander::error('数据不存在'); } $info['user_name'] = Db::name('user_info')->where('user_id',$info['user_id'])->value('name'); if($info['status'] == 1||$info['status'] == 2){ $last_time = Db::name('salary_apply_record') ->where('salary_record_id',$info['id']) ->where('status',1) ->where('del',0) ->order('id desc') ->value('update_time'); $info['last_time'] = date('Y年m月d日',strtotime($last_time)); if($info['id'] > 407){ $rsinfo = Db::name('salary_apply_record') ->alias('sar') // ->join('salary_apply sa','sa.id = sar.salary_apply_id') ->join('user_info ui','ui.user_id = sar.user_id') ->where('sar.salary_record_id',$info['id']) ->where('sar.status',1) ->where('sar.sign',2) ->where('sar.del',0) ->order('sar.id asc') ->value('ui.name'); $info['rsl_user_name'] = $rsinfo?$rsinfo:''; $cwinfo = Db::name('salary_apply_record') ->alias('sar') // ->join('salary_apply sa','sa.id = sar.salary_apply_id') ->join('user_info ui','ui.user_id = sar.user_id') ->where('sar.sign',1) ->where('sar.status',1) ->where('sar.del',0) ->where('sar.salary_record_id',$info['id']) ->order('sar.id asc') ->value('ui.name'); $info['kj_user_name'] = $cwinfo?$cwinfo:''; $cwlinfo = Db::name('salary_apply_record') ->alias('sar') // ->join('salary_apply sa','sa.id = sar.salary_apply_id') ->join('user_info ui','ui.user_id = sar.user_id') ->where('sar.salary_record_id',$info['id']) ->where('sar.sign',3) ->where('sar.status',1) ->where('sar.del',0) ->order('sar.id asc') ->value('ui.name'); $info['cwl_user_name'] = $cwlinfo?$cwlinfo:''; }else{ $rsinfo = Db::name('salary_apply_record') ->alias('sar') ->join('salary_apply sa','sa.id = sar.salary_apply_id') ->join('user_info ui','ui.user_id = sar.user_id') ->where('sar.salary_record_id',$info['id']) ->where('sar.status',1) ->where('sa.cate',2) ->where('sar.del',0) ->order('sar.id asc') ->value('ui.name'); $info['rsl_user_name'] = $rsinfo?$rsinfo:''; $cwinfo = Db::name('salary_apply_record') ->alias('sar') ->join('salary_apply sa','sa.id = sar.salary_apply_id') ->join('user_info ui','ui.user_id = sar.user_id') ->where('sa.cate',3) ->where('sar.status',1) ->where('sar.del',0) ->where('sar.salary_record_id',$info['id']) ->order('sar.id asc') ->value('ui.name'); $info['kj_user_name'] = $cwinfo?$cwinfo:''; $cwlinfo = Db::name('salary_apply_record') ->alias('sar') ->join('salary_apply sa','sa.id = sar.salary_apply_id') ->join('user_info ui','ui.user_id = sar.user_id') ->where('sar.salary_record_id',$info['id']) ->where('sa.cate',4) ->where('sar.status',1) ->where('sar.del',0) ->order('sar.id asc') ->value('ui.name'); $info['cwl_user_name'] = $cwlinfo?$cwlinfo:''; if($info['type'] == 1||$info['type'] == 3||$info['type'] == 5){ $info['kj_user_name'] = '郑琳'; }else{ $info['kj_user_name'] = '汪涵'; } $info['cwl_user_name'] = '许倩鸿'; } }else{ $info['last_time'] = ''; $info['kj_user_name'] = ''; $info['rsl_user_name'] = ''; $info['cwl_user_name'] = ''; } if($info['type'] == 5){ $totalSalary = Db::name('user_retired_salary')->where('salary_record_id',$id)->sum('salary'); }else{ $totalSalary = Db::name('salary_record_log')->where('salary_record_id',$id)->sum('salary'); } $use = ""; switch ($info['type']){ case 1: $use = "发放中心编制工资"; break; case 2: $use = "发放新华聘用工资"; break; case 3: $use = "发放中心劳务工资"; break; case 4: $use = "发放新华劳务工资"; break; case 5: $use = "发放中心退休工资"; break; case 6: $use = "发放中心编制工资"; break; case 7: $use = "发放新华聘用年绩效"; break; case 8: $use = "发放中心劳务年绩效"; break; case 9: $use = "发放新华劳务年绩效"; break; } $info['use'] = $use; // 获取上个月 $lastmonth = get_lastmonth_by_day($info['month'].'-01'); // 社保的汇缴是滞后的,即3月请款单上应汇缴的是2月的社保 $lastmonthtxt = date('Y年m月',strtotime($lastmonth.'-01')); if($info['type'] == 1){ $month = date('Y年m月',strtotime($info['month'].'-01')); // $lastinfo = Db::name('salary_record_sb') // ->alias('a') // ->join('salary_record b','a.salary_record_id = b.id') // ->where('b.month',$lastmonth) // ->where('a.ylnj','>',0) // ->field('b.*') // ->find(); // if($lastinfo){ // $info['ylause'] = "基建中心".$lastmonthtxt.$lastinfo['nums']."人职业年金汇缴"; // $hjsalary1 = Db::name('salary_record_sb')->where('salary_record_id',$lastinfo['id'])->sum('ylac'); // $hjsalary2 = Db::name('salary_record_sb')->where('salary_record_id',$lastinfo['id'])->sum('ylap'); // }else{ // $info['ylause'] = "基建中心".$lastmonthtxt."0人职业年金汇缴"; // $hjsalary1 = 0; // $hjsalary2 = 0; // } $hjsalary1 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('ylac'); $hjsalary2 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('ylap'); $info['ylause'] = "基建中心".$lastmonthtxt.$info['nums']."人养老保险汇缴"; $info['ylasalary'] = round($hjsalary1+$hjsalary2,2); $info['ylacompany'] = "中央国家机关养老保险管理中心"; $info['njcompany'] = "中国建设银行中央国家机关事业单位职业年金基金归集财产"; $info['njuse'] = "基建中心".$lastmonthtxt.$info['nums']."人职业年金汇缴"; $hjsalary1 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('qynjc'); $hjsalary2 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('qynjp'); $info['njsalary'] = round($hjsalary1+$hjsalary2,2); // if($lastinfo){ // $info['sbuse'] = "基建中心".$lastmonthtxt.$lastinfo['nums']."人医疗(含生育)、失业、工伤保险汇缴"; // $hjsalary1 = Db::name('salary_record_sb')->where('salary_record_id',$lastinfo['id'])->sum('ylic'); // $hjsalary2 = Db::name('salary_record_sb')->where('salary_record_id',$lastinfo['id'])->sum('ylip'); // $hjsalary3 = Db::name('salary_record_sb')->where('salary_record_id',$lastinfo['id'])->sum('syec'); // $hjsalary4 = Db::name('salary_record_sb')->where('salary_record_id',$lastinfo['id'])->sum('syep'); // $hjsalary5 = Db::name('salary_record_sb')->where('salary_record_id',$lastinfo['id'])->sum('gsc'); // }else{ // $info['sbuse'] = "基建中心".$lastmonthtxt."0人医疗(含生育)、失业、工伤保险汇缴"; // $hjsalary1 = 0; // $hjsalary2 = 0; // $hjsalary3 = 0; // $hjsalary4 = 0; // $hjsalary5 = 0; // } $info['sbuse'] = "基建中心".$lastmonthtxt.$info['nums']."人医疗(含生育)、失业、工伤保险汇缴"; $hjsalary1 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('ylic'); $hjsalary2 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('ylip'); $hjsalary3 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('syec'); $hjsalary4 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('syep'); $hjsalary5 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('gsc'); $info['sbcompany'] = "国家税务总局北京市西城区税务局"; // $info['sbuse'] = "基建中心".$month.$info['nums']."人医疗(含生育)、失业、工伤保险汇缴"; $info['sbsalary'] = round($hjsalary1+$hjsalary2+$hjsalary3+$hjsalary4+$hjsalary5,2); $info['gjjcompany'] = "中央国家机关住房资金管理中心"; $info['gjjuse'] = "基建中心".$month.$info['nums']."人住房公积金汇缴"; $hjsalary1 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('gjjc'); $hjsalary2 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('gjjp'); $info['gjjsalary'] = round($hjsalary1+$hjsalary2,2); }else if($info['type'] == 2){ $month = date('Y年m月',strtotime($info['month'].'-01')); $info['gjjcompany'] = "中央国家机关住房资金管理中心"; $info['gjjuse'] = "新华公司".$month.$info['nums']."人住房公积金汇缴"; $hjsalary1 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('gjjc'); $hjsalary2 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('gjjp'); $info['gjjsalary'] = round($hjsalary1+$hjsalary2,2); $info['njcompany'] = "中国银行建信养老养颐乐安享集合计划受托财产"; $info['njuse'] = "新华公司".$month.$info['nums']."人企业年金汇缴"; $hjsalary1 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('qynjc'); $hjsalary2 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('qynjp'); $info['njsalary'] = round($hjsalary1+$hjsalary2,2); // $lastinfo = Db::name('salary_record_sb') // ->alias('a') // ->join('salary_record b','a.salary_record_id = b.id') // ->where('b.month',$lastmonth) // ->where('a.sb','>',0) // ->field('b.*') // ->find(); // if($lastinfo){ // $info['sbuse'] = "新华公司".$lastmonthtxt.$lastinfo['nums']."人养老、医疗(含生育)、失业、工伤保险汇缴"; // $hjsalary1 = Db::name('salary_record_sb')->where('salary_record_id',$lastinfo['id'])->sum('ylic'); // $hjsalary2 = Db::name('salary_record_sb')->where('salary_record_id',$lastinfo['id'])->sum('ylip'); // $hjsalary3 = Db::name('salary_record_sb')->where('salary_record_id',$lastinfo['id'])->sum('syec'); // $hjsalary4 = Db::name('salary_record_sb')->where('salary_record_id',$lastinfo['id'])->sum('syep'); // $hjsalary5 = Db::name('salary_record_sb')->where('salary_record_id',$lastinfo['id'])->sum('gsc'); // $hjsalary6 = Db::name('salary_record_sb')->where('salary_record_id',$lastinfo['id'])->sum('ylac'); // $hjsalary7 = Db::name('salary_record_sb')->where('salary_record_id',$lastinfo['id'])->sum('ylap'); // }else{ // $info['sbuse'] = "新华公司".$lastmonthtxt."0人养老、医疗(含生育)、失业、工伤保险汇缴"; // $hjsalary1 = 0; // $hjsalary2 = 0; // $hjsalary3 = 0; // $hjsalary4 = 0; // $hjsalary5 = 0; // $hjsalary6 = 0; // $hjsalary7 = 0; // } $info['sbuse'] = "新华公司".$lastmonthtxt.$info['nums']."人养老、医疗(含生育)、失业、工伤保险汇缴"; $hjsalary1 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('ylic'); $hjsalary2 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('ylip'); $hjsalary3 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('syec'); $hjsalary4 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('syep'); $hjsalary5 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('gsc'); $hjsalary6 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('ylac'); $hjsalary7 = Db::name('salary_record_sb')->where('salary_record_id',$id)->sum('ylap'); $info['sbcompany'] = "国家税务总局北京市西城区税务局"; // $info['sbuse'] = "基建中心".$month.$info['nums']."人养老、医疗(含生育)、失业、工伤保险汇缴"; $info['sbsalary'] = round($hjsalary1+$hjsalary2+$hjsalary3+$hjsalary4+$hjsalary5+$hjsalary6+$hjsalary7,2); } $info['total_salary'] = $totalSalary; return $info; } public function del($id){ $info = Db::name('salary_record')->where('id',$id)->where('del',0)->find(); if(!$info){ HelpHander::error('数据不存在'); } // if($info['status'] == 2){ // HelpHander::error('该状态不能删除'); // } $ret = Db::name('salary_record')->where('id',$id)->setField('del',1); if(!$ret){ HelpHander::error('操作失败'); } return true; } public function send($id){ $info = Db::name('salary_record')->where('id',$id)->where('del',0)->find(); if(!$info){ HelpHander::error('记录不存在'); } if($info['status'] != 3){ HelpHander::error('该状态不能重新发放'); } $ret = Db::name('salary_record')->where('id',$id)->setField('status',0); if(!$ret){ HelpHander::error('操作失败'); } return true; } // 工资列表 public function listLog($page,$size,$name,$id){ $info = $this->info($id); if($info['type'] == 5){ // 退休 $data = model('UserRetiredSalary')->lists($page,$size,$name,$info['id']); } else { if($name != ''){ $map[] = ['ui.name','like','%'.$name.'%']; } $map[] = ['ur.salary_record_id','=',$info['id']]; $lists = Db::name('salary_record_log') ->alias('ur') ->join('user_info ui','ui.user_id = ur.user_id') ->where($map) ->field('ur.*,ui.name') ->page($page,$size) ->order('ui.sorts3 asc,ur.id desc') ->select(); $lists = $lists?$lists:[]; foreach ($lists as $k=>$v){ $lists[$k]['user_sn'] = think_encrypt($v['user_id']); if($info['type'] == 1||$info['type'] == 2){ $sb = Db::name('salary_record_sb')->where('salary_record_id',$v['salary_record_id'])->where('user_id',$v['user_id'])->find(); $lists[$k]['gjjp'] = $sb?$sb['gjjp']:0; $lists[$k]['qynjp'] = $sb?$sb['qynjp']:0; $lists[$k]['ylap'] = $sb?$sb['ylap']:0; $lists[$k]['syep'] = $sb?$sb['syep']:0; $lists[$k]['ylip'] = $sb?$sb['ylip']:0; } $btjson = $v['btjson']?json_decode($v['btjson'],true):[]; $kcmoney = 0; foreach ($btjson as $kk=>$vv){ $lists[$k]['subsidies'.$vv['id']] = $vv['money']; if($vv['cate'] == 2){ // 扣除项 $kcmoney += $vv['money']; } } $lists[$k]['dktotal'] = round($v['sbgjj'] + $v['tax'] + $kcmoney,2); $depjob = Db::name('user_job') ->alias('uj') ->join('job j','j.id = uj.job_id') ->join('dep d','d.id = j.dep_id') ->where('d.enable',1) ->where('uj.user_id',$v['user_id']) ->field('d.name as dep_name,j.name as job_name') ->find(); $lists[$k]['dep_name'] = $depjob?$depjob['dep_name']:''; //职级 $lists[$k]['job_name'] = Db::name('post_salary')->where('id',$v['psid'])->value('title'); } $total = Db::name('salary_record_log') ->alias('ur') ->join('user_info ui','ui.user_id = ur.user_id') ->where($map)->count(); $data = [ 'total' => $total, 'list' => $lists?$lists:[] ]; } $data['info'] = $info; return $data; } // 个税累计列表 public function listSpecial($page,$size,$name,$id){ $info = $this->info($id); if($info){ if($name != ''){ $map[] = ['ui.name','like','%'.$name.'%']; } $map[] = ['ur.salary_record_id','=',$info['id']]; $lists = Db::name('salary_record_special') ->alias('ur') ->join('user_info ui','ui.user_id = ur.user_id') ->where($map) ->field('ur.*,ui.name,ui.pwlevel') ->page($page,$size) ->order('ui.sorts3 asc,ur.id desc') ->select(); $lists = $lists?$lists:[]; foreach ($lists as $k=>$v){ $ljkc = $v['ljsr'] - $v['ljsqljxmhj']; // 累计预扣预缴应纳税所得额 $lists[$k]['ljkc'] = round($ljkc,2); $lists[$k]['ljyykyjsr'] = 0; $lists[$k]['jmsr'] = 0; $ljykjse = $v['ljykjse'] + $v['tax']; $lists[$k]['ljykjse'] = round($ljykjse,2); if($ljkc > 0){ $tax = $this->getYkyjTax($ljkc); // 累计应预扣预缴税额 $lists[$k]['ljyykyjsr'] = round($tax,2); $jmse = round($tax*$v['jmsebl'],2); // 减免税额 $lists[$k]['jmsr'] = $jmse; $tax = round($tax - $jmse - $ljykjse,2); $tax = $tax>0?$tax:0; }else{ $tax = 0; } $lists[$k]['nextTax'] = $tax; } $total = Db::name('salary_record_special') ->alias('ur') ->join('user_info ui','ui.user_id = ur.user_id') ->where($map)->count(); $data = [ 'total' => $total, 'list' => $lists?$lists:[] ]; } $data['info'] = $info; return $data; } // 导出 public function exportListLog($name,$id){ $info = $this->info($id); if($info['type'] == 5){ // 退休 $data = model('UserRetiredSalary')->lists(1,100000,$name,$info['id']); } else { if($name != ''){ $map[] = ['ui.name','like','%'.$name.'%']; } $map[] = ['ur.salary_record_id','=',$info['id']]; $lists = Db::name('salary_record_log') ->alias('ur') ->join('user_info ui','ui.user_id = ur.user_id') ->where($map) ->field('ur.*,ui.name,ui.pwlevel') ->order('ui.sorts3 asc,ur.id desc') ->select(); $lists = $lists?$lists:[]; foreach ($lists as $k=>$v){ if($info['type'] == 1||$info['type'] == 2){ $sb = Db::name('salary_record_sb')->where('salary_record_id',$v['salary_record_id'])->where('user_id',$v['user_id'])->find(); $lists[$k]['gjjp'] = $sb?$sb['gjjp']:0; $lists[$k]['qynjp'] = $sb?$sb['qynjp']:0; $lists[$k]['ylap'] = $sb?$sb['ylap']:0; $lists[$k]['syep'] = $sb?$sb['syep']:0; $lists[$k]['ylip'] = $sb?$sb['ylip']:0; } $btjson = $v['btjson']?json_decode($v['btjson'],true):[]; $kcmoney = 0; foreach ($btjson as $kk=>$vv){ $lists[$k]['subsidies'.$vv['id']] = $vv['money']; if($vv['cate'] == 2){ $kcmoney += $vv['money']; } } $lists[$k]['dktotal'] = $v['sbgjj'] + $v['tax'] + $kcmoney; $depjob = Db::name('user_job') ->alias('uj') ->join('job j','j.id = uj.job_id') ->join('dep d','d.id = j.dep_id') ->where('uj.user_id',$v['user_id']) ->field('d.name as dep_name,j.name as job_name') ->find(); $lists[$k]['dep_name'] = $depjob?$depjob['dep_name']:''; //职级 $lists[$k]['job_name'] = Db::name('post_salary')->where('id',$v['psid'])->value('title'); } if($lists){ $darr = $lists[0]; foreach ($darr as $k=>$v){ $darr[$k] = ''; if($k == 'name'){ $darr[$k] = '合计'; } if($info['type'] == 5){ $arrs = ['bz','zysdbt','fb','wybt']; if(in_array($k,$arrs)){ $val = 0; foreach ($lists as $kk=>$vv){ $val += $vv[$k]; } $darr[$k] = round($val,2); } }else{ $arrs = ['gwgz','xjgz','jcjx','yjx','should_total','child','dktotal','njx','tax']; if(in_array($k,$arrs)){ $val = 0; foreach ($lists as $kk=>$vv){ $val += $vv[$k]; } $darr[$k] = round($val,2); } } $arrs = ['salary']; foreach ($info['types'] as $kkk=>$vvv){ $arrs[] = "subsidies".$vvv['id']; } if(in_array($k,$arrs)){ $val = 0; foreach ($lists as $kk=>$vv){ $val += $vv[$k]; } $darr[$k] = round($val,2); } if($info['type'] == 1||$info['type'] == 2){ $arrs = ['gjjp','qynjp','ylap','ylip','syep','tax']; if(in_array($k,$arrs)){ $val = 0; foreach ($lists as $kk=>$vv){ $val += $vv[$k]; } $darr[$k] = round($val,2); } } if($info['type'] == 3||$info['type'] == 4){ $arrs = ['tax']; if(in_array($k,$arrs)){ $val = 0; foreach ($lists as $kk=>$vv){ $val += $vv[$k]; } $darr[$k] = round($val,2); } } } $lists[] = $darr; } //转成数字格式 $extra = ['dep_name','name','job_name']; foreach ($lists as $k=>$v){ foreach ($v as $kk=>$vv){ if(!in_array($kk,$extra)){ $v[$kk] = (float)$vv; } } $lists[$k] = $v; } $data = [ 'total' => count($lists), 'list' => $lists?$lists:[] ]; } $columns = [ ["title" => "姓名","key" => "name"] ]; if($info['type'] == 5){ $columns[] = ["title" => "补助","key" => "bz"]; $columns[] = ["title" => "中央适当补贴","key" => "zysdbt"]; $columns[] = ["title" => "房补","key" => "fb"]; $columns[] = ["title" => "物业补贴","key" => "wybt"]; }else if(in_array($info['type'],[1,2,3,4])){ $columns[] = ["title" => "部门","key" => "depName"]; $columns[] = ["title" => "职级","key" => "jobName"]; $columns[] = ["title" => "薪级","key" => "pwlevel"]; $columns[] = ["title" => "岗位工资","key" => "gwgz"]; $columns[] = ["title" => "薪级工资","key" => "xjgz"]; $columns[] = ["title" => "基础绩效","key" => "jcjx"]; $columns[] = ["title" => "月绩效","key" => "yjx"]; }else if(in_array($info['type'],[6,7])){ $columns[] = ["title" => "部门","key" => "depName"]; $columns[] = ["title" => "职级","key" => "jobName"]; $columns[] = ["title" => "薪级","key" => "pwlevel"]; $columns[] = ["title" => "年绩效","key" => "njx"]; $columns[] = ["title" => "等次","key" => "level"]; $columns[] = ["title" => "系数","key" => "factor"]; $columns[] = ["title" => "发放月数","key" => "months"]; }else if(in_array($info['type'],[8,9])){ $columns[] = ["title" => "部门","key" => "depName"]; $columns[] = ["title" => "职级","key" => "jobName"]; $columns[] = ["title" => "薪级","key" => "pwlevel"]; $columns[] = ["title" => "年绩效","key" => "njx"]; } foreach ($info['types'] as $k=>$v){ if($v['cate'] == 1){ $columns[] = ["title" => $v['title'],"key" => "subsidies".$v['id']]; } } if($info['type'] != 5){ $columns[] = ["title" => "应发工资","key" => "shouldTotal"]; } foreach ($info['types'] as $k=>$v){ if($v['cate'] != 1){ $columns[] = ["title" => $v['title'],"key" => "subsidies".$v['id']]; } } if($info['type'] == 1||$info['type'] == 2){ // $columns[] = ["title" => "社保公积金代扣","key" => "sbgjj"]; $columns[] = ["title" => "公积金","key" => "gjjp"]; if($info['type'] == 1){ $columns[] = ["title" => "职业年金","key" => "qynjp"]; }else{ $columns[] = ["title" => "企业年金","key" => "qynjp"]; } $columns[] = ["title" => "养老保险","key" => "ylap"]; $columns[] = ["title" => "医疗保险","key" => "ylip"]; $columns[] = ["title" => "失业保险","key" => "syep"]; } if(in_array($info['type'],[6,7])){ $columns[] = ["title" => "适用税率","key" => "taxrate"]; } if($info['type'] != 5){ $columns[] = ["title" => "个税","key" => "tax"]; } if($info['type'] < 5){ $columns[] = ["title" => "代扣合计","key" => "dktotal"]; } $columns[] = ["title" => "实发工资","key" => "salary"]; $data = [ 'columns' => $columns, 'list' => $data['list'] ]; return $data; } public function mySalary($page,$size,$month,$userId){ if($month != ''){ $map[] = ['month','=',$month]; } $map[] = ['user_id','=',$userId]; $lists = Db::name('common_salary') ->where($map) ->page($page,$size) ->order('month desc,id desc') ->select(); foreach ($lists as $k=>$v){ if($v['type'] == 1){ $lists[$k]['type_name'] = '中心编制'; }else if($v['type'] == 2){ $lists[$k]['type_name'] = '新华聘用'; }else if($v['type'] == 3){ $lists[$k]['type_name'] = '中心劳务'; }else if($v['type'] == 4){ $lists[$k]['type_name'] = '新华劳务'; }else if($v['type'] == 6){ $lists[$k]['type_name'] = '中心编制年绩效'; }else if($v['type'] == 7){ $lists[$k]['type_name'] = '新华聘用年绩效'; }else if($v['type'] == 8){ $lists[$k]['type_name'] = '中心劳务年绩效'; }else if($v['type'] == 9){ $lists[$k]['type_name'] = '新华劳务年绩效'; }else{ $lists[$k]['type_name'] = '中心退休'; } } $total = Db::name('common_salary') ->where($map)->count(); $data = [ 'total' => $total, 'list' => $lists?$lists:[] ]; return $data; } public function salaryDetail($id,$userId){ $info = Db::name('common_salary')->where('id',$id)->where('user_id',$userId)->find(); if(!$info){ HelpHander::error('记录不存在'); } if($info['type'] == 5){ // 退休 $data = Db::name('user_retired_salary')->where('salary_record_id',$id)->where('user_id',$userId)->find(); }else{ // 其他 $data = Db::name('salary_record_log')->where('salary_record_id',$id)->where('user_id',$userId)->find(); } if(!$data){ HelpHander::error('工资不存在'); } $data['pay_type'] = $info['type']; $data['btjson'] = $data['btjson']?json_decode($data['btjson'],true):[]; $btmoney = $kcmoney = 0; foreach ($data['btjson'] as $k=>$v){ if($v['cate'] == 1){ // 补贴 $btmoney += floatval($v['money']); }else{ $kcmoney += floatval($v['money']); } } $data['btmoney'] = round($btmoney,2); $data['kcmoney'] = round($kcmoney,2); $data['gjj'] = '0'; $data['yla'] = '0'; $data['qynj'] = '0'; $data['yli'] = '0'; $data['sye'] = '0'; $sbdata = Db::name('salary_record_sb')->where('salary_record_id',$id)->where('user_id',$userId)->find(); if($sbdata){ $data['gjj'] = $sbdata['gjjp']; $data['yla'] = $sbdata['ylap']; $data['qynj'] = $sbdata['qynjp']; $data['yli'] = $sbdata['ylip']; $data['sye'] = $sbdata['syep']; } return $data; } public function sbinfo($id,$uid){ $info = Db::name('salary_record_sb') ->alias('srs') ->join('salary_record sr','sr.id = srs.salary_record_id') ->where('srs.salary_record_id',$id) ->where('srs.user_id',$uid) ->field('sr.type,srs.*') ->find(); if(!$info){ HelpHander::error('数据不存在'); } return $info; } public function taxinfo($id,$uid){ $info = Db::name('salary_record_special') ->alias('srs') ->join('salary_record sr','sr.id = srs.salary_record_id') ->where('srs.salary_record_id',$id) ->where('srs.user_id',$uid) ->field('sr.type,srs.*') ->find(); if(!$info){ HelpHander::error('数据不存在'); } return $info; } // 同意 或签 public function agree($id,$userId,$orgId){ $info = Db::name('salary_record')->where('id',$id)->where('del',0)->find(); if(!$info){ HelpHander::error('记录不存在'); } if($info['status'] != 0){ HelpHander::error('无权限操作'); } $uinfo = Db::name('salary_apply_record') ->where('salary_record_id',$id) ->where('user_id',$userId) ->where('salary_apply_id',$info['cur_node']) ->where('status',0) ->where('del',0) ->find(); if(!$uinfo){ HelpHander::error('无权限操作'); } $apply = json_decode($info['apply'],true); Db::startTrans(); try{ $res = Db::name('salary_apply_record')->where('del',0)->where('id',$uinfo['id'])->update(['status'=>1,'update_time'=>date('Y-m-d H:i:s')]); if(!$res){ \exception('操作失败'); } if($info['cur_node'] == $apply[count($apply)-1]['id']){ // 最后一个节点 $res2 = Db::name('salary_record')->where('id',$id)->setField('status',1); if(!$res2){ \exception('操作失败'); } }else{ // 获取下一节点 $next = []; foreach ($apply as $k=>$v){ if($v['id'] == $info['cur_node']){ $next = $apply[$k+1]; break; } } $res2 = Db::name('salary_record')->where('id',$id)->setField('cur_node',$next['id']); if(!$res2){ \exception('操作失败'); } // 生成审核记录 $uids = explode(',',$next['userids']); foreach ($uids as $k=>$v){ $sd = [ 'salary_record_id' => $id, 'user_id' => $v, 'status' => 0, 'create_time' => date('Y-m-d H:i:s'), 'salary_apply_id' => $next['id'], 'sign' => $next['sign'] ]; $ret = Db::name('salary_apply_record')->insertGetId($sd); if(!$ret){ \exception('操作失败'); } model('Message')->add(3,$id,12,$v,$orgId,'工资流程待您的审核确认'); } } Db::commit(); }catch (Exception $e){ Db::rollback(); $this->error = '操作失败'; return false; } return true; } // 打回 public function disagree($id,$userId,$orgId){ $info = Db::name('salary_record')->where('id',$id)->where('del',0)->find(); if(!$info){ HelpHander::error('记录不存在'); } if($info['status'] != 0){ HelpHander::error('无权限操作'); } $uinfo = Db::name('salary_apply_record') ->where('salary_record_id',$id) ->where('user_id',$userId) ->where('salary_apply_id',$info['cur_node']) ->where('status',0) ->where('del',0) ->find(); if(!$uinfo){ HelpHander::error('无权限操作'); } Db::startTrans(); try{ $res = Db::name('salary_apply_record')->where('del',0)->where('id',$uinfo['id'])->update(['status'=>2,'update_time'=>date('Y-m-d H:i:s')]); if(!$res){ \exception('操作失败'); } $res2 = Db::name('salary_record')->where('id',$id)->setField('status',3); if(!$res2){ \exception('操作失败'); } Db::commit(); }catch (Exception $e){ Db::rollback(); $this->error = '操作失败'; return false; } return true; } public function reapply($id,$userId,$orgId){ $info = Db::name('salary_record')->where('id',$id)->where('del',0)->find(); if(!$info){ HelpHander::error('记录不存在'); } if($info['status'] != 3 || $info['user_id'] != $userId){ HelpHander::error('无权限操作'); } Db::startTrans(); try{ // 删除原审批记录 Db::name('salary_apply_record')->where('salary_record_id',$id)->update(['del'=>1,'update_time'=>date('Y-m-d H:i:s')]); $apply = json_decode($info['apply'],true); $curinfo = $apply[0]; $res2 = Db::name('salary_record')->where('id',$id)->update(['status'=>0,'cur_node'=>$curinfo['id']]); if(!$res2){ \exception('操作失败'); } // 生成审核记录 $uids = explode(',',$curinfo['userids']); foreach ($uids as $k=>$v){ $sd = [ 'salary_record_id' => $id, 'user_id' => $v, 'status' => 0, 'create_time' => date('Y-m-d H:i:s'), 'salary_apply_id' => $curinfo['id'], 'sign' => $curinfo['sign'], ]; $ret = Db::name('salary_apply_record')->insertGetId($sd); if(!$ret){ \exception('操作失败'); } model('Message')->add(3,$id,12,$v,$orgId,'工资流程待您的审核确认'); } Db::commit(); }catch (Exception $e){ Db::rollback(); $this->error = '操作失败'; return false; } return true; } // 会签版本 public function agreeold($id,$userId,$orgId){ $info = Db::name('salary_record')->where('id',$id)->where('del',0)->find(); if(!$info){ HelpHander::error('记录不存在'); } if($info['status'] != 0){ HelpHander::error('无权限操作'); } $uinfo = Db::name('salary_apply_record') ->where('salary_record_id',$id) ->where('user_id',$userId) ->where('salary_apply_id',$info['cur_node']) ->where('status',0) ->where('del',0) ->find(); if(!$uinfo){ HelpHander::error('无权限操作'); } // 检查是否有除自己之外的未处理的人 $others = Db::name('salary_apply_record') ->where('salary_record_id',$id) ->where('user_id','<>',$userId) ->where('salary_apply_id',$info['cur_node']) ->where('del',0) ->where('status',0) ->find(); $apply = json_decode($info['apply'],true); Db::startTrans(); try{ $res = Db::name('salary_apply_record')->where('del',0)->where('id',$uinfo['id'])->update(['status'=>1,'update_time'=>date('Y-m-d H:i:s')]); if(!$res){ \exception('操作失败'); } if(!$others){ // 没有未处理的人了,走下一节点 if($info['cur_node'] == $apply[count($apply)-1]['id']){ // 最后一个节点 $res2 = Db::name('salary_record')->where('id',$id)->setField('status',1); if(!$res2){ \exception('操作失败'); } }else{ // 获取下一节点 $next = []; foreach ($apply as $k=>$v){ if($v['id'] == $info['cur_node']){ $next = $apply[$k+1]; break; } } $res2 = Db::name('salary_record')->where('id',$id)->setField('cur_node',$next['id']); if(!$res2){ \exception('操作失败'); } // 生成审核记录 $uids = explode(',',$next['userids']); foreach ($uids as $k=>$v){ $sd = [ 'salary_record_id' => $id, 'user_id' => $v, 'status' => 0, 'create_time' => date('Y-m-d H:i:s'), 'salary_apply_id' => $next['id'] ]; $ret = Db::name('salary_apply_record')->insertGetId($sd); if(!$ret){ \exception('操作失败'); } model('Message')->add(3,$id,12,$v,$orgId,'工资流程待您的审核确认'); } } } Db::commit(); }catch (Exception $e){ Db::rollback(); return false; } return true; } public function confirm($id,$userId){ $info = Db::name('salary_record')->where('id',$id)->where('del',0)->find(); if(!$info){ HelpHander::error('记录不存在'); } if($info['status'] != 1){ HelpHander::error('无权限操作'); } $res = Db::name('salary_record')->where('id',$id)->update([ 'cw_time' => date('Y-m-d H:i:s'), 'cw_user_id' => $userId, 'status' => 2 ]); if(!$res){ HelpHander::error('操作失败'); } return true; } // 工资统计 public function financeSalaryStructure($type,$cate){ $map[] = ['b.type','=',$cate]; $map[] = ['b.status','=',2]; $map[] = ['b.del','=',0]; if($type == 1){ $map[] = ['b.month','=',date('Y-m')]; }else {// 当年 $year = date('Y'); $startMonth = $year . '-01'; $endMonth = ($year + 1) . '-01'; $map[] = ['b.month','>=',$startMonth]; $map[] = ['b.month','<',$endMonth]; } if($cate == 5){ // 中心养老 $total = Db::name('user_retired_salary') ->alias('a') ->join('salary_record b','b.id = a.salary_record_id') ->where($map) ->sum('salary'); }else{// 其他 $total = Db::name('salary_record_log') ->alias('a') ->join('salary_record b','b.id = a.salary_record_id') ->where($map) ->sum('salary'); } return $total; } public function taxlist($page,$size,$month,$name,$type){ if($month != ''){ $map[] = ['sr.month','=',$month]; } if($name != ''){ $map[] = ['ui.name','=',$name]; } if(in_array($type,[1,2])){ $map[] = ['sr.type','=',$type]; } $map[] = ['sr.del','=',0]; $map = empty($map)?true:$map; $lists = Db::name('salary_record_special') ->alias('srs') ->join('salary_record sr','sr.id = srs.salary_record_id') ->join('user_info ui','ui.user_id = srs.user_id') ->where($map) ->page($page,$size) ->order('sr.id desc,ui.sorts3 asc') ->field('srs.*,ui.name,sr.month') ->select(); foreach ($lists as $k=>$v){ $ljkc = $v['ljsr'] - $v['ljsqljxmhj']; // 累计预扣预缴应纳税所得额 $lists[$k]['ljkc'] = round($ljkc,2); $lists[$k]['ljyykyjsr'] = 0; $lists[$k]['jmsr'] = 0; $ljykjse = $v['ljykjse'] + $v['tax']; $lists[$k]['ljykjse'] = round($ljykjse,2); if($ljkc > 0){ $tax = $this->getYkyjTax($ljkc);// 累计应预扣预缴税额 $lists[$k]['ljyykyjsr'] = round($tax,2); $jmse = round($tax*$v['jmsebl'],2); // 减免税额 $lists[$k]['jmsr'] = $jmse; $tax = round($tax - $jmse - $ljykjse,2); $tax = $tax>0?$tax:0; }else{ $tax = 0; } $lists[$k]['nextTax'] = $tax; } $total = Db::name('salary_record_special') ->alias('srs') ->join('salary_record sr','sr.id = srs.salary_record_id') ->join('user_info ui','ui.user_id = srs.user_id') ->where($map)->count(); $data = [ 'total' => $total, 'list' => $lists?$lists:[] ]; return $data; } // 个税累计列表 public function ntaxlist($month,$name,$type){ if($month){ $map[] = ['sr.month','=',$month]; }else{ return []; } if($name != ''){ $map[] = ['ui.name','=',$name]; } if(in_array($type,[1,2])){ $map[] = ['sr.type','=',$type]; } $map[] = ['sr.del','=',0]; $map = empty($map)?true:$map; $lists = Db::name('salary_record_special') ->alias('srs') ->join('salary_record sr','sr.id = srs.salary_record_id') ->join('user_info ui','ui.user_id = srs.user_id') ->where($map) ->group('sr.month,srs.user_id') ->field('srs.*,ui.name,sr.month') ->order('sr.id desc,ui.sorts3 asc') ->select(); foreach ($lists as $k=>$v){ $children = Db::name('salary_record_special') ->alias('srs') ->join('salary_record sr','sr.id = srs.salary_record_id') ->join('user_info ui','ui.user_id = srs.user_id') ->where('sr.month',$v['month']) ->where('srs.user_id',$v['user_id']) ->where('sr.del',0) ->field('srs.*,ui.name,sr.month') ->order('srs.id desc') ->select(); $nsalary = 0; $nmssr = 0; $nsr = 0; foreach ($children as $kk=>$vv){ $ljkc = $vv['ljsr'] - $vv['ljsqljxmhj']; // 累计预扣预缴应纳税所得额 $children[$kk]['ljkc'] = round($ljkc,2); $children[$kk]['ljyykyjsr'] = 0; $children[$kk]['jmsr'] = 0; $ljykjse = $vv['ljykjse'] + $vv['tax']; $children[$kk]['ljykjse'] = round($ljykjse,2); if($ljkc > 0){ $tax = $this->getYkyjTax($ljkc);// 累计应预扣预缴税额 $children[$kk]['ljyykyjsr'] = round($tax,2); $jmse = round($tax*$vv['jmsebl'],2); // 减免税额 $children[$kk]['jmsr'] = $jmse; $tax = round($tax - $jmse - $ljykjse,2); $tax = $tax>0?$tax:0; }else{ $tax = 0; } $children[$kk]['nextTax'] = $tax; $children[$kk]['child'] = 1; $nsalary += $vv['salary']; $nmssr += $vv['mssr']; $nsr += $vv['sr']; $children[$kk]['nsalary'] = $vv['salary']; $children[$kk]['nmssr'] = $vv['mssr']; $children[$kk]['nsr'] = $vv['sr']; $children[$kk]['unique'] = 'C'.$vv['id']; } $lists[$k] = $children[0]; $lists[$k]['child'] = 0; $lists[$k]['nsalary'] = round($nsalary,2); $lists[$k]['nmssr'] = round($nmssr,2); $lists[$k]['nsr'] = round($nsr,2); $lists[$k]['unique'] = $children[0]['id']; if(count($children) >= 2){ $lists[$k]['children'] = $children; } } return $lists?$lists:[]; } public function ntaxexport($month,$name,$type){ if($month != ''){ $map[] = ['sr.month','=',$month]; } if($name != ''){ $map[] = ['ui.name','=',$name]; } if(in_array($type,[1,2])){ $map[] = ['sr.type','=',$type]; } $map[] = ['sr.del','=',0]; $map = empty($map)?true:$map; $lists = Db::name('salary_record_special') ->alias('srs') ->join('salary_record sr','sr.id = srs.salary_record_id') ->join('user_info ui','ui.user_id = srs.user_id') ->where($map) ->group('sr.month,srs.user_id') ->field('srs.*,ui.name,sr.month') ->order('sr.id desc,ui.sorts3 asc') ->select(); foreach ($lists as $k=>$v){ $children = Db::name('salary_record_special') ->alias('srs') ->join('salary_record sr','sr.id = srs.salary_record_id') ->join('user_info ui','ui.user_id = srs.user_id') ->where('sr.month',$v['month']) ->where('srs.user_id',$v['user_id']) ->where('sr.del',0) ->field('srs.*,ui.name,sr.month') ->order('srs.id desc') ->select(); $nsalary = 0; $nmssr = 0; $nsr = 0; foreach ($children as $kk=>$vv){ $ljkc = $vv['ljsr'] - $vv['ljsqljxmhj']; // 累计预扣预缴应纳税所得额 $children[$kk]['ljkc'] = round($ljkc,2); $children[$kk]['ljyykyjsr'] = 0; $children[$kk]['jmsr'] = 0; $ljykjse = $vv['ljykjse'] + $vv['tax']; $children[$kk]['ljykjse'] = round($ljykjse,2); if($ljkc > 0){ $tax = $this->getYkyjTax($ljkc);// 累计应预扣预缴税额 $children[$kk]['ljyykyjsr'] = round($tax,2); $jmse = round($tax*$vv['jmsebl'],2); // 减免税额 $children[$kk]['jmsr'] = $jmse; $tax = round($tax - $jmse - $ljykjse,2); $tax = $tax>0?$tax:0; }else{ $tax = 0; } $children[$kk]['nextTax'] = $tax; $children[$kk]['child'] = 1; $nsalary += $vv['salary']; $nmssr += $vv['mssr']; $nsr += $vv['sr']; $children[$kk]['nsalary'] = $vv['salary']; $children[$kk]['nmssr'] = $vv['mssr']; $children[$kk]['nsr'] = $vv['sr']; $children[$kk]['unique'] = 'C'.$vv['id']; } $lists[$k] = $children[0]; $lists[$k]['child'] = 0; $lists[$k]['nsalary'] = round($nsalary,2); $lists[$k]['nmssr'] = round($nmssr,2); $lists[$k]['nsr'] = round($nsr,2); $lists[$k]['unique'] = $children[0]['id']; if(count($children) >= 2){ $lists[$k]['children'] = $children; } } //转成数字格式 $extra = ['month','name']; foreach ($lists as $k=>$v){ foreach ($v as $kk=>$vv){ if(!in_array($kk,$extra)){ $v[$kk] = (float)$vv; } } $lists[$k] = $v; } $columns[] = ["title" => "月份","key" => "month"]; $columns[] = ["title" => "姓名","key" => "name"]; $columns[] = ["title" => "应发工资","key" => "nsalary"]; $columns[] = ["title" => "免税收入","key" => "nmssr"]; $columns[] = ["title" => "应税收入","key" => "nsr"]; $columns[] = ["title" => "累计应税收入","key" => "ljsr"]; $columns[] = ["title" => "累计减除费用","key" => "ljjc"]; $columns[] = ["title" => "累计公积金","key" => "ljgjj"]; $columns[] = ["title" => "累计养老保险","key" => "ljylobx"]; $columns[] = ["title" => "累计失业保险","key" => "ljsybx"]; $columns[] = ["title" => "累计医疗保险","key" => "ljylibx"]; $columns[] = ["title" => "累计职业年金","key" => "ljnj"]; $columns[] = ["title" => "累计子女教育","key" => "ljznjy"]; $columns[] = ["title" => "累计继续教育","key" => "ljjxjy"]; $columns[] = ["title" => "累计住房贷款利息","key" => "ljzfdklx"]; $columns[] = ["title" => "累计住房租金","key" => "ljzfzj"]; $columns[] = ["title" => "累计赡养老人","key" => "ljsylr"]; $columns[] = ["title" => "商业健康保险","key" => "syjkbx"]; $columns[] = ["title" => "延税养老保险","key" => "ysylbx"]; $columns[] = ["title" => "个人补扣/补交社保年金","key" => "grbk"]; $columns[] = ["title" => "年终奖补交社保年金","key" => "jzjbjsb"]; $columns[] = ["title" => "工资中补交社保年金","key" => "ljgzds"]; $columns[] = ["title" => "累计准予扣除的捐赠额","key" => "zykcjze"]; $columns[] = ["title" => "累计其他扣除","key" => "qtkc"]; $columns[] = ["title" => "税前扣除项目合计","key" => "ljsqljxmhj"]; $columns[] = ["title" => "累计预扣预缴应纳税所得额","key" => "ljkc"]; $columns[] = ["title" => "累计应预扣预缴税额","key" => "ljyykyjsr"]; $columns[] = ["title" => "减免税额","key" => "jmsr"]; $columns[] = ["title" => "累计已扣缴税额","key" => "ljykjse"]; $columns[] = ["title" => "下月应扣个人所得税税额","key" => "nextTax"]; $data = [ 'columns' => $columns, 'list' => $lists ]; return $data; } // 根据累计预扣预缴应纳税所得额获取累计应预扣预缴税额 public function getYkyjTax($ljkc){ $tax1 = $ljkc*0.03 - 0; $tax2 = $ljkc*0.1 - 2520; $tax3 = $ljkc*0.2 - 16920; $tax4 = $ljkc*0.25 - 31920; $tax5 = $ljkc*0.3 - 52920; $tax6 = $ljkc*0.35 - 85920; $tax7 = $ljkc*0.45 - 181920; $tax = round(max([$tax1,$tax2,$tax3,$tax4,$tax5,$tax6,$tax7]),2); // 累计应预扣预缴税额 return $tax; } public function taxEdit(){ $id = input('id/d',0); $info = Db::name('salary_record_special')->where('id',$id)->find(); if(!$info){ HelpHander::error('记录不存在'); } $oldljsr = $info['ljsr'] - $info['sr']; $data = [ 'id' => input('id/d',0), 'salary' => input('salary/f',0), 'mssr' => input('mssr/f',0), // 'sr' => input('sr/f',0), // 'ljsr' => input('ljsr/f',0), 'ljjc' => input('ljjc/f',0), 'ljgjj' => input('ljgjj/f',0), 'ljylobx' => input('ljylobx/f',0), 'ljylibx' => input('ljylibx/f',0), 'ljsybx' => input('ljsybx/f',0), 'ljnj' => input('ljnj/f',0), 'ljznjy' => input('ljznjy/f',0), 'ljjxjy' => input('ljjxjy/f',0), 'ljzfdklx' => input('ljzfdklx/f',0), 'ljzfzj' => input('ljzfzj/f',0), 'ljsylr' => input('ljsylr/f',0), 'ljyyezh' => input('ljyyezh/f',0), 'syjkbx' => input('syjkbx/f',0), 'ysylbx' => input('ysylbx/f',0), 'grbk' => input('grbk/f',0), 'jzjbjsb' => input('jzjbjsb/f',0), 'ljgzds' => input('ljgzds/f',0), 'qtkc' => input('qtkc/f',0), // 'ljsqljxmhj' => input('ljsqljxmhj/f',0), 'ljykjse' => input('ljykjse/f',0), 'tax' => input('tax/f',0), 'zykcjze' => input('zykcjze/f',0), 'jmsebl' => input('jmsebl/f',0), 'ljgrylj' => input('ljgrylj/f',0), ]; $data['sr'] = round($data['salary'] - $data['mssr'],2); $data['ljsr'] = round($oldljsr + $data['sr'],2); $data['ljsqljxmhj'] = $data['ljjc'] + $data['ljgjj'] + $data['ljyyezh'] + $data['ljgrylj'] + $data['ljylobx'] + $data['ljsybx'] + $data['ljylibx'] + $data['ljnj'] + $data['ljznjy'] + $data['ljjxjy'] + $data['ljzfdklx'] + $data['ljzfzj'] + $data['ljsylr'] + $data['ljgzds'] + $data['syjkbx'] + $data['ysylbx'] + $data['grbk'] + $data['jzjbjsb'] + $data['zykcjze'] + $data['qtkc']; $data['ljsqljxmhj'] = round($data['ljsqljxmhj'],2); $ret = Db::name('salary_record_special')->where('id',$data['id'])->update($data); if(!$ret){ HelpHander::error('操作失败'); } $userId = input('userId/d',0); model('ActionLog')->add(19,'修改个税累计',$userId,json_encode($data)); return true; } // 社保公积金 public function sblist($month,$name,$type){ if($month){ $map[] = ['sr.month','=',$month]; }else{ return []; } if($name != ''){ $map[] = ['ui.name','=',$name]; } if(in_array($type,[1,2])){ $map[] = ['sr.type','=',$type]; } $map[] = ['sr.del','=',0]; $map = empty($map)?true:$map; $lists = Db::name('salary_record_sb') ->alias('srs') ->join('salary_record sr','sr.id = srs.salary_record_id') ->join('user_info ui','ui.user_id = srs.user_id') ->where($map) // ->page($page,$size) ->order('sr.id desc,ui.sorts3 asc') ->field('ui.name,sr.month,srs.id,srs.user_id,sum(srs.qynj) as qynj,sum(srs.gjj) as gjj, sum(srs.sb) as sb,sum(srs.syyl) as syyl,sum(srs.gssy) as gssy,sum(srs.ylnj) as ylnj, sum(srs.gjjp) as gjjp,sum(srs.gjjc) as gjjc,sum(srs.ylap) as ylap,sum(srs.ylac) as ylac, sum(srs.syep) as syep,sum(srs.syec) as syec,sum(srs.ylip) as ylip,sum(srs.ylic) as ylic, sum(srs.gsc) as gsc,sum(srs.qynjp) as qynjp,sum(srs.qynjc) as qynjc') ->group('sr.month,srs.user_id') ->select(); foreach ($lists as $k=>$v){ $lists[$k]['sbtotalp'] = round($v['ylap'] + $v['syep'] + $v['ylip'],2); $lists[$k]['sbtotalc'] = round($v['ylac'] + $v['syec'] + $v['ylic'] + $v['gsc'],2); $lists[$k]['sbtotal'] = round($lists[$k]['sbtotalp'] + $lists[$k]['sbtotalc'],2); $lists[$k]['gjjtotal'] = round($lists[$k]['gjjp'] + $lists[$k]['gjjc'],2); $lists[$k]['qynjtotal'] = round($lists[$k]['qynjp'] + $lists[$k]['qynjc'],2); } // $total = Db::name('salary_record_sb') // ->alias('srs') // ->join('salary_record sr','sr.id = srs.salary_record_id') // ->join('user_info ui','ui.user_id = srs.user_id') // ->where($map) // ->group('sr.month,srs.user_id') // ->count(); // $data = [ // 'total' => $total, // 'list' => $lists?$lists:[] // ]; return $lists?$lists:[]; } public function sbexport($month,$name,$type){ if($month != ''){ $map[] = ['sr.month','=',$month]; } if($name != ''){ $map[] = ['ui.name','=',$name]; } if(in_array($type,[1,2])){ $map[] = ['sr.type','=',$type]; } $map[] = ['sr.del','=',0]; $map = empty($map)?true:$map; $lists = Db::name('salary_record_sb') ->alias('srs') ->join('salary_record sr','sr.id = srs.salary_record_id') ->join('user_info ui','ui.user_id = srs.user_id') ->where($map) ->order('sr.id desc,ui.sorts3 asc') ->field('ui.name,sr.month,srs.id,srs.user_id,sum(srs.qynj) as qynj,sum(srs.gjj) as gjj, sum(srs.sb) as sb,sum(srs.syyl) as syyl,sum(srs.gssy) as gssy,sum(srs.ylnj) as ylnj, sum(srs.gjjp) as gjjp,sum(srs.gjjc) as gjjc,sum(srs.ylap) as ylap,sum(srs.ylac) as ylac, sum(srs.syep) as syep,sum(srs.syec) as syec,sum(srs.ylip) as ylip,sum(srs.ylic) as ylic, sum(srs.gsc) as gsc,sum(srs.qynjp) as qynjp,sum(srs.qynjc) as qynjc') ->group('sr.month,srs.user_id') ->distinct(true) ->select(); foreach ($lists as $k=>$v){ $lists[$k]['sbtotalp'] = round($v['ylap'] + $v['syep'] + $v['ylip'],2); $lists[$k]['sbtotalc'] = round($v['ylac'] + $v['syec'] + $v['ylic'] + $v['gsc'],2); $lists[$k]['sbtotal'] = round($lists[$k]['sbtotalp'] + $lists[$k]['sbtotalc'],2); $lists[$k]['gjjtotal'] = round($lists[$k]['gjjp'] + $lists[$k]['gjjc'],2); $lists[$k]['qynjtotal'] = round($lists[$k]['qynjp'] + $lists[$k]['qynjc'],2); } //转成数字格式 $extra = ['month','name']; foreach ($lists as $k=>$v){ foreach ($v as $kk=>$vv){ if(!in_array($kk,$extra)){ $v[$kk] = (float)$vv; } } $lists[$k] = $v; } $columns[] = ["title" => "月份","key" => "month"]; $columns[] = ["title" => "姓名","key" => "name"]; if($type == 2){ $columns[] = ["title" => "企业年金基数","key" => "qynj"]; } $columns[] = ["title" => "公积金缴纳基数","key" => "gjj"]; if($type == 2){ $columns[] = ["title" => "社保缴纳基数","key" => "sn"]; }else{ $columns[] = ["title" => "生育/医疗基数","key" => "syyl"]; $columns[] = ["title" => "工伤/失业基数","key" => "gssy"]; $columns[] = ["title" => "养老/年金基数","key" => "ylnj"]; } $columns[] = ["title" => "养老保险(个人)","key" => "ylap"]; $columns[] = ["title" => "失业保险(个人)","key" => "syep"]; $columns[] = ["title" => "医疗保险(个人)","key" => "ylip"]; $columns[] = ["title" => "个人小计(社保)","key" => "sbtotalp"]; $columns[] = ["title" => "养老保险(单位)","key" => "ylac"]; $columns[] = ["title" => "失业保险(单位)","key" => "syec"]; $columns[] = ["title" => "医疗保险(单位)","key" => "ylic"]; $columns[] = ["title" => "工伤保险(单位)","key" => "gsc"]; $columns[] = ["title" => "单位小计(社保)","key" => "sbtotalc"]; $columns[] = ["title" => "社保合计","key" => "sbtotal"]; $columns[] = ["title" => "公积金(个人)","key" => "gjjp"]; $columns[] = ["title" => "公积金(单位)","key" => "gjjc"]; $columns[] = ["title" => "公积金合计","key" => "gjjtotal"]; if($type == 2){ $columns[] = ["title" => "企业年金(个人)","key" => "qynjp"]; $columns[] = ["title" => "企业年金(单位)","key" => "qynjc"]; $columns[] = ["title" => "企业年金合计","key" => "qynjtotal"]; }else{ $columns[] = ["title" => "职业年金(个人)","key" => "qynjp"]; $columns[] = ["title" => "职业年金(单位)","key" => "qynjc"]; $columns[] = ["title" => "职业年金合计","key" => "qynjtotal"]; } $data = [ 'columns' => $columns, 'list' => $lists ]; return $data; } public function unapply($userId){ $lists = Db::name('salary_apply_record') ->alias('sar') ->join('salary_record sr','sr.id = sar.salary_record_id and sr.cur_node = sar.salary_apply_id') ->where('sar.user_id',$userId) ->where('sr.del',0) ->where('sr.status',0) ->where('sar.del',0) ->field('sr.id,sr.month,sr.type,sar.create_time') ->select(); $nlist = []; foreach ($lists as $k=>$v){ $arr = [ 'id' => $v['id'], 'create_time' => $v['create_time'] ]; if($v['type'] == 1){ $arr['title'] = $v['month'].'-中心编制'; }else if($v['type'] == 2){ $arr['title'] = $v['month'].'-新华聘用'; }else if($v['type'] == 3){ $arr['title'] = $v['month'].'-中心劳务'; }else if($v['type'] == 4){ $arr['title'] = $v['month'].'-新华劳务'; }else if($v['type'] == 5){ $arr['title'] = $v['month'].'-中心养老'; }else if($v['type'] == 6){ //6=中心编制 7=新华聘用 8=中心劳务 9=新华劳务 $arr['title'] = $v['month'].'-中心编制年绩效'; }else if($v['type'] == 7){ $arr['title'] = $v['month'].'-新华聘用年绩效'; }else if($v['type'] == 8){ $arr['title'] = $v['month'].'-中心劳务年绩效'; }else if($v['type'] == 9){ $arr['title'] = $v['month'].'-新华劳务年绩效'; }else{ $arr['title'] = $v['month'].'-'; } $nlist[] = $arr; } return $nlist; } // 个人明细 public function userdetail($page,$size,$type,$year){ // 先取出本年发放工资人数 if($type != 5){ $users = Db::name('salary_record_log') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->join('user_info ui','ui.user_id = srl.user_id') ->where('sr.type',$type) ->where('sr.month','like',$year.'%') ->where('sr.status',2) ->where('sr.del',0) ->group('srl.user_id') ->page($page,$size) ->field('ui.name,srl.user_id,sum(gwgz) as gwgz,sum(xjgz) as xjgz,sum(jcjx) as jcjx,sum(yjx) as yjx, sum(tax) as tax,sum(salary) as salary,sum(should_total) as should_total,sum(sbgjj) as sbgjj') ->distinct(true) ->order('ui.sorts3 asc') ->select(); return $users; }else{ } } public function userYear($type,$year,$name,$month = 0){ $map[] = ['sr.status','=',2]; $map[] = ['sr.del','=',0]; $map2 = $map; if($month > 0){ if($month < 10){ $map[] = ['sr.month','=',$year.'-0'.$month]; }else{ $map[] = ['sr.month','=',$year.'-'.$month]; } }else{ $map[] = ['sr.month','like',$year.'%']; } $map[] = ['sr.type','=',$type]; $map1 = $map; if($name){ $map[] = ['ui.name','like','%'.$name.'%']; } $ntype = $type + 5; // 年绩效类型 $map2[] = ['sr.type','=',$ntype]; if($month > 0){ if($month < 10){ $map2[] = ['sr.month','=',$year.'-0'.$month]; }else{ $map2[] = ['sr.month','=',$year.'-'.$month]; } }else{ $map2[] = ['sr.month','like',$year.'%']; } if(in_array($type,[1,2])){ $lists = Db::name('salary_record_sb') ->alias('srs') ->join('user_info ui','ui.user_id = srs.user_id') ->join('salary_record sr','sr.id = srs.salary_record_id') ->where($map) ->field('ui.name,srs.user_id,srs.salary_record_id') ->group('srs.user_id') ->distinct(true) ->order('ui.sorts3 asc') ->select(); $lists = $lists?$lists:[]; foreach ($lists as $k=>$v){ $lists[$k]['should_total'] = Db::name('salary_record_log') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map1) ->where('srl.user_id',$v['user_id']) ->sum('srl.should_total'); $lists[$k]['ylac'] = Db::name('salary_record_sb') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map1) ->where('srl.user_id',$v['user_id']) ->sum('srl.ylac'); $lists[$k]['ylic'] = Db::name('salary_record_sb') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map1) ->where('srl.user_id',$v['user_id']) ->sum('srl.ylic'); $lists[$k]['gsc'] = Db::name('salary_record_sb') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map1) ->where('srl.user_id',$v['user_id']) ->sum('srl.gsc'); $lists[$k]['syec'] = Db::name('salary_record_sb') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map1) ->where('srl.user_id',$v['user_id']) ->sum('srl.syec'); $lists[$k]['gjjc'] = Db::name('salary_record_sb') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map1) ->where('srl.user_id',$v['user_id']) ->sum('srl.gjjc'); $lists[$k]['qynjc'] = Db::name('salary_record_sb') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map1) ->where('srl.user_id',$v['user_id']) ->sum('srl.qynjc'); $lists[$k]['njx'] = Db::name('salary_record_log') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map2) ->where('srl.user_id',$v['user_id']) ->sum('srl.should_total'); $lists[$k]['key'] = $k+1; $lists[$k]['sb_total'] = round($lists[$k]['ylac'] + $lists[$k]['ylic'] + $lists[$k]['gsc'] + $lists[$k]['syec'],2); $lists[$k]['total'] = round($lists[$k]['njx'] + $lists[$k]['ylac'] + $lists[$k]['ylic'] + $lists[$k]['gsc'] + $lists[$k]['syec'] + $lists[$k]['gjjc'] + $lists[$k]['qynjc'] + $lists[$k]['should_total'],2); } }else{ $lists = Db::name('salary_record_log') ->alias('srs') ->join('user_info ui','ui.user_id = srs.user_id') ->join('salary_record sr','sr.id = srs.salary_record_id') ->where($map) ->field('ui.name,srs.user_id,srs.salary_record_id') ->group('srs.user_id') ->distinct(true) ->order('ui.sorts3 asc') ->select(); $lists = $lists?$lists:[];; foreach ($lists as $k=>$v){ $lists[$k]['should_total'] = Db::name('salary_record_log') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map1) ->where('srl.user_id',$v['user_id']) ->sum('srl.should_total'); $lists[$k]['njx'] = Db::name('salary_record_log') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map2) ->where('srl.user_id',$v['user_id']) ->sum('srl.should_total'); $lists[$k]['key'] = $k+1; $lists[$k]['total'] = round($lists[$k]['should_total'] + $lists[$k]['njx'] + $lists[$k]['should_total'],2); } } return $lists; } public function yearExport($type,$year,$name,$month = 0){ $map[] = ['sr.status','=',2]; $map[] = ['sr.del','=',0]; $map2 = $map; $map[] = ['sr.type','=',$type]; if($month > 0){ if($month < 10){ $map[] = ['sr.month','=',$year.'-0'.$month]; }else{ $map[] = ['sr.month','=',$year.'-'.$month]; } }else{ $map[] = ['sr.month','like',$year.'%']; } $map1 = $map; if($name){ $map[] = ['ui.name','like','%'.$name.'%']; } $ntype = $type + 5; // 年绩效类型 $map2[] = ['sr.type','=',$ntype]; // $map2[] = ['sr.month','like','%'.($year+1).'%']; if($month > 0){ if($month < 10){ $map2[] = ['sr.month','=',$year.'-0'.$month]; }else{ $map2[] = ['sr.month','=',$year.'-'.$month]; } }else{ $map2[] = ['sr.month','like',$year.'%']; } if(in_array($type,[1,2])){ $lists = Db::name('salary_record_sb') ->alias('srs') ->join('user_info ui','ui.user_id = srs.user_id') ->join('salary_record sr','sr.id = srs.salary_record_id') ->where($map) ->field('ui.name,srs.user_id,srs.salary_record_id') ->group('srs.user_id') ->distinct(true) ->order('ui.sorts3 asc') ->select(); $lists = $lists?$lists:[]; $shoud_total = 0; $ylac = 0; $ylic = 0; $gsc = 0; $syec = 0; $gjjc = 0; $qynjc = 0; $sb_total = 0; $njx = 0; $total = 0; foreach ($lists as $k=>$v){ $lists[$k]['should_total'] = Db::name('salary_record_log') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map1) ->where('srl.user_id',$v['user_id']) ->sum('srl.should_total'); $lists[$k]['ylac'] = Db::name('salary_record_sb') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map1) ->where('srl.user_id',$v['user_id']) ->sum('srl.ylac'); // $lists[$k]['ylic'] = Db::name('salary_record_sb') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map1) ->where('srl.user_id',$v['user_id']) ->sum('srl.ylic'); $lists[$k]['gsc'] = Db::name('salary_record_sb') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map1) ->where('srl.user_id',$v['user_id']) ->sum('srl.gsc'); $lists[$k]['syec'] = Db::name('salary_record_sb') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map1) ->where('srl.user_id',$v['user_id']) ->sum('srl.syec'); $lists[$k]['gjjc'] = Db::name('salary_record_sb') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where('sr.type',$type) ->where('sr.month','like',$year.'%') ->where('sr.status',2) ->where('sr.del',0) ->where('srl.user_id',$v['user_id']) ->sum('srl.gjjc'); $lists[$k]['qynjc'] = Db::name('salary_record_sb') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map1) ->where('srl.user_id',$v['user_id']) ->sum('srl.qynjc'); $lists[$k]['njx'] = Db::name('salary_record_log') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map2) ->where('srl.user_id',$v['user_id']) ->sum('srl.should_total'); $lists[$k]['key'] = $k+1; $lists[$k]['sb_total'] = round($lists[$k]['ylac'] + $lists[$k]['ylic'] + $lists[$k]['gsc'] + $lists[$k]['syec'],2); $lists[$k]['total'] = round($lists[$k]['njx'] + $lists[$k]['ylac'] + $lists[$k]['ylic'] + $lists[$k]['gsc'] + $lists[$k]['syec'] + $lists[$k]['gjjc'] + $lists[$k]['qynjc'] + $lists[$k]['should_total'],2); $shoud_total += $lists[$k]['should_total']; $ylac += $lists[$k]['ylac']; $ylic += $lists[$k]['ylic']; $gsc += $lists[$k]['gsc']; $syec += $lists[$k]['syec']; $gjjc += $lists[$k]['gjjc']; $qynjc += $lists[$k]['qynjc']; $sb_total += $lists[$k]['sb_total']; $njx += $lists[$k]['njx']; $total += $lists[$k]['total']; } $lists[] = [ 'salary_record_id' => 0, 'user_id' => 0, 'name' => '', 'key' => '合计', 'should_total' => $shoud_total, 'ylac' => $ylac, 'ylic' => $ylic, 'gsc' => $gsc, 'syec' => $syec, 'gjjc' => $gjjc, 'qynjc' => $qynjc, 'sb_total' => $sb_total, 'njx' => $njx, 'total' => $total, ]; }else{ $lists = Db::name('salary_record_log') ->alias('srs') ->join('user_info ui','ui.user_id = srs.user_id') ->join('salary_record sr','sr.id = srs.salary_record_id') ->where($map) ->field('ui.name,srs.user_id,srs.salary_record_id') ->group('srs.user_id') ->distinct(true) ->order('ui.sorts3 asc') ->select(); $lists = $lists?$lists:[]; $shoud_total = 0; $njx = 0; $total = 0; foreach ($lists as $k=>$v){ $lists[$k]['should_total'] = Db::name('salary_record_log') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map1) ->where('srl.user_id',$v['user_id']) ->sum('srl.should_total'); $lists[$k]['njx'] = Db::name('salary_record_log') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map2) ->where('srl.user_id',$v['user_id']) ->sum('srl.should_total'); $lists[$k]['key'] = $k+1; $lists[$k]['total'] = round($lists[$k]['should_total']+$lists[$k]['njx'] + $lists[$k]['should_total'],2); $shoud_total += $lists[$k]['should_total']; $total += $lists[$k]['total']; $njx += $lists[$k]['njx']; } $lists[] = [ 'salary_record_id' => 0, 'user_id' => 0, 'name' => '', 'key' => '合计', 'njx' => $njx, 'should_total' => $shoud_total, 'total' => $total, ]; } $columns[] = ["title" => "序号","key" => "key"]; $columns[] = ["title" => "姓名","key" => "name"]; $columns[] = ["title" => "应发工资","key" => "shouldTotal"]; if(in_array($type,[1,2])){ $columns[] = ["title" => "养老保险(单位)","key" => "ylac"]; $columns[] = ["title" => "失业保险(单位)","key" => "syec"]; $columns[] = ["title" => "医疗保险(单位)","key" => "ylic"]; $columns[] = ["title" => "工伤保险(单位)","key" => "gsc"]; $columns[] = ["title" => "社保小计","key" => "sbTotal"]; $columns[] = ["title" => "住房公积金(单位)","key" => "gjjc"]; if($type == 2){ $columns[] = ["title" => "企业年金(单位)","key" => "qynjc"]; }else{ $columns[] = ["title" => "职业年金(单位)","key" => "qynjc"]; } } $columns[] = ["title" => "应发年绩效","key" => "njx"]; $columns[] = ["title" => "用工成本合计","key" => "total"]; $data = [ 'columns' => $columns, 'list' => $lists ]; return $data; } public function workerYear($type,$year,$name){ // 先取出所有补助项 // 取出所有人并算出人员的全年合计 // 取出每个人的记录明细 $types = Db::name('salary_record')->where('month','like','%'.$year.'%')->where('status',2)->where('del',0)->where('type',$type)->column('types'); $typeids = []; foreach ($types as $k=>$v){ if($v){ $typeids = array_merge($typeids,explode(',',$v)); } } $typeids = array_unique($typeids); if($typeids){ $tlist = Db::name('user_subsidies')->where('id','in',$typeids)->field('id,title,type,pay_type,cate')->order('sorts asc,id asc')->select(); }else{ $tlist = []; } $map[] = ['sr.status','=',2]; $map[] = ['sr.del','=',0]; $map2 = $map; $map[] = ['sr.type','=',$type]; $map[] = ['sr.month','like','%'.$year.'%']; $map1 = $map; if($name){ $map[] = ['ui.name','like','%'.$name.'%']; } $map2[] = ['sr.type','=',$type+5]; $map2[] = ['sr.month','like','%'.($year+1).'%']; $lists = Db::name('salary_record_log') ->alias('srs') ->join('user_info ui','ui.user_id = srs.user_id') ->join('salary_record sr','sr.id = srs.salary_record_id') ->where($map) ->field('ui.name,srs.user_id,ui.id,max(srs.pwlevel) as pwlevel,srs.psid') ->group('srs.user_id') ->distinct(true) ->order('ui.sorts3 asc,srs.id desc') ->select(); $lists = $lists?$lists:[]; foreach ($lists as $k=>$v){ $data = [ 'gwgz' => 0, 'xjgz' => 0, 'jcjx' => 0, 'yjx' => 0, 'tax' => 0, 'salary' => 0, 'should_total' => 0, 'sbgjj' => 0, 'dktotal' => 0, 'njxyf' => 0, 'njxtax' => 0, 'njx' => 0, 'alltotal' => 0 ]; $data['njxyf'] = Db::name('salary_record_log') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map2) ->where('srl.user_id',$v['user_id']) ->sum('srl.should_total'); $data['njx'] = Db::name('salary_record_log') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map2) ->where('srl.user_id',$v['user_id']) ->sum('srl.salary'); $data['njxtax'] = Db::name('salary_record_log') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map2) ->where('srl.user_id',$v['user_id']) ->sum('srl.tax'); // 积累值 foreach ($tlist as $key=>$val){ $data['subsidies'.$val['id']] = 0; } // 获取本年的详细信息 $depjob = Db::name('user_job') ->alias('uj') ->join('job j','j.id = uj.job_id') ->join('dep d','d.id = j.dep_id') ->where('uj.user_id',$v['user_id']) ->where('d.enable',1) ->field('d.name as dep_name,j.name as job_name') ->find(); $lists[$k]['dep_name'] = $depjob?$depjob['dep_name']:''; //职级 // $lists[$k]['job_name'] = Db::name('post_salary')->where('id',$v['psid'])->value('title'); $lists[$k]['job_name'] = ''; $children = Db::name('salary_record_log') ->alias('srs') ->join('user_info ui','ui.user_id = srs.user_id') ->join('salary_record sr','sr.id = srs.salary_record_id') ->where($map1) ->where('srs.user_id',$v['user_id']) ->field('srs.*,ui.name,sr.month') ->order('sr.month asc,sr.id asc') ->select(); $children = $children?$children:[]; foreach ($children as $kk=>$vv){ $data['gwgz'] += $vv['gwgz']; $data['xjgz'] += $vv['xjgz']; $data['jcjx'] += $vv['jcjx']; $data['yjx'] += $vv['yjx']; $data['tax'] += $vv['tax']; $data['salary'] += $vv['salary']; $data['should_total'] += $vv['should_total']; $data['sbgjj'] += $vv['sbgjj']; $btjson = json_decode($vv['btjson'],true); $btjson = $btjson?$btjson:[]; foreach ($tlist as $key=>$val){ $children[$kk]['subsidies'.$val['id']] = 0; foreach ($btjson as $bk=>$bv){ if($val['id'] == $bv['id']){ $data['subsidies'.$val['id']] += $bv['money']; $children[$kk]['subsidies'.$val['id']] = $bv['money']; } } } $kcmoney = 0; foreach ($btjson as $kkk=>$vvv){ if($vvv['cate'] == 2){ $kcmoney += $vvv['money']; } } $children[$kk]['dktotal'] = round($vv['sbgjj'] + $vv['tax'] + $kcmoney,2); $children[$kk]['dep_name'] = $lists[$k]['dep_name']; $children[$kk]['job_name'] = Db::name('post_salary')->where('id',$vv['psid'])->value('title'); // $children[$kk]['job_name'] = $lists[$k]['job_name']; $lists[$k]['job_name'] = $children[$kk]['job_name']; $children[$kk]['njxyf'] = 0; $children[$kk]['njxtax'] = 0; $children[$kk]['njx'] = 0; $children[$kk]['alltotal'] = $children[$kk]['salary']; $data['dktotal'] += $children[$kk]['dktotal']; } $lists[$k]['children'] = $children?$children:[]; $lists[$k]['month'] = '合计'; // 处理精度问题 $data['gwgz'] = round($data['gwgz'],2); $data['xjgz'] = round($data['xjgz'],2); $data['jcjx'] = round($data['jcjx'],2); $data['yjx'] = round($data['yjx'],2); $data['tax'] = round($data['tax'],2); $data['salary'] = round($data['salary'],2); $data['should_total'] = round($data['should_total'],2); $data['sbgjj'] = round($data['sbgjj'],2); $data['dktotal'] = round($data['dktotal'],2); foreach ($tlist as $key=>$val){ $data['subsidies'.$val['id']] = round($data['subsidies'.$val['id']],2); } $data['alltotal'] = round($data['salary'] + $data['njx'],2); $lists[$k] = array_merge($lists[$k],$data); } return ['types' => $tlist,'lists' => $lists]; } public function yearWorkerExport($type,$year,$name){ // 先取出所有补助项 // 取出所有人并算出人员的全年合计 // 取出每个人的记录明细 $types = Db::name('salary_record')->where('month','like','%'.$year.'%')->where('status',2)->where('del',0)->where('type',$type)->column('types'); $typeids = []; foreach ($types as $k=>$v){ if($v){ $typeids = array_merge($typeids,explode(',',$v)); } } $typeids = array_unique($typeids); if($typeids){ $tlist = Db::name('user_subsidies')->where('id','in',$typeids)->field('id,title,type,pay_type,cate')->order('sorts asc,id asc')->select(); }else{ $tlist = []; } $map[] = ['sr.status','=',2]; $map[] = ['sr.del','=',0]; $map2 = $map; $map[] = ['sr.type','=',$type]; $map[] = ['sr.month','like','%'.$year.'%']; $map1 = $map; if($name){ $map[] = ['ui.name','like','%'.$name.'%']; } $map2[] = ['sr.type','=',$type+5]; $map2[] = ['sr.month','like','%'.($year+1).'%']; $lists = Db::name('salary_record_log') ->alias('srs') ->join('user_info ui','ui.user_id = srs.user_id') ->join('salary_record sr','sr.id = srs.salary_record_id') ->where($map) ->field('ui.name,srs.user_id,ui.id,srs.pwlevel,srs.psid') ->group('srs.user_id') ->distinct(true) ->order('ui.sorts3 asc') ->select(); $lists = $lists?$lists:[]; foreach ($lists as $k=>$v){ $data = [ 'gwgz' => 0, 'xjgz' => 0, 'jcjx' => 0, 'yjx' => 0, 'tax' => 0, 'salary' => 0, 'should_total' => 0, 'sbgjj' => 0, 'dktotal' => 0, 'njxyf' => 0, 'njxtax' => 0, 'njx' => 0, 'alltotal' => 0 ]; $data['njxyf'] = Db::name('salary_record_log') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map2) ->where('srl.user_id',$v['user_id']) ->sum('srl.should_total'); $data['njx'] = Db::name('salary_record_log') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map2) ->where('srl.user_id',$v['user_id']) ->sum('srl.salary'); $data['njxtax'] = Db::name('salary_record_log') ->alias('srl') ->join('salary_record sr','sr.id = srl.salary_record_id') ->where($map2) ->where('srl.user_id',$v['user_id']) ->sum('srl.tax'); // 积累值 foreach ($tlist as $key=>$val){ $data['subsidies'.$val['id']] = 0; } // 获取本年的详细信息 $depjob = Db::name('user_job') ->alias('uj') ->join('job j','j.id = uj.job_id') ->join('dep d','d.id = j.dep_id') ->where('uj.user_id',$v['user_id']) ->where('d.enable',1) ->field('d.name as dep_name,j.name as job_name') ->find(); $lists[$k]['dep_name'] = $depjob?$depjob['dep_name']:''; //职级 // $lists[$k]['job_name'] = Db::name('post_salary')->where('id',$v['psid'])->value('title'); $lists[$k]['job_name'] = ''; $children = Db::name('salary_record_log') ->alias('srs') ->join('user_info ui','ui.user_id = srs.user_id') ->join('salary_record sr','sr.id = srs.salary_record_id') ->where($map1) ->where('srs.user_id',$v['user_id']) ->field('srs.*,ui.name,sr.month') ->order('sr.month asc,sr.id asc') ->select(); $children = $children?$children:[]; foreach ($children as $kk=>$vv){ $data['gwgz'] += $vv['gwgz']; $data['xjgz'] += $vv['xjgz']; $data['jcjx'] += $vv['jcjx']; $data['yjx'] += $vv['yjx']; $data['tax'] += $vv['tax']; $data['salary'] += $vv['salary']; $data['should_total'] += $vv['should_total']; $data['sbgjj'] += $vv['sbgjj']; $btjson = json_decode($vv['btjson'],true); $btjson = $btjson?$btjson:[]; foreach ($tlist as $key=>$val){ $children[$kk]['subsidies'.$val['id']] = 0; foreach ($btjson as $bk=>$bv){ if($val['id'] == $bv['id']){ $data['subsidies'.$val['id']] += $bv['money']; $children[$kk]['subsidies'.$val['id']] = $bv['money']; } } } $kcmoney = 0; foreach ($btjson as $kkk=>$vvv){ if($vvv['cate'] == 2){ $kcmoney += $vvv['money']; } } $children[$kk]['dktotal'] = round($vv['sbgjj'] + $vv['tax'] + $kcmoney,2); $children[$kk]['dep_name'] = $lists[$k]['dep_name']; $children[$kk]['job_name'] = Db::name('post_salary')->where('id',$vv['psid'])->value('title'); // $children[$kk]['job_name'] = $lists[$k]['job_name']; $lists[$k]['job_name'] = $children[$kk]['job_name']; $children[$kk]['njxyf'] = 0; $children[$kk]['njxtax'] = 0; $children[$kk]['njx'] = 0; $children[$kk]['alltotal'] = $children[$kk]['salary']; $data['dktotal'] += $children[$kk]['dktotal']; } $lists[$k]['children'] = $children?$children:[]; $lists[$k]['month'] = '合计'; // 处理精度问题 $data['gwgz'] = round($data['gwgz'],2); $data['xjgz'] = round($data['xjgz'],2); $data['jcjx'] = round($data['jcjx'],2); $data['yjx'] = round($data['yjx'],2); $data['tax'] = round($data['tax'],2); $data['salary'] = round($data['salary'],2); $data['should_total'] = round($data['should_total'],2); $data['sbgjj'] = round($data['sbgjj'],2); $data['dktotal'] = round($data['dktotal'],2); foreach ($tlist as $key=>$val){ $data['subsidies'.$val['id']] = round($data['subsidies'.$val['id']],2); } $data['alltotal'] = round($data['salary'] + $data['njx'],2); $lists[$k] = array_merge($lists[$k],$data); } $newList = []; foreach ($lists as $k=>$v){ $children = $v['children']; unset($v['children']); $newList[] = $v; foreach ($children as $kk=>$vv){ $newList[] = $vv; } } $columns[] = ["title" => "姓名","key" => "name"]; $columns[] = ["title" => "月份","key" => "month"]; $columns[] = ["title" => "部门","key" => "depName"]; $columns[] = ["title" => "职级","key" => "jobName"]; $columns[] = ["title" => "薪级","key" => "pwlevel"]; $columns[] = ["title" => "岗位工资","key" => "gwgz"]; $columns[] = ["title" => "薪级工资","key" => "xjgz"]; foreach ($tlist as $k=>$v){ if($v['cate'] == 1){ $columns[] = ["title" => $v['title'],"key" => "subsidies".$v['id']]; } } $columns[] = ["title" => "基础绩效","key" => "jcjx"]; $columns[] = ["title" => "月绩效","key" => "yjx"]; $columns[] = ["title" => "应发工资","key" => "shouldTotal"]; foreach ($tlist as $k=>$v){ if($v['cate'] == 2){ $columns[] = ["title" => $v['title'],"key" => "subsidies".$v['id']]; } } $columns[] = ["title" => "社保公积金代扣","key" => "sbgjj"]; $columns[] = ["title" => "个税","key" => "tax"]; $columns[] = ["title" => "代扣合计","key" => "dktotal"]; $columns[] = ["title" => "实发工资","key" => "salary"]; $columns[] = ["title" => "应发年绩效","key" => "njxyf"]; $columns[] = ["title" => "年绩效个税","key" => "njxtax"]; $columns[] = ["title" => "实发年绩效","key" => "njx"]; $columns[] = ["title" => "总实发","key" => "alltotal"]; $data = [ 'columns' => $columns, 'list' => $newList ]; return $data; } public function userWorkerYear($type,$year,$userId){ // 先取出所有补助项 // 取出所有人并算出人员的全年合计 // 取出每个人的记录明细 if($type != 5){ $types = Db::name('salary_record') ->alias('a') ->join('salary_record_log b','b.salary_record_id = a.id') ->where('a.month','like',$year.'%') ->where('a.status',2) ->where('a.del',0) ->where('a.type',$type) ->where('b.user_id',$userId) ->column('a.types'); }else{ $types = Db::name('salary_record') ->alias('a') ->join('user_retired_salary b','b.salary_record_id = a.id') ->where('a.month','like','%'.$year.'%') ->where('a.status',2) ->where('a.del',0) ->where('a.type',$type) ->where('b.user_id',$userId) ->column('a.types'); } $types = $types?$types:[]; $typeids = []; foreach ($types as $k=>$v){ if($v){ $typeids = array_merge($typeids,explode(',',$v)); } } $typeids = array_unique($typeids); if($typeids){ $tlist = Db::name('user_subsidies')->where('id','in',$typeids)->field('id,title,type,pay_type,cate')->order('sorts asc,id asc')->select(); }else{ $tlist = []; } $map[] = ['sr.type','=',$type]; $map[] = ['sr.month','like',$year.'%']; $map[] = ['sr.status','=',2]; $map[] = ['sr.del','=',0]; $map[] = ['srs.user_id','=',$userId]; $map1 = $map; $lists = Db::name('salary_record_log') ->alias('srs') ->join('user_info ui','ui.user_id = srs.user_id') ->join('salary_record sr','sr.id = srs.salary_record_id') ->where($map) ->field('ui.name,srs.user_id,ui.id,srs.pwlevel,srs.psid,srs.njx') ->group('srs.user_id') ->distinct(true) ->order('ui.sorts3 asc') ->select(); $lists = $lists?$lists:[]; foreach ($lists as $k=>$v){ if($type != 5){ $data = [ 'njx' => 0, 'gwgz' => 0, 'xjgz' => 0, 'jcjx' => 0, 'yjx' => 0, 'tax' => 0, 'salary' => 0, 'should_total' => 0, 'sbgjj' => 0, 'dktotal' => 0, 'level' => '', 'factor' => '', 'months' => '', 'taxrate' => '', 'gjjp' => 0, 'qynjp' => 0, 'ylap' => 0, 'syep' => 0, 'ylip' => 0, ]; }else{ $data = [ 'bz' => 0, 'zysdbt' => 0, 'fb' => 0, 'wybt' => 0, 'salary' => 0, 'dktotal' => 0, ]; } // 积累值 foreach ($tlist as $key=>$val){ $data['subsidies'.$val['id']] = 0; } // 获取本年的详细信息 $depjob = Db::name('user_job') ->alias('uj') ->join('job j','j.id = uj.job_id') ->join('dep d','d.id = j.dep_id') ->where('uj.user_id',$v['user_id']) ->where('d.enable',1) ->field('d.name as dep_name,j.name as job_name') ->find(); $lists[$k]['dep_name'] = $depjob?$depjob['dep_name']:''; //职级 // $lists[$k]['job_name'] = Db::name('post_salary')->where('id',$v['psid'])->value('title'); $lists[$k]['job_name'] = ''; $children = Db::name('salary_record_log') ->alias('srs') ->join('user_info ui','ui.user_id = srs.user_id') ->join('salary_record sr','sr.id = srs.salary_record_id') ->where($map1) ->where('srs.user_id',$v['user_id']) ->field('srs.*,ui.name,sr.month') ->order('sr.month asc,sr.id asc') ->select(); $children = $children?$children:[]; foreach ($children as $kk=>$vv){ if($type != 5){ if(in_array($type,[1,2,3,4])){ $data['gwgz'] += $vv['gwgz']; $data['xjgz'] += $vv['xjgz']; $data['jcjx'] += $vv['jcjx']; $data['yjx'] += $vv['yjx']; }else if(in_array($type,[6,7,8,9])){ $data['njx'] += $vv['njx']; } $data['tax'] += $vv['tax']; $data['should_total'] += $vv['should_total']; $data['sbgjj'] += $vv['sbgjj']; if($type == 1||$type == 2){ $sb = Db::name('salary_record_sb')->where('salary_record_id',$vv['salary_record_id'])->where('user_id',$vv['user_id'])->find(); $children[$kk]['gjjp'] = $sb?$sb['gjjp']:0; $children[$kk]['qynjp'] = $sb?$sb['qynjp']:0; $children[$kk]['ylap'] = $sb?$sb['ylap']:0; $children[$kk]['syep'] = $sb?$sb['syep']:0; $children[$kk]['ylip'] = $sb?$sb['ylip']:0; $data['gjjp'] += $children[$kk]['gjjp']; $data['qynjp'] += $children[$kk]['qynjp']; $data['ylap'] += $children[$kk]['ylap']; $data['syep'] += $children[$kk]['syep']; $data['ylip'] += $children[$kk]['ylip']; } }else{ $data['bz'] += $vv['bz']; $data['zysdbt'] += $vv['zysdbt']; $data['fb'] += $vv['fb']; $data['wybt'] += $vv['wybt']; } $data['salary'] += $vv['salary']; $btjson = json_decode($vv['btjson'],true); $btjson = $btjson?$btjson:[]; foreach ($tlist as $key=>$val){ $children[$kk]['subsidies'.$val['id']] = 0; foreach ($btjson as $bk=>$bv){ if($val['id'] == $bv['id']){ $data['subsidies'.$val['id']] += $bv['money']; $children[$kk]['subsidies'.$val['id']] = $bv['money']; } } } $kcmoney = 0; foreach ($btjson as $kkk=>$vvv){ if($vvv['cate'] == 2){ $kcmoney += $vvv['money']; } } if($type != 5){ $children[$kk]['dktotal'] = round($vv['sbgjj'] + $vv['tax'] + $kcmoney,2); }else{ $children[$kk]['dktotal'] = round($kcmoney,2); } $children[$kk]['dep_name'] = $lists[$k]['dep_name']; //职级 $children[$kk]['job_name'] = Db::name('post_salary')->where('id',$vv['psid'])->value('title'); // $children[$kk]['job_name'] = $lists[$k]['job_name']; $lists[$k]['job_name'] = $children[$kk]['job_name']; $data['dktotal'] += $children[$kk]['dktotal']; } $lists[$k]['children'] = $children?$children:[]; $lists[$k]['month'] = '合计'; // 处理精度问题 if($type != 5){ $data['gwgz'] = round($data['gwgz'],2); $data['xjgz'] = round($data['xjgz'],2); $data['jcjx'] = round($data['jcjx'],2); $data['yjx'] = round($data['yjx'],2); $data['tax'] = round($data['tax'],2); $data['should_total'] = round($data['should_total'],2); $data['sbgjj'] = round($data['sbgjj'],2); $data['gjjp'] = round($data['gjjp'],2); $data['qynjp'] = round($data['qynjp'],2); $data['ylap'] = round($data['ylap'],2); $data['syep'] = round($data['syep'],2); $data['ylip'] = round($data['ylip'],2); }else{ $data['bz'] = round($data['bz'],2); $data['zysdbt'] = round($data['zysdbt'],2); $data['fb'] = round($data['fb'],2); $data['wybt'] = round($data['wybt'],2); } $data['salary'] = round($data['salary'],2); $data['dktotal'] = round($data['dktotal'],2); foreach ($tlist as $key=>$val){ $data['subsidies'.$val['id']] = round($data['subsidies'.$val['id']],2); } $lists[$k] = array_merge($lists[$k],$data); } return ['types' => $tlist,'lists' => $lists]; } // 获取用户发放工资的所有类型 public function getUserSalayrTypes($userId){ $types1 = Db::name('salary_record') ->alias('a') ->join('salary_record_log b','b.salary_record_id = a.id') ->where('a.status',2) ->where('a.del',0) ->where('b.user_id',$userId) ->group('a.type') ->distinct(true) ->column('a.type'); $types1 = $types1?$types1:[]; $types2 = Db::name('salary_record') ->alias('a') ->join('user_retired_salary b','b.salary_record_id = a.id') ->where('a.status',2) ->where('a.del',0) ->where('b.user_id',$userId) ->group('a.type') ->order('a.type asc') ->distinct(true) ->column('a.type'); $types2 = $types2?$types2:[]; $types = array_merge($types1,$types2); $list = []; foreach ($types as $v){ $a['id'] = $v; if($v == 1){ $a['title'] = '中心编制'; } else if ($v == 2){ $a['title'] = '新华聘用'; } else if ($v == 3){ $a['title'] = '中心劳务'; } else if ($v == 4){ $a['title'] = '新华劳务'; }else if($v == 6){ $a['title'] = '中心编制年绩效'; } else if ($v == 7){ $a['title'] = '新华聘用年绩效'; } else if ($v == 8){ $a['title'] = '中心劳务年绩效'; } else if ($v == 9){ $a['title'] = '新华劳务年绩效'; }else{ $a['title'] = '中心退休'; } $list[] = $a; } return $list; } }