147 lines
4.6 KiB
PHP
147 lines
4.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Group;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\GroupsRequest;
|
|
use App\Http\Resources\GoodsSkuResource;
|
|
use App\Models\Goods;
|
|
use App\Models\GoodsSku;
|
|
use App\Models\Log as LogModel;
|
|
use App\Utils\DateTimeUtils;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use App\Models\Groups;
|
|
use App\Http\Requests\GoodsRequest;
|
|
use Illuminate\Validation\Rule;
|
|
use Illuminate\Validation\ValidationException;
|
|
use App\Http\Resources\GroupsResource;
|
|
use App\Models\GroupGoods;
|
|
use App\Http\Resources\GroupGoodsResource;
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
|
class GroupsController extends Controller
|
|
{
|
|
public function __construct(Request $request)
|
|
{
|
|
|
|
}
|
|
|
|
public function index(Request $request)
|
|
{
|
|
$groups = Groups::query()
|
|
->filter()
|
|
->paginate($request->get('per_page'));
|
|
|
|
return GroupsResource::collection($groups);
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$rules = (new GroupsRequest())->rules();
|
|
$validator = Validator::make($request->all(), $rules);
|
|
if ($validator->fails()) {
|
|
$this->setValidatorFailResponse($validator->getMessageBag()->getMessages());
|
|
|
|
return response($this->res, $this->res['httpCode']);
|
|
}
|
|
var_dump($request->get('data'));
|
|
}
|
|
|
|
public function show($id)
|
|
{
|
|
return new GroupsResource(Groups::query()
|
|
->find($id));
|
|
}
|
|
|
|
public function update(Request $request, $id)
|
|
{
|
|
$rules = (new GroupsRequest())->rules();
|
|
$validator = Validator::make($request->all(), $rules);
|
|
if ($validator->fails()) {
|
|
$this->setValidatorFailResponse($validator->getMessageBag()->getMessages());
|
|
|
|
return response($this->res, $this->res['httpCode']);
|
|
}
|
|
var_dump($request->get('data'));
|
|
}
|
|
|
|
public function destroy()
|
|
{
|
|
}
|
|
|
|
public function getGoods(Request $request)
|
|
{
|
|
if ($request->get('group_id')) {
|
|
$goodsNameLike = '';
|
|
$externalSkuId = $request->get('external_sku_id');
|
|
if (false === strpos($externalSkuId, '_')) {
|
|
$goodsNameLike = $externalSkuId;
|
|
}
|
|
$goods = GroupGoods::query()
|
|
->when($goodsNameLike, function ($query, $goodsNameLike) {
|
|
return $query->where('goods_name', 'like', "%$goodsNameLike%");
|
|
})
|
|
->with(['goodsSku:id,stock'])
|
|
->filter()
|
|
->paginate($request->get('per_page'));
|
|
|
|
return GroupGoodsResource::collection($goods);
|
|
}
|
|
$goodsSkus = GoodsSku::query()
|
|
->whereIn('id', $request->get('ids'))
|
|
->with(['goods' => function ($query) {
|
|
$query->with(['type:id,name', 'brand:id,name']);
|
|
}])
|
|
->orderBy('updated_at', 'desc')
|
|
->paginate($request->get('per_page'));
|
|
|
|
return GoodsSkuResource::collection($goodsSkus);
|
|
}
|
|
|
|
public function addGoods(Request $request)
|
|
{
|
|
var_dump($request->get('ids'));
|
|
var_dump($request->get('shop_id'));
|
|
var_dump($request->get('group_id'));
|
|
}
|
|
|
|
public function goodsList(Request $request)
|
|
{
|
|
$goodsCode = $skuCode = '';
|
|
$goodsKeyword = $request->get('goods_keyword');
|
|
if (false !== strpos($goodsKeyword, '_')) {
|
|
[$goodsCode, $skuCode] = explode('_', $goodsKeyword);
|
|
$goodsKeyword = '';
|
|
}
|
|
$goodsIds = Goods::query()
|
|
->when($goodsKeyword, function ($query, $goodsKeyword) {
|
|
return $query->where('title', 'like', "%$goodsKeyword%");
|
|
})
|
|
->filter()
|
|
->when($goodsCode, function ($query, $goodsCode) {
|
|
return $query->where('goods_code', $goodsCode);
|
|
})
|
|
->pluck('id');
|
|
$ids = [];
|
|
$goodsSkus = GoodsSku::query()
|
|
->whereIn('goods_id', $goodsIds)
|
|
->whereNotIn('id', $ids)
|
|
->when($skuCode, function ($query, $skuCode) {
|
|
return $query->where('sku_code', $skuCode);
|
|
})
|
|
->when($request->get('has_stock'), function ($query) {
|
|
return $query->where('stock', '>', 0);
|
|
})
|
|
->filter()
|
|
->with(['goods' => function ($query) {
|
|
$query->with(['type:id,name', 'brand:id,name']);
|
|
}])
|
|
->orderBy('updated_at', 'desc')
|
|
->paginate($request->get('per_page'));
|
|
|
|
return GoodsSkuResource::collection($goodsSkus);
|
|
}
|
|
}
|