Commit 81c9ddee by wyc

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

parent 0671d0ba
...@@ -49,7 +49,7 @@ public class AccountController : Controller ...@@ -49,7 +49,7 @@ public class AccountController : Controller
/// { /// {
/// "logintype": 2, /// "logintype": 2,
/// "account": "admin", /// "account": "admin",
/// "password": "e10adc3949ba59abbe56e057f20f883e", /// "password": "b59c67bf196a4758191e42f76670ceba",
/// "appname": "string", /// "appname": "string",
/// "device": "web" /// "device": "web"
/// } /// }
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
using System; using System;
using System.IO; using System.IO;
using Newtonsoft.Json; using Newtonsoft.Json;
using System.Threading.Tasks;
namespace Performance.Api.Controllers namespace Performance.Api.Controllers
{ {
...@@ -17,11 +18,13 @@ namespace Performance.Api.Controllers ...@@ -17,11 +18,13 @@ namespace Performance.Api.Controllers
public class AttendanceController : ControllerBase public class AttendanceController : ControllerBase
{ {
private readonly AttendanceService _attendanceService; private readonly AttendanceService _attendanceService;
private ClaimService claim;
public AttendanceController( public AttendanceController(
AttendanceService attendanceService AttendanceService attendanceService, ClaimService claim
) )
{ {
_attendanceService = attendanceService; _attendanceService = attendanceService;
this.claim = claim;
} }
/* /*
...@@ -41,7 +44,8 @@ AttendanceService attendanceService ...@@ -41,7 +44,8 @@ AttendanceService attendanceService
public ApiResponse<List<AttendanceStatistics>> GetAttendance(int allotId) public ApiResponse<List<AttendanceStatistics>> GetAttendance(int allotId)
{ {
// 查询考勤视图,并按照设计图做格式转换 仅查询开始结束 // 查询考勤视图,并按照设计图做格式转换 仅查询开始结束
var result = _attendanceService.GetAttendance(allotId); var userid = claim.GetUserId();
var result = _attendanceService.GetAttendance(allotId, userid);
return result; return result;
} }
...@@ -185,7 +189,8 @@ public ApiResponse AttendanceBatch(int allotId, int hospitalId, SaveCollectData ...@@ -185,7 +189,8 @@ public ApiResponse AttendanceBatch(int allotId, int hospitalId, SaveCollectData
public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allotId) public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allotId)
{ {
// 返回结果参考接口 employee/apr/getdeptdetail // 返回结果参考接口 employee/apr/getdeptdetail
return _attendanceService.GetAttendanceStatistics(allotId); var userid = claim.GetUserId();
return _attendanceService.GetAttendanceStatistics(allotId, userid);
} }
#region 下载 #region 下载
...@@ -209,7 +214,8 @@ public IActionResult DownloadAttendance(int allotId) ...@@ -209,7 +214,8 @@ public IActionResult DownloadAttendance(int allotId)
new ExcelDownloadHeads { Alias = "在科开始时问", Name = nameof(AttendanceStatistics.BeginDate) }, new ExcelDownloadHeads { Alias = "在科开始时问", Name = nameof(AttendanceStatistics.BeginDate) },
new ExcelDownloadHeads { Alias = "在科结束时间", Name = nameof(AttendanceStatistics.EndDate) }, 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 ser = JsonConvert.SerializeObject(result);
var rows = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(ser); var rows = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(ser);
...@@ -327,8 +333,8 @@ public IActionResult DownloadStatistics(int allotId) ...@@ -327,8 +333,8 @@ public IActionResult DownloadStatistics(int allotId)
excelDownloadHeads.Add(new ExcelDownloadHeads() { Alias = item.AttendanceName, Name = item.AttendanceName }); excelDownloadHeads.Add(new ExcelDownloadHeads() { Alias = item.AttendanceName, Name = item.AttendanceName });
} }
excelDownloadHeads.Add(new ExcelDownloadHeads() { Alias = "考勤天数", Name = "AttendanceDays" }); excelDownloadHeads.Add(new ExcelDownloadHeads() { Alias = "考勤天数", Name = "AttendanceDays" });
var userid = claim.GetUserId();
var result = _attendanceService.GetAttendanceStatistics(allotId).Data; var result = _attendanceService.GetAttendanceStatistics(allotId, userid).Data;
var ser = JsonConvert.SerializeObject(result); var ser = JsonConvert.SerializeObject(result);
var rows = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(ser); var rows = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(ser);
...@@ -359,5 +365,64 @@ public IActionResult DownloadStatistics(int allotId) ...@@ -359,5 +365,64 @@ public IActionResult DownloadStatistics(int allotId)
} }
#endregion #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 @@ ...@@ -15,7 +15,7 @@
{ {
"logintype": 2, "logintype": 2,
"account": "admin", "account": "admin",
"password": "e10adc3949ba59abbe56e057f20f883e", "password": "b59c67bf196a4758191e42f76670ceba",
"appname": "string", "appname": "string",
"device": "web" "device": "web"
} }
...@@ -413,6 +413,31 @@ ...@@ -413,6 +413,31 @@
<param name="allotId"></param> <param name="allotId"></param>
<returns></returns> <returns></returns>
</member> </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)"> <member name="M:Performance.Api.Controllers.BudgetController.Query(Performance.DtoModels.Request.BudgetRequest)">
<summary> <summary>
预算管理查询(包含金额、占比) 预算管理查询(包含金额、占比)
......
...@@ -4308,6 +4308,11 @@ ...@@ -4308,6 +4308,11 @@
用户科室 用户科室
</summary> </summary>
</member> </member>
<member name="P:Performance.DtoModels.UserIdentity.UnitType">
<summary>
核算组别
</summary>
</member>
<member name="P:Performance.DtoModels.UserIdentity.IsInitialPassword"> <member name="P:Performance.DtoModels.UserIdentity.IsInitialPassword">
<summary> <summary>
初始密码 1 初始 2 改过 初始密码 1 初始 2 改过
......
using AutoMapper; using AutoMapper;
using Performance.DtoModels.Request; using Performance.DtoModels.Request;
using Performance.EntityModels; using Performance.EntityModels;
using Performance.EntityModels.Entity;
using Performance.Infrastructure; using Performance.Infrastructure;
using System.Linq; using System.Linq;
...@@ -276,6 +277,9 @@ public AutoMapperConfigs() ...@@ -276,6 +277,9 @@ public AutoMapperConfigs()
.ReverseMap(); .ReverseMap();
CreateMap<cof_again,CofAgainRequest>().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 ...@@ -117,6 +117,16 @@ public enum Deduction
核减 = 1, 核减 = 1,
不核减 = 2, 不核减 = 2,
} }
public enum State
{
首次下发=1,
确认=2,
确认未修改=3,
确认已修改=4,
质疑=5,
质疑未修改=6,
质疑已修改=7,
}
} }
public class SecondAllot 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 ...@@ -23,6 +23,10 @@ public class UserIdentity
/// 用户科室 /// 用户科室
/// </summary> /// </summary>
public string Department { get; set; } public string Department { get; set; }
/// <summary>
/// 核算组别
/// </summary>
public string UnitType { get; set; }
public List<HospitalResponse> Hospital { get; set; } public List<HospitalResponse> Hospital { get; set; }
public List<RoleResponse> Role { get; set; } public List<RoleResponse> Role { get; set; }
/// <summary> /// <summary>
......
...@@ -254,6 +254,8 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options) ...@@ -254,6 +254,8 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options)
public virtual DbSet<sys_user_role> sys_user_role { get; set; } public virtual DbSet<sys_user_role> sys_user_role { get; set; }
public virtual DbSet<sys_version> sys_version { 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> 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_type> per_attendance_type { get; set; }
public virtual DbSet<per_attendance_vacation> per_attendance_vacation { get; set; } public virtual DbSet<per_attendance_vacation> per_attendance_vacation { get; set; }
public virtual DbSet<per_allot_action> per_allot_action { 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 ...@@ -26,42 +26,60 @@ public class AttendanceService : IAutoInjection
private readonly ILogger<AttendanceService> logger; private readonly ILogger<AttendanceService> logger;
private readonly PerforPerallotRepository perforPerallotRepository; private readonly PerforPerallotRepository perforPerallotRepository;
private readonly PerforPerAttendanceRepository perforPerAttendanceRepository; private readonly PerforPerAttendanceRepository perforPerAttendanceRepository;
private readonly PerforPerAttendanceIssueRepository perforPerAttendanceIssueRepository;
private readonly PerfoPperAttendanceTypeRepository perfoPperAttendanceTypeRepository; private readonly PerfoPperAttendanceTypeRepository perfoPperAttendanceTypeRepository;
private readonly PerfoPperAttendanceVacationeRepository perfoPperAttendanceVacationeRepository; private readonly PerfoPperAttendanceVacationeRepository perfoPperAttendanceVacationeRepository;
private readonly PerforPerdeptdicRepository perdeptdicRepository; private readonly PerforPerdeptdicRepository perdeptdicRepository;
private readonly PerforPeremployeeRepository perforPeremployeeRepository; private readonly PerforPeremployeeRepository perforPeremployeeRepository;
private readonly PerforCofaccountingRepository cofaccountingRepository; private readonly PerforCofaccountingRepository cofaccountingRepository;
private readonly RoleService roleService;
private readonly UserService userService;
private readonly PerforPerAttendanceIssueRecordRepository perforPerAttendanceIssueRecordRepository;
public AttendanceService( public AttendanceService(
IMapper mapper, IMapper mapper,
ILogger<AttendanceService> logger, ILogger<AttendanceService> logger,
PerforPerallotRepository perforPerallotRepository, PerforPerallotRepository perforPerallotRepository,
PerforPerAttendanceRepository perforPerAttendanceRepository, PerforPerAttendanceRepository perforPerAttendanceRepository,
PerforPerAttendanceIssueRepository perforPerAttendanceIssueRepository,
PerfoPperAttendanceTypeRepository perfoPperAttendanceTypeRepository, PerfoPperAttendanceTypeRepository perfoPperAttendanceTypeRepository,
PerfoPperAttendanceVacationeRepository perfoPperAttendanceVacationeRepository, PerfoPperAttendanceVacationeRepository perfoPperAttendanceVacationeRepository,
PerforPerdeptdicRepository perdeptdicRepository, PerforPerdeptdicRepository perdeptdicRepository,
PerforPeremployeeRepository perforPeremployeeRepository, PerforPeremployeeRepository perforPeremployeeRepository,
PerforCofaccountingRepository cofaccountingRepository) PerforCofaccountingRepository cofaccountingRepository,
RoleService roleService,
UserService userService,
PerforPerAttendanceIssueRecordRepository perforPerAttendanceIssueRecordRepository
)
{ {
this.mapper = mapper; this.mapper = mapper;
this.logger = logger; this.logger = logger;
this.perforPerallotRepository = perforPerallotRepository; this.perforPerallotRepository = perforPerallotRepository;
this.perforPerAttendanceRepository = perforPerAttendanceRepository; this.perforPerAttendanceRepository = perforPerAttendanceRepository;
this.perforPerAttendanceIssueRepository = perforPerAttendanceIssueRepository;
this.perfoPperAttendanceTypeRepository = perfoPperAttendanceTypeRepository; this.perfoPperAttendanceTypeRepository = perfoPperAttendanceTypeRepository;
this.perfoPperAttendanceVacationeRepository = perfoPperAttendanceVacationeRepository; this.perfoPperAttendanceVacationeRepository = perfoPperAttendanceVacationeRepository;
this.perdeptdicRepository = perdeptdicRepository; this.perdeptdicRepository = perdeptdicRepository;
this.perforPeremployeeRepository = perforPeremployeeRepository; this.perforPeremployeeRepository = perforPeremployeeRepository;
this.cofaccountingRepository = cofaccountingRepository; this.cofaccountingRepository = cofaccountingRepository;
this.roleService = roleService;
this.userService = userService;
this.perforPerAttendanceIssueRecordRepository = perforPerAttendanceIssueRecordRepository;
} }
#region 初始考勤页面 #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); var allot = perforPerallotRepository.GetEntity(w => w.ID == allotId);
if (allot == null) if (allot == null)
throw new PerformanceException("当前绩效记录不存在"); throw new PerformanceException("当前绩效记录不存在");
var attendanceData = perforPerallotRepository.GetAttendance(allotId); 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>(); List<AttendanceStatistics> statistics = new List<AttendanceStatistics>();
...@@ -322,6 +340,7 @@ public ApiResponse BatchCallIn(int allotId, int hospitalId, SaveCollectData requ ...@@ -322,6 +340,7 @@ public ApiResponse BatchCallIn(int allotId, int hospitalId, SaveCollectData requ
} }
#endregion #endregion
#region 考勤类型 #region 考勤类型
...@@ -652,7 +671,7 @@ public ApiResponse AttendanceBatch(int allotId, int hospitalId, SaveCollectData ...@@ -652,7 +671,7 @@ public ApiResponse AttendanceBatch(int allotId, int hospitalId, SaveCollectData
} }
#endregion #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); var allot = perforPerallotRepository.GetEntity(w => w.ID == allotId);
if (allot == null) if (allot == null)
...@@ -665,7 +684,14 @@ public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allot ...@@ -665,7 +684,14 @@ public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allot
//var attendanceData = perforPerallotRepository.GetAttendance(allotId) //var attendanceData = perforPerallotRepository.GetAttendance(allotId)
// .Where(w => numbers.Contains(w.PersonnelNumber)) // .Where(w => numbers.Contains(w.PersonnelNumber))
// .ToList(); // .ToList();
//查询全部数据
var attendanceData = perforPerallotRepository.GetAttendance(allotId); 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>(); List<AttendanceStatistics> statistics = new List<AttendanceStatistics>();
// 交叉补全科室结束时间 // 交叉补全科室结束时间
...@@ -738,6 +764,213 @@ public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allot ...@@ -738,6 +764,213 @@ public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allot
return new ApiResponse<List<AttendanceStatistics>>(ResponseType.OK, "", statistics); 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) private List<DateTime> SplitEveryDay(DateTime begin, DateTime end)
{ {
...@@ -903,5 +1136,7 @@ public string ExcelDownload(List<Dictionary<string, object>> rows, string name, ...@@ -903,5 +1136,7 @@ public string ExcelDownload(List<Dictionary<string, object>> rows, string name,
(nameof(RecordAttendcance.BegDate), "开始时间", t => t.BegDate), (nameof(RecordAttendcance.BegDate), "开始时间", t => t.BegDate),
(nameof(RecordAttendcance.EndDate), "结束时间", t => t.EndDate), (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