PLF 5 år sedan
förälder
incheckning
b5946768e1

+ 9 - 6
src/main/java/com/caimei/controller/products/DetailsController.java

@@ -4,6 +4,7 @@ import com.caimei.entity.CmMallCart;
 import com.caimei.entity.CmOrganizeProducts;
 import com.caimei.entity.WxJsonModel;
 import com.caimei.service.products.DetailsService;
+import com.caimei.service.user.LoginService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -18,6 +19,8 @@ import org.springframework.web.bind.annotation.ResponseBody;
 public class DetailsController {
     @Autowired
     private DetailsService detailsService;
+    @Autowired
+    private LoginService loginService;
 
     /**
      * 商品详情页
@@ -41,11 +44,11 @@ public class DetailsController {
     public WxJsonModel addCart(@RequestBody CmMallCart cmMallCart) {
         WxJsonModel model = WxJsonModel.newInstance();
         if (cmMallCart == null) return model.error("参数异常");
-        try {
-            detailsService.saveCart(cmMallCart);
-        } catch (Exception e) {
-            return model.error("添加失败");
-        }
-        return model.success("加入购物车成功", "");
+        /*HttpSession session = SessionHelper.getSession();
+        String openid = (String) session.getAttribute("openid");
+        CmOperationUser operationUser = loginService.doLogin(openid, cmMallCart.getOrganizeID());
+        if (operationUser == null) return model.error("账户异常");*/
+        Integer count = detailsService.saveCart(cmMallCart);
+        return model.success("加入购物车成功", count);
     }
 }

+ 55 - 0
src/main/java/com/caimei/controller/products/ShoppingController.java

@@ -0,0 +1,55 @@
+package com.caimei.controller.products;
+
+import com.caimei.entity.CmMallCart;
+import com.caimei.entity.WxJsonModel;
+import com.caimei.service.products.ShoppingService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.Map;
+
+/**
+ * 购物车页面
+ */
+@Controller
+@RequestMapping("/shopping")
+public class ShoppingController {
+    @Autowired
+    private ShoppingService shoppingService;
+
+    /**
+     * 购物页数据
+     */
+    @ResponseBody
+    @RequestMapping("/cart")
+    public WxJsonModel cart(Integer userID, Integer organizeID, Integer index, Integer pageSize) {
+        WxJsonModel model = WxJsonModel.newInstance();
+        if (index == null) index = 1;
+        if (pageSize == null) pageSize = 10;
+        Map<String, Object> map = shoppingService.findAllCart(userID, index, pageSize);
+        return model.success(map);
+    }
+
+    /**
+     * 更新商品数量
+     */
+    @RequestMapping("/update")
+    public void updateNumber(CmMallCart cmMallCart) {
+        shoppingService.updateNumber(cmMallCart);
+    }
+
+    /**
+     * 删除购物车商品
+     *
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping("/delete")
+    public WxJsonModel deleteCart(CmMallCart cmMallCart) {
+        WxJsonModel model = WxJsonModel.newInstance();
+        shoppingService.deleteCart(cmMallCart);
+        return model.success("删除成功", "");
+    }
+}

+ 6 - 4
src/main/java/com/caimei/controller/user/LoginController.java

@@ -106,6 +106,8 @@ public class LoginController {
             return model;
         }
         String openid = (String) model.getData();
+        HttpSession session = SessionHelper.getSession();
+        session.setAttribute("openid", openid);
         CmOperationUser operationUser = loginService.doLogin(openid, userOrganizeID);
         if (operationUser == null) {
             String mobile = loginService.cellPhone(userOrganizeID);
@@ -178,17 +180,17 @@ public class LoginController {
 
     @RequestMapping("/testSession")
     @ResponseBody
-    public WxJsonModel testSession(){
+    public WxJsonModel testSession() {
         HttpSession session = SessionHelper.getSession();
-        session.setAttribute("testSession","测试传入session");
+        session.setAttribute("testSession","testSessiontestSessiontestSessiontestSession");
         return new WxJsonModel();
     }
 
     @RequestMapping("/getSession")
     @ResponseBody
-    public WxJsonModel getSession(){
+    public WxJsonModel getSession() {
         HttpSession session = SessionHelper.getSession();
-        String getSession = (String)session.getAttribute("testSession");
+        String getSession = (String) session.getAttribute("testSession");
         return new WxJsonModel();
     }
 

+ 9 - 0
src/main/java/com/caimei/entity/CmMallCart.java

@@ -10,6 +10,7 @@ public class CmMallCart implements Serializable {
     private Integer productCount;   //商品数量
     private Date addTime;       //添加时间
     private String delFlag;        //是否有效状态 0 有效 其它无效
+    private Integer organizeID;   //组织id
 
     public Integer getId() {
         return id;
@@ -58,4 +59,12 @@ public class CmMallCart implements Serializable {
     public void setDelFlag(String delFlag) {
         this.delFlag = delFlag;
     }
+
+    public Integer getOrganizeID() {
+        return organizeID;
+    }
+
+    public void setOrganizeID(Integer organizeID) {
+        this.organizeID = organizeID;
+    }
 }

+ 19 - 1
src/main/java/com/caimei/entity/CmOrganizeProducts.java

@@ -23,11 +23,13 @@ public class CmOrganizeProducts implements Serializable {
     private String mainImage;   //主图
     private String name;        //名称
     private String unit;        //包装规格
-    private Integer cartCount;   //购物车数量
+    private Integer productCount;  //商品数量
+    private Integer cartCount;   //购物车总数量
     private Product product;    //采美商品表
     private List<ProductImage> ProductImage;  //商品图片
     private ProductDetailInfo productDetailInfo; //商品详情
     private Shop shop;      //供应商信息
+    private Boolean productsChecked = false;  //商品勾选状态
 
     public Integer getId() {
         return id;
@@ -220,4 +222,20 @@ public class CmOrganizeProducts implements Serializable {
     public void setCartCount(Integer cartCount) {
         this.cartCount = cartCount;
     }
+
+    public Integer getProductCount() {
+        return productCount;
+    }
+
+    public void setProductCount(Integer productCount) {
+        this.productCount = productCount;
+    }
+
+    public Boolean getProductsChecked() {
+        return productsChecked;
+    }
+
+    public void setProductsChecked(Boolean productsChecked) {
+        this.productsChecked = productsChecked;
+    }
 }

+ 37 - 0
src/main/java/com/caimei/entity/Shop.java

@@ -1,6 +1,7 @@
 package com.caimei.entity;
 
 import java.io.Serializable;
+import java.util.List;
 
 public class Shop implements Serializable {
     private Integer shopID; //
@@ -82,6 +83,10 @@ public class Shop implements Serializable {
     private String medicalPracticeLicenseImg1;
     private String medicalPracticeLicenseImg2;
     private String medicalPracticeLicenseImg3;
+    private Double totalPrice;
+    private List<CmOrganizeProducts> productsList;  //商品集合
+    private Boolean checked = false; //勾选状态
+    private Integer checkedCount = 1;  //商铺下商品选中数量
 
     public Integer getShopID() {
         return shopID;
@@ -714,4 +719,36 @@ public class Shop implements Serializable {
     public void setMedicalPracticeLicenseImg3(String medicalPracticeLicenseImg3) {
         this.medicalPracticeLicenseImg3 = medicalPracticeLicenseImg3;
     }
+
+    public List<CmOrganizeProducts> getProductsList() {
+        return productsList;
+    }
+
+    public void setProductsList(List<CmOrganizeProducts> productsList) {
+        this.productsList = productsList;
+    }
+
+    public Double getTotalPrice() {
+        return totalPrice;
+    }
+
+    public void setTotalPrice(Double totalPrice) {
+        this.totalPrice = totalPrice;
+    }
+
+    public Boolean getChecked() {
+        return checked;
+    }
+
+    public void setChecked(Boolean checked) {
+        this.checked = checked;
+    }
+
+    public Integer getCheckedCount() {
+        return checkedCount;
+    }
+
+    public void setCheckedCount(Integer checkedCount) {
+        this.checkedCount = checkedCount;
+    }
 }

+ 2 - 0
src/main/java/com/caimei/mapper/products/DetailsMapper.java

@@ -20,4 +20,6 @@ public interface DetailsMapper {
     void saveCart(CmMallCart cmMallCart);
 
     CmMallCart findCartProduct(CmMallCart cmMallCart);
+
+    void updateCart(CmMallCart cart);
 }

+ 20 - 0
src/main/java/com/caimei/mapper/products/ShoppingMapper.java

@@ -0,0 +1,20 @@
+package com.caimei.mapper.products;
+
+import com.caimei.entity.CmMallCart;
+import com.caimei.entity.CmOrganizeProducts;
+import com.caimei.entity.Shop;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface ShoppingMapper {
+
+    List<Shop> findAllShop(Integer userID);
+
+    List<CmOrganizeProducts> findAllProducts(Integer shopID);
+
+    void updateNumber(CmMallCart cmMallCart);
+
+    void deleteCart(CmMallCart cmMallCart);
+}

+ 1 - 1
src/main/java/com/caimei/service/products/DetailsService.java

@@ -6,5 +6,5 @@ import com.caimei.entity.CmOrganizeProducts;
 public interface DetailsService {
     CmOrganizeProducts productDetails(Integer id, Integer userID);
 
-    void saveCart(CmMallCart cmMallCart);
+    Integer saveCart(CmMallCart cmMallCart);
 }

+ 13 - 0
src/main/java/com/caimei/service/products/ShoppingService.java

@@ -0,0 +1,13 @@
+package com.caimei.service.products;
+
+import com.caimei.entity.CmMallCart;
+
+import java.util.Map;
+
+public interface ShoppingService {
+    Map<String, Object> findAllCart(Integer userID, Integer index, Integer pageSize);
+
+    void updateNumber(CmMallCart cmMallCart);
+
+    void deleteCart(CmMallCart cmMallCart);
+}

+ 18 - 2
src/main/java/com/caimei/service/products/impl/DetailsServiceImpl.java

@@ -4,7 +4,9 @@ import com.caimei.entity.*;
 import com.caimei.mapper.products.DetailsMapper;
 import com.caimei.mapper.products.HomePageMapper;
 import com.caimei.service.products.DetailsService;
+import com.caimei.utils.AppUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
@@ -16,6 +18,8 @@ public class DetailsServiceImpl implements DetailsService {
     private DetailsMapper detailsMapper;
     @Autowired
     private HomePageMapper homePageMapper;
+    @Value("${miniprogram.domain}")
+    private String domain;
 
     @Override
     public CmOrganizeProducts productDetails(Integer id, Integer userID) {
@@ -26,9 +30,15 @@ public class DetailsServiceImpl implements DetailsService {
             String[] split = product.getTags().split(",");
             product.setTagsList(split);
         }
+        product.setMainImage(AppUtils.getImageURL("product", product.getMainImage(), 0, domain));
+        if (product.getStock() == null || product.getStock() == 0) product.setStock(99);
         organizeProducts.setProduct(product);
         //商品图片
         List<ProductImage> productImage = detailsMapper.findAllProductImage(organizeProducts.getProductID());
+        for (ProductImage image : productImage) {
+            String imageURL = AppUtils.getImageURL("product", image.getImage(), 0, domain);
+            image.setImage(imageURL);
+        }
         organizeProducts.setProductImage(productImage);
         //商品详情
         ProductDetailInfo productDetailInfo = detailsMapper.findProductDetail(organizeProducts.getProductID());
@@ -39,25 +49,31 @@ public class DetailsServiceImpl implements DetailsService {
             String[] businessScopeArray = shop.getBusinessScope().split("/");
             shop.setBusinessScopeArray(businessScopeArray);
         }
+        shop.setLogo(AppUtils.getImageURL("shopLogo", shop.getLogo(), 0, domain));
+        shop.setBusinessLicenseImage(AppUtils.getImageURL("shopLogo", shop.getBusinessLicenseImage(), 0, domain));
         organizeProducts.setShop(shop);
         //购物车数量
         Integer count = homePageMapper.cartQuantity(userID);
+        if (count == null) count = 0;
         organizeProducts.setCartCount(count);
         return organizeProducts;
     }
 
     @Override
-    public void saveCart(CmMallCart cmMallCart) {
+    public Integer saveCart(CmMallCart cmMallCart) {
         CmMallCart cart = detailsMapper.findCartProduct(cmMallCart);
         if (cart != null) {
             int count = cart.getProductCount() + cmMallCart.getProductCount();
             cart.setProductCount(count);
             cart.setAddTime(new Date());
-            detailsMapper.saveCart(cart);
+            detailsMapper.updateCart(cart);
         } else {
             cmMallCart.setAddTime(new Date());
             cmMallCart.setDelFlag("0");
             detailsMapper.saveCart(cmMallCart);
         }
+        Integer cartQuantity = homePageMapper.cartQuantity(cmMallCart.getUserID());
+        if (cartQuantity == null) cartQuantity = 0;
+        return cartQuantity;
     }
 }

+ 17 - 2
src/main/java/com/caimei/service/products/impl/HomePageServiceImpl.java

@@ -3,7 +3,9 @@ package com.caimei.service.products.impl;
 import com.caimei.entity.*;
 import com.caimei.mapper.products.HomePageMapper;
 import com.caimei.service.products.HomePageService;
+import com.caimei.utils.AppUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.util.HashMap;
@@ -14,6 +16,8 @@ import java.util.Map;
 public class HomePageServiceImpl implements HomePageService {
     @Autowired
     private HomePageMapper homePageMapper;
+    @Value("${miniprogram.domain}")
+    private String domain;
 
     @Override
     public Map<String, Object> information(Integer organizeID, Integer userID) {
@@ -22,6 +26,9 @@ public class HomePageServiceImpl implements HomePageService {
         List<CmProductsClassify> productsClassify = homePageMapper.findClassify(organizeID);
         //常用商品
         List<CmOrganizeProducts> organizeProducts = homePageMapper.findProducts(organizeID);
+        for (CmOrganizeProducts product : organizeProducts) {
+            product.setMainImage(AppUtils.getImageURL("product", product.getMainImage(), 0, domain));
+        }
         //购物车数量
         Integer count = homePageMapper.cartQuantity(userID);
         map.put("productsClassify", productsClassify);
@@ -32,12 +39,20 @@ public class HomePageServiceImpl implements HomePageService {
 
     @Override
     public List<CmOrganizeProducts> classify(CmOrganizeProducts organizeProducts) {
-        return homePageMapper.classify(organizeProducts);
+        List<CmOrganizeProducts> classify = homePageMapper.classify(organizeProducts);
+        for (CmOrganizeProducts products : classify) {
+            products.setMainImage(AppUtils.getImageURL("product", products.getMainImage(), 0, domain));
+        }
+        return classify;
     }
 
     @Override
     public List<CmOrganizeProducts> preferred(CmOrganizeProducts organizeProducts) {
-        return homePageMapper.preferred(organizeProducts);
+        List<CmOrganizeProducts> preferred = homePageMapper.preferred(organizeProducts);
+        for (CmOrganizeProducts products : preferred) {
+            products.setMainImage(AppUtils.getImageURL("product", products.getMainImage(), 0, domain));
+        }
+        return preferred;
     }
 
     @Override

+ 63 - 0
src/main/java/com/caimei/service/products/impl/ShoppingServiceImpl.java

@@ -0,0 +1,63 @@
+package com.caimei.service.products.impl;
+
+import com.caimei.entity.CmMallCart;
+import com.caimei.entity.CmOrganizeProducts;
+import com.caimei.entity.Page;
+import com.caimei.entity.Shop;
+import com.caimei.mapper.products.HomePageMapper;
+import com.caimei.mapper.products.ShoppingMapper;
+import com.caimei.service.products.ShoppingService;
+import com.caimei.utils.AppUtils;
+import com.github.pagehelper.PageHelper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class ShoppingServiceImpl implements ShoppingService {
+    @Autowired
+    private ShoppingMapper shoppingMapper;
+    @Autowired
+    private HomePageMapper homePageMapper;
+    @Value("${miniprogram.domain}")
+    private String domain;
+
+    @Override
+    public Map<String, Object> findAllCart(Integer userID, Integer index, Integer pageSize) {
+        Map<String, Object> map = new HashMap();
+        PageHelper.startPage(index, pageSize);
+        List<Shop> shopList = shoppingMapper.findAllShop(userID);
+        if (shopList != null && shopList.size() > 0) {
+            for (Shop shop : shopList) {
+                List<CmOrganizeProducts> productsList = shoppingMapper.findAllProducts(shop.getShopID());
+                shop.setProductsList(productsList);
+                Double totalPrice = 0d;
+                for (CmOrganizeProducts products : productsList) {
+                    products.setMainImage(AppUtils.getImageURL("product", products.getMainImage(), 0, domain));
+                    totalPrice += (products.getRetailPrice() * products.getProductCount());
+                }
+                shop.setTotalPrice(totalPrice);
+            }
+        }
+        Page<Shop> page = new Page<>(shopList);
+        Integer cartQuantity = homePageMapper.cartQuantity(userID);
+        if (cartQuantity == null) cartQuantity = 0;
+        map.put("page", page);
+        map.put("cartQuantity", cartQuantity);
+        return map;
+    }
+
+    @Override
+    public void updateNumber(CmMallCart cmMallCart) {
+        shoppingMapper.updateNumber(cmMallCart);
+    }
+
+    @Override
+    public void deleteCart(CmMallCart cmMallCart) {
+        shoppingMapper.deleteCart(cmMallCart);
+    }
+}

+ 155 - 0
src/main/java/com/caimei/utils/AppUtils.java

@@ -0,0 +1,155 @@
+/**
+ *
+ */
+package com.caimei.utils;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.struts2.ServletActionContext;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Random;
+
+/**
+ * 图片工具类
+ */
+public class AppUtils {
+
+	public static String getImageURL(String dirName, String src, String domain) {
+		return getImageURL(dirName, src, 0,domain);
+	}
+
+	/***
+	 * 获取图片地址
+	 *
+	 * @param src
+	 *            保存在数据库中的图片文件名
+	 * @param type
+	 *            图片的前缀 (如 type = 200 那么则获取的图片是 200_XXX的图片)
+	 * @param dirName
+	 *            图片保存的文件夹名 如 (league)
+	 * @param domain
+	 * 			   加上域名拼成完整路径
+	 * @return
+	 */
+	public static String getImageURL(String dirName, String src, int type, String domain) {
+
+
+		//正式环境 域名 http --- https处理
+		if (domain != null && !"".equals(domain) && domain.startsWith("http:") && domain.toLowerCase().lastIndexOf("test")== -1 && domain.toLowerCase().lastIndexOf("localhost")== -1) {
+			domain = domain.replace("http:", "https:");
+		}
+
+		//正式环境 图片地址 http --- https处理
+		if(src != null && src.startsWith("https:")){
+			//非正式环境 使用http
+			if (domain !=null && !"".equals(domain) && domain.toLowerCase().lastIndexOf("test")>-1 || domain.toLowerCase().lastIndexOf("localhost")>-1){
+				src = src.replace("https:","http:");
+			}
+			return src;
+		}
+
+		//正式环境 图片地址  http --- https处理
+		if(src != null && src.startsWith("http:")){
+			//非正式环境 使用http
+			if (domain !=null && !"".equals(domain) && domain.toLowerCase().lastIndexOf("test")==-1 && domain.toLowerCase().lastIndexOf("localhost")==-1){
+				src = src.replace("http:","https:");
+			}
+			return src;
+		}
+		type = 0 ;
+		dirName = dirName.trim();
+		if (dirName == null) dirName = "";
+		if(src == null || src.equalsIgnoreCase("null")) src = "";
+		if (src.indexOf(",") > 0) {
+			String tmp = src;
+			src = tmp.substring(0, tmp.indexOf(","));
+		}
+		String image = "/public/3.0/img/default/none.jpg";
+		if (dirName.equals("user")) {
+			image = "/public/3.0/img/default/HeaderImg.png";
+		} else if (dirName.equals("club")) {
+			image = "/public/3.0/img/default/default_club.jpg";
+		} else if (dirName.equals("shopLogo")) {
+			image = "/public/3.0/img/default/suppliver.jpg";
+		}else if (dirName.equals("caiMeiImage")) {
+			image = "/public/3.0/img/default/caiMeiImage.jpg";
+		}else {
+			image = "/public/3.0/img/default/none.jpg";
+		}
+		if (src != null && !src.equals("")) {
+			if (type != 0 || dirName.equals("product")) {
+				src = src.replace("\\", "/");
+				String srcActual = src;
+				String subDirName = "";
+				int index = src.lastIndexOf("/");
+
+				if (index != -1) {
+					subDirName = src.substring(0, index + 1);
+					srcActual = src.substring(index + 1);
+				}
+				boolean b = src.startsWith("/uploadFile");
+				if(b){
+					image = src;
+				}else{
+					image = "/uploadFile/" + dirName + "/" + subDirName
+							+ (type == 0 ? "" : type + "_") + srcActual;
+				}
+			} else {
+				boolean b = src.startsWith("/uploadFile");
+				if(b){
+					image = src;
+				}else{
+					image = "/uploadFile/" + dirName + "/" + src;
+				}
+			}
+		}else {
+			if(StringUtils.isEmpty(image)) {
+				image = "/public/3.0/img/default/none.jpg";
+			}
+		}
+		return domain + image;
+	}
+
+	public static String getRandomString(int i) {
+		String s = "23456789ABCDEFGHIJKLMNPQRSTUVWXYZ";
+		String s1 = "";
+		Random random = new Random();
+		for (int j = 0; j < i; j++) {
+			String s2 = (new StringBuilder(String.valueOf(s.charAt(random
+					.nextInt(s.length()))))).toString();
+			s1 = (new StringBuilder(String.valueOf(s1))).append(s2).toString();
+		}
+
+		return s1;
+	}
+
+	/**
+	 * 随机生成8位大写字母与数字组成的字符串
+	 * @return
+	 */
+	public static String generateRandomCode() {
+		// 8位允许字母与数字的字符串
+		return RandomStringUtils.random(8, true, true).toUpperCase();
+	}
+
+	/**
+	 * 随机生成指定位数字母与数字组成的字符串
+	 * @param length 长度
+	 * @return
+	 */
+	public static String generateRandomCode(int length) {
+		// 允许字母与数字的字符串
+		return RandomStringUtils.random(length, true, true);
+	}
+
+
+
+	public static String getClusterRequestIPInfo() {
+		HttpServletRequest appRequest = ServletActionContext.getRequest();
+		if (appRequest.getHeader("X-Real-IP") != null) {
+			return appRequest.getHeader("X-Real-IP");
+		}
+		return appRequest.getRemoteAddr();
+	}
+
+}

+ 2 - 1
src/main/resources/dev/application-dev.yml

@@ -44,4 +44,5 @@ miniprogram:
   AppId: wxd3cadbba8bf55f47
   AppSecret: 811a6ab8105e0bdf24cd78f6e6f009a7
   #邀请码有效时长  /天
-  ValidTime: 7
+  ValidTime: 7
+  domain: https://www.caimei365.com

+ 10 - 0
src/main/resources/mapper/DetailsMapper.xml

@@ -74,4 +74,14 @@
           AND delFlag = '0'
     </select>
 
+    <update id="updateCart" parameterType="com.caimei.entity.CmMallCart">
+        UPDATE
+          cm_mall_cart
+        SET
+          productCount = #{productCount},
+          addTime = #{addTime}
+        WHERE
+          id = #{id}
+    </update>
+
 </mapper>

+ 11 - 6
src/main/resources/mapper/HomePageMapper.xml

@@ -43,12 +43,17 @@
         SELECT
           COUNT(*)
         FROM
-          cm_mall_cart
-        WHERE
-          userID = #{userID}
-          AND delFlag = '0'
-        GROUP BY
-          productID
+          (
+            SELECT
+              COUNT(*)
+            FROM
+              cm_mall_cart
+            WHERE
+              userID = #{userID}
+              AND delFlag = '0'
+            GROUP BY
+              productID
+          ) a
     </select>
 
     <select id="classify" resultType="com.caimei.entity.CmOrganizeProducts"

+ 58 - 0
src/main/resources/mapper/ShoppingMapper.xml

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.caimei.mapper.products.ShoppingMapper">
+    <select id="findAllShop" resultType="com.caimei.entity.Shop" parameterType="int">
+        SELECT
+          s.*
+        FROM
+          cm_mall_cart cmc
+          LEFT JOIN cm_mall_organize_products cmop ON cmop.id = cmc.productID
+          LEFT JOIN product p ON cmop.productID = p.productID
+          LEFT JOIN shop s ON p.shopID = s.shopID
+        WHERE
+          cmc.userID = #{userID}
+          AND cmc.delFlag = '0'
+        GROUP BY
+          s.shopID
+        ORDER BY
+          cmc.addTime DESC
+    </select>
+
+    <select id="findAllProducts" resultType="com.caimei.entity.CmOrganizeProducts" parameterType="int">
+        SELECT
+          cmop.*,
+          p.mainImage,
+          p.name,
+          p.unit,
+          cmc.productCount
+        FROM
+          cm_mall_cart cmc
+          LEFT JOIN cm_mall_organize_products cmop ON cmop.id = cmc.productID
+          LEFT JOIN product p ON cmop.productID = p.productID
+        WHERE
+          p.shopID = #{shopID}
+          AND cmc.delFlag = '0'
+        ORDER BY
+          cmc.addTime DESC
+    </select>
+
+    <update id="updateNumber" parameterType="com.caimei.entity.CmMallCart">
+        UPDATE
+          cm_mall_cart
+        SET
+          productCount = #{productCount}
+        WHERE
+          userID = #{userID}
+          AND productID = #{productID}
+    </update>
+
+    <delete id="deleteCart" parameterType="com.caimei.entity.CmMallCart">
+        DELETE FROM
+          cm_mall_cart
+        WHERE
+          userID = #{userID}
+          AND productID = #{productID}
+    </delete>
+</mapper>

+ 2 - 1
src/main/resources/prod/application-prod.yml

@@ -46,4 +46,5 @@ miniprogram:
   AppId: wxd3cadbba8bf55f47
   AppSecret: 811a6ab8105e0bdf24cd78f6e6f009a7
   #邀请码有效时长  /天
-  ValidTime: 7
+  ValidTime: 7
+  domain: https://www.caimei365.com

+ 2 - 1
src/main/resources/test/application-test.yml

@@ -45,4 +45,5 @@ miniprogram:
   AppId: wxd3cadbba8bf55f47
   AppSecret: 811a6ab8105e0bdf24cd78f6e6f009a7
   #邀请码有效时长  /天
-  ValidTime: 7
+  ValidTime: 7
+  domain: https://www-b.caimei365.com