ActiveGoods.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <?php
  2. namespace app\common\model\sharp;
  3. use app\common\library\helper;
  4. use app\common\model\BaseModel;
  5. use app\common\model\sharp\Goods as GoodsModel;
  6. /**
  7. * 整点秒杀-活动会场与商品关联模型
  8. * Class ActiveGoods
  9. * @package app\common\model\sharp
  10. */
  11. class ActiveGoods extends BaseModel
  12. {
  13. protected $name = 'sharp_active_goods';
  14. /**
  15. * 关联活动会场表
  16. * @return \think\model\relation\BelongsTo
  17. */
  18. public function active()
  19. {
  20. return $this->belongsTo('Active', 'active_id');
  21. }
  22. /**
  23. * 关联活动会场场次表
  24. * @return \think\model\relation\BelongsTo
  25. */
  26. public function activeTime()
  27. {
  28. return $this->belongsTo('ActiveTime', 'active_time_id');
  29. }
  30. /**
  31. * 根据活动场次ID获取商品列表
  32. * @param int $activeTimeId
  33. * @param array $goodsParam
  34. * @return false|\PDOStatement|string|\think\Collection
  35. */
  36. public static function getGoodsListByActiveTimeId($activeTimeId, $goodsParam = [])
  37. {
  38. // 商品关联列表
  39. $model = new static;
  40. $activeGoodsList = $model->getSharpGoodsByActiveTimeId($activeTimeId);
  41. // 将列表的索引值设置为商品ID
  42. $activeGoodsList = helper::arrayColumn2Key($activeGoodsList, 'sharp_goods_id');
  43. // 获取商品列表
  44. $sharpGoodsList = $model->getGoodsListByIds(array_keys($activeGoodsList), $goodsParam);
  45. // 整理活动商品信息
  46. foreach ($sharpGoodsList as &$item) {
  47. // 活动商品的销量
  48. $item['sales_actual'] = $activeGoodsList[$item['sharp_goods_id']]['sales_actual'];
  49. // 商品销售进度
  50. $item['progress'] = $model->getProgress($item['sales_actual'], $item['seckill_stock']);
  51. }
  52. /* @var $sharpGoodsList \think\model\Collection */
  53. return $sharpGoodsList->hidden(['sku', 'goods']);
  54. }
  55. /**
  56. * 计算商品销售进度
  57. * @param $value1
  58. * @param $value2
  59. * @return mixed
  60. */
  61. protected function getProgress($value1, $value2)
  62. {
  63. if ($value2 <= 0) return 100;
  64. $progress = helper::bcdiv($value1, $value2);
  65. return min(100, (int)helper::bcmul($progress, 100, 0));
  66. }
  67. /**
  68. * 获取秒杀商品模型
  69. * @return Goods
  70. */
  71. protected function getGoodsModel()
  72. {
  73. return new GoodsModel;
  74. }
  75. /**
  76. * 根据活动场次ID获取商品集
  77. * @param $activeTimeId
  78. * @return false|\PDOStatement|string|\think\Collection
  79. * @throws \think\db\exception\DataNotFoundException
  80. * @throws \think\db\exception\ModelNotFoundException
  81. * @throws \think\exception\DbException
  82. */
  83. private function getSharpGoodsByActiveTimeId($activeTimeId)
  84. {
  85. return $this->where('active_time_id', '=', $activeTimeId)->select();
  86. }
  87. /**
  88. * 根据商品ID集获取商品列表
  89. * @param array $sharpGoodsIds
  90. * @param array $param
  91. * @return false|\PDOStatement|string|\think\Collection
  92. * @throws \think\db\exception\DataNotFoundException
  93. * @throws \think\db\exception\ModelNotFoundException
  94. * @throws \think\exception\DbException
  95. */
  96. private function getGoodsListByIds($sharpGoodsIds, $param = [])
  97. {
  98. return $this->getGoodsModel()->getListByIds($sharpGoodsIds, $param);
  99. }
  100. }