You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
java/CartFrame.java

201 lines
5.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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;
// 引用到上级FrameProductListFrame
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;
}
}