diff --git a/app/adminapi/controller/bill/TransferBillController.php b/app/adminapi/controller/bill/TransferBillController.php new file mode 100644 index 000000000..370627bf5 --- /dev/null +++ b/app/adminapi/controller/bill/TransferBillController.php @@ -0,0 +1,108 @@ +dataLists(new TransferBillLists()); + } + + + /** + * @notes 添加 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/20 10:14 + */ + public function add() + { + $params = (new TransferBillValidate())->post()->goCheck('add'); + $result = TransferBillLogic::add($params); + if (true === $result) { + return $this->success('添加成功', [], 1, 1); + } + return $this->fail(TransferBillLogic::getError()); + } + + + /** + * @notes 编辑 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/20 10:14 + */ + public function edit() + { + $params = (new TransferBillValidate())->post()->goCheck('edit'); + $result = TransferBillLogic::edit($params); + if (true === $result) { + return $this->success('编辑成功', [], 1, 1); + } + return $this->fail(TransferBillLogic::getError()); + } + + + /** + * @notes 删除 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/20 10:14 + */ + public function delete() + { + $params = (new TransferBillValidate())->post()->goCheck('delete'); + TransferBillLogic::delete($params); + return $this->success('删除成功', [], 1, 1); + } + + + /** + * @notes 获取详情 + * @return \think\response\Json + * @author likeadmin + * @date 2023/12/20 10:14 + */ + public function detail() + { + $params = (new TransferBillValidate())->goCheck('detail'); + $result = TransferBillLogic::detail($params); + return $this->data($result); + } + + +} \ No newline at end of file diff --git a/app/adminapi/lists/bill/TransferBillLists.php b/app/adminapi/lists/bill/TransferBillLists.php new file mode 100644 index 000000000..9c4746fd6 --- /dev/null +++ b/app/adminapi/lists/bill/TransferBillLists.php @@ -0,0 +1,95 @@ + ['tb.org_id', 'tb.dept_id', 'tb.supplier_id', 'tb.procurement_contract_id', 'tb.acceptance_bill_id'], + ]; + } + + + /** + * @notes 获取列表 + * @return array + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + * @author likeadmin + * @date 2023/12/20 10:14 + */ + public function lists(): array + { + return Db::name('TransferBill')->alias('tb') + ->where($this->searchWhere) + ->whereNull('tb.delete_time') + ->leftJoin('orgs o','o.id = tb.org_id') + ->leftJoin('dept d','d.id = tb.dept_id') + ->leftJoin('procurement_contract pc','pc.id = tb.procurement_contract_id') + ->leftJoin('project p','p.id = pc.project_id') + ->leftJoin('acceptance_bill ab','ab.id = tb.acceptance_bill_id') + ->field('tb.*, d.name as dept_name, o.name as org_name, , p.name as project_name, pc.contract_no, pc.contract_name, ab.receipt_date, ab.bill_sn, ab.bill_type, ab.draft_acceptance_bank, ab.bill_due_date') + ->limit($this->limitOffset, $this->limitLength) + ->order(['tb.id' => 'desc']) + ->select()->each(function($item, $key){ + //关联数据后续添加 + $item['supplier_name'] = '供应商名称'; + return $item; + }) + ->toArray(); + } + + + /** + * @notes 获取数量 + * @return int + * @author likeadmin + * @date 2023/12/20 10:14 + */ + public function count(): int + { + return Db::name('TransferBill')->alias('tb') + ->where($this->searchWhere) + ->whereNull('tb.delete_time') + ->leftJoin('orgs o','o.id = tb.org_id') + ->leftJoin('dept d','d.id = tb.dept_id') + ->leftJoin('procurement_contract pc','pc.id = tb.procurement_contract_id') + ->leftJoin('project p','p.id = pc.project_id') + ->leftJoin('acceptance_bill ab','ab.id = tb.acceptance_bill_id')->count(); + } + +} \ No newline at end of file diff --git a/app/adminapi/logic/bill/TransferBillLogic.php b/app/adminapi/logic/bill/TransferBillLogic.php new file mode 100644 index 000000000..da14ca2ea --- /dev/null +++ b/app/adminapi/logic/bill/TransferBillLogic.php @@ -0,0 +1,133 @@ + $params['org_id'] ?? 0, + 'dept_id' => $params['dept_id'] ?? 0, + 'supplier_id' => $params['supplier_id'] ?? 0, + 'procurement_contract_id' => $params['procurement_contract_id'] ?? 0, + 'acceptance_bill_id' => $params['acceptance_bill_id'] ?? 0, + 'payment_date' => $params['payment_date'] ?? '', + 'amount' => $params['amount'] ?? 0, + 'amount_daxie' => $params['amount_daxie'] ?? '', + 'remark' => $params['remark'] ?? '', + 'annex' => $params['annex'] ?? '', + ]); + + 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/20 10:14 + */ + public static function edit(array $params): bool + { + Db::startTrans(); + try { + TransferBill::where('id', $params['id'])->update([ + 'org_id' => $params['org_id'] ?? 0, + 'dept_id' => $params['dept_id'] ?? 0, + 'supplier_id' => $params['supplier_id'] ?? 0, + 'procurement_contract_id' => $params['procurement_contract_id'] ?? 0, + 'acceptance_bill_id' => $params['acceptance_bill_id'] ?? 0, + 'payment_date' => $params['payment_date'] ?? '', + 'amount' => $params['amount'] ?? 0, + 'amount_daxie' => $params['amount_daxie'] ?? '', + 'remark' => $params['remark'] ?? '', + 'annex' => $params['annex'] ?? '', + ]); + + 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/20 10:14 + */ + public static function delete(array $params): bool + { + return TransferBill::destroy($params['id']); + } + + + /** + * @notes 获取详情 + * @param $params + * @return array + * @author likeadmin + * @date 2023/12/20 10:14 + */ + public static function detail($params): array + { + return TransferBill::findOrEmpty($params['id'])->toArray(); + $transferBill = TransferBill::findOrEmpty($params['id']); + $transferBill->org; + $transferBill->dept; + $transferBill->contract; + $transferBill->acceptance; + $transferBill->project = $transferBill->contract->project; + $transferBill->custom = $transferBill->project->custom; + unset($transferBill->contract->project, $transferBill->project->custom); + return $transferBill->toArray(); + } +} \ No newline at end of file diff --git a/app/adminapi/validate/bill/TransferBillValidate.php b/app/adminapi/validate/bill/TransferBillValidate.php new file mode 100644 index 000000000..4e0a52a4c --- /dev/null +++ b/app/adminapi/validate/bill/TransferBillValidate.php @@ -0,0 +1,104 @@ + 'require', + 'org_id' => 'require', + 'dept_id' => 'require', + 'supplier_id' => 'require', + 'procurement_contract_id' => 'require', + 'amount' => 'require', + ]; + + + /** + * 参数描述 + * @var string[] + */ + protected $field = [ + 'id' => 'id', + 'org_id' => '组织id', + 'dept_id' => '部门id', + 'supplier_id' => '客户id', + 'procurement_contract_id' => '采购/分包合同id', + 'amount' => '金额', + ]; + + + /** + * @notes 添加场景 + * @return TransferBillValidate + * @author likeadmin + * @date 2023/12/20 10:14 + */ + public function sceneAdd() + { + return $this->only(['org_id','dept_id','supplier_id','procurement_contract_id','amount']); + } + + + /** + * @notes 编辑场景 + * @return TransferBillValidate + * @author likeadmin + * @date 2023/12/20 10:14 + */ + public function sceneEdit() + { + return $this->only(['id','org_id','dept_id','supplier_id','procurement_contract_id','amount']); + } + + + /** + * @notes 删除场景 + * @return TransferBillValidate + * @author likeadmin + * @date 2023/12/20 10:14 + */ + public function sceneDelete() + { + return $this->only(['id']); + } + + + /** + * @notes 详情场景 + * @return TransferBillValidate + * @author likeadmin + * @date 2023/12/20 10:14 + */ + public function sceneDetail() + { + return $this->only(['id']); + } + +} \ No newline at end of file diff --git a/app/common/model/bill/TransferBill.php b/app/common/model/bill/TransferBill.php new file mode 100644 index 000000000..545471a27 --- /dev/null +++ b/app/common/model/bill/TransferBill.php @@ -0,0 +1,60 @@ +hasOne(\app\common\model\contract\ProcurementContract::class, 'id', 'procurement_contract_id'); + } + + public function org() + { + return $this->hasOne(\app\common\model\dept\Orgs::class, 'id', 'org_id'); + } + + public function dept() + { + return $this->hasOne(\app\common\model\dept\Dept::class, 'id', 'dept_id'); + } + + public function acceptance() + { + return $this->hasOne(\app\common\model\bill\AcceptanceBill::class, 'id', 'acceptance_bill_id'); + } + +} \ No newline at end of file diff --git a/app/common/model/project/Project.php b/app/common/model/project/Project.php index 2634e90ad..5e08e672b 100644 --- a/app/common/model/project/Project.php +++ b/app/common/model/project/Project.php @@ -51,4 +51,9 @@ class Project extends BaseModel return empty($value) ? '' : date('Y-m-d H:i:s', $value); } + public function custom() + { + return $this->belongsTo(\app\common\model\custom\Custom::class, 'custom_id'); + } + } \ No newline at end of file