Commit 0dd00ae3 by 纪旭 韦

考勤统计

parent 89c2166a
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
namespace Performance.Api.Controllers namespace Performance.Api.Controllers
{ {
[Route("api")] [Route("api/[controller]")]
[ApiController] [ApiController]
public class AttendanceController : ControllerBase public class AttendanceController : ControllerBase
{ {
......
...@@ -39,7 +39,7 @@ public class InitialAttendanceJoin : InitialAttendance ...@@ -39,7 +39,7 @@ public class InitialAttendanceJoin : InitialAttendance
public Nullable<DateTime> bEndDate { get; set; } //结束时间 public Nullable<DateTime> bEndDate { get; set; } //结束时间
} }
public class RecordAttendcance: per_attendance_vacation public class RecordAttendcance : per_attendance_vacation
{ {
public int Days { get; set; } public int Days { get; set; }
public string AttendanceName { get; set; } public string AttendanceName { get; set; }
...@@ -66,4 +66,28 @@ public class AttendanceResponse<T> ...@@ -66,4 +66,28 @@ public class AttendanceResponse<T>
public T Datas { get; set; } public T Datas { get; set; }
} }
public class AttendancesJoinVacatione
{
public string AccountingUnit { get; set; }
public string Department { get; set; }
public string PersonnelName { get; set; }
public string PersonnelNumber { get; set; }
public string UnitType { get; set; }
public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; }
public List<Detail> Detail { get; set; }
public int AttendanceDays { get; set; }
}
public class Detail
{
public string Title { get; set; }
public DateTime? BegDate { get; set; }
public DateTime EndDate { get; set; }
public int IsDeduction { get; set; }
public int VacationDays { get; set; }
}
} }
...@@ -53,7 +53,6 @@ public AttendanceResponse<List<InitialAttendance>> GetAttendance(int allotId) ...@@ -53,7 +53,6 @@ public AttendanceResponse<List<InitialAttendance>> GetAttendance(int allotId)
if (attendanceData == null || !attendanceData.Any()) return new AttendanceResponse<List<InitialAttendance>>(); if (attendanceData == null || !attendanceData.Any()) return new AttendanceResponse<List<InitialAttendance>>();
var attendances = new List<InitialAttendance>(); var attendances = new List<InitialAttendance>();
foreach (var item in attendanceData) foreach (var item in attendanceData)
{ {
if (!item.Source.Contains("结束")) if (!item.Source.Contains("结束"))
...@@ -79,6 +78,7 @@ public AttendanceResponse<List<InitialAttendance>> GetAttendance(int allotId) ...@@ -79,6 +78,7 @@ public AttendanceResponse<List<InitialAttendance>> GetAttendance(int allotId)
temp.StartDate = item.AttendanceDate; temp.StartDate = item.AttendanceDate;
temp.EndDate = endDate.AttendanceDate; temp.EndDate = endDate.AttendanceDate;
temp.Department = endDate.Department; temp.Department = endDate.Department;
} }
else else
{ {
...@@ -87,6 +87,7 @@ public AttendanceResponse<List<InitialAttendance>> GetAttendance(int allotId) ...@@ -87,6 +87,7 @@ public AttendanceResponse<List<InitialAttendance>> GetAttendance(int allotId)
} }
attendances.Add(temp); attendances.Add(temp);
} }
} }
AttendanceResponse<List<InitialAttendance>> attendanceResponse = new AttendanceResponse<List<InitialAttendance>>() AttendanceResponse<List<InitialAttendance>> attendanceResponse = new AttendanceResponse<List<InitialAttendance>>()
...@@ -535,7 +536,7 @@ public ApiResponse GetAttendanceStatistics(int allotId, int hospitalId) ...@@ -535,7 +536,7 @@ public ApiResponse GetAttendanceStatistics(int allotId, int hospitalId)
bEndDate = aleftjoinb?.EndDate bEndDate = aleftjoinb?.EndDate
}; };
var result = attendancesJoinVacatione.GroupBy(t => new { t.PersonnelNumber, t.PersonnelName,t.AccountingUnit,t.Department,t.UnitType}).Select(t => new var result = attendancesJoinVacatione.GroupBy(t => new { t.PersonnelNumber, t.PersonnelName,t.AccountingUnit,t.Department,t.UnitType}).Select(t => new AttendancesJoinVacatione
{ {
AccountingUnit = t.Key.AccountingUnit, AccountingUnit = t.Key.AccountingUnit,
Department = t.Key.Department, Department = t.Key.Department,
...@@ -544,17 +545,74 @@ public ApiResponse GetAttendanceStatistics(int allotId, int hospitalId) ...@@ -544,17 +545,74 @@ public ApiResponse GetAttendanceStatistics(int allotId, int hospitalId)
UnitType = t.Key.UnitType, UnitType = t.Key.UnitType,
StartDate = t.FirstOrDefault().StartDate, StartDate = t.FirstOrDefault().StartDate,
EndDate = t.FirstOrDefault().EndDate, EndDate = t.FirstOrDefault().EndDate,
Detail = t.GroupBy(group => group.AttendanceName).Select(group => new Detail = t.GroupBy(group => group.AttendanceName).Select(group => new EntityModels.Other.Detail
{ {
Title = group.Key, 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, //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, BegDate = group.FirstOrDefault().BegDate,
EndDate = group.FirstOrDefault().bEndDate, EndDate = Convert.ToDateTime(group.FirstOrDefault().bEndDate),
IsDeduction = group.FirstOrDefault().IsDeduction, IsDeduction = group.FirstOrDefault().IsDeduction,
VacationDays = 0 VacationDays = 0
}) }).ToList(),
}); });
return new ApiResponse(ResponseType.OK, "ok", result);
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;
var vacationDays = temp.Detail.Where(t => t.IsDeduction == 1).Select(t => t.VacationDays).ToArray();
for (int i = 0; i < vacationDays.Count(); i++)
{
temp.AttendanceDays = temp.AttendanceDays - vacationDays[i];
}
list.Add(temp);
}
AttendanceResponse<List<AttendancesJoinVacatione>> attendanceResponse = new AttendanceResponse<List<AttendancesJoinVacatione>>()
{
Heads = AttendanceConfig.StatisticsAttendcanceHeads,
Datas = list
};
return new ApiResponse(ResponseType.OK, "ok", attendanceResponse);
} }
...@@ -629,6 +687,18 @@ public class AttendanceConfig ...@@ -629,6 +687,18 @@ 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)},
};
} }
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment