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
b6f06a15
Commit
b6f06a15
authored
Jun 15, 2022
by
fudahua
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'developer' into 'master'
Developer See merge request
!50
parents
27cb83ac
7a5a41ce
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
194 additions
and
53 deletions
+194
-53
FreeQueryTaskCondition.java
...ic/cloud/data/hook/api/entity/FreeQueryTaskCondition.java
+10
-0
FileUtil.java
...c/main/java/com/gic/cloud/data/hook/service/FileUtil.java
+62
-0
FlatQueryResultServiceImpl.java
...ud/data/hook/service/impl/FlatQueryResultServiceImpl.java
+122
-53
FreeQueryServiceImpl.java
...ic/cloud/data/hook/service/impl/FreeQueryServiceImpl.java
+0
-0
No files found.
gic-cloud-data-hook-api/src/main/java/com/gic/cloud/data/hook/api/entity/FreeQueryTaskCondition.java
View file @
b6f06a15
...
@@ -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/FileUtil.java
0 → 100644
View file @
b6f06a15
package
com
.
gic
.
cloud
.
data
.
hook
.
service
;
import
com.ctrip.framework.apollo.Config
;
import
com.ctrip.framework.apollo.ConfigService
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.util.List
;
import
java.util.zip.ZipEntry
;
import
java.util.zip.ZipOutputStream
;
public
class
FileUtil
{
private
static
final
int
BUFFER_SIZE
=
2
*
1024
;
/**
* 压缩zip
* @param srcFiles
* @param out
* @throws RuntimeException
*/
public
static
void
toZip
(
List
<
File
>
srcFiles
,
OutputStream
out
)
throws
RuntimeException
{
long
start
=
System
.
currentTimeMillis
();
ZipOutputStream
zos
=
null
;
try
{
zos
=
new
ZipOutputStream
(
out
);
for
(
File
srcFile
:
srcFiles
)
{
byte
[]
buf
=
new
byte
[
BUFFER_SIZE
];
zos
.
putNextEntry
(
new
ZipEntry
(
srcFile
.
getName
()));
int
len
;
FileInputStream
in
=
new
FileInputStream
(
srcFile
);
while
((
len
=
in
.
read
(
buf
))
!=
-
1
)
{
zos
.
write
(
buf
,
0
,
len
);
}
zos
.
closeEntry
();
in
.
close
();
}
long
end
=
System
.
currentTimeMillis
();
System
.
out
.
println
(
"压缩完成,耗时:"
+
(
end
-
start
)
+
" ms"
);
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
"zip error from ZipUtils"
,
e
);
}
finally
{
if
(
zos
!=
null
)
{
try
{
zos
.
close
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
}
/**
* 获取限制调试
* @return
*/
public
static
Integer
getLimitSize
(){
Config
appConfig
=
ConfigService
.
getAppConfig
();
return
appConfig
.
getIntProperty
(
"xls.size.limit"
,
1000000
);
}
}
gic-cloud-data-hook-service/src/main/java/com/gic/cloud/data/hook/service/impl/FlatQueryResultServiceImpl.java
View file @
b6f06a15
...
@@ -76,6 +76,8 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
...
@@ -76,6 +76,8 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
private
static
final
Integer
SMALL_SIZE
=
2
;
private
static
final
Integer
SMALL_SIZE
=
2
;
private
static
final
Integer
XLS_SIZE
=
1000000
;
private
static
final
Map
<
String
,
String
>
bigTaskRunningMap
=
new
ConcurrentHashMap
<>();
private
static
final
Map
<
String
,
String
>
bigTaskRunningMap
=
new
ConcurrentHashMap
<>();
@Autowired
@Autowired
...
@@ -809,7 +811,7 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
...
@@ -809,7 +811,7 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
if
(
conn
!=
null
)
{
if
(
conn
!=
null
)
{
try
{
try
{
Statement
stat
=
conn
.
createStatement
();
Statement
stat
=
conn
.
createStatement
();
Integer
limitSize
=
FileUtil
.
getLimitSize
();
// stat.setQueryTimeout(60 * 1000);
// stat.setQueryTimeout(60 * 1000);
stat
.
execute
(
"REFRESH TABLE "
+
condition
.
getTableId
());
// 强制刷新表结构
stat
.
execute
(
"REFRESH TABLE "
+
condition
.
getTableId
());
// 强制刷新表结构
ResultSet
rs
=
stat
.
executeQuery
(
fullQuery
);
ResultSet
rs
=
stat
.
executeQuery
(
fullQuery
);
...
@@ -817,6 +819,8 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
...
@@ -817,6 +819,8 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
ResultSetHelper
helper
=
new
CsvResultSetHelper
(
queryDataType
,
condition
.
getDecryptFilters
(),
condition
.
getConditions
(),
condition
.
getEnterpriseIds
().
get
(
0
),
decryptKeyService
);
ResultSetHelper
helper
=
new
CsvResultSetHelper
(
queryDataType
,
condition
.
getDecryptFilters
(),
condition
.
getConditions
(),
condition
.
getEnterpriseIds
().
get
(
0
),
decryptKeyService
);
// 生成指定格式下载元文件
// 生成指定格式下载元文件
String
originalFilePath
=
""
;
String
originalFilePath
=
""
;
boolean
zipFlag
=
false
;
List
<
File
>
listFile
=
new
ArrayList
<>();
if
(
task
.
getFormat
().
equals
(
DownloadFileFormat
.
CSV
))
{
// 如果指定为 CSV 格式
if
(
task
.
getFormat
().
equals
(
DownloadFileFormat
.
CSV
))
{
// 如果指定为 CSV 格式
logger
.
info
(
"[ runDownloadTask.run ]: {}"
,
"准备生成自助指标下载文件 "
+
condition
.
getTaskId
()
+
".csv"
);
logger
.
info
(
"[ runDownloadTask.run ]: {}"
,
"准备生成自助指标下载文件 "
+
condition
.
getTaskId
()
+
".csv"
);
originalFilePath
=
SAVE_FOLDER
+
"/"
+
condition
.
getTaskId
()
+
".csv"
;
originalFilePath
=
SAVE_FOLDER
+
"/"
+
condition
.
getTaskId
()
+
".csv"
;
...
@@ -832,69 +836,97 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
...
@@ -832,69 +836,97 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
writer
.
close
();
writer
.
close
();
out
.
close
();
//记得关闭资源
out
.
close
();
//记得关闭资源
logger
.
info
(
"[ runDownloadTask.run ]: {}"
,
"已生成自助指标下载文件 "
+
condition
.
getTaskId
()
+
".csv"
);
logger
.
info
(
"[ runDownloadTask.run ]: {}"
,
"已生成自助指标下载文件 "
+
condition
.
getTaskId
()
+
".csv"
);
listFile
.
add
(
new
File
(
originalFilePath
));
}
else
{
// 如果指定为 XLS 格式
}
else
{
// 如果指定为 XLS 格式
logger
.
info
(
"[ runDownloadTask.run ]: {}"
,
"准备生成自助指标下载文件 "
+
condition
.
getTaskId
()
+
".xlsx"
);
logger
.
info
(
"[ runDownloadTask.run ]: {}"
,
"准备生成自助指标下载文件 "
+
condition
.
getTaskId
()
+
".xlsx"
);
int
filePos
=
0
;
if
(
condition
.
getAmount
()>
limitSize
){
int
num
=
(
condition
.
getAmount
()
/
limitSize
)+(
condition
.
getAmount
()%
limitSize
>
0
?
1
:
0
);
while
(
num
-->
0
)
{
originalFilePath
=
SAVE_FOLDER
+
"/"
+
condition
.
getTaskId
()+
"-"
+
filePos
+
".xlsx"
;
filePos
++;
saveXlsSplit
(
originalFilePath
,
helper
,
rs
,
condition
);
File
file
=
new
File
(
originalFilePath
);
listFile
.
add
(
file
);
}
zipFlag
=
true
;
}
else
{
originalFilePath
=
SAVE_FOLDER
+
"/"
+
condition
.
getTaskId
()
+
".xlsx"
;
originalFilePath
=
SAVE_FOLDER
+
"/"
+
condition
.
getTaskId
()
+
".xlsx"
;
SXSSFWorkbook
wb
=
new
SXSSFWorkbook
(
100
);
// 内存中保留 100 行
saveXlsSplit
(
originalFilePath
,
helper
,
rs
,
condition
);
Sheet
sheet
=
wb
.
createSheet
();
File
file
=
new
File
(
originalFilePath
);
Row
row
=
sheet
.
createRow
(
0
);
listFile
.
add
(
file
);
Cell
cell
;
String
[]
columnNames
=
helper
.
getColumnNames
(
rs
);
for
(
int
j
=
0
;
j
<
columnNames
.
length
;
j
++){
cell
=
row
.
createCell
(
j
);
cell
.
setCellValue
(
columnNames
[
j
]);
}
// 遍历输出行
int
rowCount
=
0
;
while
(
rs
.
next
())
{
rowCount
++;
row
=
sheet
.
createRow
(
rowCount
);
String
[]
columnValues
=
helper
.
getColumnValues
(
rs
,
true
,
""
,
""
);
for
(
int
j
=
0
;
j
<
columnValues
.
length
;
j
++){
row
.
createCell
(
j
).
setCellValue
(
columnValues
[
j
]);
}
}
}
// WHILE OVER
String
zipFilePath
=
SAVE_FOLDER
+
"/"
+
condition
.
getTaskId
()
+
".zip"
;
FileOutputStream
fileOut
=
new
FileOutputStream
(
originalFilePath
);
OutputStream
os
=
new
FileOutputStream
(
zipFilePath
);
wb
.
write
(
fileOut
);
FileUtil
.
toZip
(
listFile
,
os
);
//fileOut.flush(); // SXSSFWorkbook 使用 auto-flush 模式
fileOut
.
close
();
// originalFilePath = SAVE_FOLDER + "/" + condition.getTaskId() + ".xlsx";
//wb.close();
// SXSSFWorkbook wb = new SXSSFWorkbook(100); // 内存中保留 100 行
wb
.
dispose
();
// SXSSFWorkbook 没有 close 方法
// Sheet sheet = wb.createSheet();
logger
.
info
(
"[ runDownloadTask.run ]: {}"
,
"已生成自助指标下载文件 "
+
condition
.
getTaskId
()
+
".xlsx"
);
// Row row = sheet.createRow(0);
// Cell cell;
// String[] columnNames = helper.getColumnNames(rs);
// for(int j =0; j<columnNames.length; j++){
// cell = row.createCell(j);
// cell.setCellValue(columnNames[j]);
// }
// // 遍历输出行
// int rowCount = 0;
// while (rs.next()) {
// rowCount++;
// row = sheet.createRow(rowCount);
// String[] columnValues = helper.getColumnValues(rs, true, "", "");
// for(int j=0; j<columnValues.length; j++){
// row.createCell(j).setCellValue(columnValues[j]);
// }
// } // WHILE OVER
// FileOutputStream fileOut = new FileOutputStream(originalFilePath);
// wb.write(fileOut);
// //fileOut.flush(); // SXSSFWorkbook 使用 auto-flush 模式
// fileOut.close();
// //wb.close();
// wb.dispose(); // SXSSFWorkbook 没有 close 方法
// logger.info("[ runDownloadTask.run ]: {}", "已生成自助指标下载文件 " + condition.getTaskId() + ".xlsx");
}
// IF ELSE OVER
}
// IF ELSE OVER
String
cloudFileUrl
=
"https://"
;
String
cloudFileUrl
=
"https://"
;
// 如果指定压缩,则使用之
// 如果指定压缩,则使用之
//if (task.getFormat().equals("zip")) {
//if (task.getFormat().equals("zip")) {
String
taskFileExt
=
task
.
getUseCompress
().
equals
(
Global
.
YES
)
?
".zip"
:
task
.
getFormat
().
equals
(
DownloadFileFormat
.
CSV
)
?
".csv"
:
".xlsx"
;
String
taskFileExt
=
task
.
getUseCompress
().
equals
(
Global
.
YES
)
||
zipFlag
?
".zip"
:
task
.
getFormat
().
equals
(
DownloadFileFormat
.
CSV
)
?
".csv"
:
".xlsx"
;
if
(
task
.
getUseCompress
().
equals
(
Global
.
YES
))
{
if
(
zipFlag
||
task
.
getUseCompress
().
equals
(
Global
.
YES
))
{
logger
.
info
(
"[ runDownloadTask.run ]: {}"
,
"准备生成自助指标压缩文件 "
+
condition
.
getTaskId
()
+
".zip"
);
logger
.
info
(
"[ runDownloadTask.run ]: {}"
,
"准备生成自助指标压缩文件 "
+
condition
.
getTaskId
()
+
".zip"
);
String
zipFilePath
=
SAVE_FOLDER
+
"/"
+
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
);
OutputStream
os
=
new
FileOutputStream
(
zipFilePath
);
BufferedOutputStream
bos
=
new
BufferedOutputStream
(
os
);
File
zipFile
=
new
File
(
zipFilePath
);
zos
=
new
ZipOutputStream
(
bos
);
FileUtil
.
toZip
(
listFile
,
os
);
zos
.
setLevel
(
6
);
// 压缩率选择 0-9
InputStream
is
=
new
FileInputStream
(
originalFilePath
);
//
BufferedInputStream
bis
=
new
BufferedInputStream
(
is
);
//
zos
.
putNextEntry
(
new
ZipEntry
(
originalFilePath
.
substring
(
originalFilePath
.
lastIndexOf
(
"/"
)
+
1
)));
// ZipOutputStream zos = null;
while
((
length
=
bis
.
read
(
buf
))
>
0
)
{
// byte[] buf = new byte[1024];
zos
.
write
(
buf
,
0
,
length
);
// int length = 0;
}
// try {
bis
.
close
();
// OutputStream os = new FileOutputStream(zipFilePath);
is
.
close
();
// BufferedOutputStream bos = new BufferedOutputStream(os);
//bos.close();
// zos = new ZipOutputStream(bos);
//os.close();
// zos.setLevel(6); // 压缩率选择 0-9
logger
.
info
(
"[ runDownloadTask.run ]: {}"
,
"已生成自助指标压缩文件 "
+
condition
.
getTaskId
()
+
".zip"
);
// InputStream is = new FileInputStream(originalFilePath);
}
catch
(
Exception
ex2
)
{
// BufferedInputStream bis = new BufferedInputStream(is);
throw
ex2
;
// zos.putNextEntry(new ZipEntry(originalFilePath.substring(originalFilePath.lastIndexOf("/") + 1)));
}
finally
{
// while ((length = bis.read(buf)) > 0) {
zos
.
closeEntry
();
// zos.write(buf, 0, length);
zos
.
close
();
// }
}
// bis.close();
// is.close();
// //bos.close();
// //os.close();
// logger.info("[ runDownloadTask.run ]: {}", "已生成自助指标压缩文件 " + condition.getTaskId() + ".zip");
// } catch (Exception ex2) {
// throw ex2;
// } finally {
// zos.closeEntry();
// zos.close();
// }
logger
.
info
(
"[ 开始上传压缩文件到腾讯云 ]: {}"
,
task
.
getId
());
logger
.
info
(
"[ 开始上传压缩文件到腾讯云 ]: {}"
,
task
.
getId
());
cloudFileUrl
+=
FileUploadUtil
.
simpleUploadFileFromLocal
(
zipFile
,
task
.
getName
()
+
"-"
+
task
.
getId
()+
taskFileExt
,
BucketNameEnum
.
COMPRESS_60000
.
getName
());
cloudFileUrl
+=
FileUploadUtil
.
simpleUploadFileFromLocal
(
zipFile
,
task
.
getName
()
+
"-"
+
task
.
getId
()+
taskFileExt
,
BucketNameEnum
.
COMPRESS_60000
.
getName
());
}
else
{
}
else
{
...
@@ -929,6 +961,43 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
...
@@ -929,6 +961,43 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
}
// IF OVER
}
// IF OVER
}
}
private
void
saveXlsSplit
(
String
originalFilePath
,
ResultSetHelper
helper
,
ResultSet
rs
,
FlatQueryTaskCondition
condition
){
try
{
Integer
limitSize
=
FileUtil
.
getLimitSize
();
// String originalFilePath = SAVE_FOLDER + "/" + condition.getTaskId() + ".xlsx";
SXSSFWorkbook
wb
=
new
SXSSFWorkbook
(
100
);
// 内存中保留 100 行
Sheet
sheet
=
wb
.
createSheet
();
Row
row
=
sheet
.
createRow
(
0
);
Cell
cell
;
String
[]
columnNames
=
helper
.
getColumnNames
(
rs
);
for
(
int
j
=
0
;
j
<
columnNames
.
length
;
j
++){
cell
=
row
.
createCell
(
j
);
cell
.
setCellValue
(
columnNames
[
j
]);
}
// 遍历输出行
int
rowCount
=
0
;
while
(
rowCount
<
limitSize
&&
rs
.
next
())
{
rowCount
++;
row
=
sheet
.
createRow
(
rowCount
);
String
[]
columnValues
=
helper
.
getColumnValues
(
rs
,
true
,
""
,
""
);
for
(
int
j
=
0
;
j
<
columnValues
.
length
;
j
++){
row
.
createCell
(
j
).
setCellValue
(
columnValues
[
j
]);
}
}
// WHILE OVER
FileOutputStream
fileOut
=
new
FileOutputStream
(
originalFilePath
);
wb
.
write
(
fileOut
);
//fileOut.flush(); // SXSSFWorkbook 使用 auto-flush 模式
fileOut
.
close
();
//wb.close();
wb
.
dispose
();
// SXSSFWorkbook 没有 close 方法
logger
.
info
(
"[ runDownloadTask.run ]: {}"
,
"已生成自助指标下载文件 "
+
condition
.
getTaskId
()
+
".xlsx"
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
logger
.
info
(
"异常:{}"
,
e
);
}
}
/** 下载申请检查计时器 */
/** 下载申请检查计时器 */
//private Timer applyTimer = new Timer();
//private Timer applyTimer = new Timer();
...
...
gic-cloud-data-hook-service/src/main/java/com/gic/cloud/data/hook/service/impl/FreeQueryServiceImpl.java
View file @
b6f06a15
This diff is collapsed.
Click to expand it.
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