丢失代码找回

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