<?php
namespace app\common\model\sharp;
use app\common\library\helper;
use app\common\model\BaseModel;
use app\common\service\Goods as GoodsService;
class Goods extends BaseModel
{
protected $name = 'sharp_goods';
protected $alias = 'sharp_goods';
public function goods()
{
$module = self::getCalledModule() ?: 'common';
return $this->belongsTo("app\\{$module}\\model\\Goods");
}
public function sku()
{
return $this->hasMany('GoodsSku', 'sharp_goods_id')
->order(['seckill_price' => 'asc', 'goods_sku_id' => 'asc']);
}
public function getListByIds($goodsIds, $param = [])
{
$param = array_merge([
'status' => null,
'limit' => 15,
], $param);
!is_null($param['status']) && $this->where('status', '=', (int)$param['status']);
$list = $this->with(['sku'])
->where('sharp_goods_id', 'in', $goodsIds)
->where('is_delete', '=', 0)
->order(['sort' => 'asc'])
->paginate($param['limit'], false, [
'query' => \request()->request()
]);
return $this->setGoodsListData($list, true);
}
public static function detail($sharpGoodsId, $with = [])
{
$model = static::get($sharpGoodsId, $with);
return $model->setGoodsListData($model, false);
}
public function getSpecData($goods)
{
$specData = GoodsService::getSpecData($goods);
if ($goods['spec_type'] == 10) {
return $specData;
}
$skuData = helper::arrayColumn2Key($this['sku'], 'spec_sku_id');
foreach ($specData['spec_list'] as &$item) {
if (isset($skuData[$item['spec_sku_id']])) {
$item['form']['seckill_price'] = $skuData[$item['spec_sku_id']]['seckill_price'];
$item['form']['original_price'] = $item['form']['goods_price'];
$item['form']['seckill_stock'] = $skuData[$item['spec_sku_id']]['seckill_stock'];
}
}
return $specData;
}
protected function setGoodsListData($data, $isMultiple = true, callable $callback = null)
{
$data = GoodsService::setGoodsData($data, $isMultiple);
if (!$isMultiple) $dataSource = [&$data]; else $dataSource = &$data;
foreach ($dataSource as &$item) {
$item['goods_name'] = $item['goods']['goods_name'];
$item['goods_image'] = $item['goods']['goods_image'];
$item['goods_sku'] = $this->getDefaultSharpSku($item['sku'], $item['goods']['sku']);
is_callable($callback) && call_user_func($callback, $item);
}
return $data;
}
private function getDefaultSharpSku($sharpSku, $goodsSku)
{
$sharpGoodsSku = $sharpSku[0];
$goodsSkuItem = helper::getArrayItemByColumn($goodsSku, 'spec_sku_id', $sharpGoodsSku['spec_sku_id']);
$sharpGoodsSku['original_price'] = $goodsSkuItem['goods_price'];
$sharpGoodsSku['image_id'] = $goodsSkuItem['image_id'];
$sharpGoodsSku['goods_no'] = $goodsSkuItem['goods_no'];
$sharpGoodsSku['line_price'] = $goodsSkuItem['line_price'];
$sharpGoodsSku['goods_weight'] = $goodsSkuItem['goods_weight'];
return $sharpGoodsSku;
}
}