<?php
namespace app\api\model\sharing;
use app\common\model\sharing\Goods as GoodsModel;
use app\common\library\helper;
use app\common\exception\BaseException;
class Goods extends GoodsModel
{
protected $hidden = [
'spec_rel',
'delivery',
'sales_initial',
'sales_actual',
'is_delete',
'wxapp_id',
'create_time',
'update_time'
];
public function getContentAttr($value)
{
return htmlspecialchars_decode($value);
}
public function getList($param, $userInfo = false)
{
$data = parent::getList($param)->hidden(['category', 'content', 'image', 'sku']);
return $this->setGoodsListDataFromApi($data, true, ['userInfo' => $userInfo]);
}
public function getDetails($goodsId, $userInfo = false)
{
$model = new static;
$goods = $model->with([
'category',
'image' => ['file'],
'sku' => ['image'],
'spec_rel' => ['spec'],
'delivery' => ['rule'],
'commentData' => function ($query) {
$query->with('user')->where(['is_delete' => 0, 'status' => 1])->limit(2);
}
])->withCount(['commentData' => function ($query) {
$query->where(['is_delete' => 0, 'status' => 1]);
}])
->where('goods_id', '=', $goodsId)
->find();
if (!$goods || $goods['is_delete'] || $goods['goods_status']['value'] != 10) {
throw new BaseException(['msg' => '很抱歉,商品信息不存在或已下架']);
}
$goods = $model->setGoodsListDataFromApi($goods, false, ['userInfo' => $userInfo]);
$goods['goods_multi_spec'] = $goods['spec_type'] == 20 ? $model->getManySpecData($goods['spec_rel'], $goods['sku']) : null;
return $goods;
}
public function getListByIdsFromApi($goodsIds, $userInfo = false)
{
$data = parent::getListByIds($goodsIds, 10);
return $this->setGoodsListDataFromApi($data, true, ['userInfo' => $userInfo]);
}
private function setGoodsListDataFromApi(&$data, $isMultiple, $param)
{
return parent::setGoodsListData($data, $isMultiple, function ($goods) use ($param) {
$this->setGoodsGradeMoney($param['userInfo'], $goods);
});
}
private function setGoodsGradeMoney($user, &$goods)
{
$gradeStatus = (!empty($user) && $user['grade_id'] > 0 && !empty($user['grade']))
&& (!$user['grade']['is_delete'] && $user['grade']['status']);
if (!$gradeStatus || !$goods['is_enable_grade']) {
$goods['is_user_grade'] = false;
return;
}
if ($goods['is_alone_grade'] && isset($goods['alone_grade_equity'][$user['grade_id']])) {
$discountRatio = helper::bcdiv($goods['alone_grade_equity'][$user['grade_id']], 10);
} else {
$discountRatio = helper::bcdiv($user['grade']['equity']['discount'], 10);
}
if ($discountRatio > 0) {
$goods['is_user_grade'] = true;
foreach ($goods['sku'] as &$skuItem) {
$skuItem['goods_price'] = helper::number2(helper::bcmul($skuItem['goods_price'], $discountRatio), true);
$skuItem['sharing_price'] = helper::number2(helper::bcmul($skuItem['sharing_price'], $discountRatio), true);
}
}
}
}