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
545565d3
Commit
545565d3
authored
Aug 19, 2019
by
李承祥
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
signalr日志输出,调整
parent
eb6cabe0
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
330 additions
and
308 deletions
+330
-308
performance/Performance.Api/Controllers/AllotController.cs
+16
-0
performance/Performance.EntityModels/Entity/log_dbug.cs
+5
-0
performance/Performance.EntityModels/Entity/mod_item.cs
+0
-0
performance/Performance.EntityModels/Entity/mod_module.cs
+0
-0
performance/Performance.EntityModels/Entity/res_account.cs
+1
-0
performance/Performance.EntityModels/Entity/res_accountdoctor.cs
+124
-124
performance/Performance.EntityModels/Entity/res_accountnurse.cs
+119
-119
performance/Performance.Repository/PerforCofdirectorRepository.cs
+1
-0
performance/Performance.Repository/PerforLogdbugRepository.cs
+2
-2
performance/Performance.Services/AllotCompute/CheckDataService.cs
+1
-1
performance/Performance.Services/AllotCompute/ImportDataService.cs
+4
-10
performance/Performance.Services/AllotCompute/ProcessComputService.cs
+10
-10
performance/Performance.Services/AllotCompute/ResultComputeService.cs
+3
-3
performance/Performance.Services/AllotService.cs
+24
-18
performance/Performance.Services/ConfigService.cs
+2
-4
performance/Performance.Services/LogManageService.cs
+4
-3
performance/Performance.Services/NewExtractService.cs
+14
-14
No files found.
performance/Performance.Api/Controllers/AllotController.cs
View file @
545565d3
...
@@ -218,5 +218,21 @@ public ApiResponse AllotCheckResult([CustomizeValidator(RuleSet = "Delete"), Fro
...
@@ -218,5 +218,21 @@ public ApiResponse AllotCheckResult([CustomizeValidator(RuleSet = "Delete"), Fro
var
list
=
_allotService
.
AllotCheckResult
(
allot
);
var
list
=
_allotService
.
AllotCheckResult
(
allot
);
return
new
ApiResponse
(
ResponseType
.
OK
,
list
);
return
new
ApiResponse
(
ResponseType
.
OK
,
list
);
}
}
/// <summary>
/// 绩效历史日志
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[
Route
(
"allotlog"
)]
[
HttpPost
]
public
ApiResponse
AllotLog
([
CustomizeValidator
(
RuleSet
=
"Delete"
),
FromBody
]
AllotRequest
request
)
{
var
allot
=
_allotService
.
GetAllot
(
request
.
ID
);
if
(
null
==
allot
)
throw
new
PerformanceException
(
"当前绩效记录不存在"
);
var
list
=
_allotService
.
AllotLog
(
allot
);
return
new
ApiResponse
(
ResponseType
.
OK
,
list
);
}
}
}
}
}
performance/Performance.EntityModels/Entity/log_dbug.cs
View file @
545565d3
...
@@ -40,5 +40,10 @@ public class log_dbug
...
@@ -40,5 +40,10 @@ public class log_dbug
///
///
/// </summary>
/// </summary>
public
string
Message
{
get
;
set
;
}
public
string
Message
{
get
;
set
;
}
/// <summary>
///
/// </summary>
public
Nullable
<
int
>
Level
{
get
;
set
;
}
}
}
}
}
performance/Performance.EntityModels/Entity/mod_item.cs
View file @
545565d3
performance/Performance.EntityModels/Entity/mod_module.cs
View file @
545565d3
performance/Performance.EntityModels/Entity/res_account.cs
View file @
545565d3
...
@@ -135,6 +135,7 @@ public class res_account
...
@@ -135,6 +135,7 @@ public class res_account
/// 实发绩效
/// 实发绩效
/// </summary>
/// </summary>
public
Nullable
<
decimal
>
RealGiveFee
{
get
;
set
;
}
public
Nullable
<
decimal
>
RealGiveFee
{
get
;
set
;
}
/// <summary>
/// <summary>
/// 备注
/// 备注
/// </summary>
/// </summary>
...
...
performance/Performance.EntityModels/Entity/res_accountdoctor.cs
View file @
545565d3
//
//
-----------------------------------------------------------------------
//-----------------------------------------------------------------------
//
//
<copyright file=" res_accountdoctor.cs">
// <copyright file=" res_accountdoctor.cs">
//
//
* FileName: 医生科室核算结果.cs
// * FileName: 医生科室核算结果.cs
//
//
</copyright>
// </copyright>
//
//
-----------------------------------------------------------------------
//-----------------------------------------------------------------------
//
using System;
using
System
;
//
using System.ComponentModel.DataAnnotations;
using
System.ComponentModel.DataAnnotations
;
//
using System.ComponentModel.DataAnnotations.Schema;
using
System.ComponentModel.DataAnnotations.Schema
;
//
namespace Performance.EntityModels
namespace
Performance.EntityModels
//
{
{
//
/// <summary>
/// <summary>
//
/// 医生科室核算结果
/// 医生科室核算结果
//
/// </summary>
/// </summary>
//
[Table("res_accountdoctor")]
[
Table
(
"res_accountdoctor"
)]
//
public class res_accountdoctor
public
class
res_accountdoctor
//
{
{
//
/// <summary>
/// <summary>
//
///
///
//
/// </summary>
/// </summary>
//
[Key]
[
Key
]
//
public int ID { get; set; }
public
int
ID
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
///
///
//
/// </summary>
/// </summary>
//
public Nullable<int> AllotID { get; set; }
public
Nullable
<
int
>
AllotID
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
///
///
//
/// </summary>
/// </summary>
//
public Nullable<int> SheetID { get; set; }
public
Nullable
<
int
>
SheetID
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 核算单元
/// 核算单元
//
/// </summary>
/// </summary>
//
public string AccountingUnit { get; set; }
public
string
AccountingUnit
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 科室
/// 科室
//
/// </summary>
/// </summary>
//
public string Department { get; set; }
public
string
Department
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 科主任/护士长数量
/// 科主任/护士长数量
//
/// </summary>
/// </summary>
//
public Nullable<int> ManagerNumber { get; set; }
public
Nullable
<
int
>
ManagerNumber
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 核算单元医生数量
/// 核算单元医生数量
//
/// </summary>
/// </summary>
//
public Nullable<decimal> Number { get; set; }
public
Nullable
<
decimal
>
Number
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 医生基础系数
/// 医生基础系数
//
/// </summary>
/// </summary>
//
public Nullable<decimal> BasicFactor { get; set; }
public
Nullable
<
decimal
>
BasicFactor
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 倾斜系数
/// 倾斜系数
//
/// </summary>
/// </summary>
//
public Nullable<decimal> SlopeFactor { get; set; }
public
Nullable
<
decimal
>
SlopeFactor
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 其他绩效1
/// 其他绩效1
//
/// </summary>
/// </summary>
//
public Nullable<decimal> OtherPerfor1 { get; set; }
public
Nullable
<
decimal
>
OtherPerfor1
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 其他绩效2
/// 其他绩效2
//
/// </summary>
/// </summary>
//
public Nullable<decimal> OtherPerfor2 { get; set; }
public
Nullable
<
decimal
>
OtherPerfor2
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 医院奖罚
/// 医院奖罚
//
/// </summary>
/// </summary>
//
public Nullable<decimal> Extra { get; set; }
public
Nullable
<
decimal
>
Extra
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 考核对分率
/// 考核对分率
//
/// </summary>
/// </summary>
//
public Nullable<decimal> ScoringAverage { get; set; }
public
Nullable
<
decimal
>
ScoringAverage
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 调节系数
/// 调节系数
//
/// </summary>
/// </summary>
//
public Nullable<decimal> AdjustFactor { get; set; }
public
Nullable
<
decimal
>
AdjustFactor
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 科室业绩
/// 科室业绩
//
/// </summary>
/// </summary>
//
public Nullable<decimal> Income { get; set; }
public
Nullable
<
decimal
>
Income
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 业绩绩效
/// 业绩绩效
//
/// </summary>
/// </summary>
//
public Nullable<decimal> PerforFee { get; set; }
public
Nullable
<
decimal
>
PerforFee
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 工作量绩效
/// 工作量绩效
//
/// </summary>
/// </summary>
//
public Nullable<decimal> WorkloadFee { get; set; }
public
Nullable
<
decimal
>
WorkloadFee
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 绩效合计
/// 绩效合计
//
/// </summary>
/// </summary>
//
public Nullable<decimal> PerforTotal { get; set; }
public
Nullable
<
decimal
>
PerforTotal
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 人均绩效
/// 人均绩效
//
/// </summary>
/// </summary>
//
public Nullable<decimal> Avg { get; set; }
public
Nullable
<
decimal
>
Avg
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 实发绩效
/// 实发绩效
//
/// </summary>
/// </summary>
//
public Nullable<decimal> RealGiveFee { get; set; }
public
Nullable
<
decimal
>
RealGiveFee
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 变更日志
/// 变更日志
//
/// </summary>
/// </summary>
//
public string ChangeLog { get; set; }
public
string
ChangeLog
{
get
;
set
;
}
//
}
}
//
}
}
performance/Performance.EntityModels/Entity/res_accountnurse.cs
View file @
545565d3
//
//
-----------------------------------------------------------------------
//-----------------------------------------------------------------------
//
//
<copyright file=" res_accountnurse.cs">
// <copyright file=" res_accountnurse.cs">
//
//
* FileName: 护理科室核算结果.cs
// * FileName: 护理科室核算结果.cs
//
//
</copyright>
// </copyright>
//
//
-----------------------------------------------------------------------
//-----------------------------------------------------------------------
//
using System;
using
System
;
//
using System.ComponentModel.DataAnnotations;
using
System.ComponentModel.DataAnnotations
;
//
using System.ComponentModel.DataAnnotations.Schema;
using
System.ComponentModel.DataAnnotations.Schema
;
//
namespace Performance.EntityModels
namespace
Performance.EntityModels
//
{
{
//
/// <summary>
/// <summary>
//
/// 护理科室核算结果
/// 护理科室核算结果
//
/// </summary>
/// </summary>
//
[Table("res_accountnurse")]
[
Table
(
"res_accountnurse"
)]
//
public class res_accountnurse
public
class
res_accountnurse
//
{
{
//
/// <summary>
/// <summary>
//
///
///
//
/// </summary>
/// </summary>
//
[Key]
[
Key
]
//
public int ID { get; set; }
public
int
ID
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
///
///
//
/// </summary>
/// </summary>
//
public Nullable<int> AllotID { get; set; }
public
Nullable
<
int
>
AllotID
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
///
///
//
/// </summary>
/// </summary>
//
public Nullable<int> SheetID { get; set; }
public
Nullable
<
int
>
SheetID
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 核算单元
/// 核算单元
//
/// </summary>
/// </summary>
//
public string AccountingUnit { get; set; }
public
string
AccountingUnit
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 科室
/// 科室
//
/// </summary>
/// </summary>
//
public string Department { get; set; }
public
string
Department
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 科主任/护士长数量
/// 科主任/护士长数量
//
/// </summary>
/// </summary>
//
public Nullable<int> ManagerNumber { get; set; }
public
Nullable
<
int
>
ManagerNumber
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 护士人数
/// 护士人数
//
/// </summary>
/// </summary>
//
public Nullable<decimal> Number { get; set; }
public
Nullable
<
decimal
>
Number
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 护理基础系数
/// 护理基础系数
//
/// </summary>
/// </summary>
//
public Nullable<decimal> BasicFactor { get; set; }
public
Nullable
<
decimal
>
BasicFactor
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 倾斜系数
/// 倾斜系数
//
/// </summary>
/// </summary>
//
public Nullable<decimal> SlopeFactor { get; set; }
public
Nullable
<
decimal
>
SlopeFactor
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 其他绩效1
/// 其他绩效1
//
/// </summary>
/// </summary>
//
public Nullable<decimal> OtherPerfor1 { get; set; }
public
Nullable
<
decimal
>
OtherPerfor1
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 其他绩效2
/// 其他绩效2
//
/// </summary>
/// </summary>
//
public Nullable<decimal> OtherPerfor2 { get; set; }
public
Nullable
<
decimal
>
OtherPerfor2
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 医院奖罚
/// 医院奖罚
//
/// </summary>
/// </summary>
//
public Nullable<decimal> Extra { get; set; }
public
Nullable
<
decimal
>
Extra
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 考核对分率
/// 考核对分率
//
/// </summary>
/// </summary>
//
public Nullable<decimal> ScoringAverage { get; set; }
public
Nullable
<
decimal
>
ScoringAverage
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 调节系数
/// 调节系数
//
/// </summary>
/// </summary>
//
public Nullable<decimal> AdjustFactor { get; set; }
public
Nullable
<
decimal
>
AdjustFactor
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 科室业绩
/// 科室业绩
//
/// </summary>
/// </summary>
//
public Nullable<decimal> Income { get; set; }
public
Nullable
<
decimal
>
Income
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 业绩绩效
/// 业绩绩效
//
/// </summary>
/// </summary>
//
public Nullable<decimal> PerforFee { get; set; }
public
Nullable
<
decimal
>
PerforFee
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 工作量绩效
/// 工作量绩效
//
/// </summary>
/// </summary>
//
public Nullable<decimal> WorkloadFee { get; set; }
public
Nullable
<
decimal
>
WorkloadFee
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 绩效合计
/// 绩效合计
//
/// </summary>
/// </summary>
//
public Nullable<decimal> PerforTotal { get; set; }
public
Nullable
<
decimal
>
PerforTotal
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 人均绩效
/// 人均绩效
//
/// </summary>
/// </summary>
//
public Nullable<decimal> Avg { get; set; }
public
Nullable
<
decimal
>
Avg
{
get
;
set
;
}
//
/// <summary>
/// <summary>
//
/// 实发绩效
/// 实发绩效
//
/// </summary>
/// </summary>
//
public Nullable<decimal> RealGiveFee { get; set; }
public
Nullable
<
decimal
>
RealGiveFee
{
get
;
set
;
}
//
}
}
//
}
}
performance/Performance.Repository/PerforCofdirectorRepository.cs
View file @
545565d3
...
@@ -32,6 +32,7 @@ public int DeleteData(int allotId)
...
@@ -32,6 +32,7 @@ public int DeleteData(int allotId)
"res_compute"
,
"res_compute"
,
"res_specialunit"
,
"res_specialunit"
,
"log_check"
,
"log_check"
,
"log_dbug"
,
};
};
string
sql
=
""
;
string
sql
=
""
;
tableArray
.
ForEach
(
t
=>
sql
+=
$"delete from
{
t
}
where allotid=@allotId;"
);
tableArray
.
ForEach
(
t
=>
sql
+=
$"delete from
{
t
}
where allotid=@allotId;"
);
...
...
performance/Performance.Repository/PerforLogdbugRepository.cs
View file @
545565d3
...
@@ -13,9 +13,9 @@ public partial class PerforLogdbugRepository
...
@@ -13,9 +13,9 @@ public partial class PerforLogdbugRepository
/// <param name="title"></param>
/// <param name="title"></param>
/// <param name="message"></param>
/// <param name="message"></param>
/// <returns></returns>
/// <returns></returns>
public
bool
Add
(
int
allotId
,
string
title
,
string
message
)
public
bool
Add
(
int
allotId
,
string
title
,
string
message
,
int
level
)
{
{
return
Add
(
new
EntityModels
.
log_dbug
{
AllotID
=
allotId
,
CreateTime
=
DateTime
.
Now
,
Titile
=
title
,
Message
=
message
});
return
Add
(
new
EntityModels
.
log_dbug
{
AllotID
=
allotId
,
CreateTime
=
DateTime
.
Now
,
Titile
=
title
,
Message
=
message
,
Level
=
level
});
}
}
}
}
}
}
performance/Performance.Services/AllotCompute/CheckDataService.cs
View file @
545565d3
...
@@ -235,7 +235,7 @@ public void InsertLog(int allotId, int type, int level, string title, string mes
...
@@ -235,7 +235,7 @@ public void InsertLog(int allotId, int type, int level, string title, string mes
Message
=
message
Message
=
message
};
};
perforLogcheckRepository
.
Add
(
model
);
perforLogcheckRepository
.
Add
(
model
);
logManageService
.
WriteMsg
(
"绩效数据校验"
,
$"
{
title
}
-
{
message
}
"
,
allotId
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"绩效数据校验"
,
$"
{
title
}
-
{
message
}
"
,
level
,
allotId
,
"ReceiveMessage"
);
}
}
#
endregion
#
endregion
}
}
...
...
performance/Performance.Services/AllotCompute/ImportDataService.cs
View file @
545565d3
...
@@ -89,14 +89,14 @@ private PerExcel Import(per_allot allot)
...
@@ -89,14 +89,14 @@ private PerExcel Import(per_allot allot)
var
sheet
=
workbook
.
GetSheetAt
(
i
);
var
sheet
=
workbook
.
GetSheetAt
(
i
);
var
sheetType
=
perSheetService
.
GetSheetType
(
sheet
.
SheetName
);
var
sheetType
=
perSheetService
.
GetSheetType
(
sheet
.
SheetName
);
//logdbug.Add(allot.ID, "开始读取excel文件", JsonHelper.Serialize(new { sheetType, Description = EnumHelper.GetDescription(sheetType), name = sheet.SheetName }));
logManageService
.
WriteMsg
(
"开始读取excel文件"
,
JsonHelper
.
Serialize
(
new
{
sheetType
,
Description
=
EnumHelper
.
GetDescription
(
sheetType
),
name
=
sheet
.
SheetName
}),
allot
.
ID
,
"ReceiveMessage"
,
true
);
if
(
SheetType
.
Unidentifiable
!=
sheetType
)
if
(
SheetType
.
Unidentifiable
!=
sheetType
)
{
{
logManageService
.
WriteMsg
(
"开始读取excel文件"
,
$"开始读取sheet --
{
sheet
.
SheetName
}
"
,
1
,
allot
.
ID
,
"ReceiveMessage"
,
true
);
var
st
=
perSheetService
.
Sheet
(
sheet
);
var
st
=
perSheetService
.
Sheet
(
sheet
);
excel
.
PerSheet
.
Add
(
st
);
excel
.
PerSheet
.
Add
(
st
);
}
}
}
}
logManageService
.
WriteMsg
(
"开始读取excel文件"
,
$"excel文件基础数据读取完成!"
,
1
,
allot
.
ID
,
"ReceiveMessage"
,
true
);
return
excel
;
return
excel
;
}
}
}
}
...
@@ -235,31 +235,25 @@ private bool Save(PerExcel excel, int allotId)
...
@@ -235,31 +235,25 @@ private bool Save(PerExcel excel, int allotId)
{
{
foreach
(
var
sheet
in
excel
.
PerSheet
)
foreach
(
var
sheet
in
excel
.
PerSheet
)
{
{
logManageService
.
WriteMsg
(
"保存基础数据"
,
$"开始保存数据 --
{
sheet
.
SheetName
}
"
,
1
,
allotId
,
"ReceiveMessage"
,
true
);
if
(
sheet
.
SheetType
==
SheetType
.
Employee
)
if
(
sheet
.
SheetType
==
SheetType
.
Employee
)
{
{
//logdbug.Add(allotId, "开始保存人员数据数据", sheet.SheetName);
logManageService
.
WriteMsg
(
"保存基础数据"
,
"开始保存人员数据数据"
,
allotId
,
"ReceiveMessage"
,
true
);
SaveEmployee
(
sheet
,
allotId
);
SaveEmployee
(
sheet
,
allotId
);
}
}
else
if
(
sheet
.
SheetType
==
SheetType
.
AccountBasic
)
else
if
(
sheet
.
SheetType
==
SheetType
.
AccountBasic
)
{
{
//logdbug.Add(allotId, "开始保存临床科室医护绩效测算基础数据", sheet.SheetName);
logManageService
.
WriteMsg
(
"保存基础数据"
,
"开始保存临床科室医护绩效测算基础数据"
,
allotId
,
"ReceiveMessage"
,
true
);
SaveAccountBasic
(
sheet
,
allotId
);
SaveAccountBasic
(
sheet
,
allotId
);
}
}
else
if
(
sheet
.
SheetType
==
SheetType
.
SpecialUnit
)
else
if
(
sheet
.
SheetType
==
SheetType
.
SpecialUnit
)
{
{
//logdbug.Add(allotId, "开始保存特殊核算单元数据", sheet.SheetName);
logManageService
.
WriteMsg
(
"保存基础数据"
,
"开始保存特殊核算单元数据"
,
allotId
,
"ReceiveMessage"
,
true
);
SaveSpecialUnit
(
sheet
,
allotId
);
SaveSpecialUnit
(
sheet
,
allotId
);
}
}
else
else
{
{
//logdbug.Add(allotId, "开始保存统一格式数据", sheet.SheetName);
logManageService
.
WriteMsg
(
"保存基础数据"
,
$"开始保存
{
sheet
.
SheetName
}
数据"
,
allotId
,
"ReceiveMessage"
,
true
);
SaveCommon
(
sheet
,
allotId
);
SaveCommon
(
sheet
,
allotId
);
}
}
}
}
logManageService
.
WriteMsg
(
"保存基础数据"
,
$"基础数据保存完成!"
,
1
,
allotId
,
"ReceiveMessage"
,
true
);
return
true
;
return
true
;
}
}
}
}
...
...
performance/Performance.Services/AllotCompute/ProcessComputService.cs
View file @
545565d3
...
@@ -163,7 +163,7 @@ private void Save(List<PerSheet> perSheets, int allotId)
...
@@ -163,7 +163,7 @@ private void Save(List<PerSheet> perSheets, int allotId)
{
{
foreach
(
var
sheet
in
perSheets
)
foreach
(
var
sheet
in
perSheets
)
{
{
logManageService
.
WriteMsg
(
"正在生成绩效"
,
$"保存核算数据 -
{
sheet
.
SheetName
}
"
,
allotId
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
$"保存核算数据 -
{
sheet
.
SheetName
}
"
,
1
,
allotId
,
"ReceiveMessage"
);
if
(
sheet
.
SheetType
==
SheetType
.
ComputeDoctorAccount
)
if
(
sheet
.
SheetType
==
SheetType
.
ComputeDoctorAccount
)
{
{
SaveComputeDoctorAccount
(
sheet
,
allotId
);
SaveComputeDoctorAccount
(
sheet
,
allotId
);
...
@@ -191,31 +191,31 @@ private List<PerSheet> MergeCompute(PerExcel excel, int allotid)
...
@@ -191,31 +191,31 @@ private List<PerSheet> MergeCompute(PerExcel excel, int allotid)
//合并科室收入、支出
//合并科室收入、支出
var
incomeconfs
=
perforCofincomeRepository
.
GetEntities
();
var
incomeconfs
=
perforCofincomeRepository
.
GetEntities
();
var
economicCompute
=
new
PerSheetDataComputeEconomic
();
var
economicCompute
=
new
PerSheetDataComputeEconomic
();
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"计算科室经济核算汇总表"
,
allotid
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"计算科室经济核算汇总表"
,
1
,
allotid
,
"ReceiveMessage"
);
var
mergeResult
=
economicCompute
.
MergeCompute
(
excel
,
incomeconfs
);
var
mergeResult
=
economicCompute
.
MergeCompute
(
excel
,
incomeconfs
);
//一次计算
//一次计算
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"计算科室经济核算汇总表 -- 第一次计算"
,
allotid
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"计算科室经济核算汇总表 -- 第一次计算"
,
1
,
allotid
,
"ReceiveMessage"
);
var
onceEconomic
=
economicCompute
.
OnceCompute
(
mergeResult
);
var
onceEconomic
=
economicCompute
.
OnceCompute
(
mergeResult
);
//二次计算
//二次计算
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"计算科室经济核算汇总表 -- 第二次计算"
,
allotid
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"计算科室经济核算汇总表 -- 第二次计算"
,
1
,
allotid
,
"ReceiveMessage"
);
var
twiceEconomicResult
=
economicCompute
.
TwiceCompute
(
onceEconomic
);
var
twiceEconomicResult
=
economicCompute
.
TwiceCompute
(
onceEconomic
);
twiceEconomicResult
.
Sheet
.
SheetType
=
SheetType
.
ComputeEconomic
;
twiceEconomicResult
.
Sheet
.
SheetType
=
SheetType
.
ComputeEconomic
;
perSheet
.
Add
(
twiceEconomicResult
.
Sheet
);
perSheet
.
Add
(
twiceEconomicResult
.
Sheet
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"计算科室经济核算汇总表 -- 计算完成"
,
allotid
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"计算科室经济核算汇总表 -- 计算完成"
,
1
,
allotid
,
"ReceiveMessage"
);
//工作量
//工作量
var
workloadCompute
=
new
PerSheetDataComputeWorkload
();
var
workloadCompute
=
new
PerSheetDataComputeWorkload
();
var
workload1
=
excel
.
PerSheet
.
FirstOrDefault
(
t
=>
t
.
SheetType
==
SheetType
.
Workload
&&
t
.
SheetName
.
Contains
(
"医生组"
));
var
workload1
=
excel
.
PerSheet
.
FirstOrDefault
(
t
=>
t
.
SheetType
==
SheetType
.
Workload
&&
t
.
SheetName
.
Contains
(
"医生组"
));
workload1
.
SheetName
=
"医生组工作量绩效测算表"
;
workload1
.
SheetName
=
"医生组工作量绩效测算表"
;
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"获取药品费用分割比例"
,
allotid
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"获取药品费用分割比例"
,
1
,
allotid
,
"ReceiveMessage"
);
var
confs
=
GetDrugConfig
(
excel
,
allotid
);
var
confs
=
GetDrugConfig
(
excel
,
allotid
);
//医生组 一次计算
//医生组 一次计算
//var onceWorkload1 = workloadCompute.OnceCompute(workload1, confs);
//var onceWorkload1 = workloadCompute.OnceCompute(workload1, confs);
//医生组 二次计算
//医生组 二次计算
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"医生组工作量计算"
,
allotid
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"医生组工作量计算"
,
1
,
allotid
,
"ReceiveMessage"
);
var
twiceWorkloadResult1
=
workloadCompute
.
TwiceCompute
(
workload1
);
var
twiceWorkloadResult1
=
workloadCompute
.
TwiceCompute
(
workload1
);
twiceWorkloadResult1
.
Sheet
.
SheetType
=
SheetType
.
ComputeDoctorWorkload
;
twiceWorkloadResult1
.
Sheet
.
SheetType
=
SheetType
.
ComputeDoctorWorkload
;
...
@@ -226,7 +226,7 @@ private List<PerSheet> MergeCompute(PerExcel excel, int allotid)
...
@@ -226,7 +226,7 @@ private List<PerSheet> MergeCompute(PerExcel excel, int allotid)
//护理组 一次计算
//护理组 一次计算
//var onceWorkload2 = workloadCompute.OnceCompute(workload2);
//var onceWorkload2 = workloadCompute.OnceCompute(workload2);
//护理组 二次计算
//护理组 二次计算
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"护理组工作量计算"
,
allotid
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"护理组工作量计算"
,
1
,
allotid
,
"ReceiveMessage"
);
var
twiceWorkloadResult2
=
workloadCompute
.
TwiceCompute
(
workload2
);
var
twiceWorkloadResult2
=
workloadCompute
.
TwiceCompute
(
workload2
);
twiceWorkloadResult2
.
Sheet
.
SheetType
=
SheetType
.
ComputeNurseWorkload
;
twiceWorkloadResult2
.
Sheet
.
SheetType
=
SheetType
.
ComputeNurseWorkload
;
...
@@ -235,10 +235,10 @@ private List<PerSheet> MergeCompute(PerExcel excel, int allotid)
...
@@ -235,10 +235,10 @@ private List<PerSheet> MergeCompute(PerExcel excel, int allotid)
var
deptAccounting
=
excel
.
PerSheet
.
FirstOrDefault
(
t
=>
t
.
SheetType
==
SheetType
.
AccountBasic
);
var
deptAccounting
=
excel
.
PerSheet
.
FirstOrDefault
(
t
=>
t
.
SheetType
==
SheetType
.
AccountBasic
);
var
dataList
=
deptAccounting
.
PerData
.
Select
(
t
=>
(
PerDataAccountBaisc
)
t
);
var
dataList
=
deptAccounting
.
PerData
.
Select
(
t
=>
(
PerDataAccountBaisc
)
t
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"计算保底绩效参考标准"
,
allotid
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"计算保底绩效参考标准"
,
1
,
allotid
,
"ReceiveMessage"
);
var
baiscnormList
=
ComputeMinimum
(
dataList
,
twiceEconomicResult
.
PerData
,
twiceWorkloadResult1
.
PerData
,
twiceWorkloadResult2
.
PerData
,
allotid
);
var
baiscnormList
=
ComputeMinimum
(
dataList
,
twiceEconomicResult
.
PerData
,
twiceWorkloadResult1
.
PerData
,
twiceWorkloadResult2
.
PerData
,
allotid
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"计算科室绩效"
,
allotid
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"计算科室绩效"
,
1
,
allotid
,
"ReceiveMessage"
);
var
sheet
=
Compute
(
dataList
,
twiceEconomicResult
.
PerData
,
twiceWorkloadResult1
.
PerData
,
twiceWorkloadResult2
.
PerData
,
baiscnormList
);
var
sheet
=
Compute
(
dataList
,
twiceEconomicResult
.
PerData
,
twiceWorkloadResult1
.
PerData
,
twiceWorkloadResult2
.
PerData
,
baiscnormList
);
perSheet
.
AddRange
(
sheet
);
perSheet
.
AddRange
(
sheet
);
...
...
performance/Performance.Services/AllotCompute/ResultComputeService.cs
View file @
545565d3
...
@@ -55,14 +55,14 @@ public List<res_baiscnorm> Compute(per_allot allot, PerExcel excel, List<PerShee
...
@@ -55,14 +55,14 @@ public List<res_baiscnorm> Compute(per_allot allot, PerExcel excel, List<PerShee
List
<
ComputeEmployee
>
computeEmployees
=
Mapper
.
Map
<
List
<
ComputeEmployee
>>(
empolyeeList
);
List
<
ComputeEmployee
>
computeEmployees
=
Mapper
.
Map
<
List
<
ComputeEmployee
>>(
empolyeeList
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"临床科室主任、临床科室副主任、临床科室护士长 最终绩效数据计算"
,
allot
.
ID
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"临床科室主任、临床科室副主任、临床科室护士长 最终绩效数据计算"
,
1
,
allot
.
ID
,
"ReceiveMessage"
);
var
computResult
=
computeDirector
.
Compute
(
computeEmployees
,
accountbasicList
,
allot
);
var
computResult
=
computeDirector
.
Compute
(
computeEmployees
,
accountbasicList
,
allot
);
//计算 绩效标准 基数(科主任、副主任、护士长 =>> 平均值)
//计算 绩效标准 基数(科主任、副主任、护士长 =>> 平均值)
List
<
res_baiscnorm
>
baiscnormList
=
new
List
<
res_baiscnorm
>();
List
<
res_baiscnorm
>
baiscnormList
=
new
List
<
res_baiscnorm
>();
baiscNormService
.
ComputeAvg
(
baiscnormList
,
accountbasicList
,
computResult
);
baiscNormService
.
ComputeAvg
(
baiscnormList
,
accountbasicList
,
computResult
);
baiscNormService
.
DocterNurseBaiscnorm
(
baiscnormList
,
accountbasicList
,
perSheets
);
baiscNormService
.
DocterNurseBaiscnorm
(
baiscnormList
,
accountbasicList
,
perSheets
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"院领导、业务中层、工勤人员 最终绩效数据计算"
,
allot
.
ID
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"院领导、业务中层、工勤人员 最终绩效数据计算"
,
1
,
allot
.
ID
,
"ReceiveMessage"
);
var
computResult2
=
computeDirector
.
Compute
(
computeEmployees
,
allot
,
baiscnormList
);
var
computResult2
=
computeDirector
.
Compute
(
computeEmployees
,
allot
,
baiscnormList
);
//计算 行政人员 平均值
//计算 行政人员 平均值
baiscNormService
.
ComputeOtherAvg
(
baiscnormList
,
computResult2
,
empolyeeList
);
baiscNormService
.
ComputeOtherAvg
(
baiscnormList
,
computResult2
,
empolyeeList
);
...
@@ -73,7 +73,7 @@ public List<res_baiscnorm> Compute(per_allot allot, PerExcel excel, List<PerShee
...
@@ -73,7 +73,7 @@ public List<res_baiscnorm> Compute(per_allot allot, PerExcel excel, List<PerShee
perforRescomputeRepository
.
AddRange
(
computes
.
ToArray
());
perforRescomputeRepository
.
AddRange
(
computes
.
ToArray
());
baiscnormList
.
ForEach
(
t
=>
t
.
AllotID
=
allot
.
ID
);
baiscnormList
.
ForEach
(
t
=>
t
.
AllotID
=
allot
.
ID
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"保存最终绩效数据"
,
allot
.
ID
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"保存最终绩效数据"
,
1
,
allot
.
ID
,
"ReceiveMessage"
);
perforResbaiscnormRepository
.
AddRange
(
baiscnormList
.
ToArray
());
perforResbaiscnormRepository
.
AddRange
(
baiscnormList
.
ToArray
());
return
baiscnormList
;
return
baiscnormList
;
...
...
performance/Performance.Services/AllotService.cs
View file @
545565d3
...
@@ -24,8 +24,7 @@ public class AllotService : IAutoInjection
...
@@ -24,8 +24,7 @@ public class AllotService : IAutoInjection
private
ImportDataService
importDataService
;
private
ImportDataService
importDataService
;
private
ProcessComputService
processComputService
;
private
ProcessComputService
processComputService
;
private
ResultComputeService
resultComputeService
;
private
ResultComputeService
resultComputeService
;
//private PerforLogdbugRepository logdbug;
private
PerforLogdbugRepository
logdbug
;
private
ConfigService
configService
;
private
ConfigService
configService
;
private
IHostingEnvironment
_evn
;
private
IHostingEnvironment
_evn
;
private
ILogger
<
AllotService
>
_logger
;
private
ILogger
<
AllotService
>
_logger
;
...
@@ -45,7 +44,7 @@ public class AllotService : IAutoInjection
...
@@ -45,7 +44,7 @@ public class AllotService : IAutoInjection
ProcessComputService
processComputService
,
ProcessComputService
processComputService
,
ResultComputeService
resultComputeService
,
ResultComputeService
resultComputeService
,
ConfigService
configService
,
ConfigService
configService
,
//
PerforLogdbugRepository logdbug,
PerforLogdbugRepository
logdbug
,
IHostingEnvironment
evn
,
ILogger
<
AllotService
>
logger
,
IHostingEnvironment
evn
,
ILogger
<
AllotService
>
logger
,
IEmailService
emailService
,
IEmailService
emailService
,
IOptions
<
Application
>
options
,
IOptions
<
Application
>
options
,
...
@@ -67,7 +66,7 @@ public class AllotService : IAutoInjection
...
@@ -67,7 +66,7 @@ public class AllotService : IAutoInjection
this
.
emailService
=
emailService
;
this
.
emailService
=
emailService
;
this
.
options
=
options
;
this
.
options
=
options
;
this
.
configService
=
configService
;
this
.
configService
=
configService
;
//
this.logdbug = logdbug;
this
.
logdbug
=
logdbug
;
this
.
perforLogcheckRepository
=
perforLogcheckRepository
;
this
.
perforLogcheckRepository
=
perforLogcheckRepository
;
this
.
perforHospitalRepository
=
perforHospitalRepository
;
this
.
perforHospitalRepository
=
perforHospitalRepository
;
//this.hubContext = hubContext;
//this.hubContext = hubContext;
...
@@ -215,9 +214,7 @@ public void Generate(per_allot allot, string mail)
...
@@ -215,9 +214,7 @@ public void Generate(per_allot allot, string mail)
DateTime
time
=
DateTime
.
Now
;
DateTime
time
=
DateTime
.
Now
;
try
try
{
{
//hubContext.Clients.Group("aaaa").SendAsync("ReceiveMessage", "绩效开始执行", "绩效开始执行");
logManageService
.
WriteMsg
(
"绩效开始执行"
,
$"正在生成
{
allot
.
Year
}
-
{
allot
.
Month
.
ToString
().
PadLeft
(
2
,
'0'
)}
月份绩效!"
,
1
,
allot
.
ID
,
"ReceiveMessage"
,
true
);
//logdbug.Add(allot.ID, "绩效开始执行", JsonHelper.Serialize(allot));
logManageService
.
WriteMsg
(
"绩效开始执行"
,
JsonHelper
.
Serialize
(
allot
),
allot
.
ID
,
"ReceiveMessage"
,
true
);
configService
.
Clear
(
allot
.
ID
);
configService
.
Clear
(
allot
.
ID
);
// 导出数据
// 导出数据
...
@@ -228,39 +225,35 @@ public void Generate(per_allot allot, string mail)
...
@@ -228,39 +225,35 @@ public void Generate(per_allot allot, string mail)
{
{
UpdateAllotStates
(
allot
.
ID
,
(
int
)
AllotStates
.
CheckFail
,
EnumHelper
.
GetDescription
(
AllotStates
.
CheckFail
));
UpdateAllotStates
(
allot
.
ID
,
(
int
)
AllotStates
.
CheckFail
,
EnumHelper
.
GetDescription
(
AllotStates
.
CheckFail
));
SendEmail
(
allot
,
mail
,
3
,
time
);
SendEmail
(
allot
,
mail
,
3
,
time
);
//logdbug.Add(allot.ID, "绩效数据校验失败", JsonHelper.Serialize(allot));
logManageService
.
WriteMsg
(
"绩效数据校验失败"
,
"详情可至“更多 -- 查看日志”查看"
,
3
,
allot
.
ID
,
"ReceiveMessage"
,
true
);
logManageService
.
WriteMsg
(
"绩效数据校验失败"
,
JsonHelper
.
Serialize
(
allot
),
allot
.
ID
,
"ReceiveMessage"
,
true
);
return
;
return
;
}
}
UpdateAllotStates
(
allot
.
ID
,
(
int
)
AllotStates
.
InGenerate
,
EnumHelper
.
GetDescription
(
AllotStates
.
InGenerate
));
UpdateAllotStates
(
allot
.
ID
,
(
int
)
AllotStates
.
InGenerate
,
EnumHelper
.
GetDescription
(
AllotStates
.
InGenerate
));
// 计算合并数据
// 计算合并数据
//logdbug.Add(allot.ID, "计算合并数据", JsonHelper.Serialize(allot));
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"计算合并数据"
,
allot
.
ID
,
1
,
"ReceiveMessage"
,
true
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"计算合并数据"
,
allot
.
ID
,
"ReceiveMessage"
,
true
);
List
<
PerSheet
>
list
=
processComputService
.
MergeAndSave
(
excel
,
allot
);
List
<
PerSheet
>
list
=
processComputService
.
MergeAndSave
(
excel
,
allot
);
//var baiscnorm = baiscNormService.NurseBaiscnorm(list);
//var baiscnorm = baiscNormService.NurseBaiscnorm(list);
//logdbug.Add(allot.ID, "护士平均绩效", JsonHelper.Serialize(baiscnorm));
// 计算最总数据
// 计算最总数据
//logdbug.Add(allot.ID, "绩效结果计算数据开始", "");
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"计算最终绩效数据"
,
allot
.
ID
,
1
,
"ReceiveMessage"
,
true
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"计算最终绩效数据"
,
allot
.
ID
,
"ReceiveMessage"
,
true
);
var
baiscnormList
=
resultComputeService
.
Compute
(
allot
,
excel
,
list
);
var
baiscnormList
=
resultComputeService
.
Compute
(
allot
,
excel
,
list
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"计算最终特殊科室绩效数据"
,
allot
.
ID
,
"ReceiveMessage"
,
true
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"计算最终特殊科室绩效数据"
,
1
,
allot
.
ID
,
"ReceiveMessage"
,
true
);
resultComputeService
.
SpecialUnitCompute
(
excel
,
allot
,
baiscnormList
);
resultComputeService
.
SpecialUnitCompute
(
excel
,
allot
,
baiscnormList
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"保存最终特殊科室绩效数据"
,
allot
.
ID
,
"ReceiveMessage"
,
true
);
logManageService
.
WriteMsg
(
"正在生成绩效"
,
"保存最终特殊科室绩效数据"
,
1
,
allot
.
ID
,
"ReceiveMessage"
,
true
);
UpdateAllotStates
(
allot
.
ID
,
(
int
)
AllotStates
.
GenerateSucceed
,
EnumHelper
.
GetDescription
(
AllotStates
.
GenerateSucceed
));
UpdateAllotStates
(
allot
.
ID
,
(
int
)
AllotStates
.
GenerateSucceed
,
EnumHelper
.
GetDescription
(
AllotStates
.
GenerateSucceed
));
//发送邮件
//发送邮件
SendEmail
(
allot
,
mail
,
1
,
time
);
SendEmail
(
allot
,
mail
,
1
,
time
);
//logdbug.Add(allot.ID, "绩效开始执行", "绩效生成成功");
//logdbug.Add(allot.ID, "绩效开始执行", "绩效生成成功");
logManageService
.
WriteMsg
(
"绩效生成结束"
,
"绩效生成成功"
,
allot
.
ID
,
"ReceiveMessage"
,
true
);
logManageService
.
WriteMsg
(
"绩效生成结束"
,
"绩效生成成功"
,
1
,
allot
.
ID
,
"ReceiveMessage"
,
true
);
}
}
catch
(
Exception
ex
)
catch
(
Exception
ex
)
{
{
UpdateAllotStates
(
allot
.
ID
,
(
int
)
AllotStates
.
GenerateFail
,
EnumHelper
.
GetDescription
(
AllotStates
.
GenerateFail
));
UpdateAllotStates
(
allot
.
ID
,
(
int
)
AllotStates
.
GenerateFail
,
EnumHelper
.
GetDescription
(
AllotStates
.
GenerateFail
));
SendEmail
(
allot
,
mail
,
2
,
time
);
SendEmail
(
allot
,
mail
,
2
,
time
);
//logdbug.Add(allot.ID, "绩效开始执行", ex.ToString());
//logdbug.Add(allot.ID, "绩效开始执行", ex.ToString());
logManageService
.
WriteMsg
(
"绩效生成失败"
,
ex
.
ToString
(),
allot
.
ID
,
"ReceiveMessage"
,
true
);
logManageService
.
WriteMsg
(
"绩效生成失败"
,
ex
.
ToString
(),
4
,
allot
.
ID
,
"ReceiveMessage"
,
true
);
//throw ex;
//throw ex;
}
}
}
}
...
@@ -348,5 +341,18 @@ public List<log_check> AllotCheckResult(per_allot allot)
...
@@ -348,5 +341,18 @@ public List<log_check> AllotCheckResult(per_allot allot)
list
=
list
.
OrderBy
(
t
=>
t
.
Titile
).
ThenBy
(
t
=>
t
.
ID
).
ToList
();
list
=
list
.
OrderBy
(
t
=>
t
.
Titile
).
ThenBy
(
t
=>
t
.
ID
).
ToList
();
return
list
;
return
list
;
}
}
/// <summary>
/// 绩效历史日志
/// </summary>
/// <param name="allot"></param>
/// <returns></returns>
public
List
<
log_dbug
>
AllotLog
(
per_allot
allot
)
{
var
list
=
logdbug
.
GetEntities
(
t
=>
t
.
AllotID
==
allot
.
ID
);
if
(
list
!=
null
)
list
=
list
.
OrderBy
(
t
=>
t
.
CreateTime
).
ToList
();
return
list
;
}
}
}
}
}
performance/Performance.Services/ConfigService.cs
View file @
545565d3
...
@@ -489,8 +489,7 @@ public bool AgainDelete(CofAgainRequest request)
...
@@ -489,8 +489,7 @@ public bool AgainDelete(CofAgainRequest request)
public
void
Clear
(
int
allotId
)
public
void
Clear
(
int
allotId
)
{
{
var
count
=
_directorRepository
.
DeleteData
(
allotId
);
var
count
=
_directorRepository
.
DeleteData
(
allotId
);
//logdbug.Add(allotId, "清理无效数据", $"受影响行数:{count}");
logManageService
.
WriteMsg
(
"清理无效数据"
,
$"清理无效数据,受影响行数:
{
count
}
"
,
1
,
allotId
,
"ReceiveMessage"
,
true
);
logManageService
.
WriteMsg
(
"清理无效数据"
,
$"清理无效数据,受影响行数:
{
count
}
"
,
0
,
""
,
true
);
}
}
/// <summary>
/// <summary>
...
@@ -500,8 +499,7 @@ public void Clear(int allotId)
...
@@ -500,8 +499,7 @@ public void Clear(int allotId)
public
void
ClearAgain
(
int
againId
)
public
void
ClearAgain
(
int
againId
)
{
{
var
count
=
_directorRepository
.
DelAgain
(
againId
);
var
count
=
_directorRepository
.
DelAgain
(
againId
);
//logdbug.Add(againId, "清除二次绩效中无效数据", $"受影响行数:{count}");
logManageService
.
WriteMsg
(
"清理无效数据"
,
$"清除二次绩效中无效数据,受影响行数:
{
count
}
"
,
1
,
againId
,
"ReceiveMessage"
,
true
);
logManageService
.
WriteMsg
(
"清理无效数据"
,
$"清除二次绩效中无效数据,受影响行数:
{
count
}
"
,
0
,
""
,
true
);
}
}
#
endregion
#
endregion
}
}
...
...
performance/Performance.Services/LogManageService.cs
View file @
545565d3
...
@@ -23,14 +23,15 @@ public class LogManageService : IAutoInjection
...
@@ -23,14 +23,15 @@ public class LogManageService : IAutoInjection
/// </summary>
/// </summary>
/// <param name="tag">标签</param>
/// <param name="tag">标签</param>
/// <param name="message">内容</param>
/// <param name="message">内容</param>
/// <param name="level">等级1、信息(info)2、警告(warn)3、错误(error)4、异常(exception)</param>
/// <param name="allotId">绩效Id</param>
/// <param name="allotId">绩效Id</param>
/// <param name="method">方法名称</param>
/// <param name="method">方法名称</param>
public
void
WriteMsg
(
string
tag
,
string
message
,
int
allotId
,
string
method
,
bool
isDebug
=
false
)
public
void
WriteMsg
(
string
tag
,
string
message
,
int
level
,
int
allotId
,
string
method
,
bool
isDebug
=
false
)
{
{
hubContext
.
Clients
.
Group
(
allotId
.
ToString
()).
SendAsync
(
method
,
tag
,
message
);
hubContext
.
Clients
.
Group
(
allotId
.
ToString
()).
SendAsync
(
method
,
tag
,
message
,
level
);
if
(
isDebug
)
if
(
isDebug
)
{
{
logdbug
.
Add
(
allotId
,
tag
,
message
);
logdbug
.
Add
(
allotId
,
tag
,
message
,
level
);
}
}
}
}
}
}
...
...
performance/Performance.Services/NewExtractService.cs
View file @
545565d3
...
@@ -164,14 +164,14 @@ public string ExtractData(int allotId, string email, int hospitalId)
...
@@ -164,14 +164,14 @@ public string ExtractData(int allotId, string email, int hospitalId)
{
{
workbook
.
Write
(
file
);
workbook
.
Write
(
file
);
}
}
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"
{
hospital
.
HosName
}
HIS数据提取成功,文件路径:
{
newPath
}
。"
,
allotId
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"
{
hospital
.
HosName
}
HIS数据提取成功,文件路径:
{
newPath
}
。"
,
1
,
allotId
,
"ReceiveMessage"
);
LogHelper
.
Information
(
$"
{
hospital
.
HosName
}
HIS数据提取成功,文件路径:
{
newPath
}
。"
,
"提取绩效数据"
);
LogHelper
.
Information
(
$"
{
hospital
.
HosName
}
HIS数据提取成功,文件路径:
{
newPath
}
。"
,
"提取绩效数据"
);
SendEmail
(
email
,
newPath
,
$"
{
hospital
.
HosName
}
HIS数据提取成功"
,
$"
{
hospital
.
HosName
}
在
{
DateTime
.
Now
.
ToString
(
"yyyy-MM-dd HH:mm:ss"
)}
成功提取。"
);
SendEmail
(
email
,
newPath
,
$"
{
hospital
.
HosName
}
HIS数据提取成功"
,
$"
{
hospital
.
HosName
}
在
{
DateTime
.
Now
.
ToString
(
"yyyy-MM-dd HH:mm:ss"
)}
成功提取。"
);
return
newPath
;
return
newPath
;
}
}
catch
(
Exception
ex
)
catch
(
Exception
ex
)
{
{
logManageService
.
WriteMsg
(
"提取数据异常"
,
$"数据写入出现异常
{
ex
.
ToString
()}
"
,
allotId
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"提取数据异常"
,
$"数据写入出现异常
{
ex
.
ToString
()}
"
,
4
,
allotId
,
"ReceiveMessage"
);
LogHelper
.
Error
(
$"数据写入出现异常
{
ex
.
ToString
()}
"
,
"提取绩效数据"
,
"异常"
);
LogHelper
.
Error
(
$"数据写入出现异常
{
ex
.
ToString
()}
"
,
"提取绩效数据"
,
"异常"
);
SendEmail
(
email
,
""
,
$"
{
hospital
.
HosName
}
HIS数据提取失败"
,
$"
{
hospital
.
HosName
}
提取数据过程中出现异常情况,我们将尽快解决问题。给您带来的不便我们深感歉意!"
);
SendEmail
(
email
,
""
,
$"
{
hospital
.
HosName
}
HIS数据提取失败"
,
$"
{
hospital
.
HosName
}
提取数据过程中出现异常情况,我们将尽快解决问题。给您带来的不便我们深感歉意!"
);
throw
ex
;
throw
ex
;
...
@@ -228,7 +228,7 @@ private void WriteOtherIncome(ISheet sheet, int hospitalId, IPerSheetDataRead sh
...
@@ -228,7 +228,7 @@ private void WriteOtherIncome(ISheet sheet, int hospitalId, IPerSheetDataRead sh
int
cellStartIndex
=
sheetRead
.
Point
.
HeaderFirstCellNum
.
Value
+
4
;
int
cellStartIndex
=
sheetRead
.
Point
.
HeaderFirstCellNum
.
Value
+
4
;
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"写入列头信息 --
{
module
.
ModuleName
}
"
,
AllotId
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"写入列头信息 --
{
module
.
ModuleName
}
"
,
1
,
AllotId
,
"ReceiveMessage"
);
LogHelper
.
Information
(
$"写入列头信息 --
{
module
.
ModuleName
}
"
,
"提取绩效数据"
);
LogHelper
.
Information
(
$"写入列头信息 --
{
module
.
ModuleName
}
"
,
"提取绩效数据"
);
//写入列头信息
//写入列头信息
foreach
(
var
item
in
itemList
)
foreach
(
var
item
in
itemList
)
...
@@ -265,7 +265,7 @@ private void WriteIncome(ISheet sheet, int hospitalId, List<AccountUnitEntity> u
...
@@ -265,7 +265,7 @@ private void WriteIncome(ISheet sheet, int hospitalId, List<AccountUnitEntity> u
var
technicianFactor
=
sheet
.
GetRow
(
sheetRead
.
Point
.
AccountingUnit
.
First
(
t
=>
t
.
UnitType
==
"医技组"
).
FactorRow
.
Value
);
var
technicianFactor
=
sheet
.
GetRow
(
sheetRead
.
Point
.
AccountingUnit
.
First
(
t
=>
t
.
UnitType
==
"医技组"
).
FactorRow
.
Value
);
var
head
=
GetOrCreate
(
sheet
,
sheetRead
.
Point
.
HeaderFirstRowNum
.
Value
);
var
head
=
GetOrCreate
(
sheet
,
sheetRead
.
Point
.
HeaderFirstRowNum
.
Value
);
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"写入列头信息 --
{
module
.
ModuleName
}
"
,
AllotId
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"写入列头信息 --
{
module
.
ModuleName
}
"
,
1
,
AllotId
,
"ReceiveMessage"
);
LogHelper
.
Information
(
$"写入列头信息 --
{
module
.
ModuleName
}
"
,
"提取绩效数据"
);
LogHelper
.
Information
(
$"写入列头信息 --
{
module
.
ModuleName
}
"
,
"提取绩效数据"
);
//写入列头信息
//写入列头信息
int
cellStartIndex
=
sheetRead
.
Point
.
HeaderFirstCellNum
.
Value
+
4
;
int
cellStartIndex
=
sheetRead
.
Point
.
HeaderFirstCellNum
.
Value
+
4
;
...
@@ -295,14 +295,14 @@ private void WriteIncome(ISheet sheet, int hospitalId, List<AccountUnitEntity> u
...
@@ -295,14 +295,14 @@ private void WriteIncome(ISheet sheet, int hospitalId, List<AccountUnitEntity> u
List
<
ExtractDto
>
allExtract
=
new
List
<
ExtractDto
>();
List
<
ExtractDto
>
allExtract
=
new
List
<
ExtractDto
>();
foreach
(
var
item
in
extractList
)
foreach
(
var
item
in
extractList
)
{
{
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"执行SQL脚本获取数据 --
{
module
.
ModuleName
}
"
,
AllotId
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"执行SQL脚本获取数据 --
{
module
.
ModuleName
}
"
,
1
,
AllotId
,
"ReceiveMessage"
);
LogHelper
.
Information
(
$"执行SQL脚本获取数据 --
{
module
.
ModuleName
}
"
,
"提取绩效数据"
);
LogHelper
.
Information
(
$"执行SQL脚本获取数据 --
{
module
.
ModuleName
}
"
,
"提取绩效数据"
);
var
result
=
QueryDatabase
(
hospitalConfigList
,
item
,
allot
);
var
result
=
QueryDatabase
(
hospitalConfigList
,
item
,
allot
);
if
(
result
!=
null
)
if
(
result
!=
null
)
allExtract
.
AddRange
(
result
);
allExtract
.
AddRange
(
result
);
}
}
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"填充数据 --
{
module
.
ModuleName
}
"
,
AllotId
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"填充数据 --
{
module
.
ModuleName
}
"
,
1
,
AllotId
,
"ReceiveMessage"
);
LogHelper
.
Information
(
$"填充数据 --
{
module
.
ModuleName
}
"
,
"提取绩效数据"
);
LogHelper
.
Information
(
$"填充数据 --
{
module
.
ModuleName
}
"
,
"提取绩效数据"
);
//写入数据
//写入数据
var
rowIndex
=
sheetRead
.
Point
.
HeaderFirstRowNum
.
Value
+
1
;
var
rowIndex
=
sheetRead
.
Point
.
HeaderFirstRowNum
.
Value
+
1
;
...
@@ -391,7 +391,7 @@ private void WriteWorkload(ISheet sheet, int hospitalId, List<AccountUnitEntity>
...
@@ -391,7 +391,7 @@ private void WriteWorkload(ISheet sheet, int hospitalId, List<AccountUnitEntity>
var
head
=
GetOrCreate
(
sheet
,
sheetRead
.
Point
.
HeaderFirstRowNum
.
Value
+
0
);
var
head
=
GetOrCreate
(
sheet
,
sheetRead
.
Point
.
HeaderFirstRowNum
.
Value
+
0
);
var
factor
=
GetOrCreate
(
sheet
,
sheetRead
.
Point
.
HeaderFirstRowNum
.
Value
+
1
);
var
factor
=
GetOrCreate
(
sheet
,
sheetRead
.
Point
.
HeaderFirstRowNum
.
Value
+
1
);
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"写入列头信息 --
{
module
.
ModuleName
}
"
,
AllotId
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"写入列头信息 --
{
module
.
ModuleName
}
"
,
1
,
AllotId
,
"ReceiveMessage"
);
LogHelper
.
Information
(
$"写入列头信息 --
{
module
.
ModuleName
}
"
,
"提取绩效数据"
);
LogHelper
.
Information
(
$"写入列头信息 --
{
module
.
ModuleName
}
"
,
"提取绩效数据"
);
//写入列头信息
//写入列头信息
int
cellStartIndex
=
sheetRead
.
Point
.
HeaderFirstCellNum
.
Value
+
2
;
int
cellStartIndex
=
sheetRead
.
Point
.
HeaderFirstCellNum
.
Value
+
2
;
...
@@ -418,7 +418,7 @@ private void WriteWorkload(ISheet sheet, int hospitalId, List<AccountUnitEntity>
...
@@ -418,7 +418,7 @@ private void WriteWorkload(ISheet sheet, int hospitalId, List<AccountUnitEntity>
if
(
category
==
null
||
category
.
Count
()
==
0
)
continue
;
if
(
category
==
null
||
category
.
Count
()
==
0
)
continue
;
foreach
(
var
moditem
in
category
)
foreach
(
var
moditem
in
category
)
{
{
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"执行SQL脚本获取数据 --
{
module
.
ModuleName
}
"
,
AllotId
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"执行SQL脚本获取数据 --
{
module
.
ModuleName
}
"
,
1
,
AllotId
,
"ReceiveMessage"
);
LogHelper
.
Information
(
$"执行SQL脚本获取数据 --
{
module
.
ModuleName
}
,"
,
"提取绩效数据"
);
LogHelper
.
Information
(
$"执行SQL脚本获取数据 --
{
module
.
ModuleName
}
,"
,
"提取绩效数据"
);
var
result
=
QueryDatabase
(
hospitalConfigList
,
item
,
allot
,
moditem
.
ItemName
);
var
result
=
QueryDatabase
(
hospitalConfigList
,
item
,
allot
,
moditem
.
ItemName
);
if
(
result
!=
null
)
if
(
result
!=
null
)
...
@@ -433,7 +433,7 @@ private void WriteWorkload(ISheet sheet, int hospitalId, List<AccountUnitEntity>
...
@@ -433,7 +433,7 @@ private void WriteWorkload(ISheet sheet, int hospitalId, List<AccountUnitEntity>
specialHead
=
itemList
.
Select
(
t
=>
t
.
ItemName
).
Intersect
(
extractHead
.
Distinct
())?.
ToList
();
specialHead
=
itemList
.
Select
(
t
=>
t
.
ItemName
).
Intersect
(
extractHead
.
Distinct
())?.
ToList
();
}
}
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"填充数据 --
{
module
.
ModuleName
}
"
,
AllotId
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"填充数据 --
{
module
.
ModuleName
}
"
,
1
,
AllotId
,
"ReceiveMessage"
);
LogHelper
.
Information
(
$"填充数据 --
{
module
.
ModuleName
}
"
,
"提取绩效数据"
);
LogHelper
.
Information
(
$"填充数据 --
{
module
.
ModuleName
}
"
,
"提取绩效数据"
);
//写入数据
//写入数据
var
rowIndex
=
sheetRead
.
Point
.
HeaderFirstRowNum
.
Value
+
2
;
var
rowIndex
=
sheetRead
.
Point
.
HeaderFirstRowNum
.
Value
+
2
;
...
@@ -479,7 +479,7 @@ private List<ExtractDto> QueryDatabase(List<sys_hospitalconfig> hospitalConfigLi
...
@@ -479,7 +479,7 @@ private List<ExtractDto> QueryDatabase(List<sys_hospitalconfig> hospitalConfigLi
{
{
executeScript
=
Regex
.
Replace
(
executeScript
,
item
.
Key
,
item
.
Value
,
RegexOptions
.
IgnoreCase
);
executeScript
=
Regex
.
Replace
(
executeScript
,
item
.
Key
,
item
.
Value
,
RegexOptions
.
IgnoreCase
);
}
}
//logManageService.WriteMsg("提取绩效数据", $"SQL脚本:{executeScript}", AllotId, "ReceiveMessage");
//logManageService.WriteMsg("提取绩效数据", $"SQL脚本:{executeScript}",
1,
AllotId, "ReceiveMessage");
LogHelper
.
Information
(
$"SQL脚本
{
executeScript
}
,"
,
"提取绩效数据"
);
LogHelper
.
Information
(
$"SQL脚本
{
executeScript
}
,"
,
"提取绩效数据"
);
var
result
=
connection
.
Query
<
ExtractDto
>(
executeScript
,
commandTimeout
:
20000
);
var
result
=
connection
.
Query
<
ExtractDto
>(
executeScript
,
commandTimeout
:
20000
);
if
(
result
!=
null
&&
result
.
Count
()
>
0
)
if
(
result
!=
null
&&
result
.
Count
()
>
0
)
...
@@ -510,7 +510,7 @@ private void WriteExpend(ISheet sheet, int hospitalId, IPerSheetDataRead sheetRe
...
@@ -510,7 +510,7 @@ private void WriteExpend(ISheet sheet, int hospitalId, IPerSheetDataRead sheetRe
int
cellStartIndex
=
sheetRead
.
Point
.
HeaderFirstCellNum
.
Value
+
4
;
int
cellStartIndex
=
sheetRead
.
Point
.
HeaderFirstCellNum
.
Value
+
4
;
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"写入列头信息 --
{
module
.
ModuleName
}
"
,
AllotId
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"写入列头信息 --
{
module
.
ModuleName
}
"
,
1
,
AllotId
,
"ReceiveMessage"
);
LogHelper
.
Information
(
$"写入列头信息 --
{
module
.
ModuleName
}
"
,
"提取绩效数据"
);
LogHelper
.
Information
(
$"写入列头信息 --
{
module
.
ModuleName
}
"
,
"提取绩效数据"
);
//写入列头信息
//写入列头信息
foreach
(
var
item
in
itemList
)
foreach
(
var
item
in
itemList
)
...
@@ -565,7 +565,7 @@ private void WriteEmployee(ISheet sheet, int allotLastId, IPerSheetDataRead shee
...
@@ -565,7 +565,7 @@ private void WriteEmployee(ISheet sheet, int allotLastId, IPerSheetDataRead shee
{
"调节系数"
,
(
t
)
=>
t
.
Adjust
},
{
"调节系数"
,
(
t
)
=>
t
.
Adjust
},
};
};
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"填充数据 -- 人员信息"
,
AllotId
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"填充数据 -- 人员信息"
,
1
,
AllotId
,
"ReceiveMessage"
);
LogHelper
.
Information
(
$"填充数据 -- 人员信息"
,
"提取绩效数据"
);
LogHelper
.
Information
(
$"填充数据 -- 人员信息"
,
"提取绩效数据"
);
var
dataList
=
perforImemployeeRepository
.
GetEntities
(
t
=>
t
.
AllotID
==
allotLastId
)?.
OrderBy
(
t
=>
t
.
AccountType
).
ToList
();
var
dataList
=
perforImemployeeRepository
.
GetEntities
(
t
=>
t
.
AllotID
==
allotLastId
)?.
OrderBy
(
t
=>
t
.
AccountType
).
ToList
();
for
(
int
i
=
0
;
i
<
dataList
.
Count
;
i
++)
for
(
int
i
=
0
;
i
<
dataList
.
Count
;
i
++)
...
@@ -623,7 +623,7 @@ private void WriteSpecialUnit(ISheet sheet, int hospitalId, per_allot allotLast,
...
@@ -623,7 +623,7 @@ private void WriteSpecialUnit(ISheet sheet, int hospitalId, per_allot allotLast,
int
mergedBegin
=
sheetRead
.
Point
.
DataFirstRowNum
.
Value
;
int
mergedBegin
=
sheetRead
.
Point
.
DataFirstRowNum
.
Value
;
int
mergedEnd
=
sheetRead
.
Point
.
DataFirstRowNum
.
Value
;
int
mergedEnd
=
sheetRead
.
Point
.
DataFirstRowNum
.
Value
;
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"填充数据 -- 特殊核算单元绩效测算表"
,
AllotId
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"填充数据 -- 特殊核算单元绩效测算表"
,
1
,
AllotId
,
"ReceiveMessage"
);
LogHelper
.
Information
(
$"填充数据 -- 特殊核算单元绩效测算表"
,
"提取绩效数据"
);
LogHelper
.
Information
(
$"填充数据 -- 特殊核算单元绩效测算表"
,
"提取绩效数据"
);
for
(
int
i
=
0
;
i
<
modDataList
.
Count
;
i
++)
for
(
int
i
=
0
;
i
<
modDataList
.
Count
;
i
++)
{
{
...
@@ -691,7 +691,7 @@ private void WriteAccountBasic(ISheet sheet, int allotLastId, IPerSheetDataRead
...
@@ -691,7 +691,7 @@ private void WriteAccountBasic(ISheet sheet, int allotLastId, IPerSheetDataRead
{
"调节系数"
,
(
t
)
=>
t
.
DoctorAdjustFactor
},
{
"调节系数"
,
(
t
)
=>
t
.
DoctorAdjustFactor
},
};
};
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"填充数据 -- 临床科室医护绩效测算表"
,
AllotId
,
"ReceiveMessage"
);
logManageService
.
WriteMsg
(
"提取绩效数据"
,
$"填充数据 -- 临床科室医护绩效测算表"
,
1
,
AllotId
,
"ReceiveMessage"
);
LogHelper
.
Information
(
$"填充数据 -- 临床科室医护绩效测算表"
,
"提取绩效数据"
);
LogHelper
.
Information
(
$"填充数据 -- 临床科室医护绩效测算表"
,
"提取绩效数据"
);
var
dataList
=
perforImaccountbasicRepository
.
GetEntities
(
t
=>
t
.
AllotID
==
allotLastId
)?.
OrderBy
(
t
=>
t
.
UnitType
).
ThenBy
(
t
=>
t
.
DoctorAccountingUnit
).
ToList
();
var
dataList
=
perforImaccountbasicRepository
.
GetEntities
(
t
=>
t
.
AllotID
==
allotLastId
)?.
OrderBy
(
t
=>
t
.
UnitType
).
ThenBy
(
t
=>
t
.
DoctorAccountingUnit
).
ToList
();
for
(
int
i
=
0
;
i
<
dataList
.
Count
;
i
++)
for
(
int
i
=
0
;
i
<
dataList
.
Count
;
i
++)
...
...
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