diff --git a/ruoyi-system/src/main/java/bounty/domain/Bounty.java b/ruoyi-system/src/main/java/bounty/domain/Bounty.java
new file mode 100644
index 0000000..f0236f2
--- /dev/null
+++ b/ruoyi-system/src/main/java/bounty/domain/Bounty.java
@@ -0,0 +1,97 @@
+package bounty.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List; // 导入List类
+
+// 悬赏实体类
+@Data
+@TableName("bounty")
+public class Bounty {
+    @TableId(type = IdType.AUTO) // 添加自增策略
+    private Long id;
+    private String title;
+    private String description;
+    private BigDecimal reward;
+    private Long creator_id;
+    private Date deadline;
+
+    //0代表发布后，还没有人回复这个悬赏   1代表这个悬赏有人回复了
+    private Integer status;
+    private Date createTime;
+
+    private List<BountySubmission> submissions;
+    public void setSubmissions(List<BountySubmission> submissions) {
+        this.submissions = submissions;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public BigDecimal getReward() {
+        return reward;
+    }
+
+    public void setReward(BigDecimal reward) {
+        this.reward = reward;
+    }
+
+    public Long getCreator_id() {
+        return creator_id;
+    }
+
+    public void setCreator_id(Long creator_id) {
+        this.creator_id = creator_id;
+    }
+
+    public Date getDeadline() {
+        return deadline;
+    }
+
+    public void setDeadline(Date deadline) {
+        this.deadline = deadline;
+    }
+
+    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;
+    }
+}
+
diff --git a/ruoyi-system/src/main/java/bounty/domain/BountySubmission.java b/ruoyi-system/src/main/java/bounty/domain/BountySubmission.java
new file mode 100644
index 0000000..508e566
--- /dev/null
+++ b/ruoyi-system/src/main/java/bounty/domain/BountySubmission.java
@@ -0,0 +1,77 @@
+package bounty.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+// 悬赏提交实体类
+@Data
+@TableName("bounty_submissions")
+public class BountySubmission {
+    @TableId
+    private Long id;
+    private Long bountyId;
+    private Long userId;
+    private String content;
+    private String attachment;
+    private Integer status;
+    private Date createTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getBountyId() {
+        return bountyId;
+    }
+
+    public void setBountyId(Long bountyId) {
+        this.bountyId = bountyId;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getAttachment() {
+        return attachment;
+    }
+
+    public void setAttachment(String attachment) {
+        this.attachment = attachment;
+    }
+
+    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;
+    }
+}
