Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
DataCenter_Core2.1_20190520
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
bltdc
DataCenter_Core2.1_20190520
Commits
9e4eefc5
Commit
9e4eefc5
authored
Nov 20, 2021
by
jianshuqin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
优化:组件导出内存释放
parent
1f4f2198
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
220 additions
and
83 deletions
+220
-83
BaseService.cs
Bailun.DC.Services/Component/BaseService.cs
+150
-54
QueryService.cs
Bailun.DC.Services/Component/QueryService.cs
+54
-26
QueryController.cs
Bailun.DC.Web/Areas/Component/Controllers/QueryController.cs
+7
-1
query-table.js
Bailun.DC.Web/wwwroot/js/component/query-table.js
+9
-2
No files found.
Bailun.DC.Services/Component/BaseService.cs
View file @
9e4eefc5
This diff is collapsed.
Click to expand it.
Bailun.DC.Services/Component/QueryService.cs
View file @
9e4eefc5
...
@@ -76,13 +76,16 @@ namespace Bailun.DC.Services.Component
...
@@ -76,13 +76,16 @@ namespace Bailun.DC.Services.Component
return
dto
;
return
dto
;
}
}
public
IList
<
ColumnDTO
>
GetListColumn
(
QueryFilterDTO
queryFilter
=
null
)
public
IList
<
ColumnDTO
>
GetListColumn
(
QueryFilterDTO
queryFilter
=
null
,
QueryDTO
entity
=
null
)
{
{
IList
<
ColumnDTO
>
list
=
default
(
IList
<
ColumnDTO
>);
IList
<
ColumnDTO
>
list
=
default
(
IList
<
ColumnDTO
>);
if
(
queryFilter
!=
null
&&
!
string
.
IsNullOrWhiteSpace
(
queryFilter
.
Code
))
if
(
queryFilter
!=
null
&&
!
string
.
IsNullOrWhiteSpace
(
queryFilter
.
Code
))
{
{
QueryDTO
entity
=
this
.
Get
(
queryFilter
.
Code
);
if
(
entity
==
null
)
{
entity
=
this
.
Get
(
queryFilter
.
Code
);
}
if
(
entity
!=
null
&&
(!
string
.
IsNullOrWhiteSpace
(
entity
.
ColumnValue
)))
if
(
entity
!=
null
&&
(!
string
.
IsNullOrWhiteSpace
(
entity
.
ColumnValue
)))
{
{
switch
(
entity
.
ColumnType
)
switch
(
entity
.
ColumnType
)
...
@@ -222,12 +225,15 @@ namespace Bailun.DC.Services.Component
...
@@ -222,12 +225,15 @@ namespace Bailun.DC.Services.Component
return
list
;
return
list
;
}
}
public
PageListDTO
GetListData
(
QueryFilterDTO
queryFilter
)
public
PageListDTO
GetListData
(
QueryFilterDTO
queryFilter
,
QueryDTO
entity
=
null
)
{
{
PageListDTO
pageList
=
new
PageListDTO
();
PageListDTO
pageList
=
new
PageListDTO
();
if
(
queryFilter
!=
null
&&
!
string
.
IsNullOrWhiteSpace
(
queryFilter
.
Code
))
if
(
queryFilter
!=
null
&&
!
string
.
IsNullOrWhiteSpace
(
queryFilter
.
Code
))
{
{
QueryDTO
entity
=
this
.
Get
(
queryFilter
.
Code
);
if
(
entity
==
null
)
{
entity
=
this
.
Get
(
queryFilter
.
Code
);
}
if
(
entity
!=
null
&&
(!
string
.
IsNullOrWhiteSpace
(
entity
.
DataValue
)))
if
(
entity
!=
null
&&
(!
string
.
IsNullOrWhiteSpace
(
entity
.
DataValue
)))
{
{
switch
(
entity
.
DataType
)
switch
(
entity
.
DataType
)
...
@@ -293,24 +299,11 @@ namespace Bailun.DC.Services.Component
...
@@ -293,24 +299,11 @@ namespace Bailun.DC.Services.Component
#
region
数据库表或视图
/
SQL
#
region
数据库表或视图
/
SQL
case
DataTypeEnum
.
Table
:
case
DataTypeEnum
.
Table
:
case
DataTypeEnum
.
Sql
:
case
DataTypeEnum
.
Sql
:
DynamicParameters
sqlparam
=
new
DynamicParameters
();
(
int
,
IDataReader
)
reader
=
this
.
GetListDataReader
(
queryFilter
,
entity
);
int
fetch
=
(
queryFilter
.
pageSize
>
0
?
queryFilter
.
pageSize
:
int
.
MaxValue
).
Value
;
using
(
reader
.
Item2
)
int
offset
=
(((
queryFilter
.
CurrentPage
>
1
?
queryFilter
.
CurrentPage
:
1
)
-
1
)
*
fetch
).
Value
;
//过虑条件SQL
string
whereSql
=
this
.
GetFilterSql
(
queryFilter
,
ref
sqlparam
);
//排序条件SQL
string
orderbySql
=
this
.
GetOrderBySql
(
queryFilter
,
entity
);
string
fromSql
=
$"FROM
{(
entity
.
DataType
==
DataTypeEnum
.
Table
?
$"[dbo].[
{
entity
.
DataValue
}
]"
:
$"(
{
entity
.
DataValue
}
)"
)}
AS A
{
whereSql
}
"
;
string
totalSql
=
$"SELECT COUNT(*)
{
fromSql
}
"
;
string
dataSql
=
$"SELECT A.*
{
fromSql
}
ORDER BY
{
orderbySql
}
LIMIT
{
offset
}
,
{
fetch
}
"
;
using
(
var
db
=
(
entity
.
DataDB
==
DBEnum
.
DataWareHouse
?
DW_DB
:
DB
))
{
{
pageList
.
TotalCount
=
db
.
QueryFirstOrDefault
<
int
>(
totalSql
,
sqlparam
);
pageList
.
TotalCount
=
reader
.
Item1
;
if
(
pageList
.
TotalCount
>
0
)
pageList
.
List
.
Load
(
reader
.
Item2
);
{
var
reader
=
db
.
ExecuteReader
(
dataSql
,
sqlparam
);
pageList
.
List
.
Load
(
reader
);
}
}
}
break
;
break
;
...
@@ -473,15 +466,32 @@ namespace Bailun.DC.Services.Component
...
@@ -473,15 +466,32 @@ namespace Bailun.DC.Services.Component
byte
[]
b
=
default
(
byte
[]);
byte
[]
b
=
default
(
byte
[]);
if
(
queryFilter
!=
null
)
if
(
queryFilter
!=
null
)
{
{
IList
<
ColumnDTO
>
listColumn
=
this
.
GetListColumn
(
queryFilter
);
QueryDTO
entity
=
this
.
Get
(
queryFilter
.
Code
);
IList
<
ColumnDTO
>
listColumn
=
this
.
GetListColumn
(
queryFilter
,
entity
);
if
(
listColumn
!=
null
)
if
(
listColumn
!=
null
)
{
{
//数据类型
DataTypeEnum
?[]
dataTypes
=
{
DataTypeEnum
.
Table
,
DataTypeEnum
.
Sql
};
//列标题
IDictionary
<
string
,
string
>
listHeader
=
listColumn
.
Where
(
l
=>
l
.
IsExport
==
true
||
(
l
.
IsExport
==
null
&&
l
.
IsHide
!=
true
)).
ToDictionary
(
l
=>
l
.
Prop
,
l
=>
l
.
Name
);
//全部数据导出
queryFilter
.
CurrentPage
=
null
;
queryFilter
.
CurrentPage
=
null
;
queryFilter
.
pageSize
=
null
;
queryFilter
.
pageSize
=
null
;
PageListDTO
pageList
=
this
.
GetListData
(
queryFilter
);
if
(!
string
.
IsNullOrWhiteSpace
(
entity
.
DataValue
)
&&
dataTypes
.
Contains
(
entity
.
DataType
))
if
(
listColumn
?.
Count
>
0
)
{
{
b
=
DataTableToExcel
(
listColumn
.
Where
(
l
=>
l
.
IsExport
==
true
||
(
l
.
IsExport
==
null
&&
l
.
IsHide
!=
true
)).
ToDictionary
(
l
=>
l
.
Prop
,
l
=>
l
.
Name
),
pageList
.
List
);
(
int
,
IDataReader
)
reader
=
this
.
GetListDataReader
(
queryFilter
,
entity
);
using
(
reader
.
Item2
)
{
b
=
DataReaderToExcel
(
listHeader
,
reader
.
Item2
,
reader
.
Item1
);
}
}
else
{
PageListDTO
pageList
=
this
.
GetListData
(
queryFilter
,
entity
);
if
(
listColumn
?.
Count
>
0
)
{
b
=
DataTableToExcel
(
listHeader
,
pageList
.
List
);
}
}
}
}
}
}
}
...
@@ -578,7 +588,7 @@ namespace Bailun.DC.Services.Component
...
@@ -578,7 +588,7 @@ namespace Bailun.DC.Services.Component
private
string
GetOrderBySql
(
QueryFilterDTO
queryFilter
,
QueryDTO
entity
=
null
)
private
string
GetOrderBySql
(
QueryFilterDTO
queryFilter
,
QueryDTO
entity
=
null
)
{
{
string
sql
=
"1"
;
string
sql
=
string
.
Empty
;
if
(
queryFilter
?.
ListOrder
?.
Where
(
l
=>
l
!=
null
).
Count
()
>
0
)
if
(
queryFilter
?.
ListOrder
?.
Where
(
l
=>
l
!=
null
).
Count
()
>
0
)
{
{
...
@@ -611,5 +621,23 @@ namespace Bailun.DC.Services.Component
...
@@ -611,5 +621,23 @@ namespace Bailun.DC.Services.Component
return
sql
;
return
sql
;
}
}
private
(
int
,
IDataReader
)
GetListDataReader
(
QueryFilterDTO
queryFilter
,
QueryDTO
entity
)
{
(
int
,
IDataReader
)
reader
=
(
0
,
null
);
DynamicParameters
sqlparam
=
new
DynamicParameters
();
int
fetch
=
(
queryFilter
.
pageSize
>
0
?
queryFilter
.
pageSize
:
int
.
MaxValue
).
Value
;
int
offset
=
(((
queryFilter
.
CurrentPage
>
1
?
queryFilter
.
CurrentPage
:
1
)
-
1
)
*
fetch
).
Value
;
//过虑条件SQL
string
whereSql
=
this
.
GetFilterSql
(
queryFilter
,
ref
sqlparam
);
//排序条件SQL
string
orderbySql
=
this
.
GetOrderBySql
(
queryFilter
,
entity
);
string
fromSql
=
$"FROM
{(
entity
.
DataType
==
DataTypeEnum
.
Table
?
$"[dbo].[
{
entity
.
DataValue
}
]"
:
$"(
{
entity
.
DataValue
}
)"
)}
AS A
{
whereSql
}
"
;
string
totalSql
=
$"SELECT COUNT(*)
{
fromSql
}
"
;
string
dataSql
=
$"SELECT A.*
{
fromSql
}
{(!
string
.
IsNullOrWhiteSpace
(
orderbySql
)
?
$"ORDER BY
{
orderbySql
}
"
:
string
.
Empty
)
}
LIMIT
{
offset
}
,
{
fetch
}
"
;
var
db
=
(
entity
.
DataDB
==
DBEnum
.
DataWareHouse
?
DW_DB
:
DB
);
reader
=
(
db
.
QueryFirstOrDefault
<
int
>(
totalSql
,
sqlparam
),
db
.
ExecuteReader
(
dataSql
,
sqlparam
));
return
reader
;
}
}
}
}
}
Bailun.DC.Web/Areas/Component/Controllers/QueryController.cs
View file @
9e4eefc5
...
@@ -63,9 +63,10 @@ namespace Bailun.DC.Web.Areas.Component.Controllers
...
@@ -63,9 +63,10 @@ namespace Bailun.DC.Web.Areas.Component.Controllers
[
HttpPost
]
[
HttpPost
]
public
ActionResult
Export
(
QueryFilterDTO
queryFilter
)
public
ActionResult
Export
(
QueryFilterDTO
queryFilter
)
{
{
byte
[]
data
=
null
;
try
try
{
{
byte
[]
data
=
new
QueryService
().
Export
(
queryFilter
);
data
=
new
QueryService
().
Export
(
queryFilter
);
return
File
(
data
,
"text/plain"
,
"ImportAttendeesInfol.xls"
);
return
File
(
data
,
"text/plain"
,
"ImportAttendeesInfol.xls"
);
}
}
catch
(
Exception
ex
)
catch
(
Exception
ex
)
...
@@ -73,6 +74,11 @@ namespace Bailun.DC.Web.Areas.Component.Controllers
...
@@ -73,6 +74,11 @@ namespace Bailun.DC.Web.Areas.Component.Controllers
ResultDTO
result
=
new
ResultDTO
()
{
Message
=
ex
.
Message
};
ResultDTO
result
=
new
ResultDTO
()
{
Message
=
ex
.
Message
};
return
Json
(
result
);
return
Json
(
result
);
}
}
finally
{
data
=
null
;
GC
.
Collect
();
}
}
}
}
}
...
...
Bailun.DC.Web/wwwroot/js/component/query-table.js
View file @
9e4eefc5
...
@@ -121,7 +121,7 @@
...
@@ -121,7 +121,7 @@
if
(
l
.
type
==
"daterange"
&&
l
.
value
.
constructor
==
Array
&&
l
.
value
.
length
>
1
)
{
if
(
l
.
type
==
"daterange"
&&
l
.
value
.
constructor
==
Array
&&
l
.
value
.
length
>
1
)
{
filter
.
operator
=
"between"
;
filter
.
operator
=
"between"
;
if
(
l
.
value
[
0
].
constructor
==
Date
&&
l
.
value
[
1
].
constructor
==
Date
)
{
if
(
l
.
value
[
0
].
constructor
==
Date
&&
l
.
value
[
1
].
constructor
==
Date
)
{
filter
.
value
=
[
l
.
value
[
0
].
format
(
"yyyy-MM-dd"
),
l
.
value
[
1
].
format
(
"yyyy-MM-dd"
)];
filter
.
value
=
[
l
.
value
[
0
].
format
(
"yyyy-MM-dd"
),
l
.
value
[
1
].
format
(
"yyyy-MM-dd"
)]
.
join
(
","
)
;
}
else
{
}
else
{
filter
.
value
=
l
.
value
.
join
(
","
);
filter
.
value
=
l
.
value
.
join
(
","
);
}
}
...
@@ -286,7 +286,14 @@
...
@@ -286,7 +286,14 @@
'Accept'
:
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8'
'Accept'
:
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8'
}
}
}).
then
(
function
(
json
)
{
}).
then
(
function
(
json
)
{
saveAs
(
json
.
bodyBlob
,
'Export_'
+
(
new
Date
().
format
(
"yyyyMMddhhmmss"
))
+
'.xlsx'
);
var
ext
=
"xlsx"
;
if
(
json
.
headers
&&
json
.
headers
.
map
&&
json
.
headers
.
map
[
"content-disposition"
]
&&
json
.
headers
.
map
[
"content-disposition"
].
length
>
0
)
{
var
fileInfo
=
json
.
headers
.
map
[
"content-disposition"
][
0
].
split
(
';'
);
var
fileName
=
fileInfo
&&
fileInfo
.
length
>
2
&&
fileInfo
[
1
];
ext
=
fileName
&&
fileName
.
split
(
"."
).
length
>
1
&&
fileName
.
split
(
"."
)[
1
];
}
var
exportName
=
(
that
.
setting
.
listCrumb
&&
that
.
setting
.
listCrumb
.
length
>
0
?
that
.
setting
.
listCrumb
.
join
(
""
)
:
(
'Export'
))
+
"_"
+
(
new
Date
().
format
(
"yyyyMMddhhmm"
));
saveAs
(
json
.
bodyBlob
,
exportName
+
"."
+
ext
);
}).
catch
(
function
(
error
)
{
}).
catch
(
function
(
error
)
{
that
.
$message
(
error
.
message
||
" 未知错误!"
);
that
.
$message
(
error
.
message
||
" 未知错误!"
);
});
});
...
...
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