Browse Source

子订单重分

zhijiezhao 3 years ago
parent
commit
0b6323518c

+ 3 - 2
src/main/java/com/caimei365/order/controller/OrderSubmitApi.java

@@ -42,8 +42,9 @@ public class OrderSubmitApi {
      *                   "orderSeen":               //订单对机构可见度,1可见,2不可见
      *                  "orderInfo": [              //【订单商品】
      *                      { "shopId":1001,                         // 供应商Id
-     *                          "note":备注,
-     *                          "productInfo":[                      // 商品id,数量,赠品数,商品类型
+     *                        "splitCode:E123123"       //分账号
+     *                        "note":备注,
+     *                        "productInfo":[                      // 商品id,数量,赠品数,商品类型
      *                              {"productId": 2789, "productNum": 1, "presentNum":0,"productType":2},
      *                              {"productId": 2789, "productNum": 1, "presentNum":0,"productType":0}
      *                          ]

+ 2 - 2
src/main/java/com/caimei365/order/mapper/CartClubMapper.java

@@ -58,7 +58,7 @@ public interface CartClubMapper {
      * 根据商品Ids获取购物车供应商列表
      * @param userId 用户Id
      */
-    List<CartShopVo> getCartShopsByProductIds(@Param("userId") Integer userId, @Param("productIds") List<String> productIds);
+    List<CartShopVo> getCartShopsByProductIds(@Param("userId") Integer userId, @Param("productIds") List<String> productIds,@Param("status")Integer status);
 
     /**
      * 根据商品ids获取供应商列表
@@ -70,7 +70,7 @@ public interface CartClubMapper {
      * 根据商品Ids获取购物车已上架商品列表
      * @param userId 用户Id
      */
-    List<CartItemVo> getCartProductsByShopIdAndProductIds(@Param("userId") Integer userId,@Param("shopId")  Integer shopId, @Param("productIds") List<String> productIds);
+    List<CartItemVo> getCartProductsByShopIdAndProductIds(@Param("userId") Integer userId,@Param("shopId")  Integer shopId, @Param("productIds") List<String> productIds,@Param("splitCode")String splitCode);
 
     /**
      * 根据商品id获取已上架商品列表

+ 4 - 0
src/main/java/com/caimei365/order/model/po/OrderProductPo.java

@@ -224,4 +224,8 @@ public class OrderProductPo implements Serializable {
      * 超级会员优惠
      */
     private Double svipReduction;
+    /**
+     * 商品分账号
+     */
+    private String splitCode;
 }

+ 4 - 0
src/main/java/com/caimei365/order/model/po/OrderShopPo.java

@@ -129,4 +129,8 @@ public class OrderShopPo implements Serializable {
      * 已付款金额
      */
     private Double payedShopAmount;
+    /**
+     * 子订单收款商户号
+     */
+    private String splitCode;
 }

+ 4 - 0
src/main/java/com/caimei365/order/model/vo/CartItemVo.java

@@ -155,4 +155,8 @@ public class CartItemVo implements Serializable {
      * 购物车该商品总优惠金额
      */
     private Double svipTotalReducedPrice;
+    /**
+     * 商品分账号
+     */
+    private String splitCode;
 }

+ 4 - 0
src/main/java/com/caimei365/order/model/vo/CartShopVo.java

@@ -63,4 +63,8 @@ public class CartShopVo implements Serializable {
      * 前端勾选状态
      */
     private Boolean isChecked;
+    /**
+     * 商品分帐号
+     */
+    private String splitCode;
 }

+ 14 - 6
src/main/java/com/caimei365/order/service/impl/CartClubServiceImpl.java

@@ -25,6 +25,7 @@ import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -883,8 +884,14 @@ public class CartClubServiceImpl implements CartClubService {
             productIdList.add(productIds);
         }
 
-        // 购物车商品的供应商列表
-        List<CartShopVo> shopList = cartClubMapper.getCartShopsByProductIds(userId, productIdList);
+        // 购物车商品的分帐号分组的供应商列表
+        // 1带分账号,2不带
+        List<CartShopVo> shopList = cartClubMapper.getCartShopsByProductIds(userId, productIdList,1);
+        int firstSize = shopList.size();
+        shopList.removeIf(s->StringUtils.isBlank(s.getSplitCode()));
+        if(firstSize!=shopList.size()){
+            shopList=cartClubMapper.getCartShopsByProductIds(userId, productIdList,2);
+        }
         if (null != shopList && shopList.size() > 0) {
             // 遍历供应商列表
             List<String> finalIdList = productIdList;//购物车商品id列表
@@ -912,7 +919,7 @@ public class CartClubServiceImpl implements CartClubService {
                     }
                     // 供应商下商品列表
                     // 过滤保存已上架商品
-                    List<CartItemVo> productList = cartClubMapper.getCartProductsByShopIdAndProductIds(userId, shop.getShopId(), finalIdList);
+                    List<CartItemVo> productList = cartClubMapper.getCartProductsByShopIdAndProductIds(userId, shop.getShopId(), finalIdList,shop.getSplitCode());
                     if (null != productList && productList.size() > 0) {
                         // 去除不可见商品,visibility商品可见度: 3:所有人可见,2:普通机构可见,1:会员机构可见,4:仅医美机构可见
                         productList.removeIf(cartItemVo -> !(cartItemVo.getVisibility() == 3 || cartItemVo.getVisibility() == 2 || (cartItemVo.getVisibility() == 1 && (finalUserIdentity == 2 || svipUserFlag)) || (cartItemVo.getVisibility() == 4 && finalUserClubType == 1)));
@@ -1098,6 +1105,7 @@ public class CartClubServiceImpl implements CartClubService {
         }
         // 总促销计算
         // 满减满赠叠加计算
+        List<CartShopVo> finalShopList = shopList;
         totalPromotions.forEach(promotions -> {
             // 该促销内商品总价
             double touchPrice = promotions.getProductList().stream().mapToDouble(product -> product.getNumber() * product.getPrice()).sum();
@@ -1132,7 +1140,7 @@ public class CartClubServiceImpl implements CartClubService {
                     promotions.getGiftList().forEach(gift -> {
                         if (shopIds.contains(gift.getShopId())) {
                             // 赠品在当前订单内的供应商下
-                            shopList.forEach(shop -> {
+                            finalShopList.forEach(shop -> {
                                 if (shop.getShopId().equals(gift.getShopId())) {
                                     shop.getCartList().add(gift);
                                 }
@@ -1143,7 +1151,7 @@ public class CartClubServiceImpl implements CartClubService {
                             shopIds.add(giftShop.getShopId());
                             giftShop.setCartList(new ArrayList<>());
                             giftShop.getCartList().add(gift);
-                            shopList.add(giftShop);
+                            finalShopList.add(giftShop);
                         }
                     });
                 }
@@ -1161,7 +1169,7 @@ public class CartClubServiceImpl implements CartClubService {
 
         // 包装返回数据
         Map<String, Object> resultData = new HashMap<>();
-        resultData.put("list", shopList);
+        resultData.put("list", finalShopList);
         resultData.put("kindCount", kindCount);
         resultData.put("totalCount", totalCount);
         resultData.put("totalPrice", totalPrice);

+ 27 - 6
src/main/java/com/caimei365/order/service/impl/SubmitServiceImpl.java

@@ -74,8 +74,11 @@ public class SubmitServiceImpl implements SubmitService {
      *                  "cartType":3,               //购买类型:(1自主下单(购物车),2自主下单(立即购买),3协销下单)
      *                  "serviceProviderId": 1378,  //协销ID(小程序忽略)
      *                  "clubCouponId": ""          //优惠券Id
+     *                  <p>
+     *                  购物车结算/order/club/cart/settlement组装商品
      *                  "orderInfo": [              //【订单商品】
      *                  { "shopId":1001,                         // 供应商Id
+     *                  "splitCode:E123123"       //分账号
      *                  "note":备注,
      *                  "productInfo":[                      // 商品id,数量,赠品数,商品类型
      *                  {"productId": 2789, "productNum": 1, "presentNum":0,"productType":2},
@@ -377,6 +380,8 @@ public class SubmitServiceImpl implements SubmitService {
         boolean secondHandOrderFlag = false;
         // 是否包含活动商品
         boolean hasActProductFlag = false;
+        // 是否能线上支付
+        boolean onlinePay = true;
         //促销活动ids
         List<Integer> promotionsIds = new ArrayList<>();
         // 促销活动信息
@@ -391,10 +396,14 @@ public class SubmitServiceImpl implements SubmitService {
         for (Object infoObject : orderInfo) {
             JSONObject shopInfo = (JSONObject) infoObject;
             Integer shopId = (Integer) shopInfo.get("shopId");
+            String splitCode = (String) shopInfo.get("splitCode");
             String shopNote = (String) shopInfo.get("note");
             if (null == shopId) {
                 return ResponseJson.error("供应商数据异常!", null);
             }
+            if(StringUtils.isBlank(splitCode)){
+                onlinePay = false;
+            }
             JSONArray productArr = (JSONArray) shopInfo.get("productInfo");
             if (null == productArr) {
                 return ResponseJson.error("订单商品数据异常!", null);
@@ -405,6 +414,7 @@ public class SubmitServiceImpl implements SubmitService {
              * 初始化子订单
              */
             OrderShopPo shopOrder = new OrderShopPo();
+            shopOrder.setSplitCode(splitCode);
             shopOrder.setShopId(shopId);
             shopOrder.setShopName(shopName);
             shopOrder.setNote(shopNote);
@@ -908,7 +918,7 @@ public class SubmitServiceImpl implements SubmitService {
         Double couponAmount = 0d;
         CouponVo coupon = null;
         if (null != orderParamBo.getClubCouponId() && orderParamBo.getClubCouponId() > 0) {
-            coupon = orderClubMapper.getClubCouponById(orderParamBo.getClubCouponId(),orderParamBo.getUserId());
+            coupon = orderClubMapper.getClubCouponById(orderParamBo.getClubCouponId(), orderParamBo.getUserId());
             if (null == coupon) {
                 // 设置手动回滚事务
                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -1099,18 +1109,29 @@ public class SubmitServiceImpl implements SubmitService {
         });
 
         /*
-         * 整理  订单商品
+         * 订单商品分子订单
          */
         for (OrderProductPo orderProduct : orderProductList) {
             // 设置商品订单Id
             orderProduct.setOrderId(mainOrder.getOrderId());
             orderProduct.setOrderNo(mainOrder.getOrderNo());
             // 设置商品子订单Id
+            boolean finalOnlinePay = onlinePay;
             shopOrderList.forEach(shopOrder -> {
-                if (orderProduct.getShopId().equals(shopOrder.getShopId())) {
-                    orderProduct.setShopOrderId(shopOrder.getShopOrderId());
-                    orderProduct.setShopOrderNo(shopOrder.getShopOrderNo());
+                //能线上的一定有分账号,按分账号分子订单
+                if (finalOnlinePay) {
+                    //都有商户号的情况下,子订单的商户号和商品的一致分到一个子订单
+                    if (orderProduct.getShopId().equals(shopOrder.getShopId()) && orderProduct.getSplitCode().equals(shopOrder.getSplitCode())) {
+                        orderProduct.setShopOrderId(shopOrder.getShopOrderId());
+                        orderProduct.setShopOrderNo(shopOrder.getShopOrderNo());
+                    }
+                } else {
+                    if (orderProduct.getShopId().equals(shopOrder.getShopId())) {
+                        orderProduct.setShopOrderId(shopOrder.getShopOrderId());
+                        orderProduct.setShopOrderNo(shopOrder.getShopOrderNo());
+                    }
                 }
+
             });
             // 设置订单商品促销Id
             promotionList.forEach(promotions -> {
@@ -1410,7 +1431,7 @@ public class SubmitServiceImpl implements SubmitService {
             BeanUtils.copyProperties(coupon, orderRecord);
             orderRecord.setOrderId(mainOrder.getOrderId());
             orderRecord.setCreateDate(date);
-            // 保存订单优惠记录
+            // 保存订单优惠券使用记录
             submitMapper.insertCouponOrderRecord(orderRecord);
         }
 

+ 11 - 2
src/main/resources/mapper/CartClubMapper.xml

@@ -20,8 +20,12 @@
             s.name AS shopName,
             s.logo AS shopLogo,
             s.shopType as shopType
+            <if test="status!=null and status == 1">
+                ,p.splitCode
+            </if>
         FROM cm_cart c
         LEFT JOIN shop s ON c.shopID = s.shopID
+        LEFT JOIN product p ON c.productID = p.productID
         WHERE c.userID = #{userId}
         AND c.productID in
         <foreach collection="productIds" open="(" separator="," close=")" item="productId">
@@ -109,12 +113,17 @@
         csp.priceType as svipPriceType,
         csp.discount as svipDiscount,
         csp.discountPrice as svipDiscountPrice,
-        p.productType
+        p.productType,
+        p.splitCode
         FROM cm_cart c
         LEFT JOIN product p ON c.productID = p.productID
         LEFT JOIN cm_svip_product csp ON p.productID = csp.productId
         WHERE c.userID = #{userId} and p.shopID = #{shopId}
-        AND p.validFlag='2' AND p.productID in
+        AND p.validFlag='2'
+        <if test="splitCode !=null and splitCode !=''">
+            AND p.splitCode = #{splitCode}
+        </if>
+        AND p.productID in
         <foreach collection="productIds" open="(" separator="," close=")" item="productId">
             #{productId}
         </foreach>

+ 2 - 1
src/main/resources/mapper/SubmitMapper.xml

@@ -194,7 +194,8 @@
                p.taxPoint         AS taxRate,
                p.unit             AS productUnit,
                p.normalPrice,
-               p.supplierTaxPoint AS shopTaxRate
+               p.supplierTaxPoint AS shopTaxRate,
+               p.splitCode
         FROM product p
         WHERE p.productId = #{productId}
     </select>