xinyb
2024-07-09 1159e1d7850ea7c4724fa043914de33e4b1acd22
提交 | 用户 | age
a6a76f 1 package com.yc.sdk.shopping.action;
F 2
3 import com.google.gson.Gson;
4 import com.google.gson.JsonArray;
5 import com.google.gson.JsonObject;
6 import com.google.gson.reflect.TypeToken;
7 import com.yc.action.BaseAction;
8 import com.yc.entity.DataSourceEntity;
9 import com.yc.multiData.MultiDataSource;
10 import com.yc.multiData.SpObserver;
11 import com.yc.sdk.shopping.action.api.ShopCcCode;
a25d9c 12 import com.yc.sdk.shopping.entity.*;
F 13 import com.yc.sdk.shopping.service.*;
a6a76f 14 import com.yc.sdk.shopping.service.imagedata.ShoppingImageDataIfc;
F 15 import com.yc.sdk.shopping.service.order.OrderIfc;
1159e1 16 import com.yc.sdk.shopping.service.reward.RewardIfc;
a6a76f 17 import com.yc.sdk.shopping.util.SettingKey;
F 18 import com.yc.utils.SessionKey;
a25d9c 19 import org.springframework.beans.factory.annotation.Autowired;
F 20 import org.springframework.context.annotation.Scope;
21 import org.springframework.dao.DataAccessException;
22 import org.springframework.stereotype.Controller;
23 import org.springframework.web.bind.annotation.RequestMapping;
24
25 import javax.servlet.http.HttpServletRequest;
26 import javax.servlet.http.HttpServletResponse;
27 import javax.servlet.http.HttpSession;
28 import java.text.DecimalFormat;
29 import java.text.NumberFormat;
30 import java.util.List;
31 import java.util.Map;
32 import java.util.Map.Entry;
33 import java.util.stream.Collectors;
a6a76f 34
F 35 @Controller
36 @Scope("prototype")
37 @RequestMapping("/shopping/cart.do")
38 public class Cart extends BaseAction {
a25d9c 39     static Gson gson = new Gson();
F 40     @Autowired
41     CartIfc cartIfc;
42     @Autowired
43     MatCodeIfc matCodeIfc;
44     @Autowired
45     CurrencyIfc currencyIfc;
46     @Autowired
47     MatOptionIfc matOptionIfc;
48     @Autowired
49     OrderIfc orderIfc;
50     @Autowired
51     SettingIfc settingIfc;
52     static double maxQuantity = 9999999;
53     @Autowired
54     ShoppingImageDataIfc imgData;
1159e1 55     @Autowired
X 56     RewardIfc rewardIfc ;
a6a76f 57
a25d9c 58     /**
F 59      * 选中购物车中的某个商品准备提交订单
60      *
61      * @param request
62      * @param response
63      */
64     @RequestMapping(params = "m=checkbox")
65     public void checkbox(HttpServletRequest request, HttpServletResponse response) {
66         HttpSession session = request.getSession();
67         //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID);
68         String hostUrl = SettingKey.getHostUrl(request);
69         //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID);
70         // 将微信corpid组装成url
71         String wxQueryString = SettingKey.getQueryStringByWx(request);
72         boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request);
73         String selectedCartIds = request.getParameter(SettingKey.CHECKBOX);
74         if (selectedCartIds != null && !"".equals(selectedCartIds)) {
75             selectedCartIds = selectedCartIds.replace(SettingKey.CHECKBOX + "_", "");
76             session.setAttribute(SettingKey.CHECKBOX, selectedCartIds);
77         } else {
78             session.removeAttribute(SettingKey.CHECKBOX);
79         }
a6a76f 80
a25d9c 81         String userCode = (session.getAttribute(SessionKey.USERCODE) == null ? ""
F 82                 : (String) session.getAttribute(SessionKey.USERCODE));
83         String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? ""
84                 : (String) session.getAttribute(SessionKey.WEIXIN_OPENID));
85         String sessionId = session.getId();
86         String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? "" : (String) session.getAttribute(SettingKey.CLTCODE));
a6a76f 87
a25d9c 88
F 89         DecimalFormat df = (DecimalFormat) NumberFormat.getInstance();
90         df.setMaximumFractionDigits(2);
91         JsonObject json = new JsonObject();
92         JsonObject errJson = new JsonObject();
93         SettingEntity settingEntity = null;
94         try {
95             DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);
96             SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());// 切换数据源
22907b 97             settingEntity = settingIfc.getSettingEntity(request);
a25d9c 98             //取网店 shopcccode
F 99             ShopCcCodeEntity shopCcCodeEntity = ShopCcCode.getShopCcCode(settingEntity, request);
100
101             //选择购物车中商品
102             cartIfc.saveSelectedCartIds(userCode, sessionId, openId, cltCode, shopCcCodeEntity.getShopCcCode(), selectedCartIds);
103
104             //List<CartEntity> cartList = cartIfc.getCarts(selectedCartIds);
105             List<CartEntity> cartList = cartIfc.getCartList(userCode, sessionId, openId, cltCode, shopCcCodeEntity.getShopCcCode()); // 重新取一次数,确保购物车显示正确
22907b 106             CurrencyEntity currencyEntity = new CurrencyEntity(request);
a25d9c 107             /******** 购物车 开始清单输出 *************/
F 108             //DecimalFormat df = new DecimalFormat("0.00");
109             double selectTotalAmount = 0;  //给 footer.jsp 页面使用,用于赋初值
110             int selectItems = 0;    //给 footer.jsp 页面使用,用于赋初值
111             int cartItems = 0; //给 footer.jsp 页面使用,用于赋初值
112             if (cartList != null) {
113                 cartItems = cartList.size();
114             }
1159e1 115             double maxPoints=0;
a25d9c 116             //取已经选择的金额数
F 117             List<CartEntity> selectedCartList = cartList.stream().filter((CartEntity c) -> c.isSelected()).collect(Collectors.toList());
118             for (int i = 0; selectedCartList != null && i < selectedCartList.size(); i++) {
119                 selectTotalAmount += selectedCartList.get(i).getAmount();
1159e1 120                 maxPoints += (selectedCartList.get(i).getExchangePointsQuantity() * selectedCartList.get(i).getQuantity());
a25d9c 121                 selectItems++;
F 122             }
123
124             //组装 json array 输出
125             JsonArray cartListJsonArray = this.getCartJsonArray(request, settingEntity, cartList, currencyEntity, dataSourceEntity);
126             json.add("list", cartListJsonArray);
127
1159e1 128             //客户总积分 xin 2024-7-8 11:20:18
X 129             List<PointsEntity> pointsList = rewardIfc.getPoints(cltCode);
130             Integer maxUserPoints= (pointsList != null && pointsList.size() > 0 ? (int) pointsList.get(0).getPoints() : 0);
131             json.addProperty("maxUserPoints", maxUserPoints);
132             json.addProperty("maxPointsQuantity",maxPoints);//用户必须支付的总商品积分
a25d9c 133             json.addProperty("SelectTotalAmount", df.format(selectTotalAmount));
F 134             json.addProperty("SelectItems", selectItems);
135             json.addProperty("CartItems", cartItems);
136             /******** 购物车 结束清单输出 *************/
137
138
139             //预估配送费用
140             double freeCost = SettingKey.getFreeCost(request);
a6a76f 141             //优惠券
a25d9c 142             double couponCost = SettingKey.getCouponCost(request);
F 143             //礼品劵
144             double voucherCost = SettingKey.getVoucherCost(request);
145
146             //余额
147             double balance = SettingKey.getBalance(request);
148
149             //double totalQuantity = (list!=null&&list.size()>0?list.get(0).getTotalQuantity():0);
150             double selectcdTotalWeight = (cartList != null && cartList.size() > 0 ? cartList.get(0).getSelectedTotalWeight() : 0);
151
152             double paymentAmount = selectTotalAmount + freeCost - couponCost - voucherCost - balance;
153             String mytitle = "购物车内的商品";
154             if (settingEntity.getCartWeight()) {
155                 mytitle += "&nbsp;(" + selectcdTotalWeight + settingEntity.getWeightClassId() + ")";
156             }
157             //json.addProperty("selecttotalamount",(totalAmount <= 0?"0.0 (无需支付)":df.format(totalAmount)+""));
158             //json.addProperty("selectitems",(cartList!=null?cartList.size():0)+"");
159
160             json.addProperty("PaymentAmount", (paymentAmount <= 0 ? "0.0 (无需支付)" : df.format(paymentAmount) + ""));
161             json.addProperty("mytitle", mytitle);
162             json.addProperty("cart-num", (cartList != null ? cartList.size() : 0));
163
164             json.addProperty("redirect", hostUrl + "/shopping/" + (isMoblieBrowser ? "mobile/" : "") + "checkoutnew/index.jsp"
165                     + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString));
166             this.printJson(response, json.toString());
167         } catch (Exception e) {
168             e.printStackTrace();
169             errJson.addProperty("warning", (e.getCause() != null ? e.getCause().getMessage() : e.getMessage()));
170             json.add("error", errJson);
171             this.printJson(response, json.toString());
172             return;
173         } finally {
174             SpObserver.setDBtoInstance();
175         }
176     }
177
178     @RequestMapping(params = "m=checkboxByPicture")
179     public void checkboxByPicture(HttpServletRequest request, HttpServletResponse response) {
180         HttpSession session = request.getSession();
181         //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID);
182         String hostUrl = SettingKey.getHostUrl(request);
183         //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID);
184         // 将微信corpid组装成url
185         String wxQueryString = SettingKey.getQueryStringByWx(request);
186         boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request);
187         String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? ""
188                 : (String) session.getAttribute(SettingKey.CLTCODE));
189         String checkbox = request.getParameter(SettingKey.CHECKBOX);
190         if (checkbox != null && !"".equals(checkbox)) {
191             checkbox = checkbox.replace(SettingKey.CHECKBOX + "_", "");
192             session.setAttribute(SettingKey.CHECKBOXBYPICTURE, checkbox);
193         } else {
194             session.removeAttribute(SettingKey.CHECKBOXBYPICTURE);
195         }
196
197         DecimalFormat df = (DecimalFormat) NumberFormat.getInstance();
198         df.setMaximumFractionDigits(2);
199         JsonObject json = new JsonObject();
200         JsonObject errJson = new JsonObject();
201         SettingEntity settingEntity = null;
202         try {
203             DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);
204             SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());// 切换数据源
22907b 205             settingEntity = settingIfc.getSettingEntity(request);
a25d9c 206             List<CartEntity> list = cartIfc.getCartsByPicture(checkbox, cltCode);
F 207
208
209             //余额
210             double balance = SettingKey.getBalance(request);
211
212             //double totalQuantity = (list!=null&&list.size()>0?list.get(0).getTotalQuantity():0);
213             double totalWeight = (list != null && list.size() > 0 ? list.get(0).getTotalWeight() : 0);
214
215             double totalAmount = (list != null && list.size() > 0 ? list.get(0).getTotalAmount() : 0) - balance;
216             String mytitle = "购物车内的商品";
217             if (settingEntity.getCartWeight()) {
218                 mytitle += "&nbsp;(" + totalWeight + settingEntity.getWeightClassId() + ")";
219             }
220             json.addProperty("selecttotalamount", (totalAmount <= 0 ? "0.0 (无需支付)" : df.format(totalAmount) + ""));
221             json.addProperty("selectitems", (list != null ? list.size() : 0) + "");
222             json.addProperty("mytitle", mytitle);
223             json.addProperty("cart-num", (list != null ? list.size() : 0));
224
225             json.addProperty("redirect", hostUrl + "/shopping/" + (isMoblieBrowser ? "mobile/" : "") + "purchase/checkout.jsp"
226                     + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString));
227             this.printJson(response, json.toString());
228         } catch (Exception e) {
229             e.printStackTrace();
230             errJson.addProperty("warning", e.getCause() != null ? e.getCause().getMessage() : e.getMessage());
231             json.add("error", errJson);
232             this.printJson(response, json.toString());
233             return;
234         } finally {
235             SpObserver.setDBtoInstance();
236         }
237     }
238
239     /**
240      * 删除购物车中的商品
241      *
242      * @param request
243      * @param response
244      */
245     @RequestMapping(params = "m=del")
246     public void del(HttpServletRequest request, HttpServletResponse response) {
247         HttpSession session = request.getSession();
248         //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID);
249
250         String sessionId = session.getId();
251         String userCode = (session.getAttribute(SessionKey.USERCODE) == null ? ""
252                 : (String) session.getAttribute(SessionKey.USERCODE));
253         String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? ""
254                 : (String) session.getAttribute(SessionKey.WEIXIN_OPENID));
255         String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? ""
256                 : (String) session.getAttribute(SettingKey.CLTCODE));
257         // String cltName = (session.getAttribute(SettingKey.CLTNAME) ==
258         // null?"": (String)session.getAttribute(SettingKey.CLTNAME)) ;
259         SettingEntity settingEntity = null;
260         CurrencyEntity currencyEntity = null;
261         JsonObject json = new JsonObject();
262         JsonObject errJson = new JsonObject();
263         try {
264             DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);
265             SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());// 切换数据源
22907b 266             currencyEntity = new CurrencyEntity(request);
J 267             settingEntity = settingIfc.getSettingEntity(request);
a25d9c 268
F 269             //取网店 shopcccode
270             ShopCcCodeEntity shopCcCodeEntity = ShopCcCode.getShopCcCode(settingEntity, request);
271
272
273             String cartIds = request.getParameter("key");
274
275             //Integer cartId = (request.getParameter("key") == null ? 0 : Integer.parseInt(request.getParameter("key")));
d223ec 276             final String matCodes = cartIfc.delCart(cartIds);
a25d9c 277             List<CartEntity> cartList = cartIfc.getCartList(userCode, sessionId, openId, cltCode, shopCcCodeEntity.getShopCcCode()); // 重新取一次数,确保购物车显示正确
F 278             /******** 购物车 开始清单输出 *************/
279             DecimalFormat df = new DecimalFormat("0.00");
280             double selectTotalAmount = 0;  //给 footer.jsp 页面使用,用于赋初值
281             int selectItems = 0;    //给 footer.jsp 页面使用,用于赋初值
282             int cartItems = 0; //给 footer.jsp 页面使用,用于赋初值
283             if (cartList != null) {
284                 cartItems = cartList.size();
285             }
286
1159e1 287             double maxPointsQuantity=0;
a25d9c 288             //取已经选择的金额数
F 289             List<CartEntity> selectedCartList = cartList.stream().filter((CartEntity c) -> c.isSelected()).collect(Collectors.toList());
290             for (int i = 0; selectedCartList != null && i < selectedCartList.size(); i++) {
291                 selectTotalAmount += selectedCartList.get(i).getAmount();
1159e1 292                 maxPointsQuantity += (selectedCartList.get(i).getExchangePointsQuantity()*selectedCartList.get(i).getQuantity());
a25d9c 293                 selectItems++;
F 294             }
295
296             //组装 json array 输出
297             JsonArray cartListJsonArray = this.getCartJsonArray(request, settingEntity, cartList, currencyEntity, dataSourceEntity);
298             json.add("list", cartListJsonArray);
299
1159e1 300             //用户总积分
X 301             List<PointsEntity> pointsList = rewardIfc.getPoints(cltCode);
302             json.addProperty("maxUserPoints", (pointsList.size() > 0 ? pointsList.get(0).getPoints() : 0));
303             json.addProperty("maxPointsQuantity",maxPointsQuantity);//用户必须支付的总商品积分
a25d9c 304             json.addProperty("SelectTotalAmount", df.format(selectTotalAmount));
F 305             json.addProperty("SelectItems", selectItems);
306             json.addProperty("CartItems", cartItems);
307             /******** 购物车 结束清单输出 *************/
308
309             //double totalQuantity = (list!=null&&list.size()>0?list.get(0).getTotalQuantity():0);
310             //double totalWeight = (list!=null&&list.size()>0?list.get(0).getTotalWeight():0);
311
312             double totalAmount = (cartList != null && cartList.size() > 0 ? cartList.get(0).getTotalAmount() : 0);
313
314
315             json.addProperty("total", cartList.size() + "个商品"
316                     + (settingEntity.isShowPrice() ? " - " + currencyEntity.getCurrencySign() + totalAmount : ""));
317             SettingKey.setCartHintMsg(session, "您已成功更新了购物车!");
318
319             //预估配送费用
320             double freeCost = SettingKey.getFreeCost(request);
321             //优惠券
322             double couponCost = SettingKey.getCouponCost(request);
323             //礼品劵
324             double voucherCost = SettingKey.getVoucherCost(request);
325
326             double sumTotalAmount = totalAmount + freeCost - couponCost - voucherCost;
327             json.addProperty("matcodetotal", totalAmount + "");   //购物车页面使用  /shopping/mobile/cart/index.jsp
328             json.addProperty("totalamount", sumTotalAmount + "");  //购物车页面使用  /shopping/mobile/cart/index.jsp
329             json.addProperty("cart-num", (cartList != null ? cartList.size() : 0));
d223ec 330             
J 331             //输出当前商品的记录条数和数量
332             List<CartEntity> matCodeEntityForMatCode = cartList.stream().filter((CartEntity c) -> c.getMatCode().equals(matCodes)).collect(Collectors.toList());
333             CartEntity cartEntityForMatCode = matCodeEntityForMatCode != null && matCodeEntityForMatCode.size() > 0 ? matCodeEntityForMatCode.get(0) : null;
334             json.addProperty("CartRowCountForMatCode",cartEntityForMatCode!=null? cartEntityForMatCode.getCartRowCountForMatCode():0); //当前商品的记录条数
335             json.addProperty("CartQuantitySumForMatCode", cartEntityForMatCode!=null?cartEntityForMatCode.getCartQuantitySumForMatCode():0);  //当前商品的数量
336             json.addProperty("CartQuantity", 0);   //当前商品在购物车中的数量,当前购物车已经删除,必须输出 0 
337
a25d9c 338
F 339             this.printJson(response, json.toString());
340         } catch (Exception e) {
341             e.printStackTrace();
342             errJson.addProperty("warning", e.getMessage());
343             json.add("error", errJson);
344             this.printJson(response, json.toString());
345             return;
346         } finally {
347             SpObserver.setDBtoInstance();
348         }
349     }
350
351     @RequestMapping(params = "m=delByPicture")
352     public void delByPicture(HttpServletRequest request, HttpServletResponse response) {
353         HttpSession session = request.getSession();
354         //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID);
a6a76f 355
F 356 //        String sessionId = session.getId();
22907b 357 //        String userCode = (session.getAttribute(SessionKey.USERCODE) == null ? ""
J 358 //                : (String) session.getAttribute(SessionKey.USERCODE));
a6a76f 359 //        String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? ""
F 360 //                : (String) session.getAttribute(SessionKey.WEIXIN_OPENID));
a25d9c 361         String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? ""
F 362                 : (String) session.getAttribute(SettingKey.CLTCODE));
363         // String cltName = (session.getAttribute(SettingKey.CLTNAME) ==
364         // null?"": (String)session.getAttribute(SettingKey.CLTNAME)) ;
365         SettingEntity settingEntity = null;
366         CurrencyEntity currencyEntity = null;
a6a76f 367
a25d9c 368         JsonObject json = new JsonObject();
F 369         JsonObject errJson = new JsonObject();
370         try {
371             DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);
372             SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());// 切换数据源
22907b 373             currencyEntity = new CurrencyEntity(request);
J 374             settingEntity = settingIfc.getSettingEntity(request);
a6a76f 375
a25d9c 376             Integer cartId = (request.getParameter("key") == null ? 0 : Integer.parseInt(request.getParameter("key")));
F 377             cartIfc.delCartByPicture(cartId);
378             List<CartEntity> list = cartIfc.getCartsByPicture(cltCode); // 重新取一次数,确保购物车显示正确
a6a76f 379
a25d9c 380             //double totalQuantity = (list!=null&&list.size()>0?list.get(0).getTotalQuantity():0);
F 381             //double totalWeight = (list!=null&&list.size()>0?list.get(0).getTotalWeight():0);
a6a76f 382
a25d9c 383             double totalAmount = (list != null && list.size() > 0 ? list.get(0).getTotalAmount() : 0);
a6a76f 384
a25d9c 385
F 386             json.addProperty("total", list.size() + "个商品"
387                     + (settingEntity.isShowPrice() ? " - " + currencyEntity.getCurrencySign() + totalAmount : ""));
388             SettingKey.setCartHintMsg(session, "您已成功更新了购物车!");
389
390
391             double sumTotalAmount = totalAmount;
392             json.addProperty("matcodetotal", totalAmount + "");   //购物车页面使用  /shopping/mobile/cart/index.jsp
393             json.addProperty("totalamount", sumTotalAmount + "");  //购物车页面使用  /shopping/mobile/cart/index.jsp
394             json.addProperty("cart-num", (list != null ? list.size() : 0));
395
396             this.printJson(response, json.toString());
397         } catch (Exception e) {
398             e.printStackTrace();
399             errJson.addProperty("warning", e.getCause() != null ? e.getCause().getMessage() : e.getMessage());
400             json.add("error", errJson);
401             this.printJson(response, json.toString());
402             return;
403         } finally {
404             SpObserver.setDBtoInstance();
405         }
406     }
407
408     /**
409      * 编辑购物车中的数量
410      *
411      * @param request
412      * @param response
413      */
414     @RequestMapping(params = "m=edit")
415     public void edit(HttpServletRequest request, HttpServletResponse response) {
416         HttpSession session = request.getSession();
417         String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID);
418         String jsonFormat = request.getParameter("json");
419
420         String sessionId = session.getId();
421         String userCode = (session.getAttribute(SessionKey.USERCODE) == null ? ""
422                 : (String) session.getAttribute(SessionKey.USERCODE));
423         String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? ""
424                 : (String) session.getAttribute(SessionKey.WEIXIN_OPENID));
425         String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? ""
426                 : (String) session.getAttribute(SettingKey.CLTCODE));
427
428
429         String hostUrl = SettingKey.getHostUrl(request);
430         // 将微信corpid组装成url
431         String wxQueryString = SettingKey.getQueryStringByWx(request);
432         boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request);
52123d 433         JsonObject json = new JsonObject();
d223ec 434         Integer myCartId = null ; 
a25d9c 435         try {
F 436             DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);
437             SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());// 切换数据源
22907b 438             SettingEntity settingEntity = settingIfc.getSettingEntity(request);
a25d9c 439             //取网店 shopcccode
F 440             ShopCcCodeEntity shopCcCodeEntity = ShopCcCode.getShopCcCode(settingEntity, request);
d223ec 441             
a25d9c 442             Map<String, String[]> params = request.getParameterMap();
F 443             for (String key : params.keySet()) {
444                 if (!key.startsWith("quantity")) {
445                     continue;
446                 }
447                 int pos = key.indexOf("_");
448                 Integer cartId = Integer.valueOf(key.substring(pos + 1, key.length()));
449                 String[] values = params.get(key);
450                 double quantity = 0;
451                 for (int i = 0; i < values.length; i++) {
452                     if (values[i] == null || "".equals(values[i])) {
453
454                         if (jsonFormat != null && !"".equals(jsonFormat)) {
455                             JsonObject success = new JsonObject();
456                             success.addProperty("error", "必须录入数量!");   //购物车页面使用  /shopping/mobile/cart/index.jsp
457                             this.printJson(response, success.toString());
458                             return;
459                         } else {
460                             SettingKey.setCartHintMsg(session, "必须录入数量!");
461                             String url = "<script language=\"javascript\" type=\"text/javascript\">window.location.href=\"" + hostUrl
462                                     + "/shopping/" + (isMoblieBrowser ? "mobile/" : "") + "cart/" + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString)
463                                     + "\"</script>";
464                             this.print(response, url);
465                             return;
466                         }
467                     }
468
469                     quantity = Double.parseDouble(values[i].toString());
470                     if (quantity > maxQuantity) {
471                         JsonObject success = new JsonObject();
472                         success.addProperty("error", "数量不能大于 " + maxQuantity + " !");
473                         this.printJson(response, success.toString());
474                         return;
475                     }
476
477                 }
d223ec 478                 myCartId = cartId;
a25d9c 479                 cartIfc.updateCartQuantity(cartId, quantity, cltCode);
d223ec 480
52123d 481                 json.addProperty("CartId", cartId);
a25d9c 482             }
F 483
484             if (jsonFormat != null && !"".equals(jsonFormat)) {
485                 //预估配送费用
486                 double freeCost = SettingKey.getFreeCost(request);
487                 //优惠券
488                 double couponCost = SettingKey.getCouponCost(request);
489                 //礼品劵
490                 double voucherCost = SettingKey.getVoucherCost(request);
491                 List<CartEntity> cartList = cartIfc.getCartList(userCode, sessionId, openId, cltCode, shopCcCodeEntity.getShopCcCode()); // 重新取一次数,确保购物车显示正确
22907b 492                 CurrencyEntity currencyEntity = new CurrencyEntity(request);
a25d9c 493
F 494                 /******** 购物车 开始清单输出 *************/
495                 DecimalFormat df = new DecimalFormat("0.00");
496                 double selectTotalAmount = 0;  //给 footer.jsp 页面使用,用于赋初值
497                 int selectItems = 0;    //给 footer.jsp 页面使用,用于赋初值
498                 int cartItems = 0; //给 footer.jsp 页面使用,用于赋初值
499                 if (cartList != null) {
500                     cartItems = cartList.size();
501                 }
502
1159e1 503                 double maxPointsQuantity=0;
a25d9c 504                 //取已经选择的金额数
F 505                 List<CartEntity> selectedCartList = cartList.stream().filter((CartEntity c) -> c.isSelected()).collect(Collectors.toList());
506                 for (int i = 0; selectedCartList != null && i < selectedCartList.size(); i++) {
507                     selectTotalAmount += selectedCartList.get(i).getAmount();
1159e1 508                     maxPointsQuantity += selectedCartList.get(i).getExchangePointsQuantity() * selectedCartList.get(i).getQuantity();
a25d9c 509                     selectItems++;
F 510                 }
511
512                 //组装 json array 输出
513                 JsonArray cartListJsonArray = this.getCartJsonArray(request, settingEntity, cartList, currencyEntity, dataSourceEntity);
514                 json.add("list", cartListJsonArray);
1159e1 515
X 516                 //用户总积分
517                 List<PointsEntity> pointsList = rewardIfc.getPoints(cltCode);
518                 json.addProperty("maxUserPoints", (pointsList.size() > 0 ? pointsList.get(0).getPoints() : 0));
519                 json.addProperty("maxPointsQuantity",maxPointsQuantity);//用户必须支付的总商品积分
a25d9c 520
F 521                 json.addProperty("SelectTotalAmount", df.format(selectTotalAmount));
522                 json.addProperty("SelectItems", selectItems);
523                 json.addProperty("CartItems", cartItems);
524                 /******** 购物车 结束清单输出 *************/
525
526
527                 //double totalQuantity = (list!=null&&list.size()>0?list.get(0).getTotalQuantity():0);
528                 //double totalWeight = (list!=null&&list.size()>0?list.get(0).getTotalWeight():0);
529
530                 double totalAmount = (cartList != null && cartList.size() > 0 ? cartList.get(0).getTotalAmount() : 0);
531
532                 double sumTotalAmount = (cartList != null && cartList.size() > 0 ? cartList.get(0).getTotalAmount() : 0) + freeCost - couponCost - voucherCost;
533
534                 json.addProperty("matcodetotal", totalAmount + "");   //购物车页面使用  /shopping/mobile/cart/index.jsp
535                 json.addProperty("totalamount", sumTotalAmount + "");  //购物车页面使用  /shopping/mobile/cart/index.jsp
536                 json.addProperty("cart-num", (cartList != null ? cartList.size() : 0));
d223ec 537                 
J 538                 final Integer cartId = myCartId;
539                 //输出当前商品的记录条数和数量
540                 List<CartEntity> matCodeEntityForMatCode = cartList.stream().filter((CartEntity c) -> c.getCartId().equals(cartId)).collect(Collectors.toList());
541                 CartEntity cartEntityForMatCode = matCodeEntityForMatCode != null && matCodeEntityForMatCode.size() > 0 ? matCodeEntityForMatCode.get(0) : null;
542                 json.addProperty("CartRowCountForMatCode",cartEntityForMatCode!=null? cartEntityForMatCode.getCartRowCountForMatCode():0); //当前商品的记录条数
543                 json.addProperty("CartQuantitySumForMatCode", cartEntityForMatCode!=null?cartEntityForMatCode.getCartQuantitySumForMatCode():0);  //当前商品的数量
544                 json.addProperty("CartQuantity", cartEntityForMatCode!=null?cartEntityForMatCode.getQuantity():0);   //当前商品在购物车中的数量
545                 
a25d9c 546                 this.printJson(response, json.toString());
d223ec 547                 return;
a25d9c 548             } else {
F 549                 SettingKey.setCartHintMsg(session, "您已成功更新了购物车!");
550                 String url = "<script language=\"javascript\" type=\"text/javascript\">window.location.href=\"" + hostUrl
551                         + "/shopping/" + (isMoblieBrowser ? "mobile/" : "") + "cart/" + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString)
552                         + "\"</script>";
553                 this.print(response, url);
554             }
555             return;
556         } catch (Exception e) {
557             e.printStackTrace();
558             JsonObject success = new JsonObject();
559             success.addProperty("error", "SpObserver.getCurrentInstance():" + SpObserver.getCurrentInstance()
560                     + " SessionKey.SHOPPING_DBID:" + dbId + " error:" + e.getMessage());
561             this.printJson(response, success.toString());
562             return;
563         } finally {
564             SpObserver.setDBtoInstance();
565         }
566     }
567
568
569     @RequestMapping(params = "m=editByPicture")
570     public void editByPicture(HttpServletRequest request, HttpServletResponse response) {
571         HttpSession session = request.getSession();
572         String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID);
573         String jsonFormat = request.getParameter("json");
574
a6a76f 575 //        String sessionId = session.getId();
F 576 //        String userCode = (session.getAttribute(SessionKey.USERCODE) == null ? ""
577 //                : (String) session.getAttribute(SessionKey.USERCODE));
578 //        String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? ""
579 //                : (String) session.getAttribute(SessionKey.WEIXIN_OPENID));
a25d9c 580         String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? ""
F 581                 : (String) session.getAttribute(SettingKey.CLTCODE));
a6a76f 582
F 583
a25d9c 584         String hostUrl = SettingKey.getHostUrl(request);
F 585         // 将微信corpid组装成url
586         String wxQueryString = SettingKey.getQueryStringByWx(request);
587         boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request);
588         try {
589             DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);
590             SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());// 切换数据源
591             Map<String, String[]> params = request.getParameterMap();
592             for (String key : params.keySet()) {
593                 if (!key.startsWith("quantity")) {
594                     continue;
595                 }
596                 int pos = key.indexOf("_");
597                 Integer cartId = Integer.valueOf(key.substring(pos + 1, key.length()));
598                 String[] values = params.get(key);
599                 double quantity = 0;
600                 for (int i = 0; i < values.length; i++) {
601                     if (values[i] == null || "".equals(values[i])) {
a6a76f 602
a25d9c 603                         if (jsonFormat != null && !"".equals(jsonFormat)) {
F 604                             JsonObject success = new JsonObject();
605                             success.addProperty("error", "必须录入数量!");   //购物车页面使用  /shopping/mobile/cart/index.jsp
606                             this.printJson(response, success.toString());
607                             return;
608                         } else {
609                             SettingKey.setCartHintMsg(session, "必须录入数量!");
610                             String url = "<script language=\"javascript\" type=\"text/javascript\">window.location.href=\"" + hostUrl
611                                     + "/shopping/" + (isMoblieBrowser ? "mobile/" : "") + "purchase/cart.jsp" + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString)
612                                     + "\"</script>";
613                             this.print(response, url);
614                             return;
615                         }
616                     }
a6a76f 617
a25d9c 618                     quantity = Double.parseDouble(values[i].toString());
F 619                     if (quantity > maxQuantity) {
620                         JsonObject success = new JsonObject();
621                         success.addProperty("error", "数量不能大于 " + maxQuantity + " !");
622                         this.printJson(response, success.toString());
623                         return;
624                     }
a6a76f 625
a25d9c 626                 }
a6a76f 627
a25d9c 628                 cartIfc.updateCartQuantityByPicture(cartId, quantity);
F 629             }
a6a76f 630
a25d9c 631             if (jsonFormat != null && !"".equals(jsonFormat)) {
a6a76f 632
a25d9c 633                 List<CartEntity> list = cartIfc.getCartsByPicture(cltCode); // 重新取一次数,确保购物车显示正确
a6a76f 634
a25d9c 635                 double totalAmount = (list != null && list.size() > 0 ? list.get(0).getTotalAmount() : 0);
a6a76f 636
a25d9c 637                 double sumTotalAmount = (list != null && list.size() > 0 ? list.get(0).getTotalAmount() : 0);
F 638                 JsonObject success = new JsonObject();
639                 success.addProperty("matcodetotal", totalAmount + "");   //购物车页面使用  /shopping/mobile/cart/index.jsp
640                 success.addProperty("totalamount", sumTotalAmount + "");  //购物车页面使用  /shopping/mobile/cart/index.jsp
641                 success.addProperty("cart-num", (list != null ? list.size() : 0));
642                 this.printJson(response, success.toString());
643             } else {
644                 SettingKey.setCartHintMsg(session, "您已成功更新了购物车!");
645                 String url = "<script language=\"javascript\" type=\"text/javascript\">window.location.href=\"" + hostUrl
646                         + "/shopping/" + (isMoblieBrowser ? "mobile/" : "") + "purchase/cart.jsp" + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString)
647                         + "\"</script>";
648                 this.print(response, url);
649             }
650             return;
651         } catch (Exception e) {
652             e.printStackTrace();
653             JsonObject success = new JsonObject();
654             success.addProperty("error", "SpObserver.getCurrentInstance():" + SpObserver.getCurrentInstance()
655                     + " SessionKey.SHOPPING_DBID:" + dbId + " error:" + e.getMessage());
656             this.printJson(response, success.toString());
657             return;
658         } finally {
659             SpObserver.setDBtoInstance();
660         }
661     }
a6a76f 662
a25d9c 663     /**
F 664      * 清空购物车
665      *
666      * @param request
667      * @param response
668      */
669     @RequestMapping(params = "m=delall")
670     public void delAll(HttpServletRequest request, HttpServletResponse response) {
671         HttpSession session = request.getSession();
672         String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID);
a6a76f 673
a25d9c 674         String sessionId = session.getId();
F 675         String userCode = (session.getAttribute(SessionKey.USERCODE) == null ? ""
676                 : (String) session.getAttribute(SessionKey.USERCODE));
677         String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? ""
678                 : (String) session.getAttribute(SessionKey.WEIXIN_OPENID));
679         String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? ""
680                 : (String) session.getAttribute(SettingKey.CLTCODE));
681         // String cltName = (session.getAttribute(SettingKey.CLTNAME) ==
682         // null?"": (String)session.getAttribute(SettingKey.CLTNAME)) ;
683         try {
684             SpObserver.setDBtoInstance("_" + dbId);// 切换数据源
22907b 685             SettingEntity settingEntity = settingIfc.getSettingEntity(request);
a25d9c 686             //取网店 shopcccode
F 687             ShopCcCodeEntity shopCcCodeEntity = ShopCcCode.getShopCcCode(settingEntity, request);
a6a76f 688
22907b 689             CurrencyEntity currencyEntity = new CurrencyEntity(request);
J 690             
a25d9c 691             //userCode, sessionId, openId, cltCode,shopCcCodeEntity.getShopCcCode()
F 692             cartIfc.delAllCart(userCode, sessionId, openId);
693             List<CartEntity> list = cartIfc.getCartList(userCode, sessionId, openId, cltCode, shopCcCodeEntity.getShopCcCode()); // 重新取一次数,确保购物车显示正确
a6a76f 694
a25d9c 695             //double totalQuantity = (list!=null&&list.size()>0?list.get(0).getTotalQuantity():0);
F 696             //double totalWeight = (list!=null&&list.size()>0?list.get(0).getTotalWeight():0);
a6a76f 697
a25d9c 698             double totalAmount = (list != null && list.size() > 0 ? list.get(0).getTotalAmount() : 0);
F 699             JsonObject success = new JsonObject();
700             success.addProperty("total", list.size() + "个商品"
701                     + (settingEntity.isShowPrice() ? " - " + currencyEntity.getCurrencySign() + totalAmount : ""));
702             SettingKey.setCartHintMsg(session, "您已成功更新了购物车!");
703             success.addProperty("cart-num", (list != null ? list.size() : 0));
704             this.printJson(response, success.toString());
705         } catch (Exception e) {
706             e.printStackTrace();
707             JsonObject success = new JsonObject();
708             success.addProperty("error", "SpObserver.getCurrentInstance():" + SpObserver.getCurrentInstance()
709                     + " SessionKey.SHOPPING_DBID:" + dbId + " error:" + e.getMessage());
710             this.printJson(response, success.toString());
711             return;
712         } finally {
713             SpObserver.setDBtoInstance();
714         }
715     }
a6a76f 716
a25d9c 717     /**
abc52b 718      * 快速加入购物车(用于小程序商品列表时快速加入购物车)
J 719      *
720      * @param request
721      * @param response
722      */
723     @RequestMapping(params = "m=fastAdd")
724     public void fastAdd(HttpServletRequest request, HttpServletResponse response) {
725         //String hostUrl = SettingKey.getHostUrl(request);
726         // 将微信corpid组装成url
727         //String wxQueryString = SettingKey.getQueryStringByWx(request);
728         //String action = request.getParameter("action");
729
730         HttpSession session = request.getSession();
731         //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID);
732
733         String sessionId = session.getId();
734         String userCode = (session.getAttribute(SessionKey.HRCODE) == null ? ""
735                 : (String) session.getAttribute(SessionKey.HRCODE));
736         String userName = (session.getAttribute(SessionKey.HRNAME) == null ? ""
737                 : (String) session.getAttribute(SessionKey.HRNAME));
738         String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? ""
739                 : (String) session.getAttribute(SessionKey.WEIXIN_OPENID));
740
741         String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? ""
742                 : (String) session.getAttribute(SettingKey.CLTCODE));
743         String cltName = (session.getAttribute(SettingKey.CLTNAME) == null ? ""
744                 : (String) session.getAttribute(SettingKey.CLTNAME));
745
746         String matCode = (request.getParameter(SettingKey.MATCODE) == null ? ""
747                 : request.getParameter(SettingKey.MATCODE));
748         double quantity = (request.getParameter("quantity") == null ? 0
749                 : Double.parseDouble(request.getParameter("quantity")));
750        
751         JsonObject json = new JsonObject();
752         JsonObject errJson = new JsonObject();
22907b 753         SettingEntity settingEntity = null;
abc52b 754         try {
J 755             DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);
756             SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());// 切换数据源
22907b 757             settingEntity = settingIfc.getSettingEntity(request);
J 758             ShopCcCodeEntity shopCcCodeEntity = ShopCcCode.getShopCcCode(settingEntity, request);
abc52b 759
J 760             CartEntity cart = new CartEntity();
761             cart.setMatCode(matCode);
762             cart.setCltCode(cltCode);
763             cart.setCltName(cltName);
764
765             // 如果是客户登录了,则设置当前购物车的“主人” 为客户编号
766             if ((cltCode != null && !"".equals(cltCode)) || (openId != null && !"".equals(openId))) {
767                 cart.setUserCode("");
768                 cart.setUserName("");
769                 cart.setSessionId("");
770             } else {
771                 cart.setUserCode(userCode);
772                 cart.setUserName(userName);
773                 cart.setSessionId(sessionId);
774             }
775
776             cart.setQuantity(quantity);
777
778             cart.setRefreshPrice(true);
779             cart.setOpenId(openId);
22907b 780             
abc52b 781
J 782             String skuId1 = request.getParameter("skuId1");
783             String skuId2 = request.getParameter("skuId2");
784             String skuId3 = request.getParameter("skuId3");
785             String skuId4 = request.getParameter("skuId4");
786             String skuId5 = request.getParameter("skuId5");
787             String skuId6 = request.getParameter("skuId6");
788             String skuId7 = request.getParameter("skuId7");
789             String skuId8 = request.getParameter("skuId8");
790             String skuId9 = request.getParameter("skuId9");
791             String skuId10 = request.getParameter("skuId10");
792             cart.setSkuId1(skuId1 == null || "".equals(skuId1) ? null : Integer.parseInt(skuId1))
793                     .setSkuId2(skuId2 == null || "".equals(skuId2) ? null : Integer.parseInt(skuId2))
794                     .setSkuId3(skuId3 == null || "".equals(skuId3) ? null : Integer.parseInt(skuId3))
795                     .setSkuId4(skuId4 == null || "".equals(skuId4) ? null : Integer.parseInt(skuId4))
796                     .setSkuId5(skuId5 == null || "".equals(skuId5) ? null : Integer.parseInt(skuId5))
797                     .setSkuId6(skuId6 == null || "".equals(skuId6) ? null : Integer.parseInt(skuId6))
798                     .setSkuId7(skuId7 == null || "".equals(skuId7) ? null : Integer.parseInt(skuId7))
799                     .setSkuId8(skuId8 == null || "".equals(skuId8) ? null : Integer.parseInt(skuId8))
800                     .setSkuId9(skuId9 == null || "".equals(skuId9) ? null : Integer.parseInt(skuId9))
801                     .setSkuId10(skuId10 == null || "".equals(skuId10) ? null : Integer.parseInt(skuId10));
802
22907b 803             cart.setShopCcCode(shopCcCodeEntity.getShopCcCode());
J 804             CartEntity cartEntity = cartIfc.addToCartAndReturnCartEntity(cart);
805             if (cartEntity != null) {
abc52b 806                 //立即下单
J 807                 String selectedCattIds = (String) session.getAttribute(SettingKey.CHECKBOX);
808                 if (selectedCattIds == null) {
22907b 809                     selectedCattIds = ";" + cartEntity.getCurrentCartId() + ";";
J 810                 } else if (selectedCattIds.indexOf(cartEntity.getCurrentCartId() + ";") <= 0) {
811                     selectedCattIds += cartEntity.getCurrentCartId() + ";";
abc52b 812                 }
J 813                 session.setAttribute(SettingKey.CHECKBOX, selectedCattIds);
814             }
22907b 815 //            if (cart.isRefreshPrice()) {
J 816 //                //刷新购物车中的价格、积分和重量
817 //                cartIfc.refrshCart(cartId, cart.getCltCode());
818 //            }
819             //CartEntity cartEntity = cartIfc.getCart(cartId,openId);
abc52b 820             
J 821             json.addProperty(SettingKey.MATCODE, cartEntity.getMatCode());   //商品编号
822             json.addProperty("quantity", cartEntity.getQuantity());   //数量
22907b 823             json.addProperty("cartId", cartEntity.getCurrentCartId());    //cartid 
6a5d4e 824             json.addProperty("cartRowCount", cartEntity.getCartRowCount());    //购物车总记录数
J 825             json.addProperty("cartQuantitySum", cartEntity.getCartQuantitySum());    //购物车总数量
abc52b 826             this.printJson(response, json.toString());
J 827             return;
828         } catch (Exception e) {
829             e.printStackTrace();
830             errJson.addProperty("warning", e.getCause() != null ? e.getCause().getMessage() : e.getMessage());
831             json.add("error", errJson);
832             this.printJson(response, json.toString());
833             return;
834         } finally {
835             SpObserver.setDBtoInstance();
836         }
837     }
838     
839     /**
a25d9c 840      * 加入购物车
F 841      *
842      * @param request
843      * @param response
844      */
845     @RequestMapping(params = "m=add")
846     public void add(HttpServletRequest request, HttpServletResponse response) {
847         String hostUrl = SettingKey.getHostUrl(request);
848         // 将微信corpid组装成url
849         String wxQueryString = SettingKey.getQueryStringByWx(request);
850         String action = request.getParameter("action");
a6a76f 851
a25d9c 852         HttpSession session = request.getSession();
F 853         //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID);
a6a76f 854
a25d9c 855         String sessionId = session.getId();
F 856         String userCode = (session.getAttribute(SessionKey.HRCODE) == null ? ""
857                 : (String) session.getAttribute(SessionKey.HRCODE));
858         String userName = (session.getAttribute(SessionKey.HRNAME) == null ? ""
859                 : (String) session.getAttribute(SessionKey.HRNAME));
860         String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? ""
861                 : (String) session.getAttribute(SessionKey.WEIXIN_OPENID));
a6a76f 862
a25d9c 863         String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? ""
F 864                 : (String) session.getAttribute(SettingKey.CLTCODE));
865         String cltName = (session.getAttribute(SettingKey.CLTNAME) == null ? ""
866                 : (String) session.getAttribute(SettingKey.CLTNAME));
a6a76f 867
a25d9c 868         String matCode = (request.getParameter(SettingKey.MATCODE) == null ? ""
F 869                 : request.getParameter(SettingKey.MATCODE));
870         double quantity = (request.getParameter("quantity") == null ? 0
871                 : Double.parseDouble(request.getParameter("quantity")));
872         Integer recurringId = (request.getParameter("recurringid") == null ? 0
873                 : Integer.parseInt(request.getParameter("recurringid")));
874         boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request);
a6a76f 875
a25d9c 876         Map<String, String[]> params = request.getParameterMap();
F 877         JsonObject json = new JsonObject();
22907b 878         JsonObject errJson = new JsonObject();
a25d9c 879         SettingEntity settingEntity = null;
F 880         try {
881             DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);
882             SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());// 切换数据源
22907b 883             settingEntity = settingIfc.getSettingEntity(request);
a25d9c 884             //取网店 shopcccode
F 885             ShopCcCodeEntity shopCcCodeEntity = ShopCcCode.getShopCcCode(settingEntity, request);
886             // 必录检查
a9db41 887             //errJson = this.checkRequired(params, matCode, hostUrl, wxQueryString, isMoblieBrowser);
a25d9c 888             if (errJson != null && errJson.has("error")) {
F 889                 this.printJson(response, errJson.toString());
890                 return;
891             }
a6a76f 892
a25d9c 893             // save
a6a76f 894
a25d9c 895             if (quantity <= 0) {
F 896                 errJson.addProperty("quantity", "数量必须录入!");
897                 json.add("error", errJson);
898                 this.printJson(response, json.toString());
899                 return;
900             }
a6a76f 901
a25d9c 902             if (quantity > maxQuantity) {
F 903                 errJson.addProperty("quantity", "数量不能大于 " + maxQuantity + " !");
904                 json.add("error", errJson);
905                 this.printJson(response, json.toString());
906                 return;
907             }
a6a76f 908
a25d9c 909             boolean found = false;
F 910             for (String key : params.keySet()) {
911                 if (!key.startsWith("option")) {
912                     continue;
913                 }
a6a76f 914
a25d9c 915                 String optionId = key.substring(key.indexOf("[") + 1, key.indexOf("]"));
F 916                 String[] values = params.get(key);
917                 String value = "";
918                 for (int i = 0; i < values.length; i++) {
919                     value = (value != null && !"".equals(value) ? value + "," : "") + values[i];
920                 }
921                 json.addProperty(optionId, value);
922                 found = true;
923             }
924             String optionStrJson = null;
925             if (found) {
926                 optionStrJson = json.toString();
927             }
928             CartEntity cart = new CartEntity();
929             cart.setMatCode(matCode);
930             cart.setCltCode(cltCode);
931             cart.setCltName(cltName);
a6a76f 932
a25d9c 933             // 如果是客户登录了,则设置当前购物车的“主人” 为客户编号
F 934             if ((cltCode != null && !"".equals(cltCode)) || (openId != null && !"".equals(openId))) {
935                 cart.setUserCode("");
936                 cart.setUserName("");
937                 cart.setSessionId("");
938             } else {
939                 cart.setUserCode(userCode);
940                 cart.setUserName(userName);
941                 cart.setSessionId(sessionId);
942             }
a6a76f 943
a25d9c 944             cart.setRecurringId(recurringId);
F 945             cart.setOptionJson(optionStrJson);
946             cart.setQuantity(quantity);
a6a76f 947
a25d9c 948             cart.setRefreshPrice(true);
F 949             cart.setOpenId(openId);
a6a76f 950
a25d9c 951             //MatCodeEntity matCodeEntity = matCodeIfc.getMatCode(matCode,shopCcCodeEntity.getShopCcCode());
F 952             String optionText = "";
22907b 953             if (optionStrJson != null && !"".equals(optionStrJson)) {
a25d9c 954                 optionText = getOptionText(optionStrJson);
F 955             }
956             cart.setOptionText(optionText);
957             cart.setGoShop("goshop".equals(action));   //是否立即下单,购物车中已存在此商品,则直接更新购物车中的数量为本次数量,不要累加这个数量
22907b 958             
a6a76f 959
a25d9c 960             String skuId1 = request.getParameter("skuId1");
F 961             String skuId2 = request.getParameter("skuId2");
962             String skuId3 = request.getParameter("skuId3");
963             String skuId4 = request.getParameter("skuId4");
964             String skuId5 = request.getParameter("skuId5");
965             String skuId6 = request.getParameter("skuId6");
966             String skuId7 = request.getParameter("skuId7");
967             String skuId8 = request.getParameter("skuId8");
968             String skuId9 = request.getParameter("skuId9");
969             String skuId10 = request.getParameter("skuId10");
970             cart.setSkuId1(skuId1 == null || "".equals(skuId1) ? null : Integer.parseInt(skuId1))
971                     .setSkuId2(skuId2 == null || "".equals(skuId2) ? null : Integer.parseInt(skuId2))
972                     .setSkuId3(skuId3 == null || "".equals(skuId3) ? null : Integer.parseInt(skuId3))
973                     .setSkuId4(skuId4 == null || "".equals(skuId4) ? null : Integer.parseInt(skuId4))
974                     .setSkuId5(skuId5 == null || "".equals(skuId5) ? null : Integer.parseInt(skuId5))
975                     .setSkuId6(skuId6 == null || "".equals(skuId6) ? null : Integer.parseInt(skuId6))
976                     .setSkuId7(skuId7 == null || "".equals(skuId7) ? null : Integer.parseInt(skuId7))
977                     .setSkuId8(skuId8 == null || "".equals(skuId8) ? null : Integer.parseInt(skuId8))
978                     .setSkuId9(skuId9 == null || "".equals(skuId9) ? null : Integer.parseInt(skuId9))
979                     .setSkuId10(skuId10 == null || "".equals(skuId10) ? null : Integer.parseInt(skuId10));
a6a76f 980
22907b 981             cart.setShopCcCode(shopCcCodeEntity.getShopCcCode());
J 982             List<CartEntity> cartList = cartIfc.addToCartAndReturnCartList(cart);
983             CartEntity cartEntity = cartList != null&& cartList.size()>0?cartList.get(0):null;
984             if (cartEntity != null) {
a25d9c 985                 //立即下单
F 986                 String selectedCattIds = (String) session.getAttribute(SettingKey.CHECKBOX);
987                 if (selectedCattIds == null || "goshop".equals(action)) {
22907b 988                     selectedCattIds = ";" + cartEntity.getCurrentCartId() + ";";
J 989                 } else if (selectedCattIds.indexOf(cartEntity.getCurrentCartId() + ";") <= 0) {
990                     selectedCattIds += cartEntity.getCurrentCartId() + ";";
a25d9c 991                 }
F 992                 session.setAttribute(SettingKey.CHECKBOX, selectedCattIds);
993             }
22907b 994 //            if (cart.isRefreshPrice()) {
J 995 //                //刷新购物车中的价格、积分和重量
996 //                cartIfc.refrshCart(cartId, cart.getCltCode());
997 //            }
998             //List<CartEntity> cartList = cartIfc.getCartList(userCode, sessionId, cart.getOpenId(), cltCode, shopCcCodeEntity.getShopCcCode()); // 重新取一次数,确保购物车显示正确
999             CurrencyEntity currencyEntity = new CurrencyEntity(request);
739c87 1000             
a25d9c 1001             /******** 购物车 开始清单输出 *************/
F 1002             DecimalFormat df = new DecimalFormat("0.00");
22907b 1003             //double selectTotalAmount = 0;  //给 footer.jsp 页面使用,用于赋初值
J 1004             //int selectItems = 0;    //给 footer.jsp 页面使用,用于赋初值
1005             //int cartItems = 0; //给 footer.jsp 页面使用,用于赋初值
1006 //            if (cartList != null) {
1007 //                cartItems = cartList.size();
1008 //            }
a6a76f 1009
a25d9c 1010             //取已经选择的金额数
22907b 1011 //            List<CartEntity> selectedCartList = cartList.stream().filter((CartEntity c) -> c.isSelected()).collect(Collectors.toList());
J 1012 //            for (int i = 0; selectedCartList != null && i < selectedCartList.size(); i++) {
1013 //                selectTotalAmount += selectedCartList.get(i).getAmount();
1014 //                selectItems++;
1015 //            }
a25d9c 1016
F 1017             //组装 json array 输出
1018             JsonArray cartListJsonArray = this.getCartJsonArray(request, settingEntity, cartList, currencyEntity, dataSourceEntity);
1019             json.add("list", cartListJsonArray);
1020
22907b 1021             json.addProperty("SelectTotalAmount", df.format(cartEntity==null?0:cartEntity.getSelectedTotalAmount())) ; //   df.format(selectTotalAmount));
J 1022             json.addProperty("SelectItems",cartEntity==null?0:cartEntity.getSelectedItems()) ; // selectItems);
1023             json.addProperty("CartItems", cartEntity==null?0:cartEntity.getCartItems()); // cartItems);
a25d9c 1024             /******** 购物车 结束清单输出 *************/
F 1025
1026
22907b 1027             double totalQuantity =  cartEntity==null?0:cartEntity.getTotalQuantity();
a25d9c 1028             //double totalWeight = (list!=null&&list.size()>0?list.get(0).getTotalWeight():0);
F 1029
22907b 1030             double totalAmount = cartEntity==null?0:cartEntity.getTotalAmount(); 
a25d9c 1031             //取刚才加入购物车的物料信息
22907b 1032             List<CartEntity> matCodeEntityList = cartList.stream().filter((CartEntity c) -> c.getCartId().equals(cartEntity.getCurrentCartId())).collect(Collectors.toList());
J 1033             CartEntity cartEntityForMatCode = matCodeEntityList != null && matCodeEntityList.size() > 0 ? matCodeEntityList.get(0) : null;
739c87 1034             
a25d9c 1035             json.addProperty("success", "成功添加商品 <a href=\"" + hostUrl + SettingKey.getMatCodeUrl(null, matCode, isMoblieBrowser)
F 1036                     + (wxQueryString == null || "".equals(wxQueryString) ? "" : "&" + wxQueryString) + "\">"
22907b 1037                     + (cartEntityForMatCode == null ? "" : (settingEntity.isShowMatName() ? cartEntityForMatCode.getMatName() : "商品")) + "</a>到您的 <a href=\"" + hostUrl
a25d9c 1038                     + "/shopping/" + (isMoblieBrowser ? "mobile/" : "") + "cart/" + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString)
F 1039                     + "\">购物车</a>!");
1040             json.addProperty("toastmessage", "成功添加商品到您的 <a href=\"" + hostUrl + "/shopping/" + (isMoblieBrowser ? "mobile/" : "") + "cart/"
1041                     + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString) + "\">购物车</a>!");
1042             json.addProperty("total", (cartList != null ? cartList.size() : 0) + "种商品(共" + (new Double(totalQuantity)).intValue()
1043                     + "件)"
1044                     + (settingEntity.isShowPrice() ? " - " + currencyEntity.getCurrencySign() + totalAmount : ""));
1045             json.addProperty("cart-num", (cartList != null ? cartList.size() : 0));
1046             //如果是立即购买
1047             if (action != null && "goshop".equals(action)) {
22907b 1048                 json.addProperty("redirect", hostUrl + "/shopping/" + (isMoblieBrowser ? "mobile/" : "") + "checkoutnew/?selectedCartIds=" + cartEntity.getCurrentCartId() + (wxQueryString == null || "".equals(wxQueryString) ? "" : "&" + wxQueryString));
a25d9c 1049             }
22907b 1050             json.addProperty("CartId", cartEntity.getCurrentCartId());
52123d 1051             
J 1052             //输出当前商品的记录条数和数量
22907b 1053             //List<CartEntity> matCodeEntityForMatCode = cartList.stream().filter((CartEntity c) -> c.getCartId().equals(cartEntity.getCurrentCartId())).collect(Collectors.toList());
J 1054             //CartEntity cartEntityForMatCode = matCodeEntityForMatCode != null && matCodeEntityForMatCode.size() > 0 ? matCodeEntityForMatCode.get(0) : null;
d223ec 1055             json.addProperty("CartRowCountForMatCode",cartEntityForMatCode!=null? cartEntityForMatCode.getCartRowCountForMatCode():0);
J 1056             json.addProperty("CartQuantitySumForMatCode", cartEntityForMatCode!=null?cartEntityForMatCode.getCartQuantitySumForMatCode():0);
1057             json.addProperty("CartQuantity", cartEntityForMatCode!=null?cartEntityForMatCode.getQuantity():0);  //当前 cartid 的购物车数量
52123d 1058             
a25d9c 1059             this.printJson(response, json.toString());
F 1060             return;
1061         } catch (Exception e) {
1062             e.printStackTrace();
1063             errJson.addProperty("warning", e.getCause() != null ? e.getCause().getMessage() : e.getMessage());
1064             json.add("error", errJson);
1065             this.printJson(response, json.toString());
1066             return;
1067         } finally {
1068             SpObserver.setDBtoInstance();
1069         }
1070     }
1071
1072
1073     @RequestMapping(params = "m=addByPicture")
1074     public void addByPicture(HttpServletRequest request, HttpServletResponse response) {
1075         String hostUrl = SettingKey.getHostUrl(request);
1076         // 将微信corpid组装成url
1077         String wxQueryString = SettingKey.getQueryStringByWx(request);
1078         String action = request.getParameter("action");
1079
1080         HttpSession session = request.getSession();
1081         //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID);
1082
1083         String sessionId = session.getId();
1084         String userCode = (session.getAttribute(SessionKey.HRCODE) == null ? ""
1085                 : (String) session.getAttribute(SessionKey.HRCODE));
1086         String userName = (session.getAttribute(SessionKey.HRNAME) == null ? ""
1087                 : (String) session.getAttribute(SessionKey.HRNAME));
1088         String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? ""
1089                 : (String) session.getAttribute(SessionKey.WEIXIN_OPENID));
1090
1091         String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? ""
1092                 : (String) session.getAttribute(SettingKey.CLTCODE));
1093         String cltName = (session.getAttribute(SettingKey.CLTNAME) == null ? ""
1094                 : (String) session.getAttribute(SettingKey.CLTNAME));
1095
1096         String matCode = (request.getParameter(SettingKey.MATCODE) == null ? ""
1097                 : request.getParameter(SettingKey.MATCODE));
1098         double quantity = (request.getParameter("quantity") == null ? 0
1099                 : Double.parseDouble(request.getParameter("quantity")));
1100
1101         boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request);
1102
1103
1104         JsonObject json = new JsonObject();
1105         JsonObject errJson = null;
1106         SettingEntity settingEntity = null;
1107         try {
1108             DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);
1109             SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());// 切换数据源
22907b 1110             settingEntity = settingIfc.getSettingEntity(request);
a25d9c 1111
F 1112             //取网店 shopcccode
1113             //ShopCcCodeEntity shopCcCodeEntity = ShopCcCode.getShopCcCode(settingEntity,request);
1114
1115
1116             // save
1117
1118             if (quantity <= 0) {
1119                 if (errJson == null) {
1120                     errJson = new JsonObject();
1121                 }
1122                 errJson.addProperty("quantity", "数量必须录入!");
1123                 json.add("error", errJson);
1124                 this.printJson(response, json.toString());
1125                 return;
1126             }
1127
1128             if (quantity > maxQuantity) {
1129                 if (errJson == null) {
1130                     errJson = new JsonObject();
1131                 }
1132                 errJson.addProperty("quantity", "数量不能大于 " + maxQuantity + " !");
1133                 json.add("error", errJson);
1134                 this.printJson(response, json.toString());
1135                 return;
1136             }
1137
1138
1139             CartEntity cart = new CartEntity();
1140             cart.setMatCode(matCode);
1141             cart.setCltCode(cltCode);
1142             cart.setCltName(cltName);
1143
1144             // 如果是客户登录了,则设置当前购物车的“主人” 为客户编号
1145             if ((cltCode != null && !"".equals(cltCode)) || (openId != null && !"".equals(openId))) {
1146                 cart.setUserCode("");
1147                 cart.setUserName("");
1148                 cart.setSessionId("");
1149             } else {
1150                 cart.setUserCode(userCode);
1151                 cart.setUserName(userName);
1152                 cart.setSessionId(sessionId);
1153             }
1154
1155             MatCodeEntity matCodeEntity = matCodeIfc.getMatCodeByPicture(matCode);
1156             cart.setPrice(matCodeEntity.getSalesPriceByPicture());
1157             cart.setQuantity(quantity);
1158
1159             cart.setRefreshPrice(true);
1160             cart.setOpenId(openId);
1161
1162             Integer cartId = cartIfc.saveCartByPicture(cart);
1163             if (cartId != null) {
1164                 //立即下单
1165                 String checkbox = (String) session.getAttribute(SettingKey.CHECKBOXBYPICTURE);
1166                 if (checkbox == null || "goshop".equals(action)) {
1167                     checkbox = ";" + cartId + ";";
1168                 } else if (checkbox.indexOf(cartId + ";") <= 0) {
1169                     checkbox += cartId + ";";
1170                 }
1171                 session.setAttribute(SettingKey.CHECKBOXBYPICTURE, checkbox);
1172             }
1173
1174             List<CartEntity> list = cartIfc.getCartsByPicture(cltCode); // 重新取一次数,确保购物车显示正确
22907b 1175             CurrencyEntity currencyEntity = new CurrencyEntity(request);
a25d9c 1176
F 1177             double totalQuantity = (list != null && list.size() > 0 ? list.get(0).getTotalQuantity() : 0);
1178             //double totalWeight = (list!=null&&list.size()>0?list.get(0).getTotalWeight():0);
1179
1180             double totalAmount = (list != null && list.size() > 0 ? list.get(0).getTotalAmount() : 0);
1181
1182
1183             JsonObject success = new JsonObject();
1184             success.addProperty("success", "成功添加商品 <a href=\"" + hostUrl + SettingKey.getMatCodeUrl(null, matCode, isMoblieBrowser)
1185                     + (wxQueryString == null || "".equals(wxQueryString) ? "" : "&" + wxQueryString) + "\">"
1186                     + (matCodeEntity == null ? "" : (settingEntity.isShowMatName() ? matCodeEntity.getMatName() : "商品")) + "</a>到您的 <a href=\"" + hostUrl
1187                     + "/shopping/" + (isMoblieBrowser ? "mobile/" : "") + "purchase/cart.jsp" + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString)
1188                     + "\">购物车</a>!");
1189             success.addProperty("toastmessage", "成功添加商品到您的 <a href=\"" + hostUrl + "/shopping/" + (isMoblieBrowser ? "mobile/" : "") + "purchase/cart.jsp"
1190                     + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString) + "\">购物车</a>!");
1191             success.addProperty("total", (list != null ? list.size() : 0) + "种商品(共" + (new Double(totalQuantity)).intValue()
1192                     + "件)"
1193                     + (settingEntity.isShowPrice() ? " - " + currencyEntity.getCurrencySign() + totalAmount : ""));
1194             success.addProperty("cart-num", (list != null ? list.size() : 0));
1195             //如果是立即购买
1196             if (action != null && "goshop".equals(action)) {
1197                 success.addProperty("redirect", hostUrl + "/shopping/" + (isMoblieBrowser ? "mobile/" : "") + "purchase/checkout.jsp" + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString));
1198             }
1199             this.printJson(response, success.toString());
1200             return;
1201         } catch (Exception e) {
1202             e.printStackTrace();
1203             errJson.addProperty("warning", e.getCause() != null ? e.getCause().getMessage() : e.getMessage());
1204             json.add("error", errJson);
1205             this.printJson(response, json.toString());
1206             return;
1207         } finally {
1208             SpObserver.setDBtoInstance();
1209         }
1210     }
1211
1212     /**
1213      * 获取购物车 json 数据格式(小程序需要用到)
1214      *
1215      * @param request
1216      * @param response
1217      */
1218     @RequestMapping(params = "m=getCartList")
1219     public void getCartList(HttpServletRequest request, HttpServletResponse response) {
1220         HttpSession session = request.getSession();
1221         //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID);
1222         String userCode = (session.getAttribute(SessionKey.USERCODE) == null ? ""
1223                 : (String) session.getAttribute(SessionKey.USERCODE));
1224         String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? ""
1225                 : (String) session.getAttribute(SessionKey.WEIXIN_OPENID));
1226         String sessionId = session.getId();
1227         String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? "" : (String) session.getAttribute(SettingKey.CLTCODE));
1228
1229         //String hostUrl = SettingKey.getHostUrl(request) ;
1230         //将微信corpid组装成url
1231         //String wxQueryString = SettingKey.getQueryStringByWx(request);
1232
1233         JsonObject json = new JsonObject();
1234         JsonObject errJson = new JsonObject();
1235         //JsonObject jsonObject = new JsonObject();
1236         //Gson gson = new Gson();
1237
1238
1239         SettingEntity settingEntity = null;
1240         CurrencyEntity currencyEntity = null;
1241         List<CartEntity> cartList = null;
1242         //boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request);
1243         //String checkboxs = (String)session.getAttribute(SettingKey.CHECKBOX);
1244         try {
1245             DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);
1246             SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());// 切换数据源
22907b 1247             settingEntity = settingIfc.getSettingEntity(request);
a25d9c 1248             //取网店 shopcccode
F 1249             ShopCcCodeEntity shopCcCodeEntity = ShopCcCode.getShopCcCode(settingEntity, request);
1250
22907b 1251             currencyEntity = new CurrencyEntity(request);
a25d9c 1252             cartList = cartIfc.getCartList(userCode, sessionId, openId, cltCode, shopCcCodeEntity.getShopCcCode());
F 1253
1254             /******** 购物车 开始清单输出 *************/
1255             DecimalFormat df = new DecimalFormat("0.00");
1256             double selectTotalAmount = 0;  //给 footer.jsp 页面使用,用于赋初值
1257             int selectItems = 0;    //给 footer.jsp 页面使用,用于赋初值
1258             int cartItems = 0; //给 footer.jsp 页面使用,用于赋初值
1259             if (cartList != null) {
1260                 cartItems = cartList.size();
1261             }
1159e1 1262             double maxPointsQuantity=0;
a25d9c 1263             //取已经选择的金额数
F 1264             List<CartEntity> selectedCartList = cartList.stream().filter((CartEntity c) -> c.isSelected()).collect(Collectors.toList());
1265             for (int i = 0; selectedCartList != null && i < selectedCartList.size(); i++) {
1266                 selectTotalAmount += selectedCartList.get(i).getAmount();
1159e1 1267                 maxPointsQuantity += selectedCartList.get(i).getExchangePointsQuantity() * selectedCartList.get(i).getQuantity();
a25d9c 1268                 selectItems++;
F 1269             }
1159e1 1270
a25d9c 1271
F 1272             //组装 json array 输出
1273             JsonArray cartListJsonArray = this.getCartJsonArray(request, settingEntity, cartList, currencyEntity, dataSourceEntity);
1274             json.add("list", cartListJsonArray);
1275
1159e1 1276             //用户总积分
X 1277             List<PointsEntity> pointsList = rewardIfc.getPoints(cltCode);
1278             json.addProperty("maxUserPoints", (pointsList.size() > 0 ? pointsList.get(0).getPoints() : 0));
1279             json.addProperty("maxPointsQuantity",maxPointsQuantity);//用户必须支付的总商品积分
a25d9c 1280             json.addProperty("SelectTotalAmount", df.format(selectTotalAmount));
F 1281             json.addProperty("SelectItems", selectItems);
1282             json.addProperty("CartItems", cartItems);
1283             /******** 购物车 结束清单输出 *************/
1284
1285
1286             //json.add("list", jsonObject);
1287             this.printJson(response, json.toString());
1288             return;
1289
1290         } catch (DataAccessException e) {
1291             e.printStackTrace();
1292             errJson.addProperty("warning", (e.getCause() != null ? e.getCause().getMessage() : e.getMessage()));
1293             json.add("error", errJson);
1294             this.printJson(response, json.toString());
1295             return;
1296         } catch (Exception e) {
1297             e.printStackTrace();
1298             errJson.addProperty("warning", (e.getCause() != null ? e.getCause().getMessage() : e.getMessage()));
1299             json.add("error", errJson);
1300             this.printJson(response, json.toString());
1301             return;
1302         } finally {
1303             SpObserver.setDBtoInstance();
1304         }
1305     }
1306
1307     private JsonArray getCartJsonArray(HttpServletRequest request, SettingEntity settingEntity, List<CartEntity> cartList, CurrencyEntity currencyEntity, DataSourceEntity dataSourceEntity) {
1308         JsonArray cartListJsonArray = new JsonArray();
1309         String hostUrl = SettingKey.getHostUrl(request);
22907b 1310         String hostUrlForImage = SettingKey.getHostUrlForImage(request);
a25d9c 1311         //将微信corpid组装成url
F 1312         String wxQueryString = SettingKey.getQueryStringByWx(request);
1313         boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request);
1314         for (int i = 0; cartList != null && i < cartList.size(); i++) {
1315             CartEntity cartEntity = cartList.get(i);
1316             //boolean isChecked = (SettingKey.isExistsCheckbox(checkboxs, cartEntity.getCartId()+"")?true:false) ;
1317             boolean isChecked = cartEntity.isSelected();
a6a76f 1318 //                if (isChecked) {
F 1319 //                    if (cartEntity.getAmount()!=null) {
1320 //                        selectTotalAmount += cartEntity.getAmount() ;
1321 //                }
1322 //                selectItems ++ ;
1323 //            }
a25d9c 1324             JsonObject cartEntityJsonObject = new JsonObject();
F 1325             if (settingEntity.getDefaultShopCcCode() != null && !"".equals(settingEntity.getDefaultShopCcCode())) {
1326                 cartEntityJsonObject.addProperty("ShopCcCode", cartEntity.getShopCcCode());
1327                 cartEntityJsonObject.addProperty("ShopCcName", cartEntity.getShopCcName());
1328             }
1329             cartEntityJsonObject.addProperty("CartId", cartEntity.getCartId());
1330             cartEntityJsonObject.addProperty("isChecked", isChecked);
1331             //最小起订数量
1332             cartEntityJsonObject.addProperty("Mininum", cartEntity.getMininum());
a6a76f 1333
a25d9c 1334             String url = hostUrl + SettingKey.getMatCodeUrl("", cartEntity.getMatCode(), isMoblieBrowser)
F 1335                     + (wxQueryString == null || "".equals(wxQueryString) ? "" : "&" + wxQueryString);
1336
1337             cartEntityJsonObject.addProperty("url", url);
1338             //主图片
22907b 1339             cartEntityJsonObject.addProperty("PhotoPath", SettingKey.getUrl(hostUrlForImage, cartEntity.getPhotoPathUrl(), dataSourceEntity.getDbId() + "", null));
J 1340             cartEntityJsonObject.addProperty("PhotoPathUrl", SettingKey.getUrl(hostUrlForImage, cartEntity.getPhotoPathUrl(), dataSourceEntity.getDbId() + "", null));
a25d9c 1341             //                    cartEntityJsonObject.addProperty("PhotoPath",
a6a76f 1342 //                      imgData.getImageUrl(cartEntity.getPhotoPath(), settingEntity.getImageProductWidth(),
F 1343 //                              settingEntity.getImageProductHeight(), settingEntity.isShowProductOrgImage(),
1344 //                              settingEntity.isFromCached(), request)
1345 //                              + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString));
a25d9c 1346
F 1347             if (settingEntity.isShowBrand()) {
1348                 cartEntityJsonObject.addProperty("Brand", cartEntity.getBrand());
1349             }
1350             if (settingEntity.isShowMatName()) {
1351                 cartEntityJsonObject.addProperty("MatName", cartEntity.getMatName());
1352             }
1353
1354             cartEntityJsonObject.addProperty("MatCode", cartEntity.getMatCode());
1355             cartEntityJsonObject.addProperty("isShowMatCode", settingEntity.isShowMatCode());
1356             cartEntityJsonObject.addProperty("isShowMatName", settingEntity.isShowMatName());
1357             cartEntityJsonObject.addProperty("isShowSpecial", settingEntity.isShowSpecial());
1358             cartEntityJsonObject.addProperty("isShowPrice", settingEntity.isShowPrice());
1359             cartEntityJsonObject.addProperty("ShopMatCode", cartEntity.getShopMatCode());
1360             cartEntityJsonObject.addProperty("isShowPoints", settingEntity.isShowPoints());
1361             cartEntityJsonObject.addProperty("isShowBrand", settingEntity.isShowBrand());
1362             cartEntityJsonObject.addProperty("StockDisplay", settingEntity.getStockDisplay());
1363
1364             if (settingEntity.isShowSpecial()) {
1365                 cartEntityJsonObject.addProperty("Special", cartEntity.getSpecial());
1366             }
1367             if (settingEntity.isStartupMatName2()) {
1368                 cartEntityJsonObject.addProperty("MatName2Label", settingEntity.getMatName2Label());
1369                 cartEntityJsonObject.addProperty("MatName2", cartEntity.getMatName2());
1370             }
1371
1372             if (settingEntity.isStartupMatName3()) {
1373                 cartEntityJsonObject.addProperty("MatName3Label", settingEntity.getMatName3Label());
1374                 cartEntityJsonObject.addProperty("MatName3", cartEntity.getMatName3());
1375             }
1376
1377             if (settingEntity.isStartupMatName4()) {
1378                 cartEntityJsonObject.addProperty("MatName4Label", settingEntity.getMatName4Label());
1379                 cartEntityJsonObject.addProperty("MatName4", cartEntity.getMatName4());
1380             }
1381
1382             if (cartEntity.getOptionJson() != null && !"".equals(cartEntity.getOptionJson())) {
1383                 //Map<String,Object> lists=gson.fromJson(cartEntity.getOptionJson(),new TypeToken<Map<String,Object>>(){}.getType());
1384                 cartEntityJsonObject.addProperty("OptionJson", cartEntity.getOptionJson()); //gson.toJson(settingEntity));
1385             }
1386
1387             if (settingEntity.isShowPrice() && cartEntity.getPrice() != null) {
1388                 cartEntityJsonObject.addProperty("Price", cartEntity.getPrice()); // 实际价格
1389                 cartEntityJsonObject.addProperty("Currency", currencyEntity.getCurrencySign());
1390                 cartEntityJsonObject.addProperty("CurrencySign", currencyEntity.getCurrencySign());
1391             }
1392
1393             cartEntityJsonObject.addProperty("Quantity", cartEntity.getQuantity());
1394
1159e1 1395             cartEntityJsonObject.addProperty("isAllowExchangePointsQuantity", cartEntity.getIsAllowExchangePointsQuantity());//积分商品类型
X 1396             cartEntityJsonObject.addProperty("exchangePointsQuantity", cartEntity.getExchangePointsQuantity());//商品积分
1397
a25d9c 1398             cartEntityJsonObject.addProperty("skuId1", cartEntity.getSkuId1());
F 1399             cartEntityJsonObject.addProperty("skuName1", cartEntity.getSkuName1());
1400             cartEntityJsonObject.addProperty("skuId2", cartEntity.getSkuId2());
1401             cartEntityJsonObject.addProperty("skuName2", cartEntity.getSkuName2());
1402             cartEntityJsonObject.addProperty("skuId3", cartEntity.getSkuId3());
1403             cartEntityJsonObject.addProperty("skuName3", cartEntity.getSkuName3());
1404             cartEntityJsonObject.addProperty("skuId4", cartEntity.getSkuId4());
1405             cartEntityJsonObject.addProperty("skuName4", cartEntity.getSkuName4());
1406             cartEntityJsonObject.addProperty("skuId5", cartEntity.getSkuId5());
1407             cartEntityJsonObject.addProperty("skuName5", cartEntity.getSkuName5());
1408             cartEntityJsonObject.addProperty("skuId6", cartEntity.getSkuId6());
1409             cartEntityJsonObject.addProperty("skuName6", cartEntity.getSkuName6());
1410             cartEntityJsonObject.addProperty("skuId7", cartEntity.getSkuId7());
1411             cartEntityJsonObject.addProperty("skuName7", cartEntity.getSkuName7());
1412             cartEntityJsonObject.addProperty("skuId8", cartEntity.getSkuId8());
1413             cartEntityJsonObject.addProperty("skuName8", cartEntity.getSkuName8());
1414             cartEntityJsonObject.addProperty("skuId9", cartEntity.getSkuId9());
1415             cartEntityJsonObject.addProperty("skuName9", cartEntity.getSkuName9());
1416             cartEntityJsonObject.addProperty("skuId10", cartEntity.getSkuId10());
1417             cartEntityJsonObject.addProperty("skuName10", cartEntity.getSkuName10());
1418
419647 1419             //是否限量销售
J 1420             cartEntityJsonObject.addProperty("isRestrictQuantity", cartEntity.getIsRestrictQuantity());
1421             //销售数量限量 或 可用库存限量
1422             cartEntityJsonObject.addProperty("RestrictQuantity", cartEntity.getRestrictQuantity());
a25d9c 1423             cartListJsonArray.add(cartEntityJsonObject);
F 1424         }
1425         return cartListJsonArray;
1426     }
1427
1428     /**
1429      * 再次购买
1430      *
1431      * @param request
1432      * @param response
1433      */
1434     @RequestMapping(params = "m=readd") // 从订单明细行再次生成购物车记录(再次购买)
1435     public void readd(HttpServletRequest request, HttpServletResponse response) {
1436
1437         String hostUrl = SettingKey.getHostUrl(request);
1438         // 将微信corpid组装成url
1439         String wxQueryString = SettingKey.getQueryStringByWx(request);
1440
1441         HttpSession session = request.getSession();
1442         //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID);
1443
1444         String sessionId = session.getId();
1445         String userCode = (session.getAttribute(SessionKey.USERCODE) == null ? ""
1446                 : (String) session.getAttribute(SessionKey.USERCODE));
1447         String userName = (session.getAttribute(SessionKey.USERNAME) == null ? ""
1448                 : (String) session.getAttribute(SessionKey.USERNAME));
1449         String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? ""
1450                 : (String) session.getAttribute(SettingKey.CLTCODE));
1451         String cltName = (session.getAttribute(SettingKey.CLTNAME) == null ? ""
1452                 : (String) session.getAttribute(SettingKey.CLTNAME));
1453         String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? ""
1454                 : (String) session.getAttribute(SessionKey.WEIXIN_OPENID));
1455
1456         String docCode = (request.getParameter(SettingKey.DOCCODE) == null ? ""
1457                 : request.getParameter(SettingKey.DOCCODE));
1458         String rowId = (request.getParameter(SettingKey.ROWID) == null ? "" : request.getParameter(SettingKey.ROWID));
1459         boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request);
1460
1461         if (docCode == null || rowId == null) {
1462             SettingKey.setCartHintMsg(session, "错误的引用,订单行不存在,请重新选择!");
1463             this.print(response, SettingKey.getRedirectUrl(hostUrl + "/shopping/" + (isMoblieBrowser ? "mobile/" : "") + "account/order.jsp"
1464                     + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString)));
1465             return;
1466         }
1467         OrderDetailEntity orderDetailEntity = null;
1468         SettingEntity settingEntity = null;
1469         try {
1470             DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);
1471             SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());// 切换数据源
22907b 1472             settingEntity = settingIfc.getSettingEntity(request);
J 1473             ShopCcCodeEntity shopCcCodeEntity = ShopCcCode.getShopCcCode(settingEntity, request);
a25d9c 1474             orderDetailEntity = orderIfc.getOrderDetailEntity(docCode, rowId);
F 1475             if (orderDetailEntity == null) {
1476                 SettingKey.setCartHintMsg(session, "订单行不存在,请重新选择!");
1477                 this.print(response,
1478                         SettingKey.getRedirectUrl(hostUrl + "/shopping/" + (isMoblieBrowser ? "mobile/" : "") + "account/orderdetail.jsp?" + SettingKey.DOCCODE
1479                                 + "=" + docCode + (wxQueryString == null || "".equals(wxQueryString) ? "" : "&" + wxQueryString)));
1480                 return;
1481             }
1482
1483             // save
1484             CartEntity cart = new CartEntity();
1485             cart.setMatCode(orderDetailEntity.getMatCode());
1486             cart.setCltCode(cltCode);
1487             cart.setCltName(cltName);
1488
1489             // 如果是客户登录了,则设置当前购物车的“主人” 为客户编号
1490             if ((cltCode != null && !"".equals(cltCode)) || (openId != null && !"".equals(openId))) {
1491                 cart.setUserCode("");
1492                 cart.setUserName("");
1493                 cart.setSessionId("");
1494             } else {
1495                 cart.setUserCode(userCode);
1496                 cart.setUserName(userName);
1497                 cart.setSessionId(sessionId);
1498             }
1499
1500             cart.setRecurringId(null);
1501             cart.setOptionJson(orderDetailEntity.getOptionJson());
1502             cart.setQuantity(orderDetailEntity.getDigit());
1503             cart.setOpenId(openId);
1504
1505             String optionText = "";
1506             if (orderDetailEntity.getOptionJson() != null) {
1507                 optionText = getOptionText(orderDetailEntity.getOptionJson());
1508             }
22907b 1509             
a25d9c 1510
F 1511             cart.setOptionText(optionText);
1512             String skuId1 = request.getParameter("skuId1");
1513             String skuId2 = request.getParameter("skuId2");
1514             String skuId3 = request.getParameter("skuId3");
1515             String skuId4 = request.getParameter("skuId4");
1516             String skuId5 = request.getParameter("skuId5");
1517             String skuId6 = request.getParameter("skuId6");
1518             String skuId7 = request.getParameter("skuId7");
1519             String skuId8 = request.getParameter("skuId8");
1520             String skuId9 = request.getParameter("skuId9");
1521             String skuId10 = request.getParameter("skuId10");
1522             cart.setSkuId1(skuId1 == null || "".equals(skuId1) ? null : Integer.parseInt(skuId1))
1523                     .setSkuId2(skuId2 == null || "".equals(skuId2) ? null : Integer.parseInt(skuId2))
1524                     .setSkuId3(skuId3 == null || "".equals(skuId3) ? null : Integer.parseInt(skuId3))
1525                     .setSkuId4(skuId4 == null || "".equals(skuId4) ? null : Integer.parseInt(skuId4))
1526                     .setSkuId5(skuId5 == null || "".equals(skuId5) ? null : Integer.parseInt(skuId5))
1527                     .setSkuId6(skuId6 == null || "".equals(skuId6) ? null : Integer.parseInt(skuId6))
1528                     .setSkuId7(skuId7 == null || "".equals(skuId7) ? null : Integer.parseInt(skuId7))
1529                     .setSkuId8(skuId8 == null || "".equals(skuId8) ? null : Integer.parseInt(skuId8))
1530                     .setSkuId9(skuId9 == null || "".equals(skuId9) ? null : Integer.parseInt(skuId9))
1531                     .setSkuId10(skuId10 == null || "".equals(skuId10) ? null : Integer.parseInt(skuId10));
22907b 1532             
J 1533             cart.setShopCcCode(shopCcCodeEntity.getShopCcCode());
1534             CartEntity cartEntity = cartIfc.addToCartAndReturnCartEntity(cart);
1535             
1536 //            if (cart.isRefreshPrice()) {
1537 //                //刷新购物车中的价格、积分和重量
1538 //                cartIfc.refrshCart(cartId, cart.getCltCode());
1539 //            }
1540             session.setAttribute(SettingKey.CHECKBOX, cartEntity.getCurrentCartId() + "");   //将选择的购物车保存到会话中,供页面选择需要
a25d9c 1541             String cartHint = "成功添加商品 <a href=\"" + hostUrl
F 1542                     + SettingKey.getMatCodeUrl(null, orderDetailEntity.getMatCode(), isMoblieBrowser)
1543                     + (wxQueryString == null || "".equals(wxQueryString) ? "" : "&" + wxQueryString) + "\">"
1544                     + (orderDetailEntity.getMatName() == null ? "" : (settingEntity.isShowMatName() ? orderDetailEntity.getMatName() : "商品"))
1545                     + "</a>到您的 <a href=\"" + hostUrl + "/shopping/" + (isMoblieBrowser ? "mobile/" : "") + "cart/"
1546                     + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString) + "\">购物车</a>!";
1547             SettingKey.setCartHintMsg(session, cartHint);
1548         } catch (DataAccessException e) {
1549             e.printStackTrace();
1550             String cartHint = "添加商品失败,失败原因:" + e.getCause().getMessage() + ",查看原商品信息请点击 <a href=\"" + hostUrl
1551                     + SettingKey.getMatCodeUrl(null, orderDetailEntity.getMatCode(), isMoblieBrowser)
1552                     + (wxQueryString == null || "".equals(wxQueryString) ? "" : "&" + wxQueryString) + "\">"
1553                     + (orderDetailEntity.getMatName() == null ? "" : (settingEntity.isShowMatName() ? orderDetailEntity.getMatName() : "商品"))
1554                     + "</a>到您的 <a href=\"" + hostUrl + "/shopping/" + (isMoblieBrowser ? "mobile/" : "") + "cart/"
1555                     + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString) + "\">购物车</a>!";
1556             SettingKey.setCartHintMsg(session, cartHint);
1557         } catch (Exception e) {
1558             e.printStackTrace();
1559             String cartHint = "添加商品失败,失败原因:" + e.getCause().getMessage() + ",查看原商品信息请点击 <a href=\"" + hostUrl
1560                     + SettingKey.getMatCodeUrl(null, orderDetailEntity.getMatCode(), isMoblieBrowser)
1561                     + (wxQueryString == null || "".equals(wxQueryString) ? "" : "&" + wxQueryString) + "\">"
1562                     + (orderDetailEntity.getMatName() == null ? "" : (settingEntity.isShowMatName() ? orderDetailEntity.getMatName() : "商品"))
1563                     + "</a>到您的 <a href=\"" + hostUrl + "/shopping/" + (isMoblieBrowser ? "mobile/" : "") + "cart/"
1564                     + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString) + "\">购物车</a>!";
1565             SettingKey.setCartHintMsg(session, cartHint);
1566         } finally {
1567             SpObserver.setDBtoInstance();
1568         }
1569         this.print(response,
1570                 SettingKey.getRedirectUrl(hostUrl + "/shopping/" + (isMoblieBrowser ? "mobile/" : "") + "cart/index.jsp"
1571                         + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString)));
1572         return;
1573     }
a6a76f 1574
a25d9c 1575     public String getOptionText(String optionStr) {
F 1576         String ret = "";
1577         Map<String, Object> lists = null;
1578         if (optionStr != null && !"".equals(optionStr)) {
1579             lists = gson.fromJson(optionStr, new TypeToken<Map<String, Object>>() {
1580             }.getType());
1581             for (Entry<String, Object> entry : lists.entrySet()) {
1582                 ret += cartIfc.getOptionStr(Integer.parseInt(entry.getKey()), (String) entry.getValue()) + "\n";
1583             }
1584         }
1585         return ret;
1586     }
a6a76f 1587
a25d9c 1588     // 检查必录选项
F 1589     // {"error":{"option":{"228":"aa \u8981\u6c42\uff01","218":"Radio
1590     // \u8981\u6c42\uff01","223":"Checkbox \u8981\u6c42\uff01","217":"Select
1591     // \u8981\u6c42\uff01","209":"Textarea \u8981\u6c42\uff01","222":"File
1592     // \u8981\u6c42\uff01"}},"redirect":"http:\/\/localhost\/index.php?route=product\/product&product_id=42"}
1593     public JsonObject checkRequired(Map<String, String[]> params, String matCode, String hostUrl,
1594                                     String wxQueryString, boolean isMoblieBrowser) {
1595         List<OptionEntity> list = matOptionIfc.getOptionEntityRequired(matCode);
a9db41 1596         JsonObject json = new JsonObject();
J 1597         JsonObject msgJson = new JsonObject();
a25d9c 1598         boolean found = false;
a6a76f 1599
a25d9c 1600         for (int k = 0; list != null && k < list.size(); k++) {
F 1601             found = false;
1602             OptionEntity optionEntity = list.get(k);
1603             for (String key : params.keySet()) {
1604                 if (!key.startsWith("option")) {
1605                     continue;
1606                 }
1607                 String optionId = key.substring(key.indexOf("[") + 1, key.indexOf("]"));
1608                 if (optionId != null && !optionId.equals(optionEntity.getOptionId().toString())) {
1609                     continue;
1610                 }
a6a76f 1611
a25d9c 1612                 String[] values = params.get(key);
F 1613                 for (int i = 0; i < values.length; i++) {
1614                     if (values[i] != null && !"".equals(values[i])) {
1615                         found = true;
1616                         break;
1617                     }
1618                 }
1619                 if (found)
1620                     break;
1621             }
a6a76f 1622
a25d9c 1623             // 没有找到,则提示必录
F 1624             if (!found) {
1625                 String hintMsg = optionEntity.getOptionName() + "  要求!";
1626                 if (msgJson == null) {
1627                     msgJson = new JsonObject();
1628                 }
1629                 msgJson.addProperty(optionEntity.getOptionId().toString(), hintMsg);
1630             }
1631         }
a9db41 1632         
a25d9c 1633         if (msgJson != null) {
a9db41 1634             
a25d9c 1635             JsonObject optionJson = new JsonObject();
F 1636             optionJson.add("option", msgJson);
1637             json.add("error", optionJson);
1638             json.addProperty("redirect", hostUrl + SettingKey.getMatCodeUrl(null, matCode, isMoblieBrowser)
1639                     + (wxQueryString == null || "".equals(wxQueryString) ? "" : "&" + wxQueryString));
a9db41 1640            
J 1641         } 
1642         return json;
a25d9c 1643     }
a6a76f 1644
a25d9c 1645     @RequestMapping(params = "m=info")
F 1646     public void info(HttpServletRequest request, HttpServletResponse response) {
1647         response.setContentType("text/html;charset=utf-8");
1648         response.setStatus(HttpServletResponse.SC_OK);
1649         HttpSession session = request.getSession();
1650         String sessionId = session.getId();
1651         //String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID);
a6a76f 1652
a25d9c 1653         String userCode = (session.getAttribute(SessionKey.USERCODE) == null ? ""
F 1654                 : (String) session.getAttribute(SessionKey.USERCODE));
1655         String openId = (session.getAttribute(SessionKey.WEIXIN_OPENID) == null ? ""
1656                 : (String) session.getAttribute(SessionKey.WEIXIN_OPENID));
1657         String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? ""
1658                 : (String) session.getAttribute(SettingKey.CLTCODE));
1659         // String cltName = (session.getAttribute(SettingKey.CLTNAME) ==
1660         // null?"": (String)session.getAttribute(SettingKey.CLTNAME)) ;
1661         JsonObject json = new JsonObject();
1662         JsonObject errJson = new JsonObject();
a6a76f 1663
a25d9c 1664         String hostUrl = SettingKey.getHostUrl(request);
F 1665         // 将微信corpid组装成url
1666         String wxQueryString = SettingKey.getQueryStringByWx(request);
a6a76f 1667
a25d9c 1668         // 预优配送费用
F 1669         Integer freeId = session.getAttribute(SettingKey.FREEID) == null ? null
1670                 : (Integer) session.getAttribute(SettingKey.FREEID);
1671         String freeName = session.getAttribute(SettingKey.FREENAME) == null ? ""
1672                 : (String) session.getAttribute(SettingKey.FREENAME);
1673         double freeCost = 0;
1674         if (freeId != null) {
1675             freeCost = (Double) session.getAttribute(SettingKey.FREECOST);
1676         }
1677         // 优惠劵
1678         String couponCode = session.getAttribute(SettingKey.COUPONCODE) == null ? null
1679                 : (String) session.getAttribute(SettingKey.COUPONCODE);
1680         String couponName = session.getAttribute(SettingKey.COUPONNAME) == null ? ""
1681                 : (String) session.getAttribute(SettingKey.COUPONNAME);
1682         double couponCost = 0;
1683         if (couponCode != null) {
1684             couponCost = (Double) session.getAttribute(SettingKey.COUPONCOST);
1685         }
1686         // 礼品劵
1687         String voucherCode = session.getAttribute(SettingKey.VOUCHERCODE) == null ? null
1688                 : (String) session.getAttribute(SettingKey.VOUCHERCODE);
1689         double voucherCost = 0;
1690         if (voucherCode != null) {
1691             voucherCost = (Double) session.getAttribute(SettingKey.VOUCHERCOST);
1692         }
1693         String ret = null;
1694         try {
1695             DataSourceEntity dataSourceEntity = MultiDataSource.getDataSourceMap(request);
1696             SpObserver.setDBtoInstance("_" + dataSourceEntity.getDbId());// 切换数据源
22907b 1697             SettingEntity settingEntity = settingIfc.getSettingEntity(request);
a25d9c 1698             //取网店 shopcccode
F 1699             ShopCcCodeEntity shopCcCodeEntity = ShopCcCode.getShopCcCode(settingEntity, request);
a6a76f 1700
a25d9c 1701             ret = cartIfc.getCartsHtml(userCode, sessionId, openId, cltCode, hostUrl, freeId, freeCost, freeName,
F 1702                     couponCode, couponCost, couponName, voucherCode, voucherCost, wxQueryString, shopCcCodeEntity.getShopCcCode(), request);
1703         } catch (Exception e) {
1704             e.printStackTrace();
1705             errJson.addProperty("warning", e.getCause() != null ? e.getCause().getMessage() : e.getMessage());
1706             json.add("error", errJson);
1707             this.printJson(response, json.toString());
1708             return;
1709         } finally {
1710             SpObserver.setDBtoInstance();
1711         }
a6a76f 1712
a25d9c 1713         this.print(response, ret);
a6a76f 1714
a25d9c 1715         return;
F 1716     }
a6a76f 1717
F 1718 }