cqp 11 months ago
parent
commit
50abb53e0c
4 changed files with 213 additions and 1 deletions
  1. 48 0
      app/Http/Controllers/Api/KqController.php
  2. 21 0
      app/Model/KqOvertime.php
  3. 140 1
      app/Service/KqService.php
  4. 4 0
      routes/api.php

+ 48 - 0
app/Http/Controllers/Api/KqController.php

@@ -78,5 +78,53 @@ class KqController extends BaseController
             return $this->json_return(201,$data);
         }
     }
+
+    public function kqForOvertimeEdit(Request $request){
+        $service = new KqService();
+        $user = $request->userData->toArray();
+        list($status,$data) = $service->kqForOvertimeEdit($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function kqForOvertimeAdd(Request $request){
+        $service = new KqService();
+        $user = $request->userData->toArray();
+        list($status,$data) = $service->kqForOvertimeAdd($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function kqForOvertimeDel(Request $request){
+        $service = new KqService();
+        $user = $request->userData->toArray();
+        list($status,$data) = $service->kqForOvertimeDel($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
+
+    public function kqForOvertimeList(Request $request){
+        $service = new KqService();
+        $user = $request->userData->toArray();
+        list($status,$data) = $service->kqForOvertimeList($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
 }
 

+ 21 - 0
app/Model/KqOvertime.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace App\Model;
+
+class KqOvertime extends UseScopeBaseModel
+{
+    protected $table = "kq_overtime"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+    const STATE_ZERO = 0;//未审核
+    const STATE_ONE = 1;//待审核
+    const STATE_TWO = 2;//审核通过
+    public static $prefix = 'overtime';
+    public static $name = [
+        self::STATE_ZERO => '未审核',
+        self::STATE_ONE => '待审核',
+        self::STATE_TWO => '审核通过'
+    ];
+}

+ 140 - 1
app/Service/KqService.php

@@ -6,6 +6,7 @@ use App\Model\BusinessOpportunity;
 use App\Model\Employee;
 use App\Model\KqLeave;
 use App\Model\KqList;
+use App\Model\KqOvertime;
 use Illuminate\Support\Facades\DB;
 
 class KqService extends Service
@@ -241,7 +242,8 @@ class KqService extends Service
             $data['order_number'] = (new OrderNoService())->createOrderNumber(KqLeave::$prefix);
             $bool = KqLeave::where('del_time',0)
                 ->where('crt_id',$user['id'])
-                ->whereColumn('start_time', '>=', $data['end_time'])
+                ->whereColumn('start_time', '<=', $data['end_time'])
+                ->whereColumn('end_time', '>=', $data['start_time'])
                 ->exists();
         }else{
             if(empty($data['id'])) return [false,'ID不能为空'];
@@ -261,4 +263,141 @@ class KqService extends Service
 
         return [true, ''];
     }
+
+    public function kqForOvertimeEdit($data,$user){
+        list($status,$msg) = $this->kqForOvertimeRule($data, $user, false);
+        if(! $status) return [$status,$msg];
+
+        try {
+            DB::beginTransaction();
+
+            $model = KqOvertime::where('id',$data['id'])->first();
+            $model->content = $data['content'] ?? "";
+            $model->start_time = $data['start_time'] ?? 0;
+            $model->end_time = $data['end_time'] ?? 0;
+            $model->save();
+
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
+
+        return [true, ''];
+    }
+
+    public function kqForOvertimeAdd($data,$user){
+        list($status,$msg) = $this->kqForOvertimeRule($data, $user);
+        if(! $status) return [$status,$msg];
+
+        try {
+            DB::beginTransaction();
+
+            $model = new KqOvertime();
+            $model->order_number = $data['order_number'] ?? "";
+            $model->content = $data['content'] ?? "";
+            $model->start_time = $data['start_time'] ?? 0;
+            $model->end_time = $data['end_time'] ?? 0;
+            $model->crt_id = $user['id'];
+            $model->save();
+
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
+
+        return [true, ''];
+    }
+
+    public function kqForOvertimeDel($data,$user){
+        if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
+
+        $overtime = KqOvertime::where('id',$data['id'])->where('del_time',0)->first();
+        if(empty($overtime)) return [false, '该加班申请不存在或已被删除'];
+        $overtime = $overtime->toArray();
+        if($overtime['state'] > KqOvertime::STATE_ZERO) return [false, '该加班申请已无法删除'];
+
+        try {
+            DB::beginTransaction();
+
+            KqOvertime::where('id',$data['id'])->update([
+                'del_time'=> time()
+            ]);
+
+            DB::commit();
+        }catch (\Exception $exception){
+            DB::rollBack();
+            return [false,$exception->getMessage()];
+        }
+
+        return [true, ''];
+    }
+
+    public function kqForOvertimeList($data,$user){
+        $model = KqOvertime::where('del_time',0)
+            ->select('content','id','order_number','start_time','end_time','state','crt_id','crt_time')
+            ->orderby('id', 'desc');
+
+        if(! empty($data['id'])) $model->where('id', $data['id']);
+        if(isset($data['state'])) $model->where('state', $data['state']);
+        if(! empty($data['crt_time'][0]) && ! empty($data['crt_time'][1])) {
+            $return = $this->changeDateToTimeStampAboutRange($data['crt_time']);
+            $model->where('crt_time','>=',$return[0]);
+            $model->where('crt_time','<=',$return[1]);
+        }
+
+        $list = $this->limit($model,'',$data);
+        $list = $this->fillOvertimeData($list);
+
+        return [true, $list];
+    }
+
+    public function fillOvertimeData($data){
+        if(empty($data['data'])) return $data;
+
+        $emp = Employee::whereIn('id',array_unique(array_column($data['data'],'crt_id')))
+            ->pluck('emp_name','id')
+            ->toArray();
+        foreach ($data['data'] as $key => $value){
+            $data['data'][$key]['crt_time'] = date("Y-m-d H:i:s", $value['crt_time']);
+            $data['data'][$key]['start_time'] = $value['start_time'] ? date("Y-m-d H:i",$value['start_time']): '';
+            $data['data'][$key]['end_time'] = $value['end_time'] ? date("Y-m-d H:i",$value['end_time']): '';
+            $data['data'][$key]['state_title'] = KqOvertime::$name[$value['state']] ?? "";
+            $data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? '';
+        }
+
+        return $data;
+    }
+
+    public function kqForOvertimeRule(&$data,$user,$is_add = true){
+        if(! empty($data['time'][0]) || ! empty($data['time'][1])) return [false, '加班时间不能为空'];
+        $data['start_time'] = $this->changeDateToDateMin($data['time'][0]);
+        $data['end_time'] = $this->changeDateToDateMin($data['time'][1]);
+
+        if($is_add){
+            $data['order_number'] = (new OrderNoService())->createOrderNumber(KqOvertime::$prefix);
+            $bool = KqOvertime::where('del_time',0)
+                ->where('crt_id',$user['id'])
+                ->whereColumn('start_time', '<=', $data['end_time'])
+                ->whereColumn('end_time', '>=', $data['start_time'])
+                ->exists();
+        }else{
+            if(empty($data['id'])) return [false,'ID不能为空'];
+            $Overtime = KqOvertime::where('del_time',0)->where('id',$data['id'])->first();
+            if(empty($Overtime)) return [false, '该加班申请不存在货已被删除'];
+            $Overtime = $Overtime->toArray();
+            if($Overtime['state'] > KqOvertime::STATE_ZERO) return [false, '该加班申请已无法编辑'];
+
+            $bool = KqOvertime::where('del_time',0)
+                ->where('crt_id',$user['id'])
+                ->whereColumn('start_time', '<=', $data['end_time'])
+                ->whereColumn('end_time', '>=', $data['start_time'])
+                ->where('id','<>',$data['id'])
+                ->exists();
+        }
+        if($bool) return [false, '该时间段内已存在加班申请'];
+
+        return [true, ''];
+    }
 }

+ 4 - 0
routes/api.php

@@ -63,6 +63,10 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('kqForLeaveEdit', 'Api\KqController@kqForLeaveEdit');
     $route->any('kqForLeaveDel', 'Api\KqController@kqForLeaveDel');
     $route->any('kqForLeaveList', 'Api\KqController@kqForLeaveList');
+    $route->any('kqForOvertimeAdd', 'Api\KqController@kqForOvertimeAdd');
+    $route->any('kqForOvertimeEdit', 'Api\KqController@kqForOvertimeEdit');
+    $route->any('kqForOvertimeDel', 'Api\KqController@kqForOvertimeDel');
+    $route->any('kqForOvertimeList', 'Api\KqController@kqForOvertimeList');
 
     //客户
     $route->any('customerList', 'Api\CustomerController@customerList');