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
c9cdca5e
Commit
c9cdca5e
authored
Mar 03, 2021
by
lcx
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'v2020morge' into v2020morge-signalr
parents
dc84b5e4
59ce6d53
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
34 changed files
with
683 additions
and
66 deletions
+683
-66
performance/Performance.Api/Controllers/AccountController.cs
+73
-0
performance/Performance.Api/Controllers/AllotController.cs
+47
-0
performance/Performance.Api/Controllers/ComputeController.cs
+16
-2
performance/Performance.Api/wwwroot/Performance.DtoModels.xml
+20
-5
performance/Performance.Api/wwwroot/Performance.EntityModels.xml
+35
-10
performance/Performance.DtoModels/HandsonTable.cs
+1
-1
performance/Performance.DtoModels/PerExcel/ComputeEmployee.cs
+5
-0
performance/Performance.DtoModels/PerExcel/ComputeResult.cs
+5
-0
performance/Performance.DtoModels/PerExcel/PerDataAccountBaisc.cs
+5
-0
performance/Performance.DtoModels/PerExcel/PerDataLogisticsEmployee.cs
+5
-0
performance/Performance.DtoModels/Request/HospitalRequest.cs
+4
-4
performance/Performance.DtoModels/Request/UserRequest.cs
+7
-3
performance/Performance.DtoModels/Response/RoleResponse.cs
+2
-0
performance/Performance.DtoModels/Response/UserResponse.cs
+2
-0
performance/Performance.EntityModels/Entity/Sys_User.cs
+5
-0
performance/Performance.EntityModels/Entity/ag_othersource.cs
+34
-19
performance/Performance.EntityModels/Entity/im_employee_logistics.cs
+5
-0
performance/Performance.EntityModels/Entity/res_account.cs
+5
-0
performance/Performance.EntityModels/Entity/res_compute.cs
+4
-0
performance/Performance.EntityModels/Entity/sys_hospital.cs
+4
-4
performance/Performance.Extract.Api/Performance.Extract.Api.csproj
+1
-0
performance/Performance.Extract.Api/Properties/PublishProfiles/FolderProfile.pubxml
+4
-1
performance/Performance.Services/AllotCompute/ProcessComputService.cs
+1
-0
performance/Performance.Services/AllotCompute/ResultComputeService.cs
+10
-5
performance/Performance.Services/CollectService.cs
+141
-3
performance/Performance.Services/ComputeService.cs
+0
-0
performance/Performance.Services/Details/SecondAllotDetails.cs
+0
-0
performance/Performance.Services/ExtractExcelService/ExtractHelper/ExtractHelper.cs
+2
-2
performance/Performance.Services/HospitalService.cs
+1
-1
performance/Performance.Services/PerExcelService/ComputeEmpolyee/ComputeDirector.cs
+4
-0
performance/Performance.Services/PerExcelService/ExcelReadConfig.cs
+1
-0
performance/Performance.Services/RoleService.cs
+53
-1
performance/Performance.Services/SecondAllotService.cs
+6
-3
performance/Performance.Services/UserService.cs
+175
-2
No files found.
performance/Performance.Api/Controllers/AccountController.cs
View file @
c9cdca5e
...
...
@@ -294,5 +294,77 @@ public ApiResponse<UserResponse> Password(int userId)
var
user
=
_userService
.
ResetPwd
(
userId
,
loginUserId
);
return
new
ApiResponse
<
UserResponse
>(
ResponseType
.
OK
,
user
);
}
#
region
多角色
/// <summary>
/// 查询用户信息
/// </summary>
/// <returns></returns>
[
Route
(
"selfInfos"
)]
[
HttpPost
]
public
ApiResponse
SelfInfos
()
{
var
userid
=
_claim
.
GetUserId
();
var
user
=
_userService
.
GetUser
(
userid
);
user
.
Role
=
_roleService
.
GetUsersRole
(
user
.
UserID
);
user
.
Hospital
=
_hospitalService
.
GetUserHopital
(
user
.
UserID
);
int
[]
roleArray
=
new
int
[]
{
_options
.
NurseRole
,
_options
.
DirectorRole
,
_options
.
SpecialRole
,
_options
.
OfficeRole
};
user
.
IsAgainAdmin
=
user
.
Role
!=
null
?
roleArray
.
Contains
(
user
.
Role
.
First
().
Type
??
0
)
:
false
;
return
new
ApiResponse
(
ResponseType
.
OK
,
user
);
}
/// <summary>
/// 新增用户
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[
Route
(
"InsertUser"
)]
[
HttpPost
]
public
ApiResponse
<
UserResponse
>
InsertUser
([
CustomizeValidator
(
RuleSet
=
"Insert"
),
FromBody
]
UserRequest
request
)
{
var
userId
=
_claim
.
GetUserId
();
var
user
=
_userService
.
InsertUser
(
request
,
userId
);
user
.
RoleArr
=
request
.
RoleArr
;
return
new
ApiResponse
<
UserResponse
>(
ResponseType
.
OK
,
user
);
}
/// <summary>
/// 编辑用户
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[
Route
(
"UpdateUser"
)]
[
HttpPost
]
public
ApiResponse
<
UserResponse
>
UpdateUser
([
CustomizeValidator
(
RuleSet
=
"Update"
),
FromBody
]
UserRequest
request
)
{
var
userId
=
_claim
.
GetUserId
();
int
[]
roleArray
=
new
int
[]
{
_options
.
NurseRole
,
_options
.
DirectorRole
,
_options
.
SpecialRole
,
_options
.
OfficeRole
};
var
roles
=
_roleService
.
GetUsersRole
(
userId
);
//var roleType = roles.Select(c => c.Type).ToArray();
var
intersect
=
roleArray
.
Intersect
(
roles
.
Select
(
c
=>(
int
)
c
.
Type
).
ToArray
());
var
isAgainAdmin
=
roles
!=
null
?
intersect
.
Any
()
:
false
;
var
user
=
_userService
.
UpdateUser
(
request
,
isAgainAdmin
);
user
.
RoleArr
=
request
.
RoleArr
;
return
new
ApiResponse
<
UserResponse
>(
ResponseType
.
OK
,
user
);
}
/// <summary>
/// 新增用户
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[
Route
(
"DeleteUser"
)]
[
HttpPost
]
public
ApiResponse
DeleteUser
([
CustomizeValidator
(
RuleSet
=
"Delete"
),
FromBody
]
UserRequest
request
)
{
return
_userService
.
DeleteUser
(
request
.
ID
);
}
#
endregion
}
}
\ No newline at end of file
performance/Performance.Api/Controllers/AllotController.cs
View file @
c9cdca5e
...
...
@@ -173,6 +173,53 @@ public ApiResponse Import([FromForm] IFormCollection form)
return
new
ApiResponse
(
ResponseType
.
OK
);
}
/// <summary>
/// 上传文件
/// </summary>
/// <param name="form"></param>
/// <returns></returns>
[
Route
(
"ImportExtraction/{allotId}"
)]
[
HttpPost
]
public
ApiResponse
ImportExtraction
(
int
allotId
)
{
var
allot
=
_allotService
.
GetAllot
(
allotId
);
if
(
allot
==
null
)
return
new
ApiResponse
(
ResponseType
.
Fail
,
"allotid不存在"
);
var
extract
=
allot
.
ExtractPath
.
Split
(
"\\"
).
Last
();
var
fileName
=
System
.
Text
.
RegularExpressions
.
Regex
.
Replace
(
extract
,
@"\d"
,
""
);
//var file = ((FormFileCollection)allot.ExtractPath).FirstOrDefault();
//if (file == null)
// return new ApiResponse(ResponseType.Fail, "参数错误", "文件无效");
var
name
=
FileHelper
.
GetFileNameNoExtension
(
fileName
)
+
DateTime
.
Now
.
ToString
(
"yyyyMMddHHmmssfff"
);
var
ext
=
FileHelper
.
GetExtension
(
fileName
);
var
dpath
=
Path
.
Combine
(
_evn
.
ContentRootPath
,
"Files"
,
$"
{
allot
.
HospitalId
}
"
,
$"
{
allot
.
Year
}{
allot
.
Month
.
ToString
().
PadLeft
(
2
,
'0'
)}
"
);
FileHelper
.
CreateDirectory
(
dpath
);
var
path
=
Path
.
Combine
(
dpath
,
$"
{
name
}{
ext
}
"
);
using
(
var
stream
=
System
.
IO
.
File
.
OpenRead
(
allot
.
ExtractPath
))
{
byte
[]
bytes
=
new
byte
[
stream
.
Length
];
stream
.
Read
(
bytes
,
0
,
bytes
.
Length
);
if
(!
FileHelper
.
CreateFile
(
path
,
bytes
))
return
new
ApiResponse
(
ResponseType
.
Fail
,
$"上传失败"
);
allot
.
Path
=
path
;
allot
.
States
=
(
int
)
AllotStates
.
FileUploaded
;
allot
.
Remark
=
EnumHelper
.
GetDescription
(
AllotStates
.
FileUploaded
);
allot
.
UploadDate
=
DateTime
.
Now
;
allot
.
Generate
=
(
int
)
AllotGenerate
.
Init
;
if
(!
_allotService
.
Update
(
allot
))
return
new
ApiResponse
(
ResponseType
.
Fail
,
$"上传成功,修改状态失败"
);
_configService
.
Clear
(
allot
.
ID
);
}
return
new
ApiResponse
(
ResponseType
.
OK
);
}
/// <summary>
/// 绩效生成
/// </summary>
...
...
performance/Performance.Api/Controllers/ComputeController.cs
View file @
c9cdca5e
...
...
@@ -11,6 +11,7 @@
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text.RegularExpressions
;
using
System.Threading.Tasks
;
namespace
Performance.Api.Controllers
...
...
@@ -300,8 +301,21 @@ public ApiResponse AllComputeByPM([FromBody] ComputerRequest request)
OthePerfor
=
t
.
Sum
(
s
=>
s
.
OthePerfor
),
NightWorkPerfor
=
t
.
Sum
(
s
=>
s
.
NightWorkPerfor
),
RealGiveFee
=
t
.
Sum
(
s
=>
s
.
RealGiveFee
),
//ReservedRatio = t.Sum(s => s.ReservedRatio),
//ReservedRatioFee = t.Sum(s => s.ReservedRatioFee),
ReservedRatio
=
t
.
Sum
(
s
=>
s
.
ReservedRatio
),
ReservedRatioFee
=
t
.
Sum
(
s
=>
s
.
ReservedRatioFee
),
}).
OrderBy
(
t
=>
{
string
value
=
t
.
JobNumber
;
switch
(
value
)
{
case
string
val
when
string
.
IsNullOrEmpty
(
val
):
break
;
case
string
val
when
Regex
.
IsMatch
(
val
,
@"^[+-]?\d*$"
):
value
=
value
.
PadLeft
(
20
,
'0'
);
break
;
}
return
value
;
});
return
new
ApiResponse
(
ResponseType
.
OK
,
"ok"
,
result
);
}
...
...
performance/Performance.Api/wwwroot/Performance.DtoModels.xml
View file @
c9cdca5e
...
...
@@ -536,6 +536,11 @@
夜班费
</summary>
</member>
<member
name=
"P:Performance.DtoModels.ComputeEmployee.NeedSecondAllot"
>
<summary>
是否需要二次分配
</summary>
</member>
<member
name=
"P:Performance.DtoModels.ComputeResult.AccountType"
>
<summary>
科室类别(例如 医技科室 临床科室 其他科室)
...
...
@@ -706,6 +711,11 @@
夜班费
</summary>
</member>
<member
name=
"P:Performance.DtoModels.ComputeResult.NeedSecondAllot"
>
<summary>
是否需要二次分配
</summary>
</member>
<member
name=
"T:Performance.DtoModels.UnitType"
>
<summary>
核算单元类型
</summary>
</member>
...
...
@@ -1089,6 +1099,11 @@
实发绩效
</summary>
</member>
<member
name=
"P:Performance.DtoModels.PerDataAccountBaisc.NeedSecondAllot"
>
<summary>
是否需要二次分配
</summary>
</member>
<member
name=
"P:Performance.DtoModels.PerDataClinicEmployee.UnitType"
>
<summary>
核算单元分类
...
...
@@ -1354,6 +1369,11 @@
调节后其他绩效
</summary>
</member>
<member
name=
"P:Performance.DtoModels.PerDataLogisticsEmployee.NeedSecondAllot"
>
<summary>
是否需要二次分配
</summary>
</member>
<member
name=
"P:Performance.DtoModels.PerDataLogisticsEmployee.RowNumber"
>
<summary>
行号
...
...
@@ -2056,11 +2076,6 @@
是否开启科室CMI占比 1 启用 2 禁用
</summary>
</member>
<member
name=
"P:Performance.DtoModels.HospitalRequest.IsOpenLogisticsSecondAllot"
>
<summary>
是否开启行政后勤二次绩效分配 1 启用 2 禁用
</summary>
</member>
<member
name=
"P:Performance.DtoModels.IncomeRequest.SheetNameKeyword"
>
<summary>
关键字匹配
...
...
performance/Performance.Api/wwwroot/Performance.EntityModels.xml
View file @
c9cdca5e
...
...
@@ -717,14 +717,14 @@
</summary>
</member>
<member
name=
"P:Performance.EntityModels.ag_othersource.Id"
>
<summary>
<summary>
</summary>
</summary>
</member>
<member
name=
"P:Performance.EntityModels.ag_othersource.SecondId"
>
<summary>
<summary>
</summary>
</summary>
</member>
<member
name=
"P:Performance.EntityModels.ag_othersource.WorkNumber"
>
<summary>
...
...
@@ -758,7 +758,7 @@
</member>
<member
name=
"P:Performance.EntityModels.ag_othersource.DeptReward"
>
<summary>
科室单项奖励
科室单项奖励
(只读)
</summary>
</member>
<member
name=
"P:Performance.EntityModels.ag_othersource.DistPerformance"
>
...
...
@@ -791,6 +791,21 @@
预留金额
</summary>
</member>
<member
name=
"P:Performance.EntityModels.ag_othersource.ManagementAllowance"
>
<summary>
管理津贴
</summary>
</member>
<member
name=
"P:Performance.EntityModels.ag_othersource.IndividualReward"
>
<summary>
单项奖励
</summary>
</member>
<member
name=
"P:Performance.EntityModels.ag_othersource.AllocationOfKeySpecialty"
>
<summary>
重点专科分配
</summary>
</member>
<member
name=
"T:Performance.EntityModels.ag_secondallot"
>
<summary>
二次绩效列表
...
...
@@ -2706,6 +2721,11 @@
调节后其他绩效
</summary>
</member>
<member
name=
"P:Performance.EntityModels.im_employee_logistics.NeedSecondAllot"
>
<summary>
是否需要二次分配
</summary>
</member>
<member
name=
"T:Performance.EntityModels.im_header"
>
<summary>
...
...
@@ -4511,6 +4531,11 @@
变更日志
</summary>
</member>
<member
name=
"P:Performance.EntityModels.res_account.NeedSecondAllot"
>
<summary>
是否需要二次分配
</summary>
</member>
<member
name=
"T:Performance.EntityModels.res_accountdoctor"
>
<summary>
医生科室核算结果
...
...
@@ -4981,6 +5006,11 @@
调节后其他绩效
</summary>
</member>
<member
name=
"P:Performance.EntityModels.res_compute.NeedSecondAllot"
>
<summary>
是否需要二次分配 是 否
</summary>
</member>
<member
name=
"T:Performance.EntityModels.res_reserved"
>
<summary>
...
...
@@ -5386,11 +5416,6 @@
是否显示二次绩效科主任1 启用 2 禁用
</summary>
</member>
<member
name=
"P:Performance.EntityModels.sys_hospital.IsOpenLogisticsSecondAllot"
>
<summary>
是否开启行政后勤二次绩效分配 1 启用 2 禁用
</summary>
</member>
<member
name=
"P:Performance.EntityModels.sys_hospital.IsSingleProject"
>
<summary>
抽取项目是否在同一环境 1 是 2 否
...
...
performance/Performance.DtoModels/HandsonTable.cs
View file @
c9cdca5e
...
...
@@ -124,7 +124,7 @@ public HandsonColumn(string data, bool readOnly = false, DataFormat format = Dat
public
bool
ReadOnly
{
get
;
set
;
}
public
string
Type
{
get
;
set
;
}
public
string
[]
Source
{
get
;
set
;
}
public
bool
Strict
{
get
;
set
;
}
=
false
;
public
NumericFormat
NumericFormat
{
get
;
set
;
}
}
...
...
performance/Performance.DtoModels/PerExcel/ComputeEmployee.cs
View file @
c9cdca5e
...
...
@@ -160,5 +160,10 @@ public class ComputeEmployee
/// 夜班费
/// </summary>
public
Nullable
<
decimal
>
NightWorkPerfor
{
get
;
set
;
}
/// <summary>
/// 是否需要二次分配
/// </summary>
public
string
NeedSecondAllot
{
get
;
set
;
}
}
}
performance/Performance.DtoModels/PerExcel/ComputeResult.cs
View file @
c9cdca5e
...
...
@@ -198,5 +198,10 @@ public class ComputeResult
/// 夜班费
/// </summary>
public
Nullable
<
decimal
>
NightWorkPerfor
{
get
;
set
;
}
/// <summary>
/// 是否需要二次分配
/// </summary>
public
string
NeedSecondAllot
{
get
;
set
;
}
}
}
performance/Performance.DtoModels/PerExcel/PerDataAccountBaisc.cs
View file @
c9cdca5e
...
...
@@ -232,6 +232,11 @@ public class PerDataAccountBaisc : IPerData
/// </summary>
public
Nullable
<
decimal
>
RealGiveFee
{
get
;
set
;
}
/// <summary>
/// 是否需要二次分配
/// </summary>
public
string
NeedSecondAllot
{
get
;
set
;
}
#
endregion
由计算得出
}
}
performance/Performance.DtoModels/PerExcel/PerDataLogisticsEmployee.cs
View file @
c9cdca5e
...
...
@@ -67,6 +67,11 @@ public class PerDataLogisticsEmployee : IPerData
public
Nullable
<
decimal
>
AdjustLaterOtherFee
{
get
;
set
;
}
/// <summary>
/// 是否需要二次分配
/// </summary>
public
string
NeedSecondAllot
{
get
;
set
;
}
/// <summary>
/// 行号
/// </summary>
public
int
RowNumber
{
get
;
set
;
}
...
...
performance/Performance.DtoModels/Request/HospitalRequest.cs
View file @
c9cdca5e
...
...
@@ -60,10 +60,10 @@ public class HospitalRequest
/// </summary>
public
Nullable
<
int
>
IsOpenCMIPercent
{
get
;
set
;
}
/// <summary>
/// 是否开启行政后勤二次绩效分配 1 启用 2 禁用
/// </summary>
public
Nullable
<
int
>
IsOpenLogisticsSecondAllot
{
get
;
set
;
}
///
//
<summary>
///
//
是否开启行政后勤二次绩效分配 1 启用 2 禁用
///
//
</summary>
//
public Nullable<int> IsOpenLogisticsSecondAllot { get; set; }
}
public
class
HospitalRequestValidator
:
AbstractValidator
<
HospitalRequest
>
...
...
performance/Performance.DtoModels/Request/UserRequest.cs
View file @
c9cdca5e
...
...
@@ -42,7 +42,11 @@ public class UserRequest
/// 角色
/// </summary>
public
int
Role
{
get
;
set
;
}
/// <summary>
/// 角色Arr
/// </summary>
public
int
[]
RoleArr
{
get
;
set
;
}
/// <summary>
/// 用户医院ID
/// </summary>
...
...
@@ -69,7 +73,7 @@ public UserRequestValidator()
RuleSet
(
"Insert"
,
()
=>
{
action
();
RuleFor
(
x
=>
x
.
Role
).
NotNull
().
NotEmpty
().
GreaterThan
(
0
);
RuleFor
(
x
=>
x
.
Role
Arr
).
NotNull
().
NotEmpty
(
);
RuleFor
(
x
=>
x
.
Password
).
NotNull
().
NotEmpty
().
Length
(
4
,
20
);
RuleFor
(
x
=>
x
.
HosIDArray
).
NotNull
().
NotEmpty
().
Must
(
f
=>
f
.
Length
>
0
);
});
...
...
@@ -80,7 +84,7 @@ public UserRequestValidator()
RuleFor
(
x
=>
x
.
ID
).
NotNull
().
NotEmpty
().
GreaterThan
(
0
);
RuleFor
(
x
=>
x
.
States
).
InclusiveBetween
(
1
,
2
);
//RuleFor(x => x.Password).Length(4, 20);
RuleFor
(
x
=>
x
.
Role
).
NotNull
().
NotEmpty
().
GreaterThan
(
0
);
RuleFor
(
x
=>
x
.
Role
Arr
).
NotNull
().
NotEmpty
(
);
RuleFor
(
x
=>
x
.
HosIDArray
).
NotNull
().
NotEmpty
().
Must
(
f
=>
f
.
Length
>
0
);
});
...
...
performance/Performance.DtoModels/Response/RoleResponse.cs
View file @
c9cdca5e
...
...
@@ -32,5 +32,7 @@ public class RoleResponse
/// 首页地址
/// </summary>
public
string
IndexUrl
{
get
;
set
;
}
public
int
Value
{
get
;
set
;
}
}
}
performance/Performance.DtoModels/Response/UserResponse.cs
View file @
c9cdca5e
...
...
@@ -17,5 +17,7 @@ public class UserResponse
public
string
Hospital
{
get
;
set
;
}
public
int
Role
{
get
;
set
;
}
public
string
Department
{
get
;
set
;
}
public
int
[]
RoleArr
{
get
;
set
;
}
}
}
performance/Performance.EntityModels/Entity/Sys_User.cs
View file @
c9cdca5e
...
...
@@ -70,5 +70,10 @@ public class sys_user
/// 删除状态 1可用 2删除
/// </summary>
public
Nullable
<
int
>
IsDelete
{
get
;
set
;
}
/// <summary>
/// 父级ID
/// </summary>
public
Nullable
<
int
>
ParentID
{
get
;
set
;
}
}
}
performance/Performance.EntityModels/Entity/ag_othersource.cs
View file @
c9cdca5e
//-----------------------------------------------------------------------
// <copyright file=" ag_othersource.cs">
// * FileName: 二次绩效其他绩效来源.cs
// * FileName: 二次绩效其他绩效来源.cs
// </copyright>
//-----------------------------------------------------------------------
using
System
;
using
System.ComponentModel.DataAnnotations
;
using
System.ComponentModel.DataAnnotations.Schema
;
namespace
Performance.EntityModels
namespace
Performance.EntityModels
{
/// <summary>
/// 二次绩效其他绩效来源
/// </summary>
[
Table
(
"ag_othersource"
)]
public
class
ag_othersource
public
class
ag_othersource
{
/// <summary>
///
///
/// </summary>
[
Key
]
public
int
Id
{
get
;
set
;
}
public
int
Id
{
get
;
set
;
}
/// <summary>
///
///
/// </summary>
public
Nullable
<
int
>
SecondId
{
get
;
set
;
}
/// <summary>
/// 工号
/// </summary>
public
string
WorkNumber
{
get
;
set
;
}
/// <summary>
/// 姓名
/// </summary>
public
string
Name
{
get
;
set
;
}
/// <summary>
/// 科室
/// </summary>
public
string
Department
{
get
;
set
;
}
/// <summary>
/// 职称
/// </summary>
public
string
WorkPost
{
get
;
set
;
}
/// <summary>
/// 职称绩效
/// </summary>
public
Nullable
<
decimal
>
TitlePerformance
{
get
;
set
;
}
/// <summary>
/// 工作量绩效工资
/// </summary>
public
Nullable
<
decimal
>
WorkPerformance
{
get
;
set
;
}
/// <summary>
/// 科室单项奖励
/// 科室单项奖励
(只读)
/// </summary>
public
Nullable
<
decimal
>
DeptReward
{
get
;
set
;
}
/// <summary>
/// 可分配绩效
/// </summary>
public
Nullable
<
decimal
>
DistPerformance
{
get
;
set
;
}
/// <summary>
/// 医院其他绩效
/// </summary>
public
Nullable
<
decimal
>
OtherPerformance
{
get
;
set
;
}
/// <summary>
/// 夜班工作量绩效
/// </summary>
public
Nullable
<
decimal
>
NightWorkPerformance
{
get
;
set
;
}
/// <summary>
/// 实发绩效工资金额
/// </summary>
...
...
@@ -90,5 +90,20 @@ public class ag_othersource
/// 预留金额
/// </summary>
public
Nullable
<
decimal
>
ReservedAmount
{
get
;
set
;
}
/// <summary>
/// 管理津贴
/// </summary>
public
Nullable
<
decimal
>
ManagementAllowance
{
get
;
set
;
}
/// <summary>
/// 单项奖励
/// </summary>
public
Nullable
<
decimal
>
IndividualReward
{
get
;
set
;
}
/// <summary>
/// 重点专科分配
/// </summary>
public
Nullable
<
decimal
>
AllocationOfKeySpecialty
{
get
;
set
;
}
}
}
performance/Performance.EntityModels/Entity/im_employee_logistics.cs
View file @
c9cdca5e
...
...
@@ -153,5 +153,10 @@ public class im_employee_logistics
/// 调节后其他绩效
/// </summary>
public
Nullable
<
decimal
>
AdjustLaterOtherFee
{
get
;
set
;
}
/// <summary>
/// 是否需要二次分配
/// </summary>
public
string
NeedSecondAllot
{
get
;
set
;
}
}
}
performance/Performance.EntityModels/Entity/res_account.cs
View file @
c9cdca5e
...
...
@@ -187,5 +187,10 @@ public class res_account
/// 变更日志
/// </summary>
public
string
ChangeLog
{
get
;
set
;
}
/// <summary>
/// 是否需要二次分配
/// </summary>
public
string
NeedSecondAllot
{
get
;
set
;
}
}
}
performance/Performance.EntityModels/Entity/res_compute.cs
View file @
c9cdca5e
...
...
@@ -223,5 +223,9 @@ public class res_compute
/// 调节后其他绩效
/// </summary>
public
Nullable
<
decimal
>
AdjustLaterOtherFee
{
get
;
set
;
}
/// <summary>
/// 是否需要二次分配 是 否
/// </summary>
public
string
NeedSecondAllot
{
get
;
set
;
}
}
}
performance/Performance.EntityModels/Entity/sys_hospital.cs
View file @
c9cdca5e
...
...
@@ -101,10 +101,10 @@ public class sys_hospital
/// </summary>
public
Nullable
<
int
>
IsShowSecondDirector
{
get
;
set
;
}
/// <summary>
/// 是否开启行政后勤二次绩效分配 1 启用 2 禁用
/// </summary>
public
Nullable
<
int
>
IsOpenLogisticsSecondAllot
{
get
;
set
;
}
///
//
<summary>
///
//
是否开启行政后勤二次绩效分配 1 启用 2 禁用
///
//
</summary>
//
public Nullable<int> IsOpenLogisticsSecondAllot { get; set; }
/// <summary>
/// 抽取项目是否在同一环境 1 是 2 否
...
...
performance/Performance.Extract.Api/Performance.Extract.Api.csproj
View file @
c9cdca5e
...
...
@@ -3,6 +3,7 @@
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
<UserSecretsId>3af57781-f816-4c0e-ab66-9b69387e7d35</UserSecretsId>
</PropertyGroup>
<ItemGroup>
...
...
performance/Performance.Extract.Api/Properties/PublishProfiles/FolderProfile.pubxml
View file @
c9cdca5e
...
...
@@ -14,6 +14,8 @@
<ExcludeApp_Data>
False
</ExcludeApp_Data>
<ProjectGuid>
a7ae6d0f-7b11-4eef-9fea-a279001ea54d
</ProjectGuid>
<publishUrl>
bin\Release\netcoreapp2.2\publish\
</publishUrl>
<DeleteExistingFiles>
False
</DeleteExistingFiles>
<DeleteExistingFiles>
True
</DeleteExistingFiles>
<TargetFramework>
netcoreapp2.2
</TargetFramework>
<SelfContained>
false
</SelfContained>
</PropertyGroup>
</Project>
\ No newline at end of file
performance/Performance.Services/AllotCompute/ProcessComputService.cs
View file @
c9cdca5e
...
...
@@ -377,6 +377,7 @@ public void ComputeOffice(per_allot allot, PerExcel excel)
dept
.
ScoringAverage
=
resAccount
?.
ScoringAverage
==
null
?
0
:
resAccount
.
ScoringAverage
;
dept
.
AdjustFactor
=
(
isBudget
?
adjust
:
resAccount
?.
AdjustFactor
)
??
1
;
dept
.
Income
=
empolyees
.
Sum
(
w
=>
w
.
PerforTotal
??
0
);
dept
.
NeedSecondAllot
=
empolyees
.
Any
(
w
=>
w
.
NeedSecondAllot
==
"是"
)
?
"是"
:
"否"
;
//dept.Extra = (extra ?? 0);
//dept.MedicineExtra = 0;// (drugExtra ?? 0);
//dept.MaterialsExtra = 0;//(materialsExtra ?? 0);
...
...
performance/Performance.Services/AllotCompute/ResultComputeService.cs
View file @
c9cdca5e
...
...
@@ -514,13 +514,18 @@ public void GenerateSecondAllot(per_allot allot)
List
<
ag_secondallot
>
insSecond
=
new
List
<
ag_secondallot
>();
List
<
ag_secondallot
>
updSecond
=
new
List
<
ag_secondallot
>();
var
types
=
new
List
<
int
>
{
(
int
)
UnitType
.
行政高层
,
(
int
)
UnitType
.
行政中层
};
// 获取医院是否开启后勤二次分配
var
hospital
=
hospitalRepository
.
GetEntity
(
w
=>
w
.
ID
==
allot
.
HospitalId
);
if
(
hospital
?.
IsOpenLogisticsSecondAllot
!=
1
)
types
.
Add
((
int
)
UnitType
.
行政后勤
);
var
types
=
new
List
<
int
>
{
(
int
)
UnitType
.
行政高层
,
(
int
)
UnitType
.
行政中层
,
(
int
)
UnitType
.
行政后勤
};
//
//
获取医院是否开启后勤二次分配
//
var hospital = hospitalRepository.GetEntity(w => w.ID == allot.HospitalId);
//
if (hospital?.IsOpenLogisticsSecondAllot != 1)
//
types.Add((int)UnitType.行政后勤);
var
accountUnit
=
perforResaccountRepository
.
GetEntities
(
t
=>
t
.
AllotID
==
allot
.
ID
&&
!
types
.
Contains
(
t
.
UnitType
.
Value
));
// 查询需要进行二次分配的行政后勤科室
var
xzAccountUnit
=
perforResaccountRepository
.
GetEntities
(
t
=>
t
.
AllotID
==
allot
.
ID
&&
t
.
UnitType
.
Value
==
(
int
)
UnitType
.
行政后勤
&&
t
.
NeedSecondAllot
==
"是"
);
if
(
xzAccountUnit
!=
null
&&
xzAccountUnit
.
Count
>
0
)
(
accountUnit
??
new
List
<
res_account
>()).
AddRange
(
xzAccountUnit
);
var
specialList
=
perforResspecialunitRepository
.
GetEntities
(
t
=>
t
.
AllotID
==
allot
.
ID
);
if
(
accountUnit
!=
null
)
...
...
performance/Performance.Services/CollectService.cs
View file @
c9cdca5e
...
...
@@ -30,6 +30,7 @@ public class CollectService : IAutoInjection
private
readonly
PerforCollectpermissionRepository
perforcollectpermissionRepository
;
private
readonly
PerforUserroleRepository
userroleRepository
;
private
readonly
PerforImaccountbasicRepository
perforImaccountbasicRepository
;
private
readonly
PerforPerdeptdicRepository
perforPerdeptdicRepository
;
private
readonly
SheetSevice
sheetSevice
;
private
readonly
Application
options
;
...
...
@@ -46,6 +47,7 @@ public class CollectService : IAutoInjection
PerforCollectpermissionRepository
perforcollectpermissionRepository
,
PerforUserroleRepository
userroleRepository
,
PerforImaccountbasicRepository
perforImaccountbasicRepository
,
PerforPerdeptdicRepository
perforPerdeptdicRepository
,
SheetSevice
sheetSevice
,
IOptions
<
Application
>
options
)
{
...
...
@@ -61,6 +63,7 @@ public class CollectService : IAutoInjection
this
.
perforcollectpermissionRepository
=
perforcollectpermissionRepository
;
this
.
userroleRepository
=
userroleRepository
;
this
.
perforImaccountbasicRepository
=
perforImaccountbasicRepository
;
this
.
perforPerdeptdicRepository
=
perforPerdeptdicRepository
;
this
.
sheetSevice
=
sheetSevice
;
this
.
options
=
options
.
Value
;
}
...
...
@@ -368,11 +371,27 @@ public HandsonTable GetCollectData(int userId, int allotId, string sheetName)
else
if
(
sheet
.
SheetType
==
(
int
)
SheetType
.
LogisticsEmployee
)
rowDatas
=
GetLogisticsEmployee
(
sheet
);
else
if
(
sheet
.
SheetType
==
(
int
)
SheetType
.
AccountBasic
)
rowDatas
=
GetAccountBasic
(
sheet
);
{
List
<
HandsonCellData
>
cells
=
new
List
<
HandsonCellData
>();
var
dept
=
perforPerdeptdicRepository
.
GetAccountBasicAccountingUnit
(
allot
.
HospitalId
);
rowDatas
=
GetAccountBasic
(
sheet
,
dept
,
cells
);
}
else
rowDatas
=
GetCommonData
(
sheet
);
}
//补全核算单元和类型
var
sTypes
=
new
[]
{
(
int
)
SheetType
.
AccountExtra
,
(
int
)
SheetType
.
PersonExtra
,
(
int
)
SheetType
.
AccountDrugAssess
,
(
int
)
SheetType
.
AccountMaterialsAssess
};
var
sTypeName
=
new
[]
{
"6.1目标考核"
,
"6.6 科室预算比例"
};
if
(
sTypes
.
Contains
((
int
)
sheet
.
SheetType
)
||
sTypeName
.
Contains
(
sheet
.
SheetName
))
{
List
<
HandsonCellData
>
cells
=
new
List
<
HandsonCellData
>();
var
perSheet
=
perforPersheetRepository
.
GetEntity
(
t
=>
t
.
AllotID
==
allotId
&&
t
.
SheetName
==
"4.1 临床科室医护绩效测算表"
);
var
dept
=
perforPerdeptdicRepository
.
GetAccountBasicAccountingUnit
(
allot
.
HospitalId
);
GetAccountBasic
(
perSheet
,
dept
,
cells
);
UnitFit
(
rowDatas
,
cells
,
sheet
);
}
if
(
rowDatas
==
null
||
!
rowDatas
.
Any
())
rowDatas
=
GetAccountExtra
(
allot
,
sheet
.
SheetType
.
Value
);
...
...
@@ -514,10 +533,11 @@ private HandsonRowData CreateRowData(int row, ColumnInfo[] columns, SortedDictio
return
xx
;
}
private
List
<
HandsonRowData
>
GetAccountBasic
(
per_sheet
sheet
)
private
List
<
HandsonRowData
>
GetAccountBasic
(
per_sheet
sheet
,
IEnumerable
<
per_dept_dic
>
dept
,
List
<
HandsonCellData
>
cells
)
{
//var accounts = sheetSevice.SheetExport(sheet.ID);
var
result
=
new
List
<
HandsonRowData
>();
var
groupAccount
=
perforImdataRepository
.
GetEntities
(
t
=>
t
.
SheetID
==
sheet
.
ID
);
//.OrderBy(c=>c.RowNumber).GroupBy(c => c.RowNumber);
if
(
groupAccount
!=
null
&&
groupAccount
.
Any
())
{
...
...
@@ -551,14 +571,28 @@ private List<HandsonRowData> GetAccountBasic(per_sheet sheet)
break
;
}
var
rowData
=
new
HandsonRowData
(
rowNumber
.
Value
,
data
);
result
.
Add
(
rowData
);
string
unit
=
""
;
string
type
=
""
;
foreach
(
var
cell
in
data
)
{
if
(
cell
.
Name
==
"核算单元"
)
{
unit
=
cell
.
Value
.
ToString
();
}
else
if
(
cell
.
Name
==
"核算单元类型"
)
{
type
=
cell
.
Value
.
ToString
();
}
}
cells
.
Add
(
new
HandsonCellData
(
unit
,
type
));
}
//var temps = accounts.Row.Select(item => new { row = item.Rownumber, dic = JsonHelper.Deserialize(item) });
//return new List<HandsonRowData>(temps.Select(temp => CreateRowData(temp.row, ExcelReadConfig.AccountBaisc, temp.dic)));
}
UnitFit
(
result
,
dept
,
cells
);
return
result
;
}
...
...
@@ -669,6 +703,110 @@ public void SaveCollectData(int allotId, SaveCollectData request)
return
result
;
}
private
void
UnitFit
(
List
<
HandsonRowData
>
rowDatas
,
IEnumerable
<
per_dept_dic
>
dept
,
List
<
HandsonCellData
>
cellDatas
)
{
var
rowCount
=
rowDatas
.
Count
;
List
<
HandsonRowData
>
suppRowDatas
=
new
List
<
HandsonRowData
>();
foreach
(
var
dic
in
dept
)
{
bool
exists
=
false
;
bool
exists2
=
false
;
foreach
(
var
rowData
in
rowDatas
)
{
foreach
(
var
cellData
in
rowData
.
CellData
)
{
//var cell = rowData.CellData.Where(c => c.Value == dic.AccountingUnit).ToList();
if
(
cellData
.
Value
?.
ToString
()
==
dic
.
AccountingUnit
)
{
exists
=
true
;
}
if
(
exists
&&
cellData
.
Value
?.
ToString
()
==
dic
.
UnitType
)
{
exists2
=
true
;
}
}
}
if
((
exists
==
false
&&
exists2
==
false
)
||
exists2
==
false
)
{
cellDatas
.
Add
(
new
HandsonCellData
(
dic
.
AccountingUnit
,
dic
.
UnitType
));
var
cells
=
new
List
<
HandsonCellData
>();
cells
.
Add
(
new
HandsonCellData
(
"核算单元"
,
dic
.
AccountingUnit
));
cells
.
Add
(
new
HandsonCellData
(
"核算单元类型"
,
dic
.
UnitType
));
suppRowDatas
.
Add
(
new
HandsonRowData
(
rowCount
++,
cells
));
}
}
cellDatas
.
Distinct
().
ToList
();
rowDatas
.
AddRange
(
suppRowDatas
);
}
private
void
UnitFit
(
List
<
HandsonRowData
>
rowDatas
,
List
<
HandsonCellData
>
cellDatas
,
per_sheet
sheet
)
{
var
rowCount
=
rowDatas
.
Count
;
List
<
HandsonRowData
>
suppRowDatas
=
new
List
<
HandsonRowData
>();
foreach
(
var
cell
in
cellDatas
)
{
bool
exists
=
false
;
bool
exists2
=
false
;
var
cells
=
new
List
<
HandsonCellData
>();
if
(
cell
.
Name
==
"总务科"
)
{
var
ss
=
1
;
}
foreach
(
var
rowData
in
rowDatas
)
{
foreach
(
var
cellData
in
rowData
.
CellData
)
{
//var cell = rowData.CellData.Where(c => c.Value == dic.AccountingUnit).ToList();
if
(
cellData
.
Value
?.
ToString
()
==
cell
.
Name
)
{
exists
=
true
;
}
if
(
cellData
.
Name
==
"核算单元分类"
&&
cellData
.
Value
==
cell
.
Value
)
{
exists2
=
true
;
}
else
if
(
cellData
.
Name
==
"核算组别"
&&
cellData
.
Value
==
cell
.
Value
)
{
exists2
=
true
;
}
else
if
(
cellData
.
Name
==
"核算单元类型"
&&
cellData
.
Value
==
cell
.
Value
)
{
exists2
=
true
;
}
else
{
exists2
=
true
;
}
}
}
if
(
exists
==
false
||
(
exists
==
false
&&
exists2
==
false
)
||
exists2
==
false
)
{
cells
.
Add
(
new
HandsonCellData
(
"核算单元"
,
cell
.
Name
));
if
(
sheet
.
SheetName
==
"5.2业务中层行政中高层医院奖罚"
)
{
cells
.
Add
(
new
HandsonCellData
(
"核算单元分类"
,
cell
.
Value
));
}
else
if
(
sheet
.
SheetName
==
"5.1 科室绩效医院奖罚"
)
{
cells
.
Add
(
new
HandsonCellData
(
"核算组别"
,
cell
.
Value
));
}
else
{
cells
.
Add
(
new
HandsonCellData
(
"核算单元类型"
,
cell
.
Value
));
}
suppRowDatas
.
Add
(
new
HandsonRowData
(++
rowCount
,
cells
));
}
}
rowDatas
.
AddRange
(
suppRowDatas
);
}
}
public
class
CollectDataConfig
...
...
performance/Performance.Services/ComputeService.cs
View file @
c9cdca5e
This diff is collapsed.
Click to expand it.
performance/Performance.Services/Details/SecondAllotDetails.cs
View file @
c9cdca5e
This diff is collapsed.
Click to expand it.
performance/Performance.Services/ExtractExcelService/ExtractHelper/ExtractHelper.cs
View file @
c9cdca5e
...
...
@@ -114,7 +114,6 @@ public static void ClearSheetPartialData(ISheet sheet, PerSheetPoint point, Shee
}
}
}
public
static
void
ClearSheetTemplate
(
ISheet
sheet
,
PerSheetPoint
point
,
SheetType
sheetType
)
{
if
(
sheet
==
null
)
...
...
@@ -155,7 +154,7 @@ public static void ClearSheetTemplate(ISheet sheet, PerSheetPoint point, SheetTy
sheet
.
ShiftRows
(
point
.
DataFirstRowNum
.
Value
,
sheet
.
LastRowNum
+
1
,
-
1
);
}
}
public
static
void
CloseAutoFilter
(
string
path
)
{
try
...
...
@@ -198,5 +197,6 @@ public static bool IsXlsxFile(string filename)
}
return
ext
.
ToLower
()
==
ExcelVersion
.
xlsx
.
ToString
().
ToLower
();
}
}
}
performance/Performance.Services/HospitalService.cs
View file @
c9cdca5e
...
...
@@ -134,7 +134,7 @@ public HospitalResponse Update(HospitalRequest request)
hospital
.
IsOpenDrugprop
=
request
.
IsOpenDrugprop
;
hospital
.
IsShowManage
=
request
.
IsShowManage
;
hospital
.
IsOpenCMIPercent
=
request
.
IsOpenCMIPercent
;
hospital
.
IsOpenLogisticsSecondAllot
=
request
.
IsOpenLogisticsSecondAllot
;
//
hospital.IsOpenLogisticsSecondAllot = request.IsOpenLogisticsSecondAllot;
//hospital.IsOpenIncome = request.IsOpenIncome;
if
(!
_hospitalRepository
.
Update
(
hospital
))
...
...
performance/Performance.Services/PerExcelService/ComputeEmpolyee/ComputeDirector.cs
View file @
c9cdca5e
...
...
@@ -512,6 +512,8 @@ public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, per_allot
if
(
AccountUnitType
.
行政高层
.
ToString
()
==
involve
||
AccountUnitType
.
行政中层
.
ToString
()
==
involve
)
{
// 行政高层、行政中层 默认不需要二次分配
compute
.
NeedSecondAllot
=
"否"
;
// 行政高层 行政中层 夜班费
compute
.
NightWorkPerfor
=
item
.
NightWorkPerfor
;
//考核前绩效
...
...
@@ -523,6 +525,8 @@ public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, per_allot
}
else
if
(
AccountUnitType
.
行政工勤
.
ToString
()
==
involve
)
{
// 行政工勤 根据测算表判读是否需要二次分配 默认不需要
compute
.
NeedSecondAllot
=
string
.
IsNullOrWhiteSpace
(
item
.
NeedSecondAllot
)
?
"否"
:
item
.
NeedSecondAllot
;
//考核前绩效
compute
.
PerforTotal
=
Math
.
Round
(
compute
.
BaiscNormValue
*
compute
.
PostCoefficient
*
compute
.
Attendance
+
compute
.
OtherPerfor
??
0
);
//考核后绩效 更加开关来控制显示
...
...
performance/Performance.Services/PerExcelService/ExcelReadConfig.cs
View file @
c9cdca5e
...
...
@@ -70,6 +70,7 @@ public class ExcelReadConfig
new
ColumnInfo
(
nameof
(
PerDataLogisticsEmployee
.
PostCoefficient
),
"岗位系数"
,
true
),
new
ColumnInfo
(
nameof
(
PerDataLogisticsEmployee
.
Attendance
),
"出勤率"
,
true
),
new
ColumnInfo
(
nameof
(
PerDataLogisticsEmployee
.
OthePerfor
),
"其他绩效"
,
true
),
new
ColumnInfo
(
nameof
(
PerDataLogisticsEmployee
.
NeedSecondAllot
),
"是否需要二次分配"
),
//new ColumnInfo(nameof(PerDataLogisticsEmployee.AdjustLaterOtherFee), "调节后其他绩效", true),
};
...
...
performance/Performance.Services/RoleService.cs
View file @
c9cdca5e
...
...
@@ -13,12 +13,15 @@ public class RoleService : IAutoInjection
{
private
PerforRoleRepository
_roleRepository
;
private
PerforUserroleRepository
_userroleRepository
;
private
PerforUserRepository
_userRepository
;
public
RoleService
(
PerforRoleRepository
roleRepository
,
PerforUserroleRepository
userroleRepository
)
PerforUserroleRepository
userroleRepository
,
PerforUserRepository
userRepository
)
{
this
.
_roleRepository
=
roleRepository
;
this
.
_userroleRepository
=
userroleRepository
;
_userRepository
=
userRepository
;
}
/// <summary>
...
...
@@ -51,5 +54,54 @@ public List<sys_role> GetRole(int userid)
return
roles
;
}
public
List
<
RoleResponse
>
GetUsersRole
(
int
userid
)
{
List
<
RoleResponse
>
roleResponses
=
new
List
<
RoleResponse
>();
var
user
=
_userRepository
.
GetEntity
(
c
=>
c
.
ID
==
userid
);
var
ParentUser
=
_userRepository
.
GetEntities
(
c
=>
c
.
ParentID
==
userid
);
if
(
user
.
ParentID
!=
null
||
user
.
ParentID
==
0
)
{
ParentUser
=
_userRepository
.
GetEntities
(
c
=>
c
.
ID
==
user
.
ParentID
);
}
if
(
user
!=
null
)
{
foreach
(
var
sysUser
in
ParentUser
)
{
var
useRoles
=
GetARole
(
sysUser
.
ID
);
var
role
=
Mapper
.
Map
<
RoleResponse
>(
useRoles
);
role
.
Value
=
sysUser
.
ID
;
roleResponses
.
Add
(
role
);
}
}
var
roles
=
GetARole
(
userid
);
if
(
roles
!=
null
)
{
var
role
=
Mapper
.
Map
<
RoleResponse
>(
roles
);
role
.
Value
=
userid
;
roleResponses
.
Add
(
role
);
}
return
roleResponses
;
}
/// <summary>
/// 获取用户角色
/// </summary>
/// <param name="userid"></param>
/// <returns></returns>
public
sys_role
GetARole
(
int
userid
)
{
if
(
userid
<=
0
)
throw
new
PerformanceException
(
$"userid:
{
userid
}
错误"
);
var
joinList
=
_userroleRepository
.
GetEntities
(
t
=>
t
.
UserID
==
userid
);
if
(
joinList
==
null
)
return
null
;
var
roles
=
_roleRepository
.
GetEntity
(
t
=>
joinList
.
Select
(
j
=>
j
.
RoleID
).
Contains
(
t
.
ID
));
return
roles
;
}
}
}
performance/Performance.Services/SecondAllotService.cs
View file @
c9cdca5e
...
...
@@ -1614,9 +1614,9 @@ private void SupplementSecondDetail(ag_secondallot second, List<per_employee> em
// return;
// 补充医院其他绩效 及 预留比例
var
perapramounts
=
perapramountRepository
.
GetEntities
(
t
=>
t
.
AllotId
==
second
.
AllotId
&&
t
.
Status
==
3
);
Func
<
per_employee
,
decimal
?>
getAprAmount
=
(
t
)
=>
second
.
Department
==
t
.
AccountingUnit
?
perapramounts
?.
Where
(
w
=>
w
.
PersonnelNumber
?.
Trim
()
==
t
.
PersonnelNumber
?.
Trim
()
)
?.
Sum
(
w
=>
w
.
Amount
)
:
0
;
Func
<
per_employee
,
decimal
?>
getAprAmount
=
(
t
)
=>
second
.
Department
==
t
.
AccountingUnit
?
perapramounts
?.
Where
(
w
=>
w
.
PersonnelNumber
?.
Trim
()
==
t
.
PersonnelNumber
?.
Trim
())?.
Sum
(
w
=>
w
.
Amount
)
:
0
;
var
distPerformance
=
rescomputeRepository
.
GetEntities
(
t
=>
t
.
AllotID
==
second
.
AllotId
&&
employees
.
Select
(
s
=>
s
.
PersonnelNumber
).
Contains
(
t
.
JobNumber
));
Func
<
per_employee
,
decimal
?>
getDistPerformance
=
(
t
)
=>
0
;
...
...
@@ -1671,6 +1671,9 @@ public List<ag_othersource> OtherSave(int secondId, List<ag_othersource> request
existEntities
.
First
(
t
=>
t
.
Id
==
item
.
Id
).
OtherPerformance
=
item
.
OtherPerformance
;
existEntities
.
First
(
t
=>
t
.
Id
==
item
.
Id
).
NightWorkPerformance
=
item
.
NightWorkPerformance
;
existEntities
.
First
(
t
=>
t
.
Id
==
item
.
Id
).
RealAmount
=
item
.
RealAmount
;
existEntities
.
First
(
t
=>
t
.
Id
==
item
.
Id
).
ManagementAllowance
=
item
.
ManagementAllowance
;
existEntities
.
First
(
t
=>
t
.
Id
==
item
.
Id
).
IndividualReward
=
item
.
IndividualReward
;
existEntities
.
First
(
t
=>
t
.
Id
==
item
.
Id
).
AllocationOfKeySpecialty
=
item
.
AllocationOfKeySpecialty
;
}
perforAgothersourceRepository
.
UpdateRange
(
existEntities
.
ToArray
());
...
...
performance/Performance.Services/UserService.cs
View file @
c9cdca5e
...
...
@@ -142,7 +142,7 @@ public List<UserResponse> GetUserList(int userID)
if
(
role
.
IsViewAllUsers
==
2
)
{
var
userlist
=
_userRepository
.
GetEntities
(
t
=>
t
.
CreateUser
==
userID
&&
t
.
IsDelete
==
1
);
var
userlist
=
_userRepository
.
GetEntities
(
t
=>
t
.
CreateUser
==
userID
&&
t
.
IsDelete
==
1
&&
(
t
.
ParentID
==
0
||
t
.
ParentID
==
null
)
);
result
=
Mapper
.
Map
<
List
<
UserResponse
>>(
userlist
);
}
else
...
...
@@ -151,7 +151,7 @@ public List<UserResponse> GetUserList(int userID)
if
(
hospitalIds
==
null
||
!
hospitalIds
.
Any
())
return
result
;
var
userIds
=
_userhospitalRepository
.
GetEntities
(
t
=>
hospitalIds
.
Contains
(
t
.
HospitalID
)).
Select
(
t
=>
t
.
UserID
).
Distinct
();
var
userlist
=
_userRepository
.
GetEntities
(
t
=>
t
.
ID
!=
userID
&&
userIds
.
Contains
(
t
.
ID
)
&&
t
.
IsDelete
==
1
);
var
userlist
=
_userRepository
.
GetEntities
(
t
=>
t
.
ID
!=
userID
&&
userIds
.
Contains
(
t
.
ID
)
&&
t
.
IsDelete
==
1
&&
(
t
.
ParentID
==
0
||
t
.
ParentID
==
null
)
);
result
=
Mapper
.
Map
<
List
<
UserResponse
>>(
userlist
);
}
if
(
result
!=
null
&&
result
.
Count
>
0
)
...
...
@@ -163,9 +163,26 @@ public List<UserResponse> GetUserList(int userID)
{
item
.
Hospital
=
string
.
Join
(
","
,
hoslist
.
Select
(
p
=>
p
.
HospitalID
.
Value
));
}
List
<
int
>
roleId
=
new
List
<
int
>();
var
userRole
=
_userroleRepository
.
GetEntity
(
t
=>
t
.
UserID
==
item
.
UserID
);
if
(
userRole
!=
null
)
{
item
.
Role
=
userRole
.
RoleID
;
roleId
.
Add
(
userRole
.
RoleID
);
}
var
diffUserRole
=
_userRepository
.
GetEntities
(
c
=>
c
.
ParentID
==
item
.
UserID
);
if
(
diffUserRole
!=
null
)
{
foreach
(
var
user
in
diffUserRole
)
{
var
diffRole
=
_userroleRepository
.
GetEntity
(
t
=>
t
.
UserID
==
user
.
ID
);
roleId
.
Add
(
diffRole
.
RoleID
);
}
}
item
.
RoleArr
=
roleId
?.
ToArray
();
}
}
return
result
;
...
...
@@ -496,5 +513,160 @@ public UserResponse ResetPwd(int userId, int loginUserId)
throw
new
PerformanceException
(
"重置失败"
);
return
Mapper
.
Map
<
UserResponse
>(
user
);
}
#
region
多角色
/// <summary>
/// 新增用户
/// </summary>
/// <param name="request"></param>
public
UserResponse
InsertUser
(
UserRequest
request
,
int
userid
)
{
if
(
null
!=
_userRepository
.
GetEntity
(
t
=>
t
.
Login
==
request
.
Login
&&
t
.
IsDelete
==
1
))
throw
new
PerformanceException
(
"登录名重复"
);
if
(
request
.
HosIDArray
.
Length
>
1
)
throw
new
PerformanceException
(
"二次绩效管理员只支持单家医院"
);
int
[]
roleArray
=
new
int
[]
{
application
.
NurseRole
,
application
.
DirectorRole
,
application
.
SpecialRole
,
application
.
OfficeRole
};
if
(
roleArray
.
Intersect
(
request
.
RoleArr
).
Any
()
&&
string
.
IsNullOrEmpty
(
request
.
Department
))
throw
new
PerformanceException
(
"二次绩效管理员科室不能为空"
);
var
user
=
Mapper
.
Map
<
sys_user
>(
request
);
user
.
CreateDate
=
DateTime
.
Now
;
user
.
CreateUser
=
userid
;
user
.
States
=
(
int
)
States
.
Enabled
;
user
.
Department
=
roleArray
.
Contains
(
request
.
RoleArr
[
0
])
?
request
.
Department
:
""
;
user
.
IsDelete
=
1
;
if
(!
_userRepository
.
Add
(
user
))
throw
new
PerformanceException
(
"保存失败"
);
//添加用户角色关联关系
_userroleRepository
.
Add
(
new
sys_user_role
{
UserID
=
user
.
ID
,
RoleID
=
request
.
RoleArr
[
0
]
});
//添加用户医院
SetHospital
(
user
.
ID
,
request
.
HosIDArray
);
var
userID
=
user
.
ID
;
for
(
int
i
=
1
;
i
<
request
.
RoleArr
.
Length
;
i
++)
{
user
.
Login
=
request
.
Login
+
i
;
user
.
ParentID
=
userID
;
user
.
Department
=
roleArray
.
Contains
(
request
.
RoleArr
[
i
])
?
request
.
Department
:
""
;
user
.
ID
++;
_userRepository
.
Add
(
user
);
//添加用户角色关联关系
_userroleRepository
.
Add
(
new
sys_user_role
{
UserID
=
user
.
ID
,
RoleID
=
request
.
RoleArr
[
i
]
});
//添加用户医院
SetHospital
(
user
.
ID
,
request
.
HosIDArray
);
}
return
Mapper
.
Map
<
UserResponse
>(
user
);
}
/// <summary>
/// 修改用户
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public
UserResponse
UpdateUser
(
UserRequest
request
,
bool
isAgainAdmin
)
{
var
user
=
_userRepository
.
GetEntity
(
t
=>
t
.
ID
==
request
.
ID
&&
t
.
IsDelete
==
1
);
if
(
null
==
user
)
throw
new
PerformanceException
(
$"用户不存在 UserId:
{
request
.
ID
}
"
);
var
vlist
=
_userRepository
.
GetEntities
(
t
=>
t
.
ID
!=
user
.
ID
&&
t
.
Login
==
request
.
Login
&&
t
.
IsDelete
==
1
);
if
(
null
!=
vlist
&&
vlist
.
Count
()
>
0
)
throw
new
PerformanceException
(
"登录名重复"
);
if
(
isAgainAdmin
&&
string
.
IsNullOrEmpty
(
request
.
Department
))
throw
new
PerformanceException
(
"二次绩效管理员科室不能为空"
);
if
(
isAgainAdmin
&&
request
.
HosIDArray
.
Length
>
1
)
throw
new
PerformanceException
(
"二次绩效管理员只支持单家医院"
);
int
[]
roleArray
=
new
int
[]
{
application
.
NurseRole
,
application
.
DirectorRole
,
application
.
SpecialRole
,
application
.
OfficeRole
};
user
.
Login
=
request
.
Login
;
user
.
Mobile
=
request
.
Mobile
;
user
.
RealName
=
request
.
RealName
;
user
.
Mail
=
request
.
Mail
;
user
.
States
=
request
.
States
;
user
.
Password
=
string
.
IsNullOrEmpty
(
request
.
Password
)
?
user
.
Password
:
request
.
Password
;
user
.
Department
=
roleArray
.
Contains
(
request
.
RoleArr
[
0
])
?
request
.
Department
:
""
;
if
(!
_userRepository
.
Update
(
user
))
throw
new
PerformanceException
(
"保存失败"
);
//删除用户角色关联关系
var
userRole
=
_userroleRepository
.
GetEntity
(
t
=>
t
.
UserID
==
user
.
ID
);
if
(
null
!=
userRole
)
_userroleRepository
.
Remove
(
userRole
);
//添加用户角色关联关系
_userroleRepository
.
Add
(
new
sys_user_role
{
UserID
=
user
.
ID
,
RoleID
=
request
.
RoleArr
[
0
]
});
//添加用户医院
SetHospital
(
user
.
ID
,
request
.
HosIDArray
);
//删除子用户角色关联关系
var
userSubset
=
_userRepository
.
GetEntities
(
c
=>
c
.
ParentID
==
user
.
ID
);
if
(
userSubset
!=
null
)
{
foreach
(
var
item
in
userSubset
)
{
var
diffUserRole
=
_userroleRepository
.
GetEntity
(
t
=>
t
.
UserID
==
item
.
ID
);
if
(
null
!=
diffUserRole
)
_userroleRepository
.
Remove
(
diffUserRole
);
}
_userRepository
.
RemoveRange
(
userSubset
.
ToArray
());
}
var
userID
=
user
.
ID
;
var
userLogin
=
user
.
Login
;
for
(
int
i
=
1
;
i
<
request
.
RoleArr
.
Length
;
i
++)
{
sys_user
diffUser
=
new
sys_user
();
diffUser
.
CreateDate
=
DateTime
.
Now
;
diffUser
.
CreateUser
=
user
.
CreateUser
;
diffUser
.
IsDelete
=
1
;
diffUser
.
Login
=
userLogin
+
i
;
diffUser
.
ParentID
=
userID
;
diffUser
.
Mobile
=
request
.
Mobile
;
diffUser
.
RealName
=
request
.
RealName
;
diffUser
.
Mail
=
request
.
Mail
;
diffUser
.
States
=
request
.
States
;
diffUser
.
Password
=
string
.
IsNullOrEmpty
(
request
.
Password
)
?
user
.
Password
:
request
.
Password
;
diffUser
.
Department
=
roleArray
.
Contains
(
request
.
RoleArr
[
0
])
?
request
.
Department
:
""
;
if
(!
_userRepository
.
Add
(
diffUser
))
throw
new
PerformanceException
(
"保存失败"
);
//添加子用户角色关联关系
_userroleRepository
.
Add
(
new
sys_user_role
{
UserID
=
diffUser
.
ID
,
RoleID
=
request
.
RoleArr
[
i
]
});
//添加子用户医院
SetHospital
(
diffUser
.
ID
,
request
.
HosIDArray
);
}
return
Mapper
.
Map
<
UserResponse
>(
user
);
}
public
ApiResponse
DeleteUser
(
int
iD
)
{
var
user
=
_userRepository
.
GetEntity
(
t
=>
t
.
ID
==
iD
&&
t
.
IsDelete
==
1
);
if
(
null
==
user
)
throw
new
PerformanceException
(
$"用户不存在 UserId:
{
iD
}
"
);
user
.
IsDelete
=
2
;
var
result
=
_userRepository
.
Remove
(
user
);
var
users
=
_userRepository
.
GetEntities
(
t
=>
t
.
ParentID
==
user
.
ID
&&
t
.
IsDelete
==
1
)?.
ToArray
();
if
(
users
!=
null
)
{
_userRepository
.
RemoveRange
(
users
);
foreach
(
var
item
in
users
)
{
var
userRole
=
_userroleRepository
.
GetEntity
(
t
=>
t
.
UserID
==
item
.
ID
);
if
(
null
!=
userRole
)
_userroleRepository
.
Remove
(
userRole
);
}
}
return
result
?
new
ApiResponse
(
ResponseType
.
OK
)
:
new
ApiResponse
(
ResponseType
.
Fail
);
}
#
endregion
}
}
\ No newline at end of file
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