Browse Source

'项目架构'

lzy 2 tuần trước cách đây
mục cha
commit
24585597b5
67 tập tin đã thay đổi với 2374 bổ sung3 xóa
  1. 1 1
      src/main/java/com/futu/course/GooseApplication.java
  2. 142 0
      src/main/java/com/futu/course/course/domain/Course.java
  3. 76 0
      src/main/java/com/futu/course/course/domain/CourseCategory.java
  4. 100 0
      src/main/java/com/futu/course/course/domain/CourseSection.java
  5. 18 0
      src/main/java/com/futu/course/course/mapper/CourseCategoryMapper.java
  6. 18 0
      src/main/java/com/futu/course/course/mapper/CourseMapper.java
  7. 18 0
      src/main/java/com/futu/course/course/mapper/CourseSectionMapper.java
  8. 13 0
      src/main/java/com/futu/course/course/service/CourseCategoryService.java
  9. 13 0
      src/main/java/com/futu/course/course/service/CourseSectionService.java
  10. 13 0
      src/main/java/com/futu/course/course/service/CourseService.java
  11. 22 0
      src/main/java/com/futu/course/course/service/impl/CourseCategoryServiceImpl.java
  12. 22 0
      src/main/java/com/futu/course/course/service/impl/CourseSectionServiceImpl.java
  13. 22 0
      src/main/java/com/futu/course/course/service/impl/CourseServiceImpl.java
  14. 126 0
      src/main/java/com/futu/course/cupons/domain/Coupon.java
  15. 18 0
      src/main/java/com/futu/course/cupons/mapper/CouponMapper.java
  16. 13 0
      src/main/java/com/futu/course/cupons/service/CouponService.java
  17. 22 0
      src/main/java/com/futu/course/cupons/service/impl/CouponServiceImpl.java
  18. 118 0
      src/main/java/com/futu/course/orders/domain/Order1.java
  19. 78 0
      src/main/java/com/futu/course/orders/domain/OrderCoupon.java
  20. 86 0
      src/main/java/com/futu/course/orders/domain/OrderItem.java
  21. 18 0
      src/main/java/com/futu/course/orders/mapper/Order1Mapper.java
  22. 18 0
      src/main/java/com/futu/course/orders/mapper/OrderCouponMapper.java
  23. 18 0
      src/main/java/com/futu/course/orders/mapper/OrderItemMapper.java
  24. 13 0
      src/main/java/com/futu/course/orders/service/Order1Service.java
  25. 13 0
      src/main/java/com/futu/course/orders/service/OrderCouponService.java
  26. 13 0
      src/main/java/com/futu/course/orders/service/OrderItemService.java
  27. 22 0
      src/main/java/com/futu/course/orders/service/impl/Order1ServiceImpl.java
  28. 22 0
      src/main/java/com/futu/course/orders/service/impl/OrderCouponServiceImpl.java
  29. 22 0
      src/main/java/com/futu/course/orders/service/impl/OrderItemServiceImpl.java
  30. 109 0
      src/main/java/com/futu/course/shop/domain/Shop.java
  31. 69 0
      src/main/java/com/futu/course/shop/domain/ShopAdmin.java
  32. 125 0
      src/main/java/com/futu/course/shop/domain/Teacher.java
  33. 18 0
      src/main/java/com/futu/course/shop/mapper/ShopAdminMapper.java
  34. 18 0
      src/main/java/com/futu/course/shop/mapper/ShopMapper.java
  35. 18 0
      src/main/java/com/futu/course/shop/mapper/TeacherMapper.java
  36. 13 0
      src/main/java/com/futu/course/shop/service/ShopAdminService.java
  37. 13 0
      src/main/java/com/futu/course/shop/service/ShopService.java
  38. 13 0
      src/main/java/com/futu/course/shop/service/TeacherService.java
  39. 22 0
      src/main/java/com/futu/course/shop/service/impl/ShopAdminServiceImpl.java
  40. 22 0
      src/main/java/com/futu/course/shop/service/impl/ShopServiceImpl.java
  41. 22 0
      src/main/java/com/futu/course/shop/service/impl/TeacherServiceImpl.java
  42. 157 0
      src/main/java/com/futu/course/user/domain/User.java
  43. 124 0
      src/main/java/com/futu/course/user/domain/UserAddress.java
  44. 93 0
      src/main/java/com/futu/course/user/domain/UserCoupon.java
  45. 18 0
      src/main/java/com/futu/course/user/mapper/UserAddressMapper.java
  46. 18 0
      src/main/java/com/futu/course/user/mapper/UserCouponMapper.java
  47. 18 0
      src/main/java/com/futu/course/user/mapper/UserMapper.java
  48. 13 0
      src/main/java/com/futu/course/user/service/UserAddressService.java
  49. 13 0
      src/main/java/com/futu/course/user/service/UserCouponService.java
  50. 13 0
      src/main/java/com/futu/course/user/service/UserService.java
  51. 22 0
      src/main/java/com/futu/course/user/service/impl/UserAddressServiceImpl.java
  52. 22 0
      src/main/java/com/futu/course/user/service/impl/UserCouponServiceImpl.java
  53. 22 0
      src/main/java/com/futu/course/user/service/impl/UserServiceImpl.java
  54. 3 2
      src/main/resources/application.yml
  55. 24 0
      src/main/resources/mapper/CouponMapper.xml
  56. 16 0
      src/main/resources/mapper/CourseCategoryMapper.xml
  57. 27 0
      src/main/resources/mapper/CourseMapper.xml
  58. 20 0
      src/main/resources/mapper/CourseSectionMapper.xml
  59. 23 0
      src/main/resources/mapper/Order1Mapper.xml
  60. 16 0
      src/main/resources/mapper/OrderCouponMapper.xml
  61. 18 0
      src/main/resources/mapper/OrderItemMapper.xml
  62. 15 0
      src/main/resources/mapper/ShopAdminMapper.xml
  63. 22 0
      src/main/resources/mapper/ShopMapper.xml
  64. 24 0
      src/main/resources/mapper/TeacherMapper.xml
  65. 24 0
      src/main/resources/mapper/UserAddressMapper.xml
  66. 19 0
      src/main/resources/mapper/UserCouponMapper.xml
  67. 30 0
      src/main/resources/mapper/UserMapper.xml

+ 1 - 1
src/main/java/com/futu/course/GooseApplication.java

@@ -5,7 +5,7 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 
 @SpringBootApplication
-@MapperScan(value = "com.futu.course.mapper")
+@MapperScan("com.futu.course")
 public class GooseApplication {
 
     public static void main(String[] args) {

+ 142 - 0
src/main/java/com/futu/course/course/domain/Course.java

@@ -0,0 +1,142 @@
+package com.futu.course.course.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 课程表
+ * @TableName course
+ */
+@TableName(value ="course")
+@Data
+public class Course implements Serializable {
+    /**
+     * 
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 课程名称
+     */
+    private String title;
+
+    /**
+     * 所属店铺
+     */
+    private Long shopId;
+
+    /**
+     * 主讲老师
+     */
+    private Long teacherId;
+
+    /**
+     * 分类
+     */
+    private Integer categoryId;
+
+    /**
+     * 原价
+     */
+    private BigDecimal price;
+
+    /**
+     * 缩略图
+     */
+    private String coverImg;
+
+    /**
+     * 轮播图(JSON数组存储)
+     */
+    private Object bannerImgs;
+
+    /**
+     * 课程开始时间
+     */
+    private Date startTime;
+
+    /**
+     * 课程结束时间
+     */
+    private Date endTime;
+
+    /**
+     * 状态(0-未上架 1-已上架)
+     */
+    private Integer status;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        Course other = (Course) that;
+        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
+            && (this.getTitle() == null ? other.getTitle() == null : this.getTitle().equals(other.getTitle()))
+            && (this.getShopId() == null ? other.getShopId() == null : this.getShopId().equals(other.getShopId()))
+            && (this.getTeacherId() == null ? other.getTeacherId() == null : this.getTeacherId().equals(other.getTeacherId()))
+            && (this.getCategoryId() == null ? other.getCategoryId() == null : this.getCategoryId().equals(other.getCategoryId()))
+            && (this.getPrice() == null ? other.getPrice() == null : this.getPrice().equals(other.getPrice()))
+            && (this.getCoverImg() == null ? other.getCoverImg() == null : this.getCoverImg().equals(other.getCoverImg()))
+            && (this.getBannerImgs() == null ? other.getBannerImgs() == null : this.getBannerImgs().equals(other.getBannerImgs()))
+            && (this.getStartTime() == null ? other.getStartTime() == null : this.getStartTime().equals(other.getStartTime()))
+            && (this.getEndTime() == null ? other.getEndTime() == null : this.getEndTime().equals(other.getEndTime()))
+            && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()));
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
+        result = prime * result + ((getTitle() == null) ? 0 : getTitle().hashCode());
+        result = prime * result + ((getShopId() == null) ? 0 : getShopId().hashCode());
+        result = prime * result + ((getTeacherId() == null) ? 0 : getTeacherId().hashCode());
+        result = prime * result + ((getCategoryId() == null) ? 0 : getCategoryId().hashCode());
+        result = prime * result + ((getPrice() == null) ? 0 : getPrice().hashCode());
+        result = prime * result + ((getCoverImg() == null) ? 0 : getCoverImg().hashCode());
+        result = prime * result + ((getBannerImgs() == null) ? 0 : getBannerImgs().hashCode());
+        result = prime * result + ((getStartTime() == null) ? 0 : getStartTime().hashCode());
+        result = prime * result + ((getEndTime() == null) ? 0 : getEndTime().hashCode());
+        result = prime * result + ((getStatus() == null) ? 0 : getStatus().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(", title=").append(title);
+        sb.append(", shopId=").append(shopId);
+        sb.append(", teacherId=").append(teacherId);
+        sb.append(", categoryId=").append(categoryId);
+        sb.append(", price=").append(price);
+        sb.append(", coverImg=").append(coverImg);
+        sb.append(", bannerImgs=").append(bannerImgs);
+        sb.append(", startTime=").append(startTime);
+        sb.append(", endTime=").append(endTime);
+        sb.append(", status=").append(status);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 76 - 0
src/main/java/com/futu/course/course/domain/CourseCategory.java

@@ -0,0 +1,76 @@
+package com.futu.course.course.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ * 
+ * @TableName course_category
+ */
+@TableName(value ="course_category")
+@Data
+public class CourseCategory implements Serializable {
+    /**
+     * 
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 
+     */
+    private String name;
+
+    /**
+     * 父级分类ID
+     */
+    private Integer parentId;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        CourseCategory other = (CourseCategory) that;
+        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
+            && (this.getName() == null ? other.getName() == null : this.getName().equals(other.getName()))
+            && (this.getParentId() == null ? other.getParentId() == null : this.getParentId().equals(other.getParentId()));
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
+        result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
+        result = prime * result + ((getParentId() == null) ? 0 : getParentId().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(", name=").append(name);
+        sb.append(", parentId=").append(parentId);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 100 - 0
src/main/java/com/futu/course/course/domain/CourseSection.java

@@ -0,0 +1,100 @@
+package com.futu.course.course.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ * 
+ * @TableName course_section
+ */
+@TableName(value ="course_section")
+@Data
+public class CourseSection implements Serializable {
+    /**
+     * 
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 
+     */
+    private Long courseId;
+
+    /**
+     * 小节标题
+     */
+    private String title;
+
+    /**
+     * 视频地址
+     */
+    private String videoUrl;
+
+    /**
+     * 时长(秒)
+     */
+    private Integer duration;
+
+    /**
+     * 排序号
+     */
+    private Integer orderNum;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        CourseSection other = (CourseSection) that;
+        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
+            && (this.getCourseId() == null ? other.getCourseId() == null : this.getCourseId().equals(other.getCourseId()))
+            && (this.getTitle() == null ? other.getTitle() == null : this.getTitle().equals(other.getTitle()))
+            && (this.getVideoUrl() == null ? other.getVideoUrl() == null : this.getVideoUrl().equals(other.getVideoUrl()))
+            && (this.getDuration() == null ? other.getDuration() == null : this.getDuration().equals(other.getDuration()))
+            && (this.getOrderNum() == null ? other.getOrderNum() == null : this.getOrderNum().equals(other.getOrderNum()));
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
+        result = prime * result + ((getCourseId() == null) ? 0 : getCourseId().hashCode());
+        result = prime * result + ((getTitle() == null) ? 0 : getTitle().hashCode());
+        result = prime * result + ((getVideoUrl() == null) ? 0 : getVideoUrl().hashCode());
+        result = prime * result + ((getDuration() == null) ? 0 : getDuration().hashCode());
+        result = prime * result + ((getOrderNum() == null) ? 0 : getOrderNum().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(", courseId=").append(courseId);
+        sb.append(", title=").append(title);
+        sb.append(", videoUrl=").append(videoUrl);
+        sb.append(", duration=").append(duration);
+        sb.append(", orderNum=").append(orderNum);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 18 - 0
src/main/java/com/futu/course/course/mapper/CourseCategoryMapper.java

@@ -0,0 +1,18 @@
+package com.futu.course.course.mapper;
+
+import com.futu.course.course.domain.CourseCategory;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author yuu
+* @description 针对表【course_category】的数据库操作Mapper
+* @createDate 2025-05-05 18:45:13
+* @Entity com.futu.course.course.domain.CourseCategory
+*/
+public interface CourseCategoryMapper extends BaseMapper<CourseCategory> {
+
+}
+
+
+
+

+ 18 - 0
src/main/java/com/futu/course/course/mapper/CourseMapper.java

@@ -0,0 +1,18 @@
+package com.futu.course.course.mapper;
+
+import com.futu.course.course.domain.Course;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author yuu
+* @description 针对表【course(课程表)】的数据库操作Mapper
+* @createDate 2025-05-05 18:45:13
+* @Entity com.futu.course.course.domain.Course
+*/
+public interface CourseMapper extends BaseMapper<Course> {
+
+}
+
+
+
+

+ 18 - 0
src/main/java/com/futu/course/course/mapper/CourseSectionMapper.java

@@ -0,0 +1,18 @@
+package com.futu.course.course.mapper;
+
+import com.futu.course.course.domain.CourseSection;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author yuu
+* @description 针对表【course_section】的数据库操作Mapper
+* @createDate 2025-05-05 18:45:13
+* @Entity com.futu.course.course.domain.CourseSection
+*/
+public interface CourseSectionMapper extends BaseMapper<CourseSection> {
+
+}
+
+
+
+

+ 13 - 0
src/main/java/com/futu/course/course/service/CourseCategoryService.java

@@ -0,0 +1,13 @@
+package com.futu.course.course.service;
+
+import com.futu.course.course.domain.CourseCategory;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author yuu
+* @description 针对表【course_category】的数据库操作Service
+* @createDate 2025-05-05 18:45:13
+*/
+public interface CourseCategoryService extends IService<CourseCategory> {
+
+}

+ 13 - 0
src/main/java/com/futu/course/course/service/CourseSectionService.java

@@ -0,0 +1,13 @@
+package com.futu.course.course.service;
+
+import com.futu.course.course.domain.CourseSection;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author yuu
+* @description 针对表【course_section】的数据库操作Service
+* @createDate 2025-05-05 18:45:13
+*/
+public interface CourseSectionService extends IService<CourseSection> {
+
+}

+ 13 - 0
src/main/java/com/futu/course/course/service/CourseService.java

@@ -0,0 +1,13 @@
+package com.futu.course.course.service;
+
+import com.futu.course.course.domain.Course;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author yuu
+* @description 针对表【course(课程表)】的数据库操作Service
+* @createDate 2025-05-05 18:45:13
+*/
+public interface CourseService extends IService<Course> {
+
+}

+ 22 - 0
src/main/java/com/futu/course/course/service/impl/CourseCategoryServiceImpl.java

@@ -0,0 +1,22 @@
+package com.futu.course.course.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.futu.course.course.domain.CourseCategory;
+import com.futu.course.course.service.CourseCategoryService;
+import com.futu.course.course.mapper.CourseCategoryMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author yuu
+* @description 针对表【course_category】的数据库操作Service实现
+* @createDate 2025-05-05 18:45:13
+*/
+@Service
+public class CourseCategoryServiceImpl extends ServiceImpl<CourseCategoryMapper, CourseCategory>
+    implements CourseCategoryService{
+
+}
+
+
+
+

+ 22 - 0
src/main/java/com/futu/course/course/service/impl/CourseSectionServiceImpl.java

@@ -0,0 +1,22 @@
+package com.futu.course.course.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.futu.course.course.domain.CourseSection;
+import com.futu.course.course.service.CourseSectionService;
+import com.futu.course.course.mapper.CourseSectionMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author yuu
+* @description 针对表【course_section】的数据库操作Service实现
+* @createDate 2025-05-05 18:45:13
+*/
+@Service
+public class CourseSectionServiceImpl extends ServiceImpl<CourseSectionMapper, CourseSection>
+    implements CourseSectionService{
+
+}
+
+
+
+

+ 22 - 0
src/main/java/com/futu/course/course/service/impl/CourseServiceImpl.java

@@ -0,0 +1,22 @@
+package com.futu.course.course.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.futu.course.course.domain.Course;
+import com.futu.course.course.service.CourseService;
+import com.futu.course.course.mapper.CourseMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author yuu
+* @description 针对表【course(课程表)】的数据库操作Service实现
+* @createDate 2025-05-05 18:45:13
+*/
+@Service
+public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course>
+    implements CourseService{
+
+}
+
+
+
+

+ 126 - 0
src/main/java/com/futu/course/cupons/domain/Coupon.java

@@ -0,0 +1,126 @@
+package com.futu.course.cupons.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 优惠券
+ * @TableName coupon
+ */
+@TableName(value ="coupon")
+@Data
+public class Coupon implements Serializable {
+    /**
+     * 
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 
+     */
+    private String name;
+
+    /**
+     * 类型(1-满减券 2-折扣券)
+     */
+    private Integer type;
+
+    /**
+     * 满减条件
+     */
+    private BigDecimal conditionAmount;
+
+    /**
+     * 优惠值
+     */
+    private BigDecimal discount;
+
+    /**
+     * 库存
+     */
+    private Integer stock;
+
+    /**
+     * 
+     */
+    private Date startTime;
+
+    /**
+     * 
+     */
+    private Date endTime;
+
+    /**
+     * NULL表示平台券
+     */
+    private Long shopId;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        Coupon other = (Coupon) that;
+        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
+            && (this.getName() == null ? other.getName() == null : this.getName().equals(other.getName()))
+            && (this.getType() == null ? other.getType() == null : this.getType().equals(other.getType()))
+            && (this.getConditionAmount() == null ? other.getConditionAmount() == null : this.getConditionAmount().equals(other.getConditionAmount()))
+            && (this.getDiscount() == null ? other.getDiscount() == null : this.getDiscount().equals(other.getDiscount()))
+            && (this.getStock() == null ? other.getStock() == null : this.getStock().equals(other.getStock()))
+            && (this.getStartTime() == null ? other.getStartTime() == null : this.getStartTime().equals(other.getStartTime()))
+            && (this.getEndTime() == null ? other.getEndTime() == null : this.getEndTime().equals(other.getEndTime()))
+            && (this.getShopId() == null ? other.getShopId() == null : this.getShopId().equals(other.getShopId()));
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
+        result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
+        result = prime * result + ((getType() == null) ? 0 : getType().hashCode());
+        result = prime * result + ((getConditionAmount() == null) ? 0 : getConditionAmount().hashCode());
+        result = prime * result + ((getDiscount() == null) ? 0 : getDiscount().hashCode());
+        result = prime * result + ((getStock() == null) ? 0 : getStock().hashCode());
+        result = prime * result + ((getStartTime() == null) ? 0 : getStartTime().hashCode());
+        result = prime * result + ((getEndTime() == null) ? 0 : getEndTime().hashCode());
+        result = prime * result + ((getShopId() == null) ? 0 : getShopId().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(", name=").append(name);
+        sb.append(", type=").append(type);
+        sb.append(", conditionAmount=").append(conditionAmount);
+        sb.append(", discount=").append(discount);
+        sb.append(", stock=").append(stock);
+        sb.append(", startTime=").append(startTime);
+        sb.append(", endTime=").append(endTime);
+        sb.append(", shopId=").append(shopId);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 18 - 0
src/main/java/com/futu/course/cupons/mapper/CouponMapper.java

@@ -0,0 +1,18 @@
+package com.futu.course.cupons.mapper;
+
+import com.futu.course.cupons.domain.Coupon;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author yuu
+* @description 针对表【coupon(优惠券)】的数据库操作Mapper
+* @createDate 2025-05-05 18:53:35
+* @Entity com.futu.course.cupons.domain.Coupon
+*/
+public interface CouponMapper extends BaseMapper<Coupon> {
+
+}
+
+
+
+

+ 13 - 0
src/main/java/com/futu/course/cupons/service/CouponService.java

@@ -0,0 +1,13 @@
+package com.futu.course.cupons.service;
+
+import com.futu.course.cupons.domain.Coupon;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author yuu
+* @description 针对表【coupon(优惠券)】的数据库操作Service
+* @createDate 2025-05-05 18:53:35
+*/
+public interface CouponService extends IService<Coupon> {
+
+}

+ 22 - 0
src/main/java/com/futu/course/cupons/service/impl/CouponServiceImpl.java

@@ -0,0 +1,22 @@
+package com.futu.course.cupons.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.futu.course.cupons.domain.Coupon;
+import com.futu.course.cupons.service.CouponService;
+import com.futu.course.cupons.mapper.CouponMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author yuu
+* @description 针对表【coupon(优惠券)】的数据库操作Service实现
+* @createDate 2025-05-05 18:53:35
+*/
+@Service
+public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon>
+    implements CouponService{
+
+}
+
+
+
+

+ 118 - 0
src/main/java/com/futu/course/orders/domain/Order1.java

@@ -0,0 +1,118 @@
+package com.futu.course.orders.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 订单表
+ * @TableName order1
+ */
+@TableName(value ="order1")
+@Data
+public class Order1 implements Serializable {
+    /**
+     * 订单号
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 
+     */
+    private Long userId;
+
+    /**
+     * 订单总金额
+     */
+    private BigDecimal totalAmount;
+
+    /**
+     * 优惠金额
+     */
+    private BigDecimal discountAmount;
+
+    /**
+     * 实付金额
+     */
+    private BigDecimal payAmount;
+
+    /**
+     * 状态(0-待支付 1-已支付 2-已取消)
+     */
+    private Integer status;
+
+    /**
+     * 收货人信息(固化地址)
+     */
+    private Object receiverInfo;
+
+    /**
+     * 
+     */
+    private Date createTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        Order1 other = (Order1) 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.getTotalAmount() == null ? other.getTotalAmount() == null : this.getTotalAmount().equals(other.getTotalAmount()))
+            && (this.getDiscountAmount() == null ? other.getDiscountAmount() == null : this.getDiscountAmount().equals(other.getDiscountAmount()))
+            && (this.getPayAmount() == null ? other.getPayAmount() == null : this.getPayAmount().equals(other.getPayAmount()))
+            && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()))
+            && (this.getReceiverInfo() == null ? other.getReceiverInfo() == null : this.getReceiverInfo().equals(other.getReceiverInfo()))
+            && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()));
+    }
+
+    @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 + ((getTotalAmount() == null) ? 0 : getTotalAmount().hashCode());
+        result = prime * result + ((getDiscountAmount() == null) ? 0 : getDiscountAmount().hashCode());
+        result = prime * result + ((getPayAmount() == null) ? 0 : getPayAmount().hashCode());
+        result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
+        result = prime * result + ((getReceiverInfo() == null) ? 0 : getReceiverInfo().hashCode());
+        result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().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(", totalAmount=").append(totalAmount);
+        sb.append(", discountAmount=").append(discountAmount);
+        sb.append(", payAmount=").append(payAmount);
+        sb.append(", status=").append(status);
+        sb.append(", receiverInfo=").append(receiverInfo);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 78 - 0
src/main/java/com/futu/course/orders/domain/OrderCoupon.java

@@ -0,0 +1,78 @@
+package com.futu.course.orders.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import lombok.Data;
+
+/**
+ * 订单和优惠券关联表
+ * @TableName order_coupon
+ */
+@TableName(value ="order_coupon")
+@Data
+public class OrderCoupon implements Serializable {
+    /**
+     * 订单id
+     */
+    @TableId
+    private Long orderId;
+
+    /**
+     * 课程id
+     */
+
+    private Long couponId;
+
+    /**
+     * 优惠券
+     */
+    private BigDecimal discountAmount;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        OrderCoupon other = (OrderCoupon) that;
+        return (this.getOrderId() == null ? other.getOrderId() == null : this.getOrderId().equals(other.getOrderId()))
+            && (this.getCouponId() == null ? other.getCouponId() == null : this.getCouponId().equals(other.getCouponId()))
+            && (this.getDiscountAmount() == null ? other.getDiscountAmount() == null : this.getDiscountAmount().equals(other.getDiscountAmount()));
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((getOrderId() == null) ? 0 : getOrderId().hashCode());
+        result = prime * result + ((getCouponId() == null) ? 0 : getCouponId().hashCode());
+        result = prime * result + ((getDiscountAmount() == null) ? 0 : getDiscountAmount().hashCode());
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", orderId=").append(orderId);
+        sb.append(", couponId=").append(couponId);
+        sb.append(", discountAmount=").append(discountAmount);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 86 - 0
src/main/java/com/futu/course/orders/domain/OrderItem.java

@@ -0,0 +1,86 @@
+package com.futu.course.orders.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import lombok.Data;
+
+/**
+ * 订单和课程表关联表
+ * @TableName order_item
+ */
+@TableName(value ="order_item")
+@Data
+public class OrderItem implements Serializable {
+    /**
+     * 
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 订单id
+
+     */
+    private Long orderId;
+
+    /**
+     * 课程id
+     */
+    private Long courseId;
+
+    /**
+     * 价格
+     */
+    private BigDecimal price;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        OrderItem other = (OrderItem) that;
+        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
+            && (this.getOrderId() == null ? other.getOrderId() == null : this.getOrderId().equals(other.getOrderId()))
+            && (this.getCourseId() == null ? other.getCourseId() == null : this.getCourseId().equals(other.getCourseId()))
+            && (this.getPrice() == null ? other.getPrice() == null : this.getPrice().equals(other.getPrice()));
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
+        result = prime * result + ((getOrderId() == null) ? 0 : getOrderId().hashCode());
+        result = prime * result + ((getCourseId() == null) ? 0 : getCourseId().hashCode());
+        result = prime * result + ((getPrice() == null) ? 0 : getPrice().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(", orderId=").append(orderId);
+        sb.append(", courseId=").append(courseId);
+        sb.append(", price=").append(price);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 18 - 0
src/main/java/com/futu/course/orders/mapper/Order1Mapper.java

@@ -0,0 +1,18 @@
+package com.futu.course.orders.mapper;
+
+import com.futu.course.orders.domain.Order1;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author yuu
+* @description 针对表【order1(订单表)】的数据库操作Mapper
+* @createDate 2025-05-05 18:45:49
+* @Entity com.futu.course.orders.domain.Order1
+*/
+public interface Order1Mapper extends BaseMapper<Order1> {
+
+}
+
+
+
+

+ 18 - 0
src/main/java/com/futu/course/orders/mapper/OrderCouponMapper.java

@@ -0,0 +1,18 @@
+package com.futu.course.orders.mapper;
+
+import com.futu.course.orders.domain.OrderCoupon;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author yuu
+* @description 针对表【order_coupon(订单和优惠券关联表)】的数据库操作Mapper
+* @createDate 2025-05-05 18:45:49
+* @Entity com.futu.course.orders.domain.OrderCoupon
+*/
+public interface OrderCouponMapper extends BaseMapper<OrderCoupon> {
+
+}
+
+
+
+

+ 18 - 0
src/main/java/com/futu/course/orders/mapper/OrderItemMapper.java

@@ -0,0 +1,18 @@
+package com.futu.course.orders.mapper;
+
+import com.futu.course.orders.domain.OrderItem;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author yuu
+* @description 针对表【order_item(订单和课程表关联表)】的数据库操作Mapper
+* @createDate 2025-05-05 18:45:49
+* @Entity com.futu.course.orders.domain.OrderItem
+*/
+public interface OrderItemMapper extends BaseMapper<OrderItem> {
+
+}
+
+
+
+

+ 13 - 0
src/main/java/com/futu/course/orders/service/Order1Service.java

@@ -0,0 +1,13 @@
+package com.futu.course.orders.service;
+
+import com.futu.course.orders.domain.Order1;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author yuu
+* @description 针对表【order1(订单表)】的数据库操作Service
+* @createDate 2025-05-05 18:45:49
+*/
+public interface Order1Service extends IService<Order1> {
+
+}

+ 13 - 0
src/main/java/com/futu/course/orders/service/OrderCouponService.java

@@ -0,0 +1,13 @@
+package com.futu.course.orders.service;
+
+import com.futu.course.orders.domain.OrderCoupon;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author yuu
+* @description 针对表【order_coupon(订单和优惠券关联表)】的数据库操作Service
+* @createDate 2025-05-05 18:45:49
+*/
+public interface OrderCouponService extends IService<OrderCoupon> {
+
+}

+ 13 - 0
src/main/java/com/futu/course/orders/service/OrderItemService.java

@@ -0,0 +1,13 @@
+package com.futu.course.orders.service;
+
+import com.futu.course.orders.domain.OrderItem;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author yuu
+* @description 针对表【order_item(订单和课程表关联表)】的数据库操作Service
+* @createDate 2025-05-05 18:45:49
+*/
+public interface OrderItemService extends IService<OrderItem> {
+
+}

+ 22 - 0
src/main/java/com/futu/course/orders/service/impl/Order1ServiceImpl.java

@@ -0,0 +1,22 @@
+package com.futu.course.orders.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.futu.course.orders.domain.Order1;
+import com.futu.course.orders.service.Order1Service;
+import com.futu.course.orders.mapper.Order1Mapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author yuu
+* @description 针对表【order1(订单表)】的数据库操作Service实现
+* @createDate 2025-05-05 18:45:49
+*/
+@Service
+public class Order1ServiceImpl extends ServiceImpl<Order1Mapper, Order1>
+    implements Order1Service{
+
+}
+
+
+
+

+ 22 - 0
src/main/java/com/futu/course/orders/service/impl/OrderCouponServiceImpl.java

@@ -0,0 +1,22 @@
+package com.futu.course.orders.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.futu.course.orders.domain.OrderCoupon;
+import com.futu.course.orders.service.OrderCouponService;
+import com.futu.course.orders.mapper.OrderCouponMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author yuu
+* @description 针对表【order_coupon(订单和优惠券关联表)】的数据库操作Service实现
+* @createDate 2025-05-05 18:45:49
+*/
+@Service
+public class OrderCouponServiceImpl extends ServiceImpl<OrderCouponMapper, OrderCoupon>
+    implements OrderCouponService{
+
+}
+
+
+
+

+ 22 - 0
src/main/java/com/futu/course/orders/service/impl/OrderItemServiceImpl.java

@@ -0,0 +1,22 @@
+package com.futu.course.orders.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.futu.course.orders.domain.OrderItem;
+import com.futu.course.orders.service.OrderItemService;
+import com.futu.course.orders.mapper.OrderItemMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author yuu
+* @description 针对表【order_item(订单和课程表关联表)】的数据库操作Service实现
+* @createDate 2025-05-05 18:45:49
+*/
+@Service
+public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem>
+    implements OrderItemService{
+
+}
+
+
+
+

+ 109 - 0
src/main/java/com/futu/course/shop/domain/Shop.java

@@ -0,0 +1,109 @@
+package com.futu.course.shop.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 店铺表
+ * @TableName shop
+ */
+@TableName(value ="shop")
+@Data
+public class Shop implements Serializable {
+    /**
+     * 
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 店铺名称
+     */
+    private String name;
+
+    /**
+     * 店铺Logo
+     */
+    private String logo;
+
+    /**
+     * 店铺简介
+     */
+    private String description;
+
+    /**
+     * 状态(0-待审核 1-已通过 2-已拒绝)
+     */
+    private Integer status;
+
+    /**
+     * 主管理员ID
+     */
+    private Long adminUserId;
+
+    /**
+     * 
+     */
+    private Date createTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        Shop other = (Shop) that;
+        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
+            && (this.getName() == null ? other.getName() == null : this.getName().equals(other.getName()))
+            && (this.getLogo() == null ? other.getLogo() == null : this.getLogo().equals(other.getLogo()))
+            && (this.getDescription() == null ? other.getDescription() == null : this.getDescription().equals(other.getDescription()))
+            && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()))
+            && (this.getAdminUserId() == null ? other.getAdminUserId() == null : this.getAdminUserId().equals(other.getAdminUserId()))
+            && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()));
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
+        result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
+        result = prime * result + ((getLogo() == null) ? 0 : getLogo().hashCode());
+        result = prime * result + ((getDescription() == null) ? 0 : getDescription().hashCode());
+        result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
+        result = prime * result + ((getAdminUserId() == null) ? 0 : getAdminUserId().hashCode());
+        result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().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(", name=").append(name);
+        sb.append(", logo=").append(logo);
+        sb.append(", description=").append(description);
+        sb.append(", status=").append(status);
+        sb.append(", adminUserId=").append(adminUserId);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 69 - 0
src/main/java/com/futu/course/shop/domain/ShopAdmin.java

@@ -0,0 +1,69 @@
+package com.futu.course.shop.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ * 用户和店铺关联表
+ * @TableName shop_admin
+ */
+@TableName(value ="shop_admin")
+@Data
+public class ShopAdmin implements Serializable {
+    /**
+     *
+     */
+    @TableId
+    private Long shopId;
+
+    /**
+     *
+     */
+
+    private Long userId;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        ShopAdmin other = (ShopAdmin) that;
+        return (this.getShopId() == null ? other.getShopId() == null : this.getShopId().equals(other.getShopId()))
+            && (this.getUserId() == null ? other.getUserId() == null : this.getUserId().equals(other.getUserId()));
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((getShopId() == null) ? 0 : getShopId().hashCode());
+        result = prime * result + ((getUserId() == null) ? 0 : getUserId().hashCode());
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", shopId=").append(shopId);
+        sb.append(", userId=").append(userId);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 125 - 0
src/main/java/com/futu/course/shop/domain/Teacher.java

@@ -0,0 +1,125 @@
+package com.futu.course.shop.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 老师表
+ * @TableName teacher
+ */
+@TableName(value ="teacher")
+@Data
+public class Teacher implements Serializable {
+    /**
+     * 老师ID(Snowflake生成)
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 老师姓名
+     */
+    private String name;
+
+    /**
+     * 头像URL
+     */
+    private String avatar;
+
+    /**
+     * 职称/头衔
+     */
+    private String title;
+
+    /**
+     * 老师简介
+     */
+    private String intro;
+
+    /**
+     * 所属店铺(NULL表示平台自有老师)
+     */
+    private Long shopId;
+
+    /**
+     * 关联的用户ID(如果老师需要登录系统)
+     */
+    private Long userId;
+
+    /**
+     * 状态(0-待审核 1-已上架 2-已禁用)
+     */
+    private Integer status;
+
+    /**
+     * 
+     */
+    private Date createTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        Teacher other = (Teacher) that;
+        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
+            && (this.getName() == null ? other.getName() == null : this.getName().equals(other.getName()))
+            && (this.getAvatar() == null ? other.getAvatar() == null : this.getAvatar().equals(other.getAvatar()))
+            && (this.getTitle() == null ? other.getTitle() == null : this.getTitle().equals(other.getTitle()))
+            && (this.getIntro() == null ? other.getIntro() == null : this.getIntro().equals(other.getIntro()))
+            && (this.getShopId() == null ? other.getShopId() == null : this.getShopId().equals(other.getShopId()))
+            && (this.getUserId() == null ? other.getUserId() == null : this.getUserId().equals(other.getUserId()))
+            && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()))
+            && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()));
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
+        result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
+        result = prime * result + ((getAvatar() == null) ? 0 : getAvatar().hashCode());
+        result = prime * result + ((getTitle() == null) ? 0 : getTitle().hashCode());
+        result = prime * result + ((getIntro() == null) ? 0 : getIntro().hashCode());
+        result = prime * result + ((getShopId() == null) ? 0 : getShopId().hashCode());
+        result = prime * result + ((getUserId() == null) ? 0 : getUserId().hashCode());
+        result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
+        result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().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(", name=").append(name);
+        sb.append(", avatar=").append(avatar);
+        sb.append(", title=").append(title);
+        sb.append(", intro=").append(intro);
+        sb.append(", shopId=").append(shopId);
+        sb.append(", userId=").append(userId);
+        sb.append(", status=").append(status);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 18 - 0
src/main/java/com/futu/course/shop/mapper/ShopAdminMapper.java

@@ -0,0 +1,18 @@
+package com.futu.course.shop.mapper;
+
+import com.futu.course.shop.domain.ShopAdmin;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author yuu
+* @description 针对表【shop_admin(用户和店铺关联表)】的数据库操作Mapper
+* @createDate 2025-05-05 18:53:08
+* @Entity com.futu.course.shop.domain.ShopAdmin
+*/
+public interface ShopAdminMapper extends BaseMapper<ShopAdmin> {
+
+}
+
+
+
+

+ 18 - 0
src/main/java/com/futu/course/shop/mapper/ShopMapper.java

@@ -0,0 +1,18 @@
+package com.futu.course.shop.mapper;
+
+import com.futu.course.shop.domain.Shop;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author yuu
+* @description 针对表【shop(店铺表)】的数据库操作Mapper
+* @createDate 2025-05-05 18:53:08
+* @Entity com.futu.course.shop.domain.Shop
+*/
+public interface ShopMapper extends BaseMapper<Shop> {
+
+}
+
+
+
+

+ 18 - 0
src/main/java/com/futu/course/shop/mapper/TeacherMapper.java

@@ -0,0 +1,18 @@
+package com.futu.course.shop.mapper;
+
+import com.futu.course.shop.domain.Teacher;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author yuu
+* @description 针对表【teacher(老师表)】的数据库操作Mapper
+* @createDate 2025-05-05 18:54:17
+* @Entity com.futu.course.shop.domain.Teacher
+*/
+public interface TeacherMapper extends BaseMapper<Teacher> {
+
+}
+
+
+
+

+ 13 - 0
src/main/java/com/futu/course/shop/service/ShopAdminService.java

@@ -0,0 +1,13 @@
+package com.futu.course.shop.service;
+
+import com.futu.course.shop.domain.ShopAdmin;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author yuu
+* @description 针对表【shop_admin(用户和店铺关联表)】的数据库操作Service
+* @createDate 2025-05-05 18:53:08
+*/
+public interface ShopAdminService extends IService<ShopAdmin> {
+
+}

+ 13 - 0
src/main/java/com/futu/course/shop/service/ShopService.java

@@ -0,0 +1,13 @@
+package com.futu.course.shop.service;
+
+import com.futu.course.shop.domain.Shop;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author yuu
+* @description 针对表【shop(店铺表)】的数据库操作Service
+* @createDate 2025-05-05 18:53:08
+*/
+public interface ShopService extends IService<Shop> {
+
+}

+ 13 - 0
src/main/java/com/futu/course/shop/service/TeacherService.java

@@ -0,0 +1,13 @@
+package com.futu.course.shop.service;
+
+import com.futu.course.shop.domain.Teacher;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author yuu
+* @description 针对表【teacher(老师表)】的数据库操作Service
+* @createDate 2025-05-05 18:54:17
+*/
+public interface TeacherService extends IService<Teacher> {
+
+}

+ 22 - 0
src/main/java/com/futu/course/shop/service/impl/ShopAdminServiceImpl.java

@@ -0,0 +1,22 @@
+package com.futu.course.shop.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.futu.course.shop.domain.ShopAdmin;
+import com.futu.course.shop.service.ShopAdminService;
+import com.futu.course.shop.mapper.ShopAdminMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author yuu
+* @description 针对表【shop_admin(用户和店铺关联表)】的数据库操作Service实现
+* @createDate 2025-05-05 18:53:08
+*/
+@Service
+public class ShopAdminServiceImpl extends ServiceImpl<ShopAdminMapper, ShopAdmin>
+    implements ShopAdminService{
+
+}
+
+
+
+

+ 22 - 0
src/main/java/com/futu/course/shop/service/impl/ShopServiceImpl.java

@@ -0,0 +1,22 @@
+package com.futu.course.shop.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.futu.course.shop.domain.Shop;
+import com.futu.course.shop.service.ShopService;
+import com.futu.course.shop.mapper.ShopMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author yuu
+* @description 针对表【shop(店铺表)】的数据库操作Service实现
+* @createDate 2025-05-05 18:53:08
+*/
+@Service
+public class ShopServiceImpl extends ServiceImpl<ShopMapper, Shop>
+    implements ShopService{
+
+}
+
+
+
+

+ 22 - 0
src/main/java/com/futu/course/shop/service/impl/TeacherServiceImpl.java

@@ -0,0 +1,22 @@
+package com.futu.course.shop.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.futu.course.shop.domain.Teacher;
+import com.futu.course.shop.service.TeacherService;
+import com.futu.course.shop.mapper.TeacherMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author yuu
+* @description 针对表【teacher(老师表)】的数据库操作Service实现
+* @createDate 2025-05-05 18:54:17
+*/
+@Service
+public class TeacherServiceImpl extends ServiceImpl<TeacherMapper, Teacher>
+    implements TeacherService{
+
+}
+
+
+
+

+ 157 - 0
src/main/java/com/futu/course/user/domain/User.java

@@ -0,0 +1,157 @@
+package com.futu.course.user.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 用户表
+ * @TableName user
+ */
+@TableName(value ="user")
+@Data
+public class User implements Serializable {
+    /**
+     * 用户ID(使用Snowflake算法生成)
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 
+     */
+    private String openId;
+
+    /**
+     * 
+     */
+    private String unionId;
+
+    /**
+     * 
+     */
+    private String sessionKey;
+
+    /**
+     * 登录账号
+     */
+    private String username;
+
+    /**
+     * 加密后的密码
+     */
+    private String password;
+
+    /**
+     * 盐
+     */
+    private String salt;
+
+    /**
+     * 昵称
+     */
+    private String nickname;
+
+    /**
+     * 头像URL
+     */
+    private String avatar;
+
+    /**
+     * 手机号
+     */
+    private String mobile;
+
+    /**
+     * 会员等级(0-普通用户)
+     */
+    private Integer memberLevel;
+
+    /**
+     * 状态(0-禁用 1-正常)
+     */
+    private Integer status;
+
+    /**
+     * 
+     */
+    private Date createTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        User other = (User) that;
+        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
+            && (this.getOpenId() == null ? other.getOpenId() == null : this.getOpenId().equals(other.getOpenId()))
+            && (this.getUnionId() == null ? other.getUnionId() == null : this.getUnionId().equals(other.getUnionId()))
+            && (this.getSessionKey() == null ? other.getSessionKey() == null : this.getSessionKey().equals(other.getSessionKey()))
+            && (this.getUsername() == null ? other.getUsername() == null : this.getUsername().equals(other.getUsername()))
+            && (this.getPassword() == null ? other.getPassword() == null : this.getPassword().equals(other.getPassword()))
+            && (this.getSalt() == null ? other.getSalt() == null : this.getSalt().equals(other.getSalt()))
+            && (this.getNickname() == null ? other.getNickname() == null : this.getNickname().equals(other.getNickname()))
+            && (this.getAvatar() == null ? other.getAvatar() == null : this.getAvatar().equals(other.getAvatar()))
+            && (this.getMobile() == null ? other.getMobile() == null : this.getMobile().equals(other.getMobile()))
+            && (this.getMemberLevel() == null ? other.getMemberLevel() == null : this.getMemberLevel().equals(other.getMemberLevel()))
+            && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()))
+            && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()));
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
+        result = prime * result + ((getOpenId() == null) ? 0 : getOpenId().hashCode());
+        result = prime * result + ((getUnionId() == null) ? 0 : getUnionId().hashCode());
+        result = prime * result + ((getSessionKey() == null) ? 0 : getSessionKey().hashCode());
+        result = prime * result + ((getUsername() == null) ? 0 : getUsername().hashCode());
+        result = prime * result + ((getPassword() == null) ? 0 : getPassword().hashCode());
+        result = prime * result + ((getSalt() == null) ? 0 : getSalt().hashCode());
+        result = prime * result + ((getNickname() == null) ? 0 : getNickname().hashCode());
+        result = prime * result + ((getAvatar() == null) ? 0 : getAvatar().hashCode());
+        result = prime * result + ((getMobile() == null) ? 0 : getMobile().hashCode());
+        result = prime * result + ((getMemberLevel() == null) ? 0 : getMemberLevel().hashCode());
+        result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
+        result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().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(", openId=").append(openId);
+        sb.append(", unionId=").append(unionId);
+        sb.append(", sessionKey=").append(sessionKey);
+        sb.append(", username=").append(username);
+        sb.append(", password=").append(password);
+        sb.append(", salt=").append(salt);
+        sb.append(", nickname=").append(nickname);
+        sb.append(", avatar=").append(avatar);
+        sb.append(", mobile=").append(mobile);
+        sb.append(", memberLevel=").append(memberLevel);
+        sb.append(", status=").append(status);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 124 - 0
src/main/java/com/futu/course/user/domain/UserAddress.java

@@ -0,0 +1,124 @@
+package com.futu.course.user.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ * 收货地址表
+ * @TableName user_address
+ */
+@TableName(value ="user_address")
+@Data
+public class UserAddress implements Serializable {
+    /**
+     * 
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 
+     */
+    private Long userId;
+
+    /**
+     * 收货人
+     */
+    private String receiver;
+
+    /**
+     * 
+     */
+    private String phone;
+
+    /**
+     * 
+     */
+    private String province;
+
+    /**
+     * 
+     */
+    private String city;
+
+    /**
+     * 
+     */
+    private String district;
+
+    /**
+     * 详细地址
+     */
+    private String detail;
+
+    /**
+     * 是否默认地址
+     */
+    private Integer isDefault;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        UserAddress other = (UserAddress) 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.getReceiver() == null ? other.getReceiver() == null : this.getReceiver().equals(other.getReceiver()))
+            && (this.getPhone() == null ? other.getPhone() == null : this.getPhone().equals(other.getPhone()))
+            && (this.getProvince() == null ? other.getProvince() == null : this.getProvince().equals(other.getProvince()))
+            && (this.getCity() == null ? other.getCity() == null : this.getCity().equals(other.getCity()))
+            && (this.getDistrict() == null ? other.getDistrict() == null : this.getDistrict().equals(other.getDistrict()))
+            && (this.getDetail() == null ? other.getDetail() == null : this.getDetail().equals(other.getDetail()))
+            && (this.getIsDefault() == null ? other.getIsDefault() == null : this.getIsDefault().equals(other.getIsDefault()));
+    }
+
+    @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 + ((getReceiver() == null) ? 0 : getReceiver().hashCode());
+        result = prime * result + ((getPhone() == null) ? 0 : getPhone().hashCode());
+        result = prime * result + ((getProvince() == null) ? 0 : getProvince().hashCode());
+        result = prime * result + ((getCity() == null) ? 0 : getCity().hashCode());
+        result = prime * result + ((getDistrict() == null) ? 0 : getDistrict().hashCode());
+        result = prime * result + ((getDetail() == null) ? 0 : getDetail().hashCode());
+        result = prime * result + ((getIsDefault() == null) ? 0 : getIsDefault().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(", receiver=").append(receiver);
+        sb.append(", phone=").append(phone);
+        sb.append(", province=").append(province);
+        sb.append(", city=").append(city);
+        sb.append(", district=").append(district);
+        sb.append(", detail=").append(detail);
+        sb.append(", isDefault=").append(isDefault);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 93 - 0
src/main/java/com/futu/course/user/domain/UserCoupon.java

@@ -0,0 +1,93 @@
+package com.futu.course.user.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 用户和优惠券关联表
+ * @TableName user_coupon
+ */
+@TableName(value ="user_coupon")
+@Data
+public class UserCoupon implements Serializable {
+    /**
+     * 
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 
+     */
+    private Long userId;
+
+    /**
+     * 
+     */
+    private Long couponId;
+
+    /**
+     * 0-未使用 1-已使用
+     */
+    private Integer status;
+
+    /**
+     * 
+     */
+    private Date getTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public boolean equals(Object that) {
+        if (this == that) {
+            return true;
+        }
+        if (that == null) {
+            return false;
+        }
+        if (getClass() != that.getClass()) {
+            return false;
+        }
+        UserCoupon other = (UserCoupon) 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.getCouponId() == null ? other.getCouponId() == null : this.getCouponId().equals(other.getCouponId()))
+            && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()))
+            && (this.getGetTime() == null ? other.getGetTime() == null : this.getGetTime().equals(other.getGetTime()));
+    }
+
+    @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 + ((getCouponId() == null) ? 0 : getCouponId().hashCode());
+        result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
+        result = prime * result + ((getGetTime() == null) ? 0 : getGetTime().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(", couponId=").append(couponId);
+        sb.append(", status=").append(status);
+        sb.append(", getTime=").append(getTime);
+        sb.append(", serialVersionUID=").append(serialVersionUID);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 18 - 0
src/main/java/com/futu/course/user/mapper/UserAddressMapper.java

@@ -0,0 +1,18 @@
+package com.futu.course.user.mapper;
+
+import com.futu.course.user.domain.UserAddress;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author yuu
+* @description 针对表【user_address(收货地址表)】的数据库操作Mapper
+* @createDate 2025-05-05 18:52:53
+* @Entity com.futu.course.user.domain.UserAddress
+*/
+public interface UserAddressMapper extends BaseMapper<UserAddress> {
+
+}
+
+
+
+

+ 18 - 0
src/main/java/com/futu/course/user/mapper/UserCouponMapper.java

@@ -0,0 +1,18 @@
+package com.futu.course.user.mapper;
+
+import com.futu.course.user.domain.UserCoupon;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author yuu
+* @description 针对表【user_coupon(用户和优惠券关联表)】的数据库操作Mapper
+* @createDate 2025-05-05 18:52:53
+* @Entity com.futu.course.user.domain.UserCoupon
+*/
+public interface UserCouponMapper extends BaseMapper<UserCoupon> {
+
+}
+
+
+
+

+ 18 - 0
src/main/java/com/futu/course/user/mapper/UserMapper.java

@@ -0,0 +1,18 @@
+package com.futu.course.user.mapper;
+
+import com.futu.course.user.domain.User;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author yuu
+* @description 针对表【user(用户表)】的数据库操作Mapper
+* @createDate 2025-05-05 18:52:53
+* @Entity com.futu.course.user.domain.User
+*/
+public interface UserMapper extends BaseMapper<User> {
+
+}
+
+
+
+

+ 13 - 0
src/main/java/com/futu/course/user/service/UserAddressService.java

@@ -0,0 +1,13 @@
+package com.futu.course.user.service;
+
+import com.futu.course.user.domain.UserAddress;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author yuu
+* @description 针对表【user_address(收货地址表)】的数据库操作Service
+* @createDate 2025-05-05 18:52:53
+*/
+public interface UserAddressService extends IService<UserAddress> {
+
+}

+ 13 - 0
src/main/java/com/futu/course/user/service/UserCouponService.java

@@ -0,0 +1,13 @@
+package com.futu.course.user.service;
+
+import com.futu.course.user.domain.UserCoupon;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author yuu
+* @description 针对表【user_coupon(用户和优惠券关联表)】的数据库操作Service
+* @createDate 2025-05-05 18:52:53
+*/
+public interface UserCouponService extends IService<UserCoupon> {
+
+}

+ 13 - 0
src/main/java/com/futu/course/user/service/UserService.java

@@ -0,0 +1,13 @@
+package com.futu.course.user.service;
+
+import com.futu.course.user.domain.User;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author yuu
+* @description 针对表【user(用户表)】的数据库操作Service
+* @createDate 2025-05-05 18:52:53
+*/
+public interface UserService extends IService<User> {
+
+}

+ 22 - 0
src/main/java/com/futu/course/user/service/impl/UserAddressServiceImpl.java

@@ -0,0 +1,22 @@
+package com.futu.course.user.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.futu.course.user.domain.UserAddress;
+import com.futu.course.user.service.UserAddressService;
+import com.futu.course.user.mapper.UserAddressMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author yuu
+* @description 针对表【user_address(收货地址表)】的数据库操作Service实现
+* @createDate 2025-05-05 18:52:53
+*/
+@Service
+public class UserAddressServiceImpl extends ServiceImpl<UserAddressMapper, UserAddress>
+    implements UserAddressService{
+
+}
+
+
+
+

+ 22 - 0
src/main/java/com/futu/course/user/service/impl/UserCouponServiceImpl.java

@@ -0,0 +1,22 @@
+package com.futu.course.user.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.futu.course.user.domain.UserCoupon;
+import com.futu.course.user.service.UserCouponService;
+import com.futu.course.user.mapper.UserCouponMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author yuu
+* @description 针对表【user_coupon(用户和优惠券关联表)】的数据库操作Service实现
+* @createDate 2025-05-05 18:52:53
+*/
+@Service
+public class UserCouponServiceImpl extends ServiceImpl<UserCouponMapper, UserCoupon>
+    implements UserCouponService{
+
+}
+
+
+
+

+ 22 - 0
src/main/java/com/futu/course/user/service/impl/UserServiceImpl.java

@@ -0,0 +1,22 @@
+package com.futu.course.user.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.futu.course.user.domain.User;
+import com.futu.course.user.service.UserService;
+import com.futu.course.user.mapper.UserMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author yuu
+* @description 针对表【user(用户表)】的数据库操作Service实现
+* @createDate 2025-05-05 18:52:53
+*/
+@Service
+public class UserServiceImpl extends ServiceImpl<UserMapper, User>
+    implements UserService{
+
+}
+
+
+
+

+ 3 - 2
src/main/resources/application.yml

@@ -3,9 +3,10 @@ server:
 spring:
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://182.92.251.243:3306/dome?characterEncoding=utf8&serverTimezone=GMT%2B8
+    url: jdbc:mysql://182.92.251.243:3306/goose?characterEncoding=utf8&serverTimezone=GMT%2B8
     username: root
-    password: yxp2407A
+    password: 01241314Yxp!
+
 
   redis:
     host: localhost

+ 24 - 0
src/main/resources/mapper/CouponMapper.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.futu.course.cupons.mapper.CouponMapper">
+
+    <resultMap id="BaseResultMap" type="com.futu.course.cupons.domain.Coupon">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="name" column="name" jdbcType="VARCHAR"/>
+            <result property="type" column="type" jdbcType="TINYINT"/>
+            <result property="conditionAmount" column="condition_amount" jdbcType="DECIMAL"/>
+            <result property="discount" column="discount" jdbcType="DECIMAL"/>
+            <result property="stock" column="stock" jdbcType="INTEGER"/>
+            <result property="startTime" column="start_time" jdbcType="TIMESTAMP"/>
+            <result property="endTime" column="end_time" jdbcType="TIMESTAMP"/>
+            <result property="shopId" column="shop_id" jdbcType="BIGINT"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,name,type,
+        condition_amount,discount,stock,
+        start_time,end_time,shop_id
+    </sql>
+</mapper>

+ 16 - 0
src/main/resources/mapper/CourseCategoryMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.futu.course.course.mapper.CourseCategoryMapper">
+
+    <resultMap id="BaseResultMap" type="com.futu.course.course.domain.CourseCategory">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="name" column="name" jdbcType="VARCHAR"/>
+            <result property="parentId" column="parent_id" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,name,parent_id
+    </sql>
+</mapper>

+ 27 - 0
src/main/resources/mapper/CourseMapper.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.futu.course.course.mapper.CourseMapper">
+
+    <resultMap id="BaseResultMap" type="com.futu.course.course.domain.Course">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="title" column="title" jdbcType="VARCHAR"/>
+            <result property="shopId" column="shop_id" jdbcType="BIGINT"/>
+            <result property="teacherId" column="teacher_id" jdbcType="BIGINT"/>
+            <result property="categoryId" column="category_id" jdbcType="INTEGER"/>
+            <result property="price" column="price" jdbcType="DECIMAL"/>
+            <result property="coverImg" column="cover_img" jdbcType="VARCHAR"/>
+            <result property="bannerImgs" column="banner_imgs" jdbcType="OTHER"/>
+            <result property="startTime" column="start_time" jdbcType="TIMESTAMP"/>
+            <result property="endTime" column="end_time" jdbcType="TIMESTAMP"/>
+            <result property="status" column="status" jdbcType="TINYINT"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,title,shop_id,
+        teacher_id,category_id,price,
+        cover_img,banner_imgs,start_time,
+        end_time,status
+    </sql>
+</mapper>

+ 20 - 0
src/main/resources/mapper/CourseSectionMapper.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.futu.course.course.mapper.CourseSectionMapper">
+
+    <resultMap id="BaseResultMap" type="com.futu.course.course.domain.CourseSection">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="courseId" column="course_id" jdbcType="BIGINT"/>
+            <result property="title" column="title" jdbcType="VARCHAR"/>
+            <result property="videoUrl" column="video_url" jdbcType="VARCHAR"/>
+            <result property="duration" column="duration" jdbcType="INTEGER"/>
+            <result property="orderNum" column="order_num" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,course_id,title,
+        video_url,duration,order_num
+    </sql>
+</mapper>

+ 23 - 0
src/main/resources/mapper/Order1Mapper.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.futu.course.orders.mapper.Order1Mapper">
+
+    <resultMap id="BaseResultMap" type="com.futu.course.orders.domain.Order1">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="userId" column="user_id" jdbcType="BIGINT"/>
+            <result property="totalAmount" column="total_amount" jdbcType="DECIMAL"/>
+            <result property="discountAmount" column="discount_amount" jdbcType="DECIMAL"/>
+            <result property="payAmount" column="pay_amount" jdbcType="DECIMAL"/>
+            <result property="status" column="status" jdbcType="TINYINT"/>
+            <result property="receiverInfo" column="receiver_info" jdbcType="OTHER"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,user_id,total_amount,
+        discount_amount,pay_amount,status,
+        receiver_info,create_time
+    </sql>
+</mapper>

+ 16 - 0
src/main/resources/mapper/OrderCouponMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.futu.course.orders.mapper.OrderCouponMapper">
+
+    <resultMap id="BaseResultMap" type="com.futu.course.orders.domain.OrderCoupon">
+            <id property="orderId" column="order_id" jdbcType="BIGINT"/>
+            <id property="couponId" column="coupon_id" jdbcType="BIGINT"/>
+            <result property="discountAmount" column="discount_amount" jdbcType="DECIMAL"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        order_id,coupon_id,discount_amount
+    </sql>
+</mapper>

+ 18 - 0
src/main/resources/mapper/OrderItemMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.futu.course.orders.mapper.OrderItemMapper">
+
+    <resultMap id="BaseResultMap" type="com.futu.course.orders.domain.OrderItem">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="orderId" column="order_id" jdbcType="BIGINT"/>
+            <result property="courseId" column="course_id" jdbcType="BIGINT"/>
+            <result property="price" column="price" jdbcType="DECIMAL"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,order_id,course_id,
+        price
+    </sql>
+</mapper>

+ 15 - 0
src/main/resources/mapper/ShopAdminMapper.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.futu.course.shop.mapper.ShopAdminMapper">
+
+    <resultMap id="BaseResultMap" type="com.futu.course.shop.domain.ShopAdmin">
+            <id property="shopId" column="shop_id" jdbcType="BIGINT"/>
+            <id property="userId" column="user_id" jdbcType="BIGINT"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        shop_id,user_id
+    </sql>
+</mapper>

+ 22 - 0
src/main/resources/mapper/ShopMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.futu.course.shop.mapper.ShopMapper">
+
+    <resultMap id="BaseResultMap" type="com.futu.course.shop.domain.Shop">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="name" column="name" jdbcType="VARCHAR"/>
+            <result property="logo" column="logo" jdbcType="VARCHAR"/>
+            <result property="description" column="description" jdbcType="VARCHAR"/>
+            <result property="status" column="status" jdbcType="TINYINT"/>
+            <result property="adminUserId" column="admin_user_id" jdbcType="BIGINT"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,name,logo,
+        description,status,admin_user_id,
+        create_time
+    </sql>
+</mapper>

+ 24 - 0
src/main/resources/mapper/TeacherMapper.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.futu.course.shop.mapper.TeacherMapper">
+
+    <resultMap id="BaseResultMap" type="com.futu.course.shop.domain.Teacher">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="name" column="name" jdbcType="VARCHAR"/>
+            <result property="avatar" column="avatar" jdbcType="VARCHAR"/>
+            <result property="title" column="title" jdbcType="VARCHAR"/>
+            <result property="intro" column="intro" jdbcType="VARCHAR"/>
+            <result property="shopId" column="shop_id" jdbcType="BIGINT"/>
+            <result property="userId" column="user_id" jdbcType="BIGINT"/>
+            <result property="status" column="status" jdbcType="TINYINT"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,name,avatar,
+        title,intro,shop_id,
+        user_id,status,create_time
+    </sql>
+</mapper>

+ 24 - 0
src/main/resources/mapper/UserAddressMapper.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.futu.course.user.mapper.UserAddressMapper">
+
+    <resultMap id="BaseResultMap" type="com.futu.course.user.domain.UserAddress">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="userId" column="user_id" jdbcType="BIGINT"/>
+            <result property="receiver" column="receiver" jdbcType="VARCHAR"/>
+            <result property="phone" column="phone" jdbcType="VARCHAR"/>
+            <result property="province" column="province" jdbcType="VARCHAR"/>
+            <result property="city" column="city" jdbcType="VARCHAR"/>
+            <result property="district" column="district" jdbcType="VARCHAR"/>
+            <result property="detail" column="detail" jdbcType="VARCHAR"/>
+            <result property="isDefault" column="is_default" jdbcType="TINYINT"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,user_id,receiver,
+        phone,province,city,
+        district,detail,is_default
+    </sql>
+</mapper>

+ 19 - 0
src/main/resources/mapper/UserCouponMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.futu.course.user.mapper.UserCouponMapper">
+
+    <resultMap id="BaseResultMap" type="com.futu.course.user.domain.UserCoupon">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="userId" column="user_id" jdbcType="BIGINT"/>
+            <result property="couponId" column="coupon_id" jdbcType="BIGINT"/>
+            <result property="status" column="status" jdbcType="TINYINT"/>
+            <result property="getTime" column="get_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,user_id,coupon_id,
+        status,get_time
+    </sql>
+</mapper>

+ 30 - 0
src/main/resources/mapper/UserMapper.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.futu.course.user.mapper.UserMapper">
+
+    <resultMap id="BaseResultMap" type="com.futu.course.user.domain.User">
+            <id property="id" column="id" jdbcType="BIGINT"/>
+            <result property="openId" column="open_id" jdbcType="VARCHAR"/>
+            <result property="unionId" column="union_id" jdbcType="VARCHAR"/>
+            <result property="sessionKey" column="session_key" jdbcType="VARCHAR"/>
+            <result property="username" column="username" jdbcType="VARCHAR"/>
+            <result property="password" column="password" jdbcType="VARCHAR"/>
+            <result property="salt" column="salt" jdbcType="VARCHAR"/>
+            <result property="nickname" column="nickname" jdbcType="VARCHAR"/>
+            <result property="avatar" column="avatar" jdbcType="VARCHAR"/>
+            <result property="mobile" column="mobile" jdbcType="VARCHAR"/>
+            <result property="memberLevel" column="member_level" jdbcType="TINYINT"/>
+            <result property="status" column="status" jdbcType="TINYINT"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,open_id,union_id,
+        session_key,username,password,
+        salt,nickname,avatar,
+        mobile,member_level,status,
+        create_time
+    </sql>
+</mapper>