計算機畢業設計 ssm生鮮配送系統設計及實現 jsp 畢設
一、技術路線:
開發語言:Java
前端技術:JavaScript、VUE.js(2.X)、css3
數據庫:MySQL 5.7
數據庫管理工具:Navicat或sqlyog
開發工具:IDEA或Ecplise
二、項目介紹:
三、運行截圖:
進入到這個環節,也就可以及時檢查出前面設計的需求是否可靠了。一個設計良好的方案在運用于系統實現中,是會幫助系統編制人員節省時間,并提升開發效率的。所以在系統的編程階段,也就是系統實現階段,對于一些不合理的設計需求,也是可以及時發現。因為設計的方案是完全指導系統的編碼過程的。
3.1 管理員功能實現
3.1.1 商品信息管理
管理員進入指定功能操作區之后可以管理商品信息。其頁面見下圖。管理員增刪改查商品信息。對商品進行上架和下架操作,可以為商品添加庫存或減少庫存等操作。
圖3.1 商品信息管理頁面
管理員可以查詢商品的信息列表,實現代碼如下所示:
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map params,ShangpinxinxiEntity shangpinxinxi,
HttpServletRequest request){
EntityWrapper ew = new EntityWrapper();
PageUtils page = shangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinxinxi), params), params));
return R.ok().put("data", page);
}
前端頁面向后臺控制器發送了一個查詢商品信息的ajax的GET請求,請求的名為/shangpinxinxi/page,并傳輸過來要查詢的條件,封裝到后臺中定義的params中,params中的key就是字段名,value就是條件,之后調用shangpinxinxiService類中的queryPage方法,查詢出來數據返回給前端。
3.1.2 用戶管理
管理員進入指定功能操作區之后可以管理用戶信息。其頁面見下圖。管理員查看用戶賬戶余額,可以修改用戶的聯系電話,電子郵箱等信息,在本頁面也能刪除指定的用戶資料。
圖3.2 用戶管理頁面
新增用戶:
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody YonghuEntity yonghu, HttpServletRequest request){
yonghu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(yonghu);
YonghuEntity user = yonghuService.selectOne(new EntityWrapper().eq("yonghuzhanghao", yonghu.getYonghuzhanghao()));
if(user!=null) {
return R.error("用戶已存在");
}
yonghu.setId(new Date().getTime());
yonghuService.insert(yonghu);
return R.ok();
}
前端頁面向后臺控制器發送了一個新增用戶的POST請求,請求的名為/yonghu/save,把用戶信息封裝在后臺定義的yonghu對象中,由于id是唯一的,不允許重復,所以取當前時間的毫秒數加上隨機出來的整數作為id,保證唯一性,通過mybatis的selectOne方法,查詢賬戶是否存在,存在就返回錯誤信息,用戶已存在,不存在就調用mybatis-plus的insert方法,把用戶數據新增到數據庫中。
3.1.3 新聞資訊
管理員進入指定功能操作區之后可以管理新聞資訊信息。其頁面見下圖。管理員負責新聞資訊的發布,在本頁面可以對新聞資訊的內容或圖片等信息進行修改,或者是刪除指定的新聞資訊。
圖3.3 新聞資訊頁面
修改新聞資訊:
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody NewsEntity news, HttpServletRequest request){
//ValidatorUtils.validateEntity(news);
newsService.updateById(news);//全部更新
return R.ok();
}
前端頁面向后臺控制器發送了一個修改新聞的POST請求,請求的名為/new/update,把新聞資訊信息封裝在后臺定義的news對象中,通過mybatis的update
ById方法通過id把新聞資訊數據更改,更新完成后返回更新完成給前端,進行頁面展示和跳轉。
3.1.4 積分記錄
管理員進入指定功能操作區之后管理積分記錄。其頁面見下圖。管理員查詢積分記錄,查看用戶的積分記錄明細,包括添加的積分與使用的積分信息。
圖3.4 積分記錄頁面
管理員可以查詢積分記錄的信息列表,實現代碼如下所示:
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map params,JifenjiluEntity jifenjilu, HttpServletRequest request){
if(!request.getSession().getAttribute("role").toString().equals("管理員")) {
params.put("yonghuId",request.getSession().getAttribute("userId"));
}
PageUtils page= jifenjiluService.queryPage1(params);
return R.ok().put("data", page);
}
前端頁面向后臺控制器發送了一個查詢積分記錄信息的ajax的GET請求,請求的名為/jifenjilu/page,并傳輸過來要查詢的條件,封裝到后臺中定義的params中,params中的key就是字段名,value就是條件,里面有條數,第幾頁,排序字段,用戶姓名,聯系電話等查詢條件,之后調用jifenjiluService類中的queryPage方法,查詢出來數據返回給前端進行展示。
3.1.5 商品評價管理
管理員進入指定功能操作區之后可以管理商品評價信息,其頁面見下圖。管理員根據評論的內容查詢用戶對商品的評價,在本頁面,管理員可以刪除指定的商品評價信息。
圖3.5 商品評價管理頁面
商品評價回復功能:
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody DiscussshangpinxinxiEntity discussshangpinxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(discussshangpinxinxi);
discussshangpinxinxiService.updateById(discussshangpinxinxi);//全部更新
return R.ok();
}
前端頁面向后臺控制器發送了一個商品評價的POST請求,請求的名為/discussshangpinxinxi/update,把回復信息封裝在后臺定義的discussshangpinxinxi對象中,通過mybatis的updateById方法通過id把回復信息修改進數據庫中,更新完成后返回更新完成給前端,進行頁面展示和跳轉。
3.1.6 已支付訂單
管理員進入指定功能操作區之后可以管理已支付訂單。其頁面見下圖。管理員查看訂單的收貨地址信息,然后針對各個訂單進行發貨。
圖3.6 已支付訂單頁面
查詢已支付訂單的信息列表,實現代碼如下所示:
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map params,OrdersEntity orders, HttpServletRequest request){
if(!request.getSession().getAttribute("role").toString().equals("管理員")) {
orders.setUserid((Long)request.getSession().getAttribute("userId"));
}
PageUtils page=null;
if("已完成".equals(orders.getStatus())){
params.put("status",orders.getStatus());
// params.put("userid",orders.getStatus());
page= ordersService.queryPage1(params);
}else{
EntityWrapper ew = new EntityWrapper();
page = ordersService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, orders), params), params));
request.setAttribute("data", page);
}
return R.ok().put("data", page);
}
前端頁面向后臺控制器發送了一個查詢已支付訂單信息的ajax的GET請求,請求的名為/orders/page,并傳輸過來要查詢的條件,封裝到后臺中定義的params中,params中的key就是字段名,value就是條件,里面有條數,第幾頁,排序字段等查詢條件,如果是管理員,就查詢全部的,如果是用戶的話,就把用戶的id塞入查詢條件中,只能查詢自己的,如果是已完成訂單的話,要級聯查詢售后表,所以單獨提出來查詢ordersService的queryPage1方法,如果不是已完成訂單的話,調用ordersService類中的queryPage方法,查詢出來數據返回給前端進行展示。
3.2 用戶功能實現
3.2.1 商品信息
用戶進入指定功能操作區之后可以查看商品信息。其頁面見下圖。用戶在當前頁面除了查看商品詳情之外,也能收藏商品,對商品進行評價,或把商品添加進入購物車,也能選擇直接購買商品。
圖3.7 商品信息頁面
商品查詢:
/**
* 前端詳情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") String id){
ShangpinxinxiEntity shangpinxinxi = shangpinxinxiService.selectById(id);
shangpinxinxi.setClicknum(shangpinxinxi.getClicknum()+1);
shangpinxinxi.setClicktime(new Date());
shangpinxinxiService.updateById(shangpinxinxi);
return R.ok().put("data", shangpinxinxi);
}
前端頁面向后臺控制器發送了一個查詢商品的get請求,請求的名為/shangpinxinxi/detail/{id},把商品的id傳入后臺的id對象中,然后通過mybatis-plus的selectById方法,通過id把數據查詢出來,設置點擊次數加1,Zui近點擊時間設置為當前時間,更新點擊次數和Zui近點擊時間兩個字段的數據更新數據庫中,然后把商品信息返回給前臺,進行展示。
3.2.2 購物車
用戶進入指定功能操作區之后可以管理購物車信息。其頁面見下圖。購物車專門用來保存用戶打算購買的商品的信息,用戶在本頁面除了修改商品購買數量,刪除購買商品之外,也能選擇購買購物車保存的商品。
圖3.8 購物車頁面
用戶可以查詢到當前用戶的購物車中的商品信息,實現代碼如下所示:
/**
* 前端列表
*/
@RequestMapping("/list")
public R list(@RequestParam Map params,CartEntity cart, HttpServletRequest request){
EntityWrapper ew = new EntityWrapper();
PageUtils page = cartService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, cart), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
前端頁面向后臺控制器發送了一個查詢購物車中商品的ajax的GET請求,請求的名為/cart/list,并傳輸過來要查詢的條件,封裝到后臺中定義的params中,params中的key就是字段名,value就是條件,里面有條數,第幾頁,排序字段,當前用戶的id等查詢條件,之后調用cartService類中的queryPage方法,查詢出當前用戶的購物車的所有商品,然后返回給前臺,進行頁面展示。
3.2.3 在線下單
用戶進入指定功能操作區之后可以對需要購買的商品提交訂單。其頁面見下圖。用戶檢查購買的商品信息,對收貨地址進行選擇,然后點擊支付按鈕即可支付訂單。
圖3.9 在線下單頁面
用戶可以查詢到當前用戶的購物車中的商品信息,實現代碼如下所示:
payClick() {
console.log('payClick')
var index = layui.jquery('input[name=address]:checked').val();
console.log(index);
if (!index) {
layui.layer.msg('請選擇收貨地址', {
time: 2000,
icon: 5
});
return
}
// 生成訂單
for (let item of this.dataList) {
// 獲取商品詳情信息
layui.http.request(`${item.tablename}/info/${item.goodid}`, 'get', {}, (res) => {
// 訂單編號
debugger
var orderId = genTradeNo();
let data = res.data;
// 減少庫存
data.shuliang = data.shuliang - item.buynumber;
// 更新庫存信息
layui.http.requestJson(`${item.tablename}/update`, 'post', data, (res) => {
// 添加訂單信息
let order = {
orderid: orderId,
tablename: item.tablename,
userid: this.user.id,
goodid: item.goodid,
goodname: item.goodname,
picture: item.picture,
buynumber: item.buynumber,
discountprice: item.discountprice,
price: item.price,
total: item.price * item.buynumber,
discounttotal: item.discountprice * item.buynumber,
type: 1,
address: this.addressList[index].address,
status: '未支付'
}
layui.http.requestJson(`orders/add`, 'post', order, (res) => {
// 減少余額,更新訂單狀態
// 判斷余額是否充足
if (this.user.money < this.totalPrice) {
layui.layer.msg('余額不足,請先充值', {
time: 2000,
icon: 5
});
return
}
// 如果該商品存在積分
var date = new Date();
var dateformat = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate() + ' ' + date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds();
var s =Number(this.shiyongJifen);
if(s !=0){// 使用積分不為0
let jifenjilu = {
yonghuId: this.user.id,
shangpinxinxiId:item.goodid,
jifenjiluTypes:"使用",
buynumber:this.shiyongJifen,
insertTime:dateformat
}
layui.http.requestJson(`jifenjilu/add`, 'post', jifenjilu, (res) => {});
}
var a = Number(this.user.jifen)-s;
if (data.jifen) {
debugger
// this.user.jifen = Number(this.user.jifen) + Number(data.jifen * item.buynumber);
//用戶積分-這次使用的積分+這次訂單的積分
a+=Number(data.jifen * item.buynumber);
let jifenjilu = {
yonghuId: this.user.id,
shangpinxinxiId:item.goodid,
jifenjiluTypes:"添加",
buynumber:Number(data.jifen * item.buynumber),
insertTime:dateformat
}
layui.http.requestJson(`jifenjilu/add`, 'post', jifenjilu, (res) => {});
}
this.user.jifen=a;
this.user.money = this.user.money - this.totalPrice;
// 更新用戶余額
layui.http.requestJson(`${localStorage.getItem("userTable")}/update`, 'post', this.user, (res) => {
order.status = '已支付'
layui.http.request(`orders/list`, 'get', {
orderid: orderId,
page: 1,
limit: 1,
}, (res) => {
order.id = res.data.list[0].id;
layui.http.requestJson(`orders/update`, 'post', order, (res) => {
// 刪除購物車數據(如果是購物車下單)
if (item.id) {
layui.http.requestJson(`cart/delete`, 'post', [item.id], (res) => {});
}
layui.layer.msg('購買成功', {
time: 2000,
icon: 6
}, function() {
window.location.href='../order/list.jsp'
});
});
});
});
})
})
});
}
},
點擊支付按鈕,會調用payClick方法,進行支付操作,先獲取收貨地址是否被選擇,選擇了進入下一步,沒選擇就提示,請選擇收貨地址,然后獲取當前所有商品的信息,把庫存減去,添加訂單信息,減少余額(如果余額夠,就減去余額,如果余額不夠就把該訂單設置為未支付),如果有積分,就把當前商品的積分加給用戶,把訂單給新增到數據庫中,把余額給更改到數據庫中,執行完成后把購物車中的信息給清空。
3.2.4 已支付訂單
用戶進入指定功能操作區之后可以查看已支付訂單。其頁面見下圖。用戶在已支付訂單模塊查看訂單明細,核對訂單的收貨地址以及購買的商品信息,用戶在本頁面可以點擊退款按鈕進行訂單退款。
圖3.10 已支付訂單頁面
查詢已支付訂單的信息列表,實現代碼如下所示:
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map params,OrdersEntity orders, HttpServletRequest request){
if(!request.getSession().getAttribute("role").toString().equals("管理員")) {
orders.setUserid((Long)request.getSession().getAttribute("userId"));
}
PageUtils page=null;
if("已完成".equals(orders.getStatus())){
params.put("status",orders.getStatus());
// params.put("userid",orders.getStatus());
page= ordersService.queryPage1(params);
}else{
EntityWrapper ew = new EntityWrapper();
page = ordersService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, orders), params), params));
request.setAttribute("data", page);
}
return R.ok().put("data", page);
}
前端頁面向后臺控制器發送了一個查詢已支付訂單信息的ajax的GET請求,請求的名為/orders/page,并傳輸過來要查詢的條件,封裝到后臺中定義的params中,params中的key就是字段名,value就是條件,里面有條數,第幾頁,排序字段等查詢條件,如果是管理員,就查詢全部的,如果是用戶的話,就把用戶的id塞入查詢條件中,只能查詢自己的,如果是已完成訂單的話,要級聯查詢售后表,所以單獨提出來查詢ordersService的queryPage1方法,如果不是已完成訂單的話,調用ordersService類中的queryPage方法,查詢出來數據返回給前端進行展示。
3.2.5 我的地址
用戶進入指定功能操作區之后可以管理收貨地址。其頁面見下圖。用戶在當前頁面新增收貨地址,對已存在的收貨地址進行信息更改,也能刪除不需要的收貨地址信息。
圖3.11 我的地址頁面
查詢我的地址列表,實現代碼如下所示:
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map params,AddressEntity address, HttpServletRequest request){
if(!request.getSession().getAttribute("role").toString().equals("管理員")) {
address.setUserid((Long)request.getSession().getAttribute("userId"));
}
EntityWrapper ew = new EntityWrapper();
PageUtils page = addressService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, address), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
前端頁面向后臺控制器發送了一個查詢我的地址列表信息的ajax的GET請求,請求的名為/address/page,并傳輸過來要查詢的條件,封裝到后臺中定義的params中,params中的key就是字段名,value就是條件,里面有條數,第幾頁,排序字段,當前用戶的id等查詢條件,通過addressService的queryPage方法,從service中把數據查詢出來,然后返回給前端,進行展示。
3.2.6 新聞資訊
用戶進入指定功能操作區之后可以查看新聞資訊信息。其頁面見下圖。用戶查看新聞資訊的標題和圖片,對感興趣的新聞資訊進行其內容的詳細查看。
圖3.12 新聞資訊頁面
查詢新聞咨詢列表,實現代碼如下所示:
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map params,NewsEntity news, HttpServletRequest request){
EntityWrapper ew = new EntityWrapper();
PageUtils page = newsService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, news), params), params));
request.setAttribute("data", page);
return R.ok().put("data", page);
}
前端頁面向后臺控制器發送了一個查詢新聞咨詢信息的ajax的GET請求,請求的名為/news/page,并傳輸過來要查詢的條件,封裝到后臺中定義的params中,params中的key就是字段名,value就是條件,里面有條數,第幾頁,排序字段等查詢條件,通過newsService的queryPage方法,從service中把數據查詢出來,然后返回給前端,進行展示。
- 計算機畢業設計 ssm物資進銷存jsp 畢設 2024-04-28
- 計算機畢業設計 ssm物流配送管理系統 vue 畢設 2024-04-28
- 計算機畢業設計 ssm物流配送人員車輛調度管理系統 vue 畢設 2024-04-28
- 計算機畢業設計 ssm物流管理系統開發 jsp 畢設 2024-04-28
- 計算機畢業設計 ssm流浪動物救助站 vue 畢設 2024-04-28
- 計算機畢業設計 ssm汽車維修保養智能預約系統 vue 畢設 2024-04-28
- 計算機畢業設計 ssm汽車售后服務管理系統 jsp 畢設 2024-04-28
- 計算機畢業設計 ssm樓房銷售系統 jsp 畢設 2024-04-28
- 計算機畢業設計 ssm明嘉新材料公司倉庫管理的設計和實現 jsp 畢設 2024-04-28
- 計算機畢業設計 ssm旅游網頁開發與設計 jsp 畢設 2024-04-28
- 計算機畢業設計 ssm數據結構課程網絡學習平臺 vue 畢設 2024-04-28
- 計算機畢業設計 ssm教室信息管理系統 vue 畢設 2024-04-28
- 計算機畢業設計 ssm技術的稅務門戶網站的實現 vue 畢設 2024-04-28
- 計算機畢業設計 ssm家具銷售庫存管理信息系統 jsp 畢設 2024-04-28
- 計算機畢業設計 ssm家鄉特產網上商城 vue 畢設 2024-04-28