|
|
@@ -253,47 +253,66 @@ class RelatedSalaryAccounting extends Api
|
|
|
$this->error('请求方式错误');
|
|
|
}
|
|
|
$req = $this->request->param();
|
|
|
- $year=substr($req['date'],0,4);
|
|
|
- $month=substr($req['date'],-2);
|
|
|
- if($month==12){
|
|
|
- $start_time=$year.'-12-01 00:00:00';
|
|
|
- $end_time=($year+1).'-01-01 00:00:00';
|
|
|
- }else{
|
|
|
- $start_time=$year.'-'.$month.'-01 00:00:00';
|
|
|
- $end_time=$year.'-'.($month+1).'-01 00:00:00';
|
|
|
- }
|
|
|
- $gd = db()->table('工单_基本资料')->where('Gd_cpmc',$req['search'])->value('Gd_gdbh');
|
|
|
- if($gd){
|
|
|
- $req['search']=$gd;
|
|
|
- }
|
|
|
- $gz=db('绩效工资汇总')
|
|
|
- ->cache(true,86400)
|
|
|
- ->field('bh,rtrim(xm) as 姓名,sum(个人计件工资) as 个人计件工资,sum(个人加班工资) as 个人加班工资,
|
|
|
- DATE_FORMAT(sczl_rq,"%Y.%m.%d") as sczl_rq')
|
|
|
- ->group('LEFT(sczl_rq, 10),bh')
|
|
|
- ->where(['sys_ny'=>$req['date']])
|
|
|
+ $year = substr($req['date'],0,4);
|
|
|
+ $month = substr($req['date'],-2);
|
|
|
+ $start_time = $year . '-' . $month . '-01 00:00:00';
|
|
|
+ $end_time = date('Y-m-t', strtotime("$year-$month-01")) . ' 23:59:59';
|
|
|
+
|
|
|
+ $gz = db('人事_关联工资设置')->alias('r')->cache(true,3600)
|
|
|
+ ->join('绩效工资汇总 j', 'r.被关联员工 = j.bh AND r.日期 = j.sczl_rq')
|
|
|
+ ->join('人事_基本资料 n', 'n.员工编号 = r.关联员工')
|
|
|
+ ->field('r.关联员工, j.bh, sum(j.个人计件工资) as 个人计件工资, sum(j.个人加班工资) as 个人加班工资,
|
|
|
+ sum(j.装版工时,j.保养工时,j.打样工时) as 定额补差, sum(j.异常停机工时) as 计时工资, DATE_FORMAT(j.sczl_rq,"%Y.%m.%d") as 日期')
|
|
|
+ ->where('r.日期', 'between', [$start_time, $end_time])
|
|
|
+ ->where('n.所在部门', 'like', $req['department'] . '%')
|
|
|
+ ->where('r.关联员工', 'like', '%' . $req['search'] . '%')
|
|
|
+ ->group('LEFT(j.sczl_rq, 10), j.bh')
|
|
|
->select();
|
|
|
+
|
|
|
+ $data = [];
|
|
|
foreach($gz as $v){
|
|
|
- $data[$v['bh']][$v['sczl_rq']]=$v;
|
|
|
+ if (!isset($data[$v['关联员工']][$v['日期']])) {
|
|
|
+ $data[$v['关联员工']][$v['日期']] = [
|
|
|
+ '个人计件工资' => 0,
|
|
|
+ '个人加班工资' => 0,
|
|
|
+ '定额补差' => 0,
|
|
|
+ '计时工资' => 0
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ $data[$v['关联员工']][$v['日期']]['个人计件工资'] += (float) $v['个人计件工资'];
|
|
|
+ $data[$v['关联员工']][$v['日期']]['个人加班工资'] += (float) $v['个人加班工资'];
|
|
|
+ $data[$v['关联员工']][$v['日期']]['定额补差'] += (float) $v['定额补差'];
|
|
|
+ $data[$v['关联员工']][$v['日期']]['计时工资'] += (float) $v['计时工资'];
|
|
|
}
|
|
|
$res=db('人事_关联工资设置')->cache(true,86400)
|
|
|
->join('人事_基本资料','人事_基本资料.员工编号=人事_关联工资设置.关联员工','LEFT')
|
|
|
->field('关联员工 as 员工编号,rtrim(人事_基本资料.员工姓名) as 员工姓名,rtrim(人事_基本资料.职称职务) as 职称职务,
|
|
|
- 人事_基本资料.所在部门,DATE_FORMAT(日期,"%Y.%m.%d") as 日期,关联系数,count(被关联员工) as 关联人数')
|
|
|
+ rtrim(人事_基本资料.所在部门) as 所在部门,DATE_FORMAT(日期,"%Y.%m.%d") as 日期,关联系数,count(被关联员工) as 关联人数')
|
|
|
->group('LEFT(日期, 10),关联员工')
|
|
|
->where(['日期'=>['between',"$start_time,$end_time"],'关联员工'=>$req['search']])
|
|
|
->order('关联员工,日期')
|
|
|
->select();
|
|
|
foreach($res as &$v){
|
|
|
if(isset($data[$v['员工编号']][$v['日期']])){
|
|
|
- $v['个人计件工资']=$data[$v['员工编号']][$v['日期']]['个人计件工资'];
|
|
|
- $v['个人加班工资']=$data[$v['员工编号']][$v['日期']]['个人加班工资'];
|
|
|
+ $v['关联计件工资'] = floatval(number_format($data[$v['员工编号']][$v['日期']]['个人计件工资']/$v['关联人数']*$v['关联系数'],2));
|
|
|
+ $v['关联加班工资'] = floatval(number_format($data[$v['员工编号']][$v['日期']]['个人加班工资']/$v['关联人数']*$v['关联系数'],2));
|
|
|
+ $v['关联定额补差'] = floatval(number_format($data[$v['员工编号']][$v['日期']]['定额补差']/$v['关联人数']*$v['关联系数'],2));
|
|
|
+ $v['关联计时工资'] = floatval(number_format($data[$v['员工编号']][$v['日期']]['计时工资']/$v['关联人数']*$v['关联系数']*9.5,2));
|
|
|
+ $v['关联工资合计'] = floatval(number_format(
|
|
|
+ ($data[$v['员工编号']][$v['日期']]['个人计件工资'] +
|
|
|
+ $data[$v['员工编号']][$v['日期']]['个人加班工资'] +
|
|
|
+ $data[$v['员工编号']][$v['日期']]['定额补差'] +
|
|
|
+ $data[$v['员工编号']][$v['日期']]['计时工资']*9.5
|
|
|
+ )/$v['关联人数']*$v['关联系数'],2));
|
|
|
}else{
|
|
|
- $v['个人计件工资']='';
|
|
|
- $v['个人加班工资']='';
|
|
|
+ $v['关联计件工资'] = '';
|
|
|
+ $v['关联加班工资'] = '';
|
|
|
+ $v['关联定额补差'] = '';
|
|
|
+ $v['关联计时工资'] = '';
|
|
|
+ $v['关联工资合计'] = '';
|
|
|
}
|
|
|
}
|
|
|
- if(!$res){
|
|
|
+ if($res===false){
|
|
|
$this->error('失败');
|
|
|
}
|
|
|
$this->success('成功',$res);
|