|
@@ -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;
|