【SSM】第四课 超市订单管理平台--订单管理功能_笔触狂放的博客-CSDN博客
接下来做订单管理
↓ 先从普通员工入手,普通员工登录进来,只能看到自己谈下来的订单信息
创建操作订单表的控制器
↓定义方法,用于普通员工操作订单管理功能,查看自己的订单信息
↓创建业务逻辑层接口
↓定义实现类实现一下
↓注入业务逻辑层对象![](https://i-blog.csdnimg.cn/blog_migrate/97ecbf75030e6a11388faa75d08ad6f7.png)
↓创建dao层
↓根据普通员工的id作为条件查询订单表,将该员工自己的订单信息查询出
↓传入![](https://i-blog.csdnimg.cn/blog_migrate/ed7c15c21320ff5a54d1671597121193.png)
↓粘贴billList.jsp页面(我们没有自定义实体类,可将实体类去掉)
↓调整控制器
↓ 测试运行效果页面
↓控制层,定义方法,用于根据订单的主键id去修改支付的状态
↓dao层,根据订单的主键id修改支付状态
↓业务逻辑层,接口
↓业务逻辑层,实现
↓修改支付状态完成,效果如下
↓下面做添加订单的功能
控制层,定义方法,用于跳转至添加订单的页面
添加addBill.jsp页面进来
↓注入别忘了,名称要一致
↓小调一下addBill.jsp页面
↓效果图
↓下面是添加订单功能
↓控制层,定义方法,用于接收添加订单的数据信息
//定义方法,用于接收添加订单的数据信息
@RequestMapping(value = "/AddBill.do",
params = {"productName","productDesc","productCount","productUnit","totalPrice","proName"})
public String AddBill(String productName,String productDesc,double productCount,String productUnit,
double totalPrice,String proName,HttpSession session ){
//定义Map集合,将数据封装,便于传输
Map<String,Object> map=new HashMap<>();
map.put("productName",productName);//商品名称
map.put("productDesc",productDesc);//商品描述
map.put("productCount",productCount);//商品数量
map.put("productUnit",productUnit);//商品单位
map.put("totalPrice",totalPrice);//总金额
map.put("proName",proName);//供应商名称
//缺少的数据需要在业务逻辑层中进行完成
//缺少账单编号billCode:根据当前的年份要自动生成账单编号
//缺少供应商的id: 用已知的供应商名称作为条件查询供应商表对应的供应商的id
//获得当前登录的普通员工的id
map.put("createdBy",((Map<String,Object>)session.getAttribute("userInfo")).get("id"));
//当前添加订单的实时时间
map.put("creationDate",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
int i = bService.addBill(map);
String url="";
if (i>0)
//添加订单成功,刷新列表页面
url="redirect:GetBillsByUserId.do";
return url;
}
}
↓业务逻辑层接口
↓业务逻辑层实现
@Override
public int addBill(Map<String, Object> map) {
//缺少账单编号billCode:根据当前的年份要自动生成账单编号
map.put("billCode",getBillCode());
return dao.add(map);
}
/**
*功能:自动生成订单编号
* 需求分析:
* 1.先判断订单表中所有的订单是否存在今年的订单,
* 如果没有,我们添加的订单的编号就应该为BILL今年的年份_001
* 2.如果有,找出最近添加的最新的订单的订单编号,获得该订单编号的尾号,然后加一
* 在组合起来就是我们添加订单的订单编号
* 解题思路:
* 1.用java代码获得今年的年份 2022
* 2.将整个订单表按订单编号做降序排列(从大到小排序),取第一个订单编号
* 因为降序排列之后,最新的订单就在第一个位置上
* 3.将获得的最新的订单编号进行按_切割成BILL2022 002
* 4.从第一部分字符串中截取子字符串
*/
public String getBillCode(){
String billCode="";
//今年的年份
String nowYear=new SimpleDateFormat("yyyy").format(new Date());
//获得订单表中最新的订单编号 BILL2022_002
String bCode = dao.getOrder();
//将订单编号按_分割
String[] s = bCode.split("_");
//取第一部分进行截取子字符串获得年份
String substring = s[0].substring(4);
//判断最新的订单编号的年份是否等于今年的年份
if (!substring.equals(nowYear)){
//如果不相等,说明整个订单表中不存在今年的订单
billCode="BILL"+nowYear+"_001";
}else {
//如果相等,说明订单表中存在今年的订单,那么将第二部分的字符串解析成int整数
int number = Integer.parseInt(s[1]);//2
//在该订单的尾号基础上加一
int newNumber=++number;
billCode="BILL"+nowYear+"_"+zreo(newNumber);
}
return billCode;
}
//对尾号进行判断,小于10 补两个零,小于100补一个零,小于1000不补零
public String zreo(int newNumber){
String s="";
if (newNumber<10){
s= "00"+newNumber;
}else if (newNumber<100){
s= "0"+newNumber;
}else if (newNumber<1000){
s= ""+newNumber;
}
return s;
}
}
↓dao层
//将整个订单表做降序排列
@Select("select billCode from smbms_bill order by billCode desc LIMIT 0,1")
String getOrder();
//添加订单
@Insert("insert into smbms_bill(smbms_bill.billCode,smbms_bill.productName," +
"smbms_bill.productDesc,smbms_bill.productCount,smbms_bill.productUnit," +
"smbms_bill.totalPrice,smbms_bill.createdBy,smbms_bill.creationDate," +
"smbms_bill.providerId) " +
"values(#{billCode},#{productName},#{productDesc},#{productCount}," +
"#{productUnit},#{totalPrice},#{createdBy},#{creationDate}," +
"(select smbms_provider.id " +
"from smbms_provider " +
"where smbms_provider.proName=#{proName} LIMIT 0,1)" +
")")
int add(Map<String,Object> map);
}
↓至此,普通员工添加供应商功能完成,效果页面图如下
↓ 控制层,定义方法,用于经理查看所有订单信息
//定义方法,用于经理查看所有订单信息
@RequestMapping("/GetBills.do")
public ModelAndView GetBills(){
List<Map<String,Object>>bills = bService.getBills();
ModelAndView mav=new ModelAndView();
mav.addObject("bills",bills);
mav.setViewName("billList2");
return mav;
}
↓业务逻辑层,接口
↓业务逻辑层,实现类
↓dao层
//经理查询所有订单信息,完成三表联查
@Select("select smbms_bill.id,smbms_bill.billCode,smbms_bill.productName,smbms_bill.productDesc," +
"smbms_bill.productCount,smbms_bill.productUnit,smbms_bill.totalPrice,smbms_bill.isPayment," +
"smbms_user.userName,smbms_provider.proName,smbms_bill.creationDate,smbms_bill.modifyDate " +
"from smbms_bill,smbms_provider,smbms_user " +
"WHERE smbms_bill.createdBy=smbms_user.id and smbms_bill.providerId=smbms_provider.id")
List<Map<String,Object>> getBills();
}
↓我们现在暂时不用分页,把分页注释一下![](https://i-blog.csdnimg.cn/blog_migrate/2ca3cdb79c5db15a4a4af961e596024b.png)
↓完成经理查看所有订单信息 效果如图
↓控制层,定义方法,接收请求以及携带的下标
↓现在经理点击修改页面可以出现修改页面了
↓控制层定义方法, 接收修改订单页面发送的数据信息
//定义方法,接收修改订单页面发送的数据信息
@RequestMapping(value = "/updateBill.do",
params = {"id","productName","productDesc","productCount","productUnit","totalPrice","isPayment","proName"})
public String updateBill(long id,String productName,String productDesc,
double productCount,String productUnit,double totalPrice,
int isPayment,String proName,HttpSession session){
//创建Map集合,封装数据,便于传输
Map<String,Object> map=new HashMap<>();
map.put("id",id);//订单id
map.put("productName",productName);//商品名称
map.put("productDesc",productDesc);//商品描述
map.put("productCount",productCount);//商品数量
map.put("productUnit",productUnit);//商品单位
map.put("totalPrice",totalPrice);//总金额
map.put("isPayment",isPayment);//支付状态
map.put("proName",proName);//供应商名称
//获得登录的经理的id
map.put("modifyBy",((Map<String,Object>)session.getAttribute("userInfo")).get("id"));
//修改订单的实时时间
map.put("modifyDate",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
//需要把供应商名称作为条件查询供应商表对应的供应商id
int i = bService.updateBill(map);
String url="";
if (i>0)
//订单修改成功,刷新页面
url="redirect:GetBills.do" ;
return url;
}
}
↓业务逻辑层接口
↓业务逻辑层实现
↓dao层
//修改订单,先根据供应商名称查询供应商id,然后完成修改操作
@Update("update smbms_bill set productName=#{productName},productDesc=#{productDesc}," +
"productUnit=#{productUnit},productCount=#{productCount},totalPrice=#{totalPrice}," +
"isPayment=#{isPayment},modifyBy=#{modifyBy},modifyDate=#{modifyDate}," +
"providerId=(select id from smbms_provider where proName=#{proName}) " +
"where id=#{id}")
int updateBill(Map<String,Object> map);
↓经理修改页面功能完成,效果如下
↓下面完成修改功能
↓控制层,定义方法,用于接收删除的请求,并获得id
↓业务逻辑层接口![](https://i-blog.csdnimg.cn/blog_migrate/1184cd77d5acf855492525599ee4868f.png)
↓业务逻辑层实现
↓dao层
↓删除功能完成
↓下面开始做分页功能
导入分页架包并关联
↓配置mybatis分页插件PageHelper
↓控制层做分页
↓释放billList2之前注释的分页的代码
↓效果如下
现在,我们利用ssm框架,做超市订单管理平台功能完成了,谢天谢地,谢老师谢同学,手动ღ( ´・ᴗ・` )比心~