链街Dcat后台
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

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