package com.yc.sdk.shopping.action; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import com.yc.action.BaseAction; import com.yc.entity.DataSourceEntity; import com.yc.multiData.MultiDataSource; import com.yc.multiData.SpObserver; import com.yc.sdk.shopping.action.api.ShopCcCode; import com.yc.sdk.shopping.entity.CartEntity; import com.yc.sdk.shopping.entity.CurrencyEntity; import com.yc.sdk.shopping.entity.MatCodeEntity; import com.yc.sdk.shopping.entity.OptionEntity; import com.yc.sdk.shopping.entity.OrderDetailEntity; import com.yc.sdk.shopping.entity.SettingEntity; import com.yc.sdk.shopping.entity.ShopCcCodeEntity; import com.yc.sdk.shopping.service.CartIfc; import com.yc.sdk.shopping.service.CurrencyIfc; import com.yc.sdk.shopping.service.MatCodeIfc; import com.yc.sdk.shopping.service.MatOptionIfc; import com.yc.sdk.shopping.service.SettingIfc; import com.yc.sdk.shopping.service.imagedata.ShoppingImageDataIfc; import com.yc.sdk.shopping.service.order.OrderIfc; import com.yc.sdk.shopping.util.SettingKey; import com.yc.utils.SessionKey; @Controller @Scope("prototype") @RequestMapping("/shopping/cart.do") public class Cart extends BaseAction { static Gson gson = new Gson(); @Autowired CartIfc cartIfc; @Autowired MatCodeIfc matCodeIfc; @Autowired CurrencyIfc currencyIfc; @Autowired MatOptionIfc matOptionIfc; @Autowired OrderIfc orderIfc; @Autowired SettingIfc settingIfc; static double maxQuantity = 9999999 ; @Autowired ShoppingImageDataIfc imgData; /** * 选中购物车中的某个商品准备提交订单 * @param request * @param response */ @RequestMapping(params = "m=checkbox") public void checkbox(HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(); //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID); String hostUrl = SettingKey.getHostUrl(request); //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID); // 将微信corpid组装成url String wxQueryString = SettingKey.getQueryStringByWx(request); boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request); String selectedCartIds = request.getParameter(SettingKey.CHECKBOX); if (selectedCartIds != null && !"".equals(selectedCartIds)) { selectedCartIds = selectedCartIds.replace(SettingKey.CHECKBOX+"_", ""); session.setAttribute(SettingKey.CHECKBOX, selectedCartIds); }else { session.removeAttribute(SettingKey.CHECKBOX); } String userCode = (session.getAttribute(SessionKey.USERCODE) == null ? "" : (String)session.getAttribute(SessionKey.USERCODE)); String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? "" : (String) session.getAttribute(SessionKey.WEIXIN_OPENID) ) ; String sessionId = session.getId(); String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null?"": (String)session.getAttribute(SettingKey.CLTCODE)) ; DecimalFormat df=(DecimalFormat)NumberFormat.getInstance(); df.setMaximumFractionDigits(2); JsonObject json = new JsonObject(); JsonObject errJson = new JsonObject(); SettingEntity settingEntity = null ; try { DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap( request) ; SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());// 切换数据源 settingEntity = settingIfc.getSettingEntity() ; //取网店 shopcccode ShopCcCodeEntity shopCcCodeEntity = ShopCcCode.getShopCcCode(settingEntity,request); //选择购物车中商品 cartIfc.saveSelectedCartIds(userCode, sessionId,openId,cltCode,shopCcCodeEntity.getShopCcCode(),selectedCartIds); //List cartList = cartIfc.getCarts(selectedCartIds); List cartList = cartIfc.getCartList(userCode, sessionId, openId, cltCode,shopCcCodeEntity.getShopCcCode()); // 重新取一次数,确保购物车显示正确 CurrencyEntity currencyEntity = currencyIfc.getUserCurrency(userCode); /******** 购物车 开始清单输出 *************/ //DecimalFormat df = new DecimalFormat("0.00"); double selectTotalAmount = 0 ; //给 footer.jsp 页面使用,用于赋初值 int selectItems = 0 ; //给 footer.jsp 页面使用,用于赋初值 int cartItems = 0 ; //给 footer.jsp 页面使用,用于赋初值 if (cartList!= null) { cartItems = cartList.size(); } //取已经选择的金额数 List selectedCartList = cartList.stream().filter((CartEntity c)->c.isSelected()).collect(Collectors.toList()); for (int i = 0; selectedCartList!=null&&i < selectedCartList.size(); i++) { selectTotalAmount += selectedCartList.get(i).getAmount() ; selectItems ++ ; } //组装 json array 输出 JsonArray cartListJsonArray = this.getCartJsonArray(request, settingEntity, cartList, currencyEntity, dataSourceEntity); json.add("list", cartListJsonArray); json.addProperty("SelectTotalAmount",df.format(selectTotalAmount)); json.addProperty("SelectItems", selectItems); json.addProperty("CartItems", cartItems); /******** 购物车 结束清单输出 *************/ //预估配送费用 double freeCost = SettingKey.getFreeCost(request) ; //优惠券 double couponCost = SettingKey.getCouponCost(request) ; //礼品劵 double voucherCost = SettingKey.getVoucherCost(request) ; //余额 double balance = SettingKey.getBalance(request) ; //double totalQuantity = (list!=null&&list.size()>0?list.get(0).getTotalQuantity():0); double selectcdTotalWeight = (cartList!=null&&cartList.size()>0?cartList.get(0).getSelectedTotalWeight():0); double paymentAmount = selectTotalAmount + freeCost - couponCost - voucherCost - balance; String mytitle = "购物车内的商品"; if (settingEntity.getCartWeight()) { mytitle += " (" +selectcdTotalWeight + settingEntity.getWeightClassId() + ")"; } //json.addProperty("selecttotalamount",(totalAmount <= 0?"0.0 (无需支付)":df.format(totalAmount)+"")); //json.addProperty("selectitems",(cartList!=null?cartList.size():0)+""); json.addProperty("PaymentAmount",(paymentAmount <= 0?"0.0 (无需支付)":df.format(paymentAmount)+"")); json.addProperty("mytitle",mytitle); json.addProperty("cart-num",(cartList!=null?cartList.size():0)); json.addProperty("redirect", hostUrl +"/shopping/"+ ( isMoblieBrowser?"mobile/":"") +"checkoutnew/index.jsp" + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString)); this.printJson(response, json.toString()); } catch (Exception e ){ e.printStackTrace(); errJson.addProperty("warning",(e.getCause()!=null?e.getCause().getMessage(): e.getMessage())); json.add("error", errJson); this.printJson(response, json.toString()); return; }finally { SpObserver.setDBtoInstance(); } } @RequestMapping(params = "m=checkboxByPicture") public void checkboxByPicture(HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(); //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID); String hostUrl = SettingKey.getHostUrl(request); //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID); // 将微信corpid组装成url String wxQueryString = SettingKey.getQueryStringByWx(request); boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request); String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? "" : (String) session.getAttribute(SettingKey.CLTCODE)); String checkbox = request.getParameter(SettingKey.CHECKBOX); if (checkbox != null && !"".equals(checkbox)) { checkbox = checkbox.replace(SettingKey.CHECKBOX+"_", ""); session.setAttribute(SettingKey.CHECKBOXBYPICTURE, checkbox); }else{ session.removeAttribute(SettingKey.CHECKBOXBYPICTURE); } DecimalFormat df=(DecimalFormat)NumberFormat.getInstance(); df.setMaximumFractionDigits(2); JsonObject json = new JsonObject(); JsonObject errJson = new JsonObject(); SettingEntity settingEntity = null ; try { DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap( request) ; SpObserver.setDBtoInstance("_" +dataSourceEntity.getDbId());// 切换数据源 settingEntity = settingIfc.getSettingEntity() ; List list = cartIfc.getCartsByPicture(checkbox,cltCode); //余额 double balance = SettingKey.getBalance(request) ; //double totalQuantity = (list!=null&&list.size()>0?list.get(0).getTotalQuantity():0); double totalWeight = (list!=null&&list.size()>0?list.get(0).getTotalWeight():0); double totalAmount = (list!=null&&list.size()>0?list.get(0).getTotalAmount():0) - balance; String mytitle = "购物车内的商品"; if (settingEntity.getCartWeight()) { mytitle += " (" +totalWeight + settingEntity.getWeightClassId() + ")"; } json.addProperty("selecttotalamount",(totalAmount <= 0?"0.0 (无需支付)":df.format(totalAmount)+"")); json.addProperty("selectitems",(list!=null?list.size():0)+""); json.addProperty("mytitle",mytitle); json.addProperty("cart-num",(list!=null?list.size():0)); json.addProperty("redirect", hostUrl +"/shopping/"+ ( isMoblieBrowser?"mobile/":"") +"purchase/checkout.jsp" + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString)); this.printJson(response, json.toString()); }catch (Exception e) { e.printStackTrace(); errJson.addProperty("warning", e.getCause() !=null? e.getCause().getMessage():e.getMessage()); json.add("error", errJson); this.printJson(response, json.toString()); return; } finally { SpObserver.setDBtoInstance(); } } /** * 删除购物车中的商品 * @param request * @param response */ @RequestMapping(params = "m=del") public void del(HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(); //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID); String sessionId = session.getId(); String userCode = (session.getAttribute(SessionKey.USERCODE) == null ? "" : (String) session.getAttribute(SessionKey.USERCODE)); String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? "" : (String) session.getAttribute(SessionKey.WEIXIN_OPENID)); String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? "" : (String) session.getAttribute(SettingKey.CLTCODE)); // String cltName = (session.getAttribute(SettingKey.CLTNAME) == // null?"": (String)session.getAttribute(SettingKey.CLTNAME)) ; SettingEntity settingEntity = null; CurrencyEntity currencyEntity = null; JsonObject json = new JsonObject(); JsonObject errJson = new JsonObject(); try { DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap( request) ; SpObserver.setDBtoInstance("_" +dataSourceEntity.getDbId());// 切换数据源 currencyEntity = currencyIfc.getUserCurrency(userCode); settingEntity = settingIfc.getSettingEntity(); //取网店 shopcccode ShopCcCodeEntity shopCcCodeEntity = ShopCcCode.getShopCcCode(settingEntity,request); String cartIds = request.getParameter("key") ; //Integer cartId = (request.getParameter("key") == null ? 0 : Integer.parseInt(request.getParameter("key"))); cartIfc.delCart(cartIds); List cartList = cartIfc.getCartList(userCode, sessionId, openId, cltCode,shopCcCodeEntity.getShopCcCode()); // 重新取一次数,确保购物车显示正确 /******** 购物车 开始清单输出 *************/ DecimalFormat df = new DecimalFormat("0.00"); double selectTotalAmount = 0 ; //给 footer.jsp 页面使用,用于赋初值 int selectItems = 0 ; //给 footer.jsp 页面使用,用于赋初值 int cartItems = 0 ; //给 footer.jsp 页面使用,用于赋初值 if (cartList!= null) { cartItems = cartList.size(); } //取已经选择的金额数 List selectedCartList = cartList.stream().filter((CartEntity c)->c.isSelected()).collect(Collectors.toList()); for (int i = 0; selectedCartList!=null&&i < selectedCartList.size(); i++) { selectTotalAmount += selectedCartList.get(i).getAmount() ; selectItems ++ ; } //组装 json array 输出 JsonArray cartListJsonArray = this.getCartJsonArray(request, settingEntity, cartList, currencyEntity, dataSourceEntity); json.add("list", cartListJsonArray); json.addProperty("SelectTotalAmount",df.format(selectTotalAmount)); json.addProperty("SelectItems", selectItems); json.addProperty("CartItems", cartItems); /******** 购物车 结束清单输出 *************/ //double totalQuantity = (list!=null&&list.size()>0?list.get(0).getTotalQuantity():0); //double totalWeight = (list!=null&&list.size()>0?list.get(0).getTotalWeight():0); double totalAmount = (cartList!=null&&cartList.size()>0?cartList.get(0).getTotalAmount():0) ; json.addProperty("total", cartList.size() + "个商品" + (settingEntity.isShowPrice() ? " - " + currencyEntity.getCurrencySign() + totalAmount : "")); SettingKey.setCartHintMsg(session, "您已成功更新了购物车!"); //预估配送费用 double freeCost = SettingKey.getFreeCost(request) ; //优惠券 double couponCost = SettingKey.getCouponCost(request) ; //礼品劵 double voucherCost = SettingKey.getVoucherCost(request) ; double sumTotalAmount = totalAmount + freeCost - couponCost - voucherCost; json.addProperty("matcodetotal",totalAmount+""); //购物车页面使用 /shopping/mobile/cart/index.jsp json.addProperty("totalamount",sumTotalAmount+""); //购物车页面使用 /shopping/mobile/cart/index.jsp json.addProperty("cart-num",(cartList!=null?cartList.size():0)); this.printJson(response, json.toString()); } catch(Exception e){ e.printStackTrace(); errJson.addProperty("warning", e.getMessage()); json.add("error", errJson); this.printJson(response, json.toString()); return; }finally { SpObserver.setDBtoInstance(); } } @RequestMapping(params = "m=delByPicture") public void delByPicture(HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(); //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID); // String sessionId = session.getId(); String userCode = (session.getAttribute(SessionKey.USERCODE) == null ? "" : (String) session.getAttribute(SessionKey.USERCODE)); // String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? "" // : (String) session.getAttribute(SessionKey.WEIXIN_OPENID)); String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? "" : (String) session.getAttribute(SettingKey.CLTCODE)); // String cltName = (session.getAttribute(SettingKey.CLTNAME) == // null?"": (String)session.getAttribute(SettingKey.CLTNAME)) ; SettingEntity settingEntity = null; CurrencyEntity currencyEntity = null; JsonObject json = new JsonObject(); JsonObject errJson = new JsonObject(); try { DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap( request) ; SpObserver.setDBtoInstance("_" +dataSourceEntity.getDbId());// 切换数据源 currencyEntity = currencyIfc.getUserCurrency(userCode); settingEntity = settingIfc.getSettingEntity(); Integer cartId = (request.getParameter("key") == null ? 0 : Integer.parseInt(request.getParameter("key"))); cartIfc.delCartByPicture(cartId); List list = cartIfc.getCartsByPicture(cltCode); // 重新取一次数,确保购物车显示正确 //double totalQuantity = (list!=null&&list.size()>0?list.get(0).getTotalQuantity():0); //double totalWeight = (list!=null&&list.size()>0?list.get(0).getTotalWeight():0); double totalAmount = (list!=null&&list.size()>0?list.get(0).getTotalAmount():0) ; json.addProperty("total", list.size() + "个商品" + (settingEntity.isShowPrice() ? " - " + currencyEntity.getCurrencySign() + totalAmount : "")); SettingKey.setCartHintMsg(session, "您已成功更新了购物车!"); double sumTotalAmount = totalAmount ; json.addProperty("matcodetotal",totalAmount+""); //购物车页面使用 /shopping/mobile/cart/index.jsp json.addProperty("totalamount",sumTotalAmount+""); //购物车页面使用 /shopping/mobile/cart/index.jsp json.addProperty("cart-num",(list!=null?list.size():0)); this.printJson(response, json.toString()); }catch (Exception e) { e.printStackTrace(); errJson.addProperty("warning", e.getCause() !=null? e.getCause().getMessage():e.getMessage()); json.add("error", errJson); this.printJson(response, json.toString()); return; } finally { SpObserver.setDBtoInstance(); } } /** * 编辑购物车中的数量 * @param request * @param response */ @RequestMapping(params = "m=edit") public void edit(HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(); String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID); String jsonFormat = request.getParameter("json") ; String sessionId = session.getId(); String userCode = (session.getAttribute(SessionKey.USERCODE) == null ? "" : (String) session.getAttribute(SessionKey.USERCODE)); String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? "" : (String) session.getAttribute(SessionKey.WEIXIN_OPENID)); String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? "" : (String) session.getAttribute(SettingKey.CLTCODE)); String hostUrl = SettingKey.getHostUrl(request); // 将微信corpid组装成url String wxQueryString = SettingKey.getQueryStringByWx(request); boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request); try { DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap( request) ; SpObserver.setDBtoInstance("_" +dataSourceEntity.getDbId());// 切换数据源 SettingEntity settingEntity = settingIfc.getSettingEntity(); //取网店 shopcccode ShopCcCodeEntity shopCcCodeEntity = ShopCcCode.getShopCcCode(settingEntity,request); Map params = request.getParameterMap(); for (String key : params.keySet()) { if (!key.startsWith("quantity")) { continue; } int pos = key.indexOf("_") ; Integer cartId = Integer.valueOf(key.substring(pos + 1, key.length())); String[] values = params.get(key); double quantity = 0; for (int i = 0; i < values.length; i++) { if (values[i] == null || "".equals(values[i])) { if (jsonFormat != null && ! "".equals(jsonFormat)) { JsonObject success = new JsonObject(); success.addProperty("error","必须录入数量!"); //购物车页面使用 /shopping/mobile/cart/index.jsp this.printJson(response, success.toString()); return ; }else { SettingKey.setCartHintMsg(session, "必须录入数量!"); String url = ""; this.print(response, url); return ; } } quantity = Double.parseDouble(values[i].toString()); if (quantity > maxQuantity) { JsonObject success = new JsonObject(); success.addProperty("error", "数量不能大于 " + maxQuantity +" !"); this.printJson(response, success.toString()); return; } } cartIfc.updateCartQuantity(cartId, quantity,cltCode); } if (jsonFormat != null && ! "".equals(jsonFormat)) { //预估配送费用 double freeCost = SettingKey.getFreeCost(request) ; //优惠券 double couponCost = SettingKey.getCouponCost(request) ; //礼品劵 double voucherCost = SettingKey.getVoucherCost(request) ; List cartList = cartIfc.getCartList(userCode, sessionId, openId, cltCode,shopCcCodeEntity.getShopCcCode()); // 重新取一次数,确保购物车显示正确 CurrencyEntity currencyEntity = currencyIfc.getUserCurrency(userCode); JsonObject json = new JsonObject(); /******** 购物车 开始清单输出 *************/ DecimalFormat df = new DecimalFormat("0.00"); double selectTotalAmount = 0 ; //给 footer.jsp 页面使用,用于赋初值 int selectItems = 0 ; //给 footer.jsp 页面使用,用于赋初值 int cartItems = 0 ; //给 footer.jsp 页面使用,用于赋初值 if (cartList!= null) { cartItems = cartList.size(); } //取已经选择的金额数 List selectedCartList = cartList.stream().filter((CartEntity c)->c.isSelected()).collect(Collectors.toList()); for (int i = 0; selectedCartList!=null&&i < selectedCartList.size(); i++) { selectTotalAmount += selectedCartList.get(i).getAmount() ; selectItems ++ ; } //组装 json array 输出 JsonArray cartListJsonArray = this.getCartJsonArray(request, settingEntity, cartList, currencyEntity, dataSourceEntity); json.add("list", cartListJsonArray); json.addProperty("SelectTotalAmount",df.format(selectTotalAmount)); json.addProperty("SelectItems", selectItems); json.addProperty("CartItems", cartItems); /******** 购物车 结束清单输出 *************/ //double totalQuantity = (list!=null&&list.size()>0?list.get(0).getTotalQuantity():0); //double totalWeight = (list!=null&&list.size()>0?list.get(0).getTotalWeight():0); double totalAmount = (cartList!=null&&cartList.size()>0?cartList.get(0).getTotalAmount():0) ; double sumTotalAmount = (cartList!=null&&cartList.size()>0?cartList.get(0).getTotalAmount():0) + freeCost - couponCost - voucherCost; json.addProperty("matcodetotal",totalAmount+""); //购物车页面使用 /shopping/mobile/cart/index.jsp json.addProperty("totalamount",sumTotalAmount+""); //购物车页面使用 /shopping/mobile/cart/index.jsp json.addProperty("cart-num",(cartList!=null?cartList.size():0)); this.printJson(response, json.toString()); } else { SettingKey.setCartHintMsg(session, "您已成功更新了购物车!"); String url = ""; this.print(response, url); } return; } catch (Exception e) { e.printStackTrace(); JsonObject success = new JsonObject(); success.addProperty("error","SpObserver.getCurrentInstance():" + SpObserver.getCurrentInstance() + " SessionKey.SHOPPING_DBID:" + dbId + " error:" + e.getMessage()); this.printJson(response, success.toString()); return; } finally { SpObserver.setDBtoInstance(); } } @RequestMapping(params = "m=editByPicture") public void editByPicture(HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(); String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID); String jsonFormat = request.getParameter("json") ; // String sessionId = session.getId(); // String userCode = (session.getAttribute(SessionKey.USERCODE) == null ? "" // : (String) session.getAttribute(SessionKey.USERCODE)); // String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? "" // : (String) session.getAttribute(SessionKey.WEIXIN_OPENID)); String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? "" : (String) session.getAttribute(SettingKey.CLTCODE)); String hostUrl = SettingKey.getHostUrl(request); // 将微信corpid组装成url String wxQueryString = SettingKey.getQueryStringByWx(request); boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request); try { DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap( request) ; SpObserver.setDBtoInstance("_" +dataSourceEntity.getDbId());// 切换数据源 Map params = request.getParameterMap(); for (String key : params.keySet()) { if (!key.startsWith("quantity")) { continue; } int pos = key.indexOf("_") ; Integer cartId = Integer.valueOf(key.substring(pos + 1, key.length())); String[] values = params.get(key); double quantity = 0; for (int i = 0; i < values.length; i++) { if (values[i] == null || "".equals(values[i])) { if (jsonFormat != null && ! "".equals(jsonFormat)) { JsonObject success = new JsonObject(); success.addProperty("error","必须录入数量!"); //购物车页面使用 /shopping/mobile/cart/index.jsp this.printJson(response, success.toString()); return ; }else { SettingKey.setCartHintMsg(session, "必须录入数量!"); String url = ""; this.print(response, url); return ; } } quantity = Double.parseDouble(values[i].toString()); if (quantity > maxQuantity) { JsonObject success = new JsonObject(); success.addProperty("error", "数量不能大于 " + maxQuantity +" !"); this.printJson(response, success.toString()); return; } } cartIfc.updateCartQuantityByPicture(cartId, quantity); } if (jsonFormat != null && ! "".equals(jsonFormat)) { List list = cartIfc.getCartsByPicture(cltCode); // 重新取一次数,确保购物车显示正确 double totalAmount = (list!=null&&list.size()>0?list.get(0).getTotalAmount():0) ; double sumTotalAmount = (list!=null&&list.size()>0?list.get(0).getTotalAmount():0) ; JsonObject success = new JsonObject(); success.addProperty("matcodetotal",totalAmount+""); //购物车页面使用 /shopping/mobile/cart/index.jsp success.addProperty("totalamount",sumTotalAmount+""); //购物车页面使用 /shopping/mobile/cart/index.jsp success.addProperty("cart-num",(list!=null?list.size():0)); this.printJson(response, success.toString()); } else { SettingKey.setCartHintMsg(session, "您已成功更新了购物车!"); String url = ""; this.print(response, url); } return; } catch (Exception e) { e.printStackTrace(); JsonObject success = new JsonObject(); success.addProperty("error","SpObserver.getCurrentInstance():" + SpObserver.getCurrentInstance() + " SessionKey.SHOPPING_DBID:" + dbId + " error:" + e.getMessage()); this.printJson(response, success.toString()); return; } finally { SpObserver.setDBtoInstance(); } } /** * 清空购物车 * @param request * @param response */ @RequestMapping(params = "m=delall") public void delAll(HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(); String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID); String sessionId = session.getId(); String userCode = (session.getAttribute(SessionKey.USERCODE) == null ? "" : (String) session.getAttribute(SessionKey.USERCODE)); String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? "" : (String) session.getAttribute(SessionKey.WEIXIN_OPENID)); String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? "" : (String) session.getAttribute(SettingKey.CLTCODE)); // String cltName = (session.getAttribute(SettingKey.CLTNAME) == // null?"": (String)session.getAttribute(SettingKey.CLTNAME)) ; try { SpObserver.setDBtoInstance("_" + dbId);// 切换数据源 SettingEntity settingEntity = settingIfc.getSettingEntity(); //取网店 shopcccode ShopCcCodeEntity shopCcCodeEntity = ShopCcCode.getShopCcCode(settingEntity,request); CurrencyEntity currencyEntity = currencyIfc.getUserCurrency(userCode); //userCode, sessionId, openId, cltCode,shopCcCodeEntity.getShopCcCode() cartIfc.delAllCart(userCode, sessionId, openId); List list = cartIfc.getCartList(userCode, sessionId, openId, cltCode,shopCcCodeEntity.getShopCcCode()); // 重新取一次数,确保购物车显示正确 //double totalQuantity = (list!=null&&list.size()>0?list.get(0).getTotalQuantity():0); //double totalWeight = (list!=null&&list.size()>0?list.get(0).getTotalWeight():0); double totalAmount = (list!=null&&list.size()>0?list.get(0).getTotalAmount():0) ; JsonObject success = new JsonObject(); success.addProperty("total", list.size() + "个商品" + (settingEntity.isShowPrice() ? " - " + currencyEntity.getCurrencySign() + totalAmount : "")); SettingKey.setCartHintMsg(session, "您已成功更新了购物车!"); success.addProperty("cart-num",(list!=null?list.size():0)); this.printJson(response, success.toString()); }catch (Exception e) { e.printStackTrace(); JsonObject success = new JsonObject(); success.addProperty("error","SpObserver.getCurrentInstance():" + SpObserver.getCurrentInstance() + " SessionKey.SHOPPING_DBID:" + dbId + " error:" + e.getMessage()); this.printJson(response, success.toString()); return; } finally { SpObserver.setDBtoInstance(); } } /** * 加入购物车 * @param request * @param response */ @RequestMapping(params = "m=add") public void add(HttpServletRequest request, HttpServletResponse response) { String hostUrl = SettingKey.getHostUrl(request); // 将微信corpid组装成url String wxQueryString = SettingKey.getQueryStringByWx(request); String action = request.getParameter("action") ; HttpSession session = request.getSession(); //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID); String sessionId = session.getId(); String userCode = (session.getAttribute(SessionKey.HRCODE) == null ? "" : (String) session.getAttribute(SessionKey.HRCODE)); String userName = (session.getAttribute(SessionKey.HRNAME) == null ? "" : (String) session.getAttribute(SessionKey.HRNAME)); String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? "" : (String) session.getAttribute(SessionKey.WEIXIN_OPENID)); String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? "" : (String) session.getAttribute(SettingKey.CLTCODE)); String cltName = (session.getAttribute(SettingKey.CLTNAME) == null ? "" : (String) session.getAttribute(SettingKey.CLTNAME)); String matCode = (request.getParameter(SettingKey.MATCODE) == null ? "" : request.getParameter(SettingKey.MATCODE)); double quantity = (request.getParameter("quantity") == null ? 0 : Double.parseDouble(request.getParameter("quantity"))); Integer recurringId = (request.getParameter("recurringid") == null ? 0 : Integer.parseInt(request.getParameter("recurringid"))); boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request); Map params = request.getParameterMap(); JsonObject json = new JsonObject(); JsonObject errJson = null; SettingEntity settingEntity = null; try { DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap( request) ; SpObserver.setDBtoInstance("_" +dataSourceEntity.getDbId());// 切换数据源 settingEntity = settingIfc.getSettingEntity() ; //取网店 shopcccode ShopCcCodeEntity shopCcCodeEntity = ShopCcCode.getShopCcCode(settingEntity,request); // 必录检查 errJson = this.checkRequired(params, matCode, hostUrl, wxQueryString,isMoblieBrowser); if (errJson != null && errJson.has("error")) { this.printJson(response, errJson.toString()); return; } // save if (quantity <= 0) { if (errJson == null) { errJson = new JsonObject(); } errJson.addProperty("quantity", "数量必须录入!"); json.add("error", errJson); this.printJson(response, json.toString()); return; } if (quantity > maxQuantity) { if (errJson == null) { errJson = new JsonObject(); } errJson.addProperty("quantity", "数量不能大于 " + maxQuantity +" !"); json.add("error", errJson); this.printJson(response, json.toString()); return; } boolean found = false; for (String key : params.keySet()) { if (!key.startsWith("option")) { continue; } String optionId = key.substring(key.indexOf("[") + 1, key.indexOf("]")); String[] values = params.get(key); String value = ""; for (int i = 0; i < values.length; i++) { value = (value != null && !"".equals(value) ? value + "," : "") + values[i]; } json.addProperty(optionId, value); found = true; } String optionStrJson = null; if (found) { optionStrJson = json.toString(); } CartEntity cart = new CartEntity(); cart.setMatCode(matCode); cart.setCltCode(cltCode); cart.setCltName(cltName); // 如果是客户登录了,则设置当前购物车的“主人” 为客户编号 if ((cltCode != null && !"".equals(cltCode)) || (openId != null && !"".equals(openId))) { cart.setUserCode(""); cart.setUserName(""); cart.setSessionId(""); } else { cart.setUserCode(userCode); cart.setUserName(userName); cart.setSessionId(sessionId); } cart.setRecurringId(recurringId); cart.setOptionJson(optionStrJson); cart.setQuantity(quantity); cart.setRefreshPrice(true); cart.setOpenId(openId); //MatCodeEntity matCodeEntity = matCodeIfc.getMatCode(matCode,shopCcCodeEntity.getShopCcCode()); String optionText = ""; if (optionStrJson != null) { optionText = getOptionText(optionStrJson); } cart.setOptionText(optionText); cart.setGoShop("goshop".equals(action)); //是否立即下单,购物车中已存在此商品,则直接更新购物车中的数量为本次数量,不要累加这个数量 String skuId1 = request.getParameter("skuId1") ; String skuId2 = request.getParameter("skuId2") ; String skuId3 = request.getParameter("skuId3") ; String skuId4 = request.getParameter("skuId4") ; String skuId5 = request.getParameter("skuId5") ; String skuId6 = request.getParameter("skuId6") ; String skuId7 = request.getParameter("skuId7") ; String skuId8 = request.getParameter("skuId8") ; String skuId9 = request.getParameter("skuId9") ; String skuId10 = request.getParameter("skuId10"); cart.setSkuId1(skuId1==null||"".equals(skuId1)?null:Integer.parseInt(skuId1)) .setSkuId2(skuId2==null||"".equals(skuId2)?null:Integer.parseInt(skuId2)) .setSkuId3(skuId3==null||"".equals(skuId3)?null:Integer.parseInt(skuId3)) .setSkuId4(skuId4==null||"".equals(skuId4)?null:Integer.parseInt(skuId4)) .setSkuId5(skuId5==null||"".equals(skuId5)?null:Integer.parseInt(skuId5)) .setSkuId6(skuId6==null||"".equals(skuId6)?null:Integer.parseInt(skuId6)) .setSkuId7(skuId7==null||"".equals(skuId7)?null:Integer.parseInt(skuId7)) .setSkuId8(skuId8==null||"".equals(skuId8)?null:Integer.parseInt(skuId8)) .setSkuId9(skuId9==null||"".equals(skuId9)?null:Integer.parseInt(skuId9)) .setSkuId10(skuId10==null||"".equals(skuId10)?null:Integer.parseInt(skuId10)); Integer cartId = cartIfc.addToCart(cart); if (cartId != null) { //立即下单 String selectedCattIds = (String)session.getAttribute(SettingKey.CHECKBOX); if (selectedCattIds == null||"goshop".equals(action)) { selectedCattIds = ";" +cartId + ";" ; }else if (selectedCattIds.indexOf(cartId+";") <=0) { selectedCattIds += cartId +";" ; } session.setAttribute(SettingKey.CHECKBOX, selectedCattIds); } List cartList = cartIfc.getCartList(userCode, sessionId, cart.getOpenId(), cltCode,shopCcCodeEntity.getShopCcCode()); // 重新取一次数,确保购物车显示正确 CurrencyEntity currencyEntity = currencyIfc.getUserCurrency(userCode); /******** 购物车 开始清单输出 *************/ DecimalFormat df = new DecimalFormat("0.00"); double selectTotalAmount = 0 ; //给 footer.jsp 页面使用,用于赋初值 int selectItems = 0 ; //给 footer.jsp 页面使用,用于赋初值 int cartItems = 0 ; //给 footer.jsp 页面使用,用于赋初值 if (cartList!= null) { cartItems = cartList.size(); } //取已经选择的金额数 List selectedCartList = cartList.stream().filter((CartEntity c)->c.isSelected()).collect(Collectors.toList()); for (int i = 0; selectedCartList!=null&&i < selectedCartList.size(); i++) { selectTotalAmount += selectedCartList.get(i).getAmount() ; selectItems ++ ; } //组装 json array 输出 JsonArray cartListJsonArray = this.getCartJsonArray(request, settingEntity, cartList, currencyEntity, dataSourceEntity); json.add("list", cartListJsonArray); json.addProperty("SelectTotalAmount",df.format(selectTotalAmount)); json.addProperty("SelectItems", selectItems); json.addProperty("CartItems", cartItems); /******** 购物车 结束清单输出 *************/ double totalQuantity = (cartList!=null&&cartList.size()>0?cartList.get(0).getTotalQuantity():0); //double totalWeight = (list!=null&&list.size()>0?list.get(0).getTotalWeight():0); double totalAmount = (cartList!=null&&cartList.size()>0?cartList.get(0).getTotalAmount():0) ; //取刚才加入购物车的物料信息 List matCodeEntityList = cartList.stream().filter((CartEntity c)->c.getCartId().equals(cartId)).collect(Collectors.toList()); CartEntity cartEntity = matCodeEntityList!=null && matCodeEntityList.size()>0 ? matCodeEntityList.get(0):null; json.addProperty("success", "成功添加商品 " + (cartEntity == null ? "" : (settingEntity.isShowMatName()? cartEntity.getMatName():"商品")) + "到您的 购物车!"); json.addProperty("toastmessage", "成功添加商品到您的 购物车!"); json.addProperty("total", (cartList!=null?cartList.size():0) + "种商品(共" + (new Double(totalQuantity)).intValue() + "件)" + (settingEntity.isShowPrice() ? " - " + currencyEntity.getCurrencySign() + totalAmount : "")); json.addProperty("cart-num",(cartList!=null?cartList.size():0)); //如果是立即购买 if (action != null && "goshop".equals(action)) { json.addProperty("redirect",hostUrl + "/shopping/" + (isMoblieBrowser?"mobile/":"")+"checkoutnew/?selectedCartIds="+cartId + (wxQueryString == null || "".equals(wxQueryString) ? "" : "&" + wxQueryString)); } json.addProperty("CartId", cartId); this.printJson(response, json.toString()); return; } catch (Exception e) { e.printStackTrace(); errJson.addProperty("warning", e.getCause() !=null? e.getCause().getMessage():e.getMessage()); json.add("error", errJson); this.printJson(response, json.toString()); return; } finally { SpObserver.setDBtoInstance(); } } @RequestMapping(params = "m=addByPicture") public void addByPicture(HttpServletRequest request, HttpServletResponse response) { String hostUrl = SettingKey.getHostUrl(request); // 将微信corpid组装成url String wxQueryString = SettingKey.getQueryStringByWx(request); String action = request.getParameter("action") ; HttpSession session = request.getSession(); //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID); String sessionId = session.getId(); String userCode = (session.getAttribute(SessionKey.HRCODE) == null ? "" : (String) session.getAttribute(SessionKey.HRCODE)); String userName = (session.getAttribute(SessionKey.HRNAME) == null ? "" : (String) session.getAttribute(SessionKey.HRNAME)); String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? "" : (String) session.getAttribute(SessionKey.WEIXIN_OPENID)); String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? "" : (String) session.getAttribute(SettingKey.CLTCODE)); String cltName = (session.getAttribute(SettingKey.CLTNAME) == null ? "" : (String) session.getAttribute(SettingKey.CLTNAME)); String matCode = (request.getParameter(SettingKey.MATCODE) == null ? "" : request.getParameter(SettingKey.MATCODE)); double quantity = (request.getParameter("quantity") == null ? 0 : Double.parseDouble(request.getParameter("quantity"))); boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request); JsonObject json = new JsonObject(); JsonObject errJson = null; SettingEntity settingEntity = null; try { DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap( request) ; SpObserver.setDBtoInstance("_" +dataSourceEntity.getDbId());// 切换数据源 settingEntity = settingIfc.getSettingEntity() ; //取网店 shopcccode //ShopCcCodeEntity shopCcCodeEntity = ShopCcCode.getShopCcCode(settingEntity,request); // save if (quantity <= 0) { if (errJson == null) { errJson = new JsonObject(); } errJson.addProperty("quantity", "数量必须录入!"); json.add("error", errJson); this.printJson(response, json.toString()); return; } if (quantity > maxQuantity) { if (errJson == null) { errJson = new JsonObject(); } errJson.addProperty("quantity", "数量不能大于 " + maxQuantity +" !"); json.add("error", errJson); this.printJson(response, json.toString()); return; } CartEntity cart = new CartEntity(); cart.setMatCode(matCode); cart.setCltCode(cltCode); cart.setCltName(cltName); // 如果是客户登录了,则设置当前购物车的“主人” 为客户编号 if ((cltCode != null && !"".equals(cltCode)) || (openId != null && !"".equals(openId))) { cart.setUserCode(""); cart.setUserName(""); cart.setSessionId(""); } else { cart.setUserCode(userCode); cart.setUserName(userName); cart.setSessionId(sessionId); } MatCodeEntity matCodeEntity = matCodeIfc.getMatCodeByPicture(matCode); cart.setPrice(matCodeEntity.getSalesPriceByPicture()); cart.setQuantity(quantity); cart.setRefreshPrice(true); cart.setOpenId(openId); Integer cartId = cartIfc.saveCartByPicture(cart); if (cartId != null) { //立即下单 String checkbox = (String)session.getAttribute(SettingKey.CHECKBOXBYPICTURE); if (checkbox == null||"goshop".equals(action)) { checkbox = ";" +cartId + ";" ; }else if (checkbox.indexOf(cartId+";") <=0) { checkbox += cartId +";" ; } session.setAttribute(SettingKey.CHECKBOXBYPICTURE, checkbox); } List list = cartIfc.getCartsByPicture( cltCode); // 重新取一次数,确保购物车显示正确 CurrencyEntity currencyEntity = currencyIfc.getUserCurrency(userCode); double totalQuantity = (list!=null&&list.size()>0?list.get(0).getTotalQuantity():0); //double totalWeight = (list!=null&&list.size()>0?list.get(0).getTotalWeight():0); double totalAmount = (list!=null&&list.size()>0?list.get(0).getTotalAmount():0) ; JsonObject success = new JsonObject(); success.addProperty("success", "成功添加商品 " + (matCodeEntity == null ? "" : (settingEntity.isShowMatName()? matCodeEntity.getMatName():"商品")) + "到您的 购物车!"); success.addProperty("toastmessage", "成功添加商品到您的 购物车!"); success.addProperty("total", (list!=null?list.size():0) + "种商品(共" + (new Double(totalQuantity)).intValue() + "件)" + (settingEntity.isShowPrice() ? " - " + currencyEntity.getCurrencySign() + totalAmount : "")); success.addProperty("cart-num",(list!=null?list.size():0)); //如果是立即购买 if (action != null && "goshop".equals(action)) { success.addProperty("redirect",hostUrl + "/shopping/" + (isMoblieBrowser?"mobile/":"")+"purchase/checkout.jsp"+ (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString)); } this.printJson(response, success.toString()); return; } catch (Exception e) { e.printStackTrace(); errJson.addProperty("warning", e.getCause() !=null? e.getCause().getMessage():e.getMessage()); json.add("error", errJson); this.printJson(response, json.toString()); return; } finally { SpObserver.setDBtoInstance(); } } /** * 获取购物车 json 数据格式(小程序需要用到) * @param request * @param response */ @RequestMapping(params = "m=getCartList") public void getCartList(HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(); //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID); String userCode = (session.getAttribute(SessionKey.USERCODE) == null ? "" : (String)session.getAttribute(SessionKey.USERCODE)); String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? "" : (String) session.getAttribute(SessionKey.WEIXIN_OPENID) ) ; String sessionId = session.getId(); String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null?"": (String)session.getAttribute(SettingKey.CLTCODE)) ; //String hostUrl = SettingKey.getHostUrl(request) ; //将微信corpid组装成url //String wxQueryString = SettingKey.getQueryStringByWx(request); JsonObject json = new JsonObject(); JsonObject errJson = new JsonObject(); //JsonObject jsonObject = new JsonObject(); //Gson gson = new Gson(); SettingEntity settingEntity = null ; CurrencyEntity currencyEntity = null; List cartList = null; //boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request); //String checkboxs = (String)session.getAttribute(SettingKey.CHECKBOX); try { DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap( request) ; SpObserver.setDBtoInstance("_" +dataSourceEntity.getDbId());// 切换数据源 settingEntity = settingIfc.getSettingEntity() ; //取网店 shopcccode ShopCcCodeEntity shopCcCodeEntity = ShopCcCode.getShopCcCode(settingEntity,request); currencyEntity = currencyIfc.getUserCurrency(userCode); cartList = cartIfc.getCartList(userCode, sessionId,openId,cltCode,shopCcCodeEntity.getShopCcCode()); /******** 购物车 开始清单输出 *************/ DecimalFormat df = new DecimalFormat("0.00"); double selectTotalAmount = 0 ; //给 footer.jsp 页面使用,用于赋初值 int selectItems = 0 ; //给 footer.jsp 页面使用,用于赋初值 int cartItems = 0 ; //给 footer.jsp 页面使用,用于赋初值 if (cartList!= null) { cartItems = cartList.size(); } //取已经选择的金额数 List selectedCartList = cartList.stream().filter((CartEntity c)->c.isSelected()).collect(Collectors.toList()); for (int i = 0; selectedCartList!=null&&i < selectedCartList.size(); i++) { selectTotalAmount += selectedCartList.get(i).getAmount() ; selectItems ++ ; } //组装 json array 输出 JsonArray cartListJsonArray = this.getCartJsonArray(request, settingEntity, cartList, currencyEntity, dataSourceEntity); json.add("list", cartListJsonArray); json.addProperty("SelectTotalAmount",df.format(selectTotalAmount)); json.addProperty("SelectItems", selectItems); json.addProperty("CartItems", cartItems); /******** 购物车 结束清单输出 *************/ //json.add("list", jsonObject); this.printJson(response, json.toString()); return; } catch (DataAccessException e) { e.printStackTrace(); errJson.addProperty("warning", (e.getCause()!=null? e.getCause().getMessage():e.getMessage())); json.add("error", errJson); this.printJson(response, json.toString()); return; } catch (Exception e) { e.printStackTrace(); errJson.addProperty("warning", (e.getCause()!=null? e.getCause().getMessage():e.getMessage())); json.add("error", errJson); this.printJson(response, json.toString()); return; } finally { SpObserver.setDBtoInstance(); } } private JsonArray getCartJsonArray(HttpServletRequest request,SettingEntity settingEntity,List cartList,CurrencyEntity currencyEntity,DataSourceEntity dataSourceEntity) { JsonArray cartListJsonArray = new JsonArray(); String hostUrl = SettingKey.getHostUrl(request) ; //将微信corpid组装成url String wxQueryString = SettingKey.getQueryStringByWx(request); boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request); for (int i = 0 ; cartList!= null && i < cartList.size();i++) { CartEntity cartEntity = cartList.get(i); //boolean isChecked = (SettingKey.isExistsCheckbox(checkboxs, cartEntity.getCartId()+"")?true:false) ; boolean isChecked = cartEntity.isSelected() ; // if (isChecked) { // if (cartEntity.getAmount()!=null) { // selectTotalAmount += cartEntity.getAmount() ; // } // selectItems ++ ; // } JsonObject cartEntityJsonObject = new JsonObject(); if (settingEntity.getDefaultShopCcCode()!=null&&!"".equals(settingEntity.getDefaultShopCcCode())){ cartEntityJsonObject.addProperty("ShopCcCode", cartEntity.getShopCcCode()); cartEntityJsonObject.addProperty("ShopCcName", cartEntity.getShopCcName()); } cartEntityJsonObject.addProperty("CartId", cartEntity.getCartId()); cartEntityJsonObject.addProperty("isChecked",isChecked) ; //最小起订数量 cartEntityJsonObject.addProperty("Mininum", cartEntity.getMininum()); String url = hostUrl + SettingKey.getMatCodeUrl("", cartEntity.getMatCode(), isMoblieBrowser) + (wxQueryString == null || "".equals(wxQueryString) ? "" : "&" + wxQueryString); cartEntityJsonObject.addProperty("url", url); //主图片 cartEntityJsonObject.addProperty("PhotoPath", SettingKey.getUrl(hostUrl, cartEntity.getPhotoPathUrl(), dataSourceEntity.getDbId()+"",null) ) ; // cartEntityJsonObject.addProperty("PhotoPath", // imgData.getImageUrl(cartEntity.getPhotoPath(), settingEntity.getImageProductWidth(), // settingEntity.getImageProductHeight(), settingEntity.isShowProductOrgImage(), // settingEntity.isFromCached(), request) // + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString)); if (settingEntity.isShowBrand()) { cartEntityJsonObject.addProperty("Brand", cartEntity.getBrand()); } if (settingEntity.isShowMatName()) { cartEntityJsonObject.addProperty("MatName", cartEntity.getMatName()); } cartEntityJsonObject.addProperty("MatCode", cartEntity.getMatCode()); cartEntityJsonObject.addProperty("isShowMatCode", settingEntity.isShowMatCode()); cartEntityJsonObject.addProperty("isShowMatName", settingEntity.isShowMatName()); cartEntityJsonObject.addProperty("isShowSpecial", settingEntity.isShowSpecial()); cartEntityJsonObject.addProperty("isShowPrice", settingEntity.isShowPrice()); cartEntityJsonObject.addProperty("ShopMatCode", cartEntity.getShopMatCode()); cartEntityJsonObject.addProperty("isShowPoints", settingEntity.isShowPoints()); cartEntityJsonObject.addProperty("isShowBrand", settingEntity.isShowBrand()); cartEntityJsonObject.addProperty("StockDisplay", settingEntity.getStockDisplay()); if (settingEntity.isShowSpecial()) { cartEntityJsonObject.addProperty("Special", cartEntity.getSpecial()); } if (settingEntity.isStartupMatName2()) { cartEntityJsonObject.addProperty("MatName2Label", settingEntity.getMatName2Label()); cartEntityJsonObject.addProperty("MatName2", cartEntity.getMatName2()); } if (settingEntity.isStartupMatName3()) { cartEntityJsonObject.addProperty("MatName3Label", settingEntity.getMatName3Label()); cartEntityJsonObject.addProperty("MatName3", cartEntity.getMatName3()); } if (settingEntity.isStartupMatName4()) { cartEntityJsonObject.addProperty("MatName4Label", settingEntity.getMatName4Label()); cartEntityJsonObject.addProperty("MatName4", cartEntity.getMatName4()); } if (cartEntity.getOptionJson() !=null && !"".equals(cartEntity.getOptionJson())) { //Map lists=gson.fromJson(cartEntity.getOptionJson(),new TypeToken>(){}.getType()); cartEntityJsonObject.addProperty("OptionJson", cartEntity.getOptionJson()) ; //gson.toJson(settingEntity)); } if (settingEntity.isShowPrice()&&cartEntity.getPrice()!=null) { cartEntityJsonObject.addProperty("Price", cartEntity.getPrice() ); // 实际价格 cartEntityJsonObject.addProperty("Currency", currencyEntity.getCurrencySign()); cartEntityJsonObject.addProperty("CurrencySign", currencyEntity.getCurrencySign()); } cartEntityJsonObject.addProperty("Quantity", cartEntity.getQuantity()) ; cartEntityJsonObject.addProperty("skuId1", cartEntity.getSkuId1()); cartEntityJsonObject.addProperty("skuName1", cartEntity.getSkuName1()); cartEntityJsonObject.addProperty("skuId2", cartEntity.getSkuId2()); cartEntityJsonObject.addProperty("skuName2", cartEntity.getSkuName2()); cartEntityJsonObject.addProperty("skuId3", cartEntity.getSkuId3()); cartEntityJsonObject.addProperty("skuName3", cartEntity.getSkuName3()); cartEntityJsonObject.addProperty("skuId4", cartEntity.getSkuId4()); cartEntityJsonObject.addProperty("skuName4", cartEntity.getSkuName4()); cartEntityJsonObject.addProperty("skuId5", cartEntity.getSkuId5()); cartEntityJsonObject.addProperty("skuName5", cartEntity.getSkuName5()); cartEntityJsonObject.addProperty("skuId6", cartEntity.getSkuId6()); cartEntityJsonObject.addProperty("skuName6", cartEntity.getSkuName6()); cartEntityJsonObject.addProperty("skuId7", cartEntity.getSkuId7()); cartEntityJsonObject.addProperty("skuName7", cartEntity.getSkuName7()); cartEntityJsonObject.addProperty("skuId8", cartEntity.getSkuId8()); cartEntityJsonObject.addProperty("skuName8", cartEntity.getSkuName8()); cartEntityJsonObject.addProperty("skuId9", cartEntity.getSkuId9()); cartEntityJsonObject.addProperty("skuName9", cartEntity.getSkuName9()); cartEntityJsonObject.addProperty("skuId10", cartEntity.getSkuId10()); cartEntityJsonObject.addProperty("skuName10", cartEntity.getSkuName10()); cartListJsonArray.add(cartEntityJsonObject); } return cartListJsonArray ; } /** * 再次购买 * @param request * @param response */ @RequestMapping(params = "m=readd") // 从订单明细行再次生成购物车记录(再次购买) public void readd(HttpServletRequest request, HttpServletResponse response) { String hostUrl = SettingKey.getHostUrl(request); // 将微信corpid组装成url String wxQueryString = SettingKey.getQueryStringByWx(request); HttpSession session = request.getSession(); //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID); String sessionId = session.getId(); String userCode = (session.getAttribute(SessionKey.USERCODE) == null ? "" : (String) session.getAttribute(SessionKey.USERCODE)); String userName = (session.getAttribute(SessionKey.USERNAME) == null ? "" : (String) session.getAttribute(SessionKey.USERNAME)); String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? "" : (String) session.getAttribute(SettingKey.CLTCODE)); String cltName = (session.getAttribute(SettingKey.CLTNAME) == null ? "" : (String) session.getAttribute(SettingKey.CLTNAME)); String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? "" : (String) session.getAttribute(SessionKey.WEIXIN_OPENID)); String docCode = (request.getParameter(SettingKey.DOCCODE) == null ? "" : request.getParameter(SettingKey.DOCCODE)); String rowId = (request.getParameter(SettingKey.ROWID) == null ? "" : request.getParameter(SettingKey.ROWID)); boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request); if (docCode == null || rowId == null) { SettingKey.setCartHintMsg(session, "错误的引用,订单行不存在,请重新选择!"); this.print(response, SettingKey.getRedirectUrl(hostUrl + "/shopping/" + (isMoblieBrowser?"mobile/":"")+"account/order.jsp" + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString))); return; } OrderDetailEntity orderDetailEntity = null; SettingEntity settingEntity = null ; try { DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap( request) ; SpObserver.setDBtoInstance("_" +dataSourceEntity.getDbId());// 切换数据源 settingEntity = settingIfc.getSettingEntity(); orderDetailEntity = orderIfc.getOrderDetailEntity(docCode, rowId); if (orderDetailEntity == null) { SettingKey.setCartHintMsg(session, "订单行不存在,请重新选择!"); this.print(response, SettingKey.getRedirectUrl(hostUrl + "/shopping/" + (isMoblieBrowser?"mobile/":"")+"account/orderdetail.jsp?" + SettingKey.DOCCODE + "=" + docCode + (wxQueryString == null || "".equals(wxQueryString) ? "": "&" + wxQueryString))); return; } // save CartEntity cart = new CartEntity(); cart.setMatCode(orderDetailEntity.getMatCode()); cart.setCltCode(cltCode); cart.setCltName(cltName); // 如果是客户登录了,则设置当前购物车的“主人” 为客户编号 if ((cltCode != null && !"".equals(cltCode)) || (openId != null && !"".equals(openId))) { cart.setUserCode(""); cart.setUserName(""); cart.setSessionId(""); } else { cart.setUserCode(userCode); cart.setUserName(userName); cart.setSessionId(sessionId); } cart.setRecurringId(null); cart.setOptionJson(orderDetailEntity.getOptionJson()); cart.setQuantity(orderDetailEntity.getDigit()); cart.setOpenId(openId); String optionText = ""; if (orderDetailEntity.getOptionJson() != null) { optionText = getOptionText(orderDetailEntity.getOptionJson()); } cart.setOptionText(optionText); String skuId1 = request.getParameter("skuId1") ; String skuId2 = request.getParameter("skuId2") ; String skuId3 = request.getParameter("skuId3") ; String skuId4 = request.getParameter("skuId4") ; String skuId5 = request.getParameter("skuId5") ; String skuId6 = request.getParameter("skuId6") ; String skuId7 = request.getParameter("skuId7") ; String skuId8 = request.getParameter("skuId8") ; String skuId9 = request.getParameter("skuId9") ; String skuId10 = request.getParameter("skuId10"); cart.setSkuId1(skuId1==null||"".equals(skuId1)?null:Integer.parseInt(skuId1)) .setSkuId2(skuId2==null||"".equals(skuId2)?null:Integer.parseInt(skuId2)) .setSkuId3(skuId3==null||"".equals(skuId3)?null:Integer.parseInt(skuId3)) .setSkuId4(skuId4==null||"".equals(skuId4)?null:Integer.parseInt(skuId4)) .setSkuId5(skuId5==null||"".equals(skuId5)?null:Integer.parseInt(skuId5)) .setSkuId6(skuId6==null||"".equals(skuId6)?null:Integer.parseInt(skuId6)) .setSkuId7(skuId7==null||"".equals(skuId7)?null:Integer.parseInt(skuId7)) .setSkuId8(skuId8==null||"".equals(skuId8)?null:Integer.parseInt(skuId8)) .setSkuId9(skuId9==null||"".equals(skuId9)?null:Integer.parseInt(skuId9)) .setSkuId10(skuId10==null||"".equals(skuId10)?null:Integer.parseInt(skuId10)); Integer cartId = cartIfc.addToCart(cart); session.setAttribute(SettingKey.CHECKBOX, cartId+""); //将选择的购物车保存到会话中,供页面选择需要 String cartHint = "成功添加商品 " + (orderDetailEntity.getMatName() == null ? "" : (settingEntity.isShowMatName()? orderDetailEntity.getMatName():"商品")) + "到您的 购物车!"; SettingKey.setCartHintMsg(session, cartHint); } catch (DataAccessException e) { e.printStackTrace(); String cartHint = "添加商品失败,失败原因:" + e.getCause().getMessage() + ",查看原商品信息请点击 " + (orderDetailEntity.getMatName() == null ? "" : (settingEntity.isShowMatName()? orderDetailEntity.getMatName():"商品")) + "到您的 购物车!"; SettingKey.setCartHintMsg(session, cartHint); }catch (Exception e) { e.printStackTrace(); String cartHint = "添加商品失败,失败原因:" + e.getCause().getMessage() + ",查看原商品信息请点击 " + (orderDetailEntity.getMatName() == null ? "" : (settingEntity.isShowMatName()? orderDetailEntity.getMatName():"商品")) + "到您的 购物车!"; SettingKey.setCartHintMsg(session, cartHint); } finally { SpObserver.setDBtoInstance(); } this.print(response, SettingKey.getRedirectUrl(hostUrl + "/shopping/" + (isMoblieBrowser?"mobile/":"")+"cart/index.jsp" + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString))); return; } public String getOptionText(String optionStr) { String ret = ""; Map lists = null; if (optionStr != null && !"".equals(optionStr)) { lists = gson.fromJson(optionStr, new TypeToken>() { }.getType()); for (Entry entry : lists.entrySet()) { ret += cartIfc.getOptionStr(Integer.parseInt(entry.getKey()), (String) entry.getValue()) + "\n"; } } return ret; } // 检查必录选项 // {"error":{"option":{"228":"aa \u8981\u6c42\uff01","218":"Radio // \u8981\u6c42\uff01","223":"Checkbox \u8981\u6c42\uff01","217":"Select // \u8981\u6c42\uff01","209":"Textarea \u8981\u6c42\uff01","222":"File // \u8981\u6c42\uff01"}},"redirect":"http:\/\/localhost\/index.php?route=product\/product&product_id=42"} public JsonObject checkRequired(Map params, String matCode, String hostUrl, String wxQueryString,boolean isMoblieBrowser) { List list = matOptionIfc.getOptionEntityRequired(matCode); JsonObject msgJson = null; boolean found = false; for (int k = 0; list != null && k < list.size(); k++) { found = false; OptionEntity optionEntity = list.get(k); for (String key : params.keySet()) { if (!key.startsWith("option")) { continue; } String optionId = key.substring(key.indexOf("[") + 1, key.indexOf("]")); if (optionId != null && !optionId.equals(optionEntity.getOptionId().toString())) { continue; } String[] values = params.get(key); for (int i = 0; i < values.length; i++) { if (values[i] != null && !"".equals(values[i])) { found = true; break; } } if (found) break; } // 没有找到,则提示必录 if (!found) { String hintMsg = optionEntity.getOptionName() + " 要求!"; if (msgJson == null) { msgJson = new JsonObject(); } msgJson.addProperty(optionEntity.getOptionId().toString(), hintMsg); } } if (msgJson != null) { JsonObject json = new JsonObject(); JsonObject optionJson = new JsonObject(); optionJson.add("option", msgJson); json.add("error", optionJson); json.addProperty("redirect", hostUrl + SettingKey.getMatCodeUrl(null, matCode,isMoblieBrowser) + (wxQueryString == null || "".equals(wxQueryString) ? "" : "&" + wxQueryString)); return json; } else { return null; } } @RequestMapping(params = "m=info") public void info(HttpServletRequest request, HttpServletResponse response) { response.setContentType("text/html;charset=utf-8"); response.setStatus(HttpServletResponse.SC_OK); HttpSession session = request.getSession(); String sessionId = session.getId(); //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID); String userCode = (session.getAttribute(SessionKey.USERCODE) == null ? "" : (String) session.getAttribute(SessionKey.USERCODE)); String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? "" : (String) session.getAttribute(SessionKey.WEIXIN_OPENID)); String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? "" : (String) session.getAttribute(SettingKey.CLTCODE)); // String cltName = (session.getAttribute(SettingKey.CLTNAME) == // null?"": (String)session.getAttribute(SettingKey.CLTNAME)) ; JsonObject json = new JsonObject(); JsonObject errJson = new JsonObject(); String hostUrl = SettingKey.getHostUrl(request); // 将微信corpid组装成url String wxQueryString = SettingKey.getQueryStringByWx(request); // 预优配送费用 Integer freeId = session.getAttribute(SettingKey.FREEID) == null ? null : (Integer) session.getAttribute(SettingKey.FREEID); String freeName = session.getAttribute(SettingKey.FREENAME) == null ? "" : (String) session.getAttribute(SettingKey.FREENAME); double freeCost = 0; if (freeId != null) { freeCost = (Double) session.getAttribute(SettingKey.FREECOST); } // 优惠劵 String couponCode = session.getAttribute(SettingKey.COUPONCODE) == null ? null : (String) session.getAttribute(SettingKey.COUPONCODE); String couponName = session.getAttribute(SettingKey.COUPONNAME) == null ? "" : (String) session.getAttribute(SettingKey.COUPONNAME); double couponCost = 0; if (couponCode != null) { couponCost = (Double) session.getAttribute(SettingKey.COUPONCOST); } // 礼品劵 String voucherCode = session.getAttribute(SettingKey.VOUCHERCODE) == null ? null : (String) session.getAttribute(SettingKey.VOUCHERCODE); double voucherCost = 0; if (voucherCode != null) { voucherCost = (Double) session.getAttribute(SettingKey.VOUCHERCOST); } String ret = null; try { DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap( request) ; SpObserver.setDBtoInstance("_" +dataSourceEntity.getDbId());// 切换数据源 SettingEntity settingEntity = settingIfc.getSettingEntity() ; //取网店 shopcccode ShopCcCodeEntity shopCcCodeEntity = ShopCcCode.getShopCcCode(settingEntity,request); ret = cartIfc.getCartsHtml(userCode, sessionId, openId, cltCode, hostUrl, freeId, freeCost, freeName, couponCode, couponCost, couponName, voucherCode, voucherCost, wxQueryString, shopCcCodeEntity.getShopCcCode(),request); }catch (Exception e) { e.printStackTrace(); errJson.addProperty("warning", e.getCause() !=null? e.getCause().getMessage():e.getMessage()); json.add("error", errJson); this.printJson(response, json.toString()); return; }finally { SpObserver.setDBtoInstance(); } this.print(response, ret); return; } }