package com.lingnan.supermarket.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; import java.util.Date; import java.util.Vector; import com.lingnan.supermarket.dao.outOrderService; import com.lingnan.supermarket.dto.InOrder; import com.lingnan.supermarket.dto.OutOrder; import com.lingnan.supermarket.utils.JDBCUtil; // 实现outOrderService接口--用于处理与出库订单相关的数据访问操作 public class outOrderServiceImpl implements outOrderService { // 查询所有出库订单信息,并按照日期降序排列返回 @Override public Vector findAllOutOrder() { // 存储查询到的所有出库订单信息的向量集合 Vector outOrders = new Vector(); // 获取数据库连接 Connection conn = JDBCUtil.getConn(); PreparedStatement preparedStatement = null; ResultSet resultSet = null; // 从OutOrder表中查询所有记录,并按oDate字段降序排序 String SQL = "select * from OutOrder order by oDate desc"; try { // 根据SQL语句创建预编译的Statement对象 preparedStatement = conn.prepareStatement(SQL); // 执行查询操作 resultSet = preparedStatement.executeQuery(); // 遍历结果集,将每条记录封装成OutOrder对象,并添加到outOrders集合中 while (resultSet.next()) { OutOrder outOrder = new OutOrder(); outOrder.setoNumber(resultSet.getString("oNumber")); outOrder.setAllOutPrice(resultSet.getFloat("allOutPrice")); outOrder.setoDate(resultSet.getDate("oDate")); outOrder.setPrincipal(resultSet.getString("principal")); outOrders.add(outOrder); } } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭结果集、预编译语句以及数据库连接,释放相关资源 JDBCUtil.close(resultSet, preparedStatement, conn); } return outOrders; } // 根据订单编号查询对应的出库订单信息 @Override public OutOrder findByIdOutOrder(String oNumber) { // 用于存储查询到的出库订单信息的对象 OutOrder outOrder = new OutOrder(); // 获取数据库连接 Connection conn = JDBCUtil.getConn(); PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { // 根据订单编号查询对应的出库订单记录 preparedStatement = conn.prepareStatement("select * from outOrder where oNumber =?"); // 设置查询的订单编号 preparedStatement.setString(1, oNumber); // 执行查询操作 resultSet = preparedStatement.executeQuery(); // 如果结果集中有记录,说明找到了对应的订单,则将记录中的各字段值封装到outOrder对象中 if (resultSet.next()) { outOrder.setoNumber(resultSet.getString("oNumber")); outOrder.setAllOutPrice(resultSet.getFloat("allOutPrice")); outOrder.setoDate(resultSet.getDate("oDate")); outOrder.setPrincipal(resultSet.getString("principal")); } else { // 如果结果集中没有记录,说明没有找到该订单或订单不存在,返回null return null; } } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭结果集、预编译语句以及数据库连接,释放相关资源 JDBCUtil.close(resultSet, preparedStatement, conn); } return outOrder; } // 向数据库中添加一条出库订单记录 @Override public int addOutOrder(String oNumber, float allOutPrice) { int flag = 0; // 获取当前系统时间戳,用于作为出库订单的日期(oDate)字段值,表示订单创建时间 Timestamp oDate = new Timestamp(System.currentTimeMillis()); // 获取数据库连接 Connection conn = JDBCUtil.getConn(); PreparedStatement preparedStatement = null; try { // 创建预编译的SQL插入语句,向outOrder表中插入一条记录 preparedStatement = conn.prepareStatement("insert into outOrder values (?,?,?,?)"); // 设置预编译语句中的参数,依次为订单编号、总出库价格、订单日期、负责人(此处写死为"a1",可能后续需要改进) preparedStatement.setString(1, oNumber); preparedStatement.setFloat(2, allOutPrice); preparedStatement.setTimestamp(3, oDate); preparedStatement.setString(4, "a1"); // 执行插入操作 preparedStatement.executeUpdate(); // 如果插入成功,将标志位flag设置为1,表示操作成功 flag = 1; } catch (SQLException e) { // 如果插入出现异常,将标志位flag设置为 -1,表示操作失败 flag = -1; e.printStackTrace(); } finally { // 关闭预编译语句以及数据库连接,释放相关资源 JDBCUtil.close(null, preparedStatement, conn); } return flag; } // 根据订单编号从数据库中删除对应的出库订单记录 @Override public int deleteOutOrder(String oNumber) { int flag = 0; // 获取数据库连接 Connection conn = JDBCUtil.getConn(); PreparedStatement preparedStatement = null; try { // 创建预编译的SQL删除语句,根据订单编号(oNumber)删除对应的出库订单记录 preparedStatement = conn.prepareStatement("delete from outOrder where oNumber =?"); // 设置预编译语句中的参数,即要删除的订单编号 preparedStatement.setString(1, oNumber); // 执行删除操作 preparedStatement.executeUpdate(); // 如果删除成功,将标志位flag设置为1,表示操作成功 flag = 1; } catch (SQLException e) { // 如果删除出现异常,将标志位flag设置为 -1,表示操作失败 flag = -1; e.printStackTrace(); } finally { // 关闭预编译语句以及数据库连接,释放相关资源 JDBCUtil.close(null, preparedStatement, conn); } return flag; } // 获取指定日期的今日出库金额总和(此处方法名可能有点混淆,从代码逻辑看是获取指定日期的出库金额总和) public Float TodayOutPrice(String date) { // 创建一个InOrder对象 InOrder inOrder = new InOrder(); // 获取数据库连接 Connection conn = JDBCUtil.getConn(); PreparedStatement preparedStatement = null; ResultSet resultSet = null; // 用于存储查询到的今日出库金额总和,初始为0 Float allInPrice = (float) 0; try { // 通过求和函数查询指定日期范围内的总出库价格 preparedStatement = conn.prepareStatement("select sum(allOutPrice) from outOrder where oDate>=? and oDate<=date_add(?,interval 1 day)"); // 设置两个参数均为传入的日期值,用于限定查询的日期范围 preparedStatement.setString(1, date); preparedStatement.setString(2, date); // 执行查询操作 resultSet = preparedStatement.executeQuery(); // 如果结果集中有记录,说明查询到了对应的金额数据,则将其取出赋值给allInPrice变量 if (resultSet.next()) { allInPrice = resultSet.getFloat("sum(allOutPrice)"); } } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭结果集、预编译语句以及数据库连接,释放相关资源 JDBCUtil.close(resultSet, preparedStatement, conn); } return allInPrice; } }