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
d0cb1d7c
Commit
d0cb1d7c
authored
May 08, 2019
by
ruyun.zhang@suvalue.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
填充excel数据,开发中
parent
9ee68265
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
429 additions
and
8 deletions
+429
-8
performance/Performance.Api/Controllers/TemplateController.cs
+20
-7
performance/Performance.DtoModels/AutoMapper/AutoMapperConfigs.cs
+7
-0
performance/Performance.EntityModels/Entity/sys_hospitalconfig.cs
+1
-1
performance/Performance.Repository/Common/ConnectionBuilder.cs
+77
-0
performance/Performance.Repository/Common/DatabaseType.cs
+12
-0
performance/Performance.Repository/PerforExtractRepository.cs
+48
-0
performance/Performance.Services/ExtractService.cs
+264
-0
No files found.
performance/Performance.Api/Controllers/TemplateController.cs
View file @
d0cb1d7c
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Threading.Tasks
;
using
Microsoft.AspNetCore.Mvc
;
using
Microsoft.AspNetCore.Mvc
;
using
Microsoft.Extensions.Options
;
using
Performance.DtoModels
;
using
Performance.DtoModels.AppSettings
;
using
Performance.EntityModels
;
using
Performance.Infrastructure
;
using
Performance.Services
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Threading.Tasks
;
namespace
Performance.Api.Controllers
{
[
Route
(
"api/[controller]"
)]
public
class
TemplateController
:
Controller
{
public
TemplateController
()
{
}
private
readonly
TemplateService
templateService
;
public
TemplateController
(
TemplateService
templateService
)
{
this
.
templateService
=
templateService
;
}
public
ApiResponse
Download
()
{
//templateService.Download();
return
new
ApiResponse
(
ResponseType
.
OK
);
}
}
}
\ No newline at end of file
performance/Performance.DtoModels/AutoMapper/AutoMapperConfigs.cs
View file @
d0cb1d7c
...
...
@@ -65,10 +65,17 @@ public AutoMapperConfigs()
CreateMap
<
PerHeader
,
im_header
>()
.
ForMember
(
dest
=>
dest
.
IsMerge
,
opt
=>
opt
.
MapFrom
(
src
=>
src
.
IsMerge
?
1
:
2
));
CreateMap
<
PerData
,
im_data
>()
.
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
)));
CreateMap
<
im_header
,
PerHeader
>()
.
ForMember
(
dest
=>
dest
.
IsMerge
,
opt
=>
opt
.
MapFrom
(
src
=>
src
.
IsMerge
==
1
?
true
:
false
));
CreateMap
<
im_data
,
PerData
>()
.
ForMember
(
dest
=>
dest
.
IsFactor
,
opt
=>
opt
.
MapFrom
(
src
=>
src
.
IsFactor
==
1
?
true
:
false
))
.
ForMember
(
dest
=>
dest
.
UnitType
,
opt
=>
opt
.
MapFrom
(
src
=>
src
.
UnitType
==
1
?
"医生组"
:
(
src
.
UnitType
==
2
?
"护理组"
:
""
)));
CreateMap
<
PerDataEmployee
,
im_employee
>();
CreateMap
<
im_employee
,
PerDataEmployee
>();
...
...
performance/Performance.EntityModels/Entity/sys_hospitalconfig.cs
View file @
d0cb1d7c
...
...
@@ -39,7 +39,7 @@ public class sys_hospitalconfig
/// <summary>
///
/// </summary>
public
Nullable
<
int
>
DbUser
{
get
;
set
;
}
public
string
DbUser
{
get
;
set
;
}
/// <summary>
///
...
...
performance/Performance.Repository/Common/ConnectionBuilder.cs
0 → 100644
View file @
d0cb1d7c
using
MySql.Data.MySqlClient
;
using
System
;
using
System.Collections.Generic
;
using
System.Data
;
using
System.Data.SqlClient
;
using
System.Text
;
namespace
Performance.Repository
{
/// <summary>
/// 创建连接
/// </summary>
public
class
ConnectionBuilder
{
/// <summary>
/// 创建连接
/// </summary>
/// <param name="type"></param>
/// <param name="connectionString"></param>
/// <returns></returns>
public
static
IDbConnection
Create
(
DatabaseType
type
,
string
connectionString
)
{
switch
(
type
)
{
case
DatabaseType
.
MySql
:
return
new
MySqlConnection
(
connectionString
);
case
DatabaseType
.
SqlServer
:
return
new
SqlConnection
(
connectionString
);
default
:
throw
new
Exception
(
$"nonsupport
{
DatabaseType
.
MySql
}
"
);
}
}
/// <summary>
/// 创建连接字符串
/// </summary>
/// <param name="type"></param>
/// <param name="ip"></param>
/// <param name="database"></param>
/// <param name="uid"></param>
/// <param name="pwd"></param>
/// <returns></returns>
public
static
string
GetConnectionString
(
DatabaseType
type
,
string
ip
,
string
database
,
string
uid
,
string
pwd
)
{
string
connectionString
=
""
;
switch
(
type
)
{
case
DatabaseType
.
MySql
:
connectionString
=
$"Server=
{
ip
}
;Database=
{
database
}
;Uid=
{
uid
}
;Pwd=
{
pwd
}
;connection timeout=12000;pooling=true;charset=utf8;Convert Zero Datetime=True;port=3306;Allow User Variables=True;;"
;
break
;
case
DatabaseType
.
SqlServer
:
connectionString
=
$"data source=
{
ip
}
;initial catalog=
{
database
}
;user id=
{
uid
}
;password=
{
pwd
}
;connection timeout=12000;"
;
break
;
default
:
throw
new
Exception
(
$"nonsupport
{
DatabaseType
.
MySql
}
"
);
}
return
connectionString
;
}
/// <summary>
/// 创建连接
/// </summary>
/// <param name="type"></param>
/// <param name="ip"></param>
/// <param name="database"></param>
/// <param name="uid"></param>
/// <param name="pwd"></param>
/// <returns></returns>
public
static
IDbConnection
Create
(
DatabaseType
type
,
string
ip
,
string
database
,
string
uid
,
string
pwd
)
{
string
connectionString
=
GetConnectionString
(
type
,
ip
,
database
,
uid
,
pwd
);
return
Create
(
type
,
connectionString
);
}
}
}
performance/Performance.Repository/Common/DatabaseType.cs
0 → 100644
View file @
d0cb1d7c
using
System
;
using
System.Collections.Generic
;
using
System.Text
;
namespace
Performance.Repository
{
public
enum
DatabaseType
{
MySql
,
SqlServer
}
}
performance/Performance.Repository/PerforExtractRepository.cs
0 → 100644
View file @
d0cb1d7c
//-----------------------------------------------------------------------
// <copyright file=" sys_extract.cs">
// * FileName: sys_extract.cs
// </copyright>
//-----------------------------------------------------------------------
using
Dapper
;
using
Performance.EntityModels
;
using
System
;
using
System.Collections
;
using
System.Collections.Generic
;
using
System.Data
;
namespace
Performance.Repository
{
/// <summary>
/// sys_extract Repository
/// </summary>
public
partial
class
PerforExtractRepository
:
PerforRepository
<
sys_extract
>
{
public
List
<
CustomExecute
>
ExecuteScript
(
IDbConnection
connection
,
string
sql
,
string
param
)
{
List
<
CustomExecute
>
result
=
new
List
<
CustomExecute
>();
using
(
connection
)
{
var
dataReader
=
connection
.
ExecuteReader
(
sql
,
param
);
int
row
=
0
;
while
(
dataReader
.
Read
())
{
for
(
int
i
=
0
;
i
<
dataReader
.
FieldCount
;
i
++)
{
var
fileName
=
dataReader
.
GetName
(
i
);
var
@object
=
dataReader
[
fileName
];
result
.
Add
(
new
CustomExecute
{
RowNumber
=
row
,
ColumnName
=
fileName
,
Value
=
@object
});
}
row
++;
}
}
return
result
;
}
}
public
class
CustomExecute
{
public
int
RowNumber
{
get
;
set
;
}
public
string
ColumnName
{
get
;
set
;
}
public
object
Value
{
get
;
set
;
}
}
}
performance/Performance.Services/ExtractService.cs
0 → 100644
View file @
d0cb1d7c
using
Microsoft.Extensions.Options
;
using
NPOI.HSSF.UserModel
;
using
NPOI.SS.UserModel
;
using
NPOI.SS.Util
;
using
NPOI.XSSF.UserModel
;
using
Performance.DtoModels
;
using
Performance.DtoModels.AppSettings
;
using
Performance.EntityModels
;
using
Performance.Infrastructure
;
using
Performance.Repository
;
using
System
;
using
System.Collections.Generic
;
using
System.IO
;
using
System.Linq
;
using
System.Text
;
namespace
Performance.Services
{
/// <summary>
/// 数据抽取服务
/// </summary>
public
class
ExtractService
:
IAutoInjection
{
private
readonly
PerSheetService
perSheetService
;
private
readonly
PerHeaderService
perHeaderService
;
private
readonly
PerforPersheetRepository
perforPersheetRepository
;
private
readonly
PerforImheaderRepository
perforImheaderRepository
;
private
readonly
PerforImemployeeRepository
perforImemployeeRepository
;
private
readonly
PerforExtractRepository
perforExtractRepository
;
private
readonly
PerforPerfirstRepository
perforPerfirstRepository
;
private
readonly
PerforPerallotRepository
perforPerallotRepository
;
private
readonly
PerforHospitalconfigRepository
perforHospitalconfigRepository
;
public
ExtractService
(
PerSheetService
perSheetService
,
PerHeaderService
perHeaderService
,
PerforPersheetRepository
perforPersheetRepository
,
PerforImheaderRepository
perforImheaderRepository
,
PerforImemployeeRepository
perforImemployeeRepository
,
PerforExtractRepository
perforExtractRepository
,
PerforPerfirstRepository
perforPerfirstRepository
,
PerforPerallotRepository
perforPerallotRepository
,
PerforHospitalconfigRepository
perforHospitalconfigRepository
)
{
this
.
perSheetService
=
perSheetService
;
this
.
perHeaderService
=
perHeaderService
;
this
.
perforPersheetRepository
=
perforPersheetRepository
;
this
.
perforImheaderRepository
=
perforImheaderRepository
;
this
.
perforImemployeeRepository
=
perforImemployeeRepository
;
this
.
perforExtractRepository
=
perforExtractRepository
;
this
.
perforPerfirstRepository
=
perforPerfirstRepository
;
this
.
perforPerallotRepository
=
perforPerallotRepository
;
this
.
perforHospitalconfigRepository
=
perforHospitalconfigRepository
;
}
public
void
Download
(
int
hospitalId
)
{
List
<
PerSheet
>
sheetList
=
new
List
<
PerSheet
>();
var
allotList
=
perforPerallotRepository
.
GetEntities
(
t
=>
t
.
HospitalId
==
hospitalId
);
var
configList
=
perforHospitalconfigRepository
.
GetEntities
(
t
=>
t
.
HospitalId
==
hospitalId
);
var
first
=
perforPerfirstRepository
.
GetEntity
(
t
=>
t
.
HospitalId
==
hospitalId
);
if
(
configList
==
null
||
!
configList
.
Any
())
throw
new
PerformanceException
(
$"暂不支持自动提取绩效数据"
);
var
hospitalConfig
=
configList
.
First
();
//判断是否是首次
if
((
allotList
==
null
||
!
allotList
.
Any
())
&&
first
!=
null
)
{
//首次 从excel中获取人员信息,SHEET页信息,列头信息
sheetList
=
GetFileData
(
first
.
Path
);
}
else
{
//非首次 从数据库中获取人员信息,SHEET页信息,列头信息
var
allot
=
allotList
.
OrderByDescending
(
t
=>
t
.
Year
).
ThenBy
(
t
=>
t
.
Month
).
First
();
sheetList
=
GetRepositoryData
(
allot
.
ID
);
}
string
path
=
@"C:\Users\ry\Desktop\test.xlsx"
;
FileHelper
.
DeleteFile
(
path
);
//根据SHEET页信息,列头信息,创建EXCEL文件
WriteExcel
(
path
,
sheetList
,
hospitalConfig
,
hospitalId
);
//人员信息由EXCEL中提供
//SHEET页在SQL提取中出现时,执行SQL脚本获得结果向EXCEL中填充
//向EXCEL中填充数据,填充时值与列头必须匹配
throw
new
NotImplementedException
();
}
/// <summary>
/// 向EXCEL中写入数据
/// </summary>
/// <param name="path"></param>
/// <param name="sheetList"></param>
/// <param name="hospitalConfig"></param>
/// <param name="hospitalId"></param>
private
void
WriteExcel
(
string
path
,
List
<
PerSheet
>
sheetList
,
sys_hospitalconfig
hospitalConfig
,
int
hospitalId
)
{
var
scriptList
=
perforExtractRepository
.
GetEntities
(
t
=>
t
.
HospitalId
==
hospitalId
);
var
connection
=
ConnectionBuilder
.
Create
(
DatabaseType
.
SqlServer
,
hospitalConfig
.
DbSource
,
hospitalConfig
.
DbName
,
hospitalConfig
.
DbUser
,
hospitalConfig
.
DbPassword
);
//根据SHEET页信息,列头信息,创建EXCEL文件
IWorkbook
workbook
=
new
XSSFWorkbook
(
path
);
foreach
(
var
sheet
in
sheetList
)
{
var
importSheet
=
workbook
.
CreateSheet
(
sheet
.
SheetName
);
//创建列头
foreach
(
var
pointRow
in
sheet
.
PerHeader
.
Select
(
t
=>
t
.
PointRow
).
Distinct
().
OrderBy
(
t
=>
t
))
{
var
importRow
=
importSheet
.
CreateRow
(
pointRow
);
//写入单元格
foreach
(
var
perHeader
in
sheet
.
PerHeader
.
Where
(
t
=>
t
.
PointRow
==
pointRow
))
{
importRow
.
CreateCell
(
perHeader
.
PointCell
).
SetCellValue
(
perHeader
.
CellValue
);
//设置合并单元格
if
(
perHeader
.
IsMerge
)
{
var
cellRange
=
new
CellRangeAddress
(
perHeader
.
PointRow
,
perHeader
.
PointRow
+
perHeader
.
MergeRow
,
perHeader
.
PointCell
,
perHeader
.
PointCell
+
perHeader
.
MergeCell
);
importSheet
.
AddMergedRegion
(
cellRange
);
}
}
}
var
maxHeaderRowNumber
=
sheet
.
PerHeader
.
Max
(
t
=>
t
.
PointRow
);
//填充人员信息
if
(
SheetType
.
Employee
==
sheet
.
SheetType
&&
sheet
.
PerData
!=
null
&&
sheet
.
PerData
.
Any
())
{
var
dataList
=
sheet
.
PerData
.
ConvertAll
(
new
Converter
<
IPerData
,
PerDataEmployee
>(
t
=>
(
PerDataEmployee
)
t
));
for
(
int
i
=
0
;
i
<
dataList
.
Count
;
i
++)
{
var
importRow
=
importSheet
.
CreateRow
(
maxHeaderRowNumber
+
i
+
1
);
Dictionary
<
string
,
Func
<
PerDataEmployee
,
object
>>
keyValues
=
new
Dictionary
<
string
,
Func
<
PerDataEmployee
,
object
>>
{
{
"核算单元"
,
(
t
)
=>
t
.
AccountingUnit
},
{
"医生姓名"
,
(
t
)
=>
t
.
DoctorName
},
{
"职称"
,
(
t
)
=>
t
.
JobTitle
},
{
"绩效基数核算参考对象"
,
(
t
)
=>
t
.
FitPeople
},
{
"核算单元分类"
,
(
t
)
=>
t
.
AccountType
},
{
"岗位系数"
,
(
t
)
=>
t
.
PostCoefficient
},
{
"参加工作时间"
,
(
t
)
=>
t
.
WorkTime
},
{
"考核得分率"
,
(
t
)
=>
t
.
ScoreAverageRate
},
{
"出勤率"
,
(
t
)
=>
t
.
Attendance
},
{
"核算单元医生数"
,
(
t
)
=>
t
.
PeopleNumber
},
{
"工作量绩效"
,
(
t
)
=>
t
.
Workload
},
{
"其他绩效"
,
(
t
)
=>
t
.
OthePerfor
},
{
"医院奖罚"
,
(
t
)
=>
t
.
Punishment
},
{
"调节系数"
,
(
t
)
=>
t
.
Adjust
},
{
"发放系数"
,
(
t
)
=>
t
.
Grant
},
};
foreach
(
var
item
in
keyValues
.
Keys
)
{
var
headInfo
=
sheet
.
PerHeader
.
FirstOrDefault
(
t
=>
t
.
CellValue
==
item
);
if
(
headInfo
!=
null
)
{
var
value
=
keyValues
[
item
].
Invoke
(
dataList
[
i
]).
ToString
();
importRow
.
CreateCell
(
headInfo
.
PointCell
).
SetCellValue
(
value
);
}
}
}
}
//SHEET页在SQL提取中出现时,执行SQL脚本获得结果向EXCEL中填充
else
if
(
scriptList
.
Any
(
t
=>
sheet
.
SheetName
.
Contains
(
t
.
SheetName
)))
{
var
script
=
scriptList
.
First
(
t
=>
sheet
.
SheetName
.
Contains
(
t
.
SheetName
));
if
(!
string
.
IsNullOrEmpty
(
script
.
ExecuteScript
))
{
var
dataList
=
perforExtractRepository
.
ExecuteScript
(
connection
,
script
.
ExecuteScript
,
null
);
//创建数据行
foreach
(
var
pointRow
in
dataList
.
Select
(
t
=>
t
.
RowNumber
).
Distinct
().
OrderBy
(
t
=>
t
))
{
var
importRow
=
importSheet
.
CreateRow
(
maxHeaderRowNumber
+
pointRow
+
1
);
//写入单元格
foreach
(
var
data
in
dataList
.
Where
(
t
=>
t
.
RowNumber
==
pointRow
))
{
var
headInfo
=
sheet
.
PerHeader
.
FirstOrDefault
(
t
=>
t
.
CellValue
==
data
.
ColumnName
);
if
(
headInfo
!=
null
)
{
importRow
.
CreateCell
(
headInfo
.
PointCell
).
SetCellValue
(
data
.
Value
.
ToString
());
}
}
}
}
}
}
}
/// <summary>
/// 从数据库中获取sheet及列头
/// </summary>
/// <param name="allotId"></param>
/// <returns></returns>
private
List
<
PerSheet
>
GetRepositoryData
(
int
allotId
)
{
List
<
PerSheet
>
sheetList
=
new
List
<
PerSheet
>();
//获取最近一次绩效
var
perSheetList
=
perforPersheetRepository
.
GetEntities
(
t
=>
t
.
AllotID
==
allotId
);
foreach
(
var
sheet
in
perSheetList
)
{
PerSheet
perSheet
=
new
PerSheet
()
{
SheetName
=
sheet
.
SheetName
,
SheetType
=
(
SheetType
)
sheet
.
SheetType
,
ModuleName
=
EnumHelper
.
GetDescription
((
SheetType
)
sheet
.
SheetType
),
};
var
perHeadList
=
perforImheaderRepository
.
GetEntities
(
t
=>
t
.
SheetID
==
sheet
.
ID
);
perSheet
.
PerHeader
=
AutoMapper
.
Mapper
.
Map
<
List
<
PerHeader
>>(
perHeadList
);
if
(
SheetType
.
Employee
==
(
SheetType
)
sheet
.
SheetType
)
{
var
employeeList
=
perforImemployeeRepository
.
GetEntities
(
t
=>
t
.
AllotID
==
sheet
.
ID
);
var
perEmployeeList
=
AutoMapper
.
Mapper
.
Map
<
List
<
PerDataEmployee
>>(
employeeList
);
perSheet
.
PerData
=
perEmployeeList
.
ConvertAll
(
new
Converter
<
PerDataEmployee
,
IPerData
>(
m
=>
m
));
}
sheetList
.
Add
(
perSheet
);
}
return
sheetList
;
}
/// <summary>
/// 获取sheet及列头
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
private
List
<
PerSheet
>
GetFileData
(
string
path
)
{
if
(!
FileHelper
.
IsExistFile
(
path
))
throw
new
PerformanceException
(
$"
{
path
}
文件不存在"
);
List
<
PerSheet
>
sheetList
=
new
List
<
PerSheet
>();
using
(
FileStream
fs
=
new
FileStream
(
path
,
FileMode
.
Open
))
{
var
version
=
FileHelper
.
GetExtension
(
path
)
==
".xlsx"
?
ExcelVersion
.
xlsx
:
ExcelVersion
.
xls
;
IWorkbook
workbook
=
(
version
==
ExcelVersion
.
xlsx
)
?
(
IWorkbook
)(
new
XSSFWorkbook
(
fs
))
:
(
IWorkbook
)(
new
HSSFWorkbook
(
fs
));
for
(
int
i
=
0
;
i
<
workbook
.
NumberOfSheets
;
i
++)
{
var
sheet
=
workbook
.
GetSheetAt
(
i
);
var
sheetType
=
perSheetService
.
GetSheetType
(
sheet
.
SheetName
);
if
(
SheetType
.
Unidentifiable
!=
sheetType
)
{
var
sheetRead
=
PerSheetDataFactory
.
GetDataRead
(
sheetType
);
var
perHeader
=
perHeaderService
.
GetPerHeader
(
sheet
,
sheetRead
.
Point
);
PerSheet
perSheet
=
new
PerSheet
()
{
SheetName
=
sheet
.
SheetName
,
SheetType
=
sheetType
,
ModuleName
=
EnumHelper
.
GetDescription
(
sheetType
),
PerHeader
=
perHeader
};
if
(
SheetType
.
Employee
==
sheetType
)
{
var
headerReverse
=
perHeaderService
.
GetPerHeaderReverse
(
perHeader
);
perSheet
.
PerData
=
sheetRead
.
ReadData
(
sheet
,
headerReverse
);
}
sheetList
.
Add
(
perSheet
);
}
}
}
return
sheetList
;
}
}
}
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