商品砍价功能实现

这个博客详细介绍了砍价功能的实现过程,包括用户自己砍价和好友帮砍的逻辑。用户首次砍价时,价格按97%计算;好友帮砍时,会根据剩余金额和预设范围进行随机计算。当砍价达到最低价或超过最大价时,状态会更新。同时,博客还涵盖了砍价完成后生成订单的流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    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);
            }
        }
    }

### 关于Android Studio中实现商品砍价界面的设计与代码示例 在Android开发中,设计一个商品砍价界面需要结合用户交互、动画效果以及后端逻辑处理。以下是一个基本的实现思路和代码示例。 #### 1. 用户界面设计 商品砍价界面通常包含以下元素: - 商品图片展示 - 商品价格显示(原价与现价) - 砍价按钮 - 倒计时或剩余次数提示 - 砍价结果反馈(成功或失败) 可以使用`ConstraintLayout`来布局这些元素,确保界面灵活且适配不同屏幕尺寸。 ```xml <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 商品图片 --> <ImageView android:id="@+id/product_image" android:layout_width="0dp" android:layout_height="200dp" android:scaleType="centerCrop" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" /> <!-- 商品价格 --> <TextView android:id="@+id/price_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="原价:¥100\n现价:¥80" android:textSize="18sp" android:gravity="center" app:layout_constraintTop_toBottomOf="@id/product_image" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" /> <!-- 砍价按钮 --> <Button android:id="@+id/bargain_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="立即砍价" app:layout_constraintTop_toBottomOf="@id/price_text" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" /> <!-- 剩余次数或倒计时 --> <TextView android:id="@+id/times_left_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="剩余次数:3次" android:textSize="16sp" app:layout_constraintTop_toBottomOf="@id/bargain_button" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> ``` #### 2. 动画效果实现 为了提升用户体验,可以在点击“砍价”按钮时添加动画效果。例如,使用`ValueAnimator`实现数字变化动画。 ```java import android.animation.ValueAnimator; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class BargainActivity extends AppCompatActivity { private TextView priceText; private Button bargainButton; private int currentPrice = 80; // 初始价格 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_bargain); priceText = findViewById(R.id.price_text); bargainButton = findViewById(R.id.bargain_button); bargainButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { animatePriceChange(); } }); } private void animatePriceChange() { final int newPrice = currentPrice - 5; // 每次减少5元 ValueAnimator animator = ValueAnimator.ofInt(currentPrice, newPrice); animator.setDuration(1000); // 动画持续时间1秒 animator.addUpdateListener(animation -> { int animatedValue = (int) animation.getAnimatedValue(); priceText.setText("现价:¥" + animatedValue); }); animator.start(); currentPrice = newPrice; } } ``` #### 3. 后端逻辑处理 后端需要记录用户的砍价次数、商品状态等信息,并通过API接口返回给前端。以下是一个简单的API调用示例: ```java import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; public class ApiClient { private static final String BASE_URL = "https://example.com/api/"; public interface ApiService { @POST("bargain") Call<BargainResponse> bargain(@Body BargainRequest request); } public static void performBargain(String productId, int userId) { Retrofit retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build(); ApiService apiService = retrofit.create(ApiService.class); BargainRequest request = new BargainRequest(productId, userId); apiService.bargain(request).enqueue(new Callback<BargainResponse>() { @Override public void onResponse(Call<BargainResponse> call, Response<BargainResponse> response) { if (response.isSuccessful()) { BargainResponse result = response.body(); // 更新UI,显示砍价结果 } } @Override public void onFailure(Call<BargainResponse> call, Throwable t) { // 处理网络错误 } }); } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值