Pārlūkot izejas kodu

线下收款小程序

huangzhiguo 1 gadu atpakaļ
vecāks
revīzija
45be04832c

+ 22 - 1
src/main/java/com/caimei365/order/mapper/ReceiptMapper.java

@@ -79,6 +79,20 @@ public interface ReceiptMapper {
      */
     Double getPaidAmountByOrderId(Integer shopOrderId);
 
+    /**
+     * 获取订单已支付金额(待审核状态的收款也算)
+     * @param orderId
+     * @return
+     */
+    Double getAmountByOrderId(Integer orderId);
+
+    /**
+     * 确认订单类型
+     * @param shopOrderId
+     * @return
+     */
+    List<Integer> getDiscernConfirmType(Integer shopOrderId);
+
     /**
      * 获取订单待审核金额
      */
@@ -120,7 +134,14 @@ public interface ReceiptMapper {
     ReceiptVo getReceiptDetail(Integer id);
 
     /**
-     * 获取收款关联订单
+     * 获取收款关联订单 shopOrderId
+     */
+    List<ShopOrderVo> getReceiptShopOrders(Integer receiptId);
+
+    /**
+     * 获取收款关联订单 orderId
+     * @param receiptId
+     * @return
      */
     List<ShopOrderVo> getReceiptOrders(Integer receiptId);
 

+ 41 - 3
src/main/java/com/caimei365/order/service/impl/ReceiptServiceImpl.java

@@ -760,12 +760,16 @@ public class ReceiptServiceImpl implements ReceiptService {
                 log.info("【线下收款】-----待确认--------");
             } else {
                 // 已确认
-                shopOrderList = receiptMapper.getReceiptOrders(receipt.getId());
+                shopOrderList = receiptMapper.getReceiptShopOrders(receipt.getId());
                 if ((shopOrderList == null || shopOrderList.size() == 0) && receipt.getReceiptType() == 2) {
                     if (receipt.getNewReceiptType() == 2) {
                         shopOrderList = receiptMapper.getReceiptOrderlist(receipt.getId());
                     }
                 }
+                // 老数据关联orderId 子订单数据
+                if (shopOrderList == null || shopOrderList.size() == 0) {
+                    shopOrderList = receiptMapper.getReceiptOrders(receipt.getId());
+                }
                 log.info("【线下收款】-----已确认--------");
             }
             if (!CollectionUtils.isEmpty(shopOrderList)) {
@@ -1677,7 +1681,11 @@ public class ReceiptServiceImpl implements ReceiptService {
                 Double totalAssociateAmount = 0d;
                 for (OrderReceiptRelationPo relationItem : listRelation) {
                     // 订单信息
+                    OrderVo order = new OrderVo();
+                    // 子订单信息
                     ShopOrderVo shopOrderVo = orderCommonMapper.getShopOrderById(relationItem.getShopOrderId());
+                    // 设置订单状态
+                    orderCommonService.setShopOrderStatus(shopOrderVo);
                     if (null == shopOrderVo) {
                         // 设置手动回滚事务
                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -1724,8 +1732,10 @@ public class ReceiptServiceImpl implements ReceiptService {
                         totalAssociateAmount += relationItem.getAssociateAmount();
                     }
                     statusFlag = statusFlag + shopOrderVo.getStatus().toString().charAt(1);
-                    shopOrderVo.setStatus(Integer.parseInt(statusFlag));
+                    // 不在赋值订单交易状态
+                    order.setStatus(Integer.parseInt(statusFlag));
                     shopOrderVo.setReceiptStatus(orderReceiptStatus);
+                    order.setReceiptStatus(orderReceiptStatus);
                     //设置订单状态
                     //获取子订单下面的所有的确认收货商品数量
                     Integer receiptNum = receiptMapper.getReceiptNumByOrderId(shopOrderVo.getShopOrderId());
@@ -1740,14 +1750,26 @@ public class ReceiptServiceImpl implements ReceiptService {
                         //已收款+已付款--->订单完成
                         if (3 == shopOrderVo.getReceiptStatus()) {
                             shopOrderVo.setStatus(2);
+                            order.setStatus(OrderStatus.TRANSACTION_COMPLETED.getCode());
                         }
                         if (3 == shopOrderVo.getReceiptStatus() && 3 == shopOrderVo.getPayStatus()) {
                             shopOrderVo.setStatus(3);
+                            order.setStatus(OrderStatus.ORDER_COMPLETED.getCode());
                         }
+                        if (3 != shopOrderVo.getReceiptStatus()) {
+                            // 子订单状态:已确认
+                            shopOrderVo.setStatus(1);
+                        }
+                    } else {
+                        // 子订单状态:已确认
+                        shopOrderVo.setStatus(1);
                     }
                     // 更新订单收款状态
-                    // order.setOnlinePayFlag(1);
+                    order.setOnlinePayFlag(1);
                     payOrderMapper.updateShopOrderStatus(shopOrderVo);
+                    // 修改订单状态
+                    order.setOrderId(shopOrderVo.getOrderId());
+                    payOrderMapper.updateOrderStatus(order);
                     log.info("【线下收款】----------审核通过订单状态改变---shopOrderId:" + shopOrderVo.getShopOrderId() + "--status:" + shopOrderVo.getStatus());
                     //判断是否有充值商品,充值到余额
                     Integer rechargeGoods = null;
@@ -2027,6 +2049,10 @@ public class ReceiptServiceImpl implements ReceiptService {
         shopOrderVo.setClubName(userName);
         shopOrderVo.setUserName(userName);
         shopOrderVo.setReceiptAmount(getReceivedAmount(shopOrderVo, true));
+        // 当有余额抵扣 已付金额 = 已付金额 + 余额抵扣
+        if (shopOrderVo.getAccountAmount() > 0d && 1 == shopOrderVo.getUseBalanceFlag()) {
+            shopOrderVo.setReceiptAmount(MathUtil.add(shopOrderVo.getReceiptAmount(), shopOrderVo.getAccountAmount()).doubleValue());
+        }
         shopOrderVo.setStatusName(OrderStatus.getOrderStatusText(shopOrderVo.getStatus()));
         shopOrderVo.setUnCheckAmount(receiptMapper.getUncheckAmount(shopOrderVo.getShopOrderId()));
         //获取退款价值
@@ -2414,6 +2440,15 @@ public class ReceiptServiceImpl implements ReceiptService {
     private Double getUnPayMoney(ShopOrderVo shopOrderVo, Boolean flag) {
         Double unPayMoney = shopOrderVo.getRealPay() == null?shopOrderVo.getNeedPayAmount() == null?0d:shopOrderVo.getNeedPayAmount():shopOrderVo.getRealPay();
         Double receivedAmount = getReceivedAmount(shopOrderVo, flag);
+        // 当有余额抵扣 已付金额 = 已付金额 + 余额抵扣
+        if (shopOrderVo.getAccountAmount() > 0d && 1 == shopOrderVo.getUseBalanceFlag()) {
+            receivedAmount = MathUtil.add(receivedAmount, shopOrderVo.getAccountAmount()).doubleValue();
+        }
+        // 存在 抹平 付款金额为待付
+        List<Integer> confirmType = receiptMapper.getDiscernConfirmType(shopOrderVo.getShopOrderId());
+        if (confirmType.contains(1) || confirmType.contains(2) || confirmType.contains(3)) {
+            receivedAmount = shopOrderVo.getRealPay();
+        }
         Double returnValue = getReturnValue(shopOrderVo);
         unPayMoney = MathUtil.sub(unPayMoney, MathUtil.add(receivedAmount, returnValue)).doubleValue();
         log.info("【线下收款】------------剩余应收:" + (unPayMoney >= 0d ? unPayMoney : 0d));
@@ -2433,6 +2468,9 @@ public class ReceiptServiceImpl implements ReceiptService {
         if (null != shopOrderVo) {
             // 获取订单已支付金额(待审核状态的收款也算)
             Double paidAmount = receiptMapper.getPaidAmountByOrderId(shopOrderVo.getShopOrderId());
+            if (null == paidAmount || 0d == paidAmount) {
+                paidAmount = receiptMapper.getAmountByOrderId(shopOrderVo.getOrderId());
+            }
             receivedAmount += paidAmount;
             if (!isCountUncheckAmount) {
                 // 获取订单待审核金额

+ 3 - 3
src/main/resources/mapper/PayOrderMapper.xml

@@ -22,7 +22,7 @@
         <if test="paySuccessCounter != null">
             ,paySuccessCounter = #{paySuccessCounter}
         </if>
-        ,updateDate = #{updateDate}
+        ,updateDate = now()
         WHERE orderID = #{orderId}
     </update>
     <update id="updateShopOrderStatus">
@@ -34,8 +34,8 @@
         <if test="payStatus != null">
             ,payStatus = #{payStatus}
         </if>
-        ,updateDate = #{updateDate}
-        WHERE orderID = #{orderId}
+        ,updateTime = now()
+        WHERE shopOrderId = #{shopOrderId}
     </update>
     <update id="updateMoneyByUserId">
         UPDATE USER

+ 83 - 5
src/main/resources/mapper/ReceiptMapper.xml

@@ -210,12 +210,30 @@
             <if test="shopOrderId != null">
                 AND cror.shopOrderId = #{shopOrderId} AND cror.relationType = 2
             </if>
-            AND cdr.receiptStatus in(2,3)
+            AND cdr.receiptStatus = 3
             AND cdr.payWay != '3'
             AND cdr.delFlag = '0'
             AND cror.delFlag = '0'
         </where>
     </select>
+    <select id="getAmountByOrderId" resultType="java.lang.Double">
+        SELECT IFNULL(SUM(cror.associateAmount), 0)
+        FROM cm_receipt_order_relation cror
+        LEFT JOIN cm_discern_receipt cdr ON cror.receiptID = cdr.id
+        <where>
+            <if test="orderId != null">
+                AND cror.orderId = #{orderId} AND cror.relationType = 2
+            </if>
+            AND cdr.receiptStatus = 3
+            AND cdr.payWay != '3'
+            AND cdr.delFlag = '0'
+            AND cror.delFlag = '0'
+        </where>
+    </select>
+    <select id="getDiscernConfirmType" resultType="java.lang.Integer">
+        select cdr.confirmType from cm_receipt_order_relation cror
+        LEFT JOIN cm_discern_receipt cdr ON cror.receiptID = cdr.id where cror.shopOrderId = #{shopOrderId}
+    </select>
     <select id="getUncheckAmount" resultType="java.lang.Double">
         SELECT IFNULL(SUM(cror.associateAmount), 0)
         FROM cm_receipt_order_relation cror
@@ -325,7 +343,7 @@
         LEFT JOIN cm_order co ON (cror.orderID = co.orderID AND cror.relationType = 2)
         LEFT JOIN cm_shop_order cso ON (cror.orderID = cso.shopOrderID AND cror.relationType = 1)
         LEFT JOIN cm_order coo ON coo.orderId=cso.orderId
-        WHERE cdr.delFlag = '0'
+        WHERE cdr.delFlag = '0' AND cdr.receiptDate > '2023-06-29'
         <if test="id != null and id != ''">
             AND cdr.id = #{id}
         </if>
@@ -414,7 +432,7 @@
         WHERE cdr.delFlag = '0'
           AND cdr.id = #{id}
     </select>
-    <select id="getReceiptOrders" resultType="com.caimei365.order.model.vo.ShopOrderVo">
+    <select id="getReceiptShopOrders" resultType="com.caimei365.order.model.vo.ShopOrderVo">
         SELECT cso.shopOrderID AS shopOrderId,
                cso.shopOrderNo,
                cso.orderID AS orderId,
@@ -451,6 +469,7 @@
                IFNULL(cso.sendOutStatus, 1) AS sendOutStatus,
                (SELECT onlinePayFlag FROM cm_order WHERE orderId = cso.orderId ) AS onlinePay,
                (SELECT secondHandOrderFlag FROM cm_order WHERE orderId = cso.orderId ) AS secondHandOrderFlag,
+               IFNULL(cso.accountAmount,0) AS accountAmount,
                IFNULL(cso.receiptAmount,0) AS receiptAmount,
                cso.eachDiscount,
                IFNULL(cso.realPay, cso.needPayAmount)AS realPay,
@@ -469,6 +488,62 @@
           AND cdr.delFlag = '0'
         ORDER BY cso.orderTime DESC
     </select>
+    <select id="getReceiptOrders" resultType="com.caimei365.order.model.vo.ShopOrderVo">
+        SELECT cso.shopOrderID AS shopOrderId,
+               cso.shopOrderNo,
+               cso.orderID AS orderId,
+               cso.orderType,
+               IFNULL(cso.organizeID, 0) AS organizeId,
+               IFNULL(cso.isColdChina, 0) AS isColdChina,
+               cso.orderNo,
+               cso.shopID AS shopId,
+               cso.note,
+               cso.userID AS userId,
+               (SELECT clubID FROM cm_order WHERE orderId = cso.orderId ) AS clubId,
+               cso.spID AS spId,
+               IFNULL(cso.presentNum, 0) AS presentNum,
+               cso.orderPromotionsId,
+               cso.promotionFullReduction,
+               cso.svipShopReduction,
+               cso.brokerage,
+               cso.canRefundAmount,
+               cso.itemCount,
+               cso.totalAmount,
+               cso.productAmount,
+               cso.needPayAmount,
+               cso.shopProductAmount,
+               IFNULL(cso.shopPostFee, 0) AS shopPostFee,
+               IFNULL(cso.shopPostFlag, 0) AS shopPostFlag,
+               cso.shopTaxFee,
+               cso.shouldPayShopAmount,
+               (SELECT userBeans FROM cm_order WHERE orderId = cso.orderId ) AS userBeans,
+               cso.orderTime,
+               cso.payStatus,
+               cso.orderSubmitType,
+               cso.splitFlag,
+               IFNULL(cso.useBalanceFlag, 0) AS useBalanceFlag,
+               IFNULL(cso.sendOutStatus, 1) AS sendOutStatus,
+               (SELECT onlinePayFlag FROM cm_order WHERE orderId = cso.orderId ) AS onlinePay,
+               (SELECT secondHandOrderFlag FROM cm_order WHERE orderId = cso.orderId ) AS secondHandOrderFlag,
+               IFNULL(cso.accountAmount,0) AS accountAmount,
+               IFNULL(cso.receiptAmount,0) AS receiptAmount,
+               cso.eachDiscount,
+               IFNULL(cso.realPay, cso.needPayAmount)AS realPay,
+               IFNULL(cso.receiptStatus, 1) AS receiptStatus,
+               IFNULL(cso.orderStatusFlag, 1) AS orderStatusFlag,
+               IFNULL(cso.refundStatus, 1) AS refundStatus,
+               cso.shopStatus AS STATUS,
+               IFNULL(u.userName, '') AS userName
+        FROM cm_shop_order cso
+                 INNER JOIN cm_receipt_order_relation cror ON cso.orderId = cror.orderId
+                 INNER JOIN cm_discern_receipt cdr ON cror.receiptID = cdr.id
+                 LEFT JOIN USER u ON cso.userID = u.userID
+        WHERE cdr.id = #{receiptId}
+          AND cso.delFlag = '0'
+          AND cror.delFlag = '0'
+          AND cdr.delFlag = '0'
+        ORDER BY cso.orderTime DESC
+    </select>
 
     <select id="getReceiptOrderlist" resultType="com.caimei365.order.model.vo.ShopOrderVo">
         SELECT cso.shopOrderID AS shopOrderId,
@@ -507,6 +582,7 @@
                IFNULL(cso.sendOutStatus, 1) AS sendOutStatus,
                (SELECT onlinePayFlag FROM cm_order WHERE orderId = cso.orderId ) AS onlinePay,
                (SELECT secondHandOrderFlag FROM cm_order WHERE orderId = cso.orderId ) AS secondHandOrderFlag,
+               IFNULL(cso.accountAmount,0) AS accountAmount,
                IFNULL(cso.receiptAmount,0) AS receiptAmount,
                cso.eachDiscount,
                IFNULL(cso.realPay, cso.needPayAmount)AS realPay,
@@ -577,6 +653,7 @@
         IFNULL(cso.sendOutStatus, 1) AS sendOutStatus,
         (SELECT onlinePayFlag FROM cm_order WHERE orderId = cso.orderId ) AS onlinePay,
         (SELECT secondHandOrderFlag FROM cm_order WHERE orderId = cso.orderId ) AS secondHandOrderFlag,
+        IFNULL(cso.accountAmount,0) AS accountAmount,
         IFNULL(cso.receiptAmount,0) AS receiptAmount,
         cso.eachDiscount,
         s.name AS shopName,
@@ -601,7 +678,7 @@
         LEFT JOIN shop s ON cso.shopID = s.shopID
         LEFT JOIN cm_order_product cop ON cso.shopOrderId = cop.shopOrderId
         <where>
-            cso.delFlag = '0' and ( s.AccountOwnership = 0 or s.bankAccount is null)
+            cso.orderType != 3 and cso.delFlag = '0' and ( s.AccountOwnership = 0 or s.bankAccount is null)
             <if test="organizeId == 0">
                 AND cso.organizeID = 0
             </if>
@@ -676,13 +753,14 @@
         IFNULL(cso.sendOutStatus, 1) AS sendOutStatus,
         (SELECT onlinePayFlag FROM cm_order WHERE orderId = cso.orderId ) AS onlinePay,
         (SELECT secondHandOrderFlag FROM cm_order WHERE orderId = cso.orderId ) AS secondHandOrderFlag,
+        IFNULL(cso.accountAmount,0) AS accountAmount,
         IFNULL(cso.receiptAmount,0) AS receiptAmount,
         cso.eachDiscount,
         IFNULL(cso.realPay, cso.needPayAmount)AS realPay,
         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
         FROM cm_shop_order cso
         WHERE cso.delFlag = '0' AND cso.shopOrderId IN
         <foreach collection="orderIdS" open="(" close=")" separator="," item="shopOrderId">