订餐系统java+mybatis+mysql8项目练习(二) 添加订单项

订餐系统java+mybatis+mysql8项目练习(二) 添加订单项,第1张

订餐系统java+mybatis+mysql8项目练习(二) 添加订单项

请参考前面的第一篇博文
流程图


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:建立订单项集合. 点餐,将订单项添加到集合中
        List orderDetails=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;
        List produces = 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(List detailList){
        // 这里需要根据选择的产品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);
        }
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5716681.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存