Bladeren bron

项目各个节点的成员

cqp 11 maanden geleden
bovenliggende
commit
aedf81cd59
2 gewijzigde bestanden met toevoegingen van 221 en 19 verwijderingen
  1. 44 0
      app/Model/ProjectEmployee.php
  2. 177 19
      app/Service/ProjectService.php

+ 44 - 0
app/Model/ProjectEmployee.php

@@ -0,0 +1,44 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+class ProjectEmployee extends Model
+{
+    protected $table = "project_employee"; //指定表
+    const CREATED_AT = null;
+    const UPDATED_AT = null;
+    protected $dateFormat = 'U';
+
+    const type_one = 1; // 项目成员
+    const type_two = 2; // 阶段成员
+    const type_three = 3; // 节点成员
+    const type_four = 4; // 任务成员
+    public static $type = [
+        self::type_one,
+        self::type_two,
+        self::type_three,
+        self::type_four,
+    ];
+    public static $type_title = [
+        self::type_one => '项目成员',
+        self::type_two => '阶段成员',
+        self::type_three => '节点成员',
+        self::type_four => '任务成员',
+    ];
+
+    public static $type_id = [
+        self::type_one => 'project_id',
+        self::type_two => 'project_stage_id',
+        self::type_three => 'project_stage_node_id',
+        self::type_four => 'project_stage_node_mission_id',
+    ];
+
+    public static $type_id_type = [
+        self::type_one => [self::type_one, self::type_two, self::type_three, self::type_four],
+        self::type_two => [self::type_two, self::type_three, self::type_four],
+        self::type_three => [self::type_three, self::type_four],
+        self::type_four => [self::type_four],
+    ];
+}

+ 177 - 19
app/Service/ProjectService.php

@@ -4,6 +4,7 @@ namespace App\Service;
 
 use App\Model\Employee;
 use App\Model\Project;
+use App\Model\ProjectEmployee;
 use App\Model\ProjectStage;
 use App\Model\ProjectStageNode;
 use App\Model\ProjectStageNodeMission;
@@ -12,6 +13,99 @@ use Illuminate\Support\Facades\DB;
 
 class ProjectService extends Service
 {
+    public function getProjectEmployee($data, $type = 1){
+        $data_id_column = ProjectEmployee::$type_id[$type] ?? "";
+        if(empty($data_id_column)) return ['name' => "", 'name_id' => ""];
+
+        if(is_array($data['id'])){
+            $employee = ProjectEmployee::where('del_time',0)
+                ->whereIn($data_id_column, $data['id'])
+                ->where('type', $type)
+                ->select($data_id_column, 'employee_id')
+                ->get()->toArray();
+            $employee_id = array_column($employee, 'employee_id');
+
+            $man = Employee::whereIn('id', $employee_id)
+                ->pluck('emp_name','id')
+                ->toArray();
+
+            $array = [];
+            foreach ($employee as $value){
+                $tmp = $man[$value['employee_id']] ?? "";
+                if(isset($array[$value[$data_id_column]])){
+                    $array[$value[$data_id_column]]['name'] .= ',' . $tmp;
+                    $array[$value[$data_id_column]]['name_id'] .= ',' . $value['employee_id'];
+                }else{
+                    $array[$value[$data_id_column]] = [
+                        'name' => $tmp,
+                        'name_id' => $value['employee_id'],
+                    ];
+                }
+            }
+
+            return $array;
+        }else{
+            $employee = ProjectEmployee::where('del_time',0)
+                ->where($data_id_column, $data['id'])
+                ->where('type', $type)
+                ->select('employee_id')
+                ->get()->toArray();
+            $employee = array_column($employee, 'employee_id');
+
+            $man = Employee::whereIn('id', $employee)
+                ->pluck('emp_name','id')
+                ->toArray();
+
+            $title = $title_id = "";
+            foreach ($employee as $value){
+                $tmp = $man[$value] ?? "";
+                if($tmp) $title .= $tmp . ',';
+                $title_id .= $value . ',';
+            }
+            $title = rtrim($title, ',');
+            $title_id = rtrim($title_id, ',');
+
+            return ['name' => $title, 'name_id' => $title_id];
+        }
+    }
+
+    public function projectEmployee($data, $type = 0, $is_add = true){
+        //关联字段
+        $data_id_column = ProjectEmployee::$type_id[$type] ?? "";
+        if(empty($data_id_column)) return;
+        //关联类型
+        $type_array = ProjectEmployee::$type_id_type[$type] ?? [];
+
+        if(! $is_add) {
+            ProjectEmployee::where('del_time',0)
+                ->where($data_id_column, $data['id'])
+                ->whereIn('type',$type_array)
+                ->update(['del_time' => time()]);
+        }
+
+        if(! empty($data['employee_id'])){
+            $array = [];
+            foreach (ProjectEmployee::$type_id as $v){
+                $array[$v] = 0;
+            }
+            if(isset($array[$data_id_column])) $array[$data_id_column] = $data['id'];
+
+            $tmp = [
+                'employee_id' => 0,
+                'type' => $type,
+            ];
+            $tmp = array_merge($tmp, $array);
+
+            $insert = [];
+            $employee = explode(',', $data['employee_id']);
+            foreach ($employee as $value){
+                $tmp['employee_id'] = $value;
+                $insert[] = $tmp;
+            }
+            ProjectEmployee::insert($insert);
+        }
+    }
+
     public function edit($data){
         list($status,$msg) = $this->projectRule($data,false);
         if(! $status) return [$status,$msg];
@@ -35,6 +129,8 @@ class ProjectService extends Service
             $model->stage = $data['stage'] ?? 0;
             $model->save();
 
+            $this->projectEmployee($data, ProjectEmployee::type_one, false);
+
             DB::commit();
         }catch (\Exception $exception){
             DB::rollBack();
@@ -68,6 +164,9 @@ class ProjectService extends Service
             $model->stage = $data['stage'] ?? 0;
             $model->crt_id = $user['id'];
             $model->save();
+            $data['id'] = $model->id;
+
+            $this->projectEmployee($data, ProjectEmployee::type_one);
 
             DB::commit();
         }catch (\Exception $exception){
@@ -83,6 +182,8 @@ class ProjectService extends Service
 
         DB::beginTransaction();
         try {
+            $this->projectEmployee($data, ProjectEmployee::type_one, false);
+
             Project::where('id',$data['id'])->update([
                 'del_time' => time()
             ]);
@@ -130,6 +231,11 @@ class ProjectService extends Service
         $project['after_sale_director_title'] = $emp_map[$project['after_sale_director']] ?? "";
         $project['crt_name'] = $emp_map[$project['crt_id']] ?? "";
 
+        //项目成员
+        $return = $this->getProjectEmployee($data, ProjectEmployee::type_one);
+        $project['employee_title'] = $return['name'] ?? "";
+        $project['employee_id'] = $return['name_id'] ?? "";
+
         //任务报告
         $project_stage_node_mission_detail = ProjectStageNodeMissionDetail::where('del_time',0)
             ->where('project_id',$data['id'])
@@ -150,18 +256,19 @@ class ProjectService extends Service
         $project_stage_node_mission = ProjectStageNodeMission::where('del_time',0)
             ->where('project_id',$data['id'])
             ->get()->toArray();
+        $map = [];
+        $project_stage_node_mission_id = array_column($project_stage_node_mission, 'id');
+        foreach ($project_stage_node_mission_id as $value){
+            //任务成员
+            $return = $this->getProjectEmployee(['id' => $value], ProjectEmployee::type_four);
+            $map[$value] = $return;
+        }
 
-        //获取人员名称
-        $emp_map = $this->returnEmployeeTitle($project_stage_node_mission);
         $project_stage_node_mission_map = [];
         foreach ($project_stage_node_mission as $key => $value){
-            $title = "";
-            $tmp = explode(',', $value['employee_id']);
-            foreach ($tmp as $val){
-                $title_tmp = $emp_map[$val] ?? "";
-                if($title_tmp) $title .= $title_tmp . ",";
-            }
-            $project_stage_node_mission[$key]['employee_title'] = rtrim($title,',');
+            $tmp = $map[$value['id']] ?? [];
+            $project_stage_node_mission[$key]['employee_title'] = $tmp['name'] ?? "";
+            $project_stage_node_mission[$key]['employee_id'] = $tmp['name_id'] ?? "";
 
             $son = $project_stage_node_mission_detail_map[$value['id']] ?? [];
             $project_stage_node_mission[$key]['children'] = $son;
@@ -172,12 +279,23 @@ class ProjectService extends Service
         $project_stage_node = ProjectStageNode::where('del_time',0)
             ->where('project_id',$data['id'])
             ->get()->toArray();
+        $map = [];
+        $project_stage_node_id = array_column($project_stage_node, 'id');
+        foreach ($project_stage_node_id as $value){
+            //节点成员
+            $return = $this->getProjectEmployee(['id' => $value], ProjectEmployee::type_three);
+            $map[$value] = $return;
+        }
+
         $project_stage_node_map = [];
         foreach ($project_stage_node as $key => $value){
             $start_time = $value['plan_start_time'] ? date("Y-m-d H:i",$value['plan_start_time']) : '';
             $end_time = $value['plan_end_time'] ? date("Y-m-d H:i",$value['plan_end_time']) : '';
             $project_stage_node[$key]['plan_time'] = $start_time . '——' . $end_time;
             $project_stage_node[$key]['start_time'] = $value['start_time'] ? date("Y-m-d",$value['start_time']): '';
+            $tmp = $map[$value['id']] ?? [];
+            $project_stage_node[$key]['employee_title'] = $tmp['name'] ?? "";
+            $project_stage_node[$key]['employee_id'] = $tmp['name_id'] ?? "";
 
             $son = $project_stage_node_mission_map[$value['id']] ?? [];
             $project_stage_node[$key]['children'] = $son;
@@ -188,11 +306,22 @@ class ProjectService extends Service
         $project_stage = ProjectStage::where('del_time',0)
             ->where('project_id',$data['id'])
             ->get()->toArray();
+        $map = [];
+        $project_stage_id = array_column($project_stage, 'id');
+        foreach ($project_stage_id as $value){
+            //阶段成员
+            $return = $this->getProjectEmployee(['id' => $value], ProjectEmployee::type_two);
+            $map[$value] = $return;
+        }
         foreach ($project_stage as $key => $value){
             $start_time = $value['plan_start_time'] ? date("Y-m-d H:i",$value['plan_start_time']) : '';
             $end_time = $value['plan_end_time'] ? date("Y-m-d H:i",$value['plan_end_time']) : '';
             $project_stage[$key]['plan_time'] = $start_time . '——' . $end_time;
             $project_stage[$key]['start_time'] = $value['start_time'] ? date("Y-m-d",$value['start_time']): '';
+            $tmp = $map[$value['id']] ?? [];
+            $project_stage[$key]['employee_title'] = $tmp['name'] ?? "";
+            $project_stage[$key]['employee_id'] = $tmp['name_id'] ?? "";
+
             $project_stage[$key]['children'] = $project_stage_node_map[$value['id']] ?? [];
         }
 
@@ -228,6 +357,7 @@ class ProjectService extends Service
     public function organizationData($data) {
         if (empty($data['data'])) return $data;
 
+        $map = $this->getProjectEmployee(['id' => array_column($data['data'], 'id')], ProjectEmployee::type_one);
         $emp_id = array_unique(array_merge_recursive(array_column($data['data'], 'business_director'), array_column($data['data'], 'technical_director'),array_column($data['data'], 'online_director'),array_column($data['data'], 'after_sale_director'),array_column($data['data'],'crt_id')));
         $emp_map = Employee::whereIn('id',$emp_id)->pluck('emp_name','id')->toArray();
         foreach ($data['data'] as $key => $value){
@@ -241,6 +371,9 @@ class ProjectService extends Service
             $data['data'][$key]['technical_director_title'] = $emp_map[$value['technical_director']] ?? "";
             $data['data'][$key]['online_director_title'] = $emp_map[$value['online_director']] ?? "";
             $data['data'][$key]['after_sale_director_title'] = $emp_map[$value['after_sale_director']] ?? "";
+            $tmp = $map[$value['id']] ?? [];
+            $data['data'][$key]['employee_title'] = $tmp['name'] ?? "";
+            $data['data'][$key]['employee_id'] = $tmp['name_id'] ?? "";
         }
 
         return $data;
@@ -301,6 +434,8 @@ class ProjectService extends Service
             $model->receipt_amount = $data['receipt_amount'] ?? 0;
             $model->save();
 
+            $this->projectEmployee($data, ProjectEmployee::type_two, false);
+
             DB::commit();
         }catch (\Exception $exception){
             DB::rollBack();
@@ -326,6 +461,9 @@ class ProjectService extends Service
             $model->receivable_amount = $data['receivable_amount'] ?? 0;
             $model->receipt_amount = $data['receipt_amount'] ?? 0;
             $model->save();
+            $data['id'] = $model->id;
+
+            $this->projectEmployee($data, ProjectEmployee::type_two);
 
             DB::commit();
         }catch (\Exception $exception){
@@ -341,6 +479,8 @@ class ProjectService extends Service
 
         DB::beginTransaction();
         try {
+            $this->projectEmployee($data, ProjectEmployee::type_two, false);
+
             ProjectStage::where('id',$data['id'])->where('del_time',0)->update([
                 'del_time' => time()
             ]);
@@ -431,6 +571,7 @@ class ProjectService extends Service
     public function organizationStageData($data) {
         if (empty($data['data'])) return $data;
 
+        $map = $this->getProjectEmployee(['id' => array_column($data['data'], 'id')], ProjectEmployee::type_two);
         $project_map = $this->getProject(array_column($data['data'],'project_id'));
         foreach ($data['data'] as $key => $value){
             $start_time = $value['plan_start_time'] ? date("Y-m-d H:i",$value['plan_start_time']) : '';
@@ -439,6 +580,9 @@ class ProjectService extends Service
             $data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d H:i:s",$value['crt_time']): '';
             $data['data'][$key]['start_time'] = $value['start_time'] ? date("Y-m-d",$value['start_time']): '';
             $data['data'][$key]['project_title'] = $project_map[$value['project_id']] ?? "";
+            $tmp = $map[$value['id']] ?? [];
+            $data['data'][$key]['employee_title'] = $tmp['name'] ?? "";
+            $data['data'][$key]['employee_id'] = $tmp['name_id'] ?? "";
         }
 
         return $data;
@@ -459,6 +603,8 @@ class ProjectService extends Service
             $model->start_time = $data['start_time'] ?? 0;
             $model->save();
 
+            $this->projectEmployee($data, ProjectEmployee::type_three, false);
+
             DB::commit();
         }catch (\Exception $exception){
             DB::rollBack();
@@ -483,6 +629,9 @@ class ProjectService extends Service
             $model->plan_end_time = $data['plan_end_time'] ?? 0;
             $model->start_time = $data['start_time'] ?? 0;
             $model->save();
+            $data['id'] = $model->id;
+
+            $this->projectEmployee($data, ProjectEmployee::type_three);
 
             DB::commit();
         }catch (\Exception $exception){
@@ -498,6 +647,9 @@ class ProjectService extends Service
 
         DB::beginTransaction();
         try {
+
+            $this->projectEmployee($data, ProjectEmployee::type_three, false);
+
             ProjectStageNode::where('id',$data['id'])->where('del_time',0)->update([
                 'del_time' => time()
             ]);
@@ -583,6 +735,7 @@ class ProjectService extends Service
     public function organizationStageNodeData($data) {
         if (empty($data['data'])) return $data;
 
+        $map = $this->getProjectEmployee(['id' => array_column($data['data'], 'id')],  ProjectEmployee::type_three);
         $project_map = $this->getProject(array_column($data['data'],'project_id'));
         $project_stage_map = $this->getProjectStage(array_column($data['data'],'project_stage_id'));
         foreach ($data['data'] as $key => $value){
@@ -593,6 +746,9 @@ class ProjectService extends Service
             $data['data'][$key]['start_time'] = $value['start_time'] ? date("Y-m-d",$value['start_time']): '';
             $data['data'][$key]['project_title'] = $project_map[$value['project_id']] ?? "";
             $data['data'][$key]['project_stage_title'] = $project_stage_map[$value['project_stage_id']] ?? "";
+            $tmp = $map[$value['id']] ?? [];
+            $data['data'][$key]['employee_title'] = $tmp['name'] ?? "";
+            $data['data'][$key]['employee_id'] = $tmp['name_id'] ?? "";
         }
 
         return $data;
@@ -610,9 +766,10 @@ class ProjectService extends Service
             $model->project_stage_node_id = $data['project_stage_node_id'] ?? 0;
             $model->title = $data['title'] ?? "";
             $model->content = $data['content'] ?? 0;
-            $model->employee_id = $data['employee_id'] ?? "";
             $model->save();
 
+            $this->projectEmployee($data, ProjectEmployee::type_four, false);
+
             DB::commit();
         }catch (\Exception $exception){
             DB::rollBack();
@@ -637,6 +794,9 @@ class ProjectService extends Service
             $model->content = $data['content'] ?? 0;
             $model->employee_id = $data['employee_id'] ?? "";
             $model->save();
+            $data['id'] = $model->id;
+
+            $this->projectEmployee($data, ProjectEmployee::type_four);
 
             DB::commit();
         }catch (\Exception $exception){
@@ -652,6 +812,8 @@ class ProjectService extends Service
 
         DB::beginTransaction();
         try {
+            $this->projectEmployee($data, ProjectEmployee::type_four, false);
+
             ProjectStageNodeMission::where('id',$data['id'])->where('del_time',0)->update([
                 'del_time' => time()
             ]);
@@ -704,7 +866,7 @@ class ProjectService extends Service
 
     public function projectStageNodeMissionList($data,$user){
         $model = ProjectStageNodeMission::where('del_time',0)
-            ->select('id','project_stage_id','project_id','project_stage_node_id','title','content','employee_id','crt_time')
+            ->select('id','project_stage_id','project_id','project_stage_node_id','title','content','crt_time')
             ->orderBy('id','desc');
 
         if(! empty($data['project_stage_title'])) {
@@ -735,22 +897,18 @@ class ProjectService extends Service
     public function organizationStageNodeMissionData($data) {
         if (empty($data['data'])) return $data;
 
-        $emp_map = $this->returnEmployeeTitle($data['data']);
+        $map = $this->getProjectEmployee(['id' => array_column($data['data'], 'id')], ProjectEmployee::type_four);
         $project_map = $this->getProject(array_column($data['data'],'project_id'));
         $project_stage_map = $this->getProjectStage(array_column($data['data'],'project_stage_id'));
         $project_stage_node_map = $this->getProjectStageNode(array_column($data['data'],'project_stage_node_id'));
         foreach ($data['data'] as $key => $value){
-            $title = "";
-            $tmp = explode(',', $value['employee_id']);
-            foreach ($tmp as $val){
-                $title_tmp = $emp_map[$val] ?? "";
-                if($title_tmp) $title .= $title_tmp . ",";
-            }
-            $data['data'][$key]['employee_title'] = rtrim($title,',');
             $data['data'][$key]['crt_time'] = $value['crt_time'] ? date("Y-m-d H:i:s",$value['crt_time']): '';
             $data['data'][$key]['project_title'] = $project_map[$value['project_id']] ?? "";
             $data['data'][$key]['project_stage_title'] = $project_stage_map[$value['project_stage_id']] ?? "";
             $data['data'][$key]['project_stage_node_title'] = $project_stage_node_map[$value['project_stage_node_id']] ?? "";
+            $tmp = $map[$value['id']] ?? [];
+            $data['data'][$key]['employee_title'] = $tmp['name'] ?? "";
+            $data['data'][$key]['employee_id'] = $tmp['name_id'] ?? "";
         }
 
         return $data;