php砍价算法逻辑

/**
 * 砍价算法---自砍一刀
 */
public function self_cut(){
    $openid =$this->openid;
    $goods_id = Request::instance()->post('goods_id');
    $selfInfo = $this->selfkjObj->where(['openid'=>$openid,'goods_id'=>$goods_id])->find();
    //1.查询是否为自己砍过价
        if ($selfInfo['is_kj']==1){
            echo json_encode([
                'status' => 0,
                'message' => '已经为自己砍过价'
            ]);exit;
        }else{

    //2.查询已经砍了多少刀
        $zhukan_count=$selfInfo['kj_num']-$selfInfo['shengyu_kj_num']; //

    //3.查询一共可以砍多少刀
        $goodskj_count=$selfInfo['kj_num'];  //


    //4.判断砍价金额是否还能再砍
    //查询剩下还能砍的金额
    $zhukan_sum=$selfInfo['goods_now_money']-$selfInfo['goods_final_money'];
    if ($selfInfo['goods_now_money']==$selfInfo['goods_final_money']){
        echo json_encode([
            'status' => 2,
            'message' => "该商品已被砍到底价啦"
        ]);exit;
    }

    //5.判断砍价次数是否还能再砍
        if($selfInfo['shengyu_kj_num']==0){   //砍价的数量超过了并且不是不限
            echo json_encode([
                'status' => 1,
                'message' => '此商品只能砍价'.$goodskj_count."次"
            ]);exit;
        }



    //6.算法算出来这一刀多少钱
        $total=$selfInfo['goods_now_money']-$selfInfo['goods_final_money']; //砍价总额
        $num=$selfInfo['shengyu_kj_num'];                // 需要砍价人数

        if($num>1){
            $min=0.01;     //每个人最少能收到10元
            $safe_total = ($total  - ($num-1) * $min)/($num-1);//随机安全上限
            $total = mt_rand($min * 100, $safe_total * 100) / 100;
            $total = sprintf("%.2f", $total);   //砍掉的金额
        }else{
            $total = $selfInfo['goods_now_money']-$selfInfo['goods_final_money'];
        }


    //7.把砍价信息存入帮砍表并且更新自己的数据
            //自砍表更新
            $self['id']=$selfInfo['id'];
            $self['goods_now_money']=$selfInfo['goods_now_money']-$total;
            $self['shengyu_kj_num']=$selfInfo['shengyu_kj_num']-1;
            $self['is_kj']=1;
            $res1 = $this->selfkjObj->update($self);

            //帮砍表添加
            $help['self_id']= $self['id'];
            $help['is_kj']= 1;
            $help['openid'] = $openid;
            $help['goods_id'] = $selfInfo['goods_id'] ;
            $help['operation_id'] = $selfInfo['operation_id'];
            $help['uid']= $selfInfo['uid'];
            $help['nickname'] = $this->nickname;
            $help['goods_now_money'] = $self['goods_now_money'];
            $help['goods_kj_money']=$total;
            $help['addtime']=time();
            $res2 = $this->helpkjObj->insert($help);

            if ($res1 && $res2){
                echo json_encode([
                    'status' => 3,
                    'message' => "您为自己砍掉".$total."商品现在的价格为:".$help['goods_now_money']."还需要砍:".$self['shengyu_kj_num']."刀",
                    'kj_money'=>$total,
                    'shengyu_kj_num'=>$self['shengyu_kj_num'],  
                    'goods_now_money'=> $help['goods_now_money'],
                    'self'=> base64_encode($selfInfo['id'])
                ]);exit;
            }else{
                echo json_encode([
                    'status' => 4,
                    'message' => "未知错误,砍价失败,请重试"
                ]);exit;
            }


    }
}

/**
 * 砍价算法 --- 帮他砍价
 */
public function help_cut(){

        $goods_id = input('goods_id');
        $openid =$this->openid;
        $self_id=input('self_id');

        $selfInfo = $this->selfkjObj->where(['id'=>$self_id])->find();
        $helpInfo = $this->helpkjObj->where(['openid'=>$openid,'self_id'=>$self_id])->find();

        //1.查询是否为朋友砍过价
        if ($helpInfo['is_kj']==1){
            echo json_encode([
                'status' => 0,
                'message' => '您已经帮他砍过价啦'
            ]);exit;
        }else{

            //2.查询已经砍了多少刀
            $zhukan_count=$selfInfo['kj_num']-$selfInfo['shengyu_kj_num']; //

            //3.查询一共可以砍多少刀
            $goodskj_count=$selfInfo['kj_num'];  //


            //4.判断砍价金额是否还能再砍
            //查询剩下还能砍的金额
            $zhukan_sum=$selfInfo['goods_now_money']-$selfInfo['goods_final_money'];
            if ($selfInfo['goods_now_money']==$selfInfo['goods_final_money']){
                echo json_encode([
                    'status' => 2,
                    'message' => "该商品已被砍到底价啦"
                ]);exit;
            }

            //5.判断砍价次数是否还能再砍
            if($selfInfo['shengyu_kj_num']==0){   //砍价的数量超过了并且不是不限
                echo json_encode([
                    'status' => 1,
                    'message' => '此商品只能砍价'.$goodskj_count."次"
                ]);exit;
            }



            //6.算法算出来这一刀多少钱
            $total=$selfInfo['goods_now_money']-$selfInfo['goods_final_money']; //总额
            $num=$selfInfo['shengyu_kj_num'];// 砍价人数

            if($num>1){
                $min=0.01;//每个人最少能收到10元
                $safe_total = ($total  - ($num-1) * $min)/($num-1);//随机安全上限
                $total = mt_rand($min * 100, $safe_total * 100) / 100;
                $total = sprintf("%.2f", $total);   //砍掉的金额
            }else{
                $total = $selfInfo['goods_now_money']-$selfInfo['goods_final_money'];
            }


            //7.把砍价信息存入帮砍表并且更新主砍表的数据
            //自砍表更新
            $self['id']=$selfInfo['id'];
            $self['goods_now_money']=$selfInfo['goods_now_money']-$total;
            $self['shengyu_kj_num']=$selfInfo['shengyu_kj_num']-1;
            $res1 = $this->selfkjObj->update($self);

            //帮砍表添加
            $help['self_id']= $self['id'];
            $help['is_kj']= 1;
            $help['openid'] = $openid;
            $help['goods_id'] = $selfInfo['goods_id'] ;
            $help['operation_id'] = $selfInfo['operation_id'];
            $help['uid']= $selfInfo['uid'];
            $help['nickname'] = $this->nickname;
            $help['goods_now_money'] = $self['goods_now_money'];
            $help['goods_kj_money']=$total;
            $help['addtime']=time();
            $res2 = $this->helpkjObj->insert($help);

            if ($res1 && $res2){
                echo json_encode([
                    'status' => 3,
                    'message' => "您帮朋友砍掉".$total."商品现在的价格为:".$help['goods_now_money']."还需要砍:".$self['shengyu_kj_num']."刀",
                    'kj_money'=>$total,
                    'shengyu_kj_num'=>$self['shengyu_kj_num'],
                    'goods_now_money'=> $help['goods_now_money']
                ]);exit;
            }else{
                echo json_encode([
                    'status' => 4,
                    'message' => "未知错误,砍价失败,请重试"
                ]);exit;
            }


        }

}



猜你喜欢

转载自blog.csdn.net/qd55815634/article/details/78533567