11 changed files with 444 additions and 79 deletions
-
54app/Admin/Actions/Tools/SalesmanOption.php
-
132app/Admin/Common/Order.php
-
53app/Admin/Controllers/v3/Salesman.php
-
83app/Admin/Metrics/Examples/Order/OrderData.php
-
59app/Admin/Repositories/v3/Salesman.php
-
1app/Admin/routes.php
-
111app/Http/Controllers/Salesman.php
-
13app/Models/v3/SalesmanData.php
-
1composer.json
-
15resources/views/admin/tools/salesman.blade.php
-
1routes/web.php
@ -0,0 +1,54 @@ |
|||||
|
<?php |
||||
|
|
||||
|
|
||||
|
namespace App\Admin\Actions\Tools; |
||||
|
|
||||
|
|
||||
|
use Dcat\Admin\Admin; |
||||
|
use Dcat\Admin\Grid\Tools\AbstractTool; |
||||
|
|
||||
|
class SalesmanOption extends AbstractTool |
||||
|
{ |
||||
|
protected function script() |
||||
|
{ |
||||
|
return <<<JS |
||||
|
$('#today').change(function () { |
||||
|
var url = "salesman?type=today&option=1" |
||||
|
Dcat.reload(url); |
||||
|
}); |
||||
|
$('#yesterday').change(function () { |
||||
|
var url = "salesman?type=yesterday&option=-1" |
||||
|
|
||||
|
Dcat.reload(url); |
||||
|
}); |
||||
|
$('#week').change(function () { |
||||
|
var url = "salesman?type=week&option=w" |
||||
|
|
||||
|
Dcat.reload(url); |
||||
|
}); |
||||
|
$('#month').change(function () { |
||||
|
var url = "salesman?type=month&option=30" |
||||
|
|
||||
|
Dcat.reload(url); |
||||
|
}); |
||||
|
JS; |
||||
|
} |
||||
|
|
||||
|
public function render() |
||||
|
{ |
||||
|
Admin::script($this->script()); |
||||
|
// $options = [
|
||||
|
// 't' => '今日',
|
||||
|
// 'y' => '昨日',
|
||||
|
// 'w' => '本周',
|
||||
|
// 'm' => '本月',
|
||||
|
// ];
|
||||
|
$options = [ |
||||
|
'all' => 'All', |
||||
|
'm' => 'Male', |
||||
|
'f' => 'Female', |
||||
|
]; |
||||
|
|
||||
|
return view('admin.tools.salesman', compact('options')); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,132 @@ |
|||||
|
<?php |
||||
|
|
||||
|
|
||||
|
namespace App\Admin\Common; |
||||
|
|
||||
|
|
||||
|
use App\Models\ImsCjdcOrderMain; |
||||
|
|
||||
|
class Order |
||||
|
{ |
||||
|
/** |
||||
|
* 查询结果 |
||||
|
* @param $params |
||||
|
* @param $option |
||||
|
* @return int |
||||
|
*/ |
||||
|
public static function getOrderData($params,$option) |
||||
|
{ |
||||
|
//如果市场id存在
|
||||
|
$buildData = self::buildData(); |
||||
|
if ($params['market_id']) {//是否存在市场id
|
||||
|
if (is_array($params['market_id'])) { |
||||
|
$buildData = $buildData->whereIn('lanzu_order_main.market_id',$params['market_id']); |
||||
|
} else { |
||||
|
$buildData = $buildData->where('lanzu_order_main.market_id',$params['market_id']); |
||||
|
} |
||||
|
} |
||||
|
if ($params['user_type']=='lanzu_cs'||$params['user_type']=='lanzu_biz'){//社区角色
|
||||
|
if ($params['condition']==1){//获取时间范围
|
||||
|
list($beginTime,$endTime) = self::beginAndEnd($option); |
||||
|
//>>2.构建数据模型
|
||||
|
if ($params['user_ids']){ |
||||
|
$buildData = $buildData->whereIn('lanzu_order_main.user_id',$params['user_ids']); |
||||
|
}else{ |
||||
|
return 0; |
||||
|
} |
||||
|
$buildData = $buildData |
||||
|
->leftJoin('lanzu_user_relation_bind','lanzu_user_relation_bind.user_id','lanzu_order_main.user_id') |
||||
|
->whereRaw('lanzu_order_main.created_at > lanzu_user_relation_bind.created_at') |
||||
|
->whereBetween('lanzu_order_main.created_at',[$beginTime,$endTime]); |
||||
|
} |
||||
|
}elseif ($params['user_type']=='market_service'||$params['user_type']=='lanzu_mp'){//市场服务站角色 及服务商
|
||||
|
if ($params['condition']==1){//获取时间范围
|
||||
|
list($beginTime,$endTime) = self::beginAndEnd($option); |
||||
|
//>>2.构建数据模型
|
||||
|
$buildData = $buildData->whereBetween('created_at',[$beginTime,$endTime]); |
||||
|
} |
||||
|
} |
||||
|
if ($params['data_type']=='count_user'){ |
||||
|
$result = $buildData |
||||
|
->groupBy('lanzu_order_main.user_id') |
||||
|
->pluck('lanzu_order_main.user_id') |
||||
|
->toArray(); |
||||
|
$result = count($result); |
||||
|
}elseif ($params['data_type']=='number'){ |
||||
|
$result = $buildData->count(); |
||||
|
|
||||
|
}elseif ($params['data_type']=='amount'){ |
||||
|
$result = $buildData->sum('money'); |
||||
|
} |
||||
|
return $result; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 查询时间范围 |
||||
|
* @param $option |
||||
|
* @return array |
||||
|
*/ |
||||
|
public static function beginAndEnd($option) |
||||
|
{ |
||||
|
switch ($option) { |
||||
|
case '1': |
||||
|
$beginTime = mktime(0, 0, 0, date('m'), date('d'), date('Y')); |
||||
|
$endTime = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; |
||||
|
break; |
||||
|
case '-1': |
||||
|
$beginTime = mktime(0, 0, 0, date('m'), date('d') - 1, date('Y')); |
||||
|
$endTime = mktime(0, 0, 0, date('m'), date('d'), date('Y')) - 1; |
||||
|
break; |
||||
|
case '7': |
||||
|
$beginTime = mktime(0, 0, 0, date('m'), date('d') - 7, date('Y')); |
||||
|
$endTime = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; |
||||
|
break; |
||||
|
case 'w': |
||||
|
//$beginTime = mktime(0, 0, 0, date("m"), date("d") - date("w") + 1, date("Y"));
|
||||
|
//$endTime = mktime(23, 59, 59, date("m"), date("d") - date("w") + 7, date("Y"));
|
||||
|
|
||||
|
//当前日期
|
||||
|
$sdefaultDate = date("Y-m-d"); |
||||
|
//$first =1 表示每周星期一为开始日期 0表示每周日为开始日期
|
||||
|
$first=1; |
||||
|
//获取当前周的第几天 周日是 0 周一到周六是 1 - 6
|
||||
|
$w=date('w',strtotime($sdefaultDate)); |
||||
|
//获取本周开始日期,如果$w是0,则表示周日,减去 6 天
|
||||
|
$beginTime=strtotime("$sdefaultDate -".($w ? $w - $first : 6).' days'); |
||||
|
//本周结束日期
|
||||
|
$start = date('Y-m-d',$beginTime); |
||||
|
$endTime=strtotime("$start +6 days")+86399; |
||||
|
break; |
||||
|
case 'lw': |
||||
|
$beginTime = mktime(0, 0, 0, date("m"), date("d") - date("w") + 1 - 7, date("Y")); |
||||
|
$endTime = mktime(23, 59, 59, date("m"), date("d") - date("w") + 7 - 7, date("Y")); |
||||
|
break; |
||||
|
case '30': |
||||
|
$beginTime = mktime(0, 0, 0, date('m'), 1, date('Y')); |
||||
|
$endTime = mktime(23, 59, 59, date('m'), date('t'), date('Y')); |
||||
|
break; |
||||
|
case '-30': |
||||
|
$beginTime = mktime(0, 0, 0, date('m') - 1, 1, date('Y')); |
||||
|
$endTime = strtotime(date("Y-m-d H:i:s", mktime(23, 59, 59, date("m"), 0, date("Y")))); |
||||
|
break; |
||||
|
default: |
||||
|
$beginTime = mktime(0, 0, 0, date('m'), date('d'), date('Y')); |
||||
|
$endTime = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')) - 1; |
||||
|
break; |
||||
|
} |
||||
|
return [$beginTime,$endTime]; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 构建数据模型 |
||||
|
* @param $condition |
||||
|
* @return mixed |
||||
|
*/ |
||||
|
public static function buildData() |
||||
|
{ |
||||
|
$build = ImsCjdcOrderMain |
||||
|
::whereIn('state', [3, 4, 5, 10]) |
||||
|
->where('type',1); |
||||
|
return $build; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,53 @@ |
|||||
|
<?php |
||||
|
|
||||
|
|
||||
|
namespace App\Admin\Controllers\v3; |
||||
|
|
||||
|
|
||||
|
use App\Admin\Actions\Tools\SalesmanOption; |
||||
|
use App\Models\v3\SalesmanData; |
||||
|
use Dcat\Admin\Controllers\AdminController; |
||||
|
use Dcat\Admin\Grid; |
||||
|
|
||||
|
class Salesman extends AdminController |
||||
|
{ |
||||
|
protected function grid() |
||||
|
{ |
||||
|
if (false){ |
||||
|
return Grid::make(new SalesmanData(),function (Grid $grid){ |
||||
|
$grid->paginate(10); |
||||
|
$grid->column('person_id','懒ID'); |
||||
|
$grid->column('nick_name','拓展员'); |
||||
|
$grid->column('total','社区总数'); |
||||
|
$grid->column('t_num','今日订单数'); |
||||
|
$grid->column('t_amount','今日成交额'); |
||||
|
$grid->column('y_num','昨日订单数'); |
||||
|
$grid->column('y_amount','昨日成交额'); |
||||
|
$grid->column('w_num','本周订单数'); |
||||
|
$grid->column('w_amount','本周成交额'); |
||||
|
$grid->column('m_num','本月订单数'); |
||||
|
$grid->column('m_amount','本月成交额'); |
||||
|
$grid->disableActions(); |
||||
|
$grid->filter(function (Grid\Filter $filter){ |
||||
|
$filter->equal('person_id','拓展员懒ID'); |
||||
|
}); |
||||
|
}); |
||||
|
}else{ |
||||
|
return Grid::make(new \App\Admin\Repositories\v3\Salesman(),function (Grid $grid){ |
||||
|
|
||||
|
$grid->tools(new SalesmanOption()); |
||||
|
$grid->paginate(10); |
||||
|
$grid->column('person_id','懒ID'); |
||||
|
$grid->column('nick_name','拓展员'); |
||||
|
$grid->column('total','社区总数'); |
||||
|
$grid->column('t_num','订单数'); |
||||
|
$grid->column('t_amount','成交额'); |
||||
|
$grid->disableActions(); |
||||
|
$grid->filter(function (Grid\Filter $filter){ |
||||
|
$filter->equal('person_id','拓展员懒ID'); |
||||
|
}); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,59 @@ |
|||||
|
<?php |
||||
|
|
||||
|
|
||||
|
namespace App\Admin\Repositories\v3; |
||||
|
|
||||
|
|
||||
|
use App\Admin\Common\Order; |
||||
|
use App\Models\LanzuCsInfo; |
||||
|
use App\Models\v3\SalesmanData; |
||||
|
use Dcat\Admin\Grid; |
||||
|
use Dcat\Admin\Repositories\EloquentRepository; |
||||
|
use Illuminate\Support\Facades\DB; |
||||
|
|
||||
|
class Salesman extends EloquentRepository |
||||
|
{ |
||||
|
protected $eloquentClass = \App\Models\v3\User::class; |
||||
|
public function get(Grid\Model $model) |
||||
|
{ |
||||
|
$userId = $model->filter()->input('user_id'); |
||||
|
$build = LanzuCsInfo::select( |
||||
|
DB::raw('count("lanzu_cs_info.person_id") as total'), |
||||
|
DB::raw('group_concat(lanzu_cs_info.admin_user_id) as admin_user_id'), |
||||
|
DB::raw('group_concat(rb.user_id) as user_id'), |
||||
|
'lanzu_cs_info.person_id','lanzu_user.nick_name') |
||||
|
->groupBy('lanzu_cs_info.person_id') |
||||
|
->leftJoin('lanzu_user','lanzu_user.id','lanzu_cs_info.person_id') |
||||
|
->leftJoin('lanzu_user_relation_bind as rb','rb.source_id','lanzu_cs_info.admin_user_id') |
||||
|
->where('lanzu_cs_info.person_id','>',0); |
||||
|
if ($userId){ |
||||
|
$build = $build->where('lanzu_user.id',$userId); |
||||
|
} |
||||
|
$option = request()->get('option'); |
||||
|
//>>1.获取业务员
|
||||
|
$rows = $build->paginate(10)->toArray(); |
||||
|
//>>2.获取业务员下的所有社区的绑定用户
|
||||
|
foreach ($rows['data'] as &$value){ |
||||
|
$value['admin_user_id'] = array_unique(explode(',',$value['admin_user_id'])); |
||||
|
$value['total'] = count($value['admin_user_id']); |
||||
|
$uid = explode(',',$value['user_id']); |
||||
|
$value['t_num'] = Order::getOrderData([ |
||||
|
'user_type'=>'lanzu_biz',//谁取数据 user_type 用户类型
|
||||
|
'data_type'=>'number',//取什么数据 data_type 数据类型
|
||||
|
'market_id'=>'',//取哪个市场数据
|
||||
|
'condition'=>1,//取数据维度 condition
|
||||
|
'user_ids'=>$uid?$uid:null |
||||
|
],$option);//今日订单数
|
||||
|
$value['t_amount'] = Order::getOrderData([ |
||||
|
'user_type'=>'lanzu_biz',//谁取数据 user_type 用户类型
|
||||
|
'data_type'=>'amount',//取什么数据 data_type 数据类型
|
||||
|
'market_id'=>'',//取哪个市场数据
|
||||
|
'condition'=>1,//取数据维度 condition
|
||||
|
'user_ids'=>$uid?$uid:null |
||||
|
],$option);//今日订单金额
|
||||
|
unset($value['admin_user_id']); |
||||
|
unset($value['user_id']); |
||||
|
} |
||||
|
return $model->makePaginator($rows['total'],$rows['data']); // 传入总记录数// 传入数据二维数组
|
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,111 @@ |
|||||
|
<?php |
||||
|
|
||||
|
|
||||
|
namespace App\Http\Controllers; |
||||
|
|
||||
|
use App\Admin\Common\Order; |
||||
|
use App\Models\LanzuCsInfo; |
||||
|
use Illuminate\Support\Facades\DB; |
||||
|
use Illuminate\Support\Facades\Log; |
||||
|
|
||||
|
class Salesman extends \Illuminate\Routing\Controller |
||||
|
{ |
||||
|
public function addData() |
||||
|
{ |
||||
|
set_time_limit(0); |
||||
|
$rows = LanzuCsInfo::select( |
||||
|
DB::raw('count("lanzu_cs_info.person_id") as total'), |
||||
|
DB::raw('group_concat(lanzu_cs_info.admin_user_id) as admin_user_id'), |
||||
|
DB::raw('group_concat(rb.user_id) as user_id'), |
||||
|
'lanzu_cs_info.person_id','lanzu_user.nick_name') |
||||
|
->groupBy('lanzu_cs_info.person_id') |
||||
|
->leftJoin('lanzu_user','lanzu_user.id','lanzu_cs_info.person_id') |
||||
|
->leftJoin('lanzu_user_relation_bind as rb','rb.source_id','lanzu_cs_info.admin_user_id') |
||||
|
->where('lanzu_cs_info.person_id','>',0)->get()->toArray(); |
||||
|
foreach ($rows as &$value){ |
||||
|
$value['admin_user_id'] = array_unique(explode(',',$value['admin_user_id'])); |
||||
|
$value['total'] = count($value['admin_user_id']); |
||||
|
$uid = explode(',',$value['user_id']); |
||||
|
$value['t_num'] = Order::getOrderData([ |
||||
|
'user_type'=>'lanzu_biz',//谁取数据 user_type 用户类型
|
||||
|
'data_type'=>'number',//取什么数据 data_type 数据类型
|
||||
|
'market_id'=>'',//取哪个市场数据
|
||||
|
'condition'=>1,//取数据维度 condition
|
||||
|
'user_ids'=>$uid?$uid:null |
||||
|
],1);//今日订单数
|
||||
|
|
||||
|
$value['t_amount'] = Order::getOrderData([ |
||||
|
'user_type'=>'lanzu_biz',//谁取数据 user_type 用户类型
|
||||
|
'data_type'=>'amount',//取什么数据 data_type 数据类型
|
||||
|
'market_id'=>'',//取哪个市场数据
|
||||
|
'condition'=>1,//取数据维度 condition
|
||||
|
'user_ids'=>$uid?$uid:null |
||||
|
],1);//今日订单金额
|
||||
|
|
||||
|
$value['y_num'] = Order::getOrderData([ |
||||
|
'user_type'=>'lanzu_biz',//谁取数据 user_type 用户类型
|
||||
|
'data_type'=>'number',//取什么数据 data_type 数据类型
|
||||
|
'market_id'=>'',//取哪个市场数据
|
||||
|
'condition'=>1,//取数据维度 condition
|
||||
|
'user_ids'=>$uid?$uid:null |
||||
|
],-1);//昨日订单数
|
||||
|
|
||||
|
$value['y_amount'] = Order::getOrderData([ |
||||
|
'user_type'=>'lanzu_biz',//谁取数据 user_type 用户类型
|
||||
|
'data_type'=>'amount',//取什么数据 data_type 数据类型
|
||||
|
'market_id'=>'',//取哪个市场数据
|
||||
|
'condition'=>1,//取数据维度 condition
|
||||
|
'user_ids'=>$uid?$uid:null |
||||
|
],-1);//昨日订单金额
|
||||
|
|
||||
|
$value['w_num'] = Order::getOrderData([ |
||||
|
'user_type'=>'lanzu_biz',//谁取数据 user_type 用户类型
|
||||
|
'data_type'=>'number',//取什么数据 data_type 数据类型
|
||||
|
'market_id'=>'',//取哪个市场数据
|
||||
|
'condition'=>1,//取数据维度 condition
|
||||
|
'user_ids'=>$uid?$uid:null |
||||
|
],'w');//本周订单 数
|
||||
|
|
||||
|
$value['w_amount'] = Order::getOrderData([ |
||||
|
'user_type'=>'lanzu_biz',//谁取数据 user_type 用户类型
|
||||
|
'data_type'=>'amount',//取什么数据 data_type 数据类型
|
||||
|
'market_id'=>'',//取哪个市场数据
|
||||
|
'condition'=>1,//取数据维度 condition
|
||||
|
'user_ids'=>$uid?$uid:null |
||||
|
],'w');//本周订单金额
|
||||
|
|
||||
|
$value['m_num'] = Order::getOrderData([ |
||||
|
'user_type'=>'lanzu_biz',//谁取数据 user_type 用户类型
|
||||
|
'data_type'=>'number',//取什么数据 data_type 数据类型
|
||||
|
'market_id'=>'',//取哪个市场数据
|
||||
|
'condition'=>1,//取数据维度 condition
|
||||
|
'user_ids'=>$uid?$uid:null |
||||
|
],'30');//本月订单数
|
||||
|
|
||||
|
$value['m_amount'] = Order::getOrderData([ |
||||
|
'user_type'=>'lanzu_biz',//谁取数据 user_type 用户类型
|
||||
|
'data_type'=>'amount',//取什么数据 data_type 数据类型
|
||||
|
'market_id'=>'',//取哪个市场数据
|
||||
|
'condition'=>1,//取数据维度 condition
|
||||
|
'user_ids'=>$uid?$uid:null |
||||
|
],'30');//本月订单金额
|
||||
|
unset($value['admin_user_id']); |
||||
|
unset($value['user_id']); |
||||
|
} |
||||
|
|
||||
|
DB::beginTransaction(); |
||||
|
try { |
||||
|
DB::table('lanzu_salesman_data')->delete(); |
||||
|
$result = DB::table('lanzu_salesman_data')->insert($rows); |
||||
|
if ($result){ |
||||
|
echo 'success'; |
||||
|
}else{ |
||||
|
echo 'fail'; |
||||
|
} |
||||
|
DB::commit(); |
||||
|
}catch (\Exception $e){ |
||||
|
Log::debug('社区拓展员数据添加失败',[$e->getMessage()]); |
||||
|
DB::rollBack(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,13 @@ |
|||||
|
<?php |
||||
|
|
||||
|
|
||||
|
namespace App\Models\v3; |
||||
|
|
||||
|
|
||||
|
use Illuminate\Database\Eloquent\Model; |
||||
|
|
||||
|
class SalesmanData extends Model |
||||
|
{ |
||||
|
protected $table = 'lanzu_salesman_data'; |
||||
|
protected $dateFormat = 'U'; |
||||
|
} |
||||
@ -0,0 +1,15 @@ |
|||||
|
|
||||
|
<div class="btn-group btn-group-toggle" data-toggle="buttons"> |
||||
|
<label class="btn btn-primary {{request()->get('type','today')=='today'? 'active':''}}"> |
||||
|
<input type="radio" name="options" id="today" checked> 今日 |
||||
|
</label> |
||||
|
<label class="btn btn-primary {{request()->get('type')=='yesterday'? 'active':''}}"> |
||||
|
<input type="radio" name="options" checked id="yesterday"> 昨日 |
||||
|
</label> |
||||
|
<label class="btn btn-primary {{request()->get('type')=='week'? 'active':''}}"> |
||||
|
<input type="radio" name="options" id="week"> 本周 |
||||
|
</label> |
||||
|
<label class="btn btn-primary {{request()->get('type')=='month'? 'active':''}}"> |
||||
|
<input type="radio" name="options" id="month"> 本月 |
||||
|
</label> |
||||
|
</div> |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue