6
0
Fork 0
jiqu-library-server/app/Endpoint/Api/Http/Controllers/Dealer/UserProductController.php

87 lines
2.8 KiB
PHP

<?php
namespace App\Endpoint\Api\Http\Controllers\Dealer;
use App\Endpoint\Api\Http\Controllers\Controller;
use App\Endpoint\Api\Http\Resources\Dealer\UserProductLogResource;
use App\Endpoint\Api\Http\Resources\Dealer\UserProductResource;
use App\Exceptions\BizException;
use App\Helpers\Paginator;
use App\Models\DealerUserProductLog;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Throwable;
class UserProductController extends Controller
{
public function index(Request $request)
{
$list = $request->user()->dealerProducts()
->with('product')
->orderBy('product_id', 'asc')
->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50));
return UserProductResource::collection($list);
}
public function show($id, Request $request)
{
$product = $request->user()->dealerProducts()
->with('product')
->where('product_id', $id)
->first();
return UserProductResource::make($product);
}
public function logs(Request $request)
{
$list = $request->user()->dealerProductLogs()->filter($request->all())
->with('product')
->orderBy('created_at', 'desc')
->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50));
return UserProductLogResource::collection($list);
}
/**
* 线下去库存
*
* @param Request $request
* @return void
*/
public function offlineOutQty(Request $request)
{
$input = $request->validate([
'product_id'=>['bail', 'required', 'int', 'min:0'],
'num'=>['bail', 'required', 'int', 'min:1'],
'remark'=> ['bail', 'string', 'max:200'],
], [], [
'product_id' => '商品',
'num' => '数量',
'remark'=>'备注',
]);
$product = $request->user()->dealerProducts()
->where('product_id', $input['product_id'])
->first();
if (!$product) {
throw new BizException('您还没有该商品');
}
try {
DB::beginTransaction();
$product->decrement('stock', $input['num']);
DealerUserProductLog::create([
'user_id'=> $request->user()->id,
'product_id'=> $input['product_id'],
'type' => DealerUserProductLog::TYPE_OFFLINE_OUT,
'qty'=>$input['num'],
'remark'=>$input['remark']??null,
]);
DB::commit();
} catch (Throwable $th) {
DB::rollBack();
report($th);
throw new BizException('系统繁忙,请稍后再试');
}
return response()->noContent();
}
}