From 55de1b350a2b87e1da0dd24f36e78f2a6c81774f Mon Sep 17 00:00:00 2001 From: weiz Date: Fri, 15 Dec 2023 11:01:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=A1=B9=E7=9B=AE=E6=88=90?= =?UTF-8?q?=E5=91=98=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/project/ProjectController.php | 2 +- .../project/ProjectMemberController.php | 108 +++++++++++++ .../lists/project/ProjectMemberLists.php | 124 +++++++++++++++ app/adminapi/logic/project/ProjectLogic.php | 5 +- .../logic/project/ProjectMemberLogic.php | 123 ++++++++++++++ .../project/ProjectMemberValidate.php | 150 ++++++++++++++++++ app/common/model/project/ProjectMember.php | 34 ++++ 7 files changed, 543 insertions(+), 3 deletions(-) create mode 100644 app/adminapi/controller/project/ProjectMemberController.php create mode 100644 app/adminapi/lists/project/ProjectMemberLists.php create mode 100644 app/adminapi/logic/project/ProjectMemberLogic.php create mode 100644 app/adminapi/validate/project/ProjectMemberValidate.php create mode 100644 app/common/model/project/ProjectMember.php diff --git a/app/adminapi/controller/project/ProjectController.php b/app/adminapi/controller/project/ProjectController.php index 42c35bff1..abf9f6b5d 100644 --- a/app/adminapi/controller/project/ProjectController.php +++ b/app/adminapi/controller/project/ProjectController.php @@ -52,7 +52,7 @@ class ProjectController extends BaseAdminController public function add() { $params = (new ProjectValidate())->post()->goCheck('add'); - $result = ProjectLogic::add($params); + $result = ProjectLogic::add($params,$this->adminId); if (true === $result) { return $this->success('添加成功', [], 1, 1); } diff --git a/app/adminapi/controller/project/ProjectMemberController.php b/app/adminapi/controller/project/ProjectMemberController.php new file mode 100644 index 000000000..d67544310 --- /dev/null +++ b/app/adminapi/controller/project/ProjectMemberController.php @@ -0,0 +1,108 @@ +dataLists(new ProjectMemberLists()); + } + + + /** + * @notes 添加项目成员 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/15 09:59 + */ + public function add() + { + $params = (new ProjectMemberValidate())->post()->goCheck('add'); + $result = ProjectMemberLogic::add($params); + if (true === $result) { + return $this->success('添加成功', [], 1, 1); + } + return $this->fail(ProjectMemberLogic::getError()); + } + + + /** + * @notes 编辑项目成员 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/15 09:59 + */ + public function edit() + { + $params = (new ProjectMemberValidate())->post()->goCheck('edit'); + $result = ProjectMemberLogic::edit($params); + if (true === $result) { + return $this->success('编辑成功', [], 1, 1); + } + return $this->fail(ProjectMemberLogic::getError()); + } + + + /** + * @notes 删除项目成员 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/15 09:59 + */ + public function delete() + { + $params = (new ProjectMemberValidate())->post()->goCheck('delete'); + ProjectMemberLogic::delete($params); + return $this->success('删除成功', [], 1, 1); + } + + + /** + * @notes 获取项目成员详情 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/15 09:59 + */ + public function detail() + { + $params = (new ProjectMemberValidate())->goCheck('detail'); + $result = ProjectMemberLogic::detail($params); + return $this->data($result); + } + + +} \ No newline at end of file diff --git a/app/adminapi/lists/project/ProjectMemberLists.php b/app/adminapi/lists/project/ProjectMemberLists.php new file mode 100644 index 000000000..ccea1b190 --- /dev/null +++ b/app/adminapi/lists/project/ProjectMemberLists.php @@ -0,0 +1,124 @@ +request->param(); + $where = []; + if(isset($params['project_name']) && $params['project_name'] != ''){ + $projectIds1 = Project::where('name','like','%'.$params['project_name'].'%')->column('id'); + $where[] = ['project_id','in',$projectIds1]; + } + if(isset($params['project_code']) && $params['project_code'] != ''){ + $projectIds2 = Project::where('project_code','like','%'.$params['project_code'].'%')->column('id'); + $where[] = ['project_id','in',$projectIds2]; + } + if(isset($params['project_role_name']) && $params['project_role_name'] != ''){ + $projectRoleIds = ProjectRoleSet::where('name','like','%'.$params['project_role_name'].'%')->column('id'); + $where[] = ['project_role_id','in',$projectRoleIds]; + } + if(isset($params['admin_name']) && $params['admin_name'] != ''){ + $adminIds = Admin::where('name','like','%'.$params['admin_name'].'%')->column('id'); + $where[] = ['admin_id','in',$adminIds]; + } + return ProjectMember::where($this->searchWhere)->where($where) + ->field(['id', 'project_id', 'project_role_id', 'admin_id', 'working_unit_price', 'remark']) + ->limit($this->limitOffset, $this->limitLength) + ->order(['id' => 'desc']) + ->select()->each(function($item){ + $project = Project::field('name,project_code')->where('id',$item['project_id'])->findOrEmpty(); + $role = ProjectRoleSet::field('name')->where('id',$item['project_role_id'])->findOrEmpty(); + $admin = Admin::field('name')->where('id',$item['admin_id'])->findOrEmpty(); + $item['project_name'] = $project['name']; + $item['project_code'] = $project['project_code']; + $item['project_role_name'] = $role['name']; + $item['admin_name'] = $admin['name']; + return $item; + }) + ->toArray(); + } + + + /** + * @notes 获取项目成员数量 + * @return int + * @author likeadmin + * @date 2023/12/15 09:59 + */ + public function count(): int + { + $params = $this->request->param(); + $where = []; + if(isset($params['project_name']) && $params['project_name'] != ''){ + $projectIds1 = Project::where('name','like','%'.$params['project_name'].'%')->column('id'); + $where[] = ['project_id','in',$projectIds1]; + } + if(isset($params['project_code']) && $params['project_code'] != ''){ + $projectIds2 = Project::where('project_code','like','%'.$params['project_code'].'%')->column('id'); + $where[] = ['project_id','in',$projectIds2]; + } + if(isset($params['project_role_name']) && $params['project_role_name'] != ''){ + $projectRoleIds = ProjectRoleSet::where('name','like','%'.$params['project_role_name'].'%')->column('id'); + $where[] = ['project_role_id','in',$projectRoleIds]; + } + if(isset($params['admin_name']) && $params['admin_name'] != ''){ + $adminIds = Admin::where('name','like','%'.$params['admin_name'].'%')->column('id'); + $where[] = ['admin_id','in',$adminIds]; + } + return ProjectMember::where($this->searchWhere)->where($where)->count(); + } + +} \ No newline at end of file diff --git a/app/adminapi/logic/project/ProjectLogic.php b/app/adminapi/logic/project/ProjectLogic.php index d61dc4171..9154175bb 100644 --- a/app/adminapi/logic/project/ProjectLogic.php +++ b/app/adminapi/logic/project/ProjectLogic.php @@ -38,7 +38,7 @@ class ProjectLogic extends BaseLogic * @author likeadmin * @date 2023/11/12 14:30 */ - public static function add(array $params): bool + public static function add(array $params, $adminId): bool { Db::startTrans(); try { @@ -71,7 +71,8 @@ class ProjectLogic extends BaseLogic 'industry' => $params['industry'], 'unit_nature' => $params['unit_nature'], 'annex' => $params['annex'], - 'status' => 0 + 'status' => 0, + 'add_user' => $adminId ]); Db::commit(); diff --git a/app/adminapi/logic/project/ProjectMemberLogic.php b/app/adminapi/logic/project/ProjectMemberLogic.php new file mode 100644 index 000000000..230456424 --- /dev/null +++ b/app/adminapi/logic/project/ProjectMemberLogic.php @@ -0,0 +1,123 @@ + $params['project_id'], + 'project_role_id' => $params['project_role_id'], + 'admin_id' => $params['admin_id'], + 'working_unit_price' => $params['working_unit_price'], + 'remark' => $params['remark'], + ]); + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + self::setError($e->getMessage()); + return false; + } + } + + + /** + * @notes 编辑项目成员 + * @param array $params + * @return bool + * @author likeadmin + * @date 2023/12/15 09:59 + */ + public static function edit(array $params): bool + { + Db::startTrans(); + try { + ProjectMember::where('id', $params['id'])->update([ + 'project_id' => $params['project_id'], + 'project_role_id' => $params['project_role_id'], + 'admin_id' => $params['admin_id'], + 'working_unit_price' => $params['working_unit_price'], + 'remark' => $params['remark'], + ]); + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + self::setError($e->getMessage()); + return false; + } + } + + + /** + * @notes 删除项目成员 + * @param array $params + * @return bool + * @author likeadmin + * @date 2023/12/15 09:59 + */ + public static function delete(array $params): bool + { + return ProjectMember::destroy($params['id']); + } + + + /** + * @notes 获取项目成员详情 + * @param $params + * @return array + * @author likeadmin + * @date 2023/12/15 09:59 + */ + public static function detail($params): array + { + $data = ProjectMember::field('id,project_id,project_role_id,admin_id,working_unit_price,remark')->findOrEmpty($params['id'])->toArray(); + $project = Project::field('name,project_code')->where('id',$data['project_id'])->findOrEmpty(); + $role = ProjectRoleSet::field('name')->where('id',$data['project_role_id'])->findOrEmpty(); + $admin = Admin::field('name')->where('id',$data['admin_id'])->findOrEmpty(); + $data['project_name'] = $project['name']; + $data['project_code'] = $project['project_code']; + $data['project_role_name'] = $role['name']; + $data['admin_name'] = $admin['name']; + return $data; + } +} \ No newline at end of file diff --git a/app/adminapi/validate/project/ProjectMemberValidate.php b/app/adminapi/validate/project/ProjectMemberValidate.php new file mode 100644 index 000000000..84b9ec46d --- /dev/null +++ b/app/adminapi/validate/project/ProjectMemberValidate.php @@ -0,0 +1,150 @@ + 'require|checkData', + 'project_id' => 'require|checkProject', + 'project_role_id' => 'require|checkProjectRole', + 'admin_id' => 'require|checkAdmin', + 'working_unit_price' => 'require|float|egt:0', + ]; + + protected $message = [ + 'id.require' => '缺少必要参数', + 'project_id.require' => '请选择项目', + 'project_role_id.require' => '请选择项目角色', + 'admin_id.require' => '请选择人员', + 'working_unit_price.require' => '请填写工时单价', + 'working_unit_price.float' => '工时单价必须是数字', + 'working_unit_price.egt' => '工时单价必须大于等于0', + ]; + + + /** + * 参数描述 + * @var string[] + */ + protected $field = [ + 'id' => 'id', + 'project_id' => '项目id', + 'project_role_id' => '角色名称', + 'admin_id' => '人员id', + 'working_unit_price' => '工时单价', + ]; + + + /** + * @notes 添加场景 + * @return ProjectMemberValidate + * @author likeadmin + * @date 2023/12/15 09:59 + */ + public function sceneAdd() + { + return $this->remove('id',true); + } + + + /** + * @notes 编辑场景 + * @return ProjectMemberValidate + * @author likeadmin + * @date 2023/12/15 09:59 + */ + public function sceneEdit() + {} + + + /** + * @notes 删除场景 + * @return ProjectMemberValidate + * @author likeadmin + * @date 2023/12/15 09:59 + */ + public function sceneDelete() + { + return $this->only(['id']); + } + + + /** + * @notes 详情场景 + * @return ProjectMemberValidate + * @author likeadmin + * @date 2023/12/15 09:59 + */ + public function sceneDetail() + { + return $this->only(['id']); + } + + public function checkData($value): bool|string + { + $data = ProjectMember::where('id',$value)->findOrEmpty(); + if($data->isEmpty()){ + return '数据不存在'; + } + return true; + } + + public function checkProject($value): bool|string + { + $data = Project::where('id',$value)->findOrEmpty(); + if($data->isEmpty()){ + return '项目不存在'; + } + return true; + } + + public function checkProjectRole($value): bool|string + { + $data = ProjectRoleSet::where('id',$value)->findOrEmpty(); + if($data->isEmpty()){ + return '项目角色不存在'; + } + return true; + } + + public function checkAdmin($value): bool|string + { + $data = Admin::where('id',$value)->findOrEmpty(); + if($data->isEmpty()){ + return '人员不存在'; + } + return true; + } + +} \ No newline at end of file diff --git a/app/common/model/project/ProjectMember.php b/app/common/model/project/ProjectMember.php new file mode 100644 index 000000000..faf8776b1 --- /dev/null +++ b/app/common/model/project/ProjectMember.php @@ -0,0 +1,34 @@ +