first commit

This commit is contained in:
2020-08-06 16:42:18 +08:00
commit eb792c34aa
12972 changed files with 1511424 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
<?php
namespace App\Admin\Controllers\Account;
use App\Models\Account;
use App\Models\User;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Grid;
class IndexController extends AdminController
{
protected $title = '账户管理';
protected function grid()
{
$grid = new Grid(new Account);
$grid->model()->whereHasMorph(
'accountable',
User::class,
function ($query) {
$query->where('type', 'pingan')->whereHas('identity', function ($q) {
$q->where('identity_id', 1);
});
}
);
$grid->disableActions();
$grid->disableCreateButton();
// $grid->column('所属项目')->display(function () {
// return $this->accountable->type_text;
// });
$grid->column('渠道名称')->display(function () {
return $this->accountable->name ?? $this->accountable->nickname;
});
$grid->column('balance', '总分润');
$grid->column('score', '已打款');
// $grid->column('updated_at', '更新时间');
$grid->column('日志')->display(function () {
return '<a href="' . admin_url('accounts/logs?id=' . $this->id) . '">账户日志</a>';
});
return $grid;
}
}

View File

@@ -0,0 +1,66 @@
<?php
namespace App\Admin\Controllers\Account;
use App\Models\AccountLog;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Grid;
class LogController extends AdminController
{
protected $title = '账户日志';
function grid()
{
$grid = new Grid(new AccountLog);
$userId = request()->user_id;
$grid->model()->when($userId, function ($query, $userId) {
$query->where('user_id', $userId);
});
$grid->disableActions();
$grid->disableCreateButton();
$grid->filter(function ($filter) {
$filter->column(1 / 3, function ($filter) {
$filter->like('rule.title', '触发规则');
$filter->equal('type', '账户类型')->select(config('account.account_type'));
});
// $filter->column(1 / 3, function ($filter) {
// $filter->where(function ($query) {
// $query->whereHas('user', function ($query) {
// $query->whereHas('info', function ($query) {
// $query->where('nickname', 'like', "%{$this->input}%");
// });
// });
// }, '会员姓名');
// $filter->between('variable', '变量');
// });
$filter->column(1 / 3, function ($filter) {
$filter->equal('frozen', '冻结')->select([
0 => '否',
1 => '是',
]);
$filter->between('created_at', '创建时间')->datetime();
});
});
// $grid->column('user.username', '会员账号');
// $grid->column('user.nickname', '会员姓名');
$grid->column('rule.title', '触发规则');
$grid->column('type', '类型')->using(config('account.account_type'));
$grid->column('variable', '变量');
$grid->column('balance', '余额');
$grid->column('frozen', '冻结')
->using([0 => '否', 1 => '是'])
->label([
0 => 'success',
1 => 'warning',
]);
$grid->column('created_at', '获取时间');
return $grid;
}
}

View File

@@ -0,0 +1,107 @@
<?php
namespace App\Admin\Controllers\Account;
use App\Models\AccountRule;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Illuminate\Validation\Rule;
class RuleController extends AdminController
{
/**
* Title for current resource.
*
* @var string
*/
protected $title = '账户规则';
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
$grid = new Grid(new AccountRule);
$grid->tools(function (Grid\Tools $tools) {
$tools->batch(function ($batch) {
$batch->disableDelete();
});
});
$grid->quickSearch('title')->placeholder('规则名称');
$grid->filter(function ($filter) {
$filter->column(1 / 3, function ($filter) {
$filter->like('title', '规则名称');
});
$filter->column(1 / 3, function ($filter) {
$filter->like('name', '调用标记');
});
$filter->column(1 / 3, function ($filter) {
$filter->equal('type', '账户类型')->select([
'cash' => '现金账户',
'score' => '积分账户',
]);
});
});
$grid->column('id', '编号');
$grid->column('title', '规则名称');
$grid->column('name', '调用标记');
$grid->column('type', '账户类型')->using(config('account.account_type'));
$grid->column('variable', '增减变量');
$grid->column('trigger', '频率')->display(function () {
return $this->trigger_text;
});
$grid->column('deductions', '立即处理')->bool();
$grid->column('remark', '备注');
$grid->column('created_at', '创建时间');
$grid->column('updated_at', '更新时间');
return $grid;
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
$form = new Form(new AccountRule);
$form->text('title', '规则名称')
->rules('required|between:2,50');
$form->text('name', '调用标记')
->creationRules('required|alpha_dash|between:2,50|unique:account_rules')
->updateRules('required|alpha_dash|between:2,50|unique:account_rules,name,{{id}}');
$form->select('type', '账户类型')
->options(config('account.account_type'))
->rules(['required', Rule::in(array_keys(config('account.account_type')))]);
$form->number('variable', '增减变量')
->value(0)
->rules('required|numeric');
$form->number('trigger', '次数限制')->value(0)
->help('执行次数限制小于0则终身一次等于0不限制大于0每日N次')
->rules('required|integer');
$states = [
'on' => ['value' => 1, 'text' => '打开'],
'off' => ['value' => 0, 'text' => '关闭'],
];
$form->switch('deductions', '立即处理')->value(1)->states($states);
$form->textarea('remark', '备注信息')->rules('nullable|max:255');
return $form;
}
}

View File

@@ -0,0 +1,72 @@
<?php
namespace App\Admin\Controllers\Activity;
use App\Models\ActivityCoupon;
use App\Models\ActivityRule;
use App\Models\User;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
class CouponController extends AdminController
{
protected $title = '卡券列表管理';
protected function grid()
{
$grid = new Grid(new ActivityCoupon);
$grid->model()->latest();
$grid->disableActions();
$grid->disableCreateButton();
$grid->filter(function ($filter) {
$filter->column(1 / 2, function ($filter) {
$filter->equal('status', '状态')->select(ActivityCoupon::STATUS);
$filter->between('used_at', '核销时间')->datetime();
$users = User::whereHas('identity', function ($query) {
$query->where('identity_id', 1);
})->get()->pluck('nickname', 'id');
$filter->equal('activity.user_id', '渠道')->select(array_merge(['0' => '系统'], $users->toArray()));
});
$filter->column(1 / 2, function ($filter) {
$filter->like('redemptionCode', '平安券编号');
$filter->where(function ($query) {
$query->whereHas('activity', function ($query) {
$query->whereHas('rule', function ($query) {
$query->where('code', $this->input);
});
});
}, '优惠政策', 'rule_code')->select(ActivityRule::where('status', 1)->pluck('title', 'code'));
});
});
$grid->column('id', '#ID#');
$grid->column('activity.title', '卡券名称');
$grid->column('mobile', '手机号');
$grid->column('优惠政策')->display(function () {
return $this->activity->rule->title;
});
$grid->column('agent', '所属渠道')->display(function () {
return $this->activity->user_nickname;
});
$grid->column('code', '卡券编号');
$grid->column('status', '状态')
->using(ActivityCoupon::STATUS)
->label([
1 => 'default',
2 => 'warning',
3 => 'info',
]);
$grid->column('used_at', '核销时间');
$grid->column('created_at', '创建时间');
return $grid;
}
}

View File

@@ -0,0 +1,127 @@
<?php
namespace App\Admin\Controllers\Activity;
use App\Models\Activity;
use App\Models\ActivityRule;
use App\Models\User;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Illuminate\Support\MessageBag;
class IndexController extends AdminController
{
protected $title = '活动管理';
protected function grid()
{
$grid = new Grid(new Activity);
$grid->actions(function ($actions) {
$actions->disableView();
});
$grid->filter(function ($filter) {
$filter->column(1 / 2, function ($filter) {
$filter->equal('status', '状态')->select(Activity::STATUS);
$filter->equal('type', '类型')->select(Activity::TYPES);
$users = User::whereHas('identity', function ($query) {
$query->where('identity_id', 1);
})->get()->pluck('nickname', 'id');
$filter->equal('user_id', '渠道')->select($users);
});
$filter->column(1 / 2, function ($filter) {
$filter->between('start_at', '开始时间')->datetime();
$filter->between('end_at', '结束时间')->datetime();
});
});
$grid->column('id', '#ID#');
$grid->column('title', '活动名称');
$grid->column('code', '活动编号');
$grid->column('rule.code', '卡券规则');
$grid->column('所属')->display(function () {
return $this->user_id ? $this->user->nickname : '系统券';
});
$grid->column('类型')->display(function () {
return $this->type_text;
});
$grid->column('days', '延期(天)');
$grid->column('rule.full', '满足金额');
$grid->column('rule.take', '扣除金额');
$grid->column('开始时间')->display(function () {
return $this->type == Activity::TYPE_SCOPE ? $this->start_at->format('Y-m-d') : '---';
});
$grid->column('结束时间')->display(function () {
return $this->type == Activity::TYPE_SCOPE ? $this->end_at->format('Y-m-d') : '---';
});
$grid->status('状态')->switch([
'on' => ['value' => 1, 'text' => '正常', 'color' => 'primary'],
'off' => ['value' => 0, 'text' => '关闭', 'color' => 'danger'],
]);
$grid->column('created_at', '创建时间');
return $grid;
}
/**
* Make a form builder.
* @return Form
*/
protected function form()
{
$form = new Form(new Activity);
$form->text('title', '活动名称')->required();
$form->textarea('description', '活动说明')->required();
$form->select('user_id', '隶属渠道')
->options(function ($option, $info) {
return User::with('info')->whereHas('identity', function ($q) {
$q->where('identity_id', 1);
})->orderBy('id', 'desc')->get()->pluck('nickname', 'id');
});
$form->select('activity_rule_id', '所属规则')
->options(function ($option, $info) {
return ActivityRule::where('status', 1)->pluck('title', 'id');
})
->required();
$form->radio('type', '类型')
->options(Activity::TYPES)
->when(Activity::TYPE_EXTEND, function (Form $form) {
$form->number('days', '延期天数')->default(60)->help('到期日期=发券日期+延期天数');
})
->when(Activity::TYPE_SCOPE, function (Form $form) {
$form->dateRange('start_at', 'end_at', '有效时间');
})
->required();
$form->switch('status', '状态')->default(1);
$form->saving(function (Form $form) {
$request = request();
if ($request->type == Activity::TYPE_EXTEND && empty($request->days)) {
$error = new MessageBag([
'title' => '错误',
'message' => '必须添加延期天数',
]);
return back()->withInput()->with(compact('error'));
}
});
return $form;
}
}

View File

@@ -0,0 +1,57 @@
<?php
namespace App\Admin\Controllers\Activity;
use App\Models\ActivityRule;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
class RuleController extends AdminController
{
protected $title = '规则管理';
protected function grid()
{
$grid = new Grid(new ActivityRule);
$grid->actions(function ($actions) {
$actions->disableView();
});
$grid->column('id', '#ID#');
$grid->column('title', '规则名称');
$grid->column('code', '规则编号');
$grid->column('full', '满足金额');
$grid->column('take', '扣除金额');
$grid->status('状态')->switch([
'on' => ['value' => 1, 'text' => '正常', 'color' => 'primary'],
'off' => ['value' => 0, 'text' => '关闭', 'color' => 'danger'],
]);
$grid->column('created_at', '创建时间');
return $grid;
}
/**
* Make a form builder.
* @return Form
*/
protected function form()
{
$form = new Form(new ActivityRule);
$form->text('title', '规则名称')->required();
$form->text('code', '规则编号')->required()->help('列YSD-full100-15');
$form->decimal('full', '满足金额')->required()->default(0);
$form->decimal('take', '抵扣金额')->required()->default(0);
$form->switch('status', '状态')->default(1);
return $form;
}
}

View File

@@ -0,0 +1,21 @@
<?php
namespace App\Admin\Controllers\Ajax;
use App\Models\Area;
use DB;
use Illuminate\Http\Request;
class AreaController
{
public function children(Request $request)
{
$code = $request->get('q');
return Area::whereHas('parent', function ($q) use ($code) {
$q->where('code', $code);
})->get(['code as id', DB::raw('name as text')]);
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Admin\Controllers;
use Encore\Admin\Controllers\AuthController as BaseAuthController;
class AuthController extends BaseAuthController
{
}

View File

@@ -0,0 +1,194 @@
<?php
namespace App\Admin\Controllers\Coupon;
use App\Admin\Exporters\CouponExport;
use App\Models\Coupon;
use App\Models\User;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Grid;
class IndexController extends AdminController
{
protected $title = '卡券列表';
/**
* Notes:
* @Author: <C.Jason>
* @Date : 2019/9/18 14:50
* @return Grid
*/
protected function grid()
{
$grid = new Grid(new Coupon);
$grid->disableCreateButton();
$grid->disableBatchActions();
$grid->disableActions();
$grid->model()->whereIn('status', [2, 3])->orderBy('id', 'desc');
$grid->filter(function ($filter) {
$filter->column(1 / 2, function ($filter) {
$filter->equal('status', '状态')->select([
'2' => '核销成功',
'3' => '核销失败',
]);
$filter->between('created_at', '核销时间')->datetime();
$users = User::query()
->whereHas('identity', function ($query) {
$query->where('identity_id', 1);
})
->where('type', 'pingan')
->get()
->pluck('nickname', 'id');
$filter->equal('user_id', '渠道')->select($users);
$filter->equal('thirdPartyGoodsId', '优惠政策')->select([
'YSD-full100-10' => '100减10元',
'YSD-full100-25' => '100减25元',
'YSD-full100-50' => '100减50元',
'YSD-full200-100' => '200减100元',
]);
});
$filter->column(1 / 2, function ($filter) {
$filter->like('redemptionCode', '平安券编号');
$filter->where(function ($query) {
$query->whereHas('outlet', function ($query) {
$query->whereHas('info', function ($query) {
$query->where('nickname', 'like', "%{$this->input}%");
});
});
}, '网点名称');
});
});
$grid->column('id', '#ID#');
$grid->column('渠道')->display(function () {
return $this->user->nickname;
});
$grid->column('网点名称/编号')->display(function () {
return $this->outlet ? $this->outlet->nickname : $this->outletId;
});
$grid->column('redemptionCode', '平安券编号');
$grid->column('couponName', '优惠政策');
$grid->column('price', '核销金额');
$grid->column('资金通道结算')->display(function () {
$profit = $this->status == 2 ? $this->profit : '0.00';
return '<span style="color:red">' . $profit . '</span>';
});
$grid->column('状态')->display(function () {
switch ($this->status) {
case 2:
return '<span style="color:green">' . $this->status_text . '</span>';
break;
case 3:
return '<span style="color:red">' . $this->status_text . '</span>';
break;
default:
return $this->status_text;
break;
}
});
$grid->column('remark', '处理结果');
$grid->column('startTime', '起始时间');
$grid->column('endTime', '到期时间');
$grid->column('created_at', '核销时间');
$grid->column('省')->display(function () {
return ($this->outlet && $this->outlet->province) ? $this->outlet->province->name : '';
});
$grid->column('市')->display(function () {
return ($this->outlet && $this->outlet->province) ? $this->outlet->city->name : '';
});
$grid->column('区')->display(function () {
return ($this->outlet && $this->outlet->province) ? $this->outlet->district->name : '';
});
$grid->footer(function ($query) {
$all = $query->get();
$pass = $all->where('status', 2)->all();
$pass = collect($pass);
return '<label class="label label-success">全部:' . $all->count() . '张</label>&nbsp;&nbsp;'
. '<label class="label label-success">成功:' . $pass->count() . '张</label>&nbsp;&nbsp;'
. '<label class="label label-success">失败:' . $all->where('status', 3)
->count() . '张</label>&nbsp;&nbsp;'
. '<label class="label label-success">核销金额:' . $pass->sum('price') . '元</label>&nbsp;&nbsp;'
. '<label class="label label-success">资金通道结算:' . $pass->sum('profit') . '元</label>&nbsp;&nbsp;'
. '<label class="label label-success">打款金额:' . $pass->where('is_profit', 1)
->sum('profit') . '元</label>&nbsp;&nbsp;';
});
$grid->disableExport(false);
$grid->export(function ($export) {
$export->column('状态', function ($value, $original) {
return strip_tags($value);
});
$export->column('redemptionCode', function ($value, $original) {
return $value . "\t";
});
$export->column('price', function ($value, $original) {
return $value . "\t";
});
$export->column('资金通道结算', function ($value, $original) {
return strip_tags($value) . "\t";
});
$export->filename('卡券列表' . date("YmdHis"));
});
return $grid;
}
/**
* Make a form builder.
* @return Form
*/
protected function form()
{
$form = new Form(new Gift);
$form->text('title', '商品名称')->required();
$form->decimal('price', '价格')->required()->default('1');
$form->decimal('pv', 'PV')->required()->default(0);
$form->decimal('bonus', '主播佣金')->required()->default(0);
$form->decimal('recommend', '推荐人佣金')->required()->default(0);
$form->number('hots', '热度/亲密度')->required()->default('1');
$form->text('times', '显示时间')
->default('200')
->required()
->help('礼物显示时间,毫秒');
$form->textarea('description', '礼物说明');
$form->image('cover', '封面')
->rules(function ($form) {
if ($form->model()->cover != '') {
return 'nullable|image';
} else {
return 'required';
}
})
->move('images/' . date('Y/m/d'))
->removable()
->uniqueName();
$form->switch('status', '状态')->default(1);
$form->decimal('sort', '排序')->default(0)->help('序号越大越靠前');
$form->saving(function ($form) {
$sum = (int)$form->pv + (int)$form->bonus + (int)$form->recommend;
if ((int)$sum > $form->price) {
admin_warning('配置错误', 'PV+佣金+推荐人佣金不能超过礼物价值');
throw new \Exception('配置错误,PV+佣金+推荐人佣金不能超过礼物价值');
}
});
return $form;
}
}

View File

@@ -0,0 +1,88 @@
<?php
namespace App\Admin\Controllers\Finance;
use App\Models\User;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Facades\Admin;
use Encore\Admin\Grid;
use Encore\Admin\Layout\Content;
class CensusController extends AdminController
{
protected $today = false;
/**
* Index interface.
*
* @param Content $content
* @return Content
*/
public function index(Content $content)
{
return $content
->header('核销总数据')
->description('description')
->body($this->grid());
}
/**
* 今日核销数据
* @param Content $content [description]
* @return [type] [description]
*/
public function today(Content $content)
{
$this->today = true;
return $content
->header('核销今日数据')
->description('description')
->body($this->grid());
}
protected function grid()
{
$grid = new Grid(new User);
$grid->model()->whereHas('identity', function ($q) {
$q->where('identity_id', 1);
})->where('type', 'pingan');
$grid->disableCreateButton();
$grid->disableBatchActions();
$grid->disableActions();
$grid->filter(function ($filter) {
$filter->column(1 / 2, function ($filter) {
$filter->where(function ($query) {
$query->whereHas('info', function ($query) {
$query->where('nickname', 'like', "%{$this->input}%");
});
}, '渠道名称');
});
});
$grid->column('渠道')->display(function () {
return $this->info->nickname;
});
$today = $this->today;
$grid->column('100元减10元优惠券')->display(function () use ($today) {
return $this->getCouponCount('YSD-full100-10', $today);
});
$grid->column('100元减25元优惠券')->display(function () use ($today) {
return $this->getCouponCount('YSD-full100-25', $today);
});
$grid->column('100元减50元优惠券')->display(function () use ($today) {
return $this->getCouponCount('YSD-full100-50', $today);
});
$grid->column(' 200元减100元优惠券')->display(function () use ($today) {
return $this->getCouponCount('YSD-full200-100', $today);
});
return $grid;
}
}

View File

@@ -0,0 +1,159 @@
<?php
namespace App\Admin\Controllers\Finance;
use App\Admin\Actions\Coupon\Batch;
use App\Admin\Actions\Coupon\BatchProfit;
use App\Admin\Actions\Coupon\BatchProfits;
use App\Admin\Exporters\CouponPassExport;
use App\Models\Coupon;
use App\Models\User;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Grid;
class IndexController extends AdminController
{
protected $title = '平安渠道打款处理';
/**
* Notes:
* @Author: <C.Jason>
* @Date : 2019/9/18 14:50
* @return Grid
*/
protected function grid()
{
$grid = new Grid(new Coupon);
$grid->disableCreateButton();
$grid->disableBatchActions(false);
$grid->tools(function (Grid\Tools $tools) {
$tools->append(new Batch);
$tools->batch(function ($batch) {
$batch->disableDelete();
$batch->add(new BatchProfits);
});
});
$grid->actions(function (Grid\Displayers\Actions $actions) {
$actions->disableView();
$actions->disableEdit();
$actions->disableDelete();
if ($actions->row->canProfit()) {
$actions->add(new BatchProfit);
}
});
$grid->model()->where('status', 2)->orderBy('id', 'desc');
$grid->filter(function ($filter) {
$filter->column(1 / 2, function ($filter) {
$filter->equal('is_profit', '打款')->select([
'0' => '未打款',
'1' => '已打款',
]);
$filter->between('created_at', '核销时间')->datetime();
$filter->between('paid_at', '打款时间')->datetime();
$users = User::query()
->whereHas('identity', function ($query) {
$query->where('identity_id', 1);
})
->where('type', 'pingan')
->get()
->pluck('nickname', 'id');
$filter->equal('user_id', '渠道')->select($users);
});
$filter->column(1 / 2, function ($filter) {
$filter->like('redemptionCode', '平安券编号');
$filter->where(function ($query) {
$query->whereHas('outlet', function ($query) {
$query->whereHas('info', function ($query) {
$query->where('nickname', 'like', "%{$this->input}%");
});
});
}, '渠道名称');
});
});
$grid->column('id', '#ID#');
$grid->column('渠道')->display(function () {
return $this->user->nickname;
});
$grid->column('网点名称/编号')->display(function () {
return $this->outlet ? $this->outlet->nickname : $this->outletId;
});
$grid->column('redemptionCode', '平安券编号');
$grid->column('couponName', '优惠政策');
$grid->column('price', '核销金额');
$grid->column('profit', '资金通道结算');
$grid->column('状态')->display(function () {
switch ($this->status) {
case 2:
return '<span style="color:green">' . $this->status_text . '</span>';
break;
case 3:
return '<span style="color:red">' . $this->status_text . '</span>';
break;
default:
return $this->status_text;
break;
}
});
$grid->column('打款')->display(function () {
switch ($this->is_profit) {
case 0:
return '<span style="color:green">未打款</span>';
break;
case 1:
return '<span style="color:red">已打款</span>';
break;
default:
return '未知';
break;
}
});
$grid->column('paid_at', '打款时间');
$grid->column('created_at', '核销时间');
$grid->footer(function ($query) {
$all = $query->get();
$pass = $query->where('status', 2)->get();
$reject = $query->where('status', 3)->get();
return '<label class="label label-success">全部:' . $all->count() . '张</label>&nbsp;&nbsp;'
. '<label class="label label-success">核销金额:' . $pass->sum('price') . '元</label>&nbsp;&nbsp;'
. '<label class="label label-success">资金通道结算:' . $pass->sum('profit') . '元</label>&nbsp;&nbsp;'
. '<label class="label label-success">打款金额:' . $pass->where('is_profit', 1)
->sum('profit') . '元</label>&nbsp;&nbsp;';
});
$grid->disableExport(false);
$grid->export(function ($export) {
$export->column('状态', function ($value, $original) {
return strip_tags($value);
});
$export->column('打款', function ($value, $original) {
return strip_tags($value);
});
$export->column('redemptionCode', function ($value, $original) {
return $value . "\t";
});
$export->column('price', function ($value, $original) {
return $value . "\t";
});
$export->column('profit', function ($value, $original) {
return strip_tags($value) . "\t";
});
$export->filename('平安渠道打款处理' . date("YmdHis"));
});
return $grid;
}
}

View File

@@ -0,0 +1,111 @@
<?php
namespace App\Admin\Controllers\Finance;
use App\Admin\Exporters\CouponProfitExport;
use App\Models\Coupon;
use App\Models\User;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Grid;
class LogController extends AdminController
{
protected $title = '已打款记录';
/**
* Notes:
* @Author: <C.Jason>
* @Date : 2019/9/18 14:50
* @return Grid
*/
protected function grid()
{
$grid = new Grid(new Coupon);
$grid->model()->where('profit', '>', 0);
$grid->disableCreateButton();
$grid->disableBatchActions();
$grid->disableActions();
$grid->model()->where('is_profit', 1)->orderBy('id', 'desc');
$grid->filter(function ($filter) {
$filter->column(1 / 2, function ($filter) {
$filter->between('paid_at', '打款时间')->datetime();
$users = User::query()
->whereHas('identity', function ($query) {
$query->where('identity_id', 1);
})
->where('type', 'pingan')
->get()
->pluck('nickname', 'id');
$filter->equal('user_id', '渠道')->select($users);
});
$filter->column(1 / 2, function ($filter) {
$filter->like('redemptionCode', '平安券编号');
$filter->where(function ($query) {
$query->whereHas('outlet', function ($query) {
$query->whereHas('info', function ($query) {
$query->where('nickname', 'like', "%{$this->input}%");
});
});
}, '网点名称');
});
});
$grid->column('id', '#ID#');
$grid->column('渠道')->display(function () {
return $this->user->nickname;
});
$grid->column('网点名称/编号')->display(function () {
return $this->outlet ? $this->outlet->nickname : $this->outletId;
});
$grid->column('redemptionCode', '平安券编号');
$grid->column('couponName', '优惠政策');
$grid->column('price', '核销金额');
$grid->column('profit', '资金通道结算');
$grid->column('paid_at', '打款时间');
$grid->footer(function ($query) {
$all = $query->get();
$pass = $query->where('status', 2)->get();
$reject = $query->where('status', 3)->get();
return '<label class="label label-success">全部:' . $all->count() . '张</label>&nbsp;&nbsp;'
. '<label class="label label-success">核销金额:' . $pass->sum('price') . '元</label>&nbsp;&nbsp;'
. '<label class="label label-success">资金通道结算:' . $pass->sum('profit') . '元</label>&nbsp;&nbsp;'
. '<label class="label label-success">打款金额:' . $pass->where('is_profit', 1)
->sum('profit') . '元</label>&nbsp;&nbsp;';
});
$grid->disableExport(false);
$grid->export(function ($export) {
$export->column('状态', function ($value, $original) {
return strip_tags($value);
});
$export->column('打款', function ($value, $original) {
return strip_tags($value);
});
$export->column('redemptionCode', function ($value, $original) {
return $value . "\t";
});
$export->column('网点名称/编号', function ($value, $original) {
return $value . "\t";
});
$export->column('price', function ($value, $original) {
return $value . "\t";
});
$export->column('profit', function ($value, $original) {
return strip_tags($value) . "\t";
});
$export->filename('已打款记录' . date("YmdHis"));
});
return $grid;
}
}

View File

@@ -0,0 +1,104 @@
<?php
namespace App\Admin\Controllers;
use App\Http\Controllers\Controller;
use App\Models\Coupon;
use App\Models\User;
use Encore\Admin\Layout\Column;
use Encore\Admin\Layout\Content;
use Encore\Admin\Layout\Row;
use Encore\Admin\Widgets\InfoBox;
class HomeController extends Controller
{
public function index(Content $content)
{
return $content
->title('数据看版')
->row(function (Row $row) {
$row->column(2, function (Column $column) {
$column->append(new InfoBox('渠道商', 'users', 'yellow', '/admin/users?identity[identity_id]=1', User::whereHas('identity', function ($q) {$q->where('identity_id', 1);})->count()));
});
})
->row(function (Row $row) {
$row->column(2, function (Column $column) {
$column->append(new InfoBox('核销卡券总数', '', 'blue', '/admin/coupons', Coupon::whereIn('status', [2, 3])->count()));
});
$row->column(2, function (Column $column) {
$column->append(new InfoBox('核销成功', '', 'blue', '/admin/coupons', Coupon::where('status', 2)->count()));
});
$row->column(2, function (Column $column) {
$column->append(new InfoBox('核销失败', '', 'black', '/admin/coupons', Coupon::where('status', 3)->count()));
});
$row->column(2, function (Column $column) {
$column->append(new InfoBox('资金通道结算', '', 'red', '/admin/coupons', Coupon::where('status', 2)->sum('price')));
});
$row->column(2, function (Column $column) {
$column->append(new InfoBox('应打款金额', '', 'green', '/admin/coupons', Coupon::where('status', 2)->sum('profit')));
});
$row->column(2, function (Column $column) {
$column->append(new InfoBox('已打款金额', '', 'green', '/admin/coupons', Coupon::where('status', 2)->where('is_profit', 1)->sum('profit')));
});
})
->row(function (Row $row) {
$coupons = Coupon::where('status', 2)
->whereDate('created_at', now()->format('Y-m-d'))
->get();
$lists = [
'ysd10' => $coupons->where('thirdPartyGoodsId', 'YSD-full100-10')->count(),
'ysd25' => $coupons->where('thirdPartyGoodsId', 'YSD-full100-25')->count(),
'ysd50' => $coupons->where('thirdPartyGoodsId', 'YSD-full100-50')->count(),
'ysd100' => $coupons->where('thirdPartyGoodsId', 'YSD-full200-100')->count(),
];
$row->column(2, function (Column $column) use ($lists) {
$column->append(new InfoBox('100元减10元成功今日总数', '', 'blue', '/admin/coupons', $lists['ysd10']));
});
$row->column(2, function (Column $column) use ($lists) {
$column->append(new InfoBox('100元减25元成功今日总数', '', 'blue', '/admin/coupons', $lists['ysd25']));
});
$row->column(2, function (Column $column) use ($lists) {
$column->append(new InfoBox('100元减50元成功今日总数', '', 'blue', '/admin/coupons', $lists['ysd50']));
});
$row->column(2, function (Column $column) use ($lists) {
$column->append(new InfoBox('200元减100元成功今日总数', '', 'blue', '/admin/coupons', $lists['ysd100']));
});
})
->row(function (Row $row) {
$coupons = Coupon::where('status', 2)->get();
$lists = [
'ysd10' => $coupons->where('thirdPartyGoodsId', 'YSD-full100-10')->count(),
'ysd25' => $coupons->where('thirdPartyGoodsId', 'YSD-full100-25')->count(),
'ysd50' => $coupons->where('thirdPartyGoodsId', 'YSD-full100-50')->count(),
'ysd100' => $coupons->where('thirdPartyGoodsId', 'YSD-full200-100')->count(),
];
$row->column(2, function (Column $column) use ($lists) {
$column->append(new InfoBox('100元减10元成功总数', '', 'blue', '/admin/coupons', $lists['ysd10']));
});
$row->column(2, function (Column $column) use ($lists) {
$column->append(new InfoBox('100元减25元成功总数', '', 'blue', '/admin/coupons', $lists['ysd25']));
});
$row->column(2, function (Column $column) use ($lists) {
$column->append(new InfoBox('100元减50元成功总数', '', 'blue', '/admin/coupons', $lists['ysd50']));
});
$row->column(2, function (Column $column) use ($lists) {
$column->append(new InfoBox('200元减100元成功总数', '', 'blue', '/admin/coupons', $lists['ysd100']));
});
});
}
}

View File

@@ -0,0 +1,82 @@
<?php
namespace App\Admin\Controllers;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Widgets\Table;
use RuLong\Identity\Models\Identity;
class IdentityController extends AdminController
{
protected $title = '用户身份配置';
protected function grid()
{
$grid = new Grid(new Identity);
$grid->disableCreateButton();
$grid->disableFilter();
$grid->disableExport();
$grid->disableRowSelector();
$grid->tools(function ($tools) {
$tools->batch(function ($batch) {
$batch->disableDelete();
});
});
$grid->actions(function ($actions) {
$actions->disableDelete();
$actions->disableView();
});
$grid->fixColumns(0, 0);
$grid->model()->orderBy('id', 'asc');
$grid->column('id', '身份编号')->sortable();
$grid->column('title', '身份');
$grid->column('name', '等级');
$grid->column('分润规则')->display(function ($title, $column) {
return '点击查看';
})->modal(function ($model) {
$codes = $model->codes->map(function ($code) {
return $code->only(['name', 'code', 'profit']);
});
return new Table(['名称', '规则项', '分润金额(元)'], $codes->toArray());
});
$grid->column('remark', '说明');
$grid->column('updated_at', '修改时间');
return $grid;
}
protected function form()
{
$form = new Form(new Identity);
$form->display('id', 'ID');
$form->text('title', '级别')->rules('required');
$form->text('name', '等级')->rules('required');
$form->hasMany('codes', '分润项目', function (Form\NestedForm $form) {
$form->text('name', '标题');
$form->text('code', '分润的项目');
$form->text('profit', '分润金额');
});
$form->textarea('remark', '说明')->rules('required');
$form->tools(function (Form\Tools $tools) {
$tools->disableDelete();
$tools->disableView();
});
$form->footer(function ($footer) {
$footer->disableReset();
$footer->disableViewCheck();
$footer->disableCreatingCheck();
});
return $form;
}
}

View File

@@ -0,0 +1,83 @@
<?php
namespace App\Admin\Controllers\Log;
use App\Models\Log;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Grid;
use Encore\Admin\Widgets\Table;
class IndexController extends AdminController
{
protected $title = 'api 日志';
/**
* Notes:
* @Author: <C.Jason>
* @Date: 2019/9/18 14:50
* @return Grid
*/
protected function grid()
{
$grid = new Grid(new Log);
$grid->model()->orderBy('id', 'desc');
$grid->disableActions();
$grid->filter(function ($filter) {
$filter->equal('type', '接口类型')->select([
'pingan' => '平安',
'self' => '自己',
]);
$filter->where(function ($query) {
$query->where("in_source->query->redemptionCode", $this->input);
}, '券码');
$filter->between('created_at', '提交时间')->datetime();
});
$grid->column('id', '#ID#');
// $grid->column('path', '请求地址');
$grid->column('请求地址')->display(function ($title, $column) {
return '展开';
})->expand(function ($model) {
$header = ['请求地址'];
$array = [[$model->path]];
return new Table($header, $array);
});
$grid->column('method', '模式');
// $grid->column('in_source', '请求参数');
$grid->column('请求参数')->display(function () {
$in_source = $this->in_source;
unset($in_source['merchantSign']);
unset($in_source['merchantCert']);
unset($in_source['sign']);
unset($in_source['data']);
unset($in_source['json']);
unset($in_source['query']['merchantSign']);
unset($in_source['query']['merchantCert']);
return $in_source;
});
// $grid->column('out_source', '返回信息');
$grid->column('返回信息')->display(function () {
$out_source = $this->out_source;
if (!is_array($out_source)) {
return $out_source;
}
unset($out_source['merchantSign']);
unset($out_source['merchantCert']);
unset($out_source['serverCert']);
unset($out_source['serverSign']);
unset($out_source['data']);
return $out_source;
});
$grid->column('created_at', '提交时间');
return $grid;
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Admin\Controllers;
use Encore\Admin\Controllers\AdminController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class UploadController extends AdminController
{
public function editor(Request $request)
{
$files = $request->file("image");
if (empty($files)) {
return response()->json(['errno' => 5, 'msg' => '请选择文件']);
}
foreach ($files as $file) {
$path = $file->store(
'editor/' . date('Y/m/d'),
config('admin.upload.disk')
);
$data[] = Storage::disk(config('admin.upload.disk'))->url($path);
}
return ['errno' => 0, 'data' => $data];
}
}

View File

@@ -0,0 +1,278 @@
<?php
namespace App\Admin\Controllers\User;
use App\Admin\Actions\User\Profit;
use App\Admin\Actions\User\ReCode;
use App\Admin\Actions\User\RefD3Key;
use App\Admin\Exporters\UsersExport;
use App\Models\Area;
use App\Models\User;
use Auth;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Widgets\Table;
use Illuminate\Http\Request;
use RuLong\Identity\Models\Identity;
class IndexController extends AdminController
{
protected $title = '用户管理';
/**
* Notes:
* @Author: <C.Jason>
* @Date : 2019/9/18 14:50
* @return Grid
*/
protected function grid()
{
$user = Auth::guard('admin')->user();
$grid = new Grid(new User);
$grid->actions(function ($actions) use ($user) {
$actions->disableDelete();
$actions->disableView();
if ($actions->row->identity_id == 1) {
$actions->add(new RefD3Key);
}
if ($actions->row->identity_id == 1) {
$actions->add(new ReCode);
}
if ($actions->row->type == 'pingan' && $actions->row->identity_id == 1 && $user->id == 1) {
$actions->add(new Profit);
}
});
$grid->tools(function (Grid\Tools $tools) {
// $tools->append(new UserImport);
});
$grid->model()->orderBy('id', 'desc');
$grid->quickSearch('username')->placeholder('登录账户');
$grid->filter(function ($filter) {
$filter->column(1 / 2, function ($filter) {
$filter->like('username', '登录账户');
$filter->like('server_id', '渠道编号');
$filter->like('outlet_id', '网点编号');
$filter->like('PaOutletId', '平安网点id');
$filter->between('created_at', '注册时间')->datetime();
});
$filter->column(1 / 2, function ($filter) {
$filter->like('info.nickname', '渠道/网点');
$filter->like('server_key', '服务秘钥');
$filter->equal('identity.identity_id', '用户身份')->select([
' ' => '全部',
'1' => '渠道商',
'2' => '网点',
]);
$filter->equal('type', '所属项目')->select([
' ' => '全部',
'pingan' => '平安券',
'wo' => '沃支付',
]);
});
});
$grid->column('id', '#ID#');
$grid->column('username', '登录账户');
$grid->column('渠道编号')->display(function () {
return $this->server_id;
});
$grid->column('网点编号')->display(function () {
return $this->outlet_id ?? '---';
});
$grid->column('平安网点id')->display(function () {
return $this->PaOutletId ?? '---';
});
$grid->column('所属项目')->display(function () {
return $this->type_text;
});
$grid->column('密钥')->display(function ($title, $column) {
return '点击查看';
})->modal(function ($model) {
$data = [
[
'服务秘钥', $model->server_key ?? '---',
],
[
'DES3秘钥', $model->des3key ?? '---',
],
];
return new Table(['名称', '参数'], $data);
});
$grid->column('nickname', '渠道/网点');
$grid->column('用户身份')->display(function () {
if ($this->identity_id == 1) {
return "<p style='color:green'>" . $this->identity_text . "</p>";
} else {
return $this->identity_text;
}
});
$grid->column('隶属渠道')->display(function () {
return $this->parent ? $this->parent->nickname : '---';
});
if ($user->id == 1) {
$grid->column('分润规则')->display(function ($title, $column) {
return '点击展开';
})->modal(function ($model) {
if ($model->code) {
$codes = $model->code->map(function ($code) {
return $code->only(['name', 'code', 'profit']);
});
return new Table(['名称', '规则项', '分润金额(元)'], $codes->toArray());
}
});
}
$grid->column('created_at', '注册时间');
$grid->disableExport(false);
$grid->export(function ($export) {
$export->except(['密钥', '分润规则']);
$export->column('用户身份', function ($value, $original) {
return strip_tags($value);
});
$export->column('渠道编号', function ($value, $original) {
return $value . "\t";
});
$export->column('网点编号', function ($value, $original) {
return $value . "\t";
});
$export->filename('用户管理' . date("YmdHis"));
});
return $grid;
}
/**
* Notes:
* @Author: <C.Jason>
* @Date : 2019/9/18 14:50
* @return Form
*/
protected function form()
{
$province = Area::where('parent_id', 1)->pluck('name', 'code');
$form = new Form(new User);
$identity = Identity::find(1);
$form->text('username', '登录账户')
->creationRules(['required', "unique:users", 'max:11'], ['max' => '小于11个字符'])
->updateRules(['required', "unique:users,username,{{id}}"])->required();
$form->password('password', '登录密码')->creationRules('required|min:6', [
'required' => '必填',
'min' => '密码不能少于6个字符',
]);
$form->text('PaOutletId', '平安网点id');
$form->select('type', '项目')
->options(['pingan' => '平安券', 'wo' => '沃支付'])
->load('parent_id', '/admin/user/parent')
->required();
$form->select('parent_id', '隶属渠道')
->options(function ($option, $info) {
$user = $this;
if (!$option || ($user && $user->identity_id == 2)) {
return User::with('info')->whereHas('identity', function ($q) {
$q->where('identity_id', 1);
})->when(isset($user->id), function ($q) use ($user) {
$q->where('type', $user->type);
})->orderBy('id', 'desc')->get()->pluck('nickname', 'id');
} else {
return [0 => '没有隶属渠道'];
}
})
->default(function ($info) {
if ($info->model() && $info->model()->parent) {
return $info->model()->parent_id;
} else {
return 0;
}
});
$form->select('province_id', '行政省份')
->options($province)
->load('city_id', '/admin/ajax/areas/children')
->required();
$form->select('city_id', '行政城市')->options(function ($option, $info) {
if ($option) {
return Area::whereHas('parent', function ($q) use ($info) {
$q->where('code', $this->province_id);
})->pluck('name', 'code');
}
})->load('district_id', '/admin/ajax/areas/children')->required();
$form->select('district_id', '行政区域')->options(function ($option, $info) {
if ($option) {
return Area::whereHas('parent', function ($q) use ($info) {
$q->where('code', $this->city_id);
})->pluck('name', 'code');
}
})->required();
$form->divider('用户资料');
$form->text('info.nickname', '渠道/网点')->placeholder('请输入渠道/网点名称')->required();
$form->saved(function (Form $form) {
$user_id = $form->model()->id;
$user = User::find($user_id);
if ($user->identity_id == 1 && $user->code()->count() === 0) {
$userCodes = Identity::find(1)->codes->map(function ($code) {
return $code->only(['name', 'code', 'profit']);
});
$user->code()->createMany($userCodes);
}
});
return $form;
}
/**
* 获取隶属
* @author 玄尘 2020-03-12
* @param Request $request [description]
* @return [type] [description]
*/
public function getParent(Request $request)
{
$type = $request->get('q');
$users = User::whereHas('identity', function ($query) {
$query->where('identity_id', 1);
})->where('type', $type)->get();
$userRet = $users->map(function ($code) {
return [
'id' => $code->id,
'text' => $code->info->nickname,
];
});
$userRet->prepend(['id' => '', 'text' => '']);
return $userRet;
}
}

View File

@@ -0,0 +1,150 @@
<?php
namespace App\Admin\Controllers\Wo;
use App\Admin\Actions\Wo\Unsubscribe;
use App\Admin\Exporters\WoCouponExport;
use App\Models\User;
use App\Models\WoCoupon;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Grid;
use Encore\Admin\Widgets\Table;
class IndexController extends AdminController
{
protected $title = '沃钱包业务';
/**
* Notes:
* @Author: <C.Jason>
* @Date : 2019/9/18 14:50
* @return Grid
*/
protected function grid()
{
$grid = new Grid(new WoCoupon);
$grid->disableCreateButton();
$grid->disableBatchActions();
// $grid->disableActions();
$grid->model()->whereIn('status', [1, 2, 3])->orderBy('id', 'desc');
$grid->actions(function ($actions) {
$actions->disableDelete();
$actions->disableView();
$actions->disableEdit();
if ($actions->row->status == 1 && $actions->row->service == 'ticketGrant') {
$actions->add(new Unsubscribe);
}
});
$grid->filter(function ($filter) {
$filter->column(1 / 2, function ($filter) {
$filter->equal('status', '状态')->select([
'1' => '成功',
'2' => '失败',
'3' => '退订',
]);
$filter->equal('service', '业务')->select([
'ticketGrant' => '发券请求',
'ticketBuyback' => '返销请求',
'ticketInvalid' => '作废请求',
]);
$filter->like('mobile', '手机号');
$filter->like('logNo', '发券流水号');
});
$filter->column(1 / 2, function ($filter) {
$filter->like('number', '工号');
$users = User::query()
->whereHas('identity', function ($query) {
$query->where('identity_id', 1);
})
->where('type', 'wo')
->get()
->pluck('nickname', 'id');
$filter->equal('user_id', '渠道')->select($users);
$filter->equal('activityId', '活动')->select([
'97LJ202025' => '25元兑换券',
'97LJ202010' => '100元兑换券',
'97LJ202018' => '180元话费券',
]);
$filter->between('created_at', '处理时间')->datetime();
});
});
$grid->column('id', '#ID#');
$grid->column('渠道')->display(function () {
return $this->user->nickname;
});
$grid->column('number', '工号');
$grid->column('业务')->display(function () {
return $this->service_text;
});
$grid->column('活动')->display(function () {
return $this->activity_text;
});
$grid->column('mobile', '手机号')->display(function ($title, $column) {
return $this->mobile;
})->modal(function ($model) {
$datas = $model->logs->map(function ($data) {
return [
'mobile' => $data->mobile,
'service_text' => $data->coupon->service_text ?? '---',
'activity_text' => $data->coupon->activity_text ?? '---',
'status_text' => $data->coupon->status_text ?? '---',
'created_at' => $data->created_at,
];
});
return new Table(['手机号', '业务', '活动', '结果', '时间'], $datas->toArray());
});
$grid->column('ticketAmt', '电子券面值');
$grid->column('status', '状态')->display(function () {
switch ($this->status) {
case 1:
return "<span class='label label-success' >" . $this->status_text . "</span>";
break;
case 2:
return "<span class='label label-warning' >" . $this->status_text . "</span>";
break;
case 3:
return "<span class='label label-primary' >" . $this->status_text . "</span>";
break;
default:
return $this->status_text;
break;
}
});
$grid->column('remark', '处理结果');
$grid->column('原发放流水')->display(function () {
return $this->ologNo ?? '---';
});
$grid->column('logNo', '发券流水号');
$grid->column('created_at', '处理时间');
$grid->disableExport(false);
$grid->export(function ($export) {
$export->column('status', function ($value, $original) {
return strip_tags($value);
});
$export->column('mobile', function ($value, $original) {
return $original . "\t";
});
$export->column('ticketAmt', function ($value, $original) {
return $value . "\t";
});
$export->filename('沃钱包业务' . date("YmdHis"));
});
return $grid;
}
}