package com.ylx.massage.domain; import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import com.ylx.common.annotation.Excel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.*; import lombok.experimental.Accessors; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Date; /** * 订单实体类 *

* 对应数据库表 t_order,用于存储按摩服务订单的完整信息。 * 包含订单基本信息、服务项目信息、用户信息、技师信息、支付信息、 * 状态流转信息等多个维度的业务数据。 * * 订单状态流转: * -1(待付款) → 0(待接单) → 1(已接单) → 6(已出发) → 2(已到达) → 3(服务中) → 4(待评价) → 5(已完成) * 特殊状态:-2(已取消)、-3(已拒绝) *

* * @author YJR * @version 1.0 * @since 2023-12-30 */ @Getter @Setter @Accessors(chain = true) @TableName(value = "t_order", autoResultMap = true) @ApiModel(value = "TOrder", description = "订单实体类") public class TOrder implements Serializable { private static final long serialVersionUID = 1L; /** * 订单ID * 主键,唯一标识订单记录 */ @TableId("c_id") @ApiModelProperty("订单ID") private String cId; /** * 订单号 * 系统生成的唯一订单编号,用于订单查询和标识 */ @Excel(name = "订单号") @TableField("order_no") @ApiModelProperty("订单号") private String orderNo; /** * 父订单号 * 用于升级订单场景,记录原订单号 */ @TableField("parent_no") @ApiModelProperty("父订单号") private String parentNo; /** * 支付类型 * 1-微信支付 2-余额支付 3-现金支付 */ @TableField("pay_type") @ApiModelProperty("支付类型:1微信支付 2:余额支付 3:现金支付") private Integer payType; /** * 订单类型 * 0-普通订单 1-加钟订单 2-升级订单 */ @TableField("order_type") @ApiModelProperty("订单类型:0普通订单,1加钟订单,2升级订单") private Integer orderType; /** * 是否为虚拟技师订单 * 0-否 1-是 */ @TableField("virtual_order_flag") @ApiModelProperty("是否为虚拟技师订单:0否,1是") private Integer virtualOrderFlag; /** * 虚拟技师订单分配情况(0:真实订单 1:未分配 2:已分配) */ @TableField("virtual_order_allocation") @ApiModelProperty("虚拟技师订单分配情况(0:真实订单 1:未分配 2:已分配)") private Integer virtualOrderAllocation; /** * 技师ID */ @TableField("c_js_id") @ApiModelProperty("技师ID") private String cJsId; /** * 老技师ID * 用于记录原技师信息,在换技师场景下使用 */ @TableField("old_js_id") @ApiModelProperty("老技师ID") private String oldJsId; /** * 超时原因 * 订单超时的原因说明 */ @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; /** * 优惠金额 * 使用优惠券或其他优惠减免的金额 */ @TableField("preferential") @ApiModelProperty("优惠金额") private BigDecimal preferential; /** * 差价 * 升级订单时,需要补交的差价金额 */ @TableField("price_difference") @ApiModelProperty("差价") private BigDecimal priceDifference; /** * 用户OpenID * 微信用户的唯一标识 */ @TableField("c_open_id") @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("地址名称") 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; @TableField(exist = false) private String startTimeStr; /** * 结束时间 * 技师完成服务的时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @ApiModelProperty("结束时间") private LocalDateTime endTime; @TableField(exist = false) private String endTimeStr; /** * 拒接原因 * 技师拒绝接单的原因说明 */ @ApiModelProperty("拒接原因") private String reasonRefusal; /** * 领取优惠券ID * 使用的优惠券记录ID */ @TableField("coupon_receive_id") @ApiModelProperty("领取优惠券ID") private String couponReceiveId; /** * 订单明细 * JSON格式,包含服务项目的详细信息 */ @TableField(value = "c_goods", typeHandler = FastjsonTypeHandler.class) @ApiModelProperty("订单明细") private JSONArray cGoods; /** * 订单金额 * 服务项目的基础金额总和 */ @TableField("d_total_money") @ApiModelProperty("订单金额") private BigDecimal dTotalMoney; /** * 总价 * 订单最终金额 = 订单金额 + 车费 - 优惠金额 */ @Excel(name = "订单金额") @TableField("total_price") @ApiModelProperty("总价") private BigDecimal totalPrice; /** * 订单状态 * -1-待付款 0-待接单 1-已接单 2-已到达 3-服务中 4-待评价(已完成) * 5-已完成(已评价) 6-已出发 -2-已取消 -3-已拒绝 * 6:退单待审核 7:退单审核通过 */ @TableField("n_status") @ApiModelProperty("订单状态: -1待付款 0待接单 1已接单 6已出发 2已到达 3服务中 4待评价 5已完成 6:退单待审核 7:退单审核通过 -2已取消 -3已拒绝") private Integer nStatus; /** * 备注地址 * 地址的补充说明或地标信息 */ @ApiModelProperty("备注地址") private String atlasAdd; /** * 地址 * 用户提供的服务地址(冗余字段) */ @TableField("c_address") @ApiModelProperty("地址") private String cAddress; /** * 用户姓名 * 下单用户的真实姓名 */ @Excel(name = "用户姓名") @TableField("c_name") @ApiModelProperty("用户姓名") private String cName; /** * 用户电话 * 下单用户的联系电话 */ @Excel(name = "用户电话") @TableField("c_phone") @ApiModelProperty("用户电话") private String cPhone; /** * 备注 * 用户填写的订单备注信息 */ @TableField("c_note") @ApiModelProperty("备注") private String cNote; /** * 支付截止时间 * 订单需要完成支付的截止时间 */ @TableField("c_time") @ApiModelProperty("支付截止时间") private String cTime; /** * 推荐者ID * 推荐用户的OpenID,用于分销统计 */ @TableField("c_tj_open_id") @ApiModelProperty("推荐者ID") private String cTjOpenId; /** * 部门ID * 订单所属的部门/城市标识 */ @TableField("dept_id") @ApiModelProperty("部门ID") private String deptId; /** * 部门名称 * 订单所属的城市名称 */ @TableField("dept_name") @ApiModelProperty("部门名称") private String deptName; /** * 创建时间 * 订单创建的时间 */ @Excel(name = "创建时间") @TableField("dt_create_time") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @ApiModelProperty("创建时间") private LocalDateTime dtCreateTime; /** * 逻辑删除标记 * 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; /** * 技师姓名 * 非数据库字段,用于关联查询技师姓名 */ @Excel(name = "技师姓名") @TableField(exist = false) @ApiModelProperty("技师姓名") private String jsName; /** * 技师昵称 * 非数据库字段,用于关联查询技师昵称 */ @TableField(exist = false) @ApiModelProperty("技师昵称") @JsonProperty("cNickName") private String cNickName; /** * 技师电话 * 非数据库字段,用于关联查询技师电话 */ @Excel(name = "技师电话") @TableField(exist = false) @ApiModelProperty("技师电话") private String jsPhone; /** * 用户信息 * 非数据库字段,用于关联查询微信用户信息 */ @TableField(exist = false) @ApiModelProperty("用户信息") private TWxUser wxUser; /** * 订单状态名称 * 非数据库字段,用于展示订单状态的文本描述 */ @TableField(exist = false) @Excel(name = "订单状态") @ApiModelProperty("订单状态名称") private String statusName; public String getcId() { return cId; } public void setcId(String cId) { this.cId = cId; } public String getcJsId() { return cJsId; } public void setcJsId(String cJsId) { this.cJsId = cJsId; } public String getcOpenId() { return cOpenId; } public void setcOpenId(String cOpenId) { this.cOpenId = cOpenId; } public void setDepartLongitude(BigDecimal departLongitude) { this.departLongitude = departLongitude; } public BigDecimal getDepartLongitude() { return departLongitude; } public void setArrivalLongitude(BigDecimal arrivalLongitude) { this.arrivalLongitude = arrivalLongitude; } public BigDecimal getArrivalLongitude() { return arrivalLongitude; } public void setArrivalPhoto(String arrivalPhoto) { this.arrivalPhoto = arrivalPhoto; } public String getArrivalPhoto() { return arrivalPhoto; } public void setDepartTime(Date departTime) { this.departTime = departTime; } public Date getDepartTime() { return departTime; } public void setDepartLatitude(BigDecimal departLatitude) { this.departLatitude = departLatitude; } public BigDecimal getDepartLatitude() { return departLatitude; } public void setArrivalLatitude(BigDecimal arrivalLatitude) { this.arrivalLatitude = arrivalLatitude; } public BigDecimal getArrivalLatitude() { return arrivalLatitude; } public JSONArray getcGoods() { return cGoods; } public void setcGoods(JSONArray cGoods) { this.cGoods = cGoods; } public BigDecimal getdTotalMoney() { return dTotalMoney; } public void setdTotalMoney(BigDecimal dTotalMoney) { this.dTotalMoney = dTotalMoney; } public Integer getnStatus() { return nStatus; } public void setnStatus(Integer nStatus) { this.nStatus = nStatus; } public String getcAddress() { return cAddress; } public void setcAddress(String cAddress) { this.cAddress = cAddress; } public String getcName() { return cName; } public void setcName(String cName) { this.cName = cName; } public String getcPhone() { return cPhone; } public void setcPhone(String cPhone) { this.cPhone = cPhone; } public String getcNote() { return cNote; } public void setcNote(String cNote) { this.cNote = cNote; } public String getcTime() { return cTime; } public void setcTime(String cTime) { this.cTime = cTime; } public String getcTjOpenId() { return cTjOpenId; } public void setcTjOpenId(String cTjOpenId) { this.cTjOpenId = cTjOpenId; } public LocalDateTime getDtCreateTime() { return dtCreateTime; } public void setDtCreateTime(LocalDateTime dtCreateTime) { this.dtCreateTime = dtCreateTime; } public TJs getJs() { return js; } public void setJs(TJs js) { this.js = js; } public TWxUser getWxUser() { return wxUser; } public void setWxUser(TWxUser wxUser) { this.wxUser = wxUser; } }