基于javaweb+mysql的在线商城水果蔬菜商城果蔬商城(前台、后台)

运行环境

Java≥8、MySQL≥5.7

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

该项目分为前台用户和后台管理员两个角色,

用户角色的功能:登录(JWT的token验证)、注册浏览商品、修改个人信息(上传图片)、修改密码、评论商品添加商品到购物车(Redis缓存)、提交订单查看订单收藏商品等等功能。

管理员角色的功能:管理用户信息、管理用户评论信息、管理商品信息、管理订单信息等等功能。

前台:

后台:

技术框架

SpringBoot SpringMVC MyBatis FreeMarker JWT Redis


    }@Overridepublic ResponseVo<Boolean> updateOrderState(Long orderId, Integer state) {if(orderId == null || state == null){return ResponseVo.errorByMsg(CodeMsg.DATA_ERROR);}Order order = orderMapper.selectByPrimaryKey(orderId);if(order == null){return ResponseVo.errorByMsg(CodeMsg.ORDER_NOT_EXIST);}if(orderMapper.updateStateByOrderId(orderId, state) <= 0){return ResponseVo.errorByMsg(CodeMsg.ORDER_STATE_EDIT_ERROR);
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
        return ResponseVo.successByMsg(token,"修改个人信息成功!");}@Overridepublic ResponseVo<Boolean> updatePasswd(String prePassword, String newPassword, String reNewPassword, HttpServletRequest request) {//对用户输入的数据进行非空验证if(StringUtil.isEmpty(prePassword)){return ResponseVo.errorByMsg(CodeMsg.USER_PREPASSWORD_EMPTY);}if(StringUtil.isEmpty(newPassword)){return ResponseVo.errorByMsg(CodeMsg.USER_NEWPASSWORD_EMPTY);}if(StringUtil.isEmpty(reNewPassword)){return ResponseVo.errorByMsg(CodeMsg.USER_RENEWPASSWORD_EMPTY);}//获取当前登录用户的idString id = (String) request.getAttribute("id");//判断用户输入的旧密码是否正确User user = userMapper.selectByPrimaryKey(Long.valueOf(id));if(!prePassword.equals(user.getPassword())){return ResponseVo.errorByMsg(CodeMsg.USER_PREPASSWORD_ERROR);}//判断用户输入的新密码是否符合规范user.setPassword(newPassword);CodeMsg validate = ValidateEntityUtil.validate(user);
 public BufferedImage generatorVCodeImage(String vcode, boolean drawline){//创建验证码图片BufferedImage vcodeImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics g = vcodeImage.getGraphics();//填充背景色g.setColor(new Color(246, 240, 250));g.fillRect(0, 0, width, height);if(drawline){drawDisturbLine(g);}//用于生成伪随机数Random ran = new Random();//在图片上画验证码for(int i = 0;i < vcode.length();i++){//设置字体g.setFont(new Font(fontNames[ran.nextInt(fontNames.length)], fontStyles[ran.nextInt(fontStyles.length)], fontsize));
/*** 用户评论列表页面* @param model* @param id* @param request* @param content* @param pageNum* @param pageSize* @return*/@RequestMapping(value="/comment",method= RequestMethod.GET)public String comment(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", commentService.selectByPage(pageNum, pageSize).getData());}else {model.addAttribute("PageInfo", commentService.selectByPageAndSearchContent(content, pageNum, pageSize).getData());model.addAttribute("content",content);}//获取路径上有关信息
                uploadErrorCallback: function (data){         // 单个文件上传失败的回调,console && console.log(data);},allCompleteCallback: function(){              // 全部上传完成时的回调dialog.buttons[0].setDisabled(false);    //上传完毕后点亮按钮}//exceedFileCallback: 'exceedFileCallback',   // 文件超出限制的最大体积时的回调//startUploadCallback: startUploadCallback    // 开始上传某个文件时的回调};wordImage.init(flashOptions,callbacks);});</script></body>
</html>
<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        }//判断订单留言长度是否合法if(remark.length() > 50){return ResponseVo.errorByMsg(CodeMsg.ORDER_REMARK_EXCEED_LENGTH);}//声明一个自定义错误的CodeMsgCodeMsg codeMsg = CodeMsg.ORDER_ERROR;//声明一个商品id的Set集合Set<Long> productIdSet = new HashSet<>();//遍历订单中的商品for(OrderItem orderItem : order.getOrderItemList()){productIdSet.add(orderItem.getProductId());}//获取这些选中商品的详细信息List<Product> productList = productMapper.selectByProductIdSet(productIdSet);//分别比较订单中商品购买数量是否大于库存for(OrderItem orderItem : order.getOrderItemList()){for(Product product : productList){if(orderItem.getProductId().equals(product.getId())){if(orderItem.getQuantity() > product.getStock()){codeMsg.setMsg("商品<"+product.getProductName()+">库存不足了,请减少购买数量!");return ResponseVo.errorByMsg(codeMsg);}}
            return ResponseVo.errorByMsg(codeMsg);}//准备保存文件File filePath = new File(uploadPhotoPath);if (!filePath.exists()) {//若不存在文件夹,则创建一个文件夹filePath.mkdir();}filePath = new File(uploadPhotoPath + "/" + StringUtil.getFormatterDate(new Date(), "yyyyMMdd"));//判断当天日期的文件夹是否存在,若不存在,则创建if (!filePath.exists()) {//若不存在文件夹,则创建一个文件夹filePath.mkdir();}String filename = StringUtil.getFormatterDate(new Date(), "yyyyMMdd") + "/" + System.currentTimeMillis() + suffix;try {photo.transferTo(new File(uploadPhotoPath + "/" + filename));   //把文件上传} catch (IllegalStateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}log.info("图片上传成功,保存位置:" + uploadPhotoPath + filename);
 private Integer code;//错误码private String msg;//错误信息/*** 构造函数私有化即单例模式* 该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。* @param code* @param msg*/private CodeMsg(Integer code,String msg){this.code = code;this.msg = msg;}public CodeMsg () {}public Integer getCode() {return code;}
        alert(UE.getEditor('editor').getAllHtml())}function getContent() {var arr = [];arr.push("使用editor.getContent()方法可以获得编辑器的内容");arr.push("内容为:");arr.push(UE.getEditor('editor').getContent());alert(arr.join("\n"));}function getPlainTxt() {var arr = [];arr.push("使用editor.getPlainTxt()方法可以获得编辑器的带格式的纯文本内容");arr.push("内容为:");arr.push(UE.getEditor('editor').getPlainTxt());alert(arr.join('\n'))}function setContent(isAppendTo) {var arr = [];arr.push("使用editor.setContent('欢迎使用ueditor')方法可以设置编辑器的内容");UE.getEditor('editor').setContent('欢迎使用ueditor', isAppendTo);alert(arr.join("\n"));}function setDisabled() {
                    }point = map.getCenter();marker.setPoint(point);} else {alert(lang.errorMsg);}}});search.search(document.getElementById('address').value || document.getElementById('city').value);}//获得参数function getPars(str,par){var reg = new RegExp(par+"=((\\d+|[.,])*)","g");return reg.exec(str)[1];}function init(){var mapNode = editor.selection.getRange().getClosedNode(),isMapImg = mapNode && /api[.]map[.]baidu[.]com/ig.test(mapNode.getAttribute("src")),isMapIframe = mapNode && domUtils.hasClass(mapNode, 'ueditor_baidumap');if(isMapImg || isMapIframe){var url, centerPos, markerPos;
    <title></title><meta http-equiv="Content-Type" content="text/html;charset=utf-8"/><script type="text/javascript" src="../internal.js"></script><style type="text/css">.wrapper{width: 600px;padding: 10px;height: 352px;overflow: hidden;position: relative;border-bottom: 1px solid #d7d7d7}.localPath input{float: left;width: 350px;line-height: 20px;height: 20px;}#clipboard{float:left;width: 70px;height: 30px; }.description{ color: #0066cc; margin-top: 2px; width: 450px; height: 45px;float: left;line-height: 22px}#upload{width: 100px;height: 30px;float: right; margin:10px 2px 0 0;cursor: pointer;}#msg{ width: 140px; height: 30px; line-height:25px;float: left;color: red}</style>
</head>
<body><div class="wrapper"><div class="localPath"><input id="localPath" type="text" readonly /><div id="clipboard"></div><div id="msg"></div></div><div id="flashContainer"></div><div><div id="upload" style="display: none" ><img id="uploadBtn"></div><div class="description"><span style="color: red"><var id="lang_resave"></var>: </span><var id="lang_step"></var></div></div></div>
     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()));
                    selectedImageCount += selectFiles.length;if(selectedImageCount) baidu.g("upload").style.display = "";dialog.buttons[0].setDisabled(true); //初始化时置灰确定按钮},deleteFileCallback: function(delFiles){                 // 删除文件的回调selectedImageCount -= delFiles.length;if (!selectedImageCount) {baidu.g("upload").style.display = "none";dialog.buttons[0].setDisabled(false);         //没有选择图片时重新点亮按钮}},uploadCompleteCallback: function(data){               // 单个文件上传完成的回调try{var info = eval("(" + data.info + ")");info && imageUrls.push(info);selectedImageCount--;}catch(e){}},uploadErrorCallback: function (data){         // 单个文件上传失败的回调,console && console.log(data);},
        }if(StringUtil.isEmpty(newPassword)){return ResponseVo.errorByMsg(CodeMsg.USER_NEWPASSWORD_EMPTY);}if(StringUtil.isEmpty(reNewPassword)){return ResponseVo.errorByMsg(CodeMsg.USER_RENEWPASSWORD_EMPTY);}//获取当前登录用户的idString id = (String) request.getAttribute("id");//判断用户输入的旧密码是否正确User user = userMapper.selectByPrimaryKey(Long.valueOf(id));if(!prePassword.equals(user.getPassword())){return ResponseVo.errorByMsg(CodeMsg.USER_PREPASSWORD_ERROR);}//判断用户输入的新密码是否符合规范user.setPassword(newPassword);CodeMsg validate = ValidateEntityUtil.validate(user);




















基于javaweb+mysql的在线商城水果蔬菜商城果蔬商城(前台、后台)相关推荐

  1. 基于javaweb+mysql的在线商城购物商城水果蔬菜批发商城(前台、后台)

    基于javaweb+mysql的在线商城购物商城水果蔬菜批发商城(前台.后台) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/myeclipse/s ...

  2. 基于javaweb+mysql的网上水果超市商城设计和实现(java+ssm+springboot+redis)

    基于javaweb+mysql的网上水果超市商城设计和实现(java+ssm+springboot+redis) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/mye ...

  3. 基于javaweb+mysql的农产品水果店销售管理系统

    基于javaweb+mysql的农产品水果店销售管理系统 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适 ...

  4. 计算机实战项目之 [含论文+答辩PPT+源码等]基于javaweb+mysql的促销秒杀竞拍商城|电商购物

    <基于javaweb+mysql数据库实现的促销秒杀竞拍商城>该项目含有源码.论文等资料.配套开发软件.软件安装教程.项目发布教程等 使用技术: 前端使用技术:JSP,HTML5,CSS3 ...

  5. 基于javaweb+JSP+Servlet在线商城鲜花花卉商城(前台、后台)

    基于javaweb+JSP+Servlet在线商城鲜花花卉商城(前台.后台) 开发工具:eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习, ...

  6. 基于javaweb+JSP+Servlet在线商城购物商城服装商城(前台、后台)

    基于javaweb+JSP+Servlet在线商城购物商城服装商城(前台.后台) 开发工具:eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练 ...

  7. 基于javaweb+mysql的二手交易平台二手商城二手物品(前台、后台)

    基于javaweb+mysql的二手交易平台二手商城二手物品(前台.后台) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/myeclipse/sts ...

  8. 基于javaweb+mysql的在线购物商城shop系统(仅前台购物)

    基于javaweb+mysql的在线购物商城shop系统(仅前台购物) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适用 ...

  9. JAVA化妆品销售网,区块链技术基于SSM的化妆品销售网站、基于JavaWeb的化妆品在线商城源码...

    第8179篇区块链技术文章区块链技术基于SSM的化妆品销售网站.基于JavaWeb的化妆品在线商城源码 需求分析 基于SSM技术设计实现一个化妆品销售网站, 支持商家在线售卖化妆品, 整个网站设计采用 ...

最新文章

  1. zabbix web前端取值同后端取值不一致
  2. 【linux练习】基础作业一
  3. 本土化App名稱和icon
  4. 【Python金融量化 8- 100 】八、计算投资组合风险
  5. leetcode1509. 三次操作后最大值与最小值的最小差
  6. 在windows下编译FFMPEG-最新2009版本
  7. java 死锁_java死锁分析
  8. iSPRINT:Google 最高能的创新加速课程,清华老师都来给点赞!
  9. 独家 | 林元庆新征程:创立AIbee估值8亿,毗邻百度,吴恩达助攻
  10. c++反转字符,算法优化与实现
  11. : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server versi
  12. 11款极酷Chrome浏览器插件推荐
  13. BRVAH(BaseRecyclerViewAdapterHelper)详解
  14. VB开发OCX控件的属性之自定义列表项
  15. java jdom 创建xml_java中使用jdom生成xml
  16. 谈谈外贸自建站收款方式及优缺点有哪些?
  17. Git工具的基本使用(一)
  18. 2021年电工(初级)考试题库及电工(初级)模拟考试
  19. 试画出下面系统的乃式图(nyquist图)【Matlab】
  20. 我对说话人识别/声纹识别的研究综述

热门文章

  1. Fluorine实现Flex与.NET通信出错
  2. linux系统在物流公司的z作用,Linux平台下物流仓储系统的智能化设计.pdf
  3. js如何给字符串添加千分位分隔符
  4. MOT--ByteTrack
  5. HTML如何对视频缩放,vue接入实时视频,并可以控制缩放与上下左右
  6. 【Unity Shader】Unity中阴影映射标准制作流程
  7. 常见反函数、反函数导数(微分)公式
  8. 孙正义:30年后AI的智商将达到10000,你与机器人之间的智力将差49个半爱恩斯坦
  9. 办公室桌面计算机,办公室的电脑桌面
  10. 吞食鱼游戏蒙版图方法把鱼放到背景中