From 99cdb5e15019bd9e75ff16828a604f5791cf3d1c Mon Sep 17 00:00:00 2001 From: luofei <604446095@qq.com> Date: Fri, 7 Jun 2024 10:05:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=B4=A2=E5=8A=A1=E8=B4=A6?= =?UTF-8?q?=E5=8D=95=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/common/lists/StoreBillLists.php | 92 +++++++++++++++++++ .../finance/StoreBillController.php | 71 ++++++++++++++ 2 files changed, 163 insertions(+) create mode 100644 app/common/lists/StoreBillLists.php create mode 100644 app/store/controller/finance/StoreBillController.php diff --git a/app/common/lists/StoreBillLists.php b/app/common/lists/StoreBillLists.php new file mode 100644 index 000000000..1cff791e5 --- /dev/null +++ b/app/common/lists/StoreBillLists.php @@ -0,0 +1,92 @@ +params['type'] = !empty($this->params['type']) ? $this->params['type'] : 1; + return StoreFinanceFlow::where('1=1') + ->when(!empty($this->request->adminInfo['store_id']), function ($query) { + $query->where('store_id', $this->request->adminInfo['store_id']); + }) + ->when(!empty($this->params['start_time']), function ($query) { + $query->whereTime('create_time', '>=', $this->params['start_time']); + }) + ->when(!empty($this->params['end_time']), function ($query) { + if ($this->params['end_time'] == $this->params['start_time']) { + $this->params['end_time'] = strtotime($this->params['end_time']) + 86399; + } + $query->whereTime('create_time', '<=', $this->params['end_time']); + }) + ->when(!empty($this->params['type']), function (Query $query) { + $income = 1; + $expense = 0; + if (!empty($this->request->adminInfo['store_id'])) { + $income = 0; + $expense = 1; + } + switch ($this->params['type']) { + case 2: + $query->fieldRaw("*,sum(IF(financial_pm=$income,number,0)) as income,sum(IF(financial_pm=$expense,number,0)) as expense,YEAR(FROM_UNIXTIME(create_time)) as year,WEEK(FROM_UNIXTIME(create_time), 1) as week")->group("year,week"); + break; + case 3: + $query->fieldRaw("*,sum(IF(financial_pm=$income,number,0)) as income,sum(IF(financial_pm=$expense,number,0)) as expense,FROM_UNIXTIME(create_time, '%Y-%m') as time")->group("time"); + break; + default: + $query->fieldRaw("*,sum(IF(financial_pm=$income,number,0)) as income,sum(IF(financial_pm=$expense,number,0)) as expense,FROM_UNIXTIME(create_time, '%Y-%m-%d') as time")->group("time"); + break; + } + }) + ->limit($this->limitOffset, $this->limitLength) + ->order(['id' => 'desc']) + ->select()->each(function ($item) { + $item->month = date('m', strtotime($item->create_time)); + }) + ->toArray(); + } + + public function count(): int + { + return StoreFinanceFlow::where('1=1') + ->when(!empty($this->request->adminInfo['store_id']), function ($query) { + $query->where('store_id', $this->request->adminInfo['store_id']); + }) + ->when(!empty($this->params['start_time']), function ($query) { + $query->whereTime('create_time', '>=', $this->params['start_time']); + }) + ->when(!empty($this->params['end_time']), function ($query) { + if ($this->params['end_time'] == $this->params['start_time']) { + $this->params['end_time'] = strtotime($this->params['end_time']) + 86399; + } + $query->whereTime('create_time', '<=', $this->params['end_time']); + }) + ->when(!empty($this->params['type']), function (Query $query) { + switch ($this->params['type']) { + case 2: + $query->fieldRaw("*,sum(number) as total_amount,YEAR(FROM_UNIXTIME(create_time)) as year,WEEK(FROM_UNIXTIME(create_time), 1) as week")->group("year,week,financial_pm"); + break; + case 3: + $query->fieldRaw("*,sum(number) as total_amount,FROM_UNIXTIME(create_time, '%Y-%m') as time")->group("time,financial_pm"); + break; + default: + $query->fieldRaw("*,sum(number) as total_amount,FROM_UNIXTIME(create_time, '%Y-%m-%d') as time")->group("time,financial_pm"); + break; + } + }) + ->count(); + } + +} diff --git a/app/store/controller/finance/StoreBillController.php b/app/store/controller/finance/StoreBillController.php new file mode 100644 index 000000000..5381b1d45 --- /dev/null +++ b/app/store/controller/finance/StoreBillController.php @@ -0,0 +1,71 @@ +dataLists(new StoreBillLists()); + } + + #[ + ApiDoc\Title('详情'), + ApiDoc\url('/store/finance/storeBill/detail'), + ApiDoc\Method('GET'), + ApiDoc\NotHeaders(), + ApiDoc\Author('中国队长'), + ApiDoc\Param(name: 'id', type: 'int', require: true, desc: 'id'), + ApiDoc\Param(name: 'remark', type: 'string', require: true, desc: '备注'), + ApiDoc\Header(ref: [Definitions::class, "token"]), + ApiDoc\ResponseSuccess("data", type: "array"), + ] + public function detail(StoreFinanceFlowLogic $logic) + { + $id = $this->request->post('id'); + $remark = $this->request->post('remark'); + $logic->remark($id, $remark); + return $this->success('操作成功', [], 1, 1); + } + + #[ + ApiDoc\Title('下载'), + ApiDoc\url('/store/finance/storeBill/download'), + ApiDoc\Method('GET'), + ApiDoc\NotHeaders(), + ApiDoc\Author('中国队长'), + ApiDoc\Param(name: 'id', type: 'int', require: true, desc: 'id'), + ApiDoc\Param(name: 'remark', type: 'string', require: true, desc: '备注'), + ApiDoc\Header(ref: [Definitions::class, "token"]), + ApiDoc\ResponseSuccess("data", type: "array"), + ] + public function download(StoreFinanceFlowLogic $logic) + { + $id = $this->request->post('id'); + $remark = $this->request->post('remark'); + $logic->remark($id, $remark); + return $this->success('操作成功', [], 1, 1); + } + +}