还原到老版查询个人绩效

parent ee39c22e
......@@ -50,6 +50,8 @@ public class OwnerMobileItemDto
}
public class OwnerMobileItemDetailDto
{
public OwnerMobileItemDetailDto() { }
public OwnerMobileItemDetailDto(string title, decimal amount, string date)
{
Title = title;
......
......@@ -396,13 +396,18 @@ public List<view_allot_result> GetOwnerPerformance(List<int> hospitalId, string
string sql = "SELECT * FROM view_allot_result WHERE States IN (6,8) AND HospitalID IN @HospitalID AND JobNumber=@JobNumber";
return DapperQuery<view_allot_result>(sql, new { HospitalID = hospitalId, JobNumber = jobNumber })?.ToList();
}
public List<view_allot_sign_emp> GetOwnerPerformance(string jobNumber)
public List<view_allot_result> GetOwnerPerformance(string jobNumber)
{
string sql = "SELECT * FROM freeze_allot_sign_emp WHERE (States = 8 OR IFNULL(Batch,'') != '') AND JobNumber=@JobNumber";
return DapperQuery<view_allot_sign_emp>(sql, new { JobNumber = jobNumber })?.ToList();
string sql = "SELECT * FROM view_allot_result WHERE States IN (6,8) AND JobNumber=@JobNumber";
return DapperQuery<view_allot_result>(sql, new { JobNumber = jobNumber })?.ToList();
}
//public List<view_allot_sign_emp> GetOwnerPerformance(string jobNumber)
//{
// string sql = "SELECT * FROM freeze_allot_sign_emp WHERE (States = 8 OR IFNULL(Batch,'') != '') AND JobNumber=@JobNumber";
// return DapperQuery<view_allot_sign_emp>(sql, new { JobNumber = jobNumber })?.ToList();
//}
/// <summary>
/// 个人绩效查询 医院其他绩效
/// </summary>
......
......@@ -775,21 +775,192 @@ public List<OwnerPerformanceDto> GetOwnerPerformance(int userid)
return res?.OrderByDescending(w => w.Year).ThenByDescending(w => w.Month).ToList();
}
#region 新版要合并到develop上才能使用
///// <summary>
///// 格式转换
///// </summary>
///// <param name="jobNumber"></param>
///// <param name="beginDate"></param>
///// <param name="endDate"></param>
///// <returns></returns>
//public List<OwnerMobilePerformanceDto> GetOwnerMobilePerformance(string jobNumber, DateTime beginDate, DateTime endDate)
//{
// List<OwnerMobilePerformanceDto> dtos = new List<OwnerMobilePerformanceDto>();
// var datas = _reportRepository.GetOwnerPerformance(jobNumber) ?? new List<view_allot_sign_emp>();
// var otherAmounts = _reportRepository.GetOwnerOtherAmount(jobNumber) ?? new List<view_other_amount>();
// var otherAmountHides = _reportRepository.GetOwnerOtherAmountHide(jobNumber) ?? new List<view_other_amount>();
// var filterDatas = datas.Where(w => (new DateTime(w.Year, w.Month, 1)) >= beginDate && (new DateTime(w.Year, w.Month, 1)) < endDate);
// var groupDatas = filterDatas.GroupBy(w => w.JobNumber);
// foreach (var item in groupDatas)
// {
// var perforSumFee = new OwnerMobileItemDto
// {
// Title = "业绩绩效",
// Amount = item.Sum(w => w.PerforSumFee),
// Details = item
// .Where(w => (w.PerforSumFee) != 0)
// .Select(w => new OwnerMobileItemDetailDto(w.AccountingUnit, w.PerforSumFee, w.BatchDate)).ToList()
// };
// var perforManagementFee = new OwnerMobileItemDto
// {
// Title = "管理绩效",
// Amount = item.Sum(w => w.PerforManagementFee),
// Details = item
// .Where(w => w.PerforManagementFee != 0)
// .Select(w => new OwnerMobileItemDetailDto(w.AccountingUnit, w.PerforManagementFee, w.BatchDate)).ToList()
// };
// var nightWorkPerfor = new OwnerMobileItemDto
// {
// Title = "夜班绩效",
// Amount = item.Sum(w => w.NightWorkPerfor),
// Details = item
// .Where(w => w.NightWorkPerfor != 0)
// .Select(w => new OwnerMobileItemDetailDto(w.AccountingUnit, w.NightWorkPerfor, w.BatchDate)).ToList()
// };
// var otherPerfor = new OwnerMobileItemDto
// {
// Title = "医院其他绩效",
// Amount = item.Sum(w => w.OtherPerfor),
// Details = new List<OwnerMobileItemDetailDto>()
// };
// foreach (var p in item)
// {
// var qt = otherAmounts.Where(w => w.AllotId == p.AllotId).Select(w => new OwnerMobileItemDetailDto(w.PerforType, w.Amount, p.BatchDate));
// if (qt.Any()) otherPerfor.Details.AddRange(qt);
// }
// var hideOtherPerfor = new OwnerMobileItemDto
// {
// Title = "不公示其他绩效",
// Amount = item.Sum(w => w.HideOtherPerfor),
// Details = new List<OwnerMobileItemDetailDto>()
// };
// foreach (var p in item)
// {
// var qt = otherAmountHides.Where(w => w.AllotId == p.AllotId).Select(w => new OwnerMobileItemDetailDto(w.PerforType, w.Amount, p.BatchDate));
// if (qt.Any()) hideOtherPerfor.Details.AddRange(qt);
// }
// var reservedRatioFee = new OwnerMobileItemDto
// {
// Title = "预留绩效",
// Amount = item.Sum(w => w.ReservedRatioFee),
// Details = new List<OwnerMobileItemDetailDto>()
// };
// var dto = new OwnerMobilePerformanceDto { Total = item.Sum(w => w.RealGiveFee), Items = new List<OwnerMobileItemDto>() };
// if (perforSumFee.Amount != 0) dto.Items.Add(perforSumFee);
// if (perforManagementFee.Amount != 0) dto.Items.Add(perforManagementFee);
// if (nightWorkPerfor.Amount != 0) dto.Items.Add(nightWorkPerfor);
// if (otherPerfor.Amount != 0) dto.Items.Add(otherPerfor);
// if (hideOtherPerfor.Amount != 0) dto.Items.Add(hideOtherPerfor);
// if (reservedRatioFee.Amount != 0) dto.Items.Add(reservedRatioFee);
// dtos.Add(dto);
// }
// return dtos;
//}
#endregion
/// <summary>
/// 格式转换
/// </summary>
/// <param name="userid"></param>
/// <param name="jobNumber"></param>
/// <param name="beginDate"></param>
/// <param name="endDate"></param>
/// <returns></returns>
public List<OwnerMobilePerformanceDto> GetOwnerMobilePerformance(string jobNumber, DateTime beginDate, DateTime endDate)
{
List<OwnerMobilePerformanceDto> dtos = new List<OwnerMobilePerformanceDto>();
var datas = _reportRepository.GetOwnerPerformance(jobNumber) ?? new List<view_allot_sign_emp>();
var otherAmounts = _reportRepository.GetOwnerOtherAmount(jobNumber) ?? new List<view_other_amount>();
var otherAmountHides = _reportRepository.GetOwnerOtherAmountHide(jobNumber) ?? new List<view_other_amount>();
var owner = _reportRepository.GetOwnerPerformance(jobNumber);
var filterDatas = datas.Where(w => (new DateTime(w.Year, w.Month, 1)) >= beginDate && (new DateTime(w.Year, w.Month, 1)) < endDate);
if (owner == null || !owner.Any()) return dtos;
var employees = _perforPeremployeeRepository.GetEntities(w => w.PersonnelNumber == jobNumber);
var allotIds = owner.Select(w => w.AllotId).Distinct().ToList();
var batchs = _batchRepository.GetEntities(w => allotIds.Contains(w.AllotId));
var allots = _allotRepository.GetEntities(w => allotIds.Contains(w.ID));
// 发放时间 归档状态永远显示,如果没有发放时间则使用归档时间,绩效下发状态下显示标记发放时间
Func<OwnerPerformanceDto, string> getIssueDate = (owner) =>
{
var batch = batchs.FirstOrDefault(p => p.AllotId == owner.AllotId
&& p.UnitType == owner.UnitType && p.AccountingUnit == owner.AccountingUnit
&& p.PersonnelNumber == owner.JobNumber);
var allot = allots.FirstOrDefault(w => w.ID == owner.AllotId);
if (batch?.BatchDate != null && batch.BatchDate.HasValue)
return batch.BatchDate.Value.ToString("yyyy年MM月dd日 HH:mm");
else if (allot?.States == (int)AllotStates.Archive)
{
if (allot?.PigeonholeDate != null && allot.PigeonholeDate.HasValue)
return allot.PigeonholeDate.Value.ToString("yyyy年MM月dd日 HH:mm");
return $"{allot.Year}{allot}月";
}
return "";
};
var res = owner
.Where(w => w.States == (int)AllotStates.Archive)
.GroupBy(w => new { w.AllotId, w.Year, w.Month, w.JobNumber })
.Select(w => new OwnerPerformanceDto
{
AllotId = w.Key.AllotId,
Year = w.Key.Year,
Month = w.Key.Month,
JobNumber = w.Key.JobNumber,
PerforSumFee = Math.Round(w.Sum(p => p.PerforSumFee) ?? 0, 2, MidpointRounding.AwayFromZero), // 业绩绩效
PerforManagementFee = Math.Round(w.Sum(p => p.PerforManagementFee) ?? 0, 2, MidpointRounding.AwayFromZero),// 管理绩效
NightWorkPerfor = Math.Round(w.Sum(p => p.NightWorkPerfor) ?? 0, 2, MidpointRounding.AwayFromZero),// 夜班绩效
AdjustLaterOtherFee = Math.Round(w.Sum(p => p.AdjustLaterOtherFee) ?? 0, 2, MidpointRounding.AwayFromZero), // 调节后其他绩效
OtherPerfor = Math.Round(w.Sum(p => p.OtherPerfor) ?? 0, 2, MidpointRounding.AwayFromZero), // 医院其他绩效
HideOtherPerfor = Math.Round(w.Sum(p => p.HideOtherPerfor) ?? 0, 2, MidpointRounding.AwayFromZero),// 不公示其他绩效
RealPerformance = Math.Round(w.Sum(p => p.RealPerformance) ?? 0, 2, MidpointRounding.AwayFromZero),// 中转使用: 业绩绩效+管理绩效+调节后其他绩效
Detail = w
.Where(p => p.Year == w.Key.Year && p.Month == w.Key.Month && p.JobNumber == w.Key.JobNumber)
.Select(detial =>
{
var dto = _mapper.Map<OwnerPerformanceDto>(detial);
dto.Source = string.IsNullOrEmpty(detial.SourceItem) ? detial.Source : $"{detial.Source}-{detial.SourceItem}";
dto.IssueDate = getIssueDate(dto);
// 应发绩效
dto.ShouldGiveFee = Math.Round((dto.RealPerformance ?? 0) + (dto.OtherPerfor ?? 0) + (dto.HideOtherPerfor ?? 0) + (dto.NightWorkPerfor ?? 0), 2, MidpointRounding.AwayFromZero);
dto.ReservedRatio = employees?.FirstOrDefault(emp => emp.AllotId == dto.AllotId && emp.PersonnelNumber == jobNumber)?.ReservedRatio ?? 0; // 预留比例
dto.ReservedRatioFee = Math.Round((dto.RealPerformance ?? 0) * (dto.ReservedRatio ?? 0), 2, MidpointRounding.AwayFromZero); // 预留绩效
dto.RealGiveFee = Math.Round(dto.ShouldGiveFee - (dto.ReservedRatioFee ?? 0) ?? 0, 2, MidpointRounding.AwayFromZero); // 实发绩效
return dto;
})
.Where(w => !string.IsNullOrEmpty(w.IssueDate)),
})
.ToList();
foreach (var item in res)
{
item.UnitType = employees?.FirstOrDefault(w => w.AllotId == item.AllotId && w.PersonnelNumber == jobNumber)?.UnitType ?? "";
item.AccountingUnit = employees?.FirstOrDefault(w => w.AllotId == item.AllotId && w.PersonnelNumber == jobNumber)?.AccountingUnit ?? "";
item.EmployeeName = employees?.FirstOrDefault(w => w.AllotId == item.AllotId && w.PersonnelNumber == jobNumber)?.DoctorName ?? "";
// 全部是0的记录不显示
item.Detail = item.Detail.Where(w => !(w.PerforSumFee == 0 && w.PerforManagementFee == 0 && w.ShouldGiveFee == 0 && w.OtherPerfor == 0 && w.HideOtherPerfor == 0 && w.RealGiveFee == 0));
// 为了保证总额一致
item.ShouldGiveFee = Math.Round(item.Detail?.Sum(w => w.ShouldGiveFee) ?? 0, 2, MidpointRounding.AwayFromZero); // 应发绩效
item.ReservedRatio = employees?.FirstOrDefault(w => w.AllotId == item.AllotId && w.PersonnelNumber == jobNumber)?.ReservedRatio ?? 0; // 预留比例
item.ReservedRatioFee = Math.Round(item.Detail?.Sum(w => w.ReservedRatioFee) ?? 0, 2, MidpointRounding.AwayFromZero); // 预留绩效
item.RealGiveFee = Math.Round(item.Detail?.Sum(w => w.RealGiveFee) ?? 0, 2, MidpointRounding.AwayFromZero); // 实发绩效
}
var datas = res?.OrderByDescending(w => w.Year).ThenByDescending(w => w.Month).ToList();
if (datas == null || datas.Count == 0)
return dtos;
var filterDatas = datas
.Where(w => (new DateTime(w.Year, w.Month, 1)) >= beginDate && (new DateTime(w.Year, w.Month, 1)) < endDate);
var groupDatas = filterDatas.GroupBy(w => w.JobNumber);
foreach (var item in groupDatas)
......@@ -797,55 +968,72 @@ public List<OwnerMobilePerformanceDto> GetOwnerMobilePerformance(string jobNumbe
var perforSumFee = new OwnerMobileItemDto
{
Title = "业绩绩效",
Amount = item.Sum(w => w.PerforSumFee),
Details = item
.Where(w => (w.PerforSumFee) != 0)
.Select(w => new OwnerMobileItemDetailDto(w.AccountingUnit, w.PerforSumFee, w.BatchDate)).ToList()
Amount = item.Sum(w => w.PerforSumFee) ?? 0,
Details = item.SelectMany(w => w.Detail)
.Where(w => (w.PerforSumFee ?? 0) != 0 && !string.IsNullOrEmpty(w.IssueDate))
.Select(w => new OwnerMobileItemDetailDto
{
Title = w.AccountingUnit,
Amount = w.PerforSumFee ?? 0,
Date = w.IssueDate,
}).ToList()
};
var perforManagementFee = new OwnerMobileItemDto
{
Title = "管理绩效",
Amount = item.Sum(w => w.PerforManagementFee),
Details = item
.Where(w => w.PerforManagementFee != 0)
.Select(w => new OwnerMobileItemDetailDto(w.AccountingUnit, w.PerforManagementFee, w.BatchDate)).ToList()
Amount = item.Sum(w => w.PerforManagementFee) ?? 0,
Details = item.SelectMany(w => w.Detail)
.Where(w => (w.PerforManagementFee ?? 0) != 0 && !string.IsNullOrEmpty(w.IssueDate))
.Select(w => new OwnerMobileItemDetailDto
{
Title = w.AccountingUnit,
Amount = w.PerforManagementFee ?? 0,
Date = w.IssueDate,
}).ToList()
};
var nightWorkPerfor = new OwnerMobileItemDto
{
Title = "夜班绩效",
Amount = item.Sum(w => w.NightWorkPerfor),
Details = item
.Where(w => w.NightWorkPerfor != 0)
.Select(w => new OwnerMobileItemDetailDto(w.AccountingUnit, w.NightWorkPerfor, w.BatchDate)).ToList()
Amount = item.Sum(w => w.NightWorkPerfor) ?? 0,
Details = item.SelectMany(w => w.Detail)
.Where(w => (w.NightWorkPerfor ?? 0) != 0 && !string.IsNullOrEmpty(w.IssueDate))
.Select(w => new OwnerMobileItemDetailDto
{
Title = w.AccountingUnit,
Amount = w.NightWorkPerfor ?? 0,
Date = w.IssueDate,
}).ToList()
};
var otherPerfor = new OwnerMobileItemDto
{
Title = "医院其他绩效",
Amount = item.Sum(w => w.OtherPerfor),
Details = new List<OwnerMobileItemDetailDto>()
};
foreach (var p in item)
Amount = item.Sum(w => w.OtherPerfor) ?? 0,
Details = item.SelectMany(w => w.Detail)
.Where(w => (w.OtherPerfor ?? 0) != 0 && !string.IsNullOrEmpty(w.IssueDate))
.Select(w => new OwnerMobileItemDetailDto
{
var qt = otherAmounts.Where(w => w.AllotId == p.AllotId).Select(w => new OwnerMobileItemDetailDto(w.PerforType, w.Amount, p.BatchDate));
if (qt.Any()) otherPerfor.Details.AddRange(qt);
}
Title = w.SourceItem,
Amount = w.OtherPerfor ?? 0,
Date = w.IssueDate,
}).ToList()
};
var hideOtherPerfor = new OwnerMobileItemDto
{
Title = "不公示其他绩效",
Amount = item.Sum(w => w.HideOtherPerfor),
Details = new List<OwnerMobileItemDetailDto>()
};
foreach (var p in item)
Amount = item.Sum(w => w.HideOtherPerfor) ?? 0,
Details = item.SelectMany(w => w.Detail)
.Where(w => (w.HideOtherPerfor ?? 0) != 0 && !string.IsNullOrEmpty(w.IssueDate))
.Select(w => new OwnerMobileItemDetailDto
{
var qt = otherAmountHides.Where(w => w.AllotId == p.AllotId).Select(w => new OwnerMobileItemDetailDto(w.PerforType, w.Amount, p.BatchDate));
if (qt.Any()) hideOtherPerfor.Details.AddRange(qt);
}
Title = w.SourceItem,
Amount = w.HideOtherPerfor ?? 0,
Date = w.IssueDate,
}).ToList()
};
var reservedRatioFee = new OwnerMobileItemDto
{
Title = "预留绩效",
Amount = item.Sum(w => w.ReservedRatioFee),
Amount = item.Sum(w => w.ReservedRatioFee) ?? 0,
Details = new List<OwnerMobileItemDetailDto>()
};
......@@ -862,5 +1050,6 @@ public List<OwnerMobilePerformanceDto> GetOwnerMobilePerformance(string jobNumbe
return dtos;
}
}
}
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