jinshihui hai 1 día
pai
achega
1a32ff8ca1
Modificáronse 15 ficheiros con 246 adicións e 89 borrados
  1. 31 0
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TOrderController.java
  2. 7 4
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TXiangmuController.java
  3. 9 2
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/WeSqController.java
  4. 2 3
      nightFragrance-common/src/main/java/com/ylx/common/core/domain/model/WxLoginUser.java
  5. 13 22
      nightFragrance-framework/src/main/java/com/ylx/framework/manager/factory/AsyncFactory.java
  6. 1 1
      nightFragrance-framework/src/main/java/com/ylx/framework/web/service/WxTokenService.java
  7. 1 1
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/CancelOrderApplication.java
  8. 14 13
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/TFareFreeRule.java
  9. 9 3
      nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/FareFreeRuleVo.java
  10. 8 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/CancelOrderApplicationService.java
  11. 17 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/TOrderService.java
  12. 43 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/CancelOrderApplicationServiceImpl.java
  13. 13 37
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TFareFreeRuleServiceImpl.java
  14. 5 3
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TJsServiceImpl.java
  15. 73 0
      nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TOrderServiceImpl.java

+ 31 - 0
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TOrderController.java

@@ -179,6 +179,37 @@ public class TOrderController extends BaseController {
         }
     }
 
+    /**
+     * 取消退单申请(用户操作的接口)
+     *
+     * 业务流程:
+     * 1. 用户在订单详情页点击"取消退单申请"按钮
+     * 2. 系统校验订单状态和退单申请状态
+     * 3. 取消退单申请,将申请状态标记为已取消
+     * 4. 恢复订单到申请前的原始状态
+     * 5. 返回成功提示
+     *
+     * @param order 订单对象,需要包含cId(订单ID)
+     * @return R 操作结果
+     */
+    @ApiOperation("取消退单申请")
+    @RequestMapping(value = "wx/cancelApplyCancle", method = RequestMethod.POST)
+    public R cancelApplyCancle(@RequestBody TOrder order) {
+        try {
+            log.info("收到取消退单申请请求,订单ID:{}", order.getcId());
+            // 调用服务层处理取消退单申请
+            orderService.cancelApplyCancle(order);
+            // 返回成功提示
+            return R.ok("已成功取消退单申请,订单已恢复到原状态");
+        } catch (ServiceException s) {
+            log.error("取消退单申请失败:{}", s.getMessage());
+            return R.fail(s.getMessage());
+        } catch (Exception e) {
+            log.error("取消退单申请系统异常", e);
+            return R.fail("系统异常,请稍后重试");
+        }
+    }
+
     /**
      * 取消订单(用户操作的接口)
      *

+ 7 - 4
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TXiangmuController.java

@@ -80,11 +80,14 @@ public class TXiangmuController {
      */
     @GetMapping(value = "wx/getByJsId")
     @ApiOperation("查询指定技师的项目")
-    public R<List<TXiangmu>> getByJsId(@RequestParam String jsId) {
+    public R<List<TXiangmu>> getByJsId(@RequestParam String openId) {
         try {
-            log.info("查询指定技师的项目,技师ID:{}", jsId);
-            //通过技师ID查询技师项目编号
-            TJs js = jsService.getById(jsId);
+            log.info("查询指定技师的项目,openId:{}", openId);
+            //通过openId查询技师项目编号
+            TJs js = jsService.getOne(new LambdaQueryWrapper<TJs>().eq(TJs::getcOpenId, openId));
+            if (js == null) {
+                return R.fail("该技师不存在");
+            }
             String bhList = js.getcBhList();
             if (StringUtils.isBlank(bhList)) {
                 return R.fail("该技师没有项目");

+ 9 - 2
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/WeSqController.java

@@ -23,11 +23,13 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
 /**
  * @author b16mt
@@ -59,12 +61,15 @@ public class WeSqController extends BaseController {
     @Resource
     private WxTokenService wxTokenService;
 
+    @Autowired
+    public RedisTemplate redisTemplate;
+
 
     /**
      * 获取token和userInfo
      *
      * @param code 微信授权码
-     * @return 访问令牌
+     * @return R<WxLoginUser> 访问令牌
      */
     @GetMapping("/getAccessToken")
     //@Log(title = "公众号网页登录", businessType = BusinessType.OTHER)
@@ -110,6 +115,8 @@ public class WeSqController extends BaseController {
             // 生成并返回令牌
             String token = wxTokenService.createToken(wxUser);
             log.info("token的值:{}", token);
+            //给我把token的值保存到redis中
+            redisTemplate.opsForValue().set(wxUser.getCOpenid(), token, 180, TimeUnit.MINUTES);
             if (token == null || token.isEmpty()) {
                 return R.fail("生成令牌失败");
             }
@@ -118,7 +125,7 @@ public class WeSqController extends BaseController {
             // 记录登录信息
             AsyncManager.me().execute(AsyncFactory.recordLogininfor(wxUser.getCOpenid(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
             return R.ok(wxUser);
-        } catch (BeansException e) {
+        } catch (Exception e) {
             e.printStackTrace();
             throw new RuntimeException(e);
         }

+ 2 - 3
nightFragrance-common/src/main/java/com/ylx/common/core/domain/model/WxLoginUser.java

@@ -1,5 +1,4 @@
 package com.ylx.common.core.domain.model;
-
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
@@ -7,16 +6,16 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.userdetails.UserDetails;
-
 import java.math.BigDecimal;
 import java.util.Collection;
 
 @Data
 public class WxLoginUser implements UserDetails {
+
     private static final long serialVersionUID = 1L;
 
     /**
-     * 用户唯一标识
+     * 用户token
      */
     private String token;
 

+ 13 - 22
nightFragrance-framework/src/main/java/com/ylx/framework/manager/factory/AsyncFactory.java

@@ -1,6 +1,7 @@
 package com.ylx.framework.manager.factory;
 
 import java.util.TimerTask;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import com.ylx.common.constant.Constants;
@@ -21,29 +22,25 @@ import eu.bitwalker.useragentutils.UserAgent;
  *
  * @author ylx
  */
-public class AsyncFactory
-{
+public class AsyncFactory {
     private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user");
 
     /**
      * 记录登录信息
      *
      * @param username 用户名
-     * @param status 状态
-     * @param message 消息
-     * @param args 列表
+     * @param status   状态
+     * @param message  消息
+     * @param args     列表
      * @return 任务task
      */
     public static TimerTask recordLogininfor(final String username, final String status, final String message,
-            final Object... args)
-    {
+                                             final Object... args) {
         final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
         final String ip = IpUtils.getIpAddr();
-        return new TimerTask()
-        {
+        return new TimerTask() {
             @Override
-            public void run()
-            {
+            public void run() {
                 String address = AddressUtils.getRealAddressByIP(ip);
                 StringBuilder s = new StringBuilder();
                 s.append(LogUtils.getBlock(ip));
@@ -66,12 +63,9 @@ public class AsyncFactory
                 logininfor.setOs(os);
                 logininfor.setMsg(message);
                 // 日志状态
-                if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER))
-                {
+                if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) {
                     logininfor.setStatus(Constants.SUCCESS);
-                }
-                else if (Constants.LOGIN_FAIL.equals(status))
-                {
+                } else if (Constants.LOGIN_FAIL.equals(status)) {
                     logininfor.setStatus(Constants.FAIL);
                 }
                 // 插入数据
@@ -86,13 +80,10 @@ public class AsyncFactory
      * @param operLog 操作日志信息
      * @return 任务task
      */
-    public static TimerTask recordOper(final SysOperLog operLog)
-    {
-        return new TimerTask()
-        {
+    public static TimerTask recordOper(final SysOperLog operLog) {
+        return new TimerTask() {
             @Override
-            public void run()
-            {
+            public void run() {
                 // 远程查询操作地点
                 operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp()));
                 SpringUtils.getBean(ISysOperLogService.class).insertOperlog(operLog);

+ 1 - 1
nightFragrance-framework/src/main/java/com/ylx/framework/web/service/WxTokenService.java

@@ -157,7 +157,7 @@ public class WxTokenService {
      * 从数据声明生成令牌
      *
      * @param claims 数据声明
-     * @return 令牌
+     * @return String 令牌
      */
     private String createToken(Map<String, Object> claims) {
         String token = Jwts.builder()

+ 1 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/domain/CancelOrderApplication.java

@@ -101,7 +101,7 @@ public class CancelOrderApplication implements Serializable {
      private Integer orderStatus;
 
     /**
-     * 审核状态(0:待审核,1:已审核,2:已拒绝
+     * 审核状态(0:待审核,1:已审核,2:已取消
      */
     private Integer auditStatus;
 

+ 14 - 13
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TFareFreeRule.java

@@ -55,12 +55,18 @@ public class TFareFreeRule implements Serializable {
     private String projectId;
 
     /**
-     * 服务时间段列表
-     * 格式:[{"startTime":"08:00","endTime":"12:00"},{"startTime":"14:00","endTime":"18:00"}]
+     * 时间范围1
      */
-    @TableField(value = "time_ranges", typeHandler = FastjsonTypeHandler.class)
-    @ApiModelProperty("服务时间段列表")
-    private List<TimeRange> timeRanges;
+    @ApiModelProperty("时间范围1")
+    @TableField(value = "time_range1")
+    private String timeRange1;
+
+     /**
+     * 时间范围2
+     */
+    @ApiModelProperty("时间范围2")
+    @TableField(value = "time_range2")
+    private String timeRange2;
 
     /**
      * 最小距离(公里)
@@ -106,15 +112,10 @@ public class TFareFreeRule implements Serializable {
         private static final long serialVersionUID = 1L;
 
         /**
-         * 开始时间(格式:HH:mm)
+         * 时间范围(格式:HH:mm)
          */
-        @ApiModelProperty("开始时间")
-        private String startTime;
+        @ApiModelProperty("时间范围(格式:HH:mm)")
+        private String timeRange;
 
-        /**
-         * 结束时间(格式:HH:mm)
-         */
-        @ApiModelProperty("结束时间")
-        private String endTime;
     }
 }

+ 9 - 3
nightFragrance-massage/src/main/java/com/ylx/massage/domain/vo/FareFreeRuleVo.java

@@ -43,11 +43,17 @@ public class FareFreeRuleVo implements Serializable {
     @ApiModelProperty("服务项目名称列表")
     private String projectNames;
 
+     /**
+     * 服务时间段1
+     */
+    @ApiModelProperty("服务时间段1")
+    private String timeRanges1;
+
     /**
-     * 服务时间段列表
+     * 服务时间段2
      */
-    @ApiModelProperty("服务时间段列表")
-    private List<TimeRangeVo> timeRanges;
+    @ApiModelProperty("服务时间段2")
+    private String timeRanges2;
 
     /**
      * 最小距离(公里)

+ 8 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/CancelOrderApplicationService.java

@@ -27,4 +27,12 @@ public interface CancelOrderApplicationService extends IService<CancelOrderAppli
      * @return CancelOrderApplication 退单申请记录
      */
     CancelOrderApplication getInfoByOrderId(String orderId);
+
+    /**
+     * 取消退单申请
+     *
+     * @param orderId 订单ID
+     * @return Boolean 操作结果
+     */
+    Boolean cancelApplication(String orderId);
 }

+ 17 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/TOrderService.java

@@ -93,4 +93,21 @@ public interface TOrderService extends IService<TOrder> {
      * @return 申请结果
      */
     Boolean applyCancle(TOrder order);
+
+    /**
+     * 取消退单申请
+     * 用户主动取消退单申请,恢复订单状态
+     *
+     * 业务流程:
+     * 1. 参数校验(订单ID不能为空)
+     * 2. 查询订单和退单申请记录
+     * 3. 校验订单状态必须为"退单待审核"(6)
+     * 4. 校验退单申请状态必须为"待审核"(0)
+     * 5. 调用退单申请服务取消申请
+     * 6. 恢复订单状态到申请前的原始状态
+     *
+     * @param order 订单对象,需要包含cId(订单ID)
+     * @return 操作结果
+     */
+    Boolean cancelApplyCancle(TOrder order);
 }

+ 43 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/CancelOrderApplicationServiceImpl.java

@@ -117,6 +117,9 @@ public class CancelOrderApplicationServiceImpl extends ServiceImpl<com.ylx.massa
         application.setOrderAmount(order.getTotalPrice() != null ? order.getTotalPrice() : BigDecimal.ZERO);
         //application.setRefundAmount(order.getTotalPrice() != null ? order.getTotalPrice() : BigDecimal.ZERO);
 
+        // 保存订单原始状态,用于取消申请时恢复订单状态
+        application.setOrderStatus(currentStatus);
+
         // 设置申请信息
         application.setAuditStatus(0); // 0:待审核
         application.setApplicationTime(LocalDateTime.now());
@@ -211,4 +214,44 @@ public class CancelOrderApplicationServiceImpl extends ServiceImpl<com.ylx.massa
         }
         return 0L;
     }
+
+    /**
+     * 取消退单申请
+     *
+     * 业务流程:
+     * 1. 验证退单申请是否存在
+     * 2. 验证退单申请状态是否为待审核(只有待审核的申请才能取消)
+     * 3. 更新退单申请记录的审核状态为已取消(使用 auditStatus = 3 表示用户主动取消)
+     * 4. 返回操作结果(订单状态的恢复由调用方 TOrderService 处理)
+     *
+     * @param orderId 订单ID
+     * @return Boolean 操作结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean cancelApplication(String orderId) {
+        log.info("开始取消退单申请,订单ID:{}", orderId);
+
+        // 1. 查询退单申请记录
+        CancelOrderApplication application = getInfoByOrderId(orderId);
+        if (application == null) {
+            throw new ServiceException("退单申请不存在");
+        }
+
+        // 2. 验证退单申请状态 - 只有待审核的申请才能取消
+        if (application.getAuditStatus() != 0) {
+            throw new ServiceException("当前退单申请状态不允许取消,只有待审核的申请可以取消");
+        }
+
+        // 3. 更新退单申请记录状态为已取消
+        // 使用 auditStatus = 3 表示用户主动取消(区别于审核拒绝的 2)
+        application.setAuditStatus(2);
+        application.setUpdateTime(LocalDateTime.now());
+        boolean updated = this.updateById(application);
+        if (!updated) {
+            throw new ServiceException("取消退单申请失败");
+        }
+        log.info("退单申请取消成功,订单ID:{},申请ID:{}", orderId, application.getId());
+        return Boolean.TRUE;
+    }
 }

+ 13 - 37
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TFareFreeRuleServiceImpl.java

@@ -127,26 +127,6 @@ public class TFareFreeRuleServiceImpl extends ServiceImpl<TFareFreeRuleMapper, T
             FareFreeRuleVo vo = new FareFreeRuleVo();
             BeanUtils.copyProperties(rule, vo);
 
-            // 转换时间段
-            if (CollectionUtil.isNotEmpty(rule.getTimeRanges())) {
-                List<TimeRangeVo> timeRangeVos = new java.util.ArrayList<>();
-                for (Object item : rule.getTimeRanges()) {
-                    try {
-                        // 处理 JSONObject 类型(Fastjson 反序列化后的类型)
-                        if (item instanceof com.alibaba.fastjson.JSONObject) {
-                            com.alibaba.fastjson.JSONObject json = (com.alibaba.fastjson.JSONObject) item;
-                            TimeRangeVo timeRangeVo = TimeRangeVo.builder()
-                                    .startTime(json.getString("startTime"))
-                                    .endTime(json.getString("endTime"))
-                                    .build();
-                            timeRangeVos.add(timeRangeVo);
-                        }
-                    } catch (Exception e) {
-                        log.error("转换时间段失败,item类型:{},内容:{}", item.getClass().getName(), item, e);
-                    }
-                }
-                vo.setTimeRanges(timeRangeVos);
-            }
 
             // 查询项目名称
             if (StringUtils.isNotBlank(rule.getProjectId())) {
@@ -220,26 +200,22 @@ public class TFareFreeRuleServiceImpl extends ServiceImpl<TFareFreeRuleMapper, T
         }
 
         // 2. 校验时间段
-        if (CollectionUtil.isEmpty(fareFreeRule.getTimeRanges())) {
-            throw new ServiceException("请至少添加一个服务时间段");
+        if (StringUtils.isBlank(fareFreeRule.getTimeRange1())) {
+            throw new ServiceException("服务时间段1不能为空");
         }
 
-        // 3. 校验时间段格式
-        for (TFareFreeRule.TimeRange timeRange : fareFreeRule.getTimeRanges()) {
-            if (StringUtils.isBlank(timeRange.getStartTime()) || StringUtils.isBlank(timeRange.getEndTime())) {
-                throw new ServiceException("时间段开始时间和结束时间不能为空");
-            }
-
-            // 校验时间格式
-            if (!timeRange.getStartTime().matches("^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$") ||
-                    !timeRange.getEndTime().matches("^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$")) {
-                throw new ServiceException("时间格式错误,请使用 HH:mm 格式(如:08:00)");
-            }
+        if (StringUtils.isBlank(fareFreeRule.getTimeRange2())) {
+            throw new ServiceException("服务时间段2不能为空");
+        }
 
-            // 校验时间范围
-            if (timeRange.getStartTime().compareTo(timeRange.getEndTime()) >= 0) {
-                throw new ServiceException("开始时间必须小于结束时间");
-            }
+        // 3. 校验时间段格式
+        // 校验时间格式
+        if (!fareFreeRule.getTimeRange1().matches("^([0-1]?[0-9]|2[0-3]):[0-5][0-9]-([0-1]?[0-9]|2[0-3]):[0-5][0-9]$")) {
+            throw new ServiceException("时间格式错误,请使用 HH:mm 格式(如:08:00)");
+        }
+        // 校验时间格式
+        if (!fareFreeRule.getTimeRange2().matches("^([0-1]?[0-9]|2[0-3]):[0-5][0-9]-([0-1]?[0-9]|2[0-3]):[0-5][0-9]$")) {
+            throw new ServiceException("时间格式错误,请使用 HH:mm 格式(如:08:00)");
         }
 
         // 4. 校验距离

+ 5 - 3
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TJsServiceImpl.java

@@ -361,10 +361,12 @@ public class TJsServiceImpl extends ServiceImpl<TJsMapper, TJs> implements TJsSe
             generateVirtualTechnicians(js, virtualTechNumber);
         }
 
-        /*String token = weChatUtil.getToken();
-        //获取的二维码ticket
+        String token = weChatUtil.getToken();
+        log.info("获取到的token: {}", token);
+        //获取二维码ticket
         Map<?, ?> jsTicket = weChatUtil.getJsTicket(token, js.getId());
-        js.setTicket(jsTicket.get("ticket").toString());*/
+        log.info("获取到的jsTicket: {}", jsTicket);
+        js.setTicket(jsTicket.get("ticket").toString());
         return this.updateById(js);
     }
 

+ 73 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TOrderServiceImpl.java

@@ -1310,4 +1310,77 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         return Boolean.TRUE;
     }
 
+    /**
+     * 取消退单申请
+     * 用户主动取消退单申请,恢复订单状态
+     *
+     * 业务流程:
+     * 1. 参数校验(订单ID不能为空)
+     * 2. 查询订单和退单申请记录
+     * 3. 校验订单状态必须为"退单待审核"(6)
+     * 4. 校验退单审核状态必须为"待审核"(0)
+     * 5. 调用退单申请服务取消申请
+     * 6. 恢复订单状态到申请前的原始状态
+     *
+     * @param order 订单对象,需要包含cId(订单ID)
+     * @return Boolean 操作结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean cancelApplyCancle(TOrder order) {
+        log.info("开始取消退单申请,订单ID:{}", order.getcId());
+
+        // 1. 参数校验
+        if (StringUtils.isBlank(order.getcId())) {
+            throw new ServiceException("订单ID不能为空");
+        }
+
+        // 2. 查询订单信息
+        TOrder existingOrder = this.getById(order.getcId());
+        if (existingOrder == null) {
+            throw new ServiceException("订单不存在");
+        }
+
+        // 3. 校验订单状态 - 只有"退单待审核"状态的订单才能取消申请
+        Integer currentStatus = existingOrder.getnStatus();
+        if (!OrderStatusEnum.CANCEL_APPLICATION_PENDING.getCode().equals(currentStatus)) {
+            throw new ServiceException("当前订单状态不允许取消退单申请");
+        }
+
+        // 4. 查询退单申请记录
+        com.ylx.massage.domain.CancelOrderApplication application = cancelOrderApplicationService.getInfoByOrderId(order.getcId());
+        if (application == null) {
+            throw new ServiceException("退单申请记录不存在");
+        }
+
+        // 5. 校验退单申请状态 - 只有"待审核"的申请才能取消
+        if (application.getAuditStatus() != 0) {
+            throw new ServiceException("当前退单申请状态不允许取消");
+        }
+
+        // 6. 获取订单原始状态(在申请退单时保存的状态)
+        Integer originalStatus = application.getOrderStatus();
+        if (originalStatus == null) {
+            throw new ServiceException("无法获取订单原始状态,取消申请失败");
+        }
+
+        // 7. 调用退单申请服务取消申请
+        try {
+            cancelOrderApplicationService.cancelApplication(order.getcId());
+            log.info("退单申请记录取消成功,订单ID:{}", order.getcId());
+        } catch (ServiceException e) {
+            log.error("取消退单申请失败:{}", e.getMessage());
+            throw e;
+        }
+
+        // 8. 恢复订单状态到原始状态
+        existingOrder.setnStatus(originalStatus);
+        boolean updated = this.updateById(existingOrder);
+        if (!updated) {
+            throw new ServiceException("恢复订单状态失败");
+        }
+        log.info("取消退单申请处理完成,订单ID:{},恢复到状态:{}", order.getcId(), originalStatus);
+        return Boolean.TRUE;
+    }
+
 }