Javawebservlet+Mysql实现的化妆品售卖系统
本系统为了解决化妆品单品类售卖的专一性,专门将电商的流程与化妆品品类结合,实现了细分化妆品小类的管理,更加高效便捷的实现化妆品的售卖
(文末查看完整源码)
实现功能截图
用户注册
首页
所有化妆品
商品信息
添加购物车
购物车列表
结算
新增收货地址
提交订单
付款
后台’
后台登录
系统管理
菜单管理
权限管理
管理员列表
业务管理
会员管理
商品管理
订单管理
修改密码
系统功能
本系统实现了以下功能:
1、注册登录
2、化妆品列表
3、化妆品详情
4、加入购物车
5、购物车列表
6、地址管理
7、下单结算付款
8、后台登录
9、系统管理:权限管理/菜单管理/管理员列表
10、业务管理:会员管理/商品管理/订单列表/修改密码
等
使用技术
数据库:mysql
开发工具:Idea(Myeclispe、Eclipse也可以)
知识点:servlet
项目结构
代码
java端
实体类
Address.java
package com.leoshop.beans;
public class Address {
private int addressId;
private String sendPlace;
private String sendMan;
private String sendPhone;
private int userId;
public Address(int addressId, String sendPlace, String sendMan,
String sendPhone, int userId) {
super();
this.addressId = addressId;
this.sendPlace = sendPlace;
this.sendMan = sendMan;
this.sendPhone = sendPhone;
this.userId = userId;
}
public Address(String sendPlace, String sendMan, String sendPhone,
int userId) {
super();
this.sendPlace = sendPlace;
this.sendMan = sendMan;
this.sendPhone = sendPhone;
this.userId = userId;
}
public Address() {
super();
}
public int getAddressId() {
return addressId;
}
public void setAddressId(int addressId) {
this.addressId = addressId;
}
public String getSendPlace() {
return sendPlace;
}
public void setSendPlace(String sendPlace) {
this.sendPlace = sendPlace;
}
public String getSendMan() {
return sendMan;
}
public void setSendMan(String sendMan) {
this.sendMan = sendMan;
}
public String getSendPhone() {
return sendPhone;
}
public void setSendPhone(String sendPhone) {
this.sendPhone = sendPhone;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
@Override
public String toString() {
return "Address [addressId=" + addressId + ", sendPlace=" + sendPlace
+ ", sendMan=" + sendMan + ", sendPhone=" + sendPhone
+ ", userId=" + userId + "]";
}
}
Cart.java
package com.leoshop.beans;
public class Cart {
private int cartId;
private int productId;
private int saleCount;
private int userId;
@Override
public String toString() {
return "Cart [cardId=" + cartId + ", productId=" + productId
+ ", saleCount=" + saleCount + ", userId=" + userId + "]";
}
public Cart( int productId, int saleCount, int userId) {
super();
this.productId = productId;
this.saleCount = saleCount;
this.userId = userId;
}
public Cart() {
super();
}
public int getCartId() {
return cartId;
}
public void setCartId(int cardId) {
this.cartId = cardId;
}
public int getProductId() {
return productId;
}
public void setProductId(int productId) {
this.productId = productId;
}
public int getSaleCount() {
return saleCount;
}
public void setSaleCount(int saleCount) {
this.saleCount = saleCount;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
}
Dao层
LeoShopDaoImpl.java
package com.leoshop.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import com.leoshop.beans.Address;
import com.leoshop.beans.Cart;
import com.leoshop.beans.Comment;
import com.leoshop.beans.CommentInfo;
import com.leoshop.beans.CommentMsg;
import com.leoshop.beans.CriteriaManager;
import com.leoshop.beans.CriteriaProduct;
import com.leoshop.beans.CriteriaUser;
import com.leoshop.beans.Manager;
import com.leoshop.beans.ManagerPermission;
import com.leoshop.beans.MapPager;
import com.leoshop.beans.Menu;
import com.leoshop.beans.OrderBody;
import com.leoshop.beans.OrderHead;
import com.leoshop.beans.OrderMsg;
import com.leoshop.beans.OrderProduct;
import com.leoshop.beans.Orders;
import com.leoshop.beans.Pager;
import com.leoshop.beans.Product;
import com.leoshop.beans.User;
import com.leoshop.dao.LeoShopDao;
import com.leoshop.utils.JDBCTools;
public class LeoShopDaoImpl extends BaseDaoImpl implements LeoShopDao {
@Override
public List<Product> getAll() {
String sql = "select PRODUCT_ID productId,PRODUCT_NAME productName,PRODUCT_PRICE productPrice,STORE_NUM storeNum,PRODUCT_IMAGE_PATH productImagePath from product";
return super.getObjectForList(Product.class, sql);
}
@Override
public List<Address> getAddressWithUserId(int userId) {
String sql = "SELECT ADDRESS_ID addressId,SEND_PLACE sendPlace,SEND_MAN sendMan,"
+ "SEND_PHONE sendPhone FROM ADDRESS WHERE USER_ID = ?";
return super.getObjectForList(Address.class, sql, userId);
}
@Override
public Address getAddressById(int addressId) {
String sql = "SELECT USER_ID userId,SEND_PLACE sendPlace,SEND_MAN sendMan,SEND_PHONE sendPhone,ADDRESS_ID addressId FROM address WHERE ADDRESS_ID=?";
return super.getObject(Address.class, sql, addressId);
}
@Override
public int addAddress(Address address) {
String sql = "INSERT INTO address(SEND_MAN,SEND_PLACE,SEND_PHONE,USER_ID)VALUES(?,?,?,?)";
return super.updateGetGeneratedKeys(sql, address.getSendMan(), address.getSendPlace(), address.getSendPhone(),
address.getUserId());
}
@Override
public void deleteAddressById(int addressId) {
String sql = "DELETE FROM address WHERE ADDRESS_ID=?";
super.update(sql, addressId);
}
@Override
public void updateAddressById(Address address) {
String sql = "UPDATE address SET SEND_PLACE=?,SEND_MAN=?,SEND_PHONE=? WHERE ADDRESS_ID=?";
super.update(sql, address.getSendPlace(), address.getSendMan(), address.getSendPhone(), address.getAddressId());
}
@Override
public Pager<Address> getAddressPager(int currPage, int pageSize, int userId) {
String datesql = "SELECT ADDRESS_ID addressId,SEND_PLACE sendPlace,SEND_MAN sendMan,SEND_PHONE sendPhone,USER_ID userId FROM address WHERE USER_ID=?";
String datecountsql = "SELECT COUNT(*) FROM address WHERE USER_ID=?";
return super.getPager(Address.class, datecountsql, datesql, currPage, pageSize, userId);
}
@Override
public List<Cart> getCartForList(int userId) {
String sql = "SELECT CART_ID cartId,PRODUCT_ID productId,SALE_COUNT saleCount FROM cart WHERE USER_ID=?";
return super.getObjectForList(Cart.class, sql, userId);
}
@Override
public void updateCart(Cart cart) {
String sql = "UPDATE cart SET USER_ID=?,PRODUCT_ID=?,SALE_COUNT=? WHERE CART_ID=?";
super.update(sql, cart.getUserId(), cart.getProductId(), cart.getSaleCount(), cart.getCartId());
}
@Override
public Cart getCart(int cartId) {
String sql = "SELECT CART_ID cartId,PRODUCT_ID productId,SALE_COUNT saleCount,USER_ID userId FROM cart WHERE CART_ID=?";
return super.getObject(Cart.class, sql, cartId);
}
@Override
public void deleteCartById(int cartId) {
String sql = "DELETE FROM cart WHERE CART_ID=?";
super.update(sql, cartId);
}
@Override
public void deleteCartByUser(int userId) {
String sql = "DELETE FROM cart WHERE USER_ID=?";
super.update(sql, userId);
}
@Override
public int cartCount(int userId) {
String sql = "select count(*)from cart where user_id=" + userId;
return Integer.parseInt(super.getValue(sql).toString());
}
@Override
public Map<Cart, Product> getCartProductMap(int userId) {
String sqlCart = "SELECT CART_ID cartId,PRODUCT_ID productId,SALE_COUNT saleCount FROM cart WHERE USER_ID=?;";
String sqlProduct = "SELECT PRODUCT_STATUS productStatus,PRODUCT_ID productId,PRODUCT_NAME productName,PRODUCT_PRICE productPrice,PRODUCT_IMAGE_PATH productImagePath,STORE_NUM storeNum FROM product WHERE PRODUCT_ID=?;";
return super.getMapHandler(sqlCart, Cart.class, sqlProduct, Product.class, "PRODUCT_ID", userId);
}
@Override
public Map<Cart, Product> getCartProductMap(int userId, String[] cartIds) {
String strCartIds = "";
for (int i = 0; i < cartIds.length - 1; i++) {
strCartIds += "?,";
}
String sqlCart = "SELECT CART_ID cartId,PRODUCT_ID productId,SALE_COUNT saleCount "
+ "FROM cart WHERE CART_ID IN (" + strCartIds + "?) AND USER_ID=?";
String sqlProduct = "SELECT PRODUCT_STATUS productStatus,PRODUCT_ID productId,PRODUCT_NAME productName,PRODUCT_PRICE "
+ "productPrice,PRODUCT_IMAGE_PATH productImagePath,STORE_NUM storeNum FROM "
+ "product WHERE PRODUCT_ID=?";
Object[] sqlArray = new Object[cartIds.length + 1];
for (int i = 0; i < cartIds.length; i++) {
sqlArray[i] = cartIds[i];
}
sqlArray[sqlArray.length - 1] = userId;
return super.getMapHandler(sqlCart, Cart.class, sqlProduct, Product.class, "PRODUCT_ID", sqlArray);
}
@Override
public void deleteCartByUserCart(int userId, String[] cartIds) {
String strCartIds = "";
for (int i = 0; i < cartIds.length - 1; i++) {
strCartIds += "?,";
}
String sql = "DELETE FROM cart WHERE CART_ID IN (" + strCartIds + "?) AND USER_ID=?";
Object[] sqlArray = new Object[cartIds.length + 1];
for (int i = 0; i < cartIds.length; i++) {
sqlArray[i] = cartIds[i];
}
sqlArray[sqlArray.length - 1] = userId;
super.update(sql, sqlArray);
}
@Override
public List<CommentMsg> getCommentMsg(String orderNum, int userId) {
String sql = "SELECT a.orderId,a.productId,a.productName,a.productPrice,a.productImagePath,b.LEVEL level,b.CONTENT content,b.COMMENT_ID commentId FROM (SELECT orders.ORDER_ID orderId,orders.PRODUCT_ID productId,orders.PRODUCT_NAME productName,orders.PRODUCT_PRICE productPrice,product.PRODUCT_IMAGE_PATH productImagePath FROM orders,product WHERE orders.PRODUCT_ID=product.PRODUCT_ID AND ORDER_NUM=? AND orders.USER_ID=?) a LEFT JOIN comment b ON(a.orderId=b.ORDER_ID)";
return super.getObjectForList(CommentMsg.class, sql, orderNum, userId);
}
@Override
public void addComment(Comment comment) {
String sql = "INSERT INTO Comment (level,content,order_Id) VALUES (?,?,?)";
super.update(sql, comment.getLevel(), comment.getContent(), comment.getOrderId());
}
@Override
public Set<String> getOrderNum(int userId) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
Set<String> orderNums = new TreeSet<String>(new Comparator<String>(){
public int compare(String s1,String s2){
return s2.compareTo(s1);
}
});
conn = JDBCTools.getConnection();
String sql = "SELECT ORDER_NUM FROM orders WHERE VISIBLE=1 AND USER_ID=?";
ps = conn.prepareStatement(sql);
ps.setInt(1,userId);
rs = ps.executeQuery();
while(rs.next()){
orderNums.add(rs.getString("ORDER_NUM"));
}
return orderNums;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCTools.release(ps, null, rs);
}
return null;
}
@Override
public List<OrderProduct> getOrderProducts(String orderNum) {
String sql = "SELECT orders.PRODUCT_ID productId,orders.PRODUCT_NAME productName,orders.PRODUCT_PRICE productPrice,orders.SALE_COUNT saleCount,product.PRODUCT_IMAGE_PATH productImagePath FROM orders,product WHERE orders.PRODUCT_ID=product.PRODUCT_ID AND ORDER_NUM=?;";
List<OrderProduct> product = super.getObjectForList(OrderProduct.class, sql, orderNum);
return product;
}
@Override
public OrderMsg getOrderMsg(String orderNum, List<OrderProduct> product) {
String sql = "SELECT ord.ORDER_ID orderId,ord.ORDER_NUM orderNum,ord.ORDER_TIME orderTime,ord.ORDER_STATUS orderStatus,ord.NOTE note,ord.USER_ID userId,ord.SEND_PLACE sendPlace,ord.SEND_MAN sendMan,ord.SEND_PHONE sendPhone,com.LEVEL level FROM (SELECT * FROM orders WHERE ORDER_NUM=?) ord LEFT JOIN comment com ON (ord.ORDER_ID=com.ORDER_ID)";
OrderMsg ordermsg = super.getObject(OrderMsg.class, sql, orderNum);
ordermsg.setProduct(product);
return ordermsg;
}
@Override
public List<OrderMsg> getOrderMsgs(int userId) {
Set<String> orderNums = getOrderNum(userId);//根据用户ID获取所有未删除(可见的)订单编号(按时间先后排列,最近在前)
Iterator<String> it = orderNums.iterator();
List<OrderMsg> ordermsg = new ArrayList<OrderMsg>();
while(it.hasNext()){
String orderNum = it.next();
List<OrderProduct> product = getOrderProducts(orderNum);//根据订单编号获取其所有的商品集合
OrderMsg order = getOrderMsg(orderNum,product);//根据订单编号及其所有的商品集合获取该订单信息
ordermsg.add(order);
}
return ordermsg;
}
@Override
public int addOrders(Orders order) {
String sql = "INSERT INTO orders (ORDER_NUM,ORDER_TIME,ORDER_STATUS,NOTE,USER_ID,SEND_PLACE,"
+ "SEND_MAN,SEND_PHONE,PRODUCT_ID,PRODUCT_NAME,PRODUCT_PRICE,SALE_COUNT)"
+ "values(?,?,?,?,?,?,?,?,?,?,?,?)";
return super.updateGetGeneratedKeys(sql, order.getOrderNum(), order.getOrderTime(), order.getOrderStatus(),
order.getNote(), order.getUserId(), order.getSendPlace(), order.getSendMan(), order.getSendPhone(),
order.getProductId(), order.getProductName(), order.getProductPrice(), order.getSaleCount());
}
@Override
public int getOrderStatus(String orderNum) {
String sql = "SELECT DISTINCT ORDER_STATUS FROM orders WHERE ORDER_NUM=?";
return Integer.parseInt(super.getValue(sql, orderNum).toString());
}
@Override
public void changeOrderStatus(String orderNum, int status) {
String sql = "UPDATE orders SET ORDER_STATUS=? WHERE ORDER_NUM=?";
super.update(sql, status, orderNum);
}
@Override
public void changeOrderVisible(String orderNum, int status) {
String sql = "UPDATE orders SET VISIBLE=? WHERE ORDER_NUM=?";
super.update(sql, status, orderNum);
}
@Override
public Product getProduct(int productId) {
String sql = "SELECT PRODUCT_STATUS productStatus,PRODUCT_DESC productDesc,PRODUCT_ID productId,PRODUCT_NAME productName,PRODUCT_PRICE productPrice,"
+ "STORE_NUM storeNum,PRODUCT_IMAGE_PATH productImagePath" + " FROM product WHERE PRODUCT_ID = ? ";
return super.getObject(Product.class, sql, productId);
}
@Override
public void addProduct(Product product) {
String sql = "INSERT INTO product(PRODUCT_DESC,PRODUCT_STATUS,PRODUCT_NAME,PRODUCT_PRICE,STORE_NUM,PRODUCT_IMAGE_PATH)values(?,?,?,?,?,?)";
super.update(sql,product.getProductDesc(),product.getProductStatus(), product.getProductName(), product.getProductPrice(), product.getStoreNum(),
product.getProductImagePath());
}
@Override
public Pager<Product> getPager(int currPage, int pageSize) {
String sql1 = "select count(*) from product";
String sql2 = "SELECT productId,productName,productPrice,storeNum,sales,productImagePath,productDesc,productStatus FROM(" +
"SELECT p.PRODUCT_ID productId,PRODUCT_NAME productName,PRODUCT_PRICE productPrice,STORE_NUM storeNum," +
"sales,PRODUCT_IMAGE_PATH productImagePath,PRODUCT_DESC productDesc,PRODUCT_STATUS productStatus" +
" FROM product p left join(SELECT PRODUCT_ID,SUM(SALE_COUNT) sales" +
" FROM orders o left join comment c on o.ORDER_ID=c.ORDER_ID GROUP BY" +
" PRODUCT_ID) amount on p.PRODUCT_ID=amount.PRODUCT_ID ORDER BY sales DESC) info WHERE productStatus=1";
return super.getPager(Product.class, sql1, sql2, currPage, pageSize);
}
// 通过用户名获取用户
@Override
public User getUserByUsername(String username) {
String sql = "SELECT USER_ID userId,USERNAME username,PASSWORD password FROM user WHERE USERNAME=?";
return super.getObject(User.class, sql, username);
}
// 登录
@Override
public int userLogin(String username, String password) {
String sql = "SELECT USER_ID userId FROM user WHERE USERNAME=? AND PASSWORD=?";
int userId = 0;
try {
userId = super.getObject(User.class, sql, username, password).getUserId();
} catch (Exception e) {
System.out.println("未获取到与该用户名和密码完全匹配的userId");
}
return userId;
}
// 注册
@Override
public int userRegister(User u) {
String sql = "insert into user (username,password) values (?,?);";
return super.updateGetGeneratedKeys(sql, u.getUsername(), u.getPassword());
}
@Override
public User getUserById(int userId) {
String sql = "SELECT USER_STATUS userStatus,USER_ID userId,username,password,truename,phone,address FROM user WHERE USER_ID=?";
return super.getObject(User.class, sql, userId);
}
@Override
public void updateUserById(User user) {
String sql = "UPDATE user SET password=?,truename=?,phone=?,address=? WHERE USER_ID=?";
super.update(sql, user.getPassword(), user.getTruename(), user.getPhone(), user.getAddress(), user.getUserId());
}
@Override
public Pager<User> getUserPager(int currPage, int pageSize) {
String sqlForData = "SELECT USER_ID userId,USERNAME username,PASSWORD password,TRUENAME truename,PHONE phone,ADDRESS address FROM user";
String sqlForDataCount = "SELECT COUNT(*) FROM user";
return super.getPager(User.class, sqlForDataCount, sqlForData, currPage, pageSize);
}
@Override
public Pager<User> getUserPager(int currPage, int pageSize, CriteriaUser criteriaUser) {
String sqlForData = null;
String sqlForDataCount = null;
String cname = criteriaUser.getUsername();
boolean bname = cname.equals("%%") || cname == null;
String ctname = criteriaUser.getTruename();
boolean btname = ctname.equals("%%") || ctname == null;
String cphone = criteriaUser.getPhone();
boolean bphone = cphone.equals("%%") || cphone == null;
String caddress = criteriaUser.getAddress();
boolean baddress = caddress.equals("%%") || caddress == null;
List<Object> params = new ArrayList<Object>();
boolean flag = false;
if(bname&&btname&&bphone&&baddress){
sqlForData = "SELECT USER_STATUS userStatus,USER_ID userId,USERNAME username,PASSWORD password,TRUENAME truename,PHONE phone,"
+ "ADDRESS address FROM user";
sqlForDataCount = "SELECT COUNT(*) FROM user";
flag = true;
}else{
sqlForData = "SELECT USER_STATUS userStatus,USER_ID userId,USERNAME username,PASSWORD password,TRUENAME truename,PHONE phone,"
+ "ADDRESS address FROM user WHERE TRUE";
sqlForDataCount = "SELECT COUNT(*) FROM user WHERE TRUE";
if(!bname){
sqlForData += " AND USERNAME LIKE ?";
sqlForDataCount +=" AND USERNAME LIKE ?";
params.add(cname);
}
if(!btname){
sqlForData += " AND TRUENAME LIKE ?";
sqlForDataCount +=" AND TRUENAME LIKE ?";
params.add(ctname);
}
if(!bphone){
sqlForData += " AND PHONE LIKE ?";
sqlForDataCount +=" AND PHONE LIKE ?";
params.add(cphone);
}
if(!baddress){
sqlForData += " AND ADDRESS LIKE ?";
sqlForDataCount +=" AND ADDRESS LIKE ?";
params.add(caddress);
}
}
if(flag){
return super.getPager(User.class, sqlForDataCount, sqlForData, currPage, pageSize);
}
return super.getPager(User.class, sqlForDataCount, sqlForData, currPage, pageSize,params.toArray());
}
@Override
public void editUser(User user) {
String sql = "UPDATE user SET USER_STATUS=?,PASSWORD=?,TRUENAME=?,PHONE=?,ADDRESS=?,USER_STATUS=? WHERE USER_ID=?";
super.update(sql, user.getUserStatus(),user.getPassword(), user.getTruename(), user.getPhone(),
user.getAddress(),user.getUserStatus(), user.getUserId());
}
@Override
public User getUserByName(String username) {
String sql = "SELECT USER_ID userId,USERNAME username,PASSWORD password,TRUENAME truename,PHONE phone,ADDRESS address FROM user WHERE USERNAME=?";
return super.getObject(User.class, sql, username);
}
public void deleteUser(int userId) {
String sql = "DELETE FROM user WHERE USER_ID=?";
super.update(sql, userId);
}
@Override
public int addManager(Manager manager) {
String sql = "INSERT INTO manager(MANAGER_NAME,MANAGER_PASSWORD)VALUES(?,?)";
return super.updateGetGeneratedKeys(sql, manager.getManagerName(), manager.getManagerPassword());
}
@Override
public void addPromission(int managerId, int roleId) {
String sql = "INSERT INTO manager_role (MANAGER_ID,ROLE_ID)VALUES(?,?)";
super.update(sql, managerId, roleId);
}
@Override
public Manager getManager(String managerName) {
String sql = "SELECT MANAGER_ID managerId,MANAGER_NAME managerName,MANAGER_PASSWORD managerPassword"
+ " FROM manager WHERE MANAGER_NAME=?";
return super.getObject(Manager.class, sql, managerName);
}
@Override
public Manager getManager(int managerId) {
String sql = "SELECT MANAGER_ID managerId,MANAGER_NAME managerName,MANAGER_PASSWORD managerPassword"
+ " FROM manager WHERE MANAGER_ID=?";
return super.getObject(Manager.class, sql, managerId);
}
@Override
public List<Manager> getManagers() {
String sql = "SELECT MANAGER_ID managerId,MANAGER_NAME managerName,MANAGER_PASSWORD managerPassword"
+ " FROM manager";
return super.getObjectForList(Manager.class, sql);
}
@Override
public void editManager(Manager manager) {
String sql = "UPDATE manager SET MANAGER_PASSWORD=? WHERE MANAGER_ID=?";
super.update(sql,manager.getManagerPassword(), manager.getManagerId());
}
@Override
public void deleteManager(int managerId) {
/*String sql = "DELETE FROM manager WHERE MANAGER_ID=?";
super.update(sql, managerId);*/
// 增加了删除 manager_role 中 manager 的信息
String managersql = "DELETE FROM manager WHERE MANAGER_ID=?";
super.update(managersql, managerId);
String rolesql = "DELETE FROM manager_role WHERE MANAGER_ID=?";
super.update(rolesql, managerId);
}
@Override
public List<Manager> getManagers(CriteriaManager criteriaManager) {
String sql = null;
String managerName = criteriaManager.getManagerName();
boolean flag = false;
if(managerName.equals("%%") || managerName == null){
sql = "SELECT MANAGER_ID managerId,MANAGER_NAME managerName,MANAGER_PASSWORD" + " managerPassword"
+ " FROM manager";
flag = true;
}else {
sql = "SELECT MANAGER_ID managerId,MANAGER_NAME managerName,MANAGER_PASSWORD" + " managerPassword"
+ " FROM manager WHERE MANAGER_NAME LIKE ?";
}
if(flag){
return super.getObjectForList(Manager.class, sql);
}
return super.getObjectForList(Manager.class, sql, managerName);
}
@Override
public Pager<Product> getProductPager(boolean isBack,int currPage, int pageSize, CriteriaProduct criteriaProduct) {
String sqlForDataCount = null;
String sqlForData = null;
String searchKey = criteriaProduct.getProductName();
boolean flag = false;
if(isBack){
if(searchKey.equals("%%") || searchKey == null){
sqlForDataCount = "SELECT COUNT(*) FROM product";
sqlForData = "SELECT p.PRODUCT_ID productId,PRODUCT_NAME productName,"
+ "PRODUCT_PRICE productPrice,STORE_NUM storeNum,salesAmount,"
+ "sales,levelStatistic,PRODUCT_IMAGE_PATH productImagePath,"
+ "PRODUCT_DESC productDesc,PRODUCT_STATUS productStatus "
+ "FROM product p left join(SELECT PRODUCT_ID,(PRODUCT_PRICE*SUM(SALE_COUNT)) salesAmount,"
+ "SUM(SALE_COUNT) sales,ROUND(AVG(LEVEL),2) levelStatistic "
+ "FROM orders o left join comment c on o.ORDER_ID=c.ORDER_ID GROUP BY "
+ "PRODUCT_ID) amount on p.PRODUCT_ID=amount.PRODUCT_ID";
flag = true;
}else {
sqlForDataCount = "SELECT COUNT(*) FROM product WHERE PRODUCT_NAME LIKE ?";
sqlForData = "SELECT p.PRODUCT_ID productId,PRODUCT_NAME productName,"
+ "PRODUCT_PRICE productPrice,STORE_NUM storeNum,salesAmount,"
+ "sales,levelStatistic,PRODUCT_IMAGE_PATH productImagePath,"
+ "PRODUCT_DESC productDesc,PRODUCT_STATUS productStatus "
+ "FROM product p left join(SELECT PRODUCT_ID,(PRODUCT_PRICE*SUM(SALE_COUNT)) salesAmount,"
+ "SUM(SALE_COUNT) sales,ROUND(AVG(LEVEL),2) levelStatistic "
+ "FROM orders o left join comment c on o.ORDER_ID=c.ORDER_ID GROUP BY "
+ "PRODUCT_ID) amount on p.PRODUCT_ID=amount.PRODUCT_ID WHERE PRODUCT_NAME LIKE ?";
}
}else {
if(searchKey.equals("%%") || searchKey == null){
sqlForDataCount = "SELECT COUNT(*) FROM product WHERE PRODUCT_STATUS=1";
sqlForData = "SELECT PRODUCT_ID productId,PRODUCT_NAME productName,"
+ "PRODUCT_PRICE productPrice,PRODUCT_IMAGE_PATH productImagePath,PRODUCT_STATUS productStatus "
+ "FROM product WHERE PRODUCT_STATUS=1";
flag = true;
}else {
sqlForDataCount = "SELECT COUNT(*) FROM product WHERE PRODUCT_STATUS=1 AND PRODUCT_NAME LIKE ?";
sqlForData = "SELECT PRODUCT_ID productId,PRODUCT_NAME productName,"
+ "PRODUCT_PRICE productPrice,PRODUCT_IMAGE_PATH productImagePath,PRODUCT_STATUS productStatus "
+ "FROM product WHERE PRODUCT_STATUS=1 AND PRODUCT_NAME LIKE ?";
}
}
if(flag){
return super.getPager(Product.class, sqlForDataCount, sqlForData, currPage, pageSize);
}
return super.getPager(Product.class, sqlForDataCount, sqlForData, currPage, pageSize,
searchKey);
}
@Override
public void changeProductStatus(int productStatus, int productId) {
String sql = "UPDATE product SET PRODUCT_STATUS=? WHERE PRODUCT_ID=?";
super.update(sql, productStatus,productId);
}
@Override
public void editProduct(Product product) {
String sql = "UPDATE product SET PRODUCT_NAME=?,PRODUCT_PRICE=?,PRODUCT_DESC=?,"
+ "PRODUCT_IMAGE_PATH=?,STORE_NUM=?,PRODUCT_STATUS=? WHERE PRODUCT_ID=?";
super.update(sql,product.getProductName(),product.getProductPrice(),product.getProductDesc(),
product.getProductImagePath(),product.getStoreNum(),product.getProductStatus(),
product.getProductId());
}
@Override
public void deleteProductsByIds(String[] productIds) {
String strProductIds = "";
for (int i = 0; i < productIds.length - 1; i++) {
strProductIds += "?,";
}
String sql = "DELETE FROM product WHERE PRODUCT_ID IN (" + strProductIds + "?)";
super.update(sql, productIds);
}
@Override
public void changeUserStatus(String userStatus,String userId) {
String sql = "UPDATE user SET USER_STATUS=? WHERE USER_ID=?";
super.update(sql,userStatus,userId);
}
@Override
public Map<OrderHead,List<OrderBody>> getOrderMessageInMap(){
String keySql = "SELECT sum(PRODUCT_PRICE*SALE_COUNT) totalPrice,ORDER_NUM orderNum,ORDER_TIME orderTime,ORDER_STATUS orderStatus,NOTE note,USERNAME username,o.USER_ID userId,SEND_PLACE sendPlace,SEND_PHONE sendPhone,SEND_MAN sendMan,VISIBLE visible FROM orders o left join user u on o.USER_ID=u.USER_ID GROUP BY ORDER_NUM ORDER BY ORDER_TIME DESC";
String valueSql = "SELECT (PRODUCT_PRICE*SALE_COUNT) subtotal,CONTENT content,LEVEL level,COMMENT_ID commentId,o.ORDER_ID orderId,PRODUCT_ID productId,PRODUCT_NAME productName,PRODUCT_PRICE productPrice,SALE_COUNT saleCount FROM orders o left join comment c on o.ORDER_ID=c.ORDER_ID WHERE ORDER_NUM=?";
return super.getMapHandlerForValueList(keySql, OrderHead.class, valueSql, OrderBody.class, "ORDER_NUM");
}
@Override
public MapPager<OrderHead, OrderBody> getOrderMessageInMapPager(String orderNum,int currPage, int pageSize){
String keySql = null;
String valueSql = null;
String sqlForDataCount = null;
boolean flag = false;
if(orderNum.equals("%%")||orderNum == null){
keySql = "SELECT sum(PRODUCT_PRICE*SALE_COUNT) totalPrice,ORDER_NUM orderNum,ORDER_TIME"
+ " orderTime,ORDER_STATUS orderStatus,NOTE note,USERNAME username,o.USER_ID userId,"
+ "SEND_PLACE sendPlace,SEND_PHONE sendPhone,SEND_MAN sendMan,VISIBLE visible FROM "
+ "orders o left join user u on o.USER_ID=u.USER_ID GROUP BY ORDER_NUM "
+ "ORDER BY ORDER_TIME DESC";
valueSql = "SELECT (PRODUCT_PRICE*SALE_COUNT) subtotal,CONTENT content,LEVEL level,"
+ "COMMENT_ID commentId,o.ORDER_ID orderId,PRODUCT_ID productId,PRODUCT_NAME "
+ "productName,PRODUCT_PRICE productPrice,SALE_COUNT saleCount FROM orders o left join "
+ "comment c on o.ORDER_ID=c.ORDER_ID WHERE ORDER_NUM=?";
sqlForDataCount = "SELECT COUNT(DISTINCT ORDER_NUM) FROM orders";
flag = true;
}else {
keySql = "SELECT sum(PRODUCT_PRICE*SALE_COUNT) totalPrice,ORDER_NUM orderNum,ORDER_TIME"
+ " orderTime,ORDER_STATUS orderStatus,NOTE note,USERNAME username,o.USER_ID userId,"
+ "SEND_PLACE sendPlace,SEND_PHONE sendPhone,SEND_MAN sendMan,VISIBLE visible FROM "
+ "orders o left join user u on o.USER_ID=u.USER_ID GROUP BY ORDER_NUM "
+ "HAVING ORDER_NUM LIKE ? ORDER BY ORDER_TIME DESC";
valueSql = "SELECT (PRODUCT_PRICE*SALE_COUNT) subtotal,CONTENT content,LEVEL level,"
+ "COMMENT_ID commentId,o.ORDER_ID orderId,PRODUCT_ID productId,PRODUCT_NAME "
+ "productName,PRODUCT_PRICE productPrice,SALE_COUNT saleCount FROM orders o left join "
+ "comment c on o.ORDER_ID=c.ORDER_ID WHERE ORDER_NUM=?";
sqlForDataCount = "SELECT COUNT(DISTINCT ORDER_NUM) FROM orders WHERE ORDER_NUM LIKE ?";
}
if(flag){
return super.getMapPager(keySql, OrderHead.class, valueSql, OrderBody.class, "ORDER_NUM", sqlForDataCount, currPage, pageSize);
}
return super.getMapPager(keySql, OrderHead.class, valueSql, OrderBody.class, "ORDER_NUM", sqlForDataCount, currPage, pageSize,orderNum);
}
@Override
public void deleteOrderByNum(String orderNum) {
String sql = "DELETE FROM orders WHERE ORDER_NUM=?";
super.update(sql, orderNum);
}
@Override
public List<Menu> getMenuByManagerId(int managerId) {
String sql = "SELECT MENU_ID menuId,MENU_NAME menuName,PARENT_MENU parentMenu,MENU_URL menuUrl,MENU_STATUS menuStatus,NOTE note FROM menu WHERE MENU_ID IN (SELECT MENU_ID FROM role_menu WHERE ROLE_ID IN (SELECT ROLE_ID FROM manager_role WHERE MANAGER_ID = ?))";
return super.getObjectForList(Menu.class, sql, managerId);
}
@Override
public Map<Menu, List<Menu>> getMenus(int managerId) {
List<Menu> menus = getMenuByManagerId(managerId);
Iterator<Menu> it = menus.iterator();
Map<Menu, List<Menu>> map = new TreeMap<Menu, List<Menu>>();
while(it.hasNext()){
Menu menu = it.next();
String sql = "SELECT MENU_ID menuId,MENU_NAME menuName,PARENT_MENU parentMenu,MENU_URL menuUrl,MENU_STATUS menuStatus,NOTE note FROM menu WHERE PARENT_MENU=?";
List<Menu> sons = super.getObjectForList(Menu.class, sql, menu.getMenuId());
map.put(menu, sons);
}
return map;
}
@Override
public List<String> getMenuStr(int managerId) {
List<Menu> menus = getMenuByManagerId(managerId);
Iterator<Menu> it = menus.iterator();
/*String str = "[";
while(it.hasNext()){
Menu menu = it.next();
str = str + "{id:'" + menu.getMenuId() + "',menu:[{text:'" + menu.getMenuName() + "',items:[";
String sql = "SELECT MENU_ID menuId,MENU_NAME menuName,PARENT_MENU parentMenu,MENU_URL menuUrl,MENU_STATUS menuStatus,NOTE note FROM menu WHERE PARENT_MENU=?";
List<Menu> sons = super.getObjectForList(Menu.class, sql, menu.getMenuId());
Iterator<Menu> itson = sons.iterator();
while(itson.hasNext()){
Menu son = itson.next();
str = str + "{id:'" + son.getMenuId() + "',text:'" + son.getMenuName() + "',href:'" + son.getMenuUrl() + "'},";
}
str = str.substring(0, str.length()-1);
str = str + "]}]},";
}
str = str.substring(0, str.length()-1);
str = str + "]";*/
List<String> menuStr = new ArrayList<String>();
while(it.hasNext()){
String str = "";
Menu menu = it.next();
str = str + "{id:'" + menu.getMenuId() + "',menu:[{text:'" + menu.getMenuName() + "',items:[";
String sql = "SELECT MENU_ID menuId,MENU_NAME menuName,PARENT_MENU parentMenu,MENU_URL menuUrl,MENU_STATUS menuStatus,NOTE note FROM menu WHERE PARENT_MENU=?";
List<Menu> sons = super.getObjectForList(Menu.class, sql, menu.getMenuId());
Iterator<Menu> itson = sons.iterator();
while(itson.hasNext()){
Menu son = itson.next();
if(son.getMenuStatus()!=0){
str = str + "{id:'" + son.getMenuId() + "',text:'" + son.getMenuName() + "',href:'" + son.getMenuUrl() + "'},";
}
}
str = str.substring(0, str.length()-1);
str = str + "]}]}";
menuStr.add(str);
}
return menuStr;
}
@Override
public List<Menu> getAllMenus() {
String sql = "SELECT MENU_ID menuId,MENU_NAME menuName,PARENT_MENU parentMenu,MENU_URL menuUrl,MENU_STATUS menuStatus,NOTE note FROM menu;";
return super.getObjectForList(Menu.class, sql);
}
@Override
public List<ManagerPermission> getManagerPermissions(CriteriaManager criteriaManager) {
String sql = "SELECT mng.managerId,mng.managerName,ROLE_ID roleId " +
"FROM (SELECT MANAGER_ID managerId,MANAGER_NAME managerName FROM manager WHERE MANAGER_NAME LIKE ?) mng,manager_role " +
"WHERE manager_role.MANAGER_ID=mng.managerId";
String managerName = criteriaManager.getManagerName();
return super.getObjectForList(ManagerPermission.class, sql, managerName);
}
@Override
public void changePromission(int managerId, int roleId) {
String sql = "UPDATE manager_role SET ROLE_ID=? WHERE MANAGER_ID=?";
super.update(sql, roleId, managerId);
}
@Override
public int addCart(Cart cart) {
String sql = "insert into cart(PRODUCT_ID,SALE_COUNT,USER_ID)values(" + cart.getProductId() + ","
+ cart.getSaleCount() + "," + cart.getUserId() + ")";
return super.updateGetGeneratedKeys(sql);
}
@Override
public List<Cart> getCartsByOrderNum(String orderNum) {
String sql = "SELECT PRODUCT_ID productId,SALE_COUNT saleCount FROM orders WHERE ORDER_NUM=?";
return super.getObjectForList(Cart.class, sql, orderNum);
}
@Override
public Menu getMenu(int menuId) {
String sql = "SELECT MENU_ID menuId,MENU_NAME menuName,PARENT_MENU parentMenu,MENU_URL menuUrl,MENU_STATUS menuStatus,NOTE note FROM menu WHERE MENU_ID=?";
return super.getObject(Menu.class, sql, menuId);
}
@Override
public void changeProductStore(int productId, int saleCount) {
String selectSql = "SELECT (STORE_NUM-?) FROM product WHERE PRODUCT_ID=?";
Object storeNum = super.getValue(selectSql, saleCount,productId);
String sql = "UPDATE product SET STORE_NUM=? WHERE PRODUCT_ID=?";
super.update(sql, storeNum,productId);
}
@Override
public Product getSingleProductInfo(int productId) {
String sql = "SELECT p.PRODUCT_ID productId,PRODUCT_NAME productName,PRODUCT_PRICE productPrice,STORE_NUM storeNum,sales,levelStatistic,PRODUCT_IMAGE_PATH productImagePath,PRODUCT_DESC productDesc,PRODUCT_STATUS productStatus FROM product p left join(SELECT PRODUCT_ID,SUM(SALE_COUNT) sales,ROUND(AVG(LEVEL),2) levelStatistic FROM orders o left join comment c on o.ORDER_ID=c.ORDER_ID GROUP BY PRODUCT_ID) amount on p.PRODUCT_ID=amount.PRODUCT_ID WHERE p.PRODUCT_ID=?";
return super.getObject(Product.class, sql, productId);
}
@Override
public Pager<CommentInfo> getCommentInfoPager(int productId, int currPage,
int pageSize) {
String sqlForDataCount = "SELECT COUNT(*) FROM orders o LEFT JOIN user u ON o.USER_ID=u.USER_ID LEFT JOIN comment c ON c.ORDER_ID=o.ORDER_ID WHERE LEVEL>0 AND PRODUCT_ID=?";
String sqlForData = "SELECT PRODUCT_ID productId,SALE_COUNT saleCount,PRODUCT_PRICE productPrice,o.ORDER_ID orderId,USERNAME username,ORDER_TIME orderTime,CONTENT content,LEVEL level FROM orders o LEFT JOIN user u ON o.USER_ID=u.USER_ID LEFT JOIN comment c ON c.ORDER_ID=o.ORDER_ID WHERE LEVEL>0 AND PRODUCT_ID=?";
return super.getPager(CommentInfo.class, sqlForDataCount, sqlForData, currPage, pageSize, productId);
}
@Override
public void editMenu(Menu menu, int oldmenuId) {
deleteMenu(oldmenuId);
addMenu(menu);
}
@Override
public void addMenu(Menu menu) {
String sql = "INSERT INTO menu (MENU_ID,MENU_NAME,PARENT_MENU,MENU_URL,MENU_STATUS,NOTE) VALUES (?,?,?,?,?,?)";
super.update(sql, menu.getMenuId(),menu.getMenuName(),menu.getParentMenu(),menu.getMenuUrl(),menu.getMenuStatus(),menu.getNote());
}
@Override
public void deleteMenu(int menuId) {
String sql = "DELETE FROM menu WHERE MENU_ID=?";
super.update(sql, menuId);
}
}
service层
LeoShopServiceImpl.java
package com.leoshop.service.impl;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Map.Entry;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import com.leoshop.beans.Address;
import com.leoshop.beans.Cart;
import com.leoshop.beans.Comment;
import com.leoshop.beans.Manager;
import com.leoshop.beans.Menu;
import com.leoshop.beans.Orders;
import com.leoshop.beans.Product;
import com.leoshop.beans.User;
import com.leoshop.dao.LeoShopDao;
import com.leoshop.dao.impl.LeoShopDaoImpl;
import com.leoshop.exception.UserIsNotLoginException;
import com.leoshop.service.LeoShopService;
public class LeoShopServiceImpl implements LeoShopService {
private LeoShopDao leoShopDao;
public LeoShopServiceImpl(){
leoShopDao = new LeoShopDaoImpl();
}
@Override
public int addAddress(Address address) {
return leoShopDao.addAddress(address);
}
public String savePurchaseOrder(HttpServletRequest request,
HttpSession session, int userId, Map<Cart, Product> cartProductMap,
String[] cartIds, int orderId, String orderNum,String REDIRECT) {
try {
int addressId = Integer.parseInt(request.getParameter("addressId"));
Address address = leoShopDao.getAddressById(addressId);
String note = request.getParameter("ordernote");
// 生成订单 创建orders 表
Timestamp orderTime = new Timestamp(System.currentTimeMillis());
Random random = new Random();
String ran = random.nextInt(10)*1000+random.nextInt(10)*100+random.nextInt(10)*10+random.nextInt(10) + "";
System.out.println(ran);
orderNum = System.currentTimeMillis() + ran + userId;
System.out.println(orderNum);
double totalPrice = 0;//遍历cartProductMap 进行orders表的创建 同时生成订单总价
int orderStatus = 0;//表示已下单
List<Orders> orders = new ArrayList<Orders>();
for(Entry<Cart, Product> cartProduct :cartProductMap.entrySet()){
//根据Id获取商品,用于验证库存和商品状态
Product product = leoShopDao.getProduct(cartProduct.getValue().getProductId());
int saleCount = cartProduct.getKey().getSaleCount();
int storeNum = product.getStoreNum();
int productStatus = product.getProductStatus();
if(productStatus==0){
return REDIRECT + "productSoldOut.jsp";
}
if(saleCount > storeNum){
return REDIRECT + "outOfStoreNum.jsp";
}
Orders order = new Orders(orderNum, orderTime, orderStatus, note, userId,
address.getSendPlace(),address.getSendMan(), address.getSendPhone(),
cartProduct.getValue().getProductId(), cartProduct.getValue().getProductName(),
cartProduct.getValue().getProductPrice(), cartProduct.getKey().getSaleCount());
orders.add(order);
totalPrice += cartProduct.getValue().getProductPrice()*cartProduct.getKey().getSaleCount();
}
//库存验证通过再进行Orders表的添加
for(Orders order:orders){
orderId = leoShopDao.addOrders(order);
}
if(orderId == -1){
throw new RuntimeException("订单生成失败");
}
session.setAttribute("totalPrice", totalPrice);
session.setAttribute("orderNum", orderNum);
session.setAttribute("address", address);
} catch (Exception e) {
throw new RuntimeException("订单生成时发生异常");
}
if(orderId != -1 && orderNum != null){
// 订单生成过程未发生异常 则 删除购物车中已经下单的商品
leoShopDao.deleteCartByUserCart(userId,cartIds);
request.getSession().removeAttribute("buyNowCart");
//同时减商品库存
//1)通过订单编号获取购买的商品ID和购买的数量
List<Cart> boughtProducts = leoShopDao.getCartsByOrderNum(orderNum);
//2)根据购买的信息,修改数据库商品数量
for(Cart bought:boughtProducts){
int productId = bought.getProductId();
int saleCount = bought.getSaleCount();
leoShopDao.changeProductStore(productId,saleCount);
}
return REDIRECT + "order_create_success.jsp";
}
return REDIRECT + "order_create_fail.jsp";
}
@Override
public void submitPayment(String orderNum, int i) {
leoShopDao.changeOrderStatus(orderNum,i);
}
@Override
public void updateCart(int cartId,int saleCount) {
Cart cart = leoShopDao.getCart(cartId);
cart.setSaleCount(saleCount);// 修改saleCount数量
leoShopDao.updateCart(cart);
}
public void deleteCart(HttpServletRequest request, UserIsNotLoginException userIsNotLogin) {
String[] cartIds = request.getParameterValues("cartId");
for(int i = 0;i < cartIds.length;i++){
int cartId = -1;
try {
cartId = Integer.parseInt(cartIds[i]);
} catch (NumberFormatException e) {
throw new RuntimeException("cartId类型转换异常");
}
if (cartId == -1) {
System.out.println("未获得页面传过来的cartId");
} else if (cartId == 0) {// cartId == 0 标记为清空购物车
int userId = -1;
try {
userId = Integer.parseInt(request.getSession().getAttribute("userId").toString());
} catch (Exception e) {}
if(userId == -1){
throw userIsNotLogin;
}
leoShopDao.deleteCartByUser(userId);
} else {// 不为0 也不是 -1 即 删除购物车中的一条数据
leoShopDao.deleteCartById(cartId);
}
}
}
@Override
public int registerUser(User user) {
return leoShopDao.userRegister(user);
}
@Override
public int addCart(Cart cart) {
return leoShopDao.addCart(cart);
}
public void updateUserInfo(int userId, String password, String truename,
String phone, String address) {
User user = leoShopDao.getUserById(userId);
User userupdate = new User(userId, user.getUsername(), password, truename, phone, address);
leoShopDao.updateUserById(userupdate);
}
@Override
public void updateAddressById(Address address) {
leoShopDao.updateAddressById(address);
}
@Override
public void deleteAddressById(int addId) {
leoShopDao.deleteAddressById(addId);
}
@Override
public void changeOrderVisible(String orderNum, int i) {
leoShopDao.changeOrderVisible(orderNum, i);
}
@Override
public void changeOrderStatus(String orderNum, int i) {
leoShopDao.changeOrderStatus(orderNum,i);
}
@Override
public void addComment(Comment comment) {
leoShopDao.addComment(comment);
}
@Override
public void deleteOrderByNum(String orderNum) {
leoShopDao.deleteOrderByNum(orderNum);
}
@Override
public void deleteProductsByIds(String[] productIds) {
leoShopDao.deleteProductsByIds(productIds);
}
@Override
public void changeProductStatus(int productStatus, int productId) {
leoShopDao.changeProductStatus(productStatus, productId);
}
@Override
public void editProduct(Product product) {
leoShopDao.editProduct(product);
}
@Override
public void addProduct(Product product) {
leoShopDao.addProduct(product);
}
@Override
public void editUser(User user) {
leoShopDao.editUser(user);
}
@Override
public void deleteManager(int managerId) {
leoShopDao.deleteManager(managerId);
}
@Override
public void editManager(Manager manager) {
leoShopDao.editManager(manager);
}
public int addManagerTrans(Manager manager, int roleId) {
int managerId = leoShopDao.addManager(manager);
// ---------------------------增加权限--------------------------------
leoShopDao.addPromission(managerId, roleId);
// ----------------------------------------------------------------
return managerId;
}
@Override
public void changePromission(int managerId, int roleId) {
leoShopDao.changePromission(managerId, roleId);
}
@Override
public void editMenu(Menu menu, int oldmenuId) {
leoShopDao.editMenu(menu, oldmenuId);
}
@Override
public void addMenu(Menu menu) {
leoShopDao.addMenu(menu);
}
@Override
public void deleteMenu(int menuId) {
leoShopDao.deleteMenu(menuId);
}
}
servlet层
LeoShopServlet.java
package com.leoshop.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.sf.json.JSONArray;
import com.leoshop.beans.Address;
import com.leoshop.beans.Cart;
import com.leoshop.beans.Comment;
import com.leoshop.beans.CommentInfo;
import com.leoshop.beans.CommentMsg;
import com.leoshop.beans.CriteriaProduct;
import com.leoshop.beans.OrderMsg;
import com.leoshop.beans.Orders;
import com.leoshop.beans.Pager;
import com.leoshop.beans.Product;
import com.leoshop.beans.User;
import com.leoshop.dao.LeoShopDao;
import com.leoshop.dao.impl.LeoShopDaoImpl;
import com.leoshop.exception.UserIsNotLoginException;
import com.leoshop.proxy.ProxyFactory;
import com.leoshop.service.LeoShopService;
import com.leoshop.service.impl.LeoShopServiceImpl;
import com.leoshop.utils.ReadProperties;
public class LeoShopServlet extends BaseServlet {
private static final long serialVersionUID = 7541787499026412845L;
private LeoShopDao leoShopDao;
private UserIsNotLoginException userIsNotLogin;
private LeoShopService leoShopService;
@Override
public void init() throws ServletException {
super.init();
userIsNotLogin = new UserIsNotLoginException("用户未登录");
leoShopDao = (LeoShopDao) ProxyFactory.getProxyFactory().getProxyInstance(new LeoShopDaoImpl());
leoShopService = (LeoShopService) ProxyFactory.getProxyFactory().getProxyInstance(new LeoShopServiceImpl());
}
//--------------------------------------------前台搜索商品-------------------------------------------
public String searchProduct (HttpServletRequest request, HttpServletResponse response){
int currPage = 1;
try {
currPage = Integer.parseInt(request.getParameter("currPage"));
} catch (Exception e) {}
String criteriaProductName = request.getParameter("searchProductName");
if(criteriaProductName != null){
criteriaProductName = criteriaProductName.trim();
}
CriteriaProduct cProduct = new CriteriaProduct(criteriaProductName, 0, null, null, 0, 0);
int productPageSize = Integer.parseInt(ReadProperties.getInstance().getProperty("allProductPageSize"));
Pager<Product> pager = leoShopDao.getProductPager(false,currPage, productPageSize, cProduct);
request.setAttribute("pager", pager);
request.setAttribute("criteriaProductName", criteriaProductName);
return "/searchResult.jsp";
}
//前台获取所有商品
public String getAllProduct (HttpServletRequest request, HttpServletResponse response){
int currPage = 1;
try {
currPage = Integer.parseInt(request.getParameter("currPage"));
} catch (Exception e) {}
CriteriaProduct cProduct = new CriteriaProduct(null, 0, null, null, 0, 0);
int productPageSize = Integer.parseInt(ReadProperties.getInstance().getProperty("allProductPageSize"));
Pager<Product> pager = leoShopDao.getProductPager(false,currPage, productPageSize, cProduct);
request.setAttribute("pager", pager);
return "/allProduct.jsp";
}
//--------------------------------------------购物车及下单-------------------------------------------
// 确认订单页的添加地址
public void addAddress(HttpServletRequest request, HttpServletResponse response) throws IOException {
int userId = -1;
try {
userId = Integer.parseInt(request.getSession().getAttribute("userId").toString());
} catch (Exception e) {}
if(userId == -1){
throw userIsNotLogin;
}
String sendplace = request.getParameter("sendplace");
String sendman = request.getParameter("sendman");
String sendphone = request.getParameter("sendphone");
Address address = new Address(sendplace, sendman, sendphone, userId);
int addressId = leoShopService.addAddress(address);
address.setAddressId(addressId);
JSONArray json = JSONArray.fromObject(address);
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.print(json.toString());
out.flush();
out.close();
}
// 点击结算后的订单页面
public String buyleo(HttpServletRequest request, HttpServletResponse response){
int userId = -1;
try {
userId = Integer.parseInt(request.getSession().getAttribute("userId").toString());
} catch (Exception e) {}
if(userId == -1){
throw userIsNotLogin;
}
List<Address> addresses = leoShopDao.getAddressWithUserId(userId);
request.setAttribute("addresses", addresses);
String[] cartIds = request.getParameterValues("cartId");
if(cartIds.length ==0){
return leoCart(request, response);
}
Map<Cart,Product> cartProductMap = leoShopDao.getCartProductMap(userId,cartIds);
request.getSession().setAttribute("cartProductMap", cartProductMap);
request.getSession().setAttribute("cartIds", cartIds);
return "/buyleo.jsp";
}
// 点击立即购买后的订单页面
public String buyleoNowConfirm(HttpServletRequest request, HttpServletResponse response) {
Cart buyNowCart = (Cart) request.getSession().getAttribute("buyNowCart");
int userId = buyNowCart.getUserId();
List<Address> addresses = leoShopDao.getAddressWithUserId(userId);
request.setAttribute("addresses", addresses);
String[] cartIds = new String[]{buyNowCart.getCartId()+""};
if(cartIds.length ==0){
return leoCart(request, response);
}
Map<Cart,Product> cartProductMap = new HashMap<Cart, Product>();
Product product = leoShopDao.getProduct(buyNowCart.getProductId());
cartProductMap.put(buyNowCart, product);
request.getSession().setAttribute("cartProductMap", cartProductMap);
request.getSession().setAttribute("cartIds", cartIds);
return "/buyleo.jsp";
}
// 确认提交订单(处理表单的重复提交)
public String confirmOrder(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
int userId = -1;
try {
userId = Integer.parseInt(request.getSession().getAttribute("userId").toString());
} catch (Exception e) {}
if(userId == -1){
throw userIsNotLogin;
}
//处理表单的重复提交start
String tokenValue = request.getParameter("token");
String token = (String) session.getAttribute("token");
if(token != null && token.equals(tokenValue)){
session.removeAttribute("token");
}else {
return REDIRECT + "repeatCreateOrder.jsp";
}
//处理表单的重复提交end
Map<Cart,Product> cartProductMap = (Map<Cart, Product>)session.getAttribute("cartProductMap");
String[] cartIds = (String[]) request.getSession().getAttribute("cartIds");
int orderId = -1;
String orderNum = null;
return leoShopService.savePurchaseOrder(request, session, userId, cartProductMap,
cartIds, orderId, orderNum,REDIRECT);
}
// 付款的方法
public String payment(HttpServletRequest request, HttpServletResponse response) {
String orderNum = request.getParameter("orderNum");
int orderStatus = leoShopDao.getOrderStatus(orderNum);
//System.out.println("orderStatus::" + orderStatus);
if (orderStatus != 0) {
return REDIRECT + "AboutBlank.jsp";
}
leoShopService.submitPayment(orderNum,1);//将订单状态修改为1 表示已付款
request.getSession().removeAttribute("totalPrice");
request.getSession().removeAttribute("cartProductMap");
request.getSession().removeAttribute("address");
request.getSession().removeAttribute("orderNum");
return REDIRECT + "payment_success.jsp";
}
// 购物车页面
public String leoCart(HttpServletRequest request, HttpServletResponse response) {
int userId = -1;
try {
userId = Integer.parseInt(request.getSession().getAttribute("userId").toString());
} catch (Exception e) {}
if(userId == -1){
throw userIsNotLogin;
}
return REDIRECT + "checkout.jsp";
}
// 获取购物车信息
public Map<Cart,Product> getCartInfo(HttpServletRequest request, HttpServletResponse response) {
int userId = -1;
try {
userId = (Integer) request.getSession().getAttribute("userId");
} catch (Exception e) {}
if(userId == -1){
return null;
}
Map<Cart,Product> cartProductMap = leoShopDao.getCartProductMap(userId);
return cartProductMap;
}
// 修改购买数量
public void alterSaleCount(HttpServletRequest request, HttpServletResponse response) throws IOException {
int cartId = Integer.parseInt(request.getParameter("cartId"));
int saleCount = Integer.parseInt(request.getParameter("saleCount"));
leoShopService.updateCart(cartId,saleCount);
}
// 删除购物车
public void deleteCart(HttpServletRequest request, HttpServletResponse response) {
leoShopService.deleteCart(request,userIsNotLogin);
}
//-----------------------------------------------------------------------------------------
// 获取Header页面需要的信息
public void responseHeaderInfo(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
int userId = -1;
try {
userId = (Integer) request.getSession().getAttribute("userId");
} catch (Exception e) {
System.out.println("用户未登录,身份:游客!!");
}
if(userId != -1){
User userHeader = leoShopDao.getUserById(userId);
System.out.println("用户登录:[[ID:" + userId + ";用户名:" + userHeader.getUsername() + "]]......");
request.setAttribute("userHeader", userHeader);
Map<Cart,Product> cartProductMap = getCartInfo(request, response);
request.setAttribute("cartProductMap", cartProductMap);
}
getServletContext().getRequestDispatcher("/header.jsp").include(request, response);
}
// ---------------------------------------登录及注册-----------------------------------------------
// 登录
public void login(HttpServletRequest request, HttpServletResponse response){
PrintWriter out = null;
try {
response.setContentType("text/html;charset=UTF-8");
out = response.getWriter();
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = leoShopDao.getUserByName(username);
boolean logStatus = false;
if(user != null){
logStatus = password.equals(user.getPassword());
}
if(logStatus){
request.getSession().setAttribute("userId", user.getUserId());
}
String jsonStr = "[{'logStatus':'" + logStatus + "'}]";
JSONArray json = JSONArray.fromObject(jsonStr);
out.write(json.toString());
} catch (Exception e) {
e.printStackTrace();
}finally{
if(out != null){
out.flush();
out.close();
}
}
}
// 注册
public void regServlet(HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter out = null;
try {
response.setContentType("text/html;charset=UTF-8");
out = response.getWriter();
String username = request.getParameter("username");
String password = request.getParameter("password");
String jsonStr = null;
if ( leoShopDao.getUserByUsername(username) != null) {
String regStatus = "hasThisUser";
jsonStr = "[{'regStatus':'" + regStatus + "'}]";
JSONArray json = JSONArray.fromObject(jsonStr);
out.write(json.toString());
return;
}
if(username!=null&&!username.equals("")&&password!=null&&!password.equals("")){
User user = new User(username, password);
//int userId = leoShopDao.userRegister(user);
int userId = leoShopService.registerUser(user);
if (userId > 0) {
String regStatus = "regSuccess";
jsonStr = "[{'regStatus':'" + regStatus + "'}]";
JSONArray json = JSONArray.fromObject(jsonStr);
out.write(json.toString());
request.getSession().setAttribute("userId", userId);
return;
}
}
String regStatus = "regFail";
jsonStr = "[{'regStatus':'" + regStatus + "'}]";
JSONArray json = JSONArray.fromObject(jsonStr);
out.write(json.toString());
} catch (Exception e) {
e.printStackTrace();
}finally{
if(out != null){
out.flush();
out.close();
}
}
}
// 注销
public String out(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
session.invalidate();
return REDIRECT + "AboutBlank.jsp";
}
//---------------------------------------------------------------------------------------------
// 显示主页,首页商品展示
public String index(HttpServletRequest request, HttpServletResponse response) {
int productPageSize = Integer.parseInt(ReadProperties.getInstance().getProperty("homeProductNum"));
Pager<Product> pager = leoShopDao.getPager(1, productPageSize);
request.setAttribute("pager", pager);
return "/index.jsp";
}
// 获取一件商品
public String getProduct(HttpServletRequest request, HttpServletResponse response) {
int productId = 0;
try {
productId = Integer.parseInt(request.getParameter("productid"));
} catch (Exception e) {
System.out.println("商品id获取失败");
}
getCommentInfo(request, response);
Product productInfo = leoShopDao.getSingleProductInfo(productId);
request.setAttribute("product", productInfo);
index(request, response);
return "/single.jsp";
}
//获取某件商品的评价详情
public String getCommentInfo(HttpServletRequest request, HttpServletResponse response) {
Pager<CommentInfo> commentPager = getProductCommentPager(request);
request.setAttribute("commentPager", commentPager);
return null;
}
//获取某件商品的评价详情
public void getCommentPager(HttpServletRequest request, HttpServletResponse response) {
PrintWriter out = null;
Pager<CommentInfo> commentPager = getProductCommentPager(request);
try {
response.setContentType("text/html;charset=UTF-8");
out = response.getWriter();
JSONArray json = JSONArray.fromObject(commentPager);
out.write(json.toString());
} catch (Exception e) {
e.printStackTrace();
}finally{
if(out != null){
out.flush();
out.close();
}
}
}
//获取商品详情页的评论分页内容
private Pager<CommentInfo> getProductCommentPager(HttpServletRequest request) {
int productId = 0;
int currPage = 1;
int pageSize = 6;
try {
pageSize = Integer.parseInt(ReadProperties.getInstance().getProperty(
"singleCommentPageSize"));
} catch (Exception e) {}
try {
productId = Integer.parseInt(request.getParameter("productid"));
} catch (Exception e1) {
System.out.println("商品id获取失败");
}
try {
currPage = Integer.parseInt(request.getParameter("currPage"));
} catch (Exception e) {}
Pager<CommentInfo> commentPager = leoShopDao.getCommentInfoPager(productId,currPage, pageSize);
return commentPager;
}
//立即购买
public String buyNow(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
int userId = -1;
try {
userId = Integer.parseInt(request.getSession().getAttribute("userId").toString());
} catch (Exception e) {}
if(userId == -1){
throw userIsNotLogin;
}
String productId = request.getParameter("productId");
String saleCount = request.getParameter("number");
Cart cart = new Cart(Integer.parseInt(productId), Integer.parseInt(saleCount), userId);
session.setAttribute("buyNowCart", cart);
return REDIRECT + "buyleoNowConfirm.do";// 重定向到servlet;
}
//加入购物车
public void addProductToCart(HttpServletRequest request,HttpServletResponse response){
int userId = -1;
try {
userId = Integer.parseInt(request.getSession().getAttribute("userId").toString());
} catch (Exception e) {}
if(userId == -1){
throw userIsNotLogin;
}
PrintWriter out = null;
try {
response.setContentType("text/html;charset=UTF-8");
out = response.getWriter();
String productId = request.getParameter("productId");
String saleCount = request.getParameter("saleCount");
Cart cart = new Cart();
cart.setProductId(Integer.parseInt(productId));
cart.setUserId(userId);
cart.setSaleCount(Integer.parseInt(saleCount));
int cartId = leoShopService.addCart(cart);
int cartCount=leoShopDao.cartCount(userId);
String jsonStr = "[{'cartId':'" + cartId + "','cartCount':'"+cartCount +"'}]";
JSONArray json = JSONArray.fromObject(jsonStr);
out.write(json.toString());
} catch (Exception e) {
e.printStackTrace();
}finally{
out.flush();
out.close();
}
}
// ---------------------------------------------------------------------------------------
// 获取用户信息
public String getUserById(HttpServletRequest request, HttpServletResponse response) {
int userId = -1;
try {
userId = Integer.parseInt(request.getSession().getAttribute("userId").toString());
} catch (Exception e) {}
if(userId == -1){
throw userIsNotLogin;
}
User user = leoShopDao.getUserById(userId);
request.setAttribute("user", user);
return "accountMsg.jsp";
}
// 修改用户信息
public String updateUserById(HttpServletRequest request, HttpServletResponse response) {
int userId = -1;
try {
userId = Integer.parseInt(request.getSession().getAttribute("userId").toString());
} catch (Exception e) {}
if(userId == -1){
throw userIsNotLogin;
}
try {
String password = request.getParameter("password");
String truename = request.getParameter("truename");
String phone = request.getParameter("phone");
String address = request.getParameter("address");
leoShopService.updateUserInfo(userId, password, truename, phone, address);
return getUserById(request, response);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// 获取地址分页信息
public String getAddressPager(HttpServletRequest request, HttpServletResponse response) {
int userId = -1;
try {
userId = Integer.parseInt(request.getSession().getAttribute("userId").toString());
} catch (Exception e) {}
if(userId == -1){
throw userIsNotLogin;
}
String currPage = request.getParameter("currPage");
if (currPage == null) {
currPage = "1";
}
Pager<Address> pager = leoShopDao.getAddressPager(Integer.parseInt(currPage), 4, userId);
request.setAttribute("pager", pager);
return "accountDir.jsp";
}
// 获取一条地址
public String getAddressById(HttpServletRequest request, HttpServletResponse response) {
int addId = Integer.parseInt(request.getParameter("addId").toString());
Address address = leoShopDao.getAddressById(addId);
request.setAttribute("address", address);
return "accountDirTab.jsp";
}
// 修改地址
public String updateAddressById(HttpServletRequest request, HttpServletResponse response) {
int userId = -1;
try {
userId = Integer.parseInt(request.getSession().getAttribute("userId").toString());
} catch (Exception e) {}
if(userId == -1){
throw userIsNotLogin;
}
try {
int addId = Integer.parseInt(request.getParameter("addId").toString());
String sendplace = request.getParameter("sendplace");
String sendman = request.getParameter("sendman");
String sendphone = request.getParameter("sendphone");
Address address = new Address(addId, sendplace, sendman, sendphone, userId);
leoShopService.updateAddressById(address);
return getAddressPager(request, response);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// 删除地址
public String deleteAddressById(HttpServletRequest request, HttpServletResponse response) {
try {
int addId = Integer.parseInt(request.getParameter("addId").toString());
leoShopService.deleteAddressById(addId);
return getAddressPager(request, response);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// 添加地址
public String addAddr(HttpServletRequest request, HttpServletResponse response) {
int userId = -1;
try {
userId = Integer.parseInt(request.getSession().getAttribute("userId").toString());
} catch (Exception e) {}
if(userId == -1){
throw userIsNotLogin;
}
try {
String sendplace = request.getParameter("sendplace");
String sendman = request.getParameter("sendman");
String sendphone = request.getParameter("sendphone");
Address address = new Address(sendplace, sendman, sendphone, userId);
leoShopService.addAddress(address);
return getAddressPager(request, response);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// 获取显示所有订单信息
public String getOrderMsgs(HttpServletRequest request,HttpServletResponse response){
int userId = -1;
try {
userId = Integer.parseInt(request.getSession().getAttribute("userId").toString());
} catch (Exception e) {}
if(userId == -1){
throw userIsNotLogin;
}
List<OrderMsg> ordermsg = leoShopDao.getOrderMsgs(userId);
request.setAttribute("ordermsg", ordermsg);
return "accountOrd.jsp";
}
// 删除订单(修改订单Visible状态,默认为1,0-->删除)
public String deleteOrderById(HttpServletRequest request,HttpServletResponse response){
String orderNum = request.getParameter("orderNum").toString();
leoShopService.changeOrderVisible(orderNum, 0);
return getOrderMsgs(request, response);
}
// 确认收货(修改订单orderStatus状态)
public String receiveProduct(HttpServletRequest request,HttpServletResponse response){
String orderNum = request.getParameter("orderNum").toString();
leoShopService.changeOrderStatus(orderNum,3);
return getOrderMsgs(request, response);
}
// 通过orderNum获取订单、商品信息返回评价页面
public String getCommentMsg(HttpServletRequest request, HttpServletResponse response) throws IOException {
int userId = -1;
try {
userId = Integer.parseInt(request.getSession().getAttribute("userId").toString());
} catch (Exception e) {}
if(userId == -1){
throw userIsNotLogin;
}
String orderNum = request.getParameter("orderNum");
List<CommentMsg> commentMsgs = leoShopDao.getCommentMsg(orderNum, userId);
request.setAttribute("orderNum", orderNum);
request.setAttribute("commentMsgs", commentMsgs);
return "commentTab.jsp";
}
// 添加商品评价信息
public String submitComment(HttpServletRequest request, HttpServletResponse response) throws IOException {
String orderNum = request.getParameter("orderNum");
int level = Integer.parseInt(request.getParameter("level"));
String content = request.getParameter("content");
int orderId = Integer.parseInt(request.getParameter("orderId"));
Comment comment = new Comment(level, content, orderId);
leoShopService.addComment(comment);
request.setAttribute("orderNum", orderNum);
return getCommentMsg(request, response);
}
}
完整源码
觉得有用,记得一键三连哦!