diff --git a/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java b/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java index 265d09e..c360ffa 100644 --- a/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java +++ b/Supermarket/src/com/lingnan/supermarket/dao/impl/storageRecordImpl.java @@ -6,6 +6,10 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.Vector; +<<<<<<< HEAD +======= +// 导入相关的业务逻辑接口、数据传输对象以及工具类,用于数据库操作和日期处理等功能 +>>>>>>> developer import com.lingnan.supermarket.dao.storageRecordService; import com.lingnan.supermarket.dto.StorageRecord; import com.lingnan.supermarket.utils.DateUtil; @@ -13,6 +17,7 @@ import com.lingnan.supermarket.utils.JDBCUtil; public class storageRecordImpl implements storageRecordService { +<<<<<<< HEAD /** * 获取所有存储记录 * @@ -52,11 +57,45 @@ public class storageRecordImpl implements storageRecordService { sr.setNum(resultSet.getInt("num")); // 设置数量字段 sr.setExecute(resultSet.getString("execute")); // 设置执行状态字段 // 设置创建日期字段,并通过DateUtil工具类格式化日期 +======= + // 查询所有库存记录信息,并以Vector容器存储返回 + @Override + public Vector findAllStorageRecord() { + // 创建一个Vector容器,用于存放查询到的StorageRecord对象 + Vector v = new Vector(); + + // 获取数据库连接,通过JDBCUtil工具类来获取已经配置好的连接对象 + Connection conn = JDBCUtil.getConn(); + PreparedStatement pstmt = null; + ResultSet resultSet = null; + try { + // 编写SQL查询语句,从storageRecord表中查询所有记录,并按照cDate字段降序排序 + String sql = "select * from storageRecord order by cDate desc"; + // 使用获取到的数据库连接对象,预编译SQL语句 + pstmt = conn.prepareStatement(sql); + + // 执行查询操作 + resultSet = pstmt.executeQuery(); + // 遍历结果集,将每一条记录封装成StorageRecord对象,并添加到Vector容器中 + while (resultSet.next()) { + StorageRecord sr = new StorageRecord(); + // 设置StorageRecord对象的id属性 + sr.setId(resultSet.getString("id")); + // 设置StorageRecord对象的库存编号属性 + sr.setTheNumber(resultSet.getString("theNumber")); + // 设置StorageRecord对象的数量属性 + sr.setNum(resultSet.getInt("num")); + // 设置StorageRecord对象的执行情况属性 + sr.setExecute(resultSet.getString("execute")); + // 通过DateUtil工具类的dateToString方法将数据库中获取的时间戳类型的日期数据转换为字符串类型,方便后续使用(第二个参数为null可能表示使用默认的日期格式转换,具体看DateUtil实现) + +>>>>>>> developer sr.setcDate(DateUtil.dateToString(resultSet.getTimestamp("cDate"), null)); // 将StorageRecord对象添加到Vector中 v.add(sr); } +<<<<<<< HEAD } catch (SQLException e) { // 如果出现SQL异常,打印错误信息 e.printStackTrace(); @@ -85,10 +124,33 @@ public class storageRecordImpl implements storageRecordService { Connection conn = JDBCUtil.getConn(); // 声明PreparedStatement和ResultSet对象 +======= + + } catch (SQLException e) { + // 若出现SQL异常,打印异常栈信息 + e.printStackTrace(); + } finally { + // 通过JDBCUtil工具类提供的方法进行关闭操作 + JDBCUtil.close(resultSet, pstmt, conn); + + } + + return v; + } + + // 根据给定的库存编号(theNumber)查找对应的库存记录信息并返回 + @Override + public StorageRecord findByIdStorageRecord(String theNumber) { + // 初始化一个StorageRecord对象为null,用于存放查询到的库存记录信息,如果没查到则返回null + StorageRecord sr = null; + // 获取数据库连接 + Connection conn = JDBCUtil.getConn(); +>>>>>>> developer PreparedStatement pstmt = null; ResultSet resultSet = null; try { +<<<<<<< HEAD // 初始化StorageRecord对象 sr = new StorageRecord(); @@ -105,11 +167,26 @@ public class storageRecordImpl implements storageRecordService { if (resultSet.next()) { sr.setTheNumber(resultSet.getString("theNumber")); sr.setId(resultSet.getString("id")); +======= + // 创建一个新的StorageRecord对象,用于后续封装查询到的数据 + sr = new StorageRecord(); + // 预编译SQL语句,用于根据给定的库存编号(theNumber)查询storageRecord表中的记录 + pstmt = conn.prepareStatement("select *from storageRecord where theNumber=?"); + // 设置SQL语句中的参数,将传入的库存编号赋值给查询语句中的占位符 + pstmt.setString(1, theNumber); + // 执行查询操作,获取结果集 + resultSet = pstmt.executeQuery(); + // 如果结果集中有下一条记录,则将对应记录中的各字段值封装到StorageRecord对象中 + if (resultSet.next()) { + sr.setTheNumber((resultSet.getString("theNumber"))); + sr.setId((resultSet.getString("id"))); +>>>>>>> developer sr.setNum(resultSet.getInt("num")); sr.setExecute(resultSet.getString("execute")); // 设置存储记录的创建日期,并进行格式化 sr.setcDate(DateUtil.dateToString(resultSet.getTimestamp("cDate"), null)); } +<<<<<<< HEAD } catch (SQLException e) { // 如果发生SQLException,打印堆栈信息 e.printStackTrace(); @@ -141,10 +218,31 @@ public class storageRecordImpl implements storageRecordService { Connection conn = JDBCUtil.getConn(); // 声明PreparedStatement和ResultSet对象 +======= + + } catch (SQLException e) { + // 若出现SQL异常,打印异常栈信息 + e.printStackTrace(); + } finally { + // 关闭相关资源 + JDBCUtil.close(resultSet, pstmt, conn); + } + + return sr; + } + + // 向库存记录表storageRecord中插入一条新的库存记录信息 + public boolean insertStorageRecord(String iNumber, String time, String prodId, String execute, int sum) { + // 定义一个布尔变量用于标记插入操作是否成功,初始化为false + boolean flag = false; + // 获取数据库连接 + Connection conn = JDBCUtil.getConn(); +>>>>>>> developer PreparedStatement pstmt = null; ResultSet resultSet = null; try { +<<<<<<< HEAD // 编写SQL插入语句,将数据插入到storageRecord表中 pstmt = conn.prepareStatement("insert into storageRecord values(?,?,?,?,?)"); @@ -179,6 +277,33 @@ public class storageRecordImpl implements storageRecordService { } // 返回插入操作的结果(成功返回true,失败返回false) +======= + // 预编译插入数据的SQL语句,向storageRecord表中插入五条数据 + pstmt = conn.prepareStatement("insert into storageRecord values(?,?,?,?,?) "); + // 设置SQL语句中的第一个参数 + pstmt.setString(1, iNumber); + // 设置SQL语句中的第二个参数 + pstmt.setString(2, time); + // 设置SQL语句中的第三个参数 + pstmt.setString(3, prodId); + // 设置SQL语句中的第四个参数 + pstmt.setString(4, execute); + // 设置SQL语句中的第五个参数 + pstmt.setInt(5, sum); + + // 执行插入操作,若受影响的行数为1,则将flag置为true,表示插入成功 + if (pstmt.executeUpdate() == 1) { + flag = true; + } + + } catch (SQLException e) { + // 若出现SQL异常,打印异常栈信息 + e.printStackTrace(); + } finally { + // 关闭相关资源 + JDBCUtil.close(resultSet, pstmt, conn); + } +>>>>>>> developer return flag; } } diff --git a/Supermarket/src/com/lingnan/supermarket/utils/CreateOrder.java b/Supermarket/src/com/lingnan/supermarket/utils/CreateOrder.java index 0321009..2822243 100644 --- a/Supermarket/src/com/lingnan/supermarket/utils/CreateOrder.java +++ b/Supermarket/src/com/lingnan/supermarket/utils/CreateOrder.java @@ -7,6 +7,7 @@ import com.lingnan.supermarket.dto.Production; public class CreateOrder { +<<<<<<< HEAD // 方法:生成订单小票文本 public String CreateOrder(Vector v, String oNumber, String time, Float allPrice, String username) { // 初始化分隔符 @@ -19,10 +20,23 @@ public class CreateOrder { InRequireText += "#名称 #单价 #数量 #金额\r\n"; // 遍历商品列表,生成订单项信息 +======= + // 用于生成一个完整的订单文本信息,接收商品信息向量、订单编号、时间、总价以及负责人用户名等参数 + public String CreateOrder(Vector v, String oNumber, String time, Float allPrice, String username) { + // 分割线 + String xx = "----------------------------------------------------------------------------\r\n"; + // 初始化订单文本内容 + String InRequireText = time + "\r\n" + xx; + + // 添加订单小票中商品信息展示的表头部分 + InRequireText += "#名称 #单价 #数量 #金额\r\n"; + //循环遍历传入的商品信息向量,将每个商品的具体信息按照设定的格式拼接添加到订单文本中 +>>>>>>> developer for (Production p : v) { InRequireText += p.getName() + " " + p.getInPrice() + " " + p.getSum() + " " + p.getPrice() + "\r\n"; } +<<<<<<< HEAD // 订单总金额 InRequireText += "\r\n" + xx; InRequireText += "#总进货金额:" + allPrice + "元"; @@ -92,4 +106,23 @@ public class CreateOrder { return orderList.toString(); } +======= + // 添加一条分割线 + InRequireText += "\r\n" + xx; + + // 显示本次进货的总价金额 + InRequireText += "#总进货金额:" + allPrice + "元"; + // 显示订单的负责人 + InRequireText += "\r\n#负责人:" + username; + // 添加订单编号信息到订单文本中 + InRequireText += "\r\n#订单编号:" + oNumber; + // 添加超市地址信息到订单文本中,注明订单对应的收货地址等相关信息 + InRequireText += "\r\n#地址:新民超市"; + // 添加联系电话信息到订单文本中 + InRequireText += "\r\n#联系电话:xxx"; + + // 返回最终生成的完整订单文本内容 + return InRequireText; + } +>>>>>>> developer } diff --git a/Supermarket/src/com/lingnan/supermarket/utils/JDBCUtil.java b/Supermarket/src/com/lingnan/supermarket/utils/JDBCUtil.java index e16b49d..d520088 100644 --- a/Supermarket/src/com/lingnan/supermarket/utils/JDBCUtil.java +++ b/Supermarket/src/com/lingnan/supermarket/utils/JDBCUtil.java @@ -9,14 +9,22 @@ import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; +<<<<<<< HEAD public class JDBCUtil { // Properties对象用于加载配置文件 +======= +// JDBCUtil工具类,用于管理数据库连接相关的操作,如加载数据库配置、获取数据库连接以及释放相关资源等 +public class JDBCUtil { + + // 用于存储数据库连接相关的配置信息,通过读取配置文件将配置项加载到该对象中 +>>>>>>> developer private static Properties properties; private static String url; private static String user; private static String password; +<<<<<<< HEAD // 静态代码块用于加载配置文件和数据库驱动 static { // 获取配置文件输入流 @@ -34,6 +42,25 @@ public class JDBCUtil { } finally { // 关闭输入流 if (inputStream != null) { +======= + // 静态代码块,在类加载时执行,主要用于加载数据库配置文件并注册数据库驱动,同时获取配置文件中的连接相关信息 + static { + // 通过类加载器获取配置文件的输入流,该文件应位于类路径下,以便能够正确读取 + InputStream inputStream = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties"); + + // 创建一个Properties对象,用于存储键值对形式的配置信息 + properties = new Properties(); + + try { + // 将从输入流中读取配置文件的内容加载到Properties对象中 + properties.load(inputStream); + } catch (IOException e) { + // 若加载配置文件出现IO异常,打印异常栈信息 + e.printStackTrace(); + } finally { + // 在完成配置文件读取后释放资源 + if (inputStream!= null) { +>>>>>>> developer try { inputStream.close(); } catch (IOException e) { @@ -43,6 +70,7 @@ public class JDBCUtil { } } +<<<<<<< HEAD // 注册JDBC驱动 try { // 加载JDBC驱动类 @@ -55,14 +83,36 @@ public class JDBCUtil { } catch (ClassNotFoundException e) { // 如果驱动类加载失败,打印错误信息 +======= + // 注册数据库驱动 + try { + // 从配置文件中获取驱动类名属性,并加载该驱动类,类加载过程会执行驱动类中相关的静态代码,完成驱动在系统中的注册 + Class.forName(properties.getProperty("driver")); + + // 从配置文件中获取数据库连接的URL地址属性 + url = properties.getProperty("url"); + // 从配置文件中获取数据库连接的用户名属性 + user = properties.getProperty("user"); + // 从配置文件中获取数据库连接的密码属性 + password = properties.getProperty("password"); + } catch (ClassNotFoundException e) { + // 若找不到指定的驱动类,打印异常栈信息 +>>>>>>> developer e.printStackTrace(); } } /** +<<<<<<< HEAD * 获取数据库连接 * * @return 数据库连接 +======= + * 获取数据库连接的方法,通过DriverManager根据之前从配置文件中读取并设置好的URL、用户名和密码来建立数据库连接,并返回该连接对象。 + * 如果建立连接过程中出现SQL异常,会打印异常栈信息,并返回null,表示获取连接失败。 + * + * @return 返回建立好的数据库连接对象,若失败则返回null +>>>>>>> developer */ public static Connection getConn() { try { @@ -76,6 +126,7 @@ public class JDBCUtil { } /** +<<<<<<< HEAD * 释放数据库资源 * * @param resultSet 结果集对象 @@ -99,11 +150,35 @@ public class JDBCUtil { connection.close(); } +======= + * 释放数据库相关资源的方法,用于关闭ResultSet(结果集)、Statement(语句执行对象)以及Connection(数据库连接对象),避免资源泄漏。 + * 分别判断传入的对象是否为null,若不为null则调用相应的close方法进行关闭操作,若关闭过程中出现SQL异常,会打印异常栈信息。 + * + * @param resultSet 要关闭的结果集对象,通常是执行查询语句后返回的结果集,可为null + * @param statement 要关闭的语句执行对象,如PreparedStatement、Statement等,用于执行SQL语句,可为null + * @param connection 要关闭的数据库连接对象,用于与数据库建立连接,可为null + */ + public static void close(ResultSet resultSet, Statement statement, Connection connection) { + try { + // 如果结果集对象不为null,则关闭结果集,释放相关资源 + if (resultSet!= null) { + resultSet.close(); + } + // 如果语句执行对象不为null,则关闭语句执行对象,释放相关资源 + if (statement!= null) { + statement.close(); + } + // 如果数据库连接对象不为null,则关闭数据库连接,释放相关资源 + if (connection!= null) { + connection.close(); + } +>>>>>>> developer } catch (SQLException e) { // 如果关闭资源时发生错误,打印错误信息 e.printStackTrace(); } } +<<<<<<< HEAD /** * 打印当前数据库配置信息(用于调试) @@ -163,4 +238,6 @@ public class JDBCUtil { private static void logCloseConnection() { System.out.println("数据库连接已关闭。"); } +======= +>>>>>>> developer } diff --git a/Supermarket/src/com/lingnan/supermarket/utils/TimeAndOrder.java b/Supermarket/src/com/lingnan/supermarket/utils/TimeAndOrder.java index eb05f55..87d5101 100644 --- a/Supermarket/src/com/lingnan/supermarket/utils/TimeAndOrder.java +++ b/Supermarket/src/com/lingnan/supermarket/utils/TimeAndOrder.java @@ -7,6 +7,7 @@ import java.util.Random; public class TimeAndOrder { /** +<<<<<<< HEAD * 生成一个包含订单号和时间的字符串数组 * @param username 用户名,用于生成订单号 * @return 一个包含订单号和当前时间的字符串数组 @@ -40,10 +41,54 @@ public class TimeAndOrder { System.out.println(s[1]); // 返回包含订单号和时间的字符串数组 +======= + * 生成订单号和当前时间戳。 + * 订单号由用户名、随机数、当前时间戳和另一个随机数组成。 + * 时间戳格式为 "yyyy-MM-dd HH:mm:ss"。 + * + * @param username 用户名,用于生成订单号的一部分。 + * @return 返回一个字符串数组,包含订单号和当前时间戳。 + */ + public static String[] TimeAndOrder(String username) { + // 创建一个长度为2的字符串数组,用于存储订单号和时间戳 + String[] s = new String[2]; + + // 创建两个SimpleDateFormat对象,分别用于格式化日期和时间 + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 格式化时间为 "yyyy-MM-dd HH:mm:ss" + SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmss"); // 格式化时间为 "yyyyMMddHHmmss" + + // 获取当前时间的Calendar实例 + Calendar cal = Calendar.getInstance(); + + // 获取当前时间并格式化为字符串 + String date1 = sdf1.format(cal.getTime()); // 格式化时间为 "yyyy-MM-dd HH:mm:ss" + String date2 = sdf2.format(cal.getTime()); // 格式化时间为 "yyyyMMddHHmmss" + + // 创建一个随机数生成器 + Random random = new Random(); + + // 生成两个随机数 + int result1 = random.nextInt(10); // 生成0到9之间的随机数 + int result2 = random.nextInt(10); // 生成0到9之间的随机数 + + // 生成订单号:用户名 + 随机数 + 时间戳 + 随机数 + s[0] = username + result1 + date2 + result2; + + // 将当前时间戳存入数组的第二个元素 + s[1] = date1; + + // 打印订单号和时间戳(用于调试) + System.out.println(s[0]); // 打印订单号 + System.out.println(s[1]); // 打印时间戳 + + // 返回包含订单号和时间戳的字符串数组 + +>>>>>>> developer return s; } /** +<<<<<<< HEAD * 获取当前日期(不包含时间) * @return 当前日期的字符串(格式:yyyy-MM-dd) */ @@ -76,6 +121,24 @@ public class TimeAndOrder { private static void logMethodCall(String methodName) { // 模拟打印方法调用日志 System.out.println("Method " + methodName + " was called."); +======= + * 生成当前日期,格式为 "yyyy-MM-dd"。 + * + * @return 返回当前日期的字符串表示。 + */ + public static String yMdTime() { + // 创建一个SimpleDateFormat对象,用于格式化日期 + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); // 格式化日期为 "yyyy-MM-dd" + + // 获取当前时间的Calendar实例 + Calendar cal = Calendar.getInstance(); + + // 获取当前日期并格式化为字符串 + String date = sdf1.format(cal.getTime()); // 格式化日期为 "yyyy-MM-dd" + + // 返回当前日期的字符串表示 + return date; +>>>>>>> developer } } diff --git a/Supermarket/src/com/lingnan/supermarket/view/InView.java b/Supermarket/src/com/lingnan/supermarket/view/InView.java index 4845449..69d994a 100644 --- a/Supermarket/src/com/lingnan/supermarket/view/InView.java +++ b/Supermarket/src/com/lingnan/supermarket/view/InView.java @@ -43,15 +43,29 @@ import com.lingnan.supermarket.utils.SendQQMailUtil; import com.lingnan.supermarket.utils.TimeAndOrder; import com.lingnan.supermarket.view.ProdCatalogView.MyItemListener; +<<<<<<< HEAD public class InView extends JPanel implements ActionListener{ //上面 private JPanel toolBarPanel; +======= +/** + * 用于显示进货系统的界面。 + * 包含进货系统的各种操作按钮、搜索框、表格等组件。 + */ +public class InView extends JPanel implements ActionListener { + + // 顶部工具栏面板 + private JPanel toolBarPanel; + + // 搜索面板 +>>>>>>> developer private JPanel searchPanel; private JLabel nameLabel,locationLabel; private JTextField nameSearchTF; +<<<<<<< HEAD private JButton searchBtn,StockBtn,exitBtn; private JPanel opePanel; @@ -70,10 +84,35 @@ public class InView extends JPanel implements ActionListener{ private static Vector v = new Vector(); +======= + private JButton searchBtn, StockBtn, exitBtn; + + // 操作面板 + private JPanel opePanel; + private JButton addBtn, updateBtn, deleteBtn, historyBtn, backBtn, detailBtn; + + // 中间表格区域 + private JScrollPane tableScrollPane; + private JTable inTable; + + // 底部面板 + private JPanel bottomPanel, bottomPanelLeft, bottomPanelRight; + private JLabel countInfoLabel, countInfoLabel2; + + // 缓冲区对象 + private Buffer Buffer; + private BufferImpl BufferImpl; + + // 商品向量 + private static Vector v = new Vector(); + + // 状态下拉框 +>>>>>>> developer private JComboBox combo; private String[] status ={"全部","已入库","待入库","已取消"}; private int catalog; +<<<<<<< HEAD private JFrame jFrame; private User user; @@ -85,10 +124,30 @@ public class InView extends JPanel implements ActionListener{ private inOrderServiceImpl inOrderImpl; +======= + // 主窗口和用户信息 + private JFrame jFrame; + private User user; + + // 表格模型 + private InTableModel inTableModel; + + // 缓冲区实现类 + private BufferImpl bufferImpl = new BufferImpl(); + + // 标记从提醒那里来1是进货表,0是提醒过来的表 + private int mark; + + // 进货订单服务实现类 + private inOrderServiceImpl inOrderImpl; + + // 总价和行数 +>>>>>>> developer private Float allPrice; private int row; private String uname; +<<<<<<< HEAD public InView(JFrame jFrame,User user,Vector v,int mark) { this.setLayout(new BorderLayout()); this.jFrame = jFrame; @@ -224,10 +283,126 @@ public class InView extends JPanel implements ActionListener{ } +======= + //构造函数 + + public InView(JFrame jFrame, User user, Vector v, int mark) { + this.setLayout(new BorderLayout()); // 设置布局为BorderLayout + this.jFrame = jFrame; // 设置主窗口 + this.user = user; // 设置用户信息 + // 获得进货缓冲区的保存的货物并删除缓冲区 + this.v = bufferImpl.allInBuffer(); // 从缓冲区获取商品数据 + bufferImpl.DelAllInBuffer(); // 清空缓冲区 + + this.mark = mark; // 设置标记 + System.out.println("mark=" + mark); // 打印标记值 + uname = user.getUsername(); // 获取用户名 + initView(); // 初始化界面 + } + + // 初始化界面组件。 + private void initView() { + toolBarPanel = new JPanel(new BorderLayout()); // 创建顶部工具栏面板 + + searchPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建搜索面板 + nameLabel = new JLabel("订单号"); // 创建订单号标签 + nameSearchTF = new JTextField(20); // 创建订单号搜索文本框 + searchBtn = new JButton(new ImageIcon("static\\icon\\search.png")); // 创建搜索按钮 + searchBtn.addActionListener(this); // 为搜索按钮添加事件监听器 + locationLabel = new JLabel("当前位置>进货系统"); // 创建位置标签 + locationLabel.setFont(new FontUtil().userFont); // 设置字体 + locationLabel.setForeground(new Color(18, 150, 219)); // 设置颜色 + + combo = new JComboBox(status); // 创建状态下拉框 + combo.addItemListener(new MyItemListener()); // 为下拉框添加事件监听器 + + opePanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建操作面板 + addBtn = new JButton(new ImageIcon("static\\icon\\add.png")); // 创建添加按钮 + updateBtn = new JButton(new ImageIcon("static\\icon\\change.png")); // 创建更新按钮 + deleteBtn = new JButton(new ImageIcon("static\\icon\\delete.png")); // 创建删除按钮 + historyBtn = new JButton(new ImageIcon("static\\icon\\history.png")); // 创建历史记录按钮 + backBtn = new JButton(new ImageIcon("static\\icon\\back.png")); // 创建返回按钮 + detailBtn = new JButton(new ImageIcon("static\\icon\\detail.png")); // 创建详情按钮 + + addBtn.addActionListener(this); // 为添加按钮添加事件监听器 + updateBtn.addActionListener(this); // 为更新按钮添加事件监听器 + deleteBtn.addActionListener(this); // 为删除按钮添加事件监听器 + historyBtn.addActionListener(this); // 为历史记录按钮添加事件监听器 + backBtn.addActionListener(this); // 为返回按钮添加事件监听器 + detailBtn.addActionListener(this); // 为详情按钮添加事件监听器 + + backBtn.setVisible(false); // 隐藏返回按钮 + detailBtn.setVisible(false); // 隐藏详情按钮 + + opePanel.add(addBtn); // 添加添加按钮到操作面板 + opePanel.add(backBtn); // 添加返回按钮到操作面板 + opePanel.add(detailBtn); // 添加详情按钮到操作面板 + opePanel.add(updateBtn); // 添加更新按钮到操作面板 + opePanel.add(deleteBtn); // 添加删除按钮到操作面板 + opePanel.add(historyBtn); // 添加历史记录按钮到操作面板 + + searchPanel.add(locationLabel); // 添加位置标签到搜索面板 + searchPanel.add(nameLabel); // 添加订单号标签到搜索面板 + searchPanel.add(nameSearchTF); // 添加订单号搜索文本框到搜索面板 + searchPanel.add(searchBtn); // 添加搜索按钮到搜索面板 + searchPanel.add(combo); // 添加状态下拉框到搜索面板 + + toolBarPanel.add(searchPanel, "West"); // 将搜索面板添加到工具栏面板的西侧 + toolBarPanel.add(opePanel, "East"); // 将操作面板添加到工具栏面板的东侧 + + // 中间表 + inTableModel = new InTableModel(v); // 创建表格模型 + + inTable = new JTable(inTableModel); // 创建表格 + inTable.setFont(FontUtil.tableFont); // 设置表格字体 + inTable.setRowHeight(50); // 设置表格行高 + tableScrollPane = new JScrollPane(inTable); // 创建表格滚动面板 + + allPrice = inTableModel.getAllPrice(); // 获取总价 + row = inTableModel.getRowCount(); // 获取行数 + + // 下面 + bottomPanelLeft = new JPanel(new FlowLayout(FlowLayout.RIGHT)); // 创建底部左侧面板 + countInfoLabel = new JLabel("商品种类:" + row + ",总价:" + allPrice); // 创建商品种类和总价标签 + bottomPanelLeft.add(countInfoLabel); // 将标签添加到底部左侧面板 + + bottomPanelRight = new JPanel(new FlowLayout(FlowLayout.LEFT)); // 创建底部右侧面板 + StockBtn = new JButton(new ImageIcon("static\\icon\\stock.png")); // 创建结账按钮 + exitBtn = new JButton(new ImageIcon("static\\icon\\exit.png")); // 创建退出按钮 + StockBtn.addActionListener(this); // 为结账按钮添加事件监听器 + exitBtn.addActionListener(this); // 为退出按钮添加事件监听器 + bottomPanelRight.add(StockBtn); // 将结账按钮添加到底部右侧面板 + bottomPanelRight.add(exitBtn); // 将退出按钮添加到底部右侧面板 + + bottomPanel = new JPanel(new BorderLayout()); // 创建底部面板 + bottomPanel.add(bottomPanelRight, "East"); // 将底部右侧面板添加到底部面板的东侧 + bottomPanel.add(bottomPanelLeft, "West"); // 将底部左侧面板添加到底部面板的西侧 + + this.add(toolBarPanel, "North"); // 将工具栏面板添加到顶部 + this.add(tableScrollPane, "Center"); // 将表格滚动面板添加到中间 + this.add(bottomPanel, "South"); // 将底部面板添加到底部 + + if (mark == 1) { // 判断是否从提醒那里过来的 + refreshBuffer(v); // 刷新缓冲区 + } else if (mark == 0) { + InOrderRecord(); // 调出进货订单表 + } + + setVisible(true); // 设置可见 + } + //获取商品数量 + public static Vector getVector() { + return v; + } + + //处理状态下拉框的选项变化 + +>>>>>>> developer public class MyItemListener implements ItemListener { @Override public void itemStateChanged(ItemEvent e) { +<<<<<<< HEAD JComboBox cb = (JComboBox) e.getSource(); String catalog1 = (String) cb.getSelectedItem(); if(catalog1.equals("全部")) @@ -240,15 +415,31 @@ public class InView extends JPanel implements ActionListener{ catalog=3; resultOfFindStatus(catalog); +======= + JComboBox cb = (JComboBox) e.getSource(); // 获取事件源 + String catalog1 = (String) cb.getSelectedItem(); // 获取选中的状态 + if (catalog1.equals("全部")) + catalog = 0; + else if (catalog1.equals("已入库")) + catalog = 1; + else if (catalog1.equals("待入库")) + catalog = 2; + else if (catalog1.equals("已取消")) + catalog = 3; +>>>>>>> developer } +<<<<<<< HEAD } //按钮组件隐藏 +======= + //按钮组件隐藏。 +>>>>>>> developer public void OrderView() { backBtn.setVisible(true); detailBtn.setVisible(true); @@ -258,6 +449,7 @@ public class InView extends JPanel implements ActionListener{ historyBtn.setVisible(false); } +<<<<<<< HEAD public void resultOfNumber(String iNumber) { this.mark=0; @@ -270,6 +462,21 @@ public class InView extends JPanel implements ActionListener{ OrderView(); } +======= + //根据订单号查询结果 + public void resultOfNumber(String iNumber) { + this.mark = 0; // 设置标记为0 + InOrderTM inOrderTM = new InOrderTM(); // 创建进货订单表格模型 + inOrderTM.resultOfNumber(iNumber); // 根据订单号查询结果 + inTable.setModel(inOrderTM); // 设置表格模型 + bottomPanelLeft.removeAll(); // 清空底部左侧面板 + countInfoLabel = new JLabel("共" + inOrderTM.getRowCount() + "条记录"); // 创建记录数标签 + bottomPanelLeft.add(countInfoLabel); // 将标签添加到底部左侧面板 + OrderView(); // 调用OrderView方法 + } + + //根据状态查询结果 +>>>>>>> developer public void resultOfFindStatus(int catalog) { this.mark=0; InOrderTM inOrderTM = new InOrderTM(); @@ -281,6 +488,7 @@ public class InView extends JPanel implements ActionListener{ OrderView(); } +<<<<<<< HEAD /*刷新*/ public void refreshBuffer(Vector v) { @@ -336,10 +544,45 @@ public class InView extends JPanel implements ActionListener{ +======= + //刷新缓冲区 + public void refreshBuffer(Vector v) { + this.mark = 1; // 设置标记为1 + + InTableModel inTableModel = new InTableModel(v); // 创建表格模型 + inTable.setModel(inTableModel); // 设置表格模型 + bottomPanelLeft.removeAll(); // 清空底部左侧面板 + countInfoLabel = new JLabel("商品种类:" + inTableModel.getRowCount() + ",总价:" + inTableModel.getAllPrice()); // 创建商品种类和总价标签 + bottomPanelLeft.add(countInfoLabel); // 将标签添加到底部左侧面板 + backBtn.setVisible(false); // 隐藏返回按钮 + detailBtn.setVisible(false); // 隐藏详情按钮 + historyBtn.setVisible(true); // 显示历史记录按钮 + updateBtn.setVisible(true); // 显示更新按钮 + addBtn.setVisible(true); // 显示添加按钮 + deleteBtn.setVisible(true); // 显示删除按钮 + + allPrice = inTableModel.getAllPrice(); // 获取总价 + row = inTableModel.getRowCount(); // 获取行数 + } + + //调出进货订单表。 + public void InOrderRecord() { + this.mark = 0; // 设置标记为0 + InOrderTM inOrderTM = new InOrderTM(); // 创建进货订单表格模型 + inOrderTM.allInOrderRecord(); // 查询所有进货订单记录 + inTable.setModel(inOrderTM); // 设置表格模型 + bottomPanelLeft.removeAll(); // 清空底部左侧面板 + countInfoLabel = new JLabel("共" + inOrderTM.getRowCount() + "条记录"); // 创建记录数标签 + bottomPanelLeft.add(countInfoLabel); // 将标签添加到底部左侧面板 + OrderView(); // 调用OrderView方法 + } + +>>>>>>> developer /*按钮监听时间*/ @Override public void actionPerformed(ActionEvent e) { +<<<<<<< HEAD BufferImpl = new BufferImpl();/*获得购物车*/ Object source = e.getSource(); @@ -511,3 +754,147 @@ public class InView extends JPanel implements ActionListener{ } } } +======= + BufferImpl = new BufferImpl(); // 获取购物车 + Object source = e.getSource(); // 获取事件源 + + if (searchBtn == source) { // 如果是搜索按钮 + String number = nameSearchTF.getText(); // 获取搜索的订单号 + System.out.println("搜索后的订单:" + number); // 打印订单号 + resultOfNumber(number); // 根据订单号查询结果 + } else if (addBtn == source) { // 如果是添加按钮 + InDialog outDialog = new InDialog(jFrame, v, user); // 创建添加对话框 + outDialog.setVisible(true); // 显示对话框 + v = outDialog.getVector(); // 获取更新后的商品向量 + refreshBuffer(v); // 刷新缓冲区 + } else if (updateBtn == source) { // 如果是更新按钮 + System.out.println("mark=" + mark); // 打印标记值 + int rowIndex = inTable.getSelectedRow(); // 获取选中的行 + if (rowIndex == -1) { // 如果没有选中行 + JOptionPane.showMessageDialog(this, "请选中一条进行更改数量"); // 提示用户选中行 + return; + } + // 进货表修改 + if (mark == 1) { + String id = (String) inTable.getValueAt(rowIndex, 0); // 获取选中行的ID + ChangeSumDialog changesumDialog = new ChangeSumDialog(jFrame, id, "In", v); // 创建更改数量对话框 + changesumDialog.setVisible(true); // 显示对话框 + v = changesumDialog.getVector(); // 获取更新后的商品向量 + System.out.println("更改状态后v.size=" + v.size()); // 打印商品向量大小 + refreshBuffer(v); // 刷新缓冲区 + } + // inOrder修改,修改状态 + else if (mark == 0) { + String iNumber = (String) inTable.getValueAt(rowIndex, 0); // 获取选中行的订单号 + String status = (String) inTable.getValueAt(rowIndex, 4); // 获取选中行的状态 + if (status.equals("已入库")) { // 如果状态是已入库 + JOptionPane.showMessageDialog(this, "订单上的货物已入库无法修改状态", "提示", JOptionPane.INFORMATION_MESSAGE); // 提示用户无法修改状态 + return; + } + + ChangeStatusDialog changeStatusDialog = new ChangeStatusDialog(jFrame, iNumber, status); // 创建更改状态对话框 + changeStatusDialog.setVisible(true); // 显示对话框 + MainView.refreshRemind(); // 刷新提醒 + HomeView.refreshHome(); // 刷新主页 + InOrderRecord(); // 调出进货订单表 + } + } else if (deleteBtn == source) { // 如果是删除按钮 + int rowIndex = inTable.getSelectedRow(); // 获取选中的行 + if (rowIndex == -1) { // 如果没有选中行 + JOptionPane.showMessageDialog(this, "请选中一条"); // 提示用户选中行 + return; + } + + /* 删除进货表的 */ + if (mark == 1) { + System.out.println("删除进货表"); // 打印日志 + String id = (String) inTable.getValueAt(rowIndex, 0); // 获取选中行的ID + int select = JOptionPane.showConfirmDialog(this, "是否删除id为" + id + "的记录", "提示", JOptionPane.YES_NO_OPTION); // 提示用户确认删除 + if (select == JOptionPane.YES_OPTION) { // 如果用户选择是 + for (int i = 0; i < v.size(); i++) { // 遍历商品向量 + System.out.println("开始删除"); // 打印日志 + if (v.elementAt(i).getId().equals(id)) { // 如果找到对应的商品 + v.remove(i); // 删除商品 + JOptionPane.showMessageDialog(this, "删除成功", "提示", JOptionPane.INFORMATION_MESSAGE); // 提示用户删除成功 + break; + } + } + refreshBuffer(v); // 刷新缓冲区 + } + } + // 删除进货订单 + else if (mark == 0) { + System.out.println("删除订单表"); // 打印日志 + String iNumber = (String) inTable.getValueAt(rowIndex, 0); // 获取选中行的订单号 + int select = JOptionPane.showConfirmDialog(this, "是否删除订单为" + iNumber + "的记录", "提示", JOptionPane.YES_NO_OPTION); // 提示用户确认删除 + if (select == JOptionPane.YES_OPTION) { // 如果用户选择是 + System.out.println("iNumber=" + iNumber); // 打印订单号 + inOrderImpl = new inOrderServiceImpl(); // 创建进货订单服务实现类 + inOrderImpl.deleteInOrder(iNumber); // 删除订单 + JOptionPane.showMessageDialog(this, "删除成功", "提示", JOptionPane.INFORMATION_MESSAGE); // 提示用户删除成功 + InOrderRecord(); // 调出进货订单表 + } + } + } else if (historyBtn == source) { // 如果是历史记录按钮 + InOrderRecord(); // 调出进货订单表 + } else if (backBtn == source) { // 如果是返回按钮 + if (mark == 0) + refreshBuffer(v); // 刷新缓冲区 + else if (mark == 2) + InOrderRecord(); // 调出进货订单表 + } else if (detailBtn == source) { // 如果是详情按钮 + int rowIndex = inTable.getSelectedRow(); // 获取选中的行 + if (rowIndex == -1) { // 如果没有选中行 + JOptionPane.showMessageDialog(this, "请选中一条查看订单详细信息"); // 提示用户选中行 + return; + } + String iNumber = (String) inTable.getValueAt(rowIndex, 0); // 获取选中行的订单号 + System.out.println("详情订单号为=" + iNumber); // 打印订单号 + InRecord(iNumber); // 调出进货记录表 + } else if (StockBtn == source) { // 如果是结账按钮 + refreshBuffer(v); // 刷新缓冲区 + + if (v.size() == 0) { // 如果购物车为空 + JOptionPane.showMessageDialog(null, "您的进货页面为空", "提示", JOptionPane.YES_OPTION); // 提示用户购物车为空 + } else { // 如果购物车不为空 + int res = JOptionPane.showConfirmDialog(null, "进价总金额:" + allPrice + "元\r\n负责人:" + uname + "\r\n发送邮件至 re@qq.com", "提交订单", JOptionPane.YES_NO_OPTION); // 提示用户确认提交订单 + if (res == JOptionPane.YES_OPTION) { // 如果用户选择是 + /* 获得时间和订单号,s[0]为订单号,s[1]为时间 */ + String[] s = TimeAndOrder.TimeAndOrder(uname); // 获取时间和订单号 + + /* 往订单表插入一条记录 */ + inOrderServiceImpl inOrderImpl = new inOrderServiceImpl(); // 创建进货订单服务实现类 + inOrderImpl.InsertInOrder(s[0], allPrice, s[1], uname, 2); // 插入订单记录 + + /* 往inRecord表添加数据 */ + inRecordServiceImpl inRecordImpl = new inRecordServiceImpl(); // 创建进货记录服务实现类 + for (Production p : v) { // 遍历商品向量 + inRecordImpl.insertInRecord(s[0], p); // 插入进货记录 + } + + /* 生成订单文本 */ + CreateOrder createOrder = new CreateOrder(); // 创建订单生成工具类 + String OrderText = createOrder.CreateOrder(v, s[0], s[1], allPrice, uname); // 生成订单文本 + try { // 发送邮件 + SendQQMailUtil QQEmail = new SendQQMailUtil("cwfeng5@qq.com", "wlcinslohrgpdiac", "1912638153@qq.com", "@新民超市进货需求申请", OrderText); // 创建邮件发送工具类 + } catch (MessagingException e1) { // 捕获异常 + e1.printStackTrace(); // 打印异常信息 + } + v = new Vector(); // 清空商品向量 + refreshBuffer(v); // 刷新缓冲区 + MainView.refreshRemind(); // 刷新提醒 + JOptionPane.showConfirmDialog(null, "发送邮件成功\r\n订单号:" + s[0] + "\r\n负责人:" + uname, "提示", JOptionPane.YES_OPTION); // 提示用户发送邮件成功 + } + + } + } else if (exitBtn == source) { // 如果是退出按钮 + int res = JOptionPane.showConfirmDialog(null, "确定退出并清空购物车吗", "结账", JOptionPane.YES_NO_OPTION); // 提示用户确认退出 + if (res == JOptionPane.YES_OPTION) { // 如果用户选择是 + v = new Vector(); // 清空商品向量 + refreshBuffer(v); // 刷新缓冲区 + JOptionPane.showConfirmDialog(null, "退出成功", "提示", JOptionPane.PLAIN_MESSAGE); // 提示用户退出成功 + } + } + } +} +>>>>>>> developer