erp/app/Http/Controllers/Goods/GoodsController.php

101 lines
3.3 KiB
PHP
Raw Normal View History

2022-07-28 13:46:08 +08:00
<?php
namespace App\Http\Controllers\Goods;
use App\Http\Controllers\Controller;
2022-08-03 16:41:15 +08:00
use App\Http\Requests\GoodsSkuRequest;
2022-08-03 11:14:08 +08:00
use App\Http\Resources\GoodsResource;
2024-08-12 19:36:42 +08:00
use App\Models\GoodsType;
2022-08-01 17:06:43 +08:00
use App\Models\Log as LogModel;
2024-08-12 19:36:42 +08:00
use App\Services\Good\GoodService;
2022-08-09 10:34:36 +08:00
use App\Utils\DateTimeUtils;
2022-07-28 13:46:08 +08:00
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
2024-08-12 19:36:42 +08:00
use Illuminate\Support\Facades\Log;
2022-07-28 13:46:08 +08:00
use Illuminate\Support\Facades\Validator;
use App\Models\Goods;
2022-08-03 16:41:15 +08:00
use App\Http\Requests\GoodsRequest;
use App\Models\DailyStockRecord;
2022-07-28 13:46:08 +08:00
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-08-03 11:14:08 +08:00
$goods = Goods::query()->get(['id', 'title', 'img_url', 'type_id', 'brand_id', 'goods_code']);
2022-07-28 13:46:08 +08:00
2022-08-03 11:14:08 +08:00
return GoodsResource::collection($goods);
2022-07-28 13:46:08 +08:00
}
public function store(Request $request)
{
2022-08-03 16:41:15 +08:00
$goodsRules = (new GoodsRequest())->rules();
$skuRules = (new GoodsSkuRequest())->arrayRules('skus.*.');
$validator = Validator::make($request->all(), array_merge($goodsRules, ['skus' => ['required', 'array']], $skuRules));
2022-07-28 13:46:08 +08:00
if ($validator->fails()) {
$this->setValidatorFailResponse($validator->getMessageBag()->getMessages());
return response($this->res, $this->res['httpCode']);
2022-07-28 13:46:08 +08:00
}
2024-08-12 19:36:42 +08:00
2022-07-28 13:46:08 +08:00
DB::beginTransaction();
try {
2024-08-12 19:36:42 +08:00
$goodService = new GoodService();
$goods = $goodService->saveDefaultGoodsByGoodType($request->type_id);
2022-07-28 13:46:08 +08:00
$goodsSkus = [];
2024-08-14 17:02:31 +08:00
2022-07-28 13:46:08 +08:00
foreach ($request->skus as $item) {
$item['goods_id'] = $goods->id;
2024-08-12 19:36:42 +08:00
$item['stock'] = $item['num'] ?? 0;
$item['reference_price'] = $item['cost'] * 1.5;
2024-08-12 19:36:42 +08:00
$item['sku_code'] = !empty($item['sku_code']) ? $item['sku_code'] : $goodService->getRandomCode();
$item['external_sku_id'] = $goods->goods_code . '_' .$item['sku_code'];
2024-03-18 14:12:57 +08:00
$item['name'] = $goods->title . $item['title'];
2022-07-28 13:46:08 +08:00
$goodsSkus[] = $item;
}
2024-08-12 19:36:42 +08:00
$collection = $goods->skus()->createMany($goodsSkus)->toArray();
2023-04-17 18:56:59 +08:00
$this->setAfterUpdateForLog($collection);
2022-08-01 17:06:43 +08:00
$this->addLog(0, 'add');
$newRecords = [];
foreach ($collection as $sku) {
$newRecords[] = [
'sku_id' => $sku['id'],
2022-08-09 10:34:36 +08:00
'day' => DateTimeUtils::getToday(),
];
}
$record = new DailyStockRecord();
$record->batchInsert($newRecords);
2022-08-03 16:41:15 +08:00
DB::commit();
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']);
}
2024-08-12 19:36:42 +08:00
public function download()
{
2022-08-09 10:34:36 +08:00
$file = resource_path('templates/goods_skus_import.xlsx');
$headers = [
'Content-Type: application/xlsx',
];
return response()->download($file, 'goods_skus_import.xlsx', $headers);
}
2022-07-28 13:46:08 +08:00
}