|
|
<?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'; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'id', 'market_id', 'store_id', 'name', 'category_id', 'goods_category_id', 'goods_unit', 'price', 'original_price', 'inventory', 'restrict_num', 'start_num', 'spec', 'tags', 'remark', 'on_sale', 'is_infinite', 'cover_img' ]; /** * 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', 'goods_name', 'activity_type' ];
protected function boot(): void { parent::boot(); self::addGlobalScope('normal', function (Builder $builder) { $builder->where([$this->getTable().'.on_sale' => GoodsConstants::ON_SALE_YES]); }); }
public function getActivityTypeAttribute() { return 1; }
public function scopeOrderByDefault($query, $sort) { return $query->orderBy($this->getTable().'.sort', $sort)->orderBy($this->getTable().'.id', $sort); }
public function scopeOrderBySales($query, $sort) { return $query->orderBy($this->getTable().'.sales', $sort); }
public function scopeOrderByPrice($query, $sort) { return $query->orderBy($this->getTable().'.price', $sort); }
public function getCoverImgAttribute($value) { if(!empty($value)) { return $this->attachmentService->switchImgToAliOss($value, OssThumbnail::THUMBNAIL_600_Q90); }else{ return ''; } }
public function getMonthSalesAttribute() { $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class); return (integer)$ssdb->exec('get', SsdbKeys::GOODS_MONTH_SALES.date('Ym').'_1_'.$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 getGoodsNameAttribute() { return $this->attributes['name']; }
public function getNameAttribute($value) { return $value . ' ' . $this->attributes['goods_unit']; }
public function store() { return $this->belongsTo(Store::class, 'store_id', 'id'); }
public function carts() { return $this->morphMany(ShoppingCart::class, 'goods'); }
public function setTagsAttribute($value) { $this->attributes['tags'] = json_encode(json_decode($value, true)); }
public function setSpecAttribute($value) { $this->attributes['spec'] = json_encode(json_decode($value, true)); }
public function banner() { return $this->hasMany(GoodsBanner::class, 'goods_id','id'); }}
|