基于javaweb+mysql的springboot+mybatis在线商城水果蔬菜商城果蔬商城(前台、后台)(java+springboot+ssm+freemarker+redis+mysql)
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
该项目分为前台用户和后台管理员两个角色,
用户角色的功能:登录(JWT的token验证)、注册、浏览商品、修改个人信息(上传图片)、修改密码、评论商品、添加商品到购物车(Redis缓存)、提交订单、查看订单、收藏商品等等功能。
管理员角色的功能:管理用户信息、管理用户评论信息、管理商品信息、管理订单信息等等功能。
前台:
后台:
技术框架
SpringBoot SpringMVC MyBatis FreeMarker JWT Redis
基于javaweb+mysql的SpringBoot+MyBatis在线商城水果蔬菜商城果蔬商城(前台、后台)(java+springboot+ssm+freemarker+redis+mysql)
@Autowired
private IMenuService menuService;
@Autowired
private MenuMapper menuMapper;
@Autowired
private AdminMapper adminMapper;
@Autowired
private AuthorityMapper authorityMapper;
@Autowired
private IOrderService orderService;
/**
* 订单列表页面
* @param model
* @param id
* @param request
* @param content
* @param pageNum
* @param pageSize
* @return
*/
@RequestMapping(value="/index",method= RequestMethod.GET)
public String index(Model model, Integer id, HttpServletRequest request, String content,
@RequestParam(required = false, defaultValue = "1") Integer pageNum,
@RequestParam(required = false, defaultValue = "5") Integer pageSize //每页5个数据
) {
//获取列表展示有关信息
if(StringUtil.isEmpty(content)) {
//如果查询信息为空
model.addAttribute("PageInfo", orderService.selectByPage(pageNum, pageSize).getData());
}else {
model.addAttribute("PageInfo", orderService.selectByPageAndContent(Long.valueOf(content), pageNum, pageSize).getData());
model.addAttribute("content",content);
}
//获取路径上有关信息
/**
* 用户个人信息修改操作处理
* @param user
* @return
*/
@RequestMapping(value="/update_info",method=RequestMethod.POST)
@ResponseBody
public ResponseVo<String> updateInfo(User user){
return userService.updateInfo(user);
}
/**
* 用户修改密码操作处理
* @param prePassword
* @param newPassword
* @param reNewPassword
* @param request
* @return
*/
@RequestMapping(value="/update_passwd",method=RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> updatePasswd(String prePassword, String newPassword, String reNewPassword, HttpServletRequest request){
return userService.updatePasswd(prePassword, newPassword, reNewPassword, request);
}
}
/**
* 后台管理系统管理员控制器
*
*/
@RequestMapping("/admin/admin")
@Controller
public class AdminController {
@Autowired
private IMenuService menuService;
@Autowired
private MenuMapper menuMapper;
@Autowired
//从数据库中删除订单信息
if(orderMapper.deleteByPrimaryKey(orderId) <= 0){
return ResponseVo.errorByMsg(CodeMsg.ORDER_DELETE_ERROR);
}
return ResponseVo.successByMsg(true, "订单删除成功!");
}
@Override
public List<Order> getOrderByDay() {
return orderMapper.getOrderByDay();
}
@Override
public List<Order> getOrderByWeek() {
return orderMapper.getOrderByWeek();
}
@Override
public List<Order> getOrderByMonth() {
return orderMapper.getOrderByMonth();
}
}
/**
@RequestMapping(value="/add",method=RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> add(Role role){
return roleService.add(role);
}
/**
* 角色编辑表单处理
* @param role
* @return
*/
@RequestMapping(value="/edit",method=RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> edit(Role role){
return roleService.edit(role);
}
/**
* 角色删除处理
* @param id
* @return
*/
@RequestMapping(value="/delete",method=RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> delete(Integer id){
return roleService.delete(id);
}
}
* @param pageNum
* @param pageSize
* @return
*/
@RequestMapping(value="/index",method= RequestMethod.GET)
public String index(Model model, Integer id, HttpServletRequest request, String content,
@RequestParam(required = false, defaultValue = "1") Integer pageNum,
@RequestParam(required = false, defaultValue = "5") Integer pageSize //每页5个数据
) {
//获取列表展示有关信息
if(StringUtil.isEmpty(content)) {
//如果查询信息为空
model.addAttribute("PageInfo", orderService.selectByPage(pageNum, pageSize).getData());
}else {
model.addAttribute("PageInfo", orderService.selectByPageAndContent(Long.valueOf(content), pageNum, pageSize).getData());
model.addAttribute("content",content);
}
//获取路径上有关信息
Menu selectByPrimaryKey = menuMapper.selectByPrimaryKey(id);
if(selectByPrimaryKey == null) {
return "error/404";
}
Admin loginedAdmin = (Admin) request.getSession().getAttribute(SessionConstant.SESSION_ADMIN_LOGIN_KEY);
List<Authority> selectByRoleId = authorityMapper.selectByRoleId(loginedAdmin.getRoleId()); //获取当前用户所有权限
Set<Integer> menuIdSet = selectByRoleId.stream().map(Authority :: getMenuId).collect(Collectors.toSet());//把权限中所有菜单id取出来
List<Menu> allMenusByStateAndPrimaryKeys = menuMapper.selectByStateAndPrimaryKeys(MenuStateEnum.OPEN.getCode(), menuIdSet);
model.addAttribute("allAdmins", adminMapper.selectAll());
model.addAttribute("onThirdMenus", menuService.getThirdMenus(allMenusByStateAndPrimaryKeys).getData());
model.addAttribute("parentMenu", menuMapper.selectByPrimaryKey(selectByPrimaryKey.getParentId()));
model.addAttribute("currentMenu", selectByPrimaryKey);
return "admin/order/index";
}
/**
* 订单详情查看页面
* @param model
* @param orderId
* @return
*/
@RequestMapping(value="/view",method=RequestMethod.GET)
public String view(Model model, Long orderId) {
model.addAttribute("OrderItemList", orderService.getOrderItemByOrderId(orderId));
model.addAttribute("Order", orderService.selectByPrimaryKey(orderId));
return "admin/order/view";
}
/**
* 修改订单状态页面
* @param model
* @param orderId
public String add_button(Model model,Integer id) {
Menu selectByPrimaryKey = menuMapper.selectByPrimaryKey(id);
if(selectByPrimaryKey == null) {
return "error/404";
}
model.addAttribute("secondMenu",selectByPrimaryKey);
return "admin/menu/add_button";
}
/**
* 菜单添加表单处理
* @param menu
* @return
*/
@RequestMapping(value="/add",method=RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> add(Menu menu){
return menuService.add(menu);
}
/**
* 菜单编辑表单处理
* @param menu
* @return
*/
@RequestMapping(value="/edit",method=RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> edit(Menu menu){
return menuService.edit(menu);
}
/**
* 菜单删除处理
* @param id
* @return
*/
@RequestMapping(value="/delete",method=RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> delete(Integer id){
return menuService.delete(id);
}
@Autowired
private AuthorityMapper authorityMapper;
@Autowired
private IProductCategoryService productCategoryService;
@Autowired
private ProductCategoryMapper productCategoryMapper;
/**
* 商品种类列表页面
* @param model
* @param id
* @param request
* @param content
* @param pageNum
* @param pageSize
* @return
*/
@RequestMapping(value="/index",method= RequestMethod.GET)
public String index(Model model, Integer id, HttpServletRequest request, String content,
@RequestParam(required = false, defaultValue = "1") Integer pageNum,
@RequestParam(required = false, defaultValue = "5") Integer pageSize //每页5个数据
) {
//获取列表展示有关信息
if(StringUtil.isEmpty(content)) {
//如果查询信息为空
model.addAttribute("PageInfo", productCategoryService.getProductCategoryByPage(pageNum, pageSize).getData());
}else {
model.addAttribute("PageInfo", productCategoryService.getProductCategoryByPageAndContent(pageNum, pageSize, content).getData());
model.addAttribute("content",content);
}
//获取路径上有关信息
Menu selectByPrimaryKey = menuMapper.selectByPrimaryKey(id);
if(selectByPrimaryKey == null) {
return "error/404";
}
Admin loginedAdmin = (Admin) request.getSession().getAttribute(SessionConstant.SESSION_ADMIN_LOGIN_KEY);
List<Authority> selectByRoleId = authorityMapper.selectByRoleId(loginedAdmin.getRoleId()); //获取当前用户所有权限
Set<Integer> menuIdSet = selectByRoleId.stream().map(Authority :: getMenuId).collect(Collectors.toSet());//把权限中所有菜单id取出来
List<Menu> allMenusByStateAndPrimaryKeys = menuMapper.selectByStateAndPrimaryKeys(MenuStateEnum.OPEN.getCode(), menuIdSet);
model.addAttribute("allAdmins", adminMapper.selectAll());
* @return
*/
@RequestMapping(value="/person_info",method=RequestMethod.GET)
public String personInfo(Model model) {
return "admin/system/person_info";
}
/**
* 退出登录
* @param model
* @return
*/
@RequestMapping(value="/logout",method=RequestMethod.GET)
public String logout(Model model,HttpServletRequest request) {
request.getSession().setAttribute(SessionConstant.SESSION_ADMIN_LOGIN_KEY, null);
return "admin/system/login";
}
/**
* 登录表单验证处理
* @param admin
* @param cpacha
* @return
*/
@RequestMapping(value="/login",method=RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> login(Admin admin, String cpacha, HttpServletRequest request){
if(admin == null) {
return ResponseVo.errorByMsg(CodeMsg.DATA_ERROR);
}
if(StringUtil.isEmpty(cpacha)) {
return ResponseVo.errorByMsg(CodeMsg.CPACHA_EMPTY);
}
String correct_cpacha = (String) request.getSession().getAttribute("admin_login");
//判断验证码是否过期
if(StringUtil.isEmpty(correct_cpacha)){
return ResponseVo.errorByMsg(CodeMsg.CPACHA_EXPIRE);
}
if(!cpacha.toLowerCase().equals(correct_cpacha.toLowerCase())) {
return ResponseVo.errorByMsg(CodeMsg.CPACHA_ERROR);
* @return
*/
@RequestMapping(value="/add",method=RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> add(Admin admin){
return adminService.add(admin);
}
/**
* 管理员编辑表单处理
* @param admin
* @return
*/
@RequestMapping(value="/edit",method=RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> edit(Admin admin,HttpServletRequest request){
Admin loginedAdmin = (Admin) request.getSession().getAttribute(SessionConstant.SESSION_ADMIN_LOGIN_KEY);
ResponseVo<Admin> editAdmin = adminService.edit(admin);
if(editAdmin.getCode().intValue() == CodeMsg.SUCCESS.getCode()) {
if(loginedAdmin.getId().intValue() == editAdmin.getData().getId().intValue()) {
//更新权限
request.getSession().setAttribute(SessionConstant.SESSION_ADMIN_LOGIN_KEY, editAdmin.getData());
}
return ResponseVo.successByMsg(true, "编辑成功!");
}else {
CodeMsg codeMsg = new CodeMsg();
codeMsg.setCode(editAdmin.getCode());
codeMsg.setMsg(editAdmin.getMsg());
return ResponseVo.errorByMsg(codeMsg);
}
}
/**
* 管理员删除处理
* @param id
* @return
*/
@RequestMapping(value="/delete",method=RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> delete(Integer id){
return adminService.delete(id);
}
public User selectByPrimaryKey(Long id) {
return userMapper.selectByPrimaryKey(id);
}
@Override
public ResponseVo<Boolean> updateUserPasswd(String passwd, Long userId) {
if(StringUtil.isEmpty(passwd) || userId == null){
return ResponseVo.errorByMsg(CodeMsg.DATA_ERROR);
}
User user = userMapper.selectByPrimaryKey(userId);
user.setPassword(passwd);
//统一表单验证
CodeMsg validate = ValidateEntityUtil.validate(user);
if(!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {
return ResponseVo.errorByMsg(validate);
}
//修改数据库中的用户信息
if(userMapper.updateByPrimaryKeySelective(user) <= 0){
return ResponseVo.errorByMsg(CodeMsg.USER_PASSWORD_EDIT_ERROR);
}
return ResponseVo.successByMsg(true, "修改用户密码成功!");
}
@Override
public ResponseVo<Boolean> deleteUser(Long userId) {
if(userId == null){
return ResponseVo.errorByMsg(CodeMsg.DATA_ERROR);
}
User user = userMapper.selectByPrimaryKey(userId);
if(user == null){
return ResponseVo.errorByMsg(CodeMsg.USER_NOT_EXIST);
}
if(userMapper.deleteByPrimaryKey(userId) <= 0){
return ResponseVo.errorByMsg(CodeMsg.USER_DELETE_ERROR);
}
return ResponseVo.successByMsg(true, "删除用户成功!");
}
}
}
model.addAttribute("allAdmins", adminMapper.selectAll());
List<Menu> allMenusByState = menuMapper.selectByState(MenuStateEnum.OPEN.getCode()); //获取所有状态开启的菜单
model.addAttribute("onThirdMenus", menuService.getThirdMenus(allMenusByState).getData());
model.addAttribute("parentMenu", menuMapper.selectByPrimaryKey(selectByPrimaryKey.getParentId()));
model.addAttribute("currentMenu", selectByPrimaryKey);
return "admin/mail/receive";
}
/**
* 发件箱页面
* @param model
* @param id
* @return
*/
@RequestMapping(value="/send",method=RequestMethod.GET)
public String send(Model model,Integer id,String title,
@RequestParam(required = false, defaultValue = "1") Integer pageNum,
@RequestParam(required = false, defaultValue = "5") Integer pageSize, //每页5个数据
HttpServletRequest request
) {
Admin loginedAdmin = (Admin) request.getSession().getAttribute(SessionConstant.SESSION_ADMIN_LOGIN_KEY);
//获取列表展示有关信息
if(StringUtil.isEmpty(title)) {
//如果查询信息为空
model.addAttribute("PageInfo", mailService.getSendMailsByPage(pageNum, pageSize, loginedAdmin.getId()).getData());
}else {
model.addAttribute("PageInfo", mailService.getSendMailsByPageAndTitle(pageNum, pageSize, loginedAdmin.getId(), title).getData());
model.addAttribute("title",title);
}
//获取路径上有关信息
Menu selectByPrimaryKey = menuMapper.selectByPrimaryKey(id);
if(selectByPrimaryKey == null) {
return "error/404";
}
model.addAttribute("allAdmins", adminMapper.selectAll());
List<Menu> allMenusByState = menuMapper.selectByState(MenuStateEnum.OPEN.getCode()); //获取所有状态开启的菜单
model.addAttribute("onThirdMenus", menuService.getThirdMenus(allMenusByState).getData());
model.addAttribute("parentMenu", menuMapper.selectByPrimaryKey(selectByPrimaryKey.getParentId()));
model.addAttribute("currentMenu", selectByPrimaryKey);
return "admin/mail/send";
}
/**
* 邮件查看
* @param model
return "admin/mail/preview";
}
/**
* 邮件附件移除
* @param Id
* @return
*/
@RequestMapping(value="/remove_attachment",method=RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> removeAttachment(Integer Id){
return mailService.removeAttachment(Id);
}
/**
* 发送邮件
* @param mail
* @return
*/
@RequestMapping(value="/send_mail",method=RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> sendMail(Mail mail,String receivers,HttpServletRequest request){
Admin loginedAdmin = (Admin) request.getSession().getAttribute(SessionConstant.SESSION_ADMIN_LOGIN_KEY);
return mailService.sendMail(mail, receivers, loginedAdmin.getId());
}
/**
* 邮件删除处理
* @param id
* @return
*/
@RequestMapping(value="/delete",method=RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> delete(Integer id,HttpServletRequest request){
Admin loginedAdmin = (Admin) request.getSession().getAttribute(SessionConstant.SESSION_ADMIN_LOGIN_KEY);
return mailService.delete(id, loginedAdmin.getId());
}
}
/**
* 个人信息页面
* @param model
* @return
*/
@RequestMapping(value="/person_info",method=RequestMethod.GET)
public String personInfo(Model model) {
return "admin/system/person_info";
}
/**
* 退出登录
* @param model
* @return
*/
@RequestMapping(value="/logout",method=RequestMethod.GET)
public String logout(Model model,HttpServletRequest request) {
request.getSession().setAttribute(SessionConstant.SESSION_ADMIN_LOGIN_KEY, null);
return "admin/system/login";
}
/**
* 登录表单验证处理
* @param admin
* @param cpacha
* @return
*/
@RequestMapping(value="/login",method=RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> login(Admin admin, String cpacha, HttpServletRequest request){
if(admin == null) {
return ResponseVo.errorByMsg(CodeMsg.DATA_ERROR);
}
if(StringUtil.isEmpty(cpacha)) {
return ResponseVo.errorByMsg(CodeMsg.CPACHA_EMPTY);
}
String correct_cpacha = (String) request.getSession().getAttribute("admin_login");
//判断验证码是否过期
if(StringUtil.isEmpty(correct_cpacha)){
return ResponseVo.errorByMsg(CodeMsg.CPACHA_EXPIRE);
}
if(!cpacha.toLowerCase().equals(correct_cpacha.toLowerCase())) {
return ResponseVo.errorByMsg(CodeMsg.CPACHA_ERROR);
}
//去数据库查询数据验证
Admin selectByNameAndPassword = adminMapper.selectByNameAndPassword(admin.getName(), admin.getPassword());
if(selectByNameAndPassword == null) {
return ResponseVo.errorByMsg(CodeMsg.USERNAME_OR_PASSWORD_ERROR);
}
//验证该用户是否被冻结
if(selectByNameAndPassword.getState().intValue() == AdminStateEnum.STOP.getCode().intValue()) {
return ResponseVo.errorByMsg(CodeMsg.USER_STATE_ERROR);
}
//验证该用户是否无权限
@RequestMapping(value="/update_passwd",method=RequestMethod.POST)
@ResponseBody
public ResponseVo<Boolean> updatePasswd(String prePassword, String newPassword, String reNewPassword, HttpServletRequest request){
return userService.updatePasswd(prePassword, newPassword, reNewPassword, request);
}
}
/**
*/
/**
/**
*/
/**
* 后台管理系统用户控制器
*
*/
@RequestMapping("/admin/user")
@Controller
public class UserController {
@Autowired
private IMenuService menuService;
}
/**
* 后台管理系统管理员控制器
*
*/
@RequestMapping("/admin/admin")
@Controller
public class AdminController {
@Autowired
private IMenuService menuService;
@Autowired
private MenuMapper menuMapper;
@Autowired
private AdminMapper adminMapper;
@Autowired
private IAdminService adminService;
@Autowired
private RoleMapper roleMapper;
}else {
model.addAttribute("PageInfo", adminService.getAdminListByPageAndName(pageNum, pageSize, name).getData());
model.addAttribute("name",name);
}
model.addAttribute("RoleList", roleMapper.selectAll());
//获取路径上有关信息
Menu selectByPrimaryKey = menuMapper.selectByPrimaryKey(id);
if(selectByPrimaryKey == null) {
return "error/404";
}
Admin loginedAdmin = (Admin) request.getSession().getAttribute(SessionConstant.SESSION_ADMIN_LOGIN_KEY);
List<Authority> selectByRoleId = authorityMapper.selectByRoleId(loginedAdmin.getRoleId()); //获取当前用户所有权限
Set<Integer> menuIdSet = selectByRoleId.stream().map(Authority :: getMenuId).collect(Collectors.toSet());//把权限中所有菜单id取出来
List<Menu> allMenusByStateAndPrimaryKeys = menuMapper.selectByStateAndPrimaryKeys(MenuStateEnum.OPEN.getCode(), menuIdSet);
model.addAttribute("onThirdMenus", menuService.getThirdMenus(allMenusByStateAndPrimaryKeys).getData());
model.addAttribute("parentMenu", menuMapper.selectByPrimaryKey(selectByPrimaryKey.getParentId()));
model.addAttribute("currentMenu", selectByPrimaryKey);
return "admin/admin/index";
}
/**
* 管理员添加页面
* @param model
* @return
*/
@RequestMapping(value="/add",method=RequestMethod.GET)
public String add(Model model) {
model.addAttribute("RoleList", roleMapper.selectAll());
return "admin/admin/add";
}
/**
* 管理员编辑页面
* @param model
* @param id
* @return
*/
@RequestMapping(value="/edit",method=RequestMethod.GET)
public String edit(Model model,Integer id) {
Admin selectByPrimaryKey = adminMapper.selectByPrimaryKey(id);
if(selectByPrimaryKey == null) {
return "error/404";
}
model.addAttribute("RoleList", roleMapper.selectAll());
model.addAttribute("editAdmin", selectByPrimaryKey);
return "admin/admin/edit";
}
/**
* 管理员添加表单处理
* @param admin
* @return