upload功能

Change-Id: Iad725ce3e2edd913531bf11705bf51000dde010d
diff --git a/src/main/resources/mapper/xml/TorrentMapper.xml b/src/main/resources/mapper/xml/TorrentMapper.xml
new file mode 100644
index 0000000..609ec46
--- /dev/null
+++ b/src/main/resources/mapper/xml/TorrentMapper.xml
@@ -0,0 +1,228 @@
+<?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.pt5.pthouduan.mapper.TorrentMapper">
+
+    <!-- 按上传者查询 -->
+    <select id="selectByUploaderId" resultType="com.pt5.pthouduan.entity.Torrent">
+        SELECT * FROM torrent
+        WHERE userid = #{uploaderId}
+    </select>
+
+    <!-- 按名称模糊搜索 -->
+    <select id="searchByName" resultType="com.pt5.pthouduan.entity.Torrent">
+        SELECT * FROM torrent
+        WHERE torrent_title LIKE CONCAT('%', #{keyword}, '%')
+    </select>
+
+    <select id="searchByKeyword" resultType="com.pt5.pthouduan.entity.Torrent">
+        SELECT * FROM torrent
+        WHERE torrent_title LIKE CONCAT('%', #{keyword}, '%')
+    </select>
+
+    <!-- 获取热门种子 -->
+    <select id="selectTopPopular" resultType="com.pt5.pthouduan.entity.Torrent">
+        SELECT * FROM torrent
+        ORDER BY download_count DESC
+            LIMIT 10
+    </select>
+
+    <!-- 检查infoHash是否存在 -->
+    <select id="existsByInfoHash" resultType="int" parameterType="string">
+        SELECT COUNT(*) FROM torrent WHERE info_hash = #{infoHash}
+    </select>
+
+
+    <!-- 下载计数+1 -->
+    <update id="incrementDownloadCount">
+        UPDATE torrent
+        SET download_count = download_count + 1
+        WHERE torrentid = #{id}
+    </update>
+
+    <!-- 复杂查询示例(带动态SQL) -->
+    <select id="selectByCondition" resultType="com.pt5.pthouduan.entity.Torrent">
+        SELECT * FROM torrent
+        <where>
+            <if test="condition.categoryId != null">
+                AND categoryid = #{condition.categoryId}
+            </if>
+            <if test="condition.minSize != null">
+                AND torrent_size >= #{condition.minSize}
+            </if>
+        </where>
+        ORDER BY ${condition.orderBy} DESC
+    </select>
+
+<!--    <select id="selectById" resultType="com.pt5.pthouduan.entity.Torrent">-->
+<!--        SELECT-->
+<!--            t.torrentid,-->
+<!--            t.torrent_title,-->
+<!--            t.description,-->
+<!--            t.uploader_id,-->
+<!--            t.upload_time,-->
+<!--            t.download_count,-->
+<!--            t.torrent_size,-->
+<!--            t.filename,-->
+<!--            t.path,-->
+<!--            t.categoryid,-->
+<!--            t.caption,-->
+<!--            t.dpi-->
+<!--        FROM torrent t-->
+<!--        WHERE t.torrentid = #{torrentid}-->
+<!--    </select>-->
+    <select id="selectById" resultType="com.pt5.pthouduan.entity.Torrent">
+        SELECT
+            t.torrentid,
+            t.torrent_title,
+            t.description,
+            t.uploader_id,
+            t.upload_time,
+            t.download_count,
+            t.torrent_size,
+            t.filename,
+            t.path,
+            t.categoryid,
+            t.caption,
+            t.dpi,
+            t.last_seed,
+            t.info_hash
+        FROM torrent t
+        WHERE t.torrentid = #{torrentid}
+    </select>
+
+    <select id="getAllTorrents" resultType="com.pt5.pthouduan.entity.Torrent">
+        SELECT
+            torrentid,
+            torrent_title,
+            filename,
+            description,
+            path,
+            uploader_id,
+            upload_time,
+            download_count,
+            categoryid,
+            promotionid,
+            dpi,
+            caption
+        FROM
+            torrent
+    </select>
+
+    <insert id="save" parameterType="com.pt5.pthouduan.entity.Torrent"
+            useGeneratedKeys="true" keyProperty="torrentid" keyColumn="torrentid">
+        INSERT INTO torrent (
+            uploader_id,
+            promotionid,
+            categoryid,
+            info_hash,
+            torrent_title,
+            dpi,
+            caption,
+            torrent_size,
+            upload_time,
+            download_count,
+            description,
+            path,
+            filename
+        ) VALUES (
+                     #{uploaderid},
+                     #{promotionid},
+                     #{categoryid},
+                     #{infohash},
+                     #{torrenttitle},
+                     #{dpi},
+                     #{caption},
+                     #{torrentsize},
+                     #{uploadtime},
+                     #{downloadCount},
+                     #{description},
+                     #{path},
+                     #{filename}
+                 )
+    </insert>
+    <!-- 按分类查询种子 -->
+    <select id="selectTorrentsByCategory" resultType="com.pt5.pthouduan.entity.Torrent">
+        SELECT * FROM torrent WHERE categoryid = #{category}
+    </select>
+
+    <!-- 免费下载 -->
+    <update id="setFreePromotion">
+            <![CDATA[
+        UPDATE torrent t
+        LEFT JOIN (
+            SELECT info_hash, MAX(last_updated) AS last_time
+            FROM peer_stats
+            GROUP BY info_hash
+        ) ps ON t.info_hash = ps.info_hash
+        SET t.promotionid = 3
+        WHERE ps.last_time IS NULL OR ps.last_time < NOW() - INTERVAL 7 DAY
+        ]]>
+    </update>
+
+
+    <!-- 上传加倍 -->
+    <update id="setDoubleUpload">
+            <![CDATA[
+        UPDATE torrent t
+        LEFT JOIN (
+            SELECT info_hash, MAX(last_updated) AS last_time,
+                   SUM(delta_upload) AS total_upload
+            FROM peer_stats
+            GROUP BY info_hash
+        ) ps ON t.info_hash = ps.info_hash
+        SET t.promotionid = 1
+        WHERE ps.last_time < NOW() - INTERVAL 5 DAY
+          AND (ps.total_upload IS NULL OR ps.total_upload = 0)
+        ]]>
+    </update>
+
+
+    <!-- 下载减半 -->
+    <update id="setHalfDownload">
+            <![CDATA[
+        UPDATE torrent t
+        LEFT JOIN (
+            SELECT info_hash, MAX(last_updated) AS last_time,
+                   SUM(delta_download) AS total_download
+            FROM peer_stats
+            GROUP BY info_hash
+        ) ps ON t.info_hash = ps.info_hash
+        SET t.promotionid = 2
+        WHERE ps.last_time < NOW() - INTERVAL 5 DAY
+          AND (ps.total_download IS NULL OR ps.total_download = 0)
+        ]]>
+    </update>
+
+
+    <!-- 取消促销 -->
+    <update id="clearPromotion">
+            <![CDATA[
+        UPDATE torrent t
+        LEFT JOIN (
+            SELECT info_hash, MAX(last_updated) AS last_time
+            FROM peer_stats
+            GROUP BY info_hash
+        ) ps ON t.info_hash = ps.info_hash
+        SET t.promotionid = NULL
+        WHERE ps.last_time >= NOW() - INTERVAL 3 DAY
+        ]]>
+    </update>
+
+    <select id="listByCategoryWithFilters" resultType="com.pt5.pthouduan.entity.Torrent">
+        SELECT * FROM torrent t
+        WHERE t.categoryid = #{categoryid}
+        <if test="filters != null and !filters.isEmpty()">
+            AND t.torrentid IN (
+            SELECT e.torrentid FROM
+            ${extendTable} e
+            WHERE
+            <foreach collection="filters" index="key" item="value" separator=" AND ">
+                (e.${key} = #{value})
+            </foreach>
+            )
+        </if>
+    </select>
+
+</mapper>
\ No newline at end of file