erp/app/Http/Controllers/Business/BusinessGoodsSkusController.php

94 lines
3.1 KiB
PHP
Raw Normal View History

2022-09-02 18:42:57 +08:00
<?php
namespace App\Http\Controllers\Business;
2022-09-15 17:55:17 +08:00
use App\Events\BusinessOrdersUpdate;
2022-09-02 18:42:57 +08:00
use App\Http\Controllers\Controller;
use App\Http\Resources\BusinessGoodsSkuResource;
use App\Models\BusinessGoodsSku;
2022-09-08 01:02:07 +08:00
use App\Models\BusinessOrderItem;
use App\Models\GoodsSku;
use App\Models\Log as LogModel;
2022-09-02 18:42:57 +08:00
use Illuminate\Http\Request;
2022-09-08 01:02:07 +08:00
use Illuminate\Support\Facades\DB;
2022-09-02 18:42:57 +08:00
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class BusinessGoodsSkusController extends Controller
{
2022-09-08 01:02:07 +08:00
public function __construct(Request $request)
{
$this->log = new LogModel([
'module' => 'plat',
'action' => $request->getMethod(),
'target_type' => 'goods',
]);
}
2022-09-02 18:42:57 +08:00
public function index(Request $request)
{
$businessGoodsSkus = BusinessGoodsSku::query()
->filter()
->where('quantity_type', 0)
2022-09-02 18:42:57 +08:00
->with(['shop:id,name'])
->paginate($request->get('per_page'));
return BusinessGoodsSkuResource::collection($businessGoodsSkus);
}
2022-09-16 10:30:51 +08:00
public function update($id, Request $request)
2022-09-02 18:42:57 +08:00
{
$validator = Validator::make($request->all(), [
'is_sync' => ['required', Rule::in([0, 1])]
]);
if ($validator->fails()) {
$this->setValidatorFailResponse($validator->getMessageBag()->getMessages());
return response($this->res, $this->res['httpCode']);
}
2022-09-16 11:13:51 +08:00
$sku = BusinessGoodsSku::query()->find($id);
2023-04-17 18:56:59 +08:00
$this->setBeforeUpdateForLog($sku->is_sync);
2022-09-02 18:42:57 +08:00
$sku->is_sync = $request->input('is_sync');
$sku->save();
2023-04-17 18:56:59 +08:00
$this->setAfterUpdateForLog($sku->is_sync);
2022-09-08 01:02:07 +08:00
$this->addLog($id, 'status');
2022-09-02 18:42:57 +08:00
return response($this->res, $this->res['httpCode']);
}
2022-09-08 01:02:07 +08:00
2022-09-16 10:30:51 +08:00
public function destroy($id, Request $request)
2022-09-08 01:02:07 +08:00
{
DB::beginTransaction();
try {
2022-09-16 11:13:51 +08:00
$sku = BusinessGoodsSku::query()->find($id);
2023-04-17 18:56:59 +08:00
$this->setBeforeUpdateForLog($sku->toArray());
2022-09-16 11:13:51 +08:00
BusinessOrderItem::query()->where('goods_id', $sku->goods_id)->where('sku_id', $sku->sku_id)->delete();
2022-09-08 01:02:07 +08:00
$sku->delete();
2023-04-17 18:56:59 +08:00
$this->setAfterUpdateForLog('');
2022-09-08 01:02:07 +08:00
$this->addLog($id, '');
DB::commit();
} catch (Exception $exception) {
DB::rollBack();
// 返回错误
$this->setValidatorFailResponse($exception->getMessages());
}
return response($this->res, $this->res['httpCode']);
}
2022-09-16 10:30:51 +08:00
public function syncStock($id, Request $request)
2022-09-08 01:02:07 +08:00
{
$businessGoodsSku = BusinessGoodsSku::query()->where('is_sync', 1)->find($id);
2023-04-17 18:56:59 +08:00
$sku = GoodsSku::query()
->where('external_sku_id', $businessGoodsSku->external_sku_id)
2022-09-08 01:02:07 +08:00
->first();
if (empty($sku)) {
$this->setValidatorFailResponse('未找到对应的商品,请核实后再次同步或删除此平台商品');
} else {
2022-09-15 17:55:17 +08:00
event(new BusinessOrdersUpdate($businessGoodsSku, 0));
2022-09-08 01:02:07 +08:00
$this->res['message'] = '库存同步请求发送成功,具体结果查看日志';
}
return response($this->res, $this->res['httpCode']);
}
2022-09-02 18:42:57 +08:00
}