This repository has been archived on 2024-07-11. You can view files and clone it, but cannot push or open issues or pull requests.
yoshop/source/application/api/model/sharp/ActiveGoods.php
2020-04-25 22:20:29 +08:00

115 lines
3.7 KiB
PHP

<?php
namespace app\api\model\sharp;
use app\common\library\helper;
use app\common\model\sharp\ActiveGoods as ActiveGoodsModel;
use app\api\model\Goods as GoodsModel;
/**
* 整点秒杀-活动会场与商品关联模型
* Class ActiveGoods
* @package app\api\model\sharp
*/
class ActiveGoods extends ActiveGoodsModel
{
/**
* 隐藏字段
* @var array
*/
protected $hidden = [
'wxapp_id',
'create_time',
'update_time',
];
/**
* 获取指定商品的活动详情
* @param $activeTimeId
* @param $sharpGoodsId
* @return array|false|\PDOStatement|string|\think\Model
*/
public static function getGoodsActive($activeTimeId, $sharpGoodsId)
{
return (new static)->with(['active', 'activeTime'])
->where('active_time_id', '=', $activeTimeId)
->where('sharp_goods_id', '=', $sharpGoodsId)
->find();
}
/**
* 获取活动商品详情
* @param $active
* @param $sharpGoodsId
* @param $isCheckStatus
* @return GoodsModel|bool|\think\model\Collection
* @throws \think\exception\DbException
*/
public function getGoodsActiveDetail($active, $sharpGoodsId, $isCheckStatus = true)
{
// 获取商品详情
$goods = $this->getGoodsDetail($sharpGoodsId);
if (empty($goods)) return false;
if ($isCheckStatus == true && ($goods['is_delete'] || !$goods['status'])) {
$this->error = '很抱歉,秒杀商品不存在或已下架';
return false;
}
// 活动商品的销量
$goods['sales_actual'] = $active['sales_actual'];
// 商品销售进度
$goods['progress'] = $this->getProgress($active['sales_actual'], $goods['seckill_stock']);
/* @var $goods \think\model\Collection */
return $goods;
}
/**
* 获取商品详情
* @param $sharpGoodsId
* @return GoodsModel|bool
* @throws \think\exception\DbException
*/
private function getGoodsDetail($sharpGoodsId)
{
// 获取秒杀商品详情
$model = $this->getGoodsModel();
$sharpGoods = $model::detail($sharpGoodsId, ['sku']);
if (empty($sharpGoods)) {
$this->error = '秒杀商品信息不存在';
return false;
}
// 获取主商品详情
$goods = GoodsModel::detail($sharpGoods['goods_id']);
if (empty($goods)) return false;
// 整理商品信息
$goods['sharp_goods_id'] = $sharpGoods['sharp_goods_id'];
$goods['deduct_stock_type'] = $sharpGoods['deduct_stock_type'];
$goods['limit_num'] = $sharpGoods['limit_num'];
$goods['seckill_stock'] = $sharpGoods['seckill_stock'];
$goods['total_sales'] = $sharpGoods['total_sales'];
$goods['status'] = $sharpGoods['status'];
$goods['is_delete'] = $sharpGoods['is_delete'];
// 商品sku信息
$goods['sku'] = $this->getSharpSku($sharpGoods['sku'], $goods['sku']);
/* @var \think\Collection $goods */
return $goods->hidden(['category', 'sku']);
}
/**
* 获取秒杀商品的sku信息
* @param $sharpSku
* @param $goodsSku
* @return array
*/
protected function getSharpSku($sharpSku, $goodsSku)
{
$sharpSku = helper::arrayColumn2Key($sharpSku, 'spec_sku_id');
foreach ($goodsSku as &$item) {
$sharpSkuItem = clone $sharpSku[$item['spec_sku_id']];
$item['original_price'] = $item['goods_price'];
$item['seckill_price'] = $sharpSkuItem['seckill_price'];
$item['seckill_stock'] = $sharpSkuItem['seckill_stock'];
}
return $goodsSku;
}
}