Commit 62001c29 by ruyun.zhang

考勤下发比对变化BUG修复

parent 9dc64c89
...@@ -901,6 +901,7 @@ public ApiResponse CopyDropDown() ...@@ -901,6 +901,7 @@ public ApiResponse CopyDropDown()
//new CopyDrop{Label="收入费用类别",Value="drugTypes"}, //new CopyDrop{Label="收入费用类别",Value="drugTypes"},
new CopyDrop{Label="支出费用类别",Value="drugTypeDisburses"}, new CopyDrop{Label="支出费用类别",Value="drugTypeDisburses"},
new CopyDrop{Label="费用类别系数",Value="drugTypeFactors"}, new CopyDrop{Label="费用类别系数",Value="drugTypeFactors"},
new CopyDrop{Label="考勤类型",Value="attendanceType"},
//new CopyDrop{Label="科室类型",Value="deptTypes"}, //new CopyDrop{Label="科室类型",Value="deptTypes"},
new CopyDrop{Label="二次绩效配置",Value="agains"}, new CopyDrop{Label="二次绩效配置",Value="agains"},
}; };
......
...@@ -14,6 +14,7 @@ public PerAttendanceIssueDto() ...@@ -14,6 +14,7 @@ public PerAttendanceIssueDto()
{ } { }
public PerAttendanceIssueDto(AttendanceStatistics item) public PerAttendanceIssueDto(AttendanceStatistics item)
{ {
Id = 0;
Code = item.Code; Code = item.Code;
UnitType = item.UnitType; UnitType = item.UnitType;
AccountingUnit = item.AccountingUnit; AccountingUnit = item.AccountingUnit;
...@@ -32,6 +33,7 @@ public PerAttendanceIssueDto(AttendanceStatistics item) ...@@ -32,6 +33,7 @@ public PerAttendanceIssueDto(AttendanceStatistics item)
public PerAttendanceIssueDto(per_attendance_issue item) public PerAttendanceIssueDto(per_attendance_issue item)
{ {
Id = item.Id;
Code = item.Code; Code = item.Code;
UnitType = item.UnitType; UnitType = item.UnitType;
AccountingUnit = item.AccountingUnit; AccountingUnit = item.AccountingUnit;
...@@ -50,6 +52,7 @@ public PerAttendanceIssueDto(per_attendance_issue item) ...@@ -50,6 +52,7 @@ public PerAttendanceIssueDto(per_attendance_issue item)
//public int HospitalId { get; set; } //医院Id //public int HospitalId { get; set; } //医院Id
//public int AllotId { get; set; } //绩效Id //public int AllotId { get; set; } //绩效Id
public int Id { get; set; }
public string Code { get; set; } //核算单元编码 public string Code { get; set; } //核算单元编码
/// <summary> /// <summary>
/// 人员类别 /// 人员类别
......
using AutoMapper; using AutoMapper;
using GraphQL; using GraphQL;
using MassTransit;
using MassTransit.Internals.Extensions; using MassTransit.Internals.Extensions;
using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
...@@ -377,6 +378,10 @@ public ApiResponse AttendanceAdd(int allotId, AttendanceData request) ...@@ -377,6 +378,10 @@ public ApiResponse AttendanceAdd(int allotId, AttendanceData request)
{ {
data.CallInDate = new DateTime(allot.Year, allot.Month, 1); data.CallInDate = new DateTime(allot.Year, allot.Month, 1);
} }
if (!request.CallInDate.HasValue || request.CallInDate.Value < new DateTime(1970, 1, 1))
{
data.CallInDate = new DateTime(allot.Year, allot.Month, 1);
}
perforPerAttendanceRepository.Add(data); perforPerAttendanceRepository.Add(data);
return new ApiResponse(ResponseType.OK); return new ApiResponse(ResponseType.OK);
...@@ -1019,6 +1024,7 @@ public ApiResponse<List<AttendanceAuditDetail>> AuditDetail(int allotId, string ...@@ -1019,6 +1024,7 @@ public ApiResponse<List<AttendanceAuditDetail>> AuditDetail(int allotId, string
} }
stat.Detial.InsertRange(0, detail); stat.Detial.InsertRange(0, detail);
} }
items = items.OrderBy(w => w.PersonnelNumber).ThenBy(w => w.BeginDate).ToList();
return new ApiResponse<List<AttendanceAuditDetail>>(ResponseType.OK, items); return new ApiResponse<List<AttendanceAuditDetail>>(ResponseType.OK, items);
} }
// 最终考勤结果下发(预确认显示) // 最终考勤结果下发(预确认显示)
...@@ -1044,32 +1050,51 @@ public ApiResponse<List<PerAttendanceIssueDto>> PreConfirmationDisplay(int allot ...@@ -1044,32 +1050,51 @@ public ApiResponse<List<PerAttendanceIssueDto>> PreConfirmationDisplay(int allot
issue.NoDeductionDays == statistic.Detial.Where(w => !w.Remark.Equals("核减")).Sum(w => w.Value); issue.NoDeductionDays == statistic.Detial.Where(w => !w.Remark.Equals("核减")).Sum(w => w.Value);
return result; return result;
}; };
foreach (var item in statistics.Select(w => new { PersonnelNumber = w.PersonnelNumber, Code = w.Code })) foreach (var personnelNumber in statistics.Select(w => w.PersonnelNumber).Distinct())
{ {
var staticPersonnel = statistics.FirstOrDefault(w => w.PersonnelNumber == item.PersonnelNumber && w.Code == item.Code); // 按在科时间排序,重要
var issuePersonnel = issues.FirstOrDefault(w => w.PersonnelNumber == item.PersonnelNumber && w.Code == item.Code); var staticPersonnels = statistics.Where(w => w.PersonnelNumber == personnelNumber).OrderBy(w => w.BeginDate).ToList();
var issuePersonnels = issues.Where(w => w.PersonnelNumber == personnelNumber).OrderBy(w => w.BeginDate).ToList();
if (issuePersonnel == null) foreach (var item in staticPersonnels.Select((sp, index) => (sp, index)))
{ {
issuedates.Add(new PerAttendanceIssueDto(staticPersonnel)); // 按索引下标来判断 额外多出的都是要删除的
var deleteIndex = issuePersonnels.Count() - staticPersonnels.Count();
if (deleteIndex > 0)
{
var deleteIssuePersonnels = issuePersonnels.Skip(staticPersonnels.Count()).Take(deleteIndex).ToList();
scStatistics.AddRange(deleteIssuePersonnels);
} }
else if (staticPersonnel != null && issuePersonnel != null)
// 条数满足修改条件
if (issuePersonnels.Count() > item.index)
{ {
if (func(issuePersonnel, staticPersonnel)) continue; var issuePersonnel = issuePersonnels.ElementAt(item.index);
issuedates.Add(new PerAttendanceIssueDto(staticPersonnel) if (func(issuePersonnel, item.sp)) continue;
issuedates.Add(new PerAttendanceIssueDto(item.sp)
{ {
Id = issuePersonnel.Id,
PersonnelName = issuePersonnel.PersonnelName, PersonnelName = issuePersonnel.PersonnelName,
PersonnelNumber = issuePersonnel.PersonnelNumber, PersonnelNumber = issuePersonnel.PersonnelNumber,
OperationType = (int)Attendance.OperationType.修改, OperationType = (int)Attendance.OperationType.修改,
Remarks = "修改数据", Remarks = "修改数据",
}); });
} }
// 否则新增
else
{
issuedates.Add(new PerAttendanceIssueDto(item.sp));
}
}
} }
if (scStatistics.Any()) if (scStatistics.Any())
{ {
foreach (var report in scStatistics) foreach (var deleteItem in scStatistics)
issuedates.Add(new PerAttendanceIssueDto(report)); {
if (!issuedates.Any(w => w.Id == deleteItem.Id))
issuedates.Add(new PerAttendanceIssueDto(deleteItem));
}
} }
if (!string.IsNullOrEmpty(unitType)) if (!string.IsNullOrEmpty(unitType))
issuedates = issuedates.Where(w => w.UnitType.Contains(unitType)).ToList(); issuedates = issuedates.Where(w => w.UnitType.Contains(unitType)).ToList();
...@@ -1094,7 +1119,7 @@ public ApiResponse IssueStatistics(int allotId, int userid, string realName, str ...@@ -1094,7 +1119,7 @@ public ApiResponse IssueStatistics(int allotId, int userid, string realName, str
var insertIssues = preConfirmationDisplay.Where(w => w.OperationType == (int)Attendance.OperationType.新增).ToList(); var insertIssues = preConfirmationDisplay.Where(w => w.OperationType == (int)Attendance.OperationType.新增).ToList();
var updateIssues = preConfirmationDisplay.Where(w => w.OperationType == (int)Attendance.OperationType.修改).ToList(); var updateIssues = preConfirmationDisplay.Where(w => w.OperationType == (int)Attendance.OperationType.修改).ToList();
var deleteIssues = preConfirmationDisplay.Where(w => w.OperationType == (int)Attendance.OperationType.删除).Select(s => s.PersonnelNumber).ToList(); var deleteIssues = preConfirmationDisplay.Where(w => w.OperationType == (int)Attendance.OperationType.删除).Select(w => w.Id).ToList();
if (insertIssues.Any()) if (insertIssues.Any())
{ {
var inserts = insertIssues.Select(item => var inserts = insertIssues.Select(item =>
...@@ -1127,7 +1152,9 @@ public ApiResponse IssueStatistics(int allotId, int userid, string realName, str ...@@ -1127,7 +1152,9 @@ public ApiResponse IssueStatistics(int allotId, int userid, string realName, str
List<per_attendance_issue> updateIssuedates = new List<per_attendance_issue>(); List<per_attendance_issue> updateIssuedates = new List<per_attendance_issue>();
foreach (var item in updateIssues) foreach (var item in updateIssues)
{ {
var issuePersonnel = issues.FirstOrDefault(w => w.PersonnelNumber == item.PersonnelNumber && w.Code == item.Code); var issuePersonnel = issues.FirstOrDefault(w => w.Id == item.Id);
if (issuePersonnel != null)
{
issuePersonnel.UnitType = item.UnitType; issuePersonnel.UnitType = item.UnitType;
issuePersonnel.AccountingUnit = item.AccountingUnit; issuePersonnel.AccountingUnit = item.AccountingUnit;
issuePersonnel.PermanentStaff = item.PermanentStaff; issuePersonnel.PermanentStaff = item.PermanentStaff;
...@@ -1146,11 +1173,12 @@ public ApiResponse IssueStatistics(int allotId, int userid, string realName, str ...@@ -1146,11 +1173,12 @@ public ApiResponse IssueStatistics(int allotId, int userid, string realName, str
issuePersonnel.Remarks = ""; issuePersonnel.Remarks = "";
updateIssuedates.Add(issuePersonnel); updateIssuedates.Add(issuePersonnel);
} }
}
perforPerAttendanceIssueRepository.UpdateRange(updateIssuedates.ToArray()); perforPerAttendanceIssueRepository.UpdateRange(updateIssuedates.ToArray());
} }
if (deleteIssues.Any()) if (deleteIssues.Any())
{ {
var deletePersonnel = issues.Where(w => deleteIssues.Contains(w.PersonnelNumber)).ToList(); var deletePersonnel = issues.Where(w => deleteIssues.Contains(w.Id)).ToList();
perforPerAttendanceIssueRepository.RemoveRange(deletePersonnel.ToArray()); perforPerAttendanceIssueRepository.RemoveRange(deletePersonnel.ToArray());
} }
......
...@@ -738,7 +738,11 @@ public ApiResponse BatchSaveAccounting(int allotId, SaveCollectData request) ...@@ -738,7 +738,11 @@ public ApiResponse BatchSaveAccounting(int allotId, SaveCollectData request)
/// <param name="iD"></param> /// <param name="iD"></param>
public void Copy(per_allot allot) public void Copy(per_allot allot)
{ {
NewCopy(new CopyRequest() { AllotId = allot.ID, Type = new[] { "personnels", "workItems", "drugTypeDisburses", "drugTypeFactors", "deptTypes", "agains", "accountings", "department" } }); NewCopy(new CopyRequest()
{
AllotId = allot.ID,
Type = new[] { "personnels", "workItems", "drugTypeDisburses", "drugTypeFactors", "deptTypes", "agains", "accountings", "department", "attendanceType" }
});
} }
//todo:新copy //todo:新copy
...@@ -764,6 +768,7 @@ public void NewCopy(CopyRequest request) ...@@ -764,6 +768,7 @@ public void NewCopy(CopyRequest request)
{ "deptTypes", (allot, prevAllotId) =>_copyService.Copy_DeptTypes(allot, prevAllotId, delHistotyData:true) }, { "deptTypes", (allot, prevAllotId) =>_copyService.Copy_DeptTypes(allot, prevAllotId, delHistotyData:true) },
{ "agains", (allot, prevAllotId) =>_copyService.Copy_Agains(allot, prevAllotId, delHistotyData:true) }, { "agains", (allot, prevAllotId) =>_copyService.Copy_Agains(allot, prevAllotId, delHistotyData:true) },
{ "accountings", (allot, prevAllotId) =>_copyService.Copy_Accountings(allot, prevAllotId, delHistotyData:true) }, { "accountings", (allot, prevAllotId) =>_copyService.Copy_Accountings(allot, prevAllotId, delHistotyData:true) },
{ "attendanceType", (allot, prevAllotId) =>_copyService.Copy_AttendanceType(allot, prevAllotId, delHistotyData:true) },
{ "department", (allot, prevAllotId) =>_copyService.Copy_DeptDic(allot, prevAllotId, delHistotyData:true) }, { "department", (allot, prevAllotId) =>_copyService.Copy_DeptDic(allot, prevAllotId, delHistotyData:true) },
}; };
......
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Performance.EntityModels; using Performance.EntityModels;
using Performance.EntityModels.Entity;
using Performance.Repository; using Performance.Repository;
using Performance.Repository.Repository; using Performance.Repository.Repository;
using System; using System;
using System.Linq; using System.Linq;
using static Performance.DtoModels.Attendance;
namespace Performance.Services namespace Performance.Services
{ {
...@@ -18,6 +20,7 @@ public class CopyService : IAutoInjection ...@@ -18,6 +20,7 @@ public class CopyService : IAutoInjection
private readonly PerforCofaccountingRepository _cofaccountingRepository; private readonly PerforCofaccountingRepository _cofaccountingRepository;
private readonly PerforCofdrugtypeDisburseRepository _drugtypeDisburseRepository; private readonly PerforCofdrugtypeDisburseRepository _drugtypeDisburseRepository;
private readonly PerforCofdrugtypefactorRepository _cofdrugtypefactorRepository; private readonly PerforCofdrugtypefactorRepository _cofdrugtypefactorRepository;
private readonly PerfoPperAttendanceTypeRepository _pperAttendanceTypeRepository;
public CopyService( public CopyService(
ILogger<ConfigService> logger, ILogger<ConfigService> logger,
...@@ -28,7 +31,8 @@ public class CopyService : IAutoInjection ...@@ -28,7 +31,8 @@ public class CopyService : IAutoInjection
PerforCofdepttypeRepository perforCofdepttypeRepository, PerforCofdepttypeRepository perforCofdepttypeRepository,
PerforCofaccountingRepository cofaccountingRepository, PerforCofaccountingRepository cofaccountingRepository,
PerforCofdrugtypeDisburseRepository drugtypeDisburseRepository, PerforCofdrugtypeDisburseRepository drugtypeDisburseRepository,
PerforCofdrugtypefactorRepository cofdrugtypefactorRepository) PerforCofdrugtypefactorRepository cofdrugtypefactorRepository,
PerfoPperAttendanceTypeRepository pperAttendanceTypeRepository)
{ {
_logger = logger; _logger = logger;
_perdeptdicRepository = perdeptdicRepository; _perdeptdicRepository = perdeptdicRepository;
...@@ -39,6 +43,7 @@ public class CopyService : IAutoInjection ...@@ -39,6 +43,7 @@ public class CopyService : IAutoInjection
_cofaccountingRepository = cofaccountingRepository; _cofaccountingRepository = cofaccountingRepository;
_drugtypeDisburseRepository = drugtypeDisburseRepository; _drugtypeDisburseRepository = drugtypeDisburseRepository;
_cofdrugtypefactorRepository = cofdrugtypefactorRepository; _cofdrugtypefactorRepository = cofdrugtypefactorRepository;
_pperAttendanceTypeRepository = pperAttendanceTypeRepository;
} }
...@@ -235,5 +240,30 @@ public void Copy_DeptDic(per_allot allot, int prevAllotId, bool delHistotyData = ...@@ -235,5 +240,30 @@ public void Copy_DeptDic(per_allot allot, int prevAllotId, bool delHistotyData =
} }
} }
public void Copy_AttendanceType(per_allot allot, int prevAllotId, bool delHistotyData = false)
{
var flag = delHistotyData;
_logger.LogInformation($"copy attendanceType");
var attendanceTypes = _pperAttendanceTypeRepository.GetEntities(t => t.AllotId == allot.ID);
if (delHistotyData && attendanceTypes != null && attendanceTypes.Any())
flag = _pperAttendanceTypeRepository.RemoveRange(attendanceTypes.ToArray());
if (flag || attendanceTypes == null || !attendanceTypes.Any())
{
attendanceTypes = _pperAttendanceTypeRepository.GetEntities(t => t.AllotId == prevAllotId) ?? _pperAttendanceTypeRepository.GetEntities(t => t.AllotId == -1);
if (attendanceTypes != null && attendanceTypes.Any())
{
var newAttendanceTypes = attendanceTypes.Select(t => new per_attendance_type
{
AllotId = allot.ID,
AttendanceName = t.AttendanceName,
HospitalId = t.HospitalId,
IsDeduction = t.IsDeduction
});
_pperAttendanceTypeRepository.AddRange(newAttendanceTypes.ToArray());
}
}
}
} }
} }
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