100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 基于javaweb+mysql的ssm+maven点餐系统(java+ssm+jsp+mysql+maven+layui)

基于javaweb+mysql的ssm+maven点餐系统(java+ssm+jsp+mysql+maven+layui)

时间:2020-05-09 08:57:28

相关推荐

基于javaweb+mysql的ssm+maven点餐系统(java+ssm+jsp+mysql+maven+layui)

基于javaweb+mysql的ssm+maven在线点餐系统(java+ssm+jsp+mysql+maven+layui)

运行环境

Java≥8、MySQL≥5.7、Tomcat≥8

开发工具

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

适用

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

功能说明

基于javaweb+mysql的SSM+Maven在线点餐系统(java+ssm+jsp+mysql+maven+layui)

一、项目简述

功能包括: 前台实现:用户浏览菜单、菜品分类筛选、查看菜单详 情、添加购物车、购物车结算、会员券、个人订单查询等 等。 后台实现:餐系管理、菜品管理、订单管理、系统管理、 酉己备员管理等。 系统分为:高或管理员、顾客、厨师、配送员等等。

二、项目运行

环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)

项目技术: JSP +Spring + SpringMVC + MyBatis + html+ css + JavaScript + JQuery + Ajax + layui+ maven等等。

//将user信息保存到session中session.setAttribute(SystemConstant.USERLOGIN, userLogin);map.put(SystemConstant.LOGINFLAG, true);}else {//密码错误map.put(SystemConstant.LOGINFLAG, false);map.put(SystemConstant.MESSAGE, "密码错误!");}}else {//用户名不存在map.put(SystemConstant.LOGINFLAG, false);map.put(SystemConstant.MESSAGE, "用户名不存在!");}return map;}/*** 用户退出登录时的业务逻辑* @param session*/@Overridepublic void exit(HttpSession session) {UserEntity user = (UserEntity)session.getAttribute(SystemConstant.USERLOGIN);//保存用户登出信息userMapper.setLogoutSuccessInfo(user.getUserId());session.removeAttribute(SystemConstant.USERLOGIN);}/*** 根据页面条件查询用户列表* @param vo* @return*/@Overridepublic LayuiTableDataResult findUserListByPage(UserVo vo) {//设置分页信息PageHelper.startPage(vo.getPage(), vo.getLimit());//调用分页查询的方法List<UserEntity> userList = userMapper.findUserListByPage(vo);//创建分页对象,将查询到的数据放进去PageInfo<UserEntity> pageInfo = new PageInfo<>(userList);//返回数据return new LayuiTableDataResult(pageInfo.getTotal(), pageInfo.getList());}/*** 后台添加用户* @param vo* @return*/@Overridepublic Map<String, Object> addUser(UserVo vo) {

map.put(SystemConstant.FLAG, true);map.put(SystemConstant.MESSAGE, "新增菜品SPU信息成功,请尽快完善该菜品的SKU信息");}else {map.put(SystemConstant.FLAG, false);map.put(SystemConstant.MESSAGE, "新增菜品SPU信息失败!");}}else {map.put(SystemConstant.FLAG, false);map.put(SystemConstant.MESSAGE, "新增菜品SPU信息失败");}return map;}/*** 生成菜品规格信息和SKU信息* @param foodParamList* @param foodId* @return*/@Overridepublic boolean generateSku(List<Map<String, Object>> foodParamList, Long foodId, String foodName) {try{//生成一个二维数组String[][] foodattrArr = new String[foodParamList.size()][];for (int i = 0; i < foodParamList.size(); i++) {//将Map映射转换成json字符串String json = JSON.toJSONString(foodParamList.get(i), true);Long attrId = Long.parseLong(foodParamList.get(i).get("attrId").toString());//将json数组转换成List集合List<String> foodvalueList = JSON.parseArray(JSON.parseObject(json).getString("foodvalueArr"), String.class);foodattrArr[i] = new String[foodvalueList.size()];for (String foodvalueName : foodvalueList) {//将菜品规格添加到规格表中String name = ((String) JSONObject.parseObject(foodvalueName).get("foodvalueName"));foodvalueMapper.addFoodvalue(foodId, attrId, name);foodattrArr[i][foodvalueList.indexOf(foodvalueName)] = name;}}//遍历二维数组,拼接SKU名称,生成菜品SKU信息List<StringBuilder> skuName = new ArrayList<>();List<StringBuilder> skuNameList = FoodSkuUtil.buildSku(foodattrArr, foodName, skuName);for (StringBuilder sb : skuNameList) {foodSkuMapper.addFoodSku(sb.toString(), foodId);}return true;}catch (Exception e) {return false;}}

*/@Service@Transactionalpublic class TicketTypeServiceImpl implements TicketTypeService {@Autowiredprivate TicketTypeMapper ticketTypeMapper;/*** 根据页面条件查询优惠券类型集合* @param vo* @return*/@Overridepublic LayuiTableDataResult findTicketTypeListByPage(TicketTypeVo vo) {PageHelper.startPage(vo.getPage(), vo.getLimit());List<TicketTypeEntity> ticketTypeListByPage = ticketTypeMapper.findTicketTypeListByPage(vo);PageInfo<TicketTypeEntity> pageInfo = new PageInfo<>(ticketTypeListByPage);return new LayuiTableDataResult(pageInfo.getTotal(), pageInfo.getList());}/*** 新增优惠券类型* @param vo* @param session* @return*/@Overridepublic Map<String, Object> addTicketType(TicketTypeVo vo, HttpSession session) {Map<String, Object> map = new HashMap<>(16);String username = ((UserEntity) session.getAttribute(SystemConstant.USERLOGIN)).getUsername();vo.setLastModifyBy(username);if (ticketTypeMapper.addTicketType(vo) > 0) {map.put(SystemConstant.FLAG, true);map.put(SystemConstant.MESSAGE, "新增优惠券类型成功");}else {map.put(SystemConstant.FLAG, false);map.put(SystemConstant.MESSAGE, "新增优惠券类型失败");}return map;}/*** 修改优惠券类型* @param vo* @param session* @return

Map<String, Object> map = new HashMap<>(16);//不可以父级菜单就是本身,直接返回修改错误if (vo.getPid().equals(vo.getId())){map.put(SystemConstant.FLAG, false);map.put(SystemConstant.MESSAGE, "修改菜单失败,您不可以选择本身作为父级菜单");return map;}if (menuMapper.modifyMenu(vo) >= 1){map.put(SystemConstant.FLAG, true);map.put(SystemConstant.MESSAGE, "【" + vo.getTitle() + "】菜单信息修改成功");} else {map.put(SystemConstant.FLAG, false);map.put(SystemConstant.MESSAGE, "【" + vo.getTitle() + "】菜单信息修改失败");}return map;}/*** 删除菜单* @param menuId* @return*/@Overridepublic Map<String, Object> deleteMenu(Integer menuId) {Map<String, Object> map = new HashMap<>(16);//删除菜单前先查询是否还有角色仍有使用该菜单的权限if (menuMapper.countRoleByMenuId(menuId) == 0){//删除菜单menuMapper.deleteMenu(menuId);map.put(SystemConstant.FLAG, true);map.put(SystemConstant.MESSAGE, "菜单删除成功");}else {map.put(SystemConstant.FLAG, false);map.put(SystemConstant.MESSAGE, "仍有角色拥有该菜单的使用权限,删除失败");}return map;}}

treeNodes.add(treeNode);}return new LayuiTableDataResult(treeNodes);}/*** 对该角色的菜单权限进行授权* @param menuIds* @param roleId* @return*/@Overridepublic Map<String, Object> grantMenu(String menuIds, Long roleId) {Map<String, Object> map = new HashMap<>(16);try {//将菜单ID拆分出来String[] menuIdArr = menuIds.split(",");//删除该角色的所有已有菜单权限roleMapper.deleteAllMenuByRoleId(roleId);for (String menuId : menuIdArr) {//对角色进行菜单授权roleMapper.grantMenu(roleId, Integer.parseInt(menuId));}map.put(SystemConstant.MESSAGE, "角色菜单关系授权成功");} catch (Exception e) {map.put(SystemConstant.MESSAGE, "角色菜单关系授权失败");}return map;}/*** 删除角色* @param roleId* @return*/@Overridepublic Map<String, Object> deleteRole(Long roleId) {Map<String, Object> map = new HashMap<>(16);//判断角色下是否还有用户,有的话不准删除if (roleMapper.countUserByRoleId(roleId) == 0){//删除该角色的所有菜单授权

public Map<String, Object> findAllShopcartByUserId(HttpSession session) {Map<String, Object> map = new HashMap<>(16);Long userId = ((UserEntity) session.getAttribute(SystemConstant.USERLOGIN)).getUserId();List<ShopcartEntity> shopcartByUserId = shopcartMapper.findAllShopcartByUserId(userId);map.put("shopcart", shopcartByUserId);return map;}/*** 新增该用户某个SKU菜品的数量* @param shopcartId* @return*/@Overridepublic Map<String, Object> addNumCountOne(Long shopcartId) {Map<String, Object> map = new HashMap<>(16);if (shopcartMapper.addNumCountOne(shopcartId) > 0) {map.put(SystemConstant.FLAG, true);}else {map.put(SystemConstant.FLAG, false);}return map;}/*** 减少该用户某个SKU菜品的数量* @param shopcartId* @return*/@Overridepublic Map<String, Object> reduceNumCountOne(Long shopcartId) {Map<String, Object> map = new HashMap<>(16);if (shopcartMapper.reduceNumCountOne(shopcartId) > 0) {map.put(SystemConstant.FLAG, true);}else {map.put(SystemConstant.FLAG, false);}return map;}/*** 删除购物车的某一个条目* @param shopcartId* @return*/@Overridepublic Map<String, Object> deleteShopcart(Long shopcartId) {Map<String, Object> map = new HashMap<>(16);

}//4. 添加投诉记录if (complaintMapper.addComplaint(vo) <= 0){throw new RuntimeException();}map.put(SystemConstant.FLAG, true);map.put(SystemConstant.MESSAGE, "您的投诉已收到,很抱歉为您造成困扰,我们将针对您的投诉尽快做出处理");return map;}}//2.2 投诉类型为菜品投诉case 2:{//根据SKU编号查询菜品信息FoodSkuEntity sku = skuMapper.findFoodSkuBySkuId(Long.parseLong(vo.getTarget()));if (foodMapper.addFaultCountOne(sku.getFoodId()) <= 0){throw new RuntimeException();}else {//3. 修改订单为已投诉if (plainted(order.getOrderId()) <= 0){throw new RuntimeException();}//4. 修改投诉对象为sku名称而不是sku编号vo.setTarget(sku.getSkuName());//5. 添加投诉记录if (complaintMapper.addComplaint(vo) <= 0){throw new RuntimeException();}map.put(SystemConstant.FLAG, true);map.put(SystemConstant.MESSAGE, "您的投诉已收到,很抱歉为您造成困扰,我们将针对您的投诉尽快做出处理");return map;}}//2.3 投诉类型为其他default://1. 修改订单为已投诉if (plainted(order.getOrderId()) <= 0){throw new RuntimeException();}//2. 添加投诉记录if (complaintMapper.addComplaint(vo) <= 0){throw new RuntimeException();}map.put(SystemConstant.FLAG, true);map.put(SystemConstant.MESSAGE, "您的投诉已收到,很抱歉为您造成困扰,我们将针对您的投诉尽快做出处理");return map;}}catch (RuntimeException e){map.put(SystemConstant.FLAG, false);map.put(SystemConstant.MESSAGE, "投诉失败");}return map;

/*** 菜品图片上传* @param foodImage* @return*/@Overridepublic Map<String, Object> uploadFile(MultipartFile foodImage) {//用于存储LayUI文件上传所必须的键值Map<String, Object> map = new HashMap<>(16);//判断一下文件是否为空if (!foodImage.isEmpty()) {//将文件重命名String newFileName = FileUploadUtil.rename(foodImage);//全部文件都放在一个文件夹下不好管理,所以以日期作为文件夹进行管理//组装路径String finalPath = new SimpleDateFormat("yyyyMMdd").format(new Date()) + "/" + newFileName;//获得文件对象,参数1:文件上传的路径,参数2:文件名称(包括文件夹)File path = new File(SystemConstant.UPLOADPATH + SystemConstant.FOODPATH, finalPath);if (!path.getParentFile().exists()) {//如果文件夹不存在,就创建文件夹path.getParentFile().mkdirs();}try {//将文件保存到磁盘中foodImage.transferTo(path);/** 严格按照LayUI规定传递所必须的参数*/map.put("code", 0);map.put("msg", "文件上传成功");Map<String, Object> dataMap = new HashMap<>(16);//图片路径dataMap.put("src", "/meal/upload/food/" + finalPath);//鼠标悬停时显示的文本dataMap.put("title", newFileName);//保存图片路径,不包括前面的文件夹,从模块文件夹起始dataMap.put("imagePath", SystemConstant.FOODPATH + finalPath);map.put("data", dataMap);} catch (IOException e) {e.printStackTrace();}

/*** 评论服务层实现类*/@Service@Transactionalpublic class CommentServiceImpl implements CommentService {@Autowiredprivate CommentMapper commentMapper;@Autowiredprivate OrderDetailMapper orderDetailMapper;@Autowiredprivate FoodMapper foodMapper;@Autowiredprivate UserMapper userMapper;/*** 用户发表评论* @param session* @param vo* @return*/@Overridepublic Map<String, Object> addComment(CommentVo vo, HttpSession session) {Map<String, Object> map = new HashMap<>(16);Long userId = ((UserEntity) session.getAttribute(SystemConstant.USERLOGIN)).getUserId();vo.setUserId(userId);try {//1. 增加评论if (commentMapper.addComment(vo) <= 0) {throw new RuntimeException();}//2.1 根据细则编号查询对应细则OrderDetailEntity orderDetail = orderDetailMapper.findOrderDetailById(vo.getOrderDetailId());//2.2 增加一条该菜品的评论数(一定要先加一条,否则如果是没人评价的菜品会报除零异常 直接GG)

* @param ticketTypeId* @return*/@Overridepublic Map<String, Object> deleteTicketType(Long ticketTypeId) {Map<String, Object> map = new HashMap<>(16);if (ticketTypeMapper.deleteTicketType(ticketTypeId) > 0) {map.put(SystemConstant.FLAG, true);map.put(SystemConstant.MESSAGE, "优惠券类型删除成功");}else {map.put(SystemConstant.FLAG, false);map.put(SystemConstant.MESSAGE, "优惠券类型删除失败,仍有用户已领取该券未使用");}return map;}}/*** 用户地址管理服务层实现类*/@Service@Transactionalpublic class AddressServiceImpl implements AddressService {@Autowiredprivate AddressMapper addressMapper;/*** 查找该角色的所有地址信息

@Overridepublic Map<String, Object> addShopcart(Long skuId, Integer numCount, HttpSession session) {Map<String, Object> map = new HashMap<>(16);Long userId = ((UserEntity) session.getAttribute(SystemConstant.USERLOGIN)).getUserId();//先要查询一下该用户的购物车中是否有该菜品SKU信息,有的话合并,没有的话才加上去ShopcartEntity record = shopcartMapper.findShopcartRecord(userId, skuId);if (record==null) {//封装实体类ShopcartEntity shopcart = new ShopcartEntity();shopcart.setNumCount(numCount);shopcart.setUserId(userId);shopcart.setSkuId(skuId);if (shopcartMapper.addShopcart(shopcart) > 0) {map.put(SystemConstant.FLAG, true);map.put(SystemConstant.MESSAGE, "菜品已经添加到购物车中啦!");}else {map.put(SystemConstant.FLAG, false);map.put(SystemConstant.MESSAGE, "菜品添加到购物车失败");}}else {if (shopcartMapper.addNumCount(record.getShopcartId(), numCount) > 0) {map.put(SystemConstant.FLAG, true);map.put(SystemConstant.MESSAGE, "购物车中该菜品数量修改成功!");}else {map.put(SystemConstant.FLAG, false);map.put(SystemConstant.MESSAGE, "菜品添加到购物车失败");}}return map;}/*** 查找该用户下的所有购物车信息* @param session* @return*/@Overridepublic Map<String, Object> findAllShopcartByUserId(HttpSession session) {Map<String, Object> map = new HashMap<>(16);Long userId = ((UserEntity) session.getAttribute(SystemConstant.USERLOGIN)).getUserId();List<ShopcartEntity> shopcartByUserId = shopcartMapper.findAllShopcartByUserId(userId);map.put("shopcart", shopcartByUserId);

public Map<String, Object> receiveTicket(Long ticketTypeId, HttpSession session) {Map<String, Object> map = new HashMap<>(16);//根据编号查询优惠券类别TicketTypeEntity ticketType = ticketTypeMapper.findTicketTypeById(ticketTypeId);UserEntity user = (UserEntity) session.getAttribute(SystemConstant.USERLOGIN);//判断用户的积分够不够领取if (user.getScore() < ticketType.getNeedScore()){map.put(SystemConstant.FLAG, false);map.put(SystemConstant.MESSAGE, "很抱歉,您的积分不足以兑换该优惠券");return map;}//如果剩余不足返回失败if ((ticketType.getTicketNum()-ticketType.getReceive()) <= 0) {map.put(SystemConstant.FLAG, false);map.put(SystemConstant.MESSAGE, "很抱歉,该优惠券被抢光啦");return map;}//领取成功添加优惠券领取记录,扣除用户积分,优惠券类别已领取数+1if (ticketMapper.addTicket(ticketTypeId, ticketType.getLiveTime(), user.getUserId())>0 &&userMapper.modifyUserScore(-ticketType.getNeedScore(), user.getUserId())>0 &&ticketTypeMapper.addReceiveOne(ticketTypeId)>0) {user.setScore(user.getScore()-ticketType.getNeedScore());session.setAttribute(SystemConstant.USERLOGIN, user);map.put(SystemConstant.FLAG, true);map.put(SystemConstant.MESSAGE, "优惠券领取成功");}else {map.put(SystemConstant.FLAG, false);map.put(SystemConstant.MESSAGE, "优惠券领取失败");}return map;}/*** 根据页面信息查询优惠券领取记录* @param vo* @return*/@Overridepublic LayuiTableDataResult findTicketListByPage(TicketVo vo) {//查询过期的优惠券,设置其状态为过期List<Long> ticketOutTime = ticketMapper.findTicketIdListOutTime();for (Long ticketId : ticketOutTime) {ticketMapper.setOutTime(ticketId);}PageHelper.startPage(vo.getPage(), vo.getLimit());

@Service@Transactionalpublic class RoleServiceImpl implements RoleService {@Autowiredprivate RoleMapper roleMapper;@Autowiredprivate MenuMapper menuMapper;/*** 根据页面的条件查询角色列表* @param vo* @return*/@Overridepublic LayuiTableDataResult findRoleListByPage(RoleVo vo) {

* @return*/@Overridepublic boolean generateSku(List<Map<String, Object>> foodParamList, Long foodId, String foodName) {try{//生成一个二维数组String[][] foodattrArr = new String[foodParamList.size()][];for (int i = 0; i < foodParamList.size(); i++) {//将Map映射转换成json字符串String json = JSON.toJSONString(foodParamList.get(i), true);Long attrId = Long.parseLong(foodParamList.get(i).get("attrId").toString());//将json数组转换成List集合List<String> foodvalueList = JSON.parseArray(JSON.parseObject(json).getString("foodvalueArr"), String.class);foodattrArr[i] = new String[foodvalueList.size()];for (String foodvalueName : foodvalueList) {//将菜品规格添加到规格表中String name = ((String) JSONObject.parseObject(foodvalueName).get("foodvalueName"));foodvalueMapper.addFoodvalue(foodId, attrId, name);foodattrArr[i][foodvalueList.indexOf(foodvalueName)] = name;}}//遍历二维数组,拼接SKU名称,生成菜品SKU信息List<StringBuilder> skuName = new ArrayList<>();List<StringBuilder> skuNameList = FoodSkuUtil.buildSku(foodattrArr, foodName, skuName);for (StringBuilder sb : skuNameList) {foodSkuMapper.addFoodSku(sb.toString(), foodId);}return true;}catch (Exception e) {return false;}}/*** 修改菜品SPU信息* @param vo* @param session* @return*/@Overridepublic Map<String, Object> modifyFood(FoodVo vo, HttpSession session) {Map<String, Object> map = new HashMap<>(16);

return map;}/*** 新增该用户某个SKU菜品的数量* @param shopcartId* @return*/@Overridepublic Map<String, Object> addNumCountOne(Long shopcartId) {Map<String, Object> map = new HashMap<>(16);if (shopcartMapper.addNumCountOne(shopcartId) > 0) {map.put(SystemConstant.FLAG, true);}else {map.put(SystemConstant.FLAG, false);}return map;}/*** 减少该用户某个SKU菜品的数量* @param shopcartId* @return*/@Overridepublic Map<String, Object> reduceNumCountOne(Long shopcartId) {Map<String, Object> map = new HashMap<>(16);if (shopcartMapper.reduceNumCountOne(shopcartId) > 0) {map.put(SystemConstant.FLAG, true);}else {map.put(SystemConstant.FLAG, false);}return map;}/*** 删除购物车的某一个条目* @param shopcartId* @return*/

@RequestMapping("/menuManage.html")public String menuManage(){return "menu/menuManage";}/*** 跳转到配送员管理界面* @return*/@RequestMapping("/deliverManage.html")public String deliverManage(){return "deliver/deliverManage";}/*** 跳转到菜品类别管理界面* @return*/@RequestMapping("/foodtypeManage.html")public String foodtypeManage(){return "food/foodtypeManage";}/*** 跳转到菜品规格组管理界面* @return*/@RequestMapping("/foodattrManage.html")public String foodattrManage(){return "food/foodattrManage";}/*** 跳转到菜品SPU管理界面* @return*/@RequestMapping("/foodManage.html")public String foodManage(){return "food/foodManage";}/*** 跳转到菜品SKU管理界面* @return*/@RequestMapping("/foodSkuManage.html")public String foodSkuManage(){return "food/foodSkuManage";}/*** 跳转到优惠券类别管理界面* @return

@Service@Transactionalpublic class ComplaintServiceImpl implements ComplaintService {@Autowiredprivate ComplaintMapper complaintMapper;@Autowiredprivate DeliverMapper deliverMapper;@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate FoodMapper foodMapper;@Autowiredprivate FoodSkuMapper skuMapper;/*** 用户发表投诉* @param vo* @param session* @return*/@Overridepublic Map<String, Object> addComplaint(ComplaintVo vo, HttpSession session) {Map<String, Object> map = new HashMap<>(16);Long userId = ((UserEntity) session.getAttribute(SystemConstant.USERLOGIN)).getUserId();vo.setUserId(userId);//1. 根据订单编号查询订单OrderEntity order = orderMapper.findOrderById(vo.getOrderId());//2. 判断投诉的类型try {switch (vo.getComplaintType()){//2.1 投诉类型为配送员投诉case 1:{if (deliverMapper.addFaultCountOne(order.getDeliverId()) <= 0){map.put(SystemConstant.FLAG, false);map.put(SystemConstant.MESSAGE, "投诉失败,该订单还无配送员接单");return map;}else {//3. 修改订单为已投诉if (plainted(order.getOrderId()) <= 0){throw new RuntimeException();}//4. 添加投诉记录if (complaintMapper.addComplaint(vo) <= 0){throw new RuntimeException();}

//删除该角色if (roleMapper.deleteRole(roleId) >= 1){map.put(SystemConstant.FLAG, true);map.put(SystemConstant.MESSAGE, "角色删除成功");return map;}map.put(SystemConstant.FLAG, false);map.put(SystemConstant.MESSAGE, "角色删除失败");}else {map.put(SystemConstant.FLAG, false);map.put(SystemConstant.MESSAGE, "仍有用户使用该角色,角色删除失败");}return map;}}/*** 投诉 服务层实现类*/@Service@Transactionalpublic class ComplaintServiceImpl implements ComplaintService {@Autowiredprivate ComplaintMapper complaintMapper;@Autowiredprivate DeliverMapper deliverMapper;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。