UserLaborSalary.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <?php
  2. namespace app\common\model;
  3. use app\hander\HelpHander;
  4. use think\Db;
  5. use think\Exception;
  6. use think\Model;
  7. class UserLaborSalary extends Model
  8. {
  9. // 工资发放
  10. public function sendSalary($data){
  11. $month = $data['month'];
  12. $types = $data['types'];
  13. $types = explode(',',$types);
  14. $users = Db::name('user_labor')
  15. ->where('status',1)
  16. ->where('company_id',$data['company_id'])
  17. ->field('create_time,update_time,remark,status',true)
  18. ->select();
  19. $curTime = date('Y-m-d H:i:s');
  20. foreach ($users as $k=>$v){
  21. $users[$k]['create_time'] = $curTime;
  22. $users[$k]['month'] = $month;
  23. $users[$k]['salary_record_id'] = $data['salary_record_id'];
  24. $salary = 0;
  25. foreach ($types as $val){
  26. switch ($val){
  27. case '1':
  28. $salary += $v['labor'];
  29. break;
  30. case '2':
  31. $salary += $v['other'];
  32. break;
  33. case '3':
  34. $salary -= $v['child'];
  35. break;
  36. }
  37. }
  38. $tax = $this->getLaborTax($salary);
  39. $users[$k]['tax'] = $tax;
  40. $users[$k]['salary'] = round($salary - $tax,2);
  41. unset($users[$k]['id']);
  42. }
  43. $ret = Db::name('user_labor_salary')->insertAll($users);
  44. if($ret != count($users)){
  45. return false;
  46. }
  47. return true;
  48. }
  49. // 获取劳务费个税
  50. private function getLaborTax($salary){
  51. $taxs = Db::name('user_labor_tax')->select();
  52. // 获取减除费用
  53. $jcmoney = 0;
  54. $bl = 0;
  55. $ssmoney = 0;
  56. foreach ($taxs as $k=>$v){
  57. if($v['type'] == 1){
  58. if($v['max'] > 0){
  59. if($salary > $v['min'] && $salary <= $v['max']){
  60. $jcmoney = $v['bl'] == 1?$salary*$v['val']:$v['val'];
  61. }
  62. }else{
  63. if($salary > $v['min']){
  64. $jcmoney = $v['bl'] == 1?$salary*$v['val']:$v['val'];
  65. }
  66. }
  67. } else {
  68. if($v['max'] > 0){
  69. if($salary > $v['min'] && $salary <= $v['max']){
  70. $bl = $v['val'];
  71. $ssmoney = $v['val2'];
  72. }
  73. }else{
  74. if($salary > $v['min']){
  75. $bl = $v['val'];
  76. $ssmoney = $v['val2'];
  77. }
  78. }
  79. }
  80. }
  81. $sfsalary = round(($salary - $jcmoney)*$bl - $ssmoney,2);
  82. return $sfsalary > 0 ? $sfsalary : 0;
  83. }
  84. public function info($id){
  85. $info = $this->where('id',$id)->find();
  86. if(!$info){
  87. HelpHander::error('数据不存在');
  88. }
  89. $data = $info->toArray();
  90. $data['userName'] = Db::name('user_info')->where('user_id',$info['user_id'])->value('name');
  91. return $data;
  92. }
  93. public function lists($page,$size,$name,$srid){
  94. if($name != ''){
  95. $map[] = ['ui.name','like','%'.$name.'%'];
  96. }
  97. $map[] = ['ur.salary_record_id','=',$srid];
  98. $lists = Db::name('user_labor_salary')
  99. ->alias('ur')
  100. ->join('user_info ui','ui.user_id = ur.user_id')
  101. ->where($map)
  102. ->field('ur.*,ui.name')
  103. ->page($page,$size)
  104. ->order('ur.id desc')
  105. ->select();
  106. $total = Db::name('user_labor_salary')
  107. ->alias('ur')
  108. ->join('user_info ui','ui.user_id = ur.user_id')
  109. ->where($map)->count();
  110. $data = [
  111. 'total' => $total,
  112. 'list' => $lists?$lists:[]
  113. ];
  114. return $data;
  115. }
  116. }