123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- <?php
- namespace app\api\controller;
- use app\common\controller\Api;
- use app\common\Service\DiscountService;
- use app\api\validate\Discount as DiscountValidate;
- use app\common\exception\BusinessException;
- use app\common\Enum\ErrorCodeEnum;
- /**
- * 折扣活动接口
- */
- class Discount extends Api
- {
- protected $noNeedLogin = ['lists', 'goods','getCurrentActivity'];
- protected $noNeedRight = '*';
- /**
- * 获取当前折扣商品列表
- */
- public function lists()
- {
- $params = $this->request->param();
-
- // 参数验证
- $validate = new DiscountValidate();
- if (!$validate->scene('lists')->check($params)) {
- $this->error($validate->getError());
- }
-
- $page = $params['page'] ?? 1;
- $pageSize = $params['pageSize'] ?? 10;
- $arrGoodsIds = $params['goods_ids'] ?? [];
-
- // 获取折扣商品
- $discountGoods = DiscountService::getCurrentDiscountGoods($arrGoodsIds);
-
- // 分页处理
- $total = count($discountGoods);
- $offset = ($page - 1) * $pageSize;
- $goods = array_slice($discountGoods, $offset, $pageSize);
-
- // 处理数据,添加CDN地址和时间格式化
- foreach ($goods as &$item) {
- // 处理图片地址
- $item['image'] = cdnurl($item['image'], true);
-
- // 添加活动剩余时间
- $item['remaining_time'] = DiscountService::formatRemainingTime($item['end_time']);
-
- // 处理折扣信息
- foreach ($item['discount_info'] as &$discount) {
- if (!empty($discount['sku_image'])) {
- $discount['sku_image'] = cdnurl($discount['sku_image'], true);
- }
- }
- }
-
- $this->success('获取成功', [
- 'list' => $goods,
- 'total' => $total,
- 'page' => $page,
- 'pageSize' => $pageSize,
- 'totalPages' => ceil($total / $pageSize)
- ]);
- }
- // 增加一个 当前时间段的折扣活动
- public function getCurrentActivity()
- {
- $activity = DiscountService::getCurrentActivity();
- // 添加活动剩余时间
- if(!empty($activity)){
- $activity['remaining_time'] = DiscountService::formatRemainingTime($activity['end_time']);
- }
- $this->success('获取成功', $activity);
- }
-
- /**
- * 获取指定商品的折扣信息
- */
- public function goods()
- {
- $params = $this->request->param();
-
- // 参数验证
- $validate = new DiscountValidate();
- if (!$validate->scene('goods')->check($params)) {
- $this->error($validate->getError());
- }
-
- $goodsId = $this->request->param('goods_id', 0, 'intval');
- $skuId = $this->request->param('sku_id', 0, 'intval');
-
- try {
- // 获取商品折扣信息
- $discountInfo = DiscountService::getGoodsDiscountInfo($goodsId, $skuId);
-
- if (empty($discountInfo)) {
- throw new BusinessException('该商品当前没有参与折扣活动', ErrorCodeEnum::GOODS_NO_DISCOUNT);
- }
-
- // 添加活动剩余时间
- $discountInfo['remaining_time'] = DiscountService::formatRemainingTime($discountInfo['end_time']);
-
- $this->success('获取成功', $discountInfo);
-
- } catch (\Exception $e) {
- $this->error('查询失败:' . $e->getMessage());
- }
- }
-
- /**
- * 批量检查商品折扣信息
- */
- public function batch()
- {
- $params = $this->request->param();
-
- // 参数验证
- $validate = new DiscountValidate();
- if (!$validate->scene('batch')->check($params)) {
- $this->error($validate->getError());
- }
-
- $goodsIds = $params['goods_ids'] ?? [];
-
- try {
- // 批量获取折扣信息
- $discountData = DiscountService::getBatchGoodsDiscountInfo($goodsIds);
-
- $this->success('获取成功', $discountData);
-
- } catch (\Exception $e) {
- $this->error('查询失败:' . $e->getMessage());
- }
- }
- }
|