基于javaweb+mysql的网上书店管理系统在线购书系统(前台、后台)
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
前台:购书
后台:管理书、用户、订单发货等
前台
后台
技术框架
JavaWeb SpringBoot MyBatis Thymeleaf html layui JavaScript SpringMVC MySQL
* 删除指定orderId的订单
* @param orderId
* @return
*/
@DeleteMapping("/list/{orderId}")
public ResultVO deleteOrder(@PathVariable("orderId") Integer orderId) {
int orders = orderService.deleteByOrderId(orderId);
return new ResultVO(ResultCode.SUCCESS,null);
}
/* @GetMapping("/list/user_order/{userId}")
public ResultVO getOrderByUserId(@PathVariable("userId") Integer userId) {
List<Order> orders = orderService.selectByUserId(userId);
if(orders.size()!=0)
{
return new ResultVO(ResultCode.SUCCESS,orders);
}
else
body:after {content:'';background-repeat:no-repeat;background-size:cover;-webkit-filter:blur(3px);-moz-filter:blur(3px);-o-filter:blur(3px);-ms-filter:blur(3px);filter:blur(3px);position:absolute;top:0;left:0;right:0;bottom:0;z-index:-1;}
.layui-container {width: 100%;height: 100%;overflow: hidden}
.admin-login-background {width:360px;height:300px;position:absolute;left:50%;top:40%;margin-left:-180px;margin-top:-100px;}
.logo-title {text-align:center;letter-spacing:2px;padding:14px 0;}
.logo-title h1 {color:#1E9FFF;font-size:25px;font-weight:bold;}
.login-form {background-color:#fff;border:1px solid #fff;border-radius:3px;padding:14px 20px;box-shadow:0 0 8px #eeeeee;}
.login-form .layui-form-item {position:relative;}
.login-form .layui-form-item label {position:absolute;left:1px;top:1px;width:38px;line-height:36px;text-align:center;color:#d2d2d2;}
.login-form .layui-form-item input {padding-left:36px;}
.captcha {width:60%;display:inline-block;}
.captcha-img {display:inline-block;width:34%;float:right;}
.captcha-img img {height:34px;border:1px solid #e6e6e6;height:36px;width:100%;}
</style>
</head>
<body>
<div class="layui-container">
<div class="admin-login-background">
<div class="layui-form login-form">
<form class="layui-form" action="">
<div class="layui-form-item logo-title">
<h1>后台管理系统登录</h1>
</div>
<div class="layui-form-item">
<label class="layui-icon layui-icon-username" for="adminName"></label>
<input type="text" id="adminName" name="adminName" lay-verify="required|account" placeholder="管理员名" autocomplete="off" class="layui-input" value="admin">
</div>
<div class="layui-form-item">
import com.demo.util.ResultVO;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
/**
* @Description: 图片上传控制器
* @Author: guozongchao
* @Date: 2020/6/5 16:49
*/
@RestController
@RequestMapping("/upload")
public class ImageUploadController {
@PostMapping("/book_image")
public ResultVO uploadBookImage(MultipartFile bookImage, HttpServletRequest request) {
this.stock = stock;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@Override
public String toString() {
return "Book{" +
"bookId=" + bookId +
", categoryCode='" + categoryCode + '\'' +
", bookName='" + bookName + '\'' +
</form>
</script>
</html>
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>后台管理-登陆</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta http-equiv="Access-Control-Allow-Origin" content="*">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="format-detection" content="telephone=no">
<link rel="stylesheet" th:href="@{/lib/layui/css/layui.css}" media="all">
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<style>
html, body {width: 100%;height: 100%;overflow: hidden}
body {background: #1E9FFF;}
body:after {content:'';background-repeat:no-repeat;background-size:cover;-webkit-filter:blur(3px);-moz-filter:blur(3px);-o-filter:blur(3px);-ms-filter:blur(3px);filter:blur(3px);position:absolute;top:0;left:0;right:0;bottom:0;z-index:-1;}
.layui-container {width: 100%;height: 100%;overflow: hidden}
.admin-login-background {width:360px;height:300px;position:absolute;left:50%;top:40%;margin-left:-180px;margin-top:-100px;}
.logo-title {text-align:center;letter-spacing:2px;padding:14px 0;}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author == null ? null : author.trim();
}
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press == null ? null : press.trim();
}
public Date getPubDate() {
return pubDate;
}
} catch (Exception e) {
e.printStackTrace();
throw new CustomizeException(ResultCode.FAILED, "上传图片失败");
}
return new ResultVO(ResultCode.SUCCESS, targetFileName);
}
private void copyToTargetDir(File srcFile, String targetFileName) throws Exception {
String targetPath = "target/classes/static/images/book_images";
InputStream inBuff = new BufferedInputStream(new FileInputStream(srcFile));
OutputStream outBuff = new BufferedOutputStream(new FileOutputStream(new File(new File(targetPath).getAbsolutePath(), targetFileName)));
byte[] b = new byte[1024 * 5 * 10];
int len;
while ((len = inBuff.read(b)) != -1) {
outBuff.write(b, 0, len);
}
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta http-equiv="Access-Control-Allow-Origin" content="*">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="format-detection" content="telephone=no">
<link rel="stylesheet" th:href="@{/lib/layui/css/layui.css}" media="all">
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<style>
html, body {width: 100%;height: 100%;overflow: hidden}
body {background: #1E9FFF;}
body:after {content:'';background-repeat:no-repeat;background-size:cover;-webkit-filter:blur(3px);-moz-filter:blur(3px);-o-filter:blur(3px);-ms-filter:blur(3px);filter:blur(3px);position:absolute;top:0;left:0;right:0;bottom:0;z-index:-1;}
.layui-container {width: 100%;height: 100%;overflow: hidden}
.admin-login-background {width:360px;height:300px;position:absolute;left:50%;top:40%;margin-left:-180px;margin-top:-100px;}
public ResultVO bookUpdate(@Valid Book record) {
int books = bookService.bookUpdate(record);
return new ResultVO(ResultCode.SUCCESS, null);
}
/**
* 多条件搜索 ----by guozongchao
* @param book
* @param page
* @param limit
* @return
*/
@GetMapping("/search")
public ResultVO searchBooks(Book book,Integer page, Integer limit) {
if(book.getBookName().isEmpty()){
book.setBookName(null);
}
if(book.getIsbn().isEmpty()){
book.setIsbn(null);
}
List<Book> books = bookService.searchBooks(book, page, limit);
PageInfo pageInfo = new PageInfo(books);
return new ResultVO(ResultCode.SUCCESS, (int) pageInfo.getTotal(), books);
<div class="layui-form">
<div class="layui-form-item">
<label class="layui-form-label">收货人</label>
<div class="layui-input-block">
<input type="text" name="consigneeName" required lay-verify="required" placeholder="请输入收货人姓名"
autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">收货地址</label>
<div class="layui-input-block">
<textarea name="address" placeholder="请输入收货地址" class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-form-item">
private Integer stock;
private Date createTime;
private Category category;
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
public Integer getBookId() {
return bookId;
}
<title>上架新书</title>
<link rel="stylesheet" type="text/css" href="../../static/lib/layui/css/layui.css"/>
<script src="../../static/lib/layui/layui.js" type="text/javascript" charset="utf-8"></script>
</head>
<body class="layui-layout-body">
<div class="layui-layout layui-layout-admin">
<div th:replace="_adminfragment::header"></div>
<div th:replace="_adminfragment::side('addBook')"></div>
<div class="layui-body">
<!-- 内容主体区域 -->
<div style="padding: 20px;">
<form action="" class="layui-form" lay-filter="addBook" style="margin-right:30px;margin-top: 20px;">
<div class="layui-form-item">
<label class="layui-form-label">分类</label>
import java.util.List;
import com.github.pagehelper.PageInfo;
/**
* @Description: 订单管理模块
* @Author: guozongchao
* @Date: 2020/6/2 1:07
*/
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private OrderService orderService;
@Autowired
private OrderHandleService orderHandleService;
/**
* 分页获取订单列表,如果都为空,则获取所有
* @param page 页码
* @param limit 每页的条数
* @return
*/
@GetMapping("/list")
public ResultVO getOrderList(@RequestParam(required = false) Integer page, @RequestParam(required = false) Integer limit) {
List<Order> orders = orderHandleService.getAllOrdersByPage(page, limit);
</p>
</div>
</div>
<div class="btn">
合计:<span style="margin-right: 20px;" id="totalAccount">[[${book.price}]]</span>
<span>购买数量:</span>
<input type="number" id="quantity" th:min="${book.stock==0?'0':'1'}" th:max="${book.stock}" th:value="${book.stock==0?'0':'1'}" class="qty-input"
th:onchange="|check(this,${book.price})|"/>
<button type="button" class="layui-btn layui-btn-normal" id="buyNowBtn">立即购买</button>
<button type="button" class="layui-btn layui-btn-danger" id="addCartBtn">加入购物车</button>
</div>
</div>
*/
@Controller
@RequestMapping("/index")
public class BookDisplayController {
@Autowired
private BookDisplayService bookDisplayService;
/**
* 处理前台获取所有分类的请求
* @return
*/
@GetMapping("/category")
<colgroup>
<col>
<col>
<col>
<col>
<col>
</colgroup>
<thead>
<tr>
<th>书籍编号</th>
<th>书籍名称</th>
<th>单价/元</th>
<th>购买数量</th>
<th>合计/元</th>
</tr>
</thead>
<tbody id="order-items"></tbody>
</table>
</div>
</fieldset>