商品砍价功能实现

    public static function addressQue($uid,$bargain_id){
        //查询砍价商品ID
        $bargainData = Storebargain::where('id',$bargain_id)->field('price,num,bargain_min_price,bargain_max_price')->find()->toArray();
        //赋值
        list($price,$num,$bargain_min_price) = array_values($bargainData);
        //计算帮砍得价格
        if (!is_numeric($num) || $num != (int)$num || $num <= 0) {
            return fail('400', 'uid参数错误');
        }
        if ($num > 1) {
            //初次砍价为总金额的97%
            $bar = $price * 0.97;
            $bar = sprintf("%.2f", $bar);
        }
        $time = time();
        $data = [
            'uid' => $uid,
            'bargain_id' => $bargain_id,
            'bargain_price_min' => $bargain_min_price,
            'bargain_price' => $price,
            'price' => $bar,
            'status' => 1,
            'num' => 5,
            'add_time' => $time,
            'is_del' => 0
        ];
        $bargainRes = StoreBargainUser::insert($data);
        if (!$bargainRes){
            return fail(500,'砍价失败','');
        }
        //获取用户参与砍价的信息
        $bargain_user_id = StoreBargainUser::where('uid',$uid)->where('bargain_id',$bargain_id)->field('id')->find()->toArray();
        $bargainHelpData = [
            'uid' => $uid,
            'bargain_id' => $bargain_id,
            'bargain_user_id' => $bargain_user_id['id'],
            'price' => $bar,
            'add_time' => $time
        ];
        $bargain_help_data = StoreBargainUserHelp::insert($bargainHelpData);
        if (!$bargain_help_data){
            return fail(500,'砍价失败','');
        }
        $bargainData = StoreBargainUser::with(['Users','Storebargain'])->where('uid',$uid)->where('bargain_id',$bargain_id)->find()->toArray();
        return success(200,"您为自己砍掉".$bar."元,"."商品现在的价格为:".sprintf("%.2f",$price - $bar)."元,赶紧分享好友帮砍!",$bargainData);
    }

    /**
     * 好友帮砍页面
     * @param $uid
     * @param $bargain_user_id
     * @return \think\response\Json
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public static function FriendsHackingPage($uid,$bargain_user_id){
        //商品信息
        $bargainShop = StoreBargainUser::with(['Storebargain'])->where('uid',$uid)->where('id',$bargain_user_id)->find();
        //帮砍信息
        $record = StoreBargainUserHelp::with(['User'])->where('bargain_user_id',$bargain_user_id)->where('bargain_id',$bargainShop['Storebargain']['id'])->select();
        $price = 0;
        foreach ($record as $val){
            $price = $price + $val['price'];
        }
        //砍掉的价钱
        $price = sprintf("%.2f", $price);
        //剩余百分比
        $percentage =  sprintf("%.2f", 100 - ($price/$bargainShop['Storebargain']['price'])*100);
        $data = ['price' => $price,'percentage' => $percentage,'bargainShop' => $bargainShop,'record' => $record];
        return $data;
    }

    /**
     * 好友帮砍
     * @param $uid
     * @param $bargain_user_id
     * @return string|\think\response\Json
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public static function BargainHelp($uid,$bargain_user_id){
        //判断用户是否帮忙砍过
        $bargainHelpData = StoreBargainUserHelp::where('uid',$uid)->where('bargain_user_id',$bargain_user_id)->find();
        if($bargainHelpData){
            return fail( 500, '您的助力次数已达上限','');
        }
        $bargainFirstData = StoreBargainUserHelp::with(['Storebargain','StoreBargainUser'])->where('bargain_user_id',$bargain_user_id)->order('price','asc')->find()->toArray();
        $dataAll = StoreBargainUserHelp::where('bargain_user_id',$bargain_user_id)->field('price')->select()->toArray();
        //已砍掉的价格
        $pricecon = 0;
        foreach ($dataAll as $val){
            $pricecon = $pricecon + $val['price'];
        }
        //继续砍价的价格
        $price = $bargainFirstData['Storebargain']['price'] - $pricecon;
        //判断砍价商品状态
        $state = StoreBargainUser::where('id',$bargain_user_id)->find()->toArray();
        if ($state['status'] == 3){
            return success(200,'该砍价商品已砍价成功','');
        }elseif ($state['status'] == 2){
            return success(200,'参与活动失败','');
        }
        $bargain_min_price = $bargainFirstData['Storebargain']['bargain_min_price'];
        $bargain_max_price = $bargainFirstData['Storebargain']['bargain_max_price'];
        $num = $bargainFirstData['StoreBargainUser']['num'];
        if (!is_numeric($num) || $num != (int)$num || $num < 0) {
            return fail('400', '砍价次数参数错误');
        }
        $bar = self::ACE($num,$bargain_min_price,$bargain_max_price,$price,$bargain_user_id);
        $data = [
            'uid' => $uid,
            'bargain_id' => $bargainFirstData['bargain_id'],
            'bargain_user_id' => $bargain_user_id,
            'price' => $bar,
            'add_time' => time()
        ];
        $res = StoreBargainUserHelp::insert($data);
        if (!$res){
            return fail(500,'帮砍失败','');
        }
        //修改砍价次数
        StoreBargainUser::where('id',$bargain_user_id)->update(['num' => $num - 1]);
        $bargainFirstData = StoreBargainUserHelp::with(['Storebargain','StoreBargainUser'])->where('bargain_user_id',$bargain_user_id)->where('uid',$uid)->find();
        return success(200,'帮砍成功',$bargainFirstData);
    }

    /**
     * 砍价完成页面
     * @param $uid
     * @param $bargain_user_id
     * @return array
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public static function SuccessfulBargaining($uid,$bargain_user_id){
        //商品信息
        $bargainShop = StoreBargainUser::with(['Storebargain'])->where('uid',$uid)->where('id',$bargain_user_id)->find()->toArray();
        $bargainShopData = Storebargain::select();
        $user = User::where('uid',$uid)->find()->toArray();
        //生成订单
        $data = [
            'order_id' => rand(10000,99999).time(),
            'uid' => $uid,
            'real_name' => $user['real_name'],
            'user_phone' => $user['phone'],
            'user_address' => $user['addres'],
            'pay_type' => 1,
            'total_price' => 0,
            'add_time' => time(),
            'status' => 0,
            'mark' => '砍价',
            'unique' => rand(10000,99999),
            'cost' => $bargainShop['price']
        ];
        StoreOrder::insert($data);
        return ['bargainShop' => $bargainShop,'bargainShopData' => $bargainShopData];
    }

    /**
     * @param $num
     * @param $bargain_min_price
     * @param $bargain_max_price
     * @param $price
     * @param $bargain_user_id
     * @return string|void
     */
    public static function ACE($num,$bargain_min_price,$bargain_max_price,$price,$bargain_user_id){
        if($num > 1){
            if ($price < $bargain_min_price || $price > $bargain_min_price && $price < $bargain_max_price){
                StoreBargainUser::where('id',$bargain_user_id)->update(['status' => 3]);
                return $bar = sprintf("%.2f",$price);
            }elseif($price > $bargain_max_price){
                return $bar = sprintf("%.2f",rand($bargain_min_price * 100, $bargain_max_price * 100) / 100);
            }
        }elseif ($num == 1){
            if ($price < $bargain_min_price || $price > $bargain_min_price && $price < $bargain_max_price){
                StoreBargainUser::where('id',$bargain_user_id)->update(['status' => 3]);
                return $bar = sprintf("%.2f",$price);
            }else{
                StoreBargainUser::where('id',$bargain_user_id)->update(['status' => 3]);
                return $bar = sprintf("%.2f",rand($bargain_min_price * 100, $bargain_max_price * 100) / 100);
            }
        }
    }

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值