Переглянути джерело

Merge remote-tracking branch 'origin/dev' into dev

jinshihui 12 годин тому
батько
коміт
0a0122ac26
22 змінених файлів з 237 додано та 28 видалено
  1. 2 2
      nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TCommentUserController.java
  2. 1 1
      nightFragrance-massage/src/main/java/com/ylx/massage/mapper/TCommentUserAuditMapper.java
  3. 6 3
      nightFragrance-massage/src/main/java/com/ylx/order/controller/AfterSalesServiceController.java
  4. 1 1
      nightFragrance-massage/src/main/java/com/ylx/order/controller/OrderCommentController.java
  5. 8 0
      nightFragrance-massage/src/main/java/com/ylx/order/controller/OrderController.java
  6. 61 0
      nightFragrance-massage/src/main/java/com/ylx/order/domain/AfterSalesService.java
  7. 1 2
      nightFragrance-massage/src/main/java/com/ylx/order/domain/CommentUserAudit.java
  8. 26 0
      nightFragrance-massage/src/main/java/com/ylx/order/domain/dto/OrderCancleDTO.java
  9. 22 0
      nightFragrance-massage/src/main/java/com/ylx/order/enums/AfterSaleServiceStatusEnum.java
  10. 5 6
      nightFragrance-massage/src/main/java/com/ylx/order/enums/OrderStatusEnum.java
  11. 7 0
      nightFragrance-massage/src/main/java/com/ylx/order/mapper/AfterSalesServiceMapper.java
  12. 1 1
      nightFragrance-massage/src/main/java/com/ylx/order/mapper/TCommentUserMapper.java
  13. 7 0
      nightFragrance-massage/src/main/java/com/ylx/order/service/IAfterSalesServiceService.java
  14. 2 2
      nightFragrance-massage/src/main/java/com/ylx/order/service/TCommentUserAuditService.java
  15. 1 1
      nightFragrance-massage/src/main/java/com/ylx/order/service/TCommentUserService.java
  16. 8 0
      nightFragrance-massage/src/main/java/com/ylx/order/service/TOrderService.java
  17. 14 0
      nightFragrance-massage/src/main/java/com/ylx/order/service/impl/AfterSalesServiceServiceImpl.java
  18. 4 4
      nightFragrance-massage/src/main/java/com/ylx/order/service/impl/TCommentUserAuditServiceImpl.java
  19. 4 4
      nightFragrance-massage/src/main/java/com/ylx/order/service/impl/TCommentUserServiceImpl.java
  20. 48 0
      nightFragrance-massage/src/main/java/com/ylx/order/service/impl/TOrderServiceImpl.java
  21. 7 0
      nightFragrance-massage/src/main/resources/mapper/order/AfterSalesServiceMapper.xml
  22. 1 1
      nightFragrance-massage/src/main/resources/mapper/order/TCommentUserMapper.xml

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

@@ -7,8 +7,8 @@ import com.ylx.common.core.controller.BaseController;
 import com.ylx.common.core.domain.R;
 import com.ylx.common.core.domain.model.WxLoginUser;
 import com.ylx.common.utils.SecurityUtils;
-import com.ylx.massage.service.TCommentUserAuditService;
-import com.ylx.massage.service.TCommentUserService;
+import com.ylx.order.service.TCommentUserAuditService;
+import com.ylx.order.service.TCommentUserService;
 import com.ylx.order.domain.TCommentUser;
 import com.ylx.system.domain.vo.ReviewUserCommentsDto;
 import com.ylx.system.domain.vo.BatchAuditCommentsDto;

+ 1 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/mapper/TCommentUserAuditMapper.java

@@ -1,7 +1,7 @@
 package com.ylx.massage.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.ylx.massage.domain.CommentUserAudit;
+import com.ylx.order.domain.CommentUserAudit;
 import org.apache.ibatis.annotations.Mapper;
 
 /**

+ 6 - 3
nightFragrance-massage/src/main/java/com/ylx/order/controller/RefundController.java → nightFragrance-massage/src/main/java/com/ylx/order/controller/AfterSalesServiceController.java

@@ -2,6 +2,7 @@ package com.ylx.order.controller;
 
 import com.ylx.common.core.domain.R;
 import com.ylx.order.domain.vo.RegulationConfigVO;
+import com.ylx.order.service.IAfterSalesServiceService;
 import com.ylx.order.service.RegulationService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -14,13 +15,15 @@ import javax.annotation.Resource;
 import java.util.List;
 
 @RestController
-@RequestMapping("/order/refund")
-@Api(tags = {"订单退款模块"})
+@RequestMapping("/order/after/sale")
+@Api(tags = {"订单售后模块"})
 @Slf4j
-public class RefundController {
+public class AfterSalesServiceController {
 
     @Resource
     private RegulationService regulationService;
+    @Resource
+    private IAfterSalesServiceService afterSalesServiceService;
 
     @ApiOperation("根据商户履约状态获取退款描述")
     @GetMapping("/desc/list")

+ 1 - 1
nightFragrance-massage/src/main/java/com/ylx/order/controller/OrderCommentController.java

@@ -1,7 +1,7 @@
 package com.ylx.order.controller;
 
 import com.ylx.common.core.domain.R;
-import com.ylx.massage.service.TCommentUserService;
+import com.ylx.order.service.TCommentUserService;
 import com.ylx.order.domain.dto.OrderCommentDTO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;

+ 8 - 0
nightFragrance-massage/src/main/java/com/ylx/order/controller/OrderController.java

@@ -2,6 +2,7 @@ package com.ylx.order.controller;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ylx.common.core.domain.R;
+import com.ylx.order.domain.dto.OrderCancleDTO;
 import com.ylx.order.domain.dto.OrderDateQueryDTO;
 import com.ylx.order.domain.dto.OrderDeleteDTO;
 import com.ylx.order.domain.dto.OrderSubmitDTO;
@@ -59,4 +60,11 @@ public class OrderController {
             @PathVariable @ApiParam(value = "订单ID", required = true, example = "1") Long orderId) {
         return R.ok(orderService.getOrderDetailById(orderId));
     }
+    @ApiOperation("用户取消订单")
+    @PostMapping("/cancel")
+    public R<?> cancelOrder(@RequestBody @Validated OrderCancleDTO dto) {
+        // 调用服务层取消订单,返回影响行数或订单信息
+        int result = orderService.cancelOrder(dto);
+        return result > 0 ? R.ok("订单已取消") : R.fail("订单取消失败");
+    }
 }

+ 61 - 0
nightFragrance-massage/src/main/java/com/ylx/order/domain/AfterSalesService.java

@@ -0,0 +1,61 @@
+package com.ylx.order.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.ylx.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "AfterSalesService", description = "售后服务表")
+public class AfterSalesService extends BaseEntity {
+    private static final long serialVersionUID = -4127766374308440702L;
+
+    @ApiModelProperty("主键ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("售后单号")
+    private String serviceNo;
+
+    @ApiModelProperty("关联的主订单ID")
+    private Long orderId;
+
+    @ApiModelProperty("发起售后的用户ID")
+    private Long userId;
+
+    @ApiModelProperty("售后状态:0=待审核, 1=审核通过(退款中), 2=审核拒绝, 3=退款成功, 4=退款失败 ")
+    private Integer status;
+
+    @ApiModelProperty("退款金额")
+    private BigDecimal actualRefundAmount;
+
+    @ApiModelProperty("退款规则描述")
+    private String refundDesc;
+
+    @ApiModelProperty("审核人ID")
+    private Long auditUserId;
+
+    @ApiModelProperty("审核时间")
+    private LocalDateTime auditTime;
+
+    @ApiModelProperty("拒绝原因")
+    private String rejectReason;
+
+    @ApiModelProperty("审核备注")
+    private String auditRemark;
+
+    @ApiModelProperty("退款成功时间")
+    private LocalDateTime refundSuccessTime;
+
+    @TableLogic
+    @ApiModelProperty("是否删除 0=否,1=是")
+    private Integer isDelete;
+}

+ 1 - 2
nightFragrance-massage/src/main/java/com/ylx/massage/domain/CommentUserAudit.java → nightFragrance-massage/src/main/java/com/ylx/order/domain/CommentUserAudit.java

@@ -1,4 +1,4 @@
-package com.ylx.massage.domain;
+package com.ylx.order.domain;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
 import java.io.Serializable;
-import java.time.LocalDateTime;
 import java.util.Date;
 
 /**

+ 26 - 0
nightFragrance-massage/src/main/java/com/ylx/order/domain/dto/OrderCancleDTO.java

@@ -0,0 +1,26 @@
+package com.ylx.order.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 类描述:用户端取消订单
+ *
+ * @author Administrator
+ * @version 1.0
+ * @date 2026/6/8 10:26
+ */
+@Data
+public class OrderCancleDTO {
+
+    @NotNull(message = "订单ID不能为空")
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @NotBlank(message = "取消原因不能为空")
+    @ApiModelProperty("取消原因")
+    private String cancelledReason;
+}

+ 22 - 0
nightFragrance-massage/src/main/java/com/ylx/order/enums/AfterSaleServiceStatusEnum.java

@@ -0,0 +1,22 @@
+package com.ylx.order.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum AfterSaleServiceStatusEnum {
+
+    PENDING_AUDIT(0, "待审核"),
+    APPROVED(1, "审核通过(退款中)"),
+    REJECTED(2, "审核拒绝"),
+    REFUND_SUCCESS(3, "退款成功"),
+    REFUND_FAILED(4, "退款失败");
+
+    private final Integer code;
+    private final String desc;
+
+    AfterSaleServiceStatusEnum(Integer code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+}

+ 5 - 6
nightFragrance-massage/src/main/java/com/ylx/order/enums/OrderStatusEnum.java

@@ -10,12 +10,11 @@ public enum OrderStatusEnum {
     PENDING_ACCEPT(2, "待接单"),
     PENDING_SERVICE(3, "待服务"),
     IN_SERVICE(4, "服务中"),
-    IN_AFTER_SALE(5, "售后中"),
-    COMPLETED(6, "已完成"),
-    REFUNDED(7, "已退款"),
-    CANCELLED(8, "已取消"),
-    CLOSED(9, "已关闭"),
-    REJECTED(10, "拒绝接单");
+    COMPLETED(5, "已完成"),
+    REFUNDED(6, "已退款"),
+    CANCELLED(7, "已取消"),
+    CLOSED(8, "已关闭"),
+    REJECTED(9, "拒绝接单");
 
     private final Integer code;
     private final String info;

+ 7 - 0
nightFragrance-massage/src/main/java/com/ylx/order/mapper/AfterSalesServiceMapper.java

@@ -0,0 +1,7 @@
+package com.ylx.order.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ylx.order.domain.AfterSalesService;
+
+public interface AfterSalesServiceMapper extends BaseMapper<AfterSalesService> {
+}

+ 1 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/mapper/TCommentUserMapper.java → nightFragrance-massage/src/main/java/com/ylx/order/mapper/TCommentUserMapper.java

@@ -1,4 +1,4 @@
-package com.ylx.massage.mapper;
+package com.ylx.order.mapper;
 
 import java.util.List;
 

+ 7 - 0
nightFragrance-massage/src/main/java/com/ylx/order/service/IAfterSalesServiceService.java

@@ -0,0 +1,7 @@
+package com.ylx.order.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ylx.order.domain.AfterSalesService;
+
+public interface IAfterSalesServiceService extends IService<AfterSalesService> {
+}

+ 2 - 2
nightFragrance-massage/src/main/java/com/ylx/massage/service/TCommentUserAuditService.java → nightFragrance-massage/src/main/java/com/ylx/order/service/TCommentUserAuditService.java

@@ -1,7 +1,7 @@
-package com.ylx.massage.service;
+package com.ylx.order.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.ylx.massage.domain.CommentUserAudit;
+import com.ylx.order.domain.CommentUserAudit;
 
 import java.io.Serializable;
 import java.util.HashMap;

+ 1 - 1
nightFragrance-massage/src/main/java/com/ylx/massage/service/TCommentUserService.java → nightFragrance-massage/src/main/java/com/ylx/order/service/TCommentUserService.java

@@ -1,4 +1,4 @@
-package com.ylx.massage.service;
+package com.ylx.order.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ylx.common.core.domain.model.WxLoginUser;

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

@@ -9,6 +9,7 @@ import com.ylx.massage.domain.TWxUser;
 import com.ylx.massage.domain.vo.HomeBlock;
 import com.ylx.massage.domain.vo.OrderVerificationVo;
 import com.ylx.massage.domain.vo.TechnicianAvailabilityVo;
+import com.ylx.order.domain.dto.OrderCancleDTO;
 import com.ylx.order.domain.dto.OrderDateQueryDTO;
 import com.ylx.order.domain.dto.OrderSubmitDTO;
 import com.ylx.order.domain.dto.OrderUpdateStatusDTO;
@@ -184,4 +185,11 @@ public interface TOrderService extends IService<TOrder> {
      * @return 订单详情VO
      */
     OrderDetailVO getOrderDetailById(Long orderId);
+
+    /**
+     * 用户端取消订单
+     * @param dto 取消订单DTO
+     * @return 取消结果
+     */
+    int cancelOrder(OrderCancleDTO dto);
 }

+ 14 - 0
nightFragrance-massage/src/main/java/com/ylx/order/service/impl/AfterSalesServiceServiceImpl.java

@@ -0,0 +1,14 @@
+package com.ylx.order.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ylx.order.domain.AfterSalesService;
+import com.ylx.order.mapper.AfterSalesServiceMapper;
+import com.ylx.order.service.IAfterSalesServiceService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class AfterSalesServiceServiceImpl extends ServiceImpl<AfterSalesServiceMapper, AfterSalesService>
+        implements IAfterSalesServiceService {
+}

+ 4 - 4
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TCommentUserAuditServiceImpl.java → nightFragrance-massage/src/main/java/com/ylx/order/service/impl/TCommentUserAuditServiceImpl.java

@@ -1,13 +1,13 @@
-package com.ylx.massage.service.impl;
+package com.ylx.order.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ylx.common.exception.ServiceException;
 import com.ylx.common.utils.StringUtils;
-import com.ylx.massage.domain.CommentUserAudit;
+import com.ylx.order.domain.CommentUserAudit;
 import com.ylx.massage.mapper.TCommentUserAuditMapper;
-import com.ylx.massage.service.TCommentUserAuditService;
-import com.ylx.massage.service.TCommentUserService;
+import com.ylx.order.service.TCommentUserAuditService;
+import com.ylx.order.service.TCommentUserService;
 import com.ylx.order.domain.TCommentUser;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;

+ 4 - 4
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TCommentUserServiceImpl.java → nightFragrance-massage/src/main/java/com/ylx/order/service/impl/TCommentUserServiceImpl.java

@@ -1,15 +1,15 @@
-package com.ylx.massage.service.impl;
+package com.ylx.order.service.impl;
 
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ylx.common.core.domain.model.WxLoginUser;
 import com.ylx.common.exception.ServiceException;
-import com.ylx.massage.domain.CommentUserAudit;
+import com.ylx.order.domain.CommentUserAudit;
 import com.ylx.massage.mapper.TCommentUserAuditMapper;
 import com.ylx.order.domain.TCommentUser;
-import com.ylx.massage.mapper.TCommentUserMapper;
-import com.ylx.massage.service.TCommentUserService;
+import com.ylx.order.mapper.TCommentUserMapper;
+import com.ylx.order.service.TCommentUserService;
 import com.ylx.order.domain.dto.OrderCommentDTO;
 import com.ylx.order.enums.AuditStatusEnum;
 import com.ylx.order.service.TCommentPictureService;

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

@@ -32,6 +32,7 @@ import com.ylx.massage.service.TWxUserService;
 import com.ylx.massage.utils.OrderNumberGenerator;
 import com.ylx.order.domain.OrderStatusFlow;
 import com.ylx.order.domain.TOrder;
+import com.ylx.order.domain.dto.OrderCancleDTO;
 import com.ylx.order.domain.dto.OrderDateQueryDTO;
 import com.ylx.order.domain.dto.OrderSubmitDTO;
 import com.ylx.order.domain.dto.OrderUpdateStatusDTO;
@@ -75,6 +76,9 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
     private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     private final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("M月d日");
     private final DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");
+
+    /** 仅允许取消的状态:待付款(0) */
+    private static final List<Integer> ALLOWED_CANCEL_STATUS = Collections.singletonList(0);
     @Resource
     private ProjectService projectService;
     @Resource
@@ -752,4 +756,48 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         }
         return vo;
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int cancelOrder(OrderCancleDTO dto) {
+        // 1. 查询订单
+        TOrder order = this.baseMapper.selectById(dto.getId());
+        if (order == null) {
+            throw new IllegalArgumentException("订单不存在");
+        }
+
+        // 2. 权限校验:仅限订单所属用户取消
+        Long currentUserId = SecurityUtils.getUserId();
+        if (!order.getUserId().equals(currentUserId)) {
+            throw new RuntimeException("您无权操作此订单");
+        }
+
+        // 3. 状态校验:只有待付款(0)可以取消
+        if (!OrderStatusEnum.PENDING_PAYMENT.getCode().equals(order.getStatus())) {
+            throw new RuntimeException("只有待付款订单可以取消,当前状态无法取消");
+        }
+
+        // 4. 重复取消校验(可选)
+        if (OrderStatusEnum.CANCELLED.getCode().equals(order.getStatus())) {
+            throw new RuntimeException("订单已取消,请勿重复操作");
+        }
+
+        // 5. 执行取消更新
+        TOrder updateOrder = new TOrder();
+        updateOrder.setId(dto.getId());
+        updateOrder.setStatus(OrderStatusEnum.CANCELLED.getCode());
+        updateOrder.setCancelledReason(dto.getCancelledReason());
+        updateOrder.setCancelledTime(LocalDateTime.now());
+        updateOrder.setUpdateTime(new Date());
+
+        int rows = this.baseMapper.updateById(updateOrder);
+        if (rows <= 0) {
+            throw new RuntimeException("取消失败,请稍后重试");
+        }
+
+        // 6. 待付款订单取消无需退款(因为未支付),但如需记录日志等可留扩展
+        log.info("订单取消成功,订单ID:{},原因:{}", dto.getId(), dto.getCancelledReason());
+
+        return rows;
+    }
 }

+ 7 - 0
nightFragrance-massage/src/main/resources/mapper/order/AfterSalesServiceMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ylx.order.mapper.AfterSalesServiceMapper">
+
+</mapper>

+ 1 - 1
nightFragrance-massage/src/main/resources/mapper/massage/TCommentUserMapper.xml → nightFragrance-massage/src/main/resources/mapper/order/TCommentUserMapper.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.ylx.massage.mapper.TCommentUserMapper">
+<mapper namespace="com.ylx.order.mapper.TCommentUserMapper">
 
     <resultMap type="com.ylx.order.domain.TCommentUser" id="TCommentUserMap">
         <result property="id" column="id" jdbcType="VARCHAR"/>