请参考前面的第一篇博文
流程图
SysManger类代码片段
if(checkIsLogin()){ System.out.println("1:我要下单 2:签收 3:订单管理 4:退出 n选择输入:"); int choose=sc.nextInt(); if(choose==1){ // 下订单,进入OrderService order.order(LOGINEDUSER.getId()); // 每执行完一步 *** 作询问用户是返回主菜单还是直接退出 areYouReturn(); return; } if(choose==2){ // 进入OrderService处理 // 每执行完一步 *** 作询问用户是返回主菜单还是直接退出 areYouReturn(); return; } if(choose==3){ // OrderService处理 // 每执行完一步 *** 作询问用户是返回主菜单还是直接退出 areYouReturn(); return; } System.out.println("byebye"); LOGINEDUSER.setLogin(false);// 退出系统把当前用户 isLogin设为false System.exit(3); }
OrderService.java
package org.jnx.service; import org.apache.ibatis.session.SqlSession; import org.jnx.exp.CopeException; import org.jnx.mapper.OrderDetailMapper; import org.jnx.mapper.OrderMapper; import org.jnx.pojo.Order; import org.jnx.pojo.OrderDetail; import org.jnx.pojo.Produce; import org.jnx.util.MyBatisUtil; import org.jnx.util.SecurityUtils; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Scanner; public class OrderService { Scanner sc = new Scanner(System.in); public void order(Integer userId){ // 1:分页显示所有的产品,注意方法的内聚性,一个方法只干一件事 // 查询列表,注意分页,1页5条记录,查询所有的菜单项 ProduceService service=new ProduceService(); try { service.quaryItemByPage(1, 5); } catch (CopeException e) { System.out.println(e.getMessage()); System.out.println("系统从新调回翻页"); service.quaryItemByPage(1, 5); } // 2:建立订单项集合. 点餐,将订单项添加到集合中 ListorderDetails=new ArrayList<>(); OrderDetailService detail=new OrderDetailService(); detail.chooseCaiPinItem(orderDetails); // 4: 订单项集合加入订单中,向数据库进行批量添加 Order order=new Order(); order.setUserId(userId); order.setOrderDetails(orderDetails); addBatchOrder(order); // 3:显示订单项信息 showItemInfo(orderDetails); } private void showItemInfo(List orderDetails){ System.out.println("您于"+SecurityUtils.formateDate(new Date())+"订购了"); System.out.println("菜品IDt菜品名称t分数t单价t价格"); orderDetails.forEach(e->{ System.out.println(e.getProduce().getId() + "t" + e.getProduce().getProname() + "t" + e.getNum() + "t" + e.getProduce().getPrice() + "t" + e.getTotalPrice()); }); } private void addBatchOrder( Order order){ SqlSession sqlSession=null; try { // 获取订单集合 List orderDetails = order.getOrderDetails(); // 对订单执行批量插入 try { sqlSession = MyBatisUtil.openSession(); int i = sqlSession.getMapper(OrderMapper.class).saveOrder(order); sqlSession.getMapper(OrderDetailMapper.class).saveOrderDetail(order.getOrderId(),orderDetails); sqlSession.commit(); } catch (Exception e) { sqlSession.rollback(); e.printStackTrace(); } finally { MyBatisUtil.closeSession(sqlSession); } } catch (Exception e) { System.out.println("发生错误,从新选择 错误code:500"+e.getMessage()); } } }
ProduceService.java代码
package org.jnx.service; import org.apache.ibatis.session.SqlSession; import org.jnx.exp.CopeException; import org.jnx.exp.ErrorEnum; import org.jnx.mapper.OrderDetailMapper; import org.jnx.mapper.OrderMapper; import org.jnx.mapper.ProduceMapper; import org.jnx.pojo.Order; import org.jnx.pojo.OrderDetail; import org.jnx.pojo.Produce; import org.jnx.util.MyBatisUtil; import org.jnx.util.SecurityUtils; import java.io.Serializable; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class ProduceService { Scanner sc=new Scanner(System.in); public void quaryItemByPage(Integer curPage,Integer pageSize) throws CopeException{ SqlSession sqlSession = MyBatisUtil.openSession(); int count = 0; Listproduces = null; try { // 查询一共有多少条记录 count = sqlSession.getMapper(ProduceMapper.class).count(); // 查询当前页的菜品 produces = sqlSession.getMapper(ProduceMapper.class).queryAll((curPage-1)*pageSize, pageSize); } catch (Exception e) { throw new CopeException(e); } finally { MyBatisUtil.closeSession(sqlSession); } System.out.println("输入页码翻页,点餐按:0"); // 显示页码,放在工具类里面,提高代码的复用性 SecurityUtils.showPageNum(count); System.out.println("菜品IDt菜品名称t销售量t库存量t单价"); produces.forEach(e->{ System.out.print(e.getId() + "tt" + e.getProname()+ "tt" + e.getSellnum()+ "tt" + e.getStock() + "tt"+ e.getPrice()+"n"); }); // 显示页码 SecurityUtils.showPageNum(count); System.out.println("请输入 *** 作 输入页数翻页,点餐按 :0"); int choose = sc.nextInt(); if(choose<0 || choose>count){ throw new CopeException(ErrorEnum.PAGEOUTOFLIMIT); } // 如果不是0 代表翻页 if(choose !=0){ quaryItemByPage(choose, 5); } } // 根据产品的ID查询产品信息 public Produce queryProduceById(Serializable id){ Produce produce = null; SqlSession sqlSession = MyBatisUtil.openSession(); try { produce = sqlSession.getMapper(ProduceMapper.class).queryById(id); } catch (Exception e) { throw new CopeException(ErrorEnum.UNKONERROR); } finally { MyBatisUtil.closeSession(sqlSession); } return produce; } }
OrderDetailService.java
package org.jnx.service; import org.jnx.exp.CopeException; import org.jnx.exp.ErrorEnum; import org.jnx.pojo.OrderDetail; import org.jnx.pojo.Produce; import org.jnx.util.MyBatisUtil; import java.math.BigDecimal; import java.util.List; import java.util.Scanner; public class OrderDetailService { Scanner sc=new Scanner(System.in); public void chooseCaiPinItem(ListdetailList){ // 这里需要根据选择的产品ID获取产品的信息 ProduceService produceService=new ProduceService(); // 生成订单项实体对象 OrderDetail detail=new OrderDetail(); System.out.println("请输入菜品ID:"); int id=sc.nextInt(); System.out.println("请输入订购份数"); int num=sc.nextInt(); // 根据ID到数据库查询该产品的数据信息 Produce produce = produceService.queryProduceById(id); // 检查如果超出库存数量 抛出异常 if(num> produce.getStock()){ throw new CopeException(ErrorEnum.OUTOFSTOCK); } detail.setProduce(produce); detail.setNum(num); // 由于涉及到钱 double不准确,我们使用BigDecimal;在此使用有点多此一举,主要是为了熟悉他的用法 int tp=num * produce.getPrice().intValue(); detail.setTotalPrice(BigDecimal.valueOf(tp)); detailList.add(detail); System.out.println("继续选购(Y/N): "); String isGO=sc.next(); if("y".equals(isGO)){ chooseCaiPinItem(detailList); } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)