From c93837cd02bfcba33237d86a0b63deb5bbbad12e Mon Sep 17 00:00:00 2001 From: weiz Date: Fri, 22 Dec 2023 15:23:54 +0800 Subject: [PATCH] ProjectPersonnel --- .../project/ProjectPersonnelController.php | 108 +++++++++++++ .../lists/project/ProjectPersonnelLists.php | 84 ++++++++++ .../logic/project/ProjectPersonnelLogic.php | 145 ++++++++++++++++++ .../project/ProjectPersonnelValidate.php | 145 ++++++++++++++++++ app/common/model/project/ProjectPersonnel.php | 39 +++++ 5 files changed, 521 insertions(+) create mode 100644 app/adminapi/controller/project/ProjectPersonnelController.php create mode 100644 app/adminapi/lists/project/ProjectPersonnelLists.php create mode 100644 app/adminapi/logic/project/ProjectPersonnelLogic.php create mode 100644 app/adminapi/validate/project/ProjectPersonnelValidate.php create mode 100644 app/common/model/project/ProjectPersonnel.php diff --git a/app/adminapi/controller/project/ProjectPersonnelController.php b/app/adminapi/controller/project/ProjectPersonnelController.php new file mode 100644 index 000000000..d1458d7a0 --- /dev/null +++ b/app/adminapi/controller/project/ProjectPersonnelController.php @@ -0,0 +1,108 @@ +dataLists(new ProjectPersonnelLists()); + } + + + /** + * @notes 添加项目人员 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/22 14:38 + */ + public function add() + { + $params = (new ProjectPersonnelValidate())->post()->goCheck('add'); + $result = ProjectPersonnelLogic::add($params,$this->adminId); + if (true === $result) { + return $this->success('添加成功', [], 1, 1); + } + return $this->fail(ProjectPersonnelLogic::getError()); + } + + + /** + * @notes 编辑项目人员 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/22 14:38 + */ + public function edit() + { + $params = (new ProjectPersonnelValidate())->post()->goCheck('edit'); + $result = ProjectPersonnelLogic::edit($params,$this->adminId); + if (true === $result) { + return $this->success('编辑成功', [], 1, 1); + } + return $this->fail(ProjectPersonnelLogic::getError()); + } + + + /** + * @notes 删除项目人员 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/22 14:38 + */ + public function delete() + { + $params = (new ProjectPersonnelValidate())->post()->goCheck('delete'); + ProjectPersonnelLogic::delete($params); + return $this->success('删除成功', [], 1, 1); + } + + + /** + * @notes 获取项目人员详情 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/22 14:38 + */ + public function detail() + { + $params = (new ProjectPersonnelValidate())->goCheck('detail'); + $result = ProjectPersonnelLogic::detail($params); + return $this->data($result); + } + + +} \ No newline at end of file diff --git a/app/adminapi/lists/project/ProjectPersonnelLists.php b/app/adminapi/lists/project/ProjectPersonnelLists.php new file mode 100644 index 000000000..708bbfd12 --- /dev/null +++ b/app/adminapi/lists/project/ProjectPersonnelLists.php @@ -0,0 +1,84 @@ + ['work_type'], + '%like%' => ['name', 'mobile'], + ]; + } + + + /** + * @notes 获取项目人员列表 + * @return array + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + * @author likeadmin + * @date 2023/12/22 14:38 + */ + public function lists(): array + { + return ProjectPersonnel::where($this->searchWhere) + ->field(['id', 'project_id', 'name', 'idcard', 'mobile', 'work_type', 'unit_price', 'daily_living_expenses', 'idcard_front', 'idcard_backend', 'bank_card', 'bank_no', 'deposit_bank', 'remark', 'opening_income']) + ->limit($this->limitOffset, $this->limitLength) + ->order(['id' => 'desc']) + ->select()->each(function($item){ + $item['work_type_text'] = $item->work_type_text; + $project = Project::field('name,project_code')->where('id',$item['project_id'])->findOrEmpty(); + $item['project_name'] = $project['name']; + $item['project_code'] = $project['project_code']; + }) + ->toArray(); + } + + + /** + * @notes 获取项目人员数量 + * @return int + * @author likeadmin + * @date 2023/12/22 14:38 + */ + public function count(): int + { + return ProjectPersonnel::where($this->searchWhere)->count(); + } + +} \ No newline at end of file diff --git a/app/adminapi/logic/project/ProjectPersonnelLogic.php b/app/adminapi/logic/project/ProjectPersonnelLogic.php new file mode 100644 index 000000000..8ed20f490 --- /dev/null +++ b/app/adminapi/logic/project/ProjectPersonnelLogic.php @@ -0,0 +1,145 @@ + $params['project_id'], + 'name' => $params['name'], + 'idcard' => $params['idcard'], + 'mobile' => $params['mobile'], + 'work_type' => $params['work_type'], + 'unit_price' => $params['unit_price'], + 'daily_living_expenses' => $params['daily_living_expenses'], + 'idcard_front' => $params['idcard_front'], + 'idcard_backend' => $params['idcard_backend'], + 'bank_card' => $params['bank_card'], + 'bank_no' => $params['bank_no'], + 'deposit_bank' => $params['deposit_bank'], + 'remark' => $params['remark'], + 'opening_income' => $params['opening_income'], + 'add_user' => $admin_id, + 'update_user' => $admin_id, + ]); + 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/22 14:38 + */ + public static function edit(array $params,$admin_id): bool + { + Db::startTrans(); + try { + ProjectPersonnel::where('id', $params['id'])->update([ + 'project_id' => $params['project_id'], + 'name' => $params['name'], + 'idcard' => $params['idcard'], + 'mobile' => $params['mobile'], + 'work_type' => $params['work_type'], + 'unit_price' => $params['unit_price'], + 'daily_living_expenses' => $params['daily_living_expenses'], + 'idcard_front' => $params['idcard_front'], + 'idcard_backend' => $params['idcard_backend'], + 'bank_card' => $params['bank_card'], + 'bank_no' => $params['bank_no'], + 'deposit_bank' => $params['deposit_bank'], + 'remark' => $params['remark'], + 'opening_income' => $params['opening_income'], + 'update_user' => $admin_id, + 'update_time' => time(), + ]); + 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/22 14:38 + */ + public static function delete(array $params): bool + { + return ProjectPersonnel::destroy($params['id']); + } + + + /** + * @notes 获取项目人员详情 + * @param $params + * @return array + * @author likeadmin + * @date 2023/12/22 14:38 + */ + public static function detail($params): array + { + $data = ProjectPersonnel::findOrEmpty($params['id']); + if($data->isEmpty()) return []; + $data['work_type_text'] = $data->work_type_text; + $project = Project::field('name,project_code')->where('id',$data['project_id'])->findOrEmpty(); + $admin = Admin::where('id','in',[$data['add_user'],$data['update_user']])->column('name','id'); + $data['project_name'] = $project['name']; + $data['project_code'] = $project['project_code']; + $data['add_user_name'] = $admin[$data['add_user']]; + $data['update_user_name'] = $admin[$data['update_user']]; + return $data->toArray(); + } +} \ No newline at end of file diff --git a/app/adminapi/validate/project/ProjectPersonnelValidate.php b/app/adminapi/validate/project/ProjectPersonnelValidate.php new file mode 100644 index 000000000..a3b28f50e --- /dev/null +++ b/app/adminapi/validate/project/ProjectPersonnelValidate.php @@ -0,0 +1,145 @@ + 'require', + 'project_id' => 'require|checkProject', + 'name' => 'require', + 'idcard' => 'require|idCard', + 'mobile' => 'require|mobile', + 'work_type' => 'require|checkWorkType', + 'unit_price' => 'require|float|egt:0', + 'daily_living_expenses' => 'require|float|egt:0', + ]; + + protected $message = [ + 'id.require' => '缺少必要参数', + 'project_id.require' => '请选择项目', + 'name.require' => '请填写姓名', + 'idcard.require' => '请填身份证号', + 'idcard.idCard' => '身份证号格式错误', + 'mobile.require' => '请填写手机号', + 'mobile.mobile' => '手机号格式错误', + 'work_type.require' => '请选择工种', + 'unit_price.require' => '请填写人工单价', + 'unit_price.float' => '人工单价值必须是数字', + 'unit_price.egt' => '人工单价值必须大于等于0', + 'daily_living_expenses.require' => '请填每日生活费', + 'daily_living_expenses.float' => '每日生活费值必须是数字', + 'daily_living_expenses.egt' => '每日生活费值必须大于等于0', + ]; + + + /** + * 参数描述 + * @var string[] + */ + protected $field = [ + 'id' => 'id', + 'project_id' => '项目id', + 'name' => '姓名', + 'idcard' => '身份证号', + 'mobile' => '手机号', + 'work_type' => '工种', + 'unit_price' => '人工单价价', + 'daily_living_expenses' => '每日生活费', + 'add_user' => '添加人', + 'update_user' => '更新人', + ]; + + + /** + * @notes 添加场景 + * @return ProjectPersonnelValidate + * @author likeadmin + * @date 2023/12/22 14:38 + */ + public function sceneAdd() + { + return $this->remove('id',true); + } + + + /** + * @notes 编辑场景 + * @return ProjectPersonnelValidate + * @author likeadmin + * @date 2023/12/22 14:38 + */ + public function sceneEdit() + {} + + + /** + * @notes 删除场景 + * @return ProjectPersonnelValidate + * @author likeadmin + * @date 2023/12/22 14:38 + */ + public function sceneDelete() + { + return $this->only(['id']); + } + + + /** + * @notes 详情场景 + * @return ProjectPersonnelValidate + * @author likeadmin + * @date 2023/12/22 14:38 + */ + public function sceneDetail() + { + return $this->only(['id']); + } + + public function checkProject($value): bool|string + { + $data = Project::where('id',$value)->findOrEmpty(); + if($data->isEmpty()){ + return '项目不存在'; + } + return true; + } + + public function checkWorkType($value): bool|string + { + $dictData = DictData::where('type_value','work_type')->column('value'); + if(!in_array($value,$dictData)){ + return '工作无效'; + } + return true; + } + +} \ No newline at end of file diff --git a/app/common/model/project/ProjectPersonnel.php b/app/common/model/project/ProjectPersonnel.php new file mode 100644 index 000000000..906dc1a94 --- /dev/null +++ b/app/common/model/project/ProjectPersonnel.php @@ -0,0 +1,39 @@ +column('name','value'); + return $dictData[$data['work_type']]; + } +} \ No newline at end of file