2022-07-28 13:46:08 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers\Goods;
|
|
|
|
|
|
|
|
|
|
use App\Http\Controllers\Controller;
|
|
|
|
|
use App\Http\Resources\GoodsSkuResource;
|
2022-08-01 17:06:43 +08:00
|
|
|
use App\Models\Log as LogModel;
|
2022-07-28 13:46:08 +08:00
|
|
|
use Illuminate\Http\Request;
|
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
|
use Illuminate\Support\Facades\Validator;
|
|
|
|
|
use Illuminate\Validation\Rule;
|
|
|
|
|
use App\Models\Goods;
|
|
|
|
|
use App\Models\GoodsSku;
|
|
|
|
|
|
|
|
|
|
class GoodsController extends Controller
|
|
|
|
|
{
|
2022-08-01 17:06:43 +08:00
|
|
|
public function __construct(Request $request)
|
|
|
|
|
{
|
|
|
|
|
$this->log = new LogModel([
|
|
|
|
|
'module' => 'goods',
|
|
|
|
|
'action' => $request->getMethod(),
|
|
|
|
|
'target_type' => 'goods_sku',
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-28 13:46:08 +08:00
|
|
|
public function index(Request $request)
|
|
|
|
|
{
|
2022-07-28 17:08:05 +08:00
|
|
|
$goods = Goods::query()->filter()->get()->toArray();
|
|
|
|
|
$goodsIds = array_column($goods, 'id');
|
|
|
|
|
// 状态变更时间查询,日志
|
|
|
|
|
$day = date('Y-m-d'); //早上7点之前是昨天,7点之后是今天
|
2022-07-28 16:06:15 +08:00
|
|
|
$goodsSkus = GoodsSku::query()
|
2022-07-28 17:08:05 +08:00
|
|
|
->whereIn('goods_id', $goodsIds)
|
2022-07-28 16:06:15 +08:00
|
|
|
->filter()
|
|
|
|
|
->with(['goods' => function ($query) {
|
2022-07-28 17:08:05 +08:00
|
|
|
$query->with(['type:id,name', 'brand:id,name']);
|
|
|
|
|
}])
|
|
|
|
|
->with(['daily' => function ($query) use ($day){
|
|
|
|
|
$query->where('day', $day)->with(['daily:id,sku_id,day,arrived_today_num,loss_num,inventory']);
|
2022-07-28 13:46:08 +08:00
|
|
|
}])
|
|
|
|
|
->paginate();
|
|
|
|
|
|
2022-07-28 16:06:15 +08:00
|
|
|
return GoodsSkuResource::collection($goodsSkus);
|
2022-07-28 13:46:08 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function store(Request $request)
|
|
|
|
|
{
|
|
|
|
|
$validator = Validator::make($request->all(), [
|
|
|
|
|
'title' => ['required', 'string', 'max:255'],
|
|
|
|
|
'img_url' => ['required', 'string', 'max:255'],
|
|
|
|
|
'type_id' => ['required', 'integer', 'exists:goods_types,id'],
|
|
|
|
|
'brand_id' => ['integer', 'exists:goods_brands,id'],
|
|
|
|
|
'goods_code' => ['required', 'alpha_dash', 'max:32', 'unique:goods,goods_code'],
|
|
|
|
|
'skus' => ['required', 'array'],
|
|
|
|
|
'skus.*.title' => ['required', 'string', 'max:255'],
|
|
|
|
|
'skus.*.sku_code' => ['required', 'distinct', 'alpha_dash', 'max:32'],
|
|
|
|
|
'skus.*.status' => ['required', 'integer', Rule::in([0, 1, 2])],
|
|
|
|
|
'skus.*.num' => ['required', 'integer', 'max:10'],
|
|
|
|
|
'skus.*.cost' => ['required', 'numeric', 'max:10'],
|
|
|
|
|
]);
|
|
|
|
|
if ($validator->fails()) {
|
2022-08-01 04:18:07 +08:00
|
|
|
$this->setValidatorFailResponse($validator->getMessageBag()->getMessages());
|
|
|
|
|
|
|
|
|
|
return response($this->res, $this->res['httpCode']);
|
2022-07-28 13:46:08 +08:00
|
|
|
}
|
|
|
|
|
DB::beginTransaction();
|
|
|
|
|
try {
|
|
|
|
|
$goods = new Goods();
|
|
|
|
|
$goods->title = $request->title;
|
|
|
|
|
$goods->img_url = $request->img_url;
|
|
|
|
|
$goods->type_id = $request->type_id;
|
|
|
|
|
$goods->brand_id = $request->brand_id;
|
|
|
|
|
$goods->goods_code = $request->goods_code;
|
|
|
|
|
$goods->save();
|
|
|
|
|
$goodsSkus = [];
|
|
|
|
|
foreach ($request->skus as $item) {
|
|
|
|
|
$item['goods_id'] = $goods->id;
|
|
|
|
|
$goodsSkus[] = $item;
|
|
|
|
|
}
|
2022-08-01 17:06:43 +08:00
|
|
|
$collection = $goods->skus()->createMany($goodsSkus);
|
2022-07-28 13:46:08 +08:00
|
|
|
DB::commit();
|
2022-08-01 17:06:43 +08:00
|
|
|
$this->setAfterUpdate($collection->toArray());
|
|
|
|
|
$this->addLog(0, 'add');
|
2022-07-28 13:46:08 +08:00
|
|
|
} catch (\Exception $exception) {
|
|
|
|
|
DB::rollBack();
|
|
|
|
|
$this->res = [
|
|
|
|
|
'httpCode' => 400,
|
|
|
|
|
'errorCode' => 400416,
|
|
|
|
|
'errorMessage' => $exception->getMessage(),
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return response($this->res, $this->res['httpCode']);
|
|
|
|
|
}
|
|
|
|
|
}
|