From 8e49ffd5304b0839757906dfcacb68dea604ec48 Mon Sep 17 00:00:00 2001 From: weiz <736250432@qq.com> Date: Mon, 25 Mar 2024 17:22:00 +0800 Subject: [PATCH] update --- .../CostApprovedProjectController.php | 16 ++- .../FinancialSettlementController.php | 108 +++++++++++++++ .../financial/FinancialSettlementLists.php | 91 +++++++++++++ .../logic/financial/FinancialInvoiceLogic.php | 4 +- .../logic/financial/FinancialRefundLogic.php | 4 +- .../financial/FinancialSettlementLogic.php | 128 ++++++++++++++++++ .../financial/FinancialSettlementValidate.php | 119 ++++++++++++++++ .../model/financial/FinancialSettlement.php | 34 +++++ 8 files changed, 499 insertions(+), 5 deletions(-) create mode 100644 app/adminapi/controller/financial/FinancialSettlementController.php create mode 100644 app/adminapi/lists/financial/FinancialSettlementLists.php create mode 100644 app/adminapi/logic/financial/FinancialSettlementLogic.php create mode 100644 app/adminapi/validate/financial/FinancialSettlementValidate.php create mode 100644 app/common/model/financial/FinancialSettlement.php diff --git a/app/adminapi/controller/cost_project/CostApprovedProjectController.php b/app/adminapi/controller/cost_project/CostApprovedProjectController.php index 9fd17f7a4..6ad0b3ed9 100644 --- a/app/adminapi/controller/cost_project/CostApprovedProjectController.php +++ b/app/adminapi/controller/cost_project/CostApprovedProjectController.php @@ -24,6 +24,7 @@ use app\common\model\cost_project\CostApprovedProject; use app\common\model\financial\FinancialInvoice; use app\common\model\financial\FinancialRefund; + use app\common\model\financial\FinancialSettlement; /** @@ -78,7 +79,20 @@ //到账金额 $data['total_refund_amount'] = FinancialRefund::where('contract_id', $data['id'])->sum('amount'); //结算金额 -// $data['total_settlement_amount'] = FinancialSettlement::where('contract_id',$data['id'])->sum('amount'); + $data['total_settlement_amount'] = FinancialSettlement::where('contract_id', $data['id'])->sum('amount'); + $financial_settlement = FinancialSettlement::where('contract_id', $data['id'])->order('id desc')->findOrEmpty(); + if ($financial_settlement->isEmpty()) { + $data['is_settlement'] = 0; + $data['settlement_date'] = ''; + } else { + if ($data['total_settlement_amount'] >= $data['money']) { + $data['is_settlement'] = 2; + $data['settlement_date'] = $financial_settlement['date']; + } else { + $data['is_settlement'] = 1; + $data['settlement_date'] = $financial_settlement['date']; + } + } }) ->toArray(); $count = CostApprovedProject::where($where)->count(); diff --git a/app/adminapi/controller/financial/FinancialSettlementController.php b/app/adminapi/controller/financial/FinancialSettlementController.php new file mode 100644 index 000000000..c930496ea --- /dev/null +++ b/app/adminapi/controller/financial/FinancialSettlementController.php @@ -0,0 +1,108 @@ +dataLists(new FinancialSettlementLists()); + } + + + /** + * @notes 添加财务管理--项目结算 + * @return \think\response\Json + * @author likeadmin + * @date 2024/03/25 17:04 + */ + public function add() + { + $params = (new FinancialSettlementValidate())->post()->goCheck('add'); + $result = FinancialSettlementLogic::add($params); + if (true === $result) { + return $this->success('添加成功', [], 1, 1); + } + return $this->fail(FinancialSettlementLogic::getError()); + } + + + /** + * @notes 编辑财务管理--项目结算 + * @return \think\response\Json + * @author likeadmin + * @date 2024/03/25 17:04 + */ + public function edit() + { + $params = (new FinancialSettlementValidate())->post()->goCheck('edit'); + $result = FinancialSettlementLogic::edit($params); + if (true === $result) { + return $this->success('编辑成功', [], 1, 1); + } + return $this->fail(FinancialSettlementLogic::getError()); + } + + + /** + * @notes 删除财务管理--项目结算 + * @return \think\response\Json + * @author likeadmin + * @date 2024/03/25 17:04 + */ + public function delete() + { + $params = (new FinancialSettlementValidate())->post()->goCheck('delete'); + FinancialSettlementLogic::delete($params); + return $this->success('删除成功', [], 1, 1); + } + + + /** + * @notes 获取财务管理--项目结算详情 + * @return \think\response\Json + * @author likeadmin + * @date 2024/03/25 17:04 + */ + public function detail() + { + $params = (new FinancialSettlementValidate())->goCheck('detail'); + $result = FinancialSettlementLogic::detail($params); + return $this->data($result); + } + + +} \ No newline at end of file diff --git a/app/adminapi/lists/financial/FinancialSettlementLists.php b/app/adminapi/lists/financial/FinancialSettlementLists.php new file mode 100644 index 000000000..1f04568f8 --- /dev/null +++ b/app/adminapi/lists/financial/FinancialSettlementLists.php @@ -0,0 +1,91 @@ + ['contract_id'], + ]; + } + + + /** + * @notes 获取财务管理--项目结算列表 + * @return array + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + * @author likeadmin + * @date 2024/03/25 17:04 + */ + public function lists(): array + { + return FinancialSettlement::where($this->searchWhere) + ->field(['id', 'contract_id', 'amount', 'date']) + ->limit($this->limitOffset, $this->limitLength) + ->order(['id' => 'desc']) + ->select()->each(function ($data) { + $contract = CostApprovedProject::field('contract_name,contract_type,part_a,part_b,money,create_time')->where('id', $data['contract_id'])->findOrEmpty(); + $data['invoice_type_text'] = $data->invoice_type_text; + $data['contract_name'] = $contract['contract_name']; + $data['contract_type'] = $contract->contract_type_text; + $data['part_a'] = $contract['part_a']; + $data['part_b'] = $contract['part_b']; + $data['sign_money'] = $contract['money']; + $data['sign_time'] = $contract['create_time']; + $data['total_invoice_amount'] = FinancialInvoice::where('contract_id', $data['contract_id'])->sum('apply_amount'); + $data['total_refund_amount'] = FinancialRefund::where('contract_id', $data['contract_id'])->sum('amount'); + }) + ->toArray(); + } + + + /** + * @notes 获取财务管理--项目结算数量 + * @return int + * @author likeadmin + * @date 2024/03/25 17:04 + */ + public function count(): int + { + return FinancialSettlement::where($this->searchWhere)->count(); + } + + } \ No newline at end of file diff --git a/app/adminapi/logic/financial/FinancialInvoiceLogic.php b/app/adminapi/logic/financial/FinancialInvoiceLogic.php index 7f0bf0153..50c69ff42 100644 --- a/app/adminapi/logic/financial/FinancialInvoiceLogic.php +++ b/app/adminapi/logic/financial/FinancialInvoiceLogic.php @@ -142,8 +142,8 @@ $data['part_b'] = $contract['part_b']; $data['sign_money'] = $contract['money']; $data['sign_time'] = $contract['create_time']; - $data['total_invoice_amount'] = FinancialInvoice::where('project_id', $data['project_id'])->sum('apply_amount'); - $data['total_refund_amount'] = FinancialRefund::where('project_id', $data['project_id'])->sum('amount'); + $data['total_invoice_amount'] = FinancialInvoice::where('contract_id', $data['contract_id'])->sum('apply_amount'); + $data['total_refund_amount'] = FinancialRefund::where('contract_id', $data['contract_id'])->sum('amount'); return $data->toArray(); } diff --git a/app/adminapi/logic/financial/FinancialRefundLogic.php b/app/adminapi/logic/financial/FinancialRefundLogic.php index 7818b5ae3..c6e998cd4 100644 --- a/app/adminapi/logic/financial/FinancialRefundLogic.php +++ b/app/adminapi/logic/financial/FinancialRefundLogic.php @@ -127,8 +127,8 @@ $data['sign_time'] = $contract['create_time']; $data['invoice_code'] = $invoice['invoice_code']; $data['apply_amount'] = $invoice['apply_amount']; - $data['total_invoice_amount'] = FinancialInvoice::where('project_id', $data['project_id'])->sum('apply_amount');//累计开票金额 - $data['total_refund_amount'] = FinancialRefund::where('project_id', $data['project_id'])->sum('amount');//累计到账金额 + $data['total_invoice_amount'] = FinancialInvoice::where('contract_id', $data['contract_id'])->sum('apply_amount');//累计开票金额 + $data['total_refund_amount'] = FinancialRefund::where('contract_id', $data['contract_id'])->sum('amount');//累计到账金额 return $data->toArray(); } } \ No newline at end of file diff --git a/app/adminapi/logic/financial/FinancialSettlementLogic.php b/app/adminapi/logic/financial/FinancialSettlementLogic.php new file mode 100644 index 000000000..c2c09c6a7 --- /dev/null +++ b/app/adminapi/logic/financial/FinancialSettlementLogic.php @@ -0,0 +1,128 @@ + $params['contract_id'], + 'amount' => $params['amount'], + 'date' => !empty($params['date']) ? strtotime($params['date']) : 0, + 'remark' => $params['remark'] ?? '', + 'annex' => $params['annex'] ? json_encode($params['annex']) : null, + ]); + + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + self::setError($e->getMessage()); + return false; + } + } + + + /** + * @notes 编辑财务管理--项目结算 + * @param array $params + * @return bool + * @author likeadmin + * @date 2024/03/25 17:04 + */ + public static function edit(array $params): bool + { + Db::startTrans(); + try { + FinancialSettlement::where('id', $params['id'])->update([ + 'contract_id' => $params['contract_id'], + 'amount' => $params['amount'], + 'date' => !empty($params['date']) ? strtotime($params['date']) : 0, + 'remark' => $params['remark'] ?? '', + 'annex' => $params['annex'] ? json_encode($params['annex']) : null, + ]); + + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + self::setError($e->getMessage()); + return false; + } + } + + + /** + * @notes 删除财务管理--项目结算 + * @param array $params + * @return bool + * @author likeadmin + * @date 2024/03/25 17:04 + */ + public static function delete(array $params): bool + { + return FinancialSettlement::destroy($params['id']); + } + + + /** + * @notes 获取财务管理--项目结算详情 + * @param $params + * @return array + * @author likeadmin + * @date 2024/03/25 17:04 + */ + public static function detail($params): array + { + $data = FinancialSettlement::withoutField('create_time,update_time,delete_time')->findOrEmpty($params['id']); + $contract = CostApprovedProject::field('contract_name,contract_type,part_a,part_b,money,create_time')->where('id', $data['contract_id'])->findOrEmpty(); + $data['invoice_type_text'] = $data->invoice_type_text; + $data['contract_name'] = $contract['contract_name']; + $data['contract_type'] = $contract->contract_type_text; + $data['part_a'] = $contract['part_a']; + $data['part_b'] = $contract['part_b']; + $data['sign_money'] = $contract['money']; + $data['sign_time'] = $contract['create_time']; + $data['total_invoice_amount'] = FinancialInvoice::where('contract_id', $data['contract_id'])->sum('apply_amount'); + $data['total_refund_amount'] = FinancialRefund::where('contract_id', $data['contract_id'])->sum('amount'); + return $data->toArray(); + } + } \ No newline at end of file diff --git a/app/adminapi/validate/financial/FinancialSettlementValidate.php b/app/adminapi/validate/financial/FinancialSettlementValidate.php new file mode 100644 index 000000000..998b4644e --- /dev/null +++ b/app/adminapi/validate/financial/FinancialSettlementValidate.php @@ -0,0 +1,119 @@ + 'require|checkData', + 'contract_id' => 'require|checkContract', + 'amount' => 'require', + 'date' => 'require', + 'annex' => 'checkAnnex' + + ]; + + + /** + * 参数描述 + * @var string[] + */ + protected $field = [ + 'id' => 'id', + 'contract_id' => '合同id', + 'project_id' => '项目id', + 'amount' => '结算金额', + 'date' => '结算日期', + 'remark' => '结算备注', + + ]; + + + /** + * @notes 添加场景 + * @return FinancialSettlementValidate + * @author likeadmin + * @date 2024/03/25 17:04 + */ + public function sceneAdd() + { + return $this->only(['contract_id', 'amount', 'date', 'remark', 'annex']); + } + + + /** + * @notes 编辑场景 + * @return FinancialSettlementValidate + * @author likeadmin + * @date 2024/03/25 17:04 + */ + public function sceneEdit() + { + return $this->only(['id', 'contract_id', 'amount', 'date', 'remark', 'annex']); + } + + + /** + * @notes 删除场景 + * @return FinancialSettlementValidate + * @author likeadmin + * @date 2024/03/25 17:04 + */ + public function sceneDelete() + { + return $this->only(['id'])->remove('id', 'checkData'); + } + + + /** + * @notes 详情场景 + * @return FinancialSettlementValidate + * @author likeadmin + * @date 2024/03/25 17:04 + */ + public function sceneDetail() + { + return $this->only(['id']); + } + + public function checkData($value): bool|string + { + $data = FinancialSettlement::where('id', $value)->findOrEmpty(); + return $data->isEmpty() ? '数据不存在' : true; + } + + public function checkProject($value): bool|string + { + $data = CostApprovedProject::where('id', $value)->findOrEmpty(); + return $data->isEmpty() ? '合同信息不存在' : true; + } + + } \ No newline at end of file diff --git a/app/common/model/financial/FinancialSettlement.php b/app/common/model/financial/FinancialSettlement.php new file mode 100644 index 000000000..cc29ac8ee --- /dev/null +++ b/app/common/model/financial/FinancialSettlement.php @@ -0,0 +1,34 @@ +