Commit 89c2166a by 纪旭 韦

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

parent 73da2c94
...@@ -179,12 +179,13 @@ public ApiResponse AttendanceBatch(int allotId,int hospitalId, SaveCollectData r ...@@ -179,12 +179,13 @@ public ApiResponse AttendanceBatch(int allotId,int hospitalId, SaveCollectData r
/// 考勤结果统计 /// 考勤结果统计
/// </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) public ApiResponse GetAttendanceStatistics(int allotId,int hospitalId)
{ {
// 返回结果参考接口 employee/apr/getdeptdetail // 返回结果参考接口 employee/apr/getdeptdetail
return new ApiResponse(ResponseType.Fail); return _attendanceService.GetAttendanceStatistics(allotId, hospitalId);
} }
} }
} }
...@@ -388,11 +388,12 @@ ...@@ -388,11 +388,12 @@
<param name="request"></param> <param name="request"></param>
<returns></returns> <returns></returns>
</member> </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>
考勤结果统计 考勤结果统计
</summary> </summary>
<param name="allotId"></param> <param name="allotId"></param>
<param name="hospitalId"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Performance.Api.Controllers.BudgetController.Query(Performance.DtoModels.Request.BudgetRequest)"> <member name="M:Performance.Api.Controllers.BudgetController.Query(Performance.DtoModels.Request.BudgetRequest)">
......
...@@ -19,6 +19,6 @@ public class per_attendance ...@@ -19,6 +19,6 @@ public class per_attendance
public string PersonnelName { get; set; } //姓名 public string PersonnelName { get; set; } //姓名
public string CallInUnitType { get; set; } //人员类别 public string CallInUnitType { get; set; } //人员类别
public string CallInAccountingUnit { 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 ...@@ -18,8 +18,8 @@ public class per_attendance_vacation
public string PersonnelNumber { get; set; } //工号 public string PersonnelNumber { get; set; } //工号
public string PersonnelName { get; set; } //姓名 public string PersonnelName { get; set; } //姓名
public int TypeId { get; set; } //per_attendance_type表中ID public int TypeId { get; set; } //per_attendance_type表中ID
public DateTime? BegDate { get; set; } //开始时间 public Nullable<DateTime> BegDate { get; set; } //开始时间
public DateTime? EndDate { get; set; } //结束时间 public Nullable<DateTime> EndDate { get; set; } //结束时间
} }
} }
...@@ -16,7 +16,7 @@ public class view_attendance ...@@ -16,7 +16,7 @@ public class view_attendance
public string AccountingUnit { get; set; } //核算单元 public string AccountingUnit { get; set; } //核算单元
public string PersonnelNumber { get; set; } //工号 public string PersonnelNumber { get; set; } //工号
public string PersonnelName { 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 Source { get; set; }
public string Department { get; set; } //科室名称 public string Department { get; set; } //科室名称
} }
...@@ -27,10 +27,17 @@ public class InitialAttendance ...@@ -27,10 +27,17 @@ public class InitialAttendance
public string AccountingUnit { get; set; } //核算单元 public string AccountingUnit { get; set; } //核算单元
public string PersonnelNumber { get; set; } //工号 public string PersonnelNumber { get; set; } //工号
public string PersonnelName { get; set; } //姓名 public string PersonnelName { get; set; } //姓名
public DateTime? StartDate { get; set; } //入科开始时间 public Nullable<DateTime> StartDate { get; set; } //入科开始时间
public DateTime? EndDate { get; set; } //入科结束时间 public Nullable<DateTime> EndDate { get; set; } //入科结束时间
public string Department { 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 public class RecordAttendcance: per_attendance_vacation
{ {
......
...@@ -49,33 +49,46 @@ public class AttendanceService : IAutoInjection ...@@ -49,33 +49,46 @@ public class AttendanceService : IAutoInjection
#region 初始考勤页面 #region 初始考勤页面
public AttendanceResponse<List<InitialAttendance>> GetAttendance(int allotId) public AttendanceResponse<List<InitialAttendance>> GetAttendance(int allotId)
{ {
var view_attendance = perforPerallotRepository.GetAttendance(allotId); var attendanceData = perforPerallotRepository.GetAttendance(allotId);
if (view_attendance == null || !view_attendance.Any()) return new AttendanceResponse<List<InitialAttendance>>(); if (attendanceData == null || !attendanceData.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>(); 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 = 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("结束")))
{ {
AccountingUnit = st.AccountingUnit, var callInDate = attendanceData.FirstOrDefault(t => t.PersonnelNumber == item.PersonnelNumber && t.AttendanceDate >= item.AttendanceDate && t.Source.Contains("调入")).AttendanceDate;
Department = st.Department, temp.StartDate = item.AttendanceDate;
PersonnelName = st.PersonnelName, temp.EndDate = callInDate;
PersonnelNumber = st.PersonnelNumber, }
UnitType = st.UnitType, else if (item.Source.Contains("调入") && !select.Any(t => t.Source.Contains("开始")))
StartDate = st.AttendanceDate, {
EndDate = en.AttendanceDate var endDate = attendanceData.FirstOrDefault(t => t.PersonnelNumber == item.PersonnelNumber && t.AttendanceDate >= item.AttendanceDate && t.Source.Contains("结束"));
}); temp.StartDate = item.AttendanceDate;
break; 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);
} }
} }
AttendanceResponse<List<InitialAttendance>> attendanceResponse = new AttendanceResponse<List<InitialAttendance>>() AttendanceResponse<List<InitialAttendance>> attendanceResponse = new AttendanceResponse<List<InitialAttendance>>()
{ {
Heads = AttendanceConfig.AttendcanceHeads, Heads = AttendanceConfig.AttendcanceHeads,
...@@ -122,7 +135,7 @@ public HandsonTable GetBatchCallInHandsonTable() ...@@ -122,7 +135,7 @@ public HandsonTable GetBatchCallInHandsonTable()
if (column.Data == "调入核算单元") 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; column.Strict = true;
} }
} }
...@@ -265,7 +278,7 @@ public ApiResponse BatchCallIn(int allotId, int hospitalId, SaveCollectData requ ...@@ -265,7 +278,7 @@ public ApiResponse BatchCallIn(int allotId, int hospitalId, SaveCollectData requ
public List<per_attendance_type> GetAttendanceType(int allotId, int hospitalId) 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) public ApiResponse InsertAttendanceType(int allotId, int hospitalId, AttendanceType attendanceType)
{ {
...@@ -296,7 +309,7 @@ public ApiResponse DeleteAttendanceType(int id) ...@@ -296,7 +309,7 @@ public ApiResponse DeleteAttendanceType(int id)
var any = perfoPperAttendanceTypeRepository.GetEntities().FirstOrDefault(t => t.Id == id); var any = perfoPperAttendanceTypeRepository.GetEntities().FirstOrDefault(t => t.Id == id);
var use = perfoPperAttendanceVacationeRepository.GetEntities().FirstOrDefault(t => t.TypeId == any.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, "删除成功"); if (perfoPperAttendanceTypeRepository.DeleteFromQuery(t => t.Id == id) > 0) return new ApiResponse(ResponseType.OK, "删除成功");
else return new ApiResponse(ResponseType.Fail, "删除失败"); else return new ApiResponse(ResponseType.Fail, "删除失败");
...@@ -319,21 +332,21 @@ public HandsonTable GetAttendanceVacationHandsonTable() ...@@ -319,21 +332,21 @@ public HandsonTable GetAttendanceVacationHandsonTable()
foreach (var column in handson.Columns) foreach (var column in handson.Columns)
{ {
column.Type = "text"; column.Type = "text";
if(column.Data.Contains("时间")) if (column.Data.Contains("时间"))
{ {
column.Type = "DateFormat"; column.Type = "DateFormat";
column.DateFormat = "YYYY/MM/DD"; column.DateFormat = "YYYY/MM/DD";
} }
if (column.Data == "考勤类型") if (column.Data == "考勤类型")
{ {
column.Source = perfoPperAttendanceTypeRepository.GetEntities().Select(t=>t.AttendanceName).ToArray(); column.Source = perfoPperAttendanceTypeRepository.GetEntities().Select(t => t.AttendanceName).ToArray();
} }
} }
} }
return handson; 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 vacatione = perfoPperAttendanceVacationeRepository.GetEntities(t => t.AllotId == allotId && t.HospitalId == hospitalId);
var type = perfoPperAttendanceTypeRepository.GetEntities(t => t.AllotId == allotId && t.HospitalId == hospitalId); var type = perfoPperAttendanceTypeRepository.GetEntities(t => t.AllotId == allotId && t.HospitalId == hospitalId);
...@@ -455,37 +468,93 @@ public ApiResponse AttendanceBatch(int allotId, int hospitalId, SaveCollectData ...@@ -455,37 +468,93 @@ public ApiResponse AttendanceBatch(int allotId, int hospitalId, SaveCollectData
} }
#endregion #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>>(); //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>(); 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 = 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("结束")))
{ {
AccountingUnit = st.AccountingUnit, var callInDate = attendanceData.FirstOrDefault(t => t.PersonnelNumber == item.PersonnelNumber && t.AttendanceDate >= item.AttendanceDate && t.Source.Contains("调入")).AttendanceDate;
Department = st.Department, temp.StartDate = item.AttendanceDate;
PersonnelName = st.PersonnelName, temp.EndDate = callInDate;
PersonnelNumber = st.PersonnelNumber,
UnitType = st.UnitType,
StartDate = st.AttendanceDate,
EndDate = en.AttendanceDate
});
break;
} }
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 Vacatione = perfoPperAttendanceVacationeRepository.GetEntities(t => t.AllotId == allotId && t.HospitalId == hospitalId).GroupBy(t=> new { t.PersonnelNumber,t.TypeId}); 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
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