#近期我們公司專案裡陸陸續續有很多為了招募新用戶的活動推出,砍價的活動由我來負責,我們的專案是在微信瀏覽器裡供用戶瀏覽訪問。
大概描述:進入砍價活動列表頁選擇有意向的商品,用戶點擊商品圖片可以看到WEB商城中所賣的商品價格與詳細參數等信息,點擊列表中對應商品標識下的'馬上搶購'可以進入砍價頁面,該頁面有兩個主要按鈕,一個是'請土豪幫忙'(點擊之後起引導分享作用)、'買買買'(砍到一定價位後可以購買),其次包括價格的進度條等信息,用戶分享到朋友圈引來朋友幫忙砍價,在觸發砍價按鈕的同時,如果幫忙的朋友不是本站用戶,那麼幫忙的朋友會成為本站的會員,同時會是該分享用戶的下級,然後根據產品運營採購針對每個商品的討論,會給商品定義好要砍價的活動價和最低價,以及每砍一次所能砍掉的價格區間和要參與的人數做計算,例如(商品原價3000,最低價1000,那麼所能砍掉的價格是2000,規定參與的人數是500人,那麼平均一個人砍掉4塊錢,可以設定區間為1~7元,來設定砍價的起伏大小,來提高用戶的參與興趣),當用戶砍到規定的價格區間內購買時,跳到訂單確認頁面,然後下單支付一系列流程。
頁面截圖:
# 實作相關:
透過看到幾張圖片大概我想大家也會考慮到所涉及的相關資訊。
想要發布參與活動的商品就有一個商品區分錶示,在資料庫的設計當中,我沒有修改商品表來增加一個區分的字段,而是新創建了一個數據表作為專門放置砍價活動的相關資訊。
來看一下後台的前台展示我是這麼設計的,沒有經過專業前端之手,僅僅在復制了後台商品列表模組代碼的基礎上自己簡單的做了一下佈局。
我的資料表設計:
#活动商品设置表: CREATE TABLE `hp_activity_bargain` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `product_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '商品ID', `product_name` varchar(200) COLLATE utf8_unicode_ci NOT NULL COMMENT '商品名称', `activity_money` decimal(7,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '活动价', `bargain_section` varchar(20) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '砍价区间', `bargain_section2` varchar(20) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '砍价区间2【用户线上砍价(新用户砍价区间)】', #忽略,此处是迭代后期地推而加上的 `join_count` smallint(3) unsigned NOT NULL DEFAULT '0' COMMENT '参与人数', `product_desc` varchar(80) COLLATE utf8_unicode_ci NOT NULL COMMENT '活动商品描述', `attr1_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'attr1属性', `attr2_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'attr2属性', `type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0是线上,1是地推', PRIMARY KEY (`id`), KEY `product_id` (`product_id`), KEY `attr2_id` (`attr2_id`), KEY `attr1_id` (`attr1_id`), KEY `type` (`type`) ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
#用户参与进度信息表 CREATE TABLE `hp_activity_bargainirg` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `activity_bargain_id` int(10) unsigned NOT NULL COMMENT 'activity_prodcuts主键id', `product_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '参与活动的商品', `attr1_id` smallint(5) unsigned NOT NULL COMMENT 'attr1属性id', `attr2_id` smallint(5) unsigned NOT NULL COMMENT 'attr2属性id', `user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '砍价商品发起的用户ID', `bargain_count` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '被砍价次数', `deal_money` decimal(7,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '最终交易价格', `create_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '发起时间', `is_addorder` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否下单(0:未下单,1已下单)', `type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0是线上,1是地推', #可以忽略,后期地推加上去的 PRIMARY KEY (`id`), KEY `activity_bargain_id` (`activity_bargain_id`), KEY `attr1_id` (`attr1_id`), KEY `attr2_id` (`attr2_id`), KEY `product_id` (`product_id`), KEY `user_id` (`user_id`), KEY `is_addorder` (`is_addorder`) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
#参与砍价详情表 CREATE TABLE `hp_activity_bargain_list` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `bargain_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'activity_bargainirg表主键id', `assistor_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '帮助者ID', `create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '参与时间', `bargain_money` decimal(5,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '砍掉价格', PRIMARY KEY (`id`), KEY `assistor_id` (`assistor_id`), KEY `bargain_id` (`bargain_id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
控制器幾個方法:
//线上砍价活动列表 public function bargainirgAction() { $type = 0; $way = input('param.way', '','string'); if (is_not_empty_string($way) && $way == 'live') { $type = 1; } $pageSize = 10; if (Request::isAjax()) { $page = input('post.page', 0, 'intval'); $product_list = Hmodel\Activity::getActivityBargainProducts($type, $pageSize, $page * $pageSize); if (is_not_empty_array($product_list)) { return json_encode(['status' => 1, 'info' => $product_list]); } else { return json_encode(['status' => 0]); } } $product_list = Hmodel\Activity::getActivityBargainProducts($type, 10, 0); $view = new view(); $view->assign('bargainirgList',$product_list); if ($type == 0) { return $view->fetch('bargainirg'); } else { return $view->fetch('bargainirg_live'); } } //砍价活动\商品详情\查看贡献度\请帮忙 public function bargaindetailAction() { $this->checkUserLogin(); $uid = session('userinfo.uid'); // $uid = 3; $seting_id = input('param.id',0,'int'); $seting_info = Hmodel\Activity::getActivityProductsSeting($seting_id); //砍价活动商品设置 $bargain_section2 = !empty($seting_info['bargain_section2']) ? $seting_info['bargain_section2'] : 'no seting'; if (!is_not_empty_array($seting_info)) notFund(); $bargain_progress = Hmodel\Activity::returnProgressData( $seting_id, $seting_info['product_id'], $uid, $seting_info['attr1_id'],$seting_info['attr2_id'], $seting_info['add_money'],$seting_info['type']); if (!is_not_empty_array($bargain_progress) || $bargain_progress['user_id'] != $uid) notFund(); $username = session('userinfo.username'); $user_info = Hmodel\User::getuser_info($uid); $invite_code = $user_info['invite_code']; $encrypt_code = encrypt_hopeband($bargain_progress['id'] . '(&)' .$bargain_progress['activity_bargain_id'] . '(&)' .$uid . '(&)' . $invite_code . '(&)' . $seting_info['product_id'] . '(&)' . $seting_info['activity_money'] . '(&)' . $seting_info['bargain_section'] . '(&)' . $seting_info['bargain_section2'] .'(&)' . $seting_info['join_count'] . '(&)'. $bargain_progress['type'], 'E', 'Hp_HopeBand_Bargainirg'); //是否已经下单 // $is_addorder = Hmodel\Activity::checkIsAddorder($bargain_progress['id']); $is_addorder = $bargain_progress['is_addorder']; //帮助列表 $assistor_list = Hmodel\Activity::getAssistorList($bargain_progress['id']); $view = new view(); $view->assign([ 'bar_code' => $encrypt_code, 'seting_info' => $seting_info, 'bargain_progress' => $bargain_progress, 'assistor_list' => $assistor_list, 'seting' => $seting_id, 'is_addorder' => $is_addorder ]); $view->assign(); return $view->fetch(); } //帮忙砍价\进度\底部砍价商品列表 public function bargainirgingAction () { $url = $_SERVER['REQUEST_URI']; $encrypt_code = substr(substr($url,29),0,strpos(substr($url,29), '?invite_code')); $bargain_param = self::retrunBargainCode($encrypt_code); $bargain_id = $bargain_param['bargain_id']; $bargainInfo = Hmodel\Activity::getBargainirgProgress($bargain_id); if ( !is_not_empty_array($bargain_param) || !is_not_empty_array($bargainInfo)) { notFund(); } $is_addorder = $bargainInfo['is_addorder'] == 1 ? true : false; $uid = session('userinfo.uid'); $activity_product_id = $bargain_param['activity_product_id']; if ($bargain_param['sponsor_uid'] == $uid) { $this->redirect('bargaindetail',['id' => $activity_product_id]); } $product_id = $bargain_param['product_id']; $bargain_list = Hmodel\Activity::getActivityBargainProducts($bargain_param['type'], 999); //所有参与砍价活动的商品 foreach ($bargain_list as $v) { if ( $v['id'] == $activity_product_id) { $product_info = $v; } } if (!is_not_empty_array($product_info)) notFund(); $type = $bargain_param['type']; $activity_bargain_url = url('activity/bargainirg') ; $view = new view(); $view->assign([ 'bar_code' => $encrypt_code, //邀请码 'bargainInfo' => $bargainInfo, //当前砍价进度 'product_info' => $product_info, //商品详情 'bargain_list' => $bargain_list, //底部相关推荐 'is_addorder' => $is_addorder, //是否入库 'activity_bargain_url' => $activity_bargain_url ]); return $view->fetch(); } //ajax砍价 public function goBargainAction () { if (Request::isAjax()) { $uid = session('userinfo.uid'); $username = session('userinfo.username'); $encrypt_code = input('post.bar_code', '', 'string'); if (empty($uid) || empty($username)) { $this->checkUserLogin(); } $bargain_param = self::retrunBargainCode($encrypt_code); if (!is_not_empty_array($bargain_param)) { echo json_encode(array('status' => -3, 'info' => '不明错误,请联系客服'));die; } $seting_info = Hmodel\Activity::getActivityProductsSeting($bargain_param['activity_product_id']); //砍价活动商品设置 $stock = Hmodel\CategoryAttr::getproductstockbyidsonattr($seting_info['product_id'],$seting_info['attr1_id'],$seting_info['attr2_id']); if ($stock['category_sum'] -1, 'info' => '已抢光!']);die; } $userinfo = Hmodel\User::getuser_info($uid); $register_time = $userinfo['create_time']; $is_new_user = false; //用户状态[default:老用户] if (($register_time + (60 * 60 * 8)) > time() && Hmodel\Activity::checkUserIsbargainEd($uid) === false) { $is_new_user = true; //是新用户 } $sponsor_uid = $bargain_param['sponsor_uid']; //发起者id $bargain_id = $bargain_param['bargain_id']; //[activity_bargainirg]表主键id $join_count = $bargain_param['join_count']; //设置砍价次数 $section = $bargain_param['bargain_section']; //砍价区间(老用户) $section2 = $bargain_param['bargain_section2']; //砍价区间(新用户) $type = $bargain_param['type'] == $seting_info['type'] ? $bargain_param['type'] : ''; //0:线上; 1:地推 $activity_money= $bargain_param['activity_money']; //活动最低价 if (!is_not_empty_string($type)) { echo json_encode(array('status' => -3, 'info' => '不明错误,请联系客服'));die; } if ($uid == $sponsor_uid) { echo json_encode(array('status' => -1, 'info' => '不能给自己砍价'));die; } $state = Hmodel\Activity::checkPartBargain($bargain_id, $uid); //是否帮伙伴砍过当前参与的进度 if ( $state !== false) { echo json_encode(array('status' => -2, 'info' => '您已帮伙伴砍掉' . $state . '元啦,不要再砍啦!'));die; } if ($type == 1 && $is_new_user === false) { echo json_encode(array('status' => -4, 'info' => '抱歉,该活动仅限新用户参加!'));die; } $state = Hmodel\Activity::givePartBargain($bargain_id, $sponsor_uid, $uid, $section, $section2, $join_count, $is_new_user, $activity_money, $type); if ($state == -1) { echo json_encode(array('status' => -3, 'info' => '已经最低价啦,不能再砍啦!'));die; } if ($state === false) { echo json_encode(array('status' => -3, 'info' => '哎呀,失败了!稍后帮我砍一次!'));die; } else { if ($is_new_user === true) { echo json_encode(array('status' => 2, 'info' => '砍掉了' . $state .'元', 'deal_money' => $state));die; } else { echo json_encode(array('status' => 1, 'info' => '成功帮伙伴砍掉' . $state .'元!', 'deal_money' => $state));die; } } } } //返回砍价活动相关数据 public static function retrunBargainCode( $encrypt_str = '') { $data = []; $code_str = encrypt_hopeband($encrypt_str, 'D', 'Hp_HopeBand_Bargainirg'); $code_arr = explode('(&)', $code_str); if (is_not_empty_array($code_arr) && count($code_arr) == 10) { $data['bargain_id'] = $code_arr[0]; //砍价活动表主键id $data['activity_product_id'] = $code_arr[1]; $data['sponsor_uid'] = $code_arr[2]; //砍价活动发起者uid $data['sponsor_invite_code'] = $code_arr[3]; //砍价活动发起者邀请码 $data['product_id'] = $code_arr[4]; //砍价活动发起的商品id $data['activity_money'] = $code_arr[5]; //活动最低价格 $data['bargain_section'] = $code_arr[6]; //老用户砍价区间 $data['bargain_section2'] = $code_arr[7]; //新用户砍价区间 $data['join_count'] = $code_arr[8]; //设置砍价次数 $data['type'] = $code_arr[9]; //设置砍价次数 } return $data; }
public function checkOrder2PayAction() { $this->checkUserLogin(); if (!Request::isAjax()) { notFund(); } $seting_id = input('post.seting',0,'intval'); $user_id = session('userinfo.uid'); //拿付款的额度和商品id $BargainPayData = Hmodel\Activity::getBargainResult2Pay($seting_id, $user_id); $stock = Hmodel\CategoryAttr::getproductstockbyidsonattr($BargainPayData['product_id'],$BargainPayData['attr1_id'],$BargainPayData['attr2_id']); if ($stock['category_sum'] -2, 'info' => '已抢光!']);die; } if ($BargainPayData['is_addorder'] == 1) { return json_encode(['status' => -2, 'info' => '此商品已经购买过,不能重复购买!']);die; } if (!is_not_empty_array( $BargainPayData)) { return json_encode(['status' => -1, 'info' => '不明错误,请联系客服!']);die; } $product_id = $BargainPayData['product_id']; $attr1_name = ''; $attr2_name = ''; if (is_not_empty_array($attr1_info = Hmodel\Activity::getAttr1NameByAttrId($BargainPayData['attr1_id'], $product_id))){ $attr1_name = $attr1_info['attr']; } if (is_not_empty_array($attr2_info = Hmodel\Activity::getAttr2NameByAttrId($BargainPayData['attr2_id'], $product_id))){ $attr2_name = $attr2_info['attr']; } $data = [ 'product_id' => $product_id, 'prodcut_num' => 1, 'attr1' => $attr1_name, 'attr2' => $attr2_name, 'seting_id' => $seting_id ]; return json_encode(['status' => 1, 'info' => $data]); } //查看砍价后的预付款订单信息 public function createActivityOrderAction () { $this->checkUserLogin(); $uid = session('userinfo.uid'); $product_num = 1; $attr1 = input("param.attr1", "" , "trim,string"); $attr2 = input("param.attr2", "" , "trim,string"); $seting_id = intval(input('param.seting_id', 0, 'intval')); $product_id = intval(input("param.product_id", "" , "intval")); $pay_price_money = Hmodel\Activity::returnPayMoney($product_id, $seting_id, $uid); $type = $pay_price_money['type']; if (!is_not_empty_array($pay_price_money)) notFund(); Cookie::set('ready_finish_bargain', encrypt_hopeband($pay_price_money['id'] . '(&)', 'E', 'hp_ready_bargain_pay')); $pay_info = $this->calculateFromProduct($product_id, $product_num, $attr1, $attr2, $uid , $pay_price_money['deal_money'], $type); $def_address = Hmodel\UserAddress::getDefAddress($uid); $view = new View(); $view->assign('def_address',$def_address); $view->assign('product_carlist_bymerchantid',$pay_info['product_carlist_bymerchantid']); $view->assign('total_price',sprintf("%.2f",$pay_info['total_price'])); $view->assign('total_delivery',$pay_info['total_delivery']); $view->assign('seting_id',$seting_id); return $view->fetch('createorder'); }
Model層部分方法:
//根据主键id查询活动产品相关属性设置 public static function getActivityProductsSeting( $id = 0) { $data = []; if (!is_positive_integer($id)) { return $data; } $sql = "SELECT a.`id`,a.`product_id`,a.`activity_money`,a.`bargain_section`,a.`join_count`,a.`product_desc`,a.`product_name`, a.`attr1_id`,a.`attr2_id`, b.`give_score`,b.`category_img`,b.`add_money`,b.`category_sum` FROM `hp_activity_bargain` AS a LEFT JOIN `hp_category_attr` AS b ON a.`attr1_id` = b.`attr1_son_id` AND a.`attr2_id` = b.`attr2_son_id` AND a.`product_id` = b.`category_id` WHERE a.`id` = $id LIMIT 1"; $res = Db::query($sql); if (is_not_empty_array($res)) { $data = $res[0]; } return $data; } //通过主键id拿砍价活动表的相关信息 public static function getBargainirgProgress($id = 0) { $data = []; $sql = "SELECT `id`,`activity_bargain_id`,`product_id`,`attr1_id`,`attr2_id`,`user_id`,`bargain_count`,`deal_money`,`is_addorder` FROM `hp_activity_bargainirg` WHERE `id` = $id LIMIT 1"; $res = self::query($sql); if (is_not_empty_array($res)) { $data = $res[0]; } return $data; } //返回要砍 public static function returnProgressData($a_b_id = 0, $product_id = 0, $user_id = 0, $attr1_son_id = 0, $attr2_son_id = 0, $deal_money= 0){ $data = []; $sql = "SELECT `id`,`activity_bargain_id`,`product_id`,`attr1_id`,`attr2_id`,`user_id`,`bargain_count`,`deal_money`,`is_addorder` FROM `hp_activity_bargainirg` WHERE `activity_bargain_id` = $a_b_id AND `attr1_id` = $attr1_son_id AND `attr2_id` = $attr2_son_id AND `product_id` = $product_id AND `user_id` = $user_id LIMIT 1"; $res = self::query($sql); if (is_not_empty_array($res)) { $data = $res[0]; } else { $data['activity_bargain_id'] = $a_b_id; $data['product_id'] = $product_id; $data['user_id'] = $user_id; $data['deal_money'] = $deal_money; $data['attr1_id'] = $attr1_son_id; $data['attr2_id'] = $attr2_son_id; $data['create_time'] = time(); $data['bargain_count'] = 0; Db::name('activity_bargainirg')->insert($data); $insertId = Db::name('activity_bargainirg')->getLastInsID(); $data['id'] = $insertId; // $data = self::getBargainirgProgress($insert_id); } return $data; } //通过 表[activity_products] 主键id 和 user_id 拿到用户购买前要付款的额度和购买商品 public static function getBargainResult2Pay($a_b_id = 0, $user_id = 0) { $data = []; if ( !is_positive_integer($a_b_id) || !is_positive_integer($user_id)) { return $data; } $sql = "SELECT `id`,`deal_money`,`product_id`,`attr1_id`,`attr2_id` FROM `hp_activity_bargainirg` WHERE `activity_bargain_id` = $a_b_id AND `user_id` = $user_id LIMIT 1"; $res = Db::query($sql); if (is_not_empty_array($res)) { $data = $res[0]; } return $data; } //检测是否帮助伙伴砍价 //$bargain_id [activity_bargainirg]表主键id //$assistor_id 帮助砍价者用户id public static function checkPartBargain ($bargain_id = 0, $assistor_id = 0) { $state = false; if (!is_positive_integer($bargain_id) || !is_positive_integer($assistor_id)) { return $state; } $sql = "SELECT `bargain_money` FROM `hp_activity_bargain_list` WHERE `bargain_id` = $bargain_id AND `assistor_id` = $assistor_id LIMIT 1"; $res = self::query($sql); if (is_not_empty_array($res)) { return $res[0]['bargain_money']; } return $state; } //查询帮忙砍价的伙伴列表 public static function getAssistorList ( $bargain_id = 0){ $data = []; if (is_positive_integer($bargain_id) && is_positive_integer($assistor_id)) return $data; $sql = "SELECT a.`create_time`, a.`bargain_money`, b.`nickname`, b.`headimgurl` FROM `hp_activity_bargain_list` AS a LEFT JOIN `hp_user_auths` AS b ON a.`assistor_id` = b.`user_id` WHERE a.`bargain_id` = $bargain_id ORDER BY a.`id` DESC"; $data = self::query($sql); return $data; } //拿到上次所砍掉的价格 public static function getBeforeMoney ( $bargain_id = 0, $limit = 1) { $beforemoney_sum = 0; $sql = "SELECT SUM(`bargain_money`) AS beforemoney_sum FROM (SELECT `bargain_money` FROM `hp_activity_bargain_list` WHERE `bargain_id` = $bargain_id ORDER BY `id` DESC LIMIT $limit) sum"; $res = Db::query($sql); if (is_not_empty_array($res)) { $beforemoney_sum = $res[0]['beforemoney_sum']; } return $beforemoney_sum; } /** * 砍价相关数据操作 *$bargain_id [activity_bargainirg] 表主键id *$sponsor_id 砍价发起者id *$assistor_id 帮助砍价者id *$min 最小值 *$max 最大值 *$join_count 设置要参与砍价的人数 *return bool */ public static function givePartBargain($bargain_id = 0, $sponsor_id = 0, $assistor_id = 0, $min = 0, $max = 0,$join_count = 0) { $state = false; if (is_positive_integer($assistor_id) && $bargain_id > 0 && is_positive_integer($sponsor_id)) { $bargainirg_info = Db::name('activity_bargainirg')->find($bargain_id); if ( !$bargainirg_info ) { return $state; } $fp = fopen('./bargain_lock.txt','r'); $try = 5; do { $lock = flock($fp,LOCK_EX); if(!$lock) usleep(5000); } while (!$lock && --$try >= 0) ; if ($lock) { Db::startTrans(); try { $bargain_money = self::returnRandMoney($bargain_id, $min, $max, $join_count); /*-------------*/ $id = 0; $sql = "UPDATE `hp_activity_bargainirg` SET `deal_money` = `deal_money` - $bargain_money,`bargain_count` = `bargain_count`+ 1 WHERE `id` = $bargain_id AND `user_id` = $sponsor_id AND `deal_money` > $bargain_money AND `bargain_count` 0) { $insert_data = []; $insert_data['bargain_id'] = $bargain_id; $insert_data['assistor_id'] = $assistor_id; $insert_data['bargain_money'] = $bargain_money; $insert_data['create_time'] = time(); $id = Db::name('activity_bargain_list')->insert($insert_data); } /*-------------*/ if ($id > 0) $state = true; Db::commit(); }catch(\Exception $e){ $state = false; Db::rollback(); } flock($lock,LOCK_UN); fclose($lock); } } if ($state !== false ) { return $bargain_money; } return $state; } //返回要砍的价格 public static function returnRandMoney ($bargain_id = 0, $min = 0 ,$max = 0, $join_count = 0 ){ $randMoney = self::randomFloat( $min, $max); //返回随机价格 $prev_Progress = self::getBargainirgProgress($bargain_id); $prev_bargain_count = $prev_Progress['bargain_count']; //返回已经被砍价的次数 $remainder = $prev_bargain_count % 3; $bout_count = floor($join_count / 3) * 3; //最后一轮结束的刀数 39 $last_num = $join_count - $bout_count; $avg = ($min + $max) / 2; $before_sum = self::getBeforeMoney($bargain_id, $remainder); if ($prev_bargain_count >= $bout_count) { if ($last_num == 1){ return $avg; } elseif ($last_num == 2) { $end = $join_count - $prev_Progress['bargain_count'] ; if ($end == 2) { return $randMoney; } elseif($end == 1) { return $avg * 2 - $before_sum; } } } // $remainder_num = $join_count % 3; //总回合数的余数 if ($remainder > 0) { if ( $remainder == 1) { $point = $max * 0.8; //最大额度的80% $bout_sum = 3 * $avg; if ($before_sum >= $point) { $randMoney = self::randomFloat($min, ($bout_sum - $before_sum) / 2); } else { $randMoney = self::randomFloat(($bout_sum - $before_sum) / 2 , $point); } } if ($remainder == 2) { $round_sum_money = 3 * $avg; $randMoney = $round_sum_money - $before_sum; } } return $randMoney; } //拿随机价格 public static function randomFloat($min = 0, $max = 1) { return round($min + mt_rand() / mt_getrandmax() * ($max - $min),2); } //拿砍价活动下所有商品 public static function getActivityBargainProducts ( $limit = 0, $offset = 0) { $data = []; $sql = "SELECT a.`id`,a.`product_id`,a.`activity_money`,a.`bargain_section`,a.`join_count`,a.`product_desc`,a.`product_name`, a.`attr1_id`,a.`attr2_id`, b.`give_score`,b.`category_img`,b.`add_money`,b.`category_sum` FROM `hp_activity_bargain` AS a LEFT JOIN `hp_category_attr` AS b ON a.`attr1_id` = b.`attr1_son_id` AND a.`attr2_id` = b.`attr2_son_id` AND a.`product_id` = b.`category_id` WHERE 1 = 1 ORDER BY a.`id` DESC LIMIT $limit OFFSET $offset"; $data = self::query($sql); return $data; }