Commit 81c9ddee by wyc

‘考勤结果统计 ’支持按角色显示查询数据 ‘考勤下发’下发数据(增删改查)\确认或质疑\记录操作

parent 0671d0ba
......@@ -49,7 +49,7 @@ public class AccountController : Controller
/// {
/// "logintype": 2,
/// "account": "admin",
/// "password": "e10adc3949ba59abbe56e057f20f883e",
/// "password": "b59c67bf196a4758191e42f76670ceba",
/// "appname": "string",
/// "device": "web"
/// }
......
......@@ -9,6 +9,7 @@
using System;
using System.IO;
using Newtonsoft.Json;
using System.Threading.Tasks;
namespace Performance.Api.Controllers
{
......@@ -17,11 +18,13 @@ namespace Performance.Api.Controllers
public class AttendanceController : ControllerBase
{
private readonly AttendanceService _attendanceService;
private ClaimService claim;
public AttendanceController(
AttendanceService attendanceService
AttendanceService attendanceService, ClaimService claim
)
{
_attendanceService = attendanceService;
this.claim = claim;
}
/*
......@@ -41,7 +44,8 @@ AttendanceService attendanceService
public ApiResponse<List<AttendanceStatistics>> GetAttendance(int allotId)
{
// 查询考勤视图,并按照设计图做格式转换 仅查询开始结束
var result = _attendanceService.GetAttendance(allotId);
var userid = claim.GetUserId();
var result = _attendanceService.GetAttendance(allotId, userid);
return result;
}
......@@ -185,7 +189,8 @@ public ApiResponse AttendanceBatch(int allotId, int hospitalId, SaveCollectData
public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allotId)
{
// 返回结果参考接口 employee/apr/getdeptdetail
return _attendanceService.GetAttendanceStatistics(allotId);
var userid = claim.GetUserId();
return _attendanceService.GetAttendanceStatistics(allotId, userid);
}
#region 下载
......@@ -209,7 +214,8 @@ public IActionResult DownloadAttendance(int allotId)
new ExcelDownloadHeads { Alias = "在科开始时问", Name = nameof(AttendanceStatistics.BeginDate) },
new ExcelDownloadHeads { Alias = "在科结束时间", Name = nameof(AttendanceStatistics.EndDate) },
};
var result = _attendanceService.GetAttendance(allotId).Data;
var userid = claim.GetUserId();
var result = _attendanceService.GetAttendance(allotId, userid).Data;
var ser = JsonConvert.SerializeObject(result);
var rows = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(ser);
......@@ -327,8 +333,8 @@ public IActionResult DownloadStatistics(int allotId)
excelDownloadHeads.Add(new ExcelDownloadHeads() { Alias = item.AttendanceName, Name = item.AttendanceName });
}
excelDownloadHeads.Add(new ExcelDownloadHeads() { Alias = "考勤天数", Name = "AttendanceDays" });
var result = _attendanceService.GetAttendanceStatistics(allotId).Data;
var userid = claim.GetUserId();
var result = _attendanceService.GetAttendanceStatistics(allotId, userid).Data;
var ser = JsonConvert.SerializeObject(result);
var rows = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(ser);
......@@ -359,5 +365,64 @@ public IActionResult DownloadStatistics(int allotId)
}
#endregion
#region 最终考勤结果
//// 最终考勤结果下发
//// 判断一下,是否是首次下发
//// 如果首次下发
//// 存储到表中per_attendance_issue
//// 不是首次下发
//// 自动驳回检查(涉及哪些人哪些科)
///// <summary>
///// 最终考勤结果下发(预确认显示)
///// </summary>
///// <param name="allotId"></param>
///// <param name="userid"></param>
///// <returns></returns>
//[HttpPost]
//[Route("issue/statistics/PreConfirmationDisplay")]
//public ApiResponse<List<PerAttendanceIssueDto>> PreConfirmationDisplay(int allotId)
//{
// var userid = claim.GetUserId();
// return _attendanceService.PreConfirmationDisplay(allotId,userid);
//}
/// <summary>
/// 最终考勤结果下发
/// </summary>
/// <param name="allotId"></param>
/// <param name="hospitalId"></param>
/// <returns></returns>
[HttpPost]
[Route("issue/statistics/{allotId}")]
public ApiResponse IssueStatistics(int allotId, int hospitalId)
{
var userid = claim.GetUserId();
return _attendanceService.IssueStatistics(allotId, userid, hospitalId);
}
/// <summary>
/// 最终考勤结果质疑或确认无误((批量操作)
/// </summary>
/// <param name="allotId"></param>
/// <param name="issueid"></param>
/// <param name="choose"></param>
/// <returns></returns>
[HttpPost]
[Route("issue/statistics/choose")]
public ApiResponse ChooseStatistics(int allotId, int[] issueid, bool choose)
{
var userid = claim.GetUserId();
return _attendanceService.ChooseStatistics(allotId, userid, issueid, choose);
}
#endregion
}
}
\ No newline at end of file
......@@ -15,7 +15,7 @@
{
"logintype": 2,
"account": "admin",
"password": "e10adc3949ba59abbe56e057f20f883e",
"password": "b59c67bf196a4758191e42f76670ceba",
"appname": "string",
"device": "web"
}
......@@ -413,6 +413,31 @@
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.PreConfirmationDisplay(System.Int32)">
<summary>
最终考勤结果下发(预确认显示)
</summary>
<param name="allotId"></param>
<param name="hospitalId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.IssueStatistics(System.Int32,System.Int32)">
<summary>
最终考勤结果下发
</summary>
<param name="allotId"></param>
<param name="hospitalId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.ChooseStatistics(System.Int32,System.Int32[],System.Boolean)">
<summary>
最终考勤结果质疑或确认无误((批量操作)
</summary>
<param name="allotId"></param>
<param name="issueid"></param>
<param name="choose"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.BudgetController.Query(Performance.DtoModels.Request.BudgetRequest)">
<summary>
预算管理查询(包含金额、占比)
......
......@@ -4308,6 +4308,11 @@
用户科室
</summary>
</member>
<member name="P:Performance.DtoModels.UserIdentity.UnitType">
<summary>
核算组别
</summary>
</member>
<member name="P:Performance.DtoModels.UserIdentity.IsInitialPassword">
<summary>
初始密码 1 初始 2 改过
......
using AutoMapper;
using Performance.DtoModels.Request;
using Performance.EntityModels;
using Performance.EntityModels.Entity;
using Performance.Infrastructure;
using System.Linq;
......@@ -276,6 +277,9 @@ public AutoMapperConfigs()
.ReverseMap();
CreateMap<cof_again,CofAgainRequest>().ReverseMap();
CreateMap<per_attendance_issue_record, per_attendance_issue>().ReverseMap();
CreateMap<PerAttendanceIssueDto, per_attendance_issue>().ReverseMap();
CreateMap<PerAttendanceIssueDto, AttendanceStatistics>().ReverseMap();
}
}
}
......@@ -117,6 +117,16 @@ public enum Deduction
核减 = 1,
不核减 = 2,
}
public enum State
{
首次下发=1,
确认=2,
确认未修改=3,
确认已修改=4,
质疑=5,
质疑未修改=6,
质疑已修改=7,
}
}
public class SecondAllot
......
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.DtoModels
{
public class PerAttendanceIssueDto
{
public int AllotId { get; set; } //绩效Id
public string Code { get; set; } //核算单元编码
public string UnitType { get; set; } //人员类别
public string AccountingUnit { get; set; } //核算单元
public string PersonnelNumber { get; set; } //工号
public string PersonnelName { get; set; } //姓名
public DateTime? BeginDate { get; set; } //在科开始时间
public DateTime? EndDate { get; set; } //在科结束时间
public int WorkFullDays { get; set; } //全勤天数
public int AttendanceDays { get; set; } //出勤天数
public int DeductionDays { get; set; } //核减天数
public int NoDeductionDays { get; set; } //不核减天数
public int OperationType { get; set; } //操作类型
}
}
......@@ -23,6 +23,10 @@ public class UserIdentity
/// 用户科室
/// </summary>
public string Department { get; set; }
/// <summary>
/// 核算组别
/// </summary>
public string UnitType { get; set; }
public List<HospitalResponse> Hospital { get; set; }
public List<RoleResponse> Role { get; set; }
/// <summary>
......
......@@ -254,6 +254,8 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options)
public virtual DbSet<sys_user_role> sys_user_role { get; set; }
public virtual DbSet<sys_version> sys_version { get; set; }
public virtual DbSet<per_attendance> per_attendance { get; set; }
public virtual DbSet<per_attendance_issue> per_attendance_issue { get; set; }
public virtual DbSet<per_attendance_issue_record> per_attendance_issue_record { get; set; }
public virtual DbSet<per_attendance_type> per_attendance_type { get; set; }
public virtual DbSet<per_attendance_vacation> per_attendance_vacation { get; set; }
public virtual DbSet<per_allot_action> per_allot_action { get; set; }
......
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.EntityModels.Entity
{
[Table("per_attendance_issue")]
public class per_attendance_issue
{
[Key]
public int Id { get; set; }
public int HospitalId { get; set; } //医院Id
public int AllotId { get; set; } //绩效Id
public string Code { get; set; } //核算单元编码
public string UnitType { get; set; } //人员类别
public string AccountingUnit { get; set; } //核算单元
public string PersonnelNumber { get; set; } //工号
public string PersonnelName { get; set; } //姓名
public DateTime? BeginDate { get; set; } //在科开始时间
public DateTime? EndDate { get; set; } //在科结束时间
public int WorkFullDays { get; set; } //全勤天数
public int AttendanceDays { get; set; } //出勤天数
public int DeductionDays { get; set; } //核减天数
public int NoDeductionDays { get; set; } //不核减天数
public int State { get; set; } //状态
public int CreateUser { get; set; } //首次下发人
public int UpdateUser { get; set; } //更新人
public DateTime? CreationTime { get; set; } //首次下发时间
public DateTime? UpdateTime { get; set; } //更新时间
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.EntityModels.Entity
{
[Table("per_attendance_issue_record")]
public class per_attendance_issue_record
{
[Key]
public int Id { get; set; }
public int HospitalId { get; set; } //医院Id
public int AllotId { get; set; } //绩效Id
public string Code { get; set; } //核算单元编码
public string UnitType { get; set; } //人员类别
public string AccountingUnit { get; set; } //核算单元
public string PersonnelNumber { get; set; } //工号
public string PersonnelName { get; set; } //姓名
public DateTime? BeginDate { get; set; } //在科开始时间
public DateTime? EndDate { get; set; } //在科结束时间
public int WorkFullDays { get; set; } //全勤天数
public int AttendanceDays { get; set; } //出勤天数
public int DeductionDays { get; set; } //核减天数
public int NoDeductionDays { get; set; } //不核减天数
public int State { get; set; } //状态
public string OperationType { get; set; } //操作类型
public int CreateUser { get; set; } //操作人
public DateTime? CreationTime { get; set; } //操作时间
}
}
using Performance.EntityModels;
using Performance.EntityModels.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.Repository.Repository
{
public partial class PerforPerAttendanceIssueRecordRepository : PerforRepository<per_attendance_issue_record>
{
/// <summary>
/// per_attendance_issue_record Repository
/// </summary>
public PerforPerAttendanceIssueRecordRepository(PerformanceDbContext context) : base(context)
{
}
}
}
using Performance.EntityModels;
using Performance.EntityModels.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.Repository.Repository
{
public partial class PerforPerAttendanceIssueRepository : PerforRepository<per_attendance_issue>
{
/// <summary>
/// per_attendance_issue Repository
/// </summary>
public PerforPerAttendanceIssueRepository(PerformanceDbContext context) : base(context)
{
}
}
}
......@@ -26,42 +26,60 @@ public class AttendanceService : IAutoInjection
private readonly ILogger<AttendanceService> logger;
private readonly PerforPerallotRepository perforPerallotRepository;
private readonly PerforPerAttendanceRepository perforPerAttendanceRepository;
private readonly PerforPerAttendanceIssueRepository perforPerAttendanceIssueRepository;
private readonly PerfoPperAttendanceTypeRepository perfoPperAttendanceTypeRepository;
private readonly PerfoPperAttendanceVacationeRepository perfoPperAttendanceVacationeRepository;
private readonly PerforPerdeptdicRepository perdeptdicRepository;
private readonly PerforPeremployeeRepository perforPeremployeeRepository;
private readonly PerforCofaccountingRepository cofaccountingRepository;
private readonly RoleService roleService;
private readonly UserService userService;
private readonly PerforPerAttendanceIssueRecordRepository perforPerAttendanceIssueRecordRepository;
public AttendanceService(
IMapper mapper,
ILogger<AttendanceService> logger,
PerforPerallotRepository perforPerallotRepository,
PerforPerAttendanceRepository perforPerAttendanceRepository,
PerforPerAttendanceIssueRepository perforPerAttendanceIssueRepository,
PerfoPperAttendanceTypeRepository perfoPperAttendanceTypeRepository,
PerfoPperAttendanceVacationeRepository perfoPperAttendanceVacationeRepository,
PerforPerdeptdicRepository perdeptdicRepository,
PerforPeremployeeRepository perforPeremployeeRepository,
PerforCofaccountingRepository cofaccountingRepository)
PerforCofaccountingRepository cofaccountingRepository,
RoleService roleService,
UserService userService,
PerforPerAttendanceIssueRecordRepository perforPerAttendanceIssueRecordRepository
)
{
this.mapper = mapper;
this.logger = logger;
this.perforPerallotRepository = perforPerallotRepository;
this.perforPerAttendanceRepository = perforPerAttendanceRepository;
this.perforPerAttendanceIssueRepository = perforPerAttendanceIssueRepository;
this.perfoPperAttendanceTypeRepository = perfoPperAttendanceTypeRepository;
this.perfoPperAttendanceVacationeRepository = perfoPperAttendanceVacationeRepository;
this.perdeptdicRepository = perdeptdicRepository;
this.perforPeremployeeRepository = perforPeremployeeRepository;
this.cofaccountingRepository = cofaccountingRepository;
this.roleService = roleService;
this.userService = userService;
this.perforPerAttendanceIssueRecordRepository = perforPerAttendanceIssueRecordRepository;
}
#region 初始考勤页面
public ApiResponse<List<AttendanceStatistics>> GetAttendance(int allotId)
public ApiResponse<List<AttendanceStatistics>> GetAttendance(int allotId, int userid)
{
var allot = perforPerallotRepository.GetEntity(w => w.ID == allotId);
if (allot == null)
throw new PerformanceException("当前绩效记录不存在");
var attendanceData = perforPerallotRepository.GetAttendance(allotId);
var roleType = new[] { (int)Role.护士长, (int)Role.科主任, (int)Role.特殊科室, (int)Role.行政科室, };
var user = userService.GetUser(userid);
var role = roleService.GetUserRole(user.UserID);
if (role.Any(t => roleType.Contains(t.Type.Value)))
attendanceData = attendanceData.Where(w => w.AccountingUnit == user.Department && w.UnitType == user.UnitType).ToList();
List<AttendanceStatistics> statistics = new List<AttendanceStatistics>();
......@@ -322,6 +340,7 @@ public ApiResponse BatchCallIn(int allotId, int hospitalId, SaveCollectData requ
}
#endregion
#region 考勤类型
......@@ -652,7 +671,7 @@ public ApiResponse AttendanceBatch(int allotId, int hospitalId, SaveCollectData
}
#endregion
public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allotId)
public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allotId, int userid)
{
var allot = perforPerallotRepository.GetEntity(w => w.ID == allotId);
if (allot == null)
......@@ -665,7 +684,14 @@ public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allot
//var attendanceData = perforPerallotRepository.GetAttendance(allotId)
// .Where(w => numbers.Contains(w.PersonnelNumber))
// .ToList();
//查询全部数据
var attendanceData = perforPerallotRepository.GetAttendance(allotId);
//当角色对应时过滤
var roleType = new[] { (int)Role.护士长, (int)Role.科主任, (int)Role.特殊科室, (int)Role.行政科室, };
var user = userService.GetUser(userid);
var role = roleService.GetUserRole(user.UserID);
if (role.Any(t => roleType.Contains(t.Type.Value)))
attendanceData = attendanceData.Where(w => w.AccountingUnit == user.Department && w.UnitType == user.UnitType).ToList();
List<AttendanceStatistics> statistics = new List<AttendanceStatistics>();
// 交叉补全科室结束时间
......@@ -738,6 +764,213 @@ public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allot
return new ApiResponse<List<AttendanceStatistics>>(ResponseType.OK, "", statistics);
}
//public ApiResponse<List<PerAttendanceIssueDto>> PreConfirmationDisplay(int allotId, int userid)
//{
// return null;
//}
//下发
public ApiResponse IssueStatistics(int allotId, int userid, int hospitalId)
{
//首次下发
var statistics = GetAttendanceStatistics(allotId, userid).Data;
var issues = perforPerAttendanceIssueRepository.GetEntities(w => w.AllotId == allotId);
var issuePersonnelNumber = issues.Select(s => s.PersonnelNumber);
var scStatistics = statistics.Where(w => !issuePersonnelNumber.Contains(w.PersonnelNumber)).ToList();
if (scStatistics.Any())
{
var issuedates = scStatistics.Select(item =>
{
int deductionDays = item.Detial.Where(w => !w.Remark.Contains("不核减")).Sum(w => w.Value);
int noDeductionDays = item.Detial.Sum(w => w.Value) - deductionDays;
var cofaccounting = cofaccountingRepository.GetEntity(w => w.UnitType == item.UnitType && w.AccountingUnit == item.AccountingUnit);
var code = cofaccounting?.Code;
return new per_attendance_issue()
{
AllotId = item.AllotID,
HospitalId = hospitalId,
Code = code,
UnitType = item.UnitType,
AccountingUnit = item.AccountingUnit,
PersonnelNumber = item.PersonnelNumber,
PersonnelName = item.PersonnelName,
BeginDate = item.BeginDate,
EndDate = item.EndDate,
DeductionDays = deductionDays,
NoDeductionDays = noDeductionDays,
AttendanceDays = item.AttendanceDays,
WorkFullDays = item.AttendanceDays + deductionDays,
CreateUser = userid,
CreationTime = DateTime.Now,
UpdateUser = userid,
UpdateTime = DateTime.Now,
State = (int)Attendance.State.首次下发,
};
});
perforPerAttendanceIssueRepository.AddRange(issuedates.ToArray());
//记录新增
var insert = mapper.Map<IEnumerable<per_attendance_issue_record>>(issuedates);
foreach (var record in insert)
{
record.OperationType = "新增";
record.CreateUser = userid;
record.CreationTime = DateTime.Now;
}
perforPerAttendanceIssueRecordRepository.AddRange(insert.ToArray());
}
Func<per_attendance_issue, AttendanceStatistics, bool> func = (issue, statistic) =>
{
var result = true;
result = issue.BeginDate == statistic.BeginDate &&
issue.EndDate == statistic.EndDate &&
issue.AttendanceDays == statistic.AttendanceDays &&
issue.DeductionDays == statistic.Detial.Where(w => !w.Remark.Contains("不核减")).Sum(w => w.Value) &&
issue.NoDeductionDays == statistic.Detial.Where(w => !w.Remark.Equals("核减")).Sum(w => w.Value);
return result;
};
#region 确认后的下发
var issueConfirm = issues.Where(w => w.State == (int)Attendance.State.确认 || w.State == (int)Attendance.State.确认已修改 || w.State == (int)Attendance.State.确认未修改).ToList();
var issueConfirmPersonnelNumber = issueConfirm.Select(s => s.PersonnelNumber);
var qrStatistics = statistics.Where(w => issueConfirmPersonnelNumber.Contains(w.PersonnelNumber)).ToList();
if (qrStatistics.Any())
{
List<per_attendance_issue> qsIssuedates = new List<per_attendance_issue>();
foreach (var personnelNumber in issueConfirmPersonnelNumber)
{
var staticPersonnel = qrStatistics.FirstOrDefault(w => w.PersonnelNumber == personnelNumber);
var issuePersonnel = issueConfirm.FirstOrDefault(w => w.PersonnelNumber == personnelNumber);
if (!func(issuePersonnel, staticPersonnel))
{
issuePersonnel.BeginDate = staticPersonnel.BeginDate;
issuePersonnel.EndDate = staticPersonnel.EndDate;
issuePersonnel.AttendanceDays = staticPersonnel.AttendanceDays;
issuePersonnel.WorkFullDays = staticPersonnel.AttendanceDays + staticPersonnel.Detial.Where(w => !w.Remark.Contains("不核减")).Sum(w => w.Value);
issuePersonnel.DeductionDays = staticPersonnel.Detial.Where(w => !w.Remark.Contains("不核减")).Sum(w => w.Value);
issuePersonnel.NoDeductionDays = staticPersonnel.Detial.Where(w => !w.Remark.Equals("核减")).Sum(w => w.Value);
issuePersonnel.State = (int)Attendance.State.确认已修改;
}
else
{
issuePersonnel.State = (int)Attendance.State.确认未修改;
}
qsIssuedates.Add(issuePersonnel);
}
perforPerAttendanceIssueRepository.UpdateRange(qsIssuedates.ToArray());
//记录修改
var Issuedates = qsIssuedates.ToList();
foreach (var item in qsIssuedates)
{
if (item.State == (int)Attendance.State.确认已修改 || item.State == (int)Attendance.State.质疑已修改) continue;
Issuedates.Remove(item);
}
var qsInsert = mapper.Map<List<per_attendance_issue_record>>(Issuedates);
if (qsInsert.Any())
foreach (var record in qsInsert)
{
record.Id = 0;
record.OperationType = "修改";
record.CreateUser = userid;
record.CreationTime = DateTime.Now;
}
perforPerAttendanceIssueRecordRepository.AddRange(qsInsert.ToArray());
}
#endregion
#region 质疑后的下发
var issueQuestion = issues.Where(w => w.State == (int)Attendance.State.质疑 || w.State == (int)Attendance.State.质疑已修改 || w.State == (int)Attendance.State.质疑未修改).ToList();
var issueQuestionPersonnelNumber = issueQuestion.Select(s => s.PersonnelNumber).ToList();
var zyStatistics = statistics.Where(w => issueQuestionPersonnelNumber.Contains(w.PersonnelNumber)).ToList();
if (zyStatistics.Any())
{
List<per_attendance_issue> zyIssuedates = new List<per_attendance_issue>();
foreach (var personnelNumber in issueQuestionPersonnelNumber)
{
var staticPersonnel = zyStatistics.FirstOrDefault(w => w.PersonnelNumber == personnelNumber);
var issuePersonnel = issueQuestion.FirstOrDefault(w => w.PersonnelNumber == personnelNumber);
if (!func(issuePersonnel, staticPersonnel))
{
issuePersonnel.BeginDate = staticPersonnel.BeginDate;
issuePersonnel.EndDate = staticPersonnel.EndDate;
issuePersonnel.AttendanceDays = staticPersonnel.AttendanceDays;
issuePersonnel.WorkFullDays = staticPersonnel.AttendanceDays + staticPersonnel.Detial.Where(w => !w.Remark.Contains("不核减")).Sum(w => w.Value);
issuePersonnel.DeductionDays = staticPersonnel.Detial.Where(w => !w.Remark.Contains("不核减")).Sum(w => w.Value);
issuePersonnel.NoDeductionDays = staticPersonnel.Detial.Where(w => !w.Remark.Equals("核减")).Sum(w => w.Value);
issuePersonnel.State = (int)Attendance.State.质疑已修改;
}
else
{
issuePersonnel.State = (int)Attendance.State.质疑未修改;
}
zyIssuedates.Add(issuePersonnel);
}
perforPerAttendanceIssueRepository.UpdateRange(zyIssuedates.ToArray());
//记录修改
var Issuedates = zyIssuedates.ToList();
foreach (var item in zyIssuedates)
{
if (item.State == (int)Attendance.State.确认已修改 || item.State == (int)Attendance.State.质疑已修改) continue;
Issuedates.Remove(item);
}
var zyInsert = mapper.Map<List<per_attendance_issue_record>>(Issuedates);
if (zyInsert.Any())
foreach (var record in zyInsert)
{
record.Id = 0;
record.OperationType = "修改";
record.CreateUser = userid;
record.CreationTime = DateTime.Now;
}
perforPerAttendanceIssueRecordRepository.AddRange(zyInsert.ToArray());
}
#endregion
#region 删除多余的
var statisticsPersonnelNumber = statistics.Select(s => s.PersonnelNumber).ToList();
var shanchuStatistics = issues.Where(w => !statisticsPersonnelNumber.Contains(w.PersonnelNumber)).ToList();
if (shanchuStatistics.Any())
{
perforPerAttendanceIssueRepository.RemoveRange(shanchuStatistics.ToArray());
////记录质疑修改
var scInsert = mapper.Map<List<per_attendance_issue_record>>(shanchuStatistics.ToList());
foreach (var record in scInsert)
{
record.OperationType = "删除";
record.CreateUser = userid;
record.CreationTime = DateTime.Now;
}
perforPerAttendanceIssueRecordRepository.AddRange(scInsert.ToArray());
}
#endregion
return new ApiResponse(ResponseType.OK, "下发成功");
}
//最终考勤结果质疑或确认无误((批量操作)
public ApiResponse ChooseStatistics(int allotId, int userid, int[] issueid, bool choose)
{
var issuedates = perforPerAttendanceIssueRepository.GetEntities(w => w.AllotId == allotId && issueid.Contains(w.Id)).ToList();
foreach (var item in issuedates)
{
item.State = choose ? (int)Attendance.State.确认 : (int)Attendance.State.质疑;
item.UpdateUser = userid;
item.UpdateTime = DateTime.Now;
}
perforPerAttendanceIssueRepository.UpdateRange(issuedates.ToArray());
return new ApiResponse(ResponseType.OK);
}
// 拆分请假时间段为每个日期
private List<DateTime> SplitEveryDay(DateTime begin, DateTime end)
{
......@@ -903,5 +1136,7 @@ public string ExcelDownload(List<Dictionary<string, object>> rows, string name,
(nameof(RecordAttendcance.BegDate), "开始时间", t => t.BegDate),
(nameof(RecordAttendcance.EndDate), "结束时间", t => t.EndDate),
};
}
}
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