@ -2,14 +2,20 @@
namespace App\Admin\Repositories\v3 ;
use App\Models\ImsCjdcOrderMain as Model ;
use App\Models\v3\LanzuEmployees as Model ;
use Dcat\Admin\Grid\Model as GridModel ;
use Dcat\Admin\Repositories\EloquentRepository ;
use Illuminate\Support\Facades\DB ;
use App\Models\v3\LanzuEmployees as EmployeesModel ;
use App\Models\LanzuCsInfo as CsInfoModel ;
use App\Models\LanzuUserRelationBind as UserRelationBindModel ;
use App\Models\ImsCjdcOrderMain as OrderMainModel ;
class ReportCommunity extends EloquentRepository
{
public $params = [];
protected $params = [];
protected $currentPage = 1 ;
protected $perPage = 10 ;
/**
* Model .
*
@ -28,62 +34,139 @@ class ReportCommunity extends EloquentRepository
public function get ( GridModel $model )
{
// 获取当前页数
$currentPage = $model -> getCurrentPage ();
$this -> currentPage = $model -> getCurrentPage ();
// 获取每页显示行数
$perPage = $model -> getPerPage ();
$this -> perPage = $model -> getPerPage ();
$where = [];
if ( ! empty ( $this -> params ) && isset ( $this -> params [ 'market_id' ]) && ! empty ( $this -> params [ 'market_id' ])){
$where = [ 'market_id' => $this -> params [ 'market_id' ]];
}
$selects = 'count(' . Model :: $tableName . '.id) AS total_number,horseman_id,' . EmployeesModel :: TABLE_NAME . '.user_id,' . EmployeesModel :: TABLE_NAME . '.name,' . EmployeesModel :: TABLE_NAME . '.market_id,SUM( CASE WHEN delivery_money=0 THEN 3.5 when delivery_money>0 THEN delivery_money+3.5 ELSE 0 END) as total_delivery' ;
$delivery = $this -> getDataModel ( $selects , $where );
$list = $delivery -> groupBy ( 'horseman_id' , EmployeesModel :: TABLE_NAME . '.market_id' , EmployeesModel :: TABLE_NAME . '.name' , EmployeesModel :: TABLE_NAME . '.user_id' ) -> paginate ( $perPage );
// ->orderBy('total_number','desc')
$list = $list -> toArray ();
$list = $this -> getDataModel ( $where );
return $model -> makePaginator (
$list [ 'total' ] ? ? 0 , $list [ 'data' ] ? ? []
);
}
public function getDataModel ( $selects , $ params = [])
public function getDataModel ( $params = [])
{
// 获取筛选参数
$userId = $params [ 'user_id' ] ? ? request () -> input ( 'user_id' , 0 );
$name = $params [ 'name' ] ? ? request () -> input ( 'name' , '' );
$marketId = $params [ 'market_id' ] ? ? request () -> input ( 'market_id' , 0 );
// 获取筛选参数 如果没有时间,则用当天的数据
$startTime = $params [ 'start_time' ] ? ? request () -> input ( 'start_time' , '' );
$endTime = $params [ 'end_time' ] ? ? request () -> input ( 'end_time' , '' );
// 外卖类型 type = 1
$model = Model :: select ( DB :: raw ( $selects ))
// ->with('employees:id,user_id,name,market_id')
-> join ( EmployeesModel :: TABLE_NAME , EmployeesModel :: TABLE_NAME . '.id' , '=' , Model :: $tableName . '.horseman_id' , 'left' )
-> where ( Model :: $tableName . '.type' , 1 )
-> where ( 'shipping_type' , 1 )
-> whereIn ( 'state' , Model :: ORDER_STATE_FINISH )
-> where ( Model :: $tableName . '.created_at' , '>=' , strtotime ( '2020-10-01 00:00:00' ));
if ( $userId ){
$model -> where ( EmployeesModel :: TABLE_NAME . '.user_id' , $userId );
$time = time ();
if ( empty ( $startTime )){
$startTime = date ( 'Y-m-d' , $time ) . '00:00:00' ;
} else {
$startTime = $startTime . '00:00:00' ;
}
if ( $name ){
$model -> where ( EmployeesModel :: TABLE_NAME . '.name' , 'like' , " % $name % " );
if ( empty ( $endTime )){
$endTime = date ( 'Y-m-d' , $time ) . '23:59:59' ;
} else {
$endTime = $endTime . '23:59:59' ;
}
if ( $marketId ){
$model -> where ( EmployeesModel :: TABLE_NAME . '.market_id' , $marketId );
// 获取懒族员工
$selectsEmp = 'id,user_id,person_id,market_id,name,phone,status' ;
$employeesData = $this -> getEmployeesData ( $selectsEmp , $params );
$employeesList = $employeesData -> orderBy ( 'id' , 'desc' )
-> paginate ( $this -> perPage )
-> map ( function ( $value ) { return ( array ) $value ;})
-> toArray ();
// $employeesList = $employeesList->toArray();
foreach ( $employeesList as $key => & $employee ) {
// 根据员工信息,查询名下新增绑定的所有服务点 Statistics
$newCsCount = CsInfoModel :: where ( function ( $query ) use ( $employee ) {
$query -> where ( 'person_id' , '=' , $employee [ 'user_id' ])
-> orWhere ( 'user_id' , '=' , $employee [ 'user_id' ]);
})
-> where ( 'created_at' , '>=' , strtotime ( $startTime ? ? 0 ))
-> where ( 'created_at' , '<=' , strtotime ( $endTime ? ? 0 ))
-> count ();
// 查询名下所有的服务点
$allCsInfos = CsInfoModel :: where ( function ( $query ) use ( $employee ) {
$query -> where ( 'person_id' , '=' , $employee [ 'user_id' ])
-> orWhere ( 'user_id' , '=' , $employee [ 'user_id' ]);
})
-> get ()
-> map ( function ( $value ) { return ( array ) $value ;})
-> toArray ();
// 新增绑定用户数 Statistics
$newBindUserCount = UserRelationBindModel :: where ( 'bind_type' , '=' , 1 )
-> whereIn ( 'source_id' , array_values ( array_column ( $allCsInfos , 'admin_user_id' )))
-> where ( 'created_at' , '>=' , strtotime ( $startTime ? ? 0 ))
-> where ( 'created_at' , '<=' , strtotime ( $endTime ? ? 0 ))
-> count ();
// 查询名下所有服务点的所有用户
$allCsBindUsers = UserRelationBindModel :: where ( 'bind_type' , '=' , 1 )
-> whereIn ( 'source_id' , array_values ( array_column ( $allCsInfos , 'admin_user_id' )))
-> get ()
-> map ( function ( $value ) { return ( array ) $value ;})
-> toArray ();
// 平台新增用户数 Statistics
$platNewUsers = OrderMainModel :: select ( 'user_id' )
-> where ( 'type' , '=' , 1 )
-> whereIn ( 'state' , [ 4 , 5 , 10 , 11 ])
-> whereIn ( 'user_id' , array_values ( array_column ( $allCsBindUsers , 'user_id' )))
-> groupBy ( 'user_id' )
-> havingRaw ( 'MIN(created_at)>=' . strtotime ( $startTime ? ? 0 ) . ' AND MIN(created_at)<=' . strtotime ( $endTime ? ? 0 ) . '' )
-> get ()
-> map ( function ( $value ) { return ( array ) $value ;})
-> toArray ();
$platNewUserCount = count ( $platNewUsers );
// 所有用户产生的线上订单数 Statistics
$totalOrdersCount = OrderMainModel :: where ( 'type' , '=' , 1 )
-> whereIn ( 'state' , [ 4 , 5 , 10 , 11 ])
-> whereIn ( 'user_id' , array_values ( array_column ( $allCsBindUsers , 'user_id' )))
-> where ( 'created_at' , '>=' , strtotime ( $startTime ? ? 0 ))
-> where ( 'created_at' , '<=' , strtotime ( $endTime ? ? 0 ))
-> count ();
// 平台新增用户产生的线上订单数 Statistics
$platNewUserOrdersCount = OrderMainModel :: where ( 'type' , '=' , 1 )
-> whereIn ( 'state' , [ 4 , 5 , 10 , 11 ])
-> whereIn ( 'user_id' , array_values ( array_column ( $platNewUsers , 'user_id' )))
-> where ( 'created_at' , '>=' , strtotime ( $startTime ? ? 0 ))
-> where ( 'created_at' , '<=' , strtotime ( $endTime ? ? 0 ))
-> count ();
$employee [ 'new_cs_count' ] = $newCsCount ;
$employee [ 'new_bind_user_count' ] = $newBindUserCount ;
$employee [ 'plat_new_user_count' ] = $platNewUserCount ;
$employee [ 'total_order_count' ] = $totalOrdersCount ;
$employee [ 'plat_new_user_order_count' ] = $platNewUserOrdersCount ;
}
if ( $startTime ){
$startTime = $startTime . ' 00:00:00' ;
$model -> where ( Model :: $tableName . '.created_at' , '>=' , strtotime ( $startTime ));
return $employeesList ;
}
/**
* 获取懒族员工 model
*/
public function getEmployeesData ( $selects , $params = [ 'status' => 1 ])
{
$model = Model :: select ( DB :: raw ( $selects ));
if ( isset ( $params [ 'status' ]) && is_numeric ( $params [ 'status' ])){
$model -> where ( 'status' , $params [ 'status' ]);
}
if ( $endTime ){
$endTime = $endTime . ' 23:59:59' ;
$model -> where ( Model :: $tableName . '.created_at' , '<=' , strtotime ( $endTime ));
if ( isset ( $params [ 'user_id' ]) && is_numeric ( $params [ 'user_id' ])){
$model -> where ( 'user_id' , $params [ 'user_id' ]);
}
if ( isset ( $params [ 'user_id' ])){
$model -> where ( 'name' , 'like' , '%' . $params [ 'user_id' ] . '%' );
}
if ( isset ( $params [ 'market_id' ]) && is_numeric ( $params [ 'market_id' ])){
$model -> where ( 'market_id' , $params [ 'market_id' ]);
}
return $model ;
}