diff --git a/app/Admin/Actions/Tools/SalesmanOption.php b/app/Admin/Actions/Tools/SalesmanOption.php new file mode 100644 index 0000000..3e33414 --- /dev/null +++ b/app/Admin/Actions/Tools/SalesmanOption.php @@ -0,0 +1,54 @@ +script()); +// $options = [ +// 't' => '今日', +// 'y' => '昨日', +// 'w' => '本周', +// 'm' => '本月', +// ]; + $options = [ + 'all' => 'All', + 'm' => 'Male', + 'f' => 'Female', + ]; + + return view('admin.tools.salesman', compact('options')); + } +} diff --git a/app/Admin/Common/Order.php b/app/Admin/Common/Order.php new file mode 100644 index 0000000..9d09dec --- /dev/null +++ b/app/Admin/Common/Order.php @@ -0,0 +1,132 @@ +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; + } +} diff --git a/app/Admin/Controllers/v3/Salesman.php b/app/Admin/Controllers/v3/Salesman.php new file mode 100644 index 0000000..ea0d255 --- /dev/null +++ b/app/Admin/Controllers/v3/Salesman.php @@ -0,0 +1,53 @@ +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'); + }); + }); + } + + } +} diff --git a/app/Admin/Metrics/Examples/Order/OrderData.php b/app/Admin/Metrics/Examples/Order/OrderData.php index 5f7aaf7..1af21a6 100644 --- a/app/Admin/Metrics/Examples/Order/OrderData.php +++ b/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; } diff --git a/app/Admin/Repositories/v3/Salesman.php b/app/Admin/Repositories/v3/Salesman.php new file mode 100644 index 0000000..d76ed90 --- /dev/null +++ b/app/Admin/Repositories/v3/Salesman.php @@ -0,0 +1,59 @@ +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']); // 传入总记录数// 传入数据二维数组 + } +} diff --git a/app/Admin/routes.php b/app/Admin/routes.php index b79a123..416b3fe 100644 --- a/app/Admin/routes.php +++ b/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'); diff --git a/app/Http/Controllers/Salesman.php b/app/Http/Controllers/Salesman.php new file mode 100644 index 0000000..51071c3 --- /dev/null +++ b/app/Http/Controllers/Salesman.php @@ -0,0 +1,111 @@ +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(); + } + } +} diff --git a/app/Models/v3/SalesmanData.php b/app/Models/v3/SalesmanData.php new file mode 100644 index 0000000..537c04b --- /dev/null +++ b/app/Models/v3/SalesmanData.php @@ -0,0 +1,13 @@ + + + + + + diff --git a/routes/web.php b/routes/web.php index c2497f9..1eba8b1 100644 --- a/routes/web.php +++ b/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');