|
|
package flowershop.view;
|
|
|
|
|
|
import java.awt.BorderLayout;
|
|
|
import java.awt.Color;
|
|
|
import java.awt.FlowLayout;
|
|
|
import java.awt.Font;
|
|
|
import java.util.Date;
|
|
|
import java.util.Map;
|
|
|
import java.util.Set;
|
|
|
|
|
|
import javax.swing.JButton;
|
|
|
import javax.swing.JLabel;
|
|
|
import javax.swing.JOptionPane;
|
|
|
import javax.swing.JPanel;
|
|
|
import javax.swing.JScrollPane;
|
|
|
import javax.swing.JTable;
|
|
|
import javax.swing.table.TableModel;
|
|
|
|
|
|
import flowershop.dao.OrderDao;
|
|
|
import flowershop.dao.OrderDetailDao;
|
|
|
import flowershop.model.Flower;
|
|
|
import flowershop.model.Order;
|
|
|
import flowershop.model.OrderDetail;
|
|
|
import flowershop.model.User;
|
|
|
import flowershop.dao.FlowerDao;
|
|
|
import flowershop.daoimpl.FlowerDaoImpl;
|
|
|
import flowershop.daoimpl.OrderDaoImpl;
|
|
|
import flowershop.daoimpl.OrderDetailDaoImpl;
|
|
|
|
|
|
//商品购物车窗口
|
|
|
public class CartFrame extends MyFrame {
|
|
|
|
|
|
private JTable table;
|
|
|
|
|
|
// 购物车数据
|
|
|
private Object[][] data;
|
|
|
|
|
|
// 创建商品Dao
|
|
|
private FlowerDao Dao = new FlowerDaoImpl();
|
|
|
|
|
|
// 购物车,键是选择的商品Id,值是商品的数量
|
|
|
private Map<String, Integer> cart;
|
|
|
// 引用到上级Frame(ProductListFrame)
|
|
|
FlowerListFrame flowerListFrame;
|
|
|
|
|
|
public CartFrame(Map<String, Integer> cart, FlowerListFrame flowerListFrame) {
|
|
|
|
|
|
super("商品购物车", 1000, 700);
|
|
|
this.cart = cart;
|
|
|
this.flowerListFrame = flowerListFrame;
|
|
|
|
|
|
JPanel topPanel = new JPanel();
|
|
|
topPanel.setBackground(new Color(250,220,230));
|
|
|
FlowLayout fl_topPanel = (FlowLayout) topPanel.getLayout();
|
|
|
fl_topPanel.setVgap(10);
|
|
|
fl_topPanel.setHgap(20);
|
|
|
getContentPane().add(topPanel, BorderLayout.NORTH);
|
|
|
|
|
|
JButton btnReturn = new JButton("返回商品列表");
|
|
|
btnReturn.setFont(new Font("微软雅黑", Font.PLAIN, 15));
|
|
|
topPanel.add(btnReturn);
|
|
|
|
|
|
JButton btuSubmit = new JButton("提交订单");
|
|
|
// 注册【提交订单】按钮的ActionEvent事件监听器
|
|
|
btuSubmit.addActionListener(e -> {
|
|
|
// 生成订单
|
|
|
generateOrders();
|
|
|
JLabel label = new JLabel("订单已经生成,等待付款。");
|
|
|
btuSubmit.setFont(new Font("微软雅黑", Font.PLAIN, 15));
|
|
|
if (JOptionPane.showConfirmDialog(this, label, "信息", JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION) {
|
|
|
// TODO 付款
|
|
|
System.out.println("未付款");
|
|
|
System.exit(0);
|
|
|
} else {
|
|
|
System.out.println("付款");
|
|
|
System.exit(1);
|
|
|
}
|
|
|
});
|
|
|
topPanel.add(btuSubmit);
|
|
|
|
|
|
JScrollPane scrollPane = new JScrollPane();
|
|
|
getContentPane().add(scrollPane, BorderLayout.CENTER);
|
|
|
scrollPane.setViewportView(getTable());
|
|
|
|
|
|
|
|
|
|
|
|
// 注册【返回商品列表】按钮的ActionEvent事件监听器
|
|
|
btnReturn.addActionListener(e -> {
|
|
|
// 更新购物车
|
|
|
for (int i = 0; i < data.length; i++) {
|
|
|
// 商品编号
|
|
|
String productid = (String) data[i][0];
|
|
|
// 数量
|
|
|
Integer quantity = (Integer) data[i][3];
|
|
|
cart.put(productid, quantity);
|
|
|
}
|
|
|
|
|
|
this.flowerListFrame.setVisible(true);
|
|
|
this.setVisible(false);
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
// 初始化左侧面板中的表格控件
|
|
|
private JTable getTable() {
|
|
|
|
|
|
// 准备表中数据
|
|
|
data = new Object[cart.size()][5];
|
|
|
Set<String> keys = this.cart.keySet();
|
|
|
int indx = 0;
|
|
|
for (String productid : keys) {
|
|
|
Flower f = Dao.findById(productid);
|
|
|
data[indx][0] = f.getProductid();// 商品编号
|
|
|
data[indx][1] = f.getName();// 商品名
|
|
|
data[indx][2] = new Double(f.getPrice());// 商品单价
|
|
|
data[indx][3] = new Integer(cart.get(productid));// 数量
|
|
|
// 计算商品应付金额
|
|
|
double amount = (double) data[indx][2] * (int) data[indx][3];
|
|
|
data[indx][4] = new Double(amount);
|
|
|
indx++;
|
|
|
}
|
|
|
|
|
|
// 创建表数据模型
|
|
|
TableModel model = new CartTableModel(data);
|
|
|
|
|
|
if (table == null) {
|
|
|
// 创建表
|
|
|
table = new JTable(model);
|
|
|
table.setBackground(new Color(250,220,230));
|
|
|
// 设置表中内容字体
|
|
|
table.setFont(new Font("微软雅黑", Font.PLAIN, 16));
|
|
|
// 设置表列标题字体
|
|
|
table.getTableHeader().setFont(new Font("微软雅黑", Font.BOLD, 16));
|
|
|
// 设置表行高
|
|
|
table.setRowHeight(51);
|
|
|
table.setRowSelectionAllowed(false);
|
|
|
|
|
|
} else {
|
|
|
table.setModel(model);
|
|
|
}
|
|
|
return table;
|
|
|
}
|
|
|
|
|
|
// 生成订单
|
|
|
private void generateOrders() {
|
|
|
// Example: Initialize the user before using it
|
|
|
MainApp.user = new User();
|
|
|
String someUserId = null;
|
|
|
MainApp.user.setUserid(someUserId);
|
|
|
if (MainApp.user != null) {
|
|
|
String userId = MainApp.user.getUserid();
|
|
|
// Continue processing with userId
|
|
|
} else {
|
|
|
// Handle the case where user is null
|
|
|
System.out.println("未初始化用户");
|
|
|
}
|
|
|
|
|
|
|
|
|
OrderDao orderDao = new OrderDaoImpl();
|
|
|
OrderDetailDao orderDetailDao = new OrderDetailDaoImpl();
|
|
|
Order order = new Order();
|
|
|
order.setUserid(MainApp.user.getUserid());
|
|
|
// 0待付款
|
|
|
order.setStatus(0);
|
|
|
// 订单Id是当前时间
|
|
|
Date now = new Date();
|
|
|
long orderid = now.getTime();
|
|
|
order.setOrderid(orderid);
|
|
|
order.setOrderdate(now);
|
|
|
order.setAmount(getOrderTotalAmount());
|
|
|
|
|
|
// 下订单时间是数据库自动生成不用设置
|
|
|
// 创建订单
|
|
|
orderDao.create(order);
|
|
|
|
|
|
for (int i = 0; i < data.length; i++) {
|
|
|
|
|
|
OrderDetail orderDetail = new OrderDetail();
|
|
|
orderDetail.setOrderid(orderid);
|
|
|
orderDetail.setProductid((String) data[i][0]);
|
|
|
orderDetail.setQuantity((int) data[i][3]);
|
|
|
orderDetail.setPrice((double) data[i][2]);
|
|
|
// 创建订单详细
|
|
|
orderDetailDao.create(orderDetail);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 计算订单应付总金额
|
|
|
private double getOrderTotalAmount() {
|
|
|
|
|
|
double totalAmount = 0.0;
|
|
|
for (int i = 0; i < data.length; i++) {
|
|
|
// 计算商品应付金额
|
|
|
totalAmount += (Double) data[i][4];
|
|
|
}
|
|
|
return totalAmount;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|