基于javaweb+mysql的ssm网上电商系统(java+ssm+mysql+tomcat+jsp)
运行环境
Java≥8、MySQL≥5.7、Tomcat≥8
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SSM网上电商系统(java+ssm+mysql+tomcat+jsp)
一、项目简述
功能:本系统分用户前台和管理员后台。 前台展示+后台管理,前台界面可实现用户登录,用户注 册,商品展示,商品明细展示,用户信息修改,密码修 改,购物车添加,商品购买,商品结算,订单查询,购物 车查询,后台管理可实现商品管理,订单管理,用户管理
二、项目运行
环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)
项目技术: JSP +Spring + SpringMVC + MyBatis + html+ css + JavaScript + JQuery + Ajax + layui等等。
@GetMapping("/address")
public String address(){ // 使用session中的数据
return "/index/address.jsp";
}
/**
* 修改信息
* @return
*/
@PostMapping("/addressUpdate")
public String addressUpdate(String name, String phone, String address, HttpServletRequest request, HttpSession session){
Users user = (Users) session.getAttribute("user");
userService.update(user.getId(), name, phone, address); // 更新数据库
session.setAttribute("user", userService.get(user.getId())); // 更新session
request.setAttribute("msg", "信息修改成功!");
return "/index/address.jsp";
}
/**
* 收货地址
* @return
*/
@GetMapping("/password")
public String password(){ // 使用session中的数据
return "/index/password.jsp";
}
/**
* 修改密码
* @return
*/
@PostMapping("/passwordUpdate")
public String passwordUpdate(String password, String passwordNew, HttpServletRequest request, HttpSession session){
Users user = (Users) session.getAttribute("user");
user = userService.get(user.getId());
if(!user.getPassword().equals(SafeUtil.encode(password))) {
request.setAttribute("msg", "原密码错误!");
}else {
userService.updatePassword(user.getId(), passwordNew);
request.setAttribute("msg", "密码修改成功!");
}
return "/index/password.jsp";
}
/*
* 用戶確認收貨
*/
@RequestMapping("/userfinish")
public String userFinish(int id, byte status,
@RequestParam(required=false, defaultValue="1") int page) {
orderService.finish(id);
return "redirect:order?page="+page;
}
}
return "/index/mypoint.jsp";
}
/**
* 查看购物车
* @return
*/
@GetMapping("/cart")
public String cart(HttpServletRequest request, HttpSession session) {
Users user = (Users) session.getAttribute("user");
request.setAttribute("cartList", cartService.getList(user.getId()));
request.setAttribute("cartCount", cartService.getCount(user.getId()));
request.setAttribute("cartTotal", cartService.getTotal(user.getId()));
return "/index/cart.jsp";
}
/**
* 购物车总金额
* @return
*/
@GetMapping("/cartTotal")
public @ResponseBody int cartTotal(HttpSession session){
Users user = (Users) session.getAttribute("user");
return cartService.getTotal(user.getId());
}
/**
* 加入购物车
* @return
*/
@PostMapping("/cartBuy")
public @ResponseBody boolean cartBuy(int goodId, HttpSession session){
Users user = (Users) session.getAttribute("user");
return cartService.save(goodId, user.getId());
}
/**
* 添加数量
*/
@PostMapping("/cartAdd")
public @ResponseBody boolean cartAdd(int id){
return cartService.add(id);
}
/**
* 减少数量
*/
/**
* 前台相关接口
*/
@Controller
@RequestMapping("/index")
public class IndexController{
@Autowired
private GoodService goodService;
@Autowired
private TypeService typeService;
/**
* 首页
* @return
*/
@GetMapping("/index")
public String index(HttpServletRequest request){
request.setAttribute("flag", 1);
// 今日推荐
if (page <= 1) { // 如果已经是第一页, 上一页按钮disabled
// pageBuilder.append("<a title='已是首页'>首页</a>");
// pageBuilder.append("<a title='已是首页'>上页</a>");
}else{
pageBuilder.append("<a href='").append(url).append("?").append("page=1")
.append(paramBuilder).append("'>首页</a>");
pageBuilder.append("<a href='").append(url).append("?").append("page=").append(page-1)
.append(paramBuilder).append("'>上页</a>");
}
// 中间数字页码
if (pages <= 7) { // 全部显示
for (int i = 1; i <= pages; i++) {
pageBuilder.append(packPageItem(url, paramBuilder.toString(), page, i));
}
}else{ // 显示部分
if (page<4 || page>pages-3) { // 1 2 3 ... pages-2 pages-1 pages
pageBuilder.append(packPageItem(url, paramBuilder.toString(), page, 1));
pageBuilder.append(packPageItem(url, paramBuilder.toString(), page, 2));
pageBuilder.append(packPageItem(url, paramBuilder.toString(), page, 3));
pageBuilder.append(" ... ");
pageBuilder.append(packPageItem(url, paramBuilder.toString(), page, pages-2));
pageBuilder.append(packPageItem(url, paramBuilder.toString(), page, pages-1));
pageBuilder.append(packPageItem(url, paramBuilder.toString(), page, pages));
}else{ // 1 2 ... page-1 page page+1 ... pages-1 pages
pageBuilder.append(packPageItem(url, paramBuilder.toString(), page, 1));
pageBuilder.append(packPageItem(url, paramBuilder.toString(), page, 2));
pageBuilder.append(" ... ");
pageBuilder.append(packPageItem(url, paramBuilder.toString(), page, page-1));
pageBuilder.append(packPageItem(url, paramBuilder.toString(), page, page));
pageBuilder.append(packPageItem(url, paramBuilder.toString(), page, page+1));
pageBuilder.append(" ... ");
pageBuilder.append(packPageItem(url, paramBuilder.toString(), page, pages-1));
pageBuilder.append(packPageItem(url, paramBuilder.toString(), page, pages));
}
}
// 下一页
if (page >= pages) { // 如果已经是最后一页, 上一页按钮disabled
// pageBuilder.append("<a title='已是尾页'>下页</a>");
// pageBuilder.append("<a title='已是尾页'>尾页</a>");
}else{
pageBuilder.append("<a href='").append(url).append("?").append("page=").append(page+1)
.append(paramBuilder).append("'>下页</a>");
pageBuilder.append("<a href='").append(url).append("?").append("page=").append(pages)
.append(paramBuilder).append("'>尾页</a>");
}
pageBuilder.append("</div>");
return pageBuilder.toString();
}
// 设置数据字体
Font dataFont = wb.createFont();
dataFont.setFontHeightInPoints((short) 12); // 字体高度
dataFont.setFontName("宋体"); // 字体
dataStyle.setFont(dataFont);
// 遍历集合数据,产生数据行
Iterator<T> it = dataList.iterator();
int index = 0;
while (it.hasNext()) {
index++;// 0号位被占用 所以+1
row = sheet.createRow(index);
// 为序号赋值
HSSFCell sequenceCellValue = row.createCell(0);// 序号值永远是第0列
sequenceCellValue.setCellValue(index);
sequenceCellValue.setCellStyle(dataStyle);
sheet.autoSizeColumn(0);
T t = (T) it.next();
// 利用反射,根据传过来的字段名数组,动态调用对应的getXxx()方法得到属性值
for (int i = 0; i < fieldArray.length; i++) {
HSSFCell dataCell = row.createCell(i + 1);
dataCell.setCellStyle(dataStyle);
sheet.autoSizeColumn(i + 1);
String fieldName = fieldArray[i];
String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);// 取得对应getXxx()方法
Class<? extends Object> tCls = t.getClass();// 泛型为Object以及所有Object的子类
Method getMethod = tCls.getMethod(getMethodName, new Class[] {});// 通过方法名得到对应的方法
Object value = getMethod.invoke(t, new Object[] {});// 动态调用方,得到属性值
if (value != null) {
dataCell.setCellValue(value.toString());// 为当前列赋值
}
}
}
OutputStream outputStream = response.getOutputStream();// 打开流
wb.write(outputStream);// HSSFWorkbook写入流
wb.close();// HSSFWorkbook关闭
outputStream.flush();// 刷新流
outputStream.close();// 关闭流
return wb;
}
* 类目添加
* @return
*/
@GetMapping("/typeAdd")
public String typeAdd(HttpServletRequest request) {
request.setAttribute("flag", 1);
return "/admin/type_add.jsp";
}
/**
* 类目添加
* @return
* @throws Exception
*/
@PostMapping("/typeSave")
public String typeSave(Types type) throws Exception {
typeService.add(type);
return "redirect:typeList?flag=1";
}
/**
* 类目更新
* @return
*/
@GetMapping("/typeEdit")
public String typeEdit(int id, HttpServletRequest request) {
request.setAttribute("flag", 1);
request.setAttribute("type", typeService.get(id));
return "/admin/type_edit.jsp";
}
/**
* 类目更新
* @return
* @throws Exception
*/
@PostMapping("/typeUpdate")
public String typeUpdate(Types type) throws Exception {
typeService.update(type);
return "redirect:typeList?flag=1";
}
/**
* 类目删除
* @return
*/
userService.add(user);
request.setAttribute("msg", "注册成功 可以去登录了!");
return "/index/login.jsp";
}
return "/index/register.jsp";
}
/**
* 用户登录
* @return
*/
@GetMapping("/login")
public String log() {
return "/index/login.jsp";
}
/**
* 用户登录
* @return
*/
@PostMapping("/login")
public String login(Users user, HttpServletRequest request, HttpSession session) {
Users loginUser = userService.getByUsernameAndPassword(user.getUsername(), user.getPassword());
if (Objects.isNull(loginUser)) {
request.setAttribute("msg", "用户名或密码错误");
return "/index/login.jsp";
}
session.setAttribute("user", loginUser);
// 还原购物车
session.setAttribute("cartCount", cartService.getCount(loginUser.getId()));
String referer = request.getHeader("referer"); // 来源页面
System.out.println(referer); //TODO
return "redirect:index";
}
/**
* 注销登录
* @return
*/
@GetMapping("/logout")
public String logout(HttpSession session) {
session.removeAttribute("user");
session.removeAttribute("cartCount");
return "/index/login.jsp";
}
* @param excelHeader
* excel表头数组,存放"姓名#name"格式字符串,"姓名"为excel标题行, "name"为对象字段名
* @param dataList
* 数据集合,需与表头数组中的字段名一致,并且符合javabean规范
* @return 返回一个HSSFWorkbook
* @throws Exception
*/
public static <T> HSSFWorkbook export(HttpServletResponse response, String fileName, String[] excelHeader,
Collection<T> dataList) throws Exception {
// 设置请求
response.setContentType("application/application/vnd.ms-excel");
response.setHeader("Content-disposition",
"attachment;filename=" + URLEncoder.encode(fileName + ".xls", "UTF-8"));
// 创建一个Workbook,对应一个Excel文件
HSSFWorkbook wb = new HSSFWorkbook();
// 设置标题样式
HSSFCellStyle titleStyle = wb.createCellStyle();
// 设置单元格边框样式
titleStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框 细边线
titleStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);// 下边框 细边线
titleStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框 细边线
titleStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框 细边线
// 设置单元格对齐方式
titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中
titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中
// 设置字体样式
Font titleFont = wb.createFont();
titleFont.setFontHeightInPoints((short) 15); // 字体高度
titleFont.setFontName("黑体"); // 字体样式
titleStyle.setFont(titleFont);
// 在Workbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet(fileName);
// 标题数组
String[] titleArray = new String[excelHeader.length];
// 字段名数组
String[] fieldArray = new String[excelHeader.length];
for (int i = 0; i < excelHeader.length; i++) {
String[] tempArray = excelHeader[i].split("#");// 临时数组 分割#
titleArray[i] = tempArray[0];
fieldArray[i] = tempArray[1];
}
// 在sheet中添加标题行
HSSFRow row = sheet.createRow((int) 0);// 行数从0开始
HSSFCell sequenceCell = row.createCell(0);// cell列 从0开始 第一列添加序号
sequenceCell.setCellValue("序号");
sequenceCell.setCellStyle(titleStyle);
sheet.autoSizeColumn(0);// 自动设置宽度
// 为标题行赋值
for (int i = 0; i < titleArray.length; i++) {
HSSFCell titleCell = row.createCell(i + 1);// 0号位被序号占用,所以需+1
titleCell.setCellValue(titleArray[i]);
titleCell.setCellStyle(titleStyle);
sheet.autoSizeColumn(i + 1);// 0号位被序号占用,所以需+1
}
request.setAttribute("msg", "密码修改成功!");
}
return "/index/password.jsp";
}
/*
* 用戶確認收貨
*/
@RequestMapping("/userfinish")
public String userFinish(int id, byte status,
@RequestParam(required=false, defaultValue="1") int page) {
orderService.finish(id);
return "redirect:order?page="+page;
}
}
package com.util;
/**
* 分页工具类
*/
public class PageUtil {
/**
* 获取分页代码
* @param total 总记录数
* @param page 当前页面
* @param size 每页数量
* @return
* @throws UnsupportedEncodingException
*/
public static String getPageHtml(HttpServletRequest request, long total, int page, int size) throws UnsupportedEncodingException{
if (total <= 0) {
return null;
}
// 计算总页数
int pages = (int) (total % size ==0 ? total/size : total /size + 1);
*/
@GetMapping("/mypoint")
public String mypoint() {
return "/index/mypoint.jsp";
}
//积分充值
@RequestMapping("/addPoint")
public String addPoint(double point,HttpSession session,HttpServletRequest request){
Users users = (Users)session.getAttribute("user");
BigDecimal bigDecimal = new BigDecimal(Double.toString(point)).add(new BigDecimal(Double.toString(users.getPoint())));
users.setPoint(bigDecimal.doubleValue());
int count = userService.updatePoint(users);
if(count > 0){
session.setAttribute("user",users);
request.setAttribute("msg","充值成功!");
}else{
request.setAttribute("msg","充值失败!");
}
return "/index/mypoint.jsp";
}
/**
* 查看购物车
* @return
*/
@GetMapping("/cart")
public String cart(HttpServletRequest request, HttpSession session) {
Users user = (Users) session.getAttribute("user");
request.setAttribute("cartList", cartService.getList(user.getId()));
request.setAttribute("cartCount", cartService.getCount(user.getId()));
request.setAttribute("cartTotal", cartService.getTotal(user.getId()));
return "/index/cart.jsp";
}
/**
* 购物车总金额
* @return
*/
@GetMapping("/cartTotal")
public @ResponseBody int cartTotal(HttpSession session){
Users user = (Users) session.getAttribute("user");
return cartService.getTotal(user.getId());
}
/**
* 加入购物车
* @return
return "redirect:orderPay?id="+orderId; // 跳转支付
}
/**
* 购物车结算
* @return
* @throws MyException
*/
@GetMapping("/orderSave")
public String orderSave(ServletRequest request, HttpSession session) throws MyException{
Users user = (Users) session.getAttribute("user");
int orderId = orderService.save(user.getId());
session.removeAttribute("cartCount"); // 清理购物车session
return "redirect:orderPay?id="+orderId; // 跳转支付
}
/**
* 支付页面
* @return
*/
@GetMapping("/orderPay")
public String orderPay(int id, ServletRequest request) {
request.setAttribute("order", orderService.get(id));
return "/index/pay.jsp";
}
/**
* 支付(模拟)
* @return
*/
@PostMapping("/orderPay")
@ResponseBody
public int orderPay(Orders order,HttpSession session) {
Users users = (Users) session.getAttribute("user");
BigDecimal bigDecimal = new BigDecimal(0);
if(order.getPaytype() == Orders.PAYTYPE_OFFLINE){//为积分支付时
double d1 = order.getTotal();//商品总价
if(users.getPoint().compareTo(d1) < 0){
return -1;
}else{
//总积分 = 用户积分 - 抵扣积分
bigDecimal = new BigDecimal(Double.toString(users.getPoint())).subtract(new BigDecimal(Double.toString(d1)));
}
}else{
double d2 = order.getTotal()/100;//购买商品获取的积分
//总积分 = 用户积分 + 获取的
bigDecimal = new BigDecimal(Double.toString(users.getPoint())).add(new BigDecimal(Double.toString(d2)));
}
@Autowired
private GoodService goodService;
@Autowired
private TypeService typeService;
/**
* 首页
* @return
*/
@GetMapping("/index")
public String index(HttpServletRequest request){
request.setAttribute("flag", 1);
// 今日推荐
List<Goods> todayList = goodService.getListByTopType(Tops.TYPE_TODAY, 1, 6); // 取前6个
request.setAttribute("todayList", todayList);
// 热销排行
List<Goods> hotList = goodService.getListOrderSales(1, 10); // 取前10个
request.setAttribute("hotList", hotList);
// 类目列表
List<Types> typeList = typeService.getList();
List<Map<String, Object>> dataList = new ArrayList<>();
for(Types type : typeList) {
Map<String, Object> map = new HashMap<>();
map.put("type", type);
map.put("goodList", goodService.getListByType(type.getId(), 1, 15)); // 取前15个
dataList.add(map);
}
request.setAttribute("dataList", dataList);
return "/index/index.jsp";
}
/**
* 商品分类
* @return
* @throws UnsupportedEncodingException
*/
@GetMapping("/type")
public String type(HttpServletRequest request,
@RequestParam(required=false, defaultValue="0")int id,
@RequestParam(required=false, defaultValue="1")int page,
@RequestParam(required=false, defaultValue="10")int size) throws UnsupportedEncodingException {
request.setAttribute("type", typeService.get(id));
request.setAttribute("goodList", goodService.getListByType(id, page, size));
request.setAttribute("pageHtml", PageUtil.getPageHtml(request, goodService.getCountByType(id), page, size));
return "/index/goods.jsp";
public String getParameter(String name) {
Map<String, String[]> parameterMap = getParameterMap();
String[] values = parameterMap.get(name);
if (values == null) {
return null;
}
return values[0]; // 取回参数的第一个值
}
//取所有值
@Override
public String[] getParameterValues(String name) {
Map<String, String[]> parameterMap = getParameterMap();
String[] values = parameterMap.get(name);
return values;
}
}
package com.config;
/**
* 前台拦截器
*/
public class IndexInterceptor extends HandlerInterceptorAdapter{
@Autowired
private TypeService typeService;
@Autowired
private CartService cartService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
request.setAttribute("typeList", typeService.getList()); // 为所有页面设置类目列表
}
/**
* 类目删除
* @return
*/
@GetMapping("/typeDelete")
public String typeDelete(int id) {
typeService.delete(id);
return "redirect:typeList?flag=1";
}
/**
* 产品列表
* @return
*/
@GetMapping("/goodList")
public String goodList(HttpServletRequest request,
@RequestParam(required=false, defaultValue="0") byte type,
@RequestParam(required=false, defaultValue="1") int page,
@RequestParam(required=false, defaultValue="10") int size) {
request.setAttribute("flag", 2);
request.setAttribute("page", page);
request.setAttribute("type", type);
if(type > 0) {
String goodIds = topService.getGoodIdsByType(type);
request.setAttribute("goodList", goodService.getListByIds(goodIds, page, size));
request.setAttribute("pageTool", PageUtil.getPageTool(request, goodService.getCountByIds(goodIds), page, size));
}else {
request.setAttribute("goodList", goodService.getList(page, size));
request.setAttribute("pageTool", PageUtil.getPageTool(request, goodService.getCount(), page, size));
}
return "/admin/good_list.jsp";
}
/**
* 产品添加
* @return
*/
@GetMapping("/goodAdd")
public String goodAdd(HttpServletRequest request) {
request.setAttribute("flag", 2);
request.setAttribute("typeList", typeService.getList());
return "/admin/good_add.jsp";
}
/**
@PostMapping("/login")
public String login(String username, String password,
HttpServletRequest request, HttpSession session) {
Admins admin = adminService.getByUsernameAndPassword(username, password);
if (Objects.nonNull(admin)) {
session.setAttribute("admin", admin);
return "redirect:index";
}
request.setAttribute("msg", "用户名或密码错误!");
return "/admin/login.jsp";
}
/**
* 退出
* @return
*/
@GetMapping("/logout")
public String logout(HttpSession session) {
session.removeAttribute("admin");
return "/admin/login.jsp";
}
/**
* 后台首页
* @return
*/
@GetMapping("/index")
public String index(HttpServletRequest request) {
request.setAttribute("msg", "恭喜你! 登录成功了");
return "/admin/index.jsp";
}
/**
* 类目列表
* @return
*/
@GetMapping("/typeList")
public String typeList(HttpServletRequest request) {
request.setAttribute("flag", 1);
request.setAttribute("typeList", typeService.getList());
return "/admin/type_list.jsp";
}
/**
* 类目添加
private TypeService typeService;
/**
* 管理员登录 (逻辑判断)
* @return
*/
@GetMapping("/login")
public String log() {
return "/admin/login.jsp";
}
/**
* 管理员登录
* @return
*/
@PostMapping("/login")
public String login(String username, String password,
HttpServletRequest request, HttpSession session) {
Admins admin = adminService.getByUsernameAndPassword(username, password);
if (Objects.nonNull(admin)) {
session.setAttribute("admin", admin);
return "redirect:index";
}
request.setAttribute("msg", "用户名或密码错误!");
return "/admin/login.jsp";
}
/**
* 退出
* @return
*/
@GetMapping("/logout")
public String logout(HttpSession session) {
session.removeAttribute("admin");
return "/admin/login.jsp";
}
/**
* 后台首页
* @return
*/
@GetMapping("/index")
public String index(HttpServletRequest request) {
request.setAttribute("msg", "恭喜你! 登录成功了");
return "/admin/index.jsp";
}
*/
@Controller
@RequestMapping("/admin")
public class AdminController {
@Autowired
private AdminService adminService;
@Autowired
private OrderService orderService;
@Autowired
private UserService userService;
@Autowired
private GoodService goodService;
@Autowired
private TopService topService;
@Autowired
private TypeService typeService;
/**
* 管理员登录 (逻辑判断)
* @return
*/
@GetMapping("/login")
public String log() {
return "/admin/login.jsp";
}
/**
* 管理员登录
* @return
*/
@PostMapping("/login")
public String login(String username, String password,
HttpServletRequest request, HttpSession session) {
Admins admin = adminService.getByUsernameAndPassword(username, password);
if (Objects.nonNull(admin)) {
session.setAttribute("admin", admin);
return "redirect:index";
}
request.setAttribute("msg", "用户名或密码错误!");
return "redirect:adminList?page="+page;
}
/**
* 管理员添加
* @return
*/
@PostMapping("/adminSave")
public String adminSave(Admins admin, HttpServletRequest request,
@RequestParam(required=false, defaultValue="1") int page) {
if (Objects.nonNull(adminService.getByUsername(admin.getUsername()))) {
request.setAttribute("msg", "用户名已存在!");
return "/admin/admin_add.jsp";
}
adminService.add(admin);
return "redirect:adminList?flag=5&page="+page;
}
/**
* 管理员删除
* @return
*/
@GetMapping("/adminDelete")
public String adminDelete(int id,
@RequestParam(required=false, defaultValue="1") int page) {
adminService.delete(id);
return "redirect:adminList?flag=5&page="+page;
}
/**
* 图片上传
* @throws Exception
*/
@PostMapping("upload")
public @ResponseBody Map<String, Object> upload(MultipartFile imgFile) throws Exception {
Map<String, Object> map = new HashMap<>();
if (Objects.nonNull(imgFile) && !imgFile.isEmpty()) {
map.put("error", 0);
map.put("url", UploadUtil.upload(imgFile));
return map;
}else {
map.put("error", 1);
map.put("message", "上传出错啦");
}
return map;
}
// 设置请求
response.setContentType("application/application/vnd.ms-excel");
response.setHeader("Content-disposition",
"attachment;filename=" + URLEncoder.encode(fileName + ".xls", "UTF-8"));
// 创建一个Workbook,对应一个Excel文件
HSSFWorkbook wb = new HSSFWorkbook();
// 设置标题样式
HSSFCellStyle titleStyle = wb.createCellStyle();
// 设置单元格边框样式
titleStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框 细边线
titleStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);// 下边框 细边线
titleStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框 细边线
titleStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框 细边线
// 设置单元格对齐方式
titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中
titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 垂直居中
// 设置字体样式
Font titleFont = wb.createFont();
titleFont.setFontHeightInPoints((short) 15); // 字体高度
titleFont.setFontName("黑体"); // 字体样式
titleStyle.setFont(titleFont);
// 在Workbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet(fileName);
// 标题数组
String[] titleArray = new String[excelHeader.length];
// 字段名数组
String[] fieldArray = new String[excelHeader.length];
for (int i = 0; i < excelHeader.length; i++) {
String[] tempArray = excelHeader[i].split("#");// 临时数组 分割#
titleArray[i] = tempArray[0];
fieldArray[i] = tempArray[1];
}
// 在sheet中添加标题行
HSSFRow row = sheet.createRow((int) 0);// 行数从0开始
HSSFCell sequenceCell = row.createCell(0);// cell列 从0开始 第一列添加序号
sequenceCell.setCellValue("序号");
sequenceCell.setCellStyle(titleStyle);
sheet.autoSizeColumn(0);// 自动设置宽度
// 为标题行赋值
for (int i = 0; i < titleArray.length; i++) {
HSSFCell titleCell = row.createCell(i + 1);// 0号位被序号占用,所以需+1
titleCell.setCellValue(titleArray[i]);
}
/**
* 产品更新
* @return
* @throws Exception
*/
@PostMapping("/goodUpdate")
public String goodUpdate(Goods good, MultipartFile file,
@RequestParam(required=false, defaultValue="1") int page) throws Exception {
if (Objects.nonNull(file) && !file.isEmpty()) {
good.setCover(UploadUtil.upload(file));
}
goodService.update(good);
return "redirect:goodList?flag=2&page="+page;
}
/**
* 产品删除
* @return
*/
@GetMapping("/goodDelete")
public String goodDelete(int id,
@RequestParam(required=false, defaultValue="1") int page) {
goodService.delete(id);
return "redirect:goodList?flag=2&page="+page;
}
/**
* 添加推荐
* @return
*/
@PostMapping("/topSave")
public @ResponseBody String topSave(int goodId, byte type) {
return topService.add(goodId, type) ? "ok" : null;
}
/**
* 删除推荐
* @return
*/
@PostMapping("/topDelete")
public @ResponseBody String topDelete(int goodId, byte type) {
return topService.delete(goodId, type) ? "ok" : null;
}
/**
* 订单列表
/**
* 后台管理接口
*/
@Controller
@RequestMapping("/admin")
public class AdminController {
@Autowired
private AdminService adminService;
@Autowired
private OrderService orderService;
@Autowired
private UserService userService;
@Autowired
private GoodService goodService;
@Autowired
private TopService topService;
@Autowired
private TypeService typeService;
map.put("url", UploadUtil.upload(imgFile));
return map;
}else {
map.put("error", 1);
map.put("message", "上传出错啦");
}
return map;
}
/**
* 订单导出
*/
@RequestMapping("orderExportExcel")
public void orderExportExcel(HttpServletResponse response){
//导出所有订单
List<Orders> orderList = orderService.getAllList();
for(Orders orders : orderList){
if(orders.getAddress() != null && !"".equals(orders.getAddress())){
StringBuffer buf=new StringBuffer();
buf.append(orders.getName()+"\n"+orders.getPhone()+"\n"+orders.getAddress());
orders.setAddress(buf.toString());
}
if(orders.getStatus() == Orders.STATUS_UNPAY){
orders.setName("未付款");
}else if(orders.getStatus() == Orders.STATUS_PAYED){
orders.setName("已付款");
}else if(orders.getStatus() == Orders.PAYTYPE_OFFLINE){
orders.setName("配送中");
}else{
orders.setName("已完成");
}
if(orders.getPaytype() == Orders.PAYTYPE_WECHAT){
orders.setPhone("微信");
}else if(orders.getPaytype() == Orders.PAYTYPE_ALIPAY){
orders.setPhone("支付宝");
}else{
orders.setPhone("积分");
}
StringBuffer buf1=new StringBuffer();
orders.setUsername(orders.getUser().getName());
for(Items items : orders.getItemList()){
buf1.append(items.getGood().getName() + " *" + items.getAmount() + "\n");
}
orders.setDingdanInfo(buf1.toString());
}
request.setAttribute("pageTool", PageUtil.getPageTool(request, goodService.getCountByIds(goodIds), page, size));
}else {
request.setAttribute("goodList", goodService.getList(page, size));
request.setAttribute("pageTool", PageUtil.getPageTool(request, goodService.getCount(), page, size));
}
return "/admin/good_list.jsp";
}
/**
* 产品添加
* @return
*/
@GetMapping("/goodAdd")
public String goodAdd(HttpServletRequest request) {
request.setAttribute("flag", 2);
request.setAttribute("typeList", typeService.getList());
return "/admin/good_add.jsp";
}
/**
* 产品添加
* @return
* @throws Exception
*/
@PostMapping("/goodSave")
public String goodSave(Goods good, MultipartFile file,
@RequestParam(required=false, defaultValue="1") int page) throws Exception {
good.setCover(UploadUtil.upload(file));
goodService.add(good);
return "redirect:goodList?flag=2&page="+page;
}
/**
* 产品更新
* @return
*/
@GetMapping("/goodEdit")
public String goodEdit(int id, HttpServletRequest request) {
request.setAttribute("flag", 2);
request.setAttribute("typeList", typeService.getList());
request.setAttribute("good", goodService.get(id));
return "/admin/good_edit.jsp";
}
request.setAttribute("orderList", orderService.getList(status, page, size));
request.setAttribute("pageTool", PageUtil.getPageTool(request, orderService.getCount(status), page, size));
return "/admin/order_list.jsp";
}
/**
* 订单发货
* @return
*/
@GetMapping("/orderSend")
public String orderSend(int id, byte status,
@RequestParam(required=false, defaultValue="1") int page) {
orderService.send(id);
return "redirect:orderList?flag=3&status="+status+"&page="+page;
}
/**
* 订单完成
* @return
*/
@GetMapping("/orderFinish")
public String orderFinish(int id, byte status,
@RequestParam(required=false, defaultValue="1") int page) {
orderService.finish(id);
return "redirect:orderList?flag=3&status="+status+"&page="+page;
}
/**
* 订单删除
* @return
*/
@GetMapping("/orderDelete")
public String orderDelete(int id, byte status,
@RequestParam(required=false, defaultValue="1") int page) {
orderService.delete(id);
return "redirect:orderList?flag=3&status="+status+"&page="+page;
}
/**
* 顾客管理
/**
* 管理员列表
* @return
*/
@GetMapping("/adminList")
public String adminList(HttpServletRequest request,
@RequestParam(required=false, defaultValue="1") int page,
@RequestParam(required=false, defaultValue="10") int size) {
request.setAttribute("flag", 5);
request.setAttribute("adminList", adminService.getList(page, size));
request.setAttribute("pageTool", PageUtil.getPageTool(request, adminService.getCount(), page, size));
return "/admin/admin_list.jsp";
}
/**
* 管理员添加
* @return
*/
@GetMapping("/adminAdd")
public String adminAdd(HttpServletRequest request) {
request.setAttribute("flag", 5);
return "/admin/admin_add.jsp";
}
/**
* 管理员密码重置
* @return
*/
@GetMapping("/adminRe")
public String adminRe(int id, HttpServletRequest request) {
request.setAttribute("flag", 5);
request.setAttribute("admin", adminService.get(id));
return "/admin/admin_reset.jsp";
}
/**
* 管理员密码重置
* @return
*/
@PostMapping("/adminReset")
public String adminReset(int id, String password, HttpServletRequest request,
@RequestParam(required=false, defaultValue="1") int page) {
adminService.update(id, password);
return "redirect:adminList?page="+page;
}
/**
* 管理员添加
/**
* 业务异常
* @param exception
* @return
*/
@ExceptionHandler(MyException.class)
public String exception(MyException exception, HttpServletRequest request){
request.setAttribute("msg", exception.getMessage());
return "/index/error.jsp";
}
/**
* 默认异常
* @param exception
* @return
*/
@ExceptionHandler(Exception.class)
public String exception(Exception exception, HttpServletRequest request){
request.setAttribute("msg", "系统错误");
return "/index/error.jsp";
}
/**
* 自定义异常
*/
@SuppressWarnings("serial")
public static class MyException extends Exception {
public MyException(String msg) {super(msg);}
}
}
package com.config;
public String typeSave(Types type) throws Exception {
typeService.add(type);
return "redirect:typeList?flag=1";
}
/**
* 类目更新
* @return
*/
@GetMapping("/typeEdit")
public String typeEdit(int id, HttpServletRequest request) {
request.setAttribute("flag", 1);
request.setAttribute("type", typeService.get(id));
return "/admin/type_edit.jsp";
}
/**
* 类目更新
* @return
* @throws Exception
*/
@PostMapping("/typeUpdate")
public String typeUpdate(Types type) throws Exception {
typeService.update(type);
return "redirect:typeList?flag=1";
}
/**
* 类目删除
* @return
*/
@GetMapping("/typeDelete")
public String typeDelete(int id) {
typeService.delete(id);
return "redirect:typeList?flag=1";
}
/**
* 产品列表
* @return
*/
@GetMapping("/goodList")
public String goodList(HttpServletRequest request,
@RequestParam(required=false, defaultValue="0") byte type,
@RequestParam(required=false, defaultValue="1") int page,
@RequestParam(required=false, defaultValue="10") int size) {
request.setAttribute("flag", 2);
request.setAttribute("page", page);
request.setAttribute("type", type);
if(type > 0) {
String goodIds = topService.getGoodIdsByType(type);