0
0

更新代码

This commit is contained in:
2020-08-04 10:09:42 +08:00
parent 6118b5b63b
commit c2ac5d964e
478 changed files with 34410 additions and 0 deletions

View File

@@ -0,0 +1,161 @@
<?php
namespace App\Admin\Controllers;
use App\Models\Withdraw;
use Illuminate\Http\Request;
use RuLong\UserAccount\Models\UserAccount;
use RuLong\UserAccount\Models\UserAccountLog;
use RuLong\UserAccount\Models\UserAccountRule;
class AccountController extends Controller
{
public function index(Request $request)
{
$mobile = $request->mobile;
$nickname = $request->nickname;
$start = $request->start;
$end = $request->end;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$accounts = UserAccount::when($mobile, function ($query) use ($mobile) {
$query->whereHas('user', function ($query) use ($mobile) {
$query->where('mobile', 'like', "%{$mobile}%");
});
})->when($nickname, function ($query) use ($nickname) {
$query->whereHas('user.info', function ($query) use ($nickname) {
$query->where('nickname', 'like', "%{$nickname}%");
});
})->when($start && $end, function ($query) use ($start, $end) {
return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})->when($start && !$end, function ($query) use ($start) {
return $query->where('created_at', '>=', $start);
})->when(!$start && $end, function ($query) use ($end) {
return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
})->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->with(['user'])->latest()->paginate($numPerPage);
return view('Admin::accounts.index', compact('accounts'));
}
public function rules(Request $request)
{
$title = $request->title;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$rules = UserAccountRule::when($title, function ($query) use ($title) {
$query->where('title', 'like', "%{$title}%");
})->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->latest()->paginate($numPerPage);
return view('Admin::accounts.rules', compact('rules'));
}
public function logs(Request $request)
{
$mobile = $request->mobile;
$rule_id = $request->rule_id;
$nickname = $request->nickname;
$start = $request->start;
$end = $request->end;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$logs = UserAccountLog::when($mobile, function ($query) use ($mobile) {
$query->whereHas('user', function ($query) use ($mobile) {
$query->where('mobile', 'like', "%{$mobile}%");
});
})->when($nickname, function ($query) use ($nickname) {
$query->whereHas('user.info', function ($query) use ($nickname) {
$query->where('nickname', 'like', "%{$nickname}%");
});
})->when($rule_id, function ($query) use ($rule_id) {
return $query->where('rule_id', $rule_id);
})->when($start && $end, function ($query) use ($start, $end) {
return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})->when($start && !$end, function ($query) use ($start) {
return $query->where('created_at', '>=', $start);
})->when(!$start && $end, function ($query) use ($end) {
return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
})->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->with(['user.info', 'rule'])->latest()->orderBy('id', 'desc')->paginate($numPerPage);
$rules = UserAccountRule::get();
return view('Admin::accounts.logs', compact('logs', 'rules'));
}
/**
* 提现申请
* @Author:<C.Jason>
* @Date:2018-11-08T16:48:31+0800
* @param Request $request [description]
* @return [type] [description]
*/
public function withdraws(Request $request)
{
$mobile = $request->mobile;
$nickname = $request->nickname;
$start = $request->start;
$end = $request->end;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$withdraws = Withdraw::when($mobile, function ($query) use ($mobile) {
$query->whereHas('user', function ($query) use ($mobile) {
$query->where('mobile', 'like', "%{$mobile}%");
});
})->when($nickname, function ($query) use ($nickname) {
$query->whereHas('user.info', function ($query) use ($nickname) {
$query->where('nickname', 'like', "%{$nickname}%");
});
})->when($start && $end, function ($query) use ($start, $end) {
return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})->when($start && !$end, function ($query) use ($start) {
return $query->where('created_at', '>=', $start);
})->when(!$start && $end, function ($query) use ($end) {
return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
})->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->with(['user.info'])->latest()->paginate($numPerPage);
return view('Admin::accounts.withdraws', compact('withdraws'));
}
/**
* 通过提现申请
* @Author:<C.Jason>
* @Date:2018-11-08T16:48:10+0800
* @param Request $request [description]
* @param Withdraw $withdraw [description]
* @return [type] [description]
*/
public function approve(Request $request, Withdraw $withdraw)
{
}
/**
* 驳回提现申请
* @Author:<C.Jason>
* @Date:2018-11-08T16:48:19+0800
* @param Request $request [description]
* @param Withdraw $withdraw [description]
* @return [type] [description]
*/
public function reject(Request $request, Withdraw $withdraw)
{
if ($request->isMethod('POST')) {
# code...
} else {
return view('Admin::accounts.reject', compact('withdraw'));
}
}
}

View File

@@ -0,0 +1,271 @@
<?php
namespace App\Admin\Controllers;
use App\Models\Activity;
use App\Models\ActivityGift;
use App\Models\Category;
use App\Models\Goods;
use App\Models\GoodsParams;
use App\Models\Seller;
use Illuminate\Http\Request;
use Validator;
class ActivityController extends Controller
{
public function index(Request $request)
{
if (\Admin::user()->seller->type != 'seller') {
return $this->error('您没有权限');
}
$title = $request->title;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$activities = Activity::when($title, function ($query) use ($title) {
$query->where('title', 'like', "%{$title}%");
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->orderBy('id', 'desc')->paginate($numPerPage);
return view('Admin::activities.index', compact('activities'));
}
public function create(Request $request)
{
$categoies = Category::treeSelect(2);
$sellers = Seller::where('status', 1)->where('type', 'seller')->get();
return view('Admin::activities.create', compact('categoies', 'sellers'));
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|max:100',
'description' => 'required|max:200',
'content' => 'required',
'storage_id' => 'required',
'start_time' => 'required',
'end_time' => 'required',
], [
'title.required' => '名称必须填写',
'title.max' => '名称长度应在:max以内',
'description.required' => '简介必须填写',
'content.required' => '内容必须填写',
'storage_id.required' => '标题图必须上传',
'start_time.required' => '开始时间必须填写',
'end_time.required' => '结束时间必须填写',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if ($request->end_time < $request->start_time) {
return $this->error('结束时间必须大于开始时间');
}
if (Activity::create($request->all())) {
return $this->success('新增活动成功', 'close');
} else {
return $this->error();
}
}
public function edit(Activity $activity)
{
$categoies = Category::treeSelect(2);
$sellers = Seller::where('status', 1)->where('type', 'seller')->get();
return view('Admin::activities.edit', compact('activity', 'categoies', 'sellers'));
}
public function update(Request $request, Activity $activity)
{
$validator = Validator::make($request->all(), [
'title' => 'required|max:100',
'description' => 'required|max:200',
'content' => 'required',
'storage_id' => 'required',
'start_time' => 'required',
'end_time' => 'required',
], [
'title.required' => '名称必须填写',
'title.max' => '名称长度应在:max以内',
'description.required' => '简介必须填写',
'content.required' => '内容必须填写',
'storage_id.required' => '标题图必须上传',
'start_time.required' => '开始时间必须填写',
'end_time.required' => '结束时间必须填写',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if ($request->end_time < $request->start_time) {
return $this->error('结束时间必须大于开始时间');
}
$data = $request->all();
$activity->update($data);
return $this->success('编辑完成', 'close');
}
public function destroy(Activity $activity)
{
if ($activity->delete()) {
return $this->success();
} else {
return $this->error();
}
}
public function show(Activity $activity)
{
$gifts = $activity->gifts()->paginate(30);
return view('Admin::activities.show', compact('gifts', 'activity'));
}
public function giftsCreate(Activity $activity)
{
$sellers = Seller::where('status', 1)->get();
return view('Admin::activities.giftsCreate', compact('sellers', 'activity'));
}
public function giftsStore(Request $request, Activity $activity)
{
$validator = Validator::make($request->all(), [
'goods_id' => 'required|numeric|min:1',
'param_id' => 'required|numeric|min:1',
'mode' => 'required|numeric',
'consume_mode' => 'required|numeric',
], [
'goods_id.required' => '商品必须选择',
'param_id.required' => '规格必须选择',
'goods_id.min' => '商品必须选择',
'param_id.min' => '规格必须选择',
'mode.required' => '任务指标必须填写',
'consume_mode.required' => '消耗业绩必须填写',
'goods_id.numeric' => '商品必须为数字',
'param_id.numeric' => '规格必须为数字',
'mode.numeric' => '任务指标必须为数字',
'consume_mode.numeric' => '消耗业绩必须为数字',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if ($request->consume_mode > $request->mode) {
return $this->error('消耗业绩不能大于任务指标');
}
if ($activity->gifts()->create($request->all())) {
return $this->success('添加奖品成功', 'close');
} else {
return $this->error();
}
}
public function giftsEdit(ActivityGift $gift)
{
$sellers = Seller::where('status', 1)->get();
$goods = Goods::where('status', 1)
->whereHas('params', function ($query) {return $query->where('stock', '>', 0)->where('status', 1);})
->where('seller_id', $gift->goods->seller_id)
->get();
$params = GoodsParams::where('status', 1)
->where('goods_id', $gift->goods_id)
->get();
return view('Admin::activities.giftsEdit', compact('sellers', 'goods', 'params', 'gift'));
}
public function giftsUpdate(Request $request, ActivityGift $gift)
{
$validator = Validator::make($request->all(), [
'goods_id' => 'required|numeric|min:1',
'param_id' => 'required|numeric|min:1',
'mode' => 'required|numeric',
'consume_mode' => 'required|numeric',
], [
'goods_id.required' => '商品必须选择',
'param_id.required' => '规格必须选择',
'goods_id.min' => '商品必须选择',
'param_id.min' => '规格必须选择',
'mode.required' => '任务指标必须填写',
'consume_mode.required' => '消耗业绩必须填写',
'goods_id.numeric' => '商品必须为数字',
'param_id.numeric' => '规格必须为数字',
'mode.numeric' => '任务指标必须为数字',
'consume_mode.numeric' => '消耗业绩必须为数字',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
$data = $request->all();
$gift->update($data);
return $this->success('', 'close');
}
public function giftsDestroy(ActivityGift $gift)
{
if ($gift->delete()) {
return $this->success();
} else {
return $this->error();
}
}
public function goods(Request $request)
{
if (empty($request->seller_id)) {
return ['msg' => '请选择商户', 'code' => 0];
}
$goods = Goods::where('status', 1)
->whereHas('params', function ($query) {return $query->where('stock', '>', 0)->where('status', 1);})
->where('seller_id', $request->seller_id)
->select('id', 'title')->get();
$data = [];
foreach ($goods as $key => $good) {
$data[$key]['id'] = $good->id;
$data[$key]['title'] = $good->title;
}
if ($data) {
return response()->json(['msg' => '', 'code' => 1, 'data' => $data]);
} else {
return ['msg' => '请选择商户', 'code' => 0];
}
}
public function params(Request $request)
{
if (empty($request->goods_id)) {
return ['msg' => '请选择商品', 'code' => 0];
}
$params = GoodsParams::where('status', 1)
->where('goods_id', $request->goods_id)
->select('id', 'value', 'price', 'cost')->get();
$data = [];
foreach ($params as $key => $param) {
$data[$key]['id'] = $param->id;
$data[$key]['title'] = $param->value . ' - 售价' . $param->price . ' - 成本' . $param->cost;
}
if ($data) {
return response()->json(['msg' => '', 'code' => 1, 'data' => $data]);
} else {
return ['msg' => '请选择商品', 'code' => 0];
}
}
}

View File

@@ -0,0 +1,110 @@
<?php
namespace App\Admin\Controllers;
use App\Models\Advert;
use Illuminate\Http\Request;
use Validator;
/**
* 轮播管理,基本完成
*/
class AdvertController extends Controller
{
protected $models = [
'Article' => '资讯模型',
'Goods' => '商品模型',
];
public function index(Request $request)
{
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$model = $request->model;
$adverts = Advert::when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})
->when($model, function ($query) use ($model) {
$query->where('advertable_type', 'like', "%{$model}%");
})
->paginate($numPerPage);
return view('Admin::adverts.index', compact('adverts'));
}
public function create()
{
$models = $this->models;
return view('Admin::adverts.create', compact('models'));
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'sort' => 'required|numeric',
'storage_id' => 'required',
], [
'sort.required' => '排序必须填写',
'sort.numeric' => '排序只能是数字',
'url.required' => 'url必须填写',
'url.url' => 'url格式不正确',
'storage_id.required' => '图片必须上传',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
Advert::create([
'storage_id' => $request->storage_id,
'sort' => $request->sort,
'url' => $request->url,
]);
return $this->success('轮播创建成功', 'close');
}
public function edit(Advert $advert)
{
$models = $this->models;
return view('Admin::adverts.edit', compact('models', 'advert'));
}
public function update(Request $request, Advert $advert)
{
$validator = Validator::make($request->all(), [
'sort' => 'required|numeric',
'storage_id' => 'required',
], [
'sort.required' => '排序必须填写',
'sort.numeric' => '排序只能是数字',
'url.required' => 'url必须填写',
'url.url' => 'url格式不正确',
'storage_id.required' => '图片必须上传',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
$advert->update([
'storage_id' => $request->storage_id,
'sort' => $request->sort,
'url' => $request->url,
]);
return $this->success('轮播更新成功', 'close');
}
public function destroy(Advert $advert)
{
if ($advert->delete()) {
return $this->success();
} else {
return $this->error();
}
}
}

View File

@@ -0,0 +1,150 @@
<?php
namespace App\Admin\Controllers;
use App\Models\Agency;
use App\Rules\Checkmobile;
use App\User;
use Illuminate\Http\Request;
use Validator;
class AgencyController extends Controller
{
public function index(Request $request)
{
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$lists = Agency::paginate($numPerPage);
return view('Admin::agency.index', compact('lists'));
}
public function create()
{
$salesmans = User::where('is_salesman', 1)->get();
return view('Admin::agency.create', compact('salesmans'));
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|min:2|max:50',
'status' => 'required',
], [
'name.required' => '名称必须填写',
'name.min' => '名称最少为:min字符',
'name.max' => '名称最多为:max字符',
'status.required' => '状态必须选择',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if (Agency::create($request->all())) {
return $this->success('', 'close');
} else {
return $this->error();
}
}
public function edit(Agency $agency)
{
$salesmans = User::where('is_salesman', 1)->get();
return view('Admin::agency.edit', compact('agency', 'salesmans'));
}
public function update(Request $request, Agency $agency)
{
$validator = Validator::make($request->all(), [
'name' => 'required|min:2|max:50',
'status' => 'required',
], [
'name.required' => '名称必须填写',
'name.min' => '名称最少为:min字符',
'name.max' => '名称最多为:max字符',
'status.required' => '状态必须选择',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if ($agency->update($request->all())) {
return $this->success('', 'close');
} else {
return $this->error();
}
}
//设置管理人
public function user(Request $request, Agency $agency)
{
return view('Admin::agency.user', compact('agency'));
}
public function douser(Request $request, Agency $agency)
{
$validator = Validator::make($request->all(), [
'mobile' => 'required|exists:users',
'user_id' => 'required|unique:agencies,user_id',
], [
'mobile.required' => '请输入手机号',
'mobile.exists' => '手机号不存在',
'user_id.required' => '请点击校验按钮',
'user_id.unique' => '此人已经是代理了',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if ($agency->update(['user_id' => $request->user_id])) {
$agency->user->identityUpdate(2, 'AgencyUp');
return $this->success('', 'close');
} else {
return $this->error('');
}
}
public function show()
{
#Todo..
}
//删除
public function delete(Agency $agency)
{
if ($agency->delete()) {
return $this->success('删除成功');
} else {
return $this->error('删除成功');
}
}
public function checkuser(Request $request)
{
$validator = Validator::make($request->all(), [
'mobile' => ['required', 'exists:users', new Checkmobile],
], [
'mobile.required' => '手机号必须填写',
'mobile.exists' => '手机号不存在',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
$user = User::where('mobile', $request->mobile)->first();
$agency = Agency::where('user_id', $user->id)->first();
if ($agency) {
return $this->error('此人已经是代理了');
}
return $this->success(['user_id' => $user->id, 'nickname' => $user->info->nickname]);
}
}

View File

@@ -0,0 +1,182 @@
<?php
namespace App\Admin\Controllers;
use Illuminate\Http\Request;
use RuLong\Area\Models\OpenArea;
use Validator;
class AreaController extends Controller
{
public function index(Request $request)
{
$info = $request->info;
$type = $request->type;
$status = $request->status;
$psn = $request->psn;
$numPerPage = $request->numPerPage ?: 30;
$areas = OpenArea::when($info, function ($query) use ($info) {
$query->where('info', 'like', "%{$info}%");
})->when($type, function ($query) use ($type) {
$query->where('type', $type);
})->when(is_numeric($status), function ($query) use ($status) {
$query->where('status', $status);
})->when($psn, function ($query) use ($psn) {
$query->where('psn', $psn);
})->orderBy('sn', 'asc')->whereNotNull('psn')->paginate($numPerPage);
$list = OpenArea::treeShow();
return view('Admin::areas.index', compact('areas', 'list'));
}
public function create(Request $request)
{
$list = OpenArea::treeShow();
return view('Admin::areas.create', compact('list'));
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|min:2|max:50',
'psn' => 'required',
], [
'name.required' => '名称必须填写',
'name.min' => '名称最少为:min字符',
'name.max' => '名称最多为:max字符',
'psn.required' => '所属必须选择',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
$name = $request->name;
$psn = $request->psn;
$status = $request->status;
$parent = OpenArea::where('sn', $request->psn)->first();
$last = OpenArea::where('psn', $parent->sn)->orderBy('sn', 'desc')->first();
if ($last) {
$sn = $last->sn + 1;
} else {
$sn = $parent->sn + 1;
}
$data = [
'sn' => $sn,
'psn' => $parent->sn,
'province' => $parent->province,
'city' => $parent->city,
'area' => $name,
'name' => $name,
'shortname' => $request->name,
'info' => $parent->info . ',' . $name,
'shortinfo' => $parent->shortinfo . ',' . $name,
'type' => '县级',
'depth' => 3,
'zone' => '',
'zip' => '',
'cnname' => '',
'enname' => '',
'name_first_char' => '',
'center' => '',
'lng' => '',
'lat' => '',
'status' => $status,
];
if (OpenArea::create($data)) {
return $this->success('', 'close');
} else {
return $this->error();
}
}
public function edit(OpenArea $area)
{
$list = OpenArea::treeShow();
return view('Admin::areas.edit', compact('area', 'list'));
}
public function update(Request $request, OpenArea $area)
{
$validator = Validator::make($request->all(), [
'name' => 'required|min:2|max:50',
'psn' => 'required',
], [
'name.required' => '名称必须填写',
'name.min' => '名称最少为:min字符',
'name.max' => '名称最多为:max字符',
'psn.required' => '所属必须选择',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
$name = $request->name;
$psn = $request->psn;
$status = $request->status;
$parent = OpenArea::where('sn', $request->psn)->first();
$data = [
'area' => $name,
'name' => $name,
'shortname' => $name,
'info' => $parent->info . ',' . $name,
'shortinfo' => $parent->shortinfo . ',' . $name,
'status' => $status,
];
if ($area->update($request->all())) {
return $this->success('', 'close');
} else {
return $this->error();
}
}
public function open(Request $request, OpenArea $area)
{
$status = $request->status;
$info = OpenArea::when($area, function ($query) use ($area) {
switch ($area->depth) {
case 1:
$query->where('province', $area->name);
break;
case 2:
$query->where('city', $area->name);
break;
case 3:
$query->where('area', $area->name);
break;
}
})->update(['status' => $status]);
if ($info) {
return $this->success('设置成功');
} else {
return $this->error('设置失败');
}
}
public function hot(Request $request, OpenArea $area)
{
if ($area->update($request->all())) {
return $this->success('设置成功');
} else {
return $this->error('设置失败');
}
}
}

View File

@@ -0,0 +1,117 @@
<?php
namespace App\Admin\Controllers;
use App\Models\Article;
use Illuminate\Http\Request;
use Validator;
class ArticleController extends Controller
{
public function notices(Request $request)
{
$title = $request->title;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$type = 'notices';
$articles = Article::where('type', $type)
->when($title, function ($query) use ($title) {
$query->where('title', 'like', "%{$title}%");
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->paginate($numPerPage);
return view('Admin::articles.index', compact('articles', 'type'));
}
public function news(Request $request)
{
$title = $request->title;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$type = 'news';
$articles = Article::where('type', $type)
->when($title, function ($query) use ($title) {
$query->where('title', 'like', "%{$title}%");
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->paginate($numPerPage);
return view('Admin::articles.index', compact('articles', 'type'));
}
public function create(Request $request)
{
return view('Admin::articles.create');
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|max:100',
'description' => 'required|max:200',
'content' => 'required',
'storage_id' => 'required',
], [
'title.required' => '名称必须填写',
'title.max' => '名称长度应在:max以内',
'description.required' => '简介必须填写',
'content.required' => '内容必须填写',
'storage_id.required' => '标题图必须上传',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if (Article::create($request->all())) {
return $this->success('新增文章成功', 'close');
} else {
return $this->error();
}
}
public function edit(Article $article)
{
return view('Admin::articles.edit', compact('article'));
}
public function update(Request $request, Article $article)
{
$validator = Validator::make($request->all(), [
'title' => 'required|max:100',
'description' => 'required|max:200',
'content' => 'required',
'storage_id' => 'required',
], [
'title.required' => '名称必须填写',
'title.max' => '名称长度应在:max以内',
'description.required' => '简介必须填写',
'content.required' => '内容必须填写',
'storage_id.required' => '标题图必须上传',
]);
$data = $request->all();
$article->update($data);
return $this->success('', 'close');
}
public function destroy(Article $article)
{
if ($article->delete()) {
return $this->success();
} else {
return $this->error();
}
}
}

View File

@@ -0,0 +1,11 @@
<?php
namespace App\Admin\Controllers;
class BonusController extends Controller
{
public function index()
{
}
}

View File

@@ -0,0 +1,103 @@
<?php
namespace App\Admin\Controllers;
use App\Models\Category;
use Illuminate\Http\Request;
use Validator;
class CategoryController extends Controller
{
public function index(Request $request)
{
$title = $request->title;
$parent_id = $request->get('parent_id', 0) ?: 0;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$categories = Category::where('parent_id', $parent_id)
->when($title, function ($query) use ($title) {
$query->where('title', 'like', "%{$title}%");
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->paginate($numPerPage);
$categoryTree = Category::with(['children'])->where('parent_id', 0)->orderBy('sort', 'asc')->get();
return view('Admin::categories.index', compact('categoryTree', 'categories'));
}
public function create()
{
$topCates = Category::treeShow();
return view('Admin::categories.create', compact('topCates'));
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|max:16',
'sort' => 'required|integer',
], [
'title.required' => '分类名称必须填写',
'title.max' => '分类名称长度应在:max以内',
'sort.required' => '分类排序必须填写',
'sort.integer' => '分类排序只能是数字',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if (Category::create($request->all())) {
return $this->success('新增分类成功', 'close');
} else {
return $this->error();
}
}
public function edit(Category $category)
{
$topCates = Category::treeShow($category->id);
return view('Admin::categories.edit', compact('topCates', 'category'));
}
public function update(Request $request, Category $category)
{
$validator = Validator::make($request->all(), [
'title' => 'required|max:16',
'sort' => 'required|integer',
], [
'title.required' => '分类名称必须填写',
'title.max' => '分类名称长度应在:max以内',
'sort.required' => '分类排序必须填写',
'sort.integer' => '分类排序只能是数字',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if ($category->update($request->all())) {
return $this->success('编辑分类成功', 'close');
} else {
return $this->error();
}
}
public function destroy(Category $category)
{
$exclude_ids = [1, 2];
if (in_array($category->id, $exclude_ids)) {
return $this->error('此分类不能删除');
}
if ($category->delete()) {
return $this->success();
} else {
return $this->error();
}
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Admin\Controllers;
use RuLong\Panel\Controllers\Controller as BaseController;
class Controller extends BaseController
{
}

View File

@@ -0,0 +1,145 @@
<?php
namespace App\Admin\Controllers;
use Admin;
use App\Models\Seller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use RuLong\Coupon\Models\CouponInfo;
use Validator;
class CouponController extends Controller
{
public function index(Request $request)
{
$title = $request->title;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$coupons = CouponInfo::where('seller_id', Admin::user()->seller_id)
->when($title, function ($query) use ($title) {
$query->where('title', 'like', "%{$title}%");
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})
->orderBy('created_at', 'desc')
->paginate($numPerPage);
return view('Admin::coupon.index', compact('coupons'));
}
public function create()
{
$sellers = Seller::where('status', 1)->get();
return view('Admin::coupon.create', compact('sellers'));
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|min:2|max:50',
'remark' => 'required|min:4',
'bouns' => 'required',
], [
'title.required' => '标题必须填写',
'title.min' => '标题最少为:min字符',
'title.max' => '标题最多为:max字符',
'remark.required' => '券码描述必须填写',
'remark.min' => '券码描述最少:min个字',
'bouns.required' => '享用额度必须填写',
'bouns.number' => '享用额度必须是数字',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
try {
DB::transaction(function () use ($request) {
$status = 0;
if (Admin::user()->seller_id == 1) {
$status = 1;
}
$info = CouponInfo::create($request->all());
});
return $this->success('操作成功', 'close');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
public function edit($id)
{
$info = CouponInfo::find($id);
return view('Admin::coupon.edit', compact('info'));
}
public function update(Request $request, $id)
{
$info = CouponInfo::find($id);
$validator = Validator::make($request->all(), [
'title' => 'required|min:2|max:50',
'remark' => 'required|min:4',
'bouns' => 'required',
], [
'title.required' => '标题必须填写',
'title.min' => '标题最少为:min字符',
'title.max' => '标题最多为:max字符',
'remark.required' => '券码描述必须填写',
'remark.min' => '券码描述最少:min个字',
'bouns.required' => '享用额度必须填写',
'bouns.number' => '享用额度必须是数字',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
try {
DB::transaction(function () use ($request, $info) {
$info = $info->update($request->all());
});
return $this->success('操作成功', 'close');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
public function destroy($id)
{
$info = CouponInfo::find($id);
try {
$info->status = 0;
$info->save();
return $this->success('操作成功');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
/**
* 彻底删除单条目
* @Author:<C.Jason>
* @Date:2018-11-02T13:43:36+0800
* @param [type] $user [description]
* @return [type] [description]
*/
public function delete(CouponInfo $info)
{
try {
DB::transaction(function () use ($info) {
$info->delete();
});
return $this->success('操作成功');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,589 @@
<?php
namespace App\Admin\Controllers;
use Admin;
use App\Models\Cart;
use App\Models\Category;
use App\Models\Goods;
use App\Models\GoodsParams;
use App\Models\Seller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Validator;
class GoodsController extends Controller
{
public function all(Request $request)
{
$title = $request->title;
$seller = $request->seller;
$position = $request->position;
$is_gift = $request->is_gift;
$category_id = $request->category_id;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$goods = Goods::where('status', '>=', 0)
->when($title, function ($query) use ($title) {
$query->where('title', 'like', "%{$title}%");
})
->when($seller, function ($query) use ($seller) {
$query->whereHas('seller', function ($query) use ($seller) {
$query->where('name', 'like', "%{$seller}%");
});
})
->when($category_id, function ($query) use ($category_id) {
$category_ids = Category::where('id', $category_id)->orWhere('parent_id', $category_id)->pluck('id');
return $query->whereIn('category_id', $category_ids);
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})
->when($is_gift, function ($query) use ($is_gift) {
switch ($is_gift) {
case 'is_seller_gift':
$query->where('is_seller_gift', 1);
break;
case 'is_mall_gift':
$query->where('is_mall_gift', 1);
break;
}
})
->when($position, function ($query) use ($position) {
switch ($position) {
case 'is_recommend':
$query->where('is_recommend', 1);
break;
case 'is_hot_sell':
$query->where('is_hot_sell', 1);
break;
case 'is_hot_changed':
$query->where('is_hot_changed', 1);
break;
case 'is_seller_package':
$query->where('is_seller_package', 1);
break;
}
})
->with(['category', 'seller'])
->orderBy('seller_id', 'desc')
->orderBy('status', 'desc')
->orderBy('created_at', 'desc')
->paginate($numPerPage);
$categoies = Category::treeSelect();
return view('Admin::goods.all', compact('goods', 'categoies'));
}
public function index(Request $request)
{
$title = $request->title;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$admin = Admin::user();
$goods = Goods::when(Admin::user()->seller_id > 1, function ($query) use ($admin) {
$query->where('seller_id', $admin->seller_id);
})
->when($title, function ($query) use ($title) {
$query->where('title', 'like', "%{$title}%");
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})
->with(['category', 'seller'])
->orderBy('status', 'desc')
->orderBy('created_at', 'desc')
->paginate($numPerPage);
return view('Admin::goods.index', compact('goods'));
}
public function create()
{
$sellers = Seller::where('status', 1)->get();
$categoies = Category::treeSelect(91);
return view('Admin::goods.create', compact('categoies', 'sellers'));
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|min:2|max:50',
'category_id' => 'required',
'description' => 'required|min:4',
'content' => 'required|min:4',
'storage_id' => 'required',
], [
'title.required' => '标题必须填写',
'title.min' => '标题最少为:min字符',
'title.max' => '标题最多为:max字符',
'category_id.required' => '分类必须选择',
'description.required' => '简介必须填写',
'description.min' => '简介最少:min个字',
'content.required' => '内容必须填写',
'content.min' => '内容最少:min个字',
'storage_id.required' => '标题图必须上传',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if (!isset($request->params)) {
return $this->error('商品规格必须填写');
}
foreach ($request->params as $p) {
$validator = Validator::make($p, [
'original' => 'required|numeric|min:0.001',
'price' => 'required|numeric|min:0.001',
'stock' => 'required|integer|min:1',
'heavy' => 'required|numeric|min:0.001',
], [
'original.required' => '原价必须填写',
'original.numeric' => '原价必须为数字',
'original.min' => '原价最小值:min',
'price.required' => '售价必须填写',
'price.numeric' => '售价必须为数字',
'price.min' => '售价最小值:min',
'stock.required' => '库存必须填写',
'stock.integer' => '库存必须为整数',
'stock.min' => '库存最小值:min',
'heavy.required' => '重量必须填写',
'heavy.numeric' => '重量必须为数字',
'heavy.min' => '重量最小值:min',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
}
try {
DB::transaction(function () use ($request) {
$status = 1;
if (Admin::user()->seller_id == 1) {
$status = 1;
}
$seller_id = Admin::id() == 1 ? $request->seller_id : Admin::user()->seller_id;
$goods = Goods::create([
'title' => $request->title,
'category_id' => $request->category_id,
'description' => $request->description,
'content' => $request->content,
'storage_id' => $request->storage_id,
'seller_id' => $seller_id,
'status' => $status,
]);
$goods->params()->createMany($request->params);
});
return $this->success('操作成功', 'close');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
public function edit(Goods $good)
{
$categoies = Category::treeSelect(91);
$sellers = Seller::where('status', 1)->get();
return view('Admin::goods.edit', compact('categoies', 'good', 'sellers'));
}
public function magageedit(Goods $good)
{
$categoies = Category::treeSelect();
return view('Admin::goods.magageedit', compact('categoies', 'good'));
}
public function update(Request $request, Goods $good)
{
$validator = Validator::make($request->all(), [
'title' => 'required|min:2|max:50',
'category_id' => 'required',
'description' => 'required|min:4',
'content' => 'required|min:4',
'storage_id' => 'required',
], [
'title.required' => '标题必须填写',
'title.min' => '标题最少为:min字符',
'title.max' => '标题最多为:max字符',
'category_id.required' => '分类必须选择',
'description.required' => '简介必须填写',
'description.min' => '简介最少:min个字',
'content.required' => '内容必须填写',
'content.min' => '内容最少:min个字',
'storage_id.required' => '标题图必须上传',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if (!isset($request->params)) {
return $this->error('商品规格必须填写');
}
foreach ($request->params as $p) {
$validator = Validator::make($p, [
'original' => 'required|numeric|min:0.001',
'price' => 'required|numeric|min:0.001',
// 'score' => 'required|numeric|min:0',
'stock' => 'required|integer|min:1',
'heavy' => 'required|numeric|min:0.001',
], [
'original.required' => '原价必须填写',
'original.numeric' => '原价必须为数字',
'original.min' => '原价最小值:min',
'price.required' => '售价必须填写',
'price.numeric' => '售价必须为数字',
'price.min' => '售价最小值:min',
'stock.required' => '库存必须填写',
'stock.integer' => '库存必须为整数',
'stock.min' => '库存最小值:min',
'heavy.required' => '重量必须填写',
'heavy.numeric' => '重量必须为数字',
'heavy.min' => '重量最小值:min',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
}
try {
DB::transaction(function () use ($good, $request) {
$seller_id = Admin::id() == 1 ? $request->seller_id : Admin::user()->seller_id;
$good->update([
'title' => $request->title,
'category_id' => $request->category_id,
'description' => $request->description,
'content' => $request->content,
'seller_id' => $seller_id,
'storage_id' => $request->storage_id,
]);
$ids = [];
foreach ($request->params as $param) {
if (isset($param['id'])) {
$params = GoodsParams::find($param['id']);
$params->update($param);
array_push($ids, $param['id']);
} else {
$params = $good->params()->create($param);
array_push($ids, $params['id']);
}
}
$good->params()->where('status', 1)->whereNotIn('id', $ids)->update(['status' => 0, 'stock' => 0]);
});
return $this->success('操作成功');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
public function destroy(Goods $good)
{
// if ($good->seller_id != Admin::user()->seller_id) {
// return $this->error('非法操作');
// }
try {
DB::transaction(function () use ($good) {
Cart::where('goods_id', $good->id)->delete();
// $good->params()->update(['status' => 0, 'stock' => 0]);
$good->status = 0;
$good->save();
});
return $this->success('操作成功');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
public function recycle(Request $request)
{
$title = $request->title;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$goods = Goods::where('seller_id', Admin::user()->seller_id)->onlyTrashed()
->when($title, function ($query) use ($title) {
$query->where('title', 'like', "%{$title}%");
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})
->with(['category', 'seller'])
->paginate($numPerPage);
return view('Admin::goods.recycle', compact('goods'));
}
/**
* 清空回收站
* 未考虑删除关联数据的问题
* @Author:<C.Jason>
* @Date:2018-11-02T13:41:40+0800
* @return [type] [description]
*/
public function clean()
{
if (Goods::where('seller_id', Admin::user()->seller_id)->onlyTrashed()->forceDelete()) {
return $this->success();
} else {
return $this->error();
}
}
/**
* 还原
* @Author:<C.Jason>
* @Date:2018-11-02T13:43:47+0800
* @param [type] $user [description]
* @return [type] [description]
*/
public function resume($good)
{
if (Goods::where('seller_id', Admin::user()->seller_id)->withTrashed()->where('id', $good)->restore()) {
return $this->success();
} else {
return $this->error();
}
}
/**
* 彻底删除单条目
* @Author:<C.Jason>
* @Date:2018-11-02T13:43:36+0800
* @param [type] $user [description]
* @return [type] [description]
*/
public function delete(Goods $good)
{
try {
DB::transaction(function () use ($good) {
$good->params()->delete();
$good->delete();
});
return $this->success('操作成功');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
public function putOn(Request $request, Goods $good)
{
if ($request->isMethod('PUT')) {
$validator = Validator::make($request->all(), [
'title' => 'required|min:2|max:50',
'category_id' => 'required',
'description' => 'required|min:4',
'content' => 'required|min:4',
'storage_id' => 'required',
], [
'title.required' => '标题必须填写',
'title.min' => '标题最少为:min字符',
'title.max' => '标题最多为:max字符',
'category_id.required' => '分类必须选择',
'description.required' => '简介必须填写',
'description.min' => '简介最少:min个字',
'content.required' => '内容必须填写',
'content.min' => '内容最少:min个字',
'storage_id.required' => '标题图必须上传',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if (!isset($request->params)) {
return $this->error('商品规格必须填写');
}
foreach ($request->params as $p) {
$validator = Validator::make($p, [
'original' => 'required|numeric|min:0.001',
'price' => 'required|numeric|min:0.001',
'stock' => 'required|integer|min:1',
'heavy' => 'required|numeric|min:0.001',
], [
'original.required' => '原价必须填写',
'original.numeric' => '原价必须为数字',
'original.min' => '原价最小值:min',
'price.required' => '售价必须填写',
'price.numeric' => '售价必须为数字',
'price.min' => '售价最小值:min',
'stock.required' => '库存必须填写',
'stock.integer' => '库存必须为整数',
'stock.min' => '库存最小值:min',
'heavy.required' => '重量必须填写',
'heavy.numeric' => '重量必须为数字',
'heavy.min' => '重量最小值:min',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if ($p['score'] > $p['price']) {
return $this->error('可使用积分数量不能大于商品价格');
}
}
try {
DB::transaction(function () use ($good, $request) {
$good->update([
'title' => $request->title,
'category_id' => $request->category_id,
'description' => $request->description,
'content' => $request->content,
'storage_id' => $request->storage_id,
'status' => 1,
]);
$ids = [];
foreach ($request->params as $param) {
if (isset($param['id'])) {
$params = GoodsParams::find($param['id']);
$params->update($param);
array_push($ids, $param['id']);
} else {
$params = $good->params()->create($param);
array_push($ids, $params['id']);
}
}
});
return $this->success('操作成功');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
} else {
$categoies = Category::treeSelect();
return view('Admin::goods.putOn', compact('categoies', 'good'));
}
}
public function setting(Request $request, Goods $good)
{
if ($request->isMethod('PUT')) {
try {
$good->update([
'is_recommend' => $request->is_recommend,
'is_hot_sell' => $request->is_hot_sell,
'is_hot_changed' => $request->is_hot_changed,
'is_seller_package' => $request->is_seller_package,
'banner_id' => $request->is_seller_package == 1 && $request->banner_id ? $request->banner_id : 0,
]);
return $this->success('设置成功', 'close');
} catch (\Exception $e) {
return $this->error('设置失败' . $e->getmessage());
}
} else {
return view('Admin::goods.setting', compact('good'));
}
}
public function setgift(Goods $good)
{
try {
DB::transaction(function () use ($good) {
$good->is_seller_gift = 1;
$good->save();
});
return $this->success('设置成功');
} catch (\Exception $e) {
return $this->error('设置失败' . $e->getmessage());
}
}
public function cancelgift(Goods $good)
{
try {
DB::transaction(function () use ($good) {
$good->is_seller_gift = 0;
$good->save();
});
return $this->success('设置成功');
} catch (\Exception $e) {
return $this->error('设置失败' . $e->getmessage());
}
}
public function setlottery(Goods $good)
{
try {
DB::transaction(function () use ($good) {
$good->is_lottery_gift = 1;
$good->save();
});
return $this->success('设置成功');
} catch (\Exception $e) {
return $this->error('设置失败' . $e->getmessage());
}
}
public function cancellottery(Goods $good)
{
try {
DB::transaction(function () use ($good) {
$good->is_lottery_gift = 0;
$good->save();
});
return $this->success('设置成功');
} catch (\Exception $e) {
return $this->error('设置失败' . $e->getmessage());
}
}
public function setFull(Goods $good)
{
try {
DB::transaction(function () use ($good) {
$good->is_mall_gift = 1;
$good->save();
});
return $this->success('设置成功');
} catch (\Exception $e) {
return $this->error('设置失败' . $e->getmessage());
}
}
public function cancelFull(Goods $good)
{
try {
DB::transaction(function () use ($good) {
$good->is_mall_gift = 0;
$good->save();
});
return $this->success('设置成功');
} catch (\Exception $e) {
return $this->error('设置失败' . $e->getmessage());
}
}
}

View File

@@ -0,0 +1,11 @@
<?php
namespace App\Admin\Controllers;
class HomeController extends Controller
{
public function dashboard()
{
return view('Admin::home.dashboard');
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace App\Admin\Controllers;
use App\Helpers\CDKEY;
class JasonController extends Controller
{
public function index()
{
$s = request()->get('d');
dump($s);
dump(CDKEY::parse($s));
($g = CDKEY::generator());
echo $g['qrcode'];
return [123];
}
}

View File

@@ -0,0 +1,146 @@
<?php
namespace App\Admin\Controllers;
use App\Models\Category;
use App\Models\Seller;
use App\Models\SellerLesson;
use App\Models\SellerLessonLog;
use Illuminate\Http\Request;
use Validator;
class LessonController extends Controller
{
public function index(Request $request)
{
if (\Admin::id() != 1 && \Admin::user()->seller->type != 'organ') {
return $this->error('您没有权限');
}
$title = $request->title;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$lists = SellerLesson::with('organ')
->withCount('logs')
->when($title, function ($query) use ($title) {
$query->where('title', 'like', "%" . $title . "%");
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})
->paginate($numPerPage);
return view('Admin::lesson.index', compact('lists'));
}
public function create()
{
$organs = Seller::where('status', 1)->where('type', 'organ')->get();
$categoies = Category::treeSelect(1);
return view('Admin::lesson.create', compact('organs', 'categoies'));
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|min:2|max:50',
'chapter' => 'required',
'price' => 'required',
'crowd' => 'required',
'crowd_age' => 'required',
'maximum' => 'required',
'seller_id' => 'required',
'description' => 'required',
'storage_id' => 'required',
'content' => 'required',
], [
'name.required' => '课程名称必须填写',
'name.min' => '课程名称最少为:min字符',
'name.max' => '课程名称最多为:max字符',
'chapter.required' => '章节数必须填写',
'price.required' => '价格必须填写',
'crowd.required' => '适合人群必须填写',
'crowd_age.required' => '适合年龄必须填写',
'maximum.required' => '报名人数必须填写',
'seller_id.required' => '机构必须选择',
'description.required' => '简介必须填写',
'storage_id.required' => '图片必须上传',
'content.required' => '详情必须填写',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if (SellerLesson::create($request->all())) {
return $this->success('', 'close');
} else {
return $this->error();
}
}
public function edit(SellerLesson $lesson)
{
$organs = Seller::where('status', 1)->where('type', 'organ')->get();
$categoies = Category::treeSelect(1);
return view('Admin::lesson.edit', compact('lesson', 'organs', 'categoies'));
}
public function update(Request $request, SellerLesson $lesson)
{
$validator = Validator::make($request->all(), [
'title' => 'required|min:2|max:50',
'chapter' => 'required',
'price' => 'required',
'crowd' => 'required',
'crowd_age' => 'required',
'maximum' => 'required',
'seller_id' => 'required',
'description' => 'required',
'storage_id' => 'required',
'content' => 'required',
], [
'name.required' => '课程名称必须填写',
'name.min' => '课程名称最少为:min字符',
'name.max' => '课程名称最多为:max字符',
'chapter.required' => '章节数必须填写',
'price.required' => '价格必须填写',
'crowd.required' => '适合人群必须填写',
'crowd_age.required' => '适合年龄必须填写',
'maximum.required' => '报名人数必须填写',
'seller_id.required' => '机构必须选择',
'description.required' => '简介必须填写',
'storage_id.required' => '图片必须上传',
'content.required' => '详情必须填写',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if ($lesson->update($request->all())) {
return $this->success('', 'close');
} else {
return $this->error();
}
}
public function delete(SellerLesson $lesson)
{
if ($lesson->delete()) {
return $this->success();
} else {
return $this->error();
}
}
public function logs($lesson)
{
$logs = SellerLessonLog::where('lesson_id', $lesson)->paginate();
return view('Admin::lesson.logs', compact('logs'));
}
}

View File

@@ -0,0 +1,264 @@
<?php
namespace App\Admin\Controllers;
use App\Models\Activity;
use App\Models\GoodsParams;
use App\Models\Lottery;
use App\Models\LotteryGift;
use App\Models\LotteryLog;
use Illuminate\Http\Request;
use RuLong\Coupon\Models\CouponInfo;
use Validator;
class LotteryController extends Controller
{
public function index(Request $request)
{
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$lists = Lottery::withCount('logs')
->withCount('gifts')
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})
->paginate($numPerPage);
return view('Admin::lottery.index', compact('lists'));
}
public function create()
{
return view('Admin::lottery.create');
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|min:2|max:50',
'status' => 'required',
'start_at' => 'required',
'end_at' => 'required',
], [
'title.required' => '名称必须填写',
'title.min' => '名称最少为:min字符',
'title.max' => '名称最多为:max字符',
'status.required' => '状态必须选择',
'start_at.required' => '开始时间填写',
'end_at.required' => '结束时间填写',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if (Lottery::create($request->all())) {
return $this->success('', 'close');
} else {
return $this->error();
}
}
public function edit(Lottery $lottery)
{
return view('Admin::lottery.edit', compact('lottery'));
}
public function update(Request $request, Lottery $lottery)
{
$validator = Validator::make($request->all(), [
'title' => 'required|min:2|max:50',
'status' => 'required',
'start_at' => 'required',
'end_at' => 'required',
], [
'title.required' => '名称必须填写',
'title.min' => '名称最少为:min字符',
'title.max' => '名称最多为:max字符',
'status.required' => '状态必须选择',
'start_at.required' => '开始时间填写',
'end_at.required' => '结束时间填写',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if ($lottery->update($request->all())) {
return $this->success('', 'close');
} else {
return $this->error();
}
}
public function logs(Lottery $lottery)
{
$logs = LotteryLog::where('lottery_id', $lottery->id)->paginate();
return view('Admin::lottery.logs', compact('logs'));
}
public function gifts(Request $request, Lottery $lottery)
{
$lists = LotteryGift::where('lottery_id', $lottery->id)->orderBy('level', 'asc')->paginate();
return view('Admin::lottery.gifts', compact('lottery', 'lists'));
}
//添加奖品
public function addgifts(Request $request, Lottery $lottery)
{
$item_type = LotteryGift::$class[$request->type] ?? 'App\Models\GoodsParams';
if ($request->isMethod('POST')) {
$validator = Validator::make($request->all(), [
'number' => 'required',
'level' => 'required',
'chance' => 'required',
], [
'number.required' => '请输入商品数量',
'level.required' => '请选择奖项',
'chance.required' => '请填写概率',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if ($request->type && empty($request->item_id)) {
return $this->error('请选择商品');
}
if (!$request->type) {
$request->item_id = '';
$request->item_type = '';
}
$data = [
'level' => $request->level,
'lottery_id' => $request->lottery_id,
'chance' => $request->chance,
'item_id' => $request->item_id,
'item_type' => $request->item_type,
'type' => $request->type,
'number' => $request->number,
'site' => LotteryGift::$chances[$request->level],
];
if (LotteryGift::create($data)) {
return $this->success('', 'close');
} else {
return $this->error();
}
} else {
$hasLevels = LotteryGift::where('lottery_id', $lottery->id)->pluck('level')->toArray();
$params_id = LotteryGift::where('lottery_id', $lottery->id)
->where('type', 1)
->where('item_type', $item_type)
->pluck('item_id')
->toArray();
if ($request->type == 'activity') {
$params = Activity::where('status', 1)
->whereNotIn('id', $params_id)
->get();
} elseif ($request->type == 'goods') {
$params = GoodsParams::with(['goods'])
->whereHas('goods', function ($query) {
$query->where('status', 1)->where('is_lottery_gift', 1);
})
->whereNotIn('id', $params_id)
->get();
} elseif ($request->type == 'coupon') {
$params = CouponInfo::where('status', 1)->where('type', 'lottery')
->whereNotIn('id', $params_id)
->get();
}
$levels = LotteryGift::$levels;
$item_type = LotteryGift::$class[$request->type] ?? 'App\Models\GoodsParams';
return view('Admin::lottery.addgifts', compact('lottery', 'params', 'levels', 'hasLevels', 'item_type'));
}
}
//编辑奖品
public function editgifts(Request $request, LotteryGift $gift)
{
if ($request->isMethod('PUT')) {
$validator = Validator::make($request->all(), [
'number' => 'required',
'level' => 'required',
'chance' => 'required',
'item_id' => 'required',
], [
'number.required' => '请输入商品数量',
'level.required' => '请选择奖项',
'chance.required' => '请填写概率',
'item_id.required' => '请选择商品',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
$data = [
'level' => $request->level,
'chance' => $request->chance,
'item_id' => $request->item_id,
'type' => $request->type,
'number' => $request->number,
'site' => LotteryGift::$chances[$request->level],
];
if ($gift->update($data)) {
return $this->success('', 'close');
} else {
return $this->error();
}
} else {
$hasLevels = LotteryGift::where('lottery_id', $gift->lottery_id)->pluck('level')->toArray();
$params_id = LotteryGift::where('lottery_id', $gift->lottery_id)
->where('type', 1)
->where('item_type', $gift->item_type)
->where('id', '<>', $gift->id)
->pluck('item_id')
->toArray();
if ($gift->item_type == 'App\Models\Activity') {
$params = Activity::where('status', 1)
->whereNotIn('id', $params_id)
->get();
} elseif ($gift->item_type == 'App\Models\GoodsParams') {
$params = GoodsParams::with(['goods'])
->whereHas('goods', function ($query) {
$query->where('status', 1)->where('is_lottery_gift', 1);
})
->whereNotIn('id', $params_id)
->get();
} elseif ($gift->item_type == 'RuLong\Coupon\Models\CouponInfo') {
$params = CouponInfo::where('status', 1)->where('type', 'lottery')
->whereNotIn('id', $params_id)
->get();
} else {
$params = collect();
}
$levels = LotteryGift::$levels;
return view('Admin::lottery.editgifts', compact('gift', 'params', 'levels', 'hasLevels'));
}
}
//删除奖品
public function delgifts(Request $request, LotteryGift $gift)
{
if ($gift->delete()) {
return $this->success();
} else {
return $this->error();
}
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace App\Admin\Controllers;
use Illuminate\Http\Request;
use Illuminate\Notifications\DatabaseNotification;
class NotificationController extends Controller
{
public function index(Request $request)
{
$nickname = $request->nickname;
$start = $request->start;
$end = $request->end;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$notifications = DatabaseNotification::when($start && $end, function ($query) use ($start,$end) {
return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})->when($start && !$end, function ($query) use ($start) {
return $query->where('created_at', '>=', $start);
})->when(!$start && $end, function ($query) use ($end) {
return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
})->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->orderBy('created_at', 'desc')->paginate($numPerPage);
return view('Admin::notifications.index', compact('notifications'));
}
public function destroy(Request $request, $notification)
{
if ($notification == 'batch') {
$result = DatabaseNotification::whereIn('id', $request->ids)->delete();
} else {
$result = DatabaseNotification::where('id', $notification)->delete();
}
if ($result) {
return $this->success();
} else {
return $this->error();
}
}
}

View File

@@ -0,0 +1,108 @@
<?php
namespace App\Admin\Controllers;
use Admin;
use Illuminate\Http\Request;
use RuLong\Order\Models\Order;
use App\Models\GoodsParams;
use App\Models\Goods;
class OrderAllController extends Controller
{
public function index(Request $request)
{
$orderid = $request->orderid;
$mobile = $request->mobile;
$nickname = $request->nickname;
$seller = $request->seller;
$state = $request->state;
$start = $request->start;
$end = $request->end;
$title = $request->title;
$item_type = $request->item_type;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$orders = Order::when($seller, function ($query) use ($seller) {
$query->whereHas('seller', function ($query) use ($seller) {
$query->where('name', 'like', "%{$seller}%");
});
})
->when($orderid, function ($query) use ($orderid) {
$query->where('orderid', 'like', "%{$orderid}%");
})
->when($mobile, function ($query) use ($mobile) {
$query->whereHas('user', function ($query) use ($mobile) {
$query->where('mobile', 'like', "%{$mobile}%");
});
})
->when($nickname, function ($query) use ($nickname) {
$query->whereHas('user', function ($query) use ($nickname) {
return $query->whereHas('info', function ($query) use ($nickname) {
$query->where('nickname', 'like', "%{$nickname}%");
});
});
})
->when($title, function ($query) use ($title) {
$goods_ids = Goods::where('title', 'like',"%{$title}%")->pluck('id');
$params_ids = GoodsParams::whereIn('goods_id',$goods_ids)->pluck('id');
$query->whereHas('details', function ($query) use ($params_ids) {
return $query->whereIn('item_id',$params_ids);
});
})
->when($item_type, function ($query) use($item_type){
return $query->where('item_type',$item_type);
})
->when($state == '', function ($query){
return $query->where('state', '<>',Order::ORDER_CLOSED);
})
->when($state, function ($query) use ($state) {
switch ($state) {
case 'UNPAY':
return $query->where('state', Order::ORDER_UNPAY);
break;
case 'PAID':
return $query->whereIn('state', [Order::ORDER_PAID, Order::ORDER_DELIVER]);
break;
case 'DELIVERED':
return $query->where('state', Order::ORDER_DELIVERED);
break;
case 'SIGNED':
return $query->where('state', Order::ORDER_SIGNED);
break;
case 'CLOSED':
return $query->where('state', Order::ORDER_CLOSED);
break;
case 'CANCEL':
return $query->where('state', Order::ORDER_CANCEL);
break;
case 'COMPLETED':
return $query->where('state', Order::ORDER_COMPLETED);
break;
default:
break;
}
})
->when($start && $end, function ($query) use ($start, $end) {
$query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})
->when($start && !$end, function ($query) use ($start) {
$query->where('created_at', '>=', $start);
})
->when((!$start && $end), function ($query) use ($end) {
$query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})
->with(['seller', 'user.info'])
->orderBy('created_at', 'desc')
->paginate($numPerPage);
return view('Admin::orders.allSellerOrder', compact('orders'));
}
}

View File

@@ -0,0 +1,372 @@
<?php
namespace App\Admin\Controllers;
use Admin;
use App\Models\Goods;
use App\Models\GoodsParams;
use Illuminate\Http\Request;
use Logistic;
use RuLong\Order\Models\Order;
class OrderController extends Controller
{
public function index(Request $request)
{
$orderid = $request->orderid;
$mobile = $request->mobile;
$nickname = $request->nickname;
$state = $request->state;
$start = $request->start;
$end = $request->end;
$title = $request->title;
$item_type = $request->item_type;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$admin = Admin::user();
$orders = Order::when($admin->id > 1, function ($query) use ($admin) {
$query->where('seller_id', $admin->seller_id);
})
->when($orderid, function ($query) use ($orderid) {
$query->where('orderid', 'like', "%{$orderid}%");
})
->when($mobile, function ($query) use ($mobile) {
$query->whereHas('user', function ($query) use ($mobile) {
$query->where('mobile', 'like', "%{$mobile}%");
});
})
->when($nickname, function ($query) use ($nickname) {
$query->whereHas('user', function ($query) use ($nickname) {
return $query->whereHas('info', function ($query) use ($nickname) {
$query->where('nickname', 'like', "%{$nickname}%");
});
});
})
->when($title, function ($query) use ($title) {
$goods_ids = Goods::where('title', 'like', "%{$title}%")->pluck('id');
$params_ids = GoodsParams::whereIn('goods_id', $goods_ids)->pluck('id');
$query->whereHas('details', function ($query) use ($params_ids) {
return $query->whereIn('item_id', $params_ids);
});
})
->when($item_type, function ($query) use ($item_type) {
return $query->where('item_type', $item_type);
})
->when($state == '', function ($query) {
return $query->where('state', '<>', Order::ORDER_CLOSED);
})
->when($state, function ($query) use ($state) {
switch ($state) {
case 'UNPAY':
return $query->where('state', Order::ORDER_UNPAY);
break;
case 'PAID':
return $query->whereIn('state', [Order::ORDER_PAID, Order::ORDER_DELIVER]);
break;
case 'DELIVERED':
return $query->where('state', Order::ORDER_DELIVERED);
break;
case 'SIGNED':
return $query->where('state', Order::ORDER_SIGNED);
break;
case 'CLOSED':
return $query->where('state', Order::ORDER_CLOSED);
break;
case 'CANCEL':
return $query->where('state', Order::ORDER_CANCEL);
break;
case 'COMPLETED':
return $query->where('state', Order::ORDER_COMPLETED);
break;
default:
break;
}
})
->when($start && $end, function ($query) use ($start, $end) {
$query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})
->when($start && !$end, function ($query) use ($start) {
$query->where('created_at', '>=', $start);
})
->when((!$start && $end), function ($query) use ($end) {
$query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})
->with(['seller', 'user.info'])
->orderBy('created_at', 'desc')
->paginate($numPerPage);
return view('Admin::orders.index', compact('orders'));
}
public function unpay(Request $request)
{
$orderid = $request->orderid;
$mobile = $request->mobile;
$nickname = $request->nickname;
$start = $request->start;
$end = $request->end;
$title = $request->title;
$item_type = $request->item_type;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$orders = Order::Unpaid()->where('seller_id', Admin::user()->seller_id)
->when($orderid, function ($query) use ($orderid) {
$query->where('orderid', 'like', "%{$orderid}%");
})
->when($mobile, function ($query) use ($mobile) {
$query->whereHas('user', function ($query) use ($mobile) {
$query->where('mobile', 'like', "%{$mobile}%");
});
})
->when($nickname, function ($query) use ($nickname) {
$query->whereHas('user', function ($query) use ($nickname) {
return $query->whereHas('info', function ($query) use ($nickname) {
$query->where('nickname', 'like', "%{$nickname}%");
});
});
})
->when($title, function ($query) use ($title) {
$goods_ids = Goods::where('title', 'like', "%{$title}%")->pluck('id');
$params_ids = GoodsParams::whereIn('goods_id', $goods_ids)->pluck('id');
$query->whereHas('details', function ($query) use ($params_ids) {
return $query->whereIn('item_id', $params_ids);
});
})
->when($item_type, function ($query) use ($item_type) {
return $query->where('item_type', $item_type);
})
->when($start && $end, function ($query) use ($start, $end) {
return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})
->when($start && !$end, function ($query) use ($start) {
return $query->where('created_at', '>=', $start);
})
->when(!$start && $end, function ($query) use ($end) {
return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})
->with(['seller', 'user.info'])
->orderBy('created_at', 'desc')
->paginate($numPerPage);
return view('Admin::orders.index', compact('orders'));
}
public function paid(Request $request)
{
$orderid = $request->orderid;
$mobile = $request->mobile;
$nickname = $request->nickname;
$start = $request->start;
$end = $request->end;
$title = $request->title;
$item_type = $request->item_type;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$orders = Order::UnDeliver()->where('seller_id', Admin::user()->seller_id)
->when($orderid, function ($query) use ($orderid) {
$query->where('orderid', 'like', "%{$orderid}%");
})
->when($mobile, function ($query) use ($mobile) {
$query->whereHas('user', function ($query) use ($mobile) {
$query->where('mobile', 'like', "%{$mobile}%");
});
})
->when($nickname, function ($query) use ($nickname) {
$query->whereHas('user', function ($query) use ($nickname) {
return $query->whereHas('info', function ($query) use ($nickname) {
$query->where('nickname', 'like', "%{$nickname}%");
});
});
})
->when($title, function ($query) use ($title) {
$goods_ids = Goods::where('title', 'like', "%{$title}%")->pluck('id');
$params_ids = GoodsParams::whereIn('goods_id', $goods_ids)->pluck('id');
$query->whereHas('details', function ($query) use ($params_ids) {
return $query->whereIn('item_id', $params_ids);
});
})
->when($item_type, function ($query) use ($item_type) {
return $query->where('item_type', $item_type);
})
->when($start && $end, function ($query) use ($start, $end) {
return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})
->when($start && !$end, function ($query) use ($start) {
return $query->where('created_at', '>=', $start);
})
->when(!$start && $end, function ($query) use ($end) {
return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})
->with(['seller', 'user.info'])
->orderBy('created_at', 'desc')
->paginate($numPerPage);
return view('Admin::orders.index', compact('orders'));
}
public function signed(Request $request)
{
$orderid = $request->orderid;
$mobile = $request->mobile;
$nickname = $request->nickname;
$start = $request->start;
$end = $request->end;
$title = $request->title;
$item_type = $request->item_type;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$orders = Order::Signed()->where('seller_id', Admin::user()->seller_id)
->when($orderid, function ($query) use ($orderid) {
$query->where('orderid', 'like', "%{$orderid}%");
})
->when($mobile, function ($query) use ($mobile) {
$query->whereHas('user', function ($query) use ($mobile) {
$query->where('mobile', 'like', "%{$mobile}%");
});
})
->when($nickname, function ($query) use ($nickname) {
$query->whereHas('user', function ($query) use ($nickname) {
return $query->whereHas('info', function ($query) use ($nickname) {
$query->where('nickname', 'like', "%{$nickname}%");
});
});
})
->when($item_type, function ($query) use ($item_type) {
return $query->where('item_type', $item_type);
})
->when($title, function ($query) use ($title) {
$goods_ids = Goods::where('title', 'like', "%{$title}%")->pluck('id');
$params_ids = GoodsParams::whereIn('goods_id', $goods_ids)->pluck('id');
$query->whereHas('details', function ($query) use ($params_ids) {
return $query->whereIn('item_id', $params_ids);
});
})
->when($start && $end, function ($query) use ($start, $end) {
return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})
->when($start && !$end, function ($query) use ($start) {
return $query->where('created_at', '>=', $start);
})
->when(!$start && $end, function ($query) use ($end) {
return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})
->with(['seller', 'user.info'])
->orderBy('created_at', 'desc')
->paginate($numPerPage);
return view('Admin::orders.index', compact('orders'));
}
public function show(Order $order)
{
return view('Admin::orders.show', compact('order'));
}
/**
* 订单发货
* @Author:<C.Jason>
* @Date:2018-11-02T14:47:34+0800
* @return [type] [description]
*/
public function deliver(Request $request, Order $order)
{
if ($request->isMethod('PUT')) {
try {
$order->deliver($request->company, $request->number);
return $this->success('发货成功', 'close');
} catch (\Exception $e) {
return $this->error('发货失败' . $e->getmessage());
}
} else {
return view('Admin::orders.deliver', compact('order'));
}
}
public function signin(Order $order)
{
try {
$order->deliver('自提', '自提');
$order->signin();
return $this->success('操作成功');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
/**
* 订单发货
* @Author:<C.Jason>
* @Date:2018-11-02T14:47:34+0800
* @return [type] [description]
*/
public function remark(Request $request, Order $order)
{
if ($request->isMethod('PUT')) {
try {
$order->remark_mgr = $request->remark_mgr;
$order->save();
return $this->success('备注成功', 'close');
} catch (\Exception $e) {
return $this->error('备注失败' . $e->getmessage());
}
} else {
return view('Admin::orders.remark', compact('order'));
}
}
/**
* 取消订单
* @Author:<C.Jason>
* @Date:2018-11-02T14:45:57+0800
* @return [type] [description]
*/
public function destroy()
{}
public function close(Order $order)
{
try {
$order->close();
return $this->success('操作成功');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
public function complete(Order $order)
{
try {
$order->complete();
return $this->success('操作成功');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
public function logistic(Order $order)
{
$message = Logistic::getMessage($order->express->company ?? '', $order->express->number ?? ''); //类型csn,编号
return view('Admin::orders.logistic', compact('order', 'message'));
}
}

View File

@@ -0,0 +1,184 @@
<?php
namespace App\Admin\Controllers;
use App\Models\SalesReport;
use Illuminate\Http\Request;
use Admin;
use RuLong\Order\Models\Order;
use App\Models\GoodsParams;
use App\Models\Goods;
use RuLong\Order\Models\OrderDetail;
use App\Models\Seller;
use Illuminate\Support\Facades\DB;
class OrderDataController extends Controller
{
public function report(Request $request)
{
$seller_id = Admin::id() == 1 ? $request->seller_id : Admin::user()->seller_id;
$numPerPage = $request->numPerPage ?: 100;
$start = $request->start;
$end = $request->end;
$reports = SalesReport::when($seller_id,function ($q) use($seller_id){$q->where('seller_id', $seller_id);})
->where('state','DELIVERED')
->when($start && $end, function ($query) use ($start, $end) {
$query->whereBetween('action_time', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})
->when($start && !$end, function ($query) use ($start) {
$query->where('action_time', '>=', $start);
})
->when((!$start && $end), function ($query) use ($end) {
$query->where('action_time', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
})->orderBy('seller_id','asc')->orderBy('action_time','desc')->paginate($numPerPage);
$sellers = Seller::where('status', 1)->get();
return view('Admin::orderData.report', compact('reports','sellers'));
}
public function signed(Request $request)
{
$seller_id = Admin::id() == 1 ? $request->seller_id : Admin::user()->seller_id;
$numPerPage = $request->numPerPage ?: 100;
$start = $request->start;
$end = $request->end;
$reports = SalesReport::when($seller_id,function ($q) use($seller_id){$q->where('seller_id', $seller_id);})
->where('state','SIGNED')
->when($start && $end, function ($query) use ($start, $end) {
$query->whereBetween('action_time', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})
->when($start && !$end, function ($query) use ($start) {
$query->where('action_time', '>=', $start);
})
->when((!$start && $end), function ($query) use ($end) {
$query->where('action_time', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
})->orderBy('seller_id','asc')->orderBy('action_time','desc')->paginate($numPerPage);
$sellers = Seller::where('status', 1)->get();
return view('Admin::orderData.signed', compact('reports','sellers'));
}
public function order(Request $request)
{
$sellers = Seller::where('status', 1)->get();
$orderid = $request->orderid;
$mobile = $request->mobile;
$nickname = $request->nickname;
$start = $request->start;
$end = $request->end;
$item_id = $request->item_id;
$item_type = $request->item_type;
$type = $request->type;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$seller_id = Admin::id() == 1 ? $request->seller_id : Admin::user()->seller_id;
$orders = Order::when($seller_id,function ($q) use($seller_id){$q->where('seller_id', $seller_id);})
->when($orderid, function ($query) use ($orderid) {
$query->where('orderid', 'like', "%{$orderid}%");
})
->when($mobile, function ($query) use ($mobile) {
$query->whereHas('user', function ($query) use ($mobile) {
$query->where('mobile', 'like', "%{$mobile}%");
});
})
->when($nickname, function ($query) use ($nickname) {
$query->whereHas('user', function ($query) use ($nickname) {
return $query->whereHas('info', function ($query) use ($nickname) {
$query->where('nickname', 'like', "%{$nickname}%");
});
});
})
->when($item_id, function ($query) use ($item_id) {
$query->whereHas('details', function ($query) use ($item_id) {
return $query->where('item_id',$item_id);
});
})
->when($item_type, function ($query) use($item_type){
return $query->where('item_type',$item_type);
})->
whereHas('logs', function ($query) use ($start,$end,$type) {
$query->where('state',$type)->when($start && $end, function ($query) use ($start, $end) {
$query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})
->when($start && !$end, function ($query) use ($start) {
$query->where('created_at', '>=', $start);
})
->when((!$start && $end), function ($query) use ($end) {
$query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
});
})->where('state', '<>',Order::ORDER_CLOSED)
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})
->with(['seller', 'user.info'])
->orderBy('created_at', 'desc')
->paginate($numPerPage);
return view('Admin::orderData.order', compact('sellers','orders','type','item_id'));
}
public function dashboard(Request $request)
{
//已签收
//已经发货
//日期,商户,已发货订单总量,已发货订单总额,订单商品总成本,已发货商品总计,销售价格总计,抵值积分总计,商家结算总计,
$sellerids = Seller::get();
$start_arr = ['2019-01-22'];
foreach ($start_arr as $starta){
foreach ($sellerids as $key => $seller){
$seller_id = $seller->id;
$start = date($starta, strtotime('-1 day'));
$end = date($starta);
$orderids[$key] = Order::when($seller_id,function ($q) use($seller_id){$q->where('seller_id', $seller_id);})
->whereHas('logs', function ($query) use ($start,$end) {
$query->where('state','PAID|DELIVERED')->when($start && $end, function ($query) use ($start, $end) {
$query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})
->when($start && !$end, function ($query) use ($start) {
$query->where('created_at', '>=', $start);
})
->when((!$start && $end), function ($query) use ($end) {
$query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
});
})->where('state', '<>',Order::ORDER_CLOSED)->pluck('id');
if(!empty($orderids[$key])){
$detail[$key] = OrderDetail::select(DB::raw('sum(number) as number_sum, sum(score * number) as score_sum, sum(price * number) as price_sum, sum(seller_price * number) as seller_price_sum'))
->whereIn('order_id',$orderids[$key])->first();
if(!empty($detail[$key]) && $detail[$key]->number_sum){
$order[$key] = Order::select(DB::raw('count(*) as order_total, sum(freight) as freight_sum, sum(seller_freight) as seller_freight_sum, sum(amount) as orders_price, sum(score) as orders_score,sum(seller_amount) as seller_amount_sum'))
->whereIn('id',$orderids[$key])->first();
$report[$key] = SalesReport::where(['seller_id'=>$seller_id,'state'=>'DELIVERED','action_time'=>$starta])->first();
if(empty($report[$key])){
SalesReport::create([
'state'=>'DELIVERED',
'action_time'=>$starta,
'goods_total'=>$detail[$key]->number_sum,
'goods_price_total'=>$detail[$key]->price_sum,
'goods_score_total'=>$detail[$key]->score_sum,
'orders_total'=>$order[$key]->order_total,
'orders_price'=>$order[$key]->orders_price,
'orders_score'=>$order[$key]->orders_score,
'orders_freight'=>$order[$key]->freight_sum,
'seller_id'=>$seller_id,
'seller_total'=>$order[$key]->seller_amount_sum,
'seller_freight'=>$order[$key]->seller_freight_sum,
]);
}
}
}
}
}
}
}

View File

@@ -0,0 +1,189 @@
<?php
namespace App\Admin\Controllers;
use Admin;
use App\Models\Category;
use App\Models\Organ;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Validator;
class OrganController extends Controller
{
public function index(Request $request)
{
$title = $request->title;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$start = $request->start;
$end = $request->end;
$lists = Organ::when($title, function ($query) use ($title) {
$query->where('title', 'like', "%{$title}%");
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})
->orderBy('created_at', 'desc')
->when($start && $end, function ($query) use ($start, $end) {
return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})->when($start && !$end, function ($query) use ($start) {
return $query->where('created_at', '>=', $start);
})->when(!$start && $end, function ($query) use ($end) {
return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
})
->paginate($numPerPage);
return view('Admin::organ.index', compact('lists'));
}
public function create()
{
$provinces = \Area::index(0);
$categoies = Category::treeSelect(1);
dd(1);
return view('Admin::organ.create', compact('provinces', 'categoies'));
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|min:2|max:50',
'mobile' => 'required',
'wechat' => 'required',
'province_sn' => 'required',
'city_sn' => 'required',
'area_sn' => 'required',
'address' => 'required',
'description' => 'required|min:4',
'content' => 'required|min:4',
'storage_id' => 'required',
], [
'title.required' => '机构名称必须填写',
'title.min' => '机构名称最少为:min字符',
'title.max' => '机构名称最多为:max字符',
'mobile.required' => '电话必须填写',
'wechat.required' => '微信必须填写',
'province_sn.required' => '请选择省',
'city_sn.required' => '请选择市',
'area_sn.required' => '请选择区',
'address.required' => '地址必须填写',
'description.required' => '简介必须填写',
'description.min' => '简介最少:min个字',
'content.required' => '内容必须填写',
'content.min' => '内容最少:min个字',
'storage_id.required' => '图片必须上传',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
try {
DB::transaction(function () use ($request) {
$organ = Organ::create($request->all());
});
return $this->success('操作成功', 'close');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
public function edit(Organ $organ)
{
$provinces = \Area::index(0);
$cities = \Area::index($organ->province_sn);
$areas = \Area::index($organ->city_sn);
$categoies = Category::treeSelect(1);
return view('Admin::organ.edit', compact('organ', 'provinces', 'cities', 'areas', 'categoies'));
}
public function update(Request $request, Organ $organ)
{
$validator = Validator::make($request->all(), [
'title' => 'required|min:2|max:50',
'mobile' => 'required',
'wechat' => 'required',
'province_sn' => 'required',
'city_sn' => 'required',
'area_sn' => 'required',
'address' => 'required',
'description' => 'required|min:4',
'content' => 'required|min:4',
'storage_id' => 'required',
], [
'title.required' => '机构名称必须填写',
'title.min' => '机构名称最少为:min字符',
'title.max' => '机构名称最多为:max字符',
'mobile.required' => '电话必须填写',
'wechat.required' => '微信必须填写',
'province_sn.required' => '请选择省',
'city_sn.required' => '请选择市',
'area_sn.required' => '请选择区',
'address.required' => '地址必须填写',
'description.required' => '简介必须填写',
'description.min' => '简介最少:min个字',
'content.required' => '内容必须填写',
'content.min' => '内容最少:min个字',
'storage_id.required' => '图片必须上传',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
try {
DB::transaction(function () use ($organ, $request) {
$organ->update($request->all());
});
return $this->success('操作成功', 'close');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
public function destroy(Organ $organ)
{
try {
DB::transaction(function () use ($organ) {
$organ->status = 0;
$organ->save();
});
return $this->success('操作成功');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
/**
* 彻底删除单条目
* @Author:<C.Jason>
* @Date:2018-11-02T13:43:36+0800
* @param [type] $user [description]
* @return [type] [description]
*/
public function delete(Organ $organ)
{
try {
DB::transaction(function () use ($organ) {
$organ->delete();
});
return $this->success('操作成功');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
}

View File

@@ -0,0 +1,102 @@
<?php
namespace App\Admin\Controllers;
use App\Models\Param;
use Illuminate\Http\Request;
use Validator;
class ParamController extends Controller
{
public function index(Request $request)
{
$title = $request->title;
$name = $request->name;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$params = Param::when($title, function ($query) use ($title) {
$query->where('title', 'like', "%{$title}%");
})->when($name, function ($query) use ($name) {
$query->where('name', 'like', "%{$name}%");
})->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->paginate($numPerPage);
return view('Admin::params.index', compact('params'));
}
public function create()
{
return view('Admin::params.create');
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|between:2,50',
'name' => 'required|between:2,50|unique:params',
'value' => 'required',
], [
'title.required' => '参数标题必须填写',
'title.between' => '参数标题长度:min-:max字符',
'name.required' => '调用名称必须填写',
'name.between' => '调用名称长度:min-:max字符',
'name.unique' => '调用名称已经存在',
'value.required' => '参数值必须填写',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if (Param::create($request->all())) {
return $this->success('', 'close');
} else {
return $this->error();
}
}
public function edit(Param $param)
{
return view('Admin::params.edit', compact('param'));
}
public function update(Request $request, Param $param)
{
$validator = Validator::make($request->all(), [
'title' => 'required|between:2,50',
'name' => 'required|between:2,50',
'value' => 'required',
], [
'title.required' => '参数标题必须填写',
'title.between' => '参数标题长度:min-:max字符',
'name.required' => '调用名称必须填写',
'name.between' => '调用名称长度:min-:max字符',
'name.unique' => '调用名称已经存在',
'value.required' => '参数值必须填写',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if ($param->update($request->all())) {
return $this->success('', 'close');
} else {
return $this->error();
}
}
public function destroy(Param $param)
{
if ($param->delete()) {
return $this->success();
} else {
return $this->error();
}
}
}

View File

@@ -0,0 +1,78 @@
<?php
namespace App\Admin\Controllers;
use App\Models\Payment;
use App\Models\VipPament;
use Illuminate\Http\Request;
class PaymentController extends Controller
{
public function index(Request $request)
{
$orderid = $request->orderid;
$trade_no = $request->trade_no;
$start = $request->start;
$end = $request->end;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$payments = Payment::when($trade_no, function ($query) use ($trade_no) {
$query->where('trade_no', 'like', "%{$trade_no}%");
})->when($orderid, function ($query) use ($orderid) {
$query->whereHas('order', function ($query) use ($orderid) {
$query->where('orderid', 'like', "%{$orderid}%");
});
})->when($start && $end, function ($query) use ($start, $end) {
return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})->when($start && !$end, function ($query) use ($start) {
return $query->where('created_at', '>=', $start);
})->when(!$start && $end, function ($query) use ($end) {
return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
})->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->with(['order'])->latest()->paginate($numPerPage);
return view('Admin::payments.index', compact('payments'));
}
public function vip(Request $request)
{
$user_id = $request->user_id;
$nickname = $request->nickname;
$trade_no = $request->trade_no;
$start = $request->start;
$end = $request->end;
$pay_type = $request->pay_type;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$payments = VipPament::when($trade_no, function ($query) use ($trade_no) {
$query->where('trade_no', 'like', "%{$trade_no}%");
})->when($user_id, function ($query) use($user_id){
return $query->where('user_id',$user_id);
})->when($nickname, function ($query) use ($nickname) {
$query->whereHas('user', function ($query) use ($nickname) {
$query->whereHas('info', function ($query) use ($nickname) {
$query->where('nickname', 'like', "%{$nickname}%");
});
});
})->when($pay_type, function ($query) use($pay_type){
return $query->where('type',$pay_type);
})->when($start && $end, function ($query) use ($start, $end) {
return $query->whereBetween('paid_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})->when($start && !$end, function ($query) use ($start) {
return $query->where('paid_at', '>=', $start);
})->when(!$start && $end, function ($query) use ($end) {
return $query->where('paid_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
})->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->where('state', 'SUCCESS')->latest()->paginate($numPerPage);
return view('Admin::payments.vip', compact('payments'));
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace App\Admin\Controllers;
use App\Models\ProfitLog;
use Illuminate\Http\Request;
use RuLong\UserAccount\Models\UserAccountLog;
class ProfitController extends Controller
{
public function index(Request $request)
{
$status = $request->status;
$start = $request->start;
$end = $request->end;
$numPerPage = $request->numPerPage ?: 30;
$profits = ProfitLog::when($status, function ($query) use ($status) {
if ($status == 'one') {
$query->where('status', 1);
} elseif ($status == 'zero') {
$query->where('status', 0);
}
})->when($start && $end, function ($query) use ($start, $end) {
return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})->when($start && !$end, function ($query) use ($start) {
return $query->where('created_at', '>=', $start);
})->when(!$start && $end, function ($query) use ($end) {
return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
})->orderBy('created_at', 'desc')->paginate($numPerPage);
return view('Admin::profit.index', compact('profits'));
}
public function logs(Request $request, ProfitLog $profit)
{
$numPerPage = $request->numPerPage ?: 30;
$logs = UserAccountLog::whereJsonContains('source->no', $profit->end_at->format('Ymd'))
->orderBy('user_id', 'asc')
->paginate($numPerPage);
return view('Admin::profit.logs', compact('logs', 'profit'));
}
}

View File

@@ -0,0 +1,100 @@
<?php
namespace App\Admin\Controllers;
use App\Models\Report;
use App\Rules\Checkmobile;
use Illuminate\Http\Request;
use Validator;
class ReportController extends Controller
{
public function index(Request $request)
{
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$lists = Report::paginate($numPerPage);
return view('Admin::report.index', compact('lists'));
}
public function create()
{
return view('Admin::report.create');
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|min:2|max:50',
'mobile' => ['required', new Checkmobile],
], [
'name.required' => '名称必须填写',
'name.min' => '名称最少为:min字符',
'name.max' => '名称最多为:max字符',
'mobile.required' => '手机号必须填写',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if (Report::create($request->all())) {
return $this->success('', 'close');
} else {
return $this->error();
}
}
public function edit(Report $report)
{
return view('Admin::report.edit', compact('report'));
}
public function update(Request $request, Report $report)
{
$validator = Validator::make($request->all(), [
'name' => 'required|min:2|max:50',
'mobile' => ['required', new Checkmobile],
], [
'name.required' => '名称必须填写',
'name.min' => '名称最少为:min字符',
'name.max' => '名称最多为:max字符',
'mobile.required' => '手机号必须填写',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if ($report->update($request->all())) {
return $this->success('', 'close');
} else {
return $this->error();
}
}
public function show()
{
#Todo..
}
//删除
public function delete(Report $report)
{
if ($report->delete()) {
return $this->success('删除成功');
} else {
return $this->error('删除成功');
}
}
public function logs()
{
#Todo..
}
}

View File

@@ -0,0 +1,563 @@
<?php
namespace App\Admin\Controllers;
use App\Models\Agency;
use App\Models\Bank;
use App\Models\Category;
use App\Models\Freight;
use App\Models\Seller;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use RuLong\Panel\Models\Admin;
use Validator;
class SellerController extends Controller
{
//商家列表
public function index(Request $request)
{
if (\Admin::id() != 1 && \Admin::user()->seller->type != 'seller') {
return $this->error('您没有权限');
}
$name = $request->name;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$type = 'seller';
$title = '商家';
$sellers = Seller::withCount('admins')
->withCount('orders')
->withCount('goods')
->where('type', $type)
->when(\Admin::id() > 1, function ($query) {
$query->where('id', \Admin::user()->seller_id);
})
->when($name, function ($query) use ($name) {
$query->where('name', 'like', "%{$name}%");
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->paginate($numPerPage);
return view('Admin::sellers.index', compact('sellers', 'type', 'title'));
}
public function search(Request $request)
{
$name = $request->name;
$numPerPage = $request->numPerPage ?: 30;
$type = 'organ';
$sellers = Seller::where('type', $type)
->when($name, function ($query) use ($name) {
$query->where('name', 'like', "%{$name}%");
})
->paginate($numPerPage);
return view('Admin::sellers.search', compact('sellers', 'type', 'title'));
}
//机构列表
public function organ(Request $request)
{
if (\Admin::id() != 1 && \Admin::user()->seller->type != 'organ') {
return $this->error('您没有权限');
}
$name = $request->name;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$type = 'organ';
$title = '机构';
$sellers = Seller::withCount('admins')
->withCount('orders')
->withCount('goods')
->withCount('lesson')
->where('type', $type)
->when(\Admin::id() > 1, function ($query) {
$query->where('id', \Admin::user()->seller_id);
})
->when($name, function ($query) use ($name) {
$query->where('name', 'like', "%{$name}%");
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->paginate($numPerPage);
return view('Admin::sellers.index', compact('sellers', 'type', 'title'));
}
public function show(Seller $seller)
{
$freights = Freight::where('seller_id', $seller->id)->get();
return view('Admin::sellers.show', compact('seller', 'freights'));
}
public function create(Request $request)
{
$pid = ($request->type == 'organ') ? 1 : 2;
$provinces = \OpenArea::index(0);
$categoies = Category::treeSelect($pid);
$agencys = Agency::where('status', 1)->get();
$salesmans = User::where('is_salesman', 1)->get();
return view('Admin::sellers.create', compact('provinces', 'categoies', 'agencys', 'salesmans'));
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|min:2|max:50',
'mobile' => 'required',
'wechat_id' => 'required',
'province_sn' => 'required',
'city_sn' => 'required',
'area_sn' => 'required',
'address' => 'required',
'description' => 'required|min:4',
'content' => 'required|min:4',
'storage_id' => 'required',
], [
'name.required' => '名称必须填写',
'name.min' => '名称最少为:min字符',
'name.max' => '名称最多为:max字符',
'mobile.required' => '电话必须填写',
'wechat_id.required' => '微信二维码必须上传',
'province_sn.required' => '请选择省',
'city_sn.required' => '请选择市',
'area_sn.required' => '请选择区',
'address.required' => '地址必须填写',
'description.required' => '简介必须填写',
'description.min' => '简介最少:min个字',
'content.required' => '内容必须填写',
'content.min' => '内容最少:min个字',
'storage_id.required' => 'Logo必须上传',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if (Seller::create($request->all())) {
return $this->success('', 'close');
} else {
return $this->error();
}
}
public function edit(Seller $seller)
{
$banks = Bank::orderBy('sort', 'asc')->get();
$provinces = \OpenArea::index(0);
$cities = \OpenArea::index($seller->province_sn);
$areas = \OpenArea::index($seller->city_sn);
$pid = ($seller->type == 'organ') ? 1 : 2;
$categoies = Category::treeSelect($pid);
$agencys = Agency::where('status', 1)->get();
$salesmans = User::where('is_salesman', 1)->get();
return view('Admin::sellers.edit', compact('seller', 'banks', 'categoies', 'provinces', 'cities', 'areas', 'agencys', 'salesmans'));
}
public function update(Request $request, Seller $seller)
{
$validator = Validator::make($request->all(), [
'name' => 'required|min:2|max:50',
'mobile' => 'required',
'wechat_id' => 'required',
'province_sn' => 'required',
'city_sn' => 'required',
'area_sn' => 'required',
'address' => 'required',
'description' => 'required|min:4',
'content' => 'required|min:4',
'storage_id' => 'required',
], [
'name.required' => '名称必须填写',
'name.min' => '名称最少为:min字符',
'name.max' => '名称最多为:max字符',
'mobile.required' => '电话必须填写',
'wechat_id.required' => '微信二维码必须上传',
'province_sn.required' => '请选择省',
'city_sn.required' => '请选择市',
'area_sn.required' => '请选择区',
'address.required' => '地址必须填写',
'description.required' => '简介必须填写',
'description.min' => '简介最少:min个字',
'content.required' => '内容必须填写',
'content.min' => '内容最少:min个字',
'storage_id.required' => 'Logo必须上传',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if ($seller->update($request->all())) {
return $this->success('', 'close');
} else {
return $this->error();
}
}
public function destroy(Seller $seller)
{
//删除
if ($seller->canDel()) {
if ($seller->delete()) {
if ($seller->admins) {
$seller->admins()->delete();
}
return $this->success();
} else {
return $this->error();
}
} else {
if ($seller->canCancel()) {
$seller->status = 0;
$seller->save();
} else {
return $this->error('请下架所有商品,再关闭商户');
}
}
}
public function setting(Request $request)
{
if ($request->isMethod('PUT')) {
$validator = Validator::make($request->all(), [
'name' => 'required|min:2|max:50',
'description' => 'required|min:4',
'storage_id' => 'required',
], [
'name.required' => '商户名称必须填写',
'name.min' => '商户名称最少为:min字符',
'name.max' => '商户名称最多为:max字符',
'description.required' => '简介必须填写',
'description.min' => '简介最少:min个字',
'storage_id.required' => 'Logo必须上传',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
$seller = Seller::find(\Admin::user()->seller_id);
if ($seller->update($request->all())) {
return $this->success('操作成功');
} else {
return $this->error();
}
}
$banks = Bank::orderBy('sort', 'asc')->get();
$seller = Seller::find(\Admin::user()->seller_id);
return view('Admin::sellers.setting', compact('seller', 'banks'));
}
public function freights(Request $request)
{
$freights = Freight::where('seller_id', \Admin::user()->seller_id)->get();
return view('Admin::sellers.freights', compact('freights'));
}
public function freightsEdit(Request $request, Freight $freight)
{
if ($request->isMethod('PUT')) {
$validator = Validator::make($request->all(), [
'basic' => 'required|numeric',
'heavy' => 'required|numeric',
'added' => 'required|numeric',
], [
'basic.required' => '基本邮费必须填写',
'basic.numeric' => '基本邮费必须是数字',
'heavy.required' => '起重必须填写',
'heavy.numeric' => '起重必须是数字',
'added.required' => '续重必须填写',
'added.numeric' => '续重必须是数字',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
$freight->update([
'basic' => $request->basic,
'heavy' => $request->heavy,
'added' => $request->added,
]);
return $this->success('', 'close');
} else {
return view('Admin::sellers.freightsEdit', compact('freight'));
}
}
public function users(Request $request, Seller $seller)
{
$username = $request->username;
$nickname = $request->nickname;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$seller_id = $request->seller_id ?? \Admin::user()->seller_id;
$admins = Admin::where('seller_id', $seller->id)
->where('id', '<>', 1)
->when($username, function ($query) use ($username) {
return $query->where('username', 'like', "%{$username}%");
})
->when($nickname, function ($query) use ($nickname) {
return $query->where('nickname', 'like', "%{$nickname}%");
})->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->with('lastLogin')->withCount('logins')->paginate($numPerPage);
return view('Admin::sellers.users', compact('admins', 'seller'));
}
public function usersCreate()
{
return view('Admin::sellers.usersCreate');
}
public function usersStore(Request $request)
{
$validator = Validator::make($request->all(), [
'username' => ['required', 'between:4,32', 'unique:admins'],
'password' => 'required|between:6,32',
'nickname' => 'nullable|between:2,16',
], [
'username.required' => '用户名称必须填写',
'username.between' => '用户名称长度应在:min-:max位之间',
'username.unique' => '用户名称已经存在',
'password.required' => '登录密码必须填写',
'password.between' => '登录密码长度应在:min-:max位之间',
'nickname.between' => '用户昵称长度应在:min-:max位之间',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
try {
DB::transaction(function () use ($request) {
$admin = Admin::create([
'username' => $request->username,
'password' => $request->password,
'nickname' => $request->nickname,
'seller_id' => $request->seller_id ?? \Admin::user()->seller_id,
]);
DB::table('admin_role_user')->insert([
'role_id' => $request->role_id,
'admin_id' => $admin->id,
'created_at' => now(),
'updated_at' => now(),
]);
});
return $this->success('操作成功', 'close');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
public function usersEdit(Admin $admin)
{
return view('Admin::sellers.usersEdit', compact('admin'));
}
public function usersUpdate(Request $request, Admin $admin)
{
$validator = Validator::make($request->all(), [
'password' => 'required|between:6,32',
'nickname' => 'nullable|between:2,16',
], [
'password.required' => '登录密码必须填写',
'password.between' => '登录密码长度应在:min-:max位之间',
'nickname.between' => '用户昵称长度应在:min-:max位之间',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
try {
DB::transaction(function () use ($request, $admin) {
$admin->update([
'password' => $request->password,
'nickname' => $request->nickname,
]);
//这里还需要更新管理员的操作权限
});
return $this->success('操作成功', 'close');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
public function usersDestroy(Admin $admin)
{
if ($admin->delete()) {
//同时删除管理员的权限
return $this->success();
} else {
return $this->error();
}
}
public function manager(Seller $seller)
{
$adminids = DB::table('admin_role_user')->where('role_id', 1)->pluck('admin_id');
$manager = Admin::where('seller_id', $seller->id)->whereIN('id', $adminids)->first();
return $manager ? view('Admin::sellers.manager', compact('manager', 'seller')) : view('Admin::sellers.managerCreate', compact('seller'));
}
public function managerUpdate(Request $request, Admin $admin)
{
$validator = Validator::make($request->all(), [
'password' => 'required|between:6,32',
'nickname' => 'nullable|between:2,16',
], [
'password.required' => '登录密码必须填写',
'password.between' => '登录密码长度应在:min-:max位之间',
'nickname.between' => '用户昵称长度应在:min-:max位之间',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
try {
DB::transaction(function () use ($request, $admin) {
$admin->update([
'password' => $request->password,
'nickname' => $request->nickname,
'seller_id' => $request->seller_id,
]);
//这里还需要更新管理员的操作权限
});
return $this->success('操作成功', 'close');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
public function managerStore(Request $request, Seller $seller)
{
$validator = Validator::make($request->all(), [
'username' => ['required', 'between:4,32', 'unique:admins'],
'password' => 'required|between:6,32',
'nickname' => 'nullable|between:2,16',
], [
'username.required' => '用户名称必须填写',
'username.between' => '用户名称长度应在:min-:max位之间',
'username.unique' => '用户名称已经存在',
'password.required' => '登录密码必须填写',
'password.between' => '登录密码长度应在:min-:max位之间',
'nickname.between' => '用户昵称长度应在:min-:max位之间',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
try {
DB::transaction(function () use ($request, $seller) {
$admin = Admin::create([
'username' => $request->username,
'password' => $request->password,
'nickname' => $request->nickname,
'seller_id' => $seller->id,
]);
DB::table('admin_role_user')->insert([
'role_id' => $request->role_id,
'admin_id' => $admin->id,
'created_at' => now(),
'updated_at' => now(),
]);
});
return $this->success('操作成功', 'close');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
public function bindUser(Seller $seller)
{
$users = User::whereHas('identity', function ($query) {
$query->where('identity_id', '>=', 0);
})->doesntHave('seller')->get();
if ($users->count() == 0) {
return $this->error('没有用户', 'close');
}
return view('Admin::sellers.bindUser', compact('seller', 'users'));
}
public function dobindUser(Request $request, Seller $seller)
{
if (empty($request->user_id)) {
return $this->error('用户必须选择');
}
$user = User::find($request->user_id);
if (empty($user)) {
return $this->error('用户信息有误');
}
if ($user->seller) {
return $this->error('用户已绑定商户');
}
$seller->user_id = $request->user_id;
if ($seller->save()) {
// $uids = UserRelation::where('bloodline', 'like', "%," . $user->id . ",%")
// ->pluck('user_id')
// ->toArray();
// User::whereIn('id', $uids)->update(['seller_id' => $seller->id]);
return $this->success('操作成功', 'close');
} else {
return $this->error('操作失败');
}
}
//取消绑定
public function cancelUser(Request $request, Seller $seller)
{
if (!$seller->user) {
return $this->error('没有绑定用户');
}
$seller->user_id = null;
if ($seller->save()) {
return $this->success('操作成功');
} else {
return $this->error('操作失败');
}
}
public function certificate(Request $request, Seller $seller)
{
return view('Admin::sellers.certificate', compact('seller'));
}
public function docertificate(Request $request, Seller $seller)
{
if ($seller->update($request->all())) {
return $this->success('上传成功', 'close');
} else {
return $this->error('上传失败');
}
}
}

View File

@@ -0,0 +1,126 @@
<?php
namespace App\Admin\Controllers;
use Admin;
use App\Models\Seller;
use App\Models\Station;
use Illuminate\Http\Request;
use Validator;
class StationController extends Controller
{
public function index(Request $request)
{
$name = $request->name;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
if (Admin::id() == 1) {
$stations = Station::when($name, function ($query) use ($name) {
$query->where('name', 'like', "%{$name}%");
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->paginate($numPerPage);
} else {
$stations = Station::when($name, function ($query) use ($name) {
$query->where('name', 'like', "%{$name}%");
})->where('seller_id', Admin::user()->seller_id)
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->paginate($numPerPage);
}
return view('Admin::stations.index', compact('stations'));
}
public function create()
{
$sellers = Seller::where('status', 1)->get();
return view('Admin::stations.create', compact('sellers'));
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|min:2|max:50',
'address' => 'required|min:4',
'mobile' => 'required',
], [
'name.required' => '商户名称必须填写',
'name.min' => '商户名称最少为:min字符',
'name.max' => '商户名称最多为:max字符',
'address.required' => '地址必须填写',
'address.min' => '地址最少:min个字',
'mobile.required' => '手机号必须填写',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if (Station::create($request->all())) {
return $this->success('', 'close');
} else {
return $this->error();
}
}
public function edit(Station $station)
{
$sellers = Seller::where('status', 1)->get();
return view('Admin::stations.edit', compact('station', 'sellers'));
}
public function update(Request $request, Station $station)
{
$validator = Validator::make($request->all(), [
'name' => 'required|min:2|max:50',
'address' => 'required|min:4',
'mobile' => 'required',
], [
'name.required' => '商户名称必须填写',
'name.min' => '商户名称最少为:min字符',
'name.max' => '商户名称最多为:max字符',
'address.required' => '地址必须填写',
'address.min' => '地址最少:min个字',
'mobile.required' => '手机号必须填写',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if ($station->update($request->all())) {
return $this->success('', 'close');
} else {
return $this->error();
}
}
public function destroy(station $station)
{
if ($station->delete()) {
return $this->success();
} else {
return $this->error();
}
}
public function areas(Request $request)
{
if (empty($request->psn)) {
return $this->error('请选择省份');
}
$areas = \OpenArea::index($request->psn);
if ($areas) {
return $this->success(['msg' => '', 'code' => 1, 'data' => $areas]);
} else {
return $this->error('请选择省份/城市');
}
}
}

View File

@@ -0,0 +1,138 @@
<?php
namespace App\Admin\Controllers;
use Admin;
use App\Models\Seller;
use App\Models\SellerTeacher;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Validator;
class TeacherController extends Controller
{
public function index(Request $request)
{
$seller_id = $request->seller_id;
$title = $request->title;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$admin = Admin::user();
$teachers = SellerTeacher::when($seller_id, function ($query) use ($seller_id) {
$query->where('seller_id', $seller_id);
})
->when($title, function ($query) use ($title) {
$query->where('title', 'like', "%{$title}%");
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})
->orderBy('created_at', 'desc')
->paginate($numPerPage);
return view('Admin::teacher.index', compact('teachers'));
}
public function create()
{
$sellers = Seller::where('type', 'organ')->get();
return view('Admin::teacher.create', compact('sellers'));
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|min:2|max:50',
'rank' => 'required|min:2',
'school_age' => 'required',
'storage_id' => 'required',
], [
'name.required' => '标题必须填写',
'name.min' => '标题最少为:min字符',
'name.max' => '标题最多为:max字符',
'rank.required' => '职级必须填写',
'rank.min' => '职级最少:min个字',
'school_age.required' => '教龄必须填写',
'storage_id.required' => '教师头像必须上传',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
try {
DB::transaction(function () use ($request) {
$info = SellerTeacher::create($request->all());
});
return $this->success('操作成功', 'close');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
public function edit($id)
{
$info = SellerTeacher::find($id);
$sellers = Seller::where('type', 'organ')->get();
return view('Admin::teacher.edit', compact('info', 'sellers'));
}
public function update(Request $request, $id)
{
$info = SellerTeacher::find($id);
$validator = Validator::make($request->all(), [
'name' => 'required|min:2|max:50',
'rank' => 'required|min:2',
'school_age' => 'required',
'storage_id' => 'required',
], [
'name.required' => '标题必须填写',
'name.min' => '标题最少为:min字符',
'name.max' => '标题最多为:max字符',
'rank.required' => '职级必须填写',
'rank.min' => '职级最少:min个字',
'school_age.required' => '教龄必须填写',
'storage_id.required' => '教师头像必须上传',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
try {
DB::transaction(function () use ($request, $info) {
$info = $info->update($request->all());
});
return $this->success('操作成功', 'close');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
/**
* 彻底删除单条目
* @Author:<C.Jason>
* @Date:2018-11-02T13:43:36+0800
* @param [type] $user [description]
* @return [type] [description]
*/
public function delete(SellerTeacher $info)
{
try {
DB::transaction(function () use ($info) {
$info->delete();
});
return $this->success('操作成功');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
}

View File

@@ -0,0 +1,32 @@
<?php
namespace App\Admin\Controllers;
use App\Models\Team;
use Illuminate\Http\Request;
class TeamController extends Controller
{
public function index(Request $request)
{
$mobile = $request->mobile;
$wechat = $request->wechat;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$lists = Team::when($mobile, function ($query) use ($mobile) {
$query->where('mobile', $mobile);
})
->when($wechat, function ($query) use ($wechat) {
$query->where('wechat', 'like', "%" . $wechat . "%");
})
->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})
->paginate($numPerPage);
return view('Admin::team.index', compact('lists'));
}
}

View File

@@ -0,0 +1,70 @@
<?php
namespace App\Admin\Controllers;
// use RuLong\UserAccount\Models\UserAccount;
use App\User;
// use App\Jobs\ProfitJob;
// use App\Models\ProfitLog;
// use RuLong\Identity\Models\IdentityPoint;
use RuLong\UserAccount\Models\UserAccountLog;
use RuLong\UserRelation\Models\UserRelation;
class TestController extends Controller
{
public function test()
{
$lists = UserAccountLog::select('sum(variable) as count')->where('count', '>', 1000)->group('user_id')->orderBy('count desc')->limit(10)->get();
dump($lists);
}
/**
* 准备做调整关系流程
* @Author:<Leady>
* @Date:2018-12-20T18:54:09+0800
* @return [type] [description]
*/
public function relation()
{
$users = [4189];
$parent_id = 18;
$parent = UserRelation::where('user_id', $parent_id)->first();
if ($parent) {
foreach ($users as $key => $user_id) {
$user = UserRelation::where('user_id', $user_id)->first();
if ($user) {
$bloodline = $parent->bloodline . $parent_id . ','; //改变后血缘线
$oldblood = $user->bloodline . $user->user_id . ','; //目标替换血缘线
$newblood = $bloodline . $user->user_id . ','; //目标新血缘线
$layer_cha = ($parent->layer + 1) - $user->layer;
$user->layer += $layer_cha;
$user->parent_id = $parent_id;
$user->bloodline = $bloodline;
$user->save();
$childs = UserRelation::where('bloodline', 'like', '%,' . $user->user_id . ',%')->get();
foreach ($childs as $key => $child) {
$child->bloodline = str_replace($oldblood, $newblood, $child->bloodline);
$child->layer += $layer_cha;
$child->save();
}
}
}
}
}
/**
* 准备做没有分润的人产生分润流程
* @Author:<Leady>
* @Date:2018-12-20T18:54:21+0800
* @param [type] $user_id [description]
* @return [type] [description]
*/
public function fenrun($user_id)
{
$user_id = 340;
$user = UserRelation::where('user_id', $user_id)->first();
$payment_vip = \App\Models\VipPament::where('user_id', $user_id)->where('state', 'SUCCESS')->first();
\App\Bonus\Direct::settlement($user, ['orderid' => 'vip' . $payment_vip->id]);
}
}

View File

@@ -0,0 +1,391 @@
<?php
namespace App\Admin\Controllers;
use App\Models\Seller;
use App\User;
use Illuminate\Http\Request;
use RuLong\Identity\Models\Identity;
use RuLong\Identity\Models\IdentityLog;
use RuLong\UserRelation\Models\UserRelation;
use Validator;
class UserController extends Controller
{
public function index(Request $request)
{
$user_id = $request->user_id;
$mobile = $request->mobile;
$nickname = $request->nickname;
$identity = $request->identity;
$parent_id = $request->parent_id;
$start = $request->start;
$end = $request->end;
$is_salesman = $request->is_salesman;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$users = User::with('organ')->when($mobile, function ($query) use ($mobile) {
return $query->where('mobile', 'like', "%{$mobile}%");
})->when($user_id, function ($query) use ($user_id) {
return $query->where('id', $user_id);
})->when(is_numeric($is_salesman), function ($query) use ($is_salesman) {
return $query->where('is_salesman', $is_salesman);
})->when($nickname, function ($query) use ($nickname) {
return $query->whereHas('info', function ($query) use ($nickname) {
$query->where('nickname', 'like', "%{$nickname}%");
});
})->when(is_numeric($identity), function ($query) use ($identity) {
$query->whereHas('identity', function ($query) use ($identity) {
$query->where('identity_id', $identity);
});
})->when($parent_id, function ($query) use ($parent_id) {
$query->whereHas('relation', function ($query) use ($parent_id) {
$query->where('parent_id', $parent_id);
});
})->when($start && $end, function ($query) use ($start, $end) {
return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})->when($start && !$end, function ($query) use ($start) {
return $query->where('created_at', '>=', $start);
})->when(!$start && $end, function ($query) use ($end) {
return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
})->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->with(['info', 'lastLogin'])->withCount('logins')->orderBy('created_at', 'desc')->paginate($numPerPage);
$identitys = Identity::get();
return view('Admin::users.index', compact('users', 'identitys'));
}
public function edit(User $user)
{
return view('Admin::users.edit', compact('user'));
}
public function update(Request $request, User $user)
{
$validator = Validator::make($request->all(), [
'password' => 'nullable|between:6,32',
], [
'password.between' => '登录密码长度应在:min-:max位之间',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if ($user->update($request->all())) {
return $this->success('修改成功', 'close');
} else {
return $this->error();
}
}
/**
* 软删除
* @Author:<C.Jason>
* @Date:2018-11-02T13:44:52+0800
* @param User $user [description]
* @return [type] [description]
*/
public function destroy(User $user)
{
if ($user->delete()) {
return $this->success();
} else {
return $this->error();
}
}
/**
* 回收站
* @Author:<C.Jason>
* @Date:2018-11-02T13:43:57+0800
* @return [type] [description]
*/
public function recycle(Request $request)
{
$mobile = $request->mobile;
$nickname = $request->nickname;
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$users = User::onlyTrashed()->when($mobile, function ($query) use ($mobile) {
return $query->where('mobile', 'like', "%{$mobile}%");
})->when($nickname, function ($query) use ($nickname) {
return $query->whereHas('info', function ($query) use ($nickname) {
$query->where('nickname', 'like', "%{$nickname}%");
});
})->when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->with(['info', 'lastLogin'])->withCount('logins')->paginate($numPerPage);
return view('Admin::users.recycle', compact('users'));
}
/**
* 清空回收站
* 未考虑删除关联数据的问题
* @Author:<C.Jason>
* @Date:2018-11-02T13:41:40+0800
* @return [type] [description]
*/
public function clean()
{
if (User::onlyTrashed()->forceDelete()) {
return $this->success();
} else {
return $this->error();
}
}
/**
* 还原
* @Author:<C.Jason>
* @Date:2018-11-02T13:43:47+0800
* @param [type] $user [description]
* @return [type] [description]
*/
public function resume($user)
{
if (User::withTrashed()->where('id', $user)->restore()) {
return $this->success();
} else {
return $this->error();
}
}
/**
* 彻底删除单条目
* @Author:<C.Jason>
* @Date:2018-11-02T13:43:36+0800
* @param [type] $user [description]
* @return [type] [description]
*/
public function delete($user)
{
if (User::withTrashed()->where('id', $user)->forceDelete()) {
return $this->success();
} else {
return $this->error();
}
}
/**
* 线下开通身份
* @Author:<Leady>
* @Date:2018-11-20T15:32:24+0800
* @param Request $request [description]
* @param [type] $user [description]
* @return [type] [description]
*/
public function identity(User $user)
{
if ($user->seller_id) {
$identity = Identity::where('id', '>', $user->identity->identity_id)->get();
} else {
$identity = Identity::where('id', '>', $user->identity->identity_id)->whereIn('id', [1, 2])->get();
}
return view('Admin::users.identity', compact('user', 'identity'));
}
/**
* 开通身份执行事件
* @Author:<Leady>
* @Date:2018-11-20T15:34:36+0800
* @param Request $request [description]
* @return [type] [description]
*/
public function identityrun(Request $request, User $user)
{
$identity_id = $request->identity_id ?? '';
$pay = $request->pay ?? '';
$max_key = $request->max_key ?? '0';
if (!$identity_id) {
return $this->error('请选择要变更的身份');
}
$user->identityUpdate($identity_id, 'AdminUp', $pay, $max_key);
return $this->success('变更成功', 'close');
}
/**
* 缴费用户列表
* @Author:<Leady>
* @Date:2018-11-26T12:03:39+0800
* @param Request $request [description]
* @return [type] [description]
*/
public function paycostUser(Request $request)
{
$numPerPage = $request->numPerPage ?: 30;
$identity = $request->identity;
$mobile = $request->mobile;
$nickname = $request->nickname;
$lists = IdentityLog::where('channel', 'AdminUp')
->when(is_numeric($identity), function ($query) use ($identity) {
$query->where('after', $identity);
})
->when($mobile, function ($query) use ($mobile) {
$query->whereHas('user_obj', function ($query) use ($mobile) {
$query->where('mobile', 'like', "%{$mobile}%");
});
})
->when($nickname, function ($query) use ($nickname) {
$query->whereHas('user_obj', function ($query) use ($nickname) {
return $query->whereHas('info', function ($query) use ($nickname) {
$query->where('nickname', 'like', "%{$nickname}%");
});
});
})->orderBy('created_at', 'desc')->paginate($numPerPage);
$identitys = Identity::get();
return view('Admin::users.paycostuser', compact('lists', 'identitys'));
}
/**
* 缴费用户确认返款
* @Author:<Leady>
* @Date:2018-11-26T12:03:30+0800
* @param Request $request [description]
* @param IdentityLog $log [description]
* @return [type] [description]
*/
public function rebates(Request $request, IdentityLog $log)
{
return view('Admin::users.rebates', compact('log'));
}
/**
* 缴费用户确认返款
* @Author:<Leady>
* @Date:2018-11-26T12:03:30+0800
* @param Request $request [description]
* @param IdentityLog $log [description]
* @return [type] [description]
*/
public function rebatesdo(Request $request, IdentityLog $log)
{
$log->other = array_merge($log->other, ['rebates' => '已返款', 'rebates_remark' => $request->rebates_remark]);
if ($log->save()) {
return $this->success('操作成功', 'close');
} else {
return $this->error();
}
}
/**
* 更改上级ID
* @Author:<Leady>
* @Date:2018-11-20T15:32:24+0800
* @param Request $request [description]
* @param [type] $user [description]
* @return [type] [description]
*/
public function parent(User $user)
{
return view('Admin::users.parent', compact('user'));
}
/**
* 更改上级ID执行事件
* @Author:<Leady>
* @Date:2018-11-20T15:34:36+0800
* @param Request $request [description]
* @return [type] [description]
*/
public function parentrun(Request $request, User $user)
{
$parent_id = $request->parent_id ?? '';
if (!$parent_id || !is_numeric($parent_id)) {
return $this->error('请输入正确的编号');
}
$parent = UserRelation::where('user_id', (int) $parent_id)->first();
if ($parent) {
$user = $user->relation;
$bloodline = $parent->bloodline . $parent_id . ','; //改变后血缘线
$oldblood = $user->bloodline . $user->user_id . ','; //目标替换血缘线
$newblood = $bloodline . $user->user_id . ','; //目标新血缘线
$layer_cha = ($parent->layer + 1) - $user->layer;
$user->layer += $layer_cha;
$user->parent_id = $parent_id;
$user->bloodline = $bloodline;
$user->save();
$user->user->update(['seller_id' => $parent->user->seller_id]);
$childs = UserRelation::where('bloodline', 'like', '%,' . $user->user_id . ',%')->get();
foreach ($childs as $key => $child) {
$child->bloodline = str_replace($oldblood, $newblood, $child->bloodline);
$child->layer += $layer_cha;
$child->save();
$child->user->update(['seller_id' => $parent->user->seller_id]);
}
} else {
return $this->error('推荐人不存在');
}
return $this->success('变更成功', 'close');
}
public function direct(User $user)
{
// if ($user->direct != 2) {
// return $this->error('状态不正确');
// }
// $payment_vip = \App\Models\VipPament::where('user_id', $user->id)->where('state', 'SUCCESS')->first();
// \App\Bonus\Direct::settlement($user, ['orderid' => 'vip' . $payment_vip->id]);
return $this->success('执行完毕');
}
public function bloodview(User $user)
{
$lists = $user->relation->list2tree('user_id', 'parent_id', 'children', $user->id);
$root = [
"text" => $user->id . ' - ' . $user->info->nickname . '' . ($user->identity->identity_id > 0 ? '已激活' : '未激活') . '',
"children" => $lists,
];
return view('Admin::users.bloodview', compact('root'));
}
//更改组织
public function seller(Request $request, User $user)
{
$sellers = Seller::where('type', 'organ')->whereNotIn('id', [$user->seller_id])->get();
return view('Admin::users.seller', compact('user', 'sellers'));
}
//更改组织执行
public function sellerdo(Request $request, User $user)
{
$seller_id = $request->organ_id;
if (!$seller_id || !is_numeric($seller_id)) {
return $this->error('请选择组织');
}
$seller = Seller::find($seller_id);
if ($seller) {
$uids = UserRelation::where('bloodline', 'like', "%," . $user->id . ",%")
->orWhere('user_id', $user->id)
->pluck('user_id')
->toArray();
User::whereIn('id', $uids)->update(['seller_id' => $seller->id]);
} else {
return $this->error('组织不存在');
}
return $this->success('变更成功', 'close');
}
//设置取消业务员
public function salesman(Request $request, User $user)
{
$value = $request->value;
if ($user->update(['is_salesman' => $value])) {
return $this->success('设置成功');
} else {
return $this->error('设置失败');
}
}
}

View File

@@ -0,0 +1,120 @@
<?php
namespace App\Admin\Controllers;
use App\Models\WechatMenu;
use Illuminate\Http\Request;
use Validator;
class WechatController extends Controller
{
public function menus(Request $request)
{
$name = $request->name;
$menus = WechatMenu::when($name, function ($query) use ($name) {
$query->where('name', 'like', "%{$name}%");
})->orderBy('sort', 'asc')->get();
$genMenus = WechatMenu::where('parent_id', 0)->orderBy('sort', 'asc')->get();
return view('Admin::wechat.menus', compact('menus', 'genMenus'));
}
/**
* 发布菜单到微信
* @Author:<C.Jason>
* @Date:2018-11-15T16:05:55+0800
* @return [type] [description]
*/
public function publish()
{
$buttons = WechatMenu::getPublishArray();
$app = app('wechat.official_account');
$result = $app->menu->create($buttons);
if ($result->errcode == 0) {
return $this->success();
} else {
return $this->error($result->errmsg);
}
}
public function create()
{
$topMenus = WechatMenu::where('parent_id', 0)->get();
return view('Admin::wechat.create', compact('topMenus'));
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|min:2|max:5',
'parent_id' => 'required',
'type' => 'required|in:view,click,miniprogram',
'value' => 'required',
], [
'name.required' => '菜单名称必须填写',
'name.min' => '菜单名称最小:min位',
'name.max' => '菜单名称最大:max位',
'parent_id.required' => '上级菜单必须选择',
'type.required' => '菜单类型必须选择',
'type.in' => '菜单类型选择有误',
'value.required' => '菜单键值必须填写',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if (WechatMenu::create($request->all())) {
return $this->success('', 'close');
} else {
return $this->error();
}
}
public function edit(WechatMenu $menu)
{
$topMenus = WechatMenu::where('parent_id', 0)->where('id', '<>', $menu->id)->get();
return view('Admin::wechat.edit', compact('topMenus', 'menu'));
}
public function update(Request $request, WechatMenu $menu)
{
$validator = Validator::make($request->all(), [
'name' => 'required|min:2|max:5',
'parent_id' => 'required',
'type' => 'required|in:view,click,miniprogram',
'value' => 'required',
], [
'name.required' => '菜单名称必须填写',
'name.min' => '菜单名称最小:min位',
'name.max' => '菜单名称最大:max位',
'parent_id.required' => '上级菜单必须选择',
'type.required' => '菜单类型必须选择',
'type.in' => '菜单类型选择有误',
'value.required' => '菜单键值必须填写',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if ($menu->update($request->all())) {
return $this->success('编辑成功', 'close');
} else {
return $this->error();
}
}
public function destroy(WechatMenu $menu)
{
if ($menu->delete()) {
return $this->success();
} else {
return $this->error();
}
}
}

View File

@@ -0,0 +1,91 @@
<?php
namespace App\Admin\Controllers;
use App\Models\WechatRule;
use Illuminate\Http\Request;
use Validator;
class WechatRulesController extends Controller
{
public function index(Request $request)
{
$orderField = $request->orderField;
$orderDirection = $request->orderDirection;
$numPerPage = $request->numPerPage ?: 30;
$wechatRules = WechatRule::when($orderField, function ($query) use ($orderField, $orderDirection) {
$query->orderBy($orderField, $orderDirection);
})->paginate($numPerPage);
return view('Admin::wechatRules.index', compact('wechatRules'));
}
public function create(Request $request)
{
return view('Admin::wechatRules.create');
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|max:100',
'name' => 'required|max:100',
'description' => 'required|max:200',
'storage_id' => 'required',
], [
'title.required' => '名称必须填写',
'title.max' => '名称长度应在:max以内',
'name.required' => '规则必须填写',
'name.max' => '规则长度应在:max以内',
'description.required' => '简介必须填写',
'storage_id.required' => '标题图必须上传',
]);
if ($validator->fails()) {
return $this->error($validator->errors()->first());
}
if (WechatRule::create($request->all())) {
return $this->success('新增文章成功', 'close');
} else {
return $this->error();
}
}
public function edit(WechatRule $wechatRule)
{
return view('Admin::wechatRules.edit', compact('wechatRule'));
}
public function update(Request $request, WechatRule $wechatRule)
{
$validator = Validator::make($request->all(), [
'title' => 'required|max:100',
'name' => 'required|max:100',
'description' => 'required|max:200',
'storage_id' => 'required',
], [
'title.required' => '名称必须填写',
'title.max' => '名称长度应在:max以内',
'name.required' => '规则必须填写',
'name.max' => '规则长度应在:max以内',
'description.required' => '简介必须填写',
'storage_id.required' => '标题图必须上传',
]);
$data = $request->all();
$wechatRule->update($data);
return $this->success('', 'close');
}
public function destroy($id)
{
}
}

View File

@@ -0,0 +1,179 @@
<?php
namespace App\Admin\Controllers;
use Admin;
use App\Models\Seller;
use App\Models\WindupReport;
use Illuminate\Http\Request;
use RuLong\Order\Models\Order;
use Illuminate\Support\Facades\DB;
use Validator;
class WindupsController extends Controller
{
/**
* 全部商户待结算列表-平台管理员
* @Author:<ZhaoxiaWang>
* @Date:2018-11-30
*/
public function index(Request $request)
{
$sellers = Seller::whereHas('orders')->get();
$numPerPage = $request->numPerPage ?: 30;
$start = $request->start;
$end = $request->end;
$seller_id = Admin::id() == 1 ? $request->seller_id : Admin::user()->seller_id;
$seller_orders = WindupReport::when($seller_id, function ($q) use ($seller_id) {$q->where('seller_id', $seller_id);})
->when($start && $end, function ($query) use ($start, $end) {
$query->whereBetween('start_time', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})
->when($start && !$end, function ($query) use ($start) {
$query->where('start_time', '>=', $start);
})
->when((!$start && $end), function ($query) use ($end) {
$query->where('start_time', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
})->where('state',0)->orderBy('id','desc')->paginate($numPerPage);
$unwinduped = WindupReport::when($seller_id, function ($q) use ($seller_id) {$q->where('seller_id', $seller_id);})->where('state',0)
->select(DB::raw('SUM(seller_freight_sum + seller_amount_sum) AS sum_total'))->first();
$winduped = WindupReport::when($seller_id, function ($q) use ($seller_id) {$q->where('seller_id', $seller_id);})->where('state',1)
->select(DB::raw('SUM(seller_freight_sum + seller_amount_sum) AS sum_total'))->first();
$curr_unwinduped = Order::when($seller_id, function ($q) use ($seller_id) {$q->where('seller_id', $seller_id);})
->whereHas('logs', function ($query) {
$query->where('state','DELIVERED|SIGNED');
})
->where('state', '<>',Order::ORDER_CLOSED)
->where('windup_report_id',0)
->select(DB::raw('SUM(seller_freight + seller_amount) AS sum_total'))->first();
return view('Admin::windups.index', compact('seller_orders','sellers','unwinduped','winduped','curr_unwinduped'));
}
/**
* 待结算订单明细-平台管理员、商户管理员同时可查看
* @Author:<ZhaoxiaWang>
* @Date:2018-11-30
*/
public function orders(Request $request)
{
$orderid = $request->orderid;
$windup_report_id = $request->windup_report_id;
$numPerPage = $request->numPerPage ?: 30;
$orders = Order::where('windup_report_id', $windup_report_id)
->when($orderid, function ($query) use ($orderid) {
$query->where('orderid', 'like', "%{$orderid}%");
})
->with(['seller', 'user.info'])
->orderBy('created_at', 'desc')
->paginate($numPerPage);
return view('Admin::windups.orders', compact('orders'));
}
/**
* 创建商户结算记录-平台管理员
* @Author:<ZhaoxiaWang>
* @Date:2018-11-30
*/
public function create(Request $request)
{
$windup_report_id = $request->windup_report_id;
$windup = WindupReport::find($windup_report_id);
return view('Admin::windups.create', compact('windup'));
}
/**
* 保存商户结算记录-平台管理员
* @Author:<ZhaoxiaWang>
* @Date:2018-11-30
*/
public function dostate(Request $request)
{
$windup_report_id = $request->windup_report_id;
$windup = WindupReport::find($windup_report_id);
if(!$windup->seller || empty($windup->seller->account_name)){
return $this->error('商户必须设置收款账户才能结算', 'close');
}
$windup->remark = $request->remark;
$windup->is_provide_invoice = $request->is_provide_invoice;
$windup->state = 1;
$windup->seller_account_name = $windup->seller->account_name;
$windup->seller_account_bank = $windup->seller->bank_name;
$windup->seller_account_number = $windup->seller->account_number;
$windup->winduped_at = now();
$windup->save();
return $this->success('操作成功', 'close');
}
/**
* 全部已结算记录-平台管理员
* @Author:<ZhaoxiaWang>
* @Date:2018-11-30
*/
public function winduped(Request $request)
{
$sellers = Seller::whereHas('orders')->get();
$numPerPage = $request->numPerPage ?: 30;
$start = $request->start;
$end = $request->end;
$seller_id = Admin::id() == 1 ? $request->seller_id : Admin::user()->seller_id;
$seller_orders = WindupReport::when($seller_id, function ($q) use ($seller_id) {$q->where('seller_id', $seller_id);})
->when($start && $end, function ($query) use ($start, $end) {
$query->whereBetween('start_time', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
})
->when($start && !$end, function ($query) use ($start) {
$query->where('start_time', '>=', $start);
})
->when((!$start && $end), function ($query) use ($end) {
$query->where('start_time', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
})->where('state',1)->orderBy('id','desc')->paginate($numPerPage);
$unwinduped = WindupReport::when($seller_id, function ($q) use ($seller_id) {$q->where('seller_id', $seller_id);})->where('state',0)
->select(DB::raw('SUM(seller_freight_sum + seller_amount_sum) AS sum_total'))->first();
$winduped = WindupReport::when($seller_id, function ($q) use ($seller_id) {$q->where('seller_id', $seller_id);})->where('state',1)
->select(DB::raw('SUM(seller_freight_sum + seller_amount_sum) AS sum_total'))->first();
$curr_unwinduped = Order::when($seller_id, function ($q) use ($seller_id) {$q->where('seller_id', $seller_id);})
->whereHas('logs', function ($query) {
$query->where('state','DELIVERED|SIGNED');
})
->where('state', '<>',Order::ORDER_CLOSED)
->where('windup_report_id',0)
->select(DB::raw('SUM(seller_freight + seller_amount) AS sum_total'))->first();
return view('Admin::windups.winduped', compact('seller_orders','sellers','unwinduped','winduped','curr_unwinduped'));
}
public function rule()
{
$info = \Params::get('windup_rule');
$info = str_replace("\r", "<br />", $info);
return view('Admin::windups.rule', compact('info'));
}
public function invoice()
{
$info = \Params::get('invoice_info');
$info = str_replace("\r", "<br />", $info);
return view('Admin::windups.invoice', compact('info'));
}
}

View File

@@ -0,0 +1,73 @@
<?php
namespace App\Admin\Controllers;
use App\Models\Withdraw;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class WithdrawsController extends Controller
{
public function status(Request $request, Withdraw $withdraw)
{
return view('Admin::withdraws.status', compact('withdraw'));
}
public function doStatus(Request $request, Withdraw $withdraw)
{
$state = $request->state;
if(empty($state)){
return $this->error('请选择审核结果');
}
if($state == 1){
//提现处理-提现到微信零钱
if($withdraw->way == 'Wechat'){
if(empty($withdraw->openid)){
return $this->error('提现失败,未找到提现用户微信');
}
$app = app('wechat.payment');
$result = $app->transfer->toBalance([
'partner_trade_no' => 'WTN' . date('ymdHis') . sprintf("%07d", mt_rand(0, pow(10, 7) - 1)),
'openid' => $withdraw->openid,
'check_name' => 'NO_CHECK',
're_user_name' => '',
'amount' => $withdraw->take * 100,
'desc' => '余额提现到微信零钱',
]);
if($result['result_code'] == 'SUCCESS'){
$withdraw->update(['state' => 1]);
return $this->success('操作成功','close');
}else{
return $this->error($result['err_code_des']);
}
}else{
if($withdraw->update(['state' => 1])){
return $this->success('操作成功','close');
}else{
return $this->error('操作失败');
}
}
}
if($state == 2) {
//驳回处理
$remark = $request->remark;
if (empty($remark)) {
return $this->error('请填写驳回原因');
}
try {
DB::transaction(function () use ($remark,$withdraw){
$withdraw->user->rule('withdraw_reject', $withdraw->amount, false, 'withdraw'.$withdraw->id);
$withdraw->update(['state' => 2, 'remark' => $remark]);
});
return $this->success('操作成功','close');
} catch (\Exception $e) {
return $this->error('操作失败' . $e->getmessage());
}
}
}
}