From 0c45b05141646e1695af40a65f1b0a3c244fb866 Mon Sep 17 00:00:00 2001 From: weiz Date: Fri, 29 Dec 2023 14:27:38 +0800 Subject: [PATCH] ProjectSubcontractSettlement --- ...ProjectSubcontractSettlementController.php | 75 ++++++++++ .../lists/project/ProjectSettlementLists.php | 3 +- .../ProjectSubcontractSettlementLists.php | 94 ++++++++++++ .../ProjectSubcontractSettlementLogic.php | 138 +++++++++++++++++ .../ProjectSubcontractSettlementValidate.php | 141 ++++++++++++++++++ .../project/ProjectSubcontractSettlement.php | 42 ++++++ 6 files changed, 491 insertions(+), 2 deletions(-) create mode 100644 app/adminapi/controller/project/ProjectSubcontractSettlementController.php create mode 100644 app/adminapi/lists/project/ProjectSubcontractSettlementLists.php create mode 100644 app/adminapi/logic/project/ProjectSubcontractSettlementLogic.php create mode 100644 app/adminapi/validate/project/ProjectSubcontractSettlementValidate.php create mode 100644 app/common/model/project/ProjectSubcontractSettlement.php diff --git a/app/adminapi/controller/project/ProjectSubcontractSettlementController.php b/app/adminapi/controller/project/ProjectSubcontractSettlementController.php new file mode 100644 index 000000000..5e4d93f37 --- /dev/null +++ b/app/adminapi/controller/project/ProjectSubcontractSettlementController.php @@ -0,0 +1,75 @@ +dataLists(new ProjectSubcontractSettlementLists()); + } + + /** + * @notes 添加分包结算 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/29 13:59 + */ + public function add() + { + $params = (new ProjectSubcontractSettlementValidate())->post()->goCheck('add'); + $result = ProjectSubcontractSettlementLogic::add($params,$this->adminId); + if (true === $result) { + return $this->success('添加成功', [], 1, 1); + } + return $this->fail(ProjectSubcontractSettlementLogic::getError()); + } + + /** + * @notes 获取分包结算详情 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/29 13:59 + */ + public function detail() + { + $params = (new ProjectSubcontractSettlementValidate())->goCheck('detail'); + $result = ProjectSubcontractSettlementLogic::detail($params); + return $this->data($result); + } + + +} \ No newline at end of file diff --git a/app/adminapi/lists/project/ProjectSettlementLists.php b/app/adminapi/lists/project/ProjectSettlementLists.php index db295e940..f9d8d0083 100644 --- a/app/adminapi/lists/project/ProjectSettlementLists.php +++ b/app/adminapi/lists/project/ProjectSettlementLists.php @@ -62,11 +62,10 @@ class ProjectSettlementLists extends BaseAdminDataLists implements ListsSearchIn ->limit($this->limitOffset, $this->limitLength) ->order(['id' => 'desc']) ->select()->each(function($item){ - $project = Project::field('name,project_code')->where('id',$item['project_id'])->findOrEmpty(); + $project = Project::field('name')->where('id',$item['project_id'])->findOrEmpty(); $contract = Contract::field('contract_name,contract_code,amount')->where('id',$item['contract_id'])->findOrEmpty(); $admin = Admin::field('name')->where('id',$item['add_user'])->findOrEmpty(); $item['project_name'] = $project['name']; - $item['project_code'] = $project['project_code']; $item['contract_name'] = $contract['contract_name']; $item['contract_code'] = $contract['contract_code']; $item['contract_amount'] = $contract['amount']; diff --git a/app/adminapi/lists/project/ProjectSubcontractSettlementLists.php b/app/adminapi/lists/project/ProjectSubcontractSettlementLists.php new file mode 100644 index 000000000..95cece445 --- /dev/null +++ b/app/adminapi/lists/project/ProjectSubcontractSettlementLists.php @@ -0,0 +1,94 @@ + ['settlement_code'], + ]; + } + + + /** + * @notes 获取分包结算列表 + * @return array + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + * @author likeadmin + * @date 2023/12/29 13:59 + */ + public function lists(): array + { + return ProjectSubcontractSettlement::where($this->searchWhere) + ->field(['id', 'settlement_code', 'project_id', 'contract_id', 'settlement_amount', 'settlement_amount_uppercase', 'remaining_amount', 'settlement_date', 'remark', 'add_user']) + ->limit($this->limitOffset, $this->limitLength) + ->order(['id' => 'desc']) + ->select()->each(function($item){ + $project = Project::field('name')->where('id',$item['project_id'])->findOrEmpty(); + $contract = ProcurementContract::field('supplier_id,amount,contract_no')->where('id',$item['contract_id'])->findOrEmpty(); + $supplier = Supplier::field('supplier_code,supplier_name')->where('id',$contract['supplier_id'])->findOrEmpty(); + $admin = Admin::field('name')->where('id',$item['add_user'])->findOrEmpty(); + $item['supplier_name'] = $supplier['supplier_name']; + $item['project_name'] = $project['name']; + $item['contract_code'] = $contract['contract_code']; + $item['contract_amount'] = $contract['amount']; + $item['add_user_name'] = $admin['name']; + unset($item['project_id'],$item['contract_id'],$item['add_user']); + return $item; + }) + ->toArray(); + } + + + /** + * @notes 获取分包结算数量 + * @return int + * @author likeadmin + * @date 2023/12/29 13:59 + */ + public function count(): int + { + return ProjectSubcontractSettlement::where($this->searchWhere)->count(); + } + +} \ No newline at end of file diff --git a/app/adminapi/logic/project/ProjectSubcontractSettlementLogic.php b/app/adminapi/logic/project/ProjectSubcontractSettlementLogic.php new file mode 100644 index 000000000..bb8b6449e --- /dev/null +++ b/app/adminapi/logic/project/ProjectSubcontractSettlementLogic.php @@ -0,0 +1,138 @@ + data_unique_code('分包结算'), + 'project_id' => $params['project_id'], + 'contract_id' => $params['contract_id'], + 'settlement_amount' => $params['settlement_amount'], + 'settlement_amount_uppercase' => $params['settlement_amount_uppercase'], + 'remaining_amount' => $params['remaining_amount'], + 'settlement_date' => strtotime($params['settlement_date']), + 'remark' => $params['remark'], + 'annex' => !empty($params['annex']) ? $params['annex'] : null, + 'add_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/29 13:59 + */ + public static function edit(array $params): bool + { + Db::startTrans(); + try { + ProjectSubcontractSettlement::where('id', $params['id'])->update([ + 'project_id' => $params['project_id'], + 'contract_id' => $params['contract_id'], + 'settlement_amount' => $params['settlement_amount'], + 'settlement_amount_uppercase' => $params['settlement_amount_uppercase'], + 'remaining_amount' => $params['remaining_amount'], + 'settlement_date' => strtotime($params['settlement_date']), + 'remark' => $params['remark'], + 'annex' => !empty($params['annex']) ? $params['annex'] : null, + 'add_user' => $params['add_user'], + '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/29 13:59 + */ + public static function delete(array $params): bool + { + return ProjectSubcontractSettlement::destroy($params['id']); + } + + + /** + * @notes 获取分包结算详情 + * @param $params + * @return array + * @author likeadmin + * @date 2023/12/29 13:59 + */ + public static function detail($params): array + { + $data = ProjectSubcontractSettlement::field('id,settlement_code,project_id,contract_id,settlement_amount,settlement_amount_uppercase,remaining_amount,settlement_date,remark,annex')->findOrEmpty($params['id'])->toArray(); + $project = Project::field('name,project_code')->where('id',$data['project_id'])->findOrEmpty(); + $contract = ProcurementContract::field('supplier_id,amount,amount_daxie,contract_no,contract_name')->where('id',$data['contract_id'])->findOrEmpty(); + $supplier = Supplier::field('supplier_code,supplier_name')->where('id',$contract['supplier_id'])->findOrEmpty(); + $data['project_name'] = $project['name']; + $data['project_code'] = $project['project_code']; + $data['contract_name'] = $contract['contract_name']; + $data['contract_code'] = $contract['contract_no']; + $data['supplier_name'] = $supplier['supplier_name']; + $data['supplier_code'] = $supplier['supplier_code']; + $data['contract_amount'] = $contract['amount']; + $data['contract_amount_uppercase'] = $contract['amount_daxie']; + return $data; + } +} \ No newline at end of file diff --git a/app/adminapi/validate/project/ProjectSubcontractSettlementValidate.php b/app/adminapi/validate/project/ProjectSubcontractSettlementValidate.php new file mode 100644 index 000000000..b5618d33d --- /dev/null +++ b/app/adminapi/validate/project/ProjectSubcontractSettlementValidate.php @@ -0,0 +1,141 @@ + 'require', + 'project_id' => 'require|checkProject', + 'contract_id' => 'require|checkContract', + 'settlement_amount' => 'require|float|egt:0', + 'settlement_amount_uppercase' => 'require', + 'remaining_amount' => 'require|float|egt:0', + 'settlement_date' => 'require|dateFormat:Y-m-d', + 'annex' => 'checkFile' + ]; + + protected $message = [ + 'id.require' => '缺少必要参数', + 'project_id.require' => '请选择项目', + 'contract_id.require' => '请选择合同', + 'settlement_amount.require' => '请填写结算金额', + 'settlement_amount.float' => '结算金额值必须是数字', + 'settlement_amount.egt' => '结算金额值必须大于等于0', + 'settlement_amount_uppercase.require' => '请填写合同金额大写', + 'remaining_amount.require' => '请填写结算差异', + 'remaining_amount.float' => '结算差异值必须是数字', + 'remaining_amount.egt' => '结算差异值必须大于等于0', + 'settlement_date.require' => '请选择结算日期', + 'settlement_date.dateFormat' => '结算日期格式错误', + ]; + + + /** + * @notes 添加场景 + * @return ProjectSubcontractSettlementValidate + * @author likeadmin + * @date 2023/12/29 13:59 + */ + public function sceneAdd() + { + return $this->only(['project_id','contract_id','settlement_amount','settlement_amount_uppercase','remaining_amount','settlement_date']); + } + + + /** + * @notes 编辑场景 + * @return ProjectSubcontractSettlementValidate + * @author likeadmin + * @date 2023/12/29 13:59 + */ + public function sceneEdit() + { + return $this->only(['id','project_id','contract_id','settlement_amount','settlement_amount_uppercase','remaining_amount','settlement_date']); + } + + + /** + * @notes 删除场景 + * @return ProjectSubcontractSettlementValidate + * @author likeadmin + * @date 2023/12/29 13:59 + */ + public function sceneDelete() + { + return $this->only(['id']); + } + + + /** + * @notes 详情场景 + * @return ProjectSubcontractSettlementValidate + * @author likeadmin + * @date 2023/12/29 13:59 + */ + 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 checkContract($value,$rule,$data): bool|string + { + $contract = ProcurementContract::where('id',$value)->where('contract_cate',2)->findOrEmpty(); + if($contract->isEmpty()){ + return '合同不存在'; + } + if($contract['project_id'] != $data['project_id']){ + 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/ProjectSubcontractSettlement.php b/app/common/model/project/ProjectSubcontractSettlement.php new file mode 100644 index 000000000..913921435 --- /dev/null +++ b/app/common/model/project/ProjectSubcontractSettlement.php @@ -0,0 +1,42 @@ +