|
|
|
@ -2,21 +2,28 @@ |
|
|
|
|
|
|
|
namespace App\Service\v3\Implementations; |
|
|
|
|
|
|
|
use App\Commons\Log; |
|
|
|
use App\Constants\v3\ActivityType; |
|
|
|
use App\Constants\v3\ErrorCode; |
|
|
|
use App\Constants\v3\LogLabel; |
|
|
|
use App\Constants\v3\SsdbKeys; |
|
|
|
use App\Exception\ErrorCodeException; |
|
|
|
use App\Service\v3\Interfaces\GoodsActivityServiceInterface; |
|
|
|
use App\TaskWorker\SSDBTask; |
|
|
|
use App\Constants\v3\Store; |
|
|
|
use App\Constants\v3\Goods; |
|
|
|
use App\Model\v3\GoodsActivity; |
|
|
|
use App\Model\v3\GoodsActivityBanner; |
|
|
|
use Hyperf\Redis\Redis; |
|
|
|
use Hyperf\Utils\ApplicationContext; |
|
|
|
use Hyperf\Di\Annotation\Inject; |
|
|
|
|
|
|
|
class GoodsActivityService implements GoodsActivityServiceInterface |
|
|
|
{ |
|
|
|
|
|
|
|
/** |
|
|
|
* @Inject |
|
|
|
* @var Log |
|
|
|
*/ |
|
|
|
protected $log; |
|
|
|
|
|
|
|
public function do($goodsId) |
|
|
|
{ |
|
|
|
|
|
|
|
@ -29,21 +36,29 @@ class GoodsActivityService implements GoodsActivityServiceInterface |
|
|
|
$inventoryKey = 'goods_inventory_sold_2_'.$goods->id; // 拼接activity_type和goods_id
|
|
|
|
|
|
|
|
if (empty($goods)) { |
|
|
|
$message = ErrorCode::getMessage(ErrorCode::GOODS_ACTIVITY_NOT_EXISTS); |
|
|
|
$this->log->event(LogLabel::ERROR_CODE_EXCEPTION_LOG_DATA, ['message' => $message, 'buy_num' => $num, 'user_id' => $userId, 'logData' => json_encode($goods)]); |
|
|
|
return ErrorCode::GOODS_ACTIVITY_NOT_EXISTS; |
|
|
|
} |
|
|
|
|
|
|
|
// 活动是否已经结束
|
|
|
|
if ($goods->expire_time < time()) { |
|
|
|
$message = ErrorCode::getMessage(ErrorCode::GOODS_ACTIVITY_EXPIRED); |
|
|
|
$this->log->event(LogLabel::ERROR_CODE_EXCEPTION_LOG_DATA, ['message' => $message, 'buy_num' => $num, 'user_id' => $userId, 'logData' => json_encode($goods)]); |
|
|
|
return ErrorCode::GOODS_ACTIVITY_EXPIRED; |
|
|
|
} |
|
|
|
|
|
|
|
// 商户歇业
|
|
|
|
if($goods->store->is_rest == 1){ |
|
|
|
$message = ErrorCode::getMessage(ErrorCode::STORE_REST); |
|
|
|
$this->log->event(LogLabel::ERROR_CODE_EXCEPTION_LOG_DATA, ['message' => $message, 'buy_num' => $num, 'user_id' => $userId, 'logData' => json_encode($goods)]); |
|
|
|
return ErrorCode::STORE_REST; |
|
|
|
} |
|
|
|
|
|
|
|
// 商品下架或已删除
|
|
|
|
if($goods->on_sale == 0 || !is_null($goods->deleted_at)){ |
|
|
|
$message = ErrorCode::getMessage(ErrorCode::GOODS_ACTIVITY_ON_SALE_NO); |
|
|
|
$this->log->event(LogLabel::ERROR_CODE_EXCEPTION_LOG_DATA, ['message' => $message, 'buy_num' => $num, 'user_id' => $userId, 'logData' => json_encode($goods)]); |
|
|
|
return ErrorCode::GOODS_ACTIVITY_ON_SALE_NO; |
|
|
|
} |
|
|
|
|
|
|
|
@ -52,11 +67,15 @@ class GoodsActivityService implements GoodsActivityServiceInterface |
|
|
|
$inventoryFrozen = (int)$redis->get($inventoryKey); |
|
|
|
// $inventoryFrozen = 0;
|
|
|
|
if($goods->is_infinite != 1 && $goods->inventory < ($num+$inventoryFrozen)){ |
|
|
|
$message = ErrorCode::getMessage(ErrorCode::GOODS_ACTIVITY_INVENTORY_ERROR); |
|
|
|
$this->log->event(LogLabel::ERROR_CODE_EXCEPTION_LOG_DATA, ['message' => $message, 'buy_num' => $num, 'inventoryKey' => $inventoryKey, 'inventoryFrozen' => $inventoryFrozen, 'user_id' => $userId, 'logData' => json_encode($goods)]); |
|
|
|
return ErrorCode::GOODS_ACTIVITY_INVENTORY_ERROR; |
|
|
|
} |
|
|
|
|
|
|
|
// 是否超过限购数量
|
|
|
|
if ($goods->restrict_num != 0 && $goods->restrict_num < $num) { |
|
|
|
$message = ErrorCode::getMessage(ErrorCode::GOODS_ACTIVITY_RESTRICT_LIMIT); |
|
|
|
$this->log->event(LogLabel::ERROR_CODE_EXCEPTION_LOG_DATA, ['message' => $message, 'buy_num' => $num, 'user_id' => $userId, 'logData' => json_encode($goods)]); |
|
|
|
return ErrorCode::GOODS_ACTIVITY_RESTRICT_LIMIT; |
|
|
|
} |
|
|
|
|
|
|
|
@ -64,6 +83,8 @@ class GoodsActivityService implements GoodsActivityServiceInterface |
|
|
|
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class); |
|
|
|
$hasBuy = $ssdb->exec('get', SsdbKeys::ACTIVITY_GOODS_BUY_RECORD.$userId.'_'.$goods->type.'_'.$goods->id); |
|
|
|
if ($hasBuy && $hasBuy >= $goods->time_limit_num) { |
|
|
|
$message = ErrorCode::getMessage(ErrorCode::GOODS_ACTIVITY_BUY); |
|
|
|
$this->log->event(LogLabel::ERROR_CODE_EXCEPTION_LOG_DATA, ['message' => $message, 'has_buy' => $hasBuy, 'ssdb_key' => SsdbKeys::ACTIVITY_GOODS_BUY_RECORD.$userId.'_'.$goods->type.'_'.$goods->id, 'buy_num' => $num, 'user_id' => $userId, 'logData' => json_encode($goods)]); |
|
|
|
return ErrorCode::GOODS_ACTIVITY_BUY; |
|
|
|
} |
|
|
|
|
|
|
|
|