粉丝当前进货业绩
parent
9b2d2c9af1
commit
97b481e061
|
|
@ -0,0 +1,47 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Actions\Dealer;
|
||||||
|
|
||||||
|
use App\Models\Dealer;
|
||||||
|
use Illuminate\Support\Carbon;
|
||||||
|
use Illuminate\Support\Facades\Cache;
|
||||||
|
|
||||||
|
class CalculatePurchaseAmountOfCurrentPeriod
|
||||||
|
{
|
||||||
|
public function __construct(
|
||||||
|
protected CalculatePurchaseAmount $calculatePurchaseAmount,
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算当期的进货业绩
|
||||||
|
*
|
||||||
|
* @param \App\Models\Dealer $dealer
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function handle(Dealer $dealer): string
|
||||||
|
{
|
||||||
|
$tz = now();
|
||||||
|
|
||||||
|
if ($tz->day >= 20) {
|
||||||
|
$startAt = $tz->copy()->setDay(20)->startOfDay();
|
||||||
|
} elseif ($tz->day >= 5) {
|
||||||
|
$startAt = $tz->copy()->setDay(5)->startOfDay();
|
||||||
|
} else {
|
||||||
|
$startAt = $tz->copy()->subMonthNoOverflow()->setDay(20)->startOfDay();
|
||||||
|
}
|
||||||
|
|
||||||
|
return Cache::remember($this->prefix($startAt).':'.$dealer->user_id, 3600, function () use ($dealer, $startAt) {
|
||||||
|
return $this->calculatePurchaseAmount->handle($dealer, $startAt);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param \Illuminate\Support\Carbon $tz
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function prefix(Carbon $tz): string
|
||||||
|
{
|
||||||
|
return $tz->rawFormat('ymd').'_dealer_purchase_amount';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,9 +2,11 @@
|
||||||
|
|
||||||
namespace App\Endpoint\Api\Http\Controllers\Dealer;
|
namespace App\Endpoint\Api\Http\Controllers\Dealer;
|
||||||
|
|
||||||
|
use App\Actions\Dealer\CalculatePurchaseAmountOfCurrentPeriod;
|
||||||
use App\Endpoint\Api\Http\Controllers\Controller;
|
use App\Endpoint\Api\Http\Controllers\Controller;
|
||||||
use App\Endpoint\Api\Http\Resources\Dealer\DealerFansResource;
|
use App\Endpoint\Api\Http\Resources\Dealer\DealerFansResource;
|
||||||
use App\Helpers\Paginator as PaginatorHelper;
|
use App\Helpers\Paginator as PaginatorHelper;
|
||||||
|
use App\Models\Dealer;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
class FansController extends Controller
|
class FansController extends Controller
|
||||||
|
|
@ -13,23 +15,41 @@ class FansController extends Controller
|
||||||
* 统计当前信息
|
* 统计当前信息
|
||||||
*
|
*
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
|
* @param CalculatePurchaseAmountOfCurrentPeriod $calculatePurchaseAmountOfCurrentPeriod
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function statistics(Request $request)
|
public function statistics(
|
||||||
{
|
Request $request,
|
||||||
|
CalculatePurchaseAmountOfCurrentPeriod $calculatePurchaseAmountOfCurrentPeriod
|
||||||
|
) {
|
||||||
|
$user = $request->user();
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'fans_num'=>$request->user()->fans()->count(),
|
'fans_num'=> $user->fans()->count(),
|
||||||
'group_sales_value'=>$request->user()->dealer->team_sales_value,
|
'total_purchase_amount'=> $calculatePurchaseAmountOfCurrentPeriod->handle($user->dealer),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
$perPage = PaginatorHelper::resolvePerPage('per_page', 20, 50);
|
$perPage = PaginatorHelper::resolvePerPage('per_page', 20, 50);
|
||||||
|
|
||||||
$fans = $request->user()->fans()
|
$fans = $request->user()->fans()
|
||||||
->with(['userInfo', 'dealer'])
|
->with(['userInfo', 'dealer'])
|
||||||
->latest('id')
|
->latest('id')
|
||||||
->simplePaginate($perPage);
|
->simplePaginate($perPage);
|
||||||
|
|
||||||
return DealerFansResource::collection($fans);
|
return DealerFansResource::collection($fans);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function show(
|
||||||
|
$id,
|
||||||
|
CalculatePurchaseAmountOfCurrentPeriod $calculatePurchaseAmountOfCurrentPeriod
|
||||||
|
) {
|
||||||
|
$dealer = Dealer::where('user_id', $id)->firstOrFail();
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'total_purchase_amount' => $calculatePurchaseAmountOfCurrentPeriod->handle($dealer),
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ class DealerFansResource extends JsonResource
|
||||||
public function toArray($request)
|
public function toArray($request)
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
|
'id' => $this->id,
|
||||||
'phone' => $this->phone,
|
'phone' => $this->phone,
|
||||||
'nickname' => (string) $this->whenLoaded('userInfo', $this->userInfo->nickname, ''),
|
'nickname' => (string) $this->whenLoaded('userInfo', $this->userInfo->nickname, ''),
|
||||||
'avatar' => (string) $this->whenLoaded('userInfo', $this->userInfo->avatar, ''),
|
'avatar' => (string) $this->whenLoaded('userInfo', $this->userInfo->avatar, ''),
|
||||||
|
|
|
||||||
|
|
@ -229,6 +229,7 @@ Route::group([
|
||||||
//业绩统计
|
//业绩统计
|
||||||
Route::get('fans/statistics', [Dealer\FansController::class, 'statistics']);
|
Route::get('fans/statistics', [Dealer\FansController::class, 'statistics']);
|
||||||
Route::get('fans', [Dealer\FansController::class, 'index']);
|
Route::get('fans', [Dealer\FansController::class, 'index']);
|
||||||
|
Route::get('fans/{fan}', [Dealer\FansController::class, 'show']);
|
||||||
|
|
||||||
//我的库存
|
//我的库存
|
||||||
Route::get('user-products', [Dealer\UserProductController::class, 'index']);
|
Route::get('user-products', [Dealer\UserProductController::class, 'index']);
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ class AppServiceProvider extends ServiceProvider
|
||||||
*/
|
*/
|
||||||
public $singletons = [
|
public $singletons = [
|
||||||
\App\Actions\Dealer\CalculatePurchaseAmount::class => \App\Actions\Dealer\CalculatePurchaseAmount::class,
|
\App\Actions\Dealer\CalculatePurchaseAmount::class => \App\Actions\Dealer\CalculatePurchaseAmount::class,
|
||||||
|
\App\Actions\Dealer\CalculatePurchaseAmountOfCurrentPeriod::class => \App\Actions\Dealer\CalculatePurchaseAmountOfCurrentPeriod::class,
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue