From 394274483c4ffd36768ee59ccad53d9d62aca7fd Mon Sep 17 00:00:00 2001 From: weiz Date: Fri, 22 Dec 2023 18:03:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=96=BD=E5=B7=A5=E6=B1=87?= =?UTF-8?q?=E6=8A=A5=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../build/BuildReportController.php | 76 +++++++++++ .../build/BuildReportDetailController.php | 43 ++++++ .../lists/build/BuildReportDetailLists.php | 98 ++++++++++++++ app/adminapi/lists/build/BuildReportLists.php | 110 +++++++++++++++ app/adminapi/logic/build/BuildReportLogic.php | 112 ++++++++++++++++ .../validate/build/BuildReportValidate.php | 126 ++++++++++++++++++ app/common/model/build/BuildReport.php | 37 +++++ app/common/model/build/BuildReportDetail.php | 34 +++++ 8 files changed, 636 insertions(+) create mode 100644 app/adminapi/controller/build/BuildReportController.php create mode 100644 app/adminapi/controller/build/BuildReportDetailController.php create mode 100644 app/adminapi/lists/build/BuildReportDetailLists.php create mode 100644 app/adminapi/lists/build/BuildReportLists.php create mode 100644 app/adminapi/logic/build/BuildReportLogic.php create mode 100644 app/adminapi/validate/build/BuildReportValidate.php create mode 100644 app/common/model/build/BuildReport.php create mode 100644 app/common/model/build/BuildReportDetail.php diff --git a/app/adminapi/controller/build/BuildReportController.php b/app/adminapi/controller/build/BuildReportController.php new file mode 100644 index 000000000..6c5c341bd --- /dev/null +++ b/app/adminapi/controller/build/BuildReportController.php @@ -0,0 +1,76 @@ +dataLists(new BuildReportLists()); + } + + + /** + * @notes 添加施工汇报 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/22 16:08 + */ + public function add() + { + $params = (new BuildReportValidate())->post()->goCheck('add'); + $result = BuildReportLogic::add($params,$this->adminId); + if (true === $result) { + return $this->success('添加成功', [], 1, 1); + } + return $this->fail(BuildReportLogic::getError()); + } + + /** + * @notes 获取施工汇报详情 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/22 16:08 + */ + public function detail() + { + $params = (new BuildReportValidate())->goCheck('detail'); + $result = BuildReportLogic::detail($params); + return $this->data($result); + } + + +} \ No newline at end of file diff --git a/app/adminapi/controller/build/BuildReportDetailController.php b/app/adminapi/controller/build/BuildReportDetailController.php new file mode 100644 index 000000000..f9035abe9 --- /dev/null +++ b/app/adminapi/controller/build/BuildReportDetailController.php @@ -0,0 +1,43 @@ +dataLists(new BuildReportDetailLists()); + } + +} \ No newline at end of file diff --git a/app/adminapi/lists/build/BuildReportDetailLists.php b/app/adminapi/lists/build/BuildReportDetailLists.php new file mode 100644 index 000000000..b28d9105a --- /dev/null +++ b/app/adminapi/lists/build/BuildReportDetailLists.php @@ -0,0 +1,98 @@ +searchWhere) + ->field(['id', 'report_id', 'person_id', 'work_num', 'remark']) + ->limit($this->limitOffset, $this->limitLength) + ->order(['id' => 'desc']) + ->select()->each(function($item){ + $report = BuildReport::field('plan_id')->where('id',$item['report_id'])->findOrEmpty(); + $plan = BuildPlan::field('project_id,process_id,zy_code,price')->where('id',$report['plan_id'])->findOrEmpty(); + $project = Project::field('name')->where('id',$plan['project_id'])->findOrEmpty(); + $process = BuildProcessSettings::field('division_id,process_step_no,process_step')->where('id',$plan['process_id'])->findOrEmpty(); + $division = BuildDivision::field('subentry_engineering')->where('id',$process['division_id'])->findOrEmpty(); + $person = ProjectPersonnel::field('name,idcard,work_type')->where('id',$item['person_id'])->findOrEmpty(); + $item['zy_code'] = $plan['zy_code']; + $item['project_name'] = $project['name']; + $item['subentry_engineering'] = $division['subentry_engineering']; + $item['process_step_no'] = $process['process_step_no']; + $item['process_step'] = $process['process_step']; + $item['user_name'] = $person['name']; + $item['user_idcard'] = $person['idcard']; + $item['user_work_type'] = $person->work_type_text; + $item['price'] = $plan['price']; + $item['amount'] = $plan['price']*$item['work_num']; + }) + ->toArray(); + } + + + /** + * @notes 获取人工明细数量 + * @return int + * @author likeadmin + * @date 2023/12/22 16:10 + */ + public function count(): int + { + return BuildReportDetail::where($this->searchWhere)->count(); + } + +} \ No newline at end of file diff --git a/app/adminapi/lists/build/BuildReportLists.php b/app/adminapi/lists/build/BuildReportLists.php new file mode 100644 index 000000000..26d3d2323 --- /dev/null +++ b/app/adminapi/lists/build/BuildReportLists.php @@ -0,0 +1,110 @@ +searchWhere) + ->field(['id', 'plan_id', 'file', 'remark', 'add_user']) + ->limit($this->limitOffset, $this->limitLength) + ->order(['id' => 'desc']) + ->select()->each(function($data){ + $plan = BuildPlan::where('id',$data['plan_id'])->findOrEmpty(); + $project = Project::field('name')->where('id',$plan['project_id'])->findOrEmpty(); + $process = BuildProcessSettings::field('division_id,process_step_no,process_step,quality_control_points,file')->where('id',$plan['process_id'])->findOrEmpty(); + $division = BuildDivision::field('subentry_engineering')->where('id',$process['division_id'])->findOrEmpty(); + $projectMember = ProjectMember::field('admin_id')->where('id',$plan['project_member_id'])->findOrEmpty(); + $admin = Admin::field('name')->where('id','in',[$projectMember['admin_id'],$data['add_user']])->column('name','id'); + $data['zy_code'] = $plan['zy_code']; + $data['project_name'] = $project['name']; + $data['subentry_engineering'] = $division['subentry_engineering']; + $data['process_step'] = $process['process_step']; + $data['process_step_no'] = $process['process_step_no']; + $data['quality_control_points'] = $process['quality_control_points']; + $data['process_file'] = $process['file']; + $data['project_member_name'] = $admin[$projectMember['admin_id']]; + $data['work_user'] = $plan['work_user']; + $data['work_content'] = $plan['work_content']; + $data['plan_start_date'] = $plan['plan_start_date']; + $data['plan_end_date'] = $plan['plan_end_date']; + $data['unit'] = $plan['unit']; + $data['workload'] = $plan['workload']; + $data['price'] = $plan['price']; + $data['amount'] = $plan['amount']; + $data['today_workload'] = BuildReportDetail::where('report_id',$data['id'])->sum('work_num'); + $data['residue_workload'] = $data['workload'] - $data['today_workload']; + $data['add_user_name'] = $admin[$data['add_user']]; + }) + ->toArray(); + } + + + /** + * @notes 获取施工汇报数量 + * @return int + * @author likeadmin + * @date 2023/12/22 16:08 + */ + public function count(): int + { + return BuildReport::where($this->searchWhere)->count(); + } + +} \ No newline at end of file diff --git a/app/adminapi/logic/build/BuildReportLogic.php b/app/adminapi/logic/build/BuildReportLogic.php new file mode 100644 index 000000000..ca40f5405 --- /dev/null +++ b/app/adminapi/logic/build/BuildReportLogic.php @@ -0,0 +1,112 @@ + $params['plan_id'], + 'file' => $params['file'], + 'remark' => $params['remark'], + 'add_user' => $admin_id, + ]); + foreach($detail as $v){ + BuildReportDetail::create([ + 'report_id' => $reportRes->id, + 'person_id' => $v['person_id'], + 'work_num' => $v['work_num'], + 'remark' => $v['remark']??'' + ]); + } + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + self::setError($e->getMessage()); + return false; + } + } + + /** + * @notes 获取施工汇报详情 + * @param $params + * @return array + * @author likeadmin + * @date 2023/12/22 16:08 + */ + public static function detail($params): array + { + $data = BuildReport::findOrEmpty($params['id'])->toArray(); + if(empty($data)) return []; + $plan = BuildPlan::where('id',$data['plan_id'])->findOrEmpty(); + $project = Project::field('name')->where('id',$plan['project_id'])->findOrEmpty(); + $process = BuildProcessSettings::field('division_id,process_step_no,process_step,quality_control_points,file')->where('id',$plan['process_id'])->findOrEmpty(); + $division = BuildDivision::field('subentry_engineering')->where('id',$process['division_id'])->findOrEmpty(); + $projectMember = ProjectMember::field('admin_id')->where('id',$plan['project_member_id'])->findOrEmpty(); + $admin = Admin::field('name')->where('id','in',[$projectMember['admin_id'],$data['add_user']])->column('name','id'); + $data['zy_code'] = $plan['zy_code']; + $data['project_name'] = $project['name']; + $data['subentry_engineering'] = $division['subentry_engineering']; + $data['process_step'] = $process['process_step']; + $data['process_step_no'] = $process['process_step_no']; + $data['quality_control_points'] = $process['quality_control_points']; + $data['process_file'] = $process['file']; + $data['project_member_name'] = $admin[$projectMember['admin_id']]; + $data['work_user'] = $plan['work_user']; + $data['work_content'] = $plan['work_content']; + $data['plan_start_date'] = $plan['plan_start_date']; + $data['plan_end_date'] = $plan['plan_end_date']; + $data['unit'] = $plan['unit']; + $data['workload'] = $plan['workload']; + $data['price'] = $plan['price']; + $data['amount'] = $plan['amount']; + $data['today_workload'] = BuildReportDetail::where('report_id',$data['id'])->sum('work_num'); + $data['residue_workload'] = $data['workload'] - $data['today_workload']; + $data['add_user_name'] = $admin[$data['add_user']]; + return $data; + } +} \ No newline at end of file diff --git a/app/adminapi/validate/build/BuildReportValidate.php b/app/adminapi/validate/build/BuildReportValidate.php new file mode 100644 index 000000000..111d232fd --- /dev/null +++ b/app/adminapi/validate/build/BuildReportValidate.php @@ -0,0 +1,126 @@ + 'require', + 'plan_id' => 'require|checkPlan', + 'person_detail' => 'require|checkDetail', + 'file' => 'require|checkFile', + ]; + + protected $message = [ + 'id.require' => '缺少必要参数', + 'plan_id.require' => '请选择施工计划', + 'person_detail.require' => '请填写人工明细', + 'file.require' => '请上传现场照片', + ]; + + + /** + * @notes 添加场景 + * @return BuildReportValidate + * @author likeadmin + * @date 2023/12/22 16:08 + */ + public function sceneAdd() + { + return $this->remove('id',true); + } + + + /** + * @notes 编辑场景 + * @return BuildReportValidate + * @author likeadmin + * @date 2023/12/22 16:08 + */ + public function sceneEdit() + {} + + + /** + * @notes 删除场景 + * @return BuildReportValidate + * @author likeadmin + * @date 2023/12/22 16:08 + */ + public function sceneDelete() + { + return $this->only(['id']); + } + + + /** + * @notes 详情场景 + * @return BuildReportValidate + * @author likeadmin + * @date 2023/12/22 16:08 + */ + public function sceneDetail() + { + return $this->only(['id']); + } + + public function checkPlan($value): bool|string + { + $data = BuildPlan::where('id',$value)->findOrEmpty(); + if($data->isEmpty()){ + return '施工计划不存在'; + } + return true; + } + + public function checkFile($value): bool|string + { + $file = json_decode($value,true); + if(empty($file)){ + return '附件必须是json数组'; + } + return true; + } + + public function checkDetail($value): bool|string + { + $person_detail = json_decode($value,true); + if(empty($person_detail) || !is_array($person_detail)){ + return '人工明细数据格式错误'; + } + foreach($person_detail as $v) { + if(empty($v['person_id']) || empty($v['work_num'])){ + return '人工明细缺少必要参数'; + } + } + return true; + } + +} \ No newline at end of file diff --git a/app/common/model/build/BuildReport.php b/app/common/model/build/BuildReport.php new file mode 100644 index 000000000..8d4b7f011 --- /dev/null +++ b/app/common/model/build/BuildReport.php @@ -0,0 +1,37 @@ +