版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务3.实现菜品、点餐模块任务描述本任务将实现菜品管理模块,分别完成菜品列表、菜品详情、添加菜品、修改菜品、删除菜品等功能,并且在本任务中,我们将学习如果编写一个自定义jsp标签,用于防止表单重复提交。点餐模块功能流程为:服务员主页显示所有菜品,点餐前先设置点餐桌号,将菜品加入到点餐车中,确认订单后,推送到后厨的订单列表中显示,当后厨完成配菜后单击开始烹饪,完成点餐流程。知识准备1.SpringIoC
SpringIoC容器启动初期,会把所有配置过的Bean都各自生成一个BeanDefinition,存储到BeanDefinitionRegistry的BeanDefinitionMap中。用户通过BeanFactory接口的实现类如ClassPathXmlApplicationContext去getBean的时候,会从BeanDefinitionMap中获取到这个Bean的BeanDefinition,然后通过反射生成一个Bean,默认单例的话,还会把这个实例化的Bean存储在singletonObjects中,下次再getBean的时候就直接从singletonObjects中返回。
采用XML方式配置Bean的时候,Bean的定义信息是和实现分离的,而采用注解的方式可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。Bean的配置信息是Bean的元数据信息,它由以下4个方面组成:(1)Bean的实现类(2)Bean的属性信息(3)Bean的依赖关系(4)Bean的行为配置2.SpringAOPSpring中AOP代理由Spring的IoC容器负责生成、管理,其依赖关系也由IoC容器负责管理。因此,AOP代理可以直接使用容器中的其他Bean实例作为目标,这种关系可由IoC容器的依赖注入提供。Spring默认使用Java动态代理来创建AOP代理,这样就可以为任何接口实例创建代理了。当需要代理的类不是代理接口的时候,Spring自动会切换为使用CGLIB代理,也可强制使用CGLIB。
AOP编程其实是很简单的事情,纵观AOP编程,程序员只需要参与三个部分:(1)定义普通业务组件(2)定义切入点,一个切入点可能横切多个业务组件(3)定义增强处理,增强处理就是在AOP框架为普通业务组件织入的处理动作所以进行AOP编程的关键就是定义切入点和定义增强处理,一旦定义了合适的切入点和增强处理,AOP框架将自动生成AOP代理,即:代理对象的方法=增强处理+被代理对象的方法。任务实施步骤1:完成菜品管理页及列表显示(1)在“src\main\webapp\pages\admin”文件夹中,新建dishesadmin.jsp菜品管理页面,用于管理及显示菜品信息,详细代码请参考提供的案例代码。重新部署项目并登录,结果如图2-14所示:图2-14菜品管理页面(2)在“com.chinasofti.ordersys.controller.admin”包中,新建DishesAdminController类,用于处理菜品管理模块功能。Ø
包含方法有:方法名说明addDishes(HttpServletRequestrequest,HttpServletResponseresponse)添加菜品信息deleteDishes(IntegerdishesId)删除菜品信息getDishesInfoByPage(HttpServletRequestrequest,HttpServletResponseresponse)获取菜品分页数据getTop4RecommendDishes(HttpServletRequestreuqest,HttpServletResponseresponse)获取头4条推荐菜品的信息modifyDishes(HttpServletRequestrequest,HttpServletResponseresponse)修改菜品信息toModifyDishes(HttpServletRequestrequest,HttpServletResponseresponse,IntegerdishesId)跳转修改菜品信息页面Ø代码如下:packagecom.chinasofti.ordersys.controller.admin;
importjava.util.ArrayList;importjava.util.List;
importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.transform.TransformerFactory;importjavax.xml.transform.dom.DOMSource;importjavax.xml.transform.stream.StreamResult;
importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.w3c.dom.Document;importorg.w3c.dom.Element;
importcom.chinasofti.ordersys.service.admin.DishesService;importcom.chinasofti.ordersys.service.admin.UserService;importcom.chinasofti.ordersys.vo.DishesInfo;importcom.chinasofti.ordersys.vo.UserInfo;importcom.chinasofti.util.web.upload.MultipartRequestParser;importmon.taglib.TokenTag;@ControllerpublicclassDishesAdminController{ @Autowired DishesServiceservice;
publicDishesServicegetService(){ returnservice; }
publicvoidsetService(DishesServiceservice){ this.service=service; }
@RequestMapping("/adddishes") publicStringaddDishes(HttpServletRequestrequest, HttpServletResponseresponse){
//判定是否存在表单提交令牌
//创建表单请求解析器工具MultipartRequestParserparser=newMultipartRequestParser(); //解析获取DishesInfo菜品信息对象 DishesInfoinfo=(DishesInfo)parser.parse(request, DishesInfo.class);
//执行添加菜品操作 service.addDishes(info); //释放表单提交令牌 // TokenTag.releaseToken();
//跳转到菜品管理界面 //response.sendRedirect("/OrderSys/todishesadmin.order"); return"redirect:todishesadmin.order";
}@RequestMapping("/deletedishes") publicvoiddeleteDishes(IntegerdishesId){ service.deleteDishesById(dishesId); }
@RequestMapping("/getdishesbypage") publicvoidgetDishesInfoByPage(HttpServletRequestrequest, HttpServletResponseresponse){
//设置返回的MIME类型为xml response.setContentType("text/xml"); //获取希望显示的页码数 intpage=Integer.parseInt(request.getParameter("page"));
//获取最大页码数 intmaxPage=service.getMaxPage(8);//对当前的页码数进行纠错,如果小于1,则直接显示第一页的内容 page=page<1?1:page; //对当前的页码数进行纠错,如果大于最大页码,则直接显示最后一页的内容 page=page>maxPage?maxPage:page; //进行分页数据查询 List<DishesInfo>list=service.getDishesInfoByPage(page,8);//尝试将结果结构化为xml文档 try{ //创建XMLDOM树 Documentdoc=DocumentBuilderFactory.newInstance() .newDocumentBuilder().newDocument(); //创建XML根节点 Elementroot=doc.createElement("disheses"); //将根节点加入DOM树 doc.appendChild(root); //循环遍历结果集合中的菜品信息 for(DishesInfoinfo:list){ //每一个菜品构建一个dishes标签节点 Elementdishes=doc.createElement("dishes"); //创建菜品ID标签 ElementdishesId=doc.createElement("dishesId"); //设置菜品ID标签的文本内容 dishesId.setTextContent(info.getDishesId()+"");//将菜品ID标签设置为菜品标签子标签 dishes.appendChild(dishesId); //创建菜品名标签 ElementdishesName=doc.createElement("dishesName"); //设置菜品名标签的文本内容 dishesName.setTextContent(info.getDishesName()); //将菜品名标签设置为菜品标签的子标签 dishes.appendChild(dishesName); //创建菜品描述标签 ElementdishesDiscript=doc.createElement("dishesDiscript"); //设置菜品描述标签文本内容 dishesDiscript.setTextContent(info.getDishesDiscript()); //将菜品描述标签设置为菜品标签子标签 dishes.appendChild(dishesDiscript); //创建菜品图片标签 ElementdishesImg=doc.createElement("dishesImg"); //设置菜品图片标签的文本内容 dishesImg.setTextContent(info.getDishesImg());//将菜品图片标签设置为菜品标签的子标签 dishes.appendChild(dishesImg); //创建菜品详细文本标签 ElementdishesTxt=doc.createElement("dishesTxt"); //获取菜品详细文字描述 Stringtxt=info.getDishesTxt(); //将空格替换为特殊分隔符 txt=txt.replaceAll("","ordersysspace"); //将\r替换为空字符串 txt=txt.replaceAll("\r",""); //将换行替换为特殊分隔符 txt=txt.replaceAll("\n","ordersysbreak"); //将双引号替换为转移字符 txt=txt.replaceAll("\"","\\\\\""); //将单引号替换为转移字符 txt=txt.replaceAll("\'","\\\\\'"); //设置菜品详细文本标签的文本内容 dishesTxt.setTextContent(txt); //将菜品详细文本标签设置为菜品标签的子标签 dishes.appendChild(dishesTxt); //创建是否推荐子标签 Elementrecommend=doc.createElement("recommend"); //设置是否推荐菜品标签文本内容 recommend.setTextContent(info.getRecommend()+""); //将是否推荐菜品标签设置为菜品标签的子标签 dishes.appendChild(recommend); //创建菜品价格标签 ElementdishesPrice=doc.createElement("dishesPrice"); //设置菜品价格标签文本内容 dishesPrice.setTextContent(info.getDishesPrice()+""); //将菜品价格标签设置为菜品标签子标签 dishes.appendChild(dishesPrice); //将菜品标签设置为根标签的子标签 root.appendChild(dishes);
} //创建当前页码数的标签 ElementpageNow=doc.createElement("page"); //设置当前页码数标签的文本内容 pageNow.setTextContent(page+""); //将当前页码数标签设置为根标签的子标签 root.appendChild(pageNow); //创建最大页码数的标签 ElementmaxPageElement=doc.createElement("maxPage"); //设置最大页码数标签的文本内容 maxPageElement.setTextContent(maxPage+""); //将最大页码数标签设置为根标签的子标签 root.appendChild(maxPageElement); //将完整的DOM树转换为XML文档结构字符串输出到客户端 TransformerFactory .newInstance() .newTransformer() .transform(newDOMSource(doc), newStreamResult(response.getOutputStream()));
//捕获查询、转换过程中的异常信息 }catch(Exceptionex){ //输出异常信息 ex.printStackTrace(); } } @RequestMapping("/toprecommend") publicvoidgetTop4RecommendDishes(HttpServletRequestreuqest, HttpServletResponseresponse){
//设置返回的MIME类型为xml response.setContentType("text/xml");
//获取头4条推荐菜品信息列表 List<DishesInfo>list=service.getTop4RecommendDishes(); //尝试将结果结构化为xml文档 try{ //创建XMLDOM树 Documentdoc=DocumentBuilderFactory.newInstance() .newDocumentBuilder().newDocument();//创建XML根节点 Elementroot=doc.createElement("disheses"); //将根节点加入DOM树 doc.appendChild(root); //循环遍历结果集合中的菜品信息 for(DishesInfoinfo:list){ //每一个菜品构建一个dishes标签节点 Elementdishes=doc.createElement("dishes"); //创建菜品ID标签 ElementdishesId=doc.createElement("dishesId"); //设置菜品ID标签的文本内容 dishesId.setTextContent(info.getDishesId()+""); //将菜品ID标签设置为菜品标签子标签 dishes.appendChild(dishesId); //创建菜品名标签 ElementdishesName=doc.createElement("dishesName"); //设置菜品名标签的文本内容 dishesName.setTextContent(info.getDishesName()); //将菜品名标签设置为菜品标签的子标签 dishes.appendChild(dishesName); //创建菜品描述标签 ElementdishesDiscript=doc.createElement("dishesDiscript"); //设置菜品描述标签文本内容 dishesDiscript.setTextContent(info.getDishesDiscript()); //将菜品描述标签设置为菜品标签子标签 dishes.appendChild(dishesDiscript); //创建菜品图片标签 ElementdishesImg=doc.createElement("dishesImg"); //设置菜品图片标签的文本内容 dishesImg.setTextContent(info.getDishesImg()); //将菜品图片标签设置为菜品标签的子标签 dishes.appendChild(dishesImg); //将菜品标签设置为根标签的子标签 root.appendChild(dishes);
} //将完整的DOM树转换为XML文档结构字符串输出到客户端 TransformerFactory .newInstance() .newTransformer() .transform(newDOMSource(doc), newStreamResult(response.getOutputStream()));
//捕获查询、转换过程中的异常信息 }catch(Exceptionex){ //输出异常信息 ex.printStackTrace(); } }
@RequestMapping("/modifydishes") publicStringmodifyDishes(HttpServletRequestrequest, HttpServletResponseresponse){
//判定是否存在表单提交令牌//创建表单请求解析器工具 MultipartRequestParserparser=newMultipartRequestParser(); //解析获取DishesInfo菜品信息对象 DishesInfoinfo=(DishesInfo)parser.parse(request, DishesInfo.class); //执行菜品信息修改工作 service.modifyDishes(info); //释放表单提交令牌 //TokenTag.releaseToken();
//跳转到菜品管理界面 return"redirect:todishesadmin.order";
} @RequestMapping("/tomodifydishes") publicStringtoModifyDishes(HttpServletRequestrequest, HttpServletResponseresponse,IntegerdishesId){
//获取要修改的菜品ID并查询对应的菜品信息 DishesInfoinfo=service.getDishesById(dishesId); //将菜品信息加入request作用域 request.setAttribute("DISHES_INFO",info);
return"/pages/admin/modifydishes.jsp"; }}(3)在“com.chinasofti.ordersys.service.admin”包中,新建DishesService菜品管理服务对象。Ø包含方法有:方法名说明getDishesInfoByPage(intpage,intpageSize)获取菜品分页数据的方法getMaxPage(intpageSize)获取菜品信息的最大页数deleteDishesById(IntegerdishesId)根据菜品ID值删除菜品信息的方法addDishes(DishesInfoinfo)添加菜品的方法getDishesById(IntegerdishesId)根据dishesId获取菜品详细信息的方法modifyDishes(DishesInfoinfo)修改菜品信息的方法getTop4RecommendDishes()获取头4条推荐菜品的信息Ø代码如下:/***Copyright2015ChinaSoftInternationalLtd.Allrightsreserved.*/packagecom.chinasofti.ordersys.service.admin;
importjava.util.List;
importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;
importcom.chinasofti.ordersys.mapper.DishesInfoMapper;importcom.chinasofti.ordersys.vo.DishesInfo;
/***<p>*Title:DishesService*</p>*<p>*Description:菜品管理服务对象*</p>*<p>*Copyright:Copyright(c)2015*</p>*<p>*Company:ChinaSoftInternationalLtd.*</p>**@authoretc*@version1.0*/@ServicepublicclassDishesService{ @Autowired DishesInfoMappermapper;
publicDishesInfoMappergetMapper(){ returnmapper; }
publicvoidsetMapper(DishesInfoMappermapper){ this.mapper=mapper; }
/** *分页获取菜品数据的方法 * *@parampage *要获取数据的页号 *@parampageSize *每页显示的条目数 *@return当前页的菜品数据列表 **/ publicList<DishesInfo>getDishesInfoByPage(intpage,intpageSize){ //获取带有连接池的数据库模版操作工具对象 intfirst=(1)*pageSize; //返回结果 returnmapper.getDishesInfoByPage(first,pageSize);
}
/** *获取菜品信息的最大页数 * *@parampageSize *每页显示的条目数 *@return当前数据库中数据的最大页数 **/ publicintgetMaxPage(intpageSize){
Longrows=mapper.getMaxPage(); //返回最大页数 return(int)((rows.longValue()-1)/pageSize+1); }
/** *根据菜品ID值删除菜品信息的方法 * *@paramdishesId *要删除的菜品Id **/ publicvoiddeleteDishesById(IntegerdishesId){ //获取带有连接池的数据库模版操作工具对象 mapper.deleteDishesById(dishesId); }
/** *添加菜品的方法 * *@paraminfo *需要添加的菜品信息 **/ publicvoidaddDishes(DishesInfoinfo){ mapper.addDishes(info);
}
/** *根据dishesId获取菜品详细信息的方法 * *@paramdishesId *要获取信息的特定菜品Id *@return返回该id的菜品详细信息 **/ publicDishesInfogetDishesById(IntegerdishesId){
returnmapper.getDishesById(dishesId); }
/** *修改菜品信息的方法 * *@paramInfo *要修改的菜品信息,其中dishesId为修改依据,其余信息为修改的目标值 **/ publicvoidmodifyDishes(DishesInfoinfo){ mapper.modifyDishes(info);
}
/** *获取头4条推荐菜品的信息 * *@return头4条推荐菜品列表 **/ publicList<DishesInfo>getTop4RecommendDishes(){
returnmapper.getTop4RecommendDishes();
}
}(4)在“om.chinasofti.ordersys.mapper”包中,新建DishesInfoMapper处理菜品信息的数据库操作。代码如下:packagecom.chinasofti.ordersys.mapper;
importjava.util.List;
importorg.apache.ibatis.annotations.Delete;importorg.apache.ibatis.annotations.Insert;importorg.apache.ibatis.annotations.Param;importorg.apache.ibatis.annotations.Select;importorg.apache.ibatis.annotations.Update;importorg.mybatis.spring.annotation.Mapper;
importcom.chinasofti.ordersys.vo.DishesInfo;@MapperpublicinterfaceDishesInfoMapper{
@Select("select*fromdishesinfoorderbyrecommenddesc,dishesIdlimit#{first},#{max}") publicList<DishesInfo>getDishesInfoByPage(@Param("first")intfirst, @Param("max")intmax);
@Select("selectcount(*)fromdishesinfo") publicLonggetMaxPage();
@Delete("deletefromdishesinfowheredishesId=#{dishesId}") publicvoiddeleteDishesById(@Param("dishesId")IntegerdishesId);
@Insert("insertintodishesinfo(dishesName,dishesDiscript,dishesTxt,dishesImg,recommend,dishesPrice)values(#{info.dishesName},#{info.dishesDiscript},#{info.dishesTxt},#{info.dishesImg},#{info.recommend},#{info.dishesPrice})") publicvoidaddDishes(@Param("info")DishesInfoinfo); @Select("select*fromdishesinfowheredishesId=#{dishesId}") publicDishesInfogetDishesById(@Param("dishesId")IntegerdishesId);
@Update("updatedishesinfosetdishesName=#{info.dishesName},dishesDiscript=#{info.dishesDiscript},dishesTxt=#{info.dishesTxt},dishesImg=#{info.dishesImg},recommend=#{info.recommend},dishesPrice=#{info.dishesPrice}wheredishesId=#{info.dishesId}") publicvoidmodifyDishes(@Param("info")DishesInfoinfo);
@Select("select*fromdishesinfowhererecommend=1orderbydishesId") publicList<DishesInfo>getTop4RecommendDishes();
}(5)重新部署项目并登录,查看菜品管理页及列表显示。,结果如图2-15所示:图2-15菜品管理页及列表显示步骤2:完成菜品添加、修改及删除功能(1)在“src\main\webapp\pages\admin”文件夹中,新建adddishes.jsp页面,用于添加菜品信息,详细代码请参考提供的案例代码。运行如图2-16所示:图2-16添加菜品信息页面(2)在“src\main\webapp\pages\admin”文件夹中,新建modifydishes.jsp页面,用于修改菜品信息,详细代码请参考提供的案例代码。运行如图2-17所示:图2-17修改菜品信息页面(3)在“src\main\webapp\pages\admin\dishesadmin.jsp”中包含删除功能代码。代码如下:newLine+="class='icon-remove-signicon-large'title='删除该菜品'onclick='deleteDishes("+dishesId+",\""+dishesName+"\",this)'></i>";步骤3:完成点餐功能(1)在“src\main\webapp\pages\waiters”文件夹中,新建takeorder.jsp服务员点餐页面,详细代码请参考提供的案例代码。使用服务员账号cc登录后运行如图2-18所示:图2-18服务员点餐页面(2)在“com.chinasofti.ordersys.controller.waiters”包中,新建TableController类,用于服务员角色设置点餐台号功能。Ø包含方法有:方法名说明setTableId(HttpServletRequestrequest,IntegertableId)设置点餐台号Ø代码如下:packagecom.chinasofti.ordersys.controller.waiters;
importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;
importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;
@ControllerpublicclassTableController{
@RequestMapping("/settableid") publicvoidsetTableId(HttpServletRequestrequest,IntegertableId){
//获取会话对象 HttpSessionsession=request.getSession(); //将桌号存放到会话中 session.setAttribute("TABLE_ID",tableId); }}(3)在“com.chinasofti.ordersys.controller.waiters”包中,新建CartController类,用于购物车功能。Ø包含方法有:方法名说明addCart(HttpServletRequestrequest,HttpServletResponseresponse,intnum,intdishes)添加菜品到购物车commitCart(HttpServletRequestrequest,HttpServletResponseresponse)提交购物车packagecom.chinasofti.ordersys.controller.waiters;
importjava.io.PrintWriter;importjava.io.StringWriter;importjava.util.ArrayList;
importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.transform.TransformerFactory;importjavax.xml.transform.dom.DOMSource;importjavax.xml.transform.stream.StreamResult;
importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.w3c.dom.Document;importorg.w3c.dom.Element;
//importcom.chinasofti.ordersys.controller.kitchen.RTDishesController;importcom.chinasofti.ordersys.service.admin.DishesService;importcom.chinasofti.ordersys.service.waiters.OrderService;importcom.chinasofti.ordersys.vo.Cart;importcom.chinasofti.ordersys.vo.UserInfo;importcom.chinasofti.util.web.serverpush.MessageProducer;Ø代码如下:@ControllerpublicclassCartController{
@Autowired OrderServiceoservice; @Autowired DishesServiceservice;
publicOrderServicegetOservice(){ returnoservice; }
publicvoidsetOservice(OrderServiceoservice){ this.oservice=oservice; }
publicDishesServicegetService(){ returnservice; }
publicvoidsetService(DishesServiceservice){ this.service=service; } @RequestMapping("/addcart") publicvoidaddCart(HttpServletRequestrequest, HttpServletResponseresponse,intnum,intdishes){ //获取会话对象 HttpSessionsession=request.getSession(); //创建购物车对象 Cartcart=newCart(); //如果会话中的存在购物车 if(session.getAttribute("CART")!=null){ //直接获取会话中的购物车对象 cart=(Cart)session.getAttribute("CART"); } //定义桌号变量 IntegertableId=1; //如果会话中存在桌号信息 if(session.getAttribute("TABLE_ID")!=null){ //直接获取桌号信息 tableId=(Integer)session.getAttribute("TABLE_ID"); } //设置购物车的桌号信息 cart.setTableId(tableIValue()); //获取本次加入购物车的菜品数量
cart.getUnits().add(cart.createUnit(dishes,num)); //将购物车对象设置到会话中 session.setAttribute("CART",cart);
} @RequestMapping("/commitcart") publicvoidcommitCart(HttpServletRequestrequest, HttpServletResponseresponse){ //设置响应编码 response.setCharacterEncoding("utf-8"); //设置返回的MIME类型为xml response.setContentType("text/xml"); //创建菜品管理服务对象
//获取会话对象 HttpSessionsession=request.getSession(); //创建购物车对象 Cartcart=newCart(); //定义桌号变量 IntegertableId=newInteger(1); //如果Session中保存了桌号信息 if(session.getAttribute("TABLE_ID")!=null){ //直接获取桌号信息 tableId=(Integer)session.getAttribute("TABLE_ID");
} //如果会话中存在购物车信息 if(session.getAttribute("CART")!=null){ //直接获取会话中的购物车对象 cart=(Cart)session.getAttribute("CART"); } //定义点餐服务员ID变量 intwaiterId=1; //如果Session中存在登录信息 if(session.getAttribute("USER_INFO")!=null){ //获取本用户的用户ID waiterId=((UserInfo)session.getAttribute("USER_INFO")) .getUserId(); } //创建订单管理服务对象
//将本订单存入数据库并获取本次添加订单的主键 Objectkey=oservice.addOrder(waiterId,tableId); //System.out.println(key); //尝试将结果结构化为xml文档 try{ //创建XMLDOM树 Documentdoc=DocumentBuilderFactory.newInstance() .newDocumentBuilder().newDocument(); //创建XML根节点 Elementroot=doc.createElement("disheses"); //将根节点加入DOM树 doc.appendChild(root); //循环遍历结果集合中的订单菜品详情 for(Cart.CartUnitunit:cart.getUnits()){ //将订单菜品详情映射信息存入数据库 oservice.addOrderDishesMap(unit,((Long)key).intValue()); //每一个菜品构建一个dishes标签节点 Elementdishes=doc.createElement("dishes"); //创建桌号标签 Elementtid=doc.createElement("tableId"); //设置桌号标签文本内容 tid.setTextContent(tableIValue()+""); //将桌号标签设置为菜品标签子标签 dishes.appendChild(tid); //创建菜品名标签 ElementdishesName=doc.createElement("dishesName"); //获取菜品名称 Stringdname=service.getDishesById( newInteger(unit.getDishesId())).getDishesName(); //设置菜品名标签文本内容 dishesName.setTextContent(dname); //将菜品名称标签设置为菜品标签子标签 dishes.appendChild(dishesName); //创建菜品数量标签 Elementnum=doc.createElement("num"); //设置数量标签文本内容 num.setTextContent(unit.getNum()+""); //将数量标签设置为菜品标签子标签 dishes.appendChild(num); //将菜品标签设置为根标签子标签 root.appendChild(dishes);
} //创建字符输出流 StringWriterwriter=newStringWriter(); //创建格式化输出流 PrintWriterpwriter=newPrintWriter(writer); //将完整的DOM树转换为XML文档结构字符串输出到字符输出流中 TransformerFactory.newInstance().newTransformer() .transform(newDOMSource(doc),newStreamResult(pwriter)); //获取XML字符串 Stringmsg=writer.toString(); //关闭格式话输出流 pwriter.close(); //关闭字符串输出流 writer.close();// //获取后厨等待列表// ArrayList<String>list=RTDishesController.kitchens;// //创建消息生产者// MessageProducerproducer=newMessageProducer();// //遍历每一个后厨等待用户// for(inti=list.size()-1;i>=0;i--){// //获取单个等待用户的sessionID// Stringid=list.get(i);// //为该用户生成点菜订单消息// producer.sendMessage(id,"rtorder",msg);// //在等待列表中删除该用户// list.remove(id);// } //创建空的购物车对象 cart=newCart(); //清空会话购物车 session.setAttribute("CART",cart);
//response.getWriter().write(writer.toString()); //捕获异常 }catch(Exceptionex){ //输出异常信息 ex.printStackTrace(); } }}(4)在“com.chinasofti.ordersys.service.waiters”包中,新建OrderService订单管理服务对象,用于订单管理功能。Ø包含方法有:方法名说明addOrder(intwaiterId,inttableId)增加订单的放发addOrderDishesMap(Cart.CartUnitunit,intkey)添加订单菜品详细信息的方法getNeedPayOrdersByPage(intpage,intpageSize,intstate)以分页方式获取不同支付状态订单信息的方法getMaxPage(intpageSize,intstate)获取特定支付状态订单的总页数getNeedPayOrders(intstate)获取不同支付状态订单信息的方法requestPay(IntegerorderId)请求支付订单的方法getOrderById(IntegerorderId)根据订单号获取订单详情的方法getSumPriceByOrderId(IntegerorderId)获取单一订单的总价getOrderDetailById(IntegerorderId)根据订单号获取订单详情changeState(IntegerorderId,intstate)修改订单支付状态的方法getOrderInfoBetweenDate(DatebeginDate,DateendDate)根据结单时间段查询订单信息的方法Ø代码如下:/***Copyright2015ChinaSoftInternationalLtd.Allrightsreserved.*/packagecom.chinasofti.ordersys.service.login.waiters;
importjava.util.Date;importjava.util.List;
importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;
importcom.chinasofti.ordersys.mapper.OrderMapper;importcom.chinasofti.ordersys.vo.Cart;importcom.chinasofti.ordersys.vo.OrderInfo;/***<p>*Title:OrderService*</p>*<p>*Description:订单管理服务对象*</p>*<p>*Copyright:Copyright(c)2015*</p>*<p>*Company:ChinaSoftInternationalLtd.*</p>**@authoretc*@version1.0*/@ServicepublicclassOrderService{ @Autowired OrderMappermapper;
publicOrderMappergetMapper(){ returnmapper; }
publicvoidsetMapper(OrderMappermapper){ this.mapper=mapper; }
/** *增加订单的放发 * *@paramwaiterId *订单点餐的服务员id *@paramtableId *订单对应的桌号 *@return添加成功的订单对应的主键值(Long型) **/ publicObjectaddOrder(intwaiterId,inttableId){
OrderInfoinfo=newOrderInfo(); info.setWaiterId(waiterId); info.setTableId(tableId); //获取带有连接池的数据库模版操作工具对象
//获取添加订单时的时间 Datenow=newDate(); info.setOrderBeginDate(newjava.sql.Date(now.getTime())); mapper.addOrder(info); //由于订单表只有单列主键,因此将第一个生成的主键值返回 returnnewLong(info.getOrderId()); }
/** *添加订单菜品详细信息的方法 * *@paramunit *订单菜品详情 *@paramkey *对应的订单Id **/ publicvoidaddOrderDishesMap(Cart.CartUnitunit,intkey){ //获取带有连接池的数据库模版操作工具对象 mapper.addOrderDishesMap(unit,key);
}
/** *以分页方式获取不同支付状态订单信息的方法 * *@parampage *需要获取的页码数 *@parampageSize *每页显示的条目数 *@paramstate *需要查询的支付状态信息 *@return查询结果列表 **/ publicList<OrderInfo>getNeedPayOrdersByPage(intpage,intpageSize, intstate){ //获取带有连接池的数据库模版操作工具对象
//ArrayList<OrderInfo>list=helper //.preparedForPageList( //"selectorderId,orderBeginDate,orderEndDate,waiterId,orderState,dishes,numfromorderinfo,orderdisheswhereorderinfo.orderId=orderdishes.orderReferenceandorderinfo.orderState=0", //newObject[]{},page,pageSize,OrderInfo.class);
intfirst=(1)*pageSize; //进行查询操作 List<OrderInfo>list=mapper.getNeedPayOrdersByPage(first,pageSize, state); //返回查询的结果 returnlist;
}
/** /** *获取特定支付状态订单的总页数 * *@parampageSize *每页显示的条目数 *@paramstate *订单支付状态 *@return总页数 **/ publicintgetMaxPage(intpageSize,intstate){
//查询符合条件的总条目数 Longrows=mapper.getMaxPage(state); //计算总页数并返回 return(int)((rows.longValue()-1)/pageSize+1); }
/** *获取不同支付状态订单信息的方法 * *@paramstate *需要查询的支付状态信息 *@return订单信息集合 */ publicList<OrderInfo>getNeedPayOrders(intstate){ //获取带有连接池的数据库模版操作工具对象
//返回查询结果 returnmapper.getNeedPayOrders(state);
}
/** *请求支付订单的方法 * *@paramorderId *请求支付订单的订单号 */ publicvoidrequestPay(IntegerorderId){ //获取带有连接池的数据库模版操作工具对象 java.sql.Datenow=newjava.sql.Date(System.currentTimeMillis()); mapper.requestPay(orderId,now);
}
/** *根据订单号获取订单详情的方法 * *@paramorderId *需要获取详情的订单号 *@return查询到的订单详细信息 **/ publicOrderInfogetOrderById(IntegerorderId){
//执行查询并返回结果 returnmapper.getOrderById(orderId);
}
/** *获取单一订单的总价 * *@param要获取总价的订单号 *@return查询到的总价 **/ publicfloatgetSumPriceByOrderId(IntegerorderId){
//查询总价 Doublesum=mapper.getSumPriceByOrderId(orderId); System.out.println(orderId+""+sum); //返回总价 returnsum.floatValue(); }
/** *根据订单号获取订单详情 * *@param要获取详情的订单号 *@return订单详情列表 **/ publicList<OrderInfo>getOrderDetailById(IntegerorderId){
//查询并返回订单详情列表 returnmapper.getOrderDetailById(orderId);
}
/** *修改订单支付状态的方法 * *@paramorderId *要修改状态的订单号 *@paramstate *目标状态值 **/ publicvoidchangeState(IntegerorderId,intstate){ mapper.changeState(orderId,state);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026河南郑州上海交大产业技术研究院招聘工作人员2人备考题库附答案详解(综合卷)
- 2026山东司法警官职业学院招聘42人备考题库及答案详解(名师系列)
- 2026黑龙江绥化学院招聘博士教师20人备考题库及参考答案详解
- 2026甘肃兰州市安宁区人民医院招聘编外医务工作人员6人备考题库及一套完整答案详解
- 2026浙江金华武义供销农产品有限公司招聘1人备考题库附答案详解(模拟题)
- 2026江西萍乡市国春农业发展有限公司招聘备考题库附答案详解(达标题)
- 2025年船舶动力系统混合动力技术应用前景
- 2025年低空物流系统项目进度管理工具应用
- 2026年初级统计师《统计专业知识和实务》综合提升测试卷附答案详解
- 2026广东广州体育学院第一批招聘事业单位人员3人备考题库附答案详解(综合题)
- (完整word版)中医病证诊断疗效标准
- 幕墙工程竣工资料(全套)
- GB/T 9126.1-2023管法兰用非金属平垫片第1部分:PN系列
- 小学道法6 人大代表为人民1课件
- 磨机负荷的磨音多频带检测研究-毕业论文
- 茶餐厅工作手册模板
- 海产鱼类增养殖试题库
- GB/T 700-2006碳素结构钢
- GB/T 16477.1-1996稀土硅铁合金及镁硅铁合金化学分析方法稀土总量测定
- GB/T 13343-2008矿用三牙轮钻头
- GB/T 11032-2020交流无间隙金属氧化物避雷器
评论
0/150
提交评论