From 265a4d7ca3ee0c418a610db52fc862920140cafe Mon Sep 17 00:00:00 2001
From: 935090232@qq.com <ak473600000>
Date: Sun, 21 Mar 2021 10:18:08 +0800
Subject: [PATCH] 新增积分付款模块

---
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesSecKillServiceImpl.java |    4 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderItemDto.java                               |   47 ++
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopCouponServiceImpl.java            |   52 +-
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/ShopCartVo.java                                   |  106 ---
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java                        |  228 ---------
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/tools/WxShopOrderUtil.java                           |   25 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java             |  244 ++++++---
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderCouponGroup.java                           |   43 +
 zq-erp/src/main/java/com/matrix/system/shopXcx/dto/DiscountExplain.java                                 |   50 -
 /dev/null                                                                                               |   34 -
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShoppingCartAction.java                     |   21 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/ShopCartGroupVo.java                              |   46 ++
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/ShoppingCartService.java                     |   79 --
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/ShopOrderDto.java                               |   52 ++
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WxShopCouponService.java                     |    6 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/CalculatePostagePOJO.java                       |    6 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/OrderCouponGroupService.java                 |  282 ++++++++++++
 zq-erp/src/main/java/com/matrix/system/shopXcx/dao/ShopShoppingCartDao.java                             |    2 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WXShopOrderService.java                      |   15 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesGroupServiceImpl.java   |    4 
 zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopOrderDetailsDao.xml                                |    4 
 21 files changed, 758 insertions(+), 592 deletions(-)

diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java
index 00e55eb..f1e3fe5 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WXShopOrderAction.java
@@ -2,40 +2,28 @@
 
 import com.matrix.biz.bean.BizUser;
 import com.matrix.component.redis.RedisUserLoginUtils;
-import com.matrix.component.tools.WxUtils;
 import com.matrix.component.wechat.externalInterface.protocol.paramProtocol.BrandWCPayRequestData;
 import com.matrix.component.wechat.externalInterface.weixinUtil.WeixinServiceUtil;
 import com.matrix.core.constance.SystemErrorCode;
 import com.matrix.core.exception.GlobleException;
 import com.matrix.core.pojo.AjaxResult;
-import com.matrix.core.tools.StringUtils;
-import com.matrix.system.common.constance.AppConstance;
-import com.matrix.system.constance.Dictionary;
-import com.matrix.system.hive.bean.ShoppingGoods;
 import com.matrix.system.hive.dao.ShoppingGoodsDao;
-import com.matrix.system.shopXcx.api.pojo.AddShopOrderPOJO;
-import com.matrix.system.shopXcx.api.pojo.CreateOrderDto;
 import com.matrix.system.shopXcx.api.pojo.OrderInfoQueryPOJO;
+import com.matrix.system.shopXcx.api.pojo.ShopOrderDto;
+import com.matrix.system.shopXcx.api.service.OrderCouponGroupService;
 import com.matrix.system.shopXcx.api.service.ShoppingCartService;
 import com.matrix.system.shopXcx.api.service.WXShopOrderService;
 import com.matrix.system.shopXcx.api.service.WxShopCouponService;
 import com.matrix.system.shopXcx.api.tools.WxShopCouponUtil;
 import com.matrix.system.shopXcx.api.tools.WxShopOrderUtil;
-import com.matrix.system.shopXcx.api.vo.CouponReceiveInfoVO;
-import com.matrix.system.shopXcx.api.vo.ShopCartVo;
-import com.matrix.system.shopXcx.bean.*;
+import com.matrix.system.shopXcx.bean.ShopOrder;
 import com.matrix.system.shopXcx.dao.*;
-import com.matrix.system.shopXcx.dto.DiscountExplain;
-import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
 
 
 /**
@@ -82,105 +70,25 @@
     private ShopOrderDetailsDao shopOrderDetailsDao;
 
     @Autowired
+    OrderCouponGroupService orderCouponGroupService;
+
+    @Autowired
     ShopOrderDao shopOrderDao;
 
     /**
      * 计算购物车订单价格
      *
-     * @param addShopOrderPOJO
+     * @param shopOrderDto
      * @return
      * @throws Exception
      */
     @PostMapping(value = "/calculationCartOrder")
     public
     @ResponseBody
-    AjaxResult calculationCartOrder(@RequestBody AddShopOrderPOJO addShopOrderPOJO) throws Exception {
-        BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class); //计算购物车中物品的优惠信息
-
-        List<ShopCartVo> cartList = shoppingCartService.findUserCartList(addShopOrderPOJO.getShopId(),ShopShoppingCart.CAR_TYPE_MICRO);
+    AjaxResult calculationCartOrder(@RequestBody ShopOrderDto shopOrderDto) throws Exception {
 
 
-        //取出购物车中选中的产品
-        List<ShopShoppingCart> buyCart = new ArrayList<>();
-
-        //取出购物车中没有参加店铺活动的产品,和参加了店铺活动但是活动没有达到标准的产品,用来计算是否可以使用优惠券
-        List<ShopShoppingCart> notCouponuyCart = new ArrayList<>();
-        for (ShopCartVo shopCartVo : cartList) {
-            for (ShopShoppingCart shopShoppingCart : shopCartVo.getCartList()) {
-                if (shopShoppingCart.getIsSelected() == 1) {
-                    buyCart.add(shopShoppingCart);
-                    if (shopCartVo.getCoupon() == null || !shopCartVo.isSatisfactionCoupon()) {
-                        notCouponuyCart.add(shopShoppingCart);
-                    }
-                }
-            }
-        }
-        //获取当前购物车产品可用的优惠券
-        List<CouponReceiveInfoVO> usefulCoupon = wxShopCouponService.getCartVoCouponList(bizUser.getCompanyId(),notCouponuyCart);
-
-        //获取用户使用的优惠券
-        CouponReceiveInfoVO shopCoupon = new CouponReceiveInfoVO();
-        if (addShopOrderPOJO.getCouponReceiveId() == null) {
-            //如果用户没有选择优惠券则默认选优惠金额最高的
-            //计算使用优惠券后的价格
-            if (CollectionUtils.isNotEmpty(usefulCoupon)) {
-                //根据优惠券ID用户ID查询优惠券信息
-                shopCoupon = usefulCoupon.get(0);
-            }
-        } else if (addShopOrderPOJO.getCouponReceiveId() != 1) {
-            //用户选择了优惠券
-            shopCoupon = shopCouponRecordDao.selectMyCouponByReceiveId(addShopOrderPOJO.getCouponReceiveId());
-        } else {
-            //用户不使用优惠券
-        }
-
-
-        //计算收货地址:
-
-        ShopReceiveAddress shopReceiveAddress = null;
-        if (addShopOrderPOJO.getReceiveAddrId() == null) {
-            //如果没有传收货地址则默认收货地址
-            shopReceiveAddress = shopReceiveAddressDao.selectDefaultAddress(bizUser.getOpenId());
-            if (shopReceiveAddress != null) {
-                addShopOrderPOJO.setReceiveAddrId(shopReceiveAddress.getAddrId());
-            }
-        } else {
-            shopReceiveAddress = shopReceiveAddressDao.selectById(addShopOrderPOJO.getReceiveAddrId());
-            addShopOrderPOJO.setReceiveAddrId(shopReceiveAddress.getAddrId());
-
-        }
-
-
-        //得到订单计价说明
-        DiscountExplain discountExplain = shopOrderService.buildDiscountExplain(cartList, shopCoupon.getReceiveId(), bizUser.getCompanyId());
-
-        AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, buyCart, buyCart.size());
-        //结算金额信息
-        result.putInMap("discountExplain", discountExplain);
-
-
-        //用户优惠券
-        result.putInMap("usefulCoupon", usefulCoupon);
-        //用户选中的优惠券
-        result.putInMap("shopCoupon", shopCoupon);
-
-
-        //默认地址
-        String deliverySelect = "立即配送";
-        if (shopReceiveAddress != null) {
-            if (StringUtils.isNotBlank(shopReceiveAddress.getSchool())) {
-                deliverySelect = "立即配送";
-            } else {
-                deliverySelect = "物流配送";
-            }
-        }
-        result.putInMap("defaultAddress", shopReceiveAddress);
-        //配送方式
-        result.putInMap("deliverySelect", deliverySelect);
-
-
-        result.setRows(buyCart);
-        return result;
+        return shopOrderService.buildDiscountExplain(shopOrderDto);
     }
 
 
@@ -190,129 +98,17 @@
     /**
      * 新增订单
      *
-     * @param addShopOrderPOJO
+     * @param shopOrderDto
      * @return
      */
     @PostMapping(value = "/addShopOrder")
     public
     @ResponseBody
-    AjaxResult addShopOrder(@RequestBody AddShopOrderPOJO addShopOrderPOJO) throws Exception {
-        return shopOrderService.createShopOrder(addShopOrderPOJO);
+    AjaxResult addShopOrder(@RequestBody ShopOrderDto shopOrderDto) throws Exception {
+        return shopOrderService.createShopOrder(shopOrderDto);
     }
 
 
-    /**
-     * 新增订单
-     * 本方法抛弃,不再使用,本方法是单单个产品购买
-     * 在多产品的时候不适合
-     * @return
-     */
-    @Deprecated
-    @PostMapping(value = "/addShopOrder2")
-    public
-    @ResponseBody
-    AjaxResult addShopOrder2(@RequestBody CreateOrderDto createOrderDto) throws Exception {
-
-
-        //校验收货地址
-        ShopReceiveAddress shopReceiveAddress = shopReceiveAddressDao.selectById(createOrderDto.getReceiveAddrId());
-        if (shopReceiveAddress == null) {
-            return new AjaxResult(AjaxResult.STATUS_FAIL, "请选择正确的收获地址");
-        }
-
-
-        BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class);
-        ShopSku shopSku = shopSkuDao.selectById(createOrderDto.getSkuId());
-        ShopProduct shopProduct = shopProductDao.selectById(createOrderDto.getProductId());
-        String stokCode = shopSku.getStockCode();
-
-        ShopOrder shopOrder = new ShopOrder();
-        //查询绑定的产品是否为家居产品
-        if (StringUtils.isNotBlank(stokCode)) {
-            ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(Long.parseLong(stokCode));
-            if (shoppingGoods != null) {
-                //根据购买的产品设置订单类型
-                if (Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(shoppingGoods.getGoodType())) {
-                    shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS);
-                } else {
-                    shopOrder.setOrderType(ShopOrder.ORDER_TYPE_SERVICE);
-                }
-            } else {
-                shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS);
-            }
-        }
-
-        List<ShopOrderDetails> details = new ArrayList<>();
-        Integer cartCount = 0;
-        ShopOrderDetails shopOrderDetails = new ShopOrderDetails();
-        shopOrderDetails.setCreateBy(AppConstance.SYSTEM_USER);
-        shopOrderDetails.setUpdateBy(AppConstance.SYSTEM_USER);
-        shopOrderDetails.setpId(createOrderDto.getProductId());
-        shopOrderDetails.setsId(createOrderDto.getSkuId());
-        shopOrderDetails.setPrice(shopSku.getPrice());
-        shopOrderDetails.setCount(createOrderDto.getNumber());
-        shopOrderDetails.setsTitle(shopProduct.getTitle() + shopSku.getName());
-        shopOrderDetails.setDiscountAmount(BigDecimal.ZERO);
-        shopOrderDetails.setTotalPrice(shopOrderDetails.getPrice().multiply(BigDecimal.valueOf(shopOrderDetails.getCount())));
-        details.add(shopOrderDetails);
-        cartCount += shopOrderDetails.getCount();
-
-
-        //TODO 更新库存和销量[考虑和erp库存联动]
-        wxShopOrderUtil.updateProductAndSkuInfo(details);
-
-        //用户openId
-        shopOrder.setUserId(bizUser.getOpenId());
-        shopOrder.setCreateBy("微信小程序生成");
-        shopOrder.setUpdateBy("微信小程序生成");
-        shopOrder.setCommodityPrice(shopOrderDetails.getTotalPrice());
-        shopOrder.setPurchaseQuantity(cartCount);
-        //购买方式
-        shopOrder.setShippingMethod("物流配送");
-        //生成订单号
-        shopOrder.setOrderNo(WxUtils.getOrderNum());
-        //设置支付状态
-        shopOrder.setPayStatus(ShopOrder.ORDER_STATUS_WAIT_PAY);
-        //设置订单状态
-        shopOrder.setOrderStatus(ShopOrder.ORDER_STATUS_WAIT_SEND);
-
-        //设置退款费用(注:下次优化从数据字典表获取)
-        shopOrder.setRefundCharge(BigDecimal.ZERO);
-        //客户电话
-        shopOrder.setUserTel(shopReceiveAddress.getAddrTelephone());
-        //客户姓名
-        shopOrder.setUserName(shopReceiveAddress.getAddrLiaisonman());
-        //备注
-        shopOrder.setRemarks(createOrderDto.getRemarks());
-        //删除标识
-        shopOrder.setDelFlag(AppConstance.DATA_USEABLE);
-        //微信订单号
-        shopOrder.setWxOrderNo("");
-        //微信支付结果
-        shopOrder.setPayResult(ShopOrder.ORDER_WX_STATUS_WAIT_PAY);
-        //如果没有提交购买方式或配送方式不是物流
-        //获取邮费
-        shopOrder.setOrderMoney(shopOrderDetails.getTotalPrice());
-        shopOrder.setStoreId(createOrderDto.getShopId());
-
-        shopOrderDao.insert(shopOrder);
-
-        wxShopOrderUtil.insertSendPackageInfo(shopOrder, "物流配送", shopReceiveAddress);
-
-        //给订单详情表添加订单ID
-        shopOrderDetails.setOrderId(shopOrder.getId());
-
-        shopOrderDetailsDao.insert(shopOrderDetails);
-
-
-        BrandWCPayRequestData payData = startPayment(shopOrder);
-        AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, Arrays.asList(payData));
-        result.putInMap("orderId", shopOrder.getId());
-
-        return result;
-
-
-    }
 
     @Value("${wx_pay_debug_onoff}")
     private boolean isDebug;
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShoppingCartAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShoppingCartAction.java
index 91eeace..4508e1c 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShoppingCartAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxShoppingCartAction.java
@@ -9,6 +9,7 @@
 import com.matrix.core.tools.StringUtils;
 import com.matrix.system.common.constance.AppConstance;
 import com.matrix.system.common.interceptor.HostInterceptor;
+import com.matrix.system.shopXcx.api.service.OrderCouponGroupService;
 import com.matrix.system.shopXcx.api.service.ShoppingCartService;
 import com.matrix.system.shopXcx.api.service.WxShopCouponService;
 import com.matrix.system.shopXcx.api.vo.ShopCartBillVo;
@@ -51,7 +52,8 @@
     @Autowired
     ShopSkuDao skuDao;
 
-
+    @Autowired
+    OrderCouponGroupService orderCouponGroupService;
 
     @ApiOperation(value = "根据ID删除购物车", notes = "")
     @PostMapping("/deleteByCartId/{cartId}")
@@ -69,9 +71,12 @@
     @PostMapping("/findShoppingCart")
     @ResponseBody
     public AjaxResult getShoppingCartByUserId(@RequestBody ShopShoppingCart shoppingCart) {
-        List<ShopCartVo> cartList = shoppingCartService.findUserCartList(shoppingCart.getShopId(),ShopShoppingCart.CAR_TYPE_MICRO);
-        AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, cartList, cartList.size());
-        ShopCartBillVo shopCartBill = shoppingCartService.buildShopCartBillVo(cartList);
+        BizUser loginUser = redisUserLoginUtils.getLoginUser(BizUser.class);
+        String userId = loginUser.getOpenId();
+        List<ShopShoppingCart> list = shoppingCartDao.selectByCartUserId(shoppingCart.getShopId(),userId);
+        List<ShopCartVo> shopCartVoList = shoppingCartService.buildShopCart(list);
+        AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, shopCartVoList, shopCartVoList.size());
+        ShopCartBillVo shopCartBill = shoppingCartService.buildShopCartBillVo(shopCartVoList);
         result.putInMap("billTotal", shopCartBill.getBillTotal().stripTrailingZeros().toPlainString());
         result.putInMap("selectCount", shopCartBill.getSelectCount());
         result.putInMap("cartCount", shopCartBill.getCartCount());
@@ -119,9 +124,9 @@
     AjaxResult saveShoppingCart(@RequestBody ShopShoppingCart shoppingCart) {
 
         //查询到sku设置对应的产品id
-        ShopSku sku= skuDao.selectById(shoppingCart.getCartSkuId());
-        if(sku==null){
-            return new AjaxResult(AjaxResult.STATUS_FAIL,"无效的产品id");
+        ShopSku sku = skuDao.selectById(shoppingCart.getCartSkuId());
+        if (sku == null) {
+            return new AjaxResult(AjaxResult.STATUS_FAIL, "无效的产品id");
         }
 
         shoppingCart.setCartProductId(sku.getpId());
@@ -274,7 +279,7 @@
     public AjaxResult updateCartAllSelected(@PathVariable("isSelected") Integer isSelected,
                                             @PathVariable("shopId") Long shopId) {
         BizUser user = redisUserLoginUtils.getLoginUser(BizUser.class);
-        shoppingCartDao.updateAllSelected(user.getOpenId(),shopId, isSelected);
+        shoppingCartDao.updateAllSelected(user.getOpenId(), shopId, isSelected);
         return new AjaxResult(AjaxResult.STATUS_SUCCESS, "修改成功");
     }
 }
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/AddShopOrderPOJO.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/AddShopOrderPOJO.java
deleted file mode 100644
index 3398072..0000000
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/AddShopOrderPOJO.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package com.matrix.system.shopXcx.api.pojo;
-
-import java.util.List;
-
-/**
- * @author jyy
- */
-public class AddShopOrderPOJO {
-
-
-    /**
-     *  收货地址ID
-     */
-    private Integer receiveAddrId;
-
-    /**
-     *  配送方式(1=物流,2=门店自取)
-     */
-    private String deliverySelect;
-
-    /**
-     *  配送门店ID
-     */
-    private Long shopId;
-
-    /**
-     *  优惠券记录id
-     */
-    private Integer couponReceiveId;
-
-
-
-    /**
-     *  订单备注
-     */
-    private String  remarks;
-
-    /**
-     *  购买商品规格列表详情
-     */
-    private List<OrderProductSkuPOJO> skuList;
-
-
-    public Integer getReceiveAddrId() {
-        return receiveAddrId;
-    }
-
-    public void setReceiveAddrId(Integer receiveAddrId) {
-        this.receiveAddrId = receiveAddrId;
-    }
-
-    public String getDeliverySelect() {
-        return deliverySelect;
-    }
-
-    public void setDeliverySelect(String deliverySelect) {
-        this.deliverySelect = deliverySelect;
-    }
-
-    public Long getShopId() {
-        return shopId;
-    }
-
-    public void setShopId(Long shopId) {
-        this.shopId = shopId;
-    }
-
-    public Integer getCouponReceiveId() {
-        return couponReceiveId;
-    }
-
-    public void setCouponReceiveId(Integer couponReceiveId) {
-        this.couponReceiveId = couponReceiveId;
-    }
-
-    public String getRemarks() {
-        return remarks;
-    }
-
-    public void setRemarks(String remarks) {
-        this.remarks = remarks;
-    }
-
-    public List<OrderProductSkuPOJO> getSkuList() {
-        return skuList;
-    }
-
-    public void setSkuList(List<OrderProductSkuPOJO> skuList) {
-        this.skuList = skuList;
-    }
-}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/CalculatePostagePOJO.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/CalculatePostagePOJO.java
index ca95377..ccf8fef 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/CalculatePostagePOJO.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/CalculatePostagePOJO.java
@@ -19,7 +19,7 @@
     /**
      * 购买规格信息列表
      */
-    private List<OrderProductSkuPOJO> skuList;
+    private List<OrderItemDto> skuList;
 
 
     public Integer getAddrId() {
@@ -38,11 +38,11 @@
         this.couponId = couponId;
     }
 
-    public List<OrderProductSkuPOJO> getSkuList() {
+    public List<OrderItemDto> getSkuList() {
         return skuList;
     }
 
-    public void setSkuList(List<OrderProductSkuPOJO> skuList) {
+    public void setSkuList(List<OrderItemDto> skuList) {
         this.skuList = skuList;
     }
 
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderCouponGroup.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderCouponGroup.java
new file mode 100644
index 0000000..7de34e4
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderCouponGroup.java
@@ -0,0 +1,43 @@
+package com.matrix.system.shopXcx.api.pojo;
+
+import com.matrix.system.shopXcx.api.vo.CouponReceiveInfoVO;
+import com.matrix.system.shopXcx.bean.ShopCoupon;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 购物车前台展示对象
+ */
+@Data
+public class OrderCouponGroup {
+
+	private ShopCoupon coupon;
+
+	//是否满足优惠
+	private boolean satisfactionCoupon;
+
+	private List<OrderItemDto> orderItemDtos;
+
+	//提示语
+	private String msg="";
+
+	//优惠小计金额
+	private BigDecimal subtotal=BigDecimal.ZERO;
+
+	//原价
+	private BigDecimal srcPrice=BigDecimal.ZERO;
+
+	//优惠金额
+	private BigDecimal  couponPrice=BigDecimal.ZERO;
+	/**
+	 * 抵用积分
+	 */
+	private BigDecimal scorePay = BigDecimal.ZERO;
+
+	private CouponReceiveInfoVO couponReceiveInfoVO;
+
+
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderItemDto.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderItemDto.java
new file mode 100644
index 0000000..de86b06
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderItemDto.java
@@ -0,0 +1,47 @@
+package com.matrix.system.shopXcx.api.pojo;
+
+import com.matrix.system.shopXcx.bean.ShopCoupon;
+import com.matrix.system.shopXcx.bean.ShopProduct;
+import com.matrix.system.shopXcx.bean.ShopSku;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author jyy
+ */
+@Data
+public class OrderItemDto {
+    /**
+     * 产品ID
+     */
+    private Integer  productId;
+    /**
+     *  产品规格ID
+     */
+    private Integer skuId;
+    
+    private ShopProduct shopProduct;
+
+    private ShopSku shopSku;
+    
+    /**
+     *  购买数量
+     */
+    private Integer count;
+
+    /**
+     * 支付方式1 直接购买 2,积分兑换
+     */
+    private Integer  payType;
+
+    /**
+     * 购物车id
+     */
+    private Integer cartId;
+
+
+    private List<ShopCoupon> shopCoupons;
+    
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderProductSkuPOJO.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderProductSkuPOJO.java
deleted file mode 100644
index 3e0b92b..0000000
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/OrderProductSkuPOJO.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.matrix.system.shopXcx.api.pojo;
-
-/**
- * @author jyy
- */
-public class OrderProductSkuPOJO {
-
-    /**
-     *  产品规格ID
-     */
-    private Integer skuId;
-
-    /**
-     *  购买数量
-     */
-    private Integer count;
-
-
-    public Integer getSkuId() {
-        return skuId;
-    }
-
-    public void setSkuId(Integer skuId) {
-        this.skuId = skuId;
-    }
-
-    public Integer getCount() {
-        return count;
-    }
-
-    public void setCount(Integer count) {
-        this.count = count;
-    }
-}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/ShopOrderDto.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/ShopOrderDto.java
new file mode 100644
index 0000000..ad131b4
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/pojo/ShopOrderDto.java
@@ -0,0 +1,52 @@
+package com.matrix.system.shopXcx.api.pojo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author jyy
+ */
+@Data
+public class ShopOrderDto {
+
+
+    public static final Integer JOIN_ACTIVE = 1;
+    /**
+     *  收货地址ID
+     */
+    private Integer receiveAddrId;
+
+    /**
+     *  配送方式(1=物流,2=门店自取)
+     */
+    private String deliverySelect;
+
+    /**
+     *  配送门店ID
+     */
+    private Long shopId;
+
+    /**
+     *  优惠券记录id
+     */
+    private Integer couponReceiveId;
+
+    /**
+     *  参加店铺活动 1参加 2不参加
+     */
+    private Integer joinActive;
+
+
+
+    /**
+     *  订单备注
+     */
+    private String  remarks;
+
+    /**
+     *  购买商品规格列表详情
+     */
+    private List<OrderItemDto> orderItemList;
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/OrderCouponGroupService.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/OrderCouponGroupService.java
new file mode 100644
index 0000000..8519518
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/OrderCouponGroupService.java
@@ -0,0 +1,282 @@
+package com.matrix.system.shopXcx.api.service;
+
+import com.matrix.component.redis.RedisUserLoginUtils;
+import com.matrix.core.exception.GlobleException;
+import com.matrix.core.tools.LogUtil;
+import com.matrix.system.common.dao.BusParameterSettingsDao;
+import com.matrix.system.shopXcx.api.pojo.OrderCouponGroup;
+import com.matrix.system.shopXcx.api.pojo.OrderItemDto;
+import com.matrix.system.shopXcx.bean.ShopCoupon;
+import com.matrix.system.shopXcx.bean.ShopShoppingCart;
+import com.matrix.system.shopXcx.dao.ShopProductDao;
+import com.matrix.system.shopXcx.dao.ShopShoppingCartDao;
+import com.matrix.system.shopXcx.dao.ShopSkuDao;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+/**
+ * 购物车前台展示对象
+ */
+@Service
+public class OrderCouponGroupService {
+    @Autowired
+    private ShopShoppingCartDao shoppingCartDao;
+    @Autowired
+    private RedisUserLoginUtils redisUserLoginUtils;
+
+    @Autowired
+    WxShopCouponService shopCouponService;
+
+    @Autowired
+    BusParameterSettingsDao busParameterSettingsDao;
+
+    @Autowired
+    ShopProductDao shopProductDao;
+
+    @Autowired
+    ShopSkuDao shopSkuDao;
+
+    /**
+     * 初始化OrderCouponElement
+     * @param skuId
+     * @param count
+     * @param payType
+     * @return
+     */
+    public OrderItemDto buildOrderCouponElement(OrderItemDto orderItemDto){
+        orderItemDto.setShopSku(shopSkuDao.selectById(orderItemDto.getSkuId()));
+        orderItemDto.setShopProduct(shopProductDao.selectById(orderItemDto.getProductId()));
+        return orderItemDto;
+    }
+
+    /**
+     * 计算用户的产品可以参与的店铺优惠活动分组
+     */
+    public List<OrderCouponGroup> buildOrderCouponGroupList(List<OrderItemDto> list) {
+
+        //定义购物车优惠分组
+        List<OrderCouponGroup> orderCouponGroupList = new ArrayList<>();
+        // 1表示没有优惠的默认分组
+        OrderCouponGroup def = new OrderCouponGroup();
+        def.setSatisfactionCoupon(true);
+        def.setMsg("商城");
+        def.setOrderItemDtos(new ArrayList<>());
+        // 组合默认分组
+        orderCouponGroupList.add(def);
+
+        // 记录所有优惠券,一个优惠券(活动)表示一组
+        Map<Integer, ShopCoupon> shopCouponMap = new HashMap<>();
+
+        //查询购物车中的产品匹配上的所有优惠活动
+        for (OrderItemDto orderItemDto : list) {
+
+            if(orderItemDto.getPayType()== ShopShoppingCart.CAR_TYPE_SCORE){
+                // 积分兑换产品不参加优惠
+                def.getOrderItemDtos().add(orderItemDto);
+            }else{
+                List<ShopCoupon> shopCouponList = shopCouponService.getHdListByProductId(orderItemDto.getProductId());
+                if (CollectionUtils.isNotEmpty(shopCouponList)) {
+                    // 把所有的优惠券和购物车条目先关联一下,后续可以计算优惠升级的情况
+                    orderItemDto.setShopCoupons(shopCouponList);
+                    for (ShopCoupon shopCoupon : shopCouponList) {
+                        shopCouponMap.put(shopCoupon.getId(), shopCoupon);
+                    }
+                } else {
+                    // 该产品没有参加优惠券
+                    def.getOrderItemDtos().add(orderItemDto);
+                }
+            }
+
+        }
+
+        //计算没有优惠组的价格
+        countPrice(def);
+
+
+        /*
+         * 计算优惠券分组 1、获取到所有的优惠券,从最高满减开始,找寻合适的产品,找到后加入对应的购物车组
+         * 2、计算组内价格
+         */
+        Set<Integer> keys = shopCouponMap.keySet();
+        List<ShopCoupon> allShopCoupons = new ArrayList<>();
+        for (Integer key : keys) {
+            allShopCoupons.add(shopCouponMap.get(key));
+        }
+
+        //根据优惠力度排序,优惠力度大的先参与计算
+        Collections.sort(allShopCoupons, new Comparator() {
+            @Override
+            public int compare(Object o1, Object o2) {
+                ShopCoupon e1 = (ShopCoupon) o1;
+                ShopCoupon e2 = (ShopCoupon) o2;
+                return e2.getMinAmount().compareTo(e1.getMinAmount());
+            }
+        });
+
+
+        // 进行购物车和优惠券的匹配,匹配成功的加入到优惠组中,
+        for (int i = 0; i < allShopCoupons.size(); i++) {
+            ShopCoupon shopCoupon = allShopCoupons.get(i);
+            OrderCouponGroup shopCarVo = new OrderCouponGroup();
+            shopCarVo.setCoupon(shopCoupon);
+            shopCarVo.setOrderItemDtos(new ArrayList<>());
+            orderCouponGroupList.add(i, shopCarVo);
+
+            // 获取所有购物车条目
+            for (OrderItemDto orderItemDto : list) {
+                // 如果匹配到的产品已经出现在其他优惠组中,则需要判断是否移除之前的组
+                boolean needRemove = false;
+
+                // 判断当前购物车条目是否已经在合适的组里了
+                if (isInGroupAndSatisfaction(orderItemDto, orderCouponGroupList)) {
+                    continue;
+
+                } else if (isInGroupNotSatisfaction(orderItemDto, orderCouponGroupList)) {
+                    needRemove = true;
+                }
+
+                List<ShopCoupon> cartCouons = orderItemDto.getShopCoupons();
+                if (cartCouons != null) {
+                    // 获取每个购物车条目满足的优惠
+                    for (ShopCoupon cartCouon : cartCouons) {
+                        if (cartCouon.getId().equals(shopCoupon.getId())) {
+                            //匹配成功,加入本组
+                            LogUtil.debug("购物车" + orderItemDto.getProductId() + "和优惠券" + cartCouon.getCName() + "匹配");
+                            if (needRemove) {
+                                removeNotSatisfaction(orderItemDto, orderCouponGroupList);
+                            }
+                            shopCarVo.getOrderItemDtos().add(orderItemDto);
+                            break;
+                        }
+                    }
+                }
+
+            }
+
+            // 计算本组优惠券是否已经满足优惠条件
+            countPrice(shopCarVo);
+        }
+
+
+        // 因为有些优惠中可能没有产品,所以要去除cartList中没有产品的分组
+        List<OrderCouponGroup> cartListCopy = new ArrayList<>();
+        for (OrderCouponGroup orderCouponGroup : orderCouponGroupList) {
+            if (CollectionUtils.isNotEmpty(orderCouponGroup.getOrderItemDtos())) {
+                cartListCopy.add(orderCouponGroup);
+            }
+        }
+        return cartListCopy;
+    }
+
+
+    /**
+     * 购车条目在组中并且组是否已经满足优惠的
+     *
+     * @param cartList
+     * @return
+     */
+    private boolean isInGroupAndSatisfaction(OrderItemDto orderItemDto, List<OrderCouponGroup> cartList) {
+        boolean result = false;
+        for (OrderCouponGroup cartVo : cartList) {
+            if (cartVo.isSatisfactionCoupon() && cartVo.getOrderItemDtos().contains(orderItemDto)) {
+                result = true;
+            }
+        }
+        return result;
+    }
+
+    /**
+     * 购物车条目在组中,但是组中产品没有达到优惠条件
+     * @param cartList
+     * @return
+     */
+    private boolean isInGroupNotSatisfaction(OrderItemDto orderItemDto, List<OrderCouponGroup> cartList) {
+        boolean result = false;
+        for (OrderCouponGroup cartVo : cartList) {
+            if (!cartVo.isSatisfactionCoupon() && cartVo.getOrderItemDtos().contains(orderItemDto)) {
+                result = true;
+            }
+        }
+        return result;
+    }
+
+    /**
+     * 删除购物车条目所在分组中的引用
+     *
+     * @param cartList
+     */
+    private void removeNotSatisfaction(OrderItemDto orderItemDto, List<OrderCouponGroup> cartList) {
+        for (OrderCouponGroup cartVo : cartList) {
+            if (cartVo.getOrderItemDtos().remove(orderItemDto)) {
+                LogUtil.debug("删除购物车所在组" + cartVo.getCoupon().getCName() + "," + orderItemDto.getProductId());
+            }
+        }
+    }
+
+    /**
+     * 计算购物车价格和优惠信息
+     *
+     * @author JIANGYOUYAO
+     * @email 935090232@qq.com
+     * @date 2019年8月27日
+     */
+    private void countPrice(OrderCouponGroup orderCouponGroup) {
+        List<OrderItemDto> orderItemDtoList = orderCouponGroup.getOrderItemDtos();
+        // 计算总价
+        BigDecimal sum = BigDecimal.ZERO;
+        //抵扣总积分
+        BigDecimal scoreSum = BigDecimal.ZERO;
+
+        for (OrderItemDto orderCouponElement : orderItemDtoList) {
+            if(ShopShoppingCart.CAR_TYPE_MICRO==orderCouponElement.getPayType()){
+                //直接购买
+                sum = sum.add(orderCouponElement.getShopSku().getPrice().multiply(BigDecimal.valueOf(orderCouponElement.getCount())));
+
+            }else if(ShopShoppingCart.CAR_TYPE_SCORE==orderCouponElement.getPayType()){
+                //积分兑换
+                sum = sum.add(orderCouponElement.getShopSku().getScorePrice().multiply(BigDecimal.valueOf(orderCouponElement.getCount())));
+                scoreSum = scoreSum.add(new BigDecimal(orderCouponElement.getShopSku().getScoreCount() * orderCouponElement.getCount()));
+            }else{
+                throw new GlobleException("参数错误");
+            }
+        }
+
+        if (orderCouponGroup.getCoupon() != null) {
+            // 存在优惠券
+            if (sum.compareTo(orderCouponGroup.getCoupon().getMinAmount()) >= 0) {
+                //标记为合理分组
+                orderCouponGroup.setSatisfactionCoupon(true);
+                if (sum.compareTo(orderCouponGroup.getCoupon().getMinAmount()) >= 0) {
+                    orderCouponGroup.setSubtotal(sum.subtract(orderCouponGroup.getCoupon().getOffsetAmount()));
+                    orderCouponGroup.setSrcPrice(sum);
+                    orderCouponGroup.setCouponPrice(orderCouponGroup.getCoupon().getOffsetAmount());
+                    orderCouponGroup.setMsg(orderCouponGroup.getCoupon().getCName() + ",已优惠"
+                            + orderCouponGroup.getCoupon().getOffsetAmount().stripTrailingZeros().toPlainString() + "元");
+                }
+            }
+            if (sum.compareTo(orderCouponGroup.getCoupon().getMinAmount()) < 0) {
+                orderCouponGroup.setSatisfactionCoupon(false);
+                orderCouponGroup.setSubtotal(sum);
+                orderCouponGroup.setSrcPrice(sum);
+                orderCouponGroup.setMsg(orderCouponGroup.getCoupon().getCName());
+                if (sum.doubleValue() > 0) {
+                    orderCouponGroup.setMsg(orderCouponGroup.getCoupon().getCName() + ",再买"
+                            + (orderCouponGroup.getCoupon().getMinAmount().subtract(sum)).stripTrailingZeros()
+                            .toPlainString()
+                            + "元立减" + orderCouponGroup.getCoupon().getOffsetAmount().stripTrailingZeros().toPlainString()
+                            + "元");
+                }
+            }
+        } else {
+            orderCouponGroup.setSubtotal(sum);
+            orderCouponGroup.setSrcPrice(sum);
+            orderCouponGroup.setSatisfactionCoupon(true);
+        }
+        orderCouponGroup.setScorePay(scoreSum);
+    }
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/ShoppingCartService.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/ShoppingCartService.java
index ab83b88..3cf7afd 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/ShoppingCartService.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/ShoppingCartService.java
@@ -1,8 +1,6 @@
 package com.matrix.system.shopXcx.api.service;
 
-import com.matrix.biz.bean.BizUser;
 import com.matrix.component.redis.RedisUserLoginUtils;
-import com.matrix.core.exception.GlobleException;
 import com.matrix.core.tools.LogUtil;
 import com.matrix.system.common.dao.BusParameterSettingsDao;
 import com.matrix.system.shopXcx.api.vo.ShopCartBillVo;
@@ -33,7 +31,7 @@
     @Autowired
     BusParameterSettingsDao busParameterSettingsDao;
 
-
+    //计算购车选中项总价以及优惠金额
     public ShopCartBillVo buildShopCartBillVo(List<ShopCartVo> cartList) {
 
         ShopCartBillVo shopCartBillVo = new ShopCartBillVo();
@@ -65,23 +63,10 @@
         }
         shopCartBillVo.setCartCount(cartCount);
         shopCartBillVo.setSelectCount(selectCount);
-
         return shopCartBillVo;
     }
 
-    /**
-     * 计算用户的购物车产品优惠分组
-     *
-     * @return
-     * @param shopId
-     */
-    public List<ShopCartVo> findUserCartList(Long shopId,Integer cartType) {
-        BizUser loginUser = redisUserLoginUtils.getLoginUser(BizUser.class);
-        String userId = loginUser.getOpenId();
-        List<ShopShoppingCart> list = shoppingCartDao.selectByCartUserId(shopId,userId,cartType);
-        List<ShopCartVo> cartList = buildShopCart(list);
-        return cartList;
-    }
+
 
 
     /**
@@ -91,7 +76,7 @@
      * @return
      */
     @SuppressWarnings("unchecked")
-    private List<ShopCartVo> buildShopCart(List<ShopShoppingCart> list) {
+    public List<ShopCartVo> buildShopCart(List<ShopShoppingCart> list) {
 
 
         //定义购物车优惠分组
@@ -112,23 +97,19 @@
         //查询购物车中的产品匹配上的所有优惠活动
         for (ShopShoppingCart shoppingCart : list) {
 
-            if(shoppingCart.getCartType()==ShopShoppingCart.CAR_TYPE_SCORE){
-                // 积分兑换产品不参加优惠
-                def.getCartList().add(shoppingCart);
-            }else{
-                List<ShopCoupon> shopCoupons = shopCouponService.getHdListByProductId(shoppingCart.getCartProductId());
-                if (CollectionUtils.isNotEmpty(shopCoupons)) {
-                    // 把所有的优惠券和购物车条目先关联一下,后续可以计算优惠升级的情况
-                    shoppingCart.setShopCoupons(shopCoupons);
-                    for (ShopCoupon shopCoupon : shopCoupons) {
-                        shopCouponMap.put(shopCoupon.getId(), shopCoupon);
-                    }
-                } else {
-                    // 该产品没有参加优惠券
-                    def.getCartList().add(shoppingCart);
-                }
-            }
+            List<ShopCoupon> shopCoupons = shopCouponService.getHdListByProductId(shoppingCart.getCartProductId());
 
+            if (CollectionUtils.isNotEmpty(shopCoupons)) {
+                // 把所有的优惠券和购物车条目先关联一下,后续可以计算优惠升级的情况
+                shoppingCart.setShopCoupons(shopCoupons);
+                for (ShopCoupon shopCoupon : shopCoupons) {
+                    shopCouponMap.put(shopCoupon.getId(), shopCoupon);
+                }
+            } else {
+                // 该产品没有参加优惠券
+                def.getCartList().add(shoppingCart);
+
+            }
         }
 
         //计算没有优惠组的价格
@@ -270,28 +251,13 @@
         List<ShopShoppingCart> cartList = shopCartVo.getCartList();
         // 计算总价
         BigDecimal sum = BigDecimal.ZERO;
-        //抵扣总积分
-        BigDecimal scoreSum = BigDecimal.ZERO;
         // 选中项总价
         BigDecimal selectSum = BigDecimal.ZERO;
         for (ShopShoppingCart shopShoppingCart : cartList) {
-            if(ShopShoppingCart.CAR_TYPE_MICRO==shopShoppingCart.getCartType()){
-                //直接购买
-                sum = sum.add(shopShoppingCart.getPrice().multiply(BigDecimal.valueOf(shopShoppingCart.getCartNumber())));
-                if (shopShoppingCart.getIsSelected() == 1) {
-                    selectSum = selectSum
-                            .add(shopShoppingCart.getPrice().multiply(BigDecimal.valueOf(shopShoppingCart.getCartNumber())));
-                }
-            }else if(ShopShoppingCart.CAR_TYPE_SCORE==shopShoppingCart.getCartType()){
-                //积分兑换
-                sum = sum.add(shopShoppingCart.getScorePrice().multiply(BigDecimal.valueOf(shopShoppingCart.getCartNumber())));
-                if (shopShoppingCart.getIsSelected() == 1) {
-                    selectSum = selectSum
-                            .add(shopShoppingCart.getScorePrice().multiply(BigDecimal.valueOf(shopShoppingCart.getCartNumber())));
-                    scoreSum = scoreSum.add(new BigDecimal(shopShoppingCart.getScoreCount() * shopShoppingCart.getCartNumber()));
-                }
-            }else{
-                throw new GlobleException("参数错误");
+            sum = sum.add(shopShoppingCart.getPrice().multiply(BigDecimal.valueOf(shopShoppingCart.getCartNumber())));
+            if (shopShoppingCart.getIsSelected() == 1) {
+                selectSum = selectSum
+                        .add(shopShoppingCart.getPrice().multiply(BigDecimal.valueOf(shopShoppingCart.getCartNumber())));
             }
         }
 
@@ -322,10 +288,9 @@
                 }
             }
         } else {
-                shopCartVo.setSubtotal(selectSum);
-                shopCartVo.setSrcPrice(selectSum);
-                shopCartVo.setSatisfactionCoupon(true);
+            shopCartVo.setSubtotal(selectSum);
+            shopCartVo.setSrcPrice(selectSum);
+            shopCartVo.setSatisfactionCoupon(true);
         }
-        shopCartVo.setScorePay(scoreSum);
     }
 }
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WXShopOrderService.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WXShopOrderService.java
index 3dabe15..da0f5e4 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WXShopOrderService.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WXShopOrderService.java
@@ -1,15 +1,12 @@
 package com.matrix.system.shopXcx.api.service;
 
-import com.matrix.core.pojo.AjaxResult;
 import com.matrix.component.wechat.externalInterface.protocol.paramProtocol.BrandWCPayRequestData;
-import com.matrix.system.shopXcx.bean.ShopOrder;
-import com.matrix.system.shopXcx.dto.DiscountExplain;
-import com.matrix.system.shopXcx.api.pojo.AddShopOrderPOJO;
+import com.matrix.core.pojo.AjaxResult;
 import com.matrix.system.shopXcx.api.pojo.OrderInfoQueryPOJO;
-import com.matrix.system.shopXcx.api.vo.ShopCartVo;
+import com.matrix.system.shopXcx.api.pojo.ShopOrderDto;
+import com.matrix.system.shopXcx.bean.ShopOrder;
 
 import java.math.BigDecimal;
-import java.util.List;
 
 /**
  * @author jyy
@@ -22,11 +19,11 @@
 
     /**
      * 创建订单
-     * @param addShopOrderPOJO
+     * @param shopOrderDto
      * @return
      * @throws Exception
      */
-    AjaxResult createShopOrder(AddShopOrderPOJO addShopOrderPOJO) throws Exception;
+    AjaxResult createShopOrder(ShopOrderDto shopOrderDto) throws Exception;
 
     /**
      * 订单结算
@@ -93,5 +90,5 @@
      */
     AjaxResult updateStockAndVolumeById(Integer orderId);
 
-    DiscountExplain buildDiscountExplain(List<ShopCartVo> cartList, Integer id, Long companyId);
+    AjaxResult buildDiscountExplain(ShopOrderDto shopOrderDto);
 }
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WxShopCouponService.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WxShopCouponService.java
index 13d6e99..fd92862 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WxShopCouponService.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/WxShopCouponService.java
@@ -2,9 +2,9 @@
 
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.pojo.PaginationVO;
-import com.matrix.system.shopXcx.bean.ShopCoupon;
-import com.matrix.system.shopXcx.bean.ShopShoppingCart;
+import com.matrix.system.shopXcx.api.pojo.OrderItemDto;
 import com.matrix.system.shopXcx.api.vo.CouponReceiveInfoVO;
+import com.matrix.system.shopXcx.bean.ShopCoupon;
 
 import java.util.List;
 
@@ -18,7 +18,7 @@
 	 * 根据购物车选中的产品
 	 * @return
 	 */
-	public List<CouponReceiveInfoVO> getCartVoCouponList(Long companyId,List<ShopShoppingCart> shopShoppingCarts);
+	public List<CouponReceiveInfoVO> getCartVoCouponList(Long companyId,List<OrderItemDto> OrderItemDtos);
 
 
 	/**
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java
index 51bfc9b..d4a5664 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WXShopOrderServiceImpl.java
@@ -1,5 +1,6 @@
 package com.matrix.system.shopXcx.api.service.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.matrix.biz.bean.BizUser;
@@ -11,26 +12,24 @@
 import com.matrix.core.exception.GlobleException;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.tools.LogUtil;
-import com.matrix.core.tools.StringUtils;
 import com.matrix.system.common.bean.BusParameterSettings;
 import com.matrix.system.common.constance.AppConstance;
 import com.matrix.system.common.dao.BusParameterSettingsDao;
 import com.matrix.system.common.dao.CustomerDataDictionaryDao;
 import com.matrix.system.common.interceptor.HostInterceptor;
-import com.matrix.system.constance.Dictionary;
-import com.matrix.system.hive.bean.ShoppingGoods;
 import com.matrix.system.hive.dao.ShoppingGoodsDao;
 import com.matrix.system.shopXcx.api.action.PayThreadPool;
-import com.matrix.system.shopXcx.api.pojo.AddShopOrderPOJO;
+import com.matrix.system.shopXcx.api.pojo.OrderCouponGroup;
 import com.matrix.system.shopXcx.api.pojo.OrderInfoQueryPOJO;
+import com.matrix.system.shopXcx.api.pojo.OrderItemDto;
+import com.matrix.system.shopXcx.api.pojo.ShopOrderDto;
+import com.matrix.system.shopXcx.api.service.OrderCouponGroupService;
 import com.matrix.system.shopXcx.api.service.ShoppingCartService;
 import com.matrix.system.shopXcx.api.service.WXShopOrderService;
 import com.matrix.system.shopXcx.api.service.WxShopCouponService;
 import com.matrix.system.shopXcx.api.tools.WxShopCouponUtil;
 import com.matrix.system.shopXcx.api.tools.WxShopOrderUtil;
 import com.matrix.system.shopXcx.api.vo.CouponReceiveInfoVO;
-import com.matrix.system.shopXcx.api.vo.ShopCartBillVo;
-import com.matrix.system.shopXcx.api.vo.ShopCartVo;
 import com.matrix.system.shopXcx.bean.*;
 import com.matrix.system.shopXcx.dao.*;
 import com.matrix.system.shopXcx.dto.DiscountExplain;
@@ -42,6 +41,7 @@
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author jyy
@@ -90,6 +90,9 @@
     private ShopActivitiesGroupJoinUserDao shopActivitiesGroupJoinUserDao;
 
     @Autowired
+    OrderCouponGroupService orderCouponGroupService;
+
+    @Autowired
     CustomerDataDictionaryDao dataDictionaryDao;
     @Value("${wx_pay_debug_onoff}")
     private boolean isDebug;
@@ -98,111 +101,84 @@
     private BusParameterSettingsDao busParameterSettingsDao;
 
     @Override
-    public BigDecimal calculationPostage(BigDecimal payPrice,Long companyId) {
+    public BigDecimal calculationPostage(BigDecimal payPrice, Long companyId) {
         BigDecimal postage = BigDecimal.ZERO;
         BusParameterSettings yf = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.PACKAGE_PRICE, companyId);
         BusParameterSettings myje = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.FREE_PACKAGE_PRICE, companyId);
-        if(yf!=null&&myje!=null){
+        if (yf != null && myje != null) {
             if (Double.parseDouble(myje.getParamValue()) > payPrice.doubleValue()) {
                 postage = new BigDecimal(yf.getParamValue());
             }
         }
-
         return postage;
     }
-
-
 
 
     /**
      * 创建订单
      *
-     * @param addShopOrderPOJO
+     * @param shopOrderDto
      * @return
      * @throws Exception
      */
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public AjaxResult createShopOrder(AddShopOrderPOJO addShopOrderPOJO) throws Exception {
+    public AjaxResult createShopOrder(ShopOrderDto shopOrderDto) throws Exception {
         BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class);
 
 
         //校验收货地址
-        ShopReceiveAddress shopReceiveAddress = shopReceiveAddressDao.selectById(addShopOrderPOJO.getReceiveAddrId());
+        ShopReceiveAddress shopReceiveAddress = shopReceiveAddressDao.selectById(shopOrderDto.getReceiveAddrId());
         if (shopReceiveAddress == null) {
             return new AjaxResult(AjaxResult.STATUS_FAIL, "请选择正确的收获地址");
         }
 
+        AjaxResult caculateResult= buildDiscountExplain(shopOrderDto);
 
-        List<ShopCartVo> cartList = shoppingCartService.findUserCartList(addShopOrderPOJO.getShopId(),ShopShoppingCart.CAR_TYPE_MICRO);
-        //购物车不能为空
-        if (CollectionUtils.isEmpty(cartList)) {
-            return new AjaxResult(AjaxResult.STATUS_FAIL, "请选择您需要购买的产品");
-        }
+
+        //计算订单优惠信息
+        DiscountExplain discountExplain= (DiscountExplain) caculateResult.getMapInfo().get("discountExplain");
+
 
 
         //取出购物车中选中的产品
         List<ShopShoppingCart> buyCart = new ArrayList<>();
         //取出购物车中没有参加店铺活动的产品,和参加了店铺活动但是活动没有达到标准的产品,用来计算是否可以使用优惠券
         List<ShopShoppingCart> notCouponuyCart = new ArrayList<>();
-        for (ShopCartVo shopCartVo : cartList) {
-            for (ShopShoppingCart shopShoppingCart : shopCartVo.getCartList()) {
-                if (shopShoppingCart.getIsSelected() == 1) {
-                    buyCart.add(shopShoppingCart);
-                    if (shopCartVo.getCoupon() == null || !shopCartVo.isSatisfactionCoupon()) {
-                        notCouponuyCart.add(shopShoppingCart);
-                    }
-                }
-            }
-        }
-
-        //计算订单优惠信息
-        DiscountExplain discountExplain = buildDiscountExplain(cartList, addShopOrderPOJO.getCouponReceiveId(), bizUser.getCompanyId());
 
 
         ShopOrder shopOrder = new ShopOrder();
         shopOrder.setCompanyId(bizUser.getCompanyId());
-        shopOrder.setStoreId(Integer.parseInt(addShopOrderPOJO.getShopId().toString()));
+        shopOrder.setStoreId(Integer.parseInt(shopOrderDto.getShopId().toString()));
         //默认设置为产品类型
         shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS);
 
         List<ShopOrderDetails> details = new ArrayList<>();
         Integer cartCount = 0;
-        for (ShopShoppingCart shopShoppingCart : buyCart) {
+        for (OrderItemDto orderItemDto : shopOrderDto.getOrderItemList()) {
             ShopOrderDetails shopOrderDetails = new ShopOrderDetails();
             shopOrderDetails.setCreateBy(AppConstance.SYSTEM_USER);
             shopOrderDetails.setUpdateBy(AppConstance.SYSTEM_USER);
-            shopOrderDetails.setpId(shopShoppingCart.getCartProductId());
-            shopOrderDetails.setsId(shopShoppingCart.getCartSkuId());
-            shopOrderDetails.setPrice(shopShoppingCart.getPrice());
-            shopOrderDetails.setPayType(shopShoppingCart.getCartType());
-            shopOrderDetails.setCount(shopShoppingCart.getCartNumber());
-            shopOrderDetails.setsTitle(shopShoppingCart.getTitle() + shopShoppingCart.getName());
-            shopOrderDetails.setDiscountAmount(BigDecimal.ZERO);
+            shopOrderDetails.setpId(orderItemDto.getProductId());
+            shopOrderDetails.setsId(orderItemDto.getSkuId());
+            shopOrderDetails.setCount(orderItemDto.getCount());
+            if(ShopOrderDetails.PAYTYPE_MICRO==orderItemDto.getPayType()){
+                shopOrderDetails.setPrice(orderItemDto.getShopSku().getPrice());
+            }else{
+                shopOrderDetails.setPrice(orderItemDto.getShopSku().getScorePrice());
+                shopOrderDetails.setScoreCount(BigDecimal.valueOf(orderItemDto.getShopSku().getScoreCount()));
+                shopOrderDetails.setTotalScoreCount(shopOrderDetails.getScoreCount().multiply(BigDecimal.valueOf(shopOrderDetails.getCount())));
+            }
             shopOrderDetails.setTotalPrice(shopOrderDetails.getPrice().multiply(BigDecimal.valueOf(shopOrderDetails.getCount())));
+
+            shopOrderDetails.setPayType(orderItemDto.getPayType());
+
+            shopOrderDetails.setsTitle(orderItemDto.getShopProduct().getTitle() + orderItemDto.getShopSku().getName());
+
+            shopOrderDetails.setDiscountAmount(BigDecimal.ZERO);
+
             details.add(shopOrderDetails);
             cartCount += shopOrderDetails.getCount();
-
-            //查询绑定的产品是否为家居产品,如果已经含家具产品则不再比较
-            if (ShopOrder.ORDER_TYPE_GOODS != shopOrder.getOrderType()) {
-                ShopSku shopSku = shopSkuDao.selectById(shopShoppingCart.getCartSkuId());
-                String stokCode = shopSku.getStockCode();
-                if (StringUtils.isNotBlank(stokCode)) {
-                    ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(Long.parseLong(stokCode));
-                    if (shoppingGoods != null) {
-                        //根据购买的产品设置订单类型
-                        if (Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(shoppingGoods.getGoodType())) {
-                            shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS);
-                        } else {
-
-                        }
-                    } else {
-                        shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS);
-                    }
-                }
-            }
-
-
         }
 
         //校验商品是否限购
@@ -215,8 +191,9 @@
         shopOrder.setUpdateBy("微信小程序生成");
         shopOrder.setCommodityPrice(discountExplain.getBillPrice());
         shopOrder.setPurchaseQuantity(cartCount);
+        shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS);
         //购买方式
-        shopOrder.setShippingMethod(addShopOrderPOJO.getDeliverySelect());
+        shopOrder.setShippingMethod(shopOrderDto.getDeliverySelect());
         //生成订单号
         shopOrder.setOrderNo(WxUtils.getOrderNum());
         //设置支付状态
@@ -231,7 +208,7 @@
         //客户姓名
         shopOrder.setUserName(shopReceiveAddress.getAddrLiaisonman());
         //备注
-        shopOrder.setRemarks(addShopOrderPOJO.getRemarks());
+        shopOrder.setRemarks(shopOrderDto.getRemarks());
         //删除标识
         shopOrder.setDelFlag(AppConstance.DATA_USEABLE);
         //微信订单号
@@ -244,11 +221,11 @@
         shopOrder.setOrderMoney(discountExplain.getPayPrice());
         Gson g = new GsonBuilder().create();
         shopOrder.setDiscountExplain(g.toJson(discountExplain));
-        shopOrder.setDiscountAmount(discountExplain.getActivity().add(discountExplain.getCoupon()));
+        shopOrder.setDiscountAmount(discountExplain.getActivityPrice().add(discountExplain.getCouponPrice()));
         shopOrder.setCompanyId(HostInterceptor.getCompanyId());
         shopOrderDao.insert(shopOrder);
 
-        wxShopOrderUtil.insertSendPackageInfo(shopOrder, addShopOrderPOJO.getDeliverySelect(), shopReceiveAddress);
+        wxShopOrderUtil.insertSendPackageInfo(shopOrder, shopOrderDto.getDeliverySelect(), shopReceiveAddress);
         //给订单详情表添加订单ID
         for (ShopOrderDetails shopOrderDetails : details) {
             shopOrderDetails.setOrderId(shopOrder.getId());
@@ -257,11 +234,11 @@
             shopOrderDetailsDao.batchInsert(details);
         }
         //更新使用的优惠券状态
-        if (addShopOrderPOJO.getCouponReceiveId() != null) {
+        if (shopOrderDto.getCouponReceiveId() != null) {
             ShopCouponRecord record = new ShopCouponRecord();
             record.setIsUsing(AppConstance.MY_COUPON_USE);
             record.setOrderId(shopOrder.getId());
-            record.setId(addShopOrderPOJO.getCouponReceiveId());
+            record.setId(shopOrderDto.getCouponReceiveId());
             shopCouponRecordDao.updateByModel(record);
         }
 
@@ -277,28 +254,121 @@
     }
 
     @Override
-    public DiscountExplain buildDiscountExplain(List<ShopCartVo> cartList, Integer receiveId, Long companyId) {
-        ShopCartBillVo shopCartBill = shoppingCartService.buildShopCartBillVo(cartList);
-        DiscountExplain discountExplain = new DiscountExplain();
-        discountExplain.setActivity(shopCartBill.getBillCouponTotal());
-        discountExplain.setBillPrice(shopCartBill.getSrcTotal());
-        discountExplain.setPayPrice(shopCartBill.getBillTotal());
-        //计算优惠券
-        if (receiveId != null) {
-            CouponReceiveInfoVO couponReceiveInfoVO = shopCouponRecordDao.selectMyCouponByReceiveId(receiveId);
-            if (couponReceiveInfoVO != null) {
-                BigDecimal payPrice = discountExplain.getPayPrice().subtract(couponReceiveInfoVO.getOffsetAmount());
-                payPrice = payPrice.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : payPrice;
-                discountExplain.setPayPrice(payPrice);
-                discountExplain.setCoupon(couponReceiveInfoVO.getOffsetAmount());
-            }
+    public AjaxResult buildDiscountExplain(ShopOrderDto shopOrderDto) {
+
+        if(CollUtil.isEmpty(shopOrderDto.getOrderItemList())){
+            return AjaxResult.buildFailInstance("请选择购买的明细");
         }
 
-        discountExplain.setPostage(calculationPostage(discountExplain.getPayPrice(),companyId));
+        //订单计价说明
+        DiscountExplain discountExplain = new DiscountExplain();
+        //账单总金额
+        BigDecimal billPrice = BigDecimal.ZERO;
+        //活动优惠金额
+        BigDecimal activityTotal = BigDecimal.ZERO;
+        //优惠券惠金额
+        BigDecimal couponPrice = BigDecimal.ZERO;
+        //支付总积分
+        Integer scoreCount=0;
 
-        //计算实际支付
-        discountExplain.setPayPrice(discountExplain.getPayPrice().add(discountExplain.getPostage()));
-        return discountExplain;
+        BizUser bizUser = redisUserLoginUtils.getLoginUser(BizUser.class);
+
+        //计算购物车中物品的优惠信息
+        List<OrderItemDto> orderItemDtos = shopOrderDto.getOrderItemList()
+                .stream().map(orderItemDto -> {
+                    return orderCouponGroupService.buildOrderCouponElement(orderItemDto);
+                })
+                .collect(Collectors.toList());
+        //计算未优惠的总金额
+        for (OrderItemDto orderItemDto :orderItemDtos ){
+            if(orderItemDto.getPayType()==ShopShoppingCart.CAR_TYPE_MICRO){
+                billPrice=billPrice.add(orderItemDto.getShopSku().getPrice().multiply(new BigDecimal(orderItemDto.getCount())));
+            }else{
+                billPrice=billPrice.add(orderItemDto.getShopSku().getScorePrice().multiply(new BigDecimal(orderItemDto.getCount())));
+                scoreCount+=orderItemDto.getShopSku().getScoreCount()*orderItemDto.getCount();
+            }
+        }
+        discountExplain.setScorePay(scoreCount);
+
+
+        //计算用户的产品可以参与的店铺优惠活动分组
+        List<ShopCoupon> shopActiveList = new ArrayList<>();//记录用户可以参与的门店活动
+        List<OrderCouponGroup> orderCouponGroupList = new ArrayList<>();
+        int conditionsGroupCount = 0;
+        if (shopOrderDto.getJoinActive() == ShopOrderDto.JOIN_ACTIVE) {//用户参与优惠活动
+            orderCouponGroupList = orderCouponGroupService.buildOrderCouponGroupList(orderItemDtos);
+            conditionsGroupCount = orderCouponGroupList.stream().map(orderCouponGroup -> {
+                if (orderCouponGroup.isSatisfactionCoupon()&&orderCouponGroup.getCoupon()!=null) {
+                    shopActiveList.add(orderCouponGroup.getCoupon());
+                    return 1;
+                } else {
+                    return 0;
+                }
+            }).mapToInt(Integer::intValue).sum();
+        }
+        if(CollUtil.isNotEmpty(shopActiveList)){
+            activityTotal=shopActiveList.stream().map(ShopCoupon:: getOffsetAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
+        }
+
+        //门店活动优惠金额
+        discountExplain.setActivityPrice(activityTotal);
+
+
+        List<CouponReceiveInfoVO> usefulCoupon = new ArrayList<>();
+        CouponReceiveInfoVO shopCoupon = new CouponReceiveInfoVO();
+        //满足店铺活动的订单不能使用优惠券
+        if (conditionsGroupCount > 0) {
+            //计算可用优惠券
+            usefulCoupon = wxShopCouponService.getCartVoCouponList(bizUser.getCompanyId(), orderItemDtos);
+            //获取用户使用的优惠券
+            if (shopOrderDto.getCouponReceiveId() == null) {
+                //如果用户没有选择优惠券则默认选优惠金额最高的
+                //计算使用优惠券后的价格
+                if (CollectionUtils.isNotEmpty(usefulCoupon)) {
+                    //根据优惠券ID用户ID查询优惠券信息
+                    shopCoupon = usefulCoupon.get(0);
+                }
+            } else if (shopOrderDto.getCouponReceiveId() != 1) {
+                //用户选择了优惠券
+                shopCoupon = shopCouponRecordDao.selectMyCouponByReceiveId(shopOrderDto.getCouponReceiveId());
+            } else {
+                //用户不使用优惠券
+            }
+            //计算优惠券
+            if (shopCoupon.getCouponId() != null) {
+                couponPrice=shopCoupon.getOffsetAmount();
+            }
+            //优惠券金额
+            discountExplain.setCouponPrice(couponPrice);
+        }
+
+
+
+        //计算运费
+        discountExplain.setPostage(calculationPostage(discountExplain.getPayPrice(), HostInterceptor.getCompanyId()));
+
+
+
+        //账单总金额
+        discountExplain.setBillPrice(billPrice.add(discountExplain.getPostage()));
+
+        BigDecimal payPrice=discountExplain.getBillPrice().subtract(activityTotal).subtract(couponPrice);
+        //应付金额
+        discountExplain.setPayPrice(payPrice.doubleValue()>0?payPrice:BigDecimal.ONE);
+
+        AjaxResult result = AjaxResult.buildSuccessInstance("");
+        //结算金额信息
+        result.putInMap("discountExplain", discountExplain);
+        //用户优惠券
+        result.putInMap("usefulCoupon", usefulCoupon);
+        //用户选中的优惠券
+        result.putInMap("shopCoupon", shopCoupon);
+
+        //店铺优惠活动
+        result.putInMap("shopActiveList", shopActiveList);
+
+        return result;
+
     }
 
 
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesGroupServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesGroupServiceImpl.java
index 755f560..0e06b76 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesGroupServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesGroupServiceImpl.java
@@ -396,8 +396,8 @@
         DiscountExplain discountExplain = new DiscountExplain();
         discountExplain.setPayPrice(payPrice);
         discountExplain.setPostage(postPrice);
-        discountExplain.setActivity(BigDecimal.ZERO);
-        discountExplain.setCoupon(BigDecimal.ZERO);
+        discountExplain.setActivityPrice(BigDecimal.ZERO);
+        discountExplain.setCouponPrice(BigDecimal.ZERO);
         discountExplain.setBillPrice(payPrice);
         Gson g = new GsonBuilder().create();
         shopOrder.setDiscountExplain(g.toJson(discountExplain));
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesSecKillServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesSecKillServiceImpl.java
index 1453dca..b79a20b 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesSecKillServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopActivitiesSecKillServiceImpl.java
@@ -210,8 +210,8 @@
         DiscountExplain discountExplain = new DiscountExplain();
         discountExplain.setPayPrice(payPrice);
         discountExplain.setPostage(postPrice);
-        discountExplain.setActivity(BigDecimal.ZERO);
-        discountExplain.setCoupon(BigDecimal.ZERO);
+        discountExplain.setActivityPrice(BigDecimal.ZERO);
+        discountExplain.setCouponPrice(BigDecimal.ZERO);
         discountExplain.setBillPrice(payPrice);
         Gson g = new GsonBuilder().create();
         shopOrder.setDiscountExplain(g.toJson(discountExplain));
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopCouponServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopCouponServiceImpl.java
index bf87285..088d320 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopCouponServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/service/impl/WxShopCouponServiceImpl.java
@@ -1,20 +1,20 @@
 package com.matrix.system.shopXcx.api.service.impl;
 
+import com.matrix.biz.bean.BizUser;
+import com.matrix.component.redis.RedisUserLoginUtils;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.core.pojo.PaginationVO;
 import com.matrix.core.tools.LogUtil;
 import com.matrix.core.tools.StringUtils;
-import com.matrix.biz.bean.BizUser;
-import com.matrix.component.redis.RedisUserLoginUtils;
 import com.matrix.system.common.constance.AppConstance;
-
-import com.matrix.system.shopXcx.bean.*;
-import com.matrix.system.shopXcx.dao.*;
+import com.matrix.system.shopXcx.api.pojo.OrderCouponGroup;
+import com.matrix.system.shopXcx.api.pojo.OrderItemDto;
 import com.matrix.system.shopXcx.api.service.WxShopCouponService;
 import com.matrix.system.shopXcx.api.tools.WxShopCouponUtil;
 import com.matrix.system.shopXcx.api.tools.WxShopOrderUtil;
 import com.matrix.system.shopXcx.api.vo.CouponReceiveInfoVO;
-import com.matrix.system.shopXcx.api.vo.ShopCartVo;
+import com.matrix.system.shopXcx.bean.*;
+import com.matrix.system.shopXcx.dao.*;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -54,9 +54,10 @@
      *
      * @return
      */
-    public List<CouponReceiveInfoVO> getCartVoCouponList(Long companyId,List<ShopShoppingCart> shopShoppingCarts) {
+    public List<CouponReceiveInfoVO> getCartVoCouponList(Long companyId,List<OrderItemDto> OrderItemDtos){
 
-        //可用优惠券列表
+
+    //可用优惠券列表
         List<CouponReceiveInfoVO> shopCoupons = new ArrayList<>();
 
 
@@ -77,7 +78,7 @@
 
 
             //定义购物车优惠分组
-            List<ShopCartVo> cartList = new ArrayList<>();
+            List<OrderCouponGroup> cartList = new ArrayList<>();
 
             // 记录所有优惠券,一个优惠券(活动)表示一组
             Map<Integer, ShopCoupon> shopCouponMap = new HashMap<>();
@@ -86,24 +87,24 @@
             for (int i = 0; i < userAllCoupon.size(); i++) {
 
                 CouponReceiveInfoVO couponReceiveInfoVO = userAllCoupon.get(i);
-                ShopCartVo shopCarVo = new ShopCartVo();
+                OrderCouponGroup shopCarVo = new OrderCouponGroup();
                 shopCarVo.setCouponReceiveInfoVO(couponReceiveInfoVO);
-                shopCarVo.setCartList(new ArrayList<>());
+                shopCarVo.setOrderItemDtos(new ArrayList<>());
                 cartList.add(i, shopCarVo);
 
 
-                for (ShopShoppingCart shoppingCart : shopShoppingCarts) {
+                for (OrderItemDto orderItemDto : OrderItemDtos) {
 
                     // 如果匹配到的产品已经出现在其他优惠组中,则需要判断是否移除之前的组
                     boolean needRemove = false;
 
 
                     //找到产品所有的优惠券
-                    List<ShopCoupon> productShopCoupons = getCouponListByProductId(shoppingCart.getCartProductId());
+                    List<ShopCoupon> productShopCoupons = getCouponListByProductId(orderItemDto.getProductId());
                     for (ShopCoupon productShopCoupon : productShopCoupons) {
                         if (couponReceiveInfoVO.getCouponId().equals(productShopCoupon.getId())) {
-                            LogUtil.debug("购物车" + shoppingCart.getName() + "和优惠券" + couponReceiveInfoVO.getcName() + "匹配");
-                            shopCarVo.getCartList().add(shoppingCart);
+                            LogUtil.debug("购物车" + orderItemDto.getProductId() + "和优惠券" + couponReceiveInfoVO.getcName() + "匹配");
+                            shopCarVo.getOrderItemDtos().add(orderItemDto);
                             break;
                         }
                     }
@@ -113,9 +114,9 @@
             }
 
             //3.计算各组的金额是否满足,把满足的优惠券全部返回
-            for (ShopCartVo shopCartVo : cartList) {
-                if (shopCartVo.isSatisfactionCoupon() && CollectionUtils.isNotEmpty(shopCartVo.getCartList())) {
-                    shopCoupons.add(shopCartVo.getCouponReceiveInfoVO());
+            for (OrderCouponGroup orderCouponGroup : cartList) {
+                if (orderCouponGroup.isSatisfactionCoupon() && CollectionUtils.isNotEmpty(orderCouponGroup.getOrderItemDtos())) {
+                    shopCoupons.add(orderCouponGroup.getCouponReceiveInfoVO());
                 }
             }
         }
@@ -125,19 +126,19 @@
 
 
 
-    private void countPrice(ShopCartVo shopCartVo) {
-        List<ShopShoppingCart> cartList = shopCartVo.getCartList();
+    private void countPrice(OrderCouponGroup orderCouponGroup) {
+        List<OrderItemDto> orderItemDtoList = orderCouponGroup.getOrderItemDtos();
         // 计算总价
         BigDecimal sum = BigDecimal.ZERO;
-        for (ShopShoppingCart shopShoppingCart : cartList) {
-            sum = sum.add(shopShoppingCart.getPrice().multiply(BigDecimal.valueOf(shopShoppingCart.getCartNumber())));
+        for (OrderItemDto orderItemDto : orderItemDtoList) {
+            sum = sum.add(orderItemDto.getShopSku().getPrice().multiply(BigDecimal.valueOf(orderItemDto.getCount())));
         }
         // 存在优惠券
-        if (sum.compareTo(shopCartVo.getCouponReceiveInfoVO().getMinAmount()) >= 0) {
+        if (sum.compareTo(orderCouponGroup.getCouponReceiveInfoVO().getMinAmount()) >= 0) {
             //标记为合理分组
-            shopCartVo.setSatisfactionCoupon(true);
+            orderCouponGroup.setSatisfactionCoupon(true);
         } else {
-            shopCartVo.setSatisfactionCoupon(false);
+            orderCouponGroup.setSatisfactionCoupon(false);
         }
     }
 
@@ -299,7 +300,6 @@
      * 通过优惠券标签获取优惠券列表
      *
      * @param tag 标签名称
-     * @param shopId
      * @return
      */
     @Override
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/tools/WxShopOrderUtil.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/tools/WxShopOrderUtil.java
index 7c9a66b..e0b6c40 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/tools/WxShopOrderUtil.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/tools/WxShopOrderUtil.java
@@ -1,16 +1,15 @@
 package com.matrix.system.shopXcx.api.tools;
 
 import com.matrix.system.common.bean.CustomerDataDictionary;
-import com.matrix.system.common.dao.CustomerDataDictionaryDao;
 import com.matrix.biz.service.BizUserService;
 import com.matrix.component.tools.WxTempLateMsgUtil;
 import com.matrix.core.exception.GlobleException;
 import com.matrix.core.tools.LogUtil;
 import com.matrix.core.tools.StringUtils;
 import com.matrix.system.common.constance.AppConstance;
-import com.matrix.system.shopXcx.api.pojo.AddShopOrderPOJO;
+import com.matrix.system.shopXcx.api.pojo.ShopOrderDto;
 import com.matrix.system.shopXcx.api.pojo.OrderPostageInfoPOJO;
-import com.matrix.system.shopXcx.api.pojo.OrderProductSkuPOJO;
+import com.matrix.system.shopXcx.api.pojo.OrderItemDto;
 import com.matrix.system.shopXcx.api.service.WxShopMemberDayService;
 import com.matrix.system.shopXcx.bean.*;
 import com.matrix.system.shopXcx.dao.*;
@@ -95,12 +94,12 @@
 
     /**
      * 处理产品规格信息
-     * @param addShopOrderPOJO
+     * @param shopOrderDto
      */
-    public List<ShopOrderDetails> processProductSkuInfo(ShopOrder shopOrder, AddShopOrderPOJO addShopOrderPOJO,
+    public List<ShopOrderDetails> processProductSkuInfo(ShopOrder shopOrder, ShopOrderDto shopOrderDto,
                                                         ShopCoupon shopCoupon) {
         List<ShopOrderDetails> resList = new ArrayList<>();
-        List<OrderProductSkuPOJO> skuList = addShopOrderPOJO.getSkuList();
+        List<OrderItemDto> skuList = shopOrderDto.getOrderItemList();
         if (CollectionUtils.isEmpty(skuList)) {
             return resList;
         }
@@ -108,9 +107,9 @@
         //设置购买数量
         int total = 0;
         BigDecimal commodityMoney = new BigDecimal("0");
-        for (OrderProductSkuPOJO orderProductSkuPOJO : skuList) {
-            ids.add(orderProductSkuPOJO.getSkuId());
-            total += orderProductSkuPOJO.getCount();
+        for (OrderItemDto orderItemDto : skuList) {
+            ids.add(orderItemDto.getSkuId());
+            total += orderItemDto.getCount();
         }
         shopOrder.setPurchaseQuantity(total);
         List<ShopSku> contrastList = shopSkuDao.selectByIds(ids);
@@ -131,10 +130,10 @@
 
         BigDecimal couponTotalMoney = new BigDecimal("0");
         Double discountRate = wxShopMemberDayService.getMemberDay();
-        for (OrderProductSkuPOJO orderProductSkuPOJO : skuList) {
+        for (OrderItemDto orderItemDto : skuList) {
             boolean isExist = false;
             for (ShopSku shopSku : contrastList) {
-                if (shopSku.getId().equals(orderProductSkuPOJO.getSkuId())) {
+                if (shopSku.getId().equals(orderItemDto.getSkuId())) {
                     isExist = true;
                     ShopOrderDetails shopOrderDetails = new ShopOrderDetails();
                     shopOrderDetails.setCreateBy(AppConstance.SYSTEM_USER);
@@ -142,9 +141,9 @@
                     shopOrderDetails.setpId(shopSku.getPId());
                     shopOrderDetails.setsId(shopSku.getId());
                     shopOrderDetails.setPrice(shopSku.getPrice());
-                    shopOrderDetails.setCount(orderProductSkuPOJO.getCount());
+                    shopOrderDetails.setCount(orderItemDto.getCount());
                     BigDecimal price = new BigDecimal(shopSku.getPrice().toString());
-                    BigDecimal count = new BigDecimal(orderProductSkuPOJO.getCount().toString());
+                    BigDecimal count = new BigDecimal(orderItemDto.getCount().toString());
                     shopOrderDetails.setsTitle(shopSku.getName());
                     resList.add(shopOrderDetails);
 
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/ShopCartGroupVo.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/ShopCartGroupVo.java
new file mode 100644
index 0000000..0658267
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/ShopCartGroupVo.java
@@ -0,0 +1,46 @@
+package com.matrix.system.shopXcx.api.vo;
+
+import com.matrix.system.shopXcx.bean.ShopCoupon;
+import com.matrix.system.shopXcx.bean.ShopShoppingCart;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 购物车前台展示对象
+ */
+@Data
+public class ShopCartGroupVo {
+
+	private ShopCoupon coupon;
+
+	//是否满足优惠
+	private boolean satisfactionCoupon;
+
+
+	private List<ShopShoppingCart> cartList=new ArrayList<>();
+
+
+	//提示语
+	private String msg="";
+
+	//优惠小计金额
+	private BigDecimal subtotal=BigDecimal.ZERO;
+
+	//原价
+	private BigDecimal srcPrice=BigDecimal.ZERO;
+
+	//优惠金额
+	private BigDecimal  couponPrice=BigDecimal.ZERO;
+	/**
+	 * 抵用积分
+	 */
+	private BigDecimal scorePay = BigDecimal.ZERO;
+
+	private CouponReceiveInfoVO couponReceiveInfoVO;
+
+
+
+}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/ShopCartVo.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/ShopCartVo.java
index 90324ed..6d1733e 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/ShopCartVo.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/vo/ShopCartVo.java
@@ -2,6 +2,7 @@
 
 import com.matrix.system.shopXcx.bean.ShopCoupon;
 import com.matrix.system.shopXcx.bean.ShopShoppingCart;
+import lombok.Data;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -9,102 +10,33 @@
 /**
  * 购物车前台展示对象
  */
+@Data
 public class ShopCartVo {
 
-	private ShopCoupon coupon;
+    private ShopCoupon coupon;
 
-	private CouponReceiveInfoVO couponReceiveInfoVO;
+    private CouponReceiveInfoVO couponReceiveInfoVO;
 
-	public CouponReceiveInfoVO getCouponReceiveInfoVO() {
-		return couponReceiveInfoVO;
-	}
 
-	public void setCouponReceiveInfoVO(CouponReceiveInfoVO couponReceiveInfoVO) {
-		this.couponReceiveInfoVO = couponReceiveInfoVO;
-	}
+    //是否满足优惠
+    private boolean satisfactionCoupon;
 
-	//是否满足优惠
-	private boolean satisfactionCoupon;
+    private List<ShopShoppingCart> cartList;
 
-	private List<ShopShoppingCart> cartList;
+    //提示语
+    private String msg = "";
 
-	//提示语
-	private String msg="";
+    //优惠小计金额
+    private BigDecimal subtotal = BigDecimal.ZERO;
 
-	//优惠小计金额
-	private BigDecimal subtotal=BigDecimal.ZERO;
+    //原价
+    private BigDecimal srcPrice = BigDecimal.ZERO;
 
-	//原价
-	private BigDecimal srcPrice=BigDecimal.ZERO;
+    //优惠金额
+    private BigDecimal couponPrice = BigDecimal.ZERO;
+    /**
+     * 抵用积分
+     */
+    private BigDecimal scorePay = BigDecimal.ZERO;
 
-	//优惠金额
-	private BigDecimal  couponPrice=BigDecimal.ZERO;
-	/**
-	 * 抵用积分
-	 */
-	private BigDecimal scorePay = BigDecimal.ZERO;
-
-	public ShopCoupon getCoupon() {
-		return coupon;
-	}
-
-	public void setCoupon(ShopCoupon coupon) {
-		this.coupon = coupon;
-	}
-
-	public boolean isSatisfactionCoupon() {
-		return satisfactionCoupon;
-	}
-
-	public void setSatisfactionCoupon(boolean satisfactionCoupon) {
-		this.satisfactionCoupon = satisfactionCoupon;
-	}
-
-	public List<ShopShoppingCart> getCartList() {
-		return cartList;
-	}
-
-	public void setCartList(List<ShopShoppingCart> cartList) {
-		this.cartList = cartList;
-	}
-
-	public String getMsg() {
-		return msg;
-	}
-
-	public void setMsg(String msg) {
-		this.msg = msg;
-	}
-
-	public BigDecimal getSubtotal() {
-		return subtotal;
-	}
-
-	public void setSubtotal(BigDecimal subtotal) {
-		this.subtotal = subtotal;
-	}
-
-	public BigDecimal getSrcPrice() {
-		return srcPrice;
-	}
-
-	public void setSrcPrice(BigDecimal srcPrice) {
-		this.srcPrice = srcPrice;
-	}
-
-	public BigDecimal getCouponPrice() {
-		return couponPrice;
-	}
-
-	public BigDecimal getScorePay() {
-		return scorePay;
-	}
-
-	public void setScorePay(BigDecimal scorePay) {
-		this.scorePay = scorePay;
-	}
-
-	public void setCouponPrice(BigDecimal couponPrice) {
-		this.couponPrice = couponPrice;
-	}
 }
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/dao/ShopShoppingCartDao.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/dao/ShopShoppingCartDao.java
index d8ef5de..c568f5b 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/dao/ShopShoppingCartDao.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/dao/ShopShoppingCartDao.java
@@ -36,7 +36,7 @@
 	
 	public ShopShoppingCart  selectById(Integer cartId);
 
-	public List<ShopShoppingCart> selectByCartUserId(@Param("shopId")Long shopId, @Param("cartUserId") String cartUserId,@Param("cartType") Integer cartType);
+	public List<ShopShoppingCart> selectByCartUserId(@Param("shopId")Long shopId, @Param("cartUserId") String cartUserId);
 	
 	public ShopShoppingCart  selectForUpdate(Integer cartId);
 
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/dto/DiscountExplain.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/dto/DiscountExplain.java
index fb48cdf..a9519aa 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/dto/DiscountExplain.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/dto/DiscountExplain.java
@@ -1,10 +1,13 @@
 package com.matrix.system.shopXcx.dto;
 
+import lombok.Data;
+
 import java.math.BigDecimal;
 
 /**
  * 订单优惠说明
  */
+@Data
 public class DiscountExplain {
 
     /**
@@ -15,13 +18,13 @@
     /**
      * 优惠券金额
      */
-    private  BigDecimal coupon=BigDecimal.ZERO;
+    private  BigDecimal couponPrice =BigDecimal.ZERO;
 
 
     /**
      * 活动满减金额
      */
-    private BigDecimal activity=BigDecimal.ZERO;
+    private BigDecimal activityPrice =BigDecimal.ZERO;
 
     /**
      * 运费
@@ -32,44 +35,9 @@
      * 最终支付金额
      */
     private BigDecimal payPrice=BigDecimal.ZERO;
+    /**
+     * 最终支付积分
+     */
+    private Integer scorePay;
 
-    public BigDecimal getBillPrice() {
-        return billPrice;
-    }
-
-    public void setBillPrice(BigDecimal billPrice) {
-        this.billPrice = billPrice;
-    }
-
-    public BigDecimal getCoupon() {
-        return coupon;
-    }
-
-    public void setCoupon(BigDecimal coupon) {
-        this.coupon = coupon;
-    }
-
-    public BigDecimal getActivity() {
-        return activity;
-    }
-
-    public void setActivity(BigDecimal activity) {
-        this.activity = activity;
-    }
-
-    public BigDecimal getPostage() {
-        return postage;
-    }
-
-    public void setPostage(BigDecimal postage) {
-        this.postage = postage;
-    }
-
-    public BigDecimal getPayPrice() {
-        return payPrice;
-    }
-
-    public void setPayPrice(BigDecimal payPrice) {
-        this.payPrice = payPrice;
-    }
 }
diff --git a/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopOrderDetailsDao.xml b/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopOrderDetailsDao.xml
index ffb89a5..46254ee 100644
--- a/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopOrderDetailsDao.xml
+++ b/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopOrderDetailsDao.xml
@@ -50,9 +50,7 @@
 		<!--规格信息-->
 		<association property="shopSku" column="s_id"
 			select="com.matrix.system.shopXcx.dao.ShopSkuDao.selectById"/>
-		<!--查询生产企业-->
-		<association property="productionEnterprise" column="{pId=p_id}"
-					 select="selectProductionEnterpriseByPid"/>
+
 	</resultMap>
 
 	

--
Gitblit v1.9.1