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); + } + +}