package cn.xh.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.sun.org.apache.xpath.internal.operations.Or;
import cn.xh.dao.OrdetrDao;
import cn.xh.domain.Book;
import cn.xh.domain.Category;
import cn.xh.domain.Order;
import cn.xh.domain.Orderitem;
import cn.xh.domain.User;
import cn.xh.util.JDBCUtil;
import sun.net.www.content.text.plain;
public class OrderDaoImpl implements OrdetrDao {
Connection connection = JDBCUtil.getConnection();
@Override
public void save(Order o) {
try {
PreparedStatement prepareStatement = connection.prepareStatement(
"insert into orders (ordernum,quantity,money,time,status,userId) values (?,?,?,?,?,?)");
prepareStatement.setString(1, o.getOrdernum());
prepareStatement.setInt(2, o.getQuantity());
prepareStatement.setDouble(3, o.getMoney());
prepareStatement.setString(4, o.getTime());
prepareStatement.setInt(5, o.getStatus());
prepareStatement.setString(6, o.getUser().getId());
prepareStatement.executeUpdate();
// 保存订单项信息
List<Orderitem> items = o.getItems();
for (Orderitem item : items) {
PreparedStatement preparedStatement2 = connection.prepareStatement(
"insert into orderitems (id,quantity,price,book_id,ordernum) values(?,?,?,?,?)");
preparedStatement2.setString(1, item.getId());
preparedStatement2.setInt(2, item.getQuantity());
preparedStatement2.setDouble(3, item.getPrice());
preparedStatement2.setString(4, item.getBook().getBook_id());
preparedStatement2.setString(5, item.getOrdernum());
preparedStatement2.executeUpdate();
addXiaonumber(item.getBook().getBook_id());
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void addXiaonumber(String book_id) {
try {
Connection connection = JDBCUtil.getConnection();
PreparedStatement prepareStatement = connection.prepareStatement(
"update bookdb set book_xiaonumber = book_xiaonumber+1,book_kunumber=book_kunumber-1 where book_id=?");
prepareStatement.setString(1, book_id);
prepareStatement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public Order findOrderByNum(String ordernum) {
try {
PreparedStatement prepareStatement = connection.prepareStatement("select * from orders where ordernum=?");
prepareStatement.setString(1, ordernum);
ResultSet rs = prepareStatement.executeQuery();
Order order = new Order();
if (rs.next()) {
order.setOrdernum(rs.getString("ordernum"));
order.setQuantity(rs.getInt("quantity"));
order.setMoney(rs.getDouble("money"));
order.setTime(rs.getString("time"));
order.setStatus(rs.getInt("status"));
User user = findUserByid(rs.getString("userId"));
order.setUser(user);
List<Orderitem> items = finOrdersItemsByNum(rs.getString("ordernum"));
order.setItems(items);
}
return order;
} catch (Exception e) {
e.printStackTrace();
}
throw new RuntimeException("");
}
// 根据订单id找到订单项
private List<Orderitem> finOrdersItemsByNum(String ordernum) {
try {
PreparedStatement prepareStatement = connection
.prepareStatement("select * from orderitems where ordernum=?");
prepareStatement.setString(1, ordernum);
ResultSet rs = prepareStatement.executeQuery();
List<Orderitem> list = new ArrayList<Orderitem>();
while (rs.next()) {
Orderitem item = new Orderitem();
item.setOrdernum(ordernum);
Book book = findBookById(rs.getString("book_id"));
item.setBook(book);
item.setId(rs.getString("id"));
item.setPrice(rs.getDouble("price"));
item.setQuantity(rs.getInt("quantity"));
list.add(item);
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
throw new RuntimeException("");
}
// 根据书籍id找到书籍信息
private Book findBookById(String book_id) {
try {
PreparedStatement prepareStatement = connection.prepareStatement("select * from bookdb where book_id=?");
prepareStatement.setString(1, book_id);
ResultSet rs = prepareStatement.executeQuery();
Book book = new Book();
if (rs.next()) {
book.setBook_id(rs.getString("book_id"));
book.setBook_name(rs.getString("book_name"));
book.setBook_author(rs.getString("book_author"));
book.setBook_press(rs.getString("book_press"));
Category category = findCategoryById(rs.getString("book_category"));
book.setCategory(category);
book.setFilename(rs.getString("filename"));
book.setPath(rs.getString("path"));
book.setBook_desc(rs.getString("book_desc"));
book.setBook_kunumber(rs.getInt("book_kunumber"));
book.setBook_xiaonumber(rs.getInt("book_xiaonumber"));
book.setBook_price(rs.getDouble("book_price"));
return book;
}
} catch (Exception e) {
e.printStackTrace();
}
throw new RuntimeException("");
}
// 根据书籍分类的id找到书籍分类信息
private Category findCategoryById(String category_id) {
Category category = new Category();
try {
PreparedStatement preparedStatement = connection
.prepareStatement("select * from category where category_id=?");
preparedStatement.setString(1, category_id);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
category.setCategory_id(resultSet.getString("category_id"));
category.setCategory_name(resultSet.getString("category_name"));
category.setCategory_desc(resultSet.getString("category_desc"));
return category;
}
} catch (Exception e) {
e.printStackTrace();
}
throw new RuntimeException("");
}
// 根据id找到用户信息
private User findUserByid(String user_id) {
try {
User user = new User();
PreparedStatement prepareStatement = connection.prepareStatement("select * from user where user_id=?");
prepareStatement.setString(1, user_id);
ResultSet rs = prepareStatement.executeQuery();
if (rs.next()) {
user.setId(rs.getString("user_id"));
user.setUsername(rs.getString("user_username"));
}
return user;
} catch (SQLException e) {
e.printStackTrace();
}
throw new RuntimeException("");
}
@Override
public List<Order> findOrdersByUser(String userId) {
try {
PreparedStatement prepareStatement = connection
.prepareStatement("select * from orders where userId = ? order by ordernum desc");
prepareStatement.setString(1, userId);
ResultSet rs = prepareStatement.executeQuery();
List<Order> list = new ArrayList<Order>();
while (rs.next()) {
Order order = new Order();
List<Orderitem> items = finOrdersItemsByNum(rs.getString("ordernum"));
order.setItems(items);
order.setMoney(rs.getDouble("money"));
order.setOrdernum(rs.getString("ordernum"));
order.setQuantity(rs.getInt("quantity"));
order.setStatus(rs.getInt("status"));
order.setTime(rs.getString("time"));
order.setUser(findUserByid(userId));
list.add(order);
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
throw new RuntimeException("");
}
@Override
public List<Order> findOrders() {
try {
PreparedStatement prepareStatement = connection
.prepareStatement("select * from orders order by ordernum desc");
ResultSet rs = prepareStatement.executeQuery();
List<Order> list = new ArrayList<Order>();
while (rs.next()) {
Order order = new Order();
List<Orderitem> items = finOrdersItemsByNum(rs.getString("ordernum"));
order.setItems(items);
order.setMoney(rs.getDouble("money"));
order.setOrdernum(rs.getString("ordernum"));
order.setQuantity(rs.getInt("quantity"));
order.setStatus(rs.getInt("status"));
order.setTime(rs.getString("time"));
order.setUser(findUserByid(rs.getString("userId")));
list.add(order);
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
throw new RuntimeException("");
}
@Override
public void faHuo(String ordernum) {
try {
PreparedStatement prepareStatement = connection
.prepareStatement("update orders set status = 1 where ordernum=?");
prepareStatement.setString(1, ordernum);
prepareStatement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
}