From 364c491a9811035bdb79a38423db40909a13b7fc Mon Sep 17 00:00:00 2001
From: weiz <736250432@qq.com>
Date: Mon, 25 Mar 2024 15:48:19 +0800
Subject: [PATCH] update

---
 .../financial/FinancialInvoiceController.php  | 113 +++++++++++++
 .../financial/FinancialRefundController.php   | 108 ++++++++++++
 .../lists/financial/FinancialInvoiceLists.php |  93 +++++++++++
 .../lists/financial/FinancialRefundLists.php  |  89 ++++++++++
 .../logic/financial/FinancialInvoiceLogic.php | 156 ++++++++++++++++++
 .../logic/financial/FinancialRefundLogic.php  | 134 +++++++++++++++
 .../financial/FinancialInvoiceValidate.php    | 140 ++++++++++++++++
 .../financial/FinancialRefundValidate.php     | 129 +++++++++++++++
 .../model/financial/FinancialInvoice.php      |  40 +++++
 .../model/financial/FinancialRefund.php       |  38 +++++
 10 files changed, 1040 insertions(+)
 create mode 100644 app/adminapi/controller/financial/FinancialInvoiceController.php
 create mode 100644 app/adminapi/controller/financial/FinancialRefundController.php
 create mode 100644 app/adminapi/lists/financial/FinancialInvoiceLists.php
 create mode 100644 app/adminapi/lists/financial/FinancialRefundLists.php
 create mode 100644 app/adminapi/logic/financial/FinancialInvoiceLogic.php
 create mode 100644 app/adminapi/logic/financial/FinancialRefundLogic.php
 create mode 100644 app/adminapi/validate/financial/FinancialInvoiceValidate.php
 create mode 100644 app/adminapi/validate/financial/FinancialRefundValidate.php
 create mode 100644 app/common/model/financial/FinancialInvoice.php
 create mode 100644 app/common/model/financial/FinancialRefund.php

diff --git a/app/adminapi/controller/financial/FinancialInvoiceController.php b/app/adminapi/controller/financial/FinancialInvoiceController.php
new file mode 100644
index 000000000..76a80226a
--- /dev/null
+++ b/app/adminapi/controller/financial/FinancialInvoiceController.php
@@ -0,0 +1,113 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+	
+	
+	namespace app\adminapi\controller\financial;
+	
+	
+	use app\adminapi\controller\BaseAdminController;
+	use app\adminapi\lists\financial\FinancialInvoiceLists;
+	use app\adminapi\logic\financial\FinancialInvoiceLogic;
+	use app\adminapi\validate\financial\FinancialInvoiceValidate;
+	
+	
+	/**
+	 * 财务管理--开票台账控制器
+	 * Class FinancialInvoiceController
+	 * @package app\adminapi\controller\financial
+	 */
+	class FinancialInvoiceController extends BaseAdminController
+	{
+		
+		
+		/**
+		 * @notes 获取财务管理--开票台账列表
+		 * @return \think\response\Json
+		 * @author likeadmin
+		 * @date 2024/03/25 14:09
+		 */
+		public function lists()
+		{
+			return $this->dataLists(new FinancialInvoiceLists());
+		}
+		
+		
+		/**
+		 * @notes 添加财务管理--开票台账
+		 * @return \think\response\Json
+		 * @author likeadmin
+		 * @date 2024/03/25 14:09
+		 */
+		public function add()
+		{
+			$params = (new FinancialInvoiceValidate())->post()->goCheck('add');
+			$result = FinancialInvoiceLogic::add($params);
+			if (true === $result) {
+				return $this->success('添加成功', [], 1, 1);
+			}
+			return $this->fail(FinancialInvoiceLogic::getError());
+		}
+		
+		
+		/**
+		 * @notes 编辑财务管理--开票台账
+		 * @return \think\response\Json
+		 * @author likeadmin
+		 * @date 2024/03/25 14:09
+		 */
+		public function edit()
+		{
+			$params = (new FinancialInvoiceValidate())->post()->goCheck('edit');
+			$result = FinancialInvoiceLogic::edit($params);
+			if (true === $result) {
+				return $this->success('编辑成功', [], 1, 1);
+			}
+			return $this->fail(FinancialInvoiceLogic::getError());
+		}
+		
+		
+		/**
+		 * @notes 删除财务管理--开票台账
+		 * @return \think\response\Json
+		 * @author likeadmin
+		 * @date 2024/03/25 14:09
+		 */
+		public function delete()
+		{
+			$params = (new FinancialInvoiceValidate())->post()->goCheck('delete');
+			FinancialInvoiceLogic::delete($params);
+			return $this->success('删除成功', [], 1, 1);
+		}
+		
+		
+		/**
+		 * @notes 获取财务管理--开票台账详情
+		 * @return \think\response\Json
+		 * @author likeadmin
+		 * @date 2024/03/25 14:09
+		 */
+		public function detail()
+		{
+			$params = (new FinancialInvoiceValidate())->goCheck('detail');
+			$result = FinancialInvoiceLogic::detail($params);
+			return $this->data($result);
+		}
+		
+		public function datas()
+		{
+			return $this->data(FinancialInvoiceLogic::datas());
+		}
+		
+		
+	}
\ No newline at end of file
diff --git a/app/adminapi/controller/financial/FinancialRefundController.php b/app/adminapi/controller/financial/FinancialRefundController.php
new file mode 100644
index 000000000..e0d2a1208
--- /dev/null
+++ b/app/adminapi/controller/financial/FinancialRefundController.php
@@ -0,0 +1,108 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+
+namespace app\adminapi\controller\financial;
+
+
+use app\adminapi\controller\BaseAdminController;
+use app\adminapi\lists\financial\FinancialRefundLists;
+use app\adminapi\logic\financial\FinancialRefundLogic;
+use app\adminapi\validate\financial\FinancialRefundValidate;
+
+
+/**
+ * 财务管理--到账台账控制器
+ * Class FinancialRefundController
+ * @package app\adminapi\controller\financial
+ */
+class FinancialRefundController extends BaseAdminController
+{
+
+
+    /**
+     * @notes 获取财务管理--到账台账列表
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2024/03/25 14:46
+     */
+    public function lists()
+    {
+        return $this->dataLists(new FinancialRefundLists());
+    }
+
+
+    /**
+     * @notes 添加财务管理--到账台账
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2024/03/25 14:46
+     */
+    public function add()
+    {
+        $params = (new FinancialRefundValidate())->post()->goCheck('add');
+        $result = FinancialRefundLogic::add($params);
+        if (true === $result) {
+            return $this->success('添加成功', [], 1, 1);
+        }
+        return $this->fail(FinancialRefundLogic::getError());
+    }
+
+
+    /**
+     * @notes 编辑财务管理--到账台账
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2024/03/25 14:46
+     */
+    public function edit()
+    {
+        $params = (new FinancialRefundValidate())->post()->goCheck('edit');
+        $result = FinancialRefundLogic::edit($params);
+        if (true === $result) {
+            return $this->success('编辑成功', [], 1, 1);
+        }
+        return $this->fail(FinancialRefundLogic::getError());
+    }
+
+
+    /**
+     * @notes 删除财务管理--到账台账
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2024/03/25 14:46
+     */
+    public function delete()
+    {
+        $params = (new FinancialRefundValidate())->post()->goCheck('delete');
+        FinancialRefundLogic::delete($params);
+        return $this->success('删除成功', [], 1, 1);
+    }
+
+
+    /**
+     * @notes 获取财务管理--到账台账详情
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2024/03/25 14:46
+     */
+    public function detail()
+    {
+        $params = (new FinancialRefundValidate())->goCheck('detail');
+        $result = FinancialRefundLogic::detail($params);
+        return $this->data($result);
+    }
+
+
+}
\ No newline at end of file
diff --git a/app/adminapi/lists/financial/FinancialInvoiceLists.php b/app/adminapi/lists/financial/FinancialInvoiceLists.php
new file mode 100644
index 000000000..7ddb3d5c8
--- /dev/null
+++ b/app/adminapi/lists/financial/FinancialInvoiceLists.php
@@ -0,0 +1,93 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+	
+	namespace app\adminapi\lists\financial;
+	
+	
+	use app\adminapi\lists\BaseAdminDataLists;
+	use app\common\lists\ListsSearchInterface;
+	use app\common\model\cost_project\CostApprovedProject;
+	use app\common\model\financial\FinancialInvoice;
+	use app\common\model\financial\FinancialRefund;
+	
+	
+	/**
+	 * 财务管理--开票台账列表
+	 * Class FinancialInvoiceLists
+	 * @package app\adminapi\listsfinancial
+	 */
+	class FinancialInvoiceLists extends BaseAdminDataLists implements ListsSearchInterface
+	{
+		
+		
+		/**
+		 * @notes 设置搜索条件
+		 * @return \string[][]
+		 * @author likeadmin
+		 * @date 2024/03/25 14:09
+		 */
+		public function setSearch(): array
+		{
+			return [
+				'=' => ['contract_id', 'invoice_type'],
+				'%like%' => ['invoice_code', 'apply_company'],
+			
+			];
+		}
+		
+		
+		/**
+		 * @notes 获取财务管理--开票台账列表
+		 * @return array
+		 * @throws \think\db\exception\DataNotFoundException
+		 * @throws \think\db\exception\DbException
+		 * @throws \think\db\exception\ModelNotFoundException
+		 * @author likeadmin
+		 * @date 2024/03/25 14:09
+		 */
+		public function lists(): array
+		{
+			return FinancialInvoice::where($this->searchWhere)
+				->field(['id', 'contract_id', 'invoice_code', 'invoice_type', 'apply_amount', 'apply_company'])
+				->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['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['invoice_type_text'] = $data->invoice_type_text;
+					$refund = FinancialRefund::where('invoice_id', $data['id'])->findOrEmpty();
+					$data['is_refund'] = !$refund->isEmpty() ? '已到账' : '未到账';
+					$data['refund_amount'] = !$refund->isEmpty() ? FinancialRefund::where('invoice_id', $data['id'])->sum('amount') : 0.00;
+				})
+				->toArray();
+		}
+		
+		
+		/**
+		 * @notes 获取财务管理--开票台账数量
+		 * @return int
+		 * @author likeadmin
+		 * @date 2024/03/25 14:09
+		 */
+		public function count(): int
+		{
+			return FinancialInvoice::where($this->searchWhere)->count();
+		}
+		
+	}
\ No newline at end of file
diff --git a/app/adminapi/lists/financial/FinancialRefundLists.php b/app/adminapi/lists/financial/FinancialRefundLists.php
new file mode 100644
index 000000000..81f580eac
--- /dev/null
+++ b/app/adminapi/lists/financial/FinancialRefundLists.php
@@ -0,0 +1,89 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+	
+	namespace app\adminapi\lists\financial;
+	
+	
+	use app\adminapi\lists\BaseAdminDataLists;
+	use app\common\lists\ListsSearchInterface;
+	use app\common\model\cost_project\CostApprovedProject;
+	use app\common\model\financial\FinancialInvoice;
+	use app\common\model\financial\FinancialRefund;
+	
+	
+	/**
+	 * 财务管理--到账台账列表
+	 * Class FinancialRefundLists
+	 * @package app\adminapi\listsfinancial
+	 */
+	class FinancialRefundLists extends BaseAdminDataLists implements ListsSearchInterface
+	{
+		
+		
+		/**
+		 * @notes 设置搜索条件
+		 * @return \string[][]
+		 * @author likeadmin
+		 * @date 2024/03/25 14:46
+		 */
+		public function setSearch(): array
+		{
+			return [
+				'=' => ['contract_id', 'invoice_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 14:46
+		 */
+		public function lists(): array
+		{
+			return FinancialRefund::where($this->searchWhere)
+				->field(['id', 'contract_id', 'invoice_id', 'amount', 'date', 'remark', 'create_user', 'create_time'])
+				->limit($this->limitOffset, $this->limitLength)
+				->order(['id' => 'desc'])
+				->select()->each(function ($data) {
+					$contract = CostApprovedProject::field('contract_name,contract_type,part_a,part_b')->where('id', $data['contract_id'])->findOrEmpty();
+					$invoice = FinancialInvoice::field('invoice_code,apply_amount')->where('id', $data['invoice_id'])->findOrEmpty();
+					$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['invoice_code'] = $invoice['invoice_code'];
+					$data['apply_amount'] = $invoice['apply_amount'];
+				})
+				->toArray();
+		}
+		
+		
+		/**
+		 * @notes 获取财务管理--到账台账数量
+		 * @return int
+		 * @author likeadmin
+		 * @date 2024/03/25 14:46
+		 */
+		public function count(): int
+		{
+			return FinancialRefund::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
new file mode 100644
index 000000000..7f0bf0153
--- /dev/null
+++ b/app/adminapi/logic/financial/FinancialInvoiceLogic.php
@@ -0,0 +1,156 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+	
+	namespace app\adminapi\logic\financial;
+	
+	
+	use app\common\logic\BaseLogic;
+	use app\common\model\cost_project\CostApprovedProject;
+	use app\common\model\financial\FinancialInvoice;
+	use app\common\model\financial\FinancialRefund;
+	use think\facade\Db;
+	
+	
+	/**
+	 * 财务管理--开票台账逻辑
+	 * Class FinancialInvoiceLogic
+	 * @package app\adminapi\logic\financial
+	 */
+	class FinancialInvoiceLogic extends BaseLogic
+	{
+		
+		
+		/**
+		 * @notes 添加财务管理--开票台账
+		 * @param array $params
+		 * @return bool
+		 * @author likeadmin
+		 * @date 2024/03/25 14:09
+		 */
+		public static function add(array $params): bool
+		{
+			Db::startTrans();
+			try {
+				FinancialInvoice::create([
+					'contract_id' => $params['contract_id'],
+					'invoice_code' => data_unique_code('HTKP'),
+					'invoice_type' => $params['invoice_type'],
+					'apply_amount' => $params['apply_amount'],
+					'apply_company' => $params['apply_company'],
+					'apply_company_number' => $params['apply_company_number'],
+					'apply_company_address' => $params['apply_company_address'] ?? '',
+					'apply_company_telephone' => $params['apply_company_telephone'] ?? '',
+					'apply_company_bank' => $params['apply_company_bank'] ?? '',
+					'apply_company_account' => $params['apply_company_account'] ?? '',
+					'apply_contact' => $params['apply_contact'] ?? '',
+					'apply_email' => $params['apply_email'] ?? '',
+					'pay_type' => $params['pay_type'] ?? '',
+					'invoice_content' => $params['invoice_content'] ?? '',
+					'create_user' => $params['create_user'],
+					'create_time' => !empty($params['create_time']) ? strtotime($params['create_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 2024/03/25 14:09
+		 */
+		public static function edit(array $params): bool
+		{
+			Db::startTrans();
+			try {
+				FinancialInvoice::where('id', $params['id'])->update([
+					'contract_id' => $params['contract_id'],
+					'invoice_type' => $params['invoice_type'],
+					'apply_amount' => $params['apply_amount'],
+					'apply_company' => $params['apply_company'],
+					'apply_company_number' => $params['apply_company_number'],
+					'apply_company_address' => $params['apply_company_address'] ?? '',
+					'apply_company_telephone' => $params['apply_company_telephone'] ?? '',
+					'apply_company_bank' => $params['apply_company_bank'] ?? '',
+					'apply_company_account' => $params['apply_company_account'] ?? '',
+					'apply_contact' => $params['apply_contact'] ?? '',
+					'apply_email' => $params['apply_email'] ?? '',
+					'pay_type' => $params['pay_type'] ?? '',
+					'invoice_content' => $params['invoice_content'] ?? '',
+					'create_user' => $params['create_user'],
+					'create_time' => !empty($params['create_time']) ? strtotime($params['create_time']) : time(),
+					'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 2024/03/25 14:09
+		 */
+		public static function delete(array $params): bool
+		{
+			return FinancialInvoice::destroy($params['id']);
+		}
+		
+		
+		/**
+		 * @notes 获取财务管理--开票台账详情
+		 * @param $params
+		 * @return array
+		 * @author likeadmin
+		 * @date 2024/03/25 14:09
+		 */
+		public static function detail($params): array
+		{
+			$data = FinancialInvoice::withoutField('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('project_id', $data['project_id'])->sum('apply_amount');
+			$data['total_refund_amount'] = FinancialRefund::where('project_id', $data['project_id'])->sum('amount');
+			return $data->toArray();
+		}
+		
+		public static function datas()
+		{
+			return FinancialInvoice::field(['id', 'invoice_code'])->order(['id' => 'desc'])->select()->each(function ($data) {
+				$data['projectinfo'] = 'ID:' . $data['id'] . ' / 编号:' . $data['invoice_code'];
+			})->toArray();
+		}
+	}
\ No newline at end of file
diff --git a/app/adminapi/logic/financial/FinancialRefundLogic.php b/app/adminapi/logic/financial/FinancialRefundLogic.php
new file mode 100644
index 000000000..7818b5ae3
--- /dev/null
+++ b/app/adminapi/logic/financial/FinancialRefundLogic.php
@@ -0,0 +1,134 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+	
+	namespace app\adminapi\logic\financial;
+	
+	
+	use app\common\logic\BaseLogic;
+	use app\common\model\cost_project\CostApprovedProject;
+	use app\common\model\financial\FinancialInvoice;
+	use app\common\model\financial\FinancialRefund;
+	use think\facade\Db;
+	
+	
+	/**
+	 * 财务管理--到账台账逻辑
+	 * Class FinancialRefundLogic
+	 * @package app\adminapi\logic\financial
+	 */
+	class FinancialRefundLogic extends BaseLogic
+	{
+		
+		
+		/**
+		 * @notes 添加财务管理--到账台账
+		 * @param array $params
+		 * @return bool
+		 * @author likeadmin
+		 * @date 2024/03/25 14:46
+		 */
+		public static function add(array $params): bool
+		{
+			Db::startTrans();
+			try {
+				FinancialRefund::create([
+					'contract_id' => $params['contract_id'],
+					'invoice_id' => $params['invoice_id'],
+					'amount' => $params['amount'],
+					'date' => !empty($params['date']) ? strtotime($params['date']) : 0,
+					'remark' => $params['remark'] ?? '',
+					'create_user' => $params['create_user'],
+					'create_time' => !empty($params['create_time']) ? strtotime($params['create_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 2024/03/25 14:46
+		 */
+		public static function edit(array $params): bool
+		{
+			Db::startTrans();
+			try {
+				FinancialRefund::where('id', $params['id'])->update([
+					'contract_id' => $params['contract_id'],
+					'invoice_id' => $params['invoice_id'],
+					'amount' => $params['amount'],
+					'date' => !empty($params['date']) ? strtotime($params['date']) : 0,
+					'remark' => $params['remark'] ?? '',
+					'create_user' => $params['create_user'],
+					'create_time' => !empty($params['create_time']) ? strtotime($params['create_time']) : time(),
+					'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 2024/03/25 14:46
+		 */
+		public static function delete(array $params): bool
+		{
+			return FinancialRefund::destroy($params['id']);
+		}
+		
+		
+		/**
+		 * @notes 获取财务管理--到账台账详情
+		 * @param $params
+		 * @return array
+		 * @author likeadmin
+		 * @date 2024/03/25 14:46
+		 */
+		public static function detail($params): array
+		{
+			$data = FinancialRefund::withoutField('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();
+			$invoice = FinancialInvoice::field('invoice_code,apply_amount')->where('id', $data['invoice_id'])->findOrEmpty();
+			$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['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');//累计到账金额
+			return $data->toArray();
+		}
+	}
\ No newline at end of file
diff --git a/app/adminapi/validate/financial/FinancialInvoiceValidate.php b/app/adminapi/validate/financial/FinancialInvoiceValidate.php
new file mode 100644
index 000000000..ab1176dc9
--- /dev/null
+++ b/app/adminapi/validate/financial/FinancialInvoiceValidate.php
@@ -0,0 +1,140 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+	
+	namespace app\adminapi\validate\financial;
+	
+	
+	use app\common\model\cost_project\CostApprovedProject;
+	use app\common\model\dict\DictData;
+	use app\common\model\financial\FinancialInvoice;
+	use app\common\validate\BaseValidate;
+	
+	
+	/**
+	 * 财务管理--开票台账验证器
+	 * Class FinancialInvoiceValidate
+	 * @package app\adminapi\validate\financial
+	 */
+	class FinancialInvoiceValidate extends BaseValidate
+	{
+		
+		/**
+		 * 设置校验规则
+		 * @var string[]
+		 */
+		protected $rule = [
+			'id' => 'require|checkData',
+			'contract_id' => 'require|checkContract',
+			'invoice_type' => 'require|checkInvoiceType',
+			'apply_amount' => 'require|float|gt:0',
+			'apply_company' => 'require',
+			'apply_company_number' => 'require',
+			'apply_email' => 'email',
+			'create_user' => 'require',
+			'create_time' => 'require|dateFormat:Y-m-d H:i:s'
+		];
+		
+		
+		/**
+		 * 参数描述
+		 * @var string[]
+		 */
+		protected $field = [
+			'id' => 'id',
+			'contract_id' => '合同id',
+			'invoice_code' => '开票编号',
+			'invoice_type' => '发票类型',
+			'apply_amount' => '开票申请金额',
+			'apply_company' => '开票单位名称',
+			'apply_company_number' => '纳税人识别号',
+			'apply_company_address' => '开票单位注册地址',
+			'apply_company_telephone' => '开票单位电话',
+			'apply_company_bank' => '开户银行',
+			'apply_company_account' => '开户账号',
+			'apply_contact' => '开票联系人',
+			'pay_type' => '对应付款方式',
+			'invoice_content' => '开票内容',
+			'apply_email' => '发票接收邮箱',
+			'create_user' => '开票申请人',
+			'create_time' => '开票申请时间'
+		
+		];
+		
+		
+		/**
+		 * @notes 添加场景
+		 * @return FinancialInvoiceValidate
+		 * @author likeadmin
+		 * @date 2024/03/25 14:09
+		 */
+		public function sceneAdd()
+		{
+			return $this->remove('id', true);
+		}
+		
+		
+		/**
+		 * @notes 编辑场景
+		 * @return FinancialInvoiceValidate
+		 * @author likeadmin
+		 * @date 2024/03/25 14:09
+		 */
+		public function sceneEdit()
+		{
+			return $this->remove('id', 'checkData');
+		}
+		
+		
+		/**
+		 * @notes 删除场景
+		 * @return FinancialInvoiceValidate
+		 * @author likeadmin
+		 * @date 2024/03/25 14:09
+		 */
+		public function sceneDelete()
+		{
+			return $this->only(['id'])->remove('id', 'checkData');
+		}
+		
+		
+		/**
+		 * @notes 详情场景
+		 * @return FinancialInvoiceValidate
+		 * @author likeadmin
+		 * @date 2024/03/25 14:09
+		 */
+		public function sceneDetail()
+		{
+			return $this->only(['id']);
+		}
+		
+		public function checkData($value): bool|string
+		{
+			$data = FinancialInvoice::where('id', $value)->findOrEmpty();
+			return $data->isEmpty() ? '数据不存在' : true;
+		}
+		
+		public function checkContract($value): bool|string
+		{
+			$data = CostApprovedProject::where('id', $value)->findOrEmpty();
+			return $data->isEmpty() ? '合同信息不存在' : true;
+		}
+		
+		public function checkInvoiceType($value): bool|string
+		{
+			$dict = DictData::where('type_value', 'zjzx_invoice_type')->column('value');
+			return !in_array($value, $dict) ? '发票类型数据值无效' : true;
+		}
+		
+	}
\ No newline at end of file
diff --git a/app/adminapi/validate/financial/FinancialRefundValidate.php b/app/adminapi/validate/financial/FinancialRefundValidate.php
new file mode 100644
index 000000000..42f8b3610
--- /dev/null
+++ b/app/adminapi/validate/financial/FinancialRefundValidate.php
@@ -0,0 +1,129 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+	
+	namespace app\adminapi\validate\financial;
+	
+	
+	use app\common\model\cost_project\CostApprovedProject;
+	use app\common\model\financial\FinancialInvoice;
+	use app\common\model\financial\FinancialRefund;
+	use app\common\validate\BaseValidate;
+	
+	
+	/**
+	 * 财务管理--到账台账验证器
+	 * Class FinancialRefundValidate
+	 * @package app\adminapi\validate\financial
+	 */
+	class FinancialRefundValidate extends BaseValidate
+	{
+		
+		/**
+		 * 设置校验规则
+		 * @var string[]
+		 */
+		protected $rule = [
+			'id' => 'require|checkData',
+			'contract_id' => 'require|checkContract',
+			'invoice_id' => 'require|checkInvoice',
+			'amount' => 'require|float|gt:0',
+			'date' => 'require|dateFormat:Y-m-d',
+			'create_user' => 'require',
+			'create_time' => 'require|dateFormat:Y-m-d H:i:s',
+		
+		];
+		
+		
+		/**
+		 * 参数描述
+		 * @var string[]
+		 */
+		protected $field = [
+			'id' => 'id',
+			'contract_id' => '合同id',
+			'invoice_id' => '开票id',
+			'amount' => '本次到账金额',
+			'date' => '到账日期',
+			'remark' => '说明',
+			'create_user' => '登记人',
+			'create_time' => '登记时间',
+		];
+		
+		
+		/**
+		 * @notes 添加场景
+		 * @return FinancialRefundValidate
+		 * @author likeadmin
+		 * @date 2024/03/25 14:46
+		 */
+		public function sceneAdd()
+		{
+			return $this->remove('id', true);
+		}
+		
+		
+		/**
+		 * @notes 编辑场景
+		 * @return FinancialRefundValidate
+		 * @author likeadmin
+		 * @date 2024/03/25 14:46
+		 */
+		public function sceneEdit()
+		{
+			return $this->only(['id', 'contract_id', 'invoice_id', 'amount', 'date', 'remark', 'create_user', 'create_time']);
+		}
+		
+		
+		/**
+		 * @notes 删除场景
+		 * @return FinancialRefundValidate
+		 * @author likeadmin
+		 * @date 2024/03/25 14:46
+		 */
+		public function sceneDelete()
+		{
+			return $this->only(['id'])->remove('id', 'checkData');
+		}
+		
+		
+		/**
+		 * @notes 详情场景
+		 * @return FinancialRefundValidate
+		 * @author likeadmin
+		 * @date 2024/03/25 14:46
+		 */
+		public function sceneDetail()
+		{
+			return $this->only(['id']);
+		}
+		
+		public function checkData($value): bool|string
+		{
+			$data = FinancialRefund::where('id', $value)->findOrEmpty();
+			return $data->isEmpty() ? '数据不存在' : true;
+		}
+		
+		public function checkProject($value): bool|string
+		{
+			$data = CostApprovedProject::where('id', $value)->findOrEmpty();
+			return $data->isEmpty() ? '合同信息不存在' : true;
+		}
+		
+		public function checkInvoice($value, $rule, $params): bool|string
+		{
+			$data = FinancialInvoice::where('id', $value)->where('project_id', $params['project_id'])->findOrEmpty();
+			return $data->isEmpty() ? '开票单据信息不存在' : true;
+		}
+		
+	}
\ No newline at end of file
diff --git a/app/common/model/financial/FinancialInvoice.php b/app/common/model/financial/FinancialInvoice.php
new file mode 100644
index 000000000..bc025afc9
--- /dev/null
+++ b/app/common/model/financial/FinancialInvoice.php
@@ -0,0 +1,40 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+	
+	namespace app\common\model\financial;
+	
+	
+	use app\common\model\BaseModel;
+	use app\common\model\dict\DictData;
+	use think\model\concern\SoftDelete;
+	
+	
+	/**
+	 * 财务管理--开票台账模型
+	 * Class FinancialInvoice
+	 * @package app\common\model\financial
+	 */
+	class FinancialInvoice extends BaseModel
+	{
+		use SoftDelete;
+		
+		protected $name = 'financial_invoice';
+		protected $deleteTime = 'delete_time';
+		
+		public function getInvoiceTypeTextAttr($value, $data)
+		{
+			$dict = DictData::where('type_value', 'zjzx_invoice_type')->column('name', 'value');
+			return !empty($data['invoice_type']) ? $dict[$data['invoice_type']] : '';
+		}
+	}
\ No newline at end of file
diff --git a/app/common/model/financial/FinancialRefund.php b/app/common/model/financial/FinancialRefund.php
new file mode 100644
index 000000000..681ca5ef5
--- /dev/null
+++ b/app/common/model/financial/FinancialRefund.php
@@ -0,0 +1,38 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+	
+	namespace app\common\model\financial;
+	
+	
+	use app\common\model\BaseModel;
+	use think\model\concern\SoftDelete;
+	
+	
+	/**
+	 * 财务管理--到账台账模型
+	 * Class FinancialRefund
+	 * @package app\common\model\financial
+	 */
+	class FinancialRefund extends BaseModel
+	{
+		use SoftDelete;
+		
+		protected $name = 'financial_refund';
+		protected $deleteTime = 'delete_time';
+		
+		public function getDateAttr($value): string
+		{
+			return !empty($value) ? date('Y-m-d', $value) : '';
+		}
+	}
\ No newline at end of file