// +---------------------------------------------------------------------- declare (strict_types = 1); namespace app\api\controller; use app\api\model\Cart as CartModel; use app\api\model\Goods as GoodsModel; use app\api\service\User as UserService; use app\common\enum\goods\GoodsType; use app\common\library\helper; use app\common\model\BrowseRecords; use app\store\model\qc\QcMjSendActivity; use app\common\service\delivery\Express as ExpressService; use app\api\model\Category; use app\api\model\GoodsCategoryRel; use app\api\model\member\MemberGoods as MemberGoodsModel; use app\api\model\groupbuylb\GroupBuyLbActivity; use app\common\model\ms\MsActivity as MsActivityModel; use app\api\model\Order as OrderModel; use app\api\model\za\ZaActivity as ZaActivityModel; use app\common\model\store\Setting as SettingModel; /** * 商品控制器 * Class Goods * @package app\api\controller */ class Goods extends Controller { /** * 商品列表` * * @return array * @throws \think\db\exception\DbException */ public function list() { // 获取列表数据 $model = new GoodsModel; $enableExchange = boolval($this->request->param('enable_exchange', 0)); $list = $model->getList($this->request->param(),15,false, $enableExchange); $goodsType = $this->request->param('goods_type', null); foreach ($list as $item){ if ($goodsType == GoodsType::EXCHANGE){ $item['za'] = null; $item['miaosha'] = null; continue; } //买一赠一 $za = (new ZaActivityModel())->getZaGood($item['goods_id']); if(isset($za)){ $item['za'] = $za; }else{ $item['za'] = null; } $miaosha = (new MsActivityModel)->getMsPrice($item['goods_id'],$item['goods_price_min']); $item['miaosha'] = $miaosha; } return $this->renderSuccess(compact('list')); } public function ricelist(){ // 获取列表数据 $model = new GoodsModel; $category = Category::with(['goods'])->where("status",1)->where("type",2)->select(); $goods_id_array = []; foreach($category as $row){ $goods = $row['goods']; foreach($goods as $row){ $goods_id_array[] = $row['goods_id']; } } $param = array_merge($this->request->param(),['goods_id_arr'=>$goods_id_array]); $list = $model->getRiceList($param); // return $category; return $this->renderSuccess(compact('list')); } /** * 获取商品详情 * @param int $id * @return array */ public function detail(int $id, int $addressId = 0, int $staffUserId = 0) { $user = UserService::getCurrentLoginUser(); // 商品详情 $model = new GoodsModel; $goodsInfo = $model->getDetails($id, $user, $addressId, $staffUserId); $goodsInfo->inc('view_num', 1)->update(); if ($user) { $browseRecord = BrowseRecords::whereDay('create_time')->where(['user_id' => $user->user_id, 'source_type' => 1, 'source_id' => $id])->find(); if (!$browseRecord) { BrowseRecords::create([ 'user_id' => $user->user_id, 'source_type' => 1, 'source_id' => $id ]); $goodsInfo->inc('view_distinct_num', 1)->update(); } else { $browseRecord->update_time = time(); $browseRecord->save(); } } $member = MemberGoodsModel::where('goods_id',$id)->where("status",0)->find(); $goodsInfoArray = $goodsInfo->toArray(); $goodsInfoArray['member_price'] = (new MemberGoodsModel)->getGoodsMemberPrice($id,$goodsInfoArray['goods_price_min']); $groupbuylb = new GroupBuyLbActivity; $group_buy = $groupbuylb->getGroupBuyLbPrice($id); $goodsInfoArray['group_buy'] = $group_buy; //秒杀 $miaosha = (new MsActivityModel)->getMsPrice($id,$goodsInfoArray['goods_price_min']); if(isset($miaosha)&&$miaosha['type']==4){ $goodsInfoArray['coupon_list'] = [];//秒杀中不返回优惠券 } if(isset($miaosha)){ $user_id = $user->user_id??0; if($user_id==0){ $have_buy = 0; }else{ $have_buy =(new OrderModel())->miaoshaHaveBuyCnt($miaosha['ms_id'],$user_id); } //还能买多少件 $miaosha['can_buy_mount'] = $miaosha['limit_mount'] - $have_buy; } //买一赠一 $za = (new ZaActivityModel())->getZaGood($id); if(isset($za)){ $goodsInfoArray['za'] = $za; } $goodsInfoArray['miaosha'] = $miaosha; return $this->renderSuccess($goodsInfoArray); } /** * Notes:计算当前配送模板的运费 * Author: zhangs * DateTime: 2021/9/24 20:28 * @return array */ public function calcDeliveryAmount() { $params = $this->request->param(); $model = new GoodsModel(); $goodsList = $model->getOrderGoodsListForDelivery( (int)$params['goodsId'], (string)$params['goodsSkuId'], (int)$params['goodsNum'] ); // 设置默认数据:配送费用 helper::setDataAttribute($goodsList, [ 'expressPrice' => 0, ], true); // 当前用户收货城市id $user = UserService::getCurrentLoginUser(); $cityId = $user['address_default'] ? (int)$user['address_default']['city_id'] : 0; // 初始化配送服务类 $ExpressService = new ExpressService($cityId, $goodsList); $isIntraRegion = true; // 验证商品是否在限购配送范围 $isDeliveryLimit = $ExpressService->isDeliveryLimit(); if ($isDeliveryLimit == false) { $isIntraRegion = false; } else { // 验证商品是否在配送范围 $isIntraRegion = $ExpressService->isIntraRegion(); if ($cityId > 0 && $isIntraRegion == false) { $isIntraRegion = false; } } // 验证商品是否在配送范围 // $isIntraRegion = $ExpressService->isIntraRegion(); // if ($cityId > 0 && $isIntraRegion == false) { // $notInRuleGoodsName = $ExpressService->getNotInRuleGoodsName(); // return $this->renderError("很抱歉,您的收货地址不在商品 [".limit_str((string)$notInRuleGoodsName)."] 的配送范围内"); // } // 订单总运费金额 $expressPrice = $ExpressService->getDeliveryFee(); return $this->renderSuccess(compact('isIntraRegion', 'expressPrice')); } /** * 全场满件赠活动数据 * * @param int $act_id * @return array|\think\response\Json */ public function qcMjSendActData(int $act_id) { $now = date('Y-m-d H:i:s'); $filter[] = ['start_time', '<', $now]; $filter[] = ['end_time', '>', $now]; $filter[] = ['audit_status', '=', 1]; $filter[] = ['status', '=', 1]; $filter[] = ['id', '=', $act_id]; $activity = QcMjSendActivity::detail($filter,['image','goodsExcept','giftGoods']); if(empty($activity)){ return $this->renderError("活动不存在"); } $activity = $activity->toArray(); $activity['activity_status'] = $activity['activity_status']['code']; $activity['image_url'] = $activity['image']['preview_url'] ?? ''; $cartModel = new CartModel(); $activity['cart_total'] = $cartModel->getCartTotal(); $cartGoods = $cartModel->getCartGoodsIdNums(); if (!empty($activity['goodsExcept'])) { $num = 0; $mj_props = array_values(array_sort($activity['mj_props'], 'value')); foreach ($activity['goodsExcept'] as $key=>&$item) { if($item['residue_stock']<=0){ unset($activity['goodsExcept'][$key]); }else{ $num += $item['residue_stock']; } $item['cart_num'] = 0; if (isset($cartGoods[$item['goods_id']])) { $item['cart_num'] = $cartGoods[$item['goods_id']]; } } if($num>0 && $mj_props[0]['value']>$num){//剩余数量小于最小的赠送 $activity['goodsExcept'] = []; } } if (!empty($activity['giftGoods'])) { foreach ($activity['giftGoods'] as &$item) { $item['cart_num'] = 0; if (isset($cartGoods[$item['goods_id']])) { $item['cart_num'] = $cartGoods[$item['goods_id']]; } } } return $this->renderSuccess($activity); } }