6
0
Fork 0

粉丝当前进货业绩

release
李静 2022-02-11 16:28:21 +08:00
parent 9b2d2c9af1
commit 97b481e061
5 changed files with 74 additions and 4 deletions

View File

@ -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';
}
}

View File

@ -2,9 +2,11 @@
namespace App\Endpoint\Api\Http\Controllers\Dealer;
use App\Actions\Dealer\CalculatePurchaseAmountOfCurrentPeriod;
use App\Endpoint\Api\Http\Controllers\Controller;
use App\Endpoint\Api\Http\Resources\Dealer\DealerFansResource;
use App\Helpers\Paginator as PaginatorHelper;
use App\Models\Dealer;
use Illuminate\Http\Request;
class FansController extends Controller
@ -13,23 +15,41 @@ class FansController extends Controller
* 统计当前信息
*
* @param Request $request
* @param CalculatePurchaseAmountOfCurrentPeriod $calculatePurchaseAmountOfCurrentPeriod
*
*/
public function statistics(Request $request)
{
public function statistics(
Request $request,
CalculatePurchaseAmountOfCurrentPeriod $calculatePurchaseAmountOfCurrentPeriod
) {
$user = $request->user();
return response()->json([
'fans_num'=>$request->user()->fans()->count(),
'group_sales_value'=>$request->user()->dealer->team_sales_value,
'fans_num'=> $user->fans()->count(),
'total_purchase_amount'=> $calculatePurchaseAmountOfCurrentPeriod->handle($user->dealer),
]);
}
public function index(Request $request)
{
$perPage = PaginatorHelper::resolvePerPage('per_page', 20, 50);
$fans = $request->user()->fans()
->with(['userInfo', 'dealer'])
->latest('id')
->simplePaginate($perPage);
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),
]);
}
}

View File

@ -15,6 +15,7 @@ class DealerFansResource extends JsonResource
public function toArray($request)
{
return [
'id' => $this->id,
'phone' => $this->phone,
'nickname' => (string) $this->whenLoaded('userInfo', $this->userInfo->nickname, ''),
'avatar' => (string) $this->whenLoaded('userInfo', $this->userInfo->avatar, ''),

View File

@ -229,6 +229,7 @@ Route::group([
//业绩统计
Route::get('fans/statistics', [Dealer\FansController::class, 'statistics']);
Route::get('fans', [Dealer\FansController::class, 'index']);
Route::get('fans/{fan}', [Dealer\FansController::class, 'show']);
//我的库存
Route::get('user-products', [Dealer\UserProductController::class, 'index']);

View File

@ -22,6 +22,7 @@ class AppServiceProvider extends ServiceProvider
*/
public $singletons = [
\App\Actions\Dealer\CalculatePurchaseAmount::class => \App\Actions\Dealer\CalculatePurchaseAmount::class,
\App\Actions\Dealer\CalculatePurchaseAmountOfCurrentPeriod::class => \App\Actions\Dealer\CalculatePurchaseAmountOfCurrentPeriod::class,
];
/**