Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
performance
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zry
performance
Commits
298eea8e
Commit
298eea8e
authored
May 11, 2021
by
lcx
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
工作量、收入数据写入优化
parent
0a9267d6
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
94 additions
and
33 deletions
+94
-33
performance/Performance.Services/ExtractExcelService/ExtractHelper/WriteDataHelper.cs
+94
-33
No files found.
performance/Performance.Services/ExtractExcelService/ExtractHelper/WriteDataHelper.cs
View file @
298eea8e
...
...
@@ -97,7 +97,7 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
WriteSheetDataExistent
(
sheet
,
columnHeader
,
point
,
sheetType
,
style
,
headers
,
data
,
rows
,
ref
dataFirstRowNum
);
if
(
sheetType
==
SheetType
.
Income
&&
rows
!=
null
&&
rows
.
Any
()
)
if
(
sheetType
==
SheetType
.
Income
&&
rows
!=
null
)
{
dataFirstRowNum
=
point
.
DataFirstRowNum
.
Value
;
RemoveIncomeRow
(
sheet
,
point
);
...
...
@@ -105,9 +105,6 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
dataFirstRowNum
=
point
.
DataFirstRowNum
.
Value
+
rows
.
Count
;
}
if
(
point
.
DataFirstRowNum
.
Value
<
dataFirstRowNum
)
dataFirstRowNum
+=
1
;
if
(
data
==
null
||
!
data
.
Any
(
t
=>
!
string
.
IsNullOrEmpty
(
t
.
Department
)))
return
;
WriteSheetDataNonexistent
(
sheet
,
columnHeader
,
point
,
sheetType
,
style
,
headers
,
data
,
dataFirstRowNum
);
...
...
@@ -129,6 +126,8 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
var
row
=
sheet
.
GetRow
(
rowIndex
);
if
(
row
==
null
)
continue
;
if
(
rowIndex
>
dataFirstRowNum
)
dataFirstRowNum
=
rowIndex
+
1
;
string
department
=
row
.
GetOrCreate
(
dataFirstCellNum
-
1
).
GetDecodeEscapes
();
if
(
string
.
IsNullOrEmpty
(
department
))
continue
;
...
...
@@ -164,9 +163,9 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
#
endregion
data
.
RemoveAll
(
t
=>
t
.
Department
==
department
);
if
(
rowIndex
>
dataFirstRowNum
)
dataFirstRowNum
=
rowIndex
;
}
if
(
point
.
DataFirstRowNum
.
Value
<
dataFirstRowNum
)
dataFirstRowNum
+=
1
;
}
private
static
void
WriteSheetDataNonexistent
(
ISheet
sheet
,
IRow
columnHeader
,
PerSheetPoint
point
,
SheetType
sheetType
,
ExcelStyle
style
,
...
...
@@ -216,6 +215,7 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
List
<
ExtractTransDto
>
data
,
List
<
IncomeRow
>
incomes
,
int
dataFirstRowNum
)
{
var
cellStyle
=
style
.
SetBgkColorAndFormat
(
style
.
GetCellStyle
(),
StyleType
.
数据
);
var
deptStyle
=
style
.
GetCellStyle
();
headers
=
headers
.
Select
(
t
=>
t
.
NoBlank
()).
ToList
();
...
...
@@ -228,10 +228,20 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
var
deptData
=
data
.
Where
(
t
=>
t
.
Department
==
item
.
Department
);
if
(
deptData
==
null
||
!
deptData
.
Any
())
continue
;
row
.
GetOrCreate
(
dataFirstCellNum
-
1
).
SetCellValue
(
item
.
Department
);
row
.
GetOrCreate
(
dataFirstCellNum
-
2
).
SetCellValue
(
item
.
NurseAccount
);
row
.
GetOrCreate
(
dataFirstCellNum
-
3
).
SetCellValue
(
item
.
DoctorAccount
);
row
.
GetOrCreate
(
dataFirstCellNum
-
4
).
SetCellValue
(
item
.
TechnicAccounting
);
var
deptContents
=
new
Dictionary
<
int
,
string
>
{
{
1
,
item
.
Department
},
{
2
,
item
.
NurseAccount
},
{
3
,
item
.
DoctorAccount
},
{
4
,
item
.
TechnicAccounting
},
};
foreach
(
var
content
in
deptContents
)
{
var
cell
=
row
.
GetOrCreate
(
dataFirstCellNum
-
content
.
Key
);
cell
.
SetCellValue
(
content
.
Value
);
cell
.
CellStyle
=
deptStyle
;
}
for
(
int
cellIndex
=
dataFirstCellNum
;
cellIndex
<
columnHeader
.
LastCellNum
;
cellIndex
++)
{
...
...
@@ -239,20 +249,14 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
var
cell
=
row
.
GetOrCreate
(
cellIndex
);
var
value
=
deptData
.
FirstOrDefault
(
t
=>
t
.
Category
.
NoBlank
()
==
column
)?.
Value
;
//数据为空,且单元格值不为空,不写入数据(保留原始值)
var
notWrite
=
!
value
.
HasValue
&&
!
string
.
IsNullOrEmpty
(
cell
.
ToString
());
if
(
cell
.
CellType
!=
CellType
.
Formula
&&
!
notWrite
)
if
(
cell
.
CellType
!=
CellType
.
Formula
)
{
cell
.
SetCellValue
<
decimal
>(
value
);
if
(
headers
!=
null
&&
headers
.
Contains
(
column
))
{
cell
.
CellStyle
=
cellStyle
;
}
cell
.
CellStyle
=
cellStyle
;
}
}
dataFirstRowNum
++;
data
.
RemoveAll
(
t
=>
t
.
Department
==
item
.
Department
);
}
}
...
...
@@ -315,10 +319,13 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
WriteCollectDataExistent
(
sheet
,
columnHeader
,
point
,
sheetType
,
style
,
headers
,
data
,
rows
,
ref
dataFirstRowNum
);
if
(
point
.
DataFirstRowNum
.
Value
<
dataFirstRowNum
)
dataFirstRowNum
+=
1
;
dataFirstRowNum
-=
rows
?.
Count
??
0
;
if
(
sheetType
==
SheetType
.
Income
&&
rows
!=
null
)
{
dataFirstRowNum
=
point
.
DataFirstRowNum
.
Value
;
RemoveIncomeRow
(
sheet
,
point
);
WriteCollectIncomeData
(
sheet
,
columnHeader
,
point
,
style
,
headers
,
data
,
rows
,
dataFirstRowNum
);
dataFirstRowNum
=
point
.
DataFirstRowNum
.
Value
+
rows
.
Count
;
}
if
(
data
==
null
||
!
data
.
Any
(
t
=>
!
string
.
IsNullOrEmpty
(
t
.
Department
)))
return
;
...
...
@@ -326,7 +333,7 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
}
private
static
void
WriteCollectDataExistent
(
ISheet
sheet
,
IRow
columnHeader
,
PerSheetPoint
point
,
SheetType
sheetType
,
ExcelStyle
style
,
List
<
string
>
headers
,
List
<
collect_data
>
data
,
List
<
IncomeRow
>
emptyRow
s
,
ref
int
dataFirstRowNum
)
List
<
string
>
headers
,
List
<
collect_data
>
data
,
List
<
IncomeRow
>
income
s
,
ref
int
dataFirstRowNum
)
{
if
(
sheet
.
LastRowNum
<=
dataFirstRowNum
)
return
;
...
...
@@ -341,15 +348,21 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
var
row
=
sheet
.
GetRow
(
rowIndex
);
if
(
row
==
null
)
continue
;
if
(
rowIndex
>
dataFirstRowNum
)
dataFirstRowNum
=
rowIndex
+
1
;
string
department
=
row
.
GetOrCreate
(
dataFirstCellNum
-
1
).
GetDecodeEscapes
();
if
(
string
.
IsNullOrEmpty
(
department
))
continue
;
if
(
rowIndex
>
dataFirstRowNum
)
dataFirstRowNum
=
rowIndex
;
var
deptData
=
data
.
Where
(
t
=>
t
.
Department
==
department
);
if
(
deptData
==
null
||
!
deptData
.
Any
())
continue
;
#
region
写入数据
#
region
写入数据
if
(
sheetType
==
SheetType
.
Income
)
{
incomes
.
Add
(
GetIncomeRowMessage
(
row
,
dataFirstCellNum
,
department
,
rowIndex
));
continue
;
}
for
(
int
cellIndex
=
dataFirstCellNum
;
cellIndex
<
columnHeader
.
LastCellNum
;
cellIndex
++)
{
...
...
@@ -357,13 +370,9 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
var
cell
=
row
.
GetOrCreate
(
cellIndex
);
var
value
=
deptData
.
FirstOrDefault
(
t
=>
t
.
TypeName
.
NoBlank
()
==
column
)?.
CellValue
;
if
(
sheetType
==
SheetType
.
Income
)
{
cell
.
SetCellValue
<
decimal
>(
value
);
cell
.
CellStyle
=
cellStyle
;
}
else
if
(
cell
.
CellType
!=
CellType
.
Formula
)
//数据为空,且单元格值不为空,不写入数据(保留原始值)
var
notWrite
=
string
.
IsNullOrEmpty
(
value
)
&&
!
string
.
IsNullOrEmpty
(
cell
.
ToString
());
if
(
cell
.
CellType
!=
CellType
.
Formula
&&
!
notWrite
)
{
cell
.
SetCellValue
<
decimal
>(
value
);
if
(
headers
!=
null
&&
headers
.
Contains
(
column
))
...
...
@@ -377,6 +386,8 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
data
.
RemoveAll
(
t
=>
t
.
Department
==
department
);
}
if
(
point
.
DataFirstRowNum
.
Value
<
dataFirstRowNum
)
dataFirstRowNum
+=
1
;
}
private
static
void
WriteCollectDataNonexistent
(
ISheet
sheet
,
IRow
columnHeader
,
PerSheetPoint
point
,
SheetType
sheetType
,
ExcelStyle
style
,
...
...
@@ -420,6 +431,56 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
}
}
private
static
void
WriteCollectIncomeData
(
ISheet
sheet
,
IRow
columnHeader
,
PerSheetPoint
point
,
ExcelStyle
style
,
List
<
string
>
headers
,
List
<
collect_data
>
data
,
List
<
IncomeRow
>
incomes
,
int
dataFirstRowNum
)
{
var
cellStyle
=
style
.
SetBgkColorAndFormat
(
style
.
GetCellStyle
(),
StyleType
.
数据
);
var
deptStyle
=
style
.
GetCellStyle
();
headers
=
headers
.
Select
(
t
=>
t
.
NoBlank
()).
ToList
();
int
dataFirstCellNum
=
point
.
DataFirstCellNum
.
Value
;
foreach
(
var
item
in
incomes
)
{
var
row
=
sheet
.
GetOrCreate
(
dataFirstRowNum
);
var
deptData
=
data
.
Where
(
t
=>
t
.
Department
==
item
.
Department
);
if
(
deptData
==
null
||
!
deptData
.
Any
())
continue
;
var
deptContents
=
new
Dictionary
<
int
,
string
>
{
{
1
,
item
.
Department
},
{
2
,
item
.
NurseAccount
},
{
3
,
item
.
DoctorAccount
},
{
4
,
item
.
TechnicAccounting
},
};
foreach
(
var
content
in
deptContents
)
{
var
cell
=
row
.
GetOrCreate
(
dataFirstCellNum
-
content
.
Key
);
cell
.
SetCellValue
(
content
.
Value
);
cell
.
CellStyle
=
deptStyle
;
}
for
(
int
cellIndex
=
dataFirstCellNum
;
cellIndex
<
columnHeader
.
LastCellNum
;
cellIndex
++)
{
var
column
=
columnHeader
.
GetOrCreate
(
cellIndex
).
GetDecodeEscapes
();
var
cell
=
row
.
GetOrCreate
(
cellIndex
);
var
value
=
deptData
.
FirstOrDefault
(
t
=>
t
.
TypeName
.
NoBlank
()
==
column
)?.
CellValue
;
if
(
cell
.
CellType
!=
CellType
.
Formula
)
{
cell
.
SetCellValue
<
decimal
>(
value
);
cell
.
CellStyle
=
cellStyle
;
}
}
dataFirstRowNum
++;
data
.
RemoveAll
(
t
=>
t
.
Department
==
item
.
Department
);
}
}
/// <summary> 收入固定列 </summary>
private
static
readonly
Dictionary
<
string
,
Func
<
collect_data
,
string
>>
collectIncome
=
new
Dictionary
<
string
,
Func
<
collect_data
,
string
>>
{
...
...
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