feat: 공통 파일업로드 및 저장 적용
parent
065336312d
commit
e81513d248
@ -0,0 +1,6 @@
|
|||||||
|
package cokr.xit.base;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
public class FileController extends cokr.xit.base.file.web.FileController {}
|
@ -0,0 +1,130 @@
|
|||||||
|
<?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="cokr.xit.base.file.dao.FileMapper">
|
||||||
|
|
||||||
|
<resultMap id="fileRow" type="cokr.xit.base.file.FileInfo">
|
||||||
|
<result property="id" column="FILE_ID"/>
|
||||||
|
<result property="infoType" column="INF_TYPE"/>
|
||||||
|
<result property="infoKey" column="INF_KEY"/>
|
||||||
|
<result property="subType" column="SUB_TYPE"/>
|
||||||
|
<result property="name" column="FILE_NM"/>
|
||||||
|
<result property="path" column="FILE_PATH"/>
|
||||||
|
<result property="url" column="URL"/>
|
||||||
|
<result property="mimeType" column="MIME_TYPE"/>
|
||||||
|
<result property="size" column="FILE_SIZE"/>
|
||||||
|
<result property="downloadCount" column="DNLD_CNT"/>
|
||||||
|
<result property="sortOrder" column="SRT_ORD"/>
|
||||||
|
<result property="createdAt" column="REG_DT"/>
|
||||||
|
<result property="createdBy" column="RGTR"/>
|
||||||
|
<result property="useYN" column="USE_YN"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<sql id="fileDirs">SELECT INF_TYPE
|
||||||
|
, CONCAT('d:/data/adds/files/', '2024050001', '/', DIR) DIR
|
||||||
|
FROM (
|
||||||
|
SELECT '00' INF_TYPE, 'attachment/' DIR FROM DUAL UNION
|
||||||
|
SELECT '01' INF_TYPE, 'document/' DIR FROM DUAL UNION
|
||||||
|
SELECT '02' INF_TYPE, 'article/' DIR FROM DUAL UNION
|
||||||
|
|
||||||
|
SELECT '100' INF_TYPE, '' DIR FROM DUAL UNION /* 폐기상품이미지 */
|
||||||
|
SELECT '110' INF_TYPE, '' DIR FROM DUAL UNION /* 폐기 이미지 */
|
||||||
|
SELECT '200' INF_TYPE, '' DIR FROM DUAL /* 폐기보고 문서 */
|
||||||
|
) FILE_DIRS</sql>
|
||||||
|
|
||||||
|
<sql id="selectFiles">
|
||||||
|
<if test="fileIDs != null">
|
||||||
|
SELECT A.*, FILE_PATH URL
|
||||||
|
FROM TB_FILE A
|
||||||
|
WHERE FILE_ID IN (<foreach collection="fileIDs" item="fileID" separator=",">#{fileID}</foreach>)
|
||||||
|
ORDER BY FILE_ID</if>
|
||||||
|
<if test="fileIDs == null"><include refid="utility.paging-prefix" />
|
||||||
|
SELECT A.*, FILE_PATH URL
|
||||||
|
FROM TB_FILE A
|
||||||
|
<where>
|
||||||
|
<if test="infoType != null"> AND A.INF_TYPE = #{infoType}</if>
|
||||||
|
<if test="infoKeys != null"> AND INF_KEY IN (<foreach collection="infoKeys" item="infoKey" separator=",">#{infoKey}</foreach>)</if>
|
||||||
|
AND USE_YN = 'Y'
|
||||||
|
</where>
|
||||||
|
<include refid="utility.orderBy" />
|
||||||
|
<include refid="utility.paging-suffix" /></if></sql>
|
||||||
|
|
||||||
|
<select id="getFileList" parameterType="map" resultType="dataobject">/* 파일 목록 조회(fileMapper.getFileList) */
|
||||||
|
<include refid="selectFiles" /></select>
|
||||||
|
|
||||||
|
<select id="getFilesOf" parameterType="map" resultMap="fileRow">/* 파일 가져오기(fileMapper.getFilesOf) */
|
||||||
|
<include refid="selectFiles" /></select>
|
||||||
|
|
||||||
|
<select id="getFiles" parameterType="map" resultMap="fileRow">/* 파일 가져오기(fileMapper.getFiles) */
|
||||||
|
<include refid="selectFiles" /></select>
|
||||||
|
|
||||||
|
<insert id="insertFile" parameterType="map">/* 파일 등록(fileMapper.insertFile) */
|
||||||
|
<selectKey keyProperty="file.id,file.path" keyColumn="NEW_ID,PATH" resultType="map" order="BEFORE">
|
||||||
|
SELECT NEW_ID, CONCAT(DIR, NEW_ID, '.', #{file.extension}) PATH
|
||||||
|
FROM (
|
||||||
|
SELECT NVL(MAX(FILE_ID) + 1, CONCAT(THIS_DAY, '00001')) NEW_ID
|
||||||
|
FROM TB_FILE A, (<include refid="utility.selectThisDay" />) B
|
||||||
|
WHERE FILE_ID LIKE CONCAT(THIS_DAY, '%')
|
||||||
|
) T1, (
|
||||||
|
<include refid="fileDirs" />
|
||||||
|
WHERE INF_TYPE = #{file.infoType}
|
||||||
|
) T2</selectKey>
|
||||||
|
INSERT INTO TB_FILE (
|
||||||
|
FILE_ID
|
||||||
|
, INF_TYPE
|
||||||
|
, INF_KEY
|
||||||
|
, SUB_TYPE
|
||||||
|
, FILE_NM
|
||||||
|
, FILE_PATH
|
||||||
|
, MIME_TYPE
|
||||||
|
, FILE_SIZE
|
||||||
|
, DNLD_CNT
|
||||||
|
, SRT_ORD
|
||||||
|
, RGTR
|
||||||
|
, REG_DT
|
||||||
|
, USE_YN
|
||||||
|
) VALUES (
|
||||||
|
#{file.id}
|
||||||
|
, #{file.infoType}
|
||||||
|
, #{file.infoKey}
|
||||||
|
, #{file.subType}
|
||||||
|
, #{file.name}
|
||||||
|
, #{file.path}
|
||||||
|
, #{file.mimeType}
|
||||||
|
, #{file.size}
|
||||||
|
, #{file.downloadCount}
|
||||||
|
, #{file.sortOrder}
|
||||||
|
, #{currentUser.id}
|
||||||
|
,<include refid="utility.now" />
|
||||||
|
, 'Y'
|
||||||
|
)
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<update id="reorder" parameterType="map">/* 파일 순서 변경(fileMapper.reorder) */
|
||||||
|
UPDATE TB_FILE SET
|
||||||
|
SRT_ORD = CASE FILE_ID
|
||||||
|
<foreach collection="fileIDs" item="fileID" index="index" separator=" ">WHEN #{fileID} THEN #{index}
|
||||||
|
</foreach>
|
||||||
|
ELSE SRT_ORD END
|
||||||
|
WHERE FILE_ID IN (<foreach collection="fileIDs" item="fileID" separator=",">#{fileID}</foreach>)</update>
|
||||||
|
|
||||||
|
<update id="updateDownloadCount" parameterType="map">/* 다운로드 횟수 증가(fileMapper.updateDownloadCount) */
|
||||||
|
UPDATE TB_FILE SET
|
||||||
|
DNLD_CNT = DNLD_CNT + 1
|
||||||
|
WHERE USE_YN = 'Y'
|
||||||
|
AND FILE_ID IN (<foreach collection="fileIDs" item="fileID" separator=",">#{fileID}</foreach>)</update>
|
||||||
|
|
||||||
|
<update id="removeFiles" parameterType="map">/* 파일 제거(fileMapper.removeFiles) */
|
||||||
|
UPDATE TB_FILE SET
|
||||||
|
USE_YN = 'N'
|
||||||
|
WHERE USE_YN = 'Y'
|
||||||
|
<if test="fileIDs != null"> AND FILE_ID IN (<foreach collection="fileIDs" item="fileID" separator=",">#{fileID}</foreach>)</if>
|
||||||
|
<if test="infoKeys != null">
|
||||||
|
AND INF_TYPE = #{infoType}
|
||||||
|
AND INF_KEY IN (<foreach collection="infoKeys" item="infoKey" separator=",">#{infoKey}</foreach>)</if></update>
|
||||||
|
|
||||||
|
<delete id="deleteFiles" parameterType="map">/* 파일 삭제(fileMapper.deleteFiles) */
|
||||||
|
DELETE FROM TB_FILE
|
||||||
|
<if test="fileIDs != null">WHERE FILE_ID IN (<foreach collection="fileIDs" item="fileID" separator=",">#{fileID}</foreach>)</if>
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
</mapper>
|
@ -0,0 +1,37 @@
|
|||||||
|
<?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="utility">
|
||||||
|
|
||||||
|
<!-- For Maria DB -->
|
||||||
|
<sql id="paging-prefix"><if test="fetchSize != null and fetchSize > 0">
|
||||||
|
SELECT QROWS.* FROM (
|
||||||
|
SELECT ROW_NUMBER() OVER(<include refid="utility.sortBy" />) ROW_NUM
|
||||||
|
, COUNT(*) OVER() TOT_CNT, QBODY.*
|
||||||
|
FROM (</if></sql>
|
||||||
|
|
||||||
|
<sql id="paging-suffix"><if test="fetchSize != null and fetchSize > 0"> ) QBODY
|
||||||
|
) QROWS
|
||||||
|
WHERE ROW_NUM BETWEEN ((#{pageNum} - 1) * #{fetchSize}) + 1 AND (#{pageNum} * #{fetchSize})</if></sql>
|
||||||
|
|
||||||
|
<select id="foundRows" resultType="dataobject">/* 전체 결과수 가져오기(utility.foundRows) */
|
||||||
|
SELECT FOUND_ROWS() TOT_CNT</select>
|
||||||
|
|
||||||
|
<sql id="sortBy"><if test="orderBy != null and orderBy != ''">ORDER BY ${orderBy}</if></sql>
|
||||||
|
|
||||||
|
<sql id="orderBy"><if test="fetchSize == null or fetchSize < 1"><include refid="utility.sortBy" /></if></sql>
|
||||||
|
|
||||||
|
<sql id="now"><if test="_databaseId == 'mariadb'">DATE_FORMAT(CURRENT_TIMESTAMP, '%Y%m%d%H%i%s')</if>
|
||||||
|
<if test="_databaseId == 'oracle'">TO_CHAR(CURRENT_TIMESTAMP, 'YYYYMMDDHH24MISS')</if></sql>
|
||||||
|
|
||||||
|
<sql id="selectNow">SELECT<include refid="utility.now" />NOW FROM DUAL</sql>
|
||||||
|
|
||||||
|
<sql id="today"><if test="_databaseId == 'mariadb'">DATE_FORMAT(CURRENT_DATE, '%Y%m%d')</if>
|
||||||
|
<if test="_databaseId == 'oracle'">TO_CHAR(CURRENT_DATE, 'YYYYMMDD')</if></sql>
|
||||||
|
|
||||||
|
<sql id="selectToday">SELECT<include refid="utility.today" />TODAY FROM DUAL</sql>
|
||||||
|
|
||||||
|
<sql id="thisDay">NVL(#{thisDay},<include refid="utility.today" />)</sql>
|
||||||
|
|
||||||
|
<sql id="selectThisDay">SELECT<include refid="utility.thisDay" />THIS_DAY FROM DUAL</sql>
|
||||||
|
|
||||||
|
</mapper>
|
Loading…
Reference in New Issue