博客目录

  • Javawebservlet+Mysql实现的化妆品售卖系统
    • 实现功能截图
    • 系统功能
    • 使用技术
    • 代码
    • 完整源码

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;}@Overridepublic 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;@Overridepublic 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 {@Overridepublic 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);}@Overridepublic 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);}@Overridepublic 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);}@Overridepublic 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());}@Overridepublic void deleteAddressById(int addressId) {String sql = "DELETE FROM address WHERE ADDRESS_ID=?";super.update(sql, addressId);}@Overridepublic 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());}@Overridepublic 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);}@Overridepublic 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);}@Overridepublic 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());}@Overridepublic 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);}@Overridepublic void deleteCartById(int cartId) {String sql = "DELETE FROM cart WHERE CART_ID=?";super.update(sql, cartId);}@Overridepublic void deleteCartByUser(int userId) {String sql = "DELETE FROM cart WHERE USER_ID=?";super.update(sql, userId);}@Overridepublic int cartCount(int userId) {String sql = "select count(*)from cart where user_id=" + userId;return Integer.parseInt(super.getValue(sql).toString());}@Overridepublic 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);}@Overridepublic 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);}@Overridepublic 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);}@Overridepublic 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);}@Overridepublic void addComment(Comment comment) {String sql = "INSERT INTO Comment (level,content,order_Id) VALUES (?,?,?)";super.update(sql, comment.getLevel(), comment.getContent(), comment.getOrderId());}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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());}@Overridepublic int getOrderStatus(String orderNum) {String sql = "SELECT DISTINCT ORDER_STATUS FROM orders WHERE ORDER_NUM=?";return Integer.parseInt(super.getValue(sql, orderNum).toString());}@Overridepublic void changeOrderStatus(String orderNum, int status) {String sql = "UPDATE orders SET ORDER_STATUS=? WHERE ORDER_NUM=?";super.update(sql, status, orderNum);}@Overridepublic void changeOrderVisible(String orderNum, int status) {String sql = "UPDATE orders SET VISIBLE=? WHERE ORDER_NUM=?";super.update(sql, status, orderNum);}@Overridepublic 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);}@Overridepublic 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());}@Overridepublic 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);}// 通过用户名获取用户@Overridepublic 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);}// 登录@Overridepublic 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;}// 注册@Overridepublic int userRegister(User u) {String sql = "insert into user (username,password) values (?,?);";return super.updateGetGeneratedKeys(sql, u.getUsername(), u.getPassword());}@Overridepublic 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);}@Overridepublic 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());}@Overridepublic 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);}@Overridepublic 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());}@Overridepublic 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());}@Overridepublic 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);}@Overridepublic int addManager(Manager manager) {String sql = "INSERT INTO manager(MANAGER_NAME,MANAGER_PASSWORD)VALUES(?,?)";return super.updateGetGeneratedKeys(sql, manager.getManagerName(), manager.getManagerPassword());}@Overridepublic void addPromission(int managerId, int roleId) {String sql = "INSERT INTO manager_role (MANAGER_ID,ROLE_ID)VALUES(?,?)";super.update(sql, managerId, roleId);}@Overridepublic 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);}@Overridepublic 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);}@Overridepublic List<Manager> getManagers() {String sql = "SELECT MANAGER_ID managerId,MANAGER_NAME managerName,MANAGER_PASSWORD managerPassword"+ " FROM manager";return super.getObjectForList(Manager.class, sql);}@Overridepublic void editManager(Manager manager) {String sql = "UPDATE manager SET MANAGER_PASSWORD=? WHERE MANAGER_ID=?";super.update(sql,manager.getManagerPassword(), manager.getManagerId());}@Overridepublic 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);}@Overridepublic 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);}@Overridepublic 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);}@Overridepublic void changeProductStatus(int productStatus, int productId) {String sql = "UPDATE product SET PRODUCT_STATUS=? WHERE PRODUCT_ID=?";super.update(sql, productStatus,productId);}@Overridepublic 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());}@Overridepublic 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);}@Overridepublic void changeUserStatus(String userStatus,String userId) {String sql = "UPDATE user SET USER_STATUS=? WHERE USER_ID=?";super.update(sql,userStatus,userId);}@Overridepublic 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");}@Overridepublic 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);}@Overridepublic void deleteOrderByNum(String orderNum) {String sql = "DELETE FROM orders WHERE ORDER_NUM=?";super.update(sql, orderNum);}@Overridepublic 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);}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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);}@Overridepublic 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);}@Overridepublic void changePromission(int managerId, int roleId) {String sql = "UPDATE manager_role SET ROLE_ID=? WHERE MANAGER_ID=?";super.update(sql, roleId, managerId);}@Overridepublic 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);}@Overridepublic 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);}@Overridepublic 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);}@Overridepublic 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);}@Overridepublic 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);}@Overridepublic 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);}@Overridepublic void editMenu(Menu menu, int oldmenuId) {deleteMenu(oldmenuId);addMenu(menu);}@Overridepublic 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());}@Overridepublic 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();}@Overridepublic 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";}@Overridepublic void submitPayment(String orderNum, int i) {leoShopDao.changeOrderStatus(orderNum,i);}@Overridepublic 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);}}}@Overridepublic int registerUser(User user) {return leoShopDao.userRegister(user);}@Overridepublic 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);}@Overridepublic void updateAddressById(Address address) {leoShopDao.updateAddressById(address);}@Overridepublic void deleteAddressById(int addId) {leoShopDao.deleteAddressById(addId);}@Overridepublic void changeOrderVisible(String orderNum, int i) {leoShopDao.changeOrderVisible(orderNum, i);}@Overridepublic void changeOrderStatus(String orderNum, int i) {leoShopDao.changeOrderStatus(orderNum,i);}@Overridepublic void addComment(Comment comment) {leoShopDao.addComment(comment);}@Overridepublic void deleteOrderByNum(String orderNum) {leoShopDao.deleteOrderByNum(orderNum);}@Overridepublic void deleteProductsByIds(String[] productIds) {leoShopDao.deleteProductsByIds(productIds);}@Overridepublic void changeProductStatus(int productStatus, int productId) {leoShopDao.changeProductStatus(productStatus, productId);}@Overridepublic void editProduct(Product product) {leoShopDao.editProduct(product);}@Overridepublic void addProduct(Product product) {leoShopDao.addProduct(product);}@Overridepublic void editUser(User user) {leoShopDao.editUser(user);}@Overridepublic void deleteManager(int managerId) {leoShopDao.deleteManager(managerId);}@Overridepublic 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;}@Overridepublic void changePromission(int managerId, int roleId) {leoShopDao.changePromission(managerId, roleId);}@Overridepublic void editMenu(Menu menu, int oldmenuId) {leoShopDao.editMenu(menu, oldmenuId);}@Overridepublic void addMenu(Menu menu) {leoShopDao.addMenu(menu);}@Overridepublic 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;@Overridepublic 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;}//处理表单的重复提交startString tokenValue = request.getParameter("token");String token = (String) session.getAttribute("token");if(token != null && token.equals(tokenValue)){session.removeAttribute("token");}else {return REDIRECT + "repeatCreateOrder.jsp";}//处理表单的重复提交endMap<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); }
}

完整源码

觉得有用,记得一键三连哦!

Javawebservlet+Mysql实现的化妆品售卖系统(功能包含分角色,登录/注册、化妆品列表/商品详情/加入购物车/订单结算付款/地址管理/后台权限管理/商品管理/订单列表等)相关推荐

  1. SSM+Mysql实现的共享单车管理系统(功能包含分角色,登录、用户管理、服务点管理、单车管理、分类管理、学生信息管理、单车租赁、信息统计、系统设置等)

    博客目录 SSM+Mysql实现的共享单车管理系统 实现功能截图 系统功能 使用技术 代码 完整源码 SSM+Mysql实现的共享单车管理系统 本系统一个学校共享单车管理的项目,通过线上系统化的管理, ...

  2. SSM框架(spring+springmvc+mybatis)+Mysql实现的社区物业管理系统(功能包含分角色,报修管理、抄表管理、车位管理、房屋管理、业主管理、投诉管理、报修统计分析等)

    博客目录 SSM框架(spring+springmvc+mybatis)+Mysql实现的社区物业管理系统 实现功能截图 系统功能 使用技术 代码 完整源码 SSM框架(spring+springmv ...

  3. SSM框架+VUE+Mysql实现的疫苗预约接种管理系统(功能包含分角色,登录/注册、疫苗管理、接种点管理、用户管理、疫苗类型管理、我的预约、预约接种管理、关于等)

    博客目录 SSM框架+VUE+Mysql实现的疫苗预约接种管理系统 实现功能截图 系统功能 使用技术 代码 完整源码 SSM框架+VUE+Mysql实现的疫苗预约接种管理系统 本系统为了解决疫苗线下预 ...

  4. 基于JAVA+SpringBoot+Mybatis+MYSQL的化妆品售卖系统

    项目功能: 系统包括前台用户登录注册,首页化妆品列表展示,按分类筛选商品,根据关键词搜索商品,查看商品详情,立即购买.加入购物车.收藏功能,提交订单支付,个人信息管理,收获地址管理订单管理,后台管理员 ...

  5. SSH+Mysql实现的作业批改管理系统(功能包含分学生、教师、管理员三种角色登录,作业上传、给老师留言、学习内容下载、作业评分、给学生留言、教师学生管理、公告管理、学习资源管理、作业管理等)

    博客目录 SSH+Mysql实现的作业批改管理系统 实现功能截图 系统功能 使用技术 代码 完整源码 SSH+Mysql实现的作业批改管理系统 本系统是一个作业批改管理系统系统,分为三个角色:学生.教 ...

  6. SpringBoot+Mybatis+Maven+Mysql实现的校园论坛管理系统(功能包含前后台,登录、markdown发帖、留言、分类帖子查看、用户管理、帖子管理、回复管理、评论管理、留言管理等)

    博客目录 SpringBoot+Mybatis+Maven+Mysql实现的校园论坛管理系统 实现功能截图 系统功能 使用技术 代码 完整源码 SpringBoot+Mybatis+Maven+Mys ...

  7. php登陆页面修改密码的功能,使用bootstrap创建登录注册页面并实现表单验证功能...

    本篇文章给大家介绍一下使用bootstrap创建登录注册页面并实现单验证功能的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 用bootstrap做登入注册页面,使用valid ...

  8. Vue项目实战——【基于 Vue3.x + Vant UI】实现一个多功能记账本(登录注册页面,验证码)

    基于 Vue3.x + Vant UI 的多功能记账本(四) 文章目录 基于 Vue3.x + Vant UI 的多功能记账本(四) 项目演示 1.登录注册页面 2.图片验证码 3.修改 axios ...

  9. spring boot火车票售卖系统毕业设计代码211004

    springboot火车票售卖系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻 ...

最新文章

  1. ethereumjs/ethereumjs-vm-2-API文档
  2. HDU1753 大明A+B(大数相加)(Java题解)
  3. 启动oracle的三过程
  4. ASP.NET Core 行军记 -----第一步(艰辛的 MVC Hello World)
  5. android抓包工具——使用fiddler4在安卓手机抓包
  6. python+unittest框架整理(一点点学习前辈们的封装思路,一点点成长。。。)
  7. mycli到底有多好用?
  8. bootstrap datatable 数据刷新问题
  9. Oracle中集合操作符
  10. kali 克隆网页_Web侦察工具HTTrack (网站克隆)
  11. libSVM简介及核函数模型选择
  12. ns-allinone-3.X(simulator模拟器)简单配置
  13. 在经营景城网过程中对alax排名的一些思考
  14. git-lfs使用笔记
  15. 第五季完美童模 代言人陈梓桐 现场走秀回顾
  16. 安装VS2003时IIS下面缺少FrontPage2000服务器扩展的解决办法
  17. java定义类属性方法_java定义类、属性、方法
  18. NYOJ594 还是A+B
  19. T4模板使用(一):认识模板及简单使用
  20. QT中事件与图形处理详细(鼠标、键盘、定时等事件与图片加载处理)

热门文章

  1. 外星人台式机无盘服务器,【图片】外星人台式机更换第三方主板安装Alienware Command Center教程【alienware吧】_百度贴吧...
  2. ubuntu 16.04LTS 开机启动自动更换壁纸
  3. 数码管动态显示及模块化编程
  4. 【会议分享】2022年第四届计算机视觉与模式识别国际会议(CCVPR 2022)
  5. MySQL 左连接、右连接、内连接
  6. axure 数字累加
  7. 计算机系专业简历建议
  8. 菏泽中考报名不报计算机,菏泽中考报名系统
  9. 教育部:没有“第一学历”!
  10. php型号,PHP获取手机型号与系统型号