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