huangzhiguo 1 年之前
父节点
当前提交
31b9a496e2

+ 15 - 0
src/main/java/com/caimei365/order/components/OrderCommonService.java

@@ -16,6 +16,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 /**
@@ -299,6 +300,9 @@ public class OrderCommonService {
             } else {
                 arrList.add(3);
             }
+            // 是否有到付商品, 默认没有到付商品
+            shopOrder.setPayment(0);
+            AtomicInteger count = new AtomicInteger(0);
             // 是否有分帐号
             AtomicBoolean isSplit = new AtomicBoolean(true);
             orderProductList.forEach(orderProduct -> {
@@ -339,7 +343,18 @@ public class OrderCommonService {
                 if (StringUtils.isEmpty(orderProduct.getSplitCode())) {
                     isSplit.set(false);
                 }
+                // 老数据处理 子订单商品与子订单运费状态相同
+                if (null == orderProduct.getFreightFlag()) {
+                    orderProduct.setFreightFlag(shopOrder.getShopPostFlag());
+                }
+                // 是否含有到付商品
+                if (null != orderProduct.getFreightFlag() && 2 == orderProduct.getFreightFlag()) {
+                    count.updateAndGet( c -> c + 1);
+                }
             });
+            if (count.get() >= 1) {
+                shopOrder.setPayment(1);
+            }
             // 冷链运输费
             if (null != shopOrder.getIsColdChina() && 1 == shopOrder.getIsColdChina()) {
                 shopOrder.setColdChina(700.00d);

+ 16 - 22
src/main/java/com/caimei365/order/components/ProductService.java

@@ -7,6 +7,7 @@ import com.caimei365.order.model.po.*;
 import com.caimei365.order.model.vo.*;
 import com.caimei365.order.utils.MathUtil;
 import com.caimei365.order.utils.ImageUtil;
+import com.google.common.util.concurrent.AtomicDouble;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.ArrayUtils;
 import org.springframework.beans.BeanUtils;
@@ -194,15 +195,11 @@ public class ProductService {
         // 用户组织Id
         Integer organizeId = baseMapper.getOrganizeId(userId);
         // 返回数据初始化
-        Map<String, Object> postageMap = new HashMap<>(4);
+        Map<String, Object> postageMap = new HashMap<>(5);
         // 运费标志:0包邮 1到付 2使用运费模板
         int postageFlag = 0;
         // 运费
-        Double postage = 0.00d;
-        // 含包邮
-        Boolean freePostTage = false;
-        // 含到付
-        Boolean freePostTagePayment = false;
+        AtomicDouble postage = new AtomicDouble(0);
         // 可用采美豆
         Integer userBeans = baseMapper.getUserBeans(userId);
         postageMap.put("userBeans", userBeans);
@@ -210,32 +207,31 @@ public class ProductService {
         Integer superVipUserId = baseMapper.getSvipUserIdByUserId(userId);
         if (null != superVipUserId) {
             // 超级VIP包邮
-            postageMap.put("freePostTage", freePostTage);
-            postageMap.put("freePostTagePayment", freePostTagePayment);
             postageMap.put("postageFlag", 0);
             postageMap.put("postage", 0.00d);
             return postageMap;
         }
-        // 获取商品运费 (商品数据库 0包邮 1到付 2默认(遵循运费规则)
+        // 获取商品运费 (商品数据库 0包邮 2默认(遵循运费模板) 2到付 
         List<ProductPostageVo> postageFlagList = null;
         if (0 == organizeId) {
             postageFlagList = baseMapper.getPostageFlagList(skuIdList);
         } else {
             postageFlagList = baseMapper.getPostageFlagOrganizeList(skuIdList);
         }
+
         if (null != postageFlagList && postageFlagList.size() > 0) {
             for (ProductPostageVo postageVo : postageFlagList) {
                 if (null != postageVo) {
                     // 是否是仪器 或 设置了运费到付
                     if (null != postageVo.getPostageFlag() && 0 == postageVo.getPostageFlag()) {
                         // 包邮
-                        freePostTage = true;
-                    } else if (null != postageVo.getPostageFlag() && 1 == postageVo.getPostageFlag()) {
+                        postageFlag = 0;
+                    } else if (null != postageVo.getPostageFlag() && 2 == postageVo.getPostageFlag()) {
                         // 到付
-                        freePostTagePayment = true;
+                        postageFlag = 2;
                     } else {
                         // 使用运费模板
-                        postageFlag = 2;
+                        postageFlag = 1;
                         if (null == postageVo.getFreightTemplateId()) {
                             // 商品运费规则异常
                             postageMap.put("postageFlag", 999);
@@ -249,36 +245,34 @@ public class ProductService {
                             }
                             FreightRuleVo freightRule = baseMapper.getFreightRule(postageVo.getFreightTemplateId(), cityId);
                             if (null != freightRule) {
-                                postage = freightRule.getFreightAmount();
+                                postage.set(MathUtil.add(postage.get(), freightRule.getFreightAmount()).doubleValue());
                                 // 含有包邮的规则
                                 if (1 == freightRule.getFreeType()) {
                                     if (0 == freightRule.getFreeCondition()) {
                                         // 满足数量
                                         if (num >= freightRule.getProductNum()) {
-                                            postage = 0.00d;
-                                            freePostTage = true;
+                                            postage.set(MathUtil.sub(postage.get(), freightRule.getFreightAmount()).doubleValue());
+                                            postageFlag = 0;
                                         }
                                     } else {
                                         // 满足金额
                                         if (amount >= freightRule.getAllAmount()) {
-                                            postage = 0.00d;
-                                            freePostTage = true;
+                                            postage.set(MathUtil.sub(postage.get(), freightRule.getFreightAmount()).doubleValue());
+                                            postageFlag = 0;
                                         }
                                     }
                                 }
                             } else {
                                 // 未选择地区包邮
-                                freePostTage = true;
+                                postageFlag = 0;
                             }
                         }
                     }
                 }
             }
         }
-        postageMap.put("freePostTage", freePostTage);
-        postageMap.put("freePostTagePayment", freePostTagePayment);
         postageMap.put("postageFlag", postageFlag);
-        postageMap.put("postage", postage);
+        postageMap.put("postage", postage.get());
         return postageMap;
     }
 

+ 1 - 1
src/main/java/com/caimei365/order/model/bo/OrderParamBo.java

@@ -58,7 +58,7 @@ public class OrderParamBo implements Serializable {
      */
     private Integer offsetBeans;
     /**
-     * 运费标志:0包邮 -1到付 1遵循运费规则
+     * 运费标志:0包邮 2到付 1遵循运费规则 运费模板
      */
     private Integer postageFlag;
     /**

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

@@ -106,6 +106,10 @@ public class CartShopVo implements Serializable {
      * 含到付
      */
     private Integer freePostTagePayment;
+    /**
+     * 是否包含需要冷链运输商品  1 冷链费商品 2 不含冷链费商品 3 包含冷链费商品
+     */
+    private Integer designatedFlag;
     /**
      * 是否勾选冷链费
      */

+ 4 - 1
src/main/java/com/caimei365/order/model/vo/OrderProductVo.java

@@ -260,7 +260,10 @@ public class OrderProductVo implements Serializable {
      * 超级会员价格标签
      */
     private String svipPriceTag;
-
+    /**
+     * 物流方式 0 包邮、1 有运费、2 到付
+     */
+    private Integer freightFlag;
     /**
      * 能否退货  1 能 2不能
      */

+ 1 - 1
src/main/java/com/caimei365/order/model/vo/ProductPostageVo.java

@@ -18,7 +18,7 @@ public class ProductPostageVo implements Serializable {
      */
     private Integer productId;
     /**
-     * 物流方式 0包邮、1到付、2使用运费模板
+     * 物流方式 0包邮、1使用运费模板、2到付
      */
     private Integer postageFlag;
     /**

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

@@ -94,6 +94,10 @@ public class ShopOrderVo implements Serializable {
      * 运费--联合丽格
      */
     private String postageInfo;
+    /**
+     * 是否含有到付商品 0 无 1 有
+     */
+    private Integer payment;
     /**
      * 订单编号
      */

+ 89 - 23
src/main/java/com/caimei365/order/service/impl/CartClubServiceImpl.java

@@ -947,6 +947,8 @@ public class CartClubServiceImpl implements CartClubService {
         List<Integer> promotionsIds = new ArrayList<>();
         // 供应商Id集合,用户判断赠品供应商是否在当前供应商中
         List<Integer> shopIds = new ArrayList<>();
+        // 运费模板是否异常
+        AtomicInteger templateFlag = new AtomicInteger(0);
         // 用户身份
         Integer userIdentity = baseMapper.getIdentityByUserId(userId);
         if (null == userIdentity) {
@@ -1011,6 +1013,10 @@ public class CartClubServiceImpl implements CartClubService {
                     AtomicDouble shopSvipReducedPrice = new AtomicDouble(0);
                     // 该供应商划线价
                     AtomicDouble shopOriginalPrice = new AtomicDouble(0);
+                    // 运费方式 0 包邮 1 到付 2 运费模板
+                    List<Integer> shopPostageFlag = new ArrayList<>();
+                    // 运费
+                    AtomicDouble shopPostage = new AtomicDouble(0);
                     // 供应商促销优惠活动
                     PromotionsVo shopPromotion = baseMapper.getPromotionByShopId(shop.getShopId());
                     if (shopPromotion != null && shopPromotion.getSeen() != null && shopPromotion.getSeen() == 2 && finalUserIdentity1 == 1) {
@@ -1033,9 +1039,15 @@ public class CartClubServiceImpl implements CartClubService {
                             // 去除库存不足商品
                             productList.removeIf(cartItemVo -> !(cartItemVo.getStock() != null && cartItemVo.getStock() > 0 && cartItemVo.getStock() >= cartItemVo.getMin() && cartItemVo.getStock() >= cartItemVo.getNumber()));
                         }
-                        List<Integer> collect = productList.stream().map(CartItemVo::getSkuId).collect(Collectors.toList());
-                        List<String> skuIdsList = collect.stream().map(String::valueOf).collect(Collectors.toList());
-
+                        // 是否包含需要冷链运输商品
+                        List<Integer> collect = productList.stream().map(CartItemVo::getProductId).collect(Collectors.toList());
+                        if (collect.stream().allMatch(c -> c == 7881)) {
+                            shop.setDesignatedFlag(1);
+                        } else if (!collect.contains(7881)) {
+                            shop.setDesignatedFlag(2);
+                        } else {
+                            shop.setDesignatedFlag(3);
+                        }
                         // 冷链费
                         Double coldChain = 0d;
                         // 迭代器设置商品信息
@@ -1147,19 +1159,34 @@ public class CartClubServiceImpl implements CartClubService {
                             }
                             // 设置商品运费
                             if (null != cityId) {
-                                Map<String, Object> postageMap = productService.computePostage(userId, cityId, cartItemVo.getNumber(), MathUtil.mul(cartItemVo.getNumber(), cartItemVo.getPrice()).doubleValue(), skuIdsList);
-                                shop.setPostage((Double) postageMap.get("postage"));
-                                shop.setPostageFlag((Integer) postageMap.get("postageFlag"));
+                                List<String> cartSkuIds = new ArrayList<>();
+                                cartSkuIds.add(cartItemVo.getSkuId().toString());
+                                Map<String, Object> postageMap = productService.computePostage(userId, cityId, cartItemVo.getNumber(), MathUtil.mul(cartItemVo.getNumber(), cartItemVo.getPrice()).doubleValue(), cartSkuIds);
+                                Integer postageFlag = (Integer) postageMap.get("postageFlag");
+                                shopPostageFlag.add(postageFlag);
+                                if (999 == postageFlag) {
+                                    templateFlag.set(-1);
+                                } else {
+                                    Double postage = (Double) postageMap.get("postage");
+                                    shopPostage.set(MathUtil.add(shopPostage.get(), postage).doubleValue());
+
+                                }
                                 shop.setUserBeans((Integer) postageMap.get("userBeans"));
-                                shop.setFreePostTage((Integer) postageMap.get("freePostTage"));
-                                shop.setFreePostTagePayment((Integer) postageMap.get("freePostTagePayment"));
                             }
                             // 该供应商下商品种类 +1
                             shopKindCount.incrementAndGet();
                             // 总数量 + 当前商品购买数量
                             totalCount.updateAndGet(v -> v + cartItemVo.getNumber());
                         }
-
+                        // 运费方式
+                        if (shopPostageFlag.contains(1)) {
+                            shop.setPostageFlag(1);
+                        } else if (!shopPostageFlag.contains(1) && shopPostageFlag.contains(2)) {
+                            shop.setPostageFlag(2);
+                        } else {
+                            shop.setPostageFlag(0);
+                        }
+                        shop.setPostage(shopPostage.get());
                         shop.setColdChain(coldChain);
                         if (700 == coldChain) {
                             shop.setIsColdChina(true);
@@ -1330,6 +1357,7 @@ public class CartClubServiceImpl implements CartClubService {
         resultData.put("totalCount", totalCount);
         resultData.put("totalPrice", totalPrice);
         resultData.put("reducedPrice", reducedPrice);
+        resultData.put("templateFlag", templateFlag.get());
         resultData.put("svipReducedPrice", svipReducedPrice);
         resultData.put("totalOriginalPrice", totalOriginalPrice);
         resultData.put("promotions", totalPromotions);
@@ -1406,6 +1434,8 @@ public class CartClubServiceImpl implements CartClubService {
         List<String> productIdList = new ArrayList<>();
         //skuIdList
         List<Integer> skuIdList = new ArrayList<>();
+        // 运费模板是否异常
+        AtomicInteger templateFlag = new AtomicInteger(0);
         // 用户身份
         Integer userIdentity = baseMapper.getIdentityByUserId(userId);
         if (null == userIdentity) {
@@ -1473,6 +1503,10 @@ public class CartClubServiceImpl implements CartClubService {
                     AtomicDouble shopSvipReducedPrice = new AtomicDouble(0);
                     // 该供应商划线价
                     AtomicDouble shopOriginalPrice = new AtomicDouble(0);
+                    // 运费方式 0 包邮 1 到付 2 运费模板
+                    List<Integer> shopPostageFlag = new ArrayList<>();
+                    // 运费
+                    AtomicDouble shopPostage = new AtomicDouble(0);
                     // 供应商促销优惠活动
                     PromotionsVo shopPromotion = baseMapper.getPromotionByShopId(shop.getShopId());
                     if (shopPromotion != null && shopPromotion.getSeen() != null && shopPromotion.getSeen() == 2 && finalUserIdentity1 == 1) {
@@ -1483,15 +1517,22 @@ public class CartClubServiceImpl implements CartClubService {
                     List<CartItemVo> productList = cartClubMapper.getProductsByShopIdAndProductIds(shop.getShopId(), finalIdList);
                     productList.forEach(p -> p.setNumber(productInfos.get(p.getSkuId().toString())));
                     if (null != productList && productList.size() > 0) {
+                        // 是否包含需要冷链运输商品
+                        List<Integer> collect = productList.stream().map(CartItemVo::getProductId).collect(Collectors.toList());
+                        if (collect.stream().allMatch(c -> c == 7881)) {
+                            shop.setDesignatedFlag(1);
+                        } else if (!collect.contains(7881)) {
+                            shop.setDesignatedFlag(2);
+                        } else {
+                            shop.setDesignatedFlag(3);
+                        }
                         // 去除不可见商品,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)));
                         // 去除价格不可见商品,价格可见度: 0公开价格,1不公开价格,2仅对会员机构公开,3仅对医美机构公开
                         productList.removeIf(cartItemVo -> !(cartItemVo.getPriceFlag() == 0 || (cartItemVo.getPriceFlag() == 2 && (finalUserIdentity == 2 || svipUserFlag)) || (cartItemVo.getPriceFlag() == 3 && finalUserClubType == 1)));
                         // 去除库存不足商品
                         productList.removeIf(cartItemVo -> !(cartItemVo.getStock() != null && cartItemVo.getStock() > 0 && cartItemVo.getStock() >= cartItemVo.getMin() && cartItemVo.getStock() >= cartItemVo.getNumber()));
-                        // 设置商品运费
-                        List<Integer> collect = productList.stream().map(CartItemVo::getSkuId).collect(Collectors.toList());
-                        List<String> skuIdsList = collect.stream().map(String::valueOf).collect(Collectors.toList());
+
 
                         Double coldChain = 0d;
                         // 迭代器设置商品信息
@@ -1596,19 +1637,33 @@ public class CartClubServiceImpl implements CartClubService {
                                 shopPromotionFee.set(MathUtil.add(shopPromotionFee, MathUtil.mul(cartItemVo.getNumber(), cartItemVo.getPrice())).doubleValue());
                             }
                             if (null != cityId) {
-                                Map<String, Object> postageMap = productService.computePostage(userId, cityId, cartItemVo.getNumber(), MathUtil.mul(cartItemVo.getNumber(), cartItemVo.getPrice()).doubleValue(), skuIdsList);
-                                shop.setPostage((Double) postageMap.get("postage"));
-                                shop.setPostageFlag((Integer) postageMap.get("postageFlag"));
+                                List<String> cartSkuIds = new ArrayList<>();
+                                cartSkuIds.add(cartItemVo.getSkuId().toString());
+                                Map<String, Object> postageMap = productService.computePostage(userId, cityId, cartItemVo.getNumber(), MathUtil.mul(cartItemVo.getNumber(), cartItemVo.getPrice()).doubleValue(), cartSkuIds);
+                                Integer postageFlag = (Integer) postageMap.get("postageFlag");
+                                shopPostageFlag.add(postageFlag);
+                                if (999 == postageFlag) {
+                                    templateFlag.set(-1);
+                                } else {
+                                    Double postage = (Double) postageMap.get("postage");
+                                    shopPostage.set(MathUtil.add(shopPostage.get(), postage).doubleValue());
+                                }
                                 shop.setUserBeans((Integer) postageMap.get("userBeans"));
-                                shop.setFreePostTage((Integer) postageMap.get("freePostTage"));
-                                shop.setFreePostTagePayment((Integer) postageMap.get("freePostTagePayment"));
                             }
                             // 该供应商下商品种类 +1
                             shopKindCount.incrementAndGet();
                             // 总数量 + 当前商品购买数量
                             totalCount.updateAndGet(v -> v + cartItemVo.getNumber());
                         }
-
+                        // 运费方式
+                        if (shopPostageFlag.contains(1)) {
+                            shop.setPostageFlag(1);
+                        } else if (!shopPostageFlag.contains(1) && shopPostageFlag.contains(2)) {
+                            shop.setPostageFlag(2);
+                        } else {
+                            shop.setPostageFlag(0);
+                        }
+                        shop.setPostage(shopPostage.get());
                         shop.setColdChain(coldChain);
                         if (700 == coldChain) {
                             shop.setIsColdChina(true);
@@ -1778,6 +1833,7 @@ public class CartClubServiceImpl implements CartClubService {
         resultData.put("totalCount", totalCount);
         resultData.put("totalPrice", totalPrice);
         resultData.put("reducedPrice", reducedPrice);
+        resultData.put("templateFlag", templateFlag.get());
         resultData.put("svipReducedPrice", svipReducedPrice);
         resultData.put("totalOriginalPrice", totalOriginalPrice);
         resultData.put("promotions", totalPromotions);
@@ -1983,14 +2039,24 @@ public class CartClubServiceImpl implements CartClubService {
         // 计算运费
         Double coldChain = 0d;
         if (null != cartDto.getCityId()) {
+            // 是否包含需要冷链运输商品 1 冷链费商品 2 不含冷链费商品 3 包含冷链费商品
+            if (cartDto.getProductId() == 7881) {
+                shop.setDesignatedFlag(1);
+            } else {
+                shop.setDesignatedFlag(2);
+            }
             List<String> skuIds = new ArrayList<>();
             skuIds.add(cartDto.getSkuId().toString());
             Map<String, Object> postageMap = productService.computePostage(cartDto.getUserId(), cartDto.getCityId(), cartItemVo.getNumber(), MathUtil.mul(cartItemVo.getNumber(), cartItemVo.getPrice()).doubleValue(), skuIds);
-            shop.setPostage((Double) postageMap.get("postage"));
-            shop.setPostageFlag((Integer) postageMap.get("postageFlag"));
-            shop.setUserBeans((Integer) postageMap.get("userBeans"));
-            shop.setFreePostTage((Integer) postageMap.get("freePostTage"));
-            shop.setFreePostTagePayment((Integer) postageMap.get("freePostTagePayment"));
+            Integer postageFlag = (Integer) postageMap.get("postageFlag");
+            if (999 == postageFlag) {
+                return ResponseJson.error(-1,"商品运费规则异常",null);
+            } else {
+                shop.setPostageFlag(postageFlag);
+                shop.setPostage((Double) postageMap.get("postage"));
+                shop.setUserBeans((Integer) postageMap.get("userBeans"));
+            }
+
             if (7881 == cartItemVo.getProductId()) {
                 if (cartItemVo.getNumber() >= 100) {
                     coldChain = 0d;

+ 36 - 8
src/main/java/com/caimei365/order/service/impl/CartSellerServiceImpl.java

@@ -539,6 +539,8 @@ public class CartSellerServiceImpl implements CartSellerService {
         List<Integer> promotionsIds = new ArrayList<>();
         // 供应商Id集合,用户判断赠品供应商是否在当前供应商中
         List<Integer> shopIds = new ArrayList<>();
+        // 运费模板是否异常
+        AtomicInteger templateFlag = new AtomicInteger(0);
         // 前端接收商品Id信息
         List<String> skuIdList = new ArrayList<>();
         if (skuIds.contains(",")) {
@@ -567,6 +569,10 @@ public class CartSellerServiceImpl implements CartSellerService {
                 AtomicDouble shopReducedPrice = new AtomicDouble(0);
                 // 该供应商svip优惠金额
                 AtomicDouble shopSvipReducedPrice = new AtomicDouble(0);
+                // 运费方式 0 包邮 1 到付 2 运费模板
+                List<Integer> shopPostageFlag = new ArrayList<>();
+                // 运费
+                AtomicDouble shopPostage = new AtomicDouble(0);
                 // 供应商促销优惠活动
                 PromotionsVo shopPromotion = baseMapper.getPromotionByShopId(shop.getShopId());
                 if (shopPromotion != null && shopPromotion.getSeen() != null && shopPromotion.getSeen() == 2) {
@@ -574,12 +580,19 @@ public class CartSellerServiceImpl implements CartSellerService {
                 }
                 // 供应商下商品列表
                 List<CartItemVo> productList = cartSellerMapper.getCartProductsByProductIds(serviceProviderId, clubId, shop.getShopId(), finalIdList);
-                List<Integer> collect = productList.stream().map(CartItemVo::getSkuId).collect(Collectors.toList());
-                List<String> skuIdsList = collect.stream().map(String::valueOf).collect(Collectors.toList());
 
                 // 冷链费
                 AtomicDouble coldChain = new AtomicDouble(0);
                 if (null != productList && productList.size() > 0) {
+                    // 是否包含需要冷链运输商品
+                    List<Integer> collect = productList.stream().map(CartItemVo::getProductId).collect(Collectors.toList());
+                    if (collect.stream().allMatch(c -> c == 7881)) {
+                        shop.setDesignatedFlag(1);
+                    } else if (!collect.contains(7881)) {
+                        shop.setDesignatedFlag(2);
+                    } else {
+                        shop.setDesignatedFlag(3);
+                    }
                     for (CartItemVo cartItemVo : productList) {
                         if (7881 == cartItemVo.getProductId()) {
                             if (cartItemVo.getNumber() >= 100) {
@@ -683,19 +696,33 @@ public class CartSellerServiceImpl implements CartSellerService {
                         }
                         // 设置商品运费
                         if (null != cityId) {
-                            Map<String, Object> postageMap = productService.computePostage(clubUserId, cityId, cartItemVo.getNumber(), MathUtil.mul(cartItemVo.getNumber(), cartItemVo.getPrice()).doubleValue(), skuIdsList);
-                            shop.setPostage((Double) postageMap.get("postage"));
-                            shop.setPostageFlag((Integer) postageMap.get("postageFlag"));
+                            List<String> cartSkuIds = new ArrayList<>();
+                            cartSkuIds.add(cartItemVo.getSkuId().toString());
+                            Map<String, Object> postageMap = productService.computePostage(clubUserId, cityId, cartItemVo.getNumber(), MathUtil.mul(cartItemVo.getNumber(), cartItemVo.getPrice()).doubleValue(), cartSkuIds);
+                            Integer postageFlag = (Integer) postageMap.get("postageFlag");
+                            shopPostageFlag.add(postageFlag);
+                            if (999 == postageFlag) {
+                                templateFlag.set(-1);
+                            } else {
+                                Double postage = (Double) postageMap.get("postage");
+                                shopPostage.set(MathUtil.add(shopPostage.get(), postage).doubleValue());
+                            }
                             shop.setUserBeans((Integer) postageMap.get("userBeans"));
-                            shop.setFreePostTage((Integer) postageMap.get("freePostTage"));
-                            shop.setFreePostTagePayment((Integer) postageMap.get("freePostTagePayment"));
                         }
                         // 该供应商下商品种类 +1
                         shopKindCount.incrementAndGet();
                         // 总数量 + 当前商品购买数量
                         totalCount.updateAndGet(v -> v + cartItemVo.getNumber());
                     }
-
+                    // 运费方式
+                    if (shopPostageFlag.contains(1)) {
+                        shop.setPostageFlag(1);
+                    } else if (!shopPostageFlag.contains(1) && shopPostageFlag.contains(2)) {
+                        shop.setPostageFlag(2);
+                    } else {
+                        shop.setPostageFlag(0);
+                    }
+                    shop.setPostage(shopPostage.get());
                     shop.setColdChain(coldChain.get());
                     if (700 == coldChain.get()) {
                         shop.setIsColdChina(true);
@@ -913,6 +940,7 @@ public class CartSellerServiceImpl implements CartSellerService {
         resultData.put("totalCount", totalCount);
         resultData.put("totalPrice", totalPrice);
         resultData.put("reducedPrice", reducedPrice);
+        resultData.put("templateFlag", templateFlag.get());
         resultData.put("totalOriginalPrice", totalOriginalPrice);
         resultData.put("promotions", totalPromotions);
         resultData.put("invoice", invoice);

+ 5 - 3
src/main/resources/mapper/BaseMapper.xml

@@ -310,9 +310,11 @@
         WHERE cityID = (SELECT cityID from town where townID = #{townId})
     </select>
     <select id="getTownIdByAddressId" resultType="java.lang.Integer">
-        SELECT townID
-        FROM address
-        WHERE addressID = #{addressId}
+        SELECT c.cityId
+        FROM address a
+         LEFT JOIN town t ON a.townID = t.townId
+         LEFT JOIN city c ON c.cityId = t.cityId
+        WHERE a.addressID = #{addressId}
     </select>
     <select id="getPurchasePricePo" resultType="com.caimei365.order.model.po.PurchasePricePo">
         SELECT skuId,

+ 1 - 0
src/main/resources/mapper/OrderCommonMapper.xml

@@ -206,6 +206,7 @@
                cop.svipPriceFlag,
                cop.svipPriceType,
                cop.svipDiscount,
+               cop.freightFlag,
                p.productCategory  as productCategory,
                p.productType,
                p.productCode,