基于java+ssm+vue的购物商城微信小程序

这篇具有很好参考价值的文章主要介绍了基于java+ssm+vue的购物商城微信小程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目介绍

计算机网络发展到现在已经好几十年了,在理论上面已经有了很丰富的基础,并且在现实生活中也到处都在使用,可以说,经过几十年的发展,互联网技术已经把地域信息的隔阂给消除了,让整个世界都可以即时通话和联系,极大的方便了人们的生活。所以说,购物商城小程序用计算机技术来进行设计,不仅在管理方面更加的系统化,操作性强,最重要的是关于数据的保存和使用都能节约大量的时间,该系统非常的好用。

购物商城小程序管理数据的工具是MySQL,编码的语言是Java,运用的框架是SSM框架。该系统可以实现商家星级和商品类型的管理,商品信息管理,商品评价管理,商家管理,商品订单管理,用户管理等功能。

购物商城小程序不仅能让操作人员使用更加地方便,并且设计的也很合理,能有效的避免误操作,让数据在录入的环节就符合设计需要,极大的规避了源头性的输入误差,顺利的让数据变得更加可控并且可靠,让出错的几率降到最低。
基于java+ssm+vue的购物商城微信小程序,微信小程序,java,ssm,vue,mysql,微信小程序
基于java+ssm+vue的购物商城微信小程序,微信小程序,java,ssm,vue,mysql,微信小程序
基于java+ssm+vue的购物商城微信小程序,微信小程序,java,ssm,vue,mysql,微信小程序

开发环境

编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SSM
编译工具:idea或者eclipse,微信开发者工具,jdk1.8,maven
支持定做:java/php/python/android/小程序vue/爬虫/c#/asp.net

系统实现

5 系统实现
下面主要是通过功能实现界面截图的形式,并且运用文字来描述功能实现界面的内容。
5.1 管理员功能实现
5.1.1 商家管理
该功能主要用于实现对商家基本信息的管理,商家管理界面的运行效果见图5.1。在此界面,管理员根据商家名称查询商家,可以修改,删除商家资料。商家资料包括商家名称,联系方式,邮箱等信息。
基于java+ssm+vue的购物商城微信小程序,微信小程序,java,ssm,vue,mysql,微信小程序

图5.1 商家管理界面

5.1.2 公告信息管理
该功能主要用于实现对公告基本信息的管理,公告信息管理界面的运行效果见图5.2。在此界面,管理员不仅需要新增公告内容,还需要对以前发布的公告信息进行维护,主要包括对有错误信息的公告内容进行修改以及删除需要删除的公告等。
基于java+ssm+vue的购物商城微信小程序,微信小程序,java,ssm,vue,mysql,微信小程序

图5.2 公告信息管理界面

5.1.3 商家星级管理
该功能主要用于实现对商家星级基本信息的管理,商家星级管理界面的运行效果见图5.3。在此界面,管理员主要是新增商家星级类型名称,对商家星级信息进行修改也是修改商家星级类型名称信息,查询商家星级也是根据商家星级类型查询。
基于java+ssm+vue的购物商城微信小程序,微信小程序,java,ssm,vue,mysql,微信小程序

图5.3 商家星级管理界面

5.2 商家功能实现
5.2.1 商品管理
该功能主要用于实现对商品基本信息的管理,商品管理界面的运行效果见图5.4。在此界面,商家对商品的照片进行上传,登记商品的原价,现价,登记商品名称以及商品库存信息等,对于商品的基础信息,商家可以修改,删除,对于商品的库存信息,商家可以增加库存,可以减少商品库存等。如果商家不需要再销售某种商品,商家则可以下架商品。
基于java+ssm+vue的购物商城微信小程序,微信小程序,java,ssm,vue,mysql,微信小程序

图5.4 商品管理界面

5.2.2 商品评价管理
该功能主要用于实现对商品评价基本信息的管理,商品评价管理界面的运行效果见图5.5。在此界面,商家回复对商品进行评价的用户,查看用户对商品评价的内容。
基于java+ssm+vue的购物商城微信小程序,微信小程序,java,ssm,vue,mysql,微信小程序

图5.5 商品评价管理界面

5.2.3 商品订单管理
该功能主要用于实现对商品订单基本信息的管理,商品订单管理界面的运行效果见图5.6。在此界面,商家可以根据商品名称,商品类型以及用户姓名等条件来实现对商品订单的查询,同时可以查看商品订单的实付价格,地址,收货人,支付类型等信息,商家还可以参与订单商品的发货。
基于java+ssm+vue的购物商城微信小程序,微信小程序,java,ssm,vue,mysql,微信小程序

图5.6 商品订单管理界面

5.3 用户功能实现
5.3.1 商品信息
商品信息界面的运行效果见图5.7。在此界面,用户通过商品介绍来了解商品,如果用户有购买需求,可以点击商品信息界面的加入购物车按钮先保存,后期再购买,或者是直接点击购买按钮直接下单。
基于java+ssm+vue的购物商城微信小程序,微信小程序,java,ssm,vue,mysql,微信小程序

图5.7 商品信息界面

5.3.2 订单确认
订单确认界面的运行效果见图5.8。在此界面,用户对购买清单进行检查,主要是检查购买的商品信息是否正确,或者是检查购买的商品的数量是否正确,以及对收货的地址进行检查,最后查看原价以及折扣价信息,然后支付。
基于java+ssm+vue的购物商城微信小程序,微信小程序,java,ssm,vue,mysql,微信小程序

图5.8 订单确认界面

5.3.3 我的商品订单
我的商品订单界面的运行效果见图5.9。在此界面,用户查看属于自己的所有的商品订单信息,包括已收货,已发货等商品订单信息,用户根据个人需要对商品订单进行相应操作。
基于java+ssm+vue的购物商城微信小程序,微信小程序,java,ssm,vue,mysql,微信小程序

图5.9 我的商品订单界面

5.3.4 购物车
购物车界面的运行效果见图5.10。在此界面,用户可以把需要购买的商品都放入购物车保存,然后统一下单支付购买的商品,这样既方便又节省时间。
基于java+ssm+vue的购物商城微信小程序,微信小程序,java,ssm,vue,mysql,微信小程序

图5.10 购物车界面

核心代码

package com.controller;

import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;

import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;

/**
 * 购物车
 * 后端接口
 * @author
 * @email
*/
@RestController
@Controller
@RequestMapping("/cart")
public class CartController {
    private static final Logger logger = LoggerFactory.getLogger(CartController.class);

    @Autowired
    private CartService cartService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    //级联表service
    @Autowired
    private ShangpinService shangpinService;
    @Autowired
    private YonghuService yonghuService;



    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永不会进入");
        else if("用户".equals(role))
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        else if("商家".equals(role))
            params.put("shangjiaId",request.getSession().getAttribute("userId"));
        if(params.get("orderBy")==null || params.get("orderBy")==""){
            params.put("orderBy","id");
        }
        PageUtils page = cartService.queryPage(params);

        //字典表数据转换
        List<CartView> list =(List<CartView>)page.getList();
        for(CartView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c, request);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        CartEntity cart = cartService.selectById(id);
        if(cart !=null){
            //entity转view
            CartView view = new CartView();
            BeanUtils.copyProperties( cart , view );//把实体数据重构到view中

                //级联表
                ShangpinEntity shangpin = shangpinService.selectById(cart.getShangpinId());
                if(shangpin != null){
                    BeanUtils.copyProperties( shangpin , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setShangpinId(shangpin.getId());
                }
                //级联表
                YonghuEntity yonghu = yonghuService.selectById(cart.getYonghuId());
                if(yonghu != null){
                    BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setYonghuId(yonghu.getId());
                }
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody CartEntity cart, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,cart:{}",this.getClass().getName(),cart.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永远不会进入");
        else if("用户".equals(role))
            cart.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));

        Wrapper<CartEntity> queryWrapper = new EntityWrapper<CartEntity>()
            .eq("yonghu_id", cart.getYonghuId())
            .eq("shangpin_id", cart.getShangpinId())
            .eq("buy_number", cart.getBuyNumber())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        CartEntity cartEntity = cartService.selectOne(queryWrapper);
        if(cartEntity==null){
            cart.setCreateTime(new Date());
            cart.setInsertTime(new Date());
            cartService.insert(cart);
            return R.ok();
        }else {
            return R.error(511,"商品已添加到购物车");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody CartEntity cart, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,cart:{}",this.getClass().getName(),cart.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
//        else if("用户".equals(role))
//            cart.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
        //根据字段查询是否有相同数据
        Wrapper<CartEntity> queryWrapper = new EntityWrapper<CartEntity>()
            .notIn("id",cart.getId())
            .andNew()
            .eq("yonghu_id", cart.getYonghuId())
            .eq("shangpin_id", cart.getShangpinId())
            .eq("buy_number", cart.getBuyNumber())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        CartEntity cartEntity = cartService.selectOne(queryWrapper);
        cart.setUpdateTime(new Date());
        if(cartEntity==null){
            cartService.updateById(cart);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        cartService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }


    /**
     * 批量上传
     */
    @RequestMapping("/batchInsert")
    public R save( String fileName){
        logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
        try {
            List<CartEntity> cartList = new ArrayList<>();//上传的东西
            Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
            Date date = new Date();
            int lastIndexOf = fileName.lastIndexOf(".");
            if(lastIndexOf == -1){
                return R.error(511,"该文件没有后缀");
            }else{
                String suffix = fileName.substring(lastIndexOf);
                if(!".xls".equals(suffix)){
                    return R.error(511,"只支持后缀为xls的excel文件");
                }else{
                    URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
                    File file = new File(resource.getFile());
                    if(!file.exists()){
                        return R.error(511,"找不到上传文件,请联系管理员");
                    }else{
                        List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
                        dataList.remove(0);//删除第一行,因为第一行是提示
                        for(List<String> data:dataList){
                            //循环
                            CartEntity cartEntity = new CartEntity();
//                            cartEntity.setYonghuId(Integer.valueOf(data.get(0)));   //所属用户 要改的
//                            cartEntity.setShangpinId(Integer.valueOf(data.get(0)));   //商品 要改的
//                            cartEntity.setBuyNumber(Integer.valueOf(data.get(0)));   //购买数量 要改的
//                            cartEntity.setCreateTime(date);//时间
//                            cartEntity.setUpdateTime(new Date(data.get(0)));          //更新时间 要改的
//                            cartEntity.setInsertTime(date);//时间
                            cartList.add(cartEntity);


                            //把要查询是否重复的字段放入map中
                        }

                        //查询是否重复
                        cartService.insertBatch(cartList);
                        return R.ok();
                    }
                }
            }
        }catch (Exception e){
            return R.error(511,"批量插入数据异常,请联系管理员");
        }
    }





    /**
    * 前端列表
    */
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));

        // 没有指定排序字段就默认id倒序
        if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){
            params.put("orderBy","id");
        }
        PageUtils page = cartService.queryPage(params);

        //字典表数据转换
        List<CartView> list =(List<CartView>)page.getList();
        for(CartView c:list)
            dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
        return R.ok().put("data", page);
    }

    /**
    * 前端详情
    */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        CartEntity cart = cartService.selectById(id);
            if(cart !=null){


                //entity转view
                CartView view = new CartView();
                BeanUtils.copyProperties( cart , view );//把实体数据重构到view中

                //级联表
                    ShangpinEntity shangpin = shangpinService.selectById(cart.getShangpinId());
                if(shangpin != null){
                    BeanUtils.copyProperties( shangpin , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setShangpinId(shangpin.getId());
                }
                //级联表
                    YonghuEntity yonghu = yonghuService.selectById(cart.getYonghuId());
                if(yonghu != null){
                    BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                    view.setYonghuId(yonghu.getId());
                }
                //修改对应字典表字段
                dictionaryService.dictionaryConvert(view, request);
                return R.ok().put("data", view);
            }else {
                return R.error(511,"查不到数据");
            }
    }


    /**
    * 前端保存
    */
    @RequestMapping("/add")
    public R add(@RequestBody CartEntity cart, HttpServletRequest request){
        logger.debug("add方法:,,Controller:{},,cart:{}",this.getClass().getName(),cart.toString());
        Wrapper<CartEntity> queryWrapper = new EntityWrapper<CartEntity>()
            .eq("yonghu_id", cart.getYonghuId())
            .eq("shangpin_id", cart.getShangpinId())
            .eq("buy_number", cart.getBuyNumber())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        CartEntity cartEntity = cartService.selectOne(queryWrapper);
        if(cartEntity==null){
            cart.setCreateTime(new Date());
            cart.setInsertTime(new Date());
        cartService.insert(cart);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }


}

论文参考

基于java+ssm+vue的购物商城微信小程序,微信小程序,java,ssm,vue,mysql,微信小程序

目 录
1 绪论 1
1.1 选题背景 1
1.2 选题意义 1
1.3 研究内容 2
2 系统开发技术 3
2.1 MySQL数据库 3
2.2 IDEA简介 3
2.3 SSM框架 4
2.4 Vue框架 4
3 系统分析 5
3.1 可行性研究 5
3.1.1 经济可行性 5
3.1.2 时间可行性 5
3.1.3 操作可行性 5
3.2 系统性能分析 6
3.2.1 系统的安全性 6
3.2.2 系统的易用性 6
3.2.3 系统的健壮性 6
3.3 系统流程分析 7
3.4 系统功能分析 9
4 系统设计 13
4.1 系统设计原则 13
4.2 功能模块设计 14
4.3 数据库设计 16
4.3.1 数据库E-R图 17
4.3.2 数据库表结构 19
5 系统实现 23
5.1 管理员功能实现 23
5.1.1 商家管理 23
5.1.2 公告信息管理 23
5.1.3 商家星级管理 24
5.2 商家功能实现 25
5.2.1 商品管理 25
5.2.2 商品评价管理 25
5.2.3 商品订单管理 26
5.3 用户功能实现 27
5.3.1 商品信息 27
5.3.2 订单确认 28
5.3.3 我的商品订单 28
5.3.4 购物车 29
6 系统测试 31
6.1 功能测试 31
6.2 可用性测试 31
6.3 测试结果分析 32
结 论 33
参考文献 35
致 谢 36文章来源地址https://www.toymoban.com/news/detail-785726.html

到了这里,关于基于java+ssm+vue的购物商城微信小程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Java+uniapp微信小程序的购物商城系统设计与实现

     博主介绍 :擅长Java、微信小程序、Python、Android等,专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 Java项目精品实战案例(300套) Java+小程序项目实战(200套) 目录 一、效果演示 二、前言介绍 三、主要

    2024年02月06日
    浏览(27)
  • java计算机毕业设计基于安卓Android/微信小程序的花店鲜花销售购物商城系统APP

    网上花卉鲜花销售购物网站是一个典型的电子商务网站,它的主要销售对象是人们生活中来不开的鲜花信息,鲜花以来是一个美好的代名词,无论是在节假日还是在一起特殊的节日中人们总会用鲜花来装扮自己的生活。不同的相鲜花被比喻了不同的意义。例如康乃馨被人们用

    2024年02月09日
    浏览(34)
  • 【毕业设计】基于微信小程序的超市购物系统 购物商城微信小程序

    超市是我们日常生活中必不可少的一部份,但是每当到了节假日的时候我们都能够遇到这样的问题,排队结账的队伍总是一眼望不到头,毫不夸张的说排队结账的时间都要赶超选购的时间了,这是传统超市需要转型的原因之一;其次超市的物品种类丰富,就是因为物品种类丰

    2024年02月09日
    浏览(30)
  • 基于微信小程序的网上购物商城

     博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了六年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言,只有实实在在的写点程序。 🍅 文末点击卡片获取联系 🍅 技术:springboot+mys

    2024年04月12日
    浏览(33)
  • 【毕业设计】基于微信小程序的购物商城系统

    Hi,大家好,学长今天向大家介绍 一个小程序项目 微信小程序商城 大家可用于 毕业设计 废话不多说,学长先展示实现效果 Spring Boot Vue 微信小程序 首页 专题列表、专题详情 分类列表、分类详情 品牌列表、品牌详情 新品首发、人气推荐 优惠券列表、优惠券选择 团购 搜索

    2024年02月11日
    浏览(35)
  • 微信小程序vue+uniapp体育用品羽毛球购物商城

    随着移动互联网的发展,电子商务在全球范围内迅速发展。电子商务的快速发展促使传统零售业转向电子商务,羽毛球购物商城小程序作为一种新型的购物方式,已经吸引了越来越多的消费者。本文旨在探讨羽毛球购物商城小程序系统的设计和实现。 本文首先分析了羽毛球购

    2024年01月23日
    浏览(33)
  • 案例097:基于微信小程序+PHP的家具购物商城系统

    目录 前言 系统展示 管理员模块的实现 用户管理 家具分类管理 家具新品管理 家具广告管理 小程序用户模块的实现 首页 家具信息 我的 代码实现 登录功能实现代码 注册功能实现代码 密码重置功能实现代码 修改信息功能实现代码 删除信息功能实现代码 保存信息功能实现代

    2024年01月15日
    浏览(31)
  • 【毕业设计】基于微信小程序的购物商城系统 开题报告

    💗博主介绍:✌全网粉丝10W+,CSDN全栈领域优质创作者,博客之星、掘金/华为云/阿里云等平台优质作者。大学毕业那年,曾经有幸协助指导老师做过毕业设计课题分类、论文初选(查看论文的格式)、代码刻录等打杂的事情,也帮助过同界N多同学完成过毕业设计工作,毕业后

    2024年02月07日
    浏览(29)
  • 基于PHP水果购物商城微信小程序:技术实现与用户体验

    一、引言 随着移动互联网的普及和微信小程序的兴起,越来越多的用户选择在微信小程序上进行购物。水果作为一种日常消费的商品,具有广阔的市场前景。本文将探讨如何使用PHP技术构建一个水果购物商城微信小程序,并分析其技术实现、用户体验和优势。 二、技术实现

    2024年02月19日
    浏览(33)
  • 基于微信小程序的商城购物系统的设计与实现(文档+源码)

    目 录 第一章 绪论 1.1开发背景 1.2所选题目意义与目的 1.3研究现状 1.4本文研究内容 第二章 关键技术介绍 2.1 NODE.JS 2.2 MYSQL 2.3 VUE 2.4 HTML 2.5 JS 2.6 CSS 2.7 小程序开发者工具 第三章 系统分析 3.1 微商城小程序设计思路 3.2 数据表 第四章 系统实现 4.1 购物流程 4.2开店流程 4.3 商城首

    2024年01月18日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包