diff --git a/app/adminapi/controller/project/ProjectLaborContractController.php b/app/adminapi/controller/project/ProjectLaborContractController.php new file mode 100644 index 000000000..5005ffada --- /dev/null +++ b/app/adminapi/controller/project/ProjectLaborContractController.php @@ -0,0 +1,108 @@ +dataLists(new ProjectLaborContractLists()); + } + + + /** + * @notes 添加劳动合同 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/25 14:35 + */ + public function add() + { + $params = (new ProjectLaborContractValidate())->post()->goCheck('add'); + $result = ProjectLaborContractLogic::add($params,$this->adminId); + if (true === $result) { + return $this->success('添加成功', [], 1, 1); + } + return $this->fail(ProjectLaborContractLogic::getError()); + } + + + /** + * @notes 编辑劳动合同 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/25 14:35 + */ + public function edit() + { + $params = (new ProjectLaborContractValidate())->post()->goCheck('edit'); + $result = ProjectLaborContractLogic::edit($params,$this->adminId); + if (true === $result) { + return $this->success('编辑成功', [], 1, 1); + } + return $this->fail(ProjectLaborContractLogic::getError()); + } + + + /** + * @notes 删除劳动合同 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/25 14:35 + */ + public function delete() + { + $params = (new ProjectLaborContractValidate())->post()->goCheck('delete'); + ProjectLaborContractLogic::delete($params); + return $this->success('删除成功', [], 1, 1); + } + + + /** + * @notes 获取劳动合同详情 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/25 14:35 + */ + public function detail() + { + $params = (new ProjectLaborContractValidate())->goCheck('detail'); + $result = ProjectLaborContractLogic::detail($params); + return $this->data($result); + } + + +} \ No newline at end of file diff --git a/app/adminapi/controller/project/ProjectPersonnelController.php b/app/adminapi/controller/project/ProjectPersonnelController.php index d1458d7a0..18912cf95 100644 --- a/app/adminapi/controller/project/ProjectPersonnelController.php +++ b/app/adminapi/controller/project/ProjectPersonnelController.php @@ -20,6 +20,7 @@ use app\adminapi\controller\BaseAdminController; use app\adminapi\lists\project\ProjectPersonnelLists; use app\adminapi\logic\project\ProjectPersonnelLogic; use app\adminapi\validate\project\ProjectPersonnelValidate; +use app\common\model\project\ProjectPersonnel; /** @@ -104,5 +105,33 @@ class ProjectPersonnelController extends BaseAdminController return $this->data($result); } + + public function listToProject(): \think\response\Json + { + $params = $this->request->get(['project_id','page_size','page_no']); + if(empty($params['project_id'])){ + return $this->fail('参数错误'); + } + $pageNo = empty($params['page_no']) ? 1 : $params['page_no']; + $pageSize = empty($params['page_size']) ? 15 : $params['page_size']; + $data = ProjectPersonnel::field('id,name,idcard,work_type,unit_price,daily_living_expenses') + ->where('project_id',$params['project_id']) + ->page($pageNo, $pageSize) + ->order(['id' => 'desc']) + ->select() + ->each(function($item){ + $item['work_type_text'] = $item->work_type_text; + return $item; + }) + ->toArray(); + $count = ProjectPersonnel::field('id,name,idcard,work_type,unit_price,daily_living_expenses')->where('project_id',$params['project_id'])->count(); + $result = [ + 'count' => $count, + 'page_no' => $pageNo, + 'page_size' => $pageSize, + 'lists' => $data + ]; + return $this->success('请求成功',$result); + } } \ No newline at end of file diff --git a/app/adminapi/lists/project/ProjectLaborContractLists.php b/app/adminapi/lists/project/ProjectLaborContractLists.php new file mode 100644 index 000000000..cf6d842a8 --- /dev/null +++ b/app/adminapi/lists/project/ProjectLaborContractLists.php @@ -0,0 +1,90 @@ + ['contract_status', 'contract_type', 'contract_title'], + ]; + } + + + /** + * @notes 获取劳动合同列表 + * @return array + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + * @author likeadmin + * @date 2023/12/25 14:35 + */ + public function lists(): array + { + return ProjectLaborContract::where($this->searchWhere) + ->field(['id', 'project_id', 'project_person_id', 'contract_status', 'contract_type', 'contract_title', 'signing_date', 'trial_start_date', 'trial_end_date', 'start_date', 'end_date', 'release_time', 'release_reason', 'remark', 'annex']) + ->limit($this->limitOffset, $this->limitLength) + ->order(['id' => 'desc']) + ->select()->each(function($item){ + $item['contract_status_text'] = $item->contract_status_text; + $item['contract_type_text'] = $item->contract_type_text; + $item['contract_title_text'] = $item->contract_title_text; + $project = Project::field('name,project_code')->where('id',$item['project_id'])->findOrEmpty(); + $person = ProjectPersonnel::field('name,idcard')->where('id',$item['project_person_id'])->findOrEmpty(); + $item['project_name'] = $project['name']; + $item['project_code'] = $project['project_code']; + $item['person_name'] = $person['name']; + $item['person_idcard'] = $person['idcard']; + return $item; + }) + ->toArray(); + } + + + /** + * @notes 获取劳动合同数量 + * @return int + * @author likeadmin + * @date 2023/12/25 14:35 + */ + public function count(): int + { + return ProjectLaborContract::where($this->searchWhere)->count(); + } + +} \ No newline at end of file diff --git a/app/adminapi/logic/project/ProjectLaborContractLogic.php b/app/adminapi/logic/project/ProjectLaborContractLogic.php new file mode 100644 index 000000000..745741a67 --- /dev/null +++ b/app/adminapi/logic/project/ProjectLaborContractLogic.php @@ -0,0 +1,150 @@ + $params['project_id'], + 'project_person_id' => $params['project_person_id'], + 'contract_status' => $params['contract_status'], + 'contract_type' => $params['contract_type'], + 'contract_title' => $params['contract_title'], + 'signing_date' => strtotime($params['signing_date']), + 'trial_start_date' => strtotime($params['trial_start_date']), + 'trial_end_date' => strtotime($params['trial_end_date']), + 'start_date' => strtotime($params['start_date']), + 'end_date' => strtotime($params['end_date']), + 'release_time' => strtotime($params['release_time']), + 'release_reason' => $params['release_reason'], + 'remark' => $params['remark'], + 'annex' => !empty($params['annex']) ? $params['annex'] : null, + '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/25 14:35 + */ + public static function edit(array $params,$admin_id): bool + { + Db::startTrans(); + try { + ProjectLaborContract::where('id', $params['id'])->update([ + 'project_id' => $params['project_id'], + 'project_person_id' => $params['project_person_id'], + 'contract_status' => $params['contract_status'], + 'contract_type' => $params['contract_type'], + 'contract_title' => $params['contract_title'], + 'signing_date' => strtotime($params['signing_date']), + 'trial_start_date' => strtotime($params['trial_start_date']), + 'trial_end_date' => strtotime($params['trial_end_date']), + 'start_date' => strtotime($params['start_date']), + 'end_date' => strtotime($params['end_date']), + 'release_time' => strtotime($params['release_time']), + 'release_reason' => $params['release_reason'], + 'remark' => $params['remark'], + 'annex' => !empty($params['annex']) ? $params['annex'] : null, + '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/25 14:35 + */ + public static function delete(array $params): bool + { + return ProjectLaborContract::destroy($params['id']); + } + + + /** + * @notes 获取劳动合同详情 + * @param $params + * @return array + * @author likeadmin + * @date 2023/12/25 14:35 + */ + public static function detail($params): array + { + $data = ProjectLaborContract::findOrEmpty($params['id']); + $data['contract_status_text'] = $data->contract_status_text; + $data['contract_type_text'] = $data->contract_type_text; + $data['contract_title_text'] = $data->contract_title_text; + $project = Project::field('name,project_code')->where('id',$data['project_id'])->findOrEmpty(); + $person = ProjectPersonnel::field('name,idcard')->where('id',$data['project_person_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['person_name'] = $person['name']; + $data['person_idcard'] = $person['idcard']; + $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/ProjectLaborContractValidate.php b/app/adminapi/validate/project/ProjectLaborContractValidate.php new file mode 100644 index 000000000..8be92b493 --- /dev/null +++ b/app/adminapi/validate/project/ProjectLaborContractValidate.php @@ -0,0 +1,174 @@ + 'require', + 'project_id' => 'require|checkProject', + 'project_person_id' => 'require|checkProjectPerson', + 'contract_status' => 'require|checkContractStatus', + 'contract_type' => 'require|checkContractType', + 'contract_title' => 'require|checkContractTitle', + 'signing_date' => 'require|dateFormat:Y-m-d', + 'start_date' => 'require|dateFormat:Y-m-d', + 'end_date' => 'require|dateFormat:Y-m-d', + 'trial_start_date' => 'dateFormat:Y-m-d', + 'trial_end_date' => 'dateFormat:Y-m-d', + 'release_time' => 'dateFormat:Y-m-d', + 'annex' => 'checkFile', + ]; + + protected $message = [ + 'id.require' => '缺少必要参数', + 'project_id.require' => '请选择项目', + 'project_person_id.require' => '请选择项目人员', + 'contract_status.require' => '请选择合同状态', + 'contract_type.require' => '请选择合同类别', + 'contract_title.require' => '请选择合同名称', + 'signing_date.require' => '请选择合同签定日期', + 'signing_date.dateFormat' => '合同签定日期格式错误', + 'start_date.require' => '请选择起始时间', + 'start_date.dateFormat' => '起始时间格式错误', + 'end_date.require' => '请选择终止时间', + 'end_date.dateFormat' => '终止时间格式错误', + 'trial_start_date.dateFormat' => '试用期起始日期格式错误', + 'trial_end_date.dateFormat' => '试用期结束日期格式错误', + 'release_time.dateFormat' => '解除时间格式错误', + ]; + + /** + * @notes 添加场景 + * @return ProjectLaborContractValidate + * @author likeadmin + * @date 2023/12/25 14:35 + */ + public function sceneAdd() + { + return $this->remove('id',true); + } + + + /** + * @notes 编辑场景 + * @return ProjectLaborContractValidate + * @author likeadmin + * @date 2023/12/25 14:35 + */ + public function sceneEdit() + {} + + + /** + * @notes 删除场景 + * @return ProjectLaborContractValidate + * @author likeadmin + * @date 2023/12/25 14:35 + */ + public function sceneDelete() + { + return $this->only(['id']); + } + + + /** + * @notes 详情场景 + * @return ProjectLaborContractValidate + * @author likeadmin + * @date 2023/12/25 14:35 + */ + 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 checkProjectPerson($value,$rule,$data): bool|string + { + $person = ProjectPersonnel::where('id',$value)->findOrEmpty(); + if($person->isEmpty()){ + return '项目人员不存在'; + } + if($person['project_id'] != $data['project_id']){ + return '项目人员无效'; + } + return true; + } + + public function checkContractStatus($value): bool|string + { + $dictData = DictData::where('type_value','labor_contract_status')->column('value'); + if(!in_array($value,$dictData)){ + return '合同状态无效'; + } + return true; + } + + public function checkContractType($value): bool|string + { + $dictData = DictData::where('type_value','labor_contract_type')->column('value'); + if(!in_array($value,$dictData)){ + return '合同类别无效'; + } + return true; + } + + public function checkContractTitle($value): bool|string + { + $dictData = DictData::where('type_value','labor_contract_name')->column('value'); + if(!in_array($value,$dictData)){ + return '合同名称无效'; + } + return true; + } + + public function checkFile($value): bool|string + { + if($value != ''){ + $file = json_decode($value,true); + if(empty($file)){ + return '附件必须是json数组'; + } + } + return true; + } + +} \ No newline at end of file diff --git a/app/common/model/project/ProjectLaborContract.php b/app/common/model/project/ProjectLaborContract.php new file mode 100644 index 000000000..d59b24316 --- /dev/null +++ b/app/common/model/project/ProjectLaborContract.php @@ -0,0 +1,86 @@ +column('name','value'); + return $dictData[$data['contract_status']]; + } + + public function getContractTypeTextAttr($value,$data): string + { + $dictData = DictData::where('type_value','labor_contract_type')->column('name','value'); + return $dictData[$data['contract_type']]; + } + + public function getContractTitleTextAttr($value,$data): string + { + $dictData = DictData::where('type_value','labor_contract_name')->column('name','value'); + return $dictData[$data['contract_title']]; + } +} \ No newline at end of file