近期我们公司项目里陆陆续续有很多为了招引新用户的活动推出,砍价的活动由我来负责,我们的项目是在微信浏览器里供用户浏览访问。

大概描述:进入砍价活动列表页选择有意向的商品,用户点击商品图片可以看到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) {echo json_encode(['status' => -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'] < 1) {return json_encode(['status' => -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 aLEFT JOIN `hp_category_attr` AS bON 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` = $idLIMIT 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_idLIMIT 1";$res = Db::query($sql);if (is_not_empty_array($res)) {$data = $res[0];}return $data;}//检测是否帮助伙伴砍价//$bargain_id       [activity_bargainirg]表主键id//$assistor_id      帮助砍价者用户idpublic 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 aLEFT JOIN `hp_user_auths` AS bON a.`assistor_id` = b.`user_id`WHERE a.`bargain_id` = $bargain_idORDER 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_idORDER BY `id` DESCLIMIT $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_moneyAND `bargain_count` < $join_count";$row = self::execute($sql);if ( $row > 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 aLEFT JOIN `hp_category_attr` AS bON a.`attr1_id` = b.`attr1_son_id` AND a.`attr2_id` = b.`attr2_son_id` AND a.`product_id` = b.`category_id`WHERE 1 = 1ORDER BY a.`id` DESCLIMIT $limit OFFSET $offset";$data = self::query($sql);        return $data;}

转载于:https://www.cnblogs.com/wt645631686/p/7008464.html

PHP-ThinkPHP5砍价活动相关设计相关推荐

  1. PHP基于Thinkphp5的砍价活动相关设计

    近期我们公司项目里陆陆续续有很多为了招引新用户的活动推出,砍价的活动由我来负责,我们的项目是在微信浏览器里供用户浏览访问. 大概描述:进入砍价活动列表页选择有意向的商品,用户点击商品图片可以看到WEB ...

  2. 电商产品设计:后台营销功能模块设计-砍价活动(二)

    砍价是诞生在社交电商的时代,是社交电商最常见的几种玩法之一,目的都是低成本获客,在完成拉新及留存的作用的基础上,实现粉丝裂变增长的商业目标. 一.什么是砍价活动,为什么要做,有什么好处? 1.提高用户 ...

  3. 电商产品设计:后台营销功能模块设计-砍价活动(三)

    砍价是诞生在社交电商的时代,是社交电商最常见的几种玩法之一,目的都是低成本获客,在完成拉新及留存的作用的基础上,实现粉丝裂变增长的商业目标. 一.什么是砍价活动,为什么要做,有什么好处? 1.提高用户 ...

  4. H5活动产品设计指南基础版

    本文来自 网易云社区 . H5一般页面不会很多,看似简单,实际上会有很多细节需要注意,我自己在做过了几个H5之后,发现了一些常犯的问题,做了小结,希望给新开始做H5的产品相关的同学提供一些帮助. 首先 ...

  5. 设计灵感|浓浓人文感!中文活动海报设计学习案例

    说到中文字体,很多人会认为中文海报难以显现格调和档次,视觉效果与外文海报相差甚远,但实际上汉字凝聚着中华传统智慧与思维,极具代表性和表现力,以汉字为主体进行海报设计,更具指示性强.简洁清晰的传播效果, ...

  6. 聊聊运营活动的设计与实现逻辑

    产品留不住,唯有套路得用户: 一.业务背景 在多数的产品功能体系中,都会设计活动板块,活动作为运营的手段,根本目的是为了更好的连接产品和用户,所以很考验运营方案的策划,在活动的生命周期内完成对业务指标 ...

  7. 从用户行为打造活动交互设计闭环——2014年世界杯竞猜活动设计总结

    前言:从需求→交互设计→视觉设计→开发上线,不到20天的时间,6月12日世界杯活动上线了.首先为我们这个团队点个赞.活动两个月期间一直没有时间整理,现在活动结束,说说此次暴露的一些问题及反思. 世界杯 ...

  8. 关于电商店铺/活动页面设计策划思路

    页面分为:店招,导航,海报,优惠信息公告,活动概述,分类,活动商品展现,主推商品展现,次推商品展现,底通,左右侧滑悬浮. 店招分为:左侧品牌信息,右侧商品推荐,搜索框等. 导航分为:首页,活动,属性分 ...

  9. Niushop 砍价活动

    砍价 设置砍价相关活动 砍价是专为卖家推出的一款营销活动,活动基于多人帮砍的形式,鼓励买家发起砍价,邀请好友助力帮砍,可帮助商家短时间内增粉拉新提高商城收益. 打开后台-营销-营销中心-店铺营销-砍价 ...

最新文章

  1. JavaScript 变量
  2. mybatis3进行模糊查询的总结
  3. QTP的那些事--通过WMI获取session中的用户信息的验证码
  4. ajax 文件数据流,Ajax如何读取数据流中的xml文件?
  5. 经典C语言程序100例之四二
  6. [翻译中] 使用Wayland替代X, 大幅提高图形速度
  7. Tornado 上传文件及存储
  8. 基于mapreduce的购物篮分析算法实现
  9. 精读《如何在 nodejs 使用环境变量》
  10. Android应用案例开发大全 吴亚峰 苏亚光
  11. RPG游戏-NPC系统
  12. java excel 透视_在Java中用Excel创建数据透视表和数据透视图
  13. uniapp——头条小程序picker变黑色
  14. 常用温度控制方法原理
  15. 多目标优化算法matlab代码大合集
  16. VSTO Shapes对象、ShapeRange对象和Shape对象的关系
  17. JS中页面跳转,传值包含中文时乱码解决方案
  18. Android中闹铃的设置
  19. filedownloader php,file-downloader
  20. 集中式版本控制系统和分布式版本控制系统的区别

热门文章

  1. python 对接饿了么零售开放平台
  2. 火到海外破圈!这个国产AI项目GitHub标星8.6k,价值千万
  3. 怎样将CDR文件转换为PS分图层文件
  4. 【YOLOV5-5.x 源码解读】val.py
  5. 用sizeof函数对变量数据所占字节数进行测量
  6. atx和matx机箱_别再用ATX机箱装MATX主板啦,换装TT启航者A1 MATX机箱
  7. 怡红公子专属网址导航
  8. html代码设置五边形,css实现五边形旋转效果代码
  9. g700刷机包android5,华为g700移动版如何刷机【图文教程】
  10. 展会ING丨计讯物联在中国水博览会大放异彩,现场人气持续狂飙