jinshihui 1 vecka sedan
förälder
incheckning
e080d1791a

+ 101 - 4
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TAddressController.java

@@ -1,6 +1,7 @@
 package com.ylx.web.controller.massage;
 
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -10,6 +11,7 @@ import com.ylx.massage.domain.TAddress;
 import com.ylx.massage.service.TAddressService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -24,6 +26,7 @@ import java.util.List;
 @RestController
 @Api(tags = {"地址管理"})
 @RequestMapping("tAddress")
+@Slf4j
 public class TAddressController extends BaseController {
     /**
      * 服务对象
@@ -44,6 +47,13 @@ public class TAddressController extends BaseController {
     }
 
 
+    /**
+     * 根据姓名查询通讯地址列表
+     *
+     * @param page
+     * @param tAddress
+     * @return R
+     */
     @GetMapping("pc/getAddressList")
     @ApiOperation("通讯地址列表")
     public R getAddressList(Page<TAddress> page, TAddress tAddress) {
@@ -58,7 +68,7 @@ public class TAddressController extends BaseController {
      * 根据OpenId查询用户地址
      *
      * @param openId
-     * @return R<List<TAddress>> 单条数据
+     * @return R<List < TAddress>> 单条数据
      */
     @ApiOperation("根据OpenId查询用户地址")
     @GetMapping("getByOpenId")
@@ -74,16 +84,80 @@ public class TAddressController extends BaseController {
         return R.ok(this.tAddressService.getById(id));
     }
 
+
+    /**
+     * 根据手机号码查询技师的虚拟地址(PC端)
+     *
+     * @param phone
+     * @return R<List<TAddress>>
+     */
+    @ApiOperation("根据手机号码查询技师的虚拟地址")
+    @GetMapping("getVirtualAddressByPhone")
+    public R<List<TAddress>> getVirtualAddressByPhone(@RequestParam String phone) {
+        try {
+            LambdaQueryWrapper<TAddress> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            objectLambdaQueryWrapper.eq(TAddress::getPhone, phone).eq(TAddress::getType, 2).eq(TAddress::getUserType,2);
+            return R.ok(this.tAddressService.list(objectLambdaQueryWrapper));
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
+        }
+    }
+
+
+    /**
+     * 根据手机号码查询技师的虚拟地址(用户端)
+     *
+     * @param phone
+     * @return R<List<TAddress>>
+     */
+    @ApiOperation("根据手机号码查询技师的虚拟地址")
+    @GetMapping("/wx/getVirtualAddressByPhone")
+    public R<List<TAddress>> getWXVirtualAddressByPhone(@RequestParam String phone) {
+        try {
+            LambdaQueryWrapper<TAddress> objectLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            objectLambdaQueryWrapper.eq(TAddress::getPhone, phone).eq(TAddress::getType, 2).eq(TAddress::getUserType,2);
+            return R.ok(this.tAddressService.list(objectLambdaQueryWrapper));
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
+        }
+    }
+
     /**
-     * 新增数据
+     * 新增地址(用户端)
      *
      * @param tAddress 实体对象
-     * @return 新增结果
+     * @return R 新增结果
      */
     @PostMapping("save")
     @ApiOperation("新增地址")
     public R insert(@RequestBody TAddress tAddress) {
-        return R.ok(this.tAddressService.insertAddress(tAddress));
+        try {
+            return R.ok(this.tAddressService.insertAddress(tAddress));
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
+        }
+    }
+
+
+    /**
+     * 新增虚拟地址(技师端)
+     *
+     * @param tAddress 实体对象
+     * @return R 新增结果
+     */
+    @PostMapping("saveVirtualAddress")
+    @ApiOperation("新增虚拟地址")
+    public R saveVirtualAddress(@RequestBody TAddress tAddress) {
+        try {
+            log.info("tAddress参数的值:{}", JSON.toJSONString(tAddress));
+            return R.ok(this.tAddressService.insertVirtualAddress(tAddress));
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
+        }
     }
 
     /**
@@ -110,6 +184,29 @@ public class TAddressController extends BaseController {
         return R.ok(this.tAddressService.removeByIds(idList));
     }
 
+    /**
+     * 删除技师的虚拟地址
+     *
+     * @param id
+     * @return R
+     */
+    @DeleteMapping("/deleteVirtualAddress")
+    @ApiOperation("删除地址")
+    public R deleteVirtualAddress(@RequestParam("id") String id) {
+        try {
+            return R.ok(this.tAddressService.removeById(id));
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
+        }
+    }
+
+
+    /**
+     * 设置默认地址
+     * @param tAddress
+     * @return R
+     */
     @PostMapping("/defaultAddress")
     @ApiOperation("设置默认地址")
     public R defaultAddress(@RequestBody TAddress tAddress) {

+ 36 - 40
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/TOrderController.java

@@ -46,7 +46,7 @@ public class TOrderController extends BaseController {
      * 添加申请
      *
      * @param order
-     * @return
+     * @return R<TOrder>
      */
     @Log(title = "新增订单", businessType = BusinessType.INSERT)
     @ApiOperation("添加申请")
@@ -57,10 +57,9 @@ public class TOrderController extends BaseController {
         } catch (ServiceException s) {
             log.error(s.toString());
             return R.fail(s.getMessage());
-        }
-        catch (Exception e) {
-            StackTraceElement stackTraceElement= e.getStackTrace()[0];
-            log.error("系统出错,错误信息:"+ e +" at "+stackTraceElement.getClassName()+"."+stackTraceElement.getMethodName()+":"+stackTraceElement.getLineNumber());
+        } catch (Exception e) {
+            StackTraceElement stackTraceElement = e.getStackTrace()[0];
+            log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
             return R.fail("系统异常");
         }
     }
@@ -80,30 +79,26 @@ public class TOrderController extends BaseController {
         } catch (ServiceException s) {
             log.error(s.toString());
             return R.fail(s.getMessage());
-        }
-        catch (Exception e) {
-            StackTraceElement stackTraceElement= e.getStackTrace()[0];
-            log.error("系统出错,错误信息:"+ e +" at "+stackTraceElement.getClassName()+"."+stackTraceElement.getMethodName()+":"+stackTraceElement.getLineNumber());
+        } catch (Exception e) {
+            StackTraceElement stackTraceElement = e.getStackTrace()[0];
+            log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
             return R.fail("系统异常");
         }
     }
 
 
-
-
     @Log(title = "转单", businessType = BusinessType.INSERT)
     @ApiOperation("转单")
     @RequestMapping(value = "wx/transferOrder", method = RequestMethod.POST)
-    public R<TOrder> transferOrder (@RequestBody TOrder order) {
+    public R<TOrder> transferOrder(@RequestBody TOrder order) {
         try {
             return R.ok(orderService.transferOrder(order));
         } catch (ServiceException s) {
             log.error(s.toString());
             return R.fail(s.getMessage());
-        }
-        catch (Exception e) {
-            StackTraceElement stackTraceElement= e.getStackTrace()[0];
-            log.error("系统出错,错误信息:"+ e +" at "+stackTraceElement.getClassName()+"."+stackTraceElement.getMethodName()+":"+stackTraceElement.getLineNumber());
+        } catch (Exception e) {
+            StackTraceElement stackTraceElement = e.getStackTrace()[0];
+            log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
             return R.fail("系统异常");
         }
     }
@@ -124,8 +119,8 @@ public class TOrderController extends BaseController {
             log.error(s.toString());
             return R.fail(s.getMessage());
         } catch (Exception e) {
-            StackTraceElement stackTraceElement= e.getStackTrace()[0];
-            log.error("系统出错,错误信息:"+ e +" at "+stackTraceElement.getClassName()+"."+stackTraceElement.getMethodName()+":"+stackTraceElement.getLineNumber());
+            StackTraceElement stackTraceElement = e.getStackTrace()[0];
+            log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
             return R.fail("系统异常");
         }
     }
@@ -147,8 +142,8 @@ public class TOrderController extends BaseController {
             log.error(s.toString());
             return R.fail(s.getMessage());
         } catch (Exception e) {
-            StackTraceElement stackTraceElement= e.getStackTrace()[0];
-            log.error("系统出错,错误信息:"+ e +" at "+stackTraceElement.getClassName()+"."+stackTraceElement.getMethodName()+":"+stackTraceElement.getLineNumber());
+            StackTraceElement stackTraceElement = e.getStackTrace()[0];
+            log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
             return R.fail("系统异常");
         }
 
@@ -170,8 +165,8 @@ public class TOrderController extends BaseController {
             log.error(s.toString());
             return R.fail(s.getMessage());
         } catch (Exception e) {
-            StackTraceElement stackTraceElement= e.getStackTrace()[0];
-            log.error("系统出错,错误信息:"+ e +" at "+stackTraceElement.getClassName()+"."+stackTraceElement.getMethodName()+":"+stackTraceElement.getLineNumber());
+            StackTraceElement stackTraceElement = e.getStackTrace()[0];
+            log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
             return R.fail("系统异常");
         }
     }
@@ -194,8 +189,8 @@ public class TOrderController extends BaseController {
             log.error(s.toString());
             return R.fail(s.getMessage());
         } catch (Exception e) {
-            StackTraceElement stackTraceElement= e.getStackTrace()[0];
-            log.error("系统出错,错误信息:"+ e +" at "+stackTraceElement.getClassName()+"."+stackTraceElement.getMethodName()+":"+stackTraceElement.getLineNumber());
+            StackTraceElement stackTraceElement = e.getStackTrace()[0];
+            log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
             return R.fail("系统异常");
         }
     }
@@ -211,8 +206,8 @@ public class TOrderController extends BaseController {
             log.error(s.toString());
             return R.fail(s.getMessage());
         } catch (Exception e) {
-            StackTraceElement stackTraceElement= e.getStackTrace()[0];
-            log.error("系统出错,错误信息:"+ e +" at "+stackTraceElement.getClassName()+"."+stackTraceElement.getMethodName()+":"+stackTraceElement.getLineNumber());
+            StackTraceElement stackTraceElement = e.getStackTrace()[0];
+            log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
             return R.fail("系统异常");
         }
     }
@@ -223,19 +218,19 @@ public class TOrderController extends BaseController {
     public R reach(@RequestBody TOrder order) {
         try {
             LambdaQueryWrapper<TOrder> wrapper = new LambdaQueryWrapper<>();
-            wrapper.eq(TOrder::getcId,order.getcId()).eq(TOrder::getnStatus,OrderStatusEnum.DEPART.getCode());
+            wrapper.eq(TOrder::getcId, order.getcId()).eq(TOrder::getnStatus, OrderStatusEnum.DEPART.getCode());
             order.setnStatus(OrderStatusEnum.ARRIVED.getCode());
             order.setReachTime(LocalDateTime.now());
             order.setArrivalLatitude(Optional.ofNullable(order.getArrivalLatitude()).orElse(BigDecimal.ZERO));
             order.setArrivalLongitude(Optional.ofNullable(order.getArrivalLongitude()).orElse(BigDecimal.ZERO));
             order.setArrivalPhoto(Optional.ofNullable(order.getArrivalPhoto()).orElse(StringUtils.EMPTY));
-            return R.ok(orderService.update(order,wrapper));
+            return R.ok(orderService.update(order, wrapper));
         } catch (ServiceException s) {
             log.error(s.toString());
             return R.fail(s.getMessage());
         } catch (Exception e) {
-            StackTraceElement stackTraceElement= e.getStackTrace()[0];
-            log.error("系统出错,错误信息:"+ e +" at "+stackTraceElement.getClassName()+"."+stackTraceElement.getMethodName()+":"+stackTraceElement.getLineNumber());
+            StackTraceElement stackTraceElement = e.getStackTrace()[0];
+            log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
             return R.fail("系统异常");
         }
     }
@@ -246,16 +241,16 @@ public class TOrderController extends BaseController {
     public R service(@RequestBody TOrder order) {
         try {
             LambdaQueryWrapper<TOrder> wrapper = new LambdaQueryWrapper<>();
-            wrapper.eq(TOrder::getcId,order.getcId()).eq(TOrder::getnStatus,OrderStatusEnum.ARRIVED.getCode());
+            wrapper.eq(TOrder::getcId, order.getcId()).eq(TOrder::getnStatus, OrderStatusEnum.ARRIVED.getCode());
             order.setnStatus(OrderStatusEnum.SERVICE.getCode());
             order.setStartTime(LocalDateTime.now());
-            return R.ok(orderService.update(order,wrapper));
+            return R.ok(orderService.update(order, wrapper));
         } catch (ServiceException s) {
             log.error(s.toString());
             return R.fail(s.getMessage());
         } catch (Exception e) {
-            StackTraceElement stackTraceElement= e.getStackTrace()[0];
-            log.error("系统出错,错误信息:"+ e +" at "+stackTraceElement.getClassName()+"."+stackTraceElement.getMethodName()+":"+stackTraceElement.getLineNumber());
+            StackTraceElement stackTraceElement = e.getStackTrace()[0];
+            log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "." + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
             return R.fail("系统异常");
         }
     }
@@ -276,9 +271,9 @@ public class TOrderController extends BaseController {
             log.error(s.toString());
             return R.fail(s.getMessage());
         } catch (Exception e) {
-            StackTraceElement stackTraceElement= e.getStackTrace()[0];
-            log.error("系统出错,错误信息:"+ e +" at "+stackTraceElement.getClassName()+"."
-                    +stackTraceElement.getMethodName()+":"+stackTraceElement.getLineNumber());
+            StackTraceElement stackTraceElement = e.getStackTrace()[0];
+            log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "."
+                    + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
             return R.fail("系统异常");
         }
     }
@@ -369,9 +364,9 @@ public class TOrderController extends BaseController {
             log.error(s.toString());
             return R.fail(s.getMessage());
         } catch (Exception e) {
-            StackTraceElement stackTraceElement= e.getStackTrace()[0];
-            log.error("系统出错,错误信息:"+ e +" at "+stackTraceElement.getClassName()+"."
-                    +stackTraceElement.getMethodName()+":"+stackTraceElement.getLineNumber());
+            StackTraceElement stackTraceElement = e.getStackTrace()[0];
+            log.error("系统出错,错误信息:" + e + " at " + stackTraceElement.getClassName() + "."
+                    + stackTraceElement.getMethodName() + ":" + stackTraceElement.getLineNumber());
             return R.fail("系统异常");
         }
     }
@@ -391,6 +386,7 @@ public class TOrderController extends BaseController {
 
     /**
      * 获取订单状态
+     *
      * @return R
      */
     @ApiOperation("订单状态")

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

@@ -195,7 +195,7 @@ public class WxTokenService {
      * 获取请求token
      *
      * @param request
-     * @return token
+     * @return String token
      */
     public String getToken(HttpServletRequest request) {
         String token = request.getHeader(header);

+ 28 - 7
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TAddress.java

@@ -4,6 +4,7 @@ package com.ylx.massage.domain;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -12,7 +13,7 @@ import java.io.Serializable;
 import java.util.Date;
 
 /**
- * 轮播图(TAddress)表实体类
+ * 地址(TAddress)表实体类
  *
  * @author makejava
  * @since 2024-04-11 17:18:53
@@ -33,11 +34,14 @@ public class TAddress extends Model<TAddress> {
     //电话
     @ApiModelProperty("电话")
     private String phone;
-    //姓名
+
+    /**
+     * 姓名
+     */
     @ApiModelProperty("姓名")
     private String userName;
     //地图展示地址
-    @ApiModelProperty("备注地址")
+    @ApiModelProperty("地图展示地址")
     private String atlasAdd;
     //经度
     @ApiModelProperty("经度")
@@ -52,14 +56,31 @@ public class TAddress extends Model<TAddress> {
     @ApiModelProperty("地址name")
     private String name;
 
-    //地址类型1:默认地址
-    @ApiModelProperty("地址类型1:默认地址")
+    /**
+     * 用户类型 1:用户 2:技师
+     */
+    @ApiModelProperty("用户类型 1:用户 2:技师")
+    private Integer userType;
+
+    /**
+     * 地址类型 1:默认地址 2:虚拟地址
+     */
+    @ApiModelProperty("地址类型 1:默认地址 2:虚拟地址")
     private Integer type;
-    //创建时间
+
+    /**
+     * 创建时间
+     */
     @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
-    //修改时间
+
+
+    /**
+     * 修改时间
+     */
     @ApiModelProperty("修改时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
     //是否删除0否1是
     @ApiModelProperty("是否删除0否1是")

+ 201 - 65
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TOrder.java

@@ -18,43 +18,58 @@ import java.time.LocalDateTime;
 import java.util.Date;
 
 /**
+ * 订单实体类
  * <p>
- * 认领表
+ * 对应数据库表 t_order,用于存储按摩服务订单的完整信息。
+ * 包含订单基本信息、服务项目信息、用户信息、技师信息、支付信息、
+ * 状态流转信息等多个维度的业务数据。
+ *
+ * 订单状态流转:
+ * -1(待付款) → 0(待接单) → 1(已接单) → 6(已出发) → 2(已到达) → 3(服务中) → 4(待评价) → 5(已完成)
+ * 特殊状态:-2(已取消)、-3(已拒绝)
  * </p>
  *
  * @author YJR
+ * @version 1.0
  * @since 2023-12-30
  */
 @Getter
 @Setter
 @Accessors(chain = true)
-@TableName(value = "t_order",autoResultMap = true)
-@ApiModel(value = "TOrder", description = "订单认领表")
+@TableName(value = "t_order", autoResultMap = true)
+@ApiModel(value = "TOrder", description = "订单实体类")
 public class TOrder implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
     /**
-     * 订单id
+     * 订单ID
+     * 主键,唯一标识订单记录
      */
     @TableId("c_id")
-    @ApiModelProperty("cId")
+    @ApiModelProperty("订单ID")
     private String cId;
 
     /**
-     * 技师id
+     * 技师ID
+     * 关联的技师唯一标识
      */
     @TableField("c_js_id")
-    @ApiModelProperty("技师id")
+    @ApiModelProperty("技师ID")
     private String cJsId;
 
     /**
-     * 老技师id
+     * 老技师ID
+     * 用于记录原技师信息,在换技师场景下使用
      */
     @TableField("old_js_id")
-    @ApiModelProperty("老技师id")
+    @ApiModelProperty("老技师ID")
     private String oldJsId;
 
+    /**
+     * 订单号
+     * 系统生成的唯一订单编号,用于订单查询和标识
+     */
     @Excel(name = "订单号")
     @TableField("order_no")
     @ApiModelProperty("订单号")
@@ -62,30 +77,47 @@ public class TOrder implements Serializable {
 
     /**
      * 父订单号
+     * 用于升级订单场景,记录原订单号
      */
     @TableField("parent_no")
     @ApiModelProperty("父订单号")
     private String parentNo;
 
+    /**
+     * 超时原因
+     * 订单超时的原因说明
+     */
     @TableField("timeout_cause")
     @ApiModelProperty("超时原因")
     private String timeoutCause;
 
-
+    /**
+     * 音频
+     * 订单相关的音频文件路径
+     */
     @TableField("tape")
     @ApiModelProperty("音频")
     private String tape;
 
+    /**
+     * 车费
+     * 根据距离和时段计算的车费金额
+     */
     @TableField("fare")
     @ApiModelProperty("车费")
     private BigDecimal fare;
 
+    /**
+     * 距离
+     * 技师与用户之间的距离,单位:公里
+     */
     @TableField("distance")
     @ApiModelProperty("距离")
     private BigDecimal distance;
 
     /**
-     * 支付类型:1微信支付 2:余额支付 3:现金支付
+     * 支付类型
+     * 1-微信支付 2-余额支付 3-现金支付
      */
     @TableField("pay_type")
     @ApiModelProperty("支付类型:1微信支付 2:余额支付 3:现金支付")
@@ -93,98 +125,172 @@ public class TOrder implements Serializable {
 
     /**
      * 优惠金额
+     * 使用优惠券或其他优惠减免的金额
      */
     @TableField("preferential")
     @ApiModelProperty("优惠金额")
     private BigDecimal preferential;
 
+    /**
+     * 差价
+     * 升级订单时,需要补交的差价金额
+     */
     @TableField("price_difference")
     @ApiModelProperty("差价")
     private BigDecimal priceDifference;
 
+    /**
+     * 订单类型
+     * 0-普通订单 1-加钟订单 2-升级订单
+     */
     @TableField("order_type")
     @ApiModelProperty("订单类型:0普通订单,1加钟订单,2升级订单")
     private Integer orderType;
+
     /**
-     * 用户openid
+     * 用户OpenID
+     * 微信用户的唯一标识
      */
     @TableField("c_open_id")
-    @ApiModelProperty("用户openid")
+    @ApiModelProperty("用户OpenID")
     private String cOpenId;
 
-    //经度
+    /**
+     * 经度
+     * 用户地址的经度坐标
+     */
     @ApiModelProperty("经度")
     private Double longitude;
-    //纬度
+
+    /**
+     * 纬度
+     * 用户地址的纬度坐标
+     */
     @ApiModelProperty("纬度")
     private Double latitude;
 
-    //经度
+    /**
+     * 出发经度
+     * 技师出发位置的经度
+     */
     @ApiModelProperty("出发经度")
     private BigDecimal departLongitude;
-    //纬度
+
+    /**
+     * 出发纬度
+     * 技师出发位置的纬度
+     */
     @ApiModelProperty("出发纬度")
     private BigDecimal departLatitude;
 
-    //经度
+    /**
+     * 到达经度
+     * 技师到达用户位置的经度
+     */
     @ApiModelProperty("到达经度")
     private BigDecimal arrivalLongitude;
-    //纬度
+
+    /**
+     * 到达纬度
+     * 技师到达用户位置的纬度
+     */
     @ApiModelProperty("到达纬度")
     private BigDecimal arrivalLatitude;
 
+    /**
+     * 到达照片
+     * 技师到达现场后拍摄的照片URL
+     */
     @ApiModelProperty("到达照片")
     private String arrivalPhoto;
 
+    /**
+     * 出发时间
+     * 技师出发前往用户地址的时间
+     */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
     @ApiModelProperty("出发时间")
     private Date departTime;
 
+    /**
+     * 支付时间
+     * 用户完成支付的时间
+     */
     @ApiModelProperty("支付时间")
     private Date payTime;
 
-    //详细地址
+    /**
+     * 详细地址
+     * 用户提供的服务地址
+     */
     @ApiModelProperty("详细地址")
     private String address;
 
-    @ApiModelProperty("地址name")
+    /**
+     * 地址名称
+     * 地址的别名或名称标识
+     */
+    @ApiModelProperty("地址名称")
     private String name;
 
+    /**
+     * 接单时间
+     * 技师接单的时间
+     */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
     @ApiModelProperty("接单时间")
     private LocalDateTime acceptanceTime;
 
+    /**
+     * 到达时间
+     * 技师到达用户地址的时间
+     */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
     @ApiModelProperty("到达时间")
     private LocalDateTime reachTime;
 
+    /**
+     * 开始服务时间
+     * 技师开始提供服务的时间
+     */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
     @ApiModelProperty("开始服务时间")
     private LocalDateTime startTime;
 
+    /**
+     * 结束时间
+     * 技师完成服务的时间
+     */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
     @ApiModelProperty("结束时间")
     private LocalDateTime endTime;
 
+    /**
+     * 拒接原因
+     * 技师拒绝接单的原因说明
+     */
     @ApiModelProperty("拒接原因")
     private String reasonRefusal;
 
     /**
-     * 领取优惠卷id
+     * 领取优惠券ID
+     * 使用的优惠券记录ID
      */
     @TableField("coupon_receive_id")
-    @ApiModelProperty("领取优惠卷id")
+    @ApiModelProperty("领取优惠券ID")
     private String couponReceiveId;
 
     /**
      * 订单明细
+     * JSON格式,包含服务项目的详细信息
      */
-    @TableField(value = "c_goods",typeHandler = FastjsonTypeHandler.class)
+    @TableField(value = "c_goods", typeHandler = FastjsonTypeHandler.class)
     @ApiModelProperty("订单明细")
     private JSONArray cGoods;
 
     /**
      * 订单金额
+     * 服务项目的基础金额总和
      */
     @TableField("d_total_money")
     @ApiModelProperty("订单金额")
@@ -192,6 +298,7 @@ public class TOrder implements Serializable {
 
     /**
      * 总价
+     * 订单最终金额 = 订单金额 + 车费 - 优惠金额
      */
     @Excel(name = "订单金额")
     @TableField("total_price")
@@ -200,104 +307,139 @@ public class TOrder implements Serializable {
 
     /**
      * 订单状态
-     * 待接单 0 已接单 1 已到达 2 服务中 3 待评价(已完成) 4 待付款 -1 已取消 -2 已拒绝 -3 已完成(已评价)5
+     * -1-待付款 0-待接单 1-已接单 2-已到达 3-服务中 4-待评价(已完成)
+     * 5-已完成(已评价) 6-已出发 -2-已取消 -3-已拒绝
      */
     @TableField("n_status")
-    @ApiModelProperty("订单状态 待接单0  已接单1  已到达2  服务中3  待评价(已完成4  待付款-1  已取消-2  已拒绝-3  已完成(已评价)5   已出发6")
+    @ApiModelProperty("订单状态: -1待付款 0待接单 1已接单 2已到达 3服务中 4待评价 5已完成 6已出发 -2已取消 -3已拒绝")
     private Integer nStatus;
 
     /**
      * 地址
+     * 用户提供的服务地址(冗余字段)
      */
     @TableField("c_address")
     @ApiModelProperty("地址")
     private String cAddress;
 
+    /**
+     * 备注地址
+     * 地址的补充说明或地标信息
+     */
     @ApiModelProperty("备注地址")
     private String atlasAdd;
 
     /**
-     * 姓名
+     * 用户姓名
+     * 下单用户的真实姓名
      */
     @Excel(name = "用户姓名")
     @TableField("c_name")
-    @ApiModelProperty("姓名")
+    @ApiModelProperty("用户姓名")
     private String cName;
 
     /**
-     * 电话
+     * 用户电话
+     * 下单用户的联系电话
      */
     @Excel(name = "用户电话")
     @TableField("c_phone")
-    @ApiModelProperty("电话")
+    @ApiModelProperty("用户电话")
     private String cPhone;
 
     /**
      * 备注
+     * 用户填写的订单备注信息
      */
     @TableField("c_note")
     @ApiModelProperty("备注")
     private String cNote;
 
     /**
-     * 时间
+     * 支付截止时间
+     * 订单需要完成支付的截止时间
      */
     @TableField("c_time")
     @ApiModelProperty("支付截止时间")
     private String cTime;
 
     /**
-     * 推荐者id
+     * 推荐者ID
+     * 推荐用户的OpenID,用于分销统计
      */
     @TableField("c_tj_open_id")
-    @ApiModelProperty("推荐者id")
+    @ApiModelProperty("推荐者ID")
     private String cTjOpenId;
 
+    /**
+     * 部门ID
+     * 订单所属的部门/城市标识
+     */
     @TableField("dept_id")
-    @ApiModelProperty("部门Id")
+    @ApiModelProperty("部门ID")
     private String deptId;
 
+    /**
+     * 部门名称
+     * 订单所属的城市名称
+     */
     @TableField("dept_name")
     @ApiModelProperty("部门名称")
     private String deptName;
 
     /**
      * 创建时间
+     * 订单创建的时间戳
      */
-    @Excel(name = "时间")
+    @Excel(name = "创建时间")
     @TableField("dt_create_time")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
     @ApiModelProperty("创建时间")
     private LocalDateTime dtCreateTime;
 
-    @ApiModelProperty("是否删除0否1是")
+    /**
+     * 逻辑删除标记
+     * 0-未删除(有效记录) 1-已删除
+     */
+    @ApiModelProperty("是否删除:0否1是")
     @TableLogic
     private Integer isDelete;
 
+    /**
+     * 技师信息
+     * 非数据库字段,用于关联查询技师信息
+     */
     @TableField(exist = false)
     @ApiModelProperty("技师信息")
     private TJs js;
 
     /**
      * 老技师信息
+     * 非数据库字段,用于关联查询原技师信息
      */
     @TableField(exist = false)
     @ApiModelProperty("老技师信息")
     private TJs oldJs;
 
     /**
-     * 剩余支付时间(秒)
+     * 剩余支付时间
+     * 非数据库字段,用于计算订单支付的剩余时间(秒)
      */
     @TableField(exist = false)
     @ApiModelProperty("剩余支付时间(秒)")
     private Long remainingTime;
 
+    /**
+     * 技师昵称
+     * 非数据库字段,用于关联查询技师昵称
+     */
     @TableField(exist = false)
     @ApiModelProperty("技师昵称")
     private String cNickName;
 
     /**
      * 技师姓名
+     * 非数据库字段,用于关联查询技师姓名
      */
     @Excel(name = "技师姓名")
     @TableField(exist = false)
@@ -306,18 +448,24 @@ public class TOrder implements Serializable {
 
     /**
      * 技师电话
+     * 非数据库字段,用于关联查询技师电话
      */
     @Excel(name = "技师电话")
     @TableField(exist = false)
     @ApiModelProperty("技师电话")
     private String jsPhone;
 
+    /**
+     * 用户信息
+     * 非数据库字段,用于关联查询微信用户信息
+     */
     @TableField(exist = false)
     @ApiModelProperty("用户信息")
     private TWxUser wxUser;
 
     /**
      * 订单状态名称
+     * 非数据库字段,用于展示订单状态的文本描述
      */
     @TableField(exist = false)
     @Excel(name = "订单状态")
@@ -344,70 +492,58 @@ public class TOrder implements Serializable {
         return cOpenId;
     }
 
-    public void setDepartLongitude(BigDecimal departLongitude)
-    {
+    public void setcOpenId(String cOpenId) {
+        this.cOpenId = cOpenId;
+    }
+
+    public void setDepartLongitude(BigDecimal departLongitude) {
         this.departLongitude = departLongitude;
     }
 
-    public BigDecimal getDepartLongitude()
-    {
+    public BigDecimal getDepartLongitude() {
         return departLongitude;
     }
 
-    public void setArrivalLongitude(BigDecimal arrivalLongitude)
-    {
+    public void setArrivalLongitude(BigDecimal arrivalLongitude) {
         this.arrivalLongitude = arrivalLongitude;
     }
 
-    public BigDecimal getArrivalLongitude()
-    {
+    public BigDecimal getArrivalLongitude() {
         return arrivalLongitude;
     }
 
-    public void setArrivalPhoto(String arrivalPhoto)
-    {
+    public void setArrivalPhoto(String arrivalPhoto) {
         this.arrivalPhoto = arrivalPhoto;
     }
 
-    public String getArrivalPhoto()
-    {
+    public String getArrivalPhoto() {
         return arrivalPhoto;
     }
 
-    public void setDepartTime(Date departTime)
-    {
+    public void setDepartTime(Date departTime) {
         this.departTime = departTime;
     }
 
-    public Date getDepartTime()
-    {
+    public Date getDepartTime() {
         return departTime;
     }
 
-    public void setDepartLatitude(BigDecimal departLatitude)
-    {
+    public void setDepartLatitude(BigDecimal departLatitude) {
         this.departLatitude = departLatitude;
     }
 
-    public BigDecimal getDepartLatitude()
-    {
+    public BigDecimal getDepartLatitude() {
         return departLatitude;
     }
 
-    public void setArrivalLatitude(BigDecimal arrivalLatitude)
-    {
+    public void setArrivalLatitude(BigDecimal arrivalLatitude) {
         this.arrivalLatitude = arrivalLatitude;
     }
 
-    public BigDecimal getArrivalLatitude()
-    {
+    public BigDecimal getArrivalLatitude() {
         return arrivalLatitude;
     }
 
-    public void setcOpenId(String cOpenId) {
-        this.cOpenId = cOpenId;
-    }
-
     public JSONArray getcGoods() {
         return cGoods;
     }

+ 10 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/domain/TXiangmu.java

@@ -43,6 +43,13 @@ public class TXiangmu implements Serializable {
     @ApiModelProperty("标题")
     private String cTitle;
 
+    /**
+     * 项目分类(1:按摩类 2:陪玩类)
+     */
+     @TableField("project_type")
+     @ApiModelProperty("项目分类(1:按摩类 2:陪玩类)")
+    private Integer projectType;
+
     /**
      * 封面图
      */
@@ -138,6 +145,9 @@ public class TXiangmu implements Serializable {
     @TableLogic
     private Integer isDelete;
 
+     /**
+      * 项目金额
+      */
     @TableField(exist = false)
     private BigDecimal sum;
 

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

@@ -22,6 +22,13 @@ public interface TAddressService extends IService<TAddress> {
 
     Object insertAddress(TAddress tAddress);
 
+     /**
+     * 新增虚拟地址
+     * @param tAddress
+     * @return
+     */
+    Object insertVirtualAddress(TAddress tAddress);
+
     Object updateAddress(TAddress tAddress);
 }
 

+ 32 - 0
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TAddressServiceImpl.java

@@ -9,6 +9,8 @@ import com.ylx.massage.service.TAddressService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Objects;
+
 /**
  * 轮播图(TAddress)表服务实现类
  *
@@ -54,6 +56,36 @@ public class TAddressServiceImpl extends ServiceImpl<TAddressMapper, TAddress> i
         return this.save(tAddress);
     }
 
+     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Object insertVirtualAddress(TAddress tAddress) {
+        if (StringUtils.isBlank(tAddress.getOpenid())) {
+            throw new RuntimeException("openid不能为空");
+        }
+        //检查用户类型是否为空
+        if (Objects.isNull(tAddress.getUserType())) {
+            throw new RuntimeException("用户类型不能为空");
+        }
+        //检查用户类型是否为1或2
+        if (tAddress.getUserType() != 1 && tAddress.getUserType() != 2) {
+            throw new RuntimeException("用户类型只能为1或2");
+        }
+        //检查用户类型是否正确
+         if (tAddress.getUserType() != 2) {
+             throw new RuntimeException("用户类型错误,用户类型只能为2");
+         }
+
+         //检查地址类型是否为空
+         if (Objects.isNull(tAddress.getType())) {
+             throw new RuntimeException("地址类型不能为空");
+         }
+         //检查地址类型是否为1或2
+         if (tAddress.getType() != 2) {
+             throw new RuntimeException("地址类型错误,地址类型只能为2");
+         }
+        return this.save(tAddress);
+    }
+
     @Override
     public Object updateAddress(TAddress tAddress) {
         if (StringUtils.isBlank(tAddress.getOpenid())) {

+ 15 - 2
nightFragrance-massage/src/main/java/com/ylx/massage/service/impl/TOrderServiceImpl.java

@@ -90,8 +90,17 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
     private RefundVoucherService refundVoucherService;
 
 
+    /**
+     * 判断是否免车费
+     * 时间段判断:
+     * - 白天时段(7:30-20:00):距离 ≤ 技师白天免车费里程 → 免费
+     * - 夜间时段(20:00-7:30):距离 ≤ 技师夜间免车费里程 → 免费
+     *
+     * @param js
+     * @param distance
+     * @return Boolean
+     */
     public Boolean isFree(TJs js, BigDecimal distance) {
-
         Date date = new Date();
         //白天免车费(07.30-20.00)
         long current = Long.parseLong(DateTimeUtils.numTime(date));
@@ -117,6 +126,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
      * 添加订单
      *
      * @param order
+     * @return TOrder
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -138,6 +148,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         //订单价格
         List<TXiangmu> list = JSONObject.parseArray(order.getcGoods().toJSONString(), TXiangmu.class);
         BigDecimal sum = list.stream().map(TXiangmu::getSum).reduce(BigDecimal.ZERO, BigDecimal::add);
+        //订单总金额
         order.setdTotalMoney(sum);
 
         //获取用户默认地址
@@ -153,6 +164,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         double distance = locationUtil.getDistance(js.getcOpenId() + order.getOrderNo(), order.getcOpenId() + order.getOrderNo());
         locationUtil.remove(LocationUtil.GEO_KEY_USER, js.getcOpenId() + order.getOrderNo(), order.getcOpenId() + order.getOrderNo());
         order.setDistance(new BigDecimal(distance));
+
         //计算车费
         if (order.getDistance() != null && order.getDistance().compareTo(BigDecimal.ZERO) > 0 && StringUtils.isBlank(order.getParentNo())) {
             //判断是否可以免车费
@@ -161,7 +173,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
                 order.setFare(bigDecimal.setScale(MassageConstants.INTEGER_TWO, RoundingMode.HALF_UP));
             }
         }
-        //总价 = 订单 + 车费 - 优惠
+        //总价 = 订单 + 车费
         order.setTotalPrice(sum.add(Optional.ofNullable(order.getFare()).orElse(BigDecimal.ZERO)));
         if (order.getParentNo() != null && order.getOrderType() == 2) {
             //升级订单 补差价
@@ -178,6 +190,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         order.setAtlasAdd(address.getAtlasAdd());
         order.setDeptId(js.getDeptId());
         order.setDeptName(js.getCity());
+        //设置订单状态:待支付
         order.setnStatus(OrderStatusEnum.WAIT_PAY.getCode());
         order.setDtCreateTime(LocalDateTime.now());
         Date date = DateTimeUtils.addMinute(new Date(), 10);

+ 2 - 2
nightFragrance-massage/src/main/java/com/ylx/massage/utils/OrderNumberGenerator.java

@@ -31,10 +31,10 @@ public class OrderNumberGenerator {
     /**
      * 生成并返回当天的下一个自增单号。
      *
-     * @return 当天的下一个单号(格式:yyyyMMdd0001)
+     * @param prefix 订单号前缀
+     * @return String 当天的下一个单号(格式:yyyyMMdd0001)
      */
     public String generateNextOrderNumber(String prefix) {
-
         LocalDate today = LocalDate.now();
         String currentDateStr = today.format(DATE_FORMATTER);