伙伴云客服论坛»论坛 S区 S客户管理 查看内容

0 评论

0 收藏

分享

【SSM】第四课 超市订单管理平台--订单管理功能

概念

本文在供给商管理功能之后,继续讲解订单管理功能,该功能是由普通员工与供给商之间的订单进货,经理停止监管等等。

需求分析

订单管理:
1.假设系统管理员登录,操作订单管理没有权限
2.假设经理登录,允许查看所有员工所谈下来的所有订单,修改,删除
3.普通员工登录,员工添加订单,并只能查看自己谈下来的订单

功能实现

当用户登录系统后,点击订单管理功能时,停止判断当前用户的身份,根据不同用户发出不同的恳求:
  1. function ddgl() {
  2.                 var input=document.getElementById("hidd");
  3.                 var i=input.value;
  4.                 switch (i) {
  5.                 case "2":
  6.                         //经理,只能查看所有订单,修改订单,删除订单,不能添加订单
  7.                         location.href="GetBills.do";
  8.                         break;
  9.                 case "3":
  10.                         //普通员工,添加订单和查询自己的订单
  11.             location.href="GetBillsByUserId.do";
  12.                         break;
  13.                 default:
  14.                         //管理员身份不允许操作该功能
  15.                         alert("当前登录的员工不具备该功能的操作权限");
  16.                         break;
  17.                 }
  18.         }
复制代码
普通员工查询自身订单信息

当普通员工进入系统后,操作订单管理功能,则想控制器发出GetBillsByUserId.do恳求,因而,我们需要在控制层中建立操作订单表的控制器BillController类,并定义方法接收该恳求:
  1. package com.smbms.controller;
  2. import com.smbms.service.IBillService;
  3. import com.smbms.service.IProviderService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RequestParam;
  8. import org.springframework.web.servlet.ModelAndView;
  9. import javax.servlet.http.HttpSession;
  10. import java.text.SimpleDateFormat;
  11. import java.util.Date;
  12. import java.util.HashMap;
  13. import java.util.List;
  14. import java.util.Map;
  15. @Controller
  16. public class BillController {
  17.     @Autowired
  18.     IBillService bService;
  19.    
  20.     //定义方法,用于普通员工操作订单管理功能,查看自己的订单信息
  21.     @RequestMapping("/GetBillsByUserId.do")
  22.     public ModelAndView GetBillsByUserId(HttpSession session){
  23.         //根据普通员工的主键id作为条件查询该普通员工自己的订单信息
  24.         Map<String,Object> map= (Map<String, Object>) session.getAttribute("userInfo");
  25.         long userId= (long) map.get("id");
  26.         List<Map<String, Object>> billsById = bService.getBillsById(userId);
  27.         ModelAndView mav=new ModelAndView();
  28.         mav.addObject("bills",billsById);
  29.         mav.setViewName("billList");
  30.         return mav;
  31.     }
  32.    
  33. }
复制代码
在控制器中,通过登录保管的用户的个人信息中获得给普通员工的id作为查询订单表的条件,并将给用户id发送给service层中的IBillService接口中的方法:
  1. package com.smbms.service;
  2. import java.util.List;
  3. import java.util.Map;
  4. public interface IBillService {
  5.     //根据普通员工的id作为条件查询订单表
  6.     List<Map<String,Object>> getBillsById(long userId);
  7.    
  8. }
复制代码
该接口将接收到的用户id发送给service的实现类BillServiceImp中实现该方法:
  1. package com.smbms.service;
  2. import com.smbms.dao.IBillDao;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Service;
  5. import java.text.SimpleDateFormat;
  6. import java.util.Date;
  7. import java.util.List;
  8. import java.util.Map;
  9. @Service(value = "bService")
  10. public class BillServiceImp implements IBillService {
  11.     @Autowired
  12.     IBillDao dao;
  13.     @Override
  14.     public List<Map<String, Object>> getBillsById(long userId) {
  15.         return dao.getBillById(userId);
  16.     }
  17. }
复制代码
实现类将用户id发送给dao层的IBillDao接口完成根据用户id查询订单信息的功能:
  1. public interface IBillDao {
  2.     //根据普通员工的id作为条件查询订单表,将该员工自己的订单信息查询出来
  3.     @Select("select smbms_bill.id,smbms_bill.billCode," +
  4.             "smbms_bill.productName,smbms_bill.productDesc," +
  5.             "smbms_bill.productCount,smbms_bill.productUnit," +
  6.             "smbms_bill.totalPrice,smbms_bill.isPayment," +
  7.             "smbms_provider.proName,smbms_bill.creationDate " +
  8.             "from smbms_provider,smbms_bill " +
  9.             "where smbms_bill.providerId=smbms_provider.id " +
  10.             "and smbms_bill.createdBy=#{userId}")
  11.     List<Map<String,Object>> getBillById(@Param("userId")long userId);
  12. }
复制代码
根据需求的功能要求停止订单表和用户表的多表联查获得需要展示在页面的数据信息,并将查询的数据封装后返回给控制器,控制器将数据发送给billList.jsp页面显示:
  1. <%@page import="java.util.Map"%>
  2. <%@page import="java.util.List"%>
  3. <%@ page language="java" contentType="text/html; charset=UTF-8"
  4.     pageEncoding="UTF-8"%>
  5. <!DOCTYPE html>
  6. <html>
  7. <head>
  8. <meta charset="UTF-8">
  9. <title>超市订单管理系统--订单列表</title>
  10. <style type="text/css">
  11.         tr {
  12.         height: 40px;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17.         <div style="width: 1800px;height: 1000px;margin: auto;">
  18.                 <div style="width: 100%;height: 160px;background-color:skyblue;">
  19.                         <div  style="width: 100%;height: 20px;">
  20.                        
  21.                                 <div align="left" style="width: 20%;height: 100%;float: left;" >
  22.                                          <a href="home.do" style="text-decoration: none;">返回首页</a>
  23.                                 </div>
  24.                        
  25.                         <div align="right" style="width: 80%;height: 100%;float: right;">
  26.                                 <a>欢送,<span style="color: red;">${userInfo.userName}</span></a>
  27.                                   <a href="index.do" style="text-decoration: none;">注销</a>
  28.                         </div>
  29.                        
  30.                         </div>
  31.                         <div align="center" style="width: 100%;height: 140px;line-height: 140px;"><h1>超市订单管理系统</h1></div>
  32.                 </div>
  33.                 <% List<Map<String,Object>> list=(List<Map<String,Object>>)request.getAttribute("bills"); %>
  34.                 <div align="center" style="width: 100%;height: 840px;background-color: pink;overflow: scroll;">
  35.                         <div align="left" style="height: 40px;" >
  36.                                 <a href="toAddBill.do" style="text-decoration: none;
  37.                                  text-align:center;  width: 50px;
  38.                                  height: 20px;
  39.                                  color: white;font-weight: bold;
  40.                                  margin-top:20px;margin-left:10px;
  41.                                  border-radius: 5px;">添加订单</a>
  42.                         </div>
  43.                         <!-- 当前普通员工是否有谈下过订单信息,假设没有,显示暂无信息,假设有,展示该员工的所有订单 -->
  44.                         <% if(list==null||list.size()==0){ %>
  45.                                 <div style="width: 98%;text-align: center;height: 800px;">
  46.                                         当前暂无订单信息
  47.                                 </div>
  48.                         <%}else { %>
  49.                         <table border="1" style="width: 98%;text-align: center;border-collapse: collapse;">
  50.                                 <tr>
  51.                                         <td>序号</td>
  52.                                         <td>账单编码</td>
  53.                                         <td>商品名称</td>
  54.                                         <td>商品描绘</td>
  55.                                         <td>商品数量</td>
  56.                                         <td>商品单位</td>
  57.                                         <td>商品总额</td>
  58.                                         <td>是否支付</td>
  59.                                         <td>供给商名称</td>
  60.                                         <td>创建时间</td>
  61.                                 </tr>
  62.                                 <% for(int i=0;i<list.size();i++){ %>
  63.                                         <tr>
  64.                                         <td ><%=i+1 %></td>
  65.                                         <td><%=list.get(i).get("billCode") %></td>
  66.                                         <td><%=list.get(i).get("productName") %></td>
  67.                                         <td><%=list.get(i).get("productDesc") %></td>
  68.                                         <td><%=list.get(i).get("productCount") %></td>
  69.                                         <td><%=list.get(i).get("productUnit") %></td>
  70.                                         <td><%=list.get(i).get("totalPrice")%>元</td>
  71.                                         <% int type=(int)list.get(i).get("isPayment"); %>
  72.                                         <% if(type==1){ %>
  73.                                         <td ><a href="UpdatePayBill.do?id=<%=list.get(i).get("id") %>"><input type="button" value="未支付" style="color: white;border: none;background-color: red;border-radius: 5px;font-weight: bold;"></a></td>
  74.                                         <%}else if(type==2){ %>
  75.                                         <td style="color:green;">已支付</td>
  76.                                         <%} %>
  77.                                         <td><%=list.get(i).get("proName")%></td>
  78.                                         <td><%=list.get(i).get("creationDate")%></td>
  79.                                 </tr>
  80.                                 <%} %>
  81.                         </table>
  82.                         <%} %>
  83.                 </div>
  84.         </div>
  85. </body>
  86. </html>
复制代码
其界面效果如下:
【SSM】第四课 超市订单管理平台--订单管理功能-1.png


普通员工完成支付功能

当用户点击“未支付”按钮时,完成该订单的支付,修改支付状态,向控制器发送UpdatePayBill.do恳求,并将该订单的主键id作为条件发送给控制器,控制器中定义方法接收该恳求,
  1. //定义方法,用于根据订单的主键id去修改支付的状态
  2.     @RequestMapping("/UpdatePayBill.do")
  3.     public String UpdatePayBill(@RequestParam long id){
  4.         int i = bService.updatePay(id);
  5.         String url="";
  6.         if (i>0)
  7.             //已修改支付状态,页面需要刷新
  8.             url="redirect:GetBillsByUserId.do";
  9.         return url;
  10.     }
复制代码
控制器接收到恳求后获得主键id,并将其传输给service的接口:
  1. int updatePay(long id);
复制代码
service接口将该数据传输给service的实现类:
  1. @Override
  2.     public int updatePay(long id) {
  3.         return dao.updatePay(id);
  4.     }
复制代码
实现类将数据发送给dao层完成修改支付状态的sql语句操作,并将修改后的结果返回给控制器:
  1. //根据订单的主键id修改支付状态
  2.     @Update("update smbms_bill set isPayment=2 where id=#{id}")
  3.     int updatePay(@Param("id")long id);
复制代码
控制器根据返回值停止判断,并刷新订单列表页面,即可看到修改的状态变为“已支付”的字样,说明修改胜利。
普通员工完成添加订单功能

当用户点击“添加订单”触发超链接时,向控制器发送tOAddBill.do恳求,控制器中定法方法接收该恳求,并完成跳转至添加订单的页面:因添加订单需要选择对应的供给商,因而我们需要先获得供给商表中所有供给商的名称列表信息供用户停止选择:
  1. @Autowired
  2.     IProviderService pService;
  3. //定义方法,用于跳转至添加订单的页面
  4.     @RequestMapping("/toAddBill.do")
  5.     public ModelAndView toAddBill(){
  6.         //跳转至添加订单的页面之前,需要将所有供给商的名称查询出来
  7.         List<Map<String, Object>> providers = pService.getProviders();
  8.         ModelAndView mav=new ModelAndView();
  9.         mav.addObject("providers",providers);
  10.         mav.setViewName("addBill");
  11.         return mav;
  12.     }
复制代码
并将供给商信息发送给addBill.jsp页面:
  1. <%@page import="java.util.List"%>
  2. <%@ page import="java.util.Map" %>
  3. <%@ page language="java" contentType="text/html; charset=UTF-8"
  4.     pageEncoding="UTF-8"%>
  5. <!DOCTYPE html>
  6. <html>
  7. <head>
  8. <meta charset="UTF-8">
  9. <title>超市订单管理系统--添加订单</title>
  10. </head>
  11. <body>
  12. <% List<Map<String, Object>> oList=(List<Map<String, Object>>)request.getAttribute("providers"); %>
  13.         <div style="width: 1200px;height: 800px;margin: auto;">
  14.                 <div style="width: 100%;height: 160px;background-color:skyblue;">
  15.                         <div  style="width: 100%;height: 20px;">
  16.                        
  17.                                 <div align="left" style="width: 20%;height: 100%;float: left;" >
  18.                                          <a href="home.do" style="text-decoration: none;">返回首页</a>
  19.                                 </div>
  20.                        
  21.                         <div align="right" style="width: 80%;height: 100%;float: right;">
  22.                                 <a>欢送,<span style="color: red;">${userInfo.userName}</span></a>
  23.                                   <a href="index.do" style="text-decoration: none;">注销</a>
  24.                         </div>
  25.                        
  26.                         </div>
  27.                         <div align="center" style="width: 100%;height: 140px;line-height: 140px;"><h1>超市订单管理系统</h1></div>
  28.                 </div>
  29.                 <div align="center" style="width: 100%;height: 640px;background-color: pink;">
  30.                         <form action="AddBill.do" method="post">
  31.                                 <div style="padding: 5px 0px">
  32.                                 <label for="productName">商品名称:</label>
  33.                                 <input id="productName" name="productName" type="text" placeholder="请输入商品名称" />
  34.                                 </div>
  35.                                 <div style="padding: 5px 0px">
  36.                                 <label >商品描绘:</label>
  37.                                 <input type="text" name="productDesc" placeholder="请输入商品描绘信息"></input>
  38.                                 </div>
  39.                                 <div style="padding: 5px 0px">
  40.                                         <label >商品数量:</label>
  41.                                         <input type="number" name="productCount" placeholder="请输入商品数量" >
  42.                                 </div>
  43.                                 <div style="padding: 5px 0px">
  44.                                 <label >商品单位:</label>
  45.                                 <input type="text" name="productUnit" placeholder="请输入商品单位">
  46.                                 </div>
  47.                                 <div style="padding: 5px 0px">
  48.                                 <label >商品总额:</label>
  49.                                 <input type="number" name="totalPrice" placeholder="请输入商品总额" >
  50.                                 </div>
  51.                                 <div style="padding: 5px 0px">
  52.                                 <label >供给商名称:</label>
  53.                                 <!-- Html5 新增的表单的新用法 -->
  54.                                 <input type="search" name="proName" placeholder="请输入供给商名称"  list="list">
  55.                                 <datalist id="list">
  56.                                         <%
  57.                                                 for(int i=0;i<oList.size();i++){
  58.                                         %>
  59.                                         <option><%=oList.get(i).get("proName") %></option>
  60.                                         <%}%>
  61.                                 </datalist>
  62.                                 <%-- <select name="proName">
  63.                                         <%
  64.                                                 for(int i=0;i<oList.size();i++){
  65.                                         %>
  66.                                         <option><%=oList.get(i).getProName() %></option>
  67.                                         <%} %>
  68.                                 </select> --%>
  69.                                 </div>
  70.                                 <div style="padding: 5px 0px">
  71.                                         <input type="submit"
  72.                                           value="添加"
  73.                                          style="width: 120px;background-color: green;
  74.                                          border: none;padding: 5px;border-radius: 5px;
  75.                                          color: white;"/>
  76.                                 </div>
  77.                         </form>
  78.                        
  79.                
  80.                 </div>
  81.         </div>
  82. </body>
  83. </html>
复制代码
其效果如下:
【SSM】第四课 超市订单管理平台--订单管理功能-2.png


那么当用户填写完订单信息之后,将数据通过AddBill.do发送恳求给控制器,控制器中定义方法接收该恳求发送过来的新订单的数据,并将数据封装成Map集合,便于传输:
  1. //定义方法,用于接收添加订单的数据信息
  2.     @RequestMapping(value = "/AddBill.do",
  3.     params = {"productName","productDesc","productCount","productUnit","totalPrice","proName"})
  4.     public String AddBill(String productName,String productDesc,double productCount,String productUnit,
  5.                          double totalPrice,String proName,HttpSession session ){
  6.         //定义Map集合,将数据封装,便于传输
  7.         Map<String,Object> map=new HashMap<>();
  8.         map.put("productName",productName);//商品名称
  9.         map.put("productDesc",productDesc);//商品描绘
  10.         map.put("productCount",productCount);//商品数量
  11.         map.put("productUnit",productUnit);//商品单位
  12.         map.put("totalPrice",totalPrice);//总金额
  13.         map.put("proName",proName);//供给商名称
  14.         //缺少的数据需要在业务逻辑层中停止完成
  15.         //缺少账单编号billCode:根据当前的年份要自动生成账单编号
  16.         //缺少供给商的id: 用已知的供给商名称作为条件查询供给商表对应的供给商的id
  17.         //获得当前登录的普通员工的id
  18.         map.put("createdBy",((Map<String,Object>)session.getAttribute("userInfo")).get("id"));
  19.         //当前添加订单的实时时间
  20.         map.put("creationDate",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
  21.         int i = bService.addBill(map);
  22.         String url="";
  23.         if (i>0)
  24.             //添加订单胜利,刷新列表页面
  25.             url="redirect:GetBillsByUserId.do";
  26.         return url;
  27.     }
复制代码
控制器将封装好的新订单的数据发送给service层接口:
  1. //添加订单
  2.     int addBill(Map<String,Object> map);
复制代码
service接口将实现给方法,并在实现方法中完善自定生成订单编号功能;
  1. @Override
  2.     public int addBill(Map<String, Object> map) {
  3.         //缺少账单编号billCode:根据当前的年份要自动生成账单编号
  4.         map.put("billCode",getBillCode());
  5.         return dao.add(map);
  6.     }
复制代码
完成根据当前的年份自动生成订单编号的代码如下:
  1. /**
  2.      * 功能:自动生成账单编号
  3.      * 需求分析:
  4.      * 1.当订单表中不存在今年年份的订单时,那么当前添加订单的订单编号就应该为BILL今年的年份_001
  5.      * 2.当订单表中存在今年的订单时,从订单表中找出今年的订单的最近添加的订单,最后一个添加的订单
  6.      * 然后在该订单的尾号加一,获得的就是我们添加订单的订单编号
  7.      * 代码实现思路:
  8.      * 1.将订单表中所有订单按订单编号停止降序排列(从大到小排列),取第一条数据,得到的就是整个订单表中最新的订单编号
  9.      * select billCode from smbms_bill order by billCode desc LIMIT 0,1
  10.      * 2.使用java代码获得今年的年份  2022
  11.      * 3.将最新的订单编号停止按“_”停止分割 BILL2022_003  分割成两部分BILL2022      003
  12.      * 4.取分割后的第一部分停止截取出年份
  13.      * 5.然后将截取出来的年份与今年的年份停止比较,假设不相等,说明整个订单表中不存在今年的年份
  14.      * 那么我们添加的订单BILL今年的年份_001
  15.      * 6.假设相等,说明订单表中存在今年的年份,取分割后的第二部分,先停止将字符串格式转换成int格式
  16.      * 7.然后停止加一
  17.      * 8.将加一之后的数字停止判断,是否小于10,前面补两个零,是否小于100,前面补一个零,是否小于1000,不需要补零
  18.      * @return
  19.      */
  20.     public String getBillCode(){
  21.         String billCode="";
  22.         //将订单表中所有订单按订单编号停止降序排列(从大到小排列),取第一条数据,得到的就是整个订单表中最新的订单编号
  23.         String order = dao.getOrder();
  24.         //使用java代码获得今年的年份
  25.         String year = new SimpleDateFormat("yyyy").format(new Date());
  26.         //将最新的订单编号停止按“_”停止分割
  27.         String[] s = order.split("_");
  28.         //取分割后的第一部分停止截取出年份
  29.         String substring = s[0].substring(4);
  30.         //将截取出来的年份与今年的年份停止比较
  31.         if (!substring.equals(year)){
  32.             //假设不相等,说明订单表中不存在今年的订单
  33.             billCode="BILL"+year+"_001";
  34.         }else {
  35.             //订单表中存在今年的年份,取分割后的第二部分,先停止将字符串格式转换成int格式
  36.             int number = Integer.parseInt(s[1]);
  37.             //然后停止加一
  38.             int newNumber=++number;
  39.             billCode="BILL"+year+"_"+zero(newNumber);
  40.         }
  41.         return billCode;
  42.     }
  43.     //数字停止判断,是否小于10,前面补两个零,是否小于100,前面补一个零,是否小于1000,不需要补零
  44.     public String zero(int newNumber){
  45.         String n="";
  46.         if (newNumber<10){
  47.             n="00"+newNumber;
  48.         }else if (newNumber<100){
  49.             n="0"+newNumber;
  50.         }else if (newNumber<1000){
  51.             n=""+newNumber;
  52.         }
  53.         return n;
  54.     }
复制代码
接着service将新订单的数据发送给dao层,完成添加功能,但应该订单表中要求添加供给商id,而我们只能获得供给商名称,因而我们在完成添加的sql语句之前需要做子查询将供给商id获得出来:
  1. //将整个订单表做降序排列
  2.     @Select("select billCode from smbms_bill order by billCode desc LIMIT 0,1")
  3.     String getOrder();
  4.     //添加订单
  5.     @Insert("insert into smbms_bill(smbms_bill.billCode,smbms_bill.productName," +
  6.             "smbms_bill.productDesc,smbms_bill.productCount,smbms_bill.productUnit," +
  7.             "smbms_bill.totalPrice,smbms_bill.createdBy,smbms_bill.creationDate," +
  8.             "smbms_bill.providerId) " +
  9.             "values(#{billCode},#{productName},#{productDesc},#{productCount}," +
  10.             "#{productUnit},#{totalPrice},#{createdBy},#{creationDate}," +
  11.             "(select smbms_provider.id  " +
  12.             "from smbms_provider  " +
  13.             "where smbms_provider.proName=#{proName} LIMIT 0,1)" +
  14.             ")")
  15.     int add(Map<String,Object> map);
复制代码
那么添加胜利后将返回值会返回给控制器停止判断,并通过判断刷新订单类表页面。
经理操作订单管理查看所有员工的订单信息

当经理身份的用户点击”订单管理“功能时,发送GetBills.do恳求给控制器,控制器需要定义方法接收该恳求,并向业务逻辑层发出任务,获得所有订单列表信息的数据:
  1. List<Map<String, Object>> bills=null;
  2.     //定义方法,用于经理查看所有订单信息
  3.     @RequestMapping("/GetBills.do")
  4.     public ModelAndView GetBills(){
  5.         bills = bService.getBills();
  6.         ModelAndView mav=new ModelAndView();
  7.         mav.addObject("bills",bills);
  8.         mav.setViewName("billList2");
  9.         return mav;
  10.     }
复制代码
service从接收控制器的任务:
  1. //获得所有订单信息
  2.     List<Map<String,Object>> getBills();
复制代码
实现类中实现该方法:
  1. @Override
  2.     public List<Map<String, Object>> getBills() {
  3.         return dao.getBills();
  4.     }
复制代码
并将该任务发送给dao层中完成查询所有订单的功能,但因页面要求展示的数据涉及订单表,供给商表,用户表,因而我们的sql语句需要做三表联查:
  1. //经理查询所有订单信息,完成三表联查
  2.     @Select("select smbms_bill.id,smbms_bill.billCode,smbms_bill.productName,smbms_bill.productDesc," +
  3.             "smbms_bill.productCount,smbms_bill.productUnit,smbms_bill.totalPrice,smbms_bill.isPayment," +
  4.             "smbms_user.userName,smbms_provider.proName,smbms_bill.creationDate,smbms_bill.modifyDate  " +
  5.             "from smbms_bill,smbms_provider,smbms_user  " +
  6.             "WHERE smbms_bill.createdBy=smbms_user.id and smbms_bill.providerId=smbms_provider.id")
  7.     List<Map<String,Object>> getBills();
复制代码
最后将查询获得的数据返回给控制层,控制层将数据发送给billList2.jsp页面上停止显示:
  1. <%@page import="com.github.pagehelper.PageInfo"%>
  2. <%@page import="java.util.Map"%>
  3. <%@page import="java.util.List"%>
  4. <%@ page language="java" contentType="text/html; charset=UTF-8"
  5.     pageEncoding="UTF-8"%>
  6. <!DOCTYPE html>
  7. <html>
  8. <head>
  9. <meta charset="UTF-8">
  10. <title>超市订单管理系统--订单列表</title>
  11. <style type="text/css">
  12.         tr {
  13.         height: 40px;
  14. }
  15. </style>
  16. </head>
  17. <body>
  18.         <% //PageInfo pi=(PageInfo)request.getAttribute("bills"); %>
  19.         <div style="width: 1800px;height: 1000px;margin: auto;">
  20.                 <div style="width: 100%;height: 160px;background-color:skyblue;">
  21.                         <div  style="width: 100%;height: 20px;">
  22.                        
  23.                                 <div align="left" style="width: 20%;height: 100%;float: left;" >
  24.                                          <a href="home.do" style="text-decoration: none;">返回首页</a>
  25.                                 </div>
  26.                        
  27.                         <div align="right" style="width: 80%;height: 100%;float: right;">
  28.                                 <a>欢送,<span style="color: red;">${userInfo.userName}</span></a>
  29.                                   <a href="index.do" style="text-decoration: none;">注销</a>
  30.                         </div>
  31.                        
  32.                         </div>
  33.                         <div align="center" style="width: 100%;height: 140px;line-height: 140px;"><h1>超市订单管理系统</h1></div>
  34.                 </div>
  35.                 <% //List<Map<String,Object>> list=pi.getList(); %>
  36.                 <% List<Map<String,Object>> list= (List<Map<String, Object>>) request.getAttribute("bills");%>
  37.                 <div align="center" style="width: 100%;height: 840px;background-color: pink;overflow: scroll;">
  38.                         <!-- 当前普通员工是否有谈下过订单信息,假设没有,显示暂无信息,假设有,展示该员工的所有订单 -->
  39.                         <% if(list==null||list.size()==0){ %>
  40.                                 <div style="width: 98%;text-align: center;height: 800px;">
  41.                                         当前暂无订单信息
  42.                                 </div>
  43.                         <%}else { %>
  44.                         <table border="1" style="width: 98%;text-align: center;border-collapse: collapse;">
  45.                                 <tr>
  46.                                         <td>主键Id</td>
  47.                                         <td>账单编码</td>
  48.                                         <td>商品名称</td>
  49.                                         <td>商品描绘</td>
  50.                                         <td>商品数量</td>
  51.                                         <td>商品单位</td>
  52.                                         <td>商品总额</td>
  53.                                         <td>是否支付</td>
  54.                                         <td>员工姓名</td>
  55.                                         <td>供给商名称</td>
  56.                                         <td>创建时间</td>
  57.                                         <td>修改时间</td>
  58.                                         <td>操作</td>
  59.                                 </tr>
  60.                                 <% for(int i=0;i<list.size();i++){ %>
  61.                                         <tr>
  62.                                         <td ><%=list.get(i).get("id") %></td>
  63.                                         <td><%=list.get(i).get("billCode") %></td>
  64.                                         <td><%=list.get(i).get("productName") %></td>
  65.                                         <td><%=list.get(i).get("productDesc") %></td>
  66.                                         <td><%=list.get(i).get("productCount") %></td>
  67.                                         <td><%=list.get(i).get("productUnit") %></td>
  68.                                         <td><%=list.get(i).get("totalPrice")%>元</td>
  69.                                         <% int type=(int)list.get(i).get("isPayment"); %>
  70.                                         <% if(type==1){ %>
  71.                                         <td style="color:red;">未支付</td>
  72.                                         <%}else if(type==2){ %>
  73.                                         <td style="color:green;">已支付</td>
  74.                                         <%} %>
  75.                                         <td><%=list.get(i).get("userName") %></td>
  76.                                         <td><%=list.get(i).get("proName")%></td>
  77.                                         <td><%=list.get(i).get("creationDate")%></td>
  78.                                         <%
  79.                                         String time="";
  80.                                         if(list.get(i).get("modifyDate")==null){
  81.                                                 time="暂未修改";
  82.                                         }else if("null".equals(list.get(i).get("modifyDate"))){
  83.                                                 time="暂未修改";
  84.                                         }else{
  85.                                                 time=list.get(i).get("modifyDate").toString();
  86.                                         }
  87.                                         %>
  88.                                         <td><%=time %></td>
  89.                                         <td>
  90.                                         <a href="GetBillByIndex.do?index=<%=i%>"><input type="button" value="修改" style="background-color: green;border: none;border-radius: 5px;color: white;"></a>
  91.                                         <a href="DeleteBill.do?id=<%=list.get(i).get("id") %>"><input type="button" value="删除" style="background-color: red;border: none;border-radius: 5px;color: white;"></a>
  92.                                         </td>
  93.                                 </tr>
  94.                                 <%} %>
  95.                         </table>
  96.                         <!-- 分页页码导航栏 -->
  97.                         <%--<br>
  98.                         <div align="center">
  99.                                 <!-- 判断当前页是否存在上一页,不存在则不显示上一页的按钮 -->
  100.                                 <%if(pi.getPrePage()>0){ %>
  101.                                 <a href="GetBills.do?ym=<%=pi.getPrePage()%>"><input type="button" value="上一页"/></a>
  102.                                 <%} %>
  103.                                 <% for(int i:pi.getNavigatepageNums()){ %>
  104.                                         <a href="GetBills.do?ym=<%=i%>"><%=i %></a>
  105.                                 <%} %>
  106.                                 <!-- 判断当前页是否存在下一页,不存在则不显示下一页的按钮 -->
  107.                                 <% if(pi.getPageNum()<pi.getLastPage()){ %>
  108.                                 <a href="GetBills.do?ym=<%=pi.getNextPage()%>"><input type="button" value="下一页"/></a>
  109.                                 <%} %>
  110.                         </div>--%>
  111.                         <%} %>
  112.                        
  113.                 </div>
  114.         </div>
  115. </body>
  116. </html>
复制代码
其效果图如下:
【SSM】第四课 超市订单管理平台--订单管理功能-3.png


经理修改订单信息

当经理点击某一个修改按钮时,向控制器发出GetBillByIndex.do恳求,并将该订单信息对应的下标发送给控制器,控制器根据下标从集合中获得要修改的订单信息以及供用户选择的供给商列表信息,
  1. //定义方法,接收恳求以及携带的下标
  2.     @RequestMapping("/GetBillByIndex.do")
  3.     public ModelAndView GetBillByIndex(@RequestParam int index){
  4.         Map<String, Object> map = bills.get(index);
  5.         //获得所有供给商的信息,供经理停止选择
  6.         List<Map<String, Object>> providers = pService.getProviders();
  7.         ModelAndView mav=new ModelAndView();
  8.         mav.addObject("bill",map);
  9.         mav.addObject("providers",providers);
  10.         mav.setViewName("updateBill");
  11.         return mav;
  12.     }
复制代码
并发送给updateBill.jsp页面
  1. <%@page import="java.util.Map"%>
  2. <%@page import="java.util.List"%>
  3. <%@ page language="java" contentType="text/html; charset=UTF-8"
  4.     pageEncoding="UTF-8"%>
  5. <!DOCTYPE html>
  6. <html>
  7. <head>
  8. <meta charset="UTF-8">
  9. <title>超市订单管理系统--修改订单</title>
  10. </head>
  11. <body>
  12. <% List<Map<String,Object>> oList=(List<Map<String,Object>>)request.getAttribute("providers");
  13.         Map<String,Object> bill=(Map<String,Object>)request.getAttribute("bill");
  14. %>
  15.         <div style="width: 1200px;height: 800px;margin: auto;">
  16.                 <div style="width: 100%;height: 160px;background-color:skyblue;">
  17.                         <div  style="width: 100%;height: 20px;">
  18.                        
  19.                                 <div align="left" style="width: 20%;height: 100%;float: left;" >
  20.                                          <a href="home.do" style="text-decoration: none;">返回首页</a>
  21.                                 </div>
  22.                        
  23.                         <div align="right" style="width: 80%;height: 100%;float: right;">
  24.                                 <a>欢送,<span style="color: red;">${userInfo.userName}</span></a>
  25.                                   <a href="index.do" style="text-decoration: none;">注销</a>
  26.                         </div>
  27.                        
  28.                         </div>
  29.                         <div align="center" style="width: 100%;height: 140px;line-height: 140px;"><h1>超市订单管理系统</h1></div>
  30.                 </div>
  31.                 <div align="center" style="width: 100%;height: 640px;background-color: pink;">
  32.                         <form action="updateBill.do" method="post">
  33.                                 <input type="hidden" name="id" value="<%=bill.get("id") %>">
  34.                                 <div style="padding: 5px 0px">
  35.                                 <label for="productName">商品名称:</label>
  36.                                 <input id="productName" name="productName" value="<%=bill.get("productName") %>" type="text" placeholder="请输入商品名称" />
  37.                                 </div>
  38.                                 <div style="padding: 5px 0px">
  39.                                 <label >商品描绘:</label>
  40.                                 <input type="text" name="productDesc" value="<%=bill.get("productDesc") %>" placeholder="请输入商品描绘信息"></input>
  41.                                 </div>
  42.                                 <div style="padding: 5px 0px">
  43.                                 <label >商品数量:</label>
  44.                                 <input type="number" name="productCount" value="<%=bill.get("productCount") %>" placeholder="请输入商品数量" >
  45.                                 </div>
  46.                                 <div style="padding: 5px 0px">
  47.                                         <label >商品单位:</label>
  48.                                         <input type="text" name="productUnit" value="<%=bill.get("productUnit") %>" placeholder="请输入商品单位">
  49.                                 </div>
  50.                                 <div style="padding: 5px 0px">
  51.                                 <label >商品总额:</label>
  52.                                 <input type="number" name="totalPrice" value="<%=bill.get("totalPrice") %>" placeholder="请输入商品总额" >
  53.                                 </div>
  54.                                 <div style="padding: 5px 0px">
  55.                                 <label >支付状态:</label>
  56.                                 <% int state=(int)bill.get("isPayment");
  57.                                 if(state==1){%>
  58.                                         <input type="radio" name="isPayment" checked="checked" value="1" >未支付  
  59.                                         <input type="radio" name="isPayment" value="2" >已支付
  60.                                 <%}else{ %>
  61.                                         <input type="radio" name="isPayment"  value="1" >未支付  
  62.                                         <input type="radio" name="isPayment" checked="checked" value="2" >已支付
  63.                                 <%} %>
  64.                                 </div>
  65.                                 <div style="padding: 5px 0px">
  66.                                 <label >供给商名称:</label>
  67.                                 <!-- Html5 新增的表单的新用法 -->
  68.                                 <input type="search" name="proName" value="<%=bill.get("proName") %>" placeholder="请输入供给商名称"  list="list">
  69.                                 <datalist id="list">
  70.                                         <%
  71.                                                 for(int i=0;i<oList.size();i++){
  72.                                                         out.print(oList.get(i).get("proName"));
  73.                                         %>
  74.                                         <option><%=oList.get(i).get("proName") %></option>
  75.                                         <%}%>
  76.                                 </datalist>
  77.                                 <%-- <select name="proName">
  78.                                         <%
  79.                                                 for(int i=0;i<oList.size();i++){
  80.                                         %>
  81.                                         <option><%=oList.get(i).getProName() %></option>
  82.                                         <%} %>
  83.                                 </select> --%>
  84.                                 </div>
  85.                                 <div style="padding: 5px 0px">
  86.                                         <input type="submit"
  87.                                           value="修改"
  88.                                          style="width: 120px;background-color: green;
  89.                                          border: none;padding: 5px;border-radius: 5px;
  90.                                          color: white;"/>
  91.                                 </div>
  92.                         </form>
  93.                        
  94.                
  95.                 </div>
  96.         </div>
  97. </body>
  98. </html>
复制代码
其页面效果如下:
【SSM】第四课 超市订单管理平台--订单管理功能-4.png


当用户修改信息后,点击修改按钮将更新后的信息发送给updateBill.do,控制器中接收该恳求,并获得更新后的数据信息:
  1. //定义方法,接收修改订单页面发送的数据信息
  2.     @RequestMapping(value = "/updateBill.do",
  3.     params = {"id","productName","productDesc","productCount","productUnit","totalPrice","isPayment","proName"})
  4.     public String updateBill(long id,String productName,String productDesc,
  5.                              double productCount,String productUnit,double totalPrice,
  6.                              int isPayment,String proName,HttpSession session){
  7.         //创建Map集合,封装数据,便于传输
  8.         Map<String,Object> map=new HashMap<>();
  9.         map.put("id",id);//订单id
  10.         map.put("productName",productName);//商品名称
  11.         map.put("productDesc",productDesc);//商品描绘
  12.         map.put("productCount",productCount);//商品数量
  13.         map.put("productUnit",productUnit);//商品单位
  14.         map.put("totalPrice",totalPrice);//总金额
  15.         map.put("isPayment",isPayment);//支付状态
  16.         map.put("proName",proName);//供给商名称
  17.         //获得登录的经理的id
  18.         map.put("modifyBy",((Map<String,Object>)session.getAttribute("userInfo")).get("id"));
  19.         //修改订单的实时时间
  20.         map.put("modifyDate",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
  21.         //需要把供给商名称作为条件查询供给商表对应的供给商id
  22.         int i = bService.updateBill(map);
  23.         String url="";
  24.         if (i>0)
  25.             //订单修改胜利,刷新页面
  26.             url="redirect:GetBills.do" ;
  27.     return url;
  28.     }
复制代码
接着将封装好的数据发送给service接口:
  1. //修改订单
  2.     int updateBill(Map<String,Object> map);
复制代码
service层实现类实现该方法:
  1. @Override
  2.     public int updateBill(Map<String, Object> map) {
  3.         return dao.updateBill(map);
  4.     }
复制代码
service实现类将数据发送给dao层,但因为用户在修改供给商的时候,涉及到供给商id,因而我们在做修改的操作时需先做查询:
  1. //修改订单,先根据供给商名称查询供给商id,然后完成修改操作
  2.     @Update("update smbms_bill set productName=#{productName},productDesc=#{productDesc}," +
  3.             "productUnit=#{productUnit},productCount=#{productCount},totalPrice=#{totalPrice}," +
  4.             "isPayment=#{isPayment},modifyBy=#{modifyBy},modifyDate=#{modifyDate}," +
  5.             "providerId=(select id from smbms_provider where proName=#{proName}) " +
  6.             "where id=#{id}")
  7.     int updateBill(Map<String,Object> map);
复制代码
dao层执行完修改操作后将返回值返回控制器,控制器停止判断刷新订单信息列表页面,即可看到是否修改胜利,读者也可查阅数据库对应的表观察数据的更新。
经理删除订单功能

经理在订单列表页面选择一条订单信息停止删除时,触发点击事件,发送DeleteBill.do恳求,因而控制器中定义方法接收该订单的id:
  1. //定义方法,用于接收删除的恳求,并获得id
  2.     @RequestMapping("/DeleteBill.do")
  3.     public String DeleteBill(@RequestParam long id){
  4.         int i = bService.delBill(id);
  5.         String url="";
  6.         if (i>0){
  7.             //删除胜利,页面刷新
  8.             url="redirect:GetBills.do";
  9.         }
  10.         return url;
  11.     }
复制代码
将订单id发送给业务逻辑层service接口:
  1. //删除订单
  2.     int delBill(long id);
复制代码
那么接口实现类需要实现该方法:
  1. @Override
  2.     public int delBill(long id) {
  3.         return dao.del(id);
  4.     }
复制代码
并将订单id发送给dao层完成删除的sql语句操作
  1. //删除订单
  2.     @Delete("delete from smbms_bill where id=#{id}")
  3.     int del(@Param("id")long id);
复制代码
删除胜利后将返回值发回控制层,控制层经过判断刷新订单列表页面。
将订单列表功能更新成分页功能

将分页所需要的jar包拷贝至lib文件夹,并关联至项目
【SSM】第四课 超市订单管理平台--订单管理功能-5.png


在Spring框架的配置文件applicationContext.xml文件中配置PageHelper的配置信息
  1. <!--  配置mybatis分页插件PageHelper-->
  2.                 <property name="plugins">
  3.                         <array>
  4.                                 <bean class="com.github.pagehelper.PageInterceptor">
  5.                                         <property name="properties">
  6.                                                 <value></value>
  7.                                         </property>
  8.                                 </bean>
  9.                         </array>
  10.                 </property>
复制代码
接着在经理操作所有订单信息的订单列表的方法中配置分页功能代码:
  1. List<Map<String, Object>> bills=null;
  2.     //定义方法,用于经理查看所有订单信息
  3.     @RequestMapping("/GetBills.do")
  4.     public ModelAndView GetBills(
  5.             @RequestParam(value = "ym",required = false,defaultValue = "1") int ym){
  6.         //因为查询的订单信息太多,页面上显示过于复杂,采用分页显示
  7.         //1.要设置分页的参数:每页最多显示8条数据,并指定显示的页码
  8.         PageHelper.startPage(ym,8);
  9.         //2.获得所有订单信息
  10.         bills = bService.getBills();
  11.         //3.将获得的所有订单信息交给分页的架包处置
  12.         PageInfo<Map<String,Object>> pi=new PageInfo<>(bills);
  13.         ModelAndView mav=new ModelAndView();
  14.         mav.addObject("bills",pi);
  15.         mav.setViewName("billList2");
  16.         return mav;
  17.     }
复制代码
接着在页面上获得该分页数据,并展示出页码导航栏
  1. <%@page import="com.github.pagehelper.PageInfo"%>
  2. <%@page import="java.util.Map"%>
  3. <%@page import="java.util.List"%>
  4. <%@ page language="java" contentType="text/html; charset=UTF-8"
  5.     pageEncoding="UTF-8"%>
  6. <!DOCTYPE html>
  7. <html>
  8. <head>
  9. <meta charset="UTF-8">
  10. <title>超市订单管理系统--订单列表</title>
  11. <style type="text/css">
  12.         tr {
  13.         height: 40px;
  14. }
  15. </style>
  16. </head>
  17. <body>
  18.         <% PageInfo pi=(PageInfo)request.getAttribute("bills"); %>
  19.         <div style="width: 1800px;height: 1000px;margin: auto;">
  20.                 <div style="width: 100%;height: 160px;background-color:skyblue;">
  21.                         <div  style="width: 100%;height: 20px;">
  22.                        
  23.                                 <div align="left" style="width: 20%;height: 100%;float: left;" >
  24.                                          <a href="home.do" style="text-decoration: none;">返回首页</a>
  25.                                 </div>
  26.                        
  27.                         <div align="right" style="width: 80%;height: 100%;float: right;">
  28.                                 <a>欢送,<span style="color: red;">${userInfo.userName}</span></a>
  29.                                   <a href="index.do" style="text-decoration: none;">注销</a>
  30.                         </div>
  31.                        
  32.                         </div>
  33.                         <div align="center" style="width: 100%;height: 140px;line-height: 140px;"><h1>超市订单管理系统</h1></div>
  34.                 </div>
  35.                 <% List<Map<String,Object>> list=pi.getList(); %>
  36.                 <% //List<Map<String,Object>> list= (List<Map<String, Object>>) request.getAttribute("bills");%>
  37.                 <div align="center" style="width: 100%;height: 840px;background-color: pink;overflow: scroll;">
  38.                         <!-- 当前普通员工是否有谈下过订单信息,假设没有,显示暂无信息,假设有,展示该员工的所有订单 -->
  39.                         <% if(list==null||list.size()==0){ %>
  40.                                 <div style="width: 98%;text-align: center;height: 800px;">
  41.                                         当前暂无订单信息
  42.                                 </div>
  43.                         <%}else { %>
  44.                         <table border="1" style="width: 98%;text-align: center;border-collapse: collapse;">
  45.                                 <tr>
  46.                                         <td>主键Id</td>
  47.                                         <td>账单编码</td>
  48.                                         <td>商品名称</td>
  49.                                         <td>商品描绘</td>
  50.                                         <td>商品数量</td>
  51.                                         <td>商品单位</td>
  52.                                         <td>商品总额</td>
  53.                                         <td>是否支付</td>
  54.                                         <td>员工姓名</td>
  55.                                         <td>供给商名称</td>
  56.                                         <td>创建时间</td>
  57.                                         <td>修改时间</td>
  58.                                         <td>操作</td>
  59.                                 </tr>
  60.                                 <% for(int i=0;i<list.size();i++){ %>
  61.                                         <tr>
  62.                                         <td ><%=list.get(i).get("id") %></td>
  63.                                         <td><%=list.get(i).get("billCode") %></td>
  64.                                         <td><%=list.get(i).get("productName") %></td>
  65.                                         <td><%=list.get(i).get("productDesc") %></td>
  66.                                         <td><%=list.get(i).get("productCount") %></td>
  67.                                         <td><%=list.get(i).get("productUnit") %></td>
  68.                                         <td><%=list.get(i).get("totalPrice")%>元</td>
  69.                                         <% int type=(int)list.get(i).get("isPayment"); %>
  70.                                         <% if(type==1){ %>
  71.                                         <td style="color:red;">未支付</td>
  72.                                         <%}else if(type==2){ %>
  73.                                         <td style="color:green;">已支付</td>
  74.                                         <%} %>
  75.                                         <td><%=list.get(i).get("userName") %></td>
  76.                                         <td><%=list.get(i).get("proName")%></td>
  77.                                         <td><%=list.get(i).get("creationDate")%></td>
  78.                                         <%
  79.                                         String time="";
  80.                                         if(list.get(i).get("modifyDate")==null){
  81.                                                 time="暂未修改";
  82.                                         }else if("null".equals(list.get(i).get("modifyDate"))){
  83.                                                 time="暂未修改";
  84.                                         }else{
  85.                                                 time=list.get(i).get("modifyDate").toString();
  86.                                         }
  87.                                         %>
  88.                                         <td><%=time %></td>
  89.                                         <td>
  90.                                         <a href="GetBillByIndex.do?index=<%=i%>"><input type="button" value="修改" style="background-color: green;border: none;border-radius: 5px;color: white;"></a>
  91.                                         <a href="DeleteBill.do?id=<%=list.get(i).get("id") %>"><input type="button" value="删除" style="background-color: red;border: none;border-radius: 5px;color: white;"></a>
  92.                                         </td>
  93.                                 </tr>
  94.                                 <%} %>
  95.                         </table>
  96.                         <!-- 分页页码导航栏 -->
  97.                         <br>
  98.                         <div align="center">
  99.                                 <!-- 判断当前页是否存在上一页,不存在则不显示上一页的按钮 -->
  100.                                 <%if(pi.getPrePage()>0){ %>
  101.                                 <a href="GetBills.do?ym=<%=pi.getPrePage()%>"><input type="button" value="上一页"/></a>
  102.                                 <%} %>
  103.                                 <% for(int i:pi.getNavigatepageNums()){ %>
  104.                                         <a href="GetBills.do?ym=<%=i%>"><%=i %></a>
  105.                                 <%} %>
  106.                                 <!-- 判断当前页是否存在下一页,不存在则不显示下一页的按钮 -->
  107.                                 <% if(pi.getPageNum()<pi.getLastPage()){ %>
  108.                                 <a href="GetBills.do?ym=<%=pi.getNextPage()%>"><input type="button" value="下一页"/></a>
  109.                                 <%} %>
  110.                         </div>
  111.                         <%} %>
  112.                        
  113.                 </div>
  114.         </div>
  115. </body>
  116. </html>
复制代码
其效果图如下:
【SSM】第四课 超市订单管理平台--订单管理功能-6.png


【SSM】第四课 超市订单管理平台--订单管理功能-7.png


【SSM】第四课 超市订单管理平台--订单管理功能-8.png


总结

该项目到这里完毕了,读者可根据本项目的需求自行增加功能,相信读者可以完善的更好。

回复

举报 使用道具

相关帖子
全部回复
暂无回帖,快来参与回复吧
本版积分规则 高级模式
B Color Image Link Quote Code Smilies

太极
注册会员
主题 20
回复 13
粉丝 0
|网站地图
快速回复 返回顶部 返回列表