丢失代码找回

parent 120f42dd
......@@ -115,6 +115,21 @@ public ApiResponse<List<UserResponse>> List([FromBody]ApiRequest request)
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("insert")]
[HttpPost]
public ApiResponse<UserResponse> Insert([CustomizeValidator(RuleSet = "Insert"), FromBody]UserRequest request)
{
var userIdentity = _claim.At(request.Token);
var user = _userService.Insert(request, userIdentity.UserID);
user.Role = request.Role;
return new ApiResponse<UserResponse>(ResponseType.OK, user);
}
/// <summary>
/// 新增用户
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("delete")]
[HttpPost]
public ApiResponse Delete([CustomizeValidator(RuleSet = "Delete"), FromBody]UserRequest request)
......
......@@ -74,6 +74,13 @@ public bool Update(TEntity entity)
return context.SaveChanges() > 0;
}
public bool Update(TEntity entity, Action<TEntity> action)
{
action?.Invoke(entity);
context.Set<TEntity>().Update(entity);
return context.SaveChanges() > 0;
}
public List<TEntity> GetEntities()
{
return context.Set<TEntity>().ToList();
......
......@@ -44,7 +44,8 @@ public int DelAgain(int againid)
{
"ag_data",
"ag_employee",
"ag_header"
"ag_header",
"ag_againsituation"
};
string sql = "";
tableArray.ForEach(t => sql += $"delete from {t} where againallotid=@againid;");
......
......@@ -71,146 +71,155 @@ public bool Generate(AgainAllotRequest request, UserIdentity user)
if (againAllot == null || againAllot.ID == 0)
throw new PerformanceException("绩效二次分配不存在");
perforPeragainallotRepository.Update(againAllot, p => { p.States = 2; });
//清理二次绩效无用数据
configService.ClearAgain(againAllot.ID);
#region 基础信息
//获取基础配置信息
var config = perforCofagainRepository.GetEntities(t => t.AgainAllotID == againAllot.ID);
var jobfactor = config.FirstOrDefault(t => t.Type == 1)?.Value;
var workfactor = config.FirstOrDefault(t => t.Type == 2)?.Value;
var days = config.FirstOrDefault(t => t.Type == 3)?.Value;
decimal? basicnumber = 0m;
//获取科室实发绩效
if (user.Role != null)
try
{
var role = user.Role.FirstOrDefault();
if (role != null)
#region 基础信息
//获取基础配置信息
var config = perforCofagainRepository.GetEntities(t => t.AgainAllotID == againAllot.ID);
var jobfactor = config.FirstOrDefault(t => t.Type == 1)?.Value;
var workfactor = config.FirstOrDefault(t => t.Type == 2)?.Value;
var days = config.FirstOrDefault(t => t.Type == 3)?.Value;
decimal? basicnumber = 0m;
//获取科室实发绩效
if (user.Role != null)
{
if (application.NurseRole == role.RoleID)
basicnumber = perforResaccountnurseRepository.GetEntity(t => t.AllotID == againAllot.AllotID && t.AccountingUnit == user.Department)?.RealGiveFee;
else if (application.DirectorRole == role.RoleID)
basicnumber = perforResaccountdoctorRepository.GetEntity(t => t.AllotID == againAllot.AllotID && t.AccountingUnit == user.Department)?.RealGiveFee;
var role = user.Role.FirstOrDefault();
if (role != null)
{
if (application.NurseRole == role.RoleID)
basicnumber = perforResaccountnurseRepository.GetEntity(t => t.AllotID == againAllot.AllotID && t.AccountingUnit == user.Department)?.RealGiveFee;
else if (application.DirectorRole == role.RoleID)
basicnumber = perforResaccountdoctorRepository.GetEntity(t => t.AllotID == againAllot.AllotID && t.AccountingUnit == user.Department)?.RealGiveFee;
}
}
}
#endregion
#region 计算
//读取二次计算excel数据
var perAgainExcel = againService.ReadData(againAllot);
//护士长或科主任出勤
var bossAttendance = perAgainExcel.AgainEmployee.FirstOrDefault(t => t.JobTitle == "护士长")?.Attendance;
//计算职称出勤系数、年资出勤系数
foreach (var item in perAgainExcel.AgainEmployee)
{
item.JobAttendanceFactor = item.JobFactor * item.Attendance / days;
item.YearAttendanceFactor = item.Attendance * item.YearFactor / days;
}
//计算 科室系数人均
var departmentFactorAvg = basicnumber / perAgainExcel.AgainEmployee.Sum(t => t.YearAttendanceFactor);
//二次分配科室概览
PerAgainSituation situation = new PerAgainSituation
{
NightShift = perAgainExcel.AgainEmployee.Sum(t => t.NightShift),
DepartmentTotal = basicnumber,
BossPerfor = departmentFactorAvg * bossAttendance / days,
Award = perAgainExcel.AgainEmployee.Sum(t => t.Award),
Allowance = perAgainExcel.AgainEmployee.Sum(t => t.Allowance),
AlonePerfor = perAgainExcel.AgainEmployee.Sum(t => t.AlonePerfor),
Attendance = days,
DepartmentFactorAvg = departmentFactorAvg
};
//业绩二次分配科室概览:业绩分配绩效、职称绩效、工作量绩效
situation.AllotPerfor = situation.DepartmentTotal - situation.BossPerfor - situation.Award - situation.Allowance - situation.AlonePerfor;
situation.JobPerfor = situation.AllotPerfor * jobfactor;
situation.WorkloadPerfor = situation.AllotPerfor * workfactor;
var rowList = perAgainExcel.AgainData.Select(t => t.RowNumber).Distinct().ToList();
//业绩二次分配科室动态数据:工作量得分
foreach (var rowNumber in rowList)
{
var againEmployee = perAgainExcel.AgainEmployee.FirstOrDefault(t => t.RowNumber == rowNumber);
var atRowList = perAgainExcel.AgainData.Where(t => t.RowNumber == rowNumber);
decimal? sumValue = 0m;
foreach (var atRow in atRowList)
sumValue += atRow.IsFactor == 1 ? atRow.IsFactor * atRow.CellValue : atRow.CellValue;
sumValue = sumValue * againEmployee?.YearFactor;
var head = perAgainExcel.Header.Children.FirstOrDefault(t => t.CellValue == "工作量得分");
if (head == null)
#endregion
#region 计算
//读取二次计算excel数据
var perAgainExcel = againService.ReadData(againAllot);
//护士长或科主任出勤
var bossAttendance = perAgainExcel.AgainEmployee.FirstOrDefault(t => t.JobTitle == "护士长")?.Attendance;
//计算职称出勤系数、年资出勤系数
foreach (var item in perAgainExcel.AgainEmployee)
{
perAgainExcel.Header.MergeCell++;
var pointrow = perAgainExcel.Header.Children.Max(t => t.PointRow);
var pointcell = perAgainExcel.Header.Children.Max(t => t.PointCell);
head = new PerHeader(pointrow, pointcell, "工作量得分", 1, 1, 1, null, 1);
perAgainExcel.Header.Children.Add(head);
item.JobAttendanceFactor = item.JobFactor * item.Attendance / days;
item.YearAttendanceFactor = item.Attendance * item.YearFactor / days;
}
perAgainExcel.AgainData.Add(new PerAgainData(rowNumber.Value, "工作量得分", sumValue, 1, 2, null, "", "", head.SignID));
}
//业绩二次分配科室动态数据:绩效工资
foreach (var rowNumber in rowList)
{
var workvalue = perAgainExcel.AgainData.FirstOrDefault(t => t.RowNumber == rowNumber && t.TypeName == "工作量得分")?.CellValue;
var sumvalue = perAgainExcel.AgainData.Where(t => t.TypeName == "工作量得分").Sum(t => t.CellValue);
var perforValue = workvalue / sumvalue * situation.WorkloadPerfor;
var head = perAgainExcel.Header.Children.FirstOrDefault(t => t.CellValue == "绩效工资");
if (head == null)
//计算 科室系数人均
var departmentFactorAvg = basicnumber / perAgainExcel.AgainEmployee.Sum(t => t.YearAttendanceFactor);
//二次分配科室概览
PerAgainSituation situation = new PerAgainSituation
{
perAgainExcel.Header.MergeCell++;
var pointrow = perAgainExcel.Header.Children.Max(t => t.PointRow);
var pointcell = perAgainExcel.Header.Children.Max(t => t.PointCell);
head = new PerHeader(pointrow, pointcell, "绩效工资", 1, 1, 1, null, 1);
perAgainExcel.Header.Children.Add(head);
NightShift = perAgainExcel.AgainEmployee.Sum(t => t.NightShift),
DepartmentTotal = basicnumber,
BossPerfor = departmentFactorAvg * bossAttendance / days,
Award = perAgainExcel.AgainEmployee.Sum(t => t.Award),
Allowance = perAgainExcel.AgainEmployee.Sum(t => t.Allowance),
AlonePerfor = perAgainExcel.AgainEmployee.Sum(t => t.AlonePerfor),
Attendance = days,
DepartmentFactorAvg = departmentFactorAvg
};
//业绩二次分配科室概览:业绩分配绩效、职称绩效、工作量绩效
situation.AllotPerfor = situation.DepartmentTotal - situation.BossPerfor - situation.Award - situation.Allowance - situation.AlonePerfor;
situation.JobPerfor = situation.AllotPerfor * jobfactor;
situation.WorkloadPerfor = situation.AllotPerfor * workfactor;
var rowList = perAgainExcel.AgainData.Select(t => t.RowNumber).Distinct().ToList();
//业绩二次分配科室动态数据:工作量得分
foreach (var rowNumber in rowList)
{
var againEmployee = perAgainExcel.AgainEmployee.FirstOrDefault(t => t.RowNumber == rowNumber);
var atRowList = perAgainExcel.AgainData.Where(t => t.RowNumber == rowNumber);
decimal? sumValue = 0m;
foreach (var atRow in atRowList)
sumValue += atRow.IsFactor == 1 ? atRow.IsFactor * atRow.CellValue : atRow.CellValue;
sumValue = sumValue * againEmployee?.YearFactor;
var head = perAgainExcel.Header.Children.FirstOrDefault(t => t.CellValue == "工作量得分");
if (head == null)
{
perAgainExcel.Header.MergeCell++;
var pointrow = perAgainExcel.Header.Children.Max(t => t.PointRow);
var pointcell = perAgainExcel.Header.Children.Max(t => t.PointCell);
head = new PerHeader(pointrow, pointcell, "工作量得分", 1, 1, 1, null, 1);
perAgainExcel.Header.Children.Add(head);
}
perAgainExcel.AgainData.Add(new PerAgainData(rowNumber.Value, "工作量得分", sumValue, 1, 2, null, "", "", head.SignID));
}
perAgainExcel.AgainData.Add(new PerAgainData(rowNumber.Value, "绩效工资", perforValue, 1, 2, null, "", "", head.SignID));
}
//业绩二次分配科室:应发绩效、实发绩效
string[] jobArray = new string[] { "护士长", "科主任" };
foreach (var employee in perAgainExcel.AgainEmployee)
{
if (jobArray.Contains(employee.JobTitle))
//业绩二次分配科室动态数据:绩效工资
foreach (var rowNumber in rowList)
{
employee.GiveFee = situation.BossPerfor;
employee.RealGiveFee = situation.BossPerfor;
var workvalue = perAgainExcel.AgainData.FirstOrDefault(t => t.RowNumber == rowNumber && t.TypeName == "工作量得分")?.CellValue;
var sumvalue = perAgainExcel.AgainData.Where(t => t.TypeName == "工作量得分").Sum(t => t.CellValue);
var perforValue = workvalue / sumvalue * situation.WorkloadPerfor;
var head = perAgainExcel.Header.Children.FirstOrDefault(t => t.CellValue == "绩效工资");
if (head == null)
{
perAgainExcel.Header.MergeCell++;
var pointrow = perAgainExcel.Header.Children.Max(t => t.PointRow);
var pointcell = perAgainExcel.Header.Children.Max(t => t.PointCell);
head = new PerHeader(pointrow, pointcell, "绩效工资", 1, 1, 1, null, 1);
perAgainExcel.Header.Children.Add(head);
}
perAgainExcel.AgainData.Add(new PerAgainData(rowNumber.Value, "绩效工资", perforValue, 1, 2, null, "", "", head.SignID));
}
else
//业绩二次分配科室:应发绩效、实发绩效
string[] jobArray = new string[] { "护士长", "科主任" };
foreach (var employee in perAgainExcel.AgainEmployee)
{
employee.JobAttendancePerfor = situation.JobPerfor * employee.JobAttendanceFactor / perAgainExcel.AgainEmployee.Sum(t => t.JobAttendanceFactor);
var value = perAgainExcel.AgainData.FirstOrDefault(t => t.RowNumber == employee.RowNumber && t.TypeName == "绩效工资")?.CellValue;
employee.GiveFee = (employee.JobAttendancePerfor ?? 0) + (value ?? 0) + (employee.Award ?? 0) + (employee.Allowance ?? 0) + (employee.AlonePerfor ?? 0);
employee.RealGiveFee = (employee.GiveFee ?? 0) + (employee.NightShift ?? 0);
if (jobArray.Contains(employee.JobTitle))
{
employee.GiveFee = situation.BossPerfor;
employee.RealGiveFee = situation.BossPerfor;
}
else
{
employee.JobAttendancePerfor = situation.JobPerfor * employee.JobAttendanceFactor / perAgainExcel.AgainEmployee.Sum(t => t.JobAttendanceFactor);
var value = perAgainExcel.AgainData.FirstOrDefault(t => t.RowNumber == employee.RowNumber && t.TypeName == "绩效工资")?.CellValue;
employee.GiveFee = (employee.JobAttendancePerfor ?? 0) + (value ?? 0) + (employee.Award ?? 0) + (employee.Allowance ?? 0) + (employee.AlonePerfor ?? 0);
employee.RealGiveFee = (employee.GiveFee ?? 0) + (employee.NightShift ?? 0);
}
}
}
#endregion
#endregion
#region 保存
#region 保存
var againsituation = Mapper.Map<ag_againsituation>(situation);
againsituation.AllotID = againAllot.AllotID;
againsituation.AgainAllotID = againAllot.ID;
perforAgagainsituationRepository.Add(againsituation);
var againsituation = Mapper.Map<ag_againsituation>(situation);
againsituation.AllotID = againAllot.AllotID;
againsituation.AgainAllotID = againAllot.ID;
perforAgagainsituationRepository.Add(againsituation);
var employeeList = Mapper.Map<List<ag_employee>>(perAgainExcel.AgainEmployee);
employeeList.ForEach(item => { item.AllotID = againAllot.AllotID; item.AgainAllotID = againAllot.ID; });
perforAgemployeeRepository.AddRange(employeeList.ToArray());
var employeeList = Mapper.Map<List<ag_employee>>(perAgainExcel.AgainEmployee);
employeeList.ForEach(item => { item.AllotID = againAllot.AllotID; item.AgainAllotID = againAllot.ID; });
perforAgemployeeRepository.AddRange(employeeList.ToArray());
var pHeader = Mapper.Map<ag_header>(perAgainExcel.Header);
pHeader.AllotID = againAllot.AllotID;
pHeader.AgainAllotID = againAllot.ID;
var cHeaderList = Mapper.Map<List<ag_header>>(perAgainExcel.Header.Children);
cHeaderList.ForEach(item => { item.AllotID = againAllot.AllotID; item.AgainAllotID = againAllot.ID; });
perforAgheaderRepository.Add(pHeader);
perforAgheaderRepository.AddRange(cHeaderList.ToArray());
var pHeader = Mapper.Map<ag_header>(perAgainExcel.Header);
pHeader.AllotID = againAllot.AllotID;
pHeader.AgainAllotID = againAllot.ID;
var cHeaderList = Mapper.Map<List<ag_header>>(perAgainExcel.Header.Children);
cHeaderList.ForEach(item => { item.AllotID = againAllot.AllotID; item.AgainAllotID = againAllot.ID; });
perforAgheaderRepository.Add(pHeader);
perforAgheaderRepository.AddRange(cHeaderList.ToArray());
var dataList = Mapper.Map<List<ag_data>>(perAgainExcel.AgainData);
dataList.ForEach(item => { item.AllotID = againAllot.AllotID; item.AgainAllotID = againAllot.ID; });
perforAgdataRepository.AddRange(dataList.ToArray());
var dataList = Mapper.Map<List<ag_data>>(perAgainExcel.AgainData);
dataList.ForEach(item => { item.AllotID = againAllot.AllotID; item.AgainAllotID = againAllot.ID; });
perforAgdataRepository.AddRange(dataList.ToArray());
#endregion
#endregion
}
catch (Exception ex)
{
perforPeragainallotRepository.Update(againAllot, p => { p.States = 4; p.Remark = ex.ToString(); });
}
perforPeragainallotRepository.Update(againAllot, p => { p.States = 3; });
return true;
//return SheetFormat(perAgainExcel, situation);
}
......
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