test
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

408 lines
20 KiB

<?php
defined('IN_IA') or exit('Access Denied');
class BargainModuleUniapp extends Uniapp {
/**
* Comment: 砍价商品信息列表
* Author: zzw
* Date: 2019/8/7 14:09
*/
public function homeList(){
global $_W,$_GPC;
#1、参数获取
$page = $_GPC['page'] ? $_GPC['page'] : 1;
$page_index = $_GPC['page_index'] ? $_GPC['page_index'] : 10;
$page_start = $page * $page_index - $page_index;
$lng = $_GPC['lng'] ? $_GPC['lng'] : 0;//用户当前所在经度
$lat = $_GPC['lat'] ? $_GPC['lat'] : 0;//用户当前所在纬度
$status = $_GPC['status'] ? $_GPC['status'] : 0;
$is_total = $_GPC['is_total'] ? : 0;//0=不获取总页数;1=获取总页数
$cate_id = $_GPC['cate_id'] ? : 0;//商品分类id
$is_vip = $_GPC['is_vip'] ? : 0;//是否获取会员专属商品
$time = $_GPC['time'] ?: time();//时间筛选
$week = date("w", $time);//当前时间的星期
if ($week == 0) $week = 7;//星期天时值的转换
$toDay = date("j", $time);//当前时间的日期
$set = Setting::agentsetting_read("pluginlist");
$sort = $_GPC['sort'] ? : $set['kjsort'];
#2、生成基本查询条件
$where = " a.aid = {$_W['aid']} AND a.uniacid = {$_W['uniacid']} ";
if($status > 0){
$ids = explode(',',$status);
if(count($ids) > 1){
$where .= " AND a.status IN ({$status}) ";
}else{
$where .= " AND a.status = {$status} ";
}
}else{
$where .= " AND a.status IN (1,2) ";
}
if($cate_id > 0){
$where .= " AND a.cateid = {$cate_id} ";
}
if ($is_vip > 0) $where .= " AND a.vipstatus IN (1,2) ";
$where .= " AND CASE a.usedatestatus
WHEN 1 THEN a.`week` LIKE '%\"{$week}\"%'
WHEN 2 THEN a.`day` LIKE '%\"{$toDay}\"%'
WHEN 0 THEN a.id > 0
END ";
#3、生成排序条件
switch ($sort) {
case 1:$order = " ORDER BY a.createtime DESC ";break;//创建时间
case 2:break;//店铺距离
case 3:$order = " ORDER BY sort DESC ";break;//默认排序
case 4:$order = " ORDER BY pv DESC ";break;//浏览人气
case 5:$order = " ORDER BY buy_num DESC ";break;//商品销量
case 6:$order = " ORDER BY a.sort DESC,buy_num DESC ";break;//精选 推荐、销量排序
case 7:$order = " ORDER BY a.pv DESC,buy_num DESC ";break;//最热 浏览量、销量排序
}
#4、获取商品列表
if($sort != 2){
//普通查询
$sql = "SELECT a.id,a.id as goods_id,IFNULL(sum(b.num),0) as buy_num FROM "
. tablename(PDO_NAME . "bargain_activity")
. " as a LEFT JOIN ".tablename(PDO_NAME."order")
. " as b ON a.id = b.fkid AND b.plugin = 'bargain' AND b.uniacid = {$_W['uniacid']} AND b.status IN (1,2,3,4,8,6,7,9) "
."WHERE {$where} GROUP BY a.id {$order} ";
if($is_total == 1) $total = count(pdo_fetchall($sql));
$info = pdo_fetchall($sql." LIMIT {$page_start},{$page_index} ");
}else{
//关联店铺查询
$info = pdo_fetchall("SELECT a.id as goods_id,b.id,b.location FROM "
. tablename(PDO_NAME."bargain_activity")
." as a RIGHT JOIN "
.tablename(PDO_NAME."merchantdata")
." as b ON a.sid = b.id WHERE {$where} ");
$info = Store::getstores($info, $lng, $lat, 2);
if($is_total == 1) $total = count($info);
$info = array_slice($info,$page_start,$page_index);
}
#5、循环处理信息
foreach ($info as $key => &$val) {
//获取最新的商品信息
$val = WeliamWeChat::getHomeGoods(7, $val['goods_id']);
$val['url'] = h5_url('pages/subPages/goods/index',['type'=>7,'id'=>$val['id']]);
//添加店铺链接
$val['shop_url'] = h5_url('pages/mainPages/store/index',['sid'=>$val['sid']]);
$val['distance'] = Store::shopLocation($val['sid'], $lng, $lat);
if($is_vip > 0){
$val['price'] = sprintf("%.2f",$val['price'] - $val['discount_price']);
}
//删除多余的信息
unset($val['user_list']);
unset($val['address']);
unset($val['user_num']);
unset($val['totalnum']);
unset($val['sid']);
}
#6、信息拼装
if($is_total == 1){
$data['total'] = ceil($total / $page_index);
$data['list'] = $info;
$this->renderSuccess('砍价商品信息列表', $data);
}
$this->renderSuccess('砍价商品信息列表',$info);
}
/**
* Comment: 参加砍价
* Author: zzw
* Date: 2019/8/23 14:57
*/
public function launchBargain(){
global $_W,$_GPC;
#1、参数获取
$_GPC['id'] ? $id = $_GPC['id'] : $this->renderError('缺少参数:id');//商品id
//判断绑定手机
$mastmobile = unserialize($_W['wlsetting']['userset']['plugin']);
if (empty($_W['wlmember']['mobile']) && in_array('bargain',$mastmobile)){
$this->renderError('未绑定手机号');
}
#2、判断是否已经参与当前砍价活动
$is_participate = pdo_get(PDO_NAME."bargain_userlist"
,['activityid'=>$id,'mid'=>$_W['mid']]);
if($is_participate) $this->renderError("每人只能参加一次哦!");
#3、获取商品信息
$goods = pdo_get(PDO_NAME."bargain_activity",['id'=>$id]
,['sid','oldprice','joinlimit','starttime','usedatestatus','week','day','status','endtime','vipstatus','level']);
if(!$goods) $this->renderError('商品不存在');
#4、判断是否开始/结束
if($goods['starttime'] > time()) $this->renderError('活动未开始');
if($goods['endtime'] < time()) $this->renderError('活动已结束');
if($goods['status'] != 2) $this->renderError('活动未在进行中!');
//判断时间
if($goods['usedatestatus'] > 0){
$check = WeliamWeChat::checkUseDateStatus($goods['usedatestatus'],$goods['week'],$goods['day']);
if(empty($check)){
$this->renderError('今日活动未在进行中');
}
}
#5、判断参与人数是否已满
if($goods['joinlimit'] > 0){
$total = pdo_fetchcolumn("SELECT COUNT(*) FROM ".tablename(PDO_NAME."bargain_userlist") ." WHERE activityid = {$id} " );
if($total >= $goods['joinlimit']) $this->renderError("参加人数已到上限!");
}
//判断会员
if($goods['vipstatus'] == 2){
$level = unserialize($goods['level']);
$halfflag = WeliamWeChat::VipVerification($_W['mid']);
if(empty($halfflag)){
$this->renderError('请先开通会员才能参加此活动');
}else if(!empty($level)){
if(!in_array($halfflag['levelid'],$level)){
$this->renderError('您所在的会员等级无法参加此活动');
}
}
}
#6、生成参与砍价的信息
$data = [
'uniacid'=>$_W['uniacid'],//
'aid'=>$_W['aid'],//
'activityid'=>$id,//商品id
'merchantid'=>$goods['sid'],//商户id
'mid'=>$_W['mid'],//用户id
'status'=>1,//状态 1进行中 2支付 3已失败
'price'=>$goods['oldprice'],//当前价格
'createtime'=>time(),//创建时间
'updatetime'=>time(),//修改时间
];
#7、储存参与信息
$res = pdo_insert(PDO_NAME."bargain_userlist",$data);
if ($res) $this->renderSuccess('参与成功',['id'=>pdo_insertid()]);
else $this->renderError('参与失败');
}
/**
* Comment: 用户参加砍价具体信息
* Author: zzw
* Date: 2019/8/23 13:49
*/
public function detail(){
global $_W,$_GPC;
#1、 参数接收
$id = $_GPC['id'] ? : 0;
$order_id = $_GPC['order_id'] ? : 0;
if(!$id && !$order_id) $this->renderError("缺少参数:id");
#2、条件生成
if($id) $where = " WHERE a.id = {$id} ";
else $where = " WHERE a.orderid = {$order_id} ";
if(!empty($id)){
$usermid = pdo_getcolumn(PDO_NAME.'bargain_userlist',array('id'=>$id),'mid');
}else{
$usermid = pdo_getcolumn(PDO_NAME.'bargain_userlist',array('orderid'=>$order_id),'mid');
}
$vip = WeliamWeChat::VipVerification($usermid);
$vipid = $vip['id'];
$viplevelid = $vip['levelid'];
#3、获取信息
$field = "a.activityid as goods_id,b.stock,b.thumbs,b.name,u.nickname,u.avatar,b.endtime,a.price,b.price as goods_price,b.oldprice,b.viparray,b.vipstatus,b.bar_bgc,b.bar_image,
(b.stock - (SELECT count(id) FROM ".tablename('wlmerchant_order')
." WHERE fkid = a.activityid AND plugin = 'bargain' AND status IN (0,1,2,3,4,8,6,7,9))) as stk,
m.storename,m.address,m.location,m.mobile,a.id,a.mid,b.submitmoneylimit,a.status,a.orderid";
$sql = "SELECT {$field} FROM ".tablename(PDO_NAME."bargain_userlist")
." as a RIGHT JOIN ".tablename(PDO_NAME."bargain_activity")
." as b ON a.activityid = b.id RIGHT JOIN ".tablename(PDO_NAME."merchantdata")
." as m ON a.merchantid = m.id RIGHT JOIN ".tablename(PDO_NAME."member")
." as u ON a.mid = u.id ".$where;
$info = pdo_fetch($sql);
if(!$info) $this->renderError('砍价信息不存在!');
//砍价信息处理
if($info['vipstatus'] == 1 && $vipid > 0){
$vipdiscount = WeliamWeChat::getVipDiscount($info['viparray'],$viplevelid);
$info['goods_price'] = sprintf("%.2f",$info['goods_price'] - $vipdiscount);
}
//商品图片处理
$info['location'] = unserialize($info['location']);
$info['thumbs'] = unserialize($info['thumbs']);
if(is_array($info['thumbs']) && count($info['thumbs']) > 0){
foreach($info['thumbs'] as $thumbK => &$thumbV){
$thumbV = tomedia($thumbV);
}
}
if(!empty($info['bar_image'])){
$info['bar_image'] = tomedia($info['bar_image']);
}
if(empty($info['bar_bgc'])){
$info['bar_bgc'] = '#68d3ff';
}
#4、获取帮砍记录
$info['list'] = pdo_fetchall("SELECT a.mid,b.nickname,b.avatar,FROM_UNIXTIME(a.createtime,'%Y-%m-%d %H:%i:%S') as createtime,a.bargainprice as price FROM "
.tablename(PDO_NAME."bargain_helprecord")
." as a LEFT JOIN ".tablename(PDO_NAME."member")
." as b ON a.mid = b.id WHERE a.userid = {$info['id']} ORDER BY a.createtime DESC ");
#5、判断当前用户是否砍价
$info['is_bargain'] = 0;//0=未砍价 1=已砍价
if (is_array($info['list']) && count($info['list']) > 0){
$ids = array_column($info['list'],'mid');
if(in_array($_W['mid'],$ids)) $info['is_bargain'] = 1;
}
#6、获取已砍价的百分比
$total = sprintf( "%.2f",$info['oldprice'] - $info['goods_price']);//最多可以砍掉的价格
$price = sprintf( "%.2f",$info['oldprice'] - $info['price']);//已经砍掉的价格
$info['proportion'] = sprintf("%.2f",$price / $total);
$info['is_originator'] = $info['mid'] == $_W['mid'] ? 1 : 0;//0=不是发起者;1=是发起者
//判断是否可以出手购买
if($info['status'] == 1 && $info['price'] <= $info['submitmoneylimit'] && $info['is_originator'] == 1 && empty($info['orderid'])){
$info['buytip'] = 1;
}
$this->renderSuccess('用户参加砍价具体信息',$info);
}
/**
* Comment: 砍价操作
* Author: zzw
* Date: 2019/8/23 18:04
*/
public function cut(){
global $_W,$_GPC;
#1、参数获取
$_GPC['id'] ? $id = $_GPC['id'] : $this->renderError('缺少参数:id');//参与砍价的信息id
$tableHelp = PDO_NAME."bargain_helprecord";
$tableList = PDO_NAME."bargain_userlist";
//判断是否绑定手机
$mastmobile = unserialize($_W['wlsetting']['userset']['plugin']);
if (empty($_W['wlmember']['mobile']) && in_array('helpbargain',$mastmobile)){
$this->renderError('未绑定手机号');
}
#2、获取砍价参与信息
MysqlFunction::setTrans(4);
MysqlFunction::startTrans();
$info = pdo_get($tableList,['id'=>$id] ,['activityid','mid','status','price','orderid']);
if(!$info) $this->renderError('参加信息不存在');
if($info['status'] != 1) $this->renderError('当前已不可进行砍价!');
#3、判断当前用户是否已砍过
$is_cut = pdo_get($tableHelp,['userid'=>$id,'mid'=>$_W['mid']]);
if($is_cut) $this->renderError("请不要重复操作!");
#4、设置信息获取
$set = Setting::agentsetting_read("bargainset");
$day = date("Y-m-d",time());
$dayStart = strtotime($day." 00:00:00");
$dayEnd = strtotime($day." 23:59:59");
#5、判断当前用户今日砍价次数是否已到上限
if($set['syslimit'] > 0){
$is_max = pdo_fetchcolumn("SELECT COUNT(*) FROM ".tablename($tableHelp)
." WHERE mid = {$_W['mid']} AND createtime > {$dayStart} AND createtime < {$dayEnd} ");
if($is_max >= $set['syslimit']) $this->renderError('今日砍价次数已到上限!');
}
#6、获取商品信息
$goods = pdo_get(PDO_NAME."bargain_activity",['id'=>$info['activityid']]
,['helplimit','dayhelpcount','onlytimes','viparray','usedatestatus','week','day','status','vipstatus','rules','price','endtime',]);
//判断时间
if($goods['usedatestatus'] > 0){
$check = WeliamWeChat::checkUseDateStatus($goods['usedatestatus'],$goods['week'],$goods['day']);
if(empty($check)){
$this->renderError('今日活动未在进行中');
}
}
#7、更具用户是否为会员获取低价信息
$vipInfo = WeliamWeChat::VipVerification($info['mid']);
$vipId = $vipInfo['id'];
$vipLevel = $vipInfo['levelid'];
if($goods['vipstatus'] ==1 && $vipId > 0){
$vipdiscount = WeliamWeChat::getVipDiscount($goods['viparray'],$vipLevel);
$floorPrice = sprintf("%.2f", $goods['price'] - $vipdiscount);
}else{
$floorPrice = $goods['price'];
}
#8、判断是否已经到达低价
if($info['price'] <= $floorPrice) $this->renderError("已被砍到底价!");
if($goods['endtime'] <= time()) $this->renderError('活动已结束!');
if($goods['status'] != 2) $this->renderError('活动未在进行中!');
#9、好友帮砍限制数量 限制当前活动商品,最多多少好友帮忙砍价.0或空则无限
if($goods['helplimit'] > 0){
$totalNum = pdo_fetchcolumn("SELECT COUNT(*) FROM ".tablename($tableHelp) ." WHERE userid = {$id} ");
if($totalNum >= $goods['helplimit']) $this->renderError('帮砍好友已到上限!');
}
#10、每天帮砍好友人数限制 限制每天帮助的好友数量.0或空则无限
if($goods['dayhelpcount'] > 0){
$dayTotalNum = pdo_fetchcolumn("SELECT COUNT(*) FROM ".tablename($tableHelp)
." WHERE userid = {$id} AND authorid != mid AND createtime > {$dayStart} AND createtime < {$dayEnd} ");
if($dayTotalNum >= $goods['dayhelpcount']) $this->renderError('今日帮砍好友已到上限!');
}
#11、判断该商品每人可砍价次数
if($goods['onlytimes'] > 0){
$dayTotalNum = pdo_fetchcolumn("SELECT COUNT(*) FROM ".tablename($tableHelp)
." WHERE activityid = {$info['activityid']} AND mid = {$_W['mid']} AND authorid != {$_W['mid']} ");
if($dayTotalNum >= $goods['onlytimes']) $this->renderError('当前商品的帮砍次数已达上限!');
}
#12、生成应该砍掉的价格
$ruleList = unserialize($goods['rules']);
$startPrice = 0.5;
$endPrice = 1;
if(is_array($ruleList) && count($ruleList) > 0){
$orderWhere = array_column($ruleList,'rule_pice');
array_multisort($orderWhere, SORT_DESC, $ruleList);
foreach($ruleList as $priceK => $priceV){
if($info['price'] >= $priceV['rule_pice']){
$startPrice = $priceV['rule_start'];
$endPrice = $priceV['rule_end'];
break;
}
}
}
$price = sprintf("%.2f",$startPrice+mt_rand()/mt_getrandmax()*($endPrice-$startPrice));
if($price < 0.01){
$price = 1;
}
$newPayPrice = sprintf("%.2f",$info['price'] - $price);//新的支付价格
if($newPayPrice < $floorPrice){
$price = sprintf("%.2f",$info['price'] - $floorPrice);
$newPayPrice = sprintf("%.2f",$info['price'] - $price);//新的支付价格
}
#13、修改参与砍价信息中的价格信息
$save = pdo_update($tableList,['price'=>$newPayPrice],['id'=>$id]);
if(!$save){
MysqlFunction::rollback();
$this->renderError('砍价失败,请刷新重新!');
}
#14、储存砍价记录信息
$data = [
'uniacid' => $_W['uniacid'] ,
'aid' => $_W['aid'] ,
'activityid' => $info['activityid'] ,//商品id
'userid' => $id ,//参与信息的id
'authorid' => $info['mid'] ,//发起人id
'mid' => $_W['mid'] ,//当前用户id
'bargainprice' => $price ,//砍价价格
'afterprice' => $newPayPrice ,//砍后价格
'createtime' => time() ,//创建时间
];
$res = pdo_insert($tableHelp,$data);
if($res){
if($info['mid'] != $_W['mid']){
//帮砍操作 发送信息通知砍价发起人
$modelData = [
'first' => '' ,
'type' => '砍价提醒' ,//业务类型
'content' => '您的好友'.$_W['wlmember']['nickname'].'成功帮您砍下'.$price.'元' ,//业务内容
'status' => '当前价格'.$newPayPrice."" ,//处理结果
'time' => date("Y-m-d H:i:s",$data['createtime']) ,//操作时间
'remark' => ''
];
$link = h5_url('pages/subPages/bargin/barginDetail/barginDetail',['bargin_id'=>$id]);
TempModel::sendInit('service',$info['mid'],$modelData,$_W['source'],$link);
}
MysqlFunction::commit();
$this->renderSuccess('砍价成功',['price'=>$price]);
}else{
MysqlFunction::rollback();
$this->renderError('砍价失败,请刷新重新!');
}
}
/**
* Comment: 获取砍价分类列表
* Author: wlf
* Date: 2020/09/24 14:06
*/
public function cateList(){
global $_W , $_GPC;
$list = pdo_getall('wlmerchant_bargain_category',array('uniacid' => $_W['uniacid'],'aid' => $_W['aid'],'is_show' => 0),array('id','name'), '' , 'sort DESC');
$this->renderSuccess('砍价分类',$list);
}
}