Goods

主xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
    <com.handmark.pulltorefresh.library.PullToRefreshScrollView
        android:id="@+id/pull_to_refresh_scrollview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">


            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="240dp">


                <android.support.v4.view.ViewPager
                    android:id="@+id/goods_viewpager"
                    android:layout_width="match_parent"
                    android:layout_height="240dp"></android.support.v4.view.ViewPager>


                <LinearLayout
                    android:id="@+id/ll_points"
                    android:layout_width="match_parent"
                    android:layout_height="40dp"
                    android:layout_alignParentBottom="true"
                    android:background="#0f0"
                    android:gravity="center"
                    android:orientation="horizontal"></LinearLayout>
            </RelativeLayout>


            <com.example.day_0524.MyListView
                android:id="@+id/goods_listview"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"></com.example.day_0524.MyListView>


        </LinearLayout>




    </com.handmark.pulltorefresh.library.PullToRefreshScrollView>




</LinearLayout>


子布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:orientation="horizontal">


    <ImageView
        android:id="@+id/goods_pic"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:scaleType="centerCrop"
        android:src="@mipmap/ic_launcher" />


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:orientation="vertical">


        <TextView
            android:id="@+id/goods_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:maxLines="2"
            android:text="标题"
            android:textSize="20sp" />


        <TextView
            android:id="@+id/goods_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="价格"
            android:textColor="#FF0000" />
    </LinearLayout>


</LinearLayout>


java  代码

public class GoodsActivity extends AppCompatActivity {
   private PullToRefreshScrollView scrollView;
   private ViewPager viewPager;
    private List<ImageView> ads = new ArrayList<>();//轮播图集合
    private List<ImageView> ps = new ArrayList<>();//小圆点集合
    List<GoodsBean.DataBean> list = new ArrayList<>();//商品集合
    private MyAdapter myAdapter;
    private int page = 1;//页数
    private GoodsAdapter goodsAdapter;
    private LinearLayout ll_points;
    private MyHandler myHandler = new MyHandler();
    private MyListView listView;
    private List<AdBean.DataBean> data;


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        setContentView(R.layout.activity_goods);
   initView();
        goodsAdapter = new GoodsAdapter(list, GoodsActivity.this);
        listView.setAdapter(goodsAdapter);
        getDataFromNet();
    }
   懒加载   放到Fragment用这个,  平时Activity不用这个

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser){
        getDataFromNet();
    }
}

    private void initView() {
        scrollView = findViewById(R.id.pull_to_refresh_scrollview);
        viewPager = findViewById(R.id.goods_viewpager);
        ll_points = findViewById(R.id.ll_points);
        listView = findViewById(R.id.goods_listview);
        //刷新
        scrollView.setMode(PullToRefreshBase.Mode.BOTH);
        scrollView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ScrollView> refreshView) {
                //下拉
                page = 1;
                getGoodsListFromNet();
            }


            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ScrollView> refreshView) {
                //上啦
                page++;
                getGoodsListFromNet();
            }
        });


        //Viewpager   点击事件
        viewPager.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        myHandler.removeCallbacksAndMessages(null);
                        break;
                    case MotionEvent.ACTION_UP:
                        myHandler.sendEmptyMessageDelayed(0, 1000);
                        break;
                    case MotionEvent.ACTION_MOVE:
                        myHandler.removeCallbacksAndMessages(null);
                        break;
                }
                return false;
            }
        });


    }
   //设置原点
    class MyHandler extends Handler{
        @Override
        public void handleMessage(Message msg) {
            viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
            //设置小圆点
            for (int i = 0; i < ps.size(); i++) {


                if (i == viewPager.getCurrentItem() % ps.size()) {
                    ps.get(i).setSelected(true);
                } else {
                    ps.get(i).setSelected(false);
                }
            }
            myHandler.sendEmptyMessageDelayed(0, 1000);
        }
      }
      //轮播图数据
      private void  getDataFromNet(){
          HttpUtils httpUtils = HttpUtils.getInstance();
          httpUtils.get(HttpConfig.AD_URL);
          httpUtils.setHttpUtilsListener(new HttpUtils.HttpUtilListener() {
              @Override
              public void getSuccess(String json) {
                  Gson gson = new Gson();
                  AdBean bean = gson.fromJson(json, AdBean.class);
                  data = bean.getData();
                  for (int i = 0; i< data.size(); i++){
                      String icon = data.get(i).getIcon();
                      ImageView imageView = new ImageView(GoodsActivity.this);
                         //缩放
                      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                      ImageLoader.getInstance().displayImage(icon, imageView, MyApp.getOptions());
                       ads.add(imageView);
                       //点击吐司
                      final int finalI = i;
                      imageView.setOnClickListener(new View.OnClickListener() {
                          @Override
                          public void onClick(View v) {
                              Toast.makeText(GoodsActivity.this, "--" + data.get(finalI),Toast.LENGTH_LONG ).show();
                          }
                      });
                      //添加小圆点
                      ImageView p = new ImageView(GoodsActivity.this);
                      p.setImageResource(R.drawable.ad_selector);


                      ps.add(p);
                      //设置小圆点间距
                      LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                              LinearLayout.LayoutParams.WRAP_CONTENT);
                      lp.setMargins(15, 0, 0, 0);
                      p.setLayoutParams(lp);
                      //将小圆点加入的布局里面
                      ll_points.addView(p, i);


                  }
                  //默认第一个选中
                  ps.get(0).setSelected(true);
                  //设置适配器
                  //轮播图适配器
                  myAdapter = new MyAdapter(ads);
                  viewPager.setAdapter(myAdapter);
                  //开始自动轮播
                  myHandler.sendEmptyMessageDelayed(0, 1000);
                  //请求商品列表
                  getGoodsListFromNet();
              }


              @Override
              public void getError(String error) {


              }
          });


      }
      //获取商品数据
        private void getGoodsListFromNet(){
            HttpUtils httpUtils = HttpUtils.getInstance();
            httpUtils.get(HttpConfig.GOODS_URL+page);
            httpUtils.setHttpUtilsListener(new HttpUtils.HttpUtilListener() {
                @Override
                public void getSuccess(String json) {
                    Gson gson = new Gson();
                    GoodsBean goodsBean = gson.fromJson(json, GoodsBean.class);
                    List<GoodsBean.DataBean> data = goodsBean.getData();
                    if(page==1){
                         list.clear();
                    }
                    if(data.size()==0){
                           Toast.makeText(GoodsActivity.this,"没有数据了",Toast.LENGTH_SHORT).show();
                    }
                    list.addAll(data);
                    goodsAdapter.notifyDataSetChanged();
                    scrollView.onRefreshComplete();
                }


                @Override
                public void getError(String error) {


                }
            });
        }

}


适配器

public class GoodsAdapter extends BaseAdapter {
     private List<GoodsBean.DataBean> list;
     private Context context;


    public GoodsAdapter(List<GoodsBean.DataBean> list, Context context) {
        this.list = list;
        this.context = context;
    }


    @Override
    public int getCount() {
        return list.size();
    }


    @Override
    public Object getItem(int position) {
        return list.get(position);
    }


    @Override
    public long getItemId(int position) {
        return position;
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if(convertView==null){
            convertView=  View.inflate(context, R.layout.goods_item,null);
            holder=new ViewHolder();
           holder.price= convertView.findViewById(R.id.goods_price);
            holder.title= convertView.findViewById(R.id.goods_title);
           holder.imageView= convertView.findViewById(R.id.goods_pic);
            convertView.setTag(holder);
        }else{
            holder= (ViewHolder) convertView.getTag();
        }


        String images = list.get(position).getImages();
        //截取url地址
        String pic_url = images.split("\\|")[0];
        ImageLoader.getInstance().displayImage(pic_url,holder.imageView, MyApp.getOptions());


        holder.title.setText(list.get(position).getTitle());
        holder.price.setText("价格"+list.get(position).getPrice());
        return convertView;
    }
    class ViewHolder{
        ImageView imageView;
         TextView title;
        TextView price;
    }

}


   MyList   
public class MyListView extends ListView {
    public MyListView(Context context) {
        super(context);
    }


    public MyListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }


    public MyListView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }


    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {


        int heigtSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);


        super.onMeasure(widthMeasureSpec, heigtSpec);
    }

}



   

<?php declare (strict_types=1); namespace app\api\controller; use app\api\controller\Base; use app\common\model\Goods as Goodsmodel; use app\common\model\GoodsLock; use app\common\model\GoodsList; use app\common\model\Collect; use app\common\model\Shang; use app\common\model\User; use app\common\model\Order; use app\common\model\OrderList; use app\common\model\UserVip; use think\facade\Db; use think\facade\Log; use \think\Request; use app\common\model\CouponReceive as CouponReceiveModel; class Goods extends Base { static $page_size = 10; static $shang_prize_id = [10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33];#抽奖赏品id static $shang_count_id = [10, 38];#统计次数 // static $shang_give_arr = [ // 1 => '上半场随机获得', // 2 => '下半场随机获得', // 3 => '最后一发获得', // 4 => '全场随机获得', // 5 => '获取指定数量全局赏获得', // ];#赠送(FIRST赏 LAST赏 最终赏 全局赏 拳王赏)赏品id static $shang_give_arr = [ 1 => '只赠不售', 2 => '只赠不售', 3 => '只赠不售', 4 => '只赠不售', 5 => '只赠不售', 6 => '只赠不售', 7 => '只赠不售', 39 => '只赠不售', ];#赠送(FIRST赏 LAST赏 最终赏 全局赏 拳王赏)赏品id /** * 首页盒子列表 * @param Request $request * @return \think\response\Json * @throws \think\db\exception\DbException * created by Admin at 2022/12/7 15:49 * @param [type] 类型 (14)推荐 (1)一番赏 (2)积分赏 (3)擂台赏 */ public function goods(Request $request) { $user_id = $this->getuserid(); $draw_num = 0; if($user_id > 0){ $draw_num = User::where(['id'=>$user_id])->value('draw_num'); } //$user_info = $this->getUser(); $keyword = request()->param('keyword', ''); $whe = []; // $whe[] = ['status', '=', 1]; $whe[] = ['show_is', '=', 0]; $whe[] = ['tower_id', '=', 0]; $whe[] = ['status', 'in', [1, 3]]; #搜索 if ($keyword) { $whe[] = ['title', 'like', '%' . $keyword . '%']; } $type_str = request()->param('type', -1); if ($type_str == 1) { $whe[] = ['type', '=', 1]; } elseif ($type_str == 2) { $whe[] = ['type', '=', 2]; } elseif ($type_str == 3) { $whe[] = ['type', '=', 3]; } elseif ($type_str == 5) { $whe[] = ['type', '=', 5]; }elseif ($type_str == 6) { $whe[] = ['type', '=', 6]; }elseif ($type_str == 7) { # 7抽奖券 $whe[] = ['type', '=', 7]; }elseif ($type_str == 8) { $whe[] = ['type', '=', 8]; }elseif ($type_str == 9) { $whe[] = ['type', '=', 9]; }else { $whe[] = ['type', 'not in', [4,2]]; } #盒子 $goods = GoodsModel::where($whe) ->field("id,title,imgurl,imgurl_detail,price,type,stock,sale_stock,status,box_is,leitai_num") ->order("sort desc,status esc,id desc")->paginate(15)->each(function ($itme) { $itme['imgurl'] = imageUrl($itme['imgurl']); #剩余 $itme['sale_stock'] = $itme['stock'] - $itme['sale_stock']; #参与人数 $join_user = OrderList::field('user_id') ->append(['userinfo']) ->where('goods_id', '=', $itme['id']) ->where('shang_id', 'between', self::$shang_count_id) ->where('order_type', '=', $itme['type']) ->order('id desc') ->group('user_id') ->limit(5) ->select(); $itme['join_user'] = $join_user; #参与次数 $join_count = OrderList::field('id') ->where('shang_id', 'between', self::$shang_count_id) ->where('goods_id', '=', $itme['id']) ->where('order_type', '=', $itme['type']) ->count(); $itme['join_count'] = $join_count; $itme['need_draw_num'] = 0; if($itme['type'] == 7){ $itme['need_draw_num'] = 1; } $box_id = 0; if($itme['box_is'] == 1 && $itme['type'] == 2){ $box_id = GoodsList::where(['shang_id'=>39,'goods_id'=>$itme['id']])->value('id'); } $itme['box_id'] = $box_id; }); $new_data = [ 'data' => $goods->items(), 'last_page' => $goods->lastPage(), 'draw_num' => $draw_num #优惠券的数量 ]; //▼▼▼ 新增配置部分 ▼▼▼ $rule = getConfig('base'); $other = [ 'jump_appid' => $rule['jump_appid'], 'corpid' => $rule['corpid'], 'wx_link' => $rule['wx_link'], 'mp3' => $rule['mp3'], 'logo' => $rule['logo'], 'types' => $rule['types'], 'erweima' => imageUrl($rule['erweima']), ]; $new_data['other'] = $other; return $this->renderSuccess('请求成功', $new_data); } /** * 商品详情 * @param $goods_id 盒子id * @param $goods_num 盒子箱号 */ public function goodsdetail() { //$user_info = $this->getUser(); $user_id = $this->getuserid(); $goods_id = request()->param('goods_id/d', 0); $goods_num = request()->param('goods_num/d', 0); $goods = Goodsmodel::field('id,title,imgurl_detail,price,stock,sale_stock,lock_is,type,status,sale_time,is_integral') ->where(['id' => $goods_id]) ->find(); if (!$goods) { return $this->renderError("盒子不存在"); } if ($goods['status'] != 1 && $goods['status'] != 3) { return $this->renderError("盒子已下架"); } if (($goods_num > $goods['stock']) || ($goods_num < 0)) { return $this->renderError("箱号错误"); } if ($goods['sale_time']) { $goods['addtime'] = date('m-d', $goods['sale_time']); } else { $goods['addtime'] = ''; } $goods['imgurl_detail'] = imageUrl($goods['imgurl_detail']); #自动找箱号 if ($goods_num == 0) { #奖品信息 $goodslist_info = GoodsList::field('num,sum(`surplus_stock`) as all_surplus_stock') ->where(['goods_id' => $goods_id]) ->where('shang_id','not in',[1,2,3,4,5]) ->having('all_surplus_stock', '>', 0) ->group('num') ->order('num asc') ->find(); if ($goodslist_info) { $goods_num = $goodslist_info['num']; } else { $goods_num = 1; } } $goods['num'] = $goods_num; #是否收藏 $collection_is = Collect::field('id') ->where(['user_id' => $user_id]) ->where(['goods_id' => $goods_id]) ->where(['num' => $goods_num]) ->find(); $goods['collection_is'] = $collection_is ? 1 : 0; #本箱子余量 $goods_surplus = GoodsList::field('sum(`stock`) as stock, sum(`surplus_stock`) as surplus_stock') ->where('goods_id', '=', $goods_id) ->where('num', '=', $goods_num) ->where('shang_id', 'in', self::$shang_prize_id) ->find(); $all_surplus_stock = $goods_surplus['surplus_stock']; $goods['surplus_stock'] = $goods['stock'] - $goods['sale_stock']; $goods['goodslist_stock'] = $goods_surplus['stock']; $goods['goodslist_surplus_stock'] = $goods_surplus['surplus_stock']; #概率不足时 $pro_all = 0; $pro_max = 0; $pro_key = 0; #所有奖品信息 $goodslist = GoodsList::field('id,shang_id,title,stock,surplus_stock,imgurl,goods_type,sale_time,price,sc_money,goods_id,k_zz_num,zz_num') ->append(['shang_title','goods_typename','shang_info']) ->where(['goods_id' => $goods_id]) ->where(['num' => $goods_num]) ->where(['is_box' => 2]) ->order('sort desc,shang_id asc,id asc') ->select()->toArray(); foreach ($goodslist as $key => &$value) { #价格 $value['price'] = $value['price'] * 1; #预售时间 if ($value['sale_time']) { $value['sale_time'] = date('Y-m-d', $value['sale_time']); } #剩余 $surplus_stock = $value['surplus_stock']; if (array_key_exists($value['shang_id'], self::$shang_give_arr)) { #概率 $pro = self::$shang_give_arr[$value['shang_id']]; if($value['shang_id'] == 1){ $pro = '参与'. ($goods['goodslist_stock'] / 2) .'前发数/'. ($goods['goodslist_stock'] / 2); } if($value['shang_id'] == 2){ $pro = '参与'. ($goods['goodslist_stock'] / 2) .'后发数/'. ($goods['goodslist_stock'] / 2); } if($value['shang_id'] == 3){ $pro = '随最后一发赠送'; } if($value['shang_id'] == 4){ $pro = '参与发数/'. $goods['goodslist_stock']; } if($value['shang_id'] == 5){ $pro = '只赠不售'; } if($value['shang_id'] == 6){ $pro = '1-'. $goods['goodslist_stock'] . '发数最多得'; } if($value['shang_id'] == 7){ $pro = $value['k_zz_num'].'-'. $value['zz_num'] . '发数最多得'; } $pro_num = 0; } else { #概率 if ($surplus_stock > 0) { $pro_basics = bcdiv("$surplus_stock", "$all_surplus_stock", 4); $pro = '概率:' . ($pro_basics * 100) . '%'; $pro_num = ($pro_basics * 100); } else { $pro = '概率:' . 0 . '%'; $pro_num = 0; } } $value['surplus_stock'] = $surplus_stock; $value['pro'] = $pro; $value['imgurl'] = imageUrl($value['imgurl']); #计算剩余概率 $pro_all += $pro_num; if ($pro_num >= $pro_max) { $pro_max = $pro_num; $pro_key = $key; } } #概率不足时 if ($pro_max > 0 && $pro_all < 100) { $surplus_pro = bcsub("100", "$pro_all", 2); $goodslist[$pro_key]['pro'] = bcadd("$pro_max", "$surplus_pro", 2) . '%'; } #锁箱信息=============== $goods_lock_user_nickname = 0; $goods_lock_user_headimg = 0; $goods_lock_surplus_time = 0; $goods_id_num = $goods_id . '_' . $goods_num; $goods_lock_info = GoodsLock::where(['goods_id_num' => $goods_id_num]) ->where('endtime', '>', time()) ->order('id desc') ->find(); if ($goods['lock_is'] && $goods_lock_info) { $goods_lock_surplus_time = $goods_lock_info['endtime']; $user_info = User::field('nickname,headimg')->where(['id' => $goods_lock_info['user_id']])->find(); $goods_lock_user_nickname = $user_info['nickname']; $goods_lock_user_headimg = $user_info['headimg']; } $lock_info = [ 'lock_is' => $goods['lock_is'], 'goods_lock_user_nickname' => $goods_lock_user_nickname, 'goods_lock_user_headimg' => $goods_lock_user_headimg, 'goods_lock_surplus_time' => $goods_lock_surplus_time, ]; #锁箱信息=============== #参与人数 $join_user = OrderList::field('user_id') ->append(['userinfo']) ->where('goods_id', '=', $goods_id) ->where('num', '=', $goods_num) ->where('shang_id', 'between', self::$shang_count_id) ->where('order_type', '=', $goods['type']) ->order('id desc') ->group('user_id') ->limit(5) ->select(); $new_join_user = []; foreach ($join_user as $join_user_value) { $new_join_user[] = $join_user_value['userinfo']['headimg']; } #参与次数 $join_count = OrderList::field('id')->where('goods_id', '=', $goods_id) ->where('num', '=', $goods_num) ->where('shang_id', 'between', self::$shang_count_id) ->where('order_type', '=', $goods['type']) ->count(); #时间配置 $config = getConfig('base'); $goods['three_time'] = $config['three_time']; $goods['five_time'] = $config['five_time']; $new_data = [ 'goods' => $goods, 'lock_info' => $lock_info, 'join_user' => $new_join_user, 'join_count' => $join_count, 'goodslist' => $goodslist, ]; return $this->renderSuccess("请求成功", $new_data); } /** * 换箱箱号 */ public function goodslist_count() { $goods_id = request()->param('goods_id/d', 0); #盒子信息 $goods = Goodsmodel::field('id,stock,status') ->where(['id' => $goods_id]) ->find(); if (!$goods) { return $this->renderError("盒子不存在"); } if ($goods['status'] != 1 && $goods['status'] != 3) { return $this->renderError("盒子已下架"); } $page_size = self::$page_size; $length = ceil($goods['stock'] / $page_size); $data = []; for ($i = 0; $i < $length; $i++) { $start_length = ($i * $page_size) + 1; $end_length = ($i * $page_size) + $page_size; if ($end_length >= $goods['stock']) { $end_length = $goods['stock']; } $data[] = [ 'title' => $start_length . '-' . $end_length, 'page_no' => $i, ]; } return $this->renderSuccess("请求成功", $data); } /** * 统计多少箱 */ public function goodslist_content(Request $request) { $sort = request()->param('sort/d', 0);#排序1箱号高 2余量高 $goods_id = request()->param('goods_id/d', 0); $page_no = request()->param('page_no/d', 0);#页码 if ($page_no <= 0) { $page_no = 0; } #盒子信息 $goods = Goodsmodel::field('id,stock,status') ->where(['id' => $goods_id]) ->find(); if (!$goods) { return $this->renderError("盒子不存在"); } if ($goods['status'] != 1 && $goods['status'] != 3) { return $this->renderError("盒子已下架"); } $page_size = self::$page_size; $start_length = ($page_no * $page_size) + 1; $end_length = ($page_no * $page_size) + $page_size; if ($end_length >= $goods['stock']) { $end_length = $goods['stock']; } $data = []; for ($goods_num = $start_length; $goods_num <= $end_length; $goods_num++) { #奖品信息 $goodlist = GoodsList::field('id,stock,surplus_stock,shang_id') ->append(['shang_title']) ->where(['goods_id' => $goods_id]) ->where(['num' => $goods_num]) ->order('sort desc,shang_id asc,id asc') ->select(); #剩余 $surplus_all_stock = 0; foreach ($goodlist as $key => $value) { if (!array_key_exists($value['shang_id'], self::$shang_give_arr)) { $surplus_all_stock += $value['surplus_stock']; } unset($value['id']); } if ($surplus_all_stock <= 0) { $surplus_all_stock = 0; } $data[] = [ 'num' => $goods_num, 'surplus_all_stock' => $surplus_all_stock, 'goodslist' => $goodlist, ]; } if ($sort == 2) { $data = arraySequence($data, 'surplus_all_stock'); } return $this->renderSuccess("请求成功", $data); } /** * 中赏记录 */ public function shang_log(Request $request) { $shang_id = request()->param('shang_id/d', 0); $goods_id = request()->param('goods_id/d', 0); $goods_num = request()->param('goods_num/d', 0); #盒子信息 $goods = Goodsmodel::field('id,stock,status,type') ->where(['id' => $goods_id]) ->find(); if (!$goods) { return $this->renderError("盒子不存在"); } if ($goods['status'] != 1 && $goods['status'] != 3) { return $this->renderError("盒子已下架"); } if (RegInt($goods_num)) { return $this->renderError("箱号选择错误"); } #中奖记录分类 $category = GoodsList::field('shang_id') ->append(['shang_title']) ->where('goods_id', '=', $goods_id) ->where('num', '=', $goods_num) ->where('is_box', '=', 2) ->group('shang_id') ->select()->toArray(); array_unshift($category, ['shang_id' => 0, 'shang_title' => '全部']); $where = []; if ($shang_id) { $where[] = ['shang_id', '=', $shang_id]; } $data = OrderList::field('user_id,goodslist_title,goodslist_imgurl,shang_id,addtime,count(`id`) as prize_num') ->append(['shang_title', 'user_info']) ->where('goods_id', '=', $goods_id) ->where('num', '=', $goods_num) ->where('order_type', '=', $goods['type']) ->where($where) ->order('id desc') ->group("order_id,goodslist_id,user_id") ->paginate(10)->each(function ($item) { $item['addtime'] = date('Y-m-d H:i:s', $item['addtime']); $item['goodslist_imgurl'] = imageUrl($item['goodslist_imgurl']); return $item; }); // dd($data); $new_data = [ 'category' => $category, 'data' => $data->items(), 'last_page' => $data->lastPage(), ]; return $this->renderSuccess("请求成功", $new_data); } /** * 发数排名 */ public function paiming_log(Request $request) { $goods_id = request()->param('goods_id/d', 0); $goods_num = request()->param('goods_num/d', 0); #盒子信息 $goods = Goodsmodel::field('id,stock,status,type') ->where(['id' => $goods_id]) ->find(); if (!$goods) { return $this->renderError("盒子不存在"); } if ($goods['status'] != 1 && $goods['status'] != 3) { return $this->renderError("盒子已下架"); } if (RegInt($goods_num)) { return $this->renderError("箱号选择错误"); } $ranking = OrderList::field('user_id, sum(goodslist_type) as total_orders') ->append(['user_info']) ->group('user_id') ->where('goods_id', '=', $goods_id) ->where('num', '=', $goods_num) ->where('order_type', '=', $goods['type']) ->where('shang_id', 'in', self::$shang_prize_id) ->order('total_orders', 'desc') ->select() ->toArray(); $new_data = [ 'data' => $ranking, ]; return $this->renderSuccess("请求成功", $new_data); } /** * 下单计算金额 */ public function ordermoney() { //return $this->renderError("正在调试"); $user = $this->getUser(); $user_id = $user['id'] ?? 0; $prize_num = request()->param('prize_num/d', 0); #抽几发 $goods_id = request()->param('goods_id/d', 0); #盒子ID $num = request()->param('goods_num/d', 0); #第几箱 $todaySpent = 0; if ($user_id > 0) { $start_time = strtotime(date('Y-m-d 00:00:00')); // 今日开始时间 $end_time = strtotime(date('Y-m-d 23:59:59')); // 今日结束时间 $todaySpent = Order::where('user_id', $user_id) ->where('status', 1) // 已支付订单 ->where('addtime', '>=', $start_time) ->where('addtime', '<=', $end_time) ->sum('price'); } // $use_money_is = request()->param('use_money_is/d', 0); #0不抵扣 1抵扣 $use_money_is = 0; $use_integral_is = request()->param('use_integral_is/d', 0); #0不抵扣 1抵扣 $coupon_id = request()->param('coupon_id'); //优惠券 #盒子信息 $goods = Goodsmodel::field('title,imgurl_detail,type,price,status,imgurl')->where(['id' => $goods_id]) ->find(); if (!$goods) { return $this->renderError("盒子不存在"); } if ($goods['status'] != 1) { return $this->renderError("盒子已下架"); } $goods['imgurl_detail'] = !empty($goods['imgurl_detail']) ? imageUrl($goods['imgurl_detail']) : ''; $goods['imgurl'] = !empty($goods['imgurl']) ? imageUrl($goods['imgurl']) : ''; if (RegInt($num)) { return $this->renderError("箱号选择错误"); } #奖品信息 $goodslist = GoodsList::field('sum(`stock`) as stock, sum(`surplus_stock`) as surplus_stock') ->where('goods_id', '=', $goods_id) ->where('num', '=', $num) ->where('shang_id', 'in', self::$shang_prize_id) ->find(); if (!$goodslist) { return $this->renderError('暂无奖品信息'); } $surplus_stock = $goodslist['surplus_stock']; if ($surplus_stock <= 0) { return $this->renderError('库存剩余不足,请刷新重试'); } #判断库存 if (RegInt($prize_num)) { return $this->renderError("抽奖数量选择错误,请刷新重试"); } if ($prize_num > $surplus_stock) { return $this->renderError("剩余数量不足,请刷新重试"); } #盒子单价 $box_price = $goods['price']; #订单金额 微信支付金额 $order_total = $order_zhe_total = $price = bcmul("$box_price", "$prize_num", 2); #使用优惠券 $coupon_price = 0; if(!empty($coupon_id)){ $coupon = CouponReceiveModel::where(['id'=>$coupon_id,'status'=>0,'user_id'=>$user['id']])->where('man_price','<=',$price)->find(); if($coupon){ $coupon_price = $coupon['price']; } }else{ $coupon_id = 0; $coupon = CouponReceiveModel::where(['status'=>0,'user_id'=>$user['id']])->where('man_price','<=',$price)->order('price desc')->find(); if($coupon){ $coupon_price = $coupon['price']; $coupon_id = $coupon['id']; } } $price = bcsub("$price","$coupon_price",2); if($price <= 0){ $price = 0; } $order_zhe_total = $price; if ($goods['type'] == 1 || $goods['type'] == 3 || $goods['type'] == 6) { $zhe = 0; $vip_info = UserVip::where(['id' => $user['vip']])->find(); if ($vip_info && $vip_info['discount'] > 0) { $zhe = $vip_info['discount']; $zhe_bl = bcdiv("$zhe", "10", 2); $order_zhe_total = $price = bcmul("$price", "$zhe_bl", 2); } #潮币抵扣 $use_integral = 0; if ($use_integral_is == 1) { if ($user['integral'] >= $price) { $use_integral = $price; $price = 0; } else { $use_integral = $user['integral']; $price = bcsub("$price", "{$user['integral']}", 2); } } #余额抵扣 $use_money = 0; if ($use_money_is == 1) { if ($user['money'] >= $price) { $use_money = $price; $price = 0; } else { $use_money = $user['money'];# $price = bcsub("$price", "{$user['money']}", 2); } } $use_score = 0; } elseif ($goods['type'] == 5) { #优惠券 $coupon_id =0; $coupon_price = 0; #折扣 $zhe = 0; #微信支付 $price = 0; #潮币抵扣 $use_integral = 0; #余额抵扣 $use_money = 0; #积分 $use_score = $order_total; } else { return $this->renderError("非法请求"); } #抽奖数量 $goods['prize_num'] = $prize_num; $data = [ 'goods' => $goods, 'order_total' => $order_total * 1, 'order_zhe_total' => $order_zhe_total * 1, 'zhe' => ($zhe * 1), 'today_spent' => $todaySpent, 'price' => $price * 1, 'integral' => $user['integral'] * 1, 'use_integral' => $use_integral * 1, 'money' => $user['money'] * 1, 'use_money' => $use_money * 1, 'score' => $user['score'] * 1, 'use_score' => $use_score, 'coupon_price'=>$coupon_price, 'coupon_id' =>$coupon_id ]; //▼▼▼ 新增配置部分 ▼▼▼ $rule = getConfig('base'); $other = [ 'jump_appid' => $rule['jump_appid'], 'corpid' => $rule['corpid'], 'wx_link' => $rule['wx_link'], 'titlek' => $rule['titlek'], 'logoo' => $rule['logoo'], 'day_limit' => $rule['day_limit'], 'mp3' => $rule['mp3'], 'logo' => $rule['logo'], 'types' => $rule['types'], 'erweima' => imageUrl($rule['erweima']), ]; $data['other'] = $other; // 将配置合并到返回数据 return $this->renderSuccess("请求成功", $data); } /** * 下单计算金额 */ public function orderbuy() { $user = $this->getUser(); if (empty($user['mobile'])) { return $this->renderError('请先绑定手机号', [], -9); } // 获取系统配置 $config = getConfig('base'); $day_limit = $config['day_limit'] ?? 0; // 每日限额,0表示不限制 // 如果有限额设置,则检查用户当日消费 if ($price > 0) { // 只在需要现金支付时检查限额 $config = getConfig('base'); $day_limit = $config['day_limit'] ?? 0; if ($day_limit > 0) { $start_time = strtotime(date('Y-m-d 00:00:00')); $end_time = strtotime(date('Y-m-d 23:59:59')); $total_spent = Order::where('user_id', $user['id']) ->where('status', 1) ->where('addtime', '>=', $start_time) ->where('addtime', '<=', $end_time) ->sum('price'); if ($total_spent >= $day_limit) { return $this->renderError("当日消费金额已超过限额"); } } } $prize_num = request()->param('prize_num/d', 0); #抽几发 $goods_id = request()->param('goods_id/d', 0); #盒子ID $num = request()->param('goods_num/d', 0); #第几箱 // $use_money_is = request()->param('use_money_is/d', 0); #0不抵扣 1抵扣 $use_money_is = 0; $use_integral_is = request()->param('use_integral_is/d', 0); #0不抵扣 1抵扣 $coupon_id = request()->param('coupon_id'); //优惠券 $pay_type = request()->param('pay_type') ? request()->param('pay_type') : 1; // 1微信 2支付宝 #盒子信息 $goods = Goodsmodel::field('title,imgurl_detail,type,price,status,lock_is,lock_time,leitai_num')->where(['id' => $goods_id]) ->find(); if (!$goods) { return $this->renderError("盒子不存在"); } if ($goods['status'] != 1) { return $this->renderError("盒子已下架"); } if (RegInt($num)) { return $this->renderError("箱号选择错误"); } #奖品信息 $is_goodslist = GoodsList::field('id') ->where('goods_id', '=', $goods_id) ->where('num', '=', $num) ->where('shang_id', 'in', self::$shang_prize_id) ->find(); if (!$is_goodslist) { return $this->renderError('暂无奖品信息'); } #锁箱信息=============== if ($goods['type'] == 1 || $goods['type'] == 6) { //限购 if($prize_num > 1 && $goods['title'] == '新人福利,胶个朋友'){ return $this->renderError('该赏限购1发'); } $user_num = OrderList::where('goods_id', '=', $goods_id) ->where('user_id',$user['id']) ->where('num', '=', $num) ->where('order_type', '=', $goods['type']) ->where('shang_id', 'in', self::$shang_prize_id) ->count(); if($user_num >= 1 && $goods['title'] == '新人福利,胶个朋友'){ return $this->renderError('该赏限购1发'); } $goods_id_num = $goods_id . '_' . $num; $lock_info = GoodsLock::where(['goods_id_num' => $goods_id_num]) ->where('endtime', '>', time()) ->order('id desc') ->find(); if ($lock_info && $lock_info['endtime'] > time() && $lock_info['user_id'] !== $user['id']) { $surplus_time = $lock_info['endtime'] - time(); return $this->renderError('有会员正在锁箱,请等待' . $surplus_time . '秒'); } } #锁箱信息=============== #擂台赏限购=============== if ($goods['type'] == 3) { //限购 if($prize_num > $goods['leitai_num']){ return $this->renderError('该赏限购'.$goods['leitai_num'].'发'); } $user_num = Order::where('goods_id', '=', $goods_id) ->where('user_id',$user['id']) ->where('num', '=', $num) ->where('order_type', '=', $goods['type']) ->where('status', '=', 1) ->sum('prize_num'); //已购买 + 当前购买 大于 限购 if($user_num + $prize_num > $goods['leitai_num']){ return $this->renderError('该赏限购'.$goods['leitai_num'].'发'); } } #擂台赏限购=============== #奖品信息 $goodslist = GoodsList::field('sum(`stock`) as stock, sum(`surplus_stock`) as surplus_stock') ->where('goods_id', '=', $goods_id) ->where('num', '=', $num) ->where('shang_id', 'in', self::$shang_prize_id) ->find(); $surplus_stock = $goodslist['surplus_stock']; if ($surplus_stock <= 0) { return $this->renderError('库存剩余不足,请刷新重试'); } #判断库存 if (RegInt($prize_num)) { return $this->renderError("抽奖数量选择错误,请刷新重试"); } if ($prize_num > $surplus_stock) { return $this->renderError("剩余数量不足,请刷新重试"); } #盒子单价 $box_price = $goods['price']; #订单金额 微信支付金额 $order_total = $order_zhe_total = $price = bcmul("$box_price", "$prize_num", 2); #使用优惠券 $coupon_price = 0; if(!empty($coupon_id)){ $coupon = CouponReceiveModel::where(['id'=>$coupon_id,'status'=>0,'user_id'=>$user['id']])->where('man_price','<=',$price)->find(); if($coupon){ $coupon_price = $coupon['price']; } } $price = bcsub("$price","$coupon_price",2); if($price <= 0){ $price = 0; } $order_zhe_total = $price; if ($goods['type'] == 1 || $goods['type'] == 3 || $goods['type'] == 6) { #折扣 $zhe = 0; $vip_info = UserVip::where(['id' => $user['vip']])->find(); if ($vip_info && $vip_info['discount'] > 0) { $zhe = $vip_info['discount']; $zhe_bl = bcdiv("$zhe", "10", 2); $order_zhe_total = $price = bcmul("$price", "$zhe_bl", 2); } #潮币抵扣 $use_integral = 0; if ($use_integral_is == 1) { if ($user['integral'] >= $price) { $use_integral = $price; $price = 0; } else { $use_integral = $user['integral']; $price = bcsub("$price", "{$user['integral']}", 2); } } #余额抵扣 $use_money = 0; if ($use_money_is == 1) { if ($user['money'] >= $price) { $use_money = $price; $price = 0; } else { $use_money = $user['money'];# $price = bcsub("$price", "{$user['money']}", 2); } } $use_score = 0; } elseif ($goods['type'] == 5) { #优惠券 $coupon_id =0; $coupon_price = 0; #折扣 $zhe = 0; #微信支付 $price = 0; #潮币抵扣 $use_integral = 0; #余额抵扣 $use_money = 0; #积分 $use_score = $order_total; if ($user['score'] < $use_score) { return $this->renderError("积分不足"); } } else { return $this->renderError("非法请求"); } #一番赏锁箱 if ($goods['type'] == 1 || $goods['type'] == 6) { #盒子id_箱号 $goods_id_num = $goods_id . '_' . $num; #盒子是否配置锁箱 if ($goods['lock_is'] == 1 && $goods['lock_time'] > 0) { $redis = new \Redis(); $redis->connect('127.0.0.1', 6379); $redis_key = "kpw_lock" . '_' . $goods_id_num; $redis_key_info = $redis->get($redis_key); if ($redis_key_info) { return $this->renderError("有会员正在锁箱,请等待"); } else { $redis->set($redis_key, 1, 1); } #默认锁箱时间 $defaulttime = (time() + $goods['lock_time']); #锁箱信息 $lock_info = GoodsLock::where('goods_id_num', '=', $goods_id_num) ->where('endtime', '>', time()) ->order('id desc') ->find(); if ($lock_info) {#存在锁箱 if ($prize_num == 3 || $prize_num == 5) { $config_time = getConfig('base'); if ($prize_num == 3) { $endtime = $defaulttime + $config_time['three_time']; } elseif ($prize_num == 5) { $endtime = $defaulttime + $config_time['five_time']; } GoodsLock::where('id', '=', $lock_info['id']) ->update([ 'endtime' => $endtime, 'update_time' => time(), ]); } else { GoodsLock::where('id', '=', $lock_info['id']) ->update([ 'endtime' => $defaulttime, 'update_time' => time(), ]); } } else { if ($prize_num == 3 || $prize_num == 5) { $config_time = getConfig('base'); if ($prize_num == 3) { $endtime = $defaulttime + $config_time['three_time']; } elseif ($prize_num == 5) { $endtime = $defaulttime + $config_time['five_time']; } #新增锁箱信息 GoodsLock::insert([ 'user_id' => $user['id'], 'goods_id_num' => $goods_id_num, 'endtime' => $endtime, 'update_time' => time(), ]); } else { #新增锁箱信息 GoodsLock::insert([ 'user_id' => $user['id'], 'goods_id_num' => $goods_id_num, 'endtime' => $defaulttime, 'update_time' => time(), ]); } } } } #一番赏锁箱 $redis = new \Redis(); $redis->connect('127.0.0.1', 6379); $redis_key = "kpw_orderbuy" . '_' . $user['id']; $redis_key_info = $redis->get($redis_key); if ($redis_key_info) { return $this->renderError("当前操作太快了,请等待"); } else { $redis->set($redis_key, 1, 10); } //轮换商户号 $redis_pay_key = "pay_sh"; $redis_pay_key_info = $redis->get($redis_pay_key); if(!$redis_pay_key_info){ $redis->set($redis_pay_key, 1, 86400); $redis_pay_key_info = $redis->get($redis_pay_key); } Db::startTrans(); #===================================================*********** #奖品信息加锁 GoodsList::field('id,stock,surplus_stock') ->where('goods_id', '=', $goods_id) ->where('num', '=', $num) ->lock(true)->select(); #奖品信息 $goodslist_lock = GoodsList::field('sum(`surplus_stock`) as surplus_stock') ->where('goods_id', '=', $goods_id) ->where('num', '=', $num) ->where('shang_id', 'in', self::$shang_prize_id) ->find(); #判断库存 if ($goodslist_lock['surplus_stock'] <= 0) { Db::rollback(); $redis->del($redis_key); return $this->renderError("已售空,请刷新重试"); } #===================================================*********** $res = []; $order_num = create_order_no('MH_', 'order', 'order_num'); #创建订单 $res[] = $order_id = Order::insertGetId([ 'user_id' => $user['id'], 'order_num' => $order_num, 'order_total' => $order_total,#订单金额 'order_zhe_total' => $order_zhe_total,#订单折扣金额 'price' => $price,#微信支付 'use_money' => $use_money,#余额抵扣 'use_integral' => $use_integral,#潮币抵扣 'use_score' => $use_score,#积分抵扣 'zhe' => $zhe,#会员折扣 'goods_id' => $goods_id, 'num' => $num, 'goods_price' => $goods['price'], 'goods_title' => $goods['title'], 'goods_imgurl' => $goods['imgurl_detail'], 'prize_num' => $prize_num, 'status' => 0, 'pay_type' => $pay_type,#1微信 2支付宝 'pay_sh' => $redis_pay_key_info, 'order_type' => $goods['type'], 'addtime' => time(), 'coupon_id' => $coupon_id?$coupon_id:0, 'use_coupon' => $coupon_price #优惠券抵扣 ]); #微信支付金额大于0 if ($price > 0) { $body = '购买盒子' . $goods['title']; if($pay_type == 1){ if ($goods['type'] == 1) { $attach = 'order_yfs'; } elseif ($goods['type'] == 3) { $attach = 'order_lts'; } elseif ($goods['type'] == 6) { $attach = 'order_lts'; } $payRes = (new Pay())->wxCreateOrder($order_num, $price, $user['openid'], $body, $attach,$redis_pay_key_info); if($redis_pay_key_info == 1){ $redis->set($redis_pay_key, 2, 86400); }elseif($redis_pay_key_info == 2){ $redis->set($redis_pay_key, 3, 86400); }elseif($redis_pay_key_info == 3){ $redis->set($redis_pay_key, 4, 86400); }elseif($redis_pay_key_info == 4){ $redis->set($redis_pay_key, 5, 86400); }elseif($redis_pay_key_info == 5){ $redis->set($redis_pay_key, 1, 86400); } if ($payRes['status'] == 1) { #结果集 $new_data = [ 'status' => 1, 'pay_type'=>$pay_type, 'order_num' => $order_num, 'res' => $payRes['data'], ]; } else { #删除redis $redis->del($redis_key); Db::rollback(); return $this->renderError("下单失败"); } } if($pay_type == 2){ //生成一个 api/login/alipay?订单号的链接 $url = 'https://zxcw.xby6991282.xyz/api/alipay?order_num='.$order_num; if($url && $order_num){ #结果集 $new_data = [ 'status' => 1, 'pay_type'=>$pay_type, 'order_num' => $order_num, 'res' => $url, ]; } else { #删除redis $redis->del($redis_key); Db::rollback(); return $this->renderError("下单失败"); } } if($pay_type == 3){ //调用通联支付 $payRes = (new Allinpay())->pay($order_num, $price, $user['openid'], $body); if($payRes['status'] == 1){ #结果集 $new_data = [ 'status' => 1, 'pay_type'=>$pay_type, 'order_num' => $order_num, 'res' => json_decode($payRes['data']['payinfo'], true), ]; } else { #删除redis $redis->del($redis_key); Db::rollback(); return $this->renderError("下单失败"); } } } else { try { #开盒子 $res[] = (new Notify($this->app))->drawprize_notice($user['id'], $order_id, $goods_id, $num); } catch (\Throwable $e) { Db::rollback(); #删除redis $redis->del($redis_key); return $this->renderError("火爆中...请刷新重新购买"); } #结果集 $new_data = [ 'status' => 0, 'order_num' => $order_num, ]; } if (resCheck($res)) { Db::commit(); #删除redis $redis->del($redis_key); return $this->renderSuccess("下单成功", $new_data); } else { Db::rollback(); #删除redis $redis->del($redis_key); return $this->renderError("购买失败,请刷新重试"); } } /** * 抽中的奖品 * $order_num 订单编号 */ public function prizeorderlog() { $user = $this->getUser(); $order_num = request()->param('order_num', ''); $order_info = Order::field('id,goods_id,num,order_type,price,pay_sh,pay_type') ->where('order_num', '=', $order_num) ->where('user_id', '=', $user['id']) ->where('status', '=', 1) ->find(); if (!$order_info) { return $this->renderError("支付异常,请刷新重试"); } // if($order_info['price'] > 0 && $order_info['pay_type'] !== 2 && $order_info['pay_type'] !== 4){ // $this->xcc_fahuo($order_num,$user['openid'],$order_info['pay_sh'],$order_info['pay_type']); // } #普通赏 $data = OrderList::field('user_id,shang_id,goodslist_id,goodslist_title,goodslist_imgurl') ->append(['shang_title','shang_imgurl','special_imgurl','color','color1','gn_type']) ->where('user_id', '=', $user['id']) ->where('order_id', '=', $order_info['id']) ->where('order_type', '=', $order_info['order_type']) // ->orderRaw("field(shang_id,39,34,35,36,37,38) asc,id asc") ->order('shang_id asc, id asc') ->paginate(100)->each(function ($item) { $item['goodslist_imgurl'] = imageUrl($item['goodslist_imgurl']); return $item; }); $new_data = [ 'user_info' => [ 'nickname' => $user['nickname'], 'headimg' => $user['headimg'], ], 'data' => $data->items(), ]; return $this->renderSuccess("请求成功", $new_data); } /** * 支付同步发货 */ public function xcc_fahuo($order_num,$openid,$pay_sh = 1,$pay_type = 1){ #同步发货********************************************************** log::info("**********************************************************"); log::info("开始发货 order_num:,".json_encode($order_num)); log::info("开始发货 openid:,".json_encode($openid)); $wxServer = new \app\common\server\Wx($this->app); $access_token = $wxServer->get_access_token(); log::info("获取token:,".json_encode($access_token)); $send_url = 'https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token='.$access_token; if($pay_type == 1){ if($pay_sh == 1){ $mch_id = getConfig('weixinpay')['mch_id']; }elseif($pay_sh == 2){ $mch_id = getConfig('weixinpay')['mch_id2']; }elseif($pay_sh == 3){ $mch_id = getConfig('weixinpay')['mch_id3']; }elseif($pay_sh == 4){ $mch_id = getConfig('weixinpay')['mch_id4']; }elseif($pay_sh == 5){ $mch_id = getConfig('weixinpay')['mch_id5']; } } if($pay_type == 3 || $pay_type == 4){ $mch_id = '1501244881'; $content = Db::name('wxpay_log')->where('order_no',$order_num)->value('content'); $content = json_decode($content,true); $order_num = $content['trxid']; log::info("通联发货:,".$order_num); } $sendD = [ 'order_key' => [ 'order_number_type' => 1, //订单单号类型,用于确认需要上传详情的订单。枚举值1,使用下单商户号和商户侧单号;枚举值2,使用微信支付单号。 "mchid" => $mch_id, "out_trade_no"=>$order_num ], 'logistics_type' => 3,//物流模式,发货方式枚举值:1、实体物流配送采用快递公司进行实体物流配送形式 2、同城配送 3、虚拟商品,虚拟商品,例如话费充值,点卡等,无实体配送形式 4、用户自提 'delivery_mode' => 1, //发货模式,发货模式枚举值:1、UNIFIED_DELIVERY(统一发货)2、SPLIT_DELIVERY(分拆发货) 示例值: UNIFIED_DELIVERY 'shipping_list' => [ [ 'item_desc' => '您的商品已发到赏袋,请自行发货' ] ], 'upload_time' => date('Y-m-d\TH:i:sP', time()), 'payer' => [ 'openid' => $openid ] ]; $sendD = json_encode($sendD, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); $result = $this->httpPost($send_url,$sendD); log::info("发货结果:,".$result); $result = json_decode($result,true); } // 模拟提交数据函数 public function httpPost($url,$data){ $curl = curl_init(); // 启动一个CURL会话 curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在 curl_setopt($curl, CURLOPT_POST, true); // 发送一个常规的Post请求 curl_setopt($curl, CURLOPT_POSTFIELDS,$data); // Post提交的数据包 curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环 curl_setopt($curl, CURLOPT_HEADER, false); // 显示返回的Header区域内容 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 获取的信息以文件流的形式返回 $result = curl_exec($curl); // 执行操作 if (curl_errno($curl)) { return 'Error POST'.curl_error($curl); } curl_close($curl); // 关键CURL会话 return $result; // 返回数据 } /** * 收藏列表 */ public function listCollect(Request $request) { $user = $this->getUser(); $type = \request()->param('type', 0); if ($type == 1) { $data = Collect::field('id,goods_id,type,num') ->where(['user_id' => $user['id']]) ->where('type', 'in', [1, 3, 5]) ->append(['goods_info']) ->paginate(100)->each(function ($item) { $item['goods_title'] = $item['goods_info']['title']; $item['imgurl'] = imageUrl($item['goods_info']['imgurl']); if ($item['type'] == 1 || $item['type'] == 3 || $item['type'] == 5) { #库存 $surplus = GoodsList::field('sum(`stock`) as stock, sum(`surplus_stock`) as surplus_stock') ->where('goods_id', '=', $item['goods_id']) ->where('num', '=', $item['num']) ->where('shang_id', 'in', self::$shang_prize_id) ->find(); $item['stock'] = $surplus['stock']; $item['surplus_stock'] = $surplus['surplus_stock']; } else { $item['stock'] = 0; $item['surplus_stock'] = 0; } return $item; }); } elseif ($type == 2) { $data = Collect::field('id,goods_id,type,num') ->where(['user_id' => $user['id']]) ->where('type', '=', 2) ->append(['goods_info']) ->paginate(100)->each(function ($item) { $item['goods_title'] = $item['goods_info']['title']; $item['imgurl'] = imageUrl($item['goods_info']['imgurl']); if ($item['type'] == 1 || $item['type'] == 3 || $item['type'] == 5) { #库存 $surplus = GoodsList::field('sum(`stock`) as stock, sum(`surplus_stock`) as surplus_stock') ->where('goods_id', '=', $item['goods_id']) ->where('num', '=', $item['num']) ->where('shang_id', 'in', self::$shang_prize_id) ->find(); $item['stock'] = $surplus['stock']; $item['surplus_stock'] = $surplus['surplus_stock']; } else { $item['stock'] = 0; $item['surplus_stock'] = 0; } return $item; }); } $new_data = [ 'data' => $data->items(), 'last_page' => $data->lastPage(), ]; return $this->renderSuccess("操作成功", $new_data); } /** * 添加收藏 */ public function addCollect(Request $request) { $user = $this->getUser(); $goods_id = request()->param('goods_id/d', 0); $goods_num = request()->param('goods_num/d', 0); #盒子信息 $goods = Goodsmodel::field('id,stock,status,type') ->where(['id' => $goods_id]) ->find(); if (!$goods) { return $this->renderError("盒子不存在"); } if ($goods['status'] != 1 && $goods['status'] != 3) { return $this->renderError("盒子已下架"); } $info = Collect::field('id') ->where(['user_id' => $user['id']]) ->where(['goods_id' => $goods_id]) ->where(['num' => $goods_num]) ->find(); if ($info) { $res = Collect::where(['id' => $info['id']])->delete(); } else { $res = Collect::insert([ 'user_id' => $user['id'], 'goods_id' => $goods_id, 'num' => $goods_num, 'type' => $goods['type'], 'addtime' => time(), ]); } if ($res) { return $this->renderSuccess("操作成功"); } else { return $this->renderError("操作失败"); } } /** * 删除收藏 */ public function delCollect(Request $request) { $user = $this->getUser(); $id = request()->param('id/d', 0); $info = Collect::field('id') ->where(['user_id' => $user['id']]) ->where(['id' => $id]) ->find(); if (!$info) { return $this->renderError("请求重复操作"); } $res = Collect::where(['id' => $info['id']])->delete(); if ($res) { return $this->renderSuccess("删除成功"); } else { return $this->renderError("删除失败"); } } /** * 抽奖统计 * @param Request $request *created by Admin at 2022/12/21 11:14 */ public function luck_draw_log(Request $request){ $id = $request->param('id'); $goods = Goodsmodel::where('id',$id)->find(); if (!$goods){ return $this->renderError("盒子不存在"); } $user_ids = OrderList::field('user_id') ->append(['userinfo']) ->where('goods_id',$goods['id']) ->group('user_id') ->paginate(20); foreach ($user_ids as $value){ $count = OrderList::field('user_id') ->where('goods_id',$goods['id']) ->where('user_id',$value['user_id']) ->count(); $value['count'] = $count; } return $this->renderSuccess("操作成功", $user_ids); } /* 宝箱详情 */ public function box_detail(Request $request){ $id = $request->param('id'); // $goods_num = request()->param('goods_num/d', 0); if(empty($id) ){ return $this->renderError("参数有误"); } $box_detail = GoodsList::where('id', '=', $id) ->where('shang_id', '=', 39) ->find(); if(empty($box_detail)){ return $this->renderError("宝箱不存在"); } $type = Goodsmodel::where(['id'=>$box_detail['goods_id']])->value('type'); if ($type == 1 || $type == 3 || $type == 5 || $type == 6) { $whe[] = ['num', '=', 1]; #因为是一番赏,所以有点区别 $id = GoodsList::where('goods_id', '=', $box_detail['goods_id']) ->where('prize_code','=',$box_detail['prize_code']) ->where('shang_id', '=', 39) ->where('num','=',1) ->value('id'); } elseif ($type == 2) { $whe[] = ['num', '=', 0]; } else { return $this->renderError('请求参数错误1'); } #所有奖品信息 $goods_list = GoodsList::field('goods_id,shang_id,title,imgurl,price,real_pro,sc_money,gn_type') ->append(['shang_info']) ->withAttr('imgurl', function($value, $data){ return imageUrl($value); }) ->where(['box_id' => $id]) ->where($whe) ->order('sort desc,shang_id asc,id asc') ->paginate(1000); foreach ($goods_list as &$value) { $value['shang_title'] = $value['shang_info']['title']; $value['shang_imgurl'] = $value['shang_info']['imgurl']; $value['shang_color'] = $value['shang_info']['color']; unset($value['shang_info']); } return $this->renderSuccess("请求成功", $goods_list); } } 这串代码的这个orderbuy方法报错未定义变量: price
最新发布
06-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值