
请参考前面的第一篇博文
流程图
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);
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)