Ver código fonte

Merge branch 'main' of http://47.98.207.247:3000/lsq/ship-ota-server into main

luofeiyun 1 semana atrás
pai
commit
d5748cb9ab

+ 23 - 3
ship-module-ota/ship-module-ota-biz/src/main/resources/mapper/distributor/DistributorMapper.xml

@@ -137,9 +137,29 @@
     </select>
 
     <select id="queryDistributorMoneyTotal" resultType="com.yc.ship.module.ota.controller.admin.distributor.vo.DistributorRespVO">
-        SELECT sum(IF(recharge_type = 1, money, 0.00)) balanceTotal, sum(IF(recharge_type = 2, money, 0.00)) payCreditTotal
-        FROM ota_distributor_recharge
-        WHERE `status` = 1 and deleted = 0 and distributor_id = #{distributorId}
+
+        SELECT
+            t1.payCreditTotal,
+            t1.balanceTotal + IFNULL(t2.amount, 0) AS balanceTotal
+        FROM (
+                 SELECT
+                     SUM(IF(recharge_type = 1, money, 0.00)) balanceTotal,
+                     SUM(IF(recharge_type = 2, money, 0.00)) payCreditTotal
+                 FROM ota_distributor_recharge
+                 WHERE
+                     `status` = 1
+                   AND deleted = 0
+                   AND distributor_id = #{distributorId}
+             ) t1
+                 LEFT JOIN (
+            SELECT
+                SUM(sr.money) AS amount
+            FROM ota_distributor_self_recharge sr
+            WHERE
+                sr.deleted = 0
+              AND sr.recharge_state = 1
+              AND sr.distributor_id = #{distributorId}
+        ) t2 ON 1 = 1;
     </select>
 
     <select id="getPlatTenantId" resultType="com.yc.ship.module.ota.dal.dataobject.distributor.DistributorDO">

+ 2 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderRespNewVO.java

@@ -268,7 +268,8 @@ public class TradeOrderRespNewVO {
     @Schema(description = "投保错误描述")
     private String resMsg;
 
-
+    @Schema(description = "留位到期时间")
+    private LocalDateTime delayExpireTime;
 
 
 }

+ 3 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderRespVO.java

@@ -565,5 +565,8 @@ public class TradeOrderRespVO {
     @Schema(description = "投保错误描述")
     private String resMsg;
 
+    @Schema(description = "留位到期时间")
+    private LocalDateTime delayExpireTime;
+
 
 }

+ 10 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/dataobject/order/TradeOrderDO.java

@@ -374,4 +374,14 @@ public class TradeOrderDO extends TenantSyncDO {
      * 排序
      */
     private Integer orderSort;
+
+    /**
+     * 计调游船部备注
+     */
+    private String jdRemark;
+
+    /**
+     * 延迟队列到期时间
+     */
+    private LocalDateTime delayExpireTime;
 }

+ 2 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/business/DailyBusinessStatisticsServiceImpl.java

@@ -3,6 +3,7 @@ package com.yc.ship.module.trade.service.business;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.tenant.core.aop.TenantIgnore;
 import com.yc.ship.module.trade.controller.admin.business.vo.DailyBusinessStatisticsReqVO;
 import com.yc.ship.module.trade.controller.admin.business.vo.DailyBusinessStatisticsRespVO;
 import com.yc.ship.module.trade.dal.mysql.order.TradeOrderMapper;
@@ -20,6 +21,7 @@ public class DailyBusinessStatisticsServiceImpl implements DailyBusinessStatisti
     private TradeOrderMapper tradeOrderMapper;
 
     @Override
+    @TenantIgnore
     public PageResult<DailyBusinessStatisticsRespVO> getDailyBusinessStatisticsPage(DailyBusinessStatisticsReqVO pageReqVO) {
         IPage<DailyBusinessStatisticsRespVO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
         IPage<DailyBusinessStatisticsRespVO> resultPage = tradeOrderMapper.getDailyBusinessStatisticsPage(page, pageReqVO);

+ 31 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/OtcTradeOrderServiceImpl.java

@@ -161,6 +161,7 @@ import javax.annotation.Resource;
 import java.io.*;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.Duration;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
@@ -2683,8 +2684,11 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 }
                 double hours = Double.parseDouble(autoClearTime);
                 long delayMs = (long) (hours * 60 * 60 * 1000);
+                // 根据当前时间获取延迟队列到期时间
+                LocalDateTime expireDateTime = LocalDateTime.now().plus(Duration.ofMillis(delayMs));
                 tradePublishUtils.publishHoldOrderCancelDelayMsg(orderId.toString(), delayMs);
                 log.info("留位订单创建成功,已发送{}小时自动取消延迟消息:orderId={}", autoClearTime,orderId);
+                tradeOrderMapper.update(new UpdateWrapper<TradeOrderDO>().set("delay_expire_time", expireDateTime).eq("id", orderId));
             }
             OtcTradeOrderCreateRespVO respVO = TradeOrderConvert.INSTANCE.convert(result.getData());
             TradeOrderLogUtils.setOrderInfo(orderId, null, orderStatus, append);
@@ -3829,11 +3833,38 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         if (tradeOrderDO == null) {
             return CommonResult.error(ORDER_NOT_EXIST);
         }
+        // 延迟过期时间
+        LocalDateTime delayExpireTime = tradeOrderDO.getDelayExpireTime();
+        // 判断延迟过期时间是否过期
+        LocalDateTime now = LocalDateTime.now();
+        Boolean delayExpireFlag = true;
+        if (ObjectUtil.isNotNull(delayExpireTime)) {
+            // 过期时间晚于当前时间 = 未过期
+            if (delayExpireTime.isAfter(now)) {
+                delayExpireFlag = false;
+            }
+        }
         tradeOrderMapper.update(Wrappers.<TradeOrderDO>lambdaUpdate()
                 .set(TradeOrderDO::getOrderStatus, status)
                 .set(TradeOrderDO::getUpdateTime, LocalDateTime.now())
                 .eq(TradeOrderDO::getId, orderId)
         );
+        // 如果改为留位,并且时间已过期
+        if (status == TradeOrderStatusEnum.YD.getStatus() && delayExpireFlag) {
+            log.info("订单修改为留位,orderId={}", orderId);
+            // 查询配置信息,获取取消时间
+            String autoClearTime = configApi.getPlatformConfigValueByKey("autoClearTimeoutParam.four_hours");
+            if (StrUtil.isBlank(autoClearTime)) {
+                autoClearTime = "4";
+            }
+            double hours = Double.parseDouble(autoClearTime);
+            long delayMs = (long) (hours * 60 * 60 * 1000);
+            // 根据当前时间获取延迟队列到期时间
+            LocalDateTime expireDateTime = LocalDateTime.now().plus(Duration.ofMillis(delayMs));
+            tradePublishUtils.publishHoldOrderCancelDelayMsg(orderId.toString(), delayMs);
+            log.info("订单修改为留位状态成功,已发送{}小时自动取消延迟消息:orderId={}", autoClearTime,orderId);
+            tradeOrderMapper.update(new UpdateWrapper<TradeOrderDO>().set("delay_expire_time", expireDateTime).eq("id", orderId));
+        }
         return CommonResult.success("修改成功");
     }
 

+ 5 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/report/impl/VoyageStockBoardServiceImpl.java

@@ -818,7 +818,11 @@ public class VoyageStockBoardServiceImpl implements VoyageStockBoardService {
         // 全国城市来源排行
         List<String> nationalCityRankList = cityCountMap.entrySet().stream()
                 .sorted(Map.Entry.<String, Integer>comparingByValue().reversed())
-                .map(Map.Entry::getKey)
+                .map(entry -> {
+                    String key = entry.getKey() == null ? "" : entry.getKey().toString();
+                    String value = entry.getValue() == null ? "" : entry.getValue().toString();
+                    return key + "(" + value + ")";
+                })
                 .collect(Collectors.toList());
 
         // 省份-城市排行映射

+ 40 - 24
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeOrderMapper.xml

@@ -462,38 +462,54 @@
 
     <select id="getDailyBusinessStatisticsPage"
             resultType="com.yc.ship.module.trade.controller.admin.business.vo.DailyBusinessStatisticsRespVO">
-        SELECT
-            td.source_id AS sourceId,
-            td.source_name as sourceName,
-            IFNULL(tot.free_num, 0) AS freeNum,
-            0 AS freeCount,
-            IFNULL(topay.actual_amount, 0) AS actualAmount,
-            COUNT(1) AS totalCount,
-            SUM(CASE WHEN tv.type IN ('adultPlus', 'adultTake') THEN 1 ELSE 0 END) AS adultCount,
-            SUM(CASE WHEN tv.type IN ('childTake','childPlus','childNonTake') THEN 1 ELSE 0 END) AS childCount,
-            SUM(CASE WHEN tv.type = 'with' THEN 1 ELSE 0 END) AS withCount,
-            SUM(CASE WHEN tv.type = 'leader' THEN 1 ELSE 0 END) AS leaderCount,
-            SUM(CASE WHEN tv.type IN ('babyTake','babyPlus','babyNonTake') THEN 1 ELSE 0 END) AS infantCount,
-            COUNT(1) - IFNULL(tot.free_num, 0) AS validCount
+        select  t.sourceId,
+        t.sourceName,
+        sum(t.freeNum) as freeNum,
+        sum(t.freeCount) as freeCount,
+        sum(t.actualAmount) as actualAmount,
+        sum(t.totalCount) as totalCount,
+        SUM(t.adultCount) AS adultCount,
+        SUM(t.childCount) AS childCount,
+        SUM(t.withCount) AS withCount,
+        SUM(t.leaderCount) AS leaderCount,
+        SUM(t.infantCount) AS infantCount,
+        sum(t.validCount) as validCount from (SELECT
+        DISTINCT td.id,
+        td.source_id AS sourceId,
+        td.source_name as sourceName,
+        IFNULL(tot.free_num, 0) AS freeNum,
+        CASE WHEN td.source_id IN ('2039225917977522177', '2041321150626263042','2042951563081805826') THEN COUNT(1) ELSE 0 END AS freeCount,
+        IFNULL(topay.actual_amount, 0) AS actualAmount,
+        COUNT(1) AS totalCount,
+        SUM(CASE WHEN tv.type IN ('adultPlus', 'adultTake') THEN 1 ELSE 0 END) AS adultCount,
+        SUM(CASE WHEN tv.type IN ('childTake','childPlus','childNonTake') THEN 1 ELSE 0 END) AS childCount,
+        SUM(CASE WHEN tv.type = 'with' THEN 1 ELSE 0 END) AS withCount,
+        SUM(CASE WHEN tv.type = 'leader' THEN 1 ELSE 0 END) AS leaderCount,
+        SUM(CASE WHEN tv.type IN ('babyTake','babyPlus','babyNonTake') THEN 1 ELSE 0 END) AS infantCount,
+        COUNT(1) - IFNULL(tot.free_num, 0) - CASE
+        WHEN td.source_id IN ('2039225917977522177', '2041321150626263042', '2042951563081805826')
+        THEN COUNT(1)
+        ELSE 0
+        END  AS validCount
         FROM trade_order td
-                 INNER JOIN trade_order_user tou ON td.id = tou.order_id AND tou.deleted = 0
-                 LEFT JOIN trade_detail tdl ON td.id = tdl.order_id AND tdl.deleted = 0
-                 LEFT JOIN trade_visitor tv ON tdl.id = tv.detail_id AND tv.deleted = 0
-                 left join trade_order_total tot on td.id = tot.old_order_id and tot.deleted = 0
-                 LEFT JOIN (SELECT order_id, SUM(pay_amount) AS actual_amount
-                            FROM trade_order_pay
-                            WHERE pay_status = 1 GROUP BY order_id) topay ON td.id = topay.order_id
+        INNER JOIN trade_order_user tou ON td.id = tou.order_id AND tou.deleted = 0
+        LEFT JOIN trade_detail tdl ON td.id = tdl.order_id AND tdl.deleted = 0
+        LEFT JOIN trade_visitor tv ON tdl.id = tv.detail_id AND tv.deleted = 0
+        left join trade_order_total tot on td.id = tot.old_order_id and tot.deleted = 0
+        LEFT JOIN (SELECT order_id, SUM(pay_amount) AS actual_amount
+        FROM trade_order_pay
+        WHERE pay_status = 1 and deleted=0 GROUP BY order_id) topay ON td.id = topay.order_id
         WHERE
-            td.deleted = 0
-            AND tv.type IS NOT NULL
-            AND td.order_status > 0
+        td.deleted = 0
+        AND tv.type IS NOT NULL
+        AND td.order_status in (1, 6, 9, 10, 13, 14, 15)
         <if test="vo.voyageId != null and vo.voyageId != ''">
             AND td.voyage_id = #{vo.voyageId}
         </if>
         <if test="vo.routeId != null and vo.routeId != ''">
             AND exists (select 1 from product_voyage top where top.id = td.voyage_id and top.route_id = #{vo.routeId})
         </if>
-        GROUP BY td.source_id;
+        GROUP BY td.id) t GROUP BY t.sourceId;
 
     </select>
 

+ 21 - 21
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/report/DistributorBalanceMapper.xml

@@ -17,7 +17,7 @@
                 d.id,
                 d.name AS travelAgency,
                 IFNULL(recharge.total_recharge, 0) AS totalRechargeAmount,
-                IFNULL(consume.total_consume, 0) AS totalConsumeAmount,
+                IFNULL(topay.actual_amount, 0) AS totalConsumeAmount,
                 IFNULL(d.balance, 0) AS balance
             FROM ota_distributor d
             LEFT JOIN (
@@ -46,36 +46,36 @@
                         sr.distributor_id,
                         SUM(sr.money) AS recharge_amount
                     FROM ota_distributor_self_recharge sr
-                    INNER JOIN ota_trade_log tl ON tl.id = sr.recharge_log_id AND tl.deleted = 0
                     WHERE sr.deleted = 0
                       AND sr.recharge_state = 1
-                      AND tl.trade_type = 1
                     <if test="vo.startDate != null">
-                        AND DATE(tl.trade_time) &gt;= #{vo.startDate}
+                        AND DATE(sr.create_time) &gt;= #{vo.startDate}
                     </if>
                     <if test="vo.endDate != null">
-                        AND DATE(tl.trade_time) &lt;= #{vo.endDate}
+                        AND DATE(sr.create_time) &lt;= #{vo.endDate}
                     </if>
                     GROUP BY sr.distributor_id
                 ) t
                 GROUP BY distributor_id
             ) recharge ON d.id = recharge.distributor_id
-            LEFT JOIN (
-                SELECT 
-                    tl.distributor_id,
-                    SUM(tl.trade_amount) AS total_consume
-                FROM ota_trade_log tl
-                WHERE tl.deleted = 0
-                  AND tl.trade_mode = 2
-                  AND tl.trade_type = 1
-                <if test="vo.startDate != null">
-                    AND DATE(tl.trade_time) &gt;= #{vo.startDate}
-                </if>
-                <if test="vo.endDate != null">
-                    AND DATE(tl.trade_time) &lt;= #{vo.endDate}
-                </if>
-                GROUP BY tl.distributor_id
-            ) consume ON d.id = consume.distributor_id
+
+            LEFT JOIN (SELECT
+                        td.source_id,
+                        SUM( tp.pay_amount ) AS actual_amount
+                    FROM
+                    trade_order_pay tp
+                    LEFT JOIN trade_order td ON td.id = tp.order_id
+                    AND td.deleted = 0
+                    where
+                    tp.pay_status = 1
+                    AND tp.deleted = 0
+                    <if test="vo.startDate != null">
+                        AND DATE(tp.payment_date) &gt;= #{vo.startDate}
+                    </if>
+                    <if test="vo.endDate != null">
+                        AND DATE(tp.payment_date) &lt;= #{vo.endDate}
+                    </if>
+                GROUP BY td.source_id) topay ON d.id = topay.source_id
             WHERE d.deleted = 0
             <if test="vo.travelAgency != null and vo.travelAgency != ''">
                 AND d.name LIKE CONCAT('%', #{vo.travelAgency}, '%')