ActiveGoods.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. namespace app\api\model\sharp;
  3. use app\common\library\helper;
  4. use app\common\model\sharp\ActiveGoods as ActiveGoodsModel;
  5. use app\api\model\Goods as GoodsModel;
  6. /**
  7. * 整点秒杀-活动会场与商品关联模型
  8. * Class ActiveGoods
  9. * @package app\api\model\sharp
  10. */
  11. class ActiveGoods extends ActiveGoodsModel
  12. {
  13. /**
  14. * 隐藏字段
  15. * @var array
  16. */
  17. protected $hidden = [
  18. 'wxapp_id',
  19. 'create_time',
  20. 'update_time',
  21. ];
  22. /**
  23. * 获取指定商品的活动详情
  24. * @param $activeTimeId
  25. * @param $sharpGoodsId
  26. * @return array|false|\PDOStatement|string|\think\Model
  27. */
  28. public static function getGoodsActive($activeTimeId, $sharpGoodsId)
  29. {
  30. return (new static)->with(['active', 'activeTime'])
  31. ->where('active_time_id', '=', $activeTimeId)
  32. ->where('sharp_goods_id', '=', $sharpGoodsId)
  33. ->find();
  34. }
  35. /**
  36. * 获取活动商品详情
  37. * @param $active
  38. * @param $sharpGoodsId
  39. * @param $isCheckStatus
  40. * @return GoodsModel|bool|\think\model\Collection
  41. * @throws \think\exception\DbException
  42. */
  43. public function getGoodsActiveDetail($active, $sharpGoodsId, $isCheckStatus = true)
  44. {
  45. // 获取商品详情
  46. $goods = $this->getGoodsDetail($sharpGoodsId);
  47. if (empty($goods)) return false;
  48. if ($isCheckStatus == true && ($goods['is_delete'] || !$goods['status'])) {
  49. $this->error = '很抱歉,秒杀商品不存在或已下架';
  50. return false;
  51. }
  52. // 活动商品的销量
  53. $goods['sales_actual'] = $active['sales_actual'];
  54. // 商品销售进度
  55. $goods['progress'] = $this->getProgress($active['sales_actual'], $goods['seckill_stock']);
  56. /* @var $goods \think\model\Collection */
  57. return $goods;
  58. }
  59. /**
  60. * 获取商品详情
  61. * @param $sharpGoodsId
  62. * @return GoodsModel|bool
  63. * @throws \think\exception\DbException
  64. */
  65. private function getGoodsDetail($sharpGoodsId)
  66. {
  67. // 获取秒杀商品详情
  68. $model = $this->getGoodsModel();
  69. $sharpGoods = $model::detail($sharpGoodsId, ['sku']);
  70. if (empty($sharpGoods)) {
  71. $this->error = '秒杀商品信息不存在';
  72. return false;
  73. }
  74. // 获取主商品详情
  75. $goods = GoodsModel::detail($sharpGoods['goods_id']);
  76. if (empty($goods)) return false;
  77. // 整理商品信息
  78. $goods['sharp_goods_id'] = $sharpGoods['sharp_goods_id'];
  79. $goods['deduct_stock_type'] = $sharpGoods['deduct_stock_type'];
  80. $goods['limit_num'] = $sharpGoods['limit_num'];
  81. $goods['seckill_stock'] = $sharpGoods['seckill_stock'];
  82. $goods['total_sales'] = $sharpGoods['total_sales'];
  83. $goods['status'] = $sharpGoods['status'];
  84. $goods['is_delete'] = $sharpGoods['is_delete'];
  85. // 商品sku信息
  86. $goods['sku'] = $this->getSharpSku($sharpGoods['sku'], $goods['sku']);
  87. /* @var \think\Collection $goods */
  88. return $goods->hidden(['category', 'sku']);
  89. }
  90. /**
  91. * 获取秒杀商品的sku信息
  92. * @param $sharpSku
  93. * @param $goodsSku
  94. * @return array
  95. */
  96. protected function getSharpSku($sharpSku, $goodsSku)
  97. {
  98. $sharpSku = helper::arrayColumn2Key($sharpSku, 'spec_sku_id');
  99. foreach ($goodsSku as &$item) {
  100. $sharpSkuItem = clone $sharpSku[$item['spec_sku_id']];
  101. $item['original_price'] = $item['goods_price'];
  102. $item['seckill_price'] = $sharpSkuItem['seckill_price'];
  103. $item['seckill_stock'] = $sharpSkuItem['seckill_stock'];
  104. }
  105. return $goodsSku;
  106. }
  107. }