ZHOUTD 2 недель назад
Родитель
Сommit
2cac7b404e

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

@@ -724,7 +724,7 @@ public class OtcTradeOrderController {
     @OperateLog(type = API)
     @Operation(summary = "win-订单列表[分页]", description = "修改订单状态")
     @PreAuthorize("@ss.hasPermission('trade:order:status-update')")
-    public CommonResult<?> updateStatus(@RequestParam Long orderId, @RequestParam Integer status) {
+    public CommonResult<?> updateStatus(@RequestParam List<Long> orderId, @RequestParam Integer status) {
         return success(otcTradeOrderService.updateStatus(orderId, status));
     }
 

+ 1 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/OtcTradeOrderService.java

@@ -152,7 +152,7 @@ public interface OtcTradeOrderService {
 
     CommonResult<?> cancelAudit(Long orderId, Integer auditStatus, BigDecimal damaged);
 
-    CommonResult<?> updateStatus(Long orderId, Integer  status);
+    String updateStatus(List<Long> orderIds, Integer status);
 
     /**
      * 获取订单统计信息

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

@@ -3870,49 +3870,70 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
     }
 
     @Override
-    @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.UPDATE_ORDER_STATUS)
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
-    public CommonResult<?> updateStatus(Long orderId, Integer status) {
-        TradeOrderDO tradeOrderDO = tradeOrderMapper.selectById(orderId);
-        if (tradeOrderDO == null) {
-            return CommonResult.error(ORDER_NOT_EXIST);
+    public String updateStatus(List<Long> orderIds, Integer status) {
+        List<Long> distinctOrderIds = orderIds == null ? Collections.emptyList() : orderIds.stream()
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.toList());
+        if (CollUtil.isEmpty(distinctOrderIds)) {
+            throw exception(ORDER_NOT_EXIST);
         }
-        Integer orderStatus = tradeOrderDO.getOrderStatus();
-        // 延迟过期时间
-        LocalDateTime delayExpireTime = tradeOrderDO.getDelayExpireTime();
-        // 判断延迟过期时间是否过期
-        LocalDateTime now = LocalDateTime.now();
-        Boolean delayExpireFlag = true;
-        if (ObjectUtil.isNotNull(delayExpireTime)) {
-            // 过期时间晚于当前时间 = 未过期
-            if (delayExpireTime.isAfter(now)) {
-                delayExpireFlag = false;
-            }
+        List<TradeOrderDO> tradeOrders = tradeOrderMapper.selectByIds(distinctOrderIds);
+        if (tradeOrders.size() != distinctOrderIds.size()) {
+            throw exception(ORDER_NOT_EXIST);
         }
-        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");
+
+        LocalDateTime now = LocalDateTime.now();
+        String autoClearTime = null;
+        Long delayMs = null;
+        if (Objects.equals(status, TradeOrderStatusEnum.YD.getStatus())) {
+            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));
-        }
-        Map<String, Object> append = TradeOrderLogUtils.append("result", "修改订单状态成功");
-        TradeOrderLogUtils.setOrderInfo(orderId, orderStatus, status, append);
-        return CommonResult.success("修改成功");
+            delayMs = (long) (hours * 60 * 60 * 1000);
+        }
+
+        LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
+        for (TradeOrderDO tradeOrder : tradeOrders) {
+            Integer beforeStatus = tradeOrder.getOrderStatus();
+            tradeOrderMapper.update(Wrappers.<TradeOrderDO>lambdaUpdate()
+                    .set(TradeOrderDO::getOrderStatus, status)
+                    .set(TradeOrderDO::getUpdateTime, now)
+                    .eq(TradeOrderDO::getId, tradeOrder.getId()));
+
+            LocalDateTime delayExpireTime = tradeOrder.getDelayExpireTime();
+            boolean delayExpired = delayExpireTime == null || !delayExpireTime.isAfter(now);
+            if (delayMs != null && delayExpired) {
+                LocalDateTime expireDateTime = now.plus(Duration.ofMillis(delayMs));
+                tradePublishUtils.publishHoldOrderCancelDelayMsg(tradeOrder.getId().toString(), delayMs);
+                log.info("订单修改为留位状态成功,已发送{}小时自动取消延迟消息:orderId={}",
+                        autoClearTime, tradeOrder.getId());
+                tradeOrderMapper.update(new UpdateWrapper<TradeOrderDO>()
+                        .set("delay_expire_time", expireDateTime)
+                        .eq("id", tradeOrder.getId()));
+            }
+            insertUpdateStatusLog(loginUser, tradeOrder.getId(), beforeStatus, status);
+        }
+        return distinctOrderIds.size() > 1
+                ? "批量修改成功,共修改" + distinctOrderIds.size() + "个订单"
+                : "修改成功";
+    }
+
+    private void insertUpdateStatusLog(LoginUser loginUser, Long orderId,
+                                       Integer beforeStatus, Integer afterStatus) {
+        TradeOrderLogDO logDO = new TradeOrderLogDO();
+        logDO.setId(IdWorker.getId());
+        logDO.setOrderId(orderId);
+        logDO.setUserId(loginUser == null ? 0L : loginUser.getId());
+        logDO.setUserType(loginUser == null ? 0 : loginUser.getUserType());
+        logDO.setBeforeStatus(beforeStatus);
+        logDO.setAfterStatus(afterStatus);
+        logDO.setOperateType(TradeOrderOperateTypeEnum.UPDATE_ORDER_STATUS.getType());
+        logDO.setContent("修改内容:修改订单状态成功");
+        tradeOrderLogMapper.insert(logDO);
     }