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
89c2166a
Commit
89c2166a
authored
Mar 30, 2022
by
纪旭 韦
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改初始考勤页面返回值,统计考勤未完成
parent
73da2c94
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
136 additions
and
58 deletions
+136
-58
performance/Performance.Api/Controllers/AttendanceController.cs
+3
-2
performance/Performance.Api/wwwroot/Performance.Api.xml
+2
-1
performance/Performance.EntityModels/Entity/per_attendance.cs
+1
-1
performance/Performance.EntityModels/Entity/per_attendance_vacation.cs
+2
-2
performance/Performance.EntityModels/Other/view_attendance.cs
+10
-3
performance/Performance.Services/AttendanceService.cs
+118
-49
No files found.
performance/Performance.Api/Controllers/AttendanceController.cs
View file @
89c2166a
...
...
@@ -179,12 +179,13 @@ public ApiResponse AttendanceBatch(int allotId,int hospitalId, SaveCollectData r
/// 考勤结果统计
/// </summary>
/// <param name="allotId"></param>
/// <param name="hospitalId"></param>
/// <returns></returns>
[
HttpGet
(
"statistics/{allotId}"
)]
public
ApiResponse
GetAttendanceStatistics
(
int
allotId
)
public
ApiResponse
GetAttendanceStatistics
(
int
allotId
,
int
hospitalId
)
{
// 返回结果参考接口 employee/apr/getdeptdetail
return
new
ApiResponse
(
ResponseType
.
Fail
);
return
_attendanceService
.
GetAttendanceStatistics
(
allotId
,
hospitalId
);
}
}
}
performance/Performance.Api/wwwroot/Performance.Api.xml
View file @
89c2166a
...
...
@@ -388,11 +388,12 @@
<param
name=
"request"
></param>
<returns></returns>
</member>
<member
name=
"M:Performance.Api.Controllers.AttendanceController.GetAttendanceStatistics(System.Int32)"
>
<member
name=
"M:Performance.Api.Controllers.AttendanceController.GetAttendanceStatistics(System.Int32
,System.Int32
)"
>
<summary>
考勤结果统计
</summary>
<param
name=
"allotId"
></param>
<param
name=
"hospitalId"
></param>
<returns></returns>
</member>
<member
name=
"M:Performance.Api.Controllers.BudgetController.Query(Performance.DtoModels.Request.BudgetRequest)"
>
...
...
performance/Performance.EntityModels/Entity/per_attendance.cs
View file @
89c2166a
...
...
@@ -19,6 +19,6 @@ public class per_attendance
public
string
PersonnelName
{
get
;
set
;
}
//姓名
public
string
CallInUnitType
{
get
;
set
;
}
//人员类别
public
string
CallInAccountingUnit
{
get
;
set
;
}
//核算单元
public
DateTime
?
CallInDate
{
get
;
set
;
}
//调入时间
public
Nullable
<
DateTime
>
CallInDate
{
get
;
set
;
}
//调入时间
}
}
performance/Performance.EntityModels/Entity/per_attendance_vacation.cs
View file @
89c2166a
...
...
@@ -18,8 +18,8 @@ public class per_attendance_vacation
public
string
PersonnelNumber
{
get
;
set
;
}
//工号
public
string
PersonnelName
{
get
;
set
;
}
//姓名
public
int
TypeId
{
get
;
set
;
}
//per_attendance_type表中ID
public
DateTime
?
BegDate
{
get
;
set
;
}
//开始时间
public
DateTime
?
EndDate
{
get
;
set
;
}
//结束时间
public
Nullable
<
DateTime
>
BegDate
{
get
;
set
;
}
//开始时间
public
Nullable
<
DateTime
>
EndDate
{
get
;
set
;
}
//结束时间
}
}
performance/Performance.EntityModels/Other/view_attendance.cs
View file @
89c2166a
...
...
@@ -16,7 +16,7 @@ public class view_attendance
public
string
AccountingUnit
{
get
;
set
;
}
//核算单元
public
string
PersonnelNumber
{
get
;
set
;
}
//工号
public
string
PersonnelName
{
get
;
set
;
}
//姓名
public
DateTime
?
AttendanceDate
{
get
;
set
;
}
public
Nullable
<
DateTime
>
AttendanceDate
{
get
;
set
;
}
public
string
Source
{
get
;
set
;
}
public
string
Department
{
get
;
set
;
}
//科室名称
}
...
...
@@ -27,10 +27,17 @@ public class InitialAttendance
public
string
AccountingUnit
{
get
;
set
;
}
//核算单元
public
string
PersonnelNumber
{
get
;
set
;
}
//工号
public
string
PersonnelName
{
get
;
set
;
}
//姓名
public
DateTime
?
StartDate
{
get
;
set
;
}
//入科开始时间
public
DateTime
?
EndDate
{
get
;
set
;
}
//入科结束时间
public
Nullable
<
DateTime
>
StartDate
{
get
;
set
;
}
//入科开始时间
public
Nullable
<
DateTime
>
EndDate
{
get
;
set
;
}
//入科结束时间
public
string
Department
{
get
;
set
;
}
//科室名称
}
public
class
InitialAttendanceJoin
:
InitialAttendance
{
public
string
AttendanceName
{
get
;
set
;
}
//考勤类型名称
public
int
IsDeduction
{
get
;
set
;
}
//是否核减出勤 1 核减 2 不核减
public
Nullable
<
DateTime
>
BegDate
{
get
;
set
;
}
//开始时间
public
Nullable
<
DateTime
>
bEndDate
{
get
;
set
;
}
//结束时间
}
public
class
RecordAttendcance
:
per_attendance_vacation
{
...
...
performance/Performance.Services/AttendanceService.cs
View file @
89c2166a
...
...
@@ -20,7 +20,7 @@ public class AttendanceService : IAutoInjection
private
readonly
IMapper
mapper
;
private
readonly
ILogger
<
AttendanceService
>
logger
;
private
readonly
PerforPerallotRepository
perforPerallotRepository
;
private
readonly
PerforPerAttendanceRepository
perforPerAttendanceRepository
;
private
readonly
PerforPerAttendanceRepository
perforPerAttendanceRepository
;
private
readonly
PerfoPperAttendanceTypeRepository
perfoPperAttendanceTypeRepository
;
private
readonly
PerfoPperAttendanceVacationeRepository
perfoPperAttendanceVacationeRepository
;
private
readonly
PerforPerdeptdicRepository
perdeptdicRepository
;
...
...
@@ -49,33 +49,46 @@ public class AttendanceService : IAutoInjection
#
region
初始考勤页面
public
AttendanceResponse
<
List
<
InitialAttendance
>>
GetAttendance
(
int
allotId
)
{
var
view_attendance
=
perforPerallotRepository
.
GetAttendance
(
allotId
);
if
(
view_attendance
==
null
||
!
view_attendance
.
Any
())
return
new
AttendanceResponse
<
List
<
InitialAttendance
>>();
var
start
=
view_attendance
.
Where
(
t
=>
t
.
Source
.
Contains
(
"开始"
));
var
end
=
view_attendance
.
Where
(
t
=>
t
.
Source
.
Contains
(
"结束"
));
var
attendanceData
=
perforPerallotRepository
.
GetAttendance
(
allotId
);
if
(
attendanceData
==
null
||
!
attendanceData
.
Any
())
return
new
AttendanceResponse
<
List
<
InitialAttendance
>>();
var
attendances
=
new
List
<
InitialAttendance
>();
foreach
(
var
st
in
start
)
foreach
(
var
item
in
attendanceData
)
{
foreach
(
var
en
in
end
)
if
(!
item
.
Source
.
Contains
(
"结束"
)
)
{
if
(
st
.
PersonnelName
.
Equals
(
en
.
PersonnelName
))
var
temp
=
new
InitialAttendance
{
AccountingUnit
=
item
.
AccountingUnit
,
Department
=
item
.
Department
,
PersonnelName
=
item
.
PersonnelName
,
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
;
temp
.
StartDate
=
item
.
AttendanceDate
;
temp
.
EndDate
=
callInDate
;
}
else
if
(
item
.
Source
.
Contains
(
"调入"
)
&&
!
select
.
Any
(
t
=>
t
.
Source
.
Contains
(
"开始"
)))
{
var
endDate
=
attendanceData
.
FirstOrDefault
(
t
=>
t
.
PersonnelNumber
==
item
.
PersonnelNumber
&&
t
.
AttendanceDate
>=
item
.
AttendanceDate
&&
t
.
Source
.
Contains
(
"结束"
));
temp
.
StartDate
=
item
.
AttendanceDate
;
temp
.
EndDate
=
endDate
.
AttendanceDate
;
temp
.
Department
=
endDate
.
Department
;
}
else
{
attendances
.
Add
(
new
InitialAttendance
{
AccountingUnit
=
st
.
AccountingUnit
,
Department
=
st
.
Department
,
PersonnelName
=
st
.
PersonnelName
,
PersonnelNumber
=
st
.
PersonnelNumber
,
UnitType
=
st
.
UnitType
,
StartDate
=
st
.
AttendanceDate
,
EndDate
=
en
.
AttendanceDate
});
break
;
temp
.
StartDate
=
select
.
FirstOrDefault
(
data
=>
data
.
Source
.
Contains
(
"开始"
)).
AttendanceDate
;
temp
.
EndDate
=
select
.
FirstOrDefault
(
data
=>
data
.
Source
.
Contains
(
"结束"
)).
AttendanceDate
;
}
attendances
.
Add
(
temp
);
}
}
AttendanceResponse
<
List
<
InitialAttendance
>>
attendanceResponse
=
new
AttendanceResponse
<
List
<
InitialAttendance
>>()
{
Heads
=
AttendanceConfig
.
AttendcanceHeads
,
...
...
@@ -122,7 +135,7 @@ public HandsonTable GetBatchCallInHandsonTable()
if
(
column
.
Data
==
"调入核算单元"
)
{
column
.
Source
=
EnumHelper
.
GetItems
<
AccountUnitType
>().
Where
(
w
=>
w
.
Description
!=
""
).
Select
(
w
=>
w
.
Description
).
ToArray
();
column
.
Source
=
EnumHelper
.
GetItems
<
AccountUnitType
>().
Where
(
w
=>
w
.
Description
!=
""
).
Select
(
w
=>
w
.
Description
).
ToArray
();
column
.
Strict
=
true
;
}
}
...
...
@@ -265,7 +278,7 @@ public ApiResponse BatchCallIn(int allotId, int hospitalId, SaveCollectData requ
public
List
<
per_attendance_type
>
GetAttendanceType
(
int
allotId
,
int
hospitalId
)
{
return
perfoPperAttendanceTypeRepository
.
GetEntities
(
t
=>
t
.
AllotId
==
allotId
&&
t
.
HospitalId
==
hospitalId
).
ToList
();
return
perfoPperAttendanceTypeRepository
.
GetEntities
(
t
=>
t
.
AllotId
==
allotId
&&
t
.
HospitalId
==
hospitalId
).
ToList
();
}
public
ApiResponse
InsertAttendanceType
(
int
allotId
,
int
hospitalId
,
AttendanceType
attendanceType
)
{
...
...
@@ -290,13 +303,13 @@ public ApiResponse InsertAttendanceType(int allotId, int hospitalId, AttendanceT
else
return
new
ApiResponse
(
ResponseType
.
Fail
,
"添加失败"
);
}
}
}
public
ApiResponse
DeleteAttendanceType
(
int
id
)
{
var
any
=
perfoPperAttendanceTypeRepository
.
GetEntities
().
FirstOrDefault
(
t
=>
t
.
Id
==
id
);
var
use
=
perfoPperAttendanceVacationeRepository
.
GetEntities
().
FirstOrDefault
(
t
=>
t
.
TypeId
==
any
.
Id
);
if
(
any
!=
null
&&
use
==
null
)
if
(
any
!=
null
&&
use
==
null
)
{
if
(
perfoPperAttendanceTypeRepository
.
DeleteFromQuery
(
t
=>
t
.
Id
==
id
)
>
0
)
return
new
ApiResponse
(
ResponseType
.
OK
,
"删除成功"
);
else
return
new
ApiResponse
(
ResponseType
.
Fail
,
"删除失败"
);
...
...
@@ -319,21 +332,21 @@ public HandsonTable GetAttendanceVacationHandsonTable()
foreach
(
var
column
in
handson
.
Columns
)
{
column
.
Type
=
"text"
;
if
(
column
.
Data
.
Contains
(
"时间"
))
if
(
column
.
Data
.
Contains
(
"时间"
))
{
column
.
Type
=
"DateFormat"
;
column
.
DateFormat
=
"YYYY/MM/DD"
;
}
if
(
column
.
Data
==
"考勤类型"
)
{
column
.
Source
=
perfoPperAttendanceTypeRepository
.
GetEntities
().
Select
(
t
=>
t
.
AttendanceName
).
ToArray
();
column
.
Source
=
perfoPperAttendanceTypeRepository
.
GetEntities
().
Select
(
t
=>
t
.
AttendanceName
).
ToArray
();
}
}
}
return
handson
;
}
public
List
<
RecordAttendcance
>
GetAttendanceVacation
(
int
allotId
,
int
hospitalId
)
public
List
<
RecordAttendcance
>
GetAttendanceVacation
(
int
allotId
,
int
hospitalId
)
{
var
vacatione
=
perfoPperAttendanceVacationeRepository
.
GetEntities
(
t
=>
t
.
AllotId
==
allotId
&&
t
.
HospitalId
==
hospitalId
);
var
type
=
perfoPperAttendanceTypeRepository
.
GetEntities
(
t
=>
t
.
AllotId
==
allotId
&&
t
.
HospitalId
==
hospitalId
);
...
...
@@ -353,7 +366,7 @@ public List<RecordAttendcance> GetAttendanceVacation(int allotId,int hospitalId)
BegDate
=
a
.
BegDate
,
EndDate
=
a
.
EndDate
,
Days
=
Convert
.
ToInt32
(
new
TimeSpan
(
Convert
.
ToDateTime
(
a
.
BegDate
).
Ticks
).
Subtract
(
new
TimeSpan
(
Convert
.
ToDateTime
(
a
.
EndDate
).
Ticks
)).
Duration
().
Days
)
+
1
};
};
return
data
.
ToList
();
...
...
@@ -397,7 +410,7 @@ public ApiResponse AttendanceBatch(int allotId, int hospitalId, SaveCollectData
{
"错误原因"
,
"“关键信息缺失”请补全或删除"
},
});
}
if
(
newAttendanceVacatione
[
i
].
PersonnelName
!=
per_employee
.
FirstOrDefault
(
t
=>
t
.
PersonnelNumber
==
newAttendanceVacatione
[
i
].
PersonnelNumber
&&
t
.
AllotId
==
allotId
&&
t
.
HospitalId
==
hospitalId
)?.
DoctorName
)
{
error
.
Add
(
new
Dictionary
<
string
,
string
>
...
...
@@ -455,37 +468,93 @@ public ApiResponse AttendanceBatch(int allotId, int hospitalId, SaveCollectData
}
#
endregion
public
void
GetAttendanceStatistics
(
int
allotId
,
int
hospitalId
)
public
ApiResponse
GetAttendanceStatistics
(
int
allotId
,
int
hospitalId
)
{
var
view_attendance
=
perforPerallotRepository
.
GetAttendance
(
allotId
);
var
attendanceData
=
perforPerallotRepository
.
GetAttendance
(
allotId
);
//if (view_attendance == null || !view_attendance.Any()) return new AttendanceResponse<List<InitialAttendance>>();
var
start
=
view_attendance
.
Where
(
t
=>
t
.
Source
.
Contains
(
"开始"
));
var
end
=
view_attendance
.
Where
(
t
=>
t
.
Source
.
Contains
(
"结束"
));
var
attendances
=
new
List
<
InitialAttendance
>();
foreach
(
var
st
in
start
)
foreach
(
var
item
in
attendanceData
)
{
foreach
(
var
en
in
end
)
if
(!
item
.
Source
.
Contains
(
"结束"
)
)
{
if
(
st
.
PersonnelName
.
Equals
(
en
.
PersonnelName
))
var
temp
=
new
InitialAttendance
{
attendances
.
Add
(
new
InitialAttendance
{
AccountingUnit
=
st
.
AccountingUnit
,
Department
=
st
.
Department
,
PersonnelName
=
st
.
PersonnelName
,
PersonnelNumber
=
st
.
PersonnelNumber
,
UnitType
=
st
.
UnitType
,
StartDate
=
st
.
AttendanceDate
,
EndDate
=
en
.
AttendanceDate
});
break
;
AccountingUnit
=
item
.
AccountingUnit
,
Department
=
item
.
Department
,
PersonnelName
=
item
.
PersonnelName
,
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
;
temp
.
StartDate
=
item
.
AttendanceDate
;
temp
.
EndDate
=
callInDate
;
}
else
if
(
item
.
Source
.
Contains
(
"调入"
)
&&
!
select
.
Any
(
t
=>
t
.
Source
.
Contains
(
"开始"
)))
{
var
endDate
=
attendanceData
.
FirstOrDefault
(
t
=>
t
.
PersonnelNumber
==
item
.
PersonnelNumber
&&
t
.
AttendanceDate
>=
item
.
AttendanceDate
&&
t
.
Source
.
Contains
(
"结束"
));
temp
.
StartDate
=
item
.
AttendanceDate
;
temp
.
EndDate
=
endDate
.
AttendanceDate
;
temp
.
Department
=
endDate
.
Department
;
}
else
{
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
Vacatione
=
perfoPperAttendanceVacationeRepository
.
GetEntities
(
t
=>
t
.
AllotId
==
allotId
&&
t
.
HospitalId
==
hospitalId
).
GroupBy
(
t
=>
new
{
t
.
PersonnelNumber
,
t
.
TypeId
});
var
attendancesJoinVacatione
=
from
a
in
attendances
join
b
in
vacatione
on
a
.
PersonnelNumber
equals
b
.
PersonnelNumber
into
temp
from
aleftjoinb
in
temp
.
DefaultIfEmpty
()
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
{
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
{
Title
=
group
.
Key
,
//Value = Convert.ToInt32(new TimeSpan(Convert.ToDateTime(group.FirstOrDefault().BegDate).Ticks).Subtract(new TimeSpan(Convert.ToDateTime(group.FirstOrDefault().EndDate).Ticks)).Duration().Days) + 1,
BegDate
=
group
.
FirstOrDefault
().
BegDate
,
EndDate
=
group
.
FirstOrDefault
().
bEndDate
,
IsDeduction
=
group
.
FirstOrDefault
().
IsDeduction
,
VacationDays
=
0
})
});
return
new
ApiResponse
(
ResponseType
.
OK
,
"ok"
,
result
);
}
...
...
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