diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/controller/BtTorrentAnnounceController.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/controller/BtTorrentAnnounceController.java
new file mode 100644
index 0000000..b41035e
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/controller/BtTorrentAnnounceController.java
@@ -0,0 +1,105 @@
+package com.ruoyi.torrent.controller;
+
+import java.util.List;
+
+import com.ruoyi.torrent.service.IBtTorrentAnnounceService;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.torrent.domain.BtTorrentAnnounce;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 种子的 Tracker 列Controller
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+@RestController
+@RequestMapping("/system/announce")
+public class BtTorrentAnnounceController extends BaseController
+{
+    @Autowired
+    private IBtTorrentAnnounceService btTorrentAnnounceService;
+
+    /**
+     * 查询种子的 Tracker 列列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:announce:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(BtTorrentAnnounce btTorrentAnnounce)
+    {
+        startPage();
+        List<BtTorrentAnnounce> list = btTorrentAnnounceService.selectBtTorrentAnnounceList(btTorrentAnnounce);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出种子的 Tracker 列列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:announce:export')")
+    @Log(title = "种子的 Tracker 列", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BtTorrentAnnounce btTorrentAnnounce)
+    {
+        List<BtTorrentAnnounce> list = btTorrentAnnounceService.selectBtTorrentAnnounceList(btTorrentAnnounce);
+        ExcelUtil<BtTorrentAnnounce> util = new ExcelUtil<BtTorrentAnnounce>(BtTorrentAnnounce.class);
+        util.exportExcel(response, list, "种子的 Tracker 列数据");
+    }
+
+    /**
+     * 获取种子的 Tracker 列详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:announce:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(btTorrentAnnounceService.selectBtTorrentAnnounceById(id));
+    }
+
+    /**
+     * 新增种子的 Tracker 列
+     */
+    @PreAuthorize("@ss.hasPermi('system:announce:add')")
+    @Log(title = "种子的 Tracker 列", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BtTorrentAnnounce btTorrentAnnounce)
+    {
+        return toAjax(btTorrentAnnounceService.insertBtTorrentAnnounce(btTorrentAnnounce));
+    }
+
+    /**
+     * 修改种子的 Tracker 列
+     */
+    @PreAuthorize("@ss.hasPermi('system:announce:edit')")
+    @Log(title = "种子的 Tracker 列", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BtTorrentAnnounce btTorrentAnnounce)
+    {
+        return toAjax(btTorrentAnnounceService.updateBtTorrentAnnounce(btTorrentAnnounce));
+    }
+
+    /**
+     * 删除种子的 Tracker 列
+     */
+    @PreAuthorize("@ss.hasPermi('system:announce:remove')")
+    @Log(title = "种子的 Tracker 列", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(btTorrentAnnounceService.deleteBtTorrentAnnounceByIds(ids));
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/controller/BtTorrentController.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/controller/BtTorrentController.java
new file mode 100644
index 0000000..2dab95a
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/controller/BtTorrentController.java
@@ -0,0 +1,105 @@
+package com.ruoyi.torrent.controller;
+
+import java.util.List;
+
+import com.ruoyi.torrent.service.IBtTorrentService;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.torrent.domain.BtTorrent;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 种子主Controller
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+@RestController
+@RequestMapping("/system/torrent")
+public class BtTorrentController extends BaseController
+{
+    @Autowired
+    private IBtTorrentService btTorrentService;
+
+    /**
+     * 查询种子主列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:torrent:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(BtTorrent btTorrent)
+    {
+        startPage();
+        List<BtTorrent> list = btTorrentService.selectBtTorrentList(btTorrent);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出种子主列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:torrent:export')")
+    @Log(title = "种子主", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BtTorrent btTorrent)
+    {
+        List<BtTorrent> list = btTorrentService.selectBtTorrentList(btTorrent);
+        ExcelUtil<BtTorrent> util = new ExcelUtil<BtTorrent>(BtTorrent.class);
+        util.exportExcel(response, list, "种子主数据");
+    }
+
+    /**
+     * 获取种子主详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:torrent:query')")
+    @GetMapping(value = "/{torrentId}")
+    public AjaxResult getInfo(@PathVariable("torrentId") Long torrentId)
+    {
+        return success(btTorrentService.selectBtTorrentByTorrentId(torrentId));
+    }
+
+    /**
+     * 新增种子主
+     */
+    @PreAuthorize("@ss.hasPermi('system:torrent:add')")
+    @Log(title = "种子主", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BtTorrent btTorrent)
+    {
+        return toAjax(btTorrentService.insertBtTorrent(btTorrent));
+    }
+
+    /**
+     * 修改种子主
+     */
+    @PreAuthorize("@ss.hasPermi('system:torrent:edit')")
+    @Log(title = "种子主", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BtTorrent btTorrent)
+    {
+        return toAjax(btTorrentService.updateBtTorrent(btTorrent));
+    }
+
+    /**
+     * 删除种子主
+     */
+    @PreAuthorize("@ss.hasPermi('system:torrent:remove')")
+    @Log(title = "种子主", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{torrentIds}")
+    public AjaxResult remove(@PathVariable Long[] torrentIds)
+    {
+        return toAjax(btTorrentService.deleteBtTorrentByTorrentIds(torrentIds));
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/controller/BtTorrentFileController.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/controller/BtTorrentFileController.java
new file mode 100644
index 0000000..3c731ee
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/controller/BtTorrentFileController.java
@@ -0,0 +1,104 @@
+package com.ruoyi.torrent.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.torrent.domain.BtTorrentFile;
+import com.ruoyi.torrent.service.IBtTorrentFileService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 种子包含的文件列Controller
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+@RestController
+@RequestMapping("/system/file")
+public class BtTorrentFileController extends BaseController
+{
+    @Autowired
+    private IBtTorrentFileService btTorrentFileService;
+
+    /**
+     * 查询种子包含的文件列列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:file:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(BtTorrentFile btTorrentFile)
+    {
+        startPage();
+        List<BtTorrentFile> list = btTorrentFileService.selectBtTorrentFileList(btTorrentFile);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出种子包含的文件列列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:file:export')")
+    @Log(title = "种子包含的文件列", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BtTorrentFile btTorrentFile)
+    {
+        List<BtTorrentFile> list = btTorrentFileService.selectBtTorrentFileList(btTorrentFile);
+        ExcelUtil<BtTorrentFile> util = new ExcelUtil<BtTorrentFile>(BtTorrentFile.class);
+        util.exportExcel(response, list, "种子包含的文件列数据");
+    }
+
+    /**
+     * 获取种子包含的文件列详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:file:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(btTorrentFileService.selectBtTorrentFileById(id));
+    }
+
+    /**
+     * 新增种子包含的文件列
+     */
+    @PreAuthorize("@ss.hasPermi('system:file:add')")
+    @Log(title = "种子包含的文件列", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BtTorrentFile btTorrentFile)
+    {
+        return toAjax(btTorrentFileService.insertBtTorrentFile(btTorrentFile));
+    }
+
+    /**
+     * 修改种子包含的文件列
+     */
+    @PreAuthorize("@ss.hasPermi('system:file:edit')")
+    @Log(title = "种子包含的文件列", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BtTorrentFile btTorrentFile)
+    {
+        return toAjax(btTorrentFileService.updateBtTorrentFile(btTorrentFile));
+    }
+
+    /**
+     * 删除种子包含的文件列
+     */
+    @PreAuthorize("@ss.hasPermi('system:file:remove')")
+    @Log(title = "种子包含的文件列", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(btTorrentFileService.deleteBtTorrentFileByIds(ids));
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/controller/BtTorrentTagsController.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/controller/BtTorrentTagsController.java
new file mode 100644
index 0000000..9b0fb2c
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/controller/BtTorrentTagsController.java
@@ -0,0 +1,104 @@
+package com.ruoyi.torrent.controller;
+
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.torrent.domain.BtTorrentTags;
+import com.ruoyi.torrent.service.IBtTorrentTagsService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 种子标签Controller
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+@RestController
+@RequestMapping("/system/tags")
+public class BtTorrentTagsController extends BaseController
+{
+    @Autowired
+    private IBtTorrentTagsService btTorrentTagsService;
+
+    /**
+     * 查询种子标签列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:tags:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(BtTorrentTags btTorrentTags)
+    {
+        startPage();
+        List<BtTorrentTags> list = btTorrentTagsService.selectBtTorrentTagsList(btTorrentTags);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出种子标签列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:tags:export')")
+    @Log(title = "种子标签", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BtTorrentTags btTorrentTags)
+    {
+        List<BtTorrentTags> list = btTorrentTagsService.selectBtTorrentTagsList(btTorrentTags);
+        ExcelUtil<BtTorrentTags> util = new ExcelUtil<BtTorrentTags>(BtTorrentTags.class);
+        util.exportExcel(response, list, "种子标签数据");
+    }
+
+    /**
+     * 获取种子标签详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('system:tags:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(btTorrentTagsService.selectBtTorrentTagsById(id));
+    }
+
+    /**
+     * 新增种子标签
+     */
+    @PreAuthorize("@ss.hasPermi('system:tags:add')")
+    @Log(title = "种子标签", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BtTorrentTags btTorrentTags)
+    {
+        return toAjax(btTorrentTagsService.insertBtTorrentTags(btTorrentTags));
+    }
+
+    /**
+     * 修改种子标签
+     */
+    @PreAuthorize("@ss.hasPermi('system:tags:edit')")
+    @Log(title = "种子标签", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BtTorrentTags btTorrentTags)
+    {
+        return toAjax(btTorrentTagsService.updateBtTorrentTags(btTorrentTags));
+    }
+
+    /**
+     * 删除种子标签
+     */
+    @PreAuthorize("@ss.hasPermi('system:tags:remove')")
+    @Log(title = "种子标签", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(btTorrentTagsService.deleteBtTorrentTagsByIds(ids));
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/domain/BtTorrent.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/domain/BtTorrent.java
new file mode 100644
index 0000000..9a85f2f
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/domain/BtTorrent.java
@@ -0,0 +1,181 @@
+package com.ruoyi.torrent.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 种子主对象 bt_torrent
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+public class BtTorrent extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 种子ID */
+    private Long torrentId;
+
+    /** InfoHash */
+    @Excel(name = "InfoHash")
+    private String infoHash;
+
+    /** 种子名称 */
+    @Excel(name = "种子名称")
+    private String name;
+
+    /** 总大小（字节） */
+    @Excel(name = "总大小", readConverterExp = "字=节")
+    private Long length;
+
+    /** 每个 piece 的长度 */
+    @Excel(name = "每个 piece 的长度")
+    private Long pieceLength;
+
+    /** piece 总数 */
+    @Excel(name = "piece 总数")
+    private Long piecesCount;
+
+    /** 创建工具 */
+    @Excel(name = "创建工具")
+    private String createdBy;
+
+    /** 种子内记录的创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "种子内记录的创建时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date torrentCreateTime;
+
+    /** 上传用户ID（关联 sys_user.user_id） */
+    @Excel(name = "上传用户ID", readConverterExp = "关=联,s=ys_user.user_id")
+    private Long uploaderId;
+
+    /** 上传时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "上传时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date uploadTime;
+
+    /** 种子文件在服务器的存储路径 */
+    @Excel(name = "种子文件在服务器的存储路径")
+    private String filePath;
+
+    public void setTorrentId(Long torrentId) 
+    {
+        this.torrentId = torrentId;
+    }
+
+    public Long getTorrentId() 
+    {
+        return torrentId;
+    }
+    public void setInfoHash(String infoHash) 
+    {
+        this.infoHash = infoHash;
+    }
+
+    public String getInfoHash() 
+    {
+        return infoHash;
+    }
+    public void setName(String name) 
+    {
+        this.name = name;
+    }
+
+    public String getName() 
+    {
+        return name;
+    }
+    public void setLength(Long length) 
+    {
+        this.length = length;
+    }
+
+    public Long getLength() 
+    {
+        return length;
+    }
+    public void setPieceLength(Long pieceLength) 
+    {
+        this.pieceLength = pieceLength;
+    }
+
+    public Long getPieceLength() 
+    {
+        return pieceLength;
+    }
+    public void setPiecesCount(Long piecesCount) 
+    {
+        this.piecesCount = piecesCount;
+    }
+
+    public Long getPiecesCount() 
+    {
+        return piecesCount;
+    }
+    public void setCreatedBy(String createdBy) 
+    {
+        this.createdBy = createdBy;
+    }
+
+    public String getCreatedBy() 
+    {
+        return createdBy;
+    }
+    public void setTorrentCreateTime(Date torrentCreateTime) 
+    {
+        this.torrentCreateTime = torrentCreateTime;
+    }
+
+    public Date getTorrentCreateTime() 
+    {
+        return torrentCreateTime;
+    }
+    public void setUploaderId(Long uploaderId) 
+    {
+        this.uploaderId = uploaderId;
+    }
+
+    public Long getUploaderId() 
+    {
+        return uploaderId;
+    }
+    public void setUploadTime(Date uploadTime) 
+    {
+        this.uploadTime = uploadTime;
+    }
+
+    public Date getUploadTime() 
+    {
+        return uploadTime;
+    }
+    public void setFilePath(String filePath) 
+    {
+        this.filePath = filePath;
+    }
+
+    public String getFilePath() 
+    {
+        return filePath;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("torrentId", getTorrentId())
+            .append("infoHash", getInfoHash())
+            .append("name", getName())
+            .append("length", getLength())
+            .append("pieceLength", getPieceLength())
+            .append("piecesCount", getPiecesCount())
+            .append("createdBy", getCreatedBy())
+            .append("torrentCreateTime", getTorrentCreateTime())
+            .append("uploaderId", getUploaderId())
+            .append("uploadTime", getUploadTime())
+            .append("filePath", getFilePath())
+            .toString();
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/domain/BtTorrentAnnounce.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/domain/BtTorrentAnnounce.java
new file mode 100644
index 0000000..967cc5d
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/domain/BtTorrentAnnounce.java
@@ -0,0 +1,65 @@
+package com.ruoyi.torrent.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 种子的 Tracker 列对象 bt_torrent_announce
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+public class BtTorrentAnnounce extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private Long id;
+
+    /** 种子ID */
+    @Excel(name = "种子ID")
+    private Long torrentId;
+
+    /** Tracker announce URL */
+    @Excel(name = "Tracker announce URL")
+    private String announceUrl;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setTorrentId(Long torrentId) 
+    {
+        this.torrentId = torrentId;
+    }
+
+    public Long getTorrentId() 
+    {
+        return torrentId;
+    }
+    public void setAnnounceUrl(String announceUrl) 
+    {
+        this.announceUrl = announceUrl;
+    }
+
+    public String getAnnounceUrl() 
+    {
+        return announceUrl;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("torrentId", getTorrentId())
+            .append("announceUrl", getAnnounceUrl())
+            .toString();
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/domain/BtTorrentFile.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/domain/BtTorrentFile.java
new file mode 100644
index 0000000..920d871
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/domain/BtTorrentFile.java
@@ -0,0 +1,79 @@
+package com.ruoyi.torrent.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 种子包含的文件列对象 bt_torrent_file
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+public class BtTorrentFile extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private Long id;
+
+    /** 种子ID（关联 bt_torrent） */
+    @Excel(name = "种子ID", readConverterExp = "关=联,b=t_torrent")
+    private Long torrentId;
+
+    /** 文件路径 */
+    @Excel(name = "文件路径")
+    private String filePath;
+
+    /** 文件大小（字节） */
+    @Excel(name = "文件大小", readConverterExp = "字=节")
+    private Long fileSize;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setTorrentId(Long torrentId) 
+    {
+        this.torrentId = torrentId;
+    }
+
+    public Long getTorrentId() 
+    {
+        return torrentId;
+    }
+    public void setFilePath(String filePath) 
+    {
+        this.filePath = filePath;
+    }
+
+    public String getFilePath() 
+    {
+        return filePath;
+    }
+    public void setFileSize(Long fileSize) 
+    {
+        this.fileSize = fileSize;
+    }
+
+    public Long getFileSize() 
+    {
+        return fileSize;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("torrentId", getTorrentId())
+            .append("filePath", getFilePath())
+            .append("fileSize", getFileSize())
+            .toString();
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/domain/BtTorrentTags.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/domain/BtTorrentTags.java
new file mode 100644
index 0000000..8f19b72
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/domain/BtTorrentTags.java
@@ -0,0 +1,65 @@
+package com.ruoyi.torrent.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 种子标签对象 bt_torrent_tags
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+public class BtTorrentTags extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    private Long id;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private Long torrentId;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String tag;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setTorrentId(Long torrentId) 
+    {
+        this.torrentId = torrentId;
+    }
+
+    public Long getTorrentId() 
+    {
+        return torrentId;
+    }
+    public void setTag(String tag) 
+    {
+        this.tag = tag;
+    }
+
+    public String getTag() 
+    {
+        return tag;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("torrentId", getTorrentId())
+            .append("tag", getTag())
+            .toString();
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/mapper/BtTorrentAnnounceMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/mapper/BtTorrentAnnounceMapper.java
new file mode 100644
index 0000000..47c8478
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/mapper/BtTorrentAnnounceMapper.java
@@ -0,0 +1,61 @@
+package com.ruoyi.torrent.mapper;
+
+import java.util.List;
+import com.ruoyi.torrent.domain.BtTorrentAnnounce;
+
+/**
+ * 种子的 Tracker 列Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+public interface BtTorrentAnnounceMapper 
+{
+    /**
+     * 查询种子的 Tracker 列
+     * 
+     * @param id 种子的 Tracker 列主键
+     * @return 种子的 Tracker 列
+     */
+    public BtTorrentAnnounce selectBtTorrentAnnounceById(Long id);
+
+    /**
+     * 查询种子的 Tracker 列列表
+     * 
+     * @param btTorrentAnnounce 种子的 Tracker 列
+     * @return 种子的 Tracker 列集合
+     */
+    public List<BtTorrentAnnounce> selectBtTorrentAnnounceList(BtTorrentAnnounce btTorrentAnnounce);
+
+    /**
+     * 新增种子的 Tracker 列
+     * 
+     * @param btTorrentAnnounce 种子的 Tracker 列
+     * @return 结果
+     */
+    public int insertBtTorrentAnnounce(BtTorrentAnnounce btTorrentAnnounce);
+
+    /**
+     * 修改种子的 Tracker 列
+     * 
+     * @param btTorrentAnnounce 种子的 Tracker 列
+     * @return 结果
+     */
+    public int updateBtTorrentAnnounce(BtTorrentAnnounce btTorrentAnnounce);
+
+    /**
+     * 删除种子的 Tracker 列
+     * 
+     * @param id 种子的 Tracker 列主键
+     * @return 结果
+     */
+    public int deleteBtTorrentAnnounceById(Long id);
+
+    /**
+     * 批量删除种子的 Tracker 列
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteBtTorrentAnnounceByIds(Long[] ids);
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/mapper/BtTorrentFileMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/mapper/BtTorrentFileMapper.java
new file mode 100644
index 0000000..74012dd
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/mapper/BtTorrentFileMapper.java
@@ -0,0 +1,61 @@
+package com.ruoyi.torrent.mapper;
+
+import java.util.List;
+import com.ruoyi.torrent.domain.BtTorrentFile;
+
+/**
+ * 种子包含的文件列Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+public interface BtTorrentFileMapper 
+{
+    /**
+     * 查询种子包含的文件列
+     * 
+     * @param id 种子包含的文件列主键
+     * @return 种子包含的文件列
+     */
+    public BtTorrentFile selectBtTorrentFileById(Long id);
+
+    /**
+     * 查询种子包含的文件列列表
+     * 
+     * @param btTorrentFile 种子包含的文件列
+     * @return 种子包含的文件列集合
+     */
+    public List<BtTorrentFile> selectBtTorrentFileList(BtTorrentFile btTorrentFile);
+
+    /**
+     * 新增种子包含的文件列
+     * 
+     * @param btTorrentFile 种子包含的文件列
+     * @return 结果
+     */
+    public int insertBtTorrentFile(BtTorrentFile btTorrentFile);
+
+    /**
+     * 修改种子包含的文件列
+     * 
+     * @param btTorrentFile 种子包含的文件列
+     * @return 结果
+     */
+    public int updateBtTorrentFile(BtTorrentFile btTorrentFile);
+
+    /**
+     * 删除种子包含的文件列
+     * 
+     * @param id 种子包含的文件列主键
+     * @return 结果
+     */
+    public int deleteBtTorrentFileById(Long id);
+
+    /**
+     * 批量删除种子包含的文件列
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteBtTorrentFileByIds(Long[] ids);
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/mapper/BtTorrentMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/mapper/BtTorrentMapper.java
new file mode 100644
index 0000000..180f052
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/mapper/BtTorrentMapper.java
@@ -0,0 +1,61 @@
+package com.ruoyi.torrent.mapper;
+
+import java.util.List;
+import com.ruoyi.torrent.domain.BtTorrent;
+
+/**
+ * 种子主Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+public interface BtTorrentMapper 
+{
+    /**
+     * 查询种子主
+     * 
+     * @param torrentId 种子主主键
+     * @return 种子主
+     */
+    public BtTorrent selectBtTorrentByTorrentId(Long torrentId);
+
+    /**
+     * 查询种子主列表
+     * 
+     * @param btTorrent 种子主
+     * @return 种子主集合
+     */
+    public List<BtTorrent> selectBtTorrentList(BtTorrent btTorrent);
+
+    /**
+     * 新增种子主
+     * 
+     * @param btTorrent 种子主
+     * @return 结果
+     */
+    public int insertBtTorrent(BtTorrent btTorrent);
+
+    /**
+     * 修改种子主
+     * 
+     * @param btTorrent 种子主
+     * @return 结果
+     */
+    public int updateBtTorrent(BtTorrent btTorrent);
+
+    /**
+     * 删除种子主
+     * 
+     * @param torrentId 种子主主键
+     * @return 结果
+     */
+    public int deleteBtTorrentByTorrentId(Long torrentId);
+
+    /**
+     * 批量删除种子主
+     * 
+     * @param torrentIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteBtTorrentByTorrentIds(Long[] torrentIds);
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/mapper/BtTorrentTagsMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/mapper/BtTorrentTagsMapper.java
new file mode 100644
index 0000000..e9aad12
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/mapper/BtTorrentTagsMapper.java
@@ -0,0 +1,61 @@
+package com.ruoyi.torrent.mapper;
+
+import java.util.List;
+import com.ruoyi.torrent.domain.BtTorrentTags;
+
+/**
+ * 种子标签Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+public interface BtTorrentTagsMapper 
+{
+    /**
+     * 查询种子标签
+     * 
+     * @param id 种子标签主键
+     * @return 种子标签
+     */
+    public BtTorrentTags selectBtTorrentTagsById(Long id);
+
+    /**
+     * 查询种子标签列表
+     * 
+     * @param btTorrentTags 种子标签
+     * @return 种子标签集合
+     */
+    public List<BtTorrentTags> selectBtTorrentTagsList(BtTorrentTags btTorrentTags);
+
+    /**
+     * 新增种子标签
+     * 
+     * @param btTorrentTags 种子标签
+     * @return 结果
+     */
+    public int insertBtTorrentTags(BtTorrentTags btTorrentTags);
+
+    /**
+     * 修改种子标签
+     * 
+     * @param btTorrentTags 种子标签
+     * @return 结果
+     */
+    public int updateBtTorrentTags(BtTorrentTags btTorrentTags);
+
+    /**
+     * 删除种子标签
+     * 
+     * @param id 种子标签主键
+     * @return 结果
+     */
+    public int deleteBtTorrentTagsById(Long id);
+
+    /**
+     * 批量删除种子标签
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteBtTorrentTagsByIds(Long[] ids);
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/IBtTorrentAnnounceService.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/IBtTorrentAnnounceService.java
new file mode 100644
index 0000000..9f4fb34
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/IBtTorrentAnnounceService.java
@@ -0,0 +1,61 @@
+package com.ruoyi.torrent.service;
+
+import java.util.List;
+import com.ruoyi.torrent.domain.BtTorrentAnnounce;
+
+/**
+ * 种子的 Tracker 列Service接口
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+public interface IBtTorrentAnnounceService 
+{
+    /**
+     * 查询种子的 Tracker 列
+     * 
+     * @param id 种子的 Tracker 列主键
+     * @return 种子的 Tracker 列
+     */
+    public BtTorrentAnnounce selectBtTorrentAnnounceById(Long id);
+
+    /**
+     * 查询种子的 Tracker 列列表
+     * 
+     * @param btTorrentAnnounce 种子的 Tracker 列
+     * @return 种子的 Tracker 列集合
+     */
+    public List<BtTorrentAnnounce> selectBtTorrentAnnounceList(BtTorrentAnnounce btTorrentAnnounce);
+
+    /**
+     * 新增种子的 Tracker 列
+     * 
+     * @param btTorrentAnnounce 种子的 Tracker 列
+     * @return 结果
+     */
+    public int insertBtTorrentAnnounce(BtTorrentAnnounce btTorrentAnnounce);
+
+    /**
+     * 修改种子的 Tracker 列
+     * 
+     * @param btTorrentAnnounce 种子的 Tracker 列
+     * @return 结果
+     */
+    public int updateBtTorrentAnnounce(BtTorrentAnnounce btTorrentAnnounce);
+
+    /**
+     * 批量删除种子的 Tracker 列
+     * 
+     * @param ids 需要删除的种子的 Tracker 列主键集合
+     * @return 结果
+     */
+    public int deleteBtTorrentAnnounceByIds(Long[] ids);
+
+    /**
+     * 删除种子的 Tracker 列信息
+     * 
+     * @param id 种子的 Tracker 列主键
+     * @return 结果
+     */
+    public int deleteBtTorrentAnnounceById(Long id);
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/IBtTorrentFileService.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/IBtTorrentFileService.java
new file mode 100644
index 0000000..2fe14d7
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/IBtTorrentFileService.java
@@ -0,0 +1,61 @@
+package com.ruoyi.torrent.service;
+
+import java.util.List;
+import com.ruoyi.torrent.domain.BtTorrentFile;
+
+/**
+ * 种子包含的文件列Service接口
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+public interface IBtTorrentFileService 
+{
+    /**
+     * 查询种子包含的文件列
+     * 
+     * @param id 种子包含的文件列主键
+     * @return 种子包含的文件列
+     */
+    public BtTorrentFile selectBtTorrentFileById(Long id);
+
+    /**
+     * 查询种子包含的文件列列表
+     * 
+     * @param btTorrentFile 种子包含的文件列
+     * @return 种子包含的文件列集合
+     */
+    public List<BtTorrentFile> selectBtTorrentFileList(BtTorrentFile btTorrentFile);
+
+    /**
+     * 新增种子包含的文件列
+     * 
+     * @param btTorrentFile 种子包含的文件列
+     * @return 结果
+     */
+    public int insertBtTorrentFile(BtTorrentFile btTorrentFile);
+
+    /**
+     * 修改种子包含的文件列
+     * 
+     * @param btTorrentFile 种子包含的文件列
+     * @return 结果
+     */
+    public int updateBtTorrentFile(BtTorrentFile btTorrentFile);
+
+    /**
+     * 批量删除种子包含的文件列
+     * 
+     * @param ids 需要删除的种子包含的文件列主键集合
+     * @return 结果
+     */
+    public int deleteBtTorrentFileByIds(Long[] ids);
+
+    /**
+     * 删除种子包含的文件列信息
+     * 
+     * @param id 种子包含的文件列主键
+     * @return 结果
+     */
+    public int deleteBtTorrentFileById(Long id);
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/IBtTorrentService.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/IBtTorrentService.java
new file mode 100644
index 0000000..e741711
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/IBtTorrentService.java
@@ -0,0 +1,61 @@
+package com.ruoyi.torrent.service;
+
+import java.util.List;
+import com.ruoyi.torrent.domain.BtTorrent;
+
+/**
+ * 种子主Service接口
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+public interface IBtTorrentService 
+{
+    /**
+     * 查询种子主
+     * 
+     * @param torrentId 种子主主键
+     * @return 种子主
+     */
+    public BtTorrent selectBtTorrentByTorrentId(Long torrentId);
+
+    /**
+     * 查询种子主列表
+     * 
+     * @param btTorrent 种子主
+     * @return 种子主集合
+     */
+    public List<BtTorrent> selectBtTorrentList(BtTorrent btTorrent);
+
+    /**
+     * 新增种子主
+     * 
+     * @param btTorrent 种子主
+     * @return 结果
+     */
+    public int insertBtTorrent(BtTorrent btTorrent);
+
+    /**
+     * 修改种子主
+     * 
+     * @param btTorrent 种子主
+     * @return 结果
+     */
+    public int updateBtTorrent(BtTorrent btTorrent);
+
+    /**
+     * 批量删除种子主
+     * 
+     * @param torrentIds 需要删除的种子主主键集合
+     * @return 结果
+     */
+    public int deleteBtTorrentByTorrentIds(Long[] torrentIds);
+
+    /**
+     * 删除种子主信息
+     * 
+     * @param torrentId 种子主主键
+     * @return 结果
+     */
+    public int deleteBtTorrentByTorrentId(Long torrentId);
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/IBtTorrentTagsService.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/IBtTorrentTagsService.java
new file mode 100644
index 0000000..375e472
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/IBtTorrentTagsService.java
@@ -0,0 +1,61 @@
+package com.ruoyi.torrent.service;
+
+import java.util.List;
+import com.ruoyi.torrent.domain.BtTorrentTags;
+
+/**
+ * 种子标签Service接口
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+public interface IBtTorrentTagsService 
+{
+    /**
+     * 查询种子标签
+     * 
+     * @param id 种子标签主键
+     * @return 种子标签
+     */
+    public BtTorrentTags selectBtTorrentTagsById(Long id);
+
+    /**
+     * 查询种子标签列表
+     * 
+     * @param btTorrentTags 种子标签
+     * @return 种子标签集合
+     */
+    public List<BtTorrentTags> selectBtTorrentTagsList(BtTorrentTags btTorrentTags);
+
+    /**
+     * 新增种子标签
+     * 
+     * @param btTorrentTags 种子标签
+     * @return 结果
+     */
+    public int insertBtTorrentTags(BtTorrentTags btTorrentTags);
+
+    /**
+     * 修改种子标签
+     * 
+     * @param btTorrentTags 种子标签
+     * @return 结果
+     */
+    public int updateBtTorrentTags(BtTorrentTags btTorrentTags);
+
+    /**
+     * 批量删除种子标签
+     * 
+     * @param ids 需要删除的种子标签主键集合
+     * @return 结果
+     */
+    public int deleteBtTorrentTagsByIds(Long[] ids);
+
+    /**
+     * 删除种子标签信息
+     * 
+     * @param id 种子标签主键
+     * @return 结果
+     */
+    public int deleteBtTorrentTagsById(Long id);
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/impl/BtTorrentAnnounceServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/impl/BtTorrentAnnounceServiceImpl.java
new file mode 100644
index 0000000..70e41a0
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/impl/BtTorrentAnnounceServiceImpl.java
@@ -0,0 +1,93 @@
+package com.ruoyi.torrent.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.torrent.mapper.BtTorrentAnnounceMapper;
+import com.ruoyi.torrent.domain.BtTorrentAnnounce;
+import com.ruoyi.torrent.service.IBtTorrentAnnounceService;
+
+/**
+ * 种子的 Tracker 列Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+@Service
+public class BtTorrentAnnounceServiceImpl implements IBtTorrentAnnounceService 
+{
+    @Autowired
+    private BtTorrentAnnounceMapper btTorrentAnnounceMapper;
+
+    /**
+     * 查询种子的 Tracker 列
+     * 
+     * @param id 种子的 Tracker 列主键
+     * @return 种子的 Tracker 列
+     */
+    @Override
+    public BtTorrentAnnounce selectBtTorrentAnnounceById(Long id)
+    {
+        return btTorrentAnnounceMapper.selectBtTorrentAnnounceById(id);
+    }
+
+    /**
+     * 查询种子的 Tracker 列列表
+     * 
+     * @param btTorrentAnnounce 种子的 Tracker 列
+     * @return 种子的 Tracker 列
+     */
+    @Override
+    public List<BtTorrentAnnounce> selectBtTorrentAnnounceList(BtTorrentAnnounce btTorrentAnnounce)
+    {
+        return btTorrentAnnounceMapper.selectBtTorrentAnnounceList(btTorrentAnnounce);
+    }
+
+    /**
+     * 新增种子的 Tracker 列
+     * 
+     * @param btTorrentAnnounce 种子的 Tracker 列
+     * @return 结果
+     */
+    @Override
+    public int insertBtTorrentAnnounce(BtTorrentAnnounce btTorrentAnnounce)
+    {
+        return btTorrentAnnounceMapper.insertBtTorrentAnnounce(btTorrentAnnounce);
+    }
+
+    /**
+     * 修改种子的 Tracker 列
+     * 
+     * @param btTorrentAnnounce 种子的 Tracker 列
+     * @return 结果
+     */
+    @Override
+    public int updateBtTorrentAnnounce(BtTorrentAnnounce btTorrentAnnounce)
+    {
+        return btTorrentAnnounceMapper.updateBtTorrentAnnounce(btTorrentAnnounce);
+    }
+
+    /**
+     * 批量删除种子的 Tracker 列
+     * 
+     * @param ids 需要删除的种子的 Tracker 列主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBtTorrentAnnounceByIds(Long[] ids)
+    {
+        return btTorrentAnnounceMapper.deleteBtTorrentAnnounceByIds(ids);
+    }
+
+    /**
+     * 删除种子的 Tracker 列信息
+     * 
+     * @param id 种子的 Tracker 列主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBtTorrentAnnounceById(Long id)
+    {
+        return btTorrentAnnounceMapper.deleteBtTorrentAnnounceById(id);
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/impl/BtTorrentFileServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/impl/BtTorrentFileServiceImpl.java
new file mode 100644
index 0000000..6eb696e
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/impl/BtTorrentFileServiceImpl.java
@@ -0,0 +1,93 @@
+package com.ruoyi.torrent.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.torrent.mapper.BtTorrentFileMapper;
+import com.ruoyi.torrent.domain.BtTorrentFile;
+import com.ruoyi.torrent.service.IBtTorrentFileService;
+
+/**
+ * 种子包含的文件列Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+@Service
+public class BtTorrentFileServiceImpl implements IBtTorrentFileService 
+{
+    @Autowired
+    private BtTorrentFileMapper btTorrentFileMapper;
+
+    /**
+     * 查询种子包含的文件列
+     * 
+     * @param id 种子包含的文件列主键
+     * @return 种子包含的文件列
+     */
+    @Override
+    public BtTorrentFile selectBtTorrentFileById(Long id)
+    {
+        return btTorrentFileMapper.selectBtTorrentFileById(id);
+    }
+
+    /**
+     * 查询种子包含的文件列列表
+     * 
+     * @param btTorrentFile 种子包含的文件列
+     * @return 种子包含的文件列
+     */
+    @Override
+    public List<BtTorrentFile> selectBtTorrentFileList(BtTorrentFile btTorrentFile)
+    {
+        return btTorrentFileMapper.selectBtTorrentFileList(btTorrentFile);
+    }
+
+    /**
+     * 新增种子包含的文件列
+     * 
+     * @param btTorrentFile 种子包含的文件列
+     * @return 结果
+     */
+    @Override
+    public int insertBtTorrentFile(BtTorrentFile btTorrentFile)
+    {
+        return btTorrentFileMapper.insertBtTorrentFile(btTorrentFile);
+    }
+
+    /**
+     * 修改种子包含的文件列
+     * 
+     * @param btTorrentFile 种子包含的文件列
+     * @return 结果
+     */
+    @Override
+    public int updateBtTorrentFile(BtTorrentFile btTorrentFile)
+    {
+        return btTorrentFileMapper.updateBtTorrentFile(btTorrentFile);
+    }
+
+    /**
+     * 批量删除种子包含的文件列
+     * 
+     * @param ids 需要删除的种子包含的文件列主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBtTorrentFileByIds(Long[] ids)
+    {
+        return btTorrentFileMapper.deleteBtTorrentFileByIds(ids);
+    }
+
+    /**
+     * 删除种子包含的文件列信息
+     * 
+     * @param id 种子包含的文件列主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBtTorrentFileById(Long id)
+    {
+        return btTorrentFileMapper.deleteBtTorrentFileById(id);
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/impl/BtTorrentServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/impl/BtTorrentServiceImpl.java
new file mode 100644
index 0000000..3b714f2
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/impl/BtTorrentServiceImpl.java
@@ -0,0 +1,93 @@
+package com.ruoyi.torrent.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.torrent.mapper.BtTorrentMapper;
+import com.ruoyi.torrent.domain.BtTorrent;
+import com.ruoyi.torrent.service.IBtTorrentService;
+
+/**
+ * 种子主Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+@Service
+public class BtTorrentServiceImpl implements IBtTorrentService 
+{
+    @Autowired
+    private BtTorrentMapper btTorrentMapper;
+
+    /**
+     * 查询种子主
+     * 
+     * @param torrentId 种子主主键
+     * @return 种子主
+     */
+    @Override
+    public BtTorrent selectBtTorrentByTorrentId(Long torrentId)
+    {
+        return btTorrentMapper.selectBtTorrentByTorrentId(torrentId);
+    }
+
+    /**
+     * 查询种子主列表
+     * 
+     * @param btTorrent 种子主
+     * @return 种子主
+     */
+    @Override
+    public List<BtTorrent> selectBtTorrentList(BtTorrent btTorrent)
+    {
+        return btTorrentMapper.selectBtTorrentList(btTorrent);
+    }
+
+    /**
+     * 新增种子主
+     * 
+     * @param btTorrent 种子主
+     * @return 结果
+     */
+    @Override
+    public int insertBtTorrent(BtTorrent btTorrent)
+    {
+        return btTorrentMapper.insertBtTorrent(btTorrent);
+    }
+
+    /**
+     * 修改种子主
+     * 
+     * @param btTorrent 种子主
+     * @return 结果
+     */
+    @Override
+    public int updateBtTorrent(BtTorrent btTorrent)
+    {
+        return btTorrentMapper.updateBtTorrent(btTorrent);
+    }
+
+    /**
+     * 批量删除种子主
+     * 
+     * @param torrentIds 需要删除的种子主主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBtTorrentByTorrentIds(Long[] torrentIds)
+    {
+        return btTorrentMapper.deleteBtTorrentByTorrentIds(torrentIds);
+    }
+
+    /**
+     * 删除种子主信息
+     * 
+     * @param torrentId 种子主主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBtTorrentByTorrentId(Long torrentId)
+    {
+        return btTorrentMapper.deleteBtTorrentByTorrentId(torrentId);
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/impl/BtTorrentTagsServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/impl/BtTorrentTagsServiceImpl.java
new file mode 100644
index 0000000..46fc50c
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/torrent/service/impl/BtTorrentTagsServiceImpl.java
@@ -0,0 +1,93 @@
+package com.ruoyi.torrent.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.torrent.mapper.BtTorrentTagsMapper;
+import com.ruoyi.torrent.domain.BtTorrentTags;
+import com.ruoyi.torrent.service.IBtTorrentTagsService;
+
+/**
+ * 种子标签Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2025-04-21
+ */
+@Service
+public class BtTorrentTagsServiceImpl implements IBtTorrentTagsService 
+{
+    @Autowired
+    private BtTorrentTagsMapper btTorrentTagsMapper;
+
+    /**
+     * 查询种子标签
+     * 
+     * @param id 种子标签主键
+     * @return 种子标签
+     */
+    @Override
+    public BtTorrentTags selectBtTorrentTagsById(Long id)
+    {
+        return btTorrentTagsMapper.selectBtTorrentTagsById(id);
+    }
+
+    /**
+     * 查询种子标签列表
+     * 
+     * @param btTorrentTags 种子标签
+     * @return 种子标签
+     */
+    @Override
+    public List<BtTorrentTags> selectBtTorrentTagsList(BtTorrentTags btTorrentTags)
+    {
+        return btTorrentTagsMapper.selectBtTorrentTagsList(btTorrentTags);
+    }
+
+    /**
+     * 新增种子标签
+     * 
+     * @param btTorrentTags 种子标签
+     * @return 结果
+     */
+    @Override
+    public int insertBtTorrentTags(BtTorrentTags btTorrentTags)
+    {
+        return btTorrentTagsMapper.insertBtTorrentTags(btTorrentTags);
+    }
+
+    /**
+     * 修改种子标签
+     * 
+     * @param btTorrentTags 种子标签
+     * @return 结果
+     */
+    @Override
+    public int updateBtTorrentTags(BtTorrentTags btTorrentTags)
+    {
+        return btTorrentTagsMapper.updateBtTorrentTags(btTorrentTags);
+    }
+
+    /**
+     * 批量删除种子标签
+     * 
+     * @param ids 需要删除的种子标签主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBtTorrentTagsByIds(Long[] ids)
+    {
+        return btTorrentTagsMapper.deleteBtTorrentTagsByIds(ids);
+    }
+
+    /**
+     * 删除种子标签信息
+     * 
+     * @param id 种子标签主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBtTorrentTagsById(Long id)
+    {
+        return btTorrentTagsMapper.deleteBtTorrentTagsById(id);
+    }
+}
diff --git a/ruoyi-admin/src/main/resources/mapper/system/BtTorrentAnnounceMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/BtTorrentAnnounceMapper.xml
new file mode 100644
index 0000000..8b78641
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/mapper/system/BtTorrentAnnounceMapper.xml
@@ -0,0 +1,61 @@
+<?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.ruoyi.torrent.mapper.BtTorrentAnnounceMapper">
+    
+    <resultMap type="BtTorrentAnnounce" id="BtTorrentAnnounceResult">
+        <result property="id"    column="id"    />
+        <result property="torrentId"    column="torrent_id"    />
+        <result property="announceUrl"    column="announce_url"    />
+    </resultMap>
+
+    <sql id="selectBtTorrentAnnounceVo">
+        select id, torrent_id, announce_url from bt_torrent_announce
+    </sql>
+
+    <select id="selectBtTorrentAnnounceList" parameterType="BtTorrentAnnounce" resultMap="BtTorrentAnnounceResult">
+        <include refid="selectBtTorrentAnnounceVo"/>
+        <where>  
+            <if test="torrentId != null "> and torrent_id = #{torrentId}</if>
+            <if test="announceUrl != null  and announceUrl != ''"> and announce_url = #{announceUrl}</if>
+        </where>
+    </select>
+    
+    <select id="selectBtTorrentAnnounceById" parameterType="Long" resultMap="BtTorrentAnnounceResult">
+        <include refid="selectBtTorrentAnnounceVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertBtTorrentAnnounce" parameterType="BtTorrentAnnounce" useGeneratedKeys="true" keyProperty="id">
+        insert into bt_torrent_announce
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="torrentId != null">torrent_id,</if>
+            <if test="announceUrl != null and announceUrl != ''">announce_url,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="torrentId != null">#{torrentId},</if>
+            <if test="announceUrl != null and announceUrl != ''">#{announceUrl},</if>
+         </trim>
+    </insert>
+
+    <update id="updateBtTorrentAnnounce" parameterType="BtTorrentAnnounce">
+        update bt_torrent_announce
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="torrentId != null">torrent_id = #{torrentId},</if>
+            <if test="announceUrl != null and announceUrl != ''">announce_url = #{announceUrl},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteBtTorrentAnnounceById" parameterType="Long">
+        delete from bt_torrent_announce where id = #{id}
+    </delete>
+
+    <delete id="deleteBtTorrentAnnounceByIds" parameterType="String">
+        delete from bt_torrent_announce where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/mapper/system/BtTorrentFileMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/BtTorrentFileMapper.xml
new file mode 100644
index 0000000..de8db04
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/mapper/system/BtTorrentFileMapper.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.torrent.mapper.BtTorrentFileMapper">
+    
+    <resultMap type="BtTorrentFile" id="BtTorrentFileResult">
+        <result property="id"    column="id"    />
+        <result property="torrentId"    column="torrent_id"    />
+        <result property="filePath"    column="file_path"    />
+        <result property="fileSize"    column="file_size"    />
+    </resultMap>
+
+    <sql id="selectBtTorrentFileVo">
+        select id, torrent_id, file_path, file_size from bt_torrent_file
+    </sql>
+
+    <select id="selectBtTorrentFileList" parameterType="BtTorrentFile" resultMap="BtTorrentFileResult">
+        <include refid="selectBtTorrentFileVo"/>
+        <where>  
+            <if test="torrentId != null "> and torrent_id = #{torrentId}</if>
+            <if test="filePath != null  and filePath != ''"> and file_path = #{filePath}</if>
+            <if test="fileSize != null "> and file_size = #{fileSize}</if>
+        </where>
+    </select>
+    
+    <select id="selectBtTorrentFileById" parameterType="Long" resultMap="BtTorrentFileResult">
+        <include refid="selectBtTorrentFileVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertBtTorrentFile" parameterType="BtTorrentFile" useGeneratedKeys="true" keyProperty="id">
+        insert into bt_torrent_file
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="torrentId != null">torrent_id,</if>
+            <if test="filePath != null and filePath != ''">file_path,</if>
+            <if test="fileSize != null">file_size,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="torrentId != null">#{torrentId},</if>
+            <if test="filePath != null and filePath != ''">#{filePath},</if>
+            <if test="fileSize != null">#{fileSize},</if>
+         </trim>
+    </insert>
+
+    <update id="updateBtTorrentFile" parameterType="BtTorrentFile">
+        update bt_torrent_file
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="torrentId != null">torrent_id = #{torrentId},</if>
+            <if test="filePath != null and filePath != ''">file_path = #{filePath},</if>
+            <if test="fileSize != null">file_size = #{fileSize},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteBtTorrentFileById" parameterType="Long">
+        delete from bt_torrent_file where id = #{id}
+    </delete>
+
+    <delete id="deleteBtTorrentFileByIds" parameterType="String">
+        delete from bt_torrent_file where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/mapper/system/BtTorrentMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/BtTorrentMapper.xml
new file mode 100644
index 0000000..afb29d7
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/mapper/system/BtTorrentMapper.xml
@@ -0,0 +1,101 @@
+<?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.ruoyi.torrent.mapper.BtTorrentMapper">
+    
+    <resultMap type="BtTorrent" id="BtTorrentResult">
+        <result property="torrentId"    column="torrent_id"    />
+        <result property="infoHash"    column="info_hash"    />
+        <result property="name"    column="name"    />
+        <result property="length"    column="length"    />
+        <result property="pieceLength"    column="piece_length"    />
+        <result property="piecesCount"    column="pieces_count"    />
+        <result property="createdBy"    column="created_by"    />
+        <result property="torrentCreateTime"    column="torrent_create_time"    />
+        <result property="uploaderId"    column="uploader_id"    />
+        <result property="uploadTime"    column="upload_time"    />
+        <result property="filePath"    column="file_path"    />
+    </resultMap>
+
+    <sql id="selectBtTorrentVo">
+        select torrent_id, info_hash, name, length, piece_length, pieces_count, created_by, torrent_create_time, uploader_id, upload_time, file_path from bt_torrent
+    </sql>
+
+    <select id="selectBtTorrentList" parameterType="BtTorrent" resultMap="BtTorrentResult">
+        <include refid="selectBtTorrentVo"/>
+        <where>  
+            <if test="infoHash != null  and infoHash != ''"> and info_hash = #{infoHash}</if>
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="length != null "> and length = #{length}</if>
+            <if test="pieceLength != null "> and piece_length = #{pieceLength}</if>
+            <if test="piecesCount != null "> and pieces_count = #{piecesCount}</if>
+            <if test="createdBy != null  and createdBy != ''"> and created_by = #{createdBy}</if>
+            <if test="torrentCreateTime != null "> and torrent_create_time = #{torrentCreateTime}</if>
+            <if test="uploaderId != null "> and uploader_id = #{uploaderId}</if>
+            <if test="uploadTime != null "> and upload_time = #{uploadTime}</if>
+            <if test="filePath != null  and filePath != ''"> and file_path = #{filePath}</if>
+        </where>
+    </select>
+    
+    <select id="selectBtTorrentByTorrentId" parameterType="Long" resultMap="BtTorrentResult">
+        <include refid="selectBtTorrentVo"/>
+        where torrent_id = #{torrentId}
+    </select>
+
+    <insert id="insertBtTorrent" parameterType="BtTorrent" useGeneratedKeys="true" keyProperty="torrentId">
+        insert into bt_torrent
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="infoHash != null and infoHash != ''">info_hash,</if>
+            <if test="name != null and name != ''">name,</if>
+            <if test="length != null">length,</if>
+            <if test="pieceLength != null">piece_length,</if>
+            <if test="piecesCount != null">pieces_count,</if>
+            <if test="createdBy != null">created_by,</if>
+            <if test="torrentCreateTime != null">torrent_create_time,</if>
+            <if test="uploaderId != null">uploader_id,</if>
+            <if test="uploadTime != null">upload_time,</if>
+            <if test="filePath != null">file_path,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="infoHash != null and infoHash != ''">#{infoHash},</if>
+            <if test="name != null and name != ''">#{name},</if>
+            <if test="length != null">#{length},</if>
+            <if test="pieceLength != null">#{pieceLength},</if>
+            <if test="piecesCount != null">#{piecesCount},</if>
+            <if test="createdBy != null">#{createdBy},</if>
+            <if test="torrentCreateTime != null">#{torrentCreateTime},</if>
+            <if test="uploaderId != null">#{uploaderId},</if>
+            <if test="uploadTime != null">#{uploadTime},</if>
+            <if test="filePath != null">#{filePath},</if>
+         </trim>
+    </insert>
+
+    <update id="updateBtTorrent" parameterType="BtTorrent">
+        update bt_torrent
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="infoHash != null and infoHash != ''">info_hash = #{infoHash},</if>
+            <if test="name != null and name != ''">name = #{name},</if>
+            <if test="length != null">length = #{length},</if>
+            <if test="pieceLength != null">piece_length = #{pieceLength},</if>
+            <if test="piecesCount != null">pieces_count = #{piecesCount},</if>
+            <if test="createdBy != null">created_by = #{createdBy},</if>
+            <if test="torrentCreateTime != null">torrent_create_time = #{torrentCreateTime},</if>
+            <if test="uploaderId != null">uploader_id = #{uploaderId},</if>
+            <if test="uploadTime != null">upload_time = #{uploadTime},</if>
+            <if test="filePath != null">file_path = #{filePath},</if>
+        </trim>
+        where torrent_id = #{torrentId}
+    </update>
+
+    <delete id="deleteBtTorrentByTorrentId" parameterType="Long">
+        delete from bt_torrent where torrent_id = #{torrentId}
+    </delete>
+
+    <delete id="deleteBtTorrentByTorrentIds" parameterType="String">
+        delete from bt_torrent where torrent_id in 
+        <foreach item="torrentId" collection="array" open="(" separator="," close=")">
+            #{torrentId}
+        </foreach>
+    </delete>
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/mapper/system/BtTorrentTagsMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/BtTorrentTagsMapper.xml
new file mode 100644
index 0000000..e7b1e48
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/mapper/system/BtTorrentTagsMapper.xml
@@ -0,0 +1,61 @@
+<?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.ruoyi.torrent.mapper.BtTorrentTagsMapper">
+    
+    <resultMap type="BtTorrentTags" id="BtTorrentTagsResult">
+        <result property="id"    column="id"    />
+        <result property="torrentId"    column="torrent_id"    />
+        <result property="tag"    column="tag"    />
+    </resultMap>
+
+    <sql id="selectBtTorrentTagsVo">
+        select id, torrent_id, tag from bt_torrent_tags
+    </sql>
+
+    <select id="selectBtTorrentTagsList" parameterType="BtTorrentTags" resultMap="BtTorrentTagsResult">
+        <include refid="selectBtTorrentTagsVo"/>
+        <where>  
+            <if test="torrentId != null "> and torrent_id = #{torrentId}</if>
+            <if test="tag != null  and tag != ''"> and tag = #{tag}</if>
+        </where>
+    </select>
+    
+    <select id="selectBtTorrentTagsById" parameterType="Long" resultMap="BtTorrentTagsResult">
+        <include refid="selectBtTorrentTagsVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertBtTorrentTags" parameterType="BtTorrentTags" useGeneratedKeys="true" keyProperty="id">
+        insert into bt_torrent_tags
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="torrentId != null">torrent_id,</if>
+            <if test="tag != null and tag != ''">tag,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="torrentId != null">#{torrentId},</if>
+            <if test="tag != null and tag != ''">#{tag},</if>
+         </trim>
+    </insert>
+
+    <update id="updateBtTorrentTags" parameterType="BtTorrentTags">
+        update bt_torrent_tags
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="torrentId != null">torrent_id = #{torrentId},</if>
+            <if test="tag != null and tag != ''">tag = #{tag},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteBtTorrentTagsById" parameterType="Long">
+        delete from bt_torrent_tags where id = #{id}
+    </delete>
+
+    <delete id="deleteBtTorrentTagsByIds" parameterType="String">
+        delete from bt_torrent_tags where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>
\ No newline at end of file
