基于java SpringBoot和Vue零食销售网站设计

        随着时代的发展,传统的超市购物方式已经不能满足人们的需求,对于顾客来说,排队购物和支付购物费用的问题亟待解决。对于实体超市来说,他们面临着网上购物的竞争压力,作为超市经理,他们要降低成本,节约人力,方便顾客购物和计算,因此提出了网上超市系统的设计和开发。本文分析了目前超市的收费模式,提出了网上超市无人售货系统的设计与开发,客户使用网站系统进行支付,改变原来的收费方式,实现自助购买、及时支付、实现实时查询。不仅可以节省超市人力,还可以节省顾客等待结算的时间。随着网络技术的发展和普及,人们的生活发生了迅速的变化。特别是计算机在经济和社会各个领域的应用,为了使消费者的网上购物过程简单、方便、安全、快捷,网上购物已经成为一种新的流行购物方式

        近年来,随着“互联网+”“大数据”等技术的快速普及,网店进入了快速发展时期,电子商务的出现显然对人们的购物方式产生了重大影响,从最初的商店购物转向网上购物。B2C网上购物中心系统是指在网络上创建虚拟购物中心,以满足用户的网上购物需求。随着时代的发展,传统的超市购物方式已经不能满足人们的需求,对于顾客来说,排队购物和支付购物费用的问题亟待解决。

 

 

实现的功能:

系统分为普通用户、商家和管理员三种角色;

本系统的功能应该包括:用户登录和注册、订单管理、钱包管理、商品管理、交易管理、充值管理、用户管理等功能。

注册、登录:未注册用户可以注册,包括普通用户注册和商家注册,有了账号后可以登录网站;

订单管理:普通用户可以查看和管理自己的购买订单,商家可以查看买家的购买订单;

钱包管理:普通用户和商家可以查看自己的钱包余额等信息;

商品管理:主要是商家可以上传、编辑、上架、下架商品等操作,管理员可以审核商家的商品,审核通过可以展示在网站首页;

交易管理:主要是管理员可以查看普通用户和商家的交易信息;

充值管理:管理员可以给普通用户和商家进行钱包的充值,方便使用;

用户管理:管理员可以审核用户的注册信息,只有审核通过才可以登录网站。

 

 

用到的技术:

后端 java语言,SpringBoot框架,MySql数据库,Maven依赖管理;

前端 Vue,element-ui等。

 

 部分代码展示

/*** 订单(Order)表控制层**/
@Slf4j
@RestController
@RequestMapping("order")
public class OrderController extends ApiController {/*** 服务对象*/@Autowiredprivate OrderService orderService;@Autowiredprivate UserService userService;@Autowiredprivate ShopService shopService;@Autowiredprivate MiddleCountService middleCountService;@Autowiredprivate CommodityService commodityService;/*** 通过主键查询单条数据** @param id 主键* @return 单条数据*/@GetMapping("{id}")public R selectOne(@PathVariable Serializable id) {return success(this.orderService.getById(id));}@GetMapping("user/{userId}")public R selectByUserID(@RequestParam("page") long page, @PathVariable Serializable userId) {return success(this.orderService.page(new Page<>(page, 20),new LambdaQueryWrapper<Orders>().eq(Orders::getUserId, userId)));}@GetMapping("shop/{shopId}")public R selectByShopID(@RequestParam("page") long page, @PathVariable Serializable shopId) {return success(this.orderService.page(new Page<>(page, 20),new LambdaQueryWrapper<Orders>().eq(Orders::getShopId, shopId).between(Orders::getStatus,2,8)));}@GetMappingpublic R selectAll(@RequestParam("page") long page){return success(this.orderService.pageByStatus(new Page<>(page, 20),8));}/*** 修改数据** @param orders 实体对象* @return 修改结果*/@PostMapping("update")public R update(@RequestBody Orders orders) {if (orders.getCanReturn() == 1) {if (orders.getStatus() == 5 || orders.getStatus() == 6) {return failed("支付超过24h,无法退货");}}else if (orders.getStatus() == 6) {MiddleCount middleCount = middleCountService.getMiddleCountByOrderId(orders.getId());User user = userService.getById(orders.getUserId());user.setWallet(user.getWallet() + middleCount.getAmount());middleCountService.removeById(middleCount.getId());}if (orders.getStatus() == 1 || orders.getStatus() == 6) {Commodity commodity = commodityService.getById(orders.getCommodityId());commodity.setInventory(commodity.getInventory() + orders.getQuantity());commodityService.updateById(commodity);}return success(this.orderService.updateById(orders));}@PostMapping("pay")public R payOrders(@RequestBody List<Orders> orders) {User user = userService.getById(orders.get(0).getUserId());double sum = orders.stream().mapToDouble(Orders::getAmount).sum();if (user.getWallet() < sum) {return failed("余额不足");}for (Orders order : orders) {MiddleCount middleCount = new MiddleCount();middleCount.setOrderId(order.getId());middleCount.setUserId(user.getId());middleCount.setAmount(order.getAmount());middleCount.setSellerId(shopService.getById(order.getShopId()).getSellerId());middleCountService.save(middleCount);user.setWallet(user.getWallet() - order.getAmount());order.setStatus(2);orderService.updateById(order);}return success(userService.updateById(user));}
}
<template><div class="order"><el-table :data="orders" stripe style="width: 100%"><el-table-column width="30"></el-table-column><el-table-column prop="commodityId"  label="商品ID"  width="80"></el-table-column><el-table-column prop="quantity"  label="数量"  width="80"></el-table-column><el-table-column prop="amount" label="总价"  width="100"></el-table-column><el-table-column  prop="creatTime" label="订单开始时间" width="200"></el-table-column><el-table-column prop="endTime" label="订单结束时间"  width="200"></el-table-column><el-table-column prop="status" label="标签" width="140":filters="[{ text: '待支付', value: 0}, { text: '取消订单', value: 1 },{ text: '待发货', value: 2}, { text: '已收货', value: 4 },{ text: '退货审核中', value: 5 },{ text: '已退货', value: 6},{ text: '拒绝退货', value: 7},{ text: '已完成', value: 8} ]":filter-method="filterTag"filter-placement="bottom-end"><template slot-scope="scope"><el-tag:type="scope.row.status === 8 ? 'success' : 'primary'"disable-transitions>{{scope.row.status | formatStatus }}</el-tag></template></el-table-column><el-table-column label="操作" width="200"><template slot-scope="scope"><el-button v-if="determineType(scope.row.status,'付款')" size="mini" type="danger" @click="handlePay(scope.row)">付款</el-button><el-button v-if="determineType(scope.row.status,'取消订单')" size="mini"  @click="handleCancelPay(scope.row)">取消订单</el-button><el-button v-if="determineType(scope.row.status,'退货')" size="mini" type="danger"  @click="handleReturnGoods(scope.row)">退货</el-button><el-button v-if="determineType(scope.row.status,'确认订单')" size="mini"  @click="handleConfirm(scope.row)">确认订单</el-button><el-button v-if="determineType(scope.row.status,'取消退货')" size="mini"  @click="handleCancelReturn(scope.row)">取消退货</el-button></template></el-table-column></el-table></div>
</template>
<script>
import { mapState } from 'vuex'
export default {name:"order",data(){return{orders:[],}},created(){this.axios.get("/order/user/"+this.user.id,{params:{page:1}}).then(response => {if(response.status == 200){this.orders = response.data.data.records;}})},computed:{...mapState('user',['user']),},methods:{filterTag(value, row) {return row.status === value;},//付款handlePay(row){this.$confirm("确认支付?").then(() =>{this.axios.post("/order/pay",[row]).then(response => {if(response.data.code == 0){this.$message({type:'success',message:"支付成功!"})row.status = 2}else{this.$message(response.data.msg)}}).catch(() => {error => alert(error)});}).catch(()=>{})},//取消订单handleCancelPay(row){this.$confirm("确认取消清单?").then(() =>{let old = row.status;row.status = 1let ordEndTime = row.endTimerow.endTime = this.formatDate(new Date(),'YY-MM-DD hh:mm:ss')this.axios.post("/order/update",row).then(response => {if(response.data.code == 0){this.$message({type:'success',message:"取消订单成功!"})}else{this.$message(response.data.msg)row.status = oldrow.endTime = ordEndTime}}).catch(() => {error => alert(error)});}).catch(()=>{})},//退货handleReturnGoods(row){this.$confirm("确认提交退货申请?").then(() =>{let old = row.status;row.status = 5this.axios.post("/order/update",row).then(response => {if(response.data.code == 0){this.$message({type:'success',message:"申请退货成功,请等待商家回应!"})}else{this.$message(response.data.msg)row.status = old}}).catch(() => {error => alert(error)});}).catch(()=>{})},//取消退货handleCancelReturn(row){this.$confirm("确认取消退货? 确认后订单不能再次退货!").then(() =>{let oldStatus = row.status;row.status = 8let ordEndTime = row.endTimerow.endTime = this.formatDate(new Date(),'YY-MM-DD hh:mm:ss')this.axios.post("/order/update",row).then(response => {if(response.data.code == 0){this.$message({type:'success',message:"取消退货成功,该订单已完成!"})}else{this.$message(response.data.msg)row.status = oldStatusrow.endTime = ordEndTime}}).catch(() => {error => alert(error)});}).catch(()=>{})},//确认订单handleConfirm(row){this.$confirm("确认订单已完成?").then(() =>{let old = row.status;row.status = 8let ordEndTime = row.endTimerow.endTime = this.formatDate(new Date(),'YY-MM-DD hh:mm:ss')this.axios.post("/order/update",row).then(response => {if(response.data.code == 0){this.$message({type:'success',message:"确认成功,该订单已完成!"})}else{this.$message(response.data.msg)row.status = oldrow.endTime = ordEndTime}}).catch(() => {error => alert(error)});}).catch(()=>{})},//判断订单处于哪一阶段,显示该阶段的操作determineType(status, operation){if(operation == "付款"){if(status == 0) return true}else if(operation == "取消订单"){if(status == 0) return true}else if(operation == "退货"){if(status == 4 || status == 3) return true}else if(operation == "取消退货"){if(status == 5) return true}else{if(status == 4 || status == 6 || status == 3) return true}return false},//格式化时间
//      formatDate(new Date().getTime());//2017-05-12 10:05:44
//      formatDate(new Date().getTime(),'YY年MM月DD日');//2017年05月12日
//      formatDate(new Date().getTime(),'今天是YY/MM/DD hh:mm:ss');//今天是2017/05/12 10:07:45formatDate(time,format='YY-MM-DD hh:mm:ss'){var date = new Date(time);var year = date.getFullYear(),month = date.getMonth()+1,//月份是从0开始的day = date.getDate(),hour = date.getHours(),min = date.getMinutes(),sec = date.getSeconds();var preArr = Array.apply(null,Array(10)).map(function(elem, index) {return '0'+index;});开个长度为10的数组 格式为 00 01 02 03       var newTime = format.replace(/YY/g,year).replace(/MM/g,preArr[month]||month).replace(/DD/g,preArr[day]||day).replace(/hh/g,preArr[hour]||hour).replace(/mm/g,preArr[min]||min).replace(/ss/g,preArr[sec]||sec);        return newTime;         }},filters:{formatStatus(val){let value = "";switch(val) {case 0:value = "待支付";break;case 1:value = "已取消";break;case 2:value = "待发货";break;case 3:value = "运输中";break;case 4:value = "已收货";break;case 5:value = "退货审核中";break;case 6:value = "已退货";break;case 7:value = "拒绝退货";break;case 8:value = "已完成";break;                    }return value;}}
}
</script><style scoped>.order{width: 1030px;margin: 0 auto;margin-top: 50px;}
</style>

基于JAVA SpringBoot和vue零食销售网站设计

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/58805.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue去掉所有输入框两边空格,封装指令去空格,支持Vue2和Vue3,ElementUI Input去空格

需求背景 就是页面很多表单输入框&#xff0c;期望在提交的时候&#xff0c;都要把用户两边的空格去掉 ❌使用 vue 的指令 .trim 去掉空格 中间会输入不了空格&#xff0c; 比如我想输入 你好啊 中国, 这中间的空格输入不了&#xff0c;只能变成 你好啊中国 ❌在提交的时候使用…

HTML5 中新增了哪些表单元素?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ HTML5 中新增了的表单元素⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚…

echarts图表中Y(y)轴间距固定,等间距,刻度固定,设置最大值、最小值

echarts图表中Y(y)轴间距固定&#xff0c;等间距&#xff0c;刻度固定&#xff0c;设置最大值、最小值 正确的写法interval: 2.5指定刻度间隔,我的间距2.5 、5、7.5、10、12.5,所以需要改成这种。如果你是 yAxis: {name: 退款率%,type: value,min: 2.5,max: 12.5,interval: …

常见的数据结构(顺序表、顺序表、链表、栈、队列、二叉树)

线性表&#xff08;Linear List&#xff09;  1.什么是线性表 2.线性表的特点 3.线性表的基本运算 顺序表 1.什么是顺序表 2.时间复杂度&#xff1a; 链表 1.什么是链表 2.单向链表 3. 双向链表 4.ArrayList和LinkedList的使用 栈Stack  1.什么是栈  2.栈的基本方法 队列…

爬虫程序中使用爬虫ip的优势

作为一名爬虫技术员&#xff0c;我发现在爬虫程序中使用代理IP可以提升爬取效率和匿名性。今天&#xff0c;我就来详细讲解一下代理IP在爬虫程序中的工作原理及应用。 首先&#xff0c;我们来了解一下代理IP在爬虫程序中的工作原理。当我们使用爬虫程序进行数据采集时&#xf…

如何把非1024的采样数放入aac编码器

一. aac对数据规格要求 二、代码实现 1.初始化 2.填入数据 3.取数据 三.图解 一. aac对放入的采样数要求 我们知道aac每次接受的字节数是固定的&#xff0c;在之前的文章里有介绍libfdk_aac音频采样数和编码字节数注意 它支持的采样数和编码字节数分别是&#xff1a; fdk_aac …

如何实现 Java SpringBoot 自动验证入参数据的有效性

Java SpringBoot 通过javax.validation.constraints下的注解&#xff0c;实现入参数据自动验证 如果碰到 NotEmpty 否则不生效&#xff0c;注意看下 RequestBody 前面是否加上了Valid Validation常用注解汇总 Constraint详细信息Null被注释的元素必须为 nullNotNull被注释的元…

MATLAB详细安装教程(亲测有效!!)

1.复制以下链接&#xff0c;用百度网盘打开&#xff0c;下载 链接&#xff1a;https://pan.baidu.com/s/19AwQeCRYofGAV8sfDIm5PQ 提取码&#xff1a;mads 我是下载到D盘自己创建的文件中 2.下载完毕后打开此文件夹&#xff0c;点击最后一项 3.点击右上角高级选项&#xff0…

HBase-组成

client 读写请求HMaster 管理元数据监控region是否需要进行负载均衡&#xff0c;故障转移和region的拆分RegionServer 负责数据cell的处理&#xff0c;例如写入数据put&#xff0c;查询数据get等 拆分合并Region的实际执行者&#xff0c;由Master监控&#xff0c;由regionServ…

【MATLAB第65期】基于LSTM长短期记忆网络的多输入单输出数据预测未来思路介绍(短期预测)

【MATLAB第65期】基于LSTM长短期记忆网络的多输入单输出数据预测未来思路介绍&#xff08;短期预测&#xff09; 往期第13期已实现多输入单输出滑动窗口回归预测 多输入单输出滑动窗口回归预测 往期第54期已实现多输入多输出滑动窗口回归预测 多输入多输出滑动窗口回归预测 一…

neo4j终端操作

1】进入容器 (base) xiaokkkxiaokkkdeMacBook-Pro ~ % docker exec -it 77ed5fe2b52e /bin/bash 2】启动、停止neo4j root77ed5fe2b52e:/var/lib/neo4j/bin# ./neo4j start Neo4j is already running (pid:7). Run with --verbose for a more detailed error message.root7…

pycharm离线安装依赖包

一、对于单个下载离线包&#xff0c;然后安装 1、先去https://pypi.org/网站下载离线包&#xff0c;下载到本地&#xff1b; 2、从磁盘中找到刚刚下载包&#xff0c;点击确定就可以安装了 二、将本地项目所有依赖包全部下载下来&#xff0c;然后批量在另一个项目&#xff…