基于javaweb+mysql的在线商城水果蔬菜商城果蔬商城(前台、后台)
基于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的在线商城水果蔬菜商城果蔬商城(前台、后台)相关推荐
- 基于javaweb+mysql的在线商城购物商城水果蔬菜批发商城(前台、后台)
基于javaweb+mysql的在线商城购物商城水果蔬菜批发商城(前台.后台) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/myeclipse/s ...
- 基于javaweb+mysql的网上水果超市商城设计和实现(java+ssm+springboot+redis)
基于javaweb+mysql的网上水果超市商城设计和实现(java+ssm+springboot+redis) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/mye ...
- 基于javaweb+mysql的农产品水果店销售管理系统
基于javaweb+mysql的农产品水果店销售管理系统 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适 ...
- 计算机实战项目之 [含论文+答辩PPT+源码等]基于javaweb+mysql的促销秒杀竞拍商城|电商购物
<基于javaweb+mysql数据库实现的促销秒杀竞拍商城>该项目含有源码.论文等资料.配套开发软件.软件安装教程.项目发布教程等 使用技术: 前端使用技术:JSP,HTML5,CSS3 ...
- 基于javaweb+JSP+Servlet在线商城鲜花花卉商城(前台、后台)
基于javaweb+JSP+Servlet在线商城鲜花花卉商城(前台.后台) 开发工具:eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练习, ...
- 基于javaweb+JSP+Servlet在线商城购物商城服装商城(前台、后台)
基于javaweb+JSP+Servlet在线商城购物商城服装商城(前台.后台) 开发工具:eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计,大作业,毕业设计,项目练 ...
- 基于javaweb+mysql的二手交易平台二手商城二手物品(前台、后台)
基于javaweb+mysql的二手交易平台二手商城二手物品(前台.后台) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/myeclipse/sts ...
- 基于javaweb+mysql的在线购物商城shop系统(仅前台购物)
基于javaweb+mysql的在线购物商城shop系统(仅前台购物) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适用 ...
- JAVA化妆品销售网,区块链技术基于SSM的化妆品销售网站、基于JavaWeb的化妆品在线商城源码...
第8179篇区块链技术文章区块链技术基于SSM的化妆品销售网站.基于JavaWeb的化妆品在线商城源码 需求分析 基于SSM技术设计实现一个化妆品销售网站, 支持商家在线售卖化妆品, 整个网站设计采用 ...
最新文章
- zabbix web前端取值同后端取值不一致
- 【linux练习】基础作业一
- 本土化App名稱和icon
- 【Python金融量化 8- 100 】八、计算投资组合风险
- leetcode1509. 三次操作后最大值与最小值的最小差
- 在windows下编译FFMPEG-最新2009版本
- java 死锁_java死锁分析
- iSPRINT:Google 最高能的创新加速课程,清华老师都来给点赞!
- 独家 | 林元庆新征程:创立AIbee估值8亿,毗邻百度,吴恩达助攻
- c++反转字符,算法优化与实现
- : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server versi
- 11款极酷Chrome浏览器插件推荐
- BRVAH(BaseRecyclerViewAdapterHelper)详解
- VB开发OCX控件的属性之自定义列表项
- java jdom 创建xml_java中使用jdom生成xml
- 谈谈外贸自建站收款方式及优缺点有哪些?
- Git工具的基本使用(一)
- 2021年电工(初级)考试题库及电工(初级)模拟考试
- 试画出下面系统的乃式图(nyquist图)【Matlab】
- 我对说话人识别/声纹识别的研究综述