|
|
@@ -1,687 +1,850 @@
|
|
|
<?php
|
|
|
-namespace app\api\controller;
|
|
|
-
|
|
|
+//namespace app\api\controller;
|
|
|
+//
|
|
|
+////use app\common\controller\Api;
|
|
|
+////use \think\Request;
|
|
|
+////use think\Db;
|
|
|
+////use app\service\InsertDataJob;
|
|
|
+////use think\Queue;
|
|
|
+////use think\Cache;
|
|
|
+////use think\cache\driver\Redis;
|
|
|
+////use function fast\e;
|
|
|
+//
|
|
|
//use app\common\controller\Api;
|
|
|
//use \think\Request;
|
|
|
//use think\Db;
|
|
|
-//use app\service\InsertDataJob;
|
|
|
+//use app\job\InsertDataJob;
|
|
|
//use think\Queue;
|
|
|
//use think\Cache;
|
|
|
//use think\cache\driver\Redis;
|
|
|
-//use function fast\e;
|
|
|
+///**
|
|
|
+// * 员工计件工资核算
|
|
|
+// */
|
|
|
+//class StaffSalary extends Api
|
|
|
+//{
|
|
|
+// protected $noNeedLogin = ['*'];
|
|
|
+// protected $noNeedRight = ['*'];
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 首页
|
|
|
+// *
|
|
|
+// */
|
|
|
+// public function index()
|
|
|
+// {
|
|
|
+// $this->success('请求成功');
|
|
|
+// }
|
|
|
+// /**
|
|
|
+// * 计算员工计件工资
|
|
|
+// * @ApiMethod POST
|
|
|
+// * @param string date 考勤年月
|
|
|
+// * @param string start_date 开始日期
|
|
|
+// * @param string end_date 结束日期
|
|
|
+// * @param string vacation_one_start 法定假日1 开始时间
|
|
|
+// * @param string vacation_one_end 法定假日1 结束时间
|
|
|
+// * @param string vacation_two_start 法定假日2 开始时间
|
|
|
+// * @param string vacation_two_end 法定假日2 结束时间
|
|
|
+// */
|
|
|
+// public function staffSalaryCount(){
|
|
|
+// if (Request::instance()->isPost() == false){
|
|
|
+// $this->error('非法请求');
|
|
|
+// }
|
|
|
+// $params = Request::instance()->param();
|
|
|
+// if (!isset($params['start_date']) || !isset($params['end_date']) || empty($params['start_date']) || empty($params['end_date']) || !isset($params['date']) || empty($params['date']))
|
|
|
+// {
|
|
|
+// $this->error('参数错误');
|
|
|
+// }
|
|
|
+// $startDate = $params['start_date'];
|
|
|
+// $endDate = $params['end_date'];
|
|
|
+// $attendanceMonth = $params['date'];
|
|
|
+// // 确保开始日期和结束日期在考勤年月的范围内
|
|
|
+// $startDateInRange = date('Ym', strtotime($startDate)) === $attendanceMonth;
|
|
|
+// $endDateInRange = date('Ym', strtotime($endDate)) === $attendanceMonth;
|
|
|
+// if (!$startDateInRange || !$endDateInRange) {
|
|
|
+// $this->error('日期参数错误');
|
|
|
+// }
|
|
|
+// $options = [
|
|
|
+// 'host' => '127.0.0.1',
|
|
|
+// 'port' => 6379,
|
|
|
+// 'password' => '123456',
|
|
|
+// 'select' => 15,
|
|
|
+// 'timeout' => 0,
|
|
|
+// 'expire' => 0,
|
|
|
+// 'persistent' => false,
|
|
|
+// 'prefix' => '',
|
|
|
+// ];
|
|
|
+// $redis = new Redis($options);
|
|
|
+//// $taskIdentifier = md5(json_encode('date'));
|
|
|
+//// $queueKey = $redis->get($taskIdentifier);
|
|
|
+//// if ($queueKey){
|
|
|
+//// $this->success('数据正在处理中,请等待...');
|
|
|
+//// }
|
|
|
+// $taskIdentifier = md5('salary_calculation_' . json_encode($params));
|
|
|
+//
|
|
|
+// if ($redis->has($taskIdentifier)) {
|
|
|
+// $this->success('数据正在处理中,请等待...');
|
|
|
+// }
|
|
|
+// $vacationOneArr = [];
|
|
|
+// if (!empty($params['vacation_one_start']) && !empty($params['vacation_one_end'])){
|
|
|
+// $vacationOneStart = strtotime($params['vacation_one_start']);
|
|
|
+// $vacationOneEnd = strtotime($params['vacation_one_end']);
|
|
|
+// for ($i=$vacationOneStart; $i<=$vacationOneEnd; $i+=86400)
|
|
|
+// {
|
|
|
+// array_push($vacationOneArr,date("Y-m-d", $i));
|
|
|
+// }
|
|
|
+// }
|
|
|
+// $vacationTwoArr = [];
|
|
|
+// if (!empty($params['vacation_two_start']) && !empty($params['vacation_two_end'])){
|
|
|
+// $vacationTwoStart = strtotime($params['vacation_two_start']);
|
|
|
+// $vacationTwoEnd = strtotime($params['vacation_two_end']);
|
|
|
+// for ($i=$vacationTwoStart; $i<=$vacationTwoEnd; $i+=86400)
|
|
|
+// {
|
|
|
+// array_push($vacationTwoArr,date("Y-m-d", $i));
|
|
|
+// }
|
|
|
+// }
|
|
|
+// //法定天数
|
|
|
+// $clocking_in_day = \db('人事_考勤资料')->where('kqzl_ny',$params['date'])->field('法定天数')->order('UniqId desc')->find();
|
|
|
+// if (!empty($clocking_in_day)){
|
|
|
+// $params['days'] = (int)$clocking_in_day['法定天数'];
|
|
|
+// }else{
|
|
|
+// $this->error('法定天数未设置');
|
|
|
+// }
|
|
|
+// //将起止日期内数据删除
|
|
|
+// $delRes = \db('绩效工资汇总')->where('sczl_rq','between',[$startDate,$endDate])->delete();
|
|
|
+// //设备产量计酬报工数据查询
|
|
|
+// $where = [];
|
|
|
+// $where['a.sczl_rq'] = ['between',[$startDate,$endDate]];
|
|
|
+// //查询印刷印后车间的机台,添加搜索条件
|
|
|
+// $sist = ['胶印车间','凹丝印车间','印后车间','检验车间'];
|
|
|
+// $jtbhs = db('设备_基本资料')
|
|
|
+// ->where('sys_sbID','<>','')
|
|
|
+// ->where('使用部门','in',$sist)
|
|
|
+// ->column('设备编号');
|
|
|
+// $fields = "a.sczl_gdbh,a.sczl_yjno,a.sczl_gxh,a.sczl_type as sczl_type,a.sczl_rq,a.sczl_jtbh,a.sczl_工价系数,a.sczl_ms,a.sczl_cl as 班组车头产量,a.sczl_Pgcl,a.sczl_zcfp,
|
|
|
+// a.sczl_装版工时 as 装版工时,a.sczl_保养工时 as 保养工时,a.sczl_打样工时 as 打样工时,a.sczl_异常工时1 as 异常停机工时,a.sczl_设备运行工时 as 车头产量占用机时,
|
|
|
+// a.sczl_bh1,a.sczl_bh2,a.sczl_bh3,a.sczl_bh4,a.sczl_bh5,a.sczl_bh6,a.sczl_bh7,a.sczl_bh8,a.sczl_bh9,a.sczl_bh10,
|
|
|
+// a.sczl_rate1,a.sczl_rate2,a.sczl_rate3,a.sczl_rate4,a.sczl_rate5,a.sczl_rate6,a.sczl_rate7,a.sczl_rate8,a.sczl_rate9,a.sczl_rate10,
|
|
|
+// a.sczl_废品率系数,a.UniqId,
|
|
|
+// b.千件工价,b.日定额,b.补产标准,c.工价系数 as 工序难度系数,c.版距,c.印刷方式
|
|
|
+// ,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::name('设备_产量计酬')->alias('a')->field($fields);
|
|
|
+// // 连接 dic_lzde 表
|
|
|
+// $query->join('dic_lzde b', 'a.sczl_dedh = b.sys_bh', 'LEFT');
|
|
|
+// // 连接 工单_工艺资料 表
|
|
|
+// $query->join('工单_工艺资料 c', 'a.sczl_gdbh = c.Gy0_gdbh AND a.sczl_yjno = c.Gy0_yjno AND a.sczl_gxh = c.Gy0_gxh', 'LEFT');
|
|
|
+// // 循环连接 人事_基本资料 表(仅当 sczl_bh 不为空时才连接)
|
|
|
+// for ($i = 1; $i <= 10; $i++) {
|
|
|
+// $field = 'a.sczl_bh' . $i;
|
|
|
+// $alias = 'd' . $i;
|
|
|
+// $query->join("人事_基本资料 $alias", "$field = {$alias}.员工编号 AND {$field} IS NOT NULL", 'LEFT');
|
|
|
+// }
|
|
|
+// $query->where($where)->where('a.sczl_jtbh','in',$jtbhs);
|
|
|
+// $list = $query->order('a.sczl_rq')->group('UniqId')->select();
|
|
|
+// $UniqId = \db('绩效工资汇总')->field('UniqID')->order('UniqID desc')->find();
|
|
|
+// if (empty($UniqId)){
|
|
|
+// $UniqId = 1;
|
|
|
+// }else{
|
|
|
+// $UniqId = $UniqId['UniqID'] + 1;
|
|
|
+// }
|
|
|
+// $data = [];
|
|
|
+// /**
|
|
|
+// * 设备_产量计酬数据
|
|
|
+// */
|
|
|
+// foreach ($list as $value){
|
|
|
+// $num = 1;
|
|
|
+// $value['班组车头产量'] = $value['班组车头产量'] - $value['sczl_zcfp'];
|
|
|
+// //计件产量
|
|
|
+// if (substr($value['sczl_jtbh'],0,2) == 'JP'){//检品机
|
|
|
+// if ($value['sczl_废品率系数'] == 0){
|
|
|
+// $gx_rate = 1;
|
|
|
+// }else{
|
|
|
+// $gx_rate = $value['sczl_废品率系数'];
|
|
|
+// }
|
|
|
+// $value['班组车头产量'] = $value['班组车头产量'] * $value['sczl_Pgcl'];
|
|
|
+// $byThePieceYield = round($value['班组车头产量'] * $value['sczl_废品率系数']);//班组计件核算产量
|
|
|
+// }elseif (substr($value['sczl_jtbh'],0,2) == 'WY' || substr($value['sczl_jtbh'],0,2) == 'DW' || substr($value['sczl_jtbh'],0,3) == 'YWY' || substr($value['sczl_jtbh'],0,3) == 'YDW'){//凹印机
|
|
|
+// if ($value['sczl_工价系数'] == '0.000' || floatval($value['sczl_工价系数']) <= 0){
|
|
|
+// //工序难度系数
|
|
|
+// $gx_rate = $value['工序难度系数'];
|
|
|
+// if (floatval($value['工序难度系数']) <= 0 || empty($value['工序难度系数'])){
|
|
|
+// $gx_rate = '1.0000';
|
|
|
+// }
|
|
|
+// }else{
|
|
|
+// if (floatval($value['工序难度系数']) > 0 ){
|
|
|
+// $gx_rate = number_format($value['sczl_工价系数'] * $value['工序难度系数'],3);
|
|
|
+// }else{
|
|
|
+// $gx_rate = $value['sczl_工价系数'];
|
|
|
+// }
|
|
|
+// }
|
|
|
+// if (str_contains($value['印刷方式'],'张') && $value['版距'] > 0){
|
|
|
+// $value['版距'] = $value['版距'] / 1000;
|
|
|
+// $value['班组车头产量'] = $value['班组车头产量'] * $value['版距'];
|
|
|
+// }
|
|
|
+//// $byThePieceYield = round($value['班组车头产量'] * $gx_rate);
|
|
|
+// $byThePieceYield =str_replace(',','',round($value['班组车头产量'] * floatval($gx_rate))) ;
|
|
|
+// }else{
|
|
|
+// if ($value['sczl_jtbh'] === 'YSY02#' || $value['sczl_jtbh'] === 'YSY08#' || $value['sczl_jtbh'] === 'YSY10#' || $value['sczl_jtbh'] === 'SY03#'){
|
|
|
+// $num = 1.1;
|
|
|
+// }
|
|
|
+// if ($value['sczl_工价系数'] == '0.000' || floatval($value['sczl_工价系数']) <= 0){
|
|
|
+// //工序难度系数
|
|
|
+// $gx_rate = $value['工序难度系数'];
|
|
|
+// if (floatval($value['工序难度系数']) <= 0 || empty($value['工序难度系数'])){
|
|
|
+// $gx_rate = '1.0000';
|
|
|
+// }
|
|
|
+// }else{
|
|
|
+// if (floatval($value['工序难度系数']) > 0 ){
|
|
|
+// $gx_rate = number_format($value['sczl_工价系数'] * $value['工序难度系数'],3);
|
|
|
+// }else{
|
|
|
+// $gx_rate = $value['sczl_工价系数'];
|
|
|
+// }
|
|
|
+// }
|
|
|
+// $byThePieceYield =round($value['班组车头产量'] * floatval($gx_rate) * $num);
|
|
|
+//
|
|
|
+// }
|
|
|
+//// //计件产量
|
|
|
+//// if (substr($value['sczl_jtbh'],0,2) == 'JP'){
|
|
|
+//// $value['工序难度系数'] = $value['sczl_废品率系数'];
|
|
|
+//// $value['班组车头产量'] = $value['班组车头产量'] * $value['sczl_Pgcl'];
|
|
|
+//// $byThePieceYield = round($value['班组车头产量'] * $value['sczl_废品率系数']);
|
|
|
+//// }else{
|
|
|
+//// if ($value['工序难度系数'] <= 0 || empty($value['工序难度系数'])){
|
|
|
+//// $value['工序难度系数'] = '1.0000';
|
|
|
+//// $byThePieceYield = $value['班组车头产量'];
|
|
|
+//// }else{
|
|
|
+//// $byThePieceYield = round($value['班组车头产量'] * $value['工序难度系数']);
|
|
|
+//// }
|
|
|
+//// }
|
|
|
+// //补产产量/班组换算产量
|
|
|
+// $afterProductionYield = ($value['装版工时'] + $value['保养工时'] + $value['打样工时']) * $value['补产标准'];
|
|
|
+// //核算产量
|
|
|
+// $accountingYield = $byThePieceYield + $afterProductionYield;
|
|
|
+// //工时占比
|
|
|
+// if ($value['日定额'] > 0){
|
|
|
+// $manHourRate = number_format($accountingYield / $value['日定额'],4);
|
|
|
+// }else{
|
|
|
+// $manHourRate = '0.0000';
|
|
|
+// }
|
|
|
+// for ($i=1; $i<11; $i++){
|
|
|
+// $bhKey = 'sczl_bh'.$i;
|
|
|
+// $xmKey = 'name'.$i;
|
|
|
+// $rateKey = 'sczl_rate'.$i;
|
|
|
+// if (!empty($value[$bhKey]) && $value[$bhKey] != '0000'){
|
|
|
+// $item = [];
|
|
|
+// $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'] = $value['sczl_type'];
|
|
|
+// $item['sczl_rq'] = $value['sczl_rq'];
|
|
|
+// $item['sczl_jtbh'] = $value['sczl_jtbh'];
|
|
|
+// $item['班组车头产量'] = $value['班组车头产量'];
|
|
|
+// $item['工价系数'] = '0.0000';
|
|
|
+// $item['工序难度系数'] = $gx_rate * $num;
|
|
|
+// $item['装版工时'] = $value['装版工时'];
|
|
|
+// $item['保养工时'] = $value['保养工时'];
|
|
|
+// $item['打样工时'] = $value['打样工时'];
|
|
|
+// $item['异常停机工时'] = $value['异常停机工时'];
|
|
|
+// $item['车头产量占用机时'] = $value['车头产量占用机时'];
|
|
|
+// $item['日定额'] = (int)$value['日定额'];
|
|
|
+// $item['千件工价'] = $value['千件工价'];
|
|
|
+// $item['补产标准'] = $value['补产标准'];
|
|
|
+// $item['班组换算产量'] = $afterProductionYield;
|
|
|
+// $item['计时补差额工资'] = '0.00';
|
|
|
+// $item['bh'] = $value[$bhKey];
|
|
|
+// $item['xm'] = $value[$xmKey];
|
|
|
+// $item['Rate'] = $value[$rateKey];
|
|
|
+// $item['sczl_ms'] = $value['sczl_ms'];
|
|
|
+// $item['核算产量'] = $accountingYield;
|
|
|
+// $item['工时占比'] = $manHourRate;
|
|
|
+// array_push($data,$item);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+//// halt($data);
|
|
|
+// /**
|
|
|
+// * 拆片工序数据
|
|
|
+// */
|
|
|
+// $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,
|
|
|
+// a.sczl_rate1, b.千件工价, b.日定额, b.补产标准,a.sczl_工价系数 as 工序难度系数,a.拆片联拼系数,a.拆片条小盒系数, d.员工姓名')
|
|
|
+// ->join('dic_lzde b', 'a.sczl_dedh = b.sys_bh','left')
|
|
|
+// ->join('工单_工艺资料 c', 'a.sczl_gdbh = c.Gy0_gdbh AND a.sczl_yjno = c.Gy0_yjno AND a.sczl_gxh = c.Gy0_gxh','left')
|
|
|
+// ->join('人事_基本资料 d', 'a.sczl_bh1 = d.员工编号','left')
|
|
|
+// ->where($where)
|
|
|
+// ->select();
|
|
|
+// foreach ($query as $value){
|
|
|
+// $num = 1;
|
|
|
+// $value['班组车头产量'] = ($value['班组车头产量'] - $value['sczl_zcfp']) * $value['拆片联拼系数'] * $value['拆片条小盒系数'];
|
|
|
+// //计件产量
|
|
|
+// if ($value['sczl_jtbh'] === 'YSY02#' || $value['sczl_jtbh'] === 'YSY08#' || $value['sczl_jtbh'] === 'YSY10#' || $value['sczl_jtbh'] === 'SY03#'){
|
|
|
+// $num = 1.1;
|
|
|
+// }
|
|
|
+// if ($value['工序难度系数'] <= 0 || empty($value['工序难度系数'])){
|
|
|
+// $value['工序难度系数'] = '1.0000';
|
|
|
+// $byThePieceYield = $value['班组车头产量'];
|
|
|
+// }else{
|
|
|
+// $byThePieceYield = round($value['班组车头产量'] * $value['工序难度系数'] * $num);
|
|
|
+// }
|
|
|
+// //补产产量/班组换算产量
|
|
|
+// $afterProductionYield = ($value['装版工时'] + $value['保养工时'] + $value['打样工时']) * $value['补产标准'];
|
|
|
+// //核算产量
|
|
|
+// $accountingYield = $byThePieceYield + $afterProductionYield;
|
|
|
+// //工时占比
|
|
|
+// if ($value['日定额'] > 0){
|
|
|
+// $manHourRate = number_format($accountingYield / $value['日定额'],4);
|
|
|
+// }else{
|
|
|
+// $manHourRate = '0.0000';
|
|
|
+// }
|
|
|
+// $item = [];
|
|
|
+// $item['sczl_gdbh'] = $value['sczl_gdbh'];
|
|
|
+// $item['sczl_yjno'] = $value['sczl_yjno'];
|
|
|
+// $item['sczl_gxh'] = $value['sczl_gxh'];
|
|
|
+//// $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['班组车头产量'];
|
|
|
+// $item['工价系数'] = '0.0000';
|
|
|
+// $item['工序难度系数'] = $value['工序难度系数'] * $num;
|
|
|
+// $item['装版工时'] = $value['装版工时'];
|
|
|
+// $item['保养工时'] = $value['保养工时'];
|
|
|
+// $item['打样工时'] = $value['打样工时'];
|
|
|
+// $item['异常停机工时'] = $value['异常停机工时'];
|
|
|
+// $item['车头产量占用机时'] = $value['车头产量占用机时'];
|
|
|
+// $item['日定额'] = (int)$value['日定额'];
|
|
|
+// $item['千件工价'] = $value['千件工价'];
|
|
|
+// $item['补产标准'] = $value['补产标准'];
|
|
|
+// $item['班组换算产量'] = $afterProductionYield;
|
|
|
+// $item['计时补差额工资'] = '0.00';
|
|
|
+// $item['bh'] = $value['sczl_bh1'];
|
|
|
+// $item['xm'] = $value['员工姓名'];
|
|
|
+// $item['Rate'] = $value['sczl_rate1'];
|
|
|
+// $item['sczl_ms'] = $value['sczl_ms'];
|
|
|
+// $item['核算产量'] = $accountingYield;
|
|
|
+// $item['工时占比'] = floatval($manHourRate);
|
|
|
+// array_push($data,$item);
|
|
|
+// }
|
|
|
+//// halt($data);
|
|
|
+// /**
|
|
|
+// * 手工检验工序数据
|
|
|
+// */
|
|
|
+// $shoujianfields = "a.sczl_gdbh,a.sczl_yjgx,sczl_gxmc AS sczl_type,a.sczl_rq,a.sczl_cl AS 班组车头产量,
|
|
|
+// sczl_废品率系数 AS 工序难度系数,a.sczl_bh0,a.sczl_bh1,a.sczl_bh2,a.sczl_bh3,a.sczl_bh4,a.sczl_bh5,a.sczl_bh6,
|
|
|
+// a.sczl_bh7,a.sczl_bh8,a.sczl_bh9,a.sczl_bh10,a.sczl_bh11,b.千件工价,b.日定额,b.补产标准,d0.员工姓名 AS name0,
|
|
|
+// 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,
|
|
|
+// 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::name('db_手工检验')->alias('a')->field($shoujianfields);
|
|
|
+// //链接dic_lzde表
|
|
|
+// $query->join('dic_lzde b','a.sczl_dedh = b.sys_bh','LEFT');
|
|
|
+// //链接人事基本资料表
|
|
|
+// for ($i=0;$i<=12;$i++){
|
|
|
+// $field = 'a.sczl_bh'.$i;
|
|
|
+// $alias = 'd'.$i;
|
|
|
+// $query->join("人事_基本资料 $alias", "$field = {$alias}.员工编号 AND {$field} IS NOT NULL", 'LEFT');
|
|
|
+// }
|
|
|
+// $query->where($where);
|
|
|
+// $list = $query->select();
|
|
|
+// foreach ($list as $key=>$value){
|
|
|
+// for ($i=0;$i<=12;$i++){
|
|
|
+// if (!empty($value['sczl_bh'.$i])){
|
|
|
+// $value['sczl_yjno'] = (int)substr($value['sczl_yjgx'],0,2);
|
|
|
+// $value['sczl_gxh'] = (int)substr($value['sczl_yjgx'],3,2);
|
|
|
+// //车头产量
|
|
|
+// $value['班组车头产量'] = $value['sczl_cl'.$i]*$value['sczl_fp'.$i];
|
|
|
+// //计件产量
|
|
|
+// if ($value['工序难度系数'] <= 0 || empty($value['工序难度系数'])){
|
|
|
+// $value['工序难度系数'] = '1.0000';
|
|
|
+// $value['计件产量'] = $value['班组车头产量'];
|
|
|
+// }else{
|
|
|
+// $value['计件产量'] = round($value['班组车头产量'] * $value['工序难度系数']);
|
|
|
+// }
|
|
|
+// //核算产量
|
|
|
+// $value['核算产量'] = $value['计件产量'];
|
|
|
+// //工时占比
|
|
|
+// if ($value['日定额'] > 0){
|
|
|
+// $value['工时占比'] = round($value['计件产量']/$value['日定额'],4);
|
|
|
+// }else{
|
|
|
+// $value['工时占比'] = '0.0000';
|
|
|
+// }
|
|
|
+// $item = [];
|
|
|
+// $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'] = $value['sczl_type'];
|
|
|
+// $item['sczl_rq'] = $value['sczl_rq'];
|
|
|
+// $item['sczl_jtbh'] = '';
|
|
|
+// $item['班组车头产量'] = $value['班组车头产量'];
|
|
|
+// $item['工价系数'] = '0.0000';
|
|
|
+// $item['工序难度系数'] = $value['工序难度系数'];
|
|
|
+// $item['装版工时'] = '0.00';
|
|
|
+// $item['保养工时'] = '0.00';
|
|
|
+// $item['打样工时'] = '0.00';
|
|
|
+// $item['异常停机工时'] = '0.00';
|
|
|
+// $item['车头产量占用机时'] = '0.00';
|
|
|
+// $item['日定额'] = (int)$value['日定额'];
|
|
|
+// $item['千件工价'] = $value['千件工价'];
|
|
|
+// $item['补产标准'] = $value['补产标准'];
|
|
|
+// $item['班组换算产量'] = '0';
|
|
|
+// $item['计时补差额工资'] = '0.00';
|
|
|
+// $item['bh'] = $value['sczl_bh'.$i];
|
|
|
+// $item['xm'] = $value['name'.$i];
|
|
|
+// $item['Rate'] = '1.0000';
|
|
|
+// $item['sczl_ms'] = '0.00';
|
|
|
+// $item['核算产量'] = $value['核算产量'];
|
|
|
+// $item['工时占比'] = floatval($value['工时占比']);
|
|
|
+// array_push($data,$item);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+//// halt($data);
|
|
|
+// /**
|
|
|
+// * 包装计件工序数据
|
|
|
+// */
|
|
|
+// $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,
|
|
|
+// a.sczl_cl1, a.sczl_cl2, a.sczl_cl3, a.sczl_cl4, a.sczl_cl5, a.sczl_cl6,
|
|
|
+// a.sczl_返工产量1, a.sczl_返工产量2, a.sczl_返工产量3, a.sczl_返工产量4, a.sczl_返工产量5, a.sczl_返工产量6,
|
|
|
+// a.sczl_Jtbh1,a.sczl_Jtbh2,a.sczl_Jtbh3,a.sczl_Jtbh4,a.sczl_Jtbh5,a.sczl_Jtbh6,
|
|
|
+// a.sczl_dedh1,a.sczl_dedh2,a.sczl_dedh3,a.sczl_dedh4,a.sczl_dedh5,a.sczl_dedh6,
|
|
|
+// a.sczl_PgCl1,a.sczl_PgCl2,a.sczl_PgCl3,a.sczl_PgCl4,a.sczl_PgCl5,a.sczl_PgCl6,
|
|
|
+// a.sczl_type1,a.sczl_type2,sczl_type3,a.sczl_type4,a.sczl_type5,sczl_type6,
|
|
|
+// a.sczl_计产系数1,a.sczl_计产系数2,a.sczl_计产系数3,a.sczl_计产系数4,a.sczl_计产系数5,a.sczl_计产系数6,
|
|
|
+// c1.工价系数 as 工序难度系数1,c2.工价系数 as 工序难度系数2,c3.工价系数 as 工序难度系数3,c4.工价系数 as 工序难度系数4,c5.工价系数 as 工序难度系数5,c6.工价系数 as 工序难度系数6,
|
|
|
+// b1.千件工价 as 千件工价1, b2.千件工价 as 千件工价2, b3.千件工价 as 千件工价3, b4.千件工价 as 千件工价4, b5.千件工价 as 千件工价5, b6.千件工价 as 千件工价6,
|
|
|
+// b1.日定额 as 日定额1, b2.日定额 as 日定额2, b3.日定额 as 日定额3, b4.日定额 as 日定额4, b5.日定额 as 日定额5, b6.日定额 as 日定额6,
|
|
|
+// b1.补产标准 as 补产标准1, b2.补产标准 as 补产标准2, b3.补产标准 as 补产标准3, b4.补产标准 as 补产标准4, b5.补产标准 as 补产标准5, b6.补产标准 as 补产标准6,
|
|
|
+// a.sczl_rq,a.sczl_bh,rtrim(d.员工姓名) as xm,
|
|
|
+// e1.成品名称 as cpmc1,e2.成品名称 as cpmc2,e3.成品名称 as cpmc3,e4.成品名称 as cpmc4,e5.成品名称 as cpmc5,e6.成品名称 as cpmc6')
|
|
|
+// ->join('工单_工艺资料 c1', 'a.sczl_gdbh1 = c1.Gy0_gdbh AND a.sczl_yjGx1 = CONCAT("0",c1.Gy0_yjno, "-", c1.Gy0_gxh) AND a.sczl_gdbh1 IS NOT NULL', 'LEFT')
|
|
|
+// ->join('工单_工艺资料 c2', 'a.sczl_gdbh2 = c2.Gy0_gdbh AND a.sczl_yjGx2 = CONCAT("0",c2.Gy0_yjno, "-", c2.Gy0_gxh) AND a.sczl_gdbh2 IS NOT NULL', 'LEFT')
|
|
|
+// ->join('工单_工艺资料 c3', 'a.sczl_gdbh3 = c3.Gy0_gdbh AND a.sczl_yjGx3 = CONCAT("0",c3.Gy0_yjno, "-", c3.Gy0_gxh) AND a.sczl_gdbh3 IS NOT NULL', 'LEFT')
|
|
|
+// ->join('工单_工艺资料 c4', 'a.sczl_gdbh4 = c4.Gy0_gdbh AND a.sczl_yjGx4 = CONCAT("0",c4.Gy0_yjno, "-", c4.Gy0_gxh) AND a.sczl_gdbh4 IS NOT NULL', 'LEFT')
|
|
|
+// ->join('工单_工艺资料 c5', 'a.sczl_gdbh5 = c5.Gy0_gdbh AND a.sczl_yjGx5 = CONCAT("0",c5.Gy0_yjno, "-", c5.Gy0_gxh) AND a.sczl_gdbh5 IS NOT NULL', 'LEFT')
|
|
|
+// ->join('工单_工艺资料 c6', 'a.sczl_gdbh6 = c6.Gy0_gdbh AND a.sczl_yjGx6 = CONCAT("0",c6.Gy0_yjno, "-", c6.Gy0_gxh) AND a.sczl_gdbh6 IS NOT NULL', 'LEFT')
|
|
|
+// ->join('dic_lzde b1', 'a.sczl_dedh1 = b1.sys_bh', 'LEFT')
|
|
|
+// ->join('dic_lzde b2', 'a.sczl_dedh2 = b2.sys_bh', 'LEFT')
|
|
|
+// ->join('dic_lzde b3', 'a.sczl_dedh3 = b3.sys_bh', 'LEFT')
|
|
|
+// ->join('dic_lzde b4', 'a.sczl_dedh4 = b4.sys_bh', 'LEFT')
|
|
|
+// ->join('dic_lzde b5', 'a.sczl_dedh5 = b5.sys_bh', 'LEFT')
|
|
|
+// ->join('dic_lzde b6', 'a.sczl_dedh6 = b6.sys_bh', 'LEFT')
|
|
|
+// ->join('人事_基本资料 d', 'a.sczl_bh = d.员工编号', 'LEFT')
|
|
|
+// ->join('工单_基本资料 e1','a.sczl_gdbh1 = e1.Gd_gdbh AND a.sczl_gdbh1 IS NOT NULL','LEFT')
|
|
|
+// ->join('工单_基本资料 e2','a.sczl_gdbh2 = e2.Gd_gdbh AND a.sczl_gdbh2 IS NOT NULL','LEFT')
|
|
|
+// ->join('工单_基本资料 e3','a.sczl_gdbh3 = e3.Gd_gdbh AND a.sczl_gdbh3 IS NOT NULL','LEFT')
|
|
|
+// ->join('工单_基本资料 e4','a.sczl_gdbh4 = e4.Gd_gdbh AND a.sczl_gdbh4 IS NOT NULL','LEFT')
|
|
|
+// ->join('工单_基本资料 e5','a.sczl_gdbh5 = e5.Gd_gdbh AND a.sczl_gdbh5 IS NOT NULL','LEFT')
|
|
|
+// ->join('工单_基本资料 e6','a.sczl_gdbh6 = e6.Gd_gdbh AND a.sczl_gdbh6 IS NOT NULL','LEFT')
|
|
|
+// ->where($where)
|
|
|
+// ->group('a.UniqId')
|
|
|
+// ->select();
|
|
|
+//
|
|
|
+// foreach ($result as $value){
|
|
|
+// for ($i=1;$i<7;$i++){
|
|
|
+// $item = [];
|
|
|
+// $gdbhKey = 'sczl_gdbh'.$i;
|
|
|
+// $yjgxKey = 'sczl_yjGx'.$i;
|
|
|
+// $jtbhKey = 'sczl_Jtbh'.$i;
|
|
|
+// $gxmcKey = 'gxmc'.$i;
|
|
|
+// $clKey = 'sczl_cl'.$i;
|
|
|
+// $reworkKey = 'sczl_返工产量'.$i;
|
|
|
+// $gxKey = '工序难度系数'.$i;
|
|
|
+// $dedh = 'sczl_dedh'.$i;
|
|
|
+// $thousandKey = '千件工价'.$i;
|
|
|
+// $dailyKey = '日定额'.$i;
|
|
|
+// $afterKey = '补产标准'.$i;
|
|
|
+// $pgclKey = 'sczl_PgCl'.$i;
|
|
|
+// $jcxsKey = 'sczl_计产系数'.$i;
|
|
|
+// $cpmcKey = 'cpmc'.$i;
|
|
|
+// $typekey = 'sczl_type'.$i;
|
|
|
+// if (!empty($value[$gdbhKey])){
|
|
|
+// $item['sczl_gdbh'] = $value[$gdbhKey];
|
|
|
+// $item['sczl_yjno'] = ltrim(substr($value[$yjgxKey],0,2), '0');
|
|
|
+// $item['sczl_gxh'] = abs((int)substr($value[$yjgxKey],-2));
|
|
|
+//// $item['sczl_type'] = substr($value[$gxmcKey],0,30);
|
|
|
+// $item['sczl_type'] = $value[$gxmcKey];
|
|
|
+// $item['sczl_rq'] = $value['sczl_rq'];
|
|
|
+// $item['sczl_jtbh'] = $value[$jtbhKey];
|
|
|
+// $item['工价系数'] = '0.0000';
|
|
|
+// $item['工序难度系数'] = $value[$jcxsKey];
|
|
|
+// if ($value[$jcxsKey] <= 0){
|
|
|
+// $item['工序难度系数'] = '1.0000';
|
|
|
+// }
|
|
|
+// $item['装版工时'] = '0.00';
|
|
|
+// $item['保养工时'] = '0.00';
|
|
|
+// $item['打样工时'] = '0.00';
|
|
|
+// $item['异常停机工时'] = '0.00';
|
|
|
+// $item['车头产量占用机时'] = '0.00';
|
|
|
+// $item['日定额'] = $value[$dailyKey];
|
|
|
+// $item['千件工价'] = $value[$thousandKey];
|
|
|
+// $item['补产标准'] = $value[$afterKey];
|
|
|
+// $item['班组换算产量'] = '0.00';
|
|
|
+// $item['计时补差额工资'] = '0.00';
|
|
|
+// $item['bh'] = $value['sczl_bh'];
|
|
|
+// $item['xm'] = $value['xm'];
|
|
|
+// $item['Rate'] = 1.000;
|
|
|
+// $item['sczl_ms'] = '0.00';
|
|
|
+// $cl = $value[$clKey];
|
|
|
+// if ($cl > 0){
|
|
|
+// if (str_contains($item['sczl_type'],'包装')){
|
|
|
+// $item['班组车头产量'] = $cl * $value[$pgclKey] / (int)$value[$typekey];
|
|
|
+// }else{
|
|
|
+// $item['班组车头产量'] = $cl;
|
|
|
+// }
|
|
|
+// $item['核算产量'] = $item['班组车头产量'] * $item['工序难度系数'];
|
|
|
+// //工时占比
|
|
|
+// if ($item['日定额'] > 0){
|
|
|
+// $manHourRate = number_format($item['核算产量'] / $item['日定额'],4);
|
|
|
+// }else{
|
|
|
+// $manHourRate = '0.0000';
|
|
|
+// }
|
|
|
+// $item['工时占比'] = floatval($manHourRate);
|
|
|
+// array_push($data,$item);
|
|
|
+// }
|
|
|
+// //返工
|
|
|
+// if (!empty($value[$reworkKey]) && $value[$reworkKey] > 0){
|
|
|
+// $item['sczl_type'] = '返工('.$item['sczl_type'].')';
|
|
|
+// $cl = $value[$reworkKey];
|
|
|
+// if (str_contains($item['sczl_type'],'包装')){
|
|
|
+// $item['班组车头产量'] = $cl * $value[$pgclKey] / (int)$value[$typekey];
|
|
|
+// }else{
|
|
|
+// $item['班组车头产量'] = $cl;
|
|
|
+// }
|
|
|
+// $item['核算产量'] = $item['班组车头产量'] * $item['工序难度系数'];
|
|
|
+// if ($item['日定额'] > 0){
|
|
|
+// $manHourRate = number_format($item['核算产量'] / $item['日定额'],4);
|
|
|
+// }else{
|
|
|
+// $manHourRate = '0.0000';
|
|
|
+// }
|
|
|
+// $item['工时占比'] = floatval($manHourRate);
|
|
|
+// array_push($data,$item);
|
|
|
+// }
|
|
|
+//
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+////halt($data);
|
|
|
+// //用于存储bh对应的工时占比总和
|
|
|
+// $bhTotals = [];
|
|
|
+// // 遍历原始数据
|
|
|
+// foreach ($data as $row) {
|
|
|
+// $bh = substr($row['sczl_rq'],0,10) . '-' .$row['bh'];
|
|
|
+// // 初始化bh对应的工时占比总和为0
|
|
|
+// if (!isset($bhTotals[$bh])) {
|
|
|
+// $bhTotals[$bh] = 0;
|
|
|
+// }
|
|
|
+// // 将工时占比相加
|
|
|
+// $bhTotals[$bh] += floatval($row['工时占比']);
|
|
|
+// }
|
|
|
+// //用usort函数对$data数组按照sczl_rq的日期部分进行升序排序
|
|
|
+// usort($data, function ($a, $b) {
|
|
|
+// return strtotime(substr($a['sczl_rq'], 0, 10)) - strtotime(substr($b['sczl_rq'], 0, 10));
|
|
|
+// });
|
|
|
+// $days = [];
|
|
|
+// foreach ($data as $key=>$item){
|
|
|
+// //统计每月出勤天数
|
|
|
+// $day_bh = $item['bh'];
|
|
|
+// if (!isset($days[$day_bh])){
|
|
|
+// $days[$day_bh] = [];
|
|
|
+// array_push($days[$day_bh],$item['sczl_rq']);
|
|
|
+// }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){
|
|
|
+// $standardQuota = floatval($item['工时占比'] / $bhTotals[$bh] * $item['日定额']);
|
|
|
+// $data[$key]['达标定额'] = number_format($standardQuota,2,'.', '');
|
|
|
+// }else{
|
|
|
+// $data[$key]['达标定额'] = number_format($item['班组车头产量'],2,'.', '');
|
|
|
+// }
|
|
|
+// $date = substr($item['sczl_rq'],0,10);
|
|
|
+// if (in_array($date,$vacationOneArr) || in_array($date,$vacationTwoArr)){
|
|
|
+// //计件工资
|
|
|
+//// $pieceWorkWage = $data[$key]['达标定额']/1000*$item['千件工价']*$item['Rate']*3;
|
|
|
+// $pieceWorkWage = 0;
|
|
|
+// //加班工资
|
|
|
+// $overTimePay = $item['核算产量'] / 1000 *$item['千件工价'] * $item['Rate'] *3;
|
|
|
+// //法定节假日,去除这天的考勤天数
|
|
|
+// $days[$day_bh] = array_filter($days[$day_bh], function($value) use ($item) {
|
|
|
+// return $value !== $item['sczl_rq'];
|
|
|
+// });
|
|
|
+// }else{
|
|
|
+//// //如果出勤天数小于法定天数,按正常计算
|
|
|
+//// if (count($days[$day_bh]) <= $params['days'] && strpos($item['sczl_type'],'成品防护') === false){
|
|
|
+//// $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;
|
|
|
+//
|
|
|
+// // 基础计件工资计算公式
|
|
|
+// $baseWage = ($data[$key]['达标定额'] / 1000) * $item['千件工价'] * $item['Rate'];
|
|
|
+//
|
|
|
+// // 当有成品防护类型时(直接通过)
|
|
|
+// if (strpos($item['sczl_type'], '成品防护') !== false) {
|
|
|
+// $pieceWorkWage = $baseWage;
|
|
|
+// }
|
|
|
+// // 没有特殊类型时
|
|
|
+// else {
|
|
|
+// // 转换为数值类型避免计算错误
|
|
|
+// $standardQuota = (float)$data[$key]['达标定额'];
|
|
|
+// // 判断出勤天数是否超限
|
|
|
+// if (count($days[$day_bh]) > $params['days']) {
|
|
|
+// // 超限时重置定额
|
|
|
+// $data[$key]['达标定额'] = '0.00';
|
|
|
+// $pieceWorkWage = '0.00';
|
|
|
+// $standardQuota = 0; // 同步数值类型
|
|
|
+// } else {
|
|
|
+// $pieceWorkWage = $baseWage;
|
|
|
+// }
|
|
|
+// }
|
|
|
+// // 统一计算加班工资(所有情况都会计算)
|
|
|
+//// $actualOutput = (float)$item['核算产量'];
|
|
|
+//// $overtimeOutput = max($actualOutput - (float)$data[$key]['达标定额'], 0);
|
|
|
+//// $overTimePay = ($overtimeOutput / 1000) * $item['千件工价'] * $item['Rate'] * 1.5;
|
|
|
+// $overTimePay = ($item['核算产量'] - $data[$key]['达标定额']) / 1000 *$item['千件工价'] * $item['Rate'] *1.5;
|
|
|
+// }
|
|
|
+// $data[$key]['个人计件工资'] = number_format($pieceWorkWage,2,'.', '');
|
|
|
+// $data[$key]['个人加班工资'] = number_format($overTimePay,2,'.', '');
|
|
|
+// $data[$key]['UniqID'] = $UniqId++;
|
|
|
+// $data[$key]['sys_ny'] = $params['date'];
|
|
|
+// $data[$key]['sys_rq'] = date('Y-m-d H:i:s');
|
|
|
+// $data[$key]['sys_id'] = $params['sys_id'];
|
|
|
+// $data[$key]['法定天数'] = $params['days'];
|
|
|
+// $data[$key]['sczl_type'] = trim($item['sczl_type']);
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 检查任务是否已经存在于队列中,如果不存在则推送任务到队列
|
|
|
+// if (!$redis->has($taskIdentifier)) {
|
|
|
+//
|
|
|
+// // 在提交队列任务前,先记录到任务表
|
|
|
+// $taskData = [
|
|
|
+// 'date' => $params['date'],
|
|
|
+// 'start_date' => $startDate,
|
|
|
+// 'end_date' => $endDate,
|
|
|
+// 'sys_id' => $params['sys_id'] ?? '',
|
|
|
+// 'user_id' => session('user_id') ?? 0,
|
|
|
+// 'user_name' => session('user_name') ?? '系统',
|
|
|
+// 'request_time' => date('Y-m-d H:i:s')
|
|
|
+// ];
|
|
|
+//
|
|
|
+// $taskId = Db::name('queue_tasks')->insertGetId([
|
|
|
+// 'task_type' => 'salary_calculation',
|
|
|
+// 'task_data' => json_encode($taskData, JSON_UNESCAPED_UNICODE),
|
|
|
+// 'status' => 'pending',
|
|
|
+// 'queue_name' => 'salary_calculation',
|
|
|
+// 'create_time' => date('Y-m-d H:i:s')
|
|
|
+// ]);
|
|
|
+//
|
|
|
+// // 将任务ID添加到任务数据中
|
|
|
+// $taskData['task_id'] = $taskId;
|
|
|
+//
|
|
|
+// // 提交任务到工资计算队列
|
|
|
+// $job = new InsertDataJob($data);
|
|
|
+//
|
|
|
+// // 修改:使用工资计算队列名称
|
|
|
+// $queueResult = Queue::push($job, $taskData, 'salary_calculation');
|
|
|
+//
|
|
|
+// if ($queueResult !== false) {
|
|
|
+// // 更新任务记录
|
|
|
+// Db::name('queue_tasks')
|
|
|
+// ->where('id', $taskId)
|
|
|
+// ->update([
|
|
|
+// 'job_id' => $queueResult,
|
|
|
+// 'update_time' => date('Y-m-d H:i:s')
|
|
|
+// ]);
|
|
|
+//
|
|
|
+// $redis->set($taskIdentifier, true);
|
|
|
+// $this->success('数据正在处理中,请等待...');
|
|
|
+// }
|
|
|
+//// $job = new InsertDataJob($data); // 创建任务实例
|
|
|
+//// // 推送任务到队列
|
|
|
+//// Queue::push($job,'','default'); // 推送任务到队列
|
|
|
+//// // 设置任务的标识符到缓存中,并设置有效期,有效期为队列执行时间的两倍
|
|
|
+//// $redis->set($taskIdentifier, true);
|
|
|
+//// $this->success('数据正在处理中,请等待...');
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+//
|
|
|
+// /**
|
|
|
+// * 新增:查询工资计算任务状态
|
|
|
+// * @ApiMethod GET
|
|
|
+// */
|
|
|
+// public function salaryStatus()
|
|
|
+// {
|
|
|
+// $date = Request::instance()->param('date');
|
|
|
+//
|
|
|
+// if (empty($date)) {
|
|
|
+// $this->error('月份参数错误');
|
|
|
+// }
|
|
|
+//
|
|
|
+// $task = Db::name('queue_tasks')
|
|
|
+// ->where('task_type', 'salary_calculation')
|
|
|
+// ->where('task_data', 'like', '%"date":"' . $date . '"%')
|
|
|
+// ->order('id', 'desc')
|
|
|
+// ->find();
|
|
|
+//
|
|
|
+// if ($task) {
|
|
|
+// $taskData = json_decode($task['task_data'] ?? '{}', true);
|
|
|
+// $result = json_decode($task['result'] ?? '{}', true);
|
|
|
+//
|
|
|
+// $this->success('查询成功', null, [
|
|
|
+// 'exists' => true,
|
|
|
+// 'task_id' => $task['id'],
|
|
|
+// 'date' => $date,
|
|
|
+// 'status' => $task['status'],
|
|
|
+// 'queue_name' => $task['queue_name'],
|
|
|
+// 'job_id' => $task['job_id'],
|
|
|
+// 'start_time' => $task['start_time'],
|
|
|
+// 'end_time' => $task['end_time'],
|
|
|
+// 'retry_count' => $task['retry_count'],
|
|
|
+// 'result' => $result,
|
|
|
+// 'error' => $task['error'] ?? '',
|
|
|
+// 'create_time' => $task['create_time'],
|
|
|
+// 'user_info' => [
|
|
|
+// 'user_id' => $taskData['user_id'] ?? 0,
|
|
|
+// 'user_name' => $taskData['user_name'] ?? ''
|
|
|
+// ]
|
|
|
+// ]);
|
|
|
+// } else {
|
|
|
+// $this->success('查询成功', null, ['exists' => false, 'date' => $date]);
|
|
|
+// }
|
|
|
+// }
|
|
|
+//}
|
|
|
+
|
|
|
+
|
|
|
+namespace app\api\controller;
|
|
|
|
|
|
use app\common\controller\Api;
|
|
|
-use \think\Request;
|
|
|
+use think\Request;
|
|
|
use think\Db;
|
|
|
-use app\job\InsertDataJob;
|
|
|
use think\Queue;
|
|
|
-use think\Cache;
|
|
|
-use think\cache\driver\Redis;
|
|
|
-/**
|
|
|
- * 员工计件工资核算
|
|
|
- */
|
|
|
+
|
|
|
class StaffSalary extends Api
|
|
|
{
|
|
|
protected $noNeedLogin = ['*'];
|
|
|
protected $noNeedRight = ['*'];
|
|
|
|
|
|
/**
|
|
|
- * 首页
|
|
|
- *
|
|
|
+ * 计算员工计件工资(队列版本)
|
|
|
*/
|
|
|
- public function index()
|
|
|
+ public function staffSalaryCount()
|
|
|
{
|
|
|
- $this->success('请求成功');
|
|
|
- }
|
|
|
- /**
|
|
|
- * 计算员工计件工资
|
|
|
- * @ApiMethod POST
|
|
|
- * @param string date 考勤年月
|
|
|
- * @param string start_date 开始日期
|
|
|
- * @param string end_date 结束日期
|
|
|
- * @param string vacation_one_start 法定假日1 开始时间
|
|
|
- * @param string vacation_one_end 法定假日1 结束时间
|
|
|
- * @param string vacation_two_start 法定假日2 开始时间
|
|
|
- * @param string vacation_two_end 法定假日2 结束时间
|
|
|
- */
|
|
|
- public function staffSalaryCount(){
|
|
|
- if (Request::instance()->isPost() == false){
|
|
|
+ if (Request::instance()->isPost() == false) {
|
|
|
$this->error('非法请求');
|
|
|
}
|
|
|
+
|
|
|
$params = Request::instance()->param();
|
|
|
- if (!isset($params['start_date']) || !isset($params['end_date']) || empty($params['start_date']) || empty($params['end_date']) || !isset($params['date']) || empty($params['date']))
|
|
|
- {
|
|
|
- $this->error('参数错误');
|
|
|
- }
|
|
|
- $startDate = $params['start_date'];
|
|
|
- $endDate = $params['end_date'];
|
|
|
- $attendanceMonth = $params['date'];
|
|
|
- // 确保开始日期和结束日期在考勤年月的范围内
|
|
|
- $startDateInRange = date('Ym', strtotime($startDate)) === $attendanceMonth;
|
|
|
- $endDateInRange = date('Ym', strtotime($endDate)) === $attendanceMonth;
|
|
|
- if (!$startDateInRange || !$endDateInRange) {
|
|
|
- $this->error('日期参数错误');
|
|
|
- }
|
|
|
- $options = [
|
|
|
- 'host' => '127.0.0.1',
|
|
|
- 'port' => 6379,
|
|
|
- 'password' => '123456',
|
|
|
- 'select' => 15,
|
|
|
- 'timeout' => 0,
|
|
|
- 'expire' => 0,
|
|
|
- 'persistent' => false,
|
|
|
- 'prefix' => '',
|
|
|
- ];
|
|
|
- $redis = new Redis($options);
|
|
|
-// $taskIdentifier = md5(json_encode('date'));
|
|
|
-// $queueKey = $redis->get($taskIdentifier);
|
|
|
-// if ($queueKey){
|
|
|
-// $this->success('数据正在处理中,请等待...');
|
|
|
-// }
|
|
|
- $taskIdentifier = md5('salary_calculation_' . json_encode($params));
|
|
|
|
|
|
- if ($redis->has($taskIdentifier)) {
|
|
|
- $this->success('数据正在处理中,请等待...');
|
|
|
- }
|
|
|
- $vacationOneArr = [];
|
|
|
- if (!empty($params['vacation_one_start']) && !empty($params['vacation_one_end'])){
|
|
|
- $vacationOneStart = strtotime($params['vacation_one_start']);
|
|
|
- $vacationOneEnd = strtotime($params['vacation_one_end']);
|
|
|
- for ($i=$vacationOneStart; $i<=$vacationOneEnd; $i+=86400)
|
|
|
- {
|
|
|
- array_push($vacationOneArr,date("Y-m-d", $i));
|
|
|
- }
|
|
|
+ // 参数验证
|
|
|
+ if (empty($params['date']) || empty($params['start_date']) || empty($params['end_date'])) {
|
|
|
+ $this->error('日期参数不能为空');
|
|
|
}
|
|
|
- $vacationTwoArr = [];
|
|
|
- if (!empty($params['vacation_two_start']) && !empty($params['vacation_two_end'])){
|
|
|
- $vacationTwoStart = strtotime($params['vacation_two_start']);
|
|
|
- $vacationTwoEnd = strtotime($params['vacation_two_end']);
|
|
|
- for ($i=$vacationTwoStart; $i<=$vacationTwoEnd; $i+=86400)
|
|
|
- {
|
|
|
- array_push($vacationTwoArr,date("Y-m-d", $i));
|
|
|
- }
|
|
|
- }
|
|
|
- //法定天数
|
|
|
- $clocking_in_day = \db('人事_考勤资料')->where('kqzl_ny',$params['date'])->field('法定天数')->order('UniqId desc')->find();
|
|
|
- if (!empty($clocking_in_day)){
|
|
|
- $params['days'] = (int)$clocking_in_day['法定天数'];
|
|
|
- }else{
|
|
|
- $this->error('法定天数未设置');
|
|
|
- }
|
|
|
- //将起止日期内数据删除
|
|
|
- $delRes = \db('绩效工资汇总')->where('sczl_rq','between',[$startDate,$endDate])->delete();
|
|
|
- //设备产量计酬报工数据查询
|
|
|
- $where = [];
|
|
|
- $where['a.sczl_rq'] = ['between',[$startDate,$endDate]];
|
|
|
- //查询印刷印后车间的机台,添加搜索条件
|
|
|
- $sist = ['胶印车间','凹丝印车间','印后车间','检验车间'];
|
|
|
- $jtbhs = db('设备_基本资料')
|
|
|
- ->where('sys_sbID','<>','')
|
|
|
- ->where('使用部门','in',$sist)
|
|
|
- ->column('设备编号');
|
|
|
- $fields = "a.sczl_gdbh,a.sczl_yjno,a.sczl_gxh,a.sczl_type as sczl_type,a.sczl_rq,a.sczl_jtbh,a.sczl_工价系数,a.sczl_ms,a.sczl_cl as 班组车头产量,a.sczl_Pgcl,a.sczl_zcfp,
|
|
|
- a.sczl_装版工时 as 装版工时,a.sczl_保养工时 as 保养工时,a.sczl_打样工时 as 打样工时,a.sczl_异常工时1 as 异常停机工时,a.sczl_设备运行工时 as 车头产量占用机时,
|
|
|
- a.sczl_bh1,a.sczl_bh2,a.sczl_bh3,a.sczl_bh4,a.sczl_bh5,a.sczl_bh6,a.sczl_bh7,a.sczl_bh8,a.sczl_bh9,a.sczl_bh10,
|
|
|
- a.sczl_rate1,a.sczl_rate2,a.sczl_rate3,a.sczl_rate4,a.sczl_rate5,a.sczl_rate6,a.sczl_rate7,a.sczl_rate8,a.sczl_rate9,a.sczl_rate10,
|
|
|
- a.sczl_废品率系数,a.UniqId,
|
|
|
- b.千件工价,b.日定额,b.补产标准,c.工价系数 as 工序难度系数,c.版距,c.印刷方式
|
|
|
- ,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::name('设备_产量计酬')->alias('a')->field($fields);
|
|
|
- // 连接 dic_lzde 表
|
|
|
- $query->join('dic_lzde b', 'a.sczl_dedh = b.sys_bh', 'LEFT');
|
|
|
- // 连接 工单_工艺资料 表
|
|
|
- $query->join('工单_工艺资料 c', 'a.sczl_gdbh = c.Gy0_gdbh AND a.sczl_yjno = c.Gy0_yjno AND a.sczl_gxh = c.Gy0_gxh', 'LEFT');
|
|
|
- // 循环连接 人事_基本资料 表(仅当 sczl_bh 不为空时才连接)
|
|
|
- for ($i = 1; $i <= 10; $i++) {
|
|
|
- $field = 'a.sczl_bh' . $i;
|
|
|
- $alias = 'd' . $i;
|
|
|
- $query->join("人事_基本资料 $alias", "$field = {$alias}.员工编号 AND {$field} IS NOT NULL", 'LEFT');
|
|
|
- }
|
|
|
- $query->where($where)->where('a.sczl_jtbh','in',$jtbhs);
|
|
|
- $list = $query->order('a.sczl_rq')->group('UniqId')->select();
|
|
|
- $UniqId = \db('绩效工资汇总')->field('UniqID')->order('UniqID desc')->find();
|
|
|
- if (empty($UniqId)){
|
|
|
- $UniqId = 1;
|
|
|
- }else{
|
|
|
- $UniqId = $UniqId['UniqID'] + 1;
|
|
|
- }
|
|
|
- $data = [];
|
|
|
- /**
|
|
|
- * 设备_产量计酬数据
|
|
|
- */
|
|
|
- foreach ($list as $value){
|
|
|
- $num = 1;
|
|
|
- $value['班组车头产量'] = $value['班组车头产量'] - $value['sczl_zcfp'];
|
|
|
- //计件产量
|
|
|
- if (substr($value['sczl_jtbh'],0,2) == 'JP'){//检品机
|
|
|
- if ($value['sczl_废品率系数'] == 0){
|
|
|
- $gx_rate = 1;
|
|
|
- }else{
|
|
|
- $gx_rate = $value['sczl_废品率系数'];
|
|
|
- }
|
|
|
- $value['班组车头产量'] = $value['班组车头产量'] * $value['sczl_Pgcl'];
|
|
|
- $byThePieceYield = round($value['班组车头产量'] * $value['sczl_废品率系数']);//班组计件核算产量
|
|
|
- }elseif (substr($value['sczl_jtbh'],0,2) == 'WY' || substr($value['sczl_jtbh'],0,2) == 'DW' || substr($value['sczl_jtbh'],0,3) == 'YWY' || substr($value['sczl_jtbh'],0,3) == 'YDW'){//凹印机
|
|
|
- if ($value['sczl_工价系数'] == '0.000' || floatval($value['sczl_工价系数']) <= 0){
|
|
|
- //工序难度系数
|
|
|
- $gx_rate = $value['工序难度系数'];
|
|
|
- if (floatval($value['工序难度系数']) <= 0 || empty($value['工序难度系数'])){
|
|
|
- $gx_rate = '1.0000';
|
|
|
- }
|
|
|
- }else{
|
|
|
- if (floatval($value['工序难度系数']) > 0 ){
|
|
|
- $gx_rate = number_format($value['sczl_工价系数'] * $value['工序难度系数'],3);
|
|
|
- }else{
|
|
|
- $gx_rate = $value['sczl_工价系数'];
|
|
|
- }
|
|
|
- }
|
|
|
- if (str_contains($value['印刷方式'],'张') && $value['版距'] > 0){
|
|
|
- $value['版距'] = $value['版距'] / 1000;
|
|
|
- $value['班组车头产量'] = $value['班组车头产量'] * $value['版距'];
|
|
|
- }
|
|
|
-// $byThePieceYield = round($value['班组车头产量'] * $gx_rate);
|
|
|
- $byThePieceYield =str_replace(',','',round($value['班组车头产量'] * floatval($gx_rate))) ;
|
|
|
- }else{
|
|
|
- if ($value['sczl_jtbh'] === 'YSY02#' || $value['sczl_jtbh'] === 'YSY08#' || $value['sczl_jtbh'] === 'YSY10#' || $value['sczl_jtbh'] === 'SY03#'){
|
|
|
- $num = 1.1;
|
|
|
- }
|
|
|
- if ($value['sczl_工价系数'] == '0.000' || floatval($value['sczl_工价系数']) <= 0){
|
|
|
- //工序难度系数
|
|
|
- $gx_rate = $value['工序难度系数'];
|
|
|
- if (floatval($value['工序难度系数']) <= 0 || empty($value['工序难度系数'])){
|
|
|
- $gx_rate = '1.0000';
|
|
|
- }
|
|
|
- }else{
|
|
|
- if (floatval($value['工序难度系数']) > 0 ){
|
|
|
- $gx_rate = number_format($value['sczl_工价系数'] * $value['工序难度系数'],3);
|
|
|
- }else{
|
|
|
- $gx_rate = $value['sczl_工价系数'];
|
|
|
- }
|
|
|
- }
|
|
|
- $byThePieceYield =round($value['班组车头产量'] * floatval($gx_rate) * $num);
|
|
|
|
|
|
- }
|
|
|
-// //计件产量
|
|
|
-// if (substr($value['sczl_jtbh'],0,2) == 'JP'){
|
|
|
-// $value['工序难度系数'] = $value['sczl_废品率系数'];
|
|
|
-// $value['班组车头产量'] = $value['班组车头产量'] * $value['sczl_Pgcl'];
|
|
|
-// $byThePieceYield = round($value['班组车头产量'] * $value['sczl_废品率系数']);
|
|
|
-// }else{
|
|
|
-// if ($value['工序难度系数'] <= 0 || empty($value['工序难度系数'])){
|
|
|
-// $value['工序难度系数'] = '1.0000';
|
|
|
-// $byThePieceYield = $value['班组车头产量'];
|
|
|
-// }else{
|
|
|
-// $byThePieceYield = round($value['班组车头产量'] * $value['工序难度系数']);
|
|
|
-// }
|
|
|
-// }
|
|
|
- //补产产量/班组换算产量
|
|
|
- $afterProductionYield = ($value['装版工时'] + $value['保养工时'] + $value['打样工时']) * $value['补产标准'];
|
|
|
- //核算产量
|
|
|
- $accountingYield = $byThePieceYield + $afterProductionYield;
|
|
|
- //工时占比
|
|
|
- if ($value['日定额'] > 0){
|
|
|
- $manHourRate = number_format($accountingYield / $value['日定额'],4);
|
|
|
- }else{
|
|
|
- $manHourRate = '0.0000';
|
|
|
- }
|
|
|
- for ($i=1; $i<11; $i++){
|
|
|
- $bhKey = 'sczl_bh'.$i;
|
|
|
- $xmKey = 'name'.$i;
|
|
|
- $rateKey = 'sczl_rate'.$i;
|
|
|
- if (!empty($value[$bhKey]) && $value[$bhKey] != '0000'){
|
|
|
- $item = [];
|
|
|
- $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'] = $value['sczl_type'];
|
|
|
- $item['sczl_rq'] = $value['sczl_rq'];
|
|
|
- $item['sczl_jtbh'] = $value['sczl_jtbh'];
|
|
|
- $item['班组车头产量'] = $value['班组车头产量'];
|
|
|
- $item['工价系数'] = '0.0000';
|
|
|
- $item['工序难度系数'] = $gx_rate * $num;
|
|
|
- $item['装版工时'] = $value['装版工时'];
|
|
|
- $item['保养工时'] = $value['保养工时'];
|
|
|
- $item['打样工时'] = $value['打样工时'];
|
|
|
- $item['异常停机工时'] = $value['异常停机工时'];
|
|
|
- $item['车头产量占用机时'] = $value['车头产量占用机时'];
|
|
|
- $item['日定额'] = (int)$value['日定额'];
|
|
|
- $item['千件工价'] = $value['千件工价'];
|
|
|
- $item['补产标准'] = $value['补产标准'];
|
|
|
- $item['班组换算产量'] = $afterProductionYield;
|
|
|
- $item['计时补差额工资'] = '0.00';
|
|
|
- $item['bh'] = $value[$bhKey];
|
|
|
- $item['xm'] = $value[$xmKey];
|
|
|
- $item['Rate'] = $value[$rateKey];
|
|
|
- $item['sczl_ms'] = $value['sczl_ms'];
|
|
|
- $item['核算产量'] = $accountingYield;
|
|
|
- $item['工时占比'] = $manHourRate;
|
|
|
- array_push($data,$item);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-// halt($data);
|
|
|
- /**
|
|
|
- * 拆片工序数据
|
|
|
- */
|
|
|
- $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,
|
|
|
- a.sczl_rate1, b.千件工价, b.日定额, b.补产标准,a.sczl_工价系数 as 工序难度系数,a.拆片联拼系数,a.拆片条小盒系数, d.员工姓名')
|
|
|
- ->join('dic_lzde b', 'a.sczl_dedh = b.sys_bh','left')
|
|
|
- ->join('工单_工艺资料 c', 'a.sczl_gdbh = c.Gy0_gdbh AND a.sczl_yjno = c.Gy0_yjno AND a.sczl_gxh = c.Gy0_gxh','left')
|
|
|
- ->join('人事_基本资料 d', 'a.sczl_bh1 = d.员工编号','left')
|
|
|
- ->where($where)
|
|
|
- ->select();
|
|
|
- foreach ($query as $value){
|
|
|
- $num = 1;
|
|
|
- $value['班组车头产量'] = ($value['班组车头产量'] - $value['sczl_zcfp']) * $value['拆片联拼系数'] * $value['拆片条小盒系数'];
|
|
|
- //计件产量
|
|
|
- if ($value['sczl_jtbh'] === 'YSY02#' || $value['sczl_jtbh'] === 'YSY08#' || $value['sczl_jtbh'] === 'YSY10#' || $value['sczl_jtbh'] === 'SY03#'){
|
|
|
- $num = 1.1;
|
|
|
- }
|
|
|
- if ($value['工序难度系数'] <= 0 || empty($value['工序难度系数'])){
|
|
|
- $value['工序难度系数'] = '1.0000';
|
|
|
- $byThePieceYield = $value['班组车头产量'];
|
|
|
- }else{
|
|
|
- $byThePieceYield = round($value['班组车头产量'] * $value['工序难度系数'] * $num);
|
|
|
- }
|
|
|
- //补产产量/班组换算产量
|
|
|
- $afterProductionYield = ($value['装版工时'] + $value['保养工时'] + $value['打样工时']) * $value['补产标准'];
|
|
|
- //核算产量
|
|
|
- $accountingYield = $byThePieceYield + $afterProductionYield;
|
|
|
- //工时占比
|
|
|
- if ($value['日定额'] > 0){
|
|
|
- $manHourRate = number_format($accountingYield / $value['日定额'],4);
|
|
|
- }else{
|
|
|
- $manHourRate = '0.0000';
|
|
|
- }
|
|
|
- $item = [];
|
|
|
- $item['sczl_gdbh'] = $value['sczl_gdbh'];
|
|
|
- $item['sczl_yjno'] = $value['sczl_yjno'];
|
|
|
- $item['sczl_gxh'] = $value['sczl_gxh'];
|
|
|
-// $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['班组车头产量'];
|
|
|
- $item['工价系数'] = '0.0000';
|
|
|
- $item['工序难度系数'] = $value['工序难度系数'] * $num;
|
|
|
- $item['装版工时'] = $value['装版工时'];
|
|
|
- $item['保养工时'] = $value['保养工时'];
|
|
|
- $item['打样工时'] = $value['打样工时'];
|
|
|
- $item['异常停机工时'] = $value['异常停机工时'];
|
|
|
- $item['车头产量占用机时'] = $value['车头产量占用机时'];
|
|
|
- $item['日定额'] = (int)$value['日定额'];
|
|
|
- $item['千件工价'] = $value['千件工价'];
|
|
|
- $item['补产标准'] = $value['补产标准'];
|
|
|
- $item['班组换算产量'] = $afterProductionYield;
|
|
|
- $item['计时补差额工资'] = '0.00';
|
|
|
- $item['bh'] = $value['sczl_bh1'];
|
|
|
- $item['xm'] = $value['员工姓名'];
|
|
|
- $item['Rate'] = $value['sczl_rate1'];
|
|
|
- $item['sczl_ms'] = $value['sczl_ms'];
|
|
|
- $item['核算产量'] = $accountingYield;
|
|
|
- $item['工时占比'] = floatval($manHourRate);
|
|
|
- array_push($data,$item);
|
|
|
- }
|
|
|
-// halt($data);
|
|
|
- /**
|
|
|
- * 手工检验工序数据
|
|
|
- */
|
|
|
- $shoujianfields = "a.sczl_gdbh,a.sczl_yjgx,sczl_gxmc AS sczl_type,a.sczl_rq,a.sczl_cl AS 班组车头产量,
|
|
|
- sczl_废品率系数 AS 工序难度系数,a.sczl_bh0,a.sczl_bh1,a.sczl_bh2,a.sczl_bh3,a.sczl_bh4,a.sczl_bh5,a.sczl_bh6,
|
|
|
- a.sczl_bh7,a.sczl_bh8,a.sczl_bh9,a.sczl_bh10,a.sczl_bh11,b.千件工价,b.日定额,b.补产标准,d0.员工姓名 AS name0,
|
|
|
- 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,
|
|
|
- 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::name('db_手工检验')->alias('a')->field($shoujianfields);
|
|
|
- //链接dic_lzde表
|
|
|
- $query->join('dic_lzde b','a.sczl_dedh = b.sys_bh','LEFT');
|
|
|
- //链接人事基本资料表
|
|
|
- for ($i=0;$i<=12;$i++){
|
|
|
- $field = 'a.sczl_bh'.$i;
|
|
|
- $alias = 'd'.$i;
|
|
|
- $query->join("人事_基本资料 $alias", "$field = {$alias}.员工编号 AND {$field} IS NOT NULL", 'LEFT');
|
|
|
- }
|
|
|
- $query->where($where);
|
|
|
- $list = $query->select();
|
|
|
- foreach ($list as $key=>$value){
|
|
|
- for ($i=0;$i<=12;$i++){
|
|
|
- if (!empty($value['sczl_bh'.$i])){
|
|
|
- $value['sczl_yjno'] = (int)substr($value['sczl_yjgx'],0,2);
|
|
|
- $value['sczl_gxh'] = (int)substr($value['sczl_yjgx'],3,2);
|
|
|
- //车头产量
|
|
|
- $value['班组车头产量'] = $value['sczl_cl'.$i]*$value['sczl_fp'.$i];
|
|
|
- //计件产量
|
|
|
- if ($value['工序难度系数'] <= 0 || empty($value['工序难度系数'])){
|
|
|
- $value['工序难度系数'] = '1.0000';
|
|
|
- $value['计件产量'] = $value['班组车头产量'];
|
|
|
- }else{
|
|
|
- $value['计件产量'] = round($value['班组车头产量'] * $value['工序难度系数']);
|
|
|
- }
|
|
|
- //核算产量
|
|
|
- $value['核算产量'] = $value['计件产量'];
|
|
|
- //工时占比
|
|
|
- if ($value['日定额'] > 0){
|
|
|
- $value['工时占比'] = round($value['计件产量']/$value['日定额'],4);
|
|
|
- }else{
|
|
|
- $value['工时占比'] = '0.0000';
|
|
|
- }
|
|
|
- $item = [];
|
|
|
- $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'] = $value['sczl_type'];
|
|
|
- $item['sczl_rq'] = $value['sczl_rq'];
|
|
|
- $item['sczl_jtbh'] = '';
|
|
|
- $item['班组车头产量'] = $value['班组车头产量'];
|
|
|
- $item['工价系数'] = '0.0000';
|
|
|
- $item['工序难度系数'] = $value['工序难度系数'];
|
|
|
- $item['装版工时'] = '0.00';
|
|
|
- $item['保养工时'] = '0.00';
|
|
|
- $item['打样工时'] = '0.00';
|
|
|
- $item['异常停机工时'] = '0.00';
|
|
|
- $item['车头产量占用机时'] = '0.00';
|
|
|
- $item['日定额'] = (int)$value['日定额'];
|
|
|
- $item['千件工价'] = $value['千件工价'];
|
|
|
- $item['补产标准'] = $value['补产标准'];
|
|
|
- $item['班组换算产量'] = '0';
|
|
|
- $item['计时补差额工资'] = '0.00';
|
|
|
- $item['bh'] = $value['sczl_bh'.$i];
|
|
|
- $item['xm'] = $value['name'.$i];
|
|
|
- $item['Rate'] = '1.0000';
|
|
|
- $item['sczl_ms'] = '0.00';
|
|
|
- $item['核算产量'] = $value['核算产量'];
|
|
|
- $item['工时占比'] = floatval($value['工时占比']);
|
|
|
- array_push($data,$item);
|
|
|
- }
|
|
|
- }
|
|
|
+ // 检查是否有正在执行的任务
|
|
|
+ $runningTask = Db::name('queue_tasks')
|
|
|
+ ->where('task_type', 'salary_calculation')
|
|
|
+ ->where('task_data', 'like', '%"date":"' . $params['date'] . '"%')
|
|
|
+ ->where('status', 'in', ['pending', 'processing'])
|
|
|
+ ->find();
|
|
|
+
|
|
|
+ if ($runningTask) {
|
|
|
+ $this->success('该月份的工资计算任务已在执行中,请勿重复提交');
|
|
|
}
|
|
|
-// halt($data);
|
|
|
- /**
|
|
|
- * 包装计件工序数据
|
|
|
- */
|
|
|
- $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,
|
|
|
- a.sczl_cl1, a.sczl_cl2, a.sczl_cl3, a.sczl_cl4, a.sczl_cl5, a.sczl_cl6,
|
|
|
- a.sczl_返工产量1, a.sczl_返工产量2, a.sczl_返工产量3, a.sczl_返工产量4, a.sczl_返工产量5, a.sczl_返工产量6,
|
|
|
- a.sczl_Jtbh1,a.sczl_Jtbh2,a.sczl_Jtbh3,a.sczl_Jtbh4,a.sczl_Jtbh5,a.sczl_Jtbh6,
|
|
|
- a.sczl_dedh1,a.sczl_dedh2,a.sczl_dedh3,a.sczl_dedh4,a.sczl_dedh5,a.sczl_dedh6,
|
|
|
- a.sczl_PgCl1,a.sczl_PgCl2,a.sczl_PgCl3,a.sczl_PgCl4,a.sczl_PgCl5,a.sczl_PgCl6,
|
|
|
- a.sczl_type1,a.sczl_type2,sczl_type3,a.sczl_type4,a.sczl_type5,sczl_type6,
|
|
|
- a.sczl_计产系数1,a.sczl_计产系数2,a.sczl_计产系数3,a.sczl_计产系数4,a.sczl_计产系数5,a.sczl_计产系数6,
|
|
|
- c1.工价系数 as 工序难度系数1,c2.工价系数 as 工序难度系数2,c3.工价系数 as 工序难度系数3,c4.工价系数 as 工序难度系数4,c5.工价系数 as 工序难度系数5,c6.工价系数 as 工序难度系数6,
|
|
|
- b1.千件工价 as 千件工价1, b2.千件工价 as 千件工价2, b3.千件工价 as 千件工价3, b4.千件工价 as 千件工价4, b5.千件工价 as 千件工价5, b6.千件工价 as 千件工价6,
|
|
|
- b1.日定额 as 日定额1, b2.日定额 as 日定额2, b3.日定额 as 日定额3, b4.日定额 as 日定额4, b5.日定额 as 日定额5, b6.日定额 as 日定额6,
|
|
|
- b1.补产标准 as 补产标准1, b2.补产标准 as 补产标准2, b3.补产标准 as 补产标准3, b4.补产标准 as 补产标准4, b5.补产标准 as 补产标准5, b6.补产标准 as 补产标准6,
|
|
|
- a.sczl_rq,a.sczl_bh,rtrim(d.员工姓名) as xm,
|
|
|
- e1.成品名称 as cpmc1,e2.成品名称 as cpmc2,e3.成品名称 as cpmc3,e4.成品名称 as cpmc4,e5.成品名称 as cpmc5,e6.成品名称 as cpmc6')
|
|
|
- ->join('工单_工艺资料 c1', 'a.sczl_gdbh1 = c1.Gy0_gdbh AND a.sczl_yjGx1 = CONCAT("0",c1.Gy0_yjno, "-", c1.Gy0_gxh) AND a.sczl_gdbh1 IS NOT NULL', 'LEFT')
|
|
|
- ->join('工单_工艺资料 c2', 'a.sczl_gdbh2 = c2.Gy0_gdbh AND a.sczl_yjGx2 = CONCAT("0",c2.Gy0_yjno, "-", c2.Gy0_gxh) AND a.sczl_gdbh2 IS NOT NULL', 'LEFT')
|
|
|
- ->join('工单_工艺资料 c3', 'a.sczl_gdbh3 = c3.Gy0_gdbh AND a.sczl_yjGx3 = CONCAT("0",c3.Gy0_yjno, "-", c3.Gy0_gxh) AND a.sczl_gdbh3 IS NOT NULL', 'LEFT')
|
|
|
- ->join('工单_工艺资料 c4', 'a.sczl_gdbh4 = c4.Gy0_gdbh AND a.sczl_yjGx4 = CONCAT("0",c4.Gy0_yjno, "-", c4.Gy0_gxh) AND a.sczl_gdbh4 IS NOT NULL', 'LEFT')
|
|
|
- ->join('工单_工艺资料 c5', 'a.sczl_gdbh5 = c5.Gy0_gdbh AND a.sczl_yjGx5 = CONCAT("0",c5.Gy0_yjno, "-", c5.Gy0_gxh) AND a.sczl_gdbh5 IS NOT NULL', 'LEFT')
|
|
|
- ->join('工单_工艺资料 c6', 'a.sczl_gdbh6 = c6.Gy0_gdbh AND a.sczl_yjGx6 = CONCAT("0",c6.Gy0_yjno, "-", c6.Gy0_gxh) AND a.sczl_gdbh6 IS NOT NULL', 'LEFT')
|
|
|
- ->join('dic_lzde b1', 'a.sczl_dedh1 = b1.sys_bh', 'LEFT')
|
|
|
- ->join('dic_lzde b2', 'a.sczl_dedh2 = b2.sys_bh', 'LEFT')
|
|
|
- ->join('dic_lzde b3', 'a.sczl_dedh3 = b3.sys_bh', 'LEFT')
|
|
|
- ->join('dic_lzde b4', 'a.sczl_dedh4 = b4.sys_bh', 'LEFT')
|
|
|
- ->join('dic_lzde b5', 'a.sczl_dedh5 = b5.sys_bh', 'LEFT')
|
|
|
- ->join('dic_lzde b6', 'a.sczl_dedh6 = b6.sys_bh', 'LEFT')
|
|
|
- ->join('人事_基本资料 d', 'a.sczl_bh = d.员工编号', 'LEFT')
|
|
|
- ->join('工单_基本资料 e1','a.sczl_gdbh1 = e1.Gd_gdbh AND a.sczl_gdbh1 IS NOT NULL','LEFT')
|
|
|
- ->join('工单_基本资料 e2','a.sczl_gdbh2 = e2.Gd_gdbh AND a.sczl_gdbh2 IS NOT NULL','LEFT')
|
|
|
- ->join('工单_基本资料 e3','a.sczl_gdbh3 = e3.Gd_gdbh AND a.sczl_gdbh3 IS NOT NULL','LEFT')
|
|
|
- ->join('工单_基本资料 e4','a.sczl_gdbh4 = e4.Gd_gdbh AND a.sczl_gdbh4 IS NOT NULL','LEFT')
|
|
|
- ->join('工单_基本资料 e5','a.sczl_gdbh5 = e5.Gd_gdbh AND a.sczl_gdbh5 IS NOT NULL','LEFT')
|
|
|
- ->join('工单_基本资料 e6','a.sczl_gdbh6 = e6.Gd_gdbh AND a.sczl_gdbh6 IS NOT NULL','LEFT')
|
|
|
- ->where($where)
|
|
|
- ->group('a.UniqId')
|
|
|
- ->select();
|
|
|
|
|
|
- foreach ($result as $value){
|
|
|
- for ($i=1;$i<7;$i++){
|
|
|
- $item = [];
|
|
|
- $gdbhKey = 'sczl_gdbh'.$i;
|
|
|
- $yjgxKey = 'sczl_yjGx'.$i;
|
|
|
- $jtbhKey = 'sczl_Jtbh'.$i;
|
|
|
- $gxmcKey = 'gxmc'.$i;
|
|
|
- $clKey = 'sczl_cl'.$i;
|
|
|
- $reworkKey = 'sczl_返工产量'.$i;
|
|
|
- $gxKey = '工序难度系数'.$i;
|
|
|
- $dedh = 'sczl_dedh'.$i;
|
|
|
- $thousandKey = '千件工价'.$i;
|
|
|
- $dailyKey = '日定额'.$i;
|
|
|
- $afterKey = '补产标准'.$i;
|
|
|
- $pgclKey = 'sczl_PgCl'.$i;
|
|
|
- $jcxsKey = 'sczl_计产系数'.$i;
|
|
|
- $cpmcKey = 'cpmc'.$i;
|
|
|
- $typekey = 'sczl_type'.$i;
|
|
|
- if (!empty($value[$gdbhKey])){
|
|
|
- $item['sczl_gdbh'] = $value[$gdbhKey];
|
|
|
- $item['sczl_yjno'] = ltrim(substr($value[$yjgxKey],0,2), '0');
|
|
|
- $item['sczl_gxh'] = abs((int)substr($value[$yjgxKey],-2));
|
|
|
-// $item['sczl_type'] = substr($value[$gxmcKey],0,30);
|
|
|
- $item['sczl_type'] = $value[$gxmcKey];
|
|
|
- $item['sczl_rq'] = $value['sczl_rq'];
|
|
|
- $item['sczl_jtbh'] = $value[$jtbhKey];
|
|
|
- $item['工价系数'] = '0.0000';
|
|
|
- $item['工序难度系数'] = $value[$jcxsKey];
|
|
|
- if ($value[$jcxsKey] <= 0){
|
|
|
- $item['工序难度系数'] = '1.0000';
|
|
|
- }
|
|
|
- $item['装版工时'] = '0.00';
|
|
|
- $item['保养工时'] = '0.00';
|
|
|
- $item['打样工时'] = '0.00';
|
|
|
- $item['异常停机工时'] = '0.00';
|
|
|
- $item['车头产量占用机时'] = '0.00';
|
|
|
- $item['日定额'] = $value[$dailyKey];
|
|
|
- $item['千件工价'] = $value[$thousandKey];
|
|
|
- $item['补产标准'] = $value[$afterKey];
|
|
|
- $item['班组换算产量'] = '0.00';
|
|
|
- $item['计时补差额工资'] = '0.00';
|
|
|
- $item['bh'] = $value['sczl_bh'];
|
|
|
- $item['xm'] = $value['xm'];
|
|
|
- $item['Rate'] = 1.000;
|
|
|
- $item['sczl_ms'] = '0.00';
|
|
|
- $cl = $value[$clKey];
|
|
|
- if ($cl > 0){
|
|
|
- if (str_contains($item['sczl_type'],'包装')){
|
|
|
- $item['班组车头产量'] = $cl * $value[$pgclKey] / (int)$value[$typekey];
|
|
|
- }else{
|
|
|
- $item['班组车头产量'] = $cl;
|
|
|
- }
|
|
|
- $item['核算产量'] = $item['班组车头产量'] * $item['工序难度系数'];
|
|
|
- //工时占比
|
|
|
- if ($item['日定额'] > 0){
|
|
|
- $manHourRate = number_format($item['核算产量'] / $item['日定额'],4);
|
|
|
- }else{
|
|
|
- $manHourRate = '0.0000';
|
|
|
- }
|
|
|
- $item['工时占比'] = floatval($manHourRate);
|
|
|
- array_push($data,$item);
|
|
|
- }
|
|
|
- //返工
|
|
|
- if (!empty($value[$reworkKey]) && $value[$reworkKey] > 0){
|
|
|
- $item['sczl_type'] = '返工('.$item['sczl_type'].')';
|
|
|
- $cl = $value[$reworkKey];
|
|
|
- if (str_contains($item['sczl_type'],'包装')){
|
|
|
- $item['班组车头产量'] = $cl * $value[$pgclKey] / (int)$value[$typekey];
|
|
|
- }else{
|
|
|
- $item['班组车头产量'] = $cl;
|
|
|
- }
|
|
|
- $item['核算产量'] = $item['班组车头产量'] * $item['工序难度系数'];
|
|
|
- if ($item['日定额'] > 0){
|
|
|
- $manHourRate = number_format($item['核算产量'] / $item['日定额'],4);
|
|
|
- }else{
|
|
|
- $manHourRate = '0.0000';
|
|
|
- }
|
|
|
- $item['工时占比'] = floatval($manHourRate);
|
|
|
- array_push($data,$item);
|
|
|
- }
|
|
|
+ // 添加用户信息
|
|
|
+ $params['user_id'] = session('user_id') ?? 0;
|
|
|
+ $params['user_name'] = session('user_name') ?? '系统';
|
|
|
+ $params['request_time'] = date('Y-m-d H:i:s');
|
|
|
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-//halt($data);
|
|
|
- //用于存储bh对应的工时占比总和
|
|
|
- $bhTotals = [];
|
|
|
- // 遍历原始数据
|
|
|
- foreach ($data as $row) {
|
|
|
- $bh = substr($row['sczl_rq'],0,10) . '-' .$row['bh'];
|
|
|
- // 初始化bh对应的工时占比总和为0
|
|
|
- if (!isset($bhTotals[$bh])) {
|
|
|
- $bhTotals[$bh] = 0;
|
|
|
- }
|
|
|
- // 将工时占比相加
|
|
|
- $bhTotals[$bh] += floatval($row['工时占比']);
|
|
|
- }
|
|
|
- //用usort函数对$data数组按照sczl_rq的日期部分进行升序排序
|
|
|
- usort($data, function ($a, $b) {
|
|
|
- return strtotime(substr($a['sczl_rq'], 0, 10)) - strtotime(substr($b['sczl_rq'], 0, 10));
|
|
|
- });
|
|
|
- $days = [];
|
|
|
- foreach ($data as $key=>$item){
|
|
|
- //统计每月出勤天数
|
|
|
- $day_bh = $item['bh'];
|
|
|
- if (!isset($days[$day_bh])){
|
|
|
- $days[$day_bh] = [];
|
|
|
- array_push($days[$day_bh],$item['sczl_rq']);
|
|
|
- }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){
|
|
|
- $standardQuota = floatval($item['工时占比'] / $bhTotals[$bh] * $item['日定额']);
|
|
|
- $data[$key]['达标定额'] = number_format($standardQuota,2,'.', '');
|
|
|
- }else{
|
|
|
- $data[$key]['达标定额'] = number_format($item['班组车头产量'],2,'.', '');
|
|
|
- }
|
|
|
- $date = substr($item['sczl_rq'],0,10);
|
|
|
- if (in_array($date,$vacationOneArr) || in_array($date,$vacationTwoArr)){
|
|
|
- //计件工资
|
|
|
-// $pieceWorkWage = $data[$key]['达标定额']/1000*$item['千件工价']*$item['Rate']*3;
|
|
|
- $pieceWorkWage = 0;
|
|
|
- //加班工资
|
|
|
- $overTimePay = $item['核算产量'] / 1000 *$item['千件工价'] * $item['Rate'] *3;
|
|
|
- //法定节假日,去除这天的考勤天数
|
|
|
- $days[$day_bh] = array_filter($days[$day_bh], function($value) use ($item) {
|
|
|
- return $value !== $item['sczl_rq'];
|
|
|
- });
|
|
|
- }else{
|
|
|
-// //如果出勤天数小于法定天数,按正常计算
|
|
|
-// if (count($days[$day_bh]) <= $params['days'] && strpos($item['sczl_type'],'成品防护') === false){
|
|
|
-// $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;
|
|
|
+ // 先创建任务记录
|
|
|
+ $taskId = Db::name('queue_tasks')->insertGetId([
|
|
|
+ 'task_type' => 'salary_calculation',
|
|
|
+ 'task_data' => json_encode($params, JSON_UNESCAPED_UNICODE),
|
|
|
+ 'status' => 'pending',
|
|
|
+ 'queue_name' => 'salary_calculation',
|
|
|
+ 'create_time' => date('Y-m-d H:i:s')
|
|
|
+ ]);
|
|
|
|
|
|
- // 基础计件工资计算公式
|
|
|
- $baseWage = ($data[$key]['达标定额'] / 1000) * $item['千件工价'] * $item['Rate'];
|
|
|
+ // 添加到任务数据中
|
|
|
+ $params['task_id'] = $taskId;
|
|
|
|
|
|
- // 当有成品防护类型时(直接通过)
|
|
|
- if (strpos($item['sczl_type'], '成品防护') !== false) {
|
|
|
- $pieceWorkWage = $baseWage;
|
|
|
- }
|
|
|
- // 没有特殊类型时
|
|
|
- else {
|
|
|
- // 转换为数值类型避免计算错误
|
|
|
- $standardQuota = (float)$data[$key]['达标定额'];
|
|
|
- // 判断出勤天数是否超限
|
|
|
- if (count($days[$day_bh]) > $params['days']) {
|
|
|
- // 超限时重置定额
|
|
|
- $data[$key]['达标定额'] = '0.00';
|
|
|
- $pieceWorkWage = '0.00';
|
|
|
- $standardQuota = 0; // 同步数值类型
|
|
|
- } else {
|
|
|
- $pieceWorkWage = $baseWage;
|
|
|
- }
|
|
|
- }
|
|
|
- // 统一计算加班工资(所有情况都会计算)
|
|
|
-// $actualOutput = (float)$item['核算产量'];
|
|
|
-// $overtimeOutput = max($actualOutput - (float)$data[$key]['达标定额'], 0);
|
|
|
-// $overTimePay = ($overtimeOutput / 1000) * $item['千件工价'] * $item['Rate'] * 1.5;
|
|
|
- $overTimePay = ($item['核算产量'] - $data[$key]['达标定额']) / 1000 *$item['千件工价'] * $item['Rate'] *1.5;
|
|
|
- }
|
|
|
- $data[$key]['个人计件工资'] = number_format($pieceWorkWage,2,'.', '');
|
|
|
- $data[$key]['个人加班工资'] = number_format($overTimePay,2,'.', '');
|
|
|
- $data[$key]['UniqID'] = $UniqId++;
|
|
|
- $data[$key]['sys_ny'] = $params['date'];
|
|
|
- $data[$key]['sys_rq'] = date('Y-m-d H:i:s');
|
|
|
- $data[$key]['sys_id'] = $params['sys_id'];
|
|
|
- $data[$key]['法定天数'] = $params['days'];
|
|
|
- $data[$key]['sczl_type'] = trim($item['sczl_type']);
|
|
|
- }
|
|
|
+ // 提交到工资计算队列
|
|
|
+ $jobHandlerClassName = 'app\job\SalaryCalculationJob';
|
|
|
+ $queueName = 'salary_calculation';
|
|
|
|
|
|
- // 检查任务是否已经存在于队列中,如果不存在则推送任务到队列
|
|
|
- if (!$redis->has($taskIdentifier)) {
|
|
|
+ $jobId = Queue::push($jobHandlerClassName, $params, $queueName);
|
|
|
|
|
|
- // 在提交队列任务前,先记录到任务表
|
|
|
- $taskData = [
|
|
|
- 'date' => $params['date'],
|
|
|
- 'start_date' => $startDate,
|
|
|
- 'end_date' => $endDate,
|
|
|
- 'sys_id' => $params['sys_id'] ?? '',
|
|
|
- 'user_id' => session('user_id') ?? 0,
|
|
|
- 'user_name' => session('user_name') ?? '系统',
|
|
|
- 'request_time' => date('Y-m-d H:i:s')
|
|
|
- ];
|
|
|
+ if ($jobId) {
|
|
|
+ // 更新任务记录
|
|
|
+ Db::name('queue_tasks')
|
|
|
+ ->where('id', $taskId)
|
|
|
+ ->update([
|
|
|
+ 'job_id' => $jobId,
|
|
|
+ 'update_time' => date('Y-m-d H:i:s')
|
|
|
+ ]);
|
|
|
|
|
|
- $taskId = Db::name('queue_tasks')->insertGetId([
|
|
|
- 'task_type' => 'salary_calculation',
|
|
|
- 'task_data' => json_encode($taskData, JSON_UNESCAPED_UNICODE),
|
|
|
- 'status' => 'pending',
|
|
|
- 'queue_name' => 'salary_calculation',
|
|
|
- 'create_time' => date('Y-m-d H:i:s')
|
|
|
+ $this->success('工资计算任务已提交到队列,请稍后查看结果', null, [
|
|
|
+ 'task_id' => $taskId,
|
|
|
+ 'job_id' => $jobId,
|
|
|
+ 'month' => $params['date'],
|
|
|
+ 'queue_name' => $queueName
|
|
|
]);
|
|
|
+ } else {
|
|
|
+ // 更新任务状态为失败
|
|
|
+ Db::name('queue_tasks')
|
|
|
+ ->where('id', $taskId)
|
|
|
+ ->update([
|
|
|
+ 'status' => 'failed',
|
|
|
+ 'error' => '任务提交到队列失败',
|
|
|
+ 'update_time' => date('Y-m-d H:i:s')
|
|
|
+ ]);
|
|
|
|
|
|
- // 将任务ID添加到任务数据中
|
|
|
- $taskData['task_id'] = $taskId;
|
|
|
+ $this->error('工资计算任务提交失败');
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- // 提交任务到工资计算队列
|
|
|
- $job = new InsertDataJob($data);
|
|
|
+ /**
|
|
|
+ * 直接执行工资计算(同步版本,用于测试)
|
|
|
+ */
|
|
|
+ public function calculateDirect()
|
|
|
+ {
|
|
|
+ if (Request::instance()->isPost() == false) {
|
|
|
+ $this->error('非法请求');
|
|
|
+ }
|
|
|
|
|
|
- // 修改:使用工资计算队列名称
|
|
|
- $queueResult = Queue::push($job, $taskData, 'salary_calculation');
|
|
|
+ $params = Request::instance()->param();
|
|
|
|
|
|
- if ($queueResult !== false) {
|
|
|
- // 更新任务记录
|
|
|
- Db::name('queue_tasks')
|
|
|
- ->where('id', $taskId)
|
|
|
- ->update([
|
|
|
- 'job_id' => $queueResult,
|
|
|
- 'update_time' => date('Y-m-d H:i:s')
|
|
|
- ]);
|
|
|
+ try {
|
|
|
+ $service = new \app\service\SalaryCalculationService();
|
|
|
+ $result = $service->calculateSalary($params);
|
|
|
|
|
|
- $redis->set($taskIdentifier, true);
|
|
|
- $this->success('数据正在处理中,请等待...');
|
|
|
+ if ($result['success']) {
|
|
|
+ $this->success($result['message'], null, $result['data']);
|
|
|
+ } else {
|
|
|
+ $this->error($result['message']);
|
|
|
}
|
|
|
-// $job = new InsertDataJob($data); // 创建任务实例
|
|
|
-// // 推送任务到队列
|
|
|
-// Queue::push($job,'','default'); // 推送任务到队列
|
|
|
-// // 设置任务的标识符到缓存中,并设置有效期,有效期为队列执行时间的两倍
|
|
|
-// $redis->set($taskIdentifier, true);
|
|
|
-// $this->success('数据正在处理中,请等待...');
|
|
|
+
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ $this->error('工资计算失败: ' . $e->getMessage());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
- * 新增:查询工资计算任务状态
|
|
|
- * @ApiMethod GET
|
|
|
+ * 查询工资计算状态
|
|
|
*/
|
|
|
public function salaryStatus()
|
|
|
{
|