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
6193a529
Commit
6193a529
authored
Apr 01, 2022
by
ruyun.zhang@suvalue.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
科室考勤统计
parent
0dd00ae3
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
206 additions
and
160 deletions
+206
-160
performance/Performance.Api/Controllers/AttendanceController.cs
+15
-16
performance/Performance.Api/wwwroot/Performance.EntityModels.xml
+55
-0
performance/Performance.DtoModels/Enum.cs
+15
-0
performance/Performance.EntityModels/Entity/per_attendance_type.cs
+4
-1
performance/Performance.EntityModels/Other/view_attendance.cs
+51
-1
performance/Performance.Services/AttendanceService.cs
+66
-142
No files found.
performance/Performance.Api/Controllers/AttendanceController.cs
View file @
6193a529
...
@@ -34,8 +34,8 @@ AttendanceService attendanceService
...
@@ -34,8 +34,8 @@ AttendanceService attendanceService
public
ApiResponse
GetAttendance
(
int
allotId
)
public
ApiResponse
GetAttendance
(
int
allotId
)
{
{
// 查询考勤视图,并按照设计图做格式转换 仅查询开始结束
// 查询考勤视图,并按照设计图做格式转换 仅查询开始结束
var
result
=
_attendanceService
.
GetAttendance
(
allotId
);
var
result
=
_attendanceService
.
GetAttendance
(
allotId
);
if
(
result
!=
null
)
if
(
result
!=
null
)
{
{
return
new
ApiResponse
(
ResponseType
.
OK
,
result
);
return
new
ApiResponse
(
ResponseType
.
OK
,
result
);
}
}
...
@@ -69,7 +69,7 @@ public ApiResponse GetCallIn(int allotId)
...
@@ -69,7 +69,7 @@ public ApiResponse GetCallIn(int allotId)
public
ApiResponse
GetBatchCallInHandsonTable
()
public
ApiResponse
GetBatchCallInHandsonTable
()
{
{
// 返回HandsonTable格式调动记录
// 返回HandsonTable格式调动记录
return
new
ApiResponse
(
ResponseType
.
OK
,
_attendanceService
.
GetBatchCallInHandsonTable
());
return
new
ApiResponse
(
ResponseType
.
OK
,
_attendanceService
.
GetBatchCallInHandsonTable
());
}
}
/// <summary>
/// <summary>
...
@@ -80,7 +80,7 @@ public ApiResponse GetBatchCallInHandsonTable()
...
@@ -80,7 +80,7 @@ public ApiResponse GetBatchCallInHandsonTable()
/// <param name="request"></param>
/// <param name="request"></param>
/// <returns></returns>
/// <returns></returns>
[
HttpPost
(
"CallIn/Batch/{allotId}"
)]
[
HttpPost
(
"CallIn/Batch/{allotId}"
)]
public
ApiResponse
BatchCallIn
(
int
allotId
,
int
hospitalId
,
SaveCollectData
request
)
public
ApiResponse
BatchCallIn
(
int
allotId
,
int
hospitalId
,
SaveCollectData
request
)
{
{
// obj自己定义结构
// obj自己定义结构
// 批量插入调动记录,插入前需要删除所有后重新插入
// 批量插入调动记录,插入前需要删除所有后重新插入
...
@@ -89,7 +89,7 @@ public ApiResponse BatchCallIn(int allotId,int hospitalId,SaveCollectData reques
...
@@ -89,7 +89,7 @@ public ApiResponse BatchCallIn(int allotId,int hospitalId,SaveCollectData reques
// 需要验证核算组别和核算单元是否与“核算单元及组别”(cof_accounting)完全匹配,不匹配则返回表格错误提示
// 需要验证核算组别和核算单元是否与“核算单元及组别”(cof_accounting)完全匹配,不匹配则返回表格错误提示
// 表格错误提醒参考PersonService.CreatePerson方法
// 表格错误提醒参考PersonService.CreatePerson方法
return
_attendanceService
.
BatchCallIn
(
allotId
,
hospitalId
,
request
);
return
_attendanceService
.
BatchCallIn
(
allotId
,
hospitalId
,
request
);
}
}
#
endregion
#
endregion
...
@@ -103,7 +103,7 @@ public ApiResponse BatchCallIn(int allotId,int hospitalId,SaveCollectData reques
...
@@ -103,7 +103,7 @@ public ApiResponse BatchCallIn(int allotId,int hospitalId,SaveCollectData reques
[
HttpGet
(
"Type/{allotId},{hospitalId}"
)]
[
HttpGet
(
"Type/{allotId},{hospitalId}"
)]
public
ApiResponse
GetAttendanceType
(
int
allotId
,
int
hospitalId
)
public
ApiResponse
GetAttendanceType
(
int
allotId
,
int
hospitalId
)
{
{
return
new
ApiResponse
(
ResponseType
.
OK
,
_attendanceService
.
GetAttendanceType
(
allotId
,
hospitalId
));
return
new
ApiResponse
(
ResponseType
.
OK
,
_attendanceService
.
GetAttendanceType
(
allotId
,
hospitalId
));
}
}
/// <summary>
/// <summary>
/// 新增或修改考勤类型
/// 新增或修改考勤类型
...
@@ -113,7 +113,7 @@ public ApiResponse GetAttendanceType(int allotId, int hospitalId)
...
@@ -113,7 +113,7 @@ public ApiResponse GetAttendanceType(int allotId, int hospitalId)
/// <param name="attendanceType"></param>
/// <param name="attendanceType"></param>
/// <returns></returns>
/// <returns></returns>
[
HttpPost
(
"Type/Edit/{allotId},{hospitalId}"
)]
[
HttpPost
(
"Type/Edit/{allotId},{hospitalId}"
)]
public
ApiResponse
InsertAttendanceType
(
int
allotId
,
int
hospitalId
,
AttendanceType
attendanceType
)
public
ApiResponse
InsertAttendanceType
(
int
allotId
,
int
hospitalId
,
AttendanceType
attendanceType
)
{
{
// obj自己定义结构
// obj自己定义结构
return
_attendanceService
.
InsertAttendanceType
(
allotId
,
hospitalId
,
attendanceType
);
return
_attendanceService
.
InsertAttendanceType
(
allotId
,
hospitalId
,
attendanceType
);
...
@@ -140,7 +140,7 @@ public ApiResponse DeleteAttendanceType(int id)
...
@@ -140,7 +140,7 @@ public ApiResponse DeleteAttendanceType(int id)
public
ApiResponse
GetAttendanceVacationHandsonTable
()
public
ApiResponse
GetAttendanceVacationHandsonTable
()
{
{
// 返回HandsonTable格式考勤记录
// 返回HandsonTable格式考勤记录
return
new
ApiResponse
(
ResponseType
.
OK
,
_attendanceService
.
GetAttendanceVacationHandsonTable
());
return
new
ApiResponse
(
ResponseType
.
OK
,
_attendanceService
.
GetAttendanceVacationHandsonTable
());
}
}
/// <summary>
/// <summary>
...
@@ -150,9 +150,9 @@ public ApiResponse GetAttendanceVacationHandsonTable()
...
@@ -150,9 +150,9 @@ public ApiResponse GetAttendanceVacationHandsonTable()
/// <param name="hospitalId"></param>
/// <param name="hospitalId"></param>
/// <returns></returns>
/// <returns></returns>
[
HttpGet
(
"Vacation/{allotId},{hospitalId}"
)]
[
HttpGet
(
"Vacation/{allotId},{hospitalId}"
)]
public
ApiResponse
GetAttendanceVacation
(
int
allotId
,
int
hospitalId
)
public
ApiResponse
GetAttendanceVacation
(
int
allotId
,
int
hospitalId
)
{
{
return
new
ApiResponse
(
ResponseType
.
OK
,
_attendanceService
.
GetAttendanceVacation
(
allotId
,
hospitalId
));
return
new
ApiResponse
(
ResponseType
.
OK
,
_attendanceService
.
GetAttendanceVacation
(
allotId
,
hospitalId
));
}
}
/// <summary>
/// <summary>
...
@@ -163,7 +163,7 @@ public ApiResponse GetAttendanceVacation(int allotId,int hospitalId)
...
@@ -163,7 +163,7 @@ public ApiResponse GetAttendanceVacation(int allotId,int hospitalId)
/// <param name="request"></param>
/// <param name="request"></param>
/// <returns></returns>
/// <returns></returns>
[
HttpPost
(
"Vacation/Batch/{allotId}"
)]
[
HttpPost
(
"Vacation/Batch/{allotId}"
)]
public
ApiResponse
AttendanceBatch
(
int
allotId
,
int
hospitalId
,
SaveCollectData
request
)
public
ApiResponse
AttendanceBatch
(
int
allotId
,
int
hospitalId
,
SaveCollectData
request
)
{
{
// obj自己定义结构
// obj自己定义结构
// 批量插入考勤记录,插入前需要删除所有后重新插入
// 批量插入考勤记录,插入前需要删除所有后重新插入
...
@@ -171,21 +171,20 @@ public ApiResponse AttendanceBatch(int allotId,int hospitalId, SaveCollectData r
...
@@ -171,21 +171,20 @@ public ApiResponse AttendanceBatch(int allotId,int hospitalId, SaveCollectData r
// 需要验证工号和姓名是否与“人员字典”(per_employee)完全匹配,不匹配则返回表格错误提示
// 需要验证工号和姓名是否与“人员字典”(per_employee)完全匹配,不匹配则返回表格错误提示
// 表格错误提醒参考PersonService.CreatePerson方法
// 表格错误提醒参考PersonService.CreatePerson方法
return
new
ApiResponse
(
ResponseType
.
OK
,
_attendanceService
.
AttendanceBatch
(
allotId
,
hospitalId
,
request
));
return
new
ApiResponse
(
ResponseType
.
OK
,
_attendanceService
.
AttendanceBatch
(
allotId
,
hospitalId
,
request
));
}
}
#
endregion
#
endregion
/// <summary>
/// <summary>
/// 考勤结果统计
/// 考勤结果统计
/// </summary>
/// </summary>
/// <param name="allotId"></param>
/// <param name="allotId"></param>
/// <param name="hospitalId"></param>
/// <returns></returns>
/// <returns></returns>
[
HttpGet
(
"statistics/{allotId}"
)]
[
HttpGet
(
"statistics/{allotId}"
)]
public
ApiResponse
GetAttendanceStatistics
(
int
allotId
,
int
hospitalId
)
public
ApiResponse
GetAttendanceStatistics
(
int
allotId
)
{
{
// 返回结果参考接口 employee/apr/getdeptdetail
// 返回结果参考接口 employee/apr/getdeptdetail
return
_attendanceService
.
GetAttendanceStatistics
(
allotId
,
hospitalId
);
return
_attendanceService
.
GetAttendanceStatistics
(
allotId
);
}
}
}
}
}
}
performance/Performance.Api/wwwroot/Performance.EntityModels.xml
View file @
6193a529
...
@@ -6120,6 +6120,11 @@
...
@@ -6120,6 +6120,11 @@
验证失败描述
验证失败描述
</summary>
</summary>
</member>
</member>
<member
name=
"P:Performance.EntityModels.Entity.per_attendance_type.IsDeduction"
>
<summary>
是否核减出勤 1 核减 2 不核减
</summary>
</member>
<member
name=
"T:Performance.EntityModels.per_batch"
>
<member
name=
"T:Performance.EntityModels.per_batch"
>
<summary>
<summary>
分批发放记录
分批发放记录
...
@@ -8845,6 +8850,56 @@
...
@@ -8845,6 +8850,56 @@
</summary>
</summary>
</member>
</member>
<member
name=
"P:Performance.EntityModels.Other.AttendanceStatistics.UnitType"
>
<summary>
核算组别
</summary>
</member>
<member
name=
"P:Performance.EntityModels.Other.AttendanceStatistics.AccountingUnit"
>
<summary>
核算单元
</summary>
</member>
<member
name=
"P:Performance.EntityModels.Other.AttendanceStatistics.Department"
>
<summary>
科室名称
</summary>
</member>
<member
name=
"P:Performance.EntityModels.Other.AttendanceStatistics.PersonnelNumber"
>
<summary>
工号
</summary>
</member>
<member
name=
"P:Performance.EntityModels.Other.AttendanceStatistics.PersonnelName"
>
<summary>
姓名
</summary>
</member>
<member
name=
"P:Performance.EntityModels.Other.AttendanceStatistics.BeginDate"
>
<summary>
在科开始时间
</summary>
</member>
<member
name=
"P:Performance.EntityModels.Other.AttendanceStatistics.EndDate"
>
<summary>
在科结束时间
</summary>
</member>
<member
name=
"P:Performance.EntityModels.Other.AttendanceStatisticsDetial.Value"
>
<summary>
请假天数
</summary>
</member>
<member
name=
"P:Performance.EntityModels.Other.AttendanceStatisticsDetial.Title"
>
<summary>
考勤类型
</summary>
</member>
<member
name=
"P:Performance.EntityModels.Other.AttendanceStatisticsDetial.Remark"
>
<summary>
备注
</summary>
</member>
<member
name=
"P:Performance.EntityModels.HisData.HisDepartment"
>
<member
name=
"P:Performance.EntityModels.HisData.HisDepartment"
>
<summary>
<summary>
His科室
His科室
...
...
performance/Performance.DtoModels/Enum.cs
View file @
6193a529
...
@@ -155,4 +155,19 @@ public enum Status
...
@@ -155,4 +155,19 @@ public enum Status
超时
=
99
,
超时
=
99
,
}
}
}
}
public
class
Attendance
{
public
enum
Type
{
开始
,
调入
,
结束
,
}
public
enum
Deduction
{
核减
=
1
,
不核减
=
2
,
}
}
}
}
performance/Performance.EntityModels/Entity/per_attendance_type.cs
View file @
6193a529
...
@@ -16,6 +16,9 @@ public class per_attendance_type
...
@@ -16,6 +16,9 @@ public class per_attendance_type
public
int
HospitalId
{
get
;
set
;
}
//医院Id
public
int
HospitalId
{
get
;
set
;
}
//医院Id
public
int
AllotId
{
get
;
set
;
}
//绩效Id
public
int
AllotId
{
get
;
set
;
}
//绩效Id
public
string
AttendanceName
{
get
;
set
;
}
//考勤类型名称
public
string
AttendanceName
{
get
;
set
;
}
//考勤类型名称
public
int
IsDeduction
{
get
;
set
;
}
//是否核减出勤 1 核减 2 不核减
/// <summary>
/// 是否核减出勤 1 核减 2 不核减
/// </summary>
public
int
IsDeduction
{
get
;
set
;
}
}
}
}
}
performance/Performance.EntityModels/Other/view_attendance.cs
View file @
6193a529
...
@@ -86,7 +86,57 @@ public class Detail
...
@@ -86,7 +86,57 @@ public class Detail
public
DateTime
EndDate
{
get
;
set
;
}
public
DateTime
EndDate
{
get
;
set
;
}
public
int
IsDeduction
{
get
;
set
;
}
public
int
IsDeduction
{
get
;
set
;
}
public
int
VacationDays
{
get
;
set
;
}
public
int
VacationDays
{
get
;
set
;
}
}
public
class
AttendanceStatistics
{
public
int
AllotID
{
get
;
set
;
}
/// <summary>
/// 核算组别
/// </summary>
public
string
UnitType
{
get
;
set
;
}
/// <summary>
/// 核算单元
/// </summary>
public
string
AccountingUnit
{
get
;
set
;
}
/// <summary>
/// 科室名称
/// </summary>
public
string
Department
{
get
;
set
;
}
/// <summary>
/// 工号
/// </summary>
public
string
PersonnelNumber
{
get
;
set
;
}
/// <summary>
/// 姓名
/// </summary>
public
string
PersonnelName
{
get
;
set
;
}
/// <summary>
/// 在科开始时间
/// </summary>
public
DateTime
BeginDate
{
get
;
set
;
}
/// <summary>
/// 在科结束时间
/// </summary>
public
DateTime
EndDate
{
get
;
set
;
}
public
List
<
AttendanceStatisticsDetial
>
Detial
{
get
;
set
;
}
}
public
class
AttendanceStatisticsDetial
{
/// <summary>
/// 请假天数
/// </summary>
public
int
Value
{
get
;
set
;
}
/// <summary>
/// 考勤类型
/// </summary>
public
string
Title
{
get
;
set
;
}
/// <summary>
/// 备注
/// </summary>
public
string
Remark
{
get
;
set
;
}
}
}
...
...
performance/Performance.Services/AttendanceService.cs
View file @
6193a529
...
@@ -469,150 +469,86 @@ public ApiResponse AttendanceBatch(int allotId, int hospitalId, SaveCollectData
...
@@ -469,150 +469,86 @@ public ApiResponse AttendanceBatch(int allotId, int hospitalId, SaveCollectData
}
}
#
endregion
#
endregion
public
ApiResponse
GetAttendanceStatistics
(
int
allotId
,
int
hospitalId
)
public
ApiResponse
GetAttendanceStatistics
(
int
allotId
)
{
{
var
attendanceData
=
perforPerallotRepository
.
GetAttendance
(
allotId
);
var
allot
=
perforPerallotRepository
.
GetEntity
(
w
=>
w
.
ID
==
allotId
);
//if (view_attendance == null || !view_attendance.Any()) return new AttendanceResponse<List<InitialAttendance>>();
if
(
allot
==
null
)
throw
new
PerformanceException
(
"当前绩效记录不存在"
);
var
attendances
=
new
List
<
InitialAttendance
>();
var
types
=
perfoPperAttendanceTypeRepository
.
GetEntities
(
t
=>
t
.
AllotId
==
allotId
)
??
new
List
<
per_attendance_type
>();
foreach
(
var
item
in
attendanceData
)
var
vacationeData
=
perfoPperAttendanceVacationeRepository
.
GetEntities
(
t
=>
t
.
AllotId
==
allotId
)
??
new
List
<
per_attendance_vacation
>();
// 只关注请假的人
var
numbers
=
vacationeData
.
Select
(
w
=>
w
.
PersonnelNumber
).
ToList
();
var
attendanceData
=
perforPerallotRepository
.
GetAttendance
(
allotId
)
.
Where
(
w
=>
numbers
.
Contains
(
w
.
PersonnelNumber
))
.
ToList
();
List
<
AttendanceStatistics
>
statistics
=
new
List
<
AttendanceStatistics
>();
// 交叉补全科室结束时间
foreach
(
var
personnelNumber
in
attendanceData
.
Select
(
w
=>
w
.
PersonnelNumber
).
Distinct
())
{
{
if
(!
item
.
Source
.
Contains
(
"结束"
))
var
attendances
=
attendanceData
.
Where
(
w
=>
w
.
PersonnelNumber
==
personnelNumber
).
OrderBy
(
w
=>
w
.
AttendanceDate
);
for
(
int
i
=
0
;
i
<
attendances
.
Count
()
-
1
;
i
++)
{
{
var
temp
=
new
InitialAttendance
var
begDate
=
attendances
.
ElementAt
(
i
).
AttendanceDate
.
Value
.
Date
;
{
var
endDate
=
attendances
.
ElementAt
(
i
+
1
).
AttendanceDate
.
Value
.
Date
;
AccountingUnit
=
item
.
AccountingUnit
,
// 调入科室需要额外减去1天作为上一个科室结束时间
Department
=
item
.
Department
,
var
days
=
attendances
.
ElementAt
(
i
+
1
).
Source
==
Attendance
.
Type
.
调入
.
ToString
()
?
-
1
:
0
;
PersonnelName
=
item
.
PersonnelName
,
if
(
endDate
>
begDate
)
PersonnelNumber
=
item
.
PersonnelNumber
,
UnitType
=
item
.
UnitType
,
};
var
select
=
attendanceData
.
Where
(
t
=>
t
.
PersonnelNumber
==
item
.
PersonnelNumber
&&
t
.
AccountingUnit
==
item
.
AccountingUnit
);
if
(
item
.
Source
.
Contains
(
"开始"
)
&&
!
select
.
Any
(
t
=>
t
.
Source
.
Contains
(
"结束"
)))
{
{
var
callInDate
=
attendanceData
.
FirstOrDefault
(
t
=>
t
.
PersonnelNumber
==
item
.
PersonnelNumber
&&
t
.
AttendanceDate
>=
item
.
AttendanceDate
&&
t
.
Source
.
Contains
(
"调入"
)).
AttendanceDate
;
var
stat
=
new
AttendanceStatistics
temp
.
StartDate
=
item
.
AttendanceDate
;
{
temp
.
EndDate
=
callInDate
;
AllotID
=
attendances
.
ElementAt
(
i
).
ALLOTID
,
}
UnitType
=
attendances
.
ElementAt
(
i
).
UnitType
,
else
if
(
item
.
Source
.
Contains
(
"调入"
)
&&
!
select
.
Any
(
t
=>
t
.
Source
.
Contains
(
"开始"
)))
AccountingUnit
=
attendances
.
ElementAt
(
i
).
AccountingUnit
,
{
Department
=
attendances
.
ElementAt
(
i
).
Department
,
var
endDate
=
attendanceData
.
FirstOrDefault
(
t
=>
t
.
PersonnelNumber
==
item
.
PersonnelNumber
&&
t
.
AttendanceDate
>=
item
.
AttendanceDate
&&
t
.
Source
.
Contains
(
"结束"
));
PersonnelNumber
=
attendances
.
ElementAt
(
i
).
PersonnelNumber
,
temp
.
StartDate
=
item
.
AttendanceDate
;
PersonnelName
=
attendances
.
ElementAt
(
i
).
PersonnelName
,
temp
.
EndDate
=
endDate
.
AttendanceDate
;
BeginDate
=
begDate
,
temp
.
Department
=
endDate
.
Department
;
EndDate
=
endDate
.
AddDays
(
days
),
Detial
=
new
List
<
AttendanceStatisticsDetial
>()
}
};
else
statistics
.
Add
(
stat
);
{
temp
.
StartDate
=
select
.
FirstOrDefault
(
data
=>
data
.
Source
.
Contains
(
"开始"
)).
AttendanceDate
;
temp
.
EndDate
=
select
.
FirstOrDefault
(
data
=>
data
.
Source
.
Contains
(
"结束"
)).
AttendanceDate
;
}
}
attendances
.
Add
(
temp
);
}
}
}
}
var
type
=
perfoPperAttendanceTypeRepository
.
GetEntities
(
t
=>
t
.
AllotId
==
allotId
&&
t
.
HospitalId
==
hospitalId
);
var
vacatione
=
perfoPperAttendanceVacationeRepository
.
GetEntities
(
t
=>
t
.
AllotId
==
allotId
&&
t
.
HospitalId
==
hospitalId
);
var
attendancesJoinVacatione
=
from
a
in
attendances
var
vacationes
=
vacationeData
join
b
in
vacatione
on
a
.
PersonnelNumber
equals
b
.
PersonnelNumber
into
temp
.
Where
(
w
=>
w
.
BegDate
.
HasValue
&&
w
.
EndDate
.
HasValue
)
from
aleftjoinb
in
temp
.
DefaultIfEmpty
()
.
Select
(
w
=>
new
join
c
in
type
on
aleftjoinb
?.
TypeId
equals
c
.
Id
into
temp2
from
bleftjoinc
in
temp2
.
DefaultIfEmpty
()
select
new
InitialAttendanceJoin
{
AccountingUnit
=
a
.
AccountingUnit
,
Department
=
a
.
Department
,
PersonnelName
=
a
.
PersonnelName
,
PersonnelNumber
=
a
.
PersonnelNumber
,
UnitType
=
a
.
UnitType
,
StartDate
=
a
.
StartDate
,
EndDate
=
a
.
EndDate
,
AttendanceName
=
bleftjoinc
?.
AttendanceName
,
IsDeduction
=
bleftjoinc
?.
IsDeduction
??
2
,
BegDate
=
aleftjoinb
?.
BegDate
,
bEndDate
=
aleftjoinb
?.
EndDate
};
var
result
=
attendancesJoinVacatione
.
GroupBy
(
t
=>
new
{
t
.
PersonnelNumber
,
t
.
PersonnelName
,
t
.
AccountingUnit
,
t
.
Department
,
t
.
UnitType
}).
Select
(
t
=>
new
AttendancesJoinVacatione
{
AccountingUnit
=
t
.
Key
.
AccountingUnit
,
Department
=
t
.
Key
.
Department
,
PersonnelName
=
t
.
Key
.
PersonnelName
,
PersonnelNumber
=
t
.
Key
.
PersonnelNumber
,
UnitType
=
t
.
Key
.
UnitType
,
StartDate
=
t
.
FirstOrDefault
().
StartDate
,
EndDate
=
t
.
FirstOrDefault
().
EndDate
,
Detail
=
t
.
GroupBy
(
group
=>
group
.
AttendanceName
).
Select
(
group
=>
new
EntityModels
.
Other
.
Detail
{
{
Title
=
group
.
Key
,
w
.
PersonnelNumber
,
//Value = Convert.ToInt32(new TimeSpan(Convert.ToDateTime(group.FirstOrDefault().BegDate).Ticks).Subtract(new TimeSpan(Convert.ToDateTime(group.FirstOrDefault().EndDate).Ticks)).Duration().Days) + 1,
Type
=
types
.
FirstOrDefault
(
p
=>
p
.
Id
==
w
.
TypeId
)?.
AttendanceName
??
"考勤类型缺失"
,
BegDate
=
group
.
FirstOrDefault
().
BegDate
,
Dates
=
SplitEveryDay
(
w
.
BegDate
.
Value
.
Date
,
w
.
EndDate
.
Value
.
Date
),
EndDate
=
Convert
.
ToDateTime
(
group
.
FirstOrDefault
().
bEndDate
),
Remark
=
types
.
FirstOrDefault
(
p
=>
p
.
Id
==
w
.
TypeId
)?.
IsDeduction
==
(
int
)
Attendance
.
Deduction
.
核减
?
"核减"
:
"不核减"
,
IsDeduction
=
group
.
FirstOrDefault
().
IsDeduction
,
});
VacationDays
=
0
}).
ToList
(),
});
List
<
AttendancesJoinVacatione
>
list
=
new
List
<
AttendancesJoinVacatione
>();
foreach
(
var
item
in
result
)
{
AttendancesJoinVacatione
temp
=
new
AttendancesJoinVacatione
()
{
AccountingUnit
=
item
.
AccountingUnit
,
Department
=
item
.
Department
,
PersonnelName
=
item
.
PersonnelName
,
PersonnelNumber
=
item
.
PersonnelNumber
,
UnitType
=
item
.
UnitType
,
StartDate
=
item
.
StartDate
,
EndDate
=
item
.
EndDate
,
Detail
=
new
List
<
EntityModels
.
Other
.
Detail
>(),
AttendanceDays
=
0
,
};
foreach
(
var
detail
in
item
.
Detail
)
{
if
(
item
.
PersonnelName
.
Contains
(
"夏东"
))
{
if
(
item
.
StartDate
>=
detail
.
BegDate
&&
detail
.
EndDate
<=
item
.
EndDate
)
{
if
(
item
.
StartDate
>=
detail
.
BegDate
&&
detail
.
EndDate
<=
item
.
EndDate
)
detail
.
BegDate
=
item
.
StartDate
;
detail
.
VacationDays
=
Convert
.
ToInt32
(
new
TimeSpan
(
Convert
.
ToDateTime
(
detail
.
BegDate
).
Ticks
).
Subtract
(
new
TimeSpan
(
Convert
.
ToDateTime
(
detail
.
EndDate
).
Ticks
)).
Duration
().
Days
)
+
1
;
temp
.
Detail
.
Add
(
detail
);
}
else
if
(
detail
.
BegDate
<=
item
.
EndDate
&&
detail
.
EndDate
>
item
.
EndDate
)
{
detail
.
EndDate
=
Convert
.
ToDateTime
(
item
.
EndDate
);
detail
.
VacationDays
=
Convert
.
ToInt32
(
new
TimeSpan
(
Convert
.
ToDateTime
(
detail
.
BegDate
).
Ticks
).
Subtract
(
new
TimeSpan
(
Convert
.
ToDateTime
(
detail
.
EndDate
).
Ticks
)).
Duration
().
Days
)
+
1
;
temp
.
Detail
.
Add
(
detail
);
}
}
}
temp
.
AttendanceDays
=
Convert
.
ToInt32
(
new
TimeSpan
(
Convert
.
ToDateTime
(
temp
.
StartDate
).
Ticks
).
Subtract
(
new
TimeSpan
(
Convert
.
ToDateTime
(
temp
.
EndDate
).
Ticks
)).
Duration
().
Days
)
+
1
;
foreach
(
var
stat
in
statistics
)
{
var
vacationDays
=
temp
.
Detail
.
Where
(
t
=>
t
.
IsDeduction
==
1
).
Select
(
t
=>
t
.
VacationDays
).
ToArray
();
stat
.
Detial
=
vacationes
for
(
int
i
=
0
;
i
<
vacationDays
.
Count
();
i
++)
.
Where
(
w
=>
w
.
PersonnelNumber
==
stat
.
PersonnelNumber
)
{
.
Select
(
w
=>
new
AttendanceStatisticsDetial
temp
.
AttendanceDays
=
temp
.
AttendanceDays
-
vacationDays
[
i
];
{
}
Title
=
w
.
Type
,
list
.
Add
(
temp
);
Value
=
w
.
Dates
.
Where
(
date
=>
date
>=
stat
.
BeginDate
&&
date
<=
stat
.
EndDate
).
Count
(),
Remark
=
w
.
Remark
,
})
.
ToList
();
}
}
return
new
ApiResponse
(
ResponseType
.
OK
,
""
,
statistics
);
}
AttendanceResponse
<
List
<
AttendancesJoinVacatione
>>
attendanceResponse
=
new
AttendanceResponse
<
List
<
AttendancesJoinVacatione
>>()
// 拆分请假时间段为每个日期
private
List
<
DateTime
>
SplitEveryDay
(
DateTime
begin
,
DateTime
end
)
{
List
<
DateTime
>
dates
=
new
List
<
DateTime
>();
for
(
int
i
=
0
;
i
<=
(
end
-
begin
).
TotalDays
;
i
++)
{
{
Heads
=
AttendanceConfig
.
StatisticsAttendcanceHeads
,
dates
.
Add
(
begin
.
AddDays
(
i
));
Datas
=
list
}
};
return
dates
;
return
new
ApiResponse
(
ResponseType
.
OK
,
"ok"
,
attendanceResponse
);
}
}
...
@@ -687,18 +623,6 @@ public class AttendanceConfig
...
@@ -687,18 +623,6 @@ public class AttendanceConfig
new
AttendaceHeads
{
Column
=
"调入组别"
,
Name
=
nameof
(
per_attendance
.
CallInUnitType
)},
new
AttendaceHeads
{
Column
=
"调入组别"
,
Name
=
nameof
(
per_attendance
.
CallInUnitType
)},
new
AttendaceHeads
{
Column
=
"调入时间"
,
Name
=
nameof
(
per_attendance
.
CallInDate
)},
new
AttendaceHeads
{
Column
=
"调入时间"
,
Name
=
nameof
(
per_attendance
.
CallInDate
)},
};
};
public
static
List
<
AttendaceHeads
>
StatisticsAttendcanceHeads
{
get
;
}
=
new
List
<
AttendaceHeads
>
{
new
AttendaceHeads
{
Column
=
"核算单元名称"
,
Name
=
nameof
(
AttendancesJoinVacatione
.
AccountingUnit
)},
new
AttendaceHeads
{
Column
=
"科室名称"
,
Name
=
nameof
(
AttendancesJoinVacatione
.
Department
)},
new
AttendaceHeads
{
Column
=
"姓名"
,
Name
=
nameof
(
AttendancesJoinVacatione
.
PersonnelName
)},
new
AttendaceHeads
{
Column
=
"人员工号"
,
Name
=
nameof
(
AttendancesJoinVacatione
.
PersonnelNumber
)},
new
AttendaceHeads
{
Column
=
"人员组别"
,
Name
=
nameof
(
AttendancesJoinVacatione
.
UnitType
)},
new
AttendaceHeads
{
Column
=
"在科开始日期"
,
Name
=
nameof
(
AttendancesJoinVacatione
.
StartDate
)},
new
AttendaceHeads
{
Column
=
"在科结束日期"
,
Name
=
nameof
(
AttendancesJoinVacatione
.
EndDate
)},
new
AttendaceHeads
{
Column
=
"详细"
,
Name
=
nameof
(
AttendancesJoinVacatione
.
Detail
)},
new
AttendaceHeads
{
Column
=
"出勤天数"
,
Name
=
nameof
(
AttendancesJoinVacatione
.
AttendanceDays
)},
};
}
}
}
}
}
}
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