From 413747acee91a63265907a1af09600d7e9712963 Mon Sep 17 00:00:00 2001
From: xin <1099200748@qq.com>
Date: Wed, 11 Jun 2025 17:27:08 +0800
Subject: [PATCH] SH:代码生成

---
 oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturnProductSnapshot.java                  |   90 +
 oying-system/src/main/java/com/oying/modules/sh/mapper/OrderProductSnapshotMapper.java                  |   22 
 oying-system/src/main/java/com/oying/modules/sh/mapper/OrderReturnProductSnapshotMapper.java            |   22 
 oying-system/src/main/java/com/oying/modules/sh/mapper/OrderAddressSnapshotMapper.java                  |   22 
 oying-system/src/main/java/com/oying/modules/sh/rest/OrderController.java                               |   73 +
 oying-system/src/main/java/com/oying/modules/sh/rest/UserAddressController.java                         |   73 +
 oying-system/src/main/resources/mapper/sh/OrderProductSnapshotMapper.xml                                |   60 +
 oying-system/src/main/java/com/oying/modules/sh/domain/dto/UserAddressQueryCriteria.java                |   27 
 oying-system/src/main/java/com/oying/modules/sh/mapper/UserAddressMapper.java                           |   22 
 oying-system/src/main/java/com/oying/modules/sh/rest/OrderReturnReasonController.java                   |   73 +
 oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderReturnProductSnapshotServiceImpl.java |   87 +
 oying-system/src/main/java/com/oying/modules/sh/domain/UserAddress.java                                 |   76 +
 oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java                      |   95 +
 oying-system/src/main/resources/mapper/sh/UserAddressMapper.xml                                         |   45 
 oying-system/src/main/java/com/oying/modules/system/domain/dto/UserQueryCriteria.java                   |    3 
 oying-system/src/main/java/com/oying/modules/sh/mapper/OrderMapper.java                                 |   22 
 oying-system/src/main/java/com/oying/modules/sh/rest/OrderReturnProductSnapshotController.java          |   73 +
 oying-system/src/main/resources/mapper/sh/OrderOperationLogMapper.xml                                   |   39 
 oying-system/src/main/resources/mapper/sh/OrderMapper.xml                                               |   67 +
 oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderReturnReasonServiceImpl.java          |   79 +
 oying-system/src/main/java/com/oying/modules/sh/domain/Order.java                                       |  102 +
 oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderQueryCriteria.java                      |   40 
 oying-system/src/main/java/com/oying/modules/sh/rest/OrderProductSnapshotController.java                |   73 +
 oying-system/src/main/java/com/oying/modules/sh/rest/OrderReturnController.java                         |   73 +
 oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderProductSnapshotServiceImpl.java       |   88 +
 oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderReturnReasonQueryCriteria.java          |   24 
 oying-system/src/main/resources/mapper/sh/OrderReturnMapper.xml                                         |   66 +
 oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturnReason.java                           |   43 
 oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderProductSnapshotQueryCriteria.java       |   42 
 oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderReturnServiceImpl.java                |   91 +
 oying-system/src/main/resources/mapper/sh/OrderAddressSnapshotMapper.xml                                |   34 
 oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderReturnQueryCriteria.java                |   41 
 oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderOperationLogServiceImpl.java          |   79 +
 oying-system/src/main/java/com/oying/modules/sh/rest/OrderOperationLogController.java                   |   73 +
 oying-system/src/main/java/com/oying/modules/sh/domain/OrderAddressSnapshot.java                        |   70 +
 oying-system/src/main/java/com/oying/modules/sh/mapper/OrderReturnMapper.java                           |   22 
 oying-system/src/main/java/com/oying/modules/sh/service/impl/UserAddressServiceImpl.java                |   88 +
 oying-system/src/main/java/com/oying/modules/sh/service/OrderReturnProductSnapshotService.java          |   59 +
 oying-system/src/main/java/com/oying/modules/sh/service/OrderService.java                               |   59 +
 oying-system/src/main/java/com/oying/modules/sh/service/OrderReturnReasonService.java                   |   59 +
 oying-system/src/main/java/com/oying/modules/sh/service/UserAddressService.java                         |   59 +
 oying-system/src/main/resources/mapper/sh/OrderReturnProductSnapshotMapper.xml                          |   56 +
 oying-system/src/main/resources/mapper/system/UserMapper.xml                                            |   12 
 oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderAddressSnapshotServiceImpl.java       |   83 +
 oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderReturnProductSnapshotQueryCriteria.java |   39 
 oying-system/src/main/java/com/oying/modules/sh/domain/OrderProductSnapshot.java                        |   93 +
 oying-system/src/main/java/com/oying/modules/sh/mapper/OrderReturnReasonMapper.java                     |   22 
 oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderOperationLogQueryCriteria.java          |   30 
 oying-system/src/main/java/com/oying/modules/sh/mapper/OrderOperationLogMapper.java                     |   22 
 oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturn.java                                 |   87 +
 oying-system/src/main/java/com/oying/modules/sh/domain/OrderOperationLog.java                           |   59 +
 oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderAddressSnapshotQueryCriteria.java       |   21 
 oying-system/src/main/resources/mapper/sh/OrderReturnReasonMapper.xml                                   |   33 
 oying-system/src/main/java/com/oying/modules/sh/service/OrderAddressSnapshotService.java                |   59 +
 oying-system/src/main/java/com/oying/modules/sh/rest/OrderAddressSnapshotController.java                |   73 +
 oying-system/src/main/java/com/oying/modules/sh/service/OrderOperationLogService.java                   |   59 +
 oying-system/src/main/java/com/oying/modules/sh/service/OrderReturnService.java                         |   59 +
 oying-system/src/main/java/com/oying/modules/sh/service/OrderProductSnapshotService.java                |   59 +
 58 files changed, 3,218 insertions(+), 3 deletions(-)

diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/Order.java b/oying-system/src/main/java/com/oying/modules/sh/domain/Order.java
new file mode 100644
index 0000000..1655629
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/Order.java
@@ -0,0 +1,102 @@
+package com.oying.modules.sh.domain;
+
+import com.oying.base.BaseEntity;
+import cn.hutool.core.bean.BeanUtil;
+import io.swagger.annotations.ApiModelProperty;
+import cn.hutool.core.bean.copier.CopyOptions;
+import java.math.BigDecimal;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+* @description /
+* @author lixin
+* @date 2025-06-11
+**/
+@Getter
+@Setter
+@TableName("sh_order")
+public class Order extends BaseEntity implements Serializable {
+
+    @TableId(value = "order_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Long orderId;
+
+    @NotBlank
+    @ApiModelProperty(value = "订单号")
+    private String orderNum;
+
+    @NotNull
+    @ApiModelProperty(value = "用户id")
+    private Long userId;
+
+    @NotNull
+    @ApiModelProperty(value = "门店ID")
+    private Long storeId;
+
+    @NotBlank
+    @ApiModelProperty(value = "描述")
+    private String orderDescribe;
+
+    @NotNull
+    @ApiModelProperty(value = "原金额")
+    private BigDecimal originalPrice;
+
+    @NotNull
+    @ApiModelProperty(value = "折扣价")
+    private BigDecimal paidPrice;
+
+    @NotNull
+    @ApiModelProperty(value = "实付金额")
+    private BigDecimal actuallyPayPrice;
+
+    @NotBlank
+    @ApiModelProperty(value = "支付状态")
+    private String payState;
+
+    @ApiModelProperty(value = "消息")
+    private String payMessage;
+
+    @NotBlank
+    @ApiModelProperty(value = "支付类型")
+    private String payType;
+
+    @ApiModelProperty(value = "支付时间")
+    private String payTime;
+
+    @NotBlank
+    @ApiModelProperty(value = "订单失效时间RFC3339")
+    private String expireTime;
+
+    @NotBlank
+    @ApiModelProperty(value = "openid")
+    private String openid;
+
+    @ApiModelProperty(value = "APPID")
+    private String appId;
+
+    @ApiModelProperty(value = "时间戳")
+    private String timestamp;
+
+    @ApiModelProperty(value = "nonceStr")
+    private String nonceStr;
+
+    @ApiModelProperty(value = "packageVal")
+    private String packageVal;
+
+    @ApiModelProperty(value = "signType")
+    private String signType;
+
+    @ApiModelProperty(value = "签名")
+    private String paySign;
+
+    public void copy(Order source){
+        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/OrderAddressSnapshot.java b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderAddressSnapshot.java
new file mode 100644
index 0000000..4c25323
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderAddressSnapshot.java
@@ -0,0 +1,70 @@
+package com.oying.modules.sh.domain;
+
+import lombok.Data;
+import cn.hutool.core.bean.BeanUtil;
+import io.swagger.annotations.ApiModelProperty;
+import cn.hutool.core.bean.copier.CopyOptions;
+import java.math.BigDecimal;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+/**
+* @description /
+* @author lixin
+* @date 2025-06-11
+**/
+@Data
+@TableName("sh_order_address_snapshot")
+public class OrderAddressSnapshot implements Serializable {
+
+    @TableId(value = "snapshot_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "快照ID")
+    private Long snapshotId;
+
+    @NotNull
+    @ApiModelProperty(value = "订单ID")
+    private Long orderId;
+
+    @NotBlank
+    @ApiModelProperty(value = "收货人姓名")
+    private String receiverName;
+
+    @NotBlank
+    @ApiModelProperty(value = "收货人电话")
+    private String receiverPhone;
+
+    @ApiModelProperty(value = "省份")
+    private String province;
+
+    @ApiModelProperty(value = "城市")
+    private String city;
+
+    @ApiModelProperty(value = "区县")
+    private String district;
+
+    @ApiModelProperty(value = "街道")
+    private String street;
+
+    @NotBlank
+    @ApiModelProperty(value = "详细地址")
+    private String detail;
+
+    @NotNull
+    @ApiModelProperty(value = "经度")
+    private BigDecimal longitude;
+
+    @NotNull
+    @ApiModelProperty(value = "纬度")
+    private BigDecimal latitude;
+
+    @ApiModelProperty(value = "地址标签(家/公司/学校等)")
+    private String tag;
+
+    public void copy(OrderAddressSnapshot source){
+        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/OrderOperationLog.java b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderOperationLog.java
new file mode 100644
index 0000000..9ba5ccd
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderOperationLog.java
@@ -0,0 +1,59 @@
+package com.oying.modules.sh.domain;
+
+import lombok.Data;
+import cn.hutool.core.bean.BeanUtil;
+import io.swagger.annotations.ApiModelProperty;
+import cn.hutool.core.bean.copier.CopyOptions;
+import java.sql.Timestamp;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+/**
+* @description /
+* @author lixin
+* @date 2025-06-11
+**/
+@Data
+@TableName("sh_order_operation_log")
+public class OrderOperationLog implements Serializable {
+
+    @TableId(value = "log_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Long logId;
+
+    @NotNull
+    @ApiModelProperty(value = "用户id")
+    private Long userId;
+
+    @NotBlank
+    @ApiModelProperty(value = "用户类型")
+    private String userType;
+
+    @NotBlank
+    @ApiModelProperty(value = "用户操作")
+    private String operation;
+
+    @NotBlank
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @NotNull
+    @ApiModelProperty(value = "操作时的订单快照")
+    private String snapshotData;
+
+    @NotNull
+    @ApiModelProperty(value = "操作时间")
+    private Timestamp operationTime;
+
+    @NotNull
+    @ApiModelProperty(value = "订单号")
+    private Long orderNum;
+
+    public void copy(OrderOperationLog source){
+        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/OrderProductSnapshot.java b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderProductSnapshot.java
new file mode 100644
index 0000000..c9e5c05
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderProductSnapshot.java
@@ -0,0 +1,93 @@
+package com.oying.modules.sh.domain;
+
+import lombok.Data;
+import cn.hutool.core.bean.BeanUtil;
+import io.swagger.annotations.ApiModelProperty;
+import cn.hutool.core.bean.copier.CopyOptions;
+import java.math.BigDecimal;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+/**
+* @description /
+* @author lixin
+* @date 2025-06-11
+**/
+@Data
+@TableName("sh_order_product_snapshot")
+public class OrderProductSnapshot implements Serializable {
+
+    @TableId(value = "snapshot_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Long snapshotId;
+
+    @NotBlank
+    @ApiModelProperty(value = "订单编号")
+    private String orderNum;
+
+    @NotNull
+    @ApiModelProperty(value = "门店ID")
+    private Long storeId;
+
+    @NotNull
+    @ApiModelProperty(value = "商品ID")
+    private Long productId;
+
+    @NotBlank
+    @ApiModelProperty(value = "商品编号")
+    private String productCode;
+
+    @NotBlank
+    @ApiModelProperty(value = "条形码")
+    private String productBarcode;
+
+    @NotBlank
+    @ApiModelProperty(value = "商品名称")
+    private String productName;
+
+    @NotBlank
+    @ApiModelProperty(value = "商品标题")
+    private String productTitle;
+
+    @NotBlank
+    @ApiModelProperty(value = "主图片")
+    private String productMainImage;
+
+    @NotBlank
+    @ApiModelProperty(value = "商品描述")
+    private String productDescription;
+
+    @ApiModelProperty(value = "参数快照 {\"保存方式\":\"冷藏\",\"品牌\":\"A牌\"}")
+    private String paramData;
+
+    @NotNull
+    @ApiModelProperty(value = "单价")
+    private BigDecimal unitPrice;
+
+    @NotNull
+    @ApiModelProperty(value = "数量")
+    private Integer detailCount;
+
+    @NotNull
+    @ApiModelProperty(value = "原金额")
+    private BigDecimal originalPrice;
+
+    @NotNull
+    @ApiModelProperty(value = "折扣价")
+    private BigDecimal paidPrice;
+
+    @NotNull
+    @ApiModelProperty(value = "实付金额")
+    private BigDecimal actuallyPayPrice;
+
+    @ApiModelProperty(value = "状态")
+    private String payState;
+
+    public void copy(OrderProductSnapshot source){
+        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturn.java b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturn.java
new file mode 100644
index 0000000..356af47
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturn.java
@@ -0,0 +1,87 @@
+package com.oying.modules.sh.domain;
+
+import com.oying.base.BaseEntity;
+import cn.hutool.core.bean.BeanUtil;
+import io.swagger.annotations.ApiModelProperty;
+import cn.hutool.core.bean.copier.CopyOptions;
+import java.sql.Timestamp;
+import java.math.BigDecimal;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+* @description /
+* @author lixin
+* @date 2025-06-11
+**/
+@Getter
+@Setter
+@TableName("sh_order_return")
+public class OrderReturn extends BaseEntity implements Serializable {
+
+    @TableId(value = "return_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Long returnId;
+
+    @NotBlank
+    @ApiModelProperty(value = "退单号")
+    private String returnNum;
+
+    @NotBlank
+    @ApiModelProperty(value = "订单号")
+    private String orderNum;
+
+    @NotNull
+    @ApiModelProperty(value = "用户")
+    private Long userId;
+
+    @NotNull
+    @ApiModelProperty(value = "门店ID")
+    private Long storeId;
+
+    @NotNull
+    @ApiModelProperty(value = "原金额")
+    private BigDecimal originalPrice;
+
+    @NotNull
+    @ApiModelProperty(value = "折扣价")
+    private BigDecimal paidPrice;
+
+    @NotNull
+    @ApiModelProperty(value = "实付金额")
+    private BigDecimal actuallyPayPrice;
+
+    @ApiModelProperty(value = "退款价格")
+    private BigDecimal refundPrice;
+
+    @ApiModelProperty(value = "退款状态")
+    private String refundStatus;
+
+    @ApiModelProperty(value = "退款成功时间")
+    private String successTime;
+
+    @ApiModelProperty(value = "退款渠道ORIGINAL: 原路退款BALANCE: 退回到余额OTHER_BALANCE: 原账户异常退到其他余额账户OTHER_BANKCARD: 原银行卡异常退到其他银行卡")
+    private String channel;
+
+    @ApiModelProperty(value = "退款原因")
+    private String reason;
+
+    @ApiModelProperty(value = "审核人")
+    private String auditUser;
+
+    @ApiModelProperty(value = "审核时间")
+    private Timestamp auditTime;
+
+    @ApiModelProperty(value = "审核信息")
+    private String auditMessage;
+
+    public void copy(OrderReturn source){
+        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturnProductSnapshot.java b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturnProductSnapshot.java
new file mode 100644
index 0000000..1b5641e
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturnProductSnapshot.java
@@ -0,0 +1,90 @@
+package com.oying.modules.sh.domain;
+
+import lombok.Data;
+import cn.hutool.core.bean.BeanUtil;
+import io.swagger.annotations.ApiModelProperty;
+import cn.hutool.core.bean.copier.CopyOptions;
+import java.math.BigDecimal;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+/**
+* @description /
+* @author lixin
+* @date 2025-06-11
+**/
+@Data
+@TableName("sh_order_return_product_snapshot")
+public class OrderReturnProductSnapshot implements Serializable {
+
+    @TableId(value = "snapshot_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Long snapshotId;
+
+    @NotBlank
+    @ApiModelProperty(value = "退单号")
+    private String returnNum;
+
+    @NotNull
+    @ApiModelProperty(value = "门店ID")
+    private Long storeId;
+
+    @NotNull
+    @ApiModelProperty(value = "商品ID")
+    private Long productId;
+
+    @NotBlank
+    @ApiModelProperty(value = "商品编号")
+    private String productCode;
+
+    @NotBlank
+    @ApiModelProperty(value = "条形码")
+    private String productBarcode;
+
+    @NotBlank
+    @ApiModelProperty(value = "商品名称")
+    private String productName;
+
+    @NotBlank
+    @ApiModelProperty(value = "商品标题")
+    private String productTitle;
+
+    @NotBlank
+    @ApiModelProperty(value = "主图片")
+    private String productMainImage;
+
+    @NotBlank
+    @ApiModelProperty(value = "商品描述")
+    private String productDescription;
+
+    @ApiModelProperty(value = "参数快照 {\"保存方式\":\"冷藏\",\"品牌\":\"A牌\"}")
+    private String paramData;
+
+    @NotNull
+    @ApiModelProperty(value = "单价")
+    private BigDecimal unitPrice;
+
+    @NotNull
+    @ApiModelProperty(value = "数量")
+    private Integer detailCount;
+
+    @NotNull
+    @ApiModelProperty(value = "原金额")
+    private BigDecimal originalPrice;
+
+    @NotNull
+    @ApiModelProperty(value = "折扣价")
+    private BigDecimal paidPrice;
+
+    @NotNull
+    @ApiModelProperty(value = "实付金额")
+    private BigDecimal actuallyPayPrice;
+
+    public void copy(OrderReturnProductSnapshot source){
+        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturnReason.java b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturnReason.java
new file mode 100644
index 0000000..7171bce
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturnReason.java
@@ -0,0 +1,43 @@
+package com.oying.modules.sh.domain;
+
+import com.oying.base.BaseEntity;
+import cn.hutool.core.bean.BeanUtil;
+import io.swagger.annotations.ApiModelProperty;
+import cn.hutool.core.bean.copier.CopyOptions;
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+* @description /
+* @author lixin
+* @date 2025-06-11
+**/
+@Getter
+@Setter
+@TableName("sh_order_return_reason")
+public class OrderReturnReason extends BaseEntity implements Serializable {
+
+    @TableId(value = "reason_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "ID")
+    private Long reasonId;
+
+    @NotBlank
+    @ApiModelProperty(value = "退货类型")
+    private String reasonName;
+
+    @ApiModelProperty(value = "排序")
+    private String sort;
+
+    @NotBlank
+    @ApiModelProperty(value = "状态:0->不启用;1->启用")
+    private String reasonStatus;
+
+    public void copy(OrderReturnReason source){
+        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/UserAddress.java b/oying-system/src/main/java/com/oying/modules/sh/domain/UserAddress.java
new file mode 100644
index 0000000..91286d0
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/UserAddress.java
@@ -0,0 +1,76 @@
+package com.oying.modules.sh.domain;
+
+import com.oying.base.BaseEntity;
+import cn.hutool.core.bean.BeanUtil;
+import io.swagger.annotations.ApiModelProperty;
+import cn.hutool.core.bean.copier.CopyOptions;
+import java.math.BigDecimal;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+* @description /
+* @author lixin
+* @date 2025-06-11
+**/
+@Getter
+@Setter
+@TableName("sh_user_address")
+public class UserAddress extends BaseEntity implements Serializable {
+
+    @TableId(value = "address_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Long addressId;
+
+    @NotNull
+    @ApiModelProperty(value = "用户id")
+    private Long userId;
+
+    @NotBlank
+    @ApiModelProperty(value = "收货人")
+    private String receiverName;
+
+    @NotBlank
+    @ApiModelProperty(value = "收货人电话")
+    private String receiverPhone;
+
+    @ApiModelProperty(value = "省份")
+    private String province;
+
+    @ApiModelProperty(value = "城市")
+    private String city;
+
+    @ApiModelProperty(value = "区县")
+    private String district;
+
+    @ApiModelProperty(value = "街道")
+    private String street;
+
+    @NotBlank
+    @ApiModelProperty(value = "详细地址")
+    private String detail;
+
+    @ApiModelProperty(value = "经度")
+    private BigDecimal longitude;
+
+    @ApiModelProperty(value = "纬度")
+    private BigDecimal latitude;
+
+    @NotNull
+    @ApiModelProperty(value = "是否默认")
+    private Integer isDefault;
+
+    @NotBlank
+    @ApiModelProperty(value = "标签(家、公司等)")
+    private String tag;
+
+    public void copy(UserAddress source){
+        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderAddressSnapshotQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderAddressSnapshotQueryCriteria.java
new file mode 100644
index 0000000..4f28d07
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderAddressSnapshotQueryCriteria.java
@@ -0,0 +1,21 @@
+package com.oying.modules.sh.domain.dto;
+
+import lombok.Data;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@Data
+public class OrderAddressSnapshotQueryCriteria{
+
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer page = 1;
+
+    @ApiModelProperty(value = "每页数据量", example = "10")
+    private Integer size = 10;
+
+    @ApiModelProperty(value = "订单ID")
+    private Long orderId;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderOperationLogQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderOperationLogQueryCriteria.java
new file mode 100644
index 0000000..d0b8f3e
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderOperationLogQueryCriteria.java
@@ -0,0 +1,30 @@
+package com.oying.modules.sh.domain.dto;
+
+import lombok.Data;
+import java.sql.Timestamp;
+import java.util.List;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@Data
+public class OrderOperationLogQueryCriteria{
+
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer page = 1;
+
+    @ApiModelProperty(value = "每页数据量", example = "10")
+    private Integer size = 10;
+
+    @ApiModelProperty(value = "用户id")
+    private Long userId;
+
+    @ApiModelProperty(value = "用户类型")
+    private String userType;
+
+    @ApiModelProperty(value = "订单号")
+    private Long orderNum;
+    private List<Timestamp> operationTime;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderProductSnapshotQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderProductSnapshotQueryCriteria.java
new file mode 100644
index 0000000..be7f4d9
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderProductSnapshotQueryCriteria.java
@@ -0,0 +1,42 @@
+package com.oying.modules.sh.domain.dto;
+
+import lombok.Data;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@Data
+public class OrderProductSnapshotQueryCriteria{
+
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer page = 1;
+
+    @ApiModelProperty(value = "每页数据量", example = "10")
+    private Integer size = 10;
+
+    @ApiModelProperty(value = "订单编号")
+    private String orderNum;
+
+    @ApiModelProperty(value = "门店ID")
+    private Long storeId;
+
+    @ApiModelProperty(value = "商品ID")
+    private Long productId;
+
+    @ApiModelProperty(value = "商品编号")
+    private String productCode;
+
+    @ApiModelProperty(value = "条形码")
+    private String productBarcode;
+
+    @ApiModelProperty(value = "商品名称")
+    private String productName;
+
+    @ApiModelProperty(value = "商品标题")
+    private String productTitle;
+
+    @ApiModelProperty(value = "状态")
+    private String payState;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderQueryCriteria.java
new file mode 100644
index 0000000..42b5519
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderQueryCriteria.java
@@ -0,0 +1,40 @@
+package com.oying.modules.sh.domain.dto;
+
+import lombok.Data;
+import java.sql.Timestamp;
+import java.util.List;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@Data
+public class OrderQueryCriteria{
+
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer page = 1;
+
+    @ApiModelProperty(value = "每页数据量", example = "10")
+    private Integer size = 10;
+
+    @ApiModelProperty(value = "订单号")
+    private String orderNum;
+
+    @ApiModelProperty(value = "用户id")
+    private Long userId;
+
+    @ApiModelProperty(value = "门店ID")
+    private Long storeId;
+
+    @ApiModelProperty(value = "描述")
+    private String orderDescribe;
+
+    @ApiModelProperty(value = "支付状态")
+    private String payState;
+
+    @ApiModelProperty(value = "支付类型")
+    private String payType;
+    private List<String> payTime;
+    private List<Timestamp> createTime;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderReturnProductSnapshotQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderReturnProductSnapshotQueryCriteria.java
new file mode 100644
index 0000000..dbe6a35
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderReturnProductSnapshotQueryCriteria.java
@@ -0,0 +1,39 @@
+package com.oying.modules.sh.domain.dto;
+
+import lombok.Data;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@Data
+public class OrderReturnProductSnapshotQueryCriteria{
+
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer page = 1;
+
+    @ApiModelProperty(value = "每页数据量", example = "10")
+    private Integer size = 10;
+
+    @ApiModelProperty(value = "退单号")
+    private String returnNum;
+
+    @ApiModelProperty(value = "门店ID")
+    private Long storeId;
+
+    @ApiModelProperty(value = "商品ID")
+    private Long productId;
+
+    @ApiModelProperty(value = "商品编号")
+    private String productCode;
+
+    @ApiModelProperty(value = "条形码")
+    private String productBarcode;
+
+    @ApiModelProperty(value = "商品名称")
+    private String productName;
+
+    @ApiModelProperty(value = "商品标题")
+    private String productTitle;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderReturnQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderReturnQueryCriteria.java
new file mode 100644
index 0000000..a3eb539
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderReturnQueryCriteria.java
@@ -0,0 +1,41 @@
+package com.oying.modules.sh.domain.dto;
+
+import lombok.Data;
+import java.sql.Timestamp;
+import java.util.List;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@Data
+public class OrderReturnQueryCriteria{
+
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer page = 1;
+
+    @ApiModelProperty(value = "每页数据量", example = "10")
+    private Integer size = 10;
+
+    @ApiModelProperty(value = "退单号")
+    private String returnNum;
+
+    @ApiModelProperty(value = "订单号")
+    private String orderNum;
+
+    @ApiModelProperty(value = "用户")
+    private Long userId;
+
+    @ApiModelProperty(value = "门店ID")
+    private Long storeId;
+
+    @ApiModelProperty(value = "退款状态")
+    private String refundStatus;
+
+    @ApiModelProperty(value = "审核人")
+    private String auditUser;
+    private List<String> successTime;
+    private List<Timestamp> auditTime;
+    private List<Timestamp> createTime;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderReturnReasonQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderReturnReasonQueryCriteria.java
new file mode 100644
index 0000000..2c43b09
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderReturnReasonQueryCriteria.java
@@ -0,0 +1,24 @@
+package com.oying.modules.sh.domain.dto;
+
+import lombok.Data;
+import java.sql.Timestamp;
+import java.util.List;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@Data
+public class OrderReturnReasonQueryCriteria{
+
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer page = 1;
+
+    @ApiModelProperty(value = "每页数据量", example = "10")
+    private Integer size = 10;
+
+    @ApiModelProperty(value = "状态:0->不启用;1->启用")
+    private String reasonStatus;
+    private List<Timestamp> createTime;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/dto/UserAddressQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/UserAddressQueryCriteria.java
new file mode 100644
index 0000000..01af304
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/UserAddressQueryCriteria.java
@@ -0,0 +1,27 @@
+package com.oying.modules.sh.domain.dto;
+
+import lombok.Data;
+import java.sql.Timestamp;
+import java.util.List;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@Data
+public class UserAddressQueryCriteria{
+
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer page = 1;
+
+    @ApiModelProperty(value = "每页数据量", example = "10")
+    private Integer size = 10;
+
+    @ApiModelProperty(value = "用户id")
+    private Long userId;
+
+    @ApiModelProperty(value = "标签(家、公司等)")
+    private String tag;
+    private List<Timestamp> createTime;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderAddressSnapshotMapper.java b/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderAddressSnapshotMapper.java
new file mode 100644
index 0000000..fff4dba
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderAddressSnapshotMapper.java
@@ -0,0 +1,22 @@
+package com.oying.modules.sh.mapper;
+
+import com.oying.modules.sh.domain.OrderAddressSnapshot;
+import com.oying.modules.sh.domain.dto.OrderAddressSnapshotQueryCriteria;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@Mapper
+public interface OrderAddressSnapshotMapper extends BaseMapper<OrderAddressSnapshot> {
+
+    IPage<OrderAddressSnapshot> findAll(@Param("criteria") OrderAddressSnapshotQueryCriteria criteria, Page<Object> page);
+
+    List<OrderAddressSnapshot> findAll(@Param("criteria") OrderAddressSnapshotQueryCriteria criteria);
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderMapper.java b/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderMapper.java
new file mode 100644
index 0000000..f300317
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderMapper.java
@@ -0,0 +1,22 @@
+package com.oying.modules.sh.mapper;
+
+import com.oying.modules.sh.domain.Order;
+import com.oying.modules.sh.domain.dto.OrderQueryCriteria;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@Mapper
+public interface OrderMapper extends BaseMapper<Order> {
+
+    IPage<Order> findAll(@Param("criteria") OrderQueryCriteria criteria, Page<Object> page);
+
+    List<Order> findAll(@Param("criteria") OrderQueryCriteria criteria);
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderOperationLogMapper.java b/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderOperationLogMapper.java
new file mode 100644
index 0000000..0760f6d
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderOperationLogMapper.java
@@ -0,0 +1,22 @@
+package com.oying.modules.sh.mapper;
+
+import com.oying.modules.sh.domain.OrderOperationLog;
+import com.oying.modules.sh.domain.dto.OrderOperationLogQueryCriteria;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@Mapper
+public interface OrderOperationLogMapper extends BaseMapper<OrderOperationLog> {
+
+    IPage<OrderOperationLog> findAll(@Param("criteria") OrderOperationLogQueryCriteria criteria, Page<Object> page);
+
+    List<OrderOperationLog> findAll(@Param("criteria") OrderOperationLogQueryCriteria criteria);
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderProductSnapshotMapper.java b/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderProductSnapshotMapper.java
new file mode 100644
index 0000000..6f49164
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderProductSnapshotMapper.java
@@ -0,0 +1,22 @@
+package com.oying.modules.sh.mapper;
+
+import com.oying.modules.sh.domain.OrderProductSnapshot;
+import com.oying.modules.sh.domain.dto.OrderProductSnapshotQueryCriteria;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@Mapper
+public interface OrderProductSnapshotMapper extends BaseMapper<OrderProductSnapshot> {
+
+    IPage<OrderProductSnapshot> findAll(@Param("criteria") OrderProductSnapshotQueryCriteria criteria, Page<Object> page);
+
+    List<OrderProductSnapshot> findAll(@Param("criteria") OrderProductSnapshotQueryCriteria criteria);
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderReturnMapper.java b/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderReturnMapper.java
new file mode 100644
index 0000000..401db5c
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderReturnMapper.java
@@ -0,0 +1,22 @@
+package com.oying.modules.sh.mapper;
+
+import com.oying.modules.sh.domain.OrderReturn;
+import com.oying.modules.sh.domain.dto.OrderReturnQueryCriteria;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@Mapper
+public interface OrderReturnMapper extends BaseMapper<OrderReturn> {
+
+    IPage<OrderReturn> findAll(@Param("criteria") OrderReturnQueryCriteria criteria, Page<Object> page);
+
+    List<OrderReturn> findAll(@Param("criteria") OrderReturnQueryCriteria criteria);
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderReturnProductSnapshotMapper.java b/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderReturnProductSnapshotMapper.java
new file mode 100644
index 0000000..39d8a69
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderReturnProductSnapshotMapper.java
@@ -0,0 +1,22 @@
+package com.oying.modules.sh.mapper;
+
+import com.oying.modules.sh.domain.OrderReturnProductSnapshot;
+import com.oying.modules.sh.domain.dto.OrderReturnProductSnapshotQueryCriteria;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@Mapper
+public interface OrderReturnProductSnapshotMapper extends BaseMapper<OrderReturnProductSnapshot> {
+
+    IPage<OrderReturnProductSnapshot> findAll(@Param("criteria") OrderReturnProductSnapshotQueryCriteria criteria, Page<Object> page);
+
+    List<OrderReturnProductSnapshot> findAll(@Param("criteria") OrderReturnProductSnapshotQueryCriteria criteria);
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderReturnReasonMapper.java b/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderReturnReasonMapper.java
new file mode 100644
index 0000000..a6fdf25
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/mapper/OrderReturnReasonMapper.java
@@ -0,0 +1,22 @@
+package com.oying.modules.sh.mapper;
+
+import com.oying.modules.sh.domain.OrderReturnReason;
+import com.oying.modules.sh.domain.dto.OrderReturnReasonQueryCriteria;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@Mapper
+public interface OrderReturnReasonMapper extends BaseMapper<OrderReturnReason> {
+
+    IPage<OrderReturnReason> findAll(@Param("criteria") OrderReturnReasonQueryCriteria criteria, Page<Object> page);
+
+    List<OrderReturnReason> findAll(@Param("criteria") OrderReturnReasonQueryCriteria criteria);
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/mapper/UserAddressMapper.java b/oying-system/src/main/java/com/oying/modules/sh/mapper/UserAddressMapper.java
new file mode 100644
index 0000000..7ae40b1
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/mapper/UserAddressMapper.java
@@ -0,0 +1,22 @@
+package com.oying.modules.sh.mapper;
+
+import com.oying.modules.sh.domain.UserAddress;
+import com.oying.modules.sh.domain.dto.UserAddressQueryCriteria;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@Mapper
+public interface UserAddressMapper extends BaseMapper<UserAddress> {
+
+    IPage<UserAddress> findAll(@Param("criteria") UserAddressQueryCriteria criteria, Page<Object> page);
+
+    List<UserAddress> findAll(@Param("criteria") UserAddressQueryCriteria criteria);
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/rest/OrderAddressSnapshotController.java b/oying-system/src/main/java/com/oying/modules/sh/rest/OrderAddressSnapshotController.java
new file mode 100644
index 0000000..a8d001a
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/rest/OrderAddressSnapshotController.java
@@ -0,0 +1,73 @@
+package com.oying.modules.sh.rest;
+
+import com.oying.annotation.Log;
+import com.oying.modules.sh.domain.OrderAddressSnapshot;
+import com.oying.modules.sh.service.OrderAddressSnapshotService;
+import com.oying.modules.sh.domain.dto.OrderAddressSnapshotQueryCriteria;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.*;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.oying.utils.PageResult;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "SH:订单地址快照")
+@RequestMapping("/api/orderAddressSnapshot")
+public class OrderAddressSnapshotController {
+
+    private final OrderAddressSnapshotService orderAddressSnapshotService;
+
+    @ApiOperation("导出数据")
+    @GetMapping(value = "/download")
+    @PreAuthorize("@el.check('orderAddressSnapshot:list')")
+    public void exportOrderAddressSnapshot(HttpServletResponse response, OrderAddressSnapshotQueryCriteria criteria) throws IOException {
+        orderAddressSnapshotService.download(orderAddressSnapshotService.queryAll(criteria), response);
+    }
+
+    @GetMapping
+    @ApiOperation("查询订单地址快照")
+    @PreAuthorize("@el.check('orderAddressSnapshot:list')")
+    public ResponseEntity<PageResult<OrderAddressSnapshot>> queryOrderAddressSnapshot(OrderAddressSnapshotQueryCriteria criteria){
+        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
+        return new ResponseEntity<>(orderAddressSnapshotService.queryAll(criteria,page),HttpStatus.OK);
+    }
+
+    @PostMapping
+    @Log("新增订单地址快照")
+    @ApiOperation("新增订单地址快照")
+    @PreAuthorize("@el.check('orderAddressSnapshot:add')")
+    public ResponseEntity<Object> createOrderAddressSnapshot(@Validated @RequestBody OrderAddressSnapshot resources){
+        orderAddressSnapshotService.create(resources);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @PutMapping
+    @Log("修改订单地址快照")
+    @ApiOperation("修改订单地址快照")
+    @PreAuthorize("@el.check('orderAddressSnapshot:edit')")
+    public ResponseEntity<Object> updateOrderAddressSnapshot(@Validated @RequestBody OrderAddressSnapshot resources){
+        orderAddressSnapshotService.update(resources);
+        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    }
+
+    @DeleteMapping
+    @Log("删除订单地址快照")
+    @ApiOperation("删除订单地址快照")
+    @PreAuthorize("@el.check('orderAddressSnapshot:del')")
+    public ResponseEntity<Object> deleteOrderAddressSnapshot(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
+        orderAddressSnapshotService.deleteAll(ids);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/rest/OrderController.java b/oying-system/src/main/java/com/oying/modules/sh/rest/OrderController.java
new file mode 100644
index 0000000..a87ae9c
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/rest/OrderController.java
@@ -0,0 +1,73 @@
+package com.oying.modules.sh.rest;
+
+import com.oying.annotation.Log;
+import com.oying.modules.sh.domain.Order;
+import com.oying.modules.sh.service.OrderService;
+import com.oying.modules.sh.domain.dto.OrderQueryCriteria;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.*;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.oying.utils.PageResult;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "SH:订单信息")
+@RequestMapping("/api/order")
+public class OrderController {
+
+    private final OrderService orderService;
+
+    @ApiOperation("导出数据")
+    @GetMapping(value = "/download")
+    @PreAuthorize("@el.check('order:list')")
+    public void exportOrder(HttpServletResponse response, OrderQueryCriteria criteria) throws IOException {
+        orderService.download(orderService.queryAll(criteria), response);
+    }
+
+    @GetMapping
+    @ApiOperation("查询订单信息")
+    @PreAuthorize("@el.check('order:list')")
+    public ResponseEntity<PageResult<Order>> queryOrder(OrderQueryCriteria criteria){
+        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
+        return new ResponseEntity<>(orderService.queryAll(criteria,page),HttpStatus.OK);
+    }
+
+    @PostMapping
+    @Log("新增订单信息")
+    @ApiOperation("新增订单信息")
+    @PreAuthorize("@el.check('order:add')")
+    public ResponseEntity<Object> createOrder(@Validated @RequestBody Order resources){
+        orderService.create(resources);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @PutMapping
+    @Log("修改订单信息")
+    @ApiOperation("修改订单信息")
+    @PreAuthorize("@el.check('order:edit')")
+    public ResponseEntity<Object> updateOrder(@Validated @RequestBody Order resources){
+        orderService.update(resources);
+        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    }
+
+    @DeleteMapping
+    @Log("删除订单信息")
+    @ApiOperation("删除订单信息")
+    @PreAuthorize("@el.check('order:del')")
+    public ResponseEntity<Object> deleteOrder(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
+        orderService.deleteAll(ids);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/rest/OrderOperationLogController.java b/oying-system/src/main/java/com/oying/modules/sh/rest/OrderOperationLogController.java
new file mode 100644
index 0000000..91fefbd
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/rest/OrderOperationLogController.java
@@ -0,0 +1,73 @@
+package com.oying.modules.sh.rest;
+
+import com.oying.annotation.Log;
+import com.oying.modules.sh.domain.OrderOperationLog;
+import com.oying.modules.sh.service.OrderOperationLogService;
+import com.oying.modules.sh.domain.dto.OrderOperationLogQueryCriteria;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.*;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.oying.utils.PageResult;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "SH:订单操作日志")
+@RequestMapping("/api/orderOperationLog")
+public class OrderOperationLogController {
+
+    private final OrderOperationLogService orderOperationLogService;
+
+    @ApiOperation("导出数据")
+    @GetMapping(value = "/download")
+    @PreAuthorize("@el.check('orderOperationLog:list')")
+    public void exportOrderOperationLog(HttpServletResponse response, OrderOperationLogQueryCriteria criteria) throws IOException {
+        orderOperationLogService.download(orderOperationLogService.queryAll(criteria), response);
+    }
+
+    @GetMapping
+    @ApiOperation("查询订单操作日志")
+    @PreAuthorize("@el.check('orderOperationLog:list')")
+    public ResponseEntity<PageResult<OrderOperationLog>> queryOrderOperationLog(OrderOperationLogQueryCriteria criteria){
+        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
+        return new ResponseEntity<>(orderOperationLogService.queryAll(criteria,page),HttpStatus.OK);
+    }
+
+    @PostMapping
+    @Log("新增订单操作日志")
+    @ApiOperation("新增订单操作日志")
+    @PreAuthorize("@el.check('orderOperationLog:add')")
+    public ResponseEntity<Object> createOrderOperationLog(@Validated @RequestBody OrderOperationLog resources){
+        orderOperationLogService.create(resources);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @PutMapping
+    @Log("修改订单操作日志")
+    @ApiOperation("修改订单操作日志")
+    @PreAuthorize("@el.check('orderOperationLog:edit')")
+    public ResponseEntity<Object> updateOrderOperationLog(@Validated @RequestBody OrderOperationLog resources){
+        orderOperationLogService.update(resources);
+        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    }
+
+    @DeleteMapping
+    @Log("删除订单操作日志")
+    @ApiOperation("删除订单操作日志")
+    @PreAuthorize("@el.check('orderOperationLog:del')")
+    public ResponseEntity<Object> deleteOrderOperationLog(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
+        orderOperationLogService.deleteAll(ids);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/rest/OrderProductSnapshotController.java b/oying-system/src/main/java/com/oying/modules/sh/rest/OrderProductSnapshotController.java
new file mode 100644
index 0000000..07d1508
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/rest/OrderProductSnapshotController.java
@@ -0,0 +1,73 @@
+package com.oying.modules.sh.rest;
+
+import com.oying.annotation.Log;
+import com.oying.modules.sh.domain.OrderProductSnapshot;
+import com.oying.modules.sh.service.OrderProductSnapshotService;
+import com.oying.modules.sh.domain.dto.OrderProductSnapshotQueryCriteria;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.*;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.oying.utils.PageResult;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "SH:订单商品快照")
+@RequestMapping("/api/orderProductSnapshot")
+public class OrderProductSnapshotController {
+
+    private final OrderProductSnapshotService orderProductSnapshotService;
+
+    @ApiOperation("导出数据")
+    @GetMapping(value = "/download")
+    @PreAuthorize("@el.check('orderProductSnapshot:list')")
+    public void exportOrderProductSnapshot(HttpServletResponse response, OrderProductSnapshotQueryCriteria criteria) throws IOException {
+        orderProductSnapshotService.download(orderProductSnapshotService.queryAll(criteria), response);
+    }
+
+    @GetMapping
+    @ApiOperation("查询订单商品快照")
+    @PreAuthorize("@el.check('orderProductSnapshot:list')")
+    public ResponseEntity<PageResult<OrderProductSnapshot>> queryOrderProductSnapshot(OrderProductSnapshotQueryCriteria criteria){
+        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
+        return new ResponseEntity<>(orderProductSnapshotService.queryAll(criteria,page),HttpStatus.OK);
+    }
+
+    @PostMapping
+    @Log("新增订单商品快照")
+    @ApiOperation("新增订单商品快照")
+    @PreAuthorize("@el.check('orderProductSnapshot:add')")
+    public ResponseEntity<Object> createOrderProductSnapshot(@Validated @RequestBody OrderProductSnapshot resources){
+        orderProductSnapshotService.create(resources);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @PutMapping
+    @Log("修改订单商品快照")
+    @ApiOperation("修改订单商品快照")
+    @PreAuthorize("@el.check('orderProductSnapshot:edit')")
+    public ResponseEntity<Object> updateOrderProductSnapshot(@Validated @RequestBody OrderProductSnapshot resources){
+        orderProductSnapshotService.update(resources);
+        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    }
+
+    @DeleteMapping
+    @Log("删除订单商品快照")
+    @ApiOperation("删除订单商品快照")
+    @PreAuthorize("@el.check('orderProductSnapshot:del')")
+    public ResponseEntity<Object> deleteOrderProductSnapshot(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
+        orderProductSnapshotService.deleteAll(ids);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/rest/OrderReturnController.java b/oying-system/src/main/java/com/oying/modules/sh/rest/OrderReturnController.java
new file mode 100644
index 0000000..276f674
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/rest/OrderReturnController.java
@@ -0,0 +1,73 @@
+package com.oying.modules.sh.rest;
+
+import com.oying.annotation.Log;
+import com.oying.modules.sh.domain.OrderReturn;
+import com.oying.modules.sh.service.OrderReturnService;
+import com.oying.modules.sh.domain.dto.OrderReturnQueryCriteria;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.*;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.oying.utils.PageResult;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "SH:退款订单")
+@RequestMapping("/api/orderReturn")
+public class OrderReturnController {
+
+    private final OrderReturnService orderReturnService;
+
+    @ApiOperation("导出数据")
+    @GetMapping(value = "/download")
+    @PreAuthorize("@el.check('orderReturn:list')")
+    public void exportOrderReturn(HttpServletResponse response, OrderReturnQueryCriteria criteria) throws IOException {
+        orderReturnService.download(orderReturnService.queryAll(criteria), response);
+    }
+
+    @GetMapping
+    @ApiOperation("查询退款订单")
+    @PreAuthorize("@el.check('orderReturn:list')")
+    public ResponseEntity<PageResult<OrderReturn>> queryOrderReturn(OrderReturnQueryCriteria criteria){
+        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
+        return new ResponseEntity<>(orderReturnService.queryAll(criteria,page),HttpStatus.OK);
+    }
+
+    @PostMapping
+    @Log("新增退款订单")
+    @ApiOperation("新增退款订单")
+    @PreAuthorize("@el.check('orderReturn:add')")
+    public ResponseEntity<Object> createOrderReturn(@Validated @RequestBody OrderReturn resources){
+        orderReturnService.create(resources);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @PutMapping
+    @Log("修改退款订单")
+    @ApiOperation("修改退款订单")
+    @PreAuthorize("@el.check('orderReturn:edit')")
+    public ResponseEntity<Object> updateOrderReturn(@Validated @RequestBody OrderReturn resources){
+        orderReturnService.update(resources);
+        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    }
+
+    @DeleteMapping
+    @Log("删除退款订单")
+    @ApiOperation("删除退款订单")
+    @PreAuthorize("@el.check('orderReturn:del')")
+    public ResponseEntity<Object> deleteOrderReturn(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
+        orderReturnService.deleteAll(ids);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/rest/OrderReturnProductSnapshotController.java b/oying-system/src/main/java/com/oying/modules/sh/rest/OrderReturnProductSnapshotController.java
new file mode 100644
index 0000000..c91d620
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/rest/OrderReturnProductSnapshotController.java
@@ -0,0 +1,73 @@
+package com.oying.modules.sh.rest;
+
+import com.oying.annotation.Log;
+import com.oying.modules.sh.domain.OrderReturnProductSnapshot;
+import com.oying.modules.sh.service.OrderReturnProductSnapshotService;
+import com.oying.modules.sh.domain.dto.OrderReturnProductSnapshotQueryCriteria;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.*;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.oying.utils.PageResult;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "SH:退款订单商品快照")
+@RequestMapping("/api/orderReturnProductSnapshot")
+public class OrderReturnProductSnapshotController {
+
+    private final OrderReturnProductSnapshotService orderReturnProductSnapshotService;
+
+    @ApiOperation("导出数据")
+    @GetMapping(value = "/download")
+    @PreAuthorize("@el.check('orderReturnProductSnapshot:list')")
+    public void exportOrderReturnProductSnapshot(HttpServletResponse response, OrderReturnProductSnapshotQueryCriteria criteria) throws IOException {
+        orderReturnProductSnapshotService.download(orderReturnProductSnapshotService.queryAll(criteria), response);
+    }
+
+    @GetMapping
+    @ApiOperation("查询退款订单商品快照")
+    @PreAuthorize("@el.check('orderReturnProductSnapshot:list')")
+    public ResponseEntity<PageResult<OrderReturnProductSnapshot>> queryOrderReturnProductSnapshot(OrderReturnProductSnapshotQueryCriteria criteria){
+        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
+        return new ResponseEntity<>(orderReturnProductSnapshotService.queryAll(criteria,page),HttpStatus.OK);
+    }
+
+    @PostMapping
+    @Log("新增退款订单商品快照")
+    @ApiOperation("新增退款订单商品快照")
+    @PreAuthorize("@el.check('orderReturnProductSnapshot:add')")
+    public ResponseEntity<Object> createOrderReturnProductSnapshot(@Validated @RequestBody OrderReturnProductSnapshot resources){
+        orderReturnProductSnapshotService.create(resources);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @PutMapping
+    @Log("修改退款订单商品快照")
+    @ApiOperation("修改退款订单商品快照")
+    @PreAuthorize("@el.check('orderReturnProductSnapshot:edit')")
+    public ResponseEntity<Object> updateOrderReturnProductSnapshot(@Validated @RequestBody OrderReturnProductSnapshot resources){
+        orderReturnProductSnapshotService.update(resources);
+        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    }
+
+    @DeleteMapping
+    @Log("删除退款订单商品快照")
+    @ApiOperation("删除退款订单商品快照")
+    @PreAuthorize("@el.check('orderReturnProductSnapshot:del')")
+    public ResponseEntity<Object> deleteOrderReturnProductSnapshot(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
+        orderReturnProductSnapshotService.deleteAll(ids);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/rest/OrderReturnReasonController.java b/oying-system/src/main/java/com/oying/modules/sh/rest/OrderReturnReasonController.java
new file mode 100644
index 0000000..e74300f
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/rest/OrderReturnReasonController.java
@@ -0,0 +1,73 @@
+package com.oying.modules.sh.rest;
+
+import com.oying.annotation.Log;
+import com.oying.modules.sh.domain.OrderReturnReason;
+import com.oying.modules.sh.service.OrderReturnReasonService;
+import com.oying.modules.sh.domain.dto.OrderReturnReasonQueryCriteria;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.*;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.oying.utils.PageResult;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "SH:退货原因表")
+@RequestMapping("/api/orderReturnReason")
+public class OrderReturnReasonController {
+
+    private final OrderReturnReasonService orderReturnReasonService;
+
+    @ApiOperation("导出数据")
+    @GetMapping(value = "/download")
+    @PreAuthorize("@el.check('orderReturnReason:list')")
+    public void exportOrderReturnReason(HttpServletResponse response, OrderReturnReasonQueryCriteria criteria) throws IOException {
+        orderReturnReasonService.download(orderReturnReasonService.queryAll(criteria), response);
+    }
+
+    @GetMapping
+    @ApiOperation("查询退货原因表")
+    @PreAuthorize("@el.check('orderReturnReason:list')")
+    public ResponseEntity<PageResult<OrderReturnReason>> queryOrderReturnReason(OrderReturnReasonQueryCriteria criteria){
+        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
+        return new ResponseEntity<>(orderReturnReasonService.queryAll(criteria,page),HttpStatus.OK);
+    }
+
+    @PostMapping
+    @Log("新增退货原因表")
+    @ApiOperation("新增退货原因表")
+    @PreAuthorize("@el.check('orderReturnReason:add')")
+    public ResponseEntity<Object> createOrderReturnReason(@Validated @RequestBody OrderReturnReason resources){
+        orderReturnReasonService.create(resources);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @PutMapping
+    @Log("修改退货原因表")
+    @ApiOperation("修改退货原因表")
+    @PreAuthorize("@el.check('orderReturnReason:edit')")
+    public ResponseEntity<Object> updateOrderReturnReason(@Validated @RequestBody OrderReturnReason resources){
+        orderReturnReasonService.update(resources);
+        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    }
+
+    @DeleteMapping
+    @Log("删除退货原因表")
+    @ApiOperation("删除退货原因表")
+    @PreAuthorize("@el.check('orderReturnReason:del')")
+    public ResponseEntity<Object> deleteOrderReturnReason(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
+        orderReturnReasonService.deleteAll(ids);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/rest/UserAddressController.java b/oying-system/src/main/java/com/oying/modules/sh/rest/UserAddressController.java
new file mode 100644
index 0000000..58894d2
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/rest/UserAddressController.java
@@ -0,0 +1,73 @@
+package com.oying.modules.sh.rest;
+
+import com.oying.annotation.Log;
+import com.oying.modules.sh.domain.UserAddress;
+import com.oying.modules.sh.service.UserAddressService;
+import com.oying.modules.sh.domain.dto.UserAddressQueryCriteria;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.*;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.oying.utils.PageResult;
+
+/**
+* @author lixin
+* @date 2025-06-11
+**/
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "SH:用户地址")
+@RequestMapping("/api/userAddress")
+public class UserAddressController {
+
+    private final UserAddressService userAddressService;
+
+    @ApiOperation("导出数据")
+    @GetMapping(value = "/download")
+    @PreAuthorize("@el.check('userAddress:list')")
+    public void exportUserAddress(HttpServletResponse response, UserAddressQueryCriteria criteria) throws IOException {
+        userAddressService.download(userAddressService.queryAll(criteria), response);
+    }
+
+    @GetMapping
+    @ApiOperation("查询用户地址")
+    @PreAuthorize("@el.check('userAddress:list')")
+    public ResponseEntity<PageResult<UserAddress>> queryUserAddress(UserAddressQueryCriteria criteria){
+        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
+        return new ResponseEntity<>(userAddressService.queryAll(criteria,page),HttpStatus.OK);
+    }
+
+    @PostMapping
+    @Log("新增用户地址")
+    @ApiOperation("新增用户地址")
+    @PreAuthorize("@el.check('userAddress:add')")
+    public ResponseEntity<Object> createUserAddress(@Validated @RequestBody UserAddress resources){
+        userAddressService.create(resources);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @PutMapping
+    @Log("修改用户地址")
+    @ApiOperation("修改用户地址")
+    @PreAuthorize("@el.check('userAddress:edit')")
+    public ResponseEntity<Object> updateUserAddress(@Validated @RequestBody UserAddress resources){
+        userAddressService.update(resources);
+        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    }
+
+    @DeleteMapping
+    @Log("删除用户地址")
+    @ApiOperation("删除用户地址")
+    @PreAuthorize("@el.check('userAddress:del')")
+    public ResponseEntity<Object> deleteUserAddress(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
+        userAddressService.deleteAll(ids);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/OrderAddressSnapshotService.java b/oying-system/src/main/java/com/oying/modules/sh/service/OrderAddressSnapshotService.java
new file mode 100644
index 0000000..cc26f71
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/OrderAddressSnapshotService.java
@@ -0,0 +1,59 @@
+package com.oying.modules.sh.service;
+
+import com.oying.modules.sh.domain.OrderAddressSnapshot;
+import com.oying.modules.sh.domain.dto.OrderAddressSnapshotQueryCriteria;
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务接口
+* @author lixin
+* @date 2025-06-11
+**/
+public interface OrderAddressSnapshotService extends IService<OrderAddressSnapshot> {
+
+    /**
+    * 查询数据分页
+    * @param criteria 条件
+    * @param page 分页参数
+    * @return PageResult
+    */
+    PageResult<OrderAddressSnapshot> queryAll(OrderAddressSnapshotQueryCriteria criteria, Page<Object> page);
+
+    /**
+    * 查询所有数据不分页
+    * @param criteria 条件参数
+    * @return List<OrderAddressSnapshotDto>
+    */
+    List<OrderAddressSnapshot> queryAll(OrderAddressSnapshotQueryCriteria criteria);
+
+    /**
+    * 创建
+    * @param resources /
+    */
+    void create(OrderAddressSnapshot resources);
+
+    /**
+    * 编辑
+    * @param resources /
+    */
+    void update(OrderAddressSnapshot resources);
+
+    /**
+    * 多选删除
+    * @param ids /
+    */
+    void deleteAll(List<Long> ids);
+
+    /**
+    * 导出数据
+    * @param all 待导出的数据
+    * @param response /
+    * @throws IOException /
+    */
+    void download(List<OrderAddressSnapshot> all, HttpServletResponse response) throws IOException;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/OrderOperationLogService.java b/oying-system/src/main/java/com/oying/modules/sh/service/OrderOperationLogService.java
new file mode 100644
index 0000000..03a8b0b
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/OrderOperationLogService.java
@@ -0,0 +1,59 @@
+package com.oying.modules.sh.service;
+
+import com.oying.modules.sh.domain.OrderOperationLog;
+import com.oying.modules.sh.domain.dto.OrderOperationLogQueryCriteria;
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务接口
+* @author lixin
+* @date 2025-06-11
+**/
+public interface OrderOperationLogService extends IService<OrderOperationLog> {
+
+    /**
+    * 查询数据分页
+    * @param criteria 条件
+    * @param page 分页参数
+    * @return PageResult
+    */
+    PageResult<OrderOperationLog> queryAll(OrderOperationLogQueryCriteria criteria, Page<Object> page);
+
+    /**
+    * 查询所有数据不分页
+    * @param criteria 条件参数
+    * @return List<OrderOperationLogDto>
+    */
+    List<OrderOperationLog> queryAll(OrderOperationLogQueryCriteria criteria);
+
+    /**
+    * 创建
+    * @param resources /
+    */
+    void create(OrderOperationLog resources);
+
+    /**
+    * 编辑
+    * @param resources /
+    */
+    void update(OrderOperationLog resources);
+
+    /**
+    * 多选删除
+    * @param ids /
+    */
+    void deleteAll(List<Long> ids);
+
+    /**
+    * 导出数据
+    * @param all 待导出的数据
+    * @param response /
+    * @throws IOException /
+    */
+    void download(List<OrderOperationLog> all, HttpServletResponse response) throws IOException;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/OrderProductSnapshotService.java b/oying-system/src/main/java/com/oying/modules/sh/service/OrderProductSnapshotService.java
new file mode 100644
index 0000000..257ad0d
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/OrderProductSnapshotService.java
@@ -0,0 +1,59 @@
+package com.oying.modules.sh.service;
+
+import com.oying.modules.sh.domain.OrderProductSnapshot;
+import com.oying.modules.sh.domain.dto.OrderProductSnapshotQueryCriteria;
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务接口
+* @author lixin
+* @date 2025-06-11
+**/
+public interface OrderProductSnapshotService extends IService<OrderProductSnapshot> {
+
+    /**
+    * 查询数据分页
+    * @param criteria 条件
+    * @param page 分页参数
+    * @return PageResult
+    */
+    PageResult<OrderProductSnapshot> queryAll(OrderProductSnapshotQueryCriteria criteria, Page<Object> page);
+
+    /**
+    * 查询所有数据不分页
+    * @param criteria 条件参数
+    * @return List<OrderProductSnapshotDto>
+    */
+    List<OrderProductSnapshot> queryAll(OrderProductSnapshotQueryCriteria criteria);
+
+    /**
+    * 创建
+    * @param resources /
+    */
+    void create(OrderProductSnapshot resources);
+
+    /**
+    * 编辑
+    * @param resources /
+    */
+    void update(OrderProductSnapshot resources);
+
+    /**
+    * 多选删除
+    * @param ids /
+    */
+    void deleteAll(List<Long> ids);
+
+    /**
+    * 导出数据
+    * @param all 待导出的数据
+    * @param response /
+    * @throws IOException /
+    */
+    void download(List<OrderProductSnapshot> all, HttpServletResponse response) throws IOException;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/OrderReturnProductSnapshotService.java b/oying-system/src/main/java/com/oying/modules/sh/service/OrderReturnProductSnapshotService.java
new file mode 100644
index 0000000..e53cfa6
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/OrderReturnProductSnapshotService.java
@@ -0,0 +1,59 @@
+package com.oying.modules.sh.service;
+
+import com.oying.modules.sh.domain.OrderReturnProductSnapshot;
+import com.oying.modules.sh.domain.dto.OrderReturnProductSnapshotQueryCriteria;
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务接口
+* @author lixin
+* @date 2025-06-11
+**/
+public interface OrderReturnProductSnapshotService extends IService<OrderReturnProductSnapshot> {
+
+    /**
+    * 查询数据分页
+    * @param criteria 条件
+    * @param page 分页参数
+    * @return PageResult
+    */
+    PageResult<OrderReturnProductSnapshot> queryAll(OrderReturnProductSnapshotQueryCriteria criteria, Page<Object> page);
+
+    /**
+    * 查询所有数据不分页
+    * @param criteria 条件参数
+    * @return List<OrderReturnProductSnapshotDto>
+    */
+    List<OrderReturnProductSnapshot> queryAll(OrderReturnProductSnapshotQueryCriteria criteria);
+
+    /**
+    * 创建
+    * @param resources /
+    */
+    void create(OrderReturnProductSnapshot resources);
+
+    /**
+    * 编辑
+    * @param resources /
+    */
+    void update(OrderReturnProductSnapshot resources);
+
+    /**
+    * 多选删除
+    * @param ids /
+    */
+    void deleteAll(List<Long> ids);
+
+    /**
+    * 导出数据
+    * @param all 待导出的数据
+    * @param response /
+    * @throws IOException /
+    */
+    void download(List<OrderReturnProductSnapshot> all, HttpServletResponse response) throws IOException;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/OrderReturnReasonService.java b/oying-system/src/main/java/com/oying/modules/sh/service/OrderReturnReasonService.java
new file mode 100644
index 0000000..5386abd
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/OrderReturnReasonService.java
@@ -0,0 +1,59 @@
+package com.oying.modules.sh.service;
+
+import com.oying.modules.sh.domain.OrderReturnReason;
+import com.oying.modules.sh.domain.dto.OrderReturnReasonQueryCriteria;
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务接口
+* @author lixin
+* @date 2025-06-11
+**/
+public interface OrderReturnReasonService extends IService<OrderReturnReason> {
+
+    /**
+    * 查询数据分页
+    * @param criteria 条件
+    * @param page 分页参数
+    * @return PageResult
+    */
+    PageResult<OrderReturnReason> queryAll(OrderReturnReasonQueryCriteria criteria, Page<Object> page);
+
+    /**
+    * 查询所有数据不分页
+    * @param criteria 条件参数
+    * @return List<OrderReturnReasonDto>
+    */
+    List<OrderReturnReason> queryAll(OrderReturnReasonQueryCriteria criteria);
+
+    /**
+    * 创建
+    * @param resources /
+    */
+    void create(OrderReturnReason resources);
+
+    /**
+    * 编辑
+    * @param resources /
+    */
+    void update(OrderReturnReason resources);
+
+    /**
+    * 多选删除
+    * @param ids /
+    */
+    void deleteAll(List<Long> ids);
+
+    /**
+    * 导出数据
+    * @param all 待导出的数据
+    * @param response /
+    * @throws IOException /
+    */
+    void download(List<OrderReturnReason> all, HttpServletResponse response) throws IOException;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/OrderReturnService.java b/oying-system/src/main/java/com/oying/modules/sh/service/OrderReturnService.java
new file mode 100644
index 0000000..cabc3b3
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/OrderReturnService.java
@@ -0,0 +1,59 @@
+package com.oying.modules.sh.service;
+
+import com.oying.modules.sh.domain.OrderReturn;
+import com.oying.modules.sh.domain.dto.OrderReturnQueryCriteria;
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务接口
+* @author lixin
+* @date 2025-06-11
+**/
+public interface OrderReturnService extends IService<OrderReturn> {
+
+    /**
+    * 查询数据分页
+    * @param criteria 条件
+    * @param page 分页参数
+    * @return PageResult
+    */
+    PageResult<OrderReturn> queryAll(OrderReturnQueryCriteria criteria, Page<Object> page);
+
+    /**
+    * 查询所有数据不分页
+    * @param criteria 条件参数
+    * @return List<OrderReturnDto>
+    */
+    List<OrderReturn> queryAll(OrderReturnQueryCriteria criteria);
+
+    /**
+    * 创建
+    * @param resources /
+    */
+    void create(OrderReturn resources);
+
+    /**
+    * 编辑
+    * @param resources /
+    */
+    void update(OrderReturn resources);
+
+    /**
+    * 多选删除
+    * @param ids /
+    */
+    void deleteAll(List<Long> ids);
+
+    /**
+    * 导出数据
+    * @param all 待导出的数据
+    * @param response /
+    * @throws IOException /
+    */
+    void download(List<OrderReturn> all, HttpServletResponse response) throws IOException;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/OrderService.java b/oying-system/src/main/java/com/oying/modules/sh/service/OrderService.java
new file mode 100644
index 0000000..d40a98b
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/OrderService.java
@@ -0,0 +1,59 @@
+package com.oying.modules.sh.service;
+
+import com.oying.modules.sh.domain.Order;
+import com.oying.modules.sh.domain.dto.OrderQueryCriteria;
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务接口
+* @author lixin
+* @date 2025-06-11
+**/
+public interface OrderService extends IService<Order> {
+
+    /**
+    * 查询数据分页
+    * @param criteria 条件
+    * @param page 分页参数
+    * @return PageResult
+    */
+    PageResult<Order> queryAll(OrderQueryCriteria criteria, Page<Object> page);
+
+    /**
+    * 查询所有数据不分页
+    * @param criteria 条件参数
+    * @return List<OrderDto>
+    */
+    List<Order> queryAll(OrderQueryCriteria criteria);
+
+    /**
+    * 创建
+    * @param resources /
+    */
+    void create(Order resources);
+
+    /**
+    * 编辑
+    * @param resources /
+    */
+    void update(Order resources);
+
+    /**
+    * 多选删除
+    * @param ids /
+    */
+    void deleteAll(List<Long> ids);
+
+    /**
+    * 导出数据
+    * @param all 待导出的数据
+    * @param response /
+    * @throws IOException /
+    */
+    void download(List<Order> all, HttpServletResponse response) throws IOException;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/UserAddressService.java b/oying-system/src/main/java/com/oying/modules/sh/service/UserAddressService.java
new file mode 100644
index 0000000..f400e5a
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/UserAddressService.java
@@ -0,0 +1,59 @@
+package com.oying.modules.sh.service;
+
+import com.oying.modules.sh.domain.UserAddress;
+import com.oying.modules.sh.domain.dto.UserAddressQueryCriteria;
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务接口
+* @author lixin
+* @date 2025-06-11
+**/
+public interface UserAddressService extends IService<UserAddress> {
+
+    /**
+    * 查询数据分页
+    * @param criteria 条件
+    * @param page 分页参数
+    * @return PageResult
+    */
+    PageResult<UserAddress> queryAll(UserAddressQueryCriteria criteria, Page<Object> page);
+
+    /**
+    * 查询所有数据不分页
+    * @param criteria 条件参数
+    * @return List<UserAddressDto>
+    */
+    List<UserAddress> queryAll(UserAddressQueryCriteria criteria);
+
+    /**
+    * 创建
+    * @param resources /
+    */
+    void create(UserAddress resources);
+
+    /**
+    * 编辑
+    * @param resources /
+    */
+    void update(UserAddress resources);
+
+    /**
+    * 多选删除
+    * @param ids /
+    */
+    void deleteAll(List<Long> ids);
+
+    /**
+    * 导出数据
+    * @param all 待导出的数据
+    * @param response /
+    * @throws IOException /
+    */
+    void download(List<UserAddress> all, HttpServletResponse response) throws IOException;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderAddressSnapshotServiceImpl.java b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderAddressSnapshotServiceImpl.java
new file mode 100644
index 0000000..bfa0821
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderAddressSnapshotServiceImpl.java
@@ -0,0 +1,83 @@
+package com.oying.modules.sh.service.impl;
+
+import com.oying.modules.sh.domain.OrderAddressSnapshot;
+import com.oying.utils.FileUtil;
+import lombok.RequiredArgsConstructor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.oying.modules.sh.service.OrderAddressSnapshotService;
+import com.oying.modules.sh.domain.dto.OrderAddressSnapshotQueryCriteria;
+import com.oying.modules.sh.mapper.OrderAddressSnapshotMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.oying.utils.PageUtil;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务实现
+* @author lixin
+* @date 2025-06-11
+**/
+@Service
+@RequiredArgsConstructor
+public class OrderAddressSnapshotServiceImpl extends ServiceImpl<OrderAddressSnapshotMapper, OrderAddressSnapshot> implements OrderAddressSnapshotService {
+
+    private final OrderAddressSnapshotMapper orderAddressSnapshotMapper;
+
+    @Override
+    public PageResult<OrderAddressSnapshot> queryAll(OrderAddressSnapshotQueryCriteria criteria, Page<Object> page){
+        return PageUtil.toPage(orderAddressSnapshotMapper.findAll(criteria, page));
+    }
+
+    @Override
+    public List<OrderAddressSnapshot> queryAll(OrderAddressSnapshotQueryCriteria criteria){
+        return orderAddressSnapshotMapper.findAll(criteria);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void create(OrderAddressSnapshot resources) {
+        orderAddressSnapshotMapper.insert(resources);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void update(OrderAddressSnapshot resources) {
+        OrderAddressSnapshot orderAddressSnapshot = getById(resources.getSnapshotId());
+        orderAddressSnapshot.copy(resources);
+        orderAddressSnapshotMapper.updateById(orderAddressSnapshot);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteAll(List<Long> ids) {
+        orderAddressSnapshotMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void download(List<OrderAddressSnapshot> all, HttpServletResponse response) throws IOException {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (OrderAddressSnapshot orderAddressSnapshot : all) {
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("订单ID", orderAddressSnapshot.getOrderId());
+            map.put("收货人姓名", orderAddressSnapshot.getReceiverName());
+            map.put("收货人电话", orderAddressSnapshot.getReceiverPhone());
+            map.put("省份", orderAddressSnapshot.getProvince());
+            map.put("城市", orderAddressSnapshot.getCity());
+            map.put("区县", orderAddressSnapshot.getDistrict());
+            map.put("街道", orderAddressSnapshot.getStreet());
+            map.put("详细地址", orderAddressSnapshot.getDetail());
+            map.put("经度", orderAddressSnapshot.getLongitude());
+            map.put("纬度", orderAddressSnapshot.getLatitude());
+            map.put("地址标签(家/公司/学校等)", orderAddressSnapshot.getTag());
+            list.add(map);
+        }
+        FileUtil.downloadExcel(list, response);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderOperationLogServiceImpl.java b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderOperationLogServiceImpl.java
new file mode 100644
index 0000000..6fc014d
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderOperationLogServiceImpl.java
@@ -0,0 +1,79 @@
+package com.oying.modules.sh.service.impl;
+
+import com.oying.modules.sh.domain.OrderOperationLog;
+import com.oying.utils.FileUtil;
+import lombok.RequiredArgsConstructor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.oying.modules.sh.service.OrderOperationLogService;
+import com.oying.modules.sh.domain.dto.OrderOperationLogQueryCriteria;
+import com.oying.modules.sh.mapper.OrderOperationLogMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.oying.utils.PageUtil;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务实现
+* @author lixin
+* @date 2025-06-11
+**/
+@Service
+@RequiredArgsConstructor
+public class OrderOperationLogServiceImpl extends ServiceImpl<OrderOperationLogMapper, OrderOperationLog> implements OrderOperationLogService {
+
+    private final OrderOperationLogMapper orderOperationLogMapper;
+
+    @Override
+    public PageResult<OrderOperationLog> queryAll(OrderOperationLogQueryCriteria criteria, Page<Object> page){
+        return PageUtil.toPage(orderOperationLogMapper.findAll(criteria, page));
+    }
+
+    @Override
+    public List<OrderOperationLog> queryAll(OrderOperationLogQueryCriteria criteria){
+        return orderOperationLogMapper.findAll(criteria);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void create(OrderOperationLog resources) {
+        orderOperationLogMapper.insert(resources);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void update(OrderOperationLog resources) {
+        OrderOperationLog orderOperationLog = getById(resources.getLogId());
+        orderOperationLog.copy(resources);
+        orderOperationLogMapper.updateById(orderOperationLog);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteAll(List<Long> ids) {
+        orderOperationLogMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void download(List<OrderOperationLog> all, HttpServletResponse response) throws IOException {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (OrderOperationLog orderOperationLog : all) {
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("用户id", orderOperationLog.getUserId());
+            map.put("用户类型", orderOperationLog.getUserType());
+            map.put("用户操作", orderOperationLog.getOperation());
+            map.put("备注", orderOperationLog.getRemark());
+            map.put("操作时的订单快照", orderOperationLog.getSnapshotData());
+            map.put("操作时间", orderOperationLog.getOperationTime());
+            map.put("订单号", orderOperationLog.getOrderNum());
+            list.add(map);
+        }
+        FileUtil.downloadExcel(list, response);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderProductSnapshotServiceImpl.java b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderProductSnapshotServiceImpl.java
new file mode 100644
index 0000000..c75fece
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderProductSnapshotServiceImpl.java
@@ -0,0 +1,88 @@
+package com.oying.modules.sh.service.impl;
+
+import com.oying.modules.sh.domain.OrderProductSnapshot;
+import com.oying.utils.FileUtil;
+import lombok.RequiredArgsConstructor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.oying.modules.sh.service.OrderProductSnapshotService;
+import com.oying.modules.sh.domain.dto.OrderProductSnapshotQueryCriteria;
+import com.oying.modules.sh.mapper.OrderProductSnapshotMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.oying.utils.PageUtil;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务实现
+* @author lixin
+* @date 2025-06-11
+**/
+@Service
+@RequiredArgsConstructor
+public class OrderProductSnapshotServiceImpl extends ServiceImpl<OrderProductSnapshotMapper, OrderProductSnapshot> implements OrderProductSnapshotService {
+
+    private final OrderProductSnapshotMapper orderProductSnapshotMapper;
+
+    @Override
+    public PageResult<OrderProductSnapshot> queryAll(OrderProductSnapshotQueryCriteria criteria, Page<Object> page){
+        return PageUtil.toPage(orderProductSnapshotMapper.findAll(criteria, page));
+    }
+
+    @Override
+    public List<OrderProductSnapshot> queryAll(OrderProductSnapshotQueryCriteria criteria){
+        return orderProductSnapshotMapper.findAll(criteria);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void create(OrderProductSnapshot resources) {
+        orderProductSnapshotMapper.insert(resources);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void update(OrderProductSnapshot resources) {
+        OrderProductSnapshot orderProductSnapshot = getById(resources.getSnapshotId());
+        orderProductSnapshot.copy(resources);
+        orderProductSnapshotMapper.updateById(orderProductSnapshot);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteAll(List<Long> ids) {
+        orderProductSnapshotMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void download(List<OrderProductSnapshot> all, HttpServletResponse response) throws IOException {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (OrderProductSnapshot orderProductSnapshot : all) {
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("订单编号", orderProductSnapshot.getOrderNum());
+            map.put("门店ID", orderProductSnapshot.getStoreId());
+            map.put("商品ID", orderProductSnapshot.getProductId());
+            map.put("商品编号", orderProductSnapshot.getProductCode());
+            map.put("条形码", orderProductSnapshot.getProductBarcode());
+            map.put("商品名称", orderProductSnapshot.getProductName());
+            map.put("商品标题", orderProductSnapshot.getProductTitle());
+            map.put("主图片", orderProductSnapshot.getProductMainImage());
+            map.put("商品描述", orderProductSnapshot.getProductDescription());
+            map.put("参数快照", orderProductSnapshot.getParamData());
+            map.put("单价", orderProductSnapshot.getUnitPrice());
+            map.put("数量", orderProductSnapshot.getDetailCount());
+            map.put("原金额", orderProductSnapshot.getOriginalPrice());
+            map.put("折扣价", orderProductSnapshot.getPaidPrice());
+            map.put("实付金额", orderProductSnapshot.getActuallyPayPrice());
+            map.put("状态", orderProductSnapshot.getPayState());
+            list.add(map);
+        }
+        FileUtil.downloadExcel(list, response);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderReturnProductSnapshotServiceImpl.java b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderReturnProductSnapshotServiceImpl.java
new file mode 100644
index 0000000..b7cc458
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderReturnProductSnapshotServiceImpl.java
@@ -0,0 +1,87 @@
+package com.oying.modules.sh.service.impl;
+
+import com.oying.modules.sh.domain.OrderReturnProductSnapshot;
+import com.oying.utils.FileUtil;
+import lombok.RequiredArgsConstructor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.oying.modules.sh.service.OrderReturnProductSnapshotService;
+import com.oying.modules.sh.domain.dto.OrderReturnProductSnapshotQueryCriteria;
+import com.oying.modules.sh.mapper.OrderReturnProductSnapshotMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.oying.utils.PageUtil;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务实现
+* @author lixin
+* @date 2025-06-11
+**/
+@Service
+@RequiredArgsConstructor
+public class OrderReturnProductSnapshotServiceImpl extends ServiceImpl<OrderReturnProductSnapshotMapper, OrderReturnProductSnapshot> implements OrderReturnProductSnapshotService {
+
+    private final OrderReturnProductSnapshotMapper orderReturnProductSnapshotMapper;
+
+    @Override
+    public PageResult<OrderReturnProductSnapshot> queryAll(OrderReturnProductSnapshotQueryCriteria criteria, Page<Object> page){
+        return PageUtil.toPage(orderReturnProductSnapshotMapper.findAll(criteria, page));
+    }
+
+    @Override
+    public List<OrderReturnProductSnapshot> queryAll(OrderReturnProductSnapshotQueryCriteria criteria){
+        return orderReturnProductSnapshotMapper.findAll(criteria);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void create(OrderReturnProductSnapshot resources) {
+        orderReturnProductSnapshotMapper.insert(resources);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void update(OrderReturnProductSnapshot resources) {
+        OrderReturnProductSnapshot orderReturnProductSnapshot = getById(resources.getSnapshotId());
+        orderReturnProductSnapshot.copy(resources);
+        orderReturnProductSnapshotMapper.updateById(orderReturnProductSnapshot);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteAll(List<Long> ids) {
+        orderReturnProductSnapshotMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void download(List<OrderReturnProductSnapshot> all, HttpServletResponse response) throws IOException {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (OrderReturnProductSnapshot orderReturnProductSnapshot : all) {
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("退单号", orderReturnProductSnapshot.getReturnNum());
+            map.put("门店ID", orderReturnProductSnapshot.getStoreId());
+            map.put("商品ID", orderReturnProductSnapshot.getProductId());
+            map.put("商品编号", orderReturnProductSnapshot.getProductCode());
+            map.put("条形码", orderReturnProductSnapshot.getProductBarcode());
+            map.put("商品名称", orderReturnProductSnapshot.getProductName());
+            map.put("商品标题", orderReturnProductSnapshot.getProductTitle());
+            map.put("主图片", orderReturnProductSnapshot.getProductMainImage());
+            map.put("商品描述", orderReturnProductSnapshot.getProductDescription());
+            map.put("参数快照 ", orderReturnProductSnapshot.getParamData());
+            map.put("单价", orderReturnProductSnapshot.getUnitPrice());
+            map.put("数量", orderReturnProductSnapshot.getDetailCount());
+            map.put("原金额", orderReturnProductSnapshot.getOriginalPrice());
+            map.put("折扣价", orderReturnProductSnapshot.getPaidPrice());
+            map.put("实付金额", orderReturnProductSnapshot.getActuallyPayPrice());
+            list.add(map);
+        }
+        FileUtil.downloadExcel(list, response);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderReturnReasonServiceImpl.java b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderReturnReasonServiceImpl.java
new file mode 100644
index 0000000..27e64e3
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderReturnReasonServiceImpl.java
@@ -0,0 +1,79 @@
+package com.oying.modules.sh.service.impl;
+
+import com.oying.modules.sh.domain.OrderReturnReason;
+import com.oying.utils.FileUtil;
+import lombok.RequiredArgsConstructor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.oying.modules.sh.service.OrderReturnReasonService;
+import com.oying.modules.sh.domain.dto.OrderReturnReasonQueryCriteria;
+import com.oying.modules.sh.mapper.OrderReturnReasonMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.oying.utils.PageUtil;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务实现
+* @author lixin
+* @date 2025-06-11
+**/
+@Service
+@RequiredArgsConstructor
+public class OrderReturnReasonServiceImpl extends ServiceImpl<OrderReturnReasonMapper, OrderReturnReason> implements OrderReturnReasonService {
+
+    private final OrderReturnReasonMapper orderReturnReasonMapper;
+
+    @Override
+    public PageResult<OrderReturnReason> queryAll(OrderReturnReasonQueryCriteria criteria, Page<Object> page){
+        return PageUtil.toPage(orderReturnReasonMapper.findAll(criteria, page));
+    }
+
+    @Override
+    public List<OrderReturnReason> queryAll(OrderReturnReasonQueryCriteria criteria){
+        return orderReturnReasonMapper.findAll(criteria);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void create(OrderReturnReason resources) {
+        orderReturnReasonMapper.insert(resources);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void update(OrderReturnReason resources) {
+        OrderReturnReason orderReturnReason = getById(resources.getReasonId());
+        orderReturnReason.copy(resources);
+        orderReturnReasonMapper.updateById(orderReturnReason);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteAll(List<Long> ids) {
+        orderReturnReasonMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void download(List<OrderReturnReason> all, HttpServletResponse response) throws IOException {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (OrderReturnReason orderReturnReason : all) {
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("退货类型", orderReturnReason.getReasonName());
+            map.put("排序", orderReturnReason.getSort());
+            map.put("状态:0->不启用;1->启用", orderReturnReason.getReasonStatus());
+            map.put("创建者", orderReturnReason.getCreateBy());
+            map.put("更新者", orderReturnReason.getUpdateBy());
+            map.put("创建日期", orderReturnReason.getCreateTime());
+            map.put("更新时间", orderReturnReason.getUpdateTime());
+            list.add(map);
+        }
+        FileUtil.downloadExcel(list, response);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderReturnServiceImpl.java b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderReturnServiceImpl.java
new file mode 100644
index 0000000..e78b192
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderReturnServiceImpl.java
@@ -0,0 +1,91 @@
+package com.oying.modules.sh.service.impl;
+
+import com.oying.modules.sh.domain.OrderReturn;
+import com.oying.utils.FileUtil;
+import lombok.RequiredArgsConstructor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.oying.modules.sh.service.OrderReturnService;
+import com.oying.modules.sh.domain.dto.OrderReturnQueryCriteria;
+import com.oying.modules.sh.mapper.OrderReturnMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.oying.utils.PageUtil;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务实现
+* @author lixin
+* @date 2025-06-11
+**/
+@Service
+@RequiredArgsConstructor
+public class OrderReturnServiceImpl extends ServiceImpl<OrderReturnMapper, OrderReturn> implements OrderReturnService {
+
+    private final OrderReturnMapper orderReturnMapper;
+
+    @Override
+    public PageResult<OrderReturn> queryAll(OrderReturnQueryCriteria criteria, Page<Object> page){
+        return PageUtil.toPage(orderReturnMapper.findAll(criteria, page));
+    }
+
+    @Override
+    public List<OrderReturn> queryAll(OrderReturnQueryCriteria criteria){
+        return orderReturnMapper.findAll(criteria);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void create(OrderReturn resources) {
+        orderReturnMapper.insert(resources);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void update(OrderReturn resources) {
+        OrderReturn orderReturn = getById(resources.getReturnId());
+        orderReturn.copy(resources);
+        orderReturnMapper.updateById(orderReturn);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteAll(List<Long> ids) {
+        orderReturnMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void download(List<OrderReturn> all, HttpServletResponse response) throws IOException {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (OrderReturn orderReturn : all) {
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("退单号", orderReturn.getReturnNum());
+            map.put("订单号", orderReturn.getOrderNum());
+            map.put("用户", orderReturn.getUserId());
+            map.put("门店ID", orderReturn.getStoreId());
+            map.put("原金额", orderReturn.getOriginalPrice());
+            map.put("折扣价", orderReturn.getPaidPrice());
+            map.put("实付金额", orderReturn.getActuallyPayPrice());
+            map.put("退款价格", orderReturn.getRefundPrice());
+            map.put("退款状态", orderReturn.getRefundStatus());
+            map.put("退款成功时间", orderReturn.getSuccessTime());
+            map.put("退款渠道ORIGINAL: 原路退款BALANCE: 退回到余额OTHER_BALANCE: 原账户异常退到其他余额账户OTHER_BANKCARD: 原银行卡异常退到其他银行卡", orderReturn.getChannel());
+            map.put("退款原因", orderReturn.getReason());
+            map.put("审核人", orderReturn.getAuditUser());
+            map.put("审核时间", orderReturn.getAuditTime());
+            map.put("审核信息", orderReturn.getAuditMessage());
+            map.put("创建人", orderReturn.getCreateBy());
+            map.put("创建时间", orderReturn.getCreateTime());
+            map.put("修改者", orderReturn.getUpdateBy());
+            map.put("修改时间", orderReturn.getUpdateTime());
+            list.add(map);
+        }
+        FileUtil.downloadExcel(list, response);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java
new file mode 100644
index 0000000..1938466
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java
@@ -0,0 +1,95 @@
+package com.oying.modules.sh.service.impl;
+
+import com.oying.modules.sh.domain.Order;
+import com.oying.utils.FileUtil;
+import lombok.RequiredArgsConstructor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.oying.modules.sh.service.OrderService;
+import com.oying.modules.sh.domain.dto.OrderQueryCriteria;
+import com.oying.modules.sh.mapper.OrderMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.oying.utils.PageUtil;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务实现
+* @author lixin
+* @date 2025-06-11
+**/
+@Service
+@RequiredArgsConstructor
+public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
+
+    private final OrderMapper orderMapper;
+
+    @Override
+    public PageResult<Order> queryAll(OrderQueryCriteria criteria, Page<Object> page){
+        return PageUtil.toPage(orderMapper.findAll(criteria, page));
+    }
+
+    @Override
+    public List<Order> queryAll(OrderQueryCriteria criteria){
+        return orderMapper.findAll(criteria);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void create(Order resources) {
+        orderMapper.insert(resources);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void update(Order resources) {
+        Order order = getById(resources.getOrderId());
+        order.copy(resources);
+        orderMapper.updateById(order);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteAll(List<Long> ids) {
+        orderMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void download(List<Order> all, HttpServletResponse response) throws IOException {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (Order order : all) {
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("订单号", order.getOrderNum());
+            map.put("用户id", order.getUserId());
+            map.put("门店ID", order.getStoreId());
+            map.put("描述", order.getOrderDescribe());
+            map.put("原金额", order.getOriginalPrice());
+            map.put("折扣价", order.getPaidPrice());
+            map.put("实付金额", order.getActuallyPayPrice());
+            map.put("支付状态", order.getPayState());
+            map.put("消息", order.getPayMessage());
+            map.put("支付类型", order.getPayType());
+            map.put("支付时间", order.getPayTime());
+            map.put("订单失效时间RFC3339", order.getExpireTime());
+            map.put("openid", order.getOpenid());
+            map.put("APPID", order.getAppId());
+            map.put("时间戳", order.getTimestamp());
+            map.put(" nonceStr",  order.getNonceStr());
+            map.put(" packageVal",  order.getPackageVal());
+            map.put(" signType",  order.getSignType());
+            map.put("签名", order.getPaySign());
+            map.put("创建人", order.getCreateBy());
+            map.put("创建时间", order.getCreateTime());
+            map.put("修改者", order.getUpdateBy());
+            map.put("修改时间", order.getUpdateTime());
+            list.add(map);
+        }
+        FileUtil.downloadExcel(list, response);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/impl/UserAddressServiceImpl.java b/oying-system/src/main/java/com/oying/modules/sh/service/impl/UserAddressServiceImpl.java
new file mode 100644
index 0000000..69c7a89
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/impl/UserAddressServiceImpl.java
@@ -0,0 +1,88 @@
+package com.oying.modules.sh.service.impl;
+
+import com.oying.modules.sh.domain.UserAddress;
+import com.oying.utils.FileUtil;
+import lombok.RequiredArgsConstructor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.oying.modules.sh.service.UserAddressService;
+import com.oying.modules.sh.domain.dto.UserAddressQueryCriteria;
+import com.oying.modules.sh.mapper.UserAddressMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.oying.utils.PageUtil;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务实现
+* @author lixin
+* @date 2025-06-11
+**/
+@Service
+@RequiredArgsConstructor
+public class UserAddressServiceImpl extends ServiceImpl<UserAddressMapper, UserAddress> implements UserAddressService {
+
+    private final UserAddressMapper userAddressMapper;
+
+    @Override
+    public PageResult<UserAddress> queryAll(UserAddressQueryCriteria criteria, Page<Object> page){
+        return PageUtil.toPage(userAddressMapper.findAll(criteria, page));
+    }
+
+    @Override
+    public List<UserAddress> queryAll(UserAddressQueryCriteria criteria){
+        return userAddressMapper.findAll(criteria);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void create(UserAddress resources) {
+        userAddressMapper.insert(resources);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void update(UserAddress resources) {
+        UserAddress userAddress = getById(resources.getAddressId());
+        userAddress.copy(resources);
+        userAddressMapper.updateById(userAddress);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteAll(List<Long> ids) {
+        userAddressMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void download(List<UserAddress> all, HttpServletResponse response) throws IOException {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (UserAddress userAddress : all) {
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("用户id", userAddress.getUserId());
+            map.put("收货人", userAddress.getReceiverName());
+            map.put("收货人电话", userAddress.getReceiverPhone());
+            map.put("省份", userAddress.getProvince());
+            map.put("城市", userAddress.getCity());
+            map.put("区县", userAddress.getDistrict());
+            map.put("街道", userAddress.getStreet());
+            map.put("详细地址", userAddress.getDetail());
+            map.put("经度", userAddress.getLongitude());
+            map.put("纬度", userAddress.getLatitude());
+            map.put("是否默认", userAddress.getIsDefault());
+            map.put("标签(家、公司等)", userAddress.getTag());
+            map.put("创建人", userAddress.getCreateBy());
+            map.put("创建时间", userAddress.getCreateTime());
+            map.put("修改者", userAddress.getUpdateBy());
+            map.put("修改时间", userAddress.getUpdateTime());
+            list.add(map);
+        }
+        FileUtil.downloadExcel(list, response);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/system/domain/dto/UserQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/system/domain/dto/UserQueryCriteria.java
index b8f13d5..7835b56 100644
--- a/oying-system/src/main/java/com/oying/modules/system/domain/dto/UserQueryCriteria.java
+++ b/oying-system/src/main/java/com/oying/modules/system/domain/dto/UserQueryCriteria.java
@@ -22,6 +22,9 @@
     @ApiModelProperty(value = "是否启用")
     private Boolean enabled;
 
+    @ApiModelProperty(value = "用户类型")
+    private List<String> userTypes;
+
     @ApiModelProperty(value = "创建时间")
     private List<Timestamp> createTime;
 
diff --git a/oying-system/src/main/resources/mapper/sh/OrderAddressSnapshotMapper.xml b/oying-system/src/main/resources/mapper/sh/OrderAddressSnapshotMapper.xml
new file mode 100644
index 0000000..e5c36b7
--- /dev/null
+++ b/oying-system/src/main/resources/mapper/sh/OrderAddressSnapshotMapper.xml
@@ -0,0 +1,34 @@
+<?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.oying.modules.sh.mapper.OrderAddressSnapshotMapper">
+    <resultMap id="BaseResultMap" type="com.oying.modules.sh.domain.OrderAddressSnapshot">
+        <id column="snapshot_id" property="snapshotId"/>
+        <result column="order_id" property="orderId"/>
+        <result column="receiver_name" property="receiverName"/>
+        <result column="receiver_phone" property="receiverPhone"/>
+        <result column="province" property="province"/>
+        <result column="city" property="city"/>
+        <result column="district" property="district"/>
+        <result column="street" property="street"/>
+        <result column="detail" property="detail"/>
+        <result column="longitude" property="longitude"/>
+        <result column="latitude" property="latitude"/>
+        <result column="tag" property="tag"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        snapshot_id, order_id, receiver_name, receiver_phone, province, city, district, street, detail, longitude, latitude, tag
+    </sql>
+
+    <select id="findAll" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from sh_order_address_snapshot
+        <where>
+            <if test="criteria.orderId != null">
+                and order_id = #{criteria.orderId}
+            </if>
+        </where>
+        order by snapshot_id desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/oying-system/src/main/resources/mapper/sh/OrderMapper.xml b/oying-system/src/main/resources/mapper/sh/OrderMapper.xml
new file mode 100644
index 0000000..184665f
--- /dev/null
+++ b/oying-system/src/main/resources/mapper/sh/OrderMapper.xml
@@ -0,0 +1,67 @@
+<?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.oying.modules.sh.mapper.OrderMapper">
+    <resultMap id="BaseResultMap" type="com.oying.modules.sh.domain.Order">
+        <id column="order_id" property="orderId"/>
+        <result column="order_num" property="orderNum"/>
+        <result column="user_id" property="userId"/>
+        <result column="store_id" property="storeId"/>
+        <result column="order_describe" property="orderDescribe"/>
+        <result column="original_price" property="originalPrice"/>
+        <result column="paid_price" property="paidPrice"/>
+        <result column="actually_pay_price" property="actuallyPayPrice"/>
+        <result column="pay_state" property="payState"/>
+        <result column="pay_message" property="payMessage"/>
+        <result column="pay_type" property="payType"/>
+        <result column="pay_time" property="payTime"/>
+        <result column="expire_time" property="expireTime"/>
+        <result column="openid" property="openid"/>
+        <result column="app_id" property="appId"/>
+        <result column="timestamp" property="timestamp"/>
+        <result column="nonce_str" property="nonceStr"/>
+        <result column="package_val" property="packageVal"/>
+        <result column="sign_type" property="signType"/>
+        <result column="pay_sign" property="paySign"/>
+        <result column="create_by" property="createBy"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_by" property="updateBy"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        order_id, order_num, user_id, store_id, order_describe, original_price, paid_price, actually_pay_price, pay_state, pay_message, pay_type, pay_time, expire_time, openid, app_id, timestamp, nonce_str, package_val, sign_type, pay_sign, create_by, create_time, update_by, update_time
+    </sql>
+
+    <select id="findAll" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from sh_order
+        <where>
+            <if test="criteria.orderNum != null">
+                and order_num like concat('%',#{criteria.orderNum},'%')
+            </if>
+            <if test="criteria.userId != null">
+                and user_id = #{criteria.userId}
+            </if>
+            <if test="criteria.storeId != null">
+                and store_id = #{criteria.storeId}
+            </if>
+            <if test="criteria.orderDescribe != null">
+                and order_describe like concat('%',#{criteria.orderDescribe},'%')
+            </if>
+            <if test="criteria.payState != null">
+                and pay_state = #{criteria.payState}
+            </if>
+            <if test="criteria.payType != null">
+                and pay_type = #{criteria.payType}
+            </if>
+            <if test="criteria.payTime != null and criteria.payTime.size() > 0">
+                AND pay_time BETWEEN #{criteria.payTime[0]} AND #{criteria.payTime[1]}
+            </if>
+            <if test="criteria.createTime != null and criteria.createTime.size() > 0">
+                AND create_time BETWEEN #{criteria.createTime[0]} AND #{criteria.createTime[1]}
+            </if>
+        </where>
+        order by order_id desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/oying-system/src/main/resources/mapper/sh/OrderOperationLogMapper.xml b/oying-system/src/main/resources/mapper/sh/OrderOperationLogMapper.xml
new file mode 100644
index 0000000..1611552
--- /dev/null
+++ b/oying-system/src/main/resources/mapper/sh/OrderOperationLogMapper.xml
@@ -0,0 +1,39 @@
+<?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.oying.modules.sh.mapper.OrderOperationLogMapper">
+    <resultMap id="BaseResultMap" type="com.oying.modules.sh.domain.OrderOperationLog">
+        <id column="log_id" property="logId"/>
+        <result column="user_id" property="userId"/>
+        <result column="user_type" property="userType"/>
+        <result column="operation" property="operation"/>
+        <result column="remark" property="remark"/>
+        <result column="snapshot_data" property="snapshotData"/>
+        <result column="operation_time" property="operationTime"/>
+        <result column="order_num" property="orderNum"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        log_id, user_id, user_type, operation, remark, snapshot_data, operation_time, order_num
+    </sql>
+
+    <select id="findAll" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from sh_order_operation_log
+        <where>
+            <if test="criteria.userId != null">
+                and user_id = #{criteria.userId}
+            </if>
+            <if test="criteria.userType != null">
+                and user_type = #{criteria.userType}
+            </if>
+            <if test="criteria.orderNum != null">
+                and order_num = #{criteria.orderNum}
+            </if>
+            <if test="criteria.operationTime != null and criteria.operationTime.size() > 0">
+                AND operation_time BETWEEN #{criteria.operationTime[0]} AND #{criteria.operationTime[1]}
+            </if>
+        </where>
+        order by log_id desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/oying-system/src/main/resources/mapper/sh/OrderProductSnapshotMapper.xml b/oying-system/src/main/resources/mapper/sh/OrderProductSnapshotMapper.xml
new file mode 100644
index 0000000..12840c1
--- /dev/null
+++ b/oying-system/src/main/resources/mapper/sh/OrderProductSnapshotMapper.xml
@@ -0,0 +1,60 @@
+<?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.oying.modules.sh.mapper.OrderProductSnapshotMapper">
+    <resultMap id="BaseResultMap" type="com.oying.modules.sh.domain.OrderProductSnapshot">
+        <id column="snapshot_id" property="snapshotId"/>
+        <result column="order_num" property="orderNum"/>
+        <result column="store_id" property="storeId"/>
+        <result column="product_id" property="productId"/>
+        <result column="product_code" property="productCode"/>
+        <result column="product_barcode" property="productBarcode"/>
+        <result column="product_name" property="productName"/>
+        <result column="product_title" property="productTitle"/>
+        <result column="product_main_image" property="productMainImage"/>
+        <result column="product_description" property="productDescription"/>
+        <result column="param_data" property="paramData"/>
+        <result column="unit_price" property="unitPrice"/>
+        <result column="detail_count" property="detailCount"/>
+        <result column="original_price" property="originalPrice"/>
+        <result column="paid_price" property="paidPrice"/>
+        <result column="actually_pay_price" property="actuallyPayPrice"/>
+        <result column="pay_state" property="payState"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        snapshot_id, order_num, store_id, product_id, product_code, product_barcode, product_name, product_title, product_main_image, product_description, param_data, unit_price, detail_count, original_price, paid_price, actually_pay_price, pay_state
+    </sql>
+
+    <select id="findAll" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from sh_order_product_snapshot
+        <where>
+            <if test="criteria.orderNum != null">
+                and order_num = #{criteria.orderNum}
+            </if>
+            <if test="criteria.storeId != null">
+                and store_id = #{criteria.storeId}
+            </if>
+            <if test="criteria.productId != null">
+                and product_id = #{criteria.productId}
+            </if>
+            <if test="criteria.productCode != null">
+                and product_code like concat('%',#{criteria.productCode},'%')
+            </if>
+            <if test="criteria.productBarcode != null">
+                and product_barcode like concat('%',#{criteria.productBarcode},'%')
+            </if>
+            <if test="criteria.productName != null">
+                and product_name like concat('%',#{criteria.productName},'%')
+            </if>
+            <if test="criteria.productTitle != null">
+                and product_title like concat('%',#{criteria.productTitle},'%')
+            </if>
+            <if test="criteria.payState != null">
+                and pay_state = #{criteria.payState}
+            </if>
+        </where>
+        order by snapshot_id desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/oying-system/src/main/resources/mapper/sh/OrderReturnMapper.xml b/oying-system/src/main/resources/mapper/sh/OrderReturnMapper.xml
new file mode 100644
index 0000000..9ba307f
--- /dev/null
+++ b/oying-system/src/main/resources/mapper/sh/OrderReturnMapper.xml
@@ -0,0 +1,66 @@
+<?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.oying.modules.sh.mapper.OrderReturnMapper">
+    <resultMap id="BaseResultMap" type="com.oying.modules.sh.domain.OrderReturn">
+        <id column="return_id" property="returnId"/>
+        <result column="return_num" property="returnNum"/>
+        <result column="order_num" property="orderNum"/>
+        <result column="user_id" property="userId"/>
+        <result column="store_id" property="storeId"/>
+        <result column="original_price" property="originalPrice"/>
+        <result column="paid_price" property="paidPrice"/>
+        <result column="actually_pay_price" property="actuallyPayPrice"/>
+        <result column="refund_price" property="refundPrice"/>
+        <result column="refund_status" property="refundStatus"/>
+        <result column="success_time" property="successTime"/>
+        <result column="channel" property="channel"/>
+        <result column="reason" property="reason"/>
+        <result column="audit_user" property="auditUser"/>
+        <result column="audit_time" property="auditTime"/>
+        <result column="audit_message" property="auditMessage"/>
+        <result column="create_by" property="createBy"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_by" property="updateBy"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        return_id, return_num, order_num, user_id, store_id, original_price, paid_price, actually_pay_price, refund_price, refund_status, success_time, channel, reason, audit_user, audit_time, audit_message, create_by, create_time, update_by, update_time
+    </sql>
+
+    <select id="findAll" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from sh_order_return
+        <where>
+            <if test="criteria.returnNum != null">
+                and return_num like concat('%',#{criteria.returnNum},'%')
+            </if>
+            <if test="criteria.orderNum != null">
+                and order_num like concat('%',#{criteria.orderNum},'%')
+            </if>
+            <if test="criteria.userId != null">
+                and user_id = #{criteria.userId}
+            </if>
+            <if test="criteria.storeId != null">
+                and store_id = #{criteria.storeId}
+            </if>
+            <if test="criteria.refundStatus != null">
+                and refund_status = #{criteria.refundStatus}
+            </if>
+            <if test="criteria.auditUser != null">
+                and audit_user like concat('%',#{criteria.auditUser},'%')
+            </if>
+            <if test="criteria.successTime != null and criteria.successTime.size() > 0">
+                AND success_time BETWEEN #{criteria.successTime[0]} AND #{criteria.successTime[1]}
+            </if>
+            <if test="criteria.auditTime != null and criteria.auditTime.size() > 0">
+                AND audit_time BETWEEN #{criteria.auditTime[0]} AND #{criteria.auditTime[1]}
+            </if>
+            <if test="criteria.createTime != null and criteria.createTime.size() > 0">
+                AND create_time BETWEEN #{criteria.createTime[0]} AND #{criteria.createTime[1]}
+            </if>
+        </where>
+        order by return_id desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/oying-system/src/main/resources/mapper/sh/OrderReturnProductSnapshotMapper.xml b/oying-system/src/main/resources/mapper/sh/OrderReturnProductSnapshotMapper.xml
new file mode 100644
index 0000000..affc62c
--- /dev/null
+++ b/oying-system/src/main/resources/mapper/sh/OrderReturnProductSnapshotMapper.xml
@@ -0,0 +1,56 @@
+<?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.oying.modules.sh.mapper.OrderReturnProductSnapshotMapper">
+    <resultMap id="BaseResultMap" type="com.oying.modules.sh.domain.OrderReturnProductSnapshot">
+        <id column="snapshot_id" property="snapshotId"/>
+        <result column="return_num" property="returnNum"/>
+        <result column="store_id" property="storeId"/>
+        <result column="product_id" property="productId"/>
+        <result column="product_code" property="productCode"/>
+        <result column="product_barcode" property="productBarcode"/>
+        <result column="product_name" property="productName"/>
+        <result column="product_title" property="productTitle"/>
+        <result column="product_main_image" property="productMainImage"/>
+        <result column="product_description" property="productDescription"/>
+        <result column="param_data" property="paramData"/>
+        <result column="unit_price" property="unitPrice"/>
+        <result column="detail_count" property="detailCount"/>
+        <result column="original_price" property="originalPrice"/>
+        <result column="paid_price" property="paidPrice"/>
+        <result column="actually_pay_price" property="actuallyPayPrice"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        snapshot_id, return_num, store_id, product_id, product_code, product_barcode, product_name, product_title, product_main_image, product_description, param_data, unit_price, detail_count, original_price, paid_price, actually_pay_price
+    </sql>
+
+    <select id="findAll" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from sh_order_return_product_snapshot
+        <where>
+            <if test="criteria.returnNum != null">
+                and return_num = #{criteria.returnNum}
+            </if>
+            <if test="criteria.storeId != null">
+                and store_id = #{criteria.storeId}
+            </if>
+            <if test="criteria.productId != null">
+                and product_id = #{criteria.productId}
+            </if>
+            <if test="criteria.productCode != null">
+                and product_code like concat('%',#{criteria.productCode},'%')
+            </if>
+            <if test="criteria.productBarcode != null">
+                and product_barcode like concat('%',#{criteria.productBarcode},'%')
+            </if>
+            <if test="criteria.productName != null">
+                and product_name like concat('%',#{criteria.productName},'%')
+            </if>
+            <if test="criteria.productTitle != null">
+                and product_title like concat('%',#{criteria.productTitle},'%')
+            </if>
+        </where>
+        order by snapshot_id desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/oying-system/src/main/resources/mapper/sh/OrderReturnReasonMapper.xml b/oying-system/src/main/resources/mapper/sh/OrderReturnReasonMapper.xml
new file mode 100644
index 0000000..8103bd8
--- /dev/null
+++ b/oying-system/src/main/resources/mapper/sh/OrderReturnReasonMapper.xml
@@ -0,0 +1,33 @@
+<?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.oying.modules.sh.mapper.OrderReturnReasonMapper">
+    <resultMap id="BaseResultMap" type="com.oying.modules.sh.domain.OrderReturnReason">
+        <id column="reason_id" property="reasonId"/>
+        <result column="reason_name" property="reasonName"/>
+        <result column="sort" property="sort"/>
+        <result column="reason_status" property="reasonStatus"/>
+        <result column="create_by" property="createBy"/>
+        <result column="update_by" property="updateBy"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        reason_id, reason_name, sort, reason_status, create_by, update_by, create_time, update_time
+    </sql>
+
+    <select id="findAll" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from sh_order_return_reason
+        <where>
+            <if test="criteria.reasonStatus != null">
+                and reason_status = #{criteria.reasonStatus}
+            </if>
+            <if test="criteria.createTime != null and criteria.createTime.size() > 0">
+                AND create_time BETWEEN #{criteria.createTime[0]} AND #{criteria.createTime[1]}
+            </if>
+        </where>
+        order by reason_id desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/oying-system/src/main/resources/mapper/sh/UserAddressMapper.xml b/oying-system/src/main/resources/mapper/sh/UserAddressMapper.xml
new file mode 100644
index 0000000..52be65d
--- /dev/null
+++ b/oying-system/src/main/resources/mapper/sh/UserAddressMapper.xml
@@ -0,0 +1,45 @@
+<?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.oying.modules.sh.mapper.UserAddressMapper">
+    <resultMap id="BaseResultMap" type="com.oying.modules.sh.domain.UserAddress">
+        <id column="address_id" property="addressId"/>
+        <result column="user_id" property="userId"/>
+        <result column="receiver_name" property="receiverName"/>
+        <result column="receiver_phone" property="receiverPhone"/>
+        <result column="province" property="province"/>
+        <result column="city" property="city"/>
+        <result column="district" property="district"/>
+        <result column="street" property="street"/>
+        <result column="detail" property="detail"/>
+        <result column="longitude" property="longitude"/>
+        <result column="latitude" property="latitude"/>
+        <result column="is_default" property="isDefault"/>
+        <result column="tag" property="tag"/>
+        <result column="create_by" property="createBy"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_by" property="updateBy"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        address_id, user_id, receiver_name, receiver_phone, province, city, district, street, detail, longitude, latitude, is_default, tag, create_by, create_time, update_by, update_time
+    </sql>
+
+    <select id="findAll" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from sh_user_address
+        <where>
+            <if test="criteria.userId != null">
+                and user_id = #{criteria.userId}
+            </if>
+            <if test="criteria.tag != null">
+                and tag = #{criteria.tag}
+            </if>
+            <if test="criteria.createTime != null and criteria.createTime.size() > 0">
+                AND create_time BETWEEN #{criteria.createTime[0]} AND #{criteria.createTime[1]}
+            </if>
+        </where>
+        order by address_id desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/oying-system/src/main/resources/mapper/system/UserMapper.xml b/oying-system/src/main/resources/mapper/system/UserMapper.xml
index a71ec72..feb484b 100644
--- a/oying-system/src/main/resources/mapper/system/UserMapper.xml
+++ b/oying-system/src/main/resources/mapper/system/UserMapper.xml
@@ -49,13 +49,19 @@
         r.role_id as role_id, r.name as role_name, r.level as role_level, r.data_scope as role_data_scope
     </sql>
 
-    <sql id="Whrer_Sql">
+    <sql id="Where_Sql">
         <where>
             <if test="criteria.id != null">
                 and u.user_id = #{criteria.id}
             </if>
             <if test="criteria.enabled != null">
                 and u.enabled = #{criteria.enabled}
+            </if>
+            <if test="criteria.userTypes != null and criteria.userTypes.size() != 0">
+                and u.user_type in
+                <foreach collection="criteria.userTypes" item="userType" open="(" separator="," close=")">
+                    #{userType}
+                </foreach>
             </if>
             <if test="criteria.blurry != null and criteria.blurry != ''">
                 and (
@@ -78,7 +84,7 @@
         select
         <include refid="Base_Column_List"/>
         from sys_user u
-        <include refid="Whrer_Sql"/>
+        <include refid="Where_Sql"/>
         order by u.user_id desc
         <if test="criteria.offset != null">
             limit #{criteria.offset}, #{criteria.size}
@@ -94,7 +100,7 @@
     <select id="countAll" resultType="java.lang.Long">
         select count(*)
         from sys_user u
-        <include refid="Whrer_Sql"/>
+        <include refid="Where_Sql"/>
     </select>
 
     <select id="findByUsername" resultMap="BaseResultMap">

--
Gitblit v1.9.3