admin/app/backend/modules/finance/controllers/BalanceRecordsController.php

158 lines
5.6 KiB
PHP

<?php
/****************************************************************
* Author: libaojia
* Date: 2017/7/11 下午9:25
* Email: livsyitian@163.com
* QQ: 995265288
* User:
****************************************************************/
namespace app\backend\modules\finance\controllers;
use app\backend\modules\finance\models\Balance;
use app\common\components\BaseController;
use app\common\exceptions\ShopException;
use app\common\facades\Setting;
use app\common\helpers\PaginationHelper;
use app\common\services\credit\ConstService;
use app\common\services\ExportService;
use app\common\services\member\group\GroupService;
use app\common\services\member\level\LevelService;
class BalanceRecordsController extends BaseController
{
const PAGE_SIZE = 20;
public function index()
{
$source_name = $this->getServiceType();
$source_name_show = [];
foreach ($source_name as $key => $item) {
array_push($source_name_show, [
'id' => $key,
'value' => $item,
]);
}
return view('finance.balance.balanceRecords', [
'head_img' => yz_tomedia($this->getShopSet()['headimg']),
'source_name' => json_encode($source_name_show),
'member_levels' => json_encode($this->getMemberList()),
'member_groups' => json_encode($this->getMemberGroup()),
])->render();
}
public function search()
{
$records = Balance::records();
$search = $this->getPostSearch();
if (request()->ajax()) {
$records = $records->search($search);
if ($search['member']||$search['member_level']||$search['member_group']) {
$records = $records->searchMember($search);
}
}
$amount = $records->sum('change_money');
$pageList = $records->orderBy('yz_balance.id', 'desc')->paginate(static::PAGE_SIZE);
return $this->successJson('ok', [
'list' => $pageList,
'amount' => $amount,
]);
}
public function export()
{
$file_name = date('Ymdhis', time()) . '余额明细导出';
$search = $this->getPostSearch();
$list = Balance::records()->search($search)->searchMember($search);
if($list->count()>100000){
throw new ShopException('导出数据条数超过最大导出上限100000条,请调整导出时间区间!');
}
$export_page = request()->export_page ? request()->export_page : 1;
$export_model = new ExportService($list, $export_page);
$export_data[0] = ['时间', '会员ID', '会员姓名', '会员手机号', '会员等级', '会员分组', '订单号', '业务类型', '收入/支出', '变动前余额', '变动余额', '变动后余额', '备注'];
$shopSet = $this->getShopSet();
$list = $list->get();
foreach ($list as $key => $item) {
if ($item->member) {
$member_id = $item->member->uid;
$member_name = $item->member->realname ?: $item->member->nickname;
$member_mobile = $item->member->mobile;
$member_level = $shopSet['level_name'];
$member_group = '无分组';
if ($item->member->yzMember->group) {
$member_group = $item->member->yzMember->group->group_name ?: '无分组';
}
if ($item->member->yzMember->level) {
$member_level = $item->member->yzMember->level->level_name ?: $shopSet['level_name'];
}
} else {
$member_id = '';
$member_name = '';
$member_mobile = '';
$member_level = $shopSet['level_name'];
$member_group = '无分组';
}
$export_data[$key + 1] = [
$item->created_at,
$member_id,
$member_name,
$member_mobile,
$member_level,
$member_group,
$item->serial_number,
$item->service_type_name,
$item->type_name,
$item->old_money,
$item->change_money,
$item->new_money,
$item->remark
];
}
$export_model->export($file_name, $export_data, 'finance.balance-records.index');
// 商城更新,无法使用
// \Excel::create($file_name, function ($excel) use ($export_data) {
// // Set the title
// $excel->setTitle('Office 2005 XLSX Document');
//
// // Chain the setters
// $excel->setCreator('芸众商城')
// ->setLastModifiedBy("芸众商城")
// ->setSubject("Office 2005 XLSX Test Document")
// ->setDescription("Test document for Office 2005 XLSX, generated using PHP classes.")
// ->setKeywords("office 2005 openxml php")
// ->setCategory("report file");
//
// $excel->sheet('info', function ($sheet) use ($export_data) {
// $sheet->rows($export_data);
// });
//
//
// })->export('xls');
}
private function getPostSearch()
{
return \YunShop::request()->search;
}
private function getShopSet()
{
return Setting::get('shop.member');
}
private function getServiceType()
{
return (new ConstService(''))->sourceComment();
}
private function getMemberList()
{
return LevelService::getMemberLevelList();
}
private function getMemberGroup()
{
return GroupService::getMemberGroupList();
}
}