Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gic-cloud
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
data-hook
gic-cloud
Commits
e23d5ed7
Commit
e23d5ed7
authored
Jun 07, 2022
by
fudahua
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:自定义查询zip
parent
5a2cb44d
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
169 additions
and
67 deletions
+169
-67
FreeQueryTaskCondition.java
...ic/cloud/data/hook/api/entity/FreeQueryTaskCondition.java
+10
-0
FreeQueryServiceImpl.java
...ic/cloud/data/hook/service/impl/FreeQueryServiceImpl.java
+159
-67
No files found.
gic-cloud-data-hook-api/src/main/java/com/gic/cloud/data/hook/api/entity/FreeQueryTaskCondition.java
View file @
e23d5ed7
...
@@ -114,4 +114,14 @@ public class FreeQueryTaskCondition implements Serializable {
...
@@ -114,4 +114,14 @@ public class FreeQueryTaskCondition implements Serializable {
public
void
setDesensiType
(
Integer
desensiType
)
{
public
void
setDesensiType
(
Integer
desensiType
)
{
this
.
desensiType
=
desensiType
;
this
.
desensiType
=
desensiType
;
}
}
private
int
amount
;
public
int
getAmount
()
{
return
amount
;
}
public
void
setAmount
(
int
amount
)
{
this
.
amount
=
amount
;
}
}
}
gic-cloud-data-hook-service/src/main/java/com/gic/cloud/data/hook/service/impl/FreeQueryServiceImpl.java
View file @
e23d5ed7
...
@@ -51,6 +51,8 @@ public class FreeQueryServiceImpl implements IFreeQueryService {
...
@@ -51,6 +51,8 @@ public class FreeQueryServiceImpl implements IFreeQueryService {
/** 日志类 */
/** 日志类 */
private
static
LogPak
log
=
new
LogPak
(
FreeQueryServiceImpl
.
class
);
private
static
LogPak
log
=
new
LogPak
(
FreeQueryServiceImpl
.
class
);
private
static
final
Integer
XLS_SIZE
=
1000000
;
/** csv / xls 下载目录 */
/** csv / xls 下载目录 */
public
static
final
String
SAVE_FOLDER
=
"/usr/local/data-hook-file"
;
public
static
final
String
SAVE_FOLDER
=
"/usr/local/data-hook-file"
;
...
@@ -308,6 +310,7 @@ public class FreeQueryServiceImpl implements IFreeQueryService {
...
@@ -308,6 +310,7 @@ public class FreeQueryServiceImpl implements IFreeQueryService {
// 生成条件
// 生成条件
FreeQueryTaskCondition
condition
=
new
FreeQueryTaskCondition
();
FreeQueryTaskCondition
condition
=
new
FreeQueryTaskCondition
();
condition
.
setAmount
(
amount
);
condition
.
setTaskId
(
curTask
.
getId
());
condition
.
setTaskId
(
curTask
.
getId
());
condition
.
setSql
(
sql
);
condition
.
setSql
(
sql
);
condition
.
setEnterpriseId
(
enterpriseId
);
condition
.
setEnterpriseId
(
enterpriseId
);
...
@@ -334,6 +337,7 @@ public class FreeQueryServiceImpl implements IFreeQueryService {
...
@@ -334,6 +337,7 @@ public class FreeQueryServiceImpl implements IFreeQueryService {
if
(
record
.
getDesensiType
()
!=
null
){
if
(
record
.
getDesensiType
()
!=
null
){
FreeQueryTaskCondition
condition
=
new
FreeQueryTaskCondition
();
FreeQueryTaskCondition
condition
=
new
FreeQueryTaskCondition
();
condition
.
setTaskId
(
record
.
getId
());
condition
.
setTaskId
(
record
.
getId
());
condition
.
setAmount
(
record
.
getAmount
());
condition
.
setSql
(
record
.
getRealSql
());
condition
.
setSql
(
record
.
getRealSql
());
condition
.
setEnterpriseId
(
record
.
getEnterpriseId
());
condition
.
setEnterpriseId
(
record
.
getEnterpriseId
());
condition
.
setDesensiType
(
record
.
getDesensiType
());
condition
.
setDesensiType
(
record
.
getDesensiType
());
...
@@ -400,6 +404,8 @@ public class FreeQueryServiceImpl implements IFreeQueryService {
...
@@ -400,6 +404,8 @@ public class FreeQueryServiceImpl implements IFreeQueryService {
DownloadTaskServiceImpl
.
getInstance
().
updateDownloadTask
(
task
);
DownloadTaskServiceImpl
.
getInstance
().
updateDownloadTask
(
task
);
String
fullQuery
=
condition
.
getSql
();
String
fullQuery
=
condition
.
getSql
();
boolean
zipFlag
=
false
;
List
<
File
>
listFile
=
new
ArrayList
<>();
Connection
conn
=
MysqlHelper
.
getFreeQueryConnection
(
condition
.
getEnterpriseId
());
Connection
conn
=
MysqlHelper
.
getFreeQueryConnection
(
condition
.
getEnterpriseId
());
if
(
conn
!=
null
)
{
if
(
conn
!=
null
)
{
...
@@ -432,6 +438,159 @@ public class FreeQueryServiceImpl implements IFreeQueryService {
...
@@ -432,6 +438,159 @@ public class FreeQueryServiceImpl implements IFreeQueryService {
log
.
debug
(
"runDownloadTask.run"
,
"已生成自定义查询下载文件 "
+
condition
.
getTaskId
()
+
".csv"
);
log
.
debug
(
"runDownloadTask.run"
,
"已生成自定义查询下载文件 "
+
condition
.
getTaskId
()
+
".csv"
);
}
else
{
}
else
{
log
.
debug
(
"runDownloadTask.run"
,
"准备生成自定义查询下载文件 "
+
condition
.
getTaskId
()
+
".xlsx"
);
log
.
debug
(
"runDownloadTask.run"
,
"准备生成自定义查询下载文件 "
+
condition
.
getTaskId
()
+
".xlsx"
);
int
filePos
=
0
;
if
(
condition
.
getAmount
()>
XLS_SIZE
){
int
num
=
(
condition
.
getAmount
()
/
XLS_SIZE
)+(
condition
.
getAmount
()%
XLS_SIZE
>
0
?
1
:
0
);
while
(
num
-->
0
)
{
originalFilePath
=
SAVE_FOLDER
+
"/"
+
condition
.
getTaskId
()+
"-"
+
filePos
+
".xlsx"
;
filePos
++;
saveXlsx
(
condition
,
originalFilePath
,
rs
,
task
);
File
file
=
new
File
(
originalFilePath
);
listFile
.
add
(
file
);
}
zipFlag
=
true
;
}
else
{
originalFilePath
=
SAVE_FOLDER
+
"/"
+
condition
.
getTaskId
()
+
".xlsx"
;
saveXlsx
(
condition
,
originalFilePath
,
rs
,
task
);
File
file
=
new
File
(
originalFilePath
);
listFile
.
add
(
file
);
}
// SXSSFWorkbook wb = new SXSSFWorkbook(100); // 内存中保留 100 行
// Sheet sheet = wb.createSheet();
// Row row = sheet.createRow(0);
// Cell cell;
// for (int j = 0; j < rs.getMetaData().getColumnCount(); ++j) { // 遍历创建表头
// String colName = rs.getMetaData().getColumnLabel(j + 1);
// cell = row.createCell(j);
// cell.setCellValue(colName);
// }
// // 遍历输出行
// int rowCount = 0;
// while (rs.next()) {
// rowCount++;
// row = sheet.createRow(rowCount);
// for (int j = 0; j < rs.getMetaData().getColumnCount(); ++j) {
// //String c = rs.getString(j + 1);
// //row.createCell(j).setCellValue(c);
// String cName = rs.getMetaData().getColumnName(j+1);
// if (task.getQueryDataType() == QueryDataType.SAFE
// && (FreeQueryServiceImpl.isFilterFields(condition.getDesensiType(), cName) || FilterFieldUtils.FILETERS_USER_NAME.contains(cName))) {
// if(FilterFieldUtils.FILETERS_USER_NAME.contains(cName)){
// row.createCell(j).setCellValue(DecryptUtils.dataSecurityProcessUserName(rs.getString(j+1)));
// } else {
// row.createCell(j).setCellValue("******");
// }
// } else {
// int cType = rs.getMetaData().getColumnType(j + 1);
// switch (cType) {
// case Types.TIMESTAMP:
// row.createCell(j).setCellValue(rs.getTimestamp(j + 1) != null ? datetimeFormatter.format(rs.getTimestamp(j + 1)) : "");
// break;
// case Types.DATE:
// row.createCell(j).setCellValue(rs.getDate(j + 1) != null ? dateFormatter.format(rs.getDate(j + 1)) : "");
// break;
// case Types.TIME:
// row.createCell(j).setCellValue(rs.getTimestamp(j + 1) != null ? timeFormatter.format(rs.getTimestamp(j + 1)) : "");
// break;
// default:
// String string = rs.getString(j + 1);
// if(StringUtils.isNotBlank(string)){
// if(string.contains("E0")){
// string = string + "\t";
// }
// }
// row.createCell(j).setCellValue(string);
// break;
// }
// }
// } // FOR OVER
// } // WHILE OVER
// FileOutputStream fileOut = new FileOutputStream(originalFilePath);
// wb.write(fileOut);
// //fileOut.flush(); // SXSSFWorkbook 使用 auto-flush 模式
// fileOut.close();
// //wb.close();
// wb.dispose(); // SXSSFWorkbook 没有 close 方法
// log.debug("runDownloadTask.run", "已生成自定义查询下载文件 " + condition.getTaskId() + ".xlsx");
}
String
cloudFileUrl
=
"https://"
;
String
taskFileExt
=
task
.
getUseCompress
().
equals
(
Global
.
YES
)||
zipFlag
?
".zip"
:
task
.
getFormat
().
equals
(
DownloadFileFormat
.
CSV
)
?
".csv"
:
".xlsx"
;
if
(
task
.
getUseCompress
().
equals
(
Global
.
YES
)||
zipFlag
)
{
log
.
debug
(
"runDownloadTask.run"
,
"准备生成自定义查询压缩文件 "
+
condition
.
getTaskId
()
+
".zip"
);
// String zipFilePath = SAVE_FOLDER + "/" + condition.getTaskId() + ".zip";
String
zipFilePath
=
SAVE_FOLDER
+
"/"
+
condition
.
getTaskId
()
+
".zip"
;
OutputStream
os
=
new
FileOutputStream
(
zipFilePath
);
File
zipFile
=
new
File
(
zipFilePath
);
FileUtil
.
toZip
(
listFile
,
os
);
// File zipFile = new File(zipFilePath);
// ZipOutputStream zos = null;
// byte[] buf = new byte[1024];
// int length = 0;
// try {
// OutputStream os = new FileOutputStream(zipFilePath);
// BufferedOutputStream bos = new BufferedOutputStream(os);
// zos = new ZipOutputStream(bos);
// zos.setLevel(6); // 压缩率选择 0-9
// InputStream is = new FileInputStream(originalFilePath);
// BufferedInputStream bis = new BufferedInputStream(is);
// zos.putNextEntry(new ZipEntry(originalFilePath.substring(originalFilePath.lastIndexOf("/") + 1)));
// while ((length = bis.read(buf)) > 0) {
// zos.write(buf, 0, length);
// }
// bis.close();
// is.close();
// //bos.close();
// //os.close();
// log.debug("runDownloadTask.run", "已生成自定义查询压缩文件 " + condition.getTaskId() + ".zip");
// } catch (Exception ex2) {
// throw ex2;
// } finally {
// zos.closeEntry();
// zos.close();
// }
// log.debug("开始上传压缩文件到腾讯云", task.getId());
cloudFileUrl
+=
FileUploadUtil
.
simpleUploadFileFromLocal
(
zipFile
,
task
.
getName
()
+
"-"
+
task
.
getId
()+
taskFileExt
,
BucketNameEnum
.
COMPRESS_60000
.
getName
());
}
else
{
log
.
debug
(
"开始上传文件到腾讯云"
,
task
.
getId
());
cloudFileUrl
+=
FileUploadUtil
.
simpleUploadFileFromLocal
(
new
File
(
originalFilePath
),
task
.
getName
()
+
"-"
+
task
.
getId
()+
taskFileExt
,
BucketNameEnum
.
REPORT_50000
.
getName
());
}
log
.
debug
(
"上传腾讯云"
,
"地址为:"
+
cloudFileUrl
);
task
.
setStatus
(
DownloadTaskStatus
.
COMPLISHED
);
task
.
setOverTime
(
new
java
.
util
.
Date
());
task
.
setFilePath
(
cloudFileUrl
);
DownloadTaskServiceImpl
.
getInstance
().
updateDownloadTask
(
task
);
}
catch
(
Exception
ex
)
{
ex
.
printStackTrace
();
// 标记任务异常
task
.
setStatus
(
DownloadTaskStatus
.
ERROR
);
task
.
setOverTime
(
new
Date
());
DownloadTaskServiceImpl
.
getInstance
().
updateDownloadTask
(
task
);
}
finally
{
try
{
conn
.
close
();
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
}
// IF OVER
}
// IF OVER
}
// 没有任务则忽略
}
catch
(
Exception
e
){
log
.
debug
(
"自定义查询下载异常"
,
e
.
getMessage
());
e
.
printStackTrace
();
}
}
},
interval
*
1000
,
interval
*
1000
,
TimeUnit
.
MILLISECONDS
);
}
private
void
saveXlsx
(
FreeQueryTaskCondition
condition
,
String
originalFilePath
,
ResultSet
rs
,
DownloadTask
task
)
throws
Exception
{
originalFilePath
=
SAVE_FOLDER
+
"/"
+
condition
.
getTaskId
()
+
".xlsx"
;
originalFilePath
=
SAVE_FOLDER
+
"/"
+
condition
.
getTaskId
()
+
".xlsx"
;
SXSSFWorkbook
wb
=
new
SXSSFWorkbook
(
100
);
// 内存中保留 100 行
SXSSFWorkbook
wb
=
new
SXSSFWorkbook
(
100
);
// 内存中保留 100 行
Sheet
sheet
=
wb
.
createSheet
();
Sheet
sheet
=
wb
.
createSheet
();
...
@@ -491,73 +650,6 @@ public class FreeQueryServiceImpl implements IFreeQueryService {
...
@@ -491,73 +650,6 @@ public class FreeQueryServiceImpl implements IFreeQueryService {
wb
.
dispose
();
// SXSSFWorkbook 没有 close 方法
wb
.
dispose
();
// SXSSFWorkbook 没有 close 方法
log
.
debug
(
"runDownloadTask.run"
,
"已生成自定义查询下载文件 "
+
condition
.
getTaskId
()
+
".xlsx"
);
log
.
debug
(
"runDownloadTask.run"
,
"已生成自定义查询下载文件 "
+
condition
.
getTaskId
()
+
".xlsx"
);
}
}
String
cloudFileUrl
=
"https://"
;
String
taskFileExt
=
task
.
getUseCompress
().
equals
(
Global
.
YES
)
?
".zip"
:
task
.
getFormat
().
equals
(
DownloadFileFormat
.
CSV
)
?
".csv"
:
".xlsx"
;
if
(
task
.
getUseCompress
().
equals
(
Global
.
YES
))
{
log
.
debug
(
"runDownloadTask.run"
,
"准备生成自定义查询压缩文件 "
+
condition
.
getTaskId
()
+
".zip"
);
String
zipFilePath
=
SAVE_FOLDER
+
"/"
+
condition
.
getTaskId
()
+
".zip"
;
File
zipFile
=
new
File
(
zipFilePath
);
ZipOutputStream
zos
=
null
;
byte
[]
buf
=
new
byte
[
1024
];
int
length
=
0
;
try
{
OutputStream
os
=
new
FileOutputStream
(
zipFilePath
);
BufferedOutputStream
bos
=
new
BufferedOutputStream
(
os
);
zos
=
new
ZipOutputStream
(
bos
);
zos
.
setLevel
(
6
);
// 压缩率选择 0-9
InputStream
is
=
new
FileInputStream
(
originalFilePath
);
BufferedInputStream
bis
=
new
BufferedInputStream
(
is
);
zos
.
putNextEntry
(
new
ZipEntry
(
originalFilePath
.
substring
(
originalFilePath
.
lastIndexOf
(
"/"
)
+
1
)));
while
((
length
=
bis
.
read
(
buf
))
>
0
)
{
zos
.
write
(
buf
,
0
,
length
);
}
bis
.
close
();
is
.
close
();
//bos.close();
//os.close();
log
.
debug
(
"runDownloadTask.run"
,
"已生成自定义查询压缩文件 "
+
condition
.
getTaskId
()
+
".zip"
);
}
catch
(
Exception
ex2
)
{
throw
ex2
;
}
finally
{
zos
.
closeEntry
();
zos
.
close
();
}
log
.
debug
(
"开始上传压缩文件到腾讯云"
,
task
.
getId
());
cloudFileUrl
+=
FileUploadUtil
.
simpleUploadFileFromLocal
(
zipFile
,
task
.
getName
()
+
"-"
+
task
.
getId
()+
taskFileExt
,
BucketNameEnum
.
COMPRESS_60000
.
getName
());
}
else
{
log
.
debug
(
"开始上传文件到腾讯云"
,
task
.
getId
());
cloudFileUrl
+=
FileUploadUtil
.
simpleUploadFileFromLocal
(
new
File
(
originalFilePath
),
task
.
getName
()
+
"-"
+
task
.
getId
()+
taskFileExt
,
BucketNameEnum
.
REPORT_50000
.
getName
());
}
log
.
debug
(
"上传腾讯云"
,
"地址为:"
+
cloudFileUrl
);
task
.
setStatus
(
DownloadTaskStatus
.
COMPLISHED
);
task
.
setOverTime
(
new
java
.
util
.
Date
());
task
.
setFilePath
(
cloudFileUrl
);
DownloadTaskServiceImpl
.
getInstance
().
updateDownloadTask
(
task
);
}
catch
(
Exception
ex
)
{
ex
.
printStackTrace
();
// 标记任务异常
task
.
setStatus
(
DownloadTaskStatus
.
ERROR
);
task
.
setOverTime
(
new
Date
());
DownloadTaskServiceImpl
.
getInstance
().
updateDownloadTask
(
task
);
}
finally
{
try
{
conn
.
close
();
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
}
// IF OVER
}
// IF OVER
}
// 没有任务则忽略
}
catch
(
Exception
e
){
log
.
debug
(
"自定义查询下载异常"
,
e
.
getMessage
());
e
.
printStackTrace
();
}
}
},
interval
*
1000
,
interval
*
1000
,
TimeUnit
.
MILLISECONDS
);
}
/** 下载申请检查计时器 */
/** 下载申请检查计时器 */
//private Timer applyTimer = new Timer();
//private Timer applyTimer = new Timer();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment