Browse Source

Merge branch 'qs_local_master_9_23'

master
lanzu_qinsheng 5 years ago
parent
commit
a4caa191fd
  1. 54
      app/Admin/Actions/Tools/SalesmanOption.php
  2. 132
      app/Admin/Common/Order.php
  3. 53
      app/Admin/Controllers/v3/Salesman.php
  4. 83
      app/Admin/Metrics/Examples/Order/OrderData.php
  5. 59
      app/Admin/Repositories/v3/Salesman.php
  6. 1
      app/Admin/routes.php
  7. 111
      app/Http/Controllers/Salesman.php
  8. 13
      app/Models/v3/SalesmanData.php
  9. 1
      composer.json
  10. 15
      resources/views/admin/tools/salesman.blade.php
  11. 1
      routes/web.php

54
app/Admin/Actions/Tools/SalesmanOption.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'));
}
}

132
app/Admin/Common/Order.php

@ -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;
}
}

53
app/Admin/Controllers/v3/Salesman.php

@ -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');
});
});
}
}
}

83
app/Admin/Metrics/Examples/Order/OrderData.php

@ -3,6 +3,7 @@
namespace App\Admin\Metrics\Examples\Order;
use App\Admin\Common\Order;
use App\Models\ImsCjdcOrder;
use App\Models\ImsCjdcOrderMain;
use Dcat\Admin\Widgets\Metrics\Card;
@ -50,48 +51,7 @@ class OrderData extends Card
*/
public function getOrderData($params,$option)
{
//如果市场id存在
$buildData = $this->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) = $this->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) = $this->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');
}
$result = Order::getOrderData($params,$option);
return $result;
}
@ -102,40 +62,7 @@ class OrderData extends Card
*/
public 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"));
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;
}
list($beginTime,$endTime) = Order::beginAndEnd($option);
return [$beginTime,$endTime];
}
@ -146,9 +73,7 @@ class OrderData extends Card
*/
public function buildData()
{
$build = ImsCjdcOrderMain
::whereIn('state', [3, 4, 5, 10])
->where('type',1);
$build = Order::buildData();
return $build;
}

59
app/Admin/Repositories/v3/Salesman.php

@ -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']); // 传入总记录数// 传入数据二维数组
}
}

1
app/Admin/routes.php

@ -16,6 +16,7 @@ Route::group([
//$router->resource('/', 'LanzuCsInfoController');
$router->resource('/speaker', 'LanzuServiceSpeakerController');
$router->resource('/mp', 'LanzuMpInfoController');
$router->resource('/salesman', 'v3\Salesman');
$router->any('/mp_data', 'LanzuMpInfoController@showData');
$router->resource('/mm', 'LanzuMmInfoController');
$router->resource('/market', 'ImsCjdcMarketController');

111
app/Http/Controllers/Salesman.php

@ -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();
}
}
}

13
app/Models/v3/SalesmanData.php

@ -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';
}

1
composer.json

@ -10,6 +10,7 @@
"require": {
"php": "^7.2.5",
"alibabacloud/client": "^1.5",
"dcat/easy-excel": "^1.0",
"dcat/laravel-admin": "^1.6",
"fideloper/proxy": "^4.2",
"fruitcake/laravel-cors": "^1.0",

15
resources/views/admin/tools/salesman.blade.php

@ -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>

1
routes/web.php

@ -19,3 +19,4 @@ Route::get('/', function(){
Route::get('/test', 'TestController@Test');
Route::any('/rpc', 'TestController@testRpc');
Route::any('/add', 'Salesman@addData');
Loading…
Cancel
Save