From 7d08f6592a1df919198385c6eb10106e6a023783 Mon Sep 17 00:00:00 2001
From: hurui <177768073@qq.com>
Date: Tue, 11 Apr 2023 14:48:40 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../java/com/hai/dao/GoodsDetailMapper.java   |  142 ++
 .../com/hai/dao/GoodsDetailMapperExt.java     |    7 +
 .../com/hai/dao/GoodsDetailSqlProvider.java   |  388 ++++
 .../com/hai/dao/GoodsLogisticsMapper.java     |   92 +
 .../com/hai/dao/GoodsLogisticsMapperExt.java  |    7 +
 .../hai/dao/GoodsLogisticsSqlProvider.java    |  369 ++++
 .../java/com/hai/dao/GoodsReviewMapper.java   |   76 +
 .../com/hai/dao/GoodsReviewMapperExt.java     |    7 +
 .../com/hai/dao/GoodsReviewSqlProvider.java   |  289 +++
 .../main/java/com/hai/dao/GoodsSkuMapper.java |  141 ++
 .../java/com/hai/dao/GoodsSkuMapperExt.java   |    7 +
 .../java/com/hai/dao/GoodsSkuSqlProvider.java |  388 ++++
 .../main/java/com/hai/entity/GoodsDetail.java |  305 ++++
 .../com/hai/entity/GoodsDetailExample.java    | 1283 +++++++++++++
 .../java/com/hai/entity/GoodsLogistics.java   |  385 ++++
 .../com/hai/entity/GoodsLogisticsExample.java | 1623 +++++++++++++++++
 .../main/java/com/hai/entity/GoodsReview.java |  257 +++
 .../com/hai/entity/GoodsReviewExample.java    | 1063 +++++++++++
 .../main/java/com/hai/entity/GoodsSku.java    |  306 ++++
 .../java/com/hai/entity/GoodsSkuExample.java  | 1254 +++++++++++++
 20 files changed, 8389 insertions(+)
 create mode 100644 hai-service/src/main/java/com/hai/dao/GoodsDetailMapper.java
 create mode 100644 hai-service/src/main/java/com/hai/dao/GoodsDetailMapperExt.java
 create mode 100644 hai-service/src/main/java/com/hai/dao/GoodsDetailSqlProvider.java
 create mode 100644 hai-service/src/main/java/com/hai/dao/GoodsLogisticsMapper.java
 create mode 100644 hai-service/src/main/java/com/hai/dao/GoodsLogisticsMapperExt.java
 create mode 100644 hai-service/src/main/java/com/hai/dao/GoodsLogisticsSqlProvider.java
 create mode 100644 hai-service/src/main/java/com/hai/dao/GoodsReviewMapper.java
 create mode 100644 hai-service/src/main/java/com/hai/dao/GoodsReviewMapperExt.java
 create mode 100644 hai-service/src/main/java/com/hai/dao/GoodsReviewSqlProvider.java
 create mode 100644 hai-service/src/main/java/com/hai/dao/GoodsSkuMapper.java
 create mode 100644 hai-service/src/main/java/com/hai/dao/GoodsSkuMapperExt.java
 create mode 100644 hai-service/src/main/java/com/hai/dao/GoodsSkuSqlProvider.java
 create mode 100644 hai-service/src/main/java/com/hai/entity/GoodsDetail.java
 create mode 100644 hai-service/src/main/java/com/hai/entity/GoodsDetailExample.java
 create mode 100644 hai-service/src/main/java/com/hai/entity/GoodsLogistics.java
 create mode 100644 hai-service/src/main/java/com/hai/entity/GoodsLogisticsExample.java
 create mode 100644 hai-service/src/main/java/com/hai/entity/GoodsReview.java
 create mode 100644 hai-service/src/main/java/com/hai/entity/GoodsReviewExample.java
 create mode 100644 hai-service/src/main/java/com/hai/entity/GoodsSku.java
 create mode 100644 hai-service/src/main/java/com/hai/entity/GoodsSkuExample.java

diff --git a/hai-service/src/main/java/com/hai/dao/GoodsDetailMapper.java b/hai-service/src/main/java/com/hai/dao/GoodsDetailMapper.java
new file mode 100644
index 00000000..412a0fb9
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/dao/GoodsDetailMapper.java
@@ -0,0 +1,142 @@
+package com.hai.dao;
+
+import com.hai.entity.GoodsDetail;
+import com.hai.entity.GoodsDetailExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.DeleteProvider;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.InsertProvider;
+import org.apache.ibatis.annotations.Options;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Result;
+import org.apache.ibatis.annotations.Results;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.SelectProvider;
+import org.apache.ibatis.annotations.Update;
+import org.apache.ibatis.annotations.UpdateProvider;
+import org.apache.ibatis.type.JdbcType;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 
+ * 代码由工具生成,请勿修改!!!
+ * 如果需要扩展请在其父类进行扩展
+ * 
+ **/
+@Repository
+public interface GoodsDetailMapper extends GoodsDetailMapperExt {
+    @SelectProvider(type=GoodsDetailSqlProvider.class, method="countByExample")
+    long countByExample(GoodsDetailExample example);
+
+    @DeleteProvider(type=GoodsDetailSqlProvider.class, method="deleteByExample")
+    int deleteByExample(GoodsDetailExample example);
+
+    @Delete({
+        "delete from goods_detail",
+        "where id = #{id,jdbcType=BIGINT}"
+    })
+    int deleteByPrimaryKey(Long id);
+
+    @Insert({
+        "insert into goods_detail (goods_type, `name`, ",
+        "list_describe, goods_describe, ",
+        "list_img, banner_img, ",
+        "detail_img, `status`, ",
+        "create_time, update_time, ",
+        "op_id, op_name, ext_1, ",
+        "ext_2, ext_3)",
+        "values (#{goodsType,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, ",
+        "#{listDescribe,jdbcType=VARCHAR}, #{goodsDescribe,jdbcType=VARCHAR}, ",
+        "#{listImg,jdbcType=VARCHAR}, #{bannerImg,jdbcType=VARCHAR}, ",
+        "#{detailImg,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER}, ",
+        "#{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}, ",
+        "#{opId,jdbcType=BIGINT}, #{opName,jdbcType=VARCHAR}, #{ext1,jdbcType=VARCHAR}, ",
+        "#{ext2,jdbcType=VARCHAR}, #{ext3,jdbcType=VARCHAR})"
+    })
+    @Options(useGeneratedKeys=true,keyProperty="id")
+    int insert(GoodsDetail record);
+
+    @InsertProvider(type=GoodsDetailSqlProvider.class, method="insertSelective")
+    @Options(useGeneratedKeys=true,keyProperty="id")
+    int insertSelective(GoodsDetail record);
+
+    @SelectProvider(type=GoodsDetailSqlProvider.class, method="selectByExample")
+    @Results({
+        @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true),
+        @Result(column="goods_type", property="goodsType", jdbcType=JdbcType.BIGINT),
+        @Result(column="name", property="name", jdbcType=JdbcType.VARCHAR),
+        @Result(column="list_describe", property="listDescribe", jdbcType=JdbcType.VARCHAR),
+        @Result(column="goods_describe", property="goodsDescribe", jdbcType=JdbcType.VARCHAR),
+        @Result(column="list_img", property="listImg", jdbcType=JdbcType.VARCHAR),
+        @Result(column="banner_img", property="bannerImg", jdbcType=JdbcType.VARCHAR),
+        @Result(column="detail_img", property="detailImg", jdbcType=JdbcType.VARCHAR),
+        @Result(column="status", property="status", jdbcType=JdbcType.INTEGER),
+        @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP),
+        @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP),
+        @Result(column="op_id", property="opId", jdbcType=JdbcType.BIGINT),
+        @Result(column="op_name", property="opName", jdbcType=JdbcType.VARCHAR),
+        @Result(column="ext_1", property="ext1", jdbcType=JdbcType.VARCHAR),
+        @Result(column="ext_2", property="ext2", jdbcType=JdbcType.VARCHAR),
+        @Result(column="ext_3", property="ext3", jdbcType=JdbcType.VARCHAR)
+    })
+    List<GoodsDetail> selectByExample(GoodsDetailExample example);
+
+    @Select({
+        "select",
+        "id, goods_type, `name`, list_describe, goods_describe, list_img, banner_img, ",
+        "detail_img, `status`, create_time, update_time, op_id, op_name, ext_1, ext_2, ",
+        "ext_3",
+        "from goods_detail",
+        "where id = #{id,jdbcType=BIGINT}"
+    })
+    @Results({
+        @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true),
+        @Result(column="goods_type", property="goodsType", jdbcType=JdbcType.BIGINT),
+        @Result(column="name", property="name", jdbcType=JdbcType.VARCHAR),
+        @Result(column="list_describe", property="listDescribe", jdbcType=JdbcType.VARCHAR),
+        @Result(column="goods_describe", property="goodsDescribe", jdbcType=JdbcType.VARCHAR),
+        @Result(column="list_img", property="listImg", jdbcType=JdbcType.VARCHAR),
+        @Result(column="banner_img", property="bannerImg", jdbcType=JdbcType.VARCHAR),
+        @Result(column="detail_img", property="detailImg", jdbcType=JdbcType.VARCHAR),
+        @Result(column="status", property="status", jdbcType=JdbcType.INTEGER),
+        @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP),
+        @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP),
+        @Result(column="op_id", property="opId", jdbcType=JdbcType.BIGINT),
+        @Result(column="op_name", property="opName", jdbcType=JdbcType.VARCHAR),
+        @Result(column="ext_1", property="ext1", jdbcType=JdbcType.VARCHAR),
+        @Result(column="ext_2", property="ext2", jdbcType=JdbcType.VARCHAR),
+        @Result(column="ext_3", property="ext3", jdbcType=JdbcType.VARCHAR)
+    })
+    GoodsDetail selectByPrimaryKey(Long id);
+
+    @UpdateProvider(type=GoodsDetailSqlProvider.class, method="updateByExampleSelective")
+    int updateByExampleSelective(@Param("record") GoodsDetail record, @Param("example") GoodsDetailExample example);
+
+    @UpdateProvider(type=GoodsDetailSqlProvider.class, method="updateByExample")
+    int updateByExample(@Param("record") GoodsDetail record, @Param("example") GoodsDetailExample example);
+
+    @UpdateProvider(type=GoodsDetailSqlProvider.class, method="updateByPrimaryKeySelective")
+    int updateByPrimaryKeySelective(GoodsDetail record);
+
+    @Update({
+        "update goods_detail",
+        "set goods_type = #{goodsType,jdbcType=BIGINT},",
+          "`name` = #{name,jdbcType=VARCHAR},",
+          "list_describe = #{listDescribe,jdbcType=VARCHAR},",
+          "goods_describe = #{goodsDescribe,jdbcType=VARCHAR},",
+          "list_img = #{listImg,jdbcType=VARCHAR},",
+          "banner_img = #{bannerImg,jdbcType=VARCHAR},",
+          "detail_img = #{detailImg,jdbcType=VARCHAR},",
+          "`status` = #{status,jdbcType=INTEGER},",
+          "create_time = #{createTime,jdbcType=TIMESTAMP},",
+          "update_time = #{updateTime,jdbcType=TIMESTAMP},",
+          "op_id = #{opId,jdbcType=BIGINT},",
+          "op_name = #{opName,jdbcType=VARCHAR},",
+          "ext_1 = #{ext1,jdbcType=VARCHAR},",
+          "ext_2 = #{ext2,jdbcType=VARCHAR},",
+          "ext_3 = #{ext3,jdbcType=VARCHAR}",
+        "where id = #{id,jdbcType=BIGINT}"
+    })
+    int updateByPrimaryKey(GoodsDetail record);
+}
\ No newline at end of file
diff --git a/hai-service/src/main/java/com/hai/dao/GoodsDetailMapperExt.java b/hai-service/src/main/java/com/hai/dao/GoodsDetailMapperExt.java
new file mode 100644
index 00000000..940df8a1
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/dao/GoodsDetailMapperExt.java
@@ -0,0 +1,7 @@
+package com.hai.dao;
+
+/**
+ * mapper扩展类
+ */
+public interface GoodsDetailMapperExt {
+}
\ No newline at end of file
diff --git a/hai-service/src/main/java/com/hai/dao/GoodsDetailSqlProvider.java b/hai-service/src/main/java/com/hai/dao/GoodsDetailSqlProvider.java
new file mode 100644
index 00000000..419ef2ae
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/dao/GoodsDetailSqlProvider.java
@@ -0,0 +1,388 @@
+package com.hai.dao;
+
+import com.hai.entity.GoodsDetail;
+import com.hai.entity.GoodsDetailExample.Criteria;
+import com.hai.entity.GoodsDetailExample.Criterion;
+import com.hai.entity.GoodsDetailExample;
+import java.util.List;
+import java.util.Map;
+import org.apache.ibatis.jdbc.SQL;
+
+public class GoodsDetailSqlProvider {
+
+    public String countByExample(GoodsDetailExample example) {
+        SQL sql = new SQL();
+        sql.SELECT("count(*)").FROM("goods_detail");
+        applyWhere(sql, example, false);
+        return sql.toString();
+    }
+
+    public String deleteByExample(GoodsDetailExample example) {
+        SQL sql = new SQL();
+        sql.DELETE_FROM("goods_detail");
+        applyWhere(sql, example, false);
+        return sql.toString();
+    }
+
+    public String insertSelective(GoodsDetail record) {
+        SQL sql = new SQL();
+        sql.INSERT_INTO("goods_detail");
+        
+        if (record.getGoodsType() != null) {
+            sql.VALUES("goods_type", "#{goodsType,jdbcType=BIGINT}");
+        }
+        
+        if (record.getName() != null) {
+            sql.VALUES("`name`", "#{name,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getListDescribe() != null) {
+            sql.VALUES("list_describe", "#{listDescribe,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getGoodsDescribe() != null) {
+            sql.VALUES("goods_describe", "#{goodsDescribe,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getListImg() != null) {
+            sql.VALUES("list_img", "#{listImg,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getBannerImg() != null) {
+            sql.VALUES("banner_img", "#{bannerImg,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getDetailImg() != null) {
+            sql.VALUES("detail_img", "#{detailImg,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getStatus() != null) {
+            sql.VALUES("`status`", "#{status,jdbcType=INTEGER}");
+        }
+        
+        if (record.getCreateTime() != null) {
+            sql.VALUES("create_time", "#{createTime,jdbcType=TIMESTAMP}");
+        }
+        
+        if (record.getUpdateTime() != null) {
+            sql.VALUES("update_time", "#{updateTime,jdbcType=TIMESTAMP}");
+        }
+        
+        if (record.getOpId() != null) {
+            sql.VALUES("op_id", "#{opId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getOpName() != null) {
+            sql.VALUES("op_name", "#{opName,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt1() != null) {
+            sql.VALUES("ext_1", "#{ext1,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt2() != null) {
+            sql.VALUES("ext_2", "#{ext2,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt3() != null) {
+            sql.VALUES("ext_3", "#{ext3,jdbcType=VARCHAR}");
+        }
+        
+        return sql.toString();
+    }
+
+    public String selectByExample(GoodsDetailExample example) {
+        SQL sql = new SQL();
+        if (example != null && example.isDistinct()) {
+            sql.SELECT_DISTINCT("id");
+        } else {
+            sql.SELECT("id");
+        }
+        sql.SELECT("goods_type");
+        sql.SELECT("`name`");
+        sql.SELECT("list_describe");
+        sql.SELECT("goods_describe");
+        sql.SELECT("list_img");
+        sql.SELECT("banner_img");
+        sql.SELECT("detail_img");
+        sql.SELECT("`status`");
+        sql.SELECT("create_time");
+        sql.SELECT("update_time");
+        sql.SELECT("op_id");
+        sql.SELECT("op_name");
+        sql.SELECT("ext_1");
+        sql.SELECT("ext_2");
+        sql.SELECT("ext_3");
+        sql.FROM("goods_detail");
+        applyWhere(sql, example, false);
+        
+        if (example != null && example.getOrderByClause() != null) {
+            sql.ORDER_BY(example.getOrderByClause());
+        }
+        
+        return sql.toString();
+    }
+
+    public String updateByExampleSelective(Map<String, Object> parameter) {
+        GoodsDetail record = (GoodsDetail) parameter.get("record");
+        GoodsDetailExample example = (GoodsDetailExample) parameter.get("example");
+        
+        SQL sql = new SQL();
+        sql.UPDATE("goods_detail");
+        
+        if (record.getId() != null) {
+            sql.SET("id = #{record.id,jdbcType=BIGINT}");
+        }
+        
+        if (record.getGoodsType() != null) {
+            sql.SET("goods_type = #{record.goodsType,jdbcType=BIGINT}");
+        }
+        
+        if (record.getName() != null) {
+            sql.SET("`name` = #{record.name,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getListDescribe() != null) {
+            sql.SET("list_describe = #{record.listDescribe,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getGoodsDescribe() != null) {
+            sql.SET("goods_describe = #{record.goodsDescribe,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getListImg() != null) {
+            sql.SET("list_img = #{record.listImg,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getBannerImg() != null) {
+            sql.SET("banner_img = #{record.bannerImg,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getDetailImg() != null) {
+            sql.SET("detail_img = #{record.detailImg,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getStatus() != null) {
+            sql.SET("`status` = #{record.status,jdbcType=INTEGER}");
+        }
+        
+        if (record.getCreateTime() != null) {
+            sql.SET("create_time = #{record.createTime,jdbcType=TIMESTAMP}");
+        }
+        
+        if (record.getUpdateTime() != null) {
+            sql.SET("update_time = #{record.updateTime,jdbcType=TIMESTAMP}");
+        }
+        
+        if (record.getOpId() != null) {
+            sql.SET("op_id = #{record.opId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getOpName() != null) {
+            sql.SET("op_name = #{record.opName,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt1() != null) {
+            sql.SET("ext_1 = #{record.ext1,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt2() != null) {
+            sql.SET("ext_2 = #{record.ext2,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt3() != null) {
+            sql.SET("ext_3 = #{record.ext3,jdbcType=VARCHAR}");
+        }
+        
+        applyWhere(sql, example, true);
+        return sql.toString();
+    }
+
+    public String updateByExample(Map<String, Object> parameter) {
+        SQL sql = new SQL();
+        sql.UPDATE("goods_detail");
+        
+        sql.SET("id = #{record.id,jdbcType=BIGINT}");
+        sql.SET("goods_type = #{record.goodsType,jdbcType=BIGINT}");
+        sql.SET("`name` = #{record.name,jdbcType=VARCHAR}");
+        sql.SET("list_describe = #{record.listDescribe,jdbcType=VARCHAR}");
+        sql.SET("goods_describe = #{record.goodsDescribe,jdbcType=VARCHAR}");
+        sql.SET("list_img = #{record.listImg,jdbcType=VARCHAR}");
+        sql.SET("banner_img = #{record.bannerImg,jdbcType=VARCHAR}");
+        sql.SET("detail_img = #{record.detailImg,jdbcType=VARCHAR}");
+        sql.SET("`status` = #{record.status,jdbcType=INTEGER}");
+        sql.SET("create_time = #{record.createTime,jdbcType=TIMESTAMP}");
+        sql.SET("update_time = #{record.updateTime,jdbcType=TIMESTAMP}");
+        sql.SET("op_id = #{record.opId,jdbcType=BIGINT}");
+        sql.SET("op_name = #{record.opName,jdbcType=VARCHAR}");
+        sql.SET("ext_1 = #{record.ext1,jdbcType=VARCHAR}");
+        sql.SET("ext_2 = #{record.ext2,jdbcType=VARCHAR}");
+        sql.SET("ext_3 = #{record.ext3,jdbcType=VARCHAR}");
+        
+        GoodsDetailExample example = (GoodsDetailExample) parameter.get("example");
+        applyWhere(sql, example, true);
+        return sql.toString();
+    }
+
+    public String updateByPrimaryKeySelective(GoodsDetail record) {
+        SQL sql = new SQL();
+        sql.UPDATE("goods_detail");
+        
+        if (record.getGoodsType() != null) {
+            sql.SET("goods_type = #{goodsType,jdbcType=BIGINT}");
+        }
+        
+        if (record.getName() != null) {
+            sql.SET("`name` = #{name,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getListDescribe() != null) {
+            sql.SET("list_describe = #{listDescribe,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getGoodsDescribe() != null) {
+            sql.SET("goods_describe = #{goodsDescribe,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getListImg() != null) {
+            sql.SET("list_img = #{listImg,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getBannerImg() != null) {
+            sql.SET("banner_img = #{bannerImg,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getDetailImg() != null) {
+            sql.SET("detail_img = #{detailImg,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getStatus() != null) {
+            sql.SET("`status` = #{status,jdbcType=INTEGER}");
+        }
+        
+        if (record.getCreateTime() != null) {
+            sql.SET("create_time = #{createTime,jdbcType=TIMESTAMP}");
+        }
+        
+        if (record.getUpdateTime() != null) {
+            sql.SET("update_time = #{updateTime,jdbcType=TIMESTAMP}");
+        }
+        
+        if (record.getOpId() != null) {
+            sql.SET("op_id = #{opId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getOpName() != null) {
+            sql.SET("op_name = #{opName,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt1() != null) {
+            sql.SET("ext_1 = #{ext1,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt2() != null) {
+            sql.SET("ext_2 = #{ext2,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt3() != null) {
+            sql.SET("ext_3 = #{ext3,jdbcType=VARCHAR}");
+        }
+        
+        sql.WHERE("id = #{id,jdbcType=BIGINT}");
+        
+        return sql.toString();
+    }
+
+    protected void applyWhere(SQL sql, GoodsDetailExample example, boolean includeExamplePhrase) {
+        if (example == null) {
+            return;
+        }
+        
+        String parmPhrase1;
+        String parmPhrase1_th;
+        String parmPhrase2;
+        String parmPhrase2_th;
+        String parmPhrase3;
+        String parmPhrase3_th;
+        if (includeExamplePhrase) {
+            parmPhrase1 = "%s #{example.oredCriteria[%d].allCriteria[%d].value}";
+            parmPhrase1_th = "%s #{example.oredCriteria[%d].allCriteria[%d].value,typeHandler=%s}";
+            parmPhrase2 = "%s #{example.oredCriteria[%d].allCriteria[%d].value} and #{example.oredCriteria[%d].criteria[%d].secondValue}";
+            parmPhrase2_th = "%s #{example.oredCriteria[%d].allCriteria[%d].value,typeHandler=%s} and #{example.oredCriteria[%d].criteria[%d].secondValue,typeHandler=%s}";
+            parmPhrase3 = "#{example.oredCriteria[%d].allCriteria[%d].value[%d]}";
+            parmPhrase3_th = "#{example.oredCriteria[%d].allCriteria[%d].value[%d],typeHandler=%s}";
+        } else {
+            parmPhrase1 = "%s #{oredCriteria[%d].allCriteria[%d].value}";
+            parmPhrase1_th = "%s #{oredCriteria[%d].allCriteria[%d].value,typeHandler=%s}";
+            parmPhrase2 = "%s #{oredCriteria[%d].allCriteria[%d].value} and #{oredCriteria[%d].criteria[%d].secondValue}";
+            parmPhrase2_th = "%s #{oredCriteria[%d].allCriteria[%d].value,typeHandler=%s} and #{oredCriteria[%d].criteria[%d].secondValue,typeHandler=%s}";
+            parmPhrase3 = "#{oredCriteria[%d].allCriteria[%d].value[%d]}";
+            parmPhrase3_th = "#{oredCriteria[%d].allCriteria[%d].value[%d],typeHandler=%s}";
+        }
+        
+        StringBuilder sb = new StringBuilder();
+        List<Criteria> oredCriteria = example.getOredCriteria();
+        boolean firstCriteria = true;
+        for (int i = 0; i < oredCriteria.size(); i++) {
+            Criteria criteria = oredCriteria.get(i);
+            if (criteria.isValid()) {
+                if (firstCriteria) {
+                    firstCriteria = false;
+                } else {
+                    sb.append(" or ");
+                }
+                
+                sb.append('(');
+                List<Criterion> criterions = criteria.getAllCriteria();
+                boolean firstCriterion = true;
+                for (int j = 0; j < criterions.size(); j++) {
+                    Criterion criterion = criterions.get(j);
+                    if (firstCriterion) {
+                        firstCriterion = false;
+                    } else {
+                        sb.append(" and ");
+                    }
+                    
+                    if (criterion.isNoValue()) {
+                        sb.append(criterion.getCondition());
+                    } else if (criterion.isSingleValue()) {
+                        if (criterion.getTypeHandler() == null) {
+                            sb.append(String.format(parmPhrase1, criterion.getCondition(), i, j));
+                        } else {
+                            sb.append(String.format(parmPhrase1_th, criterion.getCondition(), i, j,criterion.getTypeHandler()));
+                        }
+                    } else if (criterion.isBetweenValue()) {
+                        if (criterion.getTypeHandler() == null) {
+                            sb.append(String.format(parmPhrase2, criterion.getCondition(), i, j, i, j));
+                        } else {
+                            sb.append(String.format(parmPhrase2_th, criterion.getCondition(), i, j, criterion.getTypeHandler(), i, j, criterion.getTypeHandler()));
+                        }
+                    } else if (criterion.isListValue()) {
+                        sb.append(criterion.getCondition());
+                        sb.append(" (");
+                        List<?> listItems = (List<?>) criterion.getValue();
+                        boolean comma = false;
+                        for (int k = 0; k < listItems.size(); k++) {
+                            if (comma) {
+                                sb.append(", ");
+                            } else {
+                                comma = true;
+                            }
+                            if (criterion.getTypeHandler() == null) {
+                                sb.append(String.format(parmPhrase3, i, j, k));
+                            } else {
+                                sb.append(String.format(parmPhrase3_th, i, j, k, criterion.getTypeHandler()));
+                            }
+                        }
+                        sb.append(')');
+                    }
+                }
+                sb.append(')');
+            }
+        }
+        
+        if (sb.length() > 0) {
+            sql.WHERE(sb.toString());
+        }
+    }
+}
\ No newline at end of file
diff --git a/hai-service/src/main/java/com/hai/dao/GoodsLogisticsMapper.java b/hai-service/src/main/java/com/hai/dao/GoodsLogisticsMapper.java
new file mode 100644
index 00000000..9f6bb4ab
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/dao/GoodsLogisticsMapper.java
@@ -0,0 +1,92 @@
+package com.hai.dao;
+
+import com.hai.entity.GoodsLogistics;
+import com.hai.entity.GoodsLogisticsExample;
+import java.util.List;
+import org.apache.ibatis.annotations.DeleteProvider;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.InsertProvider;
+import org.apache.ibatis.annotations.Options;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Result;
+import org.apache.ibatis.annotations.Results;
+import org.apache.ibatis.annotations.SelectProvider;
+import org.apache.ibatis.annotations.UpdateProvider;
+import org.apache.ibatis.type.JdbcType;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 
+ * 代码由工具生成,请勿修改!!!
+ * 如果需要扩展请在其父类进行扩展
+ * 
+ **/
+@Repository
+public interface GoodsLogisticsMapper extends GoodsLogisticsMapperExt {
+    @SelectProvider(type=GoodsLogisticsSqlProvider.class, method="countByExample")
+    long countByExample(GoodsLogisticsExample example);
+
+    @DeleteProvider(type=GoodsLogisticsSqlProvider.class, method="deleteByExample")
+    int deleteByExample(GoodsLogisticsExample example);
+
+    @Insert({
+        "insert into goods_logistics (user_id, order_id, ",
+        "task_no, `number`, ",
+        "logistics_status, logistics_status_desc, ",
+        "the_last_message, the_last_time, ",
+        "take_time, courier, ",
+        "courier_phone, logistics_trace_details, ",
+        "express_company_name, `status`, ",
+        "create_time, op_id, ",
+        "op_name, ext_1, ext_2, ",
+        "ext_3)",
+        "values (#{userId,jdbcType=BIGINT}, #{orderId,jdbcType=BIGINT}, ",
+        "#{taskNo,jdbcType=VARCHAR}, #{number,jdbcType=VARCHAR}, ",
+        "#{logisticsStatus,jdbcType=VARCHAR}, #{logisticsStatusDesc,jdbcType=VARCHAR}, ",
+        "#{theLastMessage,jdbcType=VARCHAR}, #{theLastTime,jdbcType=TIMESTAMP}, ",
+        "#{takeTime,jdbcType=VARCHAR}, #{courier,jdbcType=VARCHAR}, ",
+        "#{courierPhone,jdbcType=VARCHAR}, #{logisticsTraceDetails,jdbcType=VARCHAR}, ",
+        "#{expressCompanyName,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER}, ",
+        "#{createTime,jdbcType=TIMESTAMP}, #{opId,jdbcType=BIGINT}, ",
+        "#{opName,jdbcType=VARCHAR}, #{ext1,jdbcType=VARCHAR}, #{ext2,jdbcType=VARCHAR}, ",
+        "#{ext3,jdbcType=VARCHAR})"
+    })
+    @Options(useGeneratedKeys=true,keyProperty="id")
+    int insert(GoodsLogistics record);
+
+    @InsertProvider(type=GoodsLogisticsSqlProvider.class, method="insertSelective")
+    @Options(useGeneratedKeys=true,keyProperty="id")
+    int insertSelective(GoodsLogistics record);
+
+    @SelectProvider(type=GoodsLogisticsSqlProvider.class, method="selectByExample")
+    @Results({
+        @Result(column="id", property="id", jdbcType=JdbcType.BIGINT),
+        @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT),
+        @Result(column="order_id", property="orderId", jdbcType=JdbcType.BIGINT),
+        @Result(column="task_no", property="taskNo", jdbcType=JdbcType.VARCHAR),
+        @Result(column="number", property="number", jdbcType=JdbcType.VARCHAR),
+        @Result(column="logistics_status", property="logisticsStatus", jdbcType=JdbcType.VARCHAR),
+        @Result(column="logistics_status_desc", property="logisticsStatusDesc", jdbcType=JdbcType.VARCHAR),
+        @Result(column="the_last_message", property="theLastMessage", jdbcType=JdbcType.VARCHAR),
+        @Result(column="the_last_time", property="theLastTime", jdbcType=JdbcType.TIMESTAMP),
+        @Result(column="take_time", property="takeTime", jdbcType=JdbcType.VARCHAR),
+        @Result(column="courier", property="courier", jdbcType=JdbcType.VARCHAR),
+        @Result(column="courier_phone", property="courierPhone", jdbcType=JdbcType.VARCHAR),
+        @Result(column="logistics_trace_details", property="logisticsTraceDetails", jdbcType=JdbcType.VARCHAR),
+        @Result(column="express_company_name", property="expressCompanyName", jdbcType=JdbcType.VARCHAR),
+        @Result(column="status", property="status", jdbcType=JdbcType.INTEGER),
+        @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP),
+        @Result(column="op_id", property="opId", jdbcType=JdbcType.BIGINT),
+        @Result(column="op_name", property="opName", jdbcType=JdbcType.VARCHAR),
+        @Result(column="ext_1", property="ext1", jdbcType=JdbcType.VARCHAR),
+        @Result(column="ext_2", property="ext2", jdbcType=JdbcType.VARCHAR),
+        @Result(column="ext_3", property="ext3", jdbcType=JdbcType.VARCHAR)
+    })
+    List<GoodsLogistics> selectByExample(GoodsLogisticsExample example);
+
+    @UpdateProvider(type=GoodsLogisticsSqlProvider.class, method="updateByExampleSelective")
+    int updateByExampleSelective(@Param("record") GoodsLogistics record, @Param("example") GoodsLogisticsExample example);
+
+    @UpdateProvider(type=GoodsLogisticsSqlProvider.class, method="updateByExample")
+    int updateByExample(@Param("record") GoodsLogistics record, @Param("example") GoodsLogisticsExample example);
+}
\ No newline at end of file
diff --git a/hai-service/src/main/java/com/hai/dao/GoodsLogisticsMapperExt.java b/hai-service/src/main/java/com/hai/dao/GoodsLogisticsMapperExt.java
new file mode 100644
index 00000000..c53b3570
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/dao/GoodsLogisticsMapperExt.java
@@ -0,0 +1,7 @@
+package com.hai.dao;
+
+/**
+ * mapper扩展类
+ */
+public interface GoodsLogisticsMapperExt {
+}
\ No newline at end of file
diff --git a/hai-service/src/main/java/com/hai/dao/GoodsLogisticsSqlProvider.java b/hai-service/src/main/java/com/hai/dao/GoodsLogisticsSqlProvider.java
new file mode 100644
index 00000000..abaef269
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/dao/GoodsLogisticsSqlProvider.java
@@ -0,0 +1,369 @@
+package com.hai.dao;
+
+import com.hai.entity.GoodsLogistics;
+import com.hai.entity.GoodsLogisticsExample.Criteria;
+import com.hai.entity.GoodsLogisticsExample.Criterion;
+import com.hai.entity.GoodsLogisticsExample;
+import java.util.List;
+import java.util.Map;
+import org.apache.ibatis.jdbc.SQL;
+
+public class GoodsLogisticsSqlProvider {
+
+    public String countByExample(GoodsLogisticsExample example) {
+        SQL sql = new SQL();
+        sql.SELECT("count(*)").FROM("goods_logistics");
+        applyWhere(sql, example, false);
+        return sql.toString();
+    }
+
+    public String deleteByExample(GoodsLogisticsExample example) {
+        SQL sql = new SQL();
+        sql.DELETE_FROM("goods_logistics");
+        applyWhere(sql, example, false);
+        return sql.toString();
+    }
+
+    public String insertSelective(GoodsLogistics record) {
+        SQL sql = new SQL();
+        sql.INSERT_INTO("goods_logistics");
+        
+        if (record.getUserId() != null) {
+            sql.VALUES("user_id", "#{userId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getOrderId() != null) {
+            sql.VALUES("order_id", "#{orderId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getTaskNo() != null) {
+            sql.VALUES("task_no", "#{taskNo,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getNumber() != null) {
+            sql.VALUES("`number`", "#{number,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getLogisticsStatus() != null) {
+            sql.VALUES("logistics_status", "#{logisticsStatus,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getLogisticsStatusDesc() != null) {
+            sql.VALUES("logistics_status_desc", "#{logisticsStatusDesc,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getTheLastMessage() != null) {
+            sql.VALUES("the_last_message", "#{theLastMessage,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getTheLastTime() != null) {
+            sql.VALUES("the_last_time", "#{theLastTime,jdbcType=TIMESTAMP}");
+        }
+        
+        if (record.getTakeTime() != null) {
+            sql.VALUES("take_time", "#{takeTime,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getCourier() != null) {
+            sql.VALUES("courier", "#{courier,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getCourierPhone() != null) {
+            sql.VALUES("courier_phone", "#{courierPhone,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getLogisticsTraceDetails() != null) {
+            sql.VALUES("logistics_trace_details", "#{logisticsTraceDetails,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExpressCompanyName() != null) {
+            sql.VALUES("express_company_name", "#{expressCompanyName,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getStatus() != null) {
+            sql.VALUES("`status`", "#{status,jdbcType=INTEGER}");
+        }
+        
+        if (record.getCreateTime() != null) {
+            sql.VALUES("create_time", "#{createTime,jdbcType=TIMESTAMP}");
+        }
+        
+        if (record.getOpId() != null) {
+            sql.VALUES("op_id", "#{opId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getOpName() != null) {
+            sql.VALUES("op_name", "#{opName,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt1() != null) {
+            sql.VALUES("ext_1", "#{ext1,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt2() != null) {
+            sql.VALUES("ext_2", "#{ext2,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt3() != null) {
+            sql.VALUES("ext_3", "#{ext3,jdbcType=VARCHAR}");
+        }
+        
+        return sql.toString();
+    }
+
+    public String selectByExample(GoodsLogisticsExample example) {
+        SQL sql = new SQL();
+        if (example != null && example.isDistinct()) {
+            sql.SELECT_DISTINCT("id");
+        } else {
+            sql.SELECT("id");
+        }
+        sql.SELECT("user_id");
+        sql.SELECT("order_id");
+        sql.SELECT("task_no");
+        sql.SELECT("`number`");
+        sql.SELECT("logistics_status");
+        sql.SELECT("logistics_status_desc");
+        sql.SELECT("the_last_message");
+        sql.SELECT("the_last_time");
+        sql.SELECT("take_time");
+        sql.SELECT("courier");
+        sql.SELECT("courier_phone");
+        sql.SELECT("logistics_trace_details");
+        sql.SELECT("express_company_name");
+        sql.SELECT("`status`");
+        sql.SELECT("create_time");
+        sql.SELECT("op_id");
+        sql.SELECT("op_name");
+        sql.SELECT("ext_1");
+        sql.SELECT("ext_2");
+        sql.SELECT("ext_3");
+        sql.FROM("goods_logistics");
+        applyWhere(sql, example, false);
+        
+        if (example != null && example.getOrderByClause() != null) {
+            sql.ORDER_BY(example.getOrderByClause());
+        }
+        
+        return sql.toString();
+    }
+
+    public String updateByExampleSelective(Map<String, Object> parameter) {
+        GoodsLogistics record = (GoodsLogistics) parameter.get("record");
+        GoodsLogisticsExample example = (GoodsLogisticsExample) parameter.get("example");
+        
+        SQL sql = new SQL();
+        sql.UPDATE("goods_logistics");
+        
+        if (record.getId() != null) {
+            sql.SET("id = #{record.id,jdbcType=BIGINT}");
+        }
+        
+        if (record.getUserId() != null) {
+            sql.SET("user_id = #{record.userId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getOrderId() != null) {
+            sql.SET("order_id = #{record.orderId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getTaskNo() != null) {
+            sql.SET("task_no = #{record.taskNo,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getNumber() != null) {
+            sql.SET("`number` = #{record.number,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getLogisticsStatus() != null) {
+            sql.SET("logistics_status = #{record.logisticsStatus,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getLogisticsStatusDesc() != null) {
+            sql.SET("logistics_status_desc = #{record.logisticsStatusDesc,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getTheLastMessage() != null) {
+            sql.SET("the_last_message = #{record.theLastMessage,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getTheLastTime() != null) {
+            sql.SET("the_last_time = #{record.theLastTime,jdbcType=TIMESTAMP}");
+        }
+        
+        if (record.getTakeTime() != null) {
+            sql.SET("take_time = #{record.takeTime,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getCourier() != null) {
+            sql.SET("courier = #{record.courier,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getCourierPhone() != null) {
+            sql.SET("courier_phone = #{record.courierPhone,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getLogisticsTraceDetails() != null) {
+            sql.SET("logistics_trace_details = #{record.logisticsTraceDetails,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExpressCompanyName() != null) {
+            sql.SET("express_company_name = #{record.expressCompanyName,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getStatus() != null) {
+            sql.SET("`status` = #{record.status,jdbcType=INTEGER}");
+        }
+        
+        if (record.getCreateTime() != null) {
+            sql.SET("create_time = #{record.createTime,jdbcType=TIMESTAMP}");
+        }
+        
+        if (record.getOpId() != null) {
+            sql.SET("op_id = #{record.opId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getOpName() != null) {
+            sql.SET("op_name = #{record.opName,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt1() != null) {
+            sql.SET("ext_1 = #{record.ext1,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt2() != null) {
+            sql.SET("ext_2 = #{record.ext2,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt3() != null) {
+            sql.SET("ext_3 = #{record.ext3,jdbcType=VARCHAR}");
+        }
+        
+        applyWhere(sql, example, true);
+        return sql.toString();
+    }
+
+    public String updateByExample(Map<String, Object> parameter) {
+        SQL sql = new SQL();
+        sql.UPDATE("goods_logistics");
+        
+        sql.SET("id = #{record.id,jdbcType=BIGINT}");
+        sql.SET("user_id = #{record.userId,jdbcType=BIGINT}");
+        sql.SET("order_id = #{record.orderId,jdbcType=BIGINT}");
+        sql.SET("task_no = #{record.taskNo,jdbcType=VARCHAR}");
+        sql.SET("`number` = #{record.number,jdbcType=VARCHAR}");
+        sql.SET("logistics_status = #{record.logisticsStatus,jdbcType=VARCHAR}");
+        sql.SET("logistics_status_desc = #{record.logisticsStatusDesc,jdbcType=VARCHAR}");
+        sql.SET("the_last_message = #{record.theLastMessage,jdbcType=VARCHAR}");
+        sql.SET("the_last_time = #{record.theLastTime,jdbcType=TIMESTAMP}");
+        sql.SET("take_time = #{record.takeTime,jdbcType=VARCHAR}");
+        sql.SET("courier = #{record.courier,jdbcType=VARCHAR}");
+        sql.SET("courier_phone = #{record.courierPhone,jdbcType=VARCHAR}");
+        sql.SET("logistics_trace_details = #{record.logisticsTraceDetails,jdbcType=VARCHAR}");
+        sql.SET("express_company_name = #{record.expressCompanyName,jdbcType=VARCHAR}");
+        sql.SET("`status` = #{record.status,jdbcType=INTEGER}");
+        sql.SET("create_time = #{record.createTime,jdbcType=TIMESTAMP}");
+        sql.SET("op_id = #{record.opId,jdbcType=BIGINT}");
+        sql.SET("op_name = #{record.opName,jdbcType=VARCHAR}");
+        sql.SET("ext_1 = #{record.ext1,jdbcType=VARCHAR}");
+        sql.SET("ext_2 = #{record.ext2,jdbcType=VARCHAR}");
+        sql.SET("ext_3 = #{record.ext3,jdbcType=VARCHAR}");
+        
+        GoodsLogisticsExample example = (GoodsLogisticsExample) parameter.get("example");
+        applyWhere(sql, example, true);
+        return sql.toString();
+    }
+
+    protected void applyWhere(SQL sql, GoodsLogisticsExample example, boolean includeExamplePhrase) {
+        if (example == null) {
+            return;
+        }
+        
+        String parmPhrase1;
+        String parmPhrase1_th;
+        String parmPhrase2;
+        String parmPhrase2_th;
+        String parmPhrase3;
+        String parmPhrase3_th;
+        if (includeExamplePhrase) {
+            parmPhrase1 = "%s #{example.oredCriteria[%d].allCriteria[%d].value}";
+            parmPhrase1_th = "%s #{example.oredCriteria[%d].allCriteria[%d].value,typeHandler=%s}";
+            parmPhrase2 = "%s #{example.oredCriteria[%d].allCriteria[%d].value} and #{example.oredCriteria[%d].criteria[%d].secondValue}";
+            parmPhrase2_th = "%s #{example.oredCriteria[%d].allCriteria[%d].value,typeHandler=%s} and #{example.oredCriteria[%d].criteria[%d].secondValue,typeHandler=%s}";
+            parmPhrase3 = "#{example.oredCriteria[%d].allCriteria[%d].value[%d]}";
+            parmPhrase3_th = "#{example.oredCriteria[%d].allCriteria[%d].value[%d],typeHandler=%s}";
+        } else {
+            parmPhrase1 = "%s #{oredCriteria[%d].allCriteria[%d].value}";
+            parmPhrase1_th = "%s #{oredCriteria[%d].allCriteria[%d].value,typeHandler=%s}";
+            parmPhrase2 = "%s #{oredCriteria[%d].allCriteria[%d].value} and #{oredCriteria[%d].criteria[%d].secondValue}";
+            parmPhrase2_th = "%s #{oredCriteria[%d].allCriteria[%d].value,typeHandler=%s} and #{oredCriteria[%d].criteria[%d].secondValue,typeHandler=%s}";
+            parmPhrase3 = "#{oredCriteria[%d].allCriteria[%d].value[%d]}";
+            parmPhrase3_th = "#{oredCriteria[%d].allCriteria[%d].value[%d],typeHandler=%s}";
+        }
+        
+        StringBuilder sb = new StringBuilder();
+        List<Criteria> oredCriteria = example.getOredCriteria();
+        boolean firstCriteria = true;
+        for (int i = 0; i < oredCriteria.size(); i++) {
+            Criteria criteria = oredCriteria.get(i);
+            if (criteria.isValid()) {
+                if (firstCriteria) {
+                    firstCriteria = false;
+                } else {
+                    sb.append(" or ");
+                }
+                
+                sb.append('(');
+                List<Criterion> criterions = criteria.getAllCriteria();
+                boolean firstCriterion = true;
+                for (int j = 0; j < criterions.size(); j++) {
+                    Criterion criterion = criterions.get(j);
+                    if (firstCriterion) {
+                        firstCriterion = false;
+                    } else {
+                        sb.append(" and ");
+                    }
+                    
+                    if (criterion.isNoValue()) {
+                        sb.append(criterion.getCondition());
+                    } else if (criterion.isSingleValue()) {
+                        if (criterion.getTypeHandler() == null) {
+                            sb.append(String.format(parmPhrase1, criterion.getCondition(), i, j));
+                        } else {
+                            sb.append(String.format(parmPhrase1_th, criterion.getCondition(), i, j,criterion.getTypeHandler()));
+                        }
+                    } else if (criterion.isBetweenValue()) {
+                        if (criterion.getTypeHandler() == null) {
+                            sb.append(String.format(parmPhrase2, criterion.getCondition(), i, j, i, j));
+                        } else {
+                            sb.append(String.format(parmPhrase2_th, criterion.getCondition(), i, j, criterion.getTypeHandler(), i, j, criterion.getTypeHandler()));
+                        }
+                    } else if (criterion.isListValue()) {
+                        sb.append(criterion.getCondition());
+                        sb.append(" (");
+                        List<?> listItems = (List<?>) criterion.getValue();
+                        boolean comma = false;
+                        for (int k = 0; k < listItems.size(); k++) {
+                            if (comma) {
+                                sb.append(", ");
+                            } else {
+                                comma = true;
+                            }
+                            if (criterion.getTypeHandler() == null) {
+                                sb.append(String.format(parmPhrase3, i, j, k));
+                            } else {
+                                sb.append(String.format(parmPhrase3_th, i, j, k, criterion.getTypeHandler()));
+                            }
+                        }
+                        sb.append(')');
+                    }
+                }
+                sb.append(')');
+            }
+        }
+        
+        if (sb.length() > 0) {
+            sql.WHERE(sb.toString());
+        }
+    }
+}
\ No newline at end of file
diff --git a/hai-service/src/main/java/com/hai/dao/GoodsReviewMapper.java b/hai-service/src/main/java/com/hai/dao/GoodsReviewMapper.java
new file mode 100644
index 00000000..92d34631
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/dao/GoodsReviewMapper.java
@@ -0,0 +1,76 @@
+package com.hai.dao;
+
+import com.hai.entity.GoodsReview;
+import com.hai.entity.GoodsReviewExample;
+import java.util.List;
+import org.apache.ibatis.annotations.DeleteProvider;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.InsertProvider;
+import org.apache.ibatis.annotations.Options;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Result;
+import org.apache.ibatis.annotations.Results;
+import org.apache.ibatis.annotations.SelectProvider;
+import org.apache.ibatis.annotations.UpdateProvider;
+import org.apache.ibatis.type.JdbcType;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 
+ * 代码由工具生成,请勿修改!!!
+ * 如果需要扩展请在其父类进行扩展
+ * 
+ **/
+@Repository
+public interface GoodsReviewMapper extends GoodsReviewMapperExt {
+    @SelectProvider(type=GoodsReviewSqlProvider.class, method="countByExample")
+    long countByExample(GoodsReviewExample example);
+
+    @DeleteProvider(type=GoodsReviewSqlProvider.class, method="deleteByExample")
+    int deleteByExample(GoodsReviewExample example);
+
+    @Insert({
+        "insert into goods_review (user_id, goods_id, ",
+        "sku_id, review_describe, ",
+        "show_img, `status`, ",
+        "create_time, op_id, ",
+        "op_name, ext_1, ext_2, ",
+        "ext_3)",
+        "values (#{userId,jdbcType=BIGINT}, #{goodsId,jdbcType=BIGINT}, ",
+        "#{skuId,jdbcType=BIGINT}, #{reviewDescribe,jdbcType=VARCHAR}, ",
+        "#{showImg,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER}, ",
+        "#{createTime,jdbcType=TIMESTAMP}, #{opId,jdbcType=BIGINT}, ",
+        "#{opName,jdbcType=VARCHAR}, #{ext1,jdbcType=VARCHAR}, #{ext2,jdbcType=VARCHAR}, ",
+        "#{ext3,jdbcType=VARCHAR})"
+    })
+    @Options(useGeneratedKeys=true,keyProperty="id")
+    int insert(GoodsReview record);
+
+    @InsertProvider(type=GoodsReviewSqlProvider.class, method="insertSelective")
+    @Options(useGeneratedKeys=true,keyProperty="id")
+    int insertSelective(GoodsReview record);
+
+    @SelectProvider(type=GoodsReviewSqlProvider.class, method="selectByExample")
+    @Results({
+        @Result(column="id", property="id", jdbcType=JdbcType.BIGINT),
+        @Result(column="user_id", property="userId", jdbcType=JdbcType.BIGINT),
+        @Result(column="goods_id", property="goodsId", jdbcType=JdbcType.BIGINT),
+        @Result(column="sku_id", property="skuId", jdbcType=JdbcType.BIGINT),
+        @Result(column="review_describe", property="reviewDescribe", jdbcType=JdbcType.VARCHAR),
+        @Result(column="show_img", property="showImg", jdbcType=JdbcType.VARCHAR),
+        @Result(column="status", property="status", jdbcType=JdbcType.INTEGER),
+        @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP),
+        @Result(column="op_id", property="opId", jdbcType=JdbcType.BIGINT),
+        @Result(column="op_name", property="opName", jdbcType=JdbcType.VARCHAR),
+        @Result(column="ext_1", property="ext1", jdbcType=JdbcType.VARCHAR),
+        @Result(column="ext_2", property="ext2", jdbcType=JdbcType.VARCHAR),
+        @Result(column="ext_3", property="ext3", jdbcType=JdbcType.VARCHAR)
+    })
+    List<GoodsReview> selectByExample(GoodsReviewExample example);
+
+    @UpdateProvider(type=GoodsReviewSqlProvider.class, method="updateByExampleSelective")
+    int updateByExampleSelective(@Param("record") GoodsReview record, @Param("example") GoodsReviewExample example);
+
+    @UpdateProvider(type=GoodsReviewSqlProvider.class, method="updateByExample")
+    int updateByExample(@Param("record") GoodsReview record, @Param("example") GoodsReviewExample example);
+}
\ No newline at end of file
diff --git a/hai-service/src/main/java/com/hai/dao/GoodsReviewMapperExt.java b/hai-service/src/main/java/com/hai/dao/GoodsReviewMapperExt.java
new file mode 100644
index 00000000..6b554d1e
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/dao/GoodsReviewMapperExt.java
@@ -0,0 +1,7 @@
+package com.hai.dao;
+
+/**
+ * mapper扩展类
+ */
+public interface GoodsReviewMapperExt {
+}
\ No newline at end of file
diff --git a/hai-service/src/main/java/com/hai/dao/GoodsReviewSqlProvider.java b/hai-service/src/main/java/com/hai/dao/GoodsReviewSqlProvider.java
new file mode 100644
index 00000000..6b2c940f
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/dao/GoodsReviewSqlProvider.java
@@ -0,0 +1,289 @@
+package com.hai.dao;
+
+import com.hai.entity.GoodsReview;
+import com.hai.entity.GoodsReviewExample.Criteria;
+import com.hai.entity.GoodsReviewExample.Criterion;
+import com.hai.entity.GoodsReviewExample;
+import java.util.List;
+import java.util.Map;
+import org.apache.ibatis.jdbc.SQL;
+
+public class GoodsReviewSqlProvider {
+
+    public String countByExample(GoodsReviewExample example) {
+        SQL sql = new SQL();
+        sql.SELECT("count(*)").FROM("goods_review");
+        applyWhere(sql, example, false);
+        return sql.toString();
+    }
+
+    public String deleteByExample(GoodsReviewExample example) {
+        SQL sql = new SQL();
+        sql.DELETE_FROM("goods_review");
+        applyWhere(sql, example, false);
+        return sql.toString();
+    }
+
+    public String insertSelective(GoodsReview record) {
+        SQL sql = new SQL();
+        sql.INSERT_INTO("goods_review");
+        
+        if (record.getUserId() != null) {
+            sql.VALUES("user_id", "#{userId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getGoodsId() != null) {
+            sql.VALUES("goods_id", "#{goodsId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getSkuId() != null) {
+            sql.VALUES("sku_id", "#{skuId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getReviewDescribe() != null) {
+            sql.VALUES("review_describe", "#{reviewDescribe,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getShowImg() != null) {
+            sql.VALUES("show_img", "#{showImg,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getStatus() != null) {
+            sql.VALUES("`status`", "#{status,jdbcType=INTEGER}");
+        }
+        
+        if (record.getCreateTime() != null) {
+            sql.VALUES("create_time", "#{createTime,jdbcType=TIMESTAMP}");
+        }
+        
+        if (record.getOpId() != null) {
+            sql.VALUES("op_id", "#{opId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getOpName() != null) {
+            sql.VALUES("op_name", "#{opName,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt1() != null) {
+            sql.VALUES("ext_1", "#{ext1,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt2() != null) {
+            sql.VALUES("ext_2", "#{ext2,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt3() != null) {
+            sql.VALUES("ext_3", "#{ext3,jdbcType=VARCHAR}");
+        }
+        
+        return sql.toString();
+    }
+
+    public String selectByExample(GoodsReviewExample example) {
+        SQL sql = new SQL();
+        if (example != null && example.isDistinct()) {
+            sql.SELECT_DISTINCT("id");
+        } else {
+            sql.SELECT("id");
+        }
+        sql.SELECT("user_id");
+        sql.SELECT("goods_id");
+        sql.SELECT("sku_id");
+        sql.SELECT("review_describe");
+        sql.SELECT("show_img");
+        sql.SELECT("`status`");
+        sql.SELECT("create_time");
+        sql.SELECT("op_id");
+        sql.SELECT("op_name");
+        sql.SELECT("ext_1");
+        sql.SELECT("ext_2");
+        sql.SELECT("ext_3");
+        sql.FROM("goods_review");
+        applyWhere(sql, example, false);
+        
+        if (example != null && example.getOrderByClause() != null) {
+            sql.ORDER_BY(example.getOrderByClause());
+        }
+        
+        return sql.toString();
+    }
+
+    public String updateByExampleSelective(Map<String, Object> parameter) {
+        GoodsReview record = (GoodsReview) parameter.get("record");
+        GoodsReviewExample example = (GoodsReviewExample) parameter.get("example");
+        
+        SQL sql = new SQL();
+        sql.UPDATE("goods_review");
+        
+        if (record.getId() != null) {
+            sql.SET("id = #{record.id,jdbcType=BIGINT}");
+        }
+        
+        if (record.getUserId() != null) {
+            sql.SET("user_id = #{record.userId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getGoodsId() != null) {
+            sql.SET("goods_id = #{record.goodsId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getSkuId() != null) {
+            sql.SET("sku_id = #{record.skuId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getReviewDescribe() != null) {
+            sql.SET("review_describe = #{record.reviewDescribe,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getShowImg() != null) {
+            sql.SET("show_img = #{record.showImg,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getStatus() != null) {
+            sql.SET("`status` = #{record.status,jdbcType=INTEGER}");
+        }
+        
+        if (record.getCreateTime() != null) {
+            sql.SET("create_time = #{record.createTime,jdbcType=TIMESTAMP}");
+        }
+        
+        if (record.getOpId() != null) {
+            sql.SET("op_id = #{record.opId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getOpName() != null) {
+            sql.SET("op_name = #{record.opName,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt1() != null) {
+            sql.SET("ext_1 = #{record.ext1,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt2() != null) {
+            sql.SET("ext_2 = #{record.ext2,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt3() != null) {
+            sql.SET("ext_3 = #{record.ext3,jdbcType=VARCHAR}");
+        }
+        
+        applyWhere(sql, example, true);
+        return sql.toString();
+    }
+
+    public String updateByExample(Map<String, Object> parameter) {
+        SQL sql = new SQL();
+        sql.UPDATE("goods_review");
+        
+        sql.SET("id = #{record.id,jdbcType=BIGINT}");
+        sql.SET("user_id = #{record.userId,jdbcType=BIGINT}");
+        sql.SET("goods_id = #{record.goodsId,jdbcType=BIGINT}");
+        sql.SET("sku_id = #{record.skuId,jdbcType=BIGINT}");
+        sql.SET("review_describe = #{record.reviewDescribe,jdbcType=VARCHAR}");
+        sql.SET("show_img = #{record.showImg,jdbcType=VARCHAR}");
+        sql.SET("`status` = #{record.status,jdbcType=INTEGER}");
+        sql.SET("create_time = #{record.createTime,jdbcType=TIMESTAMP}");
+        sql.SET("op_id = #{record.opId,jdbcType=BIGINT}");
+        sql.SET("op_name = #{record.opName,jdbcType=VARCHAR}");
+        sql.SET("ext_1 = #{record.ext1,jdbcType=VARCHAR}");
+        sql.SET("ext_2 = #{record.ext2,jdbcType=VARCHAR}");
+        sql.SET("ext_3 = #{record.ext3,jdbcType=VARCHAR}");
+        
+        GoodsReviewExample example = (GoodsReviewExample) parameter.get("example");
+        applyWhere(sql, example, true);
+        return sql.toString();
+    }
+
+    protected void applyWhere(SQL sql, GoodsReviewExample example, boolean includeExamplePhrase) {
+        if (example == null) {
+            return;
+        }
+        
+        String parmPhrase1;
+        String parmPhrase1_th;
+        String parmPhrase2;
+        String parmPhrase2_th;
+        String parmPhrase3;
+        String parmPhrase3_th;
+        if (includeExamplePhrase) {
+            parmPhrase1 = "%s #{example.oredCriteria[%d].allCriteria[%d].value}";
+            parmPhrase1_th = "%s #{example.oredCriteria[%d].allCriteria[%d].value,typeHandler=%s}";
+            parmPhrase2 = "%s #{example.oredCriteria[%d].allCriteria[%d].value} and #{example.oredCriteria[%d].criteria[%d].secondValue}";
+            parmPhrase2_th = "%s #{example.oredCriteria[%d].allCriteria[%d].value,typeHandler=%s} and #{example.oredCriteria[%d].criteria[%d].secondValue,typeHandler=%s}";
+            parmPhrase3 = "#{example.oredCriteria[%d].allCriteria[%d].value[%d]}";
+            parmPhrase3_th = "#{example.oredCriteria[%d].allCriteria[%d].value[%d],typeHandler=%s}";
+        } else {
+            parmPhrase1 = "%s #{oredCriteria[%d].allCriteria[%d].value}";
+            parmPhrase1_th = "%s #{oredCriteria[%d].allCriteria[%d].value,typeHandler=%s}";
+            parmPhrase2 = "%s #{oredCriteria[%d].allCriteria[%d].value} and #{oredCriteria[%d].criteria[%d].secondValue}";
+            parmPhrase2_th = "%s #{oredCriteria[%d].allCriteria[%d].value,typeHandler=%s} and #{oredCriteria[%d].criteria[%d].secondValue,typeHandler=%s}";
+            parmPhrase3 = "#{oredCriteria[%d].allCriteria[%d].value[%d]}";
+            parmPhrase3_th = "#{oredCriteria[%d].allCriteria[%d].value[%d],typeHandler=%s}";
+        }
+        
+        StringBuilder sb = new StringBuilder();
+        List<Criteria> oredCriteria = example.getOredCriteria();
+        boolean firstCriteria = true;
+        for (int i = 0; i < oredCriteria.size(); i++) {
+            Criteria criteria = oredCriteria.get(i);
+            if (criteria.isValid()) {
+                if (firstCriteria) {
+                    firstCriteria = false;
+                } else {
+                    sb.append(" or ");
+                }
+                
+                sb.append('(');
+                List<Criterion> criterions = criteria.getAllCriteria();
+                boolean firstCriterion = true;
+                for (int j = 0; j < criterions.size(); j++) {
+                    Criterion criterion = criterions.get(j);
+                    if (firstCriterion) {
+                        firstCriterion = false;
+                    } else {
+                        sb.append(" and ");
+                    }
+                    
+                    if (criterion.isNoValue()) {
+                        sb.append(criterion.getCondition());
+                    } else if (criterion.isSingleValue()) {
+                        if (criterion.getTypeHandler() == null) {
+                            sb.append(String.format(parmPhrase1, criterion.getCondition(), i, j));
+                        } else {
+                            sb.append(String.format(parmPhrase1_th, criterion.getCondition(), i, j,criterion.getTypeHandler()));
+                        }
+                    } else if (criterion.isBetweenValue()) {
+                        if (criterion.getTypeHandler() == null) {
+                            sb.append(String.format(parmPhrase2, criterion.getCondition(), i, j, i, j));
+                        } else {
+                            sb.append(String.format(parmPhrase2_th, criterion.getCondition(), i, j, criterion.getTypeHandler(), i, j, criterion.getTypeHandler()));
+                        }
+                    } else if (criterion.isListValue()) {
+                        sb.append(criterion.getCondition());
+                        sb.append(" (");
+                        List<?> listItems = (List<?>) criterion.getValue();
+                        boolean comma = false;
+                        for (int k = 0; k < listItems.size(); k++) {
+                            if (comma) {
+                                sb.append(", ");
+                            } else {
+                                comma = true;
+                            }
+                            if (criterion.getTypeHandler() == null) {
+                                sb.append(String.format(parmPhrase3, i, j, k));
+                            } else {
+                                sb.append(String.format(parmPhrase3_th, i, j, k, criterion.getTypeHandler()));
+                            }
+                        }
+                        sb.append(')');
+                    }
+                }
+                sb.append(')');
+            }
+        }
+        
+        if (sb.length() > 0) {
+            sql.WHERE(sb.toString());
+        }
+    }
+}
\ No newline at end of file
diff --git a/hai-service/src/main/java/com/hai/dao/GoodsSkuMapper.java b/hai-service/src/main/java/com/hai/dao/GoodsSkuMapper.java
new file mode 100644
index 00000000..442cb3c6
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/dao/GoodsSkuMapper.java
@@ -0,0 +1,141 @@
+package com.hai.dao;
+
+import com.hai.entity.GoodsSku;
+import com.hai.entity.GoodsSkuExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.DeleteProvider;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.InsertProvider;
+import org.apache.ibatis.annotations.Options;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Result;
+import org.apache.ibatis.annotations.Results;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.SelectProvider;
+import org.apache.ibatis.annotations.Update;
+import org.apache.ibatis.annotations.UpdateProvider;
+import org.apache.ibatis.type.JdbcType;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 
+ * 代码由工具生成,请勿修改!!!
+ * 如果需要扩展请在其父类进行扩展
+ * 
+ **/
+@Repository
+public interface GoodsSkuMapper extends GoodsSkuMapperExt {
+    @SelectProvider(type=GoodsSkuSqlProvider.class, method="countByExample")
+    long countByExample(GoodsSkuExample example);
+
+    @DeleteProvider(type=GoodsSkuSqlProvider.class, method="deleteByExample")
+    int deleteByExample(GoodsSkuExample example);
+
+    @Delete({
+        "delete from goods_sku",
+        "where id = #{id,jdbcType=BIGINT}"
+    })
+    int deleteByPrimaryKey(Long id);
+
+    @Insert({
+        "insert into goods_sku (goods_id, `name`, ",
+        "price, original_price, ",
+        "stock, show_img, ",
+        "banner_img, `status`, ",
+        "create_time, update_time, ",
+        "op_id, op_name, ext_1, ",
+        "ext_2, ext_3)",
+        "values (#{goodsId,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, ",
+        "#{price,jdbcType=DECIMAL}, #{originalPrice,jdbcType=DECIMAL}, ",
+        "#{stock,jdbcType=INTEGER}, #{showImg,jdbcType=VARCHAR}, ",
+        "#{bannerImg,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER}, ",
+        "#{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}, ",
+        "#{opId,jdbcType=BIGINT}, #{opName,jdbcType=VARCHAR}, #{ext1,jdbcType=VARCHAR}, ",
+        "#{ext2,jdbcType=VARCHAR}, #{ext3,jdbcType=VARCHAR})"
+    })
+    @Options(useGeneratedKeys=true,keyProperty="id")
+    int insert(GoodsSku record);
+
+    @InsertProvider(type=GoodsSkuSqlProvider.class, method="insertSelective")
+    @Options(useGeneratedKeys=true,keyProperty="id")
+    int insertSelective(GoodsSku record);
+
+    @SelectProvider(type=GoodsSkuSqlProvider.class, method="selectByExample")
+    @Results({
+        @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true),
+        @Result(column="goods_id", property="goodsId", jdbcType=JdbcType.BIGINT),
+        @Result(column="name", property="name", jdbcType=JdbcType.VARCHAR),
+        @Result(column="price", property="price", jdbcType=JdbcType.DECIMAL),
+        @Result(column="original_price", property="originalPrice", jdbcType=JdbcType.DECIMAL),
+        @Result(column="stock", property="stock", jdbcType=JdbcType.INTEGER),
+        @Result(column="show_img", property="showImg", jdbcType=JdbcType.VARCHAR),
+        @Result(column="banner_img", property="bannerImg", jdbcType=JdbcType.VARCHAR),
+        @Result(column="status", property="status", jdbcType=JdbcType.INTEGER),
+        @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP),
+        @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP),
+        @Result(column="op_id", property="opId", jdbcType=JdbcType.BIGINT),
+        @Result(column="op_name", property="opName", jdbcType=JdbcType.VARCHAR),
+        @Result(column="ext_1", property="ext1", jdbcType=JdbcType.VARCHAR),
+        @Result(column="ext_2", property="ext2", jdbcType=JdbcType.VARCHAR),
+        @Result(column="ext_3", property="ext3", jdbcType=JdbcType.VARCHAR)
+    })
+    List<GoodsSku> selectByExample(GoodsSkuExample example);
+
+    @Select({
+        "select",
+        "id, goods_id, `name`, price, original_price, stock, show_img, banner_img, `status`, ",
+        "create_time, update_time, op_id, op_name, ext_1, ext_2, ext_3",
+        "from goods_sku",
+        "where id = #{id,jdbcType=BIGINT}"
+    })
+    @Results({
+        @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true),
+        @Result(column="goods_id", property="goodsId", jdbcType=JdbcType.BIGINT),
+        @Result(column="name", property="name", jdbcType=JdbcType.VARCHAR),
+        @Result(column="price", property="price", jdbcType=JdbcType.DECIMAL),
+        @Result(column="original_price", property="originalPrice", jdbcType=JdbcType.DECIMAL),
+        @Result(column="stock", property="stock", jdbcType=JdbcType.INTEGER),
+        @Result(column="show_img", property="showImg", jdbcType=JdbcType.VARCHAR),
+        @Result(column="banner_img", property="bannerImg", jdbcType=JdbcType.VARCHAR),
+        @Result(column="status", property="status", jdbcType=JdbcType.INTEGER),
+        @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP),
+        @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP),
+        @Result(column="op_id", property="opId", jdbcType=JdbcType.BIGINT),
+        @Result(column="op_name", property="opName", jdbcType=JdbcType.VARCHAR),
+        @Result(column="ext_1", property="ext1", jdbcType=JdbcType.VARCHAR),
+        @Result(column="ext_2", property="ext2", jdbcType=JdbcType.VARCHAR),
+        @Result(column="ext_3", property="ext3", jdbcType=JdbcType.VARCHAR)
+    })
+    GoodsSku selectByPrimaryKey(Long id);
+
+    @UpdateProvider(type=GoodsSkuSqlProvider.class, method="updateByExampleSelective")
+    int updateByExampleSelective(@Param("record") GoodsSku record, @Param("example") GoodsSkuExample example);
+
+    @UpdateProvider(type=GoodsSkuSqlProvider.class, method="updateByExample")
+    int updateByExample(@Param("record") GoodsSku record, @Param("example") GoodsSkuExample example);
+
+    @UpdateProvider(type=GoodsSkuSqlProvider.class, method="updateByPrimaryKeySelective")
+    int updateByPrimaryKeySelective(GoodsSku record);
+
+    @Update({
+        "update goods_sku",
+        "set goods_id = #{goodsId,jdbcType=BIGINT},",
+          "`name` = #{name,jdbcType=VARCHAR},",
+          "price = #{price,jdbcType=DECIMAL},",
+          "original_price = #{originalPrice,jdbcType=DECIMAL},",
+          "stock = #{stock,jdbcType=INTEGER},",
+          "show_img = #{showImg,jdbcType=VARCHAR},",
+          "banner_img = #{bannerImg,jdbcType=VARCHAR},",
+          "`status` = #{status,jdbcType=INTEGER},",
+          "create_time = #{createTime,jdbcType=TIMESTAMP},",
+          "update_time = #{updateTime,jdbcType=TIMESTAMP},",
+          "op_id = #{opId,jdbcType=BIGINT},",
+          "op_name = #{opName,jdbcType=VARCHAR},",
+          "ext_1 = #{ext1,jdbcType=VARCHAR},",
+          "ext_2 = #{ext2,jdbcType=VARCHAR},",
+          "ext_3 = #{ext3,jdbcType=VARCHAR}",
+        "where id = #{id,jdbcType=BIGINT}"
+    })
+    int updateByPrimaryKey(GoodsSku record);
+}
\ No newline at end of file
diff --git a/hai-service/src/main/java/com/hai/dao/GoodsSkuMapperExt.java b/hai-service/src/main/java/com/hai/dao/GoodsSkuMapperExt.java
new file mode 100644
index 00000000..905a7f9f
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/dao/GoodsSkuMapperExt.java
@@ -0,0 +1,7 @@
+package com.hai.dao;
+
+/**
+ * mapper扩展类
+ */
+public interface GoodsSkuMapperExt {
+}
\ No newline at end of file
diff --git a/hai-service/src/main/java/com/hai/dao/GoodsSkuSqlProvider.java b/hai-service/src/main/java/com/hai/dao/GoodsSkuSqlProvider.java
new file mode 100644
index 00000000..2fac01c1
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/dao/GoodsSkuSqlProvider.java
@@ -0,0 +1,388 @@
+package com.hai.dao;
+
+import com.hai.entity.GoodsSku;
+import com.hai.entity.GoodsSkuExample.Criteria;
+import com.hai.entity.GoodsSkuExample.Criterion;
+import com.hai.entity.GoodsSkuExample;
+import java.util.List;
+import java.util.Map;
+import org.apache.ibatis.jdbc.SQL;
+
+public class GoodsSkuSqlProvider {
+
+    public String countByExample(GoodsSkuExample example) {
+        SQL sql = new SQL();
+        sql.SELECT("count(*)").FROM("goods_sku");
+        applyWhere(sql, example, false);
+        return sql.toString();
+    }
+
+    public String deleteByExample(GoodsSkuExample example) {
+        SQL sql = new SQL();
+        sql.DELETE_FROM("goods_sku");
+        applyWhere(sql, example, false);
+        return sql.toString();
+    }
+
+    public String insertSelective(GoodsSku record) {
+        SQL sql = new SQL();
+        sql.INSERT_INTO("goods_sku");
+        
+        if (record.getGoodsId() != null) {
+            sql.VALUES("goods_id", "#{goodsId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getName() != null) {
+            sql.VALUES("`name`", "#{name,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getPrice() != null) {
+            sql.VALUES("price", "#{price,jdbcType=DECIMAL}");
+        }
+        
+        if (record.getOriginalPrice() != null) {
+            sql.VALUES("original_price", "#{originalPrice,jdbcType=DECIMAL}");
+        }
+        
+        if (record.getStock() != null) {
+            sql.VALUES("stock", "#{stock,jdbcType=INTEGER}");
+        }
+        
+        if (record.getShowImg() != null) {
+            sql.VALUES("show_img", "#{showImg,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getBannerImg() != null) {
+            sql.VALUES("banner_img", "#{bannerImg,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getStatus() != null) {
+            sql.VALUES("`status`", "#{status,jdbcType=INTEGER}");
+        }
+        
+        if (record.getCreateTime() != null) {
+            sql.VALUES("create_time", "#{createTime,jdbcType=TIMESTAMP}");
+        }
+        
+        if (record.getUpdateTime() != null) {
+            sql.VALUES("update_time", "#{updateTime,jdbcType=TIMESTAMP}");
+        }
+        
+        if (record.getOpId() != null) {
+            sql.VALUES("op_id", "#{opId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getOpName() != null) {
+            sql.VALUES("op_name", "#{opName,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt1() != null) {
+            sql.VALUES("ext_1", "#{ext1,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt2() != null) {
+            sql.VALUES("ext_2", "#{ext2,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt3() != null) {
+            sql.VALUES("ext_3", "#{ext3,jdbcType=VARCHAR}");
+        }
+        
+        return sql.toString();
+    }
+
+    public String selectByExample(GoodsSkuExample example) {
+        SQL sql = new SQL();
+        if (example != null && example.isDistinct()) {
+            sql.SELECT_DISTINCT("id");
+        } else {
+            sql.SELECT("id");
+        }
+        sql.SELECT("goods_id");
+        sql.SELECT("`name`");
+        sql.SELECT("price");
+        sql.SELECT("original_price");
+        sql.SELECT("stock");
+        sql.SELECT("show_img");
+        sql.SELECT("banner_img");
+        sql.SELECT("`status`");
+        sql.SELECT("create_time");
+        sql.SELECT("update_time");
+        sql.SELECT("op_id");
+        sql.SELECT("op_name");
+        sql.SELECT("ext_1");
+        sql.SELECT("ext_2");
+        sql.SELECT("ext_3");
+        sql.FROM("goods_sku");
+        applyWhere(sql, example, false);
+        
+        if (example != null && example.getOrderByClause() != null) {
+            sql.ORDER_BY(example.getOrderByClause());
+        }
+        
+        return sql.toString();
+    }
+
+    public String updateByExampleSelective(Map<String, Object> parameter) {
+        GoodsSku record = (GoodsSku) parameter.get("record");
+        GoodsSkuExample example = (GoodsSkuExample) parameter.get("example");
+        
+        SQL sql = new SQL();
+        sql.UPDATE("goods_sku");
+        
+        if (record.getId() != null) {
+            sql.SET("id = #{record.id,jdbcType=BIGINT}");
+        }
+        
+        if (record.getGoodsId() != null) {
+            sql.SET("goods_id = #{record.goodsId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getName() != null) {
+            sql.SET("`name` = #{record.name,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getPrice() != null) {
+            sql.SET("price = #{record.price,jdbcType=DECIMAL}");
+        }
+        
+        if (record.getOriginalPrice() != null) {
+            sql.SET("original_price = #{record.originalPrice,jdbcType=DECIMAL}");
+        }
+        
+        if (record.getStock() != null) {
+            sql.SET("stock = #{record.stock,jdbcType=INTEGER}");
+        }
+        
+        if (record.getShowImg() != null) {
+            sql.SET("show_img = #{record.showImg,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getBannerImg() != null) {
+            sql.SET("banner_img = #{record.bannerImg,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getStatus() != null) {
+            sql.SET("`status` = #{record.status,jdbcType=INTEGER}");
+        }
+        
+        if (record.getCreateTime() != null) {
+            sql.SET("create_time = #{record.createTime,jdbcType=TIMESTAMP}");
+        }
+        
+        if (record.getUpdateTime() != null) {
+            sql.SET("update_time = #{record.updateTime,jdbcType=TIMESTAMP}");
+        }
+        
+        if (record.getOpId() != null) {
+            sql.SET("op_id = #{record.opId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getOpName() != null) {
+            sql.SET("op_name = #{record.opName,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt1() != null) {
+            sql.SET("ext_1 = #{record.ext1,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt2() != null) {
+            sql.SET("ext_2 = #{record.ext2,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt3() != null) {
+            sql.SET("ext_3 = #{record.ext3,jdbcType=VARCHAR}");
+        }
+        
+        applyWhere(sql, example, true);
+        return sql.toString();
+    }
+
+    public String updateByExample(Map<String, Object> parameter) {
+        SQL sql = new SQL();
+        sql.UPDATE("goods_sku");
+        
+        sql.SET("id = #{record.id,jdbcType=BIGINT}");
+        sql.SET("goods_id = #{record.goodsId,jdbcType=BIGINT}");
+        sql.SET("`name` = #{record.name,jdbcType=VARCHAR}");
+        sql.SET("price = #{record.price,jdbcType=DECIMAL}");
+        sql.SET("original_price = #{record.originalPrice,jdbcType=DECIMAL}");
+        sql.SET("stock = #{record.stock,jdbcType=INTEGER}");
+        sql.SET("show_img = #{record.showImg,jdbcType=VARCHAR}");
+        sql.SET("banner_img = #{record.bannerImg,jdbcType=VARCHAR}");
+        sql.SET("`status` = #{record.status,jdbcType=INTEGER}");
+        sql.SET("create_time = #{record.createTime,jdbcType=TIMESTAMP}");
+        sql.SET("update_time = #{record.updateTime,jdbcType=TIMESTAMP}");
+        sql.SET("op_id = #{record.opId,jdbcType=BIGINT}");
+        sql.SET("op_name = #{record.opName,jdbcType=VARCHAR}");
+        sql.SET("ext_1 = #{record.ext1,jdbcType=VARCHAR}");
+        sql.SET("ext_2 = #{record.ext2,jdbcType=VARCHAR}");
+        sql.SET("ext_3 = #{record.ext3,jdbcType=VARCHAR}");
+        
+        GoodsSkuExample example = (GoodsSkuExample) parameter.get("example");
+        applyWhere(sql, example, true);
+        return sql.toString();
+    }
+
+    public String updateByPrimaryKeySelective(GoodsSku record) {
+        SQL sql = new SQL();
+        sql.UPDATE("goods_sku");
+        
+        if (record.getGoodsId() != null) {
+            sql.SET("goods_id = #{goodsId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getName() != null) {
+            sql.SET("`name` = #{name,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getPrice() != null) {
+            sql.SET("price = #{price,jdbcType=DECIMAL}");
+        }
+        
+        if (record.getOriginalPrice() != null) {
+            sql.SET("original_price = #{originalPrice,jdbcType=DECIMAL}");
+        }
+        
+        if (record.getStock() != null) {
+            sql.SET("stock = #{stock,jdbcType=INTEGER}");
+        }
+        
+        if (record.getShowImg() != null) {
+            sql.SET("show_img = #{showImg,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getBannerImg() != null) {
+            sql.SET("banner_img = #{bannerImg,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getStatus() != null) {
+            sql.SET("`status` = #{status,jdbcType=INTEGER}");
+        }
+        
+        if (record.getCreateTime() != null) {
+            sql.SET("create_time = #{createTime,jdbcType=TIMESTAMP}");
+        }
+        
+        if (record.getUpdateTime() != null) {
+            sql.SET("update_time = #{updateTime,jdbcType=TIMESTAMP}");
+        }
+        
+        if (record.getOpId() != null) {
+            sql.SET("op_id = #{opId,jdbcType=BIGINT}");
+        }
+        
+        if (record.getOpName() != null) {
+            sql.SET("op_name = #{opName,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt1() != null) {
+            sql.SET("ext_1 = #{ext1,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt2() != null) {
+            sql.SET("ext_2 = #{ext2,jdbcType=VARCHAR}");
+        }
+        
+        if (record.getExt3() != null) {
+            sql.SET("ext_3 = #{ext3,jdbcType=VARCHAR}");
+        }
+        
+        sql.WHERE("id = #{id,jdbcType=BIGINT}");
+        
+        return sql.toString();
+    }
+
+    protected void applyWhere(SQL sql, GoodsSkuExample example, boolean includeExamplePhrase) {
+        if (example == null) {
+            return;
+        }
+        
+        String parmPhrase1;
+        String parmPhrase1_th;
+        String parmPhrase2;
+        String parmPhrase2_th;
+        String parmPhrase3;
+        String parmPhrase3_th;
+        if (includeExamplePhrase) {
+            parmPhrase1 = "%s #{example.oredCriteria[%d].allCriteria[%d].value}";
+            parmPhrase1_th = "%s #{example.oredCriteria[%d].allCriteria[%d].value,typeHandler=%s}";
+            parmPhrase2 = "%s #{example.oredCriteria[%d].allCriteria[%d].value} and #{example.oredCriteria[%d].criteria[%d].secondValue}";
+            parmPhrase2_th = "%s #{example.oredCriteria[%d].allCriteria[%d].value,typeHandler=%s} and #{example.oredCriteria[%d].criteria[%d].secondValue,typeHandler=%s}";
+            parmPhrase3 = "#{example.oredCriteria[%d].allCriteria[%d].value[%d]}";
+            parmPhrase3_th = "#{example.oredCriteria[%d].allCriteria[%d].value[%d],typeHandler=%s}";
+        } else {
+            parmPhrase1 = "%s #{oredCriteria[%d].allCriteria[%d].value}";
+            parmPhrase1_th = "%s #{oredCriteria[%d].allCriteria[%d].value,typeHandler=%s}";
+            parmPhrase2 = "%s #{oredCriteria[%d].allCriteria[%d].value} and #{oredCriteria[%d].criteria[%d].secondValue}";
+            parmPhrase2_th = "%s #{oredCriteria[%d].allCriteria[%d].value,typeHandler=%s} and #{oredCriteria[%d].criteria[%d].secondValue,typeHandler=%s}";
+            parmPhrase3 = "#{oredCriteria[%d].allCriteria[%d].value[%d]}";
+            parmPhrase3_th = "#{oredCriteria[%d].allCriteria[%d].value[%d],typeHandler=%s}";
+        }
+        
+        StringBuilder sb = new StringBuilder();
+        List<Criteria> oredCriteria = example.getOredCriteria();
+        boolean firstCriteria = true;
+        for (int i = 0; i < oredCriteria.size(); i++) {
+            Criteria criteria = oredCriteria.get(i);
+            if (criteria.isValid()) {
+                if (firstCriteria) {
+                    firstCriteria = false;
+                } else {
+                    sb.append(" or ");
+                }
+                
+                sb.append('(');
+                List<Criterion> criterions = criteria.getAllCriteria();
+                boolean firstCriterion = true;
+                for (int j = 0; j < criterions.size(); j++) {
+                    Criterion criterion = criterions.get(j);
+                    if (firstCriterion) {
+                        firstCriterion = false;
+                    } else {
+                        sb.append(" and ");
+                    }
+                    
+                    if (criterion.isNoValue()) {
+                        sb.append(criterion.getCondition());
+                    } else if (criterion.isSingleValue()) {
+                        if (criterion.getTypeHandler() == null) {
+                            sb.append(String.format(parmPhrase1, criterion.getCondition(), i, j));
+                        } else {
+                            sb.append(String.format(parmPhrase1_th, criterion.getCondition(), i, j,criterion.getTypeHandler()));
+                        }
+                    } else if (criterion.isBetweenValue()) {
+                        if (criterion.getTypeHandler() == null) {
+                            sb.append(String.format(parmPhrase2, criterion.getCondition(), i, j, i, j));
+                        } else {
+                            sb.append(String.format(parmPhrase2_th, criterion.getCondition(), i, j, criterion.getTypeHandler(), i, j, criterion.getTypeHandler()));
+                        }
+                    } else if (criterion.isListValue()) {
+                        sb.append(criterion.getCondition());
+                        sb.append(" (");
+                        List<?> listItems = (List<?>) criterion.getValue();
+                        boolean comma = false;
+                        for (int k = 0; k < listItems.size(); k++) {
+                            if (comma) {
+                                sb.append(", ");
+                            } else {
+                                comma = true;
+                            }
+                            if (criterion.getTypeHandler() == null) {
+                                sb.append(String.format(parmPhrase3, i, j, k));
+                            } else {
+                                sb.append(String.format(parmPhrase3_th, i, j, k, criterion.getTypeHandler()));
+                            }
+                        }
+                        sb.append(')');
+                    }
+                }
+                sb.append(')');
+            }
+        }
+        
+        if (sb.length() > 0) {
+            sql.WHERE(sb.toString());
+        }
+    }
+}
\ No newline at end of file
diff --git a/hai-service/src/main/java/com/hai/entity/GoodsDetail.java b/hai-service/src/main/java/com/hai/entity/GoodsDetail.java
new file mode 100644
index 00000000..8a2d0659
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/entity/GoodsDetail.java
@@ -0,0 +1,305 @@
+package com.hai.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * goods_detail
+ * @author 
+ */
+/**
+ * 
+ * 代码由工具生成
+ * 
+ **/
+public class GoodsDetail implements Serializable {
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 商品类型
+     */
+    private Long goodsType;
+
+    /**
+     * 商品名称
+     */
+    private String name;
+
+    /**
+     * 列表描述
+     */
+    private String listDescribe;
+
+    /**
+     * 描述
+     */
+    private String goodsDescribe;
+
+    /**
+     * 列表图
+     */
+    private String listImg;
+
+    /**
+     * 轮播图
+     */
+    private String bannerImg;
+
+    /**
+     * 详情图
+     */
+    private String detailImg;
+
+    /**
+     * 商品状态:0:删除 1:上线 2:编辑中
+     */
+    private Integer status;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 操作人员id
+     */
+    private Long opId;
+
+    /**
+     * 操作人员名称
+     */
+    private String opName;
+
+    /**
+     * ext_1
+     */
+    private String ext1;
+
+    /**
+     * ext_2
+     */
+    private String ext2;
+
+    /**
+     * ext_3
+     */
+    private String ext3;
+
+    private static final long serialVersionUID = 1L;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getGoodsType() {
+        return goodsType;
+    }
+
+    public void setGoodsType(Long goodsType) {
+        this.goodsType = goodsType;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getListDescribe() {
+        return listDescribe;
+    }
+
+    public void setListDescribe(String listDescribe) {
+        this.listDescribe = listDescribe;
+    }
+
+    public String getGoodsDescribe() {
+        return goodsDescribe;
+    }
+
+    public void setGoodsDescribe(String goodsDescribe) {
+        this.goodsDescribe = goodsDescribe;
+    }
+
+    public String getListImg() {
+        return listImg;
+    }
+
+    public void setListImg(String listImg) {
+        this.listImg = listImg;
+    }
+
+    public String getBannerImg() {
+        return bannerImg;
+    }
+
+    public void setBannerImg(String bannerImg) {
+        this.bannerImg = bannerImg;
+    }
+
+    public String getDetailImg() {
+        return detailImg;
+    }
+
+    public void setDetailImg(String detailImg) {
+        this.detailImg = detailImg;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public Long getOpId() {
+        return opId;
+    }
+
+    public void setOpId(Long opId) {
+        this.opId = opId;
+    }
+
+    public String getOpName() {
+        return opName;
+    }
+
+    public void setOpName(String opName) {
+        this.opName = opName;
+    }
+
+    public String getExt1() {
+        return ext1;
+    }
+
+    public void setExt1(String ext1) {
+        this.ext1 = ext1;
+    }
+
+    public String getExt2() {
+        return ext2;
+    }
+
+    public void setExt2(String ext2) {
+        this.ext2 = ext2;
+    }
+
+    public String getExt3() {
+        return ext3;
+    }
+
+    public void setExt3(String ext3) {
+        this.ext3 = ext3;
+    }
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        GoodsDetail other = (GoodsDetail) that;
+        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
+            && (this.getGoodsType() == null ? other.getGoodsType() == null : this.getGoodsType().equals(other.getGoodsType()))
+            && (this.getName() == null ? other.getName() == null : this.getName().equals(other.getName()))
+            && (this.getListDescribe() == null ? other.getListDescribe() == null : this.getListDescribe().equals(other.getListDescribe()))
+            && (this.getGoodsDescribe() == null ? other.getGoodsDescribe() == null : this.getGoodsDescribe().equals(other.getGoodsDescribe()))
+            && (this.getListImg() == null ? other.getListImg() == null : this.getListImg().equals(other.getListImg()))
+            && (this.getBannerImg() == null ? other.getBannerImg() == null : this.getBannerImg().equals(other.getBannerImg()))
+            && (this.getDetailImg() == null ? other.getDetailImg() == null : this.getDetailImg().equals(other.getDetailImg()))
+            && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()))
+            && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()))
+            && (this.getUpdateTime() == null ? other.getUpdateTime() == null : this.getUpdateTime().equals(other.getUpdateTime()))
+            && (this.getOpId() == null ? other.getOpId() == null : this.getOpId().equals(other.getOpId()))
+            && (this.getOpName() == null ? other.getOpName() == null : this.getOpName().equals(other.getOpName()))
+            && (this.getExt1() == null ? other.getExt1() == null : this.getExt1().equals(other.getExt1()))
+            && (this.getExt2() == null ? other.getExt2() == null : this.getExt2().equals(other.getExt2()))
+            && (this.getExt3() == null ? other.getExt3() == null : this.getExt3().equals(other.getExt3()));
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
+        result = prime * result + ((getGoodsType() == null) ? 0 : getGoodsType().hashCode());
+        result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
+        result = prime * result + ((getListDescribe() == null) ? 0 : getListDescribe().hashCode());
+        result = prime * result + ((getGoodsDescribe() == null) ? 0 : getGoodsDescribe().hashCode());
+        result = prime * result + ((getListImg() == null) ? 0 : getListImg().hashCode());
+        result = prime * result + ((getBannerImg() == null) ? 0 : getBannerImg().hashCode());
+        result = prime * result + ((getDetailImg() == null) ? 0 : getDetailImg().hashCode());
+        result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
+        result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode());
+        result = prime * result + ((getUpdateTime() == null) ? 0 : getUpdateTime().hashCode());
+        result = prime * result + ((getOpId() == null) ? 0 : getOpId().hashCode());
+        result = prime * result + ((getOpName() == null) ? 0 : getOpName().hashCode());
+        result = prime * result + ((getExt1() == null) ? 0 : getExt1().hashCode());
+        result = prime * result + ((getExt2() == null) ? 0 : getExt2().hashCode());
+        result = prime * result + ((getExt3() == null) ? 0 : getExt3().hashCode());
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", goodsType=").append(goodsType);
+        sb.append(", name=").append(name);
+        sb.append(", listDescribe=").append(listDescribe);
+        sb.append(", goodsDescribe=").append(goodsDescribe);
+        sb.append(", listImg=").append(listImg);
+        sb.append(", bannerImg=").append(bannerImg);
+        sb.append(", detailImg=").append(detailImg);
+        sb.append(", status=").append(status);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append(", opId=").append(opId);
+        sb.append(", opName=").append(opName);
+        sb.append(", ext1=").append(ext1);
+        sb.append(", ext2=").append(ext2);
+        sb.append(", ext3=").append(ext3);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}
\ No newline at end of file
diff --git a/hai-service/src/main/java/com/hai/entity/GoodsDetailExample.java b/hai-service/src/main/java/com/hai/entity/GoodsDetailExample.java
new file mode 100644
index 00000000..1f47d30e
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/entity/GoodsDetailExample.java
@@ -0,0 +1,1283 @@
+package com.hai.entity;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class GoodsDetailExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    private Integer limit;
+
+    private Long offset;
+
+    public GoodsDetailExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    public void setLimit(Integer limit) {
+        this.limit = limit;
+    }
+
+    public Integer getLimit() {
+        return limit;
+    }
+
+    public void setOffset(Long offset) {
+        this.offset = offset;
+    }
+
+    public Long getOffset() {
+        return offset;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Long value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Long value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Long value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Long value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Long value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Long> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Long> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Long value1, Long value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Long value1, Long value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsTypeIsNull() {
+            addCriterion("goods_type is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsTypeIsNotNull() {
+            addCriterion("goods_type is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsTypeEqualTo(Long value) {
+            addCriterion("goods_type =", value, "goodsType");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsTypeNotEqualTo(Long value) {
+            addCriterion("goods_type <>", value, "goodsType");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsTypeGreaterThan(Long value) {
+            addCriterion("goods_type >", value, "goodsType");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsTypeGreaterThanOrEqualTo(Long value) {
+            addCriterion("goods_type >=", value, "goodsType");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsTypeLessThan(Long value) {
+            addCriterion("goods_type <", value, "goodsType");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsTypeLessThanOrEqualTo(Long value) {
+            addCriterion("goods_type <=", value, "goodsType");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsTypeIn(List<Long> values) {
+            addCriterion("goods_type in", values, "goodsType");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsTypeNotIn(List<Long> values) {
+            addCriterion("goods_type not in", values, "goodsType");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsTypeBetween(Long value1, Long value2) {
+            addCriterion("goods_type between", value1, value2, "goodsType");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsTypeNotBetween(Long value1, Long value2) {
+            addCriterion("goods_type not between", value1, value2, "goodsType");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIsNull() {
+            addCriterion("`name` is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIsNotNull() {
+            addCriterion("`name` is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameEqualTo(String value) {
+            addCriterion("`name` =", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotEqualTo(String value) {
+            addCriterion("`name` <>", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameGreaterThan(String value) {
+            addCriterion("`name` >", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameGreaterThanOrEqualTo(String value) {
+            addCriterion("`name` >=", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLessThan(String value) {
+            addCriterion("`name` <", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLessThanOrEqualTo(String value) {
+            addCriterion("`name` <=", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLike(String value) {
+            addCriterion("`name` like", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotLike(String value) {
+            addCriterion("`name` not like", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIn(List<String> values) {
+            addCriterion("`name` in", values, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotIn(List<String> values) {
+            addCriterion("`name` not in", values, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameBetween(String value1, String value2) {
+            addCriterion("`name` between", value1, value2, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotBetween(String value1, String value2) {
+            addCriterion("`name` not between", value1, value2, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andListDescribeIsNull() {
+            addCriterion("list_describe is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andListDescribeIsNotNull() {
+            addCriterion("list_describe is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andListDescribeEqualTo(String value) {
+            addCriterion("list_describe =", value, "listDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andListDescribeNotEqualTo(String value) {
+            addCriterion("list_describe <>", value, "listDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andListDescribeGreaterThan(String value) {
+            addCriterion("list_describe >", value, "listDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andListDescribeGreaterThanOrEqualTo(String value) {
+            addCriterion("list_describe >=", value, "listDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andListDescribeLessThan(String value) {
+            addCriterion("list_describe <", value, "listDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andListDescribeLessThanOrEqualTo(String value) {
+            addCriterion("list_describe <=", value, "listDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andListDescribeLike(String value) {
+            addCriterion("list_describe like", value, "listDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andListDescribeNotLike(String value) {
+            addCriterion("list_describe not like", value, "listDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andListDescribeIn(List<String> values) {
+            addCriterion("list_describe in", values, "listDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andListDescribeNotIn(List<String> values) {
+            addCriterion("list_describe not in", values, "listDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andListDescribeBetween(String value1, String value2) {
+            addCriterion("list_describe between", value1, value2, "listDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andListDescribeNotBetween(String value1, String value2) {
+            addCriterion("list_describe not between", value1, value2, "listDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsDescribeIsNull() {
+            addCriterion("goods_describe is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsDescribeIsNotNull() {
+            addCriterion("goods_describe is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsDescribeEqualTo(String value) {
+            addCriterion("goods_describe =", value, "goodsDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsDescribeNotEqualTo(String value) {
+            addCriterion("goods_describe <>", value, "goodsDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsDescribeGreaterThan(String value) {
+            addCriterion("goods_describe >", value, "goodsDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsDescribeGreaterThanOrEqualTo(String value) {
+            addCriterion("goods_describe >=", value, "goodsDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsDescribeLessThan(String value) {
+            addCriterion("goods_describe <", value, "goodsDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsDescribeLessThanOrEqualTo(String value) {
+            addCriterion("goods_describe <=", value, "goodsDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsDescribeLike(String value) {
+            addCriterion("goods_describe like", value, "goodsDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsDescribeNotLike(String value) {
+            addCriterion("goods_describe not like", value, "goodsDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsDescribeIn(List<String> values) {
+            addCriterion("goods_describe in", values, "goodsDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsDescribeNotIn(List<String> values) {
+            addCriterion("goods_describe not in", values, "goodsDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsDescribeBetween(String value1, String value2) {
+            addCriterion("goods_describe between", value1, value2, "goodsDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsDescribeNotBetween(String value1, String value2) {
+            addCriterion("goods_describe not between", value1, value2, "goodsDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andListImgIsNull() {
+            addCriterion("list_img is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andListImgIsNotNull() {
+            addCriterion("list_img is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andListImgEqualTo(String value) {
+            addCriterion("list_img =", value, "listImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andListImgNotEqualTo(String value) {
+            addCriterion("list_img <>", value, "listImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andListImgGreaterThan(String value) {
+            addCriterion("list_img >", value, "listImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andListImgGreaterThanOrEqualTo(String value) {
+            addCriterion("list_img >=", value, "listImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andListImgLessThan(String value) {
+            addCriterion("list_img <", value, "listImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andListImgLessThanOrEqualTo(String value) {
+            addCriterion("list_img <=", value, "listImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andListImgLike(String value) {
+            addCriterion("list_img like", value, "listImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andListImgNotLike(String value) {
+            addCriterion("list_img not like", value, "listImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andListImgIn(List<String> values) {
+            addCriterion("list_img in", values, "listImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andListImgNotIn(List<String> values) {
+            addCriterion("list_img not in", values, "listImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andListImgBetween(String value1, String value2) {
+            addCriterion("list_img between", value1, value2, "listImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andListImgNotBetween(String value1, String value2) {
+            addCriterion("list_img not between", value1, value2, "listImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgIsNull() {
+            addCriterion("banner_img is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgIsNotNull() {
+            addCriterion("banner_img is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgEqualTo(String value) {
+            addCriterion("banner_img =", value, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgNotEqualTo(String value) {
+            addCriterion("banner_img <>", value, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgGreaterThan(String value) {
+            addCriterion("banner_img >", value, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgGreaterThanOrEqualTo(String value) {
+            addCriterion("banner_img >=", value, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgLessThan(String value) {
+            addCriterion("banner_img <", value, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgLessThanOrEqualTo(String value) {
+            addCriterion("banner_img <=", value, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgLike(String value) {
+            addCriterion("banner_img like", value, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgNotLike(String value) {
+            addCriterion("banner_img not like", value, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgIn(List<String> values) {
+            addCriterion("banner_img in", values, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgNotIn(List<String> values) {
+            addCriterion("banner_img not in", values, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgBetween(String value1, String value2) {
+            addCriterion("banner_img between", value1, value2, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgNotBetween(String value1, String value2) {
+            addCriterion("banner_img not between", value1, value2, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andDetailImgIsNull() {
+            addCriterion("detail_img is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDetailImgIsNotNull() {
+            addCriterion("detail_img is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDetailImgEqualTo(String value) {
+            addCriterion("detail_img =", value, "detailImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andDetailImgNotEqualTo(String value) {
+            addCriterion("detail_img <>", value, "detailImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andDetailImgGreaterThan(String value) {
+            addCriterion("detail_img >", value, "detailImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andDetailImgGreaterThanOrEqualTo(String value) {
+            addCriterion("detail_img >=", value, "detailImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andDetailImgLessThan(String value) {
+            addCriterion("detail_img <", value, "detailImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andDetailImgLessThanOrEqualTo(String value) {
+            addCriterion("detail_img <=", value, "detailImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andDetailImgLike(String value) {
+            addCriterion("detail_img like", value, "detailImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andDetailImgNotLike(String value) {
+            addCriterion("detail_img not like", value, "detailImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andDetailImgIn(List<String> values) {
+            addCriterion("detail_img in", values, "detailImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andDetailImgNotIn(List<String> values) {
+            addCriterion("detail_img not in", values, "detailImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andDetailImgBetween(String value1, String value2) {
+            addCriterion("detail_img between", value1, value2, "detailImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andDetailImgNotBetween(String value1, String value2) {
+            addCriterion("detail_img not between", value1, value2, "detailImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNull() {
+            addCriterion("`status` is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNotNull() {
+            addCriterion("`status` is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusEqualTo(Integer value) {
+            addCriterion("`status` =", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotEqualTo(Integer value) {
+            addCriterion("`status` <>", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThan(Integer value) {
+            addCriterion("`status` >", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanOrEqualTo(Integer value) {
+            addCriterion("`status` >=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThan(Integer value) {
+            addCriterion("`status` <", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanOrEqualTo(Integer value) {
+            addCriterion("`status` <=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIn(List<Integer> values) {
+            addCriterion("`status` in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotIn(List<Integer> values) {
+            addCriterion("`status` not in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusBetween(Integer value1, Integer value2) {
+            addCriterion("`status` between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotBetween(Integer value1, Integer value2) {
+            addCriterion("`status` not between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNull() {
+            addCriterion("update_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNotNull() {
+            addCriterion("update_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeEqualTo(Date value) {
+            addCriterion("update_time =", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotEqualTo(Date value) {
+            addCriterion("update_time <>", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThan(Date value) {
+            addCriterion("update_time >", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("update_time >=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThan(Date value) {
+            addCriterion("update_time <", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("update_time <=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIn(List<Date> values) {
+            addCriterion("update_time in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotIn(List<Date> values) {
+            addCriterion("update_time not in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeBetween(Date value1, Date value2) {
+            addCriterion("update_time between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("update_time not between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdIsNull() {
+            addCriterion("op_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdIsNotNull() {
+            addCriterion("op_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdEqualTo(Long value) {
+            addCriterion("op_id =", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdNotEqualTo(Long value) {
+            addCriterion("op_id <>", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdGreaterThan(Long value) {
+            addCriterion("op_id >", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("op_id >=", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdLessThan(Long value) {
+            addCriterion("op_id <", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdLessThanOrEqualTo(Long value) {
+            addCriterion("op_id <=", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdIn(List<Long> values) {
+            addCriterion("op_id in", values, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdNotIn(List<Long> values) {
+            addCriterion("op_id not in", values, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdBetween(Long value1, Long value2) {
+            addCriterion("op_id between", value1, value2, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdNotBetween(Long value1, Long value2) {
+            addCriterion("op_id not between", value1, value2, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameIsNull() {
+            addCriterion("op_name is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameIsNotNull() {
+            addCriterion("op_name is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameEqualTo(String value) {
+            addCriterion("op_name =", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameNotEqualTo(String value) {
+            addCriterion("op_name <>", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameGreaterThan(String value) {
+            addCriterion("op_name >", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameGreaterThanOrEqualTo(String value) {
+            addCriterion("op_name >=", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameLessThan(String value) {
+            addCriterion("op_name <", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameLessThanOrEqualTo(String value) {
+            addCriterion("op_name <=", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameLike(String value) {
+            addCriterion("op_name like", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameNotLike(String value) {
+            addCriterion("op_name not like", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameIn(List<String> values) {
+            addCriterion("op_name in", values, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameNotIn(List<String> values) {
+            addCriterion("op_name not in", values, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameBetween(String value1, String value2) {
+            addCriterion("op_name between", value1, value2, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameNotBetween(String value1, String value2) {
+            addCriterion("op_name not between", value1, value2, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1IsNull() {
+            addCriterion("ext_1 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1IsNotNull() {
+            addCriterion("ext_1 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1EqualTo(String value) {
+            addCriterion("ext_1 =", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1NotEqualTo(String value) {
+            addCriterion("ext_1 <>", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1GreaterThan(String value) {
+            addCriterion("ext_1 >", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1GreaterThanOrEqualTo(String value) {
+            addCriterion("ext_1 >=", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1LessThan(String value) {
+            addCriterion("ext_1 <", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1LessThanOrEqualTo(String value) {
+            addCriterion("ext_1 <=", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1Like(String value) {
+            addCriterion("ext_1 like", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1NotLike(String value) {
+            addCriterion("ext_1 not like", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1In(List<String> values) {
+            addCriterion("ext_1 in", values, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1NotIn(List<String> values) {
+            addCriterion("ext_1 not in", values, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1Between(String value1, String value2) {
+            addCriterion("ext_1 between", value1, value2, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1NotBetween(String value1, String value2) {
+            addCriterion("ext_1 not between", value1, value2, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2IsNull() {
+            addCriterion("ext_2 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2IsNotNull() {
+            addCriterion("ext_2 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2EqualTo(String value) {
+            addCriterion("ext_2 =", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2NotEqualTo(String value) {
+            addCriterion("ext_2 <>", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2GreaterThan(String value) {
+            addCriterion("ext_2 >", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2GreaterThanOrEqualTo(String value) {
+            addCriterion("ext_2 >=", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2LessThan(String value) {
+            addCriterion("ext_2 <", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2LessThanOrEqualTo(String value) {
+            addCriterion("ext_2 <=", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2Like(String value) {
+            addCriterion("ext_2 like", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2NotLike(String value) {
+            addCriterion("ext_2 not like", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2In(List<String> values) {
+            addCriterion("ext_2 in", values, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2NotIn(List<String> values) {
+            addCriterion("ext_2 not in", values, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2Between(String value1, String value2) {
+            addCriterion("ext_2 between", value1, value2, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2NotBetween(String value1, String value2) {
+            addCriterion("ext_2 not between", value1, value2, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3IsNull() {
+            addCriterion("ext_3 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3IsNotNull() {
+            addCriterion("ext_3 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3EqualTo(String value) {
+            addCriterion("ext_3 =", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3NotEqualTo(String value) {
+            addCriterion("ext_3 <>", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3GreaterThan(String value) {
+            addCriterion("ext_3 >", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3GreaterThanOrEqualTo(String value) {
+            addCriterion("ext_3 >=", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3LessThan(String value) {
+            addCriterion("ext_3 <", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3LessThanOrEqualTo(String value) {
+            addCriterion("ext_3 <=", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3Like(String value) {
+            addCriterion("ext_3 like", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3NotLike(String value) {
+            addCriterion("ext_3 not like", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3In(List<String> values) {
+            addCriterion("ext_3 in", values, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3NotIn(List<String> values) {
+            addCriterion("ext_3 not in", values, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3Between(String value1, String value2) {
+            addCriterion("ext_3 between", value1, value2, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3NotBetween(String value1, String value2) {
+            addCriterion("ext_3 not between", value1, value2, "ext3");
+            return (Criteria) this;
+        }
+    }
+
+    /**
+     */
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}
\ No newline at end of file
diff --git a/hai-service/src/main/java/com/hai/entity/GoodsLogistics.java b/hai-service/src/main/java/com/hai/entity/GoodsLogistics.java
new file mode 100644
index 00000000..a7d6cc4b
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/entity/GoodsLogistics.java
@@ -0,0 +1,385 @@
+package com.hai.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * goods_logistics
+ * @author 
+ */
+/**
+ * 
+ * 代码由工具生成
+ * 
+ **/
+public class GoodsLogistics implements Serializable {
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 订单ID
+     */
+    private Long orderId;
+
+    /**
+     * 唯一业务号
+     */
+    private String taskNo;
+
+    /**
+     * 快递单号
+     */
+    private String number;
+
+    /**
+     * 物流状态描述
+     */
+    private String logisticsStatus;
+
+    /**
+     * 物流状态描述
+     */
+    private String logisticsStatusDesc;
+
+    /**
+     * 运单号物流流转当前最新描述
+     */
+    private String theLastMessage;
+
+    /**
+     * 运单号物流流转当前最新变更时间
+     */
+    private Date theLastTime;
+
+    /**
+     * 从揽收到送达所耗时间
+     */
+    private String takeTime;
+
+    /**
+     * 快递员
+     */
+    private String courier;
+
+    /**
+     * 快递员联系方式
+     */
+    private String courierPhone;
+
+    /**
+     * 物流明细
+     */
+    private String logisticsTraceDetails;
+
+    /**
+     * 快递公司名称
+     */
+    private String expressCompanyName;
+
+    /**
+     * 状态:0:删除 1:正常
+     */
+    private Integer status;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 操作人员id
+     */
+    private Long opId;
+
+    /**
+     * 操作人员名称
+     */
+    private String opName;
+
+    /**
+     * ext_1
+     */
+    private String ext1;
+
+    /**
+     * ext_2
+     */
+    private String ext2;
+
+    /**
+     * ext_3
+     */
+    private String ext3;
+
+    private static final long serialVersionUID = 1L;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Long getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Long orderId) {
+        this.orderId = orderId;
+    }
+
+    public String getTaskNo() {
+        return taskNo;
+    }
+
+    public void setTaskNo(String taskNo) {
+        this.taskNo = taskNo;
+    }
+
+    public String getNumber() {
+        return number;
+    }
+
+    public void setNumber(String number) {
+        this.number = number;
+    }
+
+    public String getLogisticsStatus() {
+        return logisticsStatus;
+    }
+
+    public void setLogisticsStatus(String logisticsStatus) {
+        this.logisticsStatus = logisticsStatus;
+    }
+
+    public String getLogisticsStatusDesc() {
+        return logisticsStatusDesc;
+    }
+
+    public void setLogisticsStatusDesc(String logisticsStatusDesc) {
+        this.logisticsStatusDesc = logisticsStatusDesc;
+    }
+
+    public String getTheLastMessage() {
+        return theLastMessage;
+    }
+
+    public void setTheLastMessage(String theLastMessage) {
+        this.theLastMessage = theLastMessage;
+    }
+
+    public Date getTheLastTime() {
+        return theLastTime;
+    }
+
+    public void setTheLastTime(Date theLastTime) {
+        this.theLastTime = theLastTime;
+    }
+
+    public String getTakeTime() {
+        return takeTime;
+    }
+
+    public void setTakeTime(String takeTime) {
+        this.takeTime = takeTime;
+    }
+
+    public String getCourier() {
+        return courier;
+    }
+
+    public void setCourier(String courier) {
+        this.courier = courier;
+    }
+
+    public String getCourierPhone() {
+        return courierPhone;
+    }
+
+    public void setCourierPhone(String courierPhone) {
+        this.courierPhone = courierPhone;
+    }
+
+    public String getLogisticsTraceDetails() {
+        return logisticsTraceDetails;
+    }
+
+    public void setLogisticsTraceDetails(String logisticsTraceDetails) {
+        this.logisticsTraceDetails = logisticsTraceDetails;
+    }
+
+    public String getExpressCompanyName() {
+        return expressCompanyName;
+    }
+
+    public void setExpressCompanyName(String expressCompanyName) {
+        this.expressCompanyName = expressCompanyName;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Long getOpId() {
+        return opId;
+    }
+
+    public void setOpId(Long opId) {
+        this.opId = opId;
+    }
+
+    public String getOpName() {
+        return opName;
+    }
+
+    public void setOpName(String opName) {
+        this.opName = opName;
+    }
+
+    public String getExt1() {
+        return ext1;
+    }
+
+    public void setExt1(String ext1) {
+        this.ext1 = ext1;
+    }
+
+    public String getExt2() {
+        return ext2;
+    }
+
+    public void setExt2(String ext2) {
+        this.ext2 = ext2;
+    }
+
+    public String getExt3() {
+        return ext3;
+    }
+
+    public void setExt3(String ext3) {
+        this.ext3 = ext3;
+    }
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        GoodsLogistics other = (GoodsLogistics) that;
+        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
+            && (this.getUserId() == null ? other.getUserId() == null : this.getUserId().equals(other.getUserId()))
+            && (this.getOrderId() == null ? other.getOrderId() == null : this.getOrderId().equals(other.getOrderId()))
+            && (this.getTaskNo() == null ? other.getTaskNo() == null : this.getTaskNo().equals(other.getTaskNo()))
+            && (this.getNumber() == null ? other.getNumber() == null : this.getNumber().equals(other.getNumber()))
+            && (this.getLogisticsStatus() == null ? other.getLogisticsStatus() == null : this.getLogisticsStatus().equals(other.getLogisticsStatus()))
+            && (this.getLogisticsStatusDesc() == null ? other.getLogisticsStatusDesc() == null : this.getLogisticsStatusDesc().equals(other.getLogisticsStatusDesc()))
+            && (this.getTheLastMessage() == null ? other.getTheLastMessage() == null : this.getTheLastMessage().equals(other.getTheLastMessage()))
+            && (this.getTheLastTime() == null ? other.getTheLastTime() == null : this.getTheLastTime().equals(other.getTheLastTime()))
+            && (this.getTakeTime() == null ? other.getTakeTime() == null : this.getTakeTime().equals(other.getTakeTime()))
+            && (this.getCourier() == null ? other.getCourier() == null : this.getCourier().equals(other.getCourier()))
+            && (this.getCourierPhone() == null ? other.getCourierPhone() == null : this.getCourierPhone().equals(other.getCourierPhone()))
+            && (this.getLogisticsTraceDetails() == null ? other.getLogisticsTraceDetails() == null : this.getLogisticsTraceDetails().equals(other.getLogisticsTraceDetails()))
+            && (this.getExpressCompanyName() == null ? other.getExpressCompanyName() == null : this.getExpressCompanyName().equals(other.getExpressCompanyName()))
+            && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()))
+            && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()))
+            && (this.getOpId() == null ? other.getOpId() == null : this.getOpId().equals(other.getOpId()))
+            && (this.getOpName() == null ? other.getOpName() == null : this.getOpName().equals(other.getOpName()))
+            && (this.getExt1() == null ? other.getExt1() == null : this.getExt1().equals(other.getExt1()))
+            && (this.getExt2() == null ? other.getExt2() == null : this.getExt2().equals(other.getExt2()))
+            && (this.getExt3() == null ? other.getExt3() == null : this.getExt3().equals(other.getExt3()));
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
+        result = prime * result + ((getUserId() == null) ? 0 : getUserId().hashCode());
+        result = prime * result + ((getOrderId() == null) ? 0 : getOrderId().hashCode());
+        result = prime * result + ((getTaskNo() == null) ? 0 : getTaskNo().hashCode());
+        result = prime * result + ((getNumber() == null) ? 0 : getNumber().hashCode());
+        result = prime * result + ((getLogisticsStatus() == null) ? 0 : getLogisticsStatus().hashCode());
+        result = prime * result + ((getLogisticsStatusDesc() == null) ? 0 : getLogisticsStatusDesc().hashCode());
+        result = prime * result + ((getTheLastMessage() == null) ? 0 : getTheLastMessage().hashCode());
+        result = prime * result + ((getTheLastTime() == null) ? 0 : getTheLastTime().hashCode());
+        result = prime * result + ((getTakeTime() == null) ? 0 : getTakeTime().hashCode());
+        result = prime * result + ((getCourier() == null) ? 0 : getCourier().hashCode());
+        result = prime * result + ((getCourierPhone() == null) ? 0 : getCourierPhone().hashCode());
+        result = prime * result + ((getLogisticsTraceDetails() == null) ? 0 : getLogisticsTraceDetails().hashCode());
+        result = prime * result + ((getExpressCompanyName() == null) ? 0 : getExpressCompanyName().hashCode());
+        result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
+        result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode());
+        result = prime * result + ((getOpId() == null) ? 0 : getOpId().hashCode());
+        result = prime * result + ((getOpName() == null) ? 0 : getOpName().hashCode());
+        result = prime * result + ((getExt1() == null) ? 0 : getExt1().hashCode());
+        result = prime * result + ((getExt2() == null) ? 0 : getExt2().hashCode());
+        result = prime * result + ((getExt3() == null) ? 0 : getExt3().hashCode());
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", userId=").append(userId);
+        sb.append(", orderId=").append(orderId);
+        sb.append(", taskNo=").append(taskNo);
+        sb.append(", number=").append(number);
+        sb.append(", logisticsStatus=").append(logisticsStatus);
+        sb.append(", logisticsStatusDesc=").append(logisticsStatusDesc);
+        sb.append(", theLastMessage=").append(theLastMessage);
+        sb.append(", theLastTime=").append(theLastTime);
+        sb.append(", takeTime=").append(takeTime);
+        sb.append(", courier=").append(courier);
+        sb.append(", courierPhone=").append(courierPhone);
+        sb.append(", logisticsTraceDetails=").append(logisticsTraceDetails);
+        sb.append(", expressCompanyName=").append(expressCompanyName);
+        sb.append(", status=").append(status);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", opId=").append(opId);
+        sb.append(", opName=").append(opName);
+        sb.append(", ext1=").append(ext1);
+        sb.append(", ext2=").append(ext2);
+        sb.append(", ext3=").append(ext3);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}
\ No newline at end of file
diff --git a/hai-service/src/main/java/com/hai/entity/GoodsLogisticsExample.java b/hai-service/src/main/java/com/hai/entity/GoodsLogisticsExample.java
new file mode 100644
index 00000000..7d94e874
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/entity/GoodsLogisticsExample.java
@@ -0,0 +1,1623 @@
+package com.hai.entity;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class GoodsLogisticsExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    private Integer limit;
+
+    private Long offset;
+
+    public GoodsLogisticsExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    public void setLimit(Integer limit) {
+        this.limit = limit;
+    }
+
+    public Integer getLimit() {
+        return limit;
+    }
+
+    public void setOffset(Long offset) {
+        this.offset = offset;
+    }
+
+    public Long getOffset() {
+        return offset;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Long value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Long value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Long value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Long value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Long value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Long> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Long> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Long value1, Long value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Long value1, Long value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdIsNull() {
+            addCriterion("user_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdIsNotNull() {
+            addCriterion("user_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdEqualTo(Long value) {
+            addCriterion("user_id =", value, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdNotEqualTo(Long value) {
+            addCriterion("user_id <>", value, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdGreaterThan(Long value) {
+            addCriterion("user_id >", value, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("user_id >=", value, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdLessThan(Long value) {
+            addCriterion("user_id <", value, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdLessThanOrEqualTo(Long value) {
+            addCriterion("user_id <=", value, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdIn(List<Long> values) {
+            addCriterion("user_id in", values, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdNotIn(List<Long> values) {
+            addCriterion("user_id not in", values, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdBetween(Long value1, Long value2) {
+            addCriterion("user_id between", value1, value2, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdNotBetween(Long value1, Long value2) {
+            addCriterion("user_id not between", value1, value2, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrderIdIsNull() {
+            addCriterion("order_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrderIdIsNotNull() {
+            addCriterion("order_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrderIdEqualTo(Long value) {
+            addCriterion("order_id =", value, "orderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrderIdNotEqualTo(Long value) {
+            addCriterion("order_id <>", value, "orderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrderIdGreaterThan(Long value) {
+            addCriterion("order_id >", value, "orderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrderIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("order_id >=", value, "orderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrderIdLessThan(Long value) {
+            addCriterion("order_id <", value, "orderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrderIdLessThanOrEqualTo(Long value) {
+            addCriterion("order_id <=", value, "orderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrderIdIn(List<Long> values) {
+            addCriterion("order_id in", values, "orderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrderIdNotIn(List<Long> values) {
+            addCriterion("order_id not in", values, "orderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrderIdBetween(Long value1, Long value2) {
+            addCriterion("order_id between", value1, value2, "orderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOrderIdNotBetween(Long value1, Long value2) {
+            addCriterion("order_id not between", value1, value2, "orderId");
+            return (Criteria) this;
+        }
+
+        public Criteria andTaskNoIsNull() {
+            addCriterion("task_no is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTaskNoIsNotNull() {
+            addCriterion("task_no is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTaskNoEqualTo(String value) {
+            addCriterion("task_no =", value, "taskNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andTaskNoNotEqualTo(String value) {
+            addCriterion("task_no <>", value, "taskNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andTaskNoGreaterThan(String value) {
+            addCriterion("task_no >", value, "taskNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andTaskNoGreaterThanOrEqualTo(String value) {
+            addCriterion("task_no >=", value, "taskNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andTaskNoLessThan(String value) {
+            addCriterion("task_no <", value, "taskNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andTaskNoLessThanOrEqualTo(String value) {
+            addCriterion("task_no <=", value, "taskNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andTaskNoLike(String value) {
+            addCriterion("task_no like", value, "taskNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andTaskNoNotLike(String value) {
+            addCriterion("task_no not like", value, "taskNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andTaskNoIn(List<String> values) {
+            addCriterion("task_no in", values, "taskNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andTaskNoNotIn(List<String> values) {
+            addCriterion("task_no not in", values, "taskNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andTaskNoBetween(String value1, String value2) {
+            addCriterion("task_no between", value1, value2, "taskNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andTaskNoNotBetween(String value1, String value2) {
+            addCriterion("task_no not between", value1, value2, "taskNo");
+            return (Criteria) this;
+        }
+
+        public Criteria andNumberIsNull() {
+            addCriterion("`number` is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNumberIsNotNull() {
+            addCriterion("`number` is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNumberEqualTo(String value) {
+            addCriterion("`number` =", value, "number");
+            return (Criteria) this;
+        }
+
+        public Criteria andNumberNotEqualTo(String value) {
+            addCriterion("`number` <>", value, "number");
+            return (Criteria) this;
+        }
+
+        public Criteria andNumberGreaterThan(String value) {
+            addCriterion("`number` >", value, "number");
+            return (Criteria) this;
+        }
+
+        public Criteria andNumberGreaterThanOrEqualTo(String value) {
+            addCriterion("`number` >=", value, "number");
+            return (Criteria) this;
+        }
+
+        public Criteria andNumberLessThan(String value) {
+            addCriterion("`number` <", value, "number");
+            return (Criteria) this;
+        }
+
+        public Criteria andNumberLessThanOrEqualTo(String value) {
+            addCriterion("`number` <=", value, "number");
+            return (Criteria) this;
+        }
+
+        public Criteria andNumberLike(String value) {
+            addCriterion("`number` like", value, "number");
+            return (Criteria) this;
+        }
+
+        public Criteria andNumberNotLike(String value) {
+            addCriterion("`number` not like", value, "number");
+            return (Criteria) this;
+        }
+
+        public Criteria andNumberIn(List<String> values) {
+            addCriterion("`number` in", values, "number");
+            return (Criteria) this;
+        }
+
+        public Criteria andNumberNotIn(List<String> values) {
+            addCriterion("`number` not in", values, "number");
+            return (Criteria) this;
+        }
+
+        public Criteria andNumberBetween(String value1, String value2) {
+            addCriterion("`number` between", value1, value2, "number");
+            return (Criteria) this;
+        }
+
+        public Criteria andNumberNotBetween(String value1, String value2) {
+            addCriterion("`number` not between", value1, value2, "number");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusIsNull() {
+            addCriterion("logistics_status is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusIsNotNull() {
+            addCriterion("logistics_status is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusEqualTo(String value) {
+            addCriterion("logistics_status =", value, "logisticsStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusNotEqualTo(String value) {
+            addCriterion("logistics_status <>", value, "logisticsStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusGreaterThan(String value) {
+            addCriterion("logistics_status >", value, "logisticsStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusGreaterThanOrEqualTo(String value) {
+            addCriterion("logistics_status >=", value, "logisticsStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusLessThan(String value) {
+            addCriterion("logistics_status <", value, "logisticsStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusLessThanOrEqualTo(String value) {
+            addCriterion("logistics_status <=", value, "logisticsStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusLike(String value) {
+            addCriterion("logistics_status like", value, "logisticsStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusNotLike(String value) {
+            addCriterion("logistics_status not like", value, "logisticsStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusIn(List<String> values) {
+            addCriterion("logistics_status in", values, "logisticsStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusNotIn(List<String> values) {
+            addCriterion("logistics_status not in", values, "logisticsStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusBetween(String value1, String value2) {
+            addCriterion("logistics_status between", value1, value2, "logisticsStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusNotBetween(String value1, String value2) {
+            addCriterion("logistics_status not between", value1, value2, "logisticsStatus");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusDescIsNull() {
+            addCriterion("logistics_status_desc is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusDescIsNotNull() {
+            addCriterion("logistics_status_desc is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusDescEqualTo(String value) {
+            addCriterion("logistics_status_desc =", value, "logisticsStatusDesc");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusDescNotEqualTo(String value) {
+            addCriterion("logistics_status_desc <>", value, "logisticsStatusDesc");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusDescGreaterThan(String value) {
+            addCriterion("logistics_status_desc >", value, "logisticsStatusDesc");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusDescGreaterThanOrEqualTo(String value) {
+            addCriterion("logistics_status_desc >=", value, "logisticsStatusDesc");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusDescLessThan(String value) {
+            addCriterion("logistics_status_desc <", value, "logisticsStatusDesc");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusDescLessThanOrEqualTo(String value) {
+            addCriterion("logistics_status_desc <=", value, "logisticsStatusDesc");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusDescLike(String value) {
+            addCriterion("logistics_status_desc like", value, "logisticsStatusDesc");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusDescNotLike(String value) {
+            addCriterion("logistics_status_desc not like", value, "logisticsStatusDesc");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusDescIn(List<String> values) {
+            addCriterion("logistics_status_desc in", values, "logisticsStatusDesc");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusDescNotIn(List<String> values) {
+            addCriterion("logistics_status_desc not in", values, "logisticsStatusDesc");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusDescBetween(String value1, String value2) {
+            addCriterion("logistics_status_desc between", value1, value2, "logisticsStatusDesc");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsStatusDescNotBetween(String value1, String value2) {
+            addCriterion("logistics_status_desc not between", value1, value2, "logisticsStatusDesc");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastMessageIsNull() {
+            addCriterion("the_last_message is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastMessageIsNotNull() {
+            addCriterion("the_last_message is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastMessageEqualTo(String value) {
+            addCriterion("the_last_message =", value, "theLastMessage");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastMessageNotEqualTo(String value) {
+            addCriterion("the_last_message <>", value, "theLastMessage");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastMessageGreaterThan(String value) {
+            addCriterion("the_last_message >", value, "theLastMessage");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastMessageGreaterThanOrEqualTo(String value) {
+            addCriterion("the_last_message >=", value, "theLastMessage");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastMessageLessThan(String value) {
+            addCriterion("the_last_message <", value, "theLastMessage");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastMessageLessThanOrEqualTo(String value) {
+            addCriterion("the_last_message <=", value, "theLastMessage");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastMessageLike(String value) {
+            addCriterion("the_last_message like", value, "theLastMessage");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastMessageNotLike(String value) {
+            addCriterion("the_last_message not like", value, "theLastMessage");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastMessageIn(List<String> values) {
+            addCriterion("the_last_message in", values, "theLastMessage");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastMessageNotIn(List<String> values) {
+            addCriterion("the_last_message not in", values, "theLastMessage");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastMessageBetween(String value1, String value2) {
+            addCriterion("the_last_message between", value1, value2, "theLastMessage");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastMessageNotBetween(String value1, String value2) {
+            addCriterion("the_last_message not between", value1, value2, "theLastMessage");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastTimeIsNull() {
+            addCriterion("the_last_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastTimeIsNotNull() {
+            addCriterion("the_last_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastTimeEqualTo(Date value) {
+            addCriterion("the_last_time =", value, "theLastTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastTimeNotEqualTo(Date value) {
+            addCriterion("the_last_time <>", value, "theLastTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastTimeGreaterThan(Date value) {
+            addCriterion("the_last_time >", value, "theLastTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("the_last_time >=", value, "theLastTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastTimeLessThan(Date value) {
+            addCriterion("the_last_time <", value, "theLastTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastTimeLessThanOrEqualTo(Date value) {
+            addCriterion("the_last_time <=", value, "theLastTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastTimeIn(List<Date> values) {
+            addCriterion("the_last_time in", values, "theLastTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastTimeNotIn(List<Date> values) {
+            addCriterion("the_last_time not in", values, "theLastTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastTimeBetween(Date value1, Date value2) {
+            addCriterion("the_last_time between", value1, value2, "theLastTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTheLastTimeNotBetween(Date value1, Date value2) {
+            addCriterion("the_last_time not between", value1, value2, "theLastTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTakeTimeIsNull() {
+            addCriterion("take_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTakeTimeIsNotNull() {
+            addCriterion("take_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andTakeTimeEqualTo(String value) {
+            addCriterion("take_time =", value, "takeTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTakeTimeNotEqualTo(String value) {
+            addCriterion("take_time <>", value, "takeTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTakeTimeGreaterThan(String value) {
+            addCriterion("take_time >", value, "takeTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTakeTimeGreaterThanOrEqualTo(String value) {
+            addCriterion("take_time >=", value, "takeTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTakeTimeLessThan(String value) {
+            addCriterion("take_time <", value, "takeTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTakeTimeLessThanOrEqualTo(String value) {
+            addCriterion("take_time <=", value, "takeTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTakeTimeLike(String value) {
+            addCriterion("take_time like", value, "takeTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTakeTimeNotLike(String value) {
+            addCriterion("take_time not like", value, "takeTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTakeTimeIn(List<String> values) {
+            addCriterion("take_time in", values, "takeTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTakeTimeNotIn(List<String> values) {
+            addCriterion("take_time not in", values, "takeTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTakeTimeBetween(String value1, String value2) {
+            addCriterion("take_time between", value1, value2, "takeTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andTakeTimeNotBetween(String value1, String value2) {
+            addCriterion("take_time not between", value1, value2, "takeTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierIsNull() {
+            addCriterion("courier is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierIsNotNull() {
+            addCriterion("courier is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierEqualTo(String value) {
+            addCriterion("courier =", value, "courier");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierNotEqualTo(String value) {
+            addCriterion("courier <>", value, "courier");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierGreaterThan(String value) {
+            addCriterion("courier >", value, "courier");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierGreaterThanOrEqualTo(String value) {
+            addCriterion("courier >=", value, "courier");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierLessThan(String value) {
+            addCriterion("courier <", value, "courier");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierLessThanOrEqualTo(String value) {
+            addCriterion("courier <=", value, "courier");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierLike(String value) {
+            addCriterion("courier like", value, "courier");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierNotLike(String value) {
+            addCriterion("courier not like", value, "courier");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierIn(List<String> values) {
+            addCriterion("courier in", values, "courier");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierNotIn(List<String> values) {
+            addCriterion("courier not in", values, "courier");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierBetween(String value1, String value2) {
+            addCriterion("courier between", value1, value2, "courier");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierNotBetween(String value1, String value2) {
+            addCriterion("courier not between", value1, value2, "courier");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierPhoneIsNull() {
+            addCriterion("courier_phone is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierPhoneIsNotNull() {
+            addCriterion("courier_phone is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierPhoneEqualTo(String value) {
+            addCriterion("courier_phone =", value, "courierPhone");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierPhoneNotEqualTo(String value) {
+            addCriterion("courier_phone <>", value, "courierPhone");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierPhoneGreaterThan(String value) {
+            addCriterion("courier_phone >", value, "courierPhone");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierPhoneGreaterThanOrEqualTo(String value) {
+            addCriterion("courier_phone >=", value, "courierPhone");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierPhoneLessThan(String value) {
+            addCriterion("courier_phone <", value, "courierPhone");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierPhoneLessThanOrEqualTo(String value) {
+            addCriterion("courier_phone <=", value, "courierPhone");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierPhoneLike(String value) {
+            addCriterion("courier_phone like", value, "courierPhone");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierPhoneNotLike(String value) {
+            addCriterion("courier_phone not like", value, "courierPhone");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierPhoneIn(List<String> values) {
+            addCriterion("courier_phone in", values, "courierPhone");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierPhoneNotIn(List<String> values) {
+            addCriterion("courier_phone not in", values, "courierPhone");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierPhoneBetween(String value1, String value2) {
+            addCriterion("courier_phone between", value1, value2, "courierPhone");
+            return (Criteria) this;
+        }
+
+        public Criteria andCourierPhoneNotBetween(String value1, String value2) {
+            addCriterion("courier_phone not between", value1, value2, "courierPhone");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsTraceDetailsIsNull() {
+            addCriterion("logistics_trace_details is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsTraceDetailsIsNotNull() {
+            addCriterion("logistics_trace_details is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsTraceDetailsEqualTo(String value) {
+            addCriterion("logistics_trace_details =", value, "logisticsTraceDetails");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsTraceDetailsNotEqualTo(String value) {
+            addCriterion("logistics_trace_details <>", value, "logisticsTraceDetails");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsTraceDetailsGreaterThan(String value) {
+            addCriterion("logistics_trace_details >", value, "logisticsTraceDetails");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsTraceDetailsGreaterThanOrEqualTo(String value) {
+            addCriterion("logistics_trace_details >=", value, "logisticsTraceDetails");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsTraceDetailsLessThan(String value) {
+            addCriterion("logistics_trace_details <", value, "logisticsTraceDetails");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsTraceDetailsLessThanOrEqualTo(String value) {
+            addCriterion("logistics_trace_details <=", value, "logisticsTraceDetails");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsTraceDetailsLike(String value) {
+            addCriterion("logistics_trace_details like", value, "logisticsTraceDetails");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsTraceDetailsNotLike(String value) {
+            addCriterion("logistics_trace_details not like", value, "logisticsTraceDetails");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsTraceDetailsIn(List<String> values) {
+            addCriterion("logistics_trace_details in", values, "logisticsTraceDetails");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsTraceDetailsNotIn(List<String> values) {
+            addCriterion("logistics_trace_details not in", values, "logisticsTraceDetails");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsTraceDetailsBetween(String value1, String value2) {
+            addCriterion("logistics_trace_details between", value1, value2, "logisticsTraceDetails");
+            return (Criteria) this;
+        }
+
+        public Criteria andLogisticsTraceDetailsNotBetween(String value1, String value2) {
+            addCriterion("logistics_trace_details not between", value1, value2, "logisticsTraceDetails");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpressCompanyNameIsNull() {
+            addCriterion("express_company_name is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpressCompanyNameIsNotNull() {
+            addCriterion("express_company_name is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpressCompanyNameEqualTo(String value) {
+            addCriterion("express_company_name =", value, "expressCompanyName");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpressCompanyNameNotEqualTo(String value) {
+            addCriterion("express_company_name <>", value, "expressCompanyName");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpressCompanyNameGreaterThan(String value) {
+            addCriterion("express_company_name >", value, "expressCompanyName");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpressCompanyNameGreaterThanOrEqualTo(String value) {
+            addCriterion("express_company_name >=", value, "expressCompanyName");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpressCompanyNameLessThan(String value) {
+            addCriterion("express_company_name <", value, "expressCompanyName");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpressCompanyNameLessThanOrEqualTo(String value) {
+            addCriterion("express_company_name <=", value, "expressCompanyName");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpressCompanyNameLike(String value) {
+            addCriterion("express_company_name like", value, "expressCompanyName");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpressCompanyNameNotLike(String value) {
+            addCriterion("express_company_name not like", value, "expressCompanyName");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpressCompanyNameIn(List<String> values) {
+            addCriterion("express_company_name in", values, "expressCompanyName");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpressCompanyNameNotIn(List<String> values) {
+            addCriterion("express_company_name not in", values, "expressCompanyName");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpressCompanyNameBetween(String value1, String value2) {
+            addCriterion("express_company_name between", value1, value2, "expressCompanyName");
+            return (Criteria) this;
+        }
+
+        public Criteria andExpressCompanyNameNotBetween(String value1, String value2) {
+            addCriterion("express_company_name not between", value1, value2, "expressCompanyName");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNull() {
+            addCriterion("`status` is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNotNull() {
+            addCriterion("`status` is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusEqualTo(Integer value) {
+            addCriterion("`status` =", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotEqualTo(Integer value) {
+            addCriterion("`status` <>", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThan(Integer value) {
+            addCriterion("`status` >", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanOrEqualTo(Integer value) {
+            addCriterion("`status` >=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThan(Integer value) {
+            addCriterion("`status` <", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanOrEqualTo(Integer value) {
+            addCriterion("`status` <=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIn(List<Integer> values) {
+            addCriterion("`status` in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotIn(List<Integer> values) {
+            addCriterion("`status` not in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusBetween(Integer value1, Integer value2) {
+            addCriterion("`status` between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotBetween(Integer value1, Integer value2) {
+            addCriterion("`status` not between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdIsNull() {
+            addCriterion("op_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdIsNotNull() {
+            addCriterion("op_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdEqualTo(Long value) {
+            addCriterion("op_id =", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdNotEqualTo(Long value) {
+            addCriterion("op_id <>", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdGreaterThan(Long value) {
+            addCriterion("op_id >", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("op_id >=", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdLessThan(Long value) {
+            addCriterion("op_id <", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdLessThanOrEqualTo(Long value) {
+            addCriterion("op_id <=", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdIn(List<Long> values) {
+            addCriterion("op_id in", values, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdNotIn(List<Long> values) {
+            addCriterion("op_id not in", values, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdBetween(Long value1, Long value2) {
+            addCriterion("op_id between", value1, value2, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdNotBetween(Long value1, Long value2) {
+            addCriterion("op_id not between", value1, value2, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameIsNull() {
+            addCriterion("op_name is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameIsNotNull() {
+            addCriterion("op_name is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameEqualTo(String value) {
+            addCriterion("op_name =", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameNotEqualTo(String value) {
+            addCriterion("op_name <>", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameGreaterThan(String value) {
+            addCriterion("op_name >", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameGreaterThanOrEqualTo(String value) {
+            addCriterion("op_name >=", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameLessThan(String value) {
+            addCriterion("op_name <", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameLessThanOrEqualTo(String value) {
+            addCriterion("op_name <=", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameLike(String value) {
+            addCriterion("op_name like", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameNotLike(String value) {
+            addCriterion("op_name not like", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameIn(List<String> values) {
+            addCriterion("op_name in", values, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameNotIn(List<String> values) {
+            addCriterion("op_name not in", values, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameBetween(String value1, String value2) {
+            addCriterion("op_name between", value1, value2, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameNotBetween(String value1, String value2) {
+            addCriterion("op_name not between", value1, value2, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1IsNull() {
+            addCriterion("ext_1 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1IsNotNull() {
+            addCriterion("ext_1 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1EqualTo(String value) {
+            addCriterion("ext_1 =", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1NotEqualTo(String value) {
+            addCriterion("ext_1 <>", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1GreaterThan(String value) {
+            addCriterion("ext_1 >", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1GreaterThanOrEqualTo(String value) {
+            addCriterion("ext_1 >=", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1LessThan(String value) {
+            addCriterion("ext_1 <", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1LessThanOrEqualTo(String value) {
+            addCriterion("ext_1 <=", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1Like(String value) {
+            addCriterion("ext_1 like", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1NotLike(String value) {
+            addCriterion("ext_1 not like", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1In(List<String> values) {
+            addCriterion("ext_1 in", values, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1NotIn(List<String> values) {
+            addCriterion("ext_1 not in", values, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1Between(String value1, String value2) {
+            addCriterion("ext_1 between", value1, value2, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1NotBetween(String value1, String value2) {
+            addCriterion("ext_1 not between", value1, value2, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2IsNull() {
+            addCriterion("ext_2 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2IsNotNull() {
+            addCriterion("ext_2 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2EqualTo(String value) {
+            addCriterion("ext_2 =", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2NotEqualTo(String value) {
+            addCriterion("ext_2 <>", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2GreaterThan(String value) {
+            addCriterion("ext_2 >", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2GreaterThanOrEqualTo(String value) {
+            addCriterion("ext_2 >=", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2LessThan(String value) {
+            addCriterion("ext_2 <", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2LessThanOrEqualTo(String value) {
+            addCriterion("ext_2 <=", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2Like(String value) {
+            addCriterion("ext_2 like", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2NotLike(String value) {
+            addCriterion("ext_2 not like", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2In(List<String> values) {
+            addCriterion("ext_2 in", values, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2NotIn(List<String> values) {
+            addCriterion("ext_2 not in", values, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2Between(String value1, String value2) {
+            addCriterion("ext_2 between", value1, value2, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2NotBetween(String value1, String value2) {
+            addCriterion("ext_2 not between", value1, value2, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3IsNull() {
+            addCriterion("ext_3 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3IsNotNull() {
+            addCriterion("ext_3 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3EqualTo(String value) {
+            addCriterion("ext_3 =", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3NotEqualTo(String value) {
+            addCriterion("ext_3 <>", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3GreaterThan(String value) {
+            addCriterion("ext_3 >", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3GreaterThanOrEqualTo(String value) {
+            addCriterion("ext_3 >=", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3LessThan(String value) {
+            addCriterion("ext_3 <", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3LessThanOrEqualTo(String value) {
+            addCriterion("ext_3 <=", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3Like(String value) {
+            addCriterion("ext_3 like", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3NotLike(String value) {
+            addCriterion("ext_3 not like", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3In(List<String> values) {
+            addCriterion("ext_3 in", values, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3NotIn(List<String> values) {
+            addCriterion("ext_3 not in", values, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3Between(String value1, String value2) {
+            addCriterion("ext_3 between", value1, value2, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3NotBetween(String value1, String value2) {
+            addCriterion("ext_3 not between", value1, value2, "ext3");
+            return (Criteria) this;
+        }
+    }
+
+    /**
+     */
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}
\ No newline at end of file
diff --git a/hai-service/src/main/java/com/hai/entity/GoodsReview.java b/hai-service/src/main/java/com/hai/entity/GoodsReview.java
new file mode 100644
index 00000000..7e0e0013
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/entity/GoodsReview.java
@@ -0,0 +1,257 @@
+package com.hai.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * goods_review
+ * @author 
+ */
+/**
+ * 
+ * 代码由工具生成
+ * 
+ **/
+public class GoodsReview implements Serializable {
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 商品id
+     */
+    private Long goodsId;
+
+    /**
+     * sku_id
+     */
+    private Long skuId;
+
+    /**
+     * 描述
+     */
+    private String reviewDescribe;
+
+    /**
+     * 图片
+     */
+    private String showImg;
+
+    /**
+     * 状态:0:删除 1:正常
+     */
+    private Integer status;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 操作人员id
+     */
+    private Long opId;
+
+    /**
+     * 操作人员名称
+     */
+    private String opName;
+
+    /**
+     * ext_1
+     */
+    private String ext1;
+
+    /**
+     * ext_2
+     */
+    private String ext2;
+
+    /**
+     * ext_3
+     */
+    private String ext3;
+
+    private static final long serialVersionUID = 1L;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Long getGoodsId() {
+        return goodsId;
+    }
+
+    public void setGoodsId(Long goodsId) {
+        this.goodsId = goodsId;
+    }
+
+    public Long getSkuId() {
+        return skuId;
+    }
+
+    public void setSkuId(Long skuId) {
+        this.skuId = skuId;
+    }
+
+    public String getReviewDescribe() {
+        return reviewDescribe;
+    }
+
+    public void setReviewDescribe(String reviewDescribe) {
+        this.reviewDescribe = reviewDescribe;
+    }
+
+    public String getShowImg() {
+        return showImg;
+    }
+
+    public void setShowImg(String showImg) {
+        this.showImg = showImg;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Long getOpId() {
+        return opId;
+    }
+
+    public void setOpId(Long opId) {
+        this.opId = opId;
+    }
+
+    public String getOpName() {
+        return opName;
+    }
+
+    public void setOpName(String opName) {
+        this.opName = opName;
+    }
+
+    public String getExt1() {
+        return ext1;
+    }
+
+    public void setExt1(String ext1) {
+        this.ext1 = ext1;
+    }
+
+    public String getExt2() {
+        return ext2;
+    }
+
+    public void setExt2(String ext2) {
+        this.ext2 = ext2;
+    }
+
+    public String getExt3() {
+        return ext3;
+    }
+
+    public void setExt3(String ext3) {
+        this.ext3 = ext3;
+    }
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        GoodsReview other = (GoodsReview) that;
+        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
+            && (this.getUserId() == null ? other.getUserId() == null : this.getUserId().equals(other.getUserId()))
+            && (this.getGoodsId() == null ? other.getGoodsId() == null : this.getGoodsId().equals(other.getGoodsId()))
+            && (this.getSkuId() == null ? other.getSkuId() == null : this.getSkuId().equals(other.getSkuId()))
+            && (this.getReviewDescribe() == null ? other.getReviewDescribe() == null : this.getReviewDescribe().equals(other.getReviewDescribe()))
+            && (this.getShowImg() == null ? other.getShowImg() == null : this.getShowImg().equals(other.getShowImg()))
+            && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()))
+            && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()))
+            && (this.getOpId() == null ? other.getOpId() == null : this.getOpId().equals(other.getOpId()))
+            && (this.getOpName() == null ? other.getOpName() == null : this.getOpName().equals(other.getOpName()))
+            && (this.getExt1() == null ? other.getExt1() == null : this.getExt1().equals(other.getExt1()))
+            && (this.getExt2() == null ? other.getExt2() == null : this.getExt2().equals(other.getExt2()))
+            && (this.getExt3() == null ? other.getExt3() == null : this.getExt3().equals(other.getExt3()));
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
+        result = prime * result + ((getUserId() == null) ? 0 : getUserId().hashCode());
+        result = prime * result + ((getGoodsId() == null) ? 0 : getGoodsId().hashCode());
+        result = prime * result + ((getSkuId() == null) ? 0 : getSkuId().hashCode());
+        result = prime * result + ((getReviewDescribe() == null) ? 0 : getReviewDescribe().hashCode());
+        result = prime * result + ((getShowImg() == null) ? 0 : getShowImg().hashCode());
+        result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
+        result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode());
+        result = prime * result + ((getOpId() == null) ? 0 : getOpId().hashCode());
+        result = prime * result + ((getOpName() == null) ? 0 : getOpName().hashCode());
+        result = prime * result + ((getExt1() == null) ? 0 : getExt1().hashCode());
+        result = prime * result + ((getExt2() == null) ? 0 : getExt2().hashCode());
+        result = prime * result + ((getExt3() == null) ? 0 : getExt3().hashCode());
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", userId=").append(userId);
+        sb.append(", goodsId=").append(goodsId);
+        sb.append(", skuId=").append(skuId);
+        sb.append(", reviewDescribe=").append(reviewDescribe);
+        sb.append(", showImg=").append(showImg);
+        sb.append(", status=").append(status);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", opId=").append(opId);
+        sb.append(", opName=").append(opName);
+        sb.append(", ext1=").append(ext1);
+        sb.append(", ext2=").append(ext2);
+        sb.append(", ext3=").append(ext3);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}
\ No newline at end of file
diff --git a/hai-service/src/main/java/com/hai/entity/GoodsReviewExample.java b/hai-service/src/main/java/com/hai/entity/GoodsReviewExample.java
new file mode 100644
index 00000000..be597318
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/entity/GoodsReviewExample.java
@@ -0,0 +1,1063 @@
+package com.hai.entity;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class GoodsReviewExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    private Integer limit;
+
+    private Long offset;
+
+    public GoodsReviewExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    public void setLimit(Integer limit) {
+        this.limit = limit;
+    }
+
+    public Integer getLimit() {
+        return limit;
+    }
+
+    public void setOffset(Long offset) {
+        this.offset = offset;
+    }
+
+    public Long getOffset() {
+        return offset;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Long value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Long value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Long value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Long value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Long value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Long> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Long> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Long value1, Long value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Long value1, Long value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdIsNull() {
+            addCriterion("user_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdIsNotNull() {
+            addCriterion("user_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdEqualTo(Long value) {
+            addCriterion("user_id =", value, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdNotEqualTo(Long value) {
+            addCriterion("user_id <>", value, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdGreaterThan(Long value) {
+            addCriterion("user_id >", value, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("user_id >=", value, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdLessThan(Long value) {
+            addCriterion("user_id <", value, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdLessThanOrEqualTo(Long value) {
+            addCriterion("user_id <=", value, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdIn(List<Long> values) {
+            addCriterion("user_id in", values, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdNotIn(List<Long> values) {
+            addCriterion("user_id not in", values, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdBetween(Long value1, Long value2) {
+            addCriterion("user_id between", value1, value2, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andUserIdNotBetween(Long value1, Long value2) {
+            addCriterion("user_id not between", value1, value2, "userId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdIsNull() {
+            addCriterion("goods_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdIsNotNull() {
+            addCriterion("goods_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdEqualTo(Long value) {
+            addCriterion("goods_id =", value, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdNotEqualTo(Long value) {
+            addCriterion("goods_id <>", value, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdGreaterThan(Long value) {
+            addCriterion("goods_id >", value, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("goods_id >=", value, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdLessThan(Long value) {
+            addCriterion("goods_id <", value, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdLessThanOrEqualTo(Long value) {
+            addCriterion("goods_id <=", value, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdIn(List<Long> values) {
+            addCriterion("goods_id in", values, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdNotIn(List<Long> values) {
+            addCriterion("goods_id not in", values, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdBetween(Long value1, Long value2) {
+            addCriterion("goods_id between", value1, value2, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdNotBetween(Long value1, Long value2) {
+            addCriterion("goods_id not between", value1, value2, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSkuIdIsNull() {
+            addCriterion("sku_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSkuIdIsNotNull() {
+            addCriterion("sku_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSkuIdEqualTo(Long value) {
+            addCriterion("sku_id =", value, "skuId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSkuIdNotEqualTo(Long value) {
+            addCriterion("sku_id <>", value, "skuId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSkuIdGreaterThan(Long value) {
+            addCriterion("sku_id >", value, "skuId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSkuIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("sku_id >=", value, "skuId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSkuIdLessThan(Long value) {
+            addCriterion("sku_id <", value, "skuId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSkuIdLessThanOrEqualTo(Long value) {
+            addCriterion("sku_id <=", value, "skuId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSkuIdIn(List<Long> values) {
+            addCriterion("sku_id in", values, "skuId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSkuIdNotIn(List<Long> values) {
+            addCriterion("sku_id not in", values, "skuId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSkuIdBetween(Long value1, Long value2) {
+            addCriterion("sku_id between", value1, value2, "skuId");
+            return (Criteria) this;
+        }
+
+        public Criteria andSkuIdNotBetween(Long value1, Long value2) {
+            addCriterion("sku_id not between", value1, value2, "skuId");
+            return (Criteria) this;
+        }
+
+        public Criteria andReviewDescribeIsNull() {
+            addCriterion("review_describe is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andReviewDescribeIsNotNull() {
+            addCriterion("review_describe is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andReviewDescribeEqualTo(String value) {
+            addCriterion("review_describe =", value, "reviewDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andReviewDescribeNotEqualTo(String value) {
+            addCriterion("review_describe <>", value, "reviewDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andReviewDescribeGreaterThan(String value) {
+            addCriterion("review_describe >", value, "reviewDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andReviewDescribeGreaterThanOrEqualTo(String value) {
+            addCriterion("review_describe >=", value, "reviewDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andReviewDescribeLessThan(String value) {
+            addCriterion("review_describe <", value, "reviewDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andReviewDescribeLessThanOrEqualTo(String value) {
+            addCriterion("review_describe <=", value, "reviewDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andReviewDescribeLike(String value) {
+            addCriterion("review_describe like", value, "reviewDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andReviewDescribeNotLike(String value) {
+            addCriterion("review_describe not like", value, "reviewDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andReviewDescribeIn(List<String> values) {
+            addCriterion("review_describe in", values, "reviewDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andReviewDescribeNotIn(List<String> values) {
+            addCriterion("review_describe not in", values, "reviewDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andReviewDescribeBetween(String value1, String value2) {
+            addCriterion("review_describe between", value1, value2, "reviewDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andReviewDescribeNotBetween(String value1, String value2) {
+            addCriterion("review_describe not between", value1, value2, "reviewDescribe");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgIsNull() {
+            addCriterion("show_img is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgIsNotNull() {
+            addCriterion("show_img is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgEqualTo(String value) {
+            addCriterion("show_img =", value, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgNotEqualTo(String value) {
+            addCriterion("show_img <>", value, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgGreaterThan(String value) {
+            addCriterion("show_img >", value, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgGreaterThanOrEqualTo(String value) {
+            addCriterion("show_img >=", value, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgLessThan(String value) {
+            addCriterion("show_img <", value, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgLessThanOrEqualTo(String value) {
+            addCriterion("show_img <=", value, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgLike(String value) {
+            addCriterion("show_img like", value, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgNotLike(String value) {
+            addCriterion("show_img not like", value, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgIn(List<String> values) {
+            addCriterion("show_img in", values, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgNotIn(List<String> values) {
+            addCriterion("show_img not in", values, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgBetween(String value1, String value2) {
+            addCriterion("show_img between", value1, value2, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgNotBetween(String value1, String value2) {
+            addCriterion("show_img not between", value1, value2, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNull() {
+            addCriterion("`status` is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNotNull() {
+            addCriterion("`status` is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusEqualTo(Integer value) {
+            addCriterion("`status` =", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotEqualTo(Integer value) {
+            addCriterion("`status` <>", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThan(Integer value) {
+            addCriterion("`status` >", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanOrEqualTo(Integer value) {
+            addCriterion("`status` >=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThan(Integer value) {
+            addCriterion("`status` <", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanOrEqualTo(Integer value) {
+            addCriterion("`status` <=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIn(List<Integer> values) {
+            addCriterion("`status` in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotIn(List<Integer> values) {
+            addCriterion("`status` not in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusBetween(Integer value1, Integer value2) {
+            addCriterion("`status` between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotBetween(Integer value1, Integer value2) {
+            addCriterion("`status` not between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdIsNull() {
+            addCriterion("op_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdIsNotNull() {
+            addCriterion("op_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdEqualTo(Long value) {
+            addCriterion("op_id =", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdNotEqualTo(Long value) {
+            addCriterion("op_id <>", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdGreaterThan(Long value) {
+            addCriterion("op_id >", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("op_id >=", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdLessThan(Long value) {
+            addCriterion("op_id <", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdLessThanOrEqualTo(Long value) {
+            addCriterion("op_id <=", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdIn(List<Long> values) {
+            addCriterion("op_id in", values, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdNotIn(List<Long> values) {
+            addCriterion("op_id not in", values, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdBetween(Long value1, Long value2) {
+            addCriterion("op_id between", value1, value2, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdNotBetween(Long value1, Long value2) {
+            addCriterion("op_id not between", value1, value2, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameIsNull() {
+            addCriterion("op_name is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameIsNotNull() {
+            addCriterion("op_name is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameEqualTo(String value) {
+            addCriterion("op_name =", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameNotEqualTo(String value) {
+            addCriterion("op_name <>", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameGreaterThan(String value) {
+            addCriterion("op_name >", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameGreaterThanOrEqualTo(String value) {
+            addCriterion("op_name >=", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameLessThan(String value) {
+            addCriterion("op_name <", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameLessThanOrEqualTo(String value) {
+            addCriterion("op_name <=", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameLike(String value) {
+            addCriterion("op_name like", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameNotLike(String value) {
+            addCriterion("op_name not like", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameIn(List<String> values) {
+            addCriterion("op_name in", values, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameNotIn(List<String> values) {
+            addCriterion("op_name not in", values, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameBetween(String value1, String value2) {
+            addCriterion("op_name between", value1, value2, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameNotBetween(String value1, String value2) {
+            addCriterion("op_name not between", value1, value2, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1IsNull() {
+            addCriterion("ext_1 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1IsNotNull() {
+            addCriterion("ext_1 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1EqualTo(String value) {
+            addCriterion("ext_1 =", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1NotEqualTo(String value) {
+            addCriterion("ext_1 <>", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1GreaterThan(String value) {
+            addCriterion("ext_1 >", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1GreaterThanOrEqualTo(String value) {
+            addCriterion("ext_1 >=", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1LessThan(String value) {
+            addCriterion("ext_1 <", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1LessThanOrEqualTo(String value) {
+            addCriterion("ext_1 <=", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1Like(String value) {
+            addCriterion("ext_1 like", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1NotLike(String value) {
+            addCriterion("ext_1 not like", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1In(List<String> values) {
+            addCriterion("ext_1 in", values, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1NotIn(List<String> values) {
+            addCriterion("ext_1 not in", values, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1Between(String value1, String value2) {
+            addCriterion("ext_1 between", value1, value2, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1NotBetween(String value1, String value2) {
+            addCriterion("ext_1 not between", value1, value2, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2IsNull() {
+            addCriterion("ext_2 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2IsNotNull() {
+            addCriterion("ext_2 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2EqualTo(String value) {
+            addCriterion("ext_2 =", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2NotEqualTo(String value) {
+            addCriterion("ext_2 <>", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2GreaterThan(String value) {
+            addCriterion("ext_2 >", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2GreaterThanOrEqualTo(String value) {
+            addCriterion("ext_2 >=", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2LessThan(String value) {
+            addCriterion("ext_2 <", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2LessThanOrEqualTo(String value) {
+            addCriterion("ext_2 <=", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2Like(String value) {
+            addCriterion("ext_2 like", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2NotLike(String value) {
+            addCriterion("ext_2 not like", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2In(List<String> values) {
+            addCriterion("ext_2 in", values, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2NotIn(List<String> values) {
+            addCriterion("ext_2 not in", values, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2Between(String value1, String value2) {
+            addCriterion("ext_2 between", value1, value2, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2NotBetween(String value1, String value2) {
+            addCriterion("ext_2 not between", value1, value2, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3IsNull() {
+            addCriterion("ext_3 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3IsNotNull() {
+            addCriterion("ext_3 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3EqualTo(String value) {
+            addCriterion("ext_3 =", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3NotEqualTo(String value) {
+            addCriterion("ext_3 <>", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3GreaterThan(String value) {
+            addCriterion("ext_3 >", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3GreaterThanOrEqualTo(String value) {
+            addCriterion("ext_3 >=", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3LessThan(String value) {
+            addCriterion("ext_3 <", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3LessThanOrEqualTo(String value) {
+            addCriterion("ext_3 <=", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3Like(String value) {
+            addCriterion("ext_3 like", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3NotLike(String value) {
+            addCriterion("ext_3 not like", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3In(List<String> values) {
+            addCriterion("ext_3 in", values, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3NotIn(List<String> values) {
+            addCriterion("ext_3 not in", values, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3Between(String value1, String value2) {
+            addCriterion("ext_3 between", value1, value2, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3NotBetween(String value1, String value2) {
+            addCriterion("ext_3 not between", value1, value2, "ext3");
+            return (Criteria) this;
+        }
+    }
+
+    /**
+     */
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}
\ No newline at end of file
diff --git a/hai-service/src/main/java/com/hai/entity/GoodsSku.java b/hai-service/src/main/java/com/hai/entity/GoodsSku.java
new file mode 100644
index 00000000..ab752668
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/entity/GoodsSku.java
@@ -0,0 +1,306 @@
+package com.hai.entity;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * goods_sku
+ * @author 
+ */
+/**
+ * 
+ * 代码由工具生成
+ * 
+ **/
+public class GoodsSku implements Serializable {
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 商品ID
+     */
+    private Long goodsId;
+
+    /**
+     * sku名称
+     */
+    private String name;
+
+    /**
+     * 价格
+     */
+    private BigDecimal price;
+
+    /**
+     * 原价
+     */
+    private BigDecimal originalPrice;
+
+    /**
+     * 库存
+     */
+    private Integer stock;
+
+    /**
+     * 图片
+     */
+    private String showImg;
+
+    /**
+     * 轮播图
+     */
+    private String bannerImg;
+
+    /**
+     * 状态:0:删除 1:正常
+     */
+    private Integer status;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 操作人员id
+     */
+    private Long opId;
+
+    /**
+     * 操作人员名称
+     */
+    private String opName;
+
+    /**
+     * ext_1
+     */
+    private String ext1;
+
+    /**
+     * ext_2
+     */
+    private String ext2;
+
+    /**
+     * ext_3
+     */
+    private String ext3;
+
+    private static final long serialVersionUID = 1L;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getGoodsId() {
+        return goodsId;
+    }
+
+    public void setGoodsId(Long goodsId) {
+        this.goodsId = goodsId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+
+    public BigDecimal getOriginalPrice() {
+        return originalPrice;
+    }
+
+    public void setOriginalPrice(BigDecimal originalPrice) {
+        this.originalPrice = originalPrice;
+    }
+
+    public Integer getStock() {
+        return stock;
+    }
+
+    public void setStock(Integer stock) {
+        this.stock = stock;
+    }
+
+    public String getShowImg() {
+        return showImg;
+    }
+
+    public void setShowImg(String showImg) {
+        this.showImg = showImg;
+    }
+
+    public String getBannerImg() {
+        return bannerImg;
+    }
+
+    public void setBannerImg(String bannerImg) {
+        this.bannerImg = bannerImg;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public Long getOpId() {
+        return opId;
+    }
+
+    public void setOpId(Long opId) {
+        this.opId = opId;
+    }
+
+    public String getOpName() {
+        return opName;
+    }
+
+    public void setOpName(String opName) {
+        this.opName = opName;
+    }
+
+    public String getExt1() {
+        return ext1;
+    }
+
+    public void setExt1(String ext1) {
+        this.ext1 = ext1;
+    }
+
+    public String getExt2() {
+        return ext2;
+    }
+
+    public void setExt2(String ext2) {
+        this.ext2 = ext2;
+    }
+
+    public String getExt3() {
+        return ext3;
+    }
+
+    public void setExt3(String ext3) {
+        this.ext3 = ext3;
+    }
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        GoodsSku other = (GoodsSku) that;
+        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
+            && (this.getGoodsId() == null ? other.getGoodsId() == null : this.getGoodsId().equals(other.getGoodsId()))
+            && (this.getName() == null ? other.getName() == null : this.getName().equals(other.getName()))
+            && (this.getPrice() == null ? other.getPrice() == null : this.getPrice().equals(other.getPrice()))
+            && (this.getOriginalPrice() == null ? other.getOriginalPrice() == null : this.getOriginalPrice().equals(other.getOriginalPrice()))
+            && (this.getStock() == null ? other.getStock() == null : this.getStock().equals(other.getStock()))
+            && (this.getShowImg() == null ? other.getShowImg() == null : this.getShowImg().equals(other.getShowImg()))
+            && (this.getBannerImg() == null ? other.getBannerImg() == null : this.getBannerImg().equals(other.getBannerImg()))
+            && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()))
+            && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()))
+            && (this.getUpdateTime() == null ? other.getUpdateTime() == null : this.getUpdateTime().equals(other.getUpdateTime()))
+            && (this.getOpId() == null ? other.getOpId() == null : this.getOpId().equals(other.getOpId()))
+            && (this.getOpName() == null ? other.getOpName() == null : this.getOpName().equals(other.getOpName()))
+            && (this.getExt1() == null ? other.getExt1() == null : this.getExt1().equals(other.getExt1()))
+            && (this.getExt2() == null ? other.getExt2() == null : this.getExt2().equals(other.getExt2()))
+            && (this.getExt3() == null ? other.getExt3() == null : this.getExt3().equals(other.getExt3()));
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
+        result = prime * result + ((getGoodsId() == null) ? 0 : getGoodsId().hashCode());
+        result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
+        result = prime * result + ((getPrice() == null) ? 0 : getPrice().hashCode());
+        result = prime * result + ((getOriginalPrice() == null) ? 0 : getOriginalPrice().hashCode());
+        result = prime * result + ((getStock() == null) ? 0 : getStock().hashCode());
+        result = prime * result + ((getShowImg() == null) ? 0 : getShowImg().hashCode());
+        result = prime * result + ((getBannerImg() == null) ? 0 : getBannerImg().hashCode());
+        result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
+        result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode());
+        result = prime * result + ((getUpdateTime() == null) ? 0 : getUpdateTime().hashCode());
+        result = prime * result + ((getOpId() == null) ? 0 : getOpId().hashCode());
+        result = prime * result + ((getOpName() == null) ? 0 : getOpName().hashCode());
+        result = prime * result + ((getExt1() == null) ? 0 : getExt1().hashCode());
+        result = prime * result + ((getExt2() == null) ? 0 : getExt2().hashCode());
+        result = prime * result + ((getExt3() == null) ? 0 : getExt3().hashCode());
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", goodsId=").append(goodsId);
+        sb.append(", name=").append(name);
+        sb.append(", price=").append(price);
+        sb.append(", originalPrice=").append(originalPrice);
+        sb.append(", stock=").append(stock);
+        sb.append(", showImg=").append(showImg);
+        sb.append(", bannerImg=").append(bannerImg);
+        sb.append(", status=").append(status);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append(", opId=").append(opId);
+        sb.append(", opName=").append(opName);
+        sb.append(", ext1=").append(ext1);
+        sb.append(", ext2=").append(ext2);
+        sb.append(", ext3=").append(ext3);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}
\ No newline at end of file
diff --git a/hai-service/src/main/java/com/hai/entity/GoodsSkuExample.java b/hai-service/src/main/java/com/hai/entity/GoodsSkuExample.java
new file mode 100644
index 00000000..cd4c29f4
--- /dev/null
+++ b/hai-service/src/main/java/com/hai/entity/GoodsSkuExample.java
@@ -0,0 +1,1254 @@
+package com.hai.entity;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class GoodsSkuExample {
+    protected String orderByClause;
+
+    protected boolean distinct;
+
+    protected List<Criteria> oredCriteria;
+
+    private Integer limit;
+
+    private Long offset;
+
+    public GoodsSkuExample() {
+        oredCriteria = new ArrayList<Criteria>();
+    }
+
+    public void setOrderByClause(String orderByClause) {
+        this.orderByClause = orderByClause;
+    }
+
+    public String getOrderByClause() {
+        return orderByClause;
+    }
+
+    public void setDistinct(boolean distinct) {
+        this.distinct = distinct;
+    }
+
+    public boolean isDistinct() {
+        return distinct;
+    }
+
+    public List<Criteria> getOredCriteria() {
+        return oredCriteria;
+    }
+
+    public void or(Criteria criteria) {
+        oredCriteria.add(criteria);
+    }
+
+    public Criteria or() {
+        Criteria criteria = createCriteriaInternal();
+        oredCriteria.add(criteria);
+        return criteria;
+    }
+
+    public Criteria createCriteria() {
+        Criteria criteria = createCriteriaInternal();
+        if (oredCriteria.size() == 0) {
+            oredCriteria.add(criteria);
+        }
+        return criteria;
+    }
+
+    protected Criteria createCriteriaInternal() {
+        Criteria criteria = new Criteria();
+        return criteria;
+    }
+
+    public void clear() {
+        oredCriteria.clear();
+        orderByClause = null;
+        distinct = false;
+    }
+
+    public void setLimit(Integer limit) {
+        this.limit = limit;
+    }
+
+    public Integer getLimit() {
+        return limit;
+    }
+
+    public void setOffset(Long offset) {
+        this.offset = offset;
+    }
+
+    public Long getOffset() {
+        return offset;
+    }
+
+    protected abstract static class GeneratedCriteria {
+        protected List<Criterion> criteria;
+
+        protected GeneratedCriteria() {
+            super();
+            criteria = new ArrayList<Criterion>();
+        }
+
+        public boolean isValid() {
+            return criteria.size() > 0;
+        }
+
+        public List<Criterion> getAllCriteria() {
+            return criteria;
+        }
+
+        public List<Criterion> getCriteria() {
+            return criteria;
+        }
+
+        protected void addCriterion(String condition) {
+            if (condition == null) {
+                throw new RuntimeException("Value for condition cannot be null");
+            }
+            criteria.add(new Criterion(condition));
+        }
+
+        protected void addCriterion(String condition, Object value, String property) {
+            if (value == null) {
+                throw new RuntimeException("Value for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value));
+        }
+
+        protected void addCriterion(String condition, Object value1, Object value2, String property) {
+            if (value1 == null || value2 == null) {
+                throw new RuntimeException("Between values for " + property + " cannot be null");
+            }
+            criteria.add(new Criterion(condition, value1, value2));
+        }
+
+        public Criteria andIdIsNull() {
+            addCriterion("id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIsNotNull() {
+            addCriterion("id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdEqualTo(Long value) {
+            addCriterion("id =", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotEqualTo(Long value) {
+            addCriterion("id <>", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThan(Long value) {
+            addCriterion("id >", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("id >=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThan(Long value) {
+            addCriterion("id <", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdLessThanOrEqualTo(Long value) {
+            addCriterion("id <=", value, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdIn(List<Long> values) {
+            addCriterion("id in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotIn(List<Long> values) {
+            addCriterion("id not in", values, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdBetween(Long value1, Long value2) {
+            addCriterion("id between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andIdNotBetween(Long value1, Long value2) {
+            addCriterion("id not between", value1, value2, "id");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdIsNull() {
+            addCriterion("goods_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdIsNotNull() {
+            addCriterion("goods_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdEqualTo(Long value) {
+            addCriterion("goods_id =", value, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdNotEqualTo(Long value) {
+            addCriterion("goods_id <>", value, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdGreaterThan(Long value) {
+            addCriterion("goods_id >", value, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("goods_id >=", value, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdLessThan(Long value) {
+            addCriterion("goods_id <", value, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdLessThanOrEqualTo(Long value) {
+            addCriterion("goods_id <=", value, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdIn(List<Long> values) {
+            addCriterion("goods_id in", values, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdNotIn(List<Long> values) {
+            addCriterion("goods_id not in", values, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdBetween(Long value1, Long value2) {
+            addCriterion("goods_id between", value1, value2, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andGoodsIdNotBetween(Long value1, Long value2) {
+            addCriterion("goods_id not between", value1, value2, "goodsId");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIsNull() {
+            addCriterion("`name` is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIsNotNull() {
+            addCriterion("`name` is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameEqualTo(String value) {
+            addCriterion("`name` =", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotEqualTo(String value) {
+            addCriterion("`name` <>", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameGreaterThan(String value) {
+            addCriterion("`name` >", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameGreaterThanOrEqualTo(String value) {
+            addCriterion("`name` >=", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLessThan(String value) {
+            addCriterion("`name` <", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLessThanOrEqualTo(String value) {
+            addCriterion("`name` <=", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameLike(String value) {
+            addCriterion("`name` like", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotLike(String value) {
+            addCriterion("`name` not like", value, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameIn(List<String> values) {
+            addCriterion("`name` in", values, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotIn(List<String> values) {
+            addCriterion("`name` not in", values, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameBetween(String value1, String value2) {
+            addCriterion("`name` between", value1, value2, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andNameNotBetween(String value1, String value2) {
+            addCriterion("`name` not between", value1, value2, "name");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceIsNull() {
+            addCriterion("price is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceIsNotNull() {
+            addCriterion("price is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceEqualTo(BigDecimal value) {
+            addCriterion("price =", value, "price");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceNotEqualTo(BigDecimal value) {
+            addCriterion("price <>", value, "price");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceGreaterThan(BigDecimal value) {
+            addCriterion("price >", value, "price");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceGreaterThanOrEqualTo(BigDecimal value) {
+            addCriterion("price >=", value, "price");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceLessThan(BigDecimal value) {
+            addCriterion("price <", value, "price");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceLessThanOrEqualTo(BigDecimal value) {
+            addCriterion("price <=", value, "price");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceIn(List<BigDecimal> values) {
+            addCriterion("price in", values, "price");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceNotIn(List<BigDecimal> values) {
+            addCriterion("price not in", values, "price");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceBetween(BigDecimal value1, BigDecimal value2) {
+            addCriterion("price between", value1, value2, "price");
+            return (Criteria) this;
+        }
+
+        public Criteria andPriceNotBetween(BigDecimal value1, BigDecimal value2) {
+            addCriterion("price not between", value1, value2, "price");
+            return (Criteria) this;
+        }
+
+        public Criteria andOriginalPriceIsNull() {
+            addCriterion("original_price is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOriginalPriceIsNotNull() {
+            addCriterion("original_price is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOriginalPriceEqualTo(BigDecimal value) {
+            addCriterion("original_price =", value, "originalPrice");
+            return (Criteria) this;
+        }
+
+        public Criteria andOriginalPriceNotEqualTo(BigDecimal value) {
+            addCriterion("original_price <>", value, "originalPrice");
+            return (Criteria) this;
+        }
+
+        public Criteria andOriginalPriceGreaterThan(BigDecimal value) {
+            addCriterion("original_price >", value, "originalPrice");
+            return (Criteria) this;
+        }
+
+        public Criteria andOriginalPriceGreaterThanOrEqualTo(BigDecimal value) {
+            addCriterion("original_price >=", value, "originalPrice");
+            return (Criteria) this;
+        }
+
+        public Criteria andOriginalPriceLessThan(BigDecimal value) {
+            addCriterion("original_price <", value, "originalPrice");
+            return (Criteria) this;
+        }
+
+        public Criteria andOriginalPriceLessThanOrEqualTo(BigDecimal value) {
+            addCriterion("original_price <=", value, "originalPrice");
+            return (Criteria) this;
+        }
+
+        public Criteria andOriginalPriceIn(List<BigDecimal> values) {
+            addCriterion("original_price in", values, "originalPrice");
+            return (Criteria) this;
+        }
+
+        public Criteria andOriginalPriceNotIn(List<BigDecimal> values) {
+            addCriterion("original_price not in", values, "originalPrice");
+            return (Criteria) this;
+        }
+
+        public Criteria andOriginalPriceBetween(BigDecimal value1, BigDecimal value2) {
+            addCriterion("original_price between", value1, value2, "originalPrice");
+            return (Criteria) this;
+        }
+
+        public Criteria andOriginalPriceNotBetween(BigDecimal value1, BigDecimal value2) {
+            addCriterion("original_price not between", value1, value2, "originalPrice");
+            return (Criteria) this;
+        }
+
+        public Criteria andStockIsNull() {
+            addCriterion("stock is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStockIsNotNull() {
+            addCriterion("stock is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStockEqualTo(Integer value) {
+            addCriterion("stock =", value, "stock");
+            return (Criteria) this;
+        }
+
+        public Criteria andStockNotEqualTo(Integer value) {
+            addCriterion("stock <>", value, "stock");
+            return (Criteria) this;
+        }
+
+        public Criteria andStockGreaterThan(Integer value) {
+            addCriterion("stock >", value, "stock");
+            return (Criteria) this;
+        }
+
+        public Criteria andStockGreaterThanOrEqualTo(Integer value) {
+            addCriterion("stock >=", value, "stock");
+            return (Criteria) this;
+        }
+
+        public Criteria andStockLessThan(Integer value) {
+            addCriterion("stock <", value, "stock");
+            return (Criteria) this;
+        }
+
+        public Criteria andStockLessThanOrEqualTo(Integer value) {
+            addCriterion("stock <=", value, "stock");
+            return (Criteria) this;
+        }
+
+        public Criteria andStockIn(List<Integer> values) {
+            addCriterion("stock in", values, "stock");
+            return (Criteria) this;
+        }
+
+        public Criteria andStockNotIn(List<Integer> values) {
+            addCriterion("stock not in", values, "stock");
+            return (Criteria) this;
+        }
+
+        public Criteria andStockBetween(Integer value1, Integer value2) {
+            addCriterion("stock between", value1, value2, "stock");
+            return (Criteria) this;
+        }
+
+        public Criteria andStockNotBetween(Integer value1, Integer value2) {
+            addCriterion("stock not between", value1, value2, "stock");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgIsNull() {
+            addCriterion("show_img is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgIsNotNull() {
+            addCriterion("show_img is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgEqualTo(String value) {
+            addCriterion("show_img =", value, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgNotEqualTo(String value) {
+            addCriterion("show_img <>", value, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgGreaterThan(String value) {
+            addCriterion("show_img >", value, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgGreaterThanOrEqualTo(String value) {
+            addCriterion("show_img >=", value, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgLessThan(String value) {
+            addCriterion("show_img <", value, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgLessThanOrEqualTo(String value) {
+            addCriterion("show_img <=", value, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgLike(String value) {
+            addCriterion("show_img like", value, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgNotLike(String value) {
+            addCriterion("show_img not like", value, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgIn(List<String> values) {
+            addCriterion("show_img in", values, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgNotIn(List<String> values) {
+            addCriterion("show_img not in", values, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgBetween(String value1, String value2) {
+            addCriterion("show_img between", value1, value2, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andShowImgNotBetween(String value1, String value2) {
+            addCriterion("show_img not between", value1, value2, "showImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgIsNull() {
+            addCriterion("banner_img is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgIsNotNull() {
+            addCriterion("banner_img is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgEqualTo(String value) {
+            addCriterion("banner_img =", value, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgNotEqualTo(String value) {
+            addCriterion("banner_img <>", value, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgGreaterThan(String value) {
+            addCriterion("banner_img >", value, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgGreaterThanOrEqualTo(String value) {
+            addCriterion("banner_img >=", value, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgLessThan(String value) {
+            addCriterion("banner_img <", value, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgLessThanOrEqualTo(String value) {
+            addCriterion("banner_img <=", value, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgLike(String value) {
+            addCriterion("banner_img like", value, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgNotLike(String value) {
+            addCriterion("banner_img not like", value, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgIn(List<String> values) {
+            addCriterion("banner_img in", values, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgNotIn(List<String> values) {
+            addCriterion("banner_img not in", values, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgBetween(String value1, String value2) {
+            addCriterion("banner_img between", value1, value2, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andBannerImgNotBetween(String value1, String value2) {
+            addCriterion("banner_img not between", value1, value2, "bannerImg");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNull() {
+            addCriterion("`status` is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIsNotNull() {
+            addCriterion("`status` is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusEqualTo(Integer value) {
+            addCriterion("`status` =", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotEqualTo(Integer value) {
+            addCriterion("`status` <>", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThan(Integer value) {
+            addCriterion("`status` >", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusGreaterThanOrEqualTo(Integer value) {
+            addCriterion("`status` >=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThan(Integer value) {
+            addCriterion("`status` <", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusLessThanOrEqualTo(Integer value) {
+            addCriterion("`status` <=", value, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusIn(List<Integer> values) {
+            addCriterion("`status` in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotIn(List<Integer> values) {
+            addCriterion("`status` not in", values, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusBetween(Integer value1, Integer value2) {
+            addCriterion("`status` between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andStatusNotBetween(Integer value1, Integer value2) {
+            addCriterion("`status` not between", value1, value2, "status");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNull() {
+            addCriterion("create_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIsNotNull() {
+            addCriterion("create_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeEqualTo(Date value) {
+            addCriterion("create_time =", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotEqualTo(Date value) {
+            addCriterion("create_time <>", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThan(Date value) {
+            addCriterion("create_time >", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("create_time >=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThan(Date value) {
+            addCriterion("create_time <", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("create_time <=", value, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeIn(List<Date> values) {
+            addCriterion("create_time in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotIn(List<Date> values) {
+            addCriterion("create_time not in", values, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeBetween(Date value1, Date value2) {
+            addCriterion("create_time between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("create_time not between", value1, value2, "createTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNull() {
+            addCriterion("update_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIsNotNull() {
+            addCriterion("update_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeEqualTo(Date value) {
+            addCriterion("update_time =", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotEqualTo(Date value) {
+            addCriterion("update_time <>", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThan(Date value) {
+            addCriterion("update_time >", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeGreaterThanOrEqualTo(Date value) {
+            addCriterion("update_time >=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThan(Date value) {
+            addCriterion("update_time <", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeLessThanOrEqualTo(Date value) {
+            addCriterion("update_time <=", value, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeIn(List<Date> values) {
+            addCriterion("update_time in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotIn(List<Date> values) {
+            addCriterion("update_time not in", values, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeBetween(Date value1, Date value2) {
+            addCriterion("update_time between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andUpdateTimeNotBetween(Date value1, Date value2) {
+            addCriterion("update_time not between", value1, value2, "updateTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdIsNull() {
+            addCriterion("op_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdIsNotNull() {
+            addCriterion("op_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdEqualTo(Long value) {
+            addCriterion("op_id =", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdNotEqualTo(Long value) {
+            addCriterion("op_id <>", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdGreaterThan(Long value) {
+            addCriterion("op_id >", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdGreaterThanOrEqualTo(Long value) {
+            addCriterion("op_id >=", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdLessThan(Long value) {
+            addCriterion("op_id <", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdLessThanOrEqualTo(Long value) {
+            addCriterion("op_id <=", value, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdIn(List<Long> values) {
+            addCriterion("op_id in", values, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdNotIn(List<Long> values) {
+            addCriterion("op_id not in", values, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdBetween(Long value1, Long value2) {
+            addCriterion("op_id between", value1, value2, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpIdNotBetween(Long value1, Long value2) {
+            addCriterion("op_id not between", value1, value2, "opId");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameIsNull() {
+            addCriterion("op_name is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameIsNotNull() {
+            addCriterion("op_name is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameEqualTo(String value) {
+            addCriterion("op_name =", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameNotEqualTo(String value) {
+            addCriterion("op_name <>", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameGreaterThan(String value) {
+            addCriterion("op_name >", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameGreaterThanOrEqualTo(String value) {
+            addCriterion("op_name >=", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameLessThan(String value) {
+            addCriterion("op_name <", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameLessThanOrEqualTo(String value) {
+            addCriterion("op_name <=", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameLike(String value) {
+            addCriterion("op_name like", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameNotLike(String value) {
+            addCriterion("op_name not like", value, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameIn(List<String> values) {
+            addCriterion("op_name in", values, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameNotIn(List<String> values) {
+            addCriterion("op_name not in", values, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameBetween(String value1, String value2) {
+            addCriterion("op_name between", value1, value2, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andOpNameNotBetween(String value1, String value2) {
+            addCriterion("op_name not between", value1, value2, "opName");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1IsNull() {
+            addCriterion("ext_1 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1IsNotNull() {
+            addCriterion("ext_1 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1EqualTo(String value) {
+            addCriterion("ext_1 =", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1NotEqualTo(String value) {
+            addCriterion("ext_1 <>", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1GreaterThan(String value) {
+            addCriterion("ext_1 >", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1GreaterThanOrEqualTo(String value) {
+            addCriterion("ext_1 >=", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1LessThan(String value) {
+            addCriterion("ext_1 <", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1LessThanOrEqualTo(String value) {
+            addCriterion("ext_1 <=", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1Like(String value) {
+            addCriterion("ext_1 like", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1NotLike(String value) {
+            addCriterion("ext_1 not like", value, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1In(List<String> values) {
+            addCriterion("ext_1 in", values, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1NotIn(List<String> values) {
+            addCriterion("ext_1 not in", values, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1Between(String value1, String value2) {
+            addCriterion("ext_1 between", value1, value2, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt1NotBetween(String value1, String value2) {
+            addCriterion("ext_1 not between", value1, value2, "ext1");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2IsNull() {
+            addCriterion("ext_2 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2IsNotNull() {
+            addCriterion("ext_2 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2EqualTo(String value) {
+            addCriterion("ext_2 =", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2NotEqualTo(String value) {
+            addCriterion("ext_2 <>", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2GreaterThan(String value) {
+            addCriterion("ext_2 >", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2GreaterThanOrEqualTo(String value) {
+            addCriterion("ext_2 >=", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2LessThan(String value) {
+            addCriterion("ext_2 <", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2LessThanOrEqualTo(String value) {
+            addCriterion("ext_2 <=", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2Like(String value) {
+            addCriterion("ext_2 like", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2NotLike(String value) {
+            addCriterion("ext_2 not like", value, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2In(List<String> values) {
+            addCriterion("ext_2 in", values, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2NotIn(List<String> values) {
+            addCriterion("ext_2 not in", values, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2Between(String value1, String value2) {
+            addCriterion("ext_2 between", value1, value2, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt2NotBetween(String value1, String value2) {
+            addCriterion("ext_2 not between", value1, value2, "ext2");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3IsNull() {
+            addCriterion("ext_3 is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3IsNotNull() {
+            addCriterion("ext_3 is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3EqualTo(String value) {
+            addCriterion("ext_3 =", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3NotEqualTo(String value) {
+            addCriterion("ext_3 <>", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3GreaterThan(String value) {
+            addCriterion("ext_3 >", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3GreaterThanOrEqualTo(String value) {
+            addCriterion("ext_3 >=", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3LessThan(String value) {
+            addCriterion("ext_3 <", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3LessThanOrEqualTo(String value) {
+            addCriterion("ext_3 <=", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3Like(String value) {
+            addCriterion("ext_3 like", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3NotLike(String value) {
+            addCriterion("ext_3 not like", value, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3In(List<String> values) {
+            addCriterion("ext_3 in", values, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3NotIn(List<String> values) {
+            addCriterion("ext_3 not in", values, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3Between(String value1, String value2) {
+            addCriterion("ext_3 between", value1, value2, "ext3");
+            return (Criteria) this;
+        }
+
+        public Criteria andExt3NotBetween(String value1, String value2) {
+            addCriterion("ext_3 not between", value1, value2, "ext3");
+            return (Criteria) this;
+        }
+    }
+
+    /**
+     */
+    public static class Criteria extends GeneratedCriteria {
+
+        protected Criteria() {
+            super();
+        }
+    }
+
+    public static class Criterion {
+        private String condition;
+
+        private Object value;
+
+        private Object secondValue;
+
+        private boolean noValue;
+
+        private boolean singleValue;
+
+        private boolean betweenValue;
+
+        private boolean listValue;
+
+        private String typeHandler;
+
+        public String getCondition() {
+            return condition;
+        }
+
+        public Object getValue() {
+            return value;
+        }
+
+        public Object getSecondValue() {
+            return secondValue;
+        }
+
+        public boolean isNoValue() {
+            return noValue;
+        }
+
+        public boolean isSingleValue() {
+            return singleValue;
+        }
+
+        public boolean isBetweenValue() {
+            return betweenValue;
+        }
+
+        public boolean isListValue() {
+            return listValue;
+        }
+
+        public String getTypeHandler() {
+            return typeHandler;
+        }
+
+        protected Criterion(String condition) {
+            super();
+            this.condition = condition;
+            this.typeHandler = null;
+            this.noValue = true;
+        }
+
+        protected Criterion(String condition, Object value, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.typeHandler = typeHandler;
+            if (value instanceof List<?>) {
+                this.listValue = true;
+            } else {
+                this.singleValue = true;
+            }
+        }
+
+        protected Criterion(String condition, Object value) {
+            this(condition, value, null);
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
+            super();
+            this.condition = condition;
+            this.value = value;
+            this.secondValue = secondValue;
+            this.typeHandler = typeHandler;
+            this.betweenValue = true;
+        }
+
+        protected Criterion(String condition, Object value, Object secondValue) {
+            this(condition, value, secondValue, null);
+        }
+    }
+}
\ No newline at end of file