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.
 
 

138 lines
3.2 KiB

<?php
declare (strict_types=1);
namespace App\Model\v3;
use App\Constants\v3\OssThumbnail;
use App\Constants\v3\SsdbKeys;
use App\Model\Model;
use App\Service\v3\Interfaces\AttachmentServiceInterface;
use App\Service\v3\Interfaces\ShopCartServiceInterface;
use App\TaskWorker\SSDBTask;
use Hyperf\Database\Model\Builder;
use Hyperf\Database\Model\SoftDeletes;
use Hyperf\Utils\ApplicationContext;
use Hyperf\Di\Annotation\Inject;
use App\Constants\v3\Goods as GoodsConstants;
use Hyperf\Utils\Collection;
/**
*/
class Goods extends Model
{
use SoftDeletes;
/**
* @Inject
* @var ShopCartServiceInterface
*/
protected $shopCartService;
/**
* @Inject
* @var AttachmentServiceInterface
*/
protected $attachmentService;
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'lanzu_goods_new';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'details_imgs' => 'array',
'spec' => 'array',
'tags' => 'array',
];
protected $appends = [
'month_sales',
'cart_num',
'is_effective',
'noneffective_note',
'details_imgs_url',
];
protected function boot(): void
{
parent::boot();
self::addGlobalScope('normal', function (Builder $builder) {
$builder->where(['on_sale' => GoodsConstants::ON_SALE_YES]);
});
}
public function scopeOrderByDefault($query, $sort)
{
return $query->orderBy('sort', $sort)->orderBy('id', $sort);
}
public function scopeOrderBySales($query, $sort)
{
return $query->orderBy('sales', $sort);
}
public function scopeOrderByPrice($query, $sort)
{
return $query->orderBy('price', $sort);
}
public function getCoverImgAttribute($value)
{
return $this->attachmentService->switchImgToAliOss($value, OssThumbnail::THUMBNAIL_600_Q90);
}
public function getMonthSalesAttribute()
{
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
return (integer)$ssdb->exec('get', SsdbKeys::GOODS_MONTH_SALES.date('Ym').'_'.$this->id);
}
public function getCartNumAttribute()
{
return 0;
// $userId = $this->request->user->id ?? 0;
// return $userId ? (integer)$this->shopCartService->check($userId, $this->id,1) : 0;
}
public function getIsEffectiveAttribute()
{
return 1;
}
public function getNoneffectiveNoteAttribute()
{
return '';
}
public function getDetailsImgsUrlAttribute()
{
$details_imgs = $this->details_imgs;
return collect($details_imgs)->map(function($item) {
return $this->attachmentService->switchImgToAliOss($item);
});
}
public function store()
{
return $this->belongsTo(Store::class, 'store_id', 'id');
}
public function carts()
{
return $this->morphMany(ShoppingCart::class, 'goods');
}
}