You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
4.6 KiB
119 lines
4.6 KiB
<?php
|
|
|
|
namespace App\Admin\Actions\Excel;
|
|
|
|
use App\Models\LanzuCsInfo;
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
use Maatwebsite\Excel\Concerns\FromArray;
|
|
use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
|
|
use App\Admin\Common\Order;
|
|
use App\Models\LanzuUserRelationBind;
|
|
use \App\Models\v3\CsInfo as modelCsInfo;
|
|
|
|
class SalesMan implements FromArray, WithStrictNullComparison
|
|
{
|
|
protected $_name;
|
|
protected $_option;
|
|
public function __construct($option,$name)
|
|
{
|
|
$this->_name = $name;
|
|
$this->_option = $option;
|
|
}
|
|
|
|
public function array(): array
|
|
{
|
|
$result[] = [
|
|
'懒ID',
|
|
'拓展员',
|
|
'服务站点',
|
|
'站点地址',
|
|
'绑定用户数',
|
|
$this->_name.'下单人数',
|
|
$this->_name.'订单数',
|
|
$this->_name.'订单金额',
|
|
];
|
|
$res = $this->getSaleMan(-30);
|
|
foreach ($res as $value){
|
|
$item =[];
|
|
$item[] = $value['person_id'];
|
|
$item[] = $value['real_name']??$value['nick_name'];
|
|
$item[] = $value['name'];
|
|
$item[] = $value['address'];
|
|
$item[] = $value['user_num']??0;
|
|
$item[] = $value['order_user_num']??0;
|
|
$item[] = $value['order_num']??0;
|
|
$item[] = $value['order_amount']??0;
|
|
$result[] = $item;
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* 获取拓展员
|
|
*/
|
|
public function getSaleMan($option)
|
|
{
|
|
$data = 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();
|
|
$result = [];
|
|
foreach ($data as $key => $value) {
|
|
$value['admin_user_id'] = array_unique(explode(',', $value['admin_user_id']));
|
|
$result = $this->csDetail($value['admin_user_id'], $this->_option, $value['nick_name'], $result);
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* 获取站点详情
|
|
*/
|
|
public function csDetail($adminUid, $option, $nickName, $result)
|
|
{
|
|
$data = modelCsInfo::whereIn('lanzu_cs_info.admin_user_id', $adminUid)
|
|
->select('lanzu_cs_info.*','lanzu_employees.name as real_name')
|
|
->leftJoin('lanzu_employees', function ($join){
|
|
$join->on('lanzu_employees.user_id','=', 'lanzu_cs_info.person_id')
|
|
->where('lanzu_employees.status','=',1);
|
|
|
|
})
|
|
->get()->toArray();
|
|
|
|
foreach ($data as &$value) {
|
|
//>>1.获取绑定后下过单的用户
|
|
$value['user_num'] = LanzuUserRelationBind::where('source_id', $value['admin_user_id'])->count();
|
|
$uid = Order::getUserOrder($value['admin_user_id']);
|
|
//>>2.获取订单数据
|
|
$value['order_user_num'] = Order::getOrderData([
|
|
'user_type' => 'lanzu_biz',//谁取数据 user_type 用户类型
|
|
'data_type' => 'count_user',//取什么数据 data_type 数据类型
|
|
'market_id' => '',//取哪个市场数据
|
|
'condition' => 1,//取数据维度 condition
|
|
'user_ids' => $uid ? $uid : null
|
|
], $option);//下单人数
|
|
$value['order_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['order_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);//订单金额
|
|
$value['nick_name'] = $nickName;
|
|
$result[] = $value;
|
|
}
|
|
return $result;
|
|
}
|
|
}
|