erp/app/Http/Controllers/Group/GroupsController.php
2022-10-21 13:09:30 +08:00

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);
}
}