multi-store/app/common/lists/StoreBillLists.php
2024-06-07 11:27:08 +08:00

99 lines
4.6 KiB
PHP

<?php
namespace app\common\lists;
use app\admin\lists\BaseAdminDataLists;
use app\common\model\store_finance_flow\StoreFinanceFlow;
use think\db\Query;
class StoreBillLists extends BaseAdminDataLists implements ListsSearchInterface
{
public function setSearch(): array
{
return [
];
}
public function lists(): array
{
$this->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) {
$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;
}
})
->count();
}
}