Pārlūkot izejas kodu

Merge branch 'master' of https://git.7in6.com/Minong/mes-server-api

曹鹤洋 1 gadu atpakaļ
vecāks
revīzija
9e3e1e8c7a

+ 45 - 17
application/api/controller/StaffSalary.php

@@ -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('数据正在处理中,请等待...');
     }
+
 }

+ 40 - 6
application/api/controller/WorkOrder.php

@@ -1024,13 +1024,18 @@ class WorkOrder extends Api
         if (empty($param) || isset($param['UniqId']) === false){
             $this->error('参数错误');
         }
-        $rate = \db('dic_lzsh')->where('sys_bh',$param['shdh'])->field('rtrim(sys_rate0) as rate0,rtrim(sys_rate1) as rate1')->find();
+        if (empty($param['shdh'])){
+            $rate['rate0'] = 0;
+            $rate['rate1'] = 0;
+        }else{
+            $rate = \db('dic_lzsh')->where('sys_bh',$param['shdh'])->field('rtrim(sys_rate0) as rate0,rtrim(sys_rate1) as rate1')->find();
+        }
         $data = [
             '重点工序' => isset($param['zdgx'])?$param['zdgx']:'',
             '备选工序' => isset($param['bxgx'])?$param['bxgx']:'',
             'Gy0_sbbh' => isset($param['sbbh'])?$param['sbbh']:'',
-            'Gy0_Rate0' => isset($rate['rate0'])?$rate['rate0']:'',
-            'Gy0_Rate1' => isset($rate['rate1'])?$rate['rate1']:'',
+            'Gy0_Rate0' => isset($rate['rate0'])?$rate['rate0']:0,
+            'Gy0_Rate1' => isset($rate['rate1'])?$rate['rate1']:0,
             'Gy0_shdh' => isset($param['shdh'])?$param['shdh']:'',
             '损耗系数' => isset($param['shxs'])?$param['shxs']:'',
             '工价系数' => isset($param['ndxs'])?$param['ndxs']:'',
@@ -1358,6 +1363,9 @@ class WorkOrder extends Api
         }
         $num = \db('工单_基本资料')->where('Gd_gdbh',$param['gdbh'])->count();
         $productDetail = \db('产品_基本资料')->where('产品编号',$param['cpdh'])->find();
+        if (empty($productDetail)){
+            $productDetail['客户料号'] = '';
+        }
         $lastId = \db('工单_基本资料')->order('Uniqid desc')->value('Uniqid');
         if ($lastId<1000000000){
             $lastId = 1000000000;
@@ -1569,9 +1577,12 @@ class WorkOrder extends Api
         }
     }
 
-
-    //新增工艺资料->工艺资料添加
-
+    /**
+     * 新增工艺资料->工艺资料添加
+     * @return void
+     * @throws \think\db\exception\BindParamException
+     * @throws \think\exception\PDOException
+     */
     public function ProcessDetailAdd()
     {
         if (Request::instance()->isPost() === false){
@@ -1587,6 +1598,29 @@ class WorkOrder extends Api
         }else{
             $lastId = $lastId + 1;
         }
+        if (empty($param['Gy0_shdh'])){
+            $param['Gy0_Rate0'] = 0;
+            $param['Gy0_Rate1'] = 0;
+        }else{
+            $detail = \db('dic_lzsh')->field('sys_rate0,sys_rate1')->where('sys_bh',$param['Gy0_shdh'])->find();
+            $param['Gy0_Rate0'] = $detail['sys_rate0'];
+            $param['Gy0_Rate1'] = $detail['sys_rate1'];
+        }
+        $param['Sys_rq'] = date('Y-m-d H:i:s',time());
+        $param['Mod_rq'] = '1900-01-01 00:00:00';
+        $param['Gy0_sj1'] = '1900-01-01 00:00:00';
+        $param['Gy0_sj2'] = '1900-01-01 00:00:00';
+        $param['PD_WG'] = '1900-01-01 00:00:00';
+        $param['UniqId'] = $lastId;
+        $sql = \db('工单_工艺资料')
+            ->fetchSql(true)
+            ->insert($param);
+        $res = \db()->query($sql);
+        if ($res !== false){
+            $this->success('成功');
+        }else{
+            $this->error('失败');
+        }
 
     }
 

+ 1 - 1
application/api/controller/WorkOrderVerification.php

@@ -399,7 +399,7 @@ class WorkOrderVerification extends Api
         $where['a.sczl_type'] = array('like','%'.$search.'%');
         $list = db('设备_产量计酬')->alias('a')
             ->join('人事_基本资料 b','a.sczl_bh1 = b.员工编号','left')
-            ->where($where)->cache(true,3600)->field('distinct(a.sczl_gxmc),a.sczl_bzdh,a.sczl_jtbh,a.sczl_bh1,b.员工姓名 as name')
+            ->where($where)->field('distinct(a.sczl_gxmc),a.sczl_bzdh,a.sczl_jtbh,a.sczl_bh1,b.员工姓名 as name')
             ->select();
         $count = count($list);
         $list[$count]['sczl_gxmc'] = '99-外发加工';

+ 2 - 2
application/extra/queue.php

@@ -1,12 +1,12 @@
 <?php
 return [
     'connector'  => 'Redis',          // Redis 驱动
-    'expire'     => 0,             // 任务的过期时间,默认为60秒; 若要禁用,则设置为 null
+    'expire'     => 60,             // 任务的过期时间,默认为60秒; 若要禁用,则设置为 null
     'default'    => 'default',    // 默认的队列名称
     'host'       => '127.0.0.1',       // redis 主机ip
     'port'       => 6379,        // redis 端口
     'password'   => '',             // redis 密码
-    'select'     => 0,          // 使用哪一个 db,默认为 db0
+    'select'     => 15,          // 使用哪一个 db,默认为 db0
     'timeout'    => 0,          // redis连接的超时时间
     'persistent' => false,
 ];

+ 38 - 2
application/index/controller/Index.php

@@ -3,7 +3,9 @@
 namespace app\index\controller;
 
 use app\common\controller\Frontend;
-
+use app\job\InsertDataJob;
+use think\Queue;
+use  think\Db;
 class Index extends Frontend
 {
 
@@ -13,7 +15,41 @@ class Index extends Frontend
 
     public function index()
     {
-        return $this->view->fetch();
+        $data =  [
+            'sczl_gdbh' =>  '2310201',
+            'sczl_yjno' => '1',
+            'sczl_gxh' => '3',
+            'sczl_type' =>  '03-喷码                     ',
+            'sczl_rq' =>  '2024-01-03 00:00:00',
+            'sczl_jtbh' => 'PM02#',
+            '班组车头产量' => '1500.0',
+            '工价系数' =>  '0.0000',
+            '工序难度系数' => '1.100',
+            '装版工时' => '0.00',
+            '保养工时' => '0.00',
+            '打样工时' =>  '0.00',
+            '异常停机工时' => '0.00',
+            '车头产量占用机时' => '0.00',
+            '日定额' => '32000.00',
+            '千件工价' =>  '3.30',
+            '补产标准' =>  '5400',
+            '班组换算产量' => 0,
+            '计时补差额工资' =>  '0.00',
+            'bh' =>  'ZM00585',
+            'xm' =>  '徐钱鹏    ',
+            'Rate' => '0.68000',
+            'sczl_ms' => '0.00',
+            '工时占比' => '0.0516',
+            '达标定额' => '363.00',
+            '个人计件工资' => '0.81',
+            '个人加班工资' =>  '4.33',
+            'UniqID' => 253318494,
+            'sys_ny' =>  '202401',
+            'sys_rq' => '2024-03-20 13:44:50',
+            'sys_id' =>  '[0001/测试]',
+            '法定天数' =>  '22'];
+        $job = new InsertDataJob($data); // 创建任务实例
+        Queue::push($job); // 推送任务到队列
     }
 
 }

+ 63 - 0
application/job/InsertDataJob.php

@@ -0,0 +1,63 @@
+<?php
+
+namespace app\job;
+
+use think\Db;
+use think\Cache;
+
+class InsertDataJob
+{
+    protected $data;
+
+    public function __construct($data)
+    {
+        $this->data = $data;
+    }
+
+    public function handle()
+    {
+        $handData = [];
+        foreach ($this->data as $key=>$value){
+            $handData[$key]['sczl_gdbh'] = $value['sczl_gdbh'];
+            $handData[$key]['sczl_yjno'] = $value['sczl_yjno'];
+            $handData[$key]['sczl_gxh'] = $value['sczl_gxh'];
+            $handData[$key]['sczl_type'] = $value['sczl_type'];
+            $handData[$key]['sczl_rq'] = $value['sczl_rq'];
+            $handData[$key]['sczl_jtbh'] = $value['sczl_jtbh'];
+            $handData[$key]['班组车头产量'] = $value['班组车头产量'];
+            $handData[$key]['工价系数'] = $value['工价系数'];
+            $handData[$key]['工序难度系数'] = $value['工序难度系数'];
+            $handData[$key]['装版工时'] = $value['装版工时'];
+            $handData[$key]['保养工时'] = $value['保养工时'];
+            $handData[$key]['打样工时'] = $value['打样工时'];
+            $handData[$key]['异常停机工时'] = $value['异常停机工时'];
+            $handData[$key]['车头产量占用机时'] = $value['车头产量占用机时'];
+            $handData[$key]['日定额'] = $value['日定额'];
+            $handData[$key]['千件工价'] = $value['千件工价'];
+            $handData[$key]['补产标准'] = $value['补产标准'];
+            $handData[$key]['班组换算产量'] = $value['班组换算产量'];
+            $handData[$key]['计时补差额工资'] = $value['计时补差额工资'];
+            $handData[$key]['bh'] = $value['bh'];
+            $handData[$key]['xm'] = $value['xm'];
+            $handData[$key]['Rate'] = $value['Rate'];
+            $handData[$key]['sczl_ms'] = $value['sczl_ms'];
+            $handData[$key]['工时占比'] = $value['工时占比'];
+            $handData[$key]['达标定额'] = $value['达标定额'];
+            $handData[$key]['个人计件工资'] = $value['个人计件工资'];
+            $handData[$key]['个人加班工资'] = $value['个人加班工资'];
+            $handData[$key]['UniqID'] = $value['UniqID'];
+            $handData[$key]['sys_ny'] = $value['sys_ny'];
+            $handData[$key]['sys_rq'] = $value['sys_rq'];
+            $handData[$key]['sys_id'] = $value['sys_id'];
+            $handData[$key]['法定天数'] = $value['法定天数'];
+        }
+        $sql =Db::name('绩效工资汇总_temp')->fetchSql(true)->insertAll($handData);
+        $res = Db::query($sql);
+        if ($res !== false){
+            // 获取队列的键名
+            $queueKey = 'default0';
+            // 删除队列
+            Cache::store('redis')->handler()->del($queueKey);
+        }
+    }
+}