Ver código fonte

锁位改留位二次自动清位

caotao 2 semanas atrás
pai
commit
79d7d56966

+ 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;
 }

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

@@ -158,6 +158,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;
@@ -2625,8 +2626,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);
@@ -3764,11 +3768,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("修改成功");
     }