Commit 89c2166a by 纪旭 韦

修改初始考勤页面返回值,统计考勤未完成

parent 73da2c94
......@@ -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);
}
}
}
......@@ -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)">
......
......@@ -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; } //调入时间
}
}
......@@ -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; } //结束时间
}
}
......@@ -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
{
......
......@@ -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);
}
......
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