diff --git a/src/java/sos/bean/OrderBean.java b/src/java/sos/bean/OrderBean.java index 1bfc95f..40b1baf 100644 --- a/src/java/sos/bean/OrderBean.java +++ b/src/java/sos/bean/OrderBean.java @@ -7,16 +7,17 @@ public class OrderBean implements Serializable { private String no, type, status; private double amount; - private Date time; + private Date orderDate, delivDate; private int clientId; public OrderBean() { } - public OrderBean(String no, double amount, Date time, String type, String status, int clientId) { + public OrderBean(String no, double amount, Date orderDate, Date delivDate, String type, String status, int clientId) { this.no = no; this.amount = amount; - this.time = time; + this.orderDate = orderDate; + this.delivDate = delivDate; this.type = type; this.status = status; this.clientId = clientId; @@ -53,13 +54,21 @@ public double getAmount() { public void setAmount(double amount) { this.amount = amount; } + + public Date getOrderDate() { + return orderDate; + } + + public void setOrderDate(Date orderDate) { + this.orderDate = orderDate; + } - public Date getTime() { - return time; + public Date getDelivDate() { + return delivDate; } - public void setTime(Date time) { - this.time = time; + public void setDelivDate(Date delivDate) { + this.delivDate = delivDate; } public int getClientId() { diff --git a/src/java/sos/db/ItemDB.java b/src/java/sos/db/ItemDB.java index 3052bcd..776d4bc 100644 --- a/src/java/sos/db/ItemDB.java +++ b/src/java/sos/db/ItemDB.java @@ -32,7 +32,7 @@ public int addItem(String name, String desc, String brand, String catId, float p id = rs.getInt(1); statement.close(); } catch (Exception e) { - /* Who cares? */ + e.printStackTrace(); } return id; } @@ -47,7 +47,7 @@ public boolean removeItem(String prodNo) { success = true; statement.close(); } catch (Exception e) { - /* Who cares? */ + e.printStackTrace(); } return success; } @@ -91,7 +91,7 @@ public ArrayList getItemsByAttr(String table, String attr, String op, products.add(itemFronResult(table, result)); statement.close(); } catch (Exception e) { - /* Who cares? */ + e.printStackTrace(); } return products; } @@ -145,7 +145,6 @@ public ArrayList getCategoriesByAttr(String attr, String op, Strin statement.close(); } catch (Exception e) { e.printStackTrace(); - /* Who cares? */ } return categories; } @@ -188,7 +187,7 @@ public boolean update(ItemBean item) { statement.close(); return true; } catch (Exception e) { - /* Who cares? */ + e.printStackTrace(); } return false; } diff --git a/src/java/sos/db/OrderDB.java b/src/java/sos/db/OrderDB.java index 427ac26..970d861 100644 --- a/src/java/sos/db/OrderDB.java +++ b/src/java/sos/db/OrderDB.java @@ -26,56 +26,58 @@ public boolean addCreditRequest(int clientId, int bonus, long time) { success = true; statement.close(); } catch (Exception e) { - /* Who cares? */ + e.printStackTrace(); } return success; } - public int addOrder(double amount, Date time, String ordType, String status, int clientId) { + public int addOrder(double amount, Date orderDate, Date delivDate, String orderType, String status, int clientId) { PreparedStatement statement = null; int id = -1; try { - statement = getConnection().prepareStatement("INSERT INTO ORDERS (AMOUNT,TIME,ORDTYPE,STATUS,CLIENTID) VALUES (?,?,?,?,?)", + statement = getConnection().prepareStatement("INSERT INTO ORDERS (AMOUNT,ORDERTIME,COLLECTTIME,ORDERTYPE,STATUS,CLIENTID) VALUES (?,?,?,?,?,?)", Statement.RETURN_GENERATED_KEYS); statement.setDouble(1, amount); - statement.setLong(2, time.getTime()); - statement.setString(3, ordType); - statement.setString(4, status); - statement.setInt(5, clientId); + statement.setLong(2, orderDate.getTime()); + statement.setLong(3, delivDate.getTime()); + statement.setString(4, orderType); + statement.setString(5, status); + statement.setInt(6, clientId); ResultSet rs; if (statement.executeUpdate() >= 1) if ((rs = statement.getGeneratedKeys()).next()) id = rs.getInt(1); statement.close(); } catch (Exception e) { - /* Who cares? */ + e.printStackTrace(); } return id; } - public boolean addProductOrder(int quantity, String prodNo, int ordNo) { + public boolean addProductOrder(int quantity, String prodNo, int orderNo) { PreparedStatement statement = null; boolean success = false; try { - statement = getConnection().prepareStatement("INSERT INTO PRODUCTS_ORDERS (QUANTITY,PRODNO,ORDNO) VALUES (?,?,?)"); + statement = getConnection().prepareStatement("INSERT INTO PRODUCTS_ORDERS (QUANTITY,PRODNO,ORDERNO) VALUES (?,?,?)"); statement.setInt(1, quantity); statement.setString(2, prodNo); - statement.setInt(3, ordNo); + statement.setInt(3, orderNo); if (statement.executeUpdate() >= 1) success = true; statement.close(); } catch (Exception e) { - /* Who cares? */ + e.printStackTrace(); } return success; } private OrderBean orderFronResult (ResultSet result) throws Exception { OrderBean order = new OrderBean(); - order.setNo(result.getString("OrdNo")); + order.setNo(result.getString("OrderNo")); order.setAmount(result.getDouble("Amount")); - order.setTime(new Date(result.getLong("Time"))); - order.setType(result.getString("OrdType")); + order.setOrderDate(new Date(result.getLong("OrderTime"))); + order.setDelivDate(new Date(result.getLong("CollectTime"))); + order.setType(result.getString("OrderType")); order.setStatus(result.getString("Status")); order.setClientId(result.getInt("ClientID")); return order; @@ -97,13 +99,13 @@ public ArrayList getOrdersByAttr(String attr, String op, String val, orders.add(orderFronResult(result)); statement.close(); } catch (Exception e) { - /* Who cares? */ + e.printStackTrace(); } return orders; } public ArrayList getOrder10LastClient(int clientID) { - return getOrdersByAttr("CLIENTID", "=", clientID + " order by time desc", 10); + return getOrdersByAttr("CLIENTID", "=", clientID + " ORDER BY ORDERTIME DESC", 10); } public ArrayList getAllOrders() { @@ -111,7 +113,7 @@ public ArrayList getAllOrders() { } public OrderBean getOrder(String no) { - ArrayList result = getOrdersByAttr("ORDNO", "=", no); + ArrayList result = getOrdersByAttr("ORDERNO", "=", no); return result.size() == 1 ? result.get(0) : null; } @@ -125,7 +127,7 @@ public boolean removeCreditRequest(String id) { success = true; statement.close(); } catch (Exception e) { - /* Who cares? */ + e.printStackTrace(); } return success; } @@ -146,7 +148,7 @@ public ArrayList getCreditRequestsByAttr(String attr, String o } statement.close(); } catch (Exception e) { - /* Who cares? */ + e.printStackTrace(); } return requests; } @@ -163,19 +165,20 @@ public BonusRequestBean getCreditRequest(String id) { public boolean update(OrderBean order) { PreparedStatement statement = null; try { - String preQueryStatement = "UPDATE ORDERS SET AMOUNT=?,TIME=?,STATUS=?,CLIENTID=?,ORDTYPE=? WHERE ORDNO = ?"; + String preQueryStatement = "UPDATE ORDERS SET AMOUNT=?,ORDERTIME=?,COLLECTTIME=?,STATUS=?,CLIENTID=?,ORDERTYPE=? WHERE ORDERNO = ?"; statement = getConnection().prepareStatement(preQueryStatement); statement.setDouble(1, order.getAmount()); - statement.setLong(2, order.getTime().getTime()); - statement.setString(3, order.getStatus()); - statement.setInt(4, order.getClientId()); - statement.setString(5, order.getType()); - statement.setString(6, order.getNo()); + statement.setLong(2, order.getOrderDate().getTime()); + statement.setLong(3, order.getDelivDate().getTime()); + statement.setString(4, order.getStatus()); + statement.setInt(5, order.getClientId()); + statement.setString(6, order.getType()); + statement.setString(7, order.getNo()); statement.executeUpdate(); statement.close(); return true; } catch (Exception e) { - /* Who cares? */ + e.printStackTrace(); } return false; } diff --git a/src/java/sos/db/UserDB.java b/src/java/sos/db/UserDB.java index 2aa4d89..a2307bc 100644 --- a/src/java/sos/db/UserDB.java +++ b/src/java/sos/db/UserDB.java @@ -40,7 +40,6 @@ public boolean addClient(String name, int phone, String address) { statement.close(); } catch (Exception e) { e.printStackTrace(); - /* Who cares? */ } return success; } @@ -69,7 +68,7 @@ public IUserBean login(String username, String password) { } } } catch (Exception e) { - /* Who cares? */ + e.printStackTrace(); } return null; } @@ -84,7 +83,7 @@ public ArrayList getClientsByAttr(String attr, String op, String val clients.add(clientFromResult(result)); statement.close(); } catch (Exception e) { - /* Who cares? */ + e.printStackTrace(); } return clients; } @@ -110,7 +109,7 @@ public boolean update(ClientBean client) { statement.close(); return true; } catch (Exception e) { - /* Who cares? */ + e.printStackTrace(); } return false; } diff --git a/src/java/sos/ejb/ViewCountSessionBean.java b/src/java/sos/ejb/ViewCountSessionBean.java new file mode 100644 index 0000000..afbcd01 --- /dev/null +++ b/src/java/sos/ejb/ViewCountSessionBean.java @@ -0,0 +1,24 @@ +package sos.ejb; + +import java.util.LinkedHashMap; +import javax.ejb.Remote; +import javax.ejb.Stateful; + +@Stateful +@Remote(ViewCounter.class) +public class ViewCountSessionBean implements ViewCounter { + + private LinkedHashMap counts = new LinkedHashMap<>(); + + public void plusOne(String itemNo) { + if (counts.get(itemNo) == null) + counts.put(itemNo, 1); + else + counts.put(itemNo, counts.get(itemNo) + 1); + } + + public int getCount(String itemNo) { + return counts.get(itemNo); + } + +} diff --git a/src/java/sos/ejb/ViewCounter.java b/src/java/sos/ejb/ViewCounter.java new file mode 100644 index 0000000..f259f5b --- /dev/null +++ b/src/java/sos/ejb/ViewCounter.java @@ -0,0 +1,9 @@ +package sos.ejb; + +public interface ViewCounter { + + void plusOne(String itemNo); + + int getCount(String itemNo); + +} diff --git a/src/java/sos/servlet/ItemServlet.java b/src/java/sos/servlet/ItemServlet.java index b4ffce7..cb58faa 100644 --- a/src/java/sos/servlet/ItemServlet.java +++ b/src/java/sos/servlet/ItemServlet.java @@ -3,15 +3,19 @@ import java.io.IOException; import java.io.PrintWriter; import java.lang.reflect.Method; +import java.text.SimpleDateFormat; import java.util.AbstractMap.SimpleEntry; import java.util.ArrayList; import java.util.Date; +import java.util.Hashtable; import java.util.LinkedHashMap; import java.util.Map.Entry; import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.script.ScriptEngine; -import javax.script.ScriptEngineManager; +import javax.ejb.EJB; +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; @@ -19,6 +23,8 @@ import javax.servlet.http.HttpServletResponse; import sos.bean.*; import sos.db.*; +import sos.ejb.ViewCountSessionBean; +import sos.ejb.ViewCounter; @WebServlet(name = "ItemServlet", urlPatterns = {"/item"}) public class ItemServlet extends HttpServlet { @@ -26,6 +32,8 @@ public class ItemServlet extends HttpServlet { private ItemDB itemDB; private UserDB userDB; private OrderDB orderDB; + @EJB + private ViewCounter counter; public void init() throws ServletException { String host = this.getServletContext().getInitParameter("host"); @@ -34,6 +42,21 @@ public void init() throws ServletException { itemDB = new ItemDB(host, user, pass); userDB = new UserDB(host, user, pass); orderDB = new OrderDB(host, user, pass); + try { + counter = lookupRemoteStatefulCounter(); + } catch (Exception e) {} + } + + private ViewCounter lookupRemoteStatefulCounter() throws NamingException { + final Hashtable jndiProperties = new Hashtable(); + jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); + final Context context = new InitialContext(jndiProperties); + final String appName = ""; + final String moduleName = "viewcount"; + final String distinctName = ""; + final String beanName = ViewCountSessionBean.class.getSimpleName(); + final String viewClassName = ViewCounter.class.getName(); + return (ViewCounter) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName + "?stateful"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) @@ -72,7 +95,10 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) if (null == item) request.getRequestDispatcher("404.jsp").forward(request, response); else { + counter.plusOne(item.getNo() + "@" + item.getCatNo()); + int count = counter.getCount(item.getNo() + "@" + item.getCatNo()); request.setAttribute("gift", item); + request.setAttribute("viewCount", count); request.getRequestDispatcher("item/viewGift.jsp").forward(request, response); } break; @@ -81,8 +107,11 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) if (null == item) request.getRequestDispatcher("404.jsp").forward(request, response); else { + counter.plusOne(item.getNo() + "@" + item.getCatNo()); + int count = counter.getCount(item.getNo() + "@" + item.getCatNo()); request.setAttribute("category", itemDB.getCategoryByNo(item.getCatNo())); request.setAttribute("item", item); + request.setAttribute("viewCount", count); request.getRequestDispatcher("item/details.jsp").forward(request, response); } break; @@ -288,8 +317,13 @@ else if (user != null && user instanceof ClientBean) { int total = new Integer(request.getParameter("totalCost")); boolean pickup = "true".equals(request.getParameter("pickup")); int clientId = ((ClientBean) user).getId(); + SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + Date delivDate = new Date(System.currentTimeMillis() + (7 * 24 * 60 * 60 * 1000)); // +7 days if parse exception + try { + delivDate = parser.parse(request.getParameter("date")); + } catch (Exception e) {} /* create order, credit request */ - int ordId = orderDB.addOrder(total, new Date(), pickup ? "Self pick-up" : "Delivery", "process", clientId); + int ordId = orderDB.addOrder(total, new Date(), delivDate, pickup ? "Self pick-up" : "Delivery", "process", clientId); int credit = (total / 1000) * 100; if (credit > 0) orderDB.addCreditRequest(clientId, credit, System.currentTimeMillis()); diff --git a/src/java/sos/tag/CheckoutListItemTag.java b/src/java/sos/tag/CheckoutListItemTag.java index 4188d0e..c148d50 100644 --- a/src/java/sos/tag/CheckoutListItemTag.java +++ b/src/java/sos/tag/CheckoutListItemTag.java @@ -7,8 +7,17 @@ public class CheckoutListItemTag extends SimpleTagSupport { + private int index; private Entry entry; + public int getIndex() { + return index; + } + + public void setIndex(int index) { + this.index = index; + } + public Entry getEntry() { return entry; } @@ -22,7 +31,7 @@ public void doTag() throws java.io.IOException { ItemBean item = entry.getKey(); out.print("
"); out.print("
"); - out.print("
#" + item.getNo()+ "   " + item.getName() + "
"); + out.print("
#" + index + "   " + item.getName() + "
"); out.print("
"); out.print("
Price
"); out.print("
"); diff --git a/src/java/sos/tag/IncompleteOrderTag.java b/src/java/sos/tag/IncompleteOrderTag.java index c974dc0..9c5718c 100644 --- a/src/java/sos/tag/IncompleteOrderTag.java +++ b/src/java/sos/tag/IncompleteOrderTag.java @@ -20,7 +20,7 @@ public void setOrder(OrderBean order) { public void doTag() throws java.io.IOException { JspWriter out = getJspContext().getOut(); Calendar cal = Calendar.getInstance(); - cal.setTime(order.getTime()); + cal.setTime(order.getOrderDate()); String date = cal.get(Calendar.YEAR) + "-" + (1 + cal.get(Calendar.MONTH)) + "-" + cal.get(Calendar.DATE); out.print("
"); out.print("
"); diff --git a/src/java/sos/tag/OrderListItemTag.java b/src/java/sos/tag/OrderListItemTag.java index 9fb02b6..f7b786e 100644 --- a/src/java/sos/tag/OrderListItemTag.java +++ b/src/java/sos/tag/OrderListItemTag.java @@ -29,15 +29,18 @@ public void setAdmin(Boolean admin) { public void doTag() throws java.io.IOException { JspWriter out = getJspContext().getOut(); Calendar cal = Calendar.getInstance(); - cal.setTime(order.getTime()); - String date = cal.get(Calendar.YEAR) + "-" + (1 + cal.get(Calendar.MONTH)) + "-" + cal.get(Calendar.DATE); + cal.setTime(order.getOrderDate()); + String orderDate = cal.get(Calendar.YEAR) + "-" + (1 + cal.get(Calendar.MONTH)) + "-" + cal.get(Calendar.DATE); + cal.setTime(order.getDelivDate()); + String delivDate = cal.get(Calendar.YEAR) + "-" + (1 + cal.get(Calendar.MONTH)) + "-" + cal.get(Calendar.DATE); out.print("
"); out.print("
"); out.print("
#" + order.getNo() + " " + order.getType() + " order" + "
"); out.print("
"); out.print(" Status: " + order.getStatus() + "
"); out.print(" Total: $" + order.getAmount() + "
"); - out.print(" Date: " + date); + out.print(" Order date: " + orderDate + "
"); + out.print(" " + order.getType() + " date: " + delivDate); out.print("
"); if (admin) { out.print("
"); diff --git a/web/WEB-INF/tlds/checkout-listitem.tld b/web/WEB-INF/tlds/checkout-listitem.tld index 733b444..7bf8f7b 100644 --- a/web/WEB-INF/tlds/checkout-listitem.tld +++ b/web/WEB-INF/tlds/checkout-listitem.tld @@ -11,6 +11,13 @@ sos.tag.CheckoutListItemTag empty + + index + true + true + java.lang.Integer + + entry true diff --git a/web/item/cancelOrder.jsp b/web/item/cancelOrder.jsp index 3388edc..b985f70 100644 --- a/web/item/cancelOrder.jsp +++ b/web/item/cancelOrder.jsp @@ -29,10 +29,16 @@
\ No newline at end of file diff --git a/web/item/checkout.jsp b/web/item/checkout.jsp index 0d6c8ba..db5a622 100644 --- a/web/item/checkout.jsp +++ b/web/item/checkout.jsp @@ -27,9 +27,9 @@
<% int total = 0; %> - <% for (Entry entry : cart) { %> - - <% total += entry.getKey().getPrice() * entry.getValue(); %> + <% for (int i = 0; i < cart.size(); i++) { %> + + <% total += cart.get(i).getKey().getPrice() * cart.get(i).getValue(); %> <% } %>
@@ -51,20 +51,31 @@
Item(s) will deliver to the following address: -

- <%=client.getAddress()%>
- Edit + <%=client.getAddress()%> - Edit +

+ Select date and time for delivery: +

+ Date  +
+

+ Time  +
+ : +
@@ -88,7 +99,11 @@ $('.ui.checkbox').checkbox({ }); $('form').submit(function (e) { e.preventDefault(); - $.post(this.getAttribute('action'), {totalCost: <%=total%>, pickup: $('#pickup').is(':checked')}, function () { + $.post(this.getAttribute('action'), { + totalCost: <%=total%>, + pickup: $('#pickup').is(':checked'), + date: $('#timedat').val() + ' ' + $('#timehrs').val() + ':' + $('#timemin').val() + }, function () { location.href = 'client?action=orderHistory'; }); }); diff --git a/web/item/details.jsp b/web/item/details.jsp index ef0efb2..7df2d0a 100644 --- a/web/item/details.jsp +++ b/web/item/details.jsp @@ -14,6 +14,16 @@

<% ItemBean item = (ItemBean) request.getAttribute("item"); %> <% CategoryBean category = (CategoryBean) request.getAttribute("category"); %> +
+
+
+
This item have been viewed for
+
+
<%=request.getAttribute("viewCount")%>
+
times
+
+
+
diff --git a/web/item/viewGift.jsp b/web/item/viewGift.jsp index 74f77fc..1d44c50 100644 --- a/web/item/viewGift.jsp +++ b/web/item/viewGift.jsp @@ -13,6 +13,16 @@

<% ItemBean item = (ItemBean) request.getAttribute("gift"); %> +
+
+
+
This gift have been viewed for
+
+
<%=request.getAttribute("viewCount")%>
+
times
+
+
+

<%=item.getName()%>