|
|
@@ -4,6 +4,9 @@ namespace app\api\controller;
|
|
|
use app\common\controller\Api;
|
|
|
use \think\Request;
|
|
|
use think\Db;
|
|
|
+use app\job\InsertDataJob;
|
|
|
+use think\Queue;
|
|
|
+use think\Cache;
|
|
|
|
|
|
/**
|
|
|
* 员工计件工资核算
|
|
|
@@ -62,7 +65,7 @@ class StaffSalary extends Api
|
|
|
$startDate = $params['start_date'];
|
|
|
$endDate = $params['end_date'];
|
|
|
//将起止日期内数据删除
|
|
|
- \db('绩效工资汇总')->where('sczl_rq','between',[$startDate,$endDate])->delete();
|
|
|
+ $delRes = \db('绩效工资汇总')->where('sczl_rq','between',[$startDate,$endDate])->delete();
|
|
|
$where = [];
|
|
|
$where['a.sczl_rq'] = ['between',[$startDate,$endDate]];
|
|
|
$fields = "a.sczl_gdbh,a.sczl_yjno,a.sczl_gxh,a.sczl_gxmc as sczl_type,a.sczl_rq,a.sczl_jtbh,a.sczl_ms,a.sczl_cl as 班组车头产量,a.sczl_Pgcl,a.sczl_zcfp,
|
|
|
@@ -72,7 +75,7 @@ class StaffSalary extends Api
|
|
|
b.千件工价,b.日定额,b.补产标准,c.工价系数 as 工序难度系数
|
|
|
,d1.员工姓名 as name1,d2.员工姓名 as name2,d3.员工姓名 as name3,d4.员工姓名 as name4,d5.员工姓名 as name5,d6.员工姓名 as name6,d7.员工姓名 as name7,d8.员工姓名 as name8
|
|
|
,d9.员工姓名 as name9,d10.员工姓名 as name10";
|
|
|
- $query = Db::connect('db4')->name('设备_产量计酬')->alias('a')->field($fields);
|
|
|
+ $query = Db::name('设备_产量计酬')->alias('a')->field($fields);
|
|
|
// 连接 dic_lzde 表
|
|
|
$query->join('dic_lzde b', 'a.sczl_dedh = b.sys_bh', 'LEFT');
|
|
|
// 连接 工单_工艺资料 表
|
|
|
@@ -129,7 +132,8 @@ class StaffSalary extends Api
|
|
|
$item['sczl_gdbh'] = $value['sczl_gdbh'];
|
|
|
$item['sczl_yjno'] = $value['sczl_yjno'];
|
|
|
$item['sczl_gxh'] = $value['sczl_gxh'];
|
|
|
- $item['sczl_type'] = substr($value['sczl_type'],0,30);
|
|
|
+// $item['sczl_type'] = substr($value['sczl_type'],0,30);
|
|
|
+ $item['sczl_type'] = $value['sczl_type'];
|
|
|
$item['sczl_rq'] = $value['sczl_rq'];
|
|
|
$item['sczl_jtbh'] = $value['sczl_jtbh'];
|
|
|
$item['班组车头产量'] = $value['班组车头产量'];
|
|
|
@@ -159,7 +163,7 @@ class StaffSalary extends Api
|
|
|
/**
|
|
|
* 拆片工序数据
|
|
|
*/
|
|
|
- $query = Db::connect('db4')->name('db_sczl')->alias('a')
|
|
|
+ $query = Db::name('db_sczl')->alias('a')
|
|
|
->field('a.sczl_gdbh, a.sczl_yjno, a.sczl_gxh, sczl_type, a.sczl_rq, a.sczl_jtbh,
|
|
|
a.sczl_ms, a.sczl_cl as 班组车头产量, a.sczl_fp as sczl_zcfp, a.sczl_装版工时 as 装版工时, a.sczl_保养工时 as 保养工时,
|
|
|
a.sczl_打样工时 as 打样工时, a.sczl_异常停机工时 as 异常停机工时, a.sczl_设备运行工时 as 车头产量占用机时, a.sczl_bh1,
|
|
|
@@ -192,7 +196,8 @@ class StaffSalary extends Api
|
|
|
$item['sczl_gdbh'] = $value['sczl_gdbh'];
|
|
|
$item['sczl_yjno'] = $value['sczl_yjno'];
|
|
|
$item['sczl_gxh'] = $value['sczl_gxh'];
|
|
|
- $item['sczl_type'] = substr($value['sczl_type'],0,30);
|
|
|
+// $item['sczl_type'] = substr(trim($value['sczl_type']),0,30);
|
|
|
+ $item['sczl_type'] = $value['sczl_type'];
|
|
|
$item['sczl_rq'] = $value['sczl_rq'];
|
|
|
$item['sczl_jtbh'] = $value['sczl_jtbh'];
|
|
|
$item['班组车头产量'] = $value['班组车头产量'];
|
|
|
@@ -216,6 +221,7 @@ class StaffSalary extends Api
|
|
|
$item['工时占比'] = floatval($manHourRate);
|
|
|
array_push($data,$item);
|
|
|
}
|
|
|
+// halt($data);
|
|
|
/**
|
|
|
* 手工检验工序数据
|
|
|
*/
|
|
|
@@ -227,7 +233,7 @@ class StaffSalary extends Api
|
|
|
d10.员工姓名 AS name11,d10.员工姓名 AS name12,a.sczl_cl0,a.sczl_cl1,a.sczl_cl2,a.sczl_cl3,a.sczl_cl4,a.sczl_cl5,a.sczl_cl6,
|
|
|
a.sczl_cl7,a.sczl_cl8,a.sczl_cl9,a.sczl_cl10,a.sczl_cl11,a.sczl_cl12,a.sczl_fp0,a.sczl_fp1,a.sczl_fp2,a.sczl_fp3,
|
|
|
a.sczl_fp4,a.sczl_fp5,a.sczl_fp6,a.sczl_fp7,a.sczl_fp8,a.sczl_fp9,a.sczl_fp10,a.sczl_fp11,a.sczl_fp12";
|
|
|
- $query = Db::connect('db4')->name('db_手工检验')->alias('a')->field($shoujianfields);
|
|
|
+ $query = Db::name('db_手工检验')->alias('a')->field($shoujianfields);
|
|
|
//链接dic_lzde表
|
|
|
$query->join('dic_lzde b','a.sczl_dedh = b.sys_bh','LEFT');
|
|
|
//链接人事基本资料表
|
|
|
@@ -264,7 +270,8 @@ class StaffSalary extends Api
|
|
|
$item['sczl_gdbh'] = $value['sczl_gdbh'];
|
|
|
$item['sczl_yjno'] = $value['sczl_yjno'];
|
|
|
$item['sczl_gxh'] = $value['sczl_gxh'];
|
|
|
- $item['sczl_type'] = substr($value['sczl_type'],0,30);
|
|
|
+// $item['sczl_type'] = substr($value['sczl_type'],0,30);
|
|
|
+ $item['sczl_type'] = $value['sczl_type'];
|
|
|
$item['sczl_rq'] = $value['sczl_rq'];
|
|
|
$item['sczl_jtbh'] = '';
|
|
|
$item['班组车头产量'] = $value['班组车头产量'];
|
|
|
@@ -290,10 +297,11 @@ class StaffSalary extends Api
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+// halt($data);
|
|
|
/**
|
|
|
* 包装计件工序数据
|
|
|
*/
|
|
|
- $result = Db::connect('db4')->name('db_包装计件')->alias('a')
|
|
|
+ $result = Db::name('db_包装计件')->alias('a')
|
|
|
->field('a.sczl_gdbh1, a.sczl_gdbh2, a.sczl_gdbh3, a.sczl_gdbh4, a.sczl_gdbh5, a.sczl_gdbh6,
|
|
|
a.sczl_yjGx1, a.sczl_yjGx2, a.sczl_yjGx3, a.sczl_yjGx4, a.sczl_yjGx5, a.sczl_yjGx6,
|
|
|
rtrim(a.sczl_gxmc1) as gxmc1,rtrim(a.sczl_gxmc2) as gxmc2,rtrim(a.sczl_gxmc3) as gxmc3,rtrim(a.sczl_gxmc4) as gxmc4,rtrim(a.sczl_gxmc5) as gxmc5,rtrim(a.sczl_gxmc6) as gxmc6,
|
|
|
@@ -350,7 +358,8 @@ class StaffSalary extends Api
|
|
|
$item['sczl_gdbh'] = $value[$gdbhKey];
|
|
|
$item['sczl_yjno'] = ltrim(substr($value[$yjgxKey],0,2), '0');
|
|
|
$item['sczl_gxh'] = substr($value[$yjgxKey],-2);
|
|
|
- $item['sczl_type'] = substr($value[$gxmcKey],0,30);
|
|
|
+// $item['sczl_type'] = substr($value[$gxmcKey],0,30);
|
|
|
+ $item['sczl_type'] = $value[$gxmcKey];
|
|
|
if (!empty($value[$reworkKey]) && $value[$reworkKey] > 0){
|
|
|
$item['sczl_type'] = '返工('.$item['sczl_type'].')';
|
|
|
}
|
|
|
@@ -415,8 +424,17 @@ class StaffSalary extends Api
|
|
|
// 将工时占比相加
|
|
|
$bhTotals[$bh] += floatval($row['工时占比']);
|
|
|
}
|
|
|
-// halt($bhTotals);
|
|
|
+ $days = [];
|
|
|
foreach ($data as $key=>$item){
|
|
|
+ //统计每月出勤天数
|
|
|
+ $day_bh = $item['bh'];
|
|
|
+ if (!isset($days[$day_bh])){
|
|
|
+ $days[$day_bh] = [];
|
|
|
+ }else{
|
|
|
+ if (in_array($item['sczl_rq'],$days[$day_bh]) == false){
|
|
|
+ array_push($days[$day_bh],$item['sczl_rq']);
|
|
|
+ }
|
|
|
+ }
|
|
|
$bh = substr($item['sczl_rq'],0,10) . '-' .$item['bh'];
|
|
|
//达标定额
|
|
|
if ($item['工时占比'] > 0){
|
|
|
@@ -432,7 +450,13 @@ class StaffSalary extends Api
|
|
|
//加班工资
|
|
|
$overTimePay = ($item['核算产量'] - $data[$key]['达标定额']) / 1000 *$item['千件工价'] * $item['Rate'] *1.5*3;
|
|
|
}else{
|
|
|
- $pieceWorkWage = $data[$key]['达标定额']/1000*$item['千件工价']*$item['Rate'];
|
|
|
+ //如果出勤天数小于法定天数,按正常计算
|
|
|
+ if (count($days[$day_bh]) <= $params['days']){
|
|
|
+ $pieceWorkWage = $data[$key]['达标定额']/1000*$item['千件工价']*$item['Rate'];
|
|
|
+ }else{ //如果出勤天数大于法定天数,达标定额为 0,计件工资为0,超出的部分按加班工资算
|
|
|
+ $data[$key]['达标定额'] = '0.00';
|
|
|
+ $pieceWorkWage = '0.00';
|
|
|
+ }
|
|
|
$overTimePay = ($item['核算产量'] - $data[$key]['达标定额']) / 1000 *$item['千件工价'] * $item['Rate'] *1.5;
|
|
|
}
|
|
|
$data[$key]['个人计件工资'] = number_format($pieceWorkWage,2,'.', '');
|
|
|
@@ -441,13 +465,17 @@ class StaffSalary extends Api
|
|
|
$data[$key]['sys_ny'] = $params['date'];
|
|
|
$data[$key]['sys_rq'] = date('Y-m-d H:i:s');
|
|
|
$data[$key]['sys_id'] = $params['sys_id'];
|
|
|
- unset($data[$key]['核算产量']);
|
|
|
+ $data[$key]['法定天数'] = $params['days'];
|
|
|
+ $data[$key]['sczl_type'] = trim($item['sczl_type']);
|
|
|
}
|
|
|
- $res = \db('绩效工资汇总')->insertAll($data);
|
|
|
- if ($res){
|
|
|
- $this->success('请求成功');
|
|
|
- }else{
|
|
|
- $this->error('请求失败');
|
|
|
+ $num = round(count($data)/10000);
|
|
|
+ for ($i = 0; $i <= $num; $i++){
|
|
|
+ $start = $i * 10000;
|
|
|
+ $res = array_slice($data,$start,10000);
|
|
|
+ $job = new InsertDataJob($res); // 创建任务实例
|
|
|
+ Queue::push($job,'','default'.$i); // 推送任务到队列
|
|
|
}
|
|
|
+ $this->success('数据正在处理中,请等待...');
|
|
|
}
|
|
|
+
|
|
|
}
|