_/___.' >'"". * | | : `- \`.;`\ _ /`;.`/ - ` : | | * \ \ `-. \_ __\ /__ _/ .-` / / * ======`-.____`-.___\_____/___.-`____.-'====== * `=---=' * ............................................. * 佛曰:bug泛滥,我已瘫痪! */ namespace Common\Model; use Think\Model\ViewModel; use Common\Model\RetailSellModel; use Common\Model\RetailGoodsGiftsModel; use Common\Model\RetailShoppingModel; //[1.4.98] class RetailGoodsGiftsActivityModel extends BaseModel { protected $tableName = 'retail_goods_gifts_activity'; /* * 获取促销赠送信息 * */ public function getGoodsGiftsActivityList($where, $field, $page = 1, $pageSize = 10) { $list = $this->alias('rgga') ->field($field) ->where($where) ->order('rgga.id desc') ->page($page, $pageSize) ->select(); $total = $this->alias('rgga') ->where($where) ->count(); $result['list'] = $list; $result['total'] = $total; return $result; } /* * 判断活动是否开启 * $type 1=线上 * */ public function judgeGoodsGiftsActivity($goods_id, $type = 1) { $field = [ 'rgga.id as activity_id', 'rgga.goods_gifts_json', 'rgga.goods_num_min', 'rgga.time_limit', 'rgga.start_time', 'rgga.end_time', 'rgga.online_promotion', 'rgga.online_buy_limit', 'rgga.offline_promotion', 'rgga.offline_buy_limit', 'rgga.sku_info', ]; $where['rgga.goods_id'] = $goods_id; $where['rgga.status'] = 1; $where['rgga.is_del'] = 1; $list = $this->alias('rgga') ->field($field) ->where($where) ->find(); if(!$list){ $result['msg'] = '该商品没有促销赠送活动'; $result['code'] = 0; $result['data'] = (object)array(); return $result; } if($list['time_limit'] == 1){ if( time() < strtotime( $list['start_time']) ){ $result['msg'] = '活动尚未开始!'; $result['code'] = 0; $result['data'] = (object)array(); return $result; } if( time() > strtotime( $list['end_time']) ){ $result['msg'] = '活动已经结束!'; $result['code'] = 0; $result['data'] = (object)array(); return $result; } } if($type == 1){ if((int)$list['online_promotion'] !== 1){ // 线上促销 $result['msg'] = '线上促销未开启!'; $result['code'] = 0; $result['data'] = (object)array(); return $result; } } else { if((int)$list['offline_promotion'] !== 1){ // 线下促销 $result['msg'] = '线下促销未开启!'; $result['code'] = 0; $result['data'] = (object)array(); return $result; } } $list['giftsList'] = json_decode($list['goods_gifts_json'], true); unset($list['goods_gifts_json']); $result['msg'] = '信息获取成功!'; $result['code'] = 1; $result['data'] = $list; return $result; } // 线上是否满足购买次数 public function judgeOnlineNumber($goods_id, $sku_id, $num, $gifts_activity_id, $uid) { $where['id'] = $gifts_activity_id; $where['goods_id'] = $goods_id; $where['online_buy_limit'] = 1; // 线上活动 $where['status'] = 1; $where['is_del'] = 1; $activityData = $this ->field('goods_num_min, online_promotion, online_buy_limit, goods_gifts_json') ->where($where) ->order('id desc') ->find(); if(!$activityData){ $result['msg'] = '促销活动信息有误'; $result['code'] = 0; return $result; } //查询出订单信息 $SellModel = new RetailSellModel(); $map = array( 'goods_gifts_id' => $gifts_activity_id, 'uid'=> $uid, 'pay_type'=> ['GT', 0], ); $sellCount = $SellModel->getCount($map); if($activityData['online_promotion'] == 1){ if( !$activityData['online_buy_limit'] > $sellCount){ $result['msg'] = '参与次数过多'; $result['code'] = 0; return $result; } } $giftsList = json_decode($activityData['goods_gifts_json'], true); // 判断赠品数量是否充足 $give_number = floor($num/$activityData['goods_num_min']); // 应赠送次数 $RetailGoodsGiftsModel = new RetailGoodsGiftsModel(); $sku_arr = []; foreach ($giftsList as &$value) { // 获取赠品库存 $gifts_number = $RetailGoodsGiftsModel->getFind(['id' => $value['gifts_id'] ], 'remain_inventory'); if(!$gifts_number){ $result['msg'] = '活动赠品错误,请联系客服!'; $result['code'] = 0; return $result; } if($gifts_number['remain_inventory'] < $value['gifts_num'] * $give_number) { $result['msg'] = '赠品数量不足!'; $result['code'] = 0; return $result; } $sku_arr[] = $value['sku_id']; } if($sku_id){ if(!in_array($sku_id, $sku_arr)){ $result['msg'] = '改规格不可以参加此活动!'; $result['code'] = 0; $result['data'] = []; return $result; } } } // 是否超标赠送 public function judgeOfflineNumber($activity_id, $goods_number, $gifts_id, $gifts_number) { $where['id'] = $activity_id; $where['is_del'] = 1; $where['status'] = 1; $where['offline_promotion'] = 1; $activityData = $this->alias('rgga') ->field('offline_promotion, offline_buy_limit') ->where($where) ->order('rgga.id desc') ->find(); if(!$activityData){ $result['msg'] = '线下促销未开启!'; $result['code'] = 0; $result['data'] = []; return $result; } $giftsList = json_decode($activityData['goods_gifts_json'], true); // 赠送门槛 if($activityData['goods_num_min']){ if($activityData['goods_num_min'] > $goods_number){ $result['msg'] = '未达到赠送门槛!'; $result['code'] = 0; $result['data'] = []; return $result; } $give_number = floor($goods_number/$activityData['goods_num_min']); // 应赠送次数 $gifts_arr = []; foreach ($giftsList as &$value) { if($value['gifts_id'] == $gifts_id){ if($gifts_number > $value['gifts_num'] * $give_number) { $result['msg'] = '赠送数量过多!'; $result['code'] = 0; $result['data'] = []; return $result; } $gifts_arr[] = $value['gifts_id']; } } if(!in_array($gifts_id, $gifts_arr)){ $result['msg'] = '赠品不对哦!'; $result['code'] = 0; $result['data'] = []; return $result; } } $result['msg'] = 'OK!'; $result['code'] = 1; $result['data'] = []; return $result; } /* ************************************************** 小程序接口处 ************************************************** */ /* * * 判断活动是否开启 * $type 1=线上 * */ public function judgeGoodsGiftsActivityMini($goods_id, $sku_id = '') { $field = [ 'rgga.id as activity_id', 'rgga.goods_gifts_json', 'rgga.goods_num_min', 'rgga.time_limit', 'rgga.start_time', 'rgga.end_time', 'rgga.online_promotion', 'rgga.online_buy_limit', ]; $where['rgga.goods_id'] = $goods_id; $where['rgga.status'] = 1; $where['rgga.is_del'] = 1; if($sku_id){ $where['_string'] = 'FIND_IN_SET('."'$sku_id'".', rgga.sku_ids)'; } $list = $this->alias('rgga') ->field($field) ->where($where) ->find(); if(!$list){ $result['msg'] = '该商品没有促销赠送活动'; $result['code'] = 0; $result['data'] = (object)array(); return $result; } if($list['time_limit'] == 1){ if( time() < strtotime( $list['start_time']) ){ $result['msg'] = '活动尚未开始!'; $result['code'] = 0; $result['data'] = (object)array(); return $result; } if( time() > strtotime( $list['end_time']) ){ $result['msg'] = '活动已经结束!'; $result['code'] = 0; $result['data'] = (object)array(); return $result; } } if((int)$list['online_promotion'] !== 1){ // 线上促销 $result['msg'] = '线上促销未开启!'; $result['code'] = 0; $result['data'] = (object)array(); return $result; } $giftsList = json_decode($list['goods_gifts_json'], true); unset($list['goods_gifts_json']); $RetailGoodsGiftsModel = new RetailGoodsGiftsModel(); foreach($giftsList as &$value){ // 实时库存更新 $remain_inventory = $RetailGoodsGiftsModel->getFind(['id' => $value['goods_gifts_id']], 'remain_inventory'); if($remain_inventory){ $value['remain_inventory'] = $remain_inventory['remain_inventory']; } else { $value['remain_inventory'] = 0; } unset($value['specifications']); unset($value['status']); unset($value['created_at']); unset($value['checked']); unset($value['goods_num']); unset($value['sku_num']); } $list['giftsList'] = $giftsList; $result['msg'] = '信息获取成功!'; $result['code'] = 1; $result['data'] = $list; return $result; } // 赠品数据 sell表用 /* ** * When I wrote this code, only God and I understood what I was doing * Now, God only knows */ public function getActivityForSell($shopping_ids = '') { $giftsArr = []; // 返回专用 $shopping_ids = json_decode($shopping_ids, true); // 获取购买的商品和参与的满赠活动 $ShoppingModel = new RetailShoppingModel(); $GoodsGiftsModel = new RetailGoodsGiftsModel(); $where['id'] = ['in', $shopping_ids]; $where['gifts_activity_id'] = ['GT', 0]; $goodsList = $ShoppingModel->getSelect($where, 'goods_id, sku_id, num, gifts_activity_id'); if($goodsList){ $giftsList = []; foreach ($goodsList as $key => $value) { // 获取活动应送赠品 $giftsList[] = $this->getFind(['id' => $value['gifts_activity_id'] ], 'goods_gifts_json, goods_num_min'); if($giftsList){ $giftsList[$key]['goods_gifts'] = json_decode($giftsList[$key]['goods_gifts_json'], true); $giftsList[$key]['give_multiple'] = floor($value['num'] / $giftsList[$key]['goods_num_min']); $giftsList[$key]['gifts_activity_id'] = $value['gifts_activity_id']; } } dump($giftsList); // 处理赠品信息 $i = 0; foreach ($giftsList as $key => $value) { foreach ($value['goods_gifts'] as $k => $v) { $giftsArr[$i]['goods_gifts_id'] = $v['gifts_id']; $giftsArr[$i]['gifts_num'] = $v['gifts_num']; $giftsArr[$i]['gifts_give_num'] = $v['gifts_num'] * $value['give_multiple']; $giftsArr[$i]['retail_price'] = $v['retail_price']; $giftsArr[$i]['gifts_activity_id'] = $value['gifts_activity_id']; $giftsArr[$i]['goods_name'] = $value['goods_name']; $giftsArr[$i]['sku_name'] = $value['sku_name']; $giftsArr[$i]['goods_img'] = $value['goods_img']; $i++ ; } } } // 赠品库存处理 $remain_inventory = []; foreach ($giftsArr as &$value) { $remain_inventory[ $value['goods_gifts_id'] ] = $GoodsGiftsModel->getFind(['id' => $value['goods_gifts_id']], 'remain_inventory'); if(!$remain_inventory[ $value['goods_gifts_id'] ]){ $remain_inventory[ $value['goods_gifts_id'] ] = 0; } } foreach ($giftsArr as &$value) { if($remain_inventory[ $value['goods_gifts_id'] ]['remain_inventory'] >= $value['gifts_give_num']){ $value['fact_give_num'] = $value['gifts_give_num']; $remain_inventory[ $value['goods_gifts_id'] ]['remain_inventory'] = $remain_inventory[ $value['goods_gifts_id'] ]['remain_inventory'] - $value['gifts_give_num']; } else { $value['fact_give_num'] = $remain_inventory[ $value['goods_gifts_id'] ]['remain_inventory']; $remain_inventory[ $value['goods_gifts_id'] ]['remain_inventory'] = 0; } unset($value['gifts_num']); if($value['fact_give_num'] == 0){ // 实际赠送为0时,删除赠品数据 unset($value); } } return $giftsArr; } }