当前位置:网站首页>SSM网上商城购物系统(前台+后台)
SSM网上商城购物系统(前台+后台)
2022-08-02 02:57:00 【热衷与自由】
系统技术栈
服务端:Spring + SpringMVC + Mybatis + JSP
数据库:Mysql
前台技术:js + jQuery + bootstrap
系统模块介绍
前台:
- 用户的登录和注册,注册包括用户名、密码、姓名、手机号、收货地址
- 个人中心(我的订单、积分查看、收货地址、修改密码等)
- 购物车列表(查看当前登录用户的购物车)
- 商品信息列表(今日推荐、热销排行、新品上市)
- 支付功能
后台:
- 类目管理
- 商品管理
- 订单管理
- 用户管理
- 管理员操作
- 退出
前台截图效果




后台效果截图



数据库表

论文截图


核心代码
UserController类
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.util.Objects;
import javax.annotation.Resource;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.config.ExceptionConfig.MyException;
import com.entity.Orders;
import com.entity.Users;
import com.service.CartService;
import com.service.GoodService;
import com.service.OrderService;
import com.service.UserService;
import com.util.PageUtil;
import com.util.SafeUtil;
/**
* 用户相关接口
*/
@Controller
@RequestMapping("/index")
public class UserController {
@Resource
private UserService userService;
@Resource
private GoodService goodService;
@Resource
private OrderService orderService;
@Resource
private CartService cartService;
/**
* 用户注册
*
* @return
*/
@GetMapping("/register")
public String reg() {
return "/index/register.jsp";
}
/**
* 用户注册
*
* @return
*/
@PostMapping("/register")
public String register(Users user, HttpServletRequest request) {
if (user.getUsername().isEmpty()) {
request.setAttribute("msg", "用户名不能为空!");
} else if (Objects.nonNull(userService.getByUsername(user.getUsername()))) {
request.setAttribute("msg", "用户名已存在!");
} else {
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";
}
/**
* 查看积分
*/
@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
*/
@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);
}
/**
* 减少数量
*/
@PostMapping("/cartLess")
public @ResponseBody
boolean cartLess(int id) {
return cartService.less(id);
}
/**
* 删除
*/
@PostMapping("/cartDelete")
public @ResponseBody
boolean cartDelete(int id) {
return cartService.delete(id);
}
/**
* 查看订单
*
* @return
* @throws UnsupportedEncodingException
*/
@GetMapping("/order")
public String order(HttpServletRequest request, HttpSession session,
@RequestParam(required = false, defaultValue = "1") int page,
@RequestParam(required = false, defaultValue = "6") int size) throws UnsupportedEncodingException {
Users user = (Users) session.getAttribute("user");
request.setAttribute("orderList", orderService.getListByUserid(user.getId(), page, size));
request.setAttribute("pageHtml", PageUtil.getPageHtml(request, orderService.getCountByUserid(user.getId()), page, size));
return "/index/order.jsp";
}
/**
* 直接购买
*
* @return
* @throws MyException
*/
@PostMapping("/orderAdd")
public String orderAdd(int goodId, HttpSession session) throws MyException {
Users user = (Users) session.getAttribute("user");
int orderId = orderService.add(goodId, user.getId());
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)));
}
users.setPoint(bigDecimal.doubleValue());//保存积分
int count = userService.updatePoint(users);
if (count > 0) {
session.setAttribute("user", users);//更新用户积分
}
orderService.pay(order);
return 1;
}
/**
* 收货地址
*
* @return
*/
@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;
}
}UserDao接口
public interface UsersDao {
@Select("select count(*) from users")
public long selectCount();
@Select("select * from users order by id desc limit #{begin}, #{size}")
public List<Users> selectList(@Param("begin") int begin, @Param("size") int size);
@Select("select * from users where id=#{id}")
public Users select(int id);
@Select("select * from users where username=#{username}")
public Users selectByUsername(String username);
@Select("select * from users where username=#{username} and password=#{password}")
public Users selectByUsernameAndPassword(@Param("username") String username, @Param("password") String password);
@Insert("insert into users (username,password,name,phone,address) "
+ "values (#{username},#{password},#{name},#{phone},#{address})")
@SelectKey(keyProperty = "id", statement = "SELECT LAST_INSERT_ID()", before = false, resultType = Integer.class)
public boolean insert(Users user);
@Update("update users set name=#{name},phone=#{phone},address=#{address} where id=#{id}")
public boolean update(Users user);
@Update("update users set password=#{password} where id=#{id}")
public boolean updatePassword(@Param("id") int id, @Param("password") String password);
@Update("delete from users where id=#{id}")
public boolean delete(int id);
@Update("update users set point=#{point} where id=#{id}")
int updatePoint(Users users);
}写在最后
各位伙伴,如对该系统感兴趣,欢迎私信我!
边栏推荐
猜你喜欢

Hit the programmer interview scene: What did Baidu interviewers ask me?

7、MySQL Workbench 导出导入数据库

详解最强分布式锁工具:Redisson

DVWA安装教程(懂你的不懂·详细)

JSP WebSehll 后门脚本

Istio微服务治理网格的全方面可视化监控(微服务架构展示、资源监控、流量监控、链路监控)

- daily a LeetCode 】 【 9. Palindrome

Chapter 11_Database Design Specifications

ReentrantLock工作原理

"Paid paddling" stealthily brushes Brother Ali's face scriptures, challenges bytes three times, and finally achieves positive results
随机推荐
- daily a LeetCode 】 【 9. Palindrome
【LeetCode】20. Valid parentheses
I will give you a chance to interview in a big factory. Can you interview?Come in and see!
svm.SVC application practice 1--Breast cancer detection
合奥科技网络 面试(含参考答案)
VPS8504C 微功率隔离电源隔离芯片 VPSC源特科技
“带薪划水”偷刷阿里老哥的面经宝典,三次挑战字节,终成正果
Week 304 Dunk
7、MySQL Workbench 导出导入数据库
OperatingSystemMXBean to get system performance metrics
Heuristic merge, DSU on Tree
WebShell Feature Value Summary and Detection Tool
7-36 社交网络图中结点的“重要性”计算 (30 分) 不用迪杰斯特拉也不用弗洛伊德
【LeetCode】1374. Generate a string with an odd number of each character
cadence landscape bindkey
Nacos源码分析专题(二)-服务注册
ASP WebShell 后门脚本与免杀
JSP Webshell free kill
剑指 Offer 14- I. 剪绳子
第11章_数据库的设计规范