滿漢樓03 4.功能實現05 4.8查看賬單功能 按照之間搭建起來的框架,在BillService編寫方法 4.8.1代碼實現 1.修改Bill類 重寫Bill類中的toString方法 @Override public String toString() { return id + "\t\t" ...
滿漢樓03
4.功能實現05
4.8查看賬單功能
按照之間搭建起來的框架,在BillService編寫方法
4.8.1代碼實現
1.修改Bill類
重寫Bill類中的toString方法
@Override
public String toString() {
return id +
"\t\t" + menuId +
"\t\t\t" + nums +
"\t\t\t" + money +
"\t" + diningTableId +
"\t\t" + billDate +
"\t\t" + state;
}
2.修改BillService類
在該類中增加方法,用來獲取所有訂單記錄
//返回所有的賬單,提供給View使用
public List<Bill> list(){
return billDAO.queryMulti("select * from bill",Bill.class);
}
這裡也可以按照桌號查詢賬單,並且將查詢到的所有金額相加,返回一個總金額
3.修改MHLView
修改處1:在該類中增加方法listBill(),用來顯示賬單
//顯示賬單信息
public void listBill() {
List<Bill> bills = billService.list();
System.out.println("\n編號\t\t菜品號\t\t菜品量\t\t金額\t\t桌號\t\t日期\t\t\t\t\t\t\t狀態");
for (Bill bill : bills) {
System.out.println(bill);
}
System.out.println("============顯示完畢============");
}
修改處2:在二級菜單處調用listBill方法
4.8.2測試
測試通過
4.9結賬功能
4.9.1功能分析
-
對餐桌編號進行校驗
a. 餐桌編號否存在
b. 餐桌編號是否有賬單需要結賬
-
通過上面的校驗後,需要修改bill表的state(賬單的狀態修改)
-
結賬完畢後,需要修改餐桌的狀態為“空”,同時置空餐桌的預定人信息
4.9.2代碼實現
1.修改BillService類
在該類中分別增加三個方法
- hasPayBillByDiningTable():查看某個餐桌是否有未結賬的賬單
- allOfMoney():查看某張餐桌是否有未結賬的賬單
- payBill():完成結賬
//查看某個餐桌是否有未結賬的賬單
public boolean hasPayBillByDiningTable(int diningTableId) {
Bill bill = billDAO.querySingle("select * from bill where diningTableId=? and state='未結賬' limit 0,1", Bill.class, diningTableId);
return bill != null;//bill非空,就代表有未結賬的賬單
}
/**
* 查看某張餐桌是否有未結賬的賬單
* @param diningTableId 結賬的餐桌編號
* @return 返回的某餐桌需要支付的總金額
*/
public Double allOfMoney(int diningTableId) {
//計算該餐桌需要支付的總金額
Double countMoney = Double.valueOf("0");
List<Bill> bills = billDAO.queryMulti("select * from bill where diningTableId=? and state='未結賬'", Bill.class, diningTableId);
for (Bill bill1 : bills) {
countMoney += bill1.getMoney();
}
//返回總金額
return countMoney;
}
//完成結賬 [前提:1.餐桌編號存在 2.該餐桌有未結賬的賬單]
public boolean payBill(int diningTableId, String payMode) {
//這裡其實應該開啟事務--防止上面成功,下麵失敗的情況
//如果使用事務的話,需要使用ThreadLocal來解決,框架中比如 mybatis就提供了事務支持
//1.修改bill表的state
int update = billDAO.update("update bill set state=? where diningTableId=? and state='未結賬'", payMode, diningTableId);
if (update <= 0) {//如果更新沒有成功,則表示失敗
return false;
}
//2.修改diningTable的state
if (!diningTableService.updateDiningTableToFree(diningTableId, "空")) {
return false;
}
return true;
}
2.修改DiningTableService類
在該類中增加方法updateDiningTableToFree()
//提供方法,將指定餐桌修改為空閑狀態
public boolean updateDiningTableToFree(int id, String state) {
int update = diningTableDAO.update("update diningTable set state=?,orderName='',orderTel='' where id=?", state, id);
return update > 0;
}
3.修改MHLView類
修改處1:在該類中增加方法 payBill() 完成結賬功能
//完成結賬
public void payBill() {
System.out.println("============結賬服務============");
System.out.print("請輸入要結賬的餐桌編號(-1退出): ");
int diningTableId = Utility.readInt();
if (diningTableId == -1) {
System.out.println("============取消結賬============");
return;
}
//驗證餐桌是否存在
DiningTable diningTable = diningTableService.getDiningTableById(diningTableId);
if (diningTable == null) {
System.out.println("==========餐桌號不存在===========");
return;
}
//驗證餐桌是否有需要結賬的賬單
if (!billService.hasPayBillByDiningTable(diningTableId)) {
System.out.println("==========該餐桌不存在未結賬賬單===========");
return;
}
System.out.print("請輸入結賬的方式(現金/支付寶/微信)回車表示退出: ");
String payMode = Utility.readString(3, "");//如果回車,返回的就是空串""
if ("".equals(payMode)) {
System.out.println("============取消結賬============");
return;
}
if (!(payMode.equals("現金") || payMode.equals("支付寶") || payMode.equals("微信"))) {
System.out.println("============輸入有誤============");
return;
}
char key = Utility.readConfirmSelection();
if (key == 'Y') {
//計算總金額
System.out.println("==========" + diningTableId + "號餐桌消費總金額為: " + billService.allOfMoney(diningTableId) + " 元===========");
//調用結賬方法
if (billService.payBill(diningTableId, payMode)) {
System.out.println("==========結賬完成===========");
} else {
System.out.println("==========結賬失敗===========");
}
} else {
System.out.println("============取消結賬============");
}
}
修改處2:在二級菜單調用該方法
4.9.3測試
-
未結賬前餐桌和賬單狀態
- 非法數據輸入
- 正確數據
- 此時的餐桌狀態和賬單狀態