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
7835087f
Commit
7835087f
authored
Mar 19, 2019
by
ruyun.zhang@suvalue.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
二次计算完成
parent
0402ea16
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
305 additions
and
100 deletions
+305
-100
performance/Performance.DtoModels/AutoMapper/AutoMapperConfigs.cs
+2
-0
performance/Performance.Services/PerExcelService/PerExcelService.cs
+36
-21
performance/Performance.Services/PerExcelService/PerSheetDataFactory.cs
+0
-28
performance/Performance.Services/PerExcelService/PerSheetService.cs
+26
-11
performance/Performance.Services/PerExcelService/SheetDataCompute/IPerSheetDataCompute.cs
+0
-17
performance/Performance.Services/PerExcelService/SheetDataCompute/PerSheetDataComputeEconomic.cs
+136
-2
performance/Performance.Services/PerExcelService/SheetDataCompute/PerSheetDataComputeEconomicMerge.cs
+1
-1
performance/Performance.Services/PerExcelService/SheetDataCompute/PerSheetDataComputeWorkload.cs
+97
-17
performance/Performance.Services/PerExcelService/SheetDataRead/PerSheetDataReadWorkload.cs
+1
-1
performance/Performance.Services/Performance.Services.csproj
+4
-0
performance/Performance.Services/SheetSevice.cs
+2
-2
No files found.
performance/Performance.DtoModels/AutoMapper/AutoMapperConfigs.cs
View file @
7835087f
...
@@ -68,6 +68,8 @@ public AutoMapperConfigs()
...
@@ -68,6 +68,8 @@ public AutoMapperConfigs()
CreateMap
<
PerData
,
im_data
>()
CreateMap
<
PerData
,
im_data
>()
.
ForMember
(
dest
=>
dest
.
IsFactor
,
opt
=>
opt
.
MapFrom
(
src
=>
src
.
IsFactor
?
1
:
2
))
.
ForMember
(
dest
=>
dest
.
IsFactor
,
opt
=>
opt
.
MapFrom
(
src
=>
src
.
IsFactor
?
1
:
2
))
.
ForMember
(
dest
=>
dest
.
UnitType
,
opt
=>
opt
.
MapFrom
(
src
=>
src
.
UnitType
==
"医生组"
?
1
:
(
src
.
UnitType
==
"护理组"
?
2
:
0
)));
.
ForMember
(
dest
=>
dest
.
UnitType
,
opt
=>
opt
.
MapFrom
(
src
=>
src
.
UnitType
==
"医生组"
?
1
:
(
src
.
UnitType
==
"护理组"
?
2
:
0
)));
CreateMap
<
PerDataEmployee
,
im_employee
>();
}
}
}
}
}
}
performance/Performance.Services/PerExcelService/PerExcelService.cs
View file @
7835087f
...
@@ -21,17 +21,20 @@ public class PerExcelService : IAutoInjection
...
@@ -21,17 +21,20 @@ public class PerExcelService : IAutoInjection
private
PerforImSheetRepository
_perforImSheetRepository
;
private
PerforImSheetRepository
_perforImSheetRepository
;
private
PerforImDataRepository
_perforImDataRepository
;
private
PerforImDataRepository
_perforImDataRepository
;
private
PerforImHeaderRepository
_perforImHeaderRepository
;
private
PerforImHeaderRepository
_perforImHeaderRepository
;
private
PerforImEmployeeRepository
_perforImEmployeeRepository
;
public
PerExcelService
(
PerSheetService
perSheetService
,
public
PerExcelService
(
PerSheetService
perSheetService
,
PerHeaderService
perHeaderService
,
PerHeaderService
perHeaderService
,
PerforImSheetRepository
perforImSheetRepository
,
PerforImSheetRepository
perforImSheetRepository
,
PerforImDataRepository
perforImDataRepository
,
PerforImDataRepository
perforImDataRepository
,
PerforImHeaderRepository
perforImHeaderRepository
)
PerforImHeaderRepository
perforImHeaderRepository
,
PerforImEmployeeRepository
perforImEmployeeRepository
)
{
{
_perSheetService
=
perSheetService
;
_perSheetService
=
perSheetService
;
_perHeaderService
=
perHeaderService
;
_perHeaderService
=
perHeaderService
;
_perforImSheetRepository
=
perforImSheetRepository
;
_perforImSheetRepository
=
perforImSheetRepository
;
_perforImDataRepository
=
perforImDataRepository
;
_perforImDataRepository
=
perforImDataRepository
;
_perforImHeaderRepository
=
perforImHeaderRepository
;
_perforImHeaderRepository
=
perforImHeaderRepository
;
_perforImEmployeeRepository
=
perforImEmployeeRepository
;
}
}
/// <summary>
/// <summary>
...
@@ -95,31 +98,43 @@ public void Save(List<PerSheet> perSheets, int allotId, int source)
...
@@ -95,31 +98,43 @@ public void Save(List<PerSheet> perSheets, int allotId, int source)
{
{
foreach
(
var
sheet
in
perSheets
)
foreach
(
var
sheet
in
perSheets
)
{
{
var
imsheet
=
new
im_sheet
{
AllotID
=
allotId
,
SheetName
=
sheet
.
SheetName
,
Source
=
source
,
SheetType
=
(
int
)
sheet
.
SheetType
};
if
(
sheet
.
SheetType
==
SheetType
.
Employee
)
_perforImSheetRepository
.
Add
(
imsheet
);
foreach
(
var
header
in
sheet
.
PerHeader
)
{
{
var
imheader
=
Mapper
.
Map
<
im_header
>(
header
);
var
dataList
=
sheet
.
PerData
.
Select
(
t
=>
(
PerDataEmployee
)
t
);
imheader
.
SheetID
=
imsheet
.
ID
;
foreach
(
var
data
in
dataList
)
_perforImHeaderRepository
.
Add
(
imheader
);
if
(
header
.
IsHasChildren
)
{
{
foreach
(
var
child
in
header
.
Children
)
var
imdata
=
Mapper
.
Map
<
im_employee
>(
data
);
{
_perforImEmployeeRepository
.
Add
(
imdata
);
var
imheaderChild
=
Mapper
.
Map
<
im_header
>(
child
);
imheaderChild
.
SheetID
=
imsheet
.
ID
;
imheaderChild
.
ParentID
=
imheader
.
ID
;
_perforImHeaderRepository
.
Add
(
imheaderChild
);
}
}
}
}
}
var
dataList
=
sheet
.
PerData
.
Select
(
t
=>
(
PerData
)
t
);
else
foreach
(
var
data
in
dataList
)
{
{
var
imdata
=
Mapper
.
Map
<
im_data
>(
data
);
var
imsheet
=
new
im_sheet
{
AllotID
=
allotId
,
SheetName
=
sheet
.
SheetName
,
Source
=
source
,
SheetType
=
(
int
)
sheet
.
SheetType
};
imdata
.
SheetID
=
imsheet
.
ID
;
_perforImSheetRepository
.
Add
(
imsheet
);
_perforImDataRepository
.
Add
(
imdata
);
foreach
(
var
header
in
sheet
.
PerHeader
)
{
var
imheader
=
Mapper
.
Map
<
im_header
>(
header
);
imheader
.
SheetID
=
imsheet
.
ID
;
_perforImHeaderRepository
.
Add
(
imheader
);
if
(
header
.
IsHasChildren
)
{
foreach
(
var
child
in
header
.
Children
)
{
var
imheaderChild
=
Mapper
.
Map
<
im_header
>(
child
);
imheaderChild
.
SheetID
=
imsheet
.
ID
;
imheaderChild
.
ParentID
=
imheader
.
ID
;
_perforImHeaderRepository
.
Add
(
imheaderChild
);
}
}
}
var
dataList
=
sheet
.
PerData
.
Select
(
t
=>
(
PerData
)
t
);
foreach
(
var
data
in
dataList
)
{
var
imdata
=
Mapper
.
Map
<
im_data
>(
data
);
imdata
.
SheetID
=
imsheet
.
ID
;
_perforImDataRepository
.
Add
(
imdata
);
}
}
}
}
}
...
...
performance/Performance.Services/PerExcelService/PerSheetDataFactory.cs
View file @
7835087f
...
@@ -44,33 +44,5 @@ public static IPerSheetDataRead GetDataRead(SheetType sheetType)
...
@@ -44,33 +44,5 @@ public static IPerSheetDataRead GetDataRead(SheetType sheetType)
}
}
return
dataread
;
return
dataread
;
}
}
/// <summary>
/// 构建excel计算
/// </summary>
/// <param name="sheetType"></param>
/// <returns></returns>
public
static
IPerSheetDataCompute
GetDataCompute
(
SheetType
sheetType
)
{
IPerSheetDataCompute
dataCompute
=
null
;
switch
(
sheetType
)
{
case
SheetType
.
Income
:
case
SheetType
.
OtherIncome
:
case
SheetType
.
Expend
:
dataCompute
=
new
PerSheetDataComputeEconomic
();
break
;
case
SheetType
.
Workload
:
dataCompute
=
new
PerSheetDataComputeWorkload
();
break
;
//case SheetType.Overtime:
// dataCompute = new PerSheetDataReadOvertime();
// break;
//case SheetType.UnifyUnit:
// dataread = new PerSheetDataReadUnifyUnit();
// break;
}
return
dataCompute
;
}
}
}
}
}
performance/Performance.Services/PerExcelService/PerSheetService.cs
View file @
7835087f
...
@@ -47,10 +47,9 @@ public PerSheet Sheet(ISheet sheet)
...
@@ -47,10 +47,9 @@ public PerSheet Sheet(ISheet sheet)
/// <returns></returns>
/// <returns></returns>
public
SheetType
GetSheetType
(
string
sheetName
)
public
SheetType
GetSheetType
(
string
sheetName
)
{
{
//if (sheetName.StartsWith("医院人员名单"))
if
(
sheetName
.
StartsWith
(
"医院人员名单"
))
// return SheetType.Employee;
return
SheetType
.
Employee
;
//else
else
if
(
sheetName
.
StartsWith
(
"1.0"
))
if
(
sheetName
.
StartsWith
(
"1.0"
))
return
SheetType
.
OtherIncome
;
return
SheetType
.
OtherIncome
;
else
if
(
sheetName
.
StartsWith
(
"1.1"
))
else
if
(
sheetName
.
StartsWith
(
"1.1"
))
return
SheetType
.
Income
;
return
SheetType
.
Income
;
...
@@ -68,17 +67,33 @@ internal List<PerSheet> ProcessCompute(PerExcel excel)
...
@@ -68,17 +67,33 @@ internal List<PerSheet> ProcessCompute(PerExcel excel)
List
<
PerSheet
>
perSheet
=
new
List
<
PerSheet
>();
List
<
PerSheet
>
perSheet
=
new
List
<
PerSheet
>();
//合并科室收入、支出
//合并科室收入、支出
var
merge
=
new
PerSheetDataComputeMerge
();
var
mergeResult
=
merge
.
MergeCompute
(
excel
);
var
economicCompute
=
new
PerSheetDataComputeEconomic
();
var
economicCompute
=
new
PerSheetDataComputeEconomic
();
var
economic
=
economicCompute
.
ProcessCompute
(
mergeResult
);
var
mergeResult
=
economicCompute
.
MergeCompute
(
excel
);
perSheet
.
Add
(
economic
);
//一次计算
var
onceEconomic
=
economicCompute
.
OnceCompute
(
mergeResult
);
//二次计算
var
twiceEconomicResult
=
economicCompute
.
TwiceCompute
(
onceEconomic
);
perSheet
.
Add
(
twiceEconomicResult
.
Sheet
);
//工作量
var
workloadCompute
=
new
PerSheetDataComputeWorkload
();
var
workloadCompute
=
new
PerSheetDataComputeWorkload
();
var
workload
=
workloadCompute
.
ProcessCompute
(
excel
.
PerSheet
.
FirstOrDefault
(
t
=>
t
.
SheetType
==
SheetType
.
Workload
));
var
workload1
=
excel
.
PerSheet
.
FirstOrDefault
(
t
=>
t
.
SheetType
==
SheetType
.
Workload
&&
t
.
SheetName
.
Contains
(
"医生组"
));
perSheet
.
Add
(
workload
);
workload1
.
SheetName
=
"医生组工作量绩效测算表"
;
//医生组 一次计算
var
onceWorkload1
=
workloadCompute
.
OnceCompute
(
workload1
);
//医生组 二次计算
var
twiceWorkloadResult1
=
workloadCompute
.
TwiceCompute
(
onceWorkload1
);
perSheet
.
Add
(
twiceWorkloadResult1
.
Sheet
);
var
workload2
=
excel
.
PerSheet
.
FirstOrDefault
(
t
=>
t
.
SheetType
==
SheetType
.
Workload
&&
t
.
SheetName
.
Contains
(
"护理组"
));
workload2
.
SheetName
=
"护理组工作量绩效测算表"
;
//护理组 一次计算
var
onceWorkload2
=
workloadCompute
.
OnceCompute
(
workload2
);
//护理组 二次计算
var
twiceWorkloadResult2
=
workloadCompute
.
TwiceCompute
(
onceWorkload2
);
perSheet
.
Add
(
twiceWorkloadResult2
.
Sheet
);
return
perSheet
;
return
perSheet
;
}
}
...
...
performance/Performance.Services/PerExcelService/SheetDataCompute/IPerSheetDataCompute.cs
deleted
100644 → 0
View file @
0402ea16
using
Performance.DtoModels
;
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
namespace
Performance.Services
{
public
interface
IPerSheetDataCompute
{
/// <summary>
/// 计算
/// </summary>
/// <param name="sheet"></param>
/// <returns></returns>
PerSheet
ProcessCompute
(
PerSheet
excel
);
}
}
performance/Performance.Services/PerExcelService/SheetDataCompute/PerSheetDataComputeEconomic.cs
View file @
7835087f
...
@@ -11,14 +11,105 @@ namespace Performance.Services
...
@@ -11,14 +11,105 @@ namespace Performance.Services
/// <summary>
/// <summary>
/// 科室经济核算汇总表 (收入/其他收入/支出)
/// 科室经济核算汇总表 (收入/其他收入/支出)
/// </summary>
/// </summary>
public
class
PerSheetDataComputeEconomic
:
IPerSheetDataCompute
public
class
PerSheetDataComputeEconomic
{
{
#
region
合并科室经济
/// <summary>
/// <summary>
/// 计算科室经济核算汇总表
/// 计算科室经济核算汇总表
/// </summary>
/// </summary>
/// <param name="excel"></param>
/// <param name="excel"></param>
/// <returns></returns>
/// <returns></returns>
public
PerSheet
ProcessCompute
(
PerSheet
sheet
)
public
PerSheet
MergeCompute
(
PerExcel
excel
)
{
PerSheet
compSheet
=
new
PerSheet
{
SheetName
=
"科室经济核算汇总表"
,
ModuleName
=
"科室经济核算汇总表"
,
PerHeader
=
new
List
<
PerHeader
>(),
PerData
=
new
List
<
IPerData
>()
};
List
<
PerData
>
perDataList
=
new
List
<
PerData
>();
//初始核算单元列头
compSheet
.
PerHeader
.
Add
(
new
PerHeader
{
CellValue
=
"核算单元"
,
Level
=
0
,
MergeCell
=
1
,
MergeRow
=
2
,
PointCell
=
0
,
PointRow
=
0
});
//起始列
int
pointCell
=
1
;
//计算需从以下sheet中拿取数据
SheetType
[]
types
=
{
SheetType
.
Income
,
SheetType
.
OtherIncome
,
SheetType
.
Expend
};
foreach
(
var
type
in
types
)
{
//取出当前sheet类型数据
var
sheetList
=
excel
.
PerSheet
.
Where
(
t
=>
t
.
SheetType
==
type
);
if
(
sheetList
.
Any
())
{
List
<
PerHeader
>
headList
=
new
List
<
PerHeader
>();
//子集列号为父级列号
int
childPointCell
=
pointCell
;
foreach
(
var
sheet
in
sheetList
)
{
var
dataList
=
sheet
.
PerData
.
Select
(
t
=>
(
PerData
)
t
);
foreach
(
var
group
in
dataList
.
GroupBy
(
t
=>
t
.
UnitType
))
{
var
typeName
=
$"
{
GetCleanSheetName
(
sheet
.
SheetName
)}
(
{
group
.
Key
}
)"
;
//创建子集头部信息
PerHeader
childHeader
=
new
PerHeader
(
1
,
childPointCell
,
typeName
,
1
,
1
,
1
,
null
,
2
);
headList
.
Add
(
childHeader
);
var
ds
=
group
.
Where
(
t
=>
t
.
CellValue
.
HasValue
&&
t
.
CellValue
.
Value
>
0
)
.
GroupBy
(
t
=>
t
.
AccountingUnit
).
Select
(
t
=>
new
PerData
{
SignID
=
childHeader
.
SignID
,
UnitType
=
group
.
Key
,
AccountingUnit
=
t
.
Key
,
CellValue
=
t
.
Sum
(
s
=>
s
.
IsFactor
?
(
s
.
CellValue
*
(
s
.
FactorValue
??
0
))
:
s
.
CellValue
),
TypeName
=
typeName
,
RowNumber
=
dataList
.
FirstOrDefault
(
s
=>
s
.
AccountingUnit
==
t
.
Key
&&
s
.
UnitType
==
group
.
Key
)?.
RowNumber
??
0
,
ComputRule
=
type
==
SheetType
.
Expend
?
2
:
1
});
perDataList
.
AddRange
(
ds
);
childPointCell
++;
}
}
PerHeader
header
=
new
PerHeader
(
0
,
pointCell
,
EnumHelper
.
GetDescription
(
type
),
1
,
1
,
headList
.
Count
,
headList
,
2
);
compSheet
.
PerHeader
.
Add
(
header
);
//父级列号为当前列号+子集个数
pointCell
=
pointCell
+
headList
.
Count
;
}
}
int
number
=
0
;
foreach
(
var
accountingUnit
in
perDataList
.
OrderBy
(
t
=>
t
.
RowNumber
).
Select
(
t
=>
t
.
AccountingUnit
).
Distinct
())
{
perDataList
.
Where
(
t
=>
t
.
AccountingUnit
==
accountingUnit
).
ToList
().
ForEach
(
item
=>
item
.
RowNumber
=
number
);
number
++;
}
compSheet
.
PerData
.
AddRange
(
perDataList
);
return
compSheet
;
}
private
string
GetCleanSheetName
(
string
sheetName
)
{
sheetName
=
sheetName
.
Trim
()
.
Replace
(
"医生组"
,
""
)
.
Replace
(
"护理组"
,
""
)
.
Replace
(
" "
,
""
)
.
Replace
(
"."
,
""
);
sheetName
=
Regex
.
Replace
(
sheetName
,
@"\d"
,
""
);
return
sheetName
;
}
#
endregion
#
region
一次汇总
/// <summary>
/// 计算科室经济核算一次汇总表
/// </summary>
/// <param name="excel"></param>
/// <returns></returns>
public
PerSheet
OnceCompute
(
PerSheet
sheet
)
{
{
var
dataList
=
sheet
.
PerData
.
Select
(
t
=>
(
PerData
)
t
);
var
dataList
=
sheet
.
PerData
.
Select
(
t
=>
(
PerData
)
t
);
int
phead
=
0
;
int
phead
=
0
;
...
@@ -72,5 +163,48 @@ public PerSheet ProcessCompute(PerSheet sheet)
...
@@ -72,5 +163,48 @@ public PerSheet ProcessCompute(PerSheet sheet)
sheet
.
PerData
.
AddRange
(
perDataList
);
sheet
.
PerData
.
AddRange
(
perDataList
);
return
sheet
;
return
sheet
;
}
}
#
endregion
#
region
二次计算
/// <summary>
/// 二次计算
/// </summary>
/// <param name="sheet"></param>
/// <returns></returns>
public
(
PerSheet
Sheet
,
List
<
PerData
>
PerData
)
TwiceCompute
(
PerSheet
sheet
)
{
//获取最大列坐标位置
int
thiscell
=
sheet
.
PerHeader
.
OrderByDescending
(
t
=>
t
.
PointCell
).
FirstOrDefault
().
Children
.
Max
(
t
=>
t
.
PointCell
)
+
1
;
PerHeader
perHead
=
new
PerHeader
(
0
,
thiscell
,
"科室可核算业绩收入"
,
0
,
1
,
2
,
new
List
<
PerHeader
>(),
1
);
var
dataList
=
sheet
.
PerData
.
Select
(
t
=>
(
PerData
)
t
);
List
<
PerData
>
perDataList
=
new
List
<
PerData
>();
//插入合计结果
var
groupList
=
dataList
.
Where
(
t
=>
t
.
IsTotal
==
1
&&
t
.
CellValue
.
HasValue
&&
t
.
CellValue
.
Value
>
0
).
GroupBy
(
t
=>
t
.
UnitType
);
foreach
(
var
group
in
groupList
)
{
var
childHead
=
new
PerHeader
(
1
,
thiscell
,
group
.
Key
,
1
,
1
,
1
,
null
,
1
);
perHead
.
Children
.
Add
(
childHead
);
var
ds
=
group
.
GroupBy
(
t
=>
t
.
AccountingUnit
).
Select
(
t
=>
new
PerData
{
UnitType
=
group
.
Key
,
AccountingUnit
=
t
.
Key
,
CellValue
=
t
.
Sum
(
s
=>
s
.
ComputRule
==
2
?
s
.
CellValue
*
-
1
:
s
.
CellValue
),
TypeName
=
group
.
Key
,
RowNumber
=
t
.
FirstOrDefault
()?.
RowNumber
??
0
,
IsTotal
=
1
,
PointCell
=
thiscell
,
ComputRule
=
t
.
Select
(
s
=>
s
.
ComputRule
).
Distinct
().
First
(),
SignID
=
childHead
.
SignID
,
});
perDataList
.
AddRange
(
ds
);
thiscell
++;
}
sheet
.
PerHeader
.
Add
(
perHead
);
sheet
.
PerData
.
AddRange
(
perDataList
);
return
(
sheet
,
perDataList
);
}
#
endregion
}
}
}
}
performance/Performance.Services/PerExcelService/SheetDataCompute/PerSheetDataComputeMerge.cs
→
performance/Performance.Services/PerExcelService/SheetDataCompute/PerSheetDataCompute
Economic
Merge.cs
View file @
7835087f
...
@@ -11,7 +11,7 @@ namespace Performance.Services
...
@@ -11,7 +11,7 @@ namespace Performance.Services
/// <summary>
/// <summary>
/// 合并科室经济
/// 合并科室经济
/// </summary>
/// </summary>
public
class
PerSheetDataComputeMerge
public
class
PerSheetDataCompute
Economic
Merge
{
{
/// <summary>
/// <summary>
/// 计算科室经济核算汇总表
/// 计算科室经济核算汇总表
...
...
performance/Performance.Services/PerExcelService/SheetDataCompute/PerSheetDataComputeWorkload.cs
View file @
7835087f
...
@@ -11,30 +11,110 @@ namespace Performance.Services
...
@@ -11,30 +11,110 @@ namespace Performance.Services
/// <summary>
/// <summary>
/// 工作量
/// 工作量
/// </summary>
/// </summary>
public
class
PerSheetDataComputeWorkload
:
IPerSheetDataCompute
public
class
PerSheetDataComputeWorkload
{
{
public
PerSheet
ProcessCompute
(
PerSheet
excel
)
#
region
工作量一次计算
/// <summary>
/// 工作量一次计算
/// </summary>
/// <param name="sheet"></param>
/// <returns></returns>
public
PerSheet
OnceCompute
(
PerSheet
sheet
)
{
{
PerSheet
compSheet
=
new
PerSheet
var
dataList
=
sheet
.
PerData
.
Select
(
t
=>
(
PerData
)
t
);
int
phead
=
0
;
//修改cell坐标,为新增合计预留位置
foreach
(
var
header
in
sheet
.
PerHeader
)
{
{
SheetName
=
"工作量绩效测算表"
,
if
(
header
.
IsHasChildren
)
ModuleName
=
"工作量绩效测算表"
,
{
PerHeader
=
new
List
<
PerHeader
>(),
header
.
PointCell
=
header
.
PointCell
+
phead
;
PerData
=
new
List
<
IPerData
>()
header
.
MergeCell
=
header
.
MergeCell
+
1
;
};
header
.
Children
.
ForEach
(
item
=>
item
.
PointCell
=
item
.
PointCell
+
phead
);
phead
=
phead
+
1
;
return
compSheet
;
}
}
Dictionary
<
string
,
PerHeader
>
perHead
=
new
Dictionary
<
string
,
PerHeader
>();
List
<
PerData
>
perDataList
=
new
List
<
PerData
>();
//插入合计结果
foreach
(
var
header
in
sheet
.
PerHeader
)
{
if
(
header
.
IsHasChildren
)
{
var
maxcell
=
header
.
Children
.
Max
(
t
=>
t
.
PointCell
);
var
parentHead
=
new
PerHeader
(
1
,
maxcell
+
1
,
$"
{
header
.
CellValue
}
合计"
,
0
,
1
,
1
,
new
List
<
PerHeader
>(),
1
);
perHead
.
Add
(
header
.
SignID
,
parentHead
);
var
typeClass
=
dataList
.
Where
(
t
=>
header
.
Children
.
Select
(
s
=>
s
.
CellValue
).
Contains
(
t
.
TypeName
));
int
pointcell
=
0
;
foreach
(
var
group
in
typeClass
.
GroupBy
(
t
=>
t
.
UnitType
))
{
var
ds
=
group
.
Where
(
t
=>
t
.
CellValue
.
HasValue
&&
t
.
CellValue
.
Value
>
0
)
.
GroupBy
(
t
=>
t
.
AccountingUnit
).
Select
(
t
=>
new
PerData
{
UnitType
=
group
.
Key
,
AccountingUnit
=
t
.
Key
,
CellValue
=
t
.
Sum
(
s
=>
s
.
CellValue
),
TypeName
=
group
.
Key
,
RowNumber
=
t
.
FirstOrDefault
()?.
RowNumber
??
0
,
IsTotal
=
1
,
PointCell
=
maxcell
+
pointcell
,
ComputRule
=
t
.
Select
(
s
=>
s
.
ComputRule
).
Distinct
().
First
(),
SignID
=
parentHead
.
SignID
,
});
perDataList
.
AddRange
(
ds
);
}
}
}
foreach
(
var
item
in
perHead
.
Keys
)
{
sheet
.
PerHeader
.
FirstOrDefault
(
t
=>
t
.
SignID
==
item
)?.
Children
.
Add
(
perHead
[
item
]);
}
sheet
.
PerData
.
AddRange
(
perDataList
);
return
sheet
;
}
}
private
string
GetCleanSheetName
(
string
sheetName
)
#
endregion
#
region
工作量二次计算
/// <summary>
/// 工作量二次计算
/// </summary>
/// <param name="sheet"></param>
/// <returns></returns>
public
(
PerSheet
Sheet
,
List
<
PerData
>
PerData
)
TwiceCompute
(
PerSheet
sheet
)
{
{
sheetName
=
sheetName
//获取最大列坐标位置
.
Replace
(
"医生组"
,
""
)
int
thiscell
=
sheet
.
PerHeader
.
OrderByDescending
(
t
=>
t
.
PointCell
).
FirstOrDefault
().
Children
.
Max
(
t
=>
t
.
PointCell
)
+
1
;
.
Replace
(
"护理组"
,
""
)
PerHeader
perHead
=
new
PerHeader
(
0
,
thiscell
,
"工作量绩效合计"
,
0
,
2
,
1
,
new
List
<
PerHeader
>(),
1
);
.
Replace
(
"."
,
""
);
sheetName
=
Regex
.
Replace
(
sheetName
,
@"\d"
,
""
);
var
dataList
=
sheet
.
PerData
.
Select
(
t
=>
(
PerData
)
t
);
return
sheetName
;
List
<
PerData
>
perDataList
=
new
List
<
PerData
>();
//插入合计结果
var
groupList
=
dataList
.
Where
(
t
=>
t
.
IsTotal
==
1
&&
t
.
CellValue
.
HasValue
&&
t
.
CellValue
.
Value
>
0
).
GroupBy
(
t
=>
new
{
t
.
UnitType
,
t
.
AccountingUnit
});
foreach
(
var
group
in
groupList
)
{
var
ds
=
group
.
Select
(
t
=>
new
PerData
{
UnitType
=
group
.
Key
.
UnitType
,
AccountingUnit
=
group
.
Key
.
AccountingUnit
,
CellValue
=
group
.
Sum
(
s
=>
s
.
CellValue
),
TypeName
=
group
.
Key
.
UnitType
,
RowNumber
=
group
.
FirstOrDefault
()?.
RowNumber
??
0
,
IsTotal
=
1
,
PointCell
=
thiscell
,
ComputRule
=
group
.
Select
(
s
=>
s
.
ComputRule
).
Distinct
().
First
(),
SignID
=
perHead
.
SignID
,
});
perDataList
.
AddRange
(
ds
);
}
sheet
.
PerHeader
.
Add
(
perHead
);
sheet
.
PerData
.
AddRange
(
perDataList
);
return
(
sheet
,
perDataList
);
}
}
#
endregion
}
}
}
}
performance/Performance.Services/PerExcelService/SheetDataRead/PerSheetDataReadWorkload.cs
View file @
7835087f
...
@@ -17,7 +17,7 @@ public class PerSheetDataReadWorkload : IPerSheetDataRead
...
@@ -17,7 +17,7 @@ public class PerSheetDataReadWorkload : IPerSheetDataRead
{
{
HeaderFirstRowNum
=
1
,
HeaderFirstRowNum
=
1
,
HeaderLastRowNum
=
2
,
HeaderLastRowNum
=
2
,
HeaderFirstCellNum
=
1
,
HeaderFirstCellNum
=
0
,
DataFirstRowNum
=
4
,
DataFirstRowNum
=
4
,
AccountingUnit
=
new
List
<
AccountingUnit
>
AccountingUnit
=
new
List
<
AccountingUnit
>
{
{
...
...
performance/Performance.Services/Performance.Services.csproj
View file @
7835087f
...
@@ -5,6 +5,10 @@
...
@@ -5,6 +5,10 @@
</PropertyGroup>
</PropertyGroup>
<ItemGroup>
<ItemGroup>
<Compile Remove="PerExcelService\SheetDataCompute\PerSheetDataComputeEconomicMerge.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="CSRedisCore" Version="3.0.45" />
<PackageReference Include="CSRedisCore" Version="3.0.45" />
<PackageReference Include="DotNetCore.NPOI" Version="1.2.1" />
<PackageReference Include="DotNetCore.NPOI" Version="1.2.1" />
</ItemGroup>
</ItemGroup>
...
...
performance/Performance.Services/SheetSevice.cs
View file @
7835087f
...
@@ -118,7 +118,7 @@ public SheetExportResponse SheetExport(int sheetID)
...
@@ -118,7 +118,7 @@ public SheetExportResponse SheetExport(int sheetID)
response
.
Header
.
Add
(
rowhead
);
response
.
Header
.
Add
(
rowhead
);
foreach
(
var
header
in
headList
.
Where
(
t
=>
!
t
.
ParentID
.
HasValue
||
t
.
ParentID
.
Value
==
0
))
foreach
(
var
header
in
headList
.
Where
(
t
=>
!
t
.
ParentID
.
HasValue
||
t
.
ParentID
.
Value
==
0
))
{
{
rowhead
.
Data
.
Add
(
new
Cell
(
header
.
PointCell
.
Value
,
header
.
CellValue
,
header
.
MergeRow
.
Value
,
header
.
MergeCell
.
Value
,
false
,
false
));
rowhead
.
Data
.
Add
(
new
Cell
(
header
.
PointCell
.
Value
,
header
.
CellValue
,
header
.
MergeRow
.
Value
,
header
.
MergeCell
.
Value
,
header
.
IsTotal
==
1
,
false
));
}
}
if
(
headList
.
Any
(
t
=>
t
.
ParentID
.
HasValue
&&
t
.
ParentID
.
Value
>
0
))
if
(
headList
.
Any
(
t
=>
t
.
ParentID
.
HasValue
&&
t
.
ParentID
.
Value
>
0
))
{
{
...
@@ -126,7 +126,7 @@ public SheetExportResponse SheetExport(int sheetID)
...
@@ -126,7 +126,7 @@ public SheetExportResponse SheetExport(int sheetID)
response
.
Header
.
Add
(
rowhead2
);
response
.
Header
.
Add
(
rowhead2
);
foreach
(
var
header
in
headList
.
Where
(
t
=>
t
.
ParentID
.
HasValue
&&
t
.
ParentID
.
Value
>
0
))
foreach
(
var
header
in
headList
.
Where
(
t
=>
t
.
ParentID
.
HasValue
&&
t
.
ParentID
.
Value
>
0
))
{
{
rowhead2
.
Data
.
Add
(
new
Cell
(
header
.
PointCell
.
Value
,
header
.
CellValue
,
header
.
MergeRow
.
Value
,
header
.
MergeCell
.
Value
,
false
,
false
));
rowhead2
.
Data
.
Add
(
new
Cell
(
header
.
PointCell
.
Value
,
header
.
CellValue
,
header
.
MergeRow
.
Value
,
header
.
MergeCell
.
Value
,
header
.
IsTotal
==
1
,
false
));
}
}
}
}
List
<
im_header
>
headers
=
new
List
<
im_header
>();
List
<
im_header
>
headers
=
new
List
<
im_header
>();
...
...
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