cqp 1 месяц назад
Родитель
Сommit
e1b68bc7bc
3 измененных файлов с 118 добавлено и 2 удалено
  1. 13 0
      app/Http/Controllers/Api/BIController.php
  2. 102 0
      app/Service/BIService.php
  3. 3 2
      routes/api.php

+ 13 - 0
app/Http/Controllers/Api/BIController.php

@@ -19,4 +19,17 @@ class BIController extends BaseController
             return $this->json_return(201,$data);
         }
     }
+
+    public function initializationCompany(Request $request)
+    {
+        $service = new BIService();
+        $user = $request->userData;
+        list($status,$data) = $service->initializationCompany($request->all(),$user);
+
+        if($status){
+            return $this->json_return(200,'',$data);
+        }else{
+            return $this->json_return(201,$data);
+        }
+    }
 }

+ 102 - 0
app/Service/BIService.php

@@ -4,6 +4,9 @@ namespace App\Service;
 
 use App\Model\DailyPwOrder;
 use App\Model\DailyPwOrderDetails;
+use App\Model\Depart;
+use App\Model\Employee;
+use App\Model\EmployeeDepartPermission;
 use App\Model\ExpenseClaims;
 use App\Model\ExpenseClaimsDetails;
 use App\Model\Fee;
@@ -14,7 +17,9 @@ use App\Model\MonthlyPsOrder;
 use App\Model\MonthlyPsOrderDetails;
 use App\Model\PLeaveOverOrder;
 use App\Model\PLeaveOverOrderDetails;
+use App\Model\WorkRangeDetails;
 use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Hash;
 
 class BIService extends Service
 {
@@ -356,4 +361,101 @@ class BIService extends Service
 
         return $return;
     }
+
+    public function initializationCompany($data, $user){
+        if(empty($data['title'])) return [false, '公司名称不能为空'];
+        if(empty($data['code'])) return [false, '公司代码不能为空'];
+
+        // ^[A-Za-z]+$  表示从头到尾只能是英文字母(不区分大小写)
+        if (!preg_match('/^[A-Za-z]+$/', $data['code']) || mb_strlen($data['code']) < 4) return [false, "公司代码必须全为英文且长度需大于等于 4 位"];
+
+        $exists = Depart::where('parent_id', 0)
+            ->where('del_time', 0)
+            ->where(function($query) use ($data) {
+                $query->where('title', $data['title'])
+                    ->orWhere('code', $data['code']);
+            })
+            ->exists();
+        if($exists) return [false, '公司名称或公司代码已存在,新增失败'];
+
+        $account = $data['code'] . "_" . 'admin';
+        $exists = Employee::where('del_time', 0)
+            ->where('account', $account)
+            ->exists();
+        if($exists) return [false, '创建账号已存在,新增失败'];
+
+        try {
+            DB::beginTransaction();
+
+            //创建公司
+            $model = new Depart();
+            $model->parent_id = 0;
+            $model->title = $data['title'];
+            $model->code = $data['code'];
+            $model->top_depart_id = 0;
+            $model->save();
+            //公司ID
+            $top_depart_id = $model->id;
+
+            $password = $this->generateAt8CharPassword();
+            //创建账号
+            $model_2 = new Employee();
+            $model_2->title = $data['title'];
+            $model_2->code = $data['code'];
+            $model_2->account = $account;
+            $model_2->password = Hash::make($password);
+            $model_2->is_admin = Employee::IS_ADMIN_TWO;
+            $model_2->top_depart_id = $top_depart_id;
+            $model_2->state = Employee::TYPE_ONE;
+            $model_2->save();
+            $employee_id = $model_2->id;
+
+            //关联人员的部门初始信息
+            $model_3 = new EmployeeDepartPermission();
+            $model_3->employee_id = $employee_id;
+            $model_3->depart_id = 0;
+            $model_3->top_depart_id = $top_depart_id;
+            $model_3->save();
+
+            //公司上班时段
+            $work_range[] = [
+                'top_depart_id' => $top_depart_id,
+                'start_time_hour' => 9,
+                'start_time_min' => 0,
+                'end_time_hour' => 12,
+                'end_time_min' => 0,
+                'total_work_min' => 180,
+            ];
+            $work_range[] = [
+                'top_depart_id' => $top_depart_id,
+                'start_time_hour' => 13,
+                'start_time_min' => 0,
+                'end_time_hour' => 18,
+                'end_time_min' => 0,
+                'total_work_min' => 300,
+            ];
+            WorkRangeDetails::insert($work_range);
+
+            DB::commit();
+        }catch (\Throwable $exception){
+            DB::rollBack();
+            return [false, $exception->getMessage()];
+        }
+
+        return [true, ['account' => $account, 'password' => $password]];
+    }
+
+    function generateAt8CharPassword() {
+        $lettersNumbers = 'abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789';
+
+        $password = '@'; // 1. 先把固定的 @ 放进去
+
+        // 2. 随机抽取 7 位英文或数字
+        for ($i = 0; $i < 7; $i++) {
+            $password .= $lettersNumbers[random_int(0, strlen($lettersNumbers) - 1)];
+        }
+
+        // 3. 打乱顺序,让 @ 的位置不固定
+        return str_shuffle($password);
+    }
 }

+ 3 - 2
routes/api.php

@@ -168,8 +168,6 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
     $route->any('archiveAdd', 'Api\ArchiveController@archiveAdd');
     $route->any('archiveDel', 'Api\ArchiveController@archiveDel');
 
-    //工时设置 暂时后台写死数据 toDo
-
     //请假单 加班单
     $route->any('pLeaveOverOrderList', 'Api\PLeaveOverController@pLeaveOverList');
     $route->any('pLeaveOverEdit', 'Api\PLeaveOverController@pLeaveOverEdit');
@@ -225,5 +223,8 @@ Route::group(['middleware'=> ['checkLogin']],function ($route){
 
     //首页BI数据
     $route->any('homePageData', 'Api\BIController@homePageData');
+
+    //创建公司账号 工时设置 初始化
+    $route->any('initializationCompany', 'Api\BIController@initializationCompany');
 });