You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
210 lines
7.0 KiB
210 lines
7.0 KiB
<?php
|
|
|
|
namespace App\Service\v3\Implementations;
|
|
|
|
use App\Commons\Log;
|
|
use App\Constants\v3\ErrorCode;
|
|
use App\Constants\v3\LogLabel;
|
|
use App\Exception\ErrorCodeException;
|
|
use App\Service\v3\Interfaces\GoodsInventoryServiceInterface;
|
|
use App\Service\v3\Interfaces\GoodsServiceInterface;
|
|
use App\Model\v3\Goods;
|
|
use App\Model\v3\GoodsBanner;
|
|
use Hyperf\Redis\Redis;
|
|
use Hyperf\Utils\ApplicationContext;
|
|
use Hyperf\Di\Annotation\Inject;
|
|
|
|
class GoodsService implements GoodsServiceInterface
|
|
{
|
|
/**
|
|
* @Inject
|
|
* @var Log
|
|
*/
|
|
protected $log;
|
|
/**
|
|
* @Inject
|
|
* @var GoodsInventoryServiceInterface
|
|
*/
|
|
protected $goodsInventoryService;
|
|
|
|
public function do($goodsId)
|
|
{
|
|
|
|
}
|
|
|
|
public function check(Goods $goods,$num = 1)
|
|
{
|
|
|
|
if (empty($goods)) {
|
|
return ErrorCode::GOODS_NOT_EXISTS;
|
|
}
|
|
|
|
// 商户歇业
|
|
if($goods->store->is_rest == 1){
|
|
return ErrorCode::STORE_REST;
|
|
}
|
|
// 商品下架或已删除
|
|
if($goods->on_sale == 0 || !is_null($goods->deleted_at)){
|
|
return ErrorCode::GOODS_ON_SALE_NO;
|
|
}
|
|
// 商品库存不足
|
|
// 获取冻结的库存
|
|
// $inventoryFrozen = $this->goodsInventoryService->getSold(1, $goods->id);
|
|
$inventoryFrozen = 0;
|
|
if($goods->is_infinite != 1 && $goods->inventory < ($num+$inventoryFrozen)){
|
|
return ErrorCode::GOODS_INVENTORY_ERROR;
|
|
}
|
|
|
|
// 是否超过限购数量
|
|
if ($goods->restrict_num != 0 && $goods->restrict_num < $num) {
|
|
return ErrorCode::GOODS_RESTRICT_LIMIT;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public function undo()
|
|
{
|
|
// TODO: Implement undo() method.
|
|
}
|
|
|
|
public function getBanner($goodsId)
|
|
{
|
|
$banner = GoodsBanner::query()->where('goods_id',$goodsId)->orderByDesc('type')->get();
|
|
return $banner;
|
|
}
|
|
|
|
public function detail($goodsId)
|
|
{
|
|
$res = Goods::query()->with(['store' => function($query){
|
|
$query->withoutGlobalScope('normal');
|
|
}])->where('id',$goodsId)->first();
|
|
return $res;
|
|
}
|
|
|
|
public function getByType($storeId,$typeId)
|
|
{
|
|
return Goods::query()->withoutGlobalScope('normal')->where(['store_id' => $storeId,'category_id' => $typeId])->orderByDesc('on_sale')->orderByDesc('created_at')->get()->toArray();
|
|
}
|
|
|
|
public function create($params)
|
|
{
|
|
$data =
|
|
[
|
|
'market_id' => $params['market_id'],
|
|
'store_id' => $params['store_id'],
|
|
'name' => $params['name'],
|
|
'category_id' => $params['category_id'],
|
|
'goods_category_id' => $params['goods_category_id'],
|
|
'goods_unit' => $params['goods_unit'],
|
|
'price' => $params['price'],
|
|
'original_price' => $params['original_price'],
|
|
'inventory' => $params['inventory'],
|
|
'restrict_num' => $params['restrict_num'],
|
|
'start_num' => $params['start_num'],
|
|
'spec' => $params['spec'],
|
|
'tags' => $params['tags'],
|
|
'remark' => $params['remark'],
|
|
'on_sale' => $params['on_sale'],
|
|
'is_infinite' => $params['is_infinite']
|
|
];
|
|
$this->log->event(LogLabel::CREATE_GOODS_LOG, ['logData' => json_encode(
|
|
[
|
|
'id' => $params['id'],
|
|
'market_id' => $params['market_id'],
|
|
'store_id' => $params['store_id'],
|
|
'name' => $params['name'],
|
|
'category_id' => $params['category_id'],
|
|
'goods_category_id' => $params['goods_category_id'],
|
|
'goods_unit' => $params['goods_unit'],
|
|
'price' => $params['price'],
|
|
'original_price' => $params['original_price'],
|
|
'inventory' => $params['inventory'],
|
|
'restrict_num' => $params['restrict_num'],
|
|
'start_num' => $params['start_num'],
|
|
'spec' => $params['spec'],
|
|
'tags' => $params['tags'],
|
|
'remark' => $params['remark'],
|
|
'on_sale' => $params['on_sale'],
|
|
'is_infinite' => $params['is_infinite'],
|
|
'user_id' => $params['user_id']
|
|
]
|
|
)]);
|
|
return Goods::create($data);
|
|
}
|
|
|
|
public function update($params)
|
|
{
|
|
$goods = Goods::query()->withoutGlobalScope('normal')
|
|
->where(
|
|
[
|
|
'id' => $params['id'],
|
|
'market_id' => $params['market_id'],
|
|
'store_id' => $params['store_id']
|
|
]
|
|
)
|
|
->update(
|
|
[
|
|
'name' => $params['name'],
|
|
'category_id' => $params['category_id'],
|
|
'goods_category_id' => $params['goods_category_id'],
|
|
'goods_unit' => $params['goods_unit'],
|
|
'price' => $params['price'],
|
|
'original_price' => $params['original_price'],
|
|
'inventory' => $params['inventory'],
|
|
'restrict_num' => $params['restrict_num'],
|
|
'start_num' => $params['start_num'],
|
|
'spec' => $params['spec'],
|
|
'tags' => $params['tags'],
|
|
'remark' => $params['remark'],
|
|
'on_sale' => $params['on_sale'],
|
|
'is_infinite' => $params['is_infinite']
|
|
]);
|
|
$this->log->event(LogLabel::UPDATE_GOODS_LOG, ['logData' => json_encode(
|
|
[
|
|
'id' => $params['id'],
|
|
'market_id' => $params['market_id'],
|
|
'store_id' => $params['store_id'],
|
|
'name' => $params['name'],
|
|
'category_id' => $params['category_id'],
|
|
'goods_category_id' => $params['goods_category_id'],
|
|
'goods_unit' => $params['goods_unit'],
|
|
'price' => $params['price'],
|
|
'original_price' => $params['original_price'],
|
|
'inventory' => $params['inventory'],
|
|
'restrict_num' => $params['restrict_num'],
|
|
'start_num' => $params['start_num'],
|
|
'spec' => $params['spec'],
|
|
'tags' => $params['tags'],
|
|
'remark' => $params['remark'],
|
|
'on_sale' => $params['on_sale'],
|
|
'is_infinite' => $params['is_infinite'],
|
|
'user_id' => $params['user_id']
|
|
]
|
|
)]);
|
|
return $goods;
|
|
}
|
|
|
|
public function info($goodsId)
|
|
{
|
|
$res = Goods::query()->withoutGlobalScope('normal')->where('id',$goodsId)->with('banner')->first();
|
|
return $res;
|
|
}
|
|
|
|
public function getTags()
|
|
{
|
|
return [
|
|
'新品',
|
|
'热销',
|
|
'新鲜'
|
|
];
|
|
}
|
|
|
|
public function updateOnSale($goodsId)
|
|
{
|
|
$goods = Goods::query()->withoutGlobalScope('normal')->find($goodsId);
|
|
$onSale = $goods->on_sale + 1;
|
|
$goods->on_sale = $onSale % 2;
|
|
return $goods->save();
|
|
}
|
|
}
|