',$now]; $filter[] = ['ac.audit_status','=',1]; $filter[] = ['ac.status','=',1]; $filter[] = ['g.goods_id','=',$goodsId]; // 执行查询 $list = self::field('ac.*') ->with(['goodsExcept','giftGoods']) ->alias('ac') ->leftJoin('mj_send_goods g','g.mj_send_activity_id = ac.id') ->where($filter) ->find(); // dd(self::getLastSql()); // dd($list['giftGoods']); if (!$list)return null; $list = $list->toArray(); //判断商品还能不能使用活动 if ($list['goodsExcept']['goods_id']==$goodsId){ if($list['goodsExcept']['residue_stock']<=0){ return null; }else{ $mj_props = array_values(array_sort($list['mj_props'], 'value')); if($mj_props[0]['value']>$list['goodsExcept']['residue_stock']){ return null; } } } $list['empty_gifts'] = false;//当所有的赠品库存都是0:true $giftsGoods = null; $count = count($list['giftGoods']); foreach ($list['giftGoods'] as $key=>$g){ if ($g['goods_info']['stock_total'] < 1){ $count--; }else{ $giftsGoods[] = $g;//库存大于0的才展示这个赠品 } } unset($list['giftGoods']); if ($count == 0){// $list['empty_gifts'] = true; } $list['gift_goods'] = $giftsGoods; $list['remain_secs'] = strtotime($list['end_time']) - time(); return $list; } /** * 获取确认订单满件送活动赠送商品列表 * @param $orderGoodList * @return mixed * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public static function validActivityList(&$orderGoodList,&$order) { // $order['is_mj_send'] = 0; // $order['mj_send_activity_id'] = 0; $mjSendGoodList = []; //满件送商品数量列表 $giveGoodList = [];//满就送+全场满件送+满件送商品数量总和 // 检索查询条件 $now = date('Y-m-d H:i:s'); $filter[] = ['start_time','<',$now]; $filter[] = ['end_time','>',$now]; $filter[] = ['status','=',1]; $filter[] = ['audit_status','=',1]; // 执行查询 $lists = self::with(['goodsExcept','giftGoods'])->where($filter)->select(); if (!$lists) return $mjSendGoodList; $lists = $lists->toArray(); // 整理当前订单所有商品ID集 $orderGoodsIds = helper::getArrayColumn($orderGoodList, 'goods_id'); foreach ($orderGoodList as $good){ $good['is_mj_send'] = 0; $good['mj_send_activity_id'] = 0; $good['mj_send_num'] = 0; $good['mj_send_count'] = 0; $good['mj_send_use_count'] = 0; $good['mj_send_goods_list'] = []; $mjSendGoodList[$good['goods_id']] = 0; if($good['goods_type']==GoodsType::GIFT){ if(isset($giveGoodList[$good['goods_id']])){ $giveGoodList[$good['goods_id']] += $good['total_num']; }else{ $giveGoodList[$good['goods_id']] = $good['total_num']; } } } foreach ($lists as $list){ //循环多个满件送活动 $exceptGoodsId = $list['goodsExcept']['goods_id'];//每个满件送活动只能选择一个商品 $goodsIds = array_intersect($orderGoodsIds,[$exceptGoodsId]); if(empty($goodsIds)){//如果没有满件送商品,那就终止 continue;//跳出本次循环 } $is_mj = 0; $set_count = 0; //赠送当前几套赠品数量 $mj_props = array_values(array_sort($list['mj_props'], 'value', true)); // dd($mj_props); // 获取当前商品列表的订单金额 foreach ($orderGoodList as $good){ if(in_array($good['goods_id'],$goodsIds)){ //如果使用了会员折扣又不叠加会员折扣 if($good['is_user_member']>0 && stripos($list['overlay_type'],'2') !== false){ continue; } //如果使用了优惠券又不叠加优惠券 if($good['coupon_id']>0 && stripos($list['overlay_type'],'1') !== false){ continue; } //如果使用了推荐官专属折扣又不叠加专属折扣 if($good['is_user_distributor']>0 && stripos($list['overlay_type'],'3') !== false){ continue; } //使用了N件X折活动并且不能叠加满件送 if($good['is_activity_discount']==1 && stripos($good['activity_discount_overlay'],'3') === false){ $is_mj = 1; break;//终止循环 } //如果库存没有 $good_num = $good['total_num']; if($list['goodsExcept']['goods_id']==$good['goods_id']){ if($list['goodsExcept']['residue_stock']<$good['total_num']){ $good_num = $list['goodsExcept']['residue_stock']; } } if($list['type']==1){ foreach ($mj_props as $arr){ if($good_num<$arr['value']){//商品数量小于当前活动满件送的最小数量 $is_mj = 1; break;//终止循环 }else{ $set_count = floor($good_num/$arr['value']); break;//终止循环 } } }else{ foreach ($mj_props as $arr){ if($good_num<$arr['value']){//商品数量小于当前活动满件送的最小数量 continue; }else{ $set_count = $arr['count']; break;//终止循环 } } } $good['is_mj_send'] = 1; $good['mj_send_activity_id'] = $list['id']; $good['mj_send_num'] = $mj_props[0]['value']; $good['mj_send_count'] = $set_count; $good['mj_send_use_count'] = $good_num; } } if($is_mj){ continue;//跳出本次循环 } if(empty($set_count)){//如果没有送的赠品 continue;//跳出本次循环 } //获取赠送商品ID集 $giftGoodsIds = helper::getArrayColumn($list['giftGoods'], 'goods_id'); $model = new GoodsModel; $goodsList = $model->getListByIdsFromApi($giftGoodsIds); // 隐藏冗余的属性 $goodsList->hidden(array_merge($model->hidden, ['content', 'goods_images', 'images'])); // 返回商品处理 $orderGoodListNew = []; foreach ($goodsList as &$item) { // 商品sku信息 $item['skuInfo'] = GoodsSkuModel::detail($item['goods_id'], 0);//赠品都是单规格,sku=0 // 商品单价 $item['skuInfo']['goods_price'] = 0.00; $item['goods_price'] = $item['skuInfo']['goods_price']; $item['goods_type'] = 20; // 商品赠送数量 $item['total_num'] = (int)$set_count; // 商品SKU索引 $item['goods_sku_id'] = $item['skuInfo']['goods_sku_id']; // 商品购买总金额 $item['total_price'] = helper::bcmul($item['goods_price'], 1); $item['staffUserId'] = 0; $item['shopId'] = 0; $item['distributorRadio'] = 0; if(isset($giveGoodList[$item['goods_id']])){ $giveGoodList[$item['goods_id']] += $set_count; }else{ $giveGoodList[$item['goods_id']] = $set_count; } if($order['delivery'] == DeliveryTypeEnum::SHOPS_DELIVERY){//门店自提 $ShopGoodsSku = ShopGoodsSku::get(['goods_id'=>$item['goods_id'],'goods_sku_id'=>0,'shop_id'=>$order['shopInfo']['shop_id']]); if(!empty($ShopGoodsSku) && $ShopGoodsSku['stock_num'] && $giveGoodList[$item['goods_id']]<=$ShopGoodsSku['stock_num']){//赠品有库存才出现在确认订单,或者赠品库存不足 $orderGoodListNew[] = $item; } }else{ if($item['skuInfo']['stock_num'] && $giveGoodList[$item['goods_id']]<=$item['skuInfo']['stock_num']){//赠品有库存才出现在确认订单 $orderGoodListNew[] = $item; } } if(in_array($item['goods_id'],$orderGoodsIds)){ $mjSendGoodList[$item['goods_id']] = $giveGoodList[$item['goods_id']]; } } foreach ($orderGoodList as $good){ if(in_array($good['goods_id'],$goodsIds)){ $good['mj_send_goods_list'] = $orderGoodListNew; } } } return $mjSendGoodList; } }