Browse Source

促销/优惠券bugfix

zhijiezhao 1 year ago
parent
commit
0726eea9c5

+ 8 - 7
src/main/java/com/caimei365/order/service/impl/PayOrderServiceImpl.java

@@ -310,9 +310,9 @@ public class PayOrderServiceImpl implements PayOrderService {
             }
 //            List<ShopOrderVo> shopOrderList = orderCommonMapper.getShopOrderListByOrderId(order.getOrderId());
 //            for (ShopOrderVo shopOrder : shopOrderList) {
-                // 付供应商运费
-                Double shopPostFee = shopOrder.getShopPostFee();
-                costPrice = MathUtil.add(costPrice, shopPostFee).doubleValue();
+            // 付供应商运费
+            Double shopPostFee = shopOrder.getShopPostFee();
+            costPrice = MathUtil.add(costPrice, shopPostFee).doubleValue();
 //            }
             totalCostPrice.set(MathUtil.add(costPrice, totalCostPrice.get()).doubleValue());
         });
@@ -329,7 +329,8 @@ public class PayOrderServiceImpl implements PayOrderService {
         map.put("discernReceipt", discernReceiptList);
         map.put("orderProductList", orderProductList);
         //能否线上判断付供应商是否大于订单金额
-        if (shopOrder.getAccountAmount() > 0 || totalCostPrice.get() > shopOrder.getTotalAmount()) {
+        if (shopOrder.getAccountAmount() > 0 || totalCostPrice.get() > shopOrder.getTotalAmount()
+                || shopOrder.getShopProductAmount() <= 0 || shopOrder.getShouldPayShopAmount() <= 0) {
             onlinePay = 1;
         }
         Integer num = orderCommonMapper.findSplitCode(shopOrder.getOrderId());
@@ -723,12 +724,12 @@ public class PayOrderServiceImpl implements PayOrderService {
                 //成本+税费
                 costPrice = MathUtil.add(costPrice, payableTax).doubleValue();
             }
-             List<ShopOrderVo> shopOrderList = orderCommonMapper.getShopOrderListByOrderId(order.getOrderId());
-             for (ShopOrderVo shopOrder : shopOrderList) {
+            List<ShopOrderVo> shopOrderList = orderCommonMapper.getShopOrderListByOrderId(order.getOrderId());
+            for (ShopOrderVo shopOrder : shopOrderList) {
                 // 付供应商运费
                 Double shopPostFee = shopOrder.getShopPostFee();
                 costPrice = MathUtil.add(costPrice, shopPostFee).doubleValue();
-             }
+            }
             totalCostPrice.set(MathUtil.add(costPrice, totalCostPrice.get()).doubleValue());
         });
         //. 后台线上支付开关2.商品是否有分账账号 3. 订单是否进行过线下支付 4.是否使用了余额抵扣

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

@@ -539,8 +539,6 @@ public class SubmitServiceImpl implements SubmitService {
             AtomicDouble brokerage = new AtomicDouble(0);
             // 需要支付金额
             AtomicDouble needPayAmount = new AtomicDouble(0);
-            // 不包含店铺满减的子订单应付
-            AtomicDouble realNeedPay = new AtomicDouble(0);
             // 商品总金额
             AtomicDouble shopAmount = new AtomicDouble(0);
             // 付供应商 商品费
@@ -909,8 +907,6 @@ public class SubmitServiceImpl implements SubmitService {
                 brokerage.set(MathUtil.add(brokerage.get(), product.getCmFee()).doubleValue());
                 // 需要支付金额 shouldPayFee +运费
                 needPayAmount.set(MathUtil.add(needPayAmount.get(), product.getShouldPayFee()).doubleValue());
-                // 不包含单品满减的子订单需付金额
-                realNeedPay.set(MathUtil.add(realNeedPay.get(), product.getRealProductFee()).doubleValue());
                 // 统计 总金额 包括税费
                 shopProductFee.set(MathUtil.add(shopProductFee.get(), product.getTotalFee()).doubleValue());
                 // 统计子订单内可参与店铺促销的商品总金额
@@ -1027,8 +1023,6 @@ public class SubmitServiceImpl implements SubmitService {
             shopOrder.setProductAmount(shopAmount.get());
             // 需要支付金额 shouldPayFee +运费
             shopOrder.setNeedPayAmount(needPayAmount.get());
-            // 设值
-            shopOrder.setRealNeedPay(realNeedPay.get());
             // 付供应商 商品费=成本价*(购买数量  + 赠品数量)
             shopOrder.setShopProductAmount(shopProductAmount.get());
             // 付给供应商税费
@@ -1309,7 +1303,7 @@ public class SubmitServiceImpl implements SubmitService {
             shopOrderList = findSplitShopOrder(orderProductList, shopOrderList, shops, orderParamBo);
             // 分摊优惠前总佣金
             AtomicDouble oldBrokerage = new AtomicDouble(0);
-            //超级会员价/复购价/阶梯价/促销活动冲突,只能生效一个,促销活动满减计入优惠分摊,子订单售价=realNeedPay+promotionFullReduction
+            //超级会员价/复购价/阶梯价/促销活动冲突,只能生效一个
             shopOrderList.forEach(orderShopPo -> {
                 orderShopPo.setOldPrice(orderShopPo.getNeedPayAmount());
                 orderShopPo.setOldBrokerage(orderShopPo.getBrokerage());
@@ -1436,17 +1430,29 @@ public class SubmitServiceImpl implements SubmitService {
             }
             CouponVo finalCoupon = coupon;
             shopOrderList.forEach(s -> {
+                /** todo
+                 *  shopProductAmount,shouldPayShopAmount - promotionFullReduction
+                 *  当前版本付供应商应-促销活动,优惠券金额,因为当前版本所有优惠为商家优惠
+                 */
+                if (null != s.getPromotionFullReduction() && s.getPromotionFullReduction() > 0) {
+                    s.setShopProductAmount(s.getShopProductAmount() - s.getPromotionFullReduction());
+                    s.setShouldPayShopAmount(s.getShouldPayShopAmount() - s.getPromotionFullReduction());
+                    submitMapper.updateShopOrderCoupon(s);
+                }
                 if (0 == finalCoupon.getCouponType() || 3 == finalCoupon.getCouponType()) {
                     // 当前版本所有指定商品均出自综合供应商,所以limit1
                     Integer shopId = null == finalCoupon.getShopId() ? baseMapper.findShopIdByProduct(finalCoupon.getCouponId()) : finalCoupon.getShopId();
                     s.setCouponAmount(finalCoupon.getCouponAmount());
                     s.setCouponClubId(finalCoupon.getClubCouponId());
                     if (s.getShopId().equals(shopId)) {
+                        Double realPay = null == s.getRealPay() ? s.getNeedPayAmount() : s.getRealPay();
                         s.setNeedPayAmount(s.getNeedPayAmount() - finalCoupon.getCouponAmount());
                         s.setTotalAmount(s.getTotalAmount() - finalCoupon.getCouponAmount());
-                        s.setRealPay(s.getRealPay() - finalCoupon.getCouponAmount());
+                        s.setRealPay(realPay - finalCoupon.getCouponAmount());
+                        s.setShopProductAmount(s.getShopProductAmount() - finalCoupon.getCouponAmount());
+                        s.setShouldPayShopAmount(s.getShouldPayShopAmount() - finalCoupon.getCouponAmount());
+                        submitMapper.updateShopOrderCoupon(s);
                     }
-                    submitMapper.updateShopOrderCoupon(s);
                 }
             });
             CouponOrderRecordPo orderRecord = new CouponOrderRecordPo();
@@ -2098,8 +2104,6 @@ public class SubmitServiceImpl implements SubmitService {
         AtomicDouble shopTaxFee = new AtomicDouble(0);
         // 商品费
         AtomicDouble shopProductFee = new AtomicDouble(0);
-        // 不包含店铺满减的子订单应付
-        AtomicDouble realNeedPay = new AtomicDouble(0);
         // 子订单应付供应商
         AtomicReference<Double> shouldPayShopAmount = new AtomicReference<>(0d);
         // 订单商品列表
@@ -2281,8 +2285,6 @@ public class SubmitServiceImpl implements SubmitService {
             brokerage.set(MathUtil.add(brokerage.get(), product.getCmFee()).doubleValue());
             // 需要支付金额 shouldPayFee +运费
             needPayAmount.set(MathUtil.add(needPayAmount.get(), product.getShouldPayFee()).doubleValue());
-            // 不包含单品满减的子订单需付金额
-            realNeedPay.set(MathUtil.add(realNeedPay.get(), product.getRealProductFee()).doubleValue());
             // 统计 总金额 包括税费
             shopProductFee.set(MathUtil.add(shopProductFee.get(), product.getTotalFee()).doubleValue());
             // 商品总金额
@@ -2331,8 +2333,6 @@ public class SubmitServiceImpl implements SubmitService {
         shopOrder.setProductAmount(shopAmount.get());
         // 需要支付金额 shouldPayFee +运费
         shopOrder.setNeedPayAmount(MathUtil.add(shopProductFee.get(), shopOrder.getShopPostFee()).doubleValue());
-        // 设值
-        shopOrder.setRealNeedPay(MathUtil.add(shopProductFee.get(), shopOrder.getShopPostFee()).doubleValue());
         // 付供应商 商品费=成本价*(购买数量  + 赠品数量)
         shopOrder.setShopProductAmount(shopProductAmount.get());
         // 付给供应商税费

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

@@ -295,6 +295,7 @@
             ifnull(cso.receiptStatus, 1) as receiptStatus,
             ifnull(cso.orderStatusFlag, 1) as orderStatusFlag,
             ifnull(cso.refundStatus, 1) as refundStatus,
+            cso.couponAmount,
             cso.shopStatus as status
         FROM cm_shop_order cso
                  LEFT JOIN shop s ON cso.shopID = s.shopID

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

@@ -107,6 +107,7 @@
         s.shopType as shopType,
         ifnull(cso.receiptAmount,0) as receiptAmount,
         cso.eachDiscount,
+        cso.couponAmount,
         ifnull(cso.realPay, cso.needPayAmount) as realPay,
         ifnull(cso.receiptStatus, 1) as receiptStatus
         FROM cm_shop_order cso
@@ -574,7 +575,8 @@
         ifnull(cso.receiptStatus, 1) as receiptStatus,
         ifnull(cso.orderStatusFlag, 1) as orderStatusFlag,
         ifnull(cso.refundStatus, 1) as refundStatus,
-        cso.shopStatus as status
+        cso.shopStatus as status,
+        cso.couponAmount
         FROM cm_shop_order cso
         LEFT JOIN shop s ON cso.shopID = s.shopID
         where cso.delFlag = 0 AND cso.shopOrderId = #{shopOrderId}

+ 2 - 0
src/main/resources/mapper/ShipMapper.xml

@@ -134,6 +134,7 @@
             ifnull(s.payway, 0) AS payway,
             a.shopStatus as status,
             a.splitFlag,
+            a.couponAmount,
             ifnull(a.useBalanceFlag, 0) as useBalanceFlag,
             ifnull(a.ReceiptAmount,0) as ReceiptAmount
         FROM cm_shop_order a
@@ -283,6 +284,7 @@
             ifnull(s.payway, 0) AS payway,
             cso.shopStatus as status,
             cso.splitFlag,
+            cso.couponAmount,
             ifnull(cso.useBalanceFlag, 0) as useBalanceFlag
         FROM cm_shop_order cso
                  LEFT JOIN shop s ON cso.shopID = s.shopID

+ 67 - 54
src/main/resources/mapper/SubmitMapper.xml

@@ -170,20 +170,22 @@
     </update>
     <select id="getOrganizeSkuInfo" resultType="com.caimei365.order.model.po.CmOrganizeSkuPo">
         SELECT distinct cs.skuId,
-               cs.productId,
-               cs.minBuyNumber,
-               cs.price,
-               cs.unit,
-               cs.stock,
-               ifnull(copi.costCheckFlag,1) as costCheckFlag,
-               IFNULL(cs.organizeCostPrice, 0) AS organizeCostPrice,
-               IFNULL(cs.cmCostPrice, 0) AS cmCostPrice,
-               ifnull(cs.organizePercent, 0) as organizePercent,
-               ifnull(cs.shopPercent, 0) as shopPercent,
-               ifnull(cs.cmPercent, 0) as cmPercent
+                        cs.productId,
+                        cs.minBuyNumber,
+                        cs.price,
+                        cs.unit,
+                        cs.stock,
+                        ifnull(copi.costCheckFlag, 1)   as costCheckFlag,
+                        IFNULL(cs.organizeCostPrice, 0) AS organizeCostPrice,
+                        IFNULL(cs.cmCostPrice, 0)       AS cmCostPrice,
+                        ifnull(cs.organizePercent, 0)   as organizePercent,
+                        ifnull(cs.shopPercent, 0)       as shopPercent,
+                        ifnull(cs.cmPercent, 0)         as cmPercent
         FROM cm_sku cs
-        LEFT JOIN cm_organize_product_info copi ON cs.productId = copi.productId
-        WHERE cs.skuId = #{skuId} AND cs.organizeId = #{organizeId} AND copi.organizeId = #{organizeId}
+                 LEFT JOIN cm_organize_product_info copi ON cs.productId = copi.productId
+        WHERE cs.skuId = #{skuId}
+          AND cs.organizeId = #{organizeId}
+          AND copi.organizeId = #{organizeId}
     </select>
     <select id="getOrderInvoice" resultType="com.caimei365.order.model.po.InvoicePo">
         SELECT id,
@@ -221,51 +223,56 @@
         WHERE userID = #{userId}
     </select>
     <select id="getProductDetails" resultType="com.caimei365.order.model.po.OrderProductPo">
-        SELECT cs.skuId                    AS skuId,
-               p.productID                 AS productId,
-               p.shopID                    AS shopId,
-               p.`name`                    AS `name`,
-               p.mainImage                 AS image,
+        SELECT cs.skuId                                                                   AS skuId,
+               p.productID                                                                AS productId,
+               p.shopID                                                                   AS shopId,
+               p.`name`                                                                   AS `name`,
+               p.mainImage                                                                AS image,
                cs.price,
                cs.costPrice,
-               IFNULL((SELECT costCheckFlag FROM cm_organize_product_info WHERE productId = cs.productId AND organizeId = cs.organizeId ), 1) AS costCheckFlag,
-               cs.shopPercent              as costProportional,
+               IFNULL((SELECT costCheckFlag
+                       FROM cm_organize_product_info
+                       WHERE productId = cs.productId AND organizeId = cs.organizeId), 1) AS costCheckFlag,
+               cs.shopPercent                                                             as costProportional,
                p.productCategory,
                cs.ladderPriceFlag,
                p.includedTax,
                p.invoiceType,
-               p.taxPoint                  AS taxRate,
-               cs.unit                     AS productUnit,
+               p.taxPoint                                                                 AS taxRate,
+               cs.unit                                                                    AS productUnit,
                cs.normalPrice,
-               p.supplierTaxPoint          AS shopTaxRate,
-               p.splitCode                 as splitCode
+               p.supplierTaxPoint                                                         AS shopTaxRate,
+               p.splitCode                                                                as splitCode
         FROM product p
                  LEFT JOIN cm_sku cs on p.productID = cs.productId
         WHERE cs.skuId = #{skuId}
           and cs.organizeId = 0
     </select>
     <select id="getProductOrganizeDetails" resultType="com.caimei365.order.model.po.OrderProductPo">
-        SELECT cs.skuId           AS skuId,
-               p.productID        AS productId,
-               p.shopID           AS shopId,
-               p.`name`           AS `name`,
-               p.mainImage        AS image,
+        SELECT cs.skuId                                                                   AS skuId,
+               p.productID                                                                AS productId,
+               p.shopID                                                                   AS shopId,
+               p.`name`                                                                   AS `name`,
+               p.mainImage                                                                AS image,
                cs.price,
                cs.costPrice,
-               IFNULL((SELECT costCheckFlag FROM cm_organize_product_info WHERE productId = cs.productId AND organizeId = cs.organizeId ), 1) AS costCheckFlag,
-               cs.shopPercent as costProportional,
+               IFNULL((SELECT costCheckFlag
+                       FROM cm_organize_product_info
+                       WHERE productId = cs.productId AND organizeId = cs.organizeId), 1) AS costCheckFlag,
+               cs.shopPercent                                                             as costProportional,
                p.productCategory,
                cs.ladderPriceFlag,
                p.includedTax,
                p.invoiceType,
-               p.taxPoint                 AS taxRate,
-               cs.unit                     AS productUnit,
+               p.taxPoint                                                                 AS taxRate,
+               cs.unit                                                                    AS productUnit,
                cs.normalPrice,
-               p.supplierTaxPoint         AS shopTaxRate,
-               p.splitCode as splitCode
+               p.supplierTaxPoint                                                         AS shopTaxRate,
+               p.splitCode                                                                as splitCode
         FROM product p
                  LEFT JOIN cm_sku cs on p.productID = cs.productId
-        WHERE cs.skuId = #{skuId} and cs.organizeId = 4
+        WHERE cs.skuId = #{skuId}
+          and cs.organizeId = 4
     </select>
     <select id="getClauseNameById" resultType="java.lang.String">
         SELECT `name`
@@ -273,7 +280,9 @@
         WHERE id = #{clauseId}
     </select>
     <select id="getClubId" resultType="java.lang.Integer">
-        select clubId from club where userId = #{userId}
+        select clubId
+        from club
+        where userId = #{userId}
     </select>
     <select id="getAddressDetailById" resultType="com.caimei365.order.model.vo.AddressVo">
         SELECT a.addressID  AS addressId,
@@ -334,24 +343,26 @@
         AND (splitcode IS NULL OR splitcode ='')
     </select>
     <select id="getRechargeProductDetails" resultType="com.caimei365.order.model.po.OrderProductPo">
-        SELECT cs.skuId                    AS skuId,
-               p.productID                 AS productId,
-               p.shopID                    AS shopId,
-               p.`name`                    AS `name`,
-               p.mainImage                 AS image,
+        SELECT cs.skuId                                                                   AS skuId,
+               p.productID                                                                AS productId,
+               p.shopID                                                                   AS shopId,
+               p.`name`                                                                   AS `name`,
+               p.mainImage                                                                AS image,
                cs.price,
                cs.costPrice,
-               IFNULL((SELECT costCheckFlag FROM cm_organize_product_info WHERE productId = cs.productId AND organizeId = cs.organizeId ), 1) AS costCheckFlag,
-               cs.shopPercent              as costProportional,
+               IFNULL((SELECT costCheckFlag
+                       FROM cm_organize_product_info
+                       WHERE productId = cs.productId AND organizeId = cs.organizeId), 1) AS costCheckFlag,
+               cs.shopPercent                                                             as costProportional,
                p.productCategory,
                cs.ladderPriceFlag,
                p.includedTax,
                p.invoiceType,
-               p.taxPoint                  AS taxRate,
-               cs.unit                     AS productUnit,
+               p.taxPoint                                                                 AS taxRate,
+               cs.unit                                                                    AS productUnit,
                cs.normalPrice,
-               p.supplierTaxPoint          AS shopTaxRate,
-               p.splitCode                 as splitCode
+               p.supplierTaxPoint                                                         AS shopTaxRate,
+               p.splitCode                                                                as splitCode
         FROM product p
                  LEFT JOIN cm_sku cs on p.productID = cs.productId
         WHERE cs.productId = #{productId}
@@ -495,17 +506,19 @@
     </update>
     <update id="updateUserMoneyByChange">
         update user
-        set userMoney = userMoney + #{change},
+        set userMoney     = userMoney + #{change},
             ableUserMoney = ableUserMoney + #{change}
         where userId = #{userId}
     </update>
     <update id="updateShopOrderCoupon">
         update cm_shop_order
-        set needPayAmount = #{needPayAmount},
-            totalAmount = #{totalAmount},
-            couponAmount = #{couponAmount},
-            couponClubId = #{couponClubId},
-            realPay = #{realPay}
+        set needPayAmount       = #{needPayAmount},
+            totalAmount         = #{totalAmount},
+            couponAmount        = #{couponAmount},
+            couponClubId        = #{couponClubId},
+            realPay             = #{realPay},
+            shopProductAmount   = #{shopProductAmount},
+            shouldPayShopAmount = #{shouldPayShopAmount}
         where shopOrderId = #{shopOrderId}
     </update>
 </mapper>