Commit d7a54454 by ruyun.zhang

Merge branch 'featrue/考勤下发' into develop

parents 801e9e54 ea5e4a7a
...@@ -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,8 @@ ...@@ -9,6 +9,8 @@
using System; using System;
using System.IO; using System.IO;
using Newtonsoft.Json; using Newtonsoft.Json;
using System.Threading.Tasks;
using Performance.DtoModels.Response;
namespace Performance.Api.Controllers namespace Performance.Api.Controllers
{ {
...@@ -17,11 +19,13 @@ namespace Performance.Api.Controllers ...@@ -17,11 +19,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;
} }
/* /*
...@@ -32,19 +36,21 @@ AttendanceService attendanceService ...@@ -32,19 +36,21 @@ AttendanceService attendanceService
view_attendance 考勤视图 view_attendance 考勤视图
*/ */
/// <summary>
/// 查询绩效考勤记录
/// </summary>
/// <param name="allotId"></param>
/// <returns></returns>
[HttpGet("GetAttendance/{allotId}")]
public ApiResponse<List<AttendanceStatistics>> GetAttendance(int allotId)
{
// 查询考勤视图,并按照设计图做格式转换 仅查询开始结束
var result = _attendanceService.GetAttendance(allotId);
return result; ///// <summary>
} ///// 查询绩效考勤记录
///// </summary>
///// <param name="allotId"></param>
///// <returns></returns>
//[HttpGet("GetAttendance/{allotId}")]
//public ApiResponse<List<AttendanceStatistics>> GetAttendance(int allotId)
//{
// // 查询考勤视图,并按照设计图做格式转换 仅查询开始结束
// var userid = claim.GetUserId();
// var result = _attendanceService.GetAttendance(allotId, userid);
// return result;
//}
#region 调动记录 #region 调动记录
...@@ -185,49 +191,53 @@ public ApiResponse AttendanceBatch(int allotId, int hospitalId, SaveCollectData ...@@ -185,49 +191,53 @@ 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 下载
/// <summary> #region 初始考勤记录下载
/// 初始考勤记录下载 ///// <summary>
/// </summary> ///// 初始考勤记录下载
/// <param name="allotId"></param> ///// </summary>
/// <returns></returns> ///// <param name="allotId"></param>
[HttpPost] ///// <returns></returns>
[Route("download/attendance/{allotId}")] //[HttpPost]
public IActionResult DownloadAttendance(int allotId) //[Route("download/attendance/{allotId}")]
{ //public IActionResult DownloadAttendance(int allotId)
List<ExcelDownloadHeads> excelDownloadHeads = new List<ExcelDownloadHeads>() //{
{ // List<ExcelDownloadHeads> excelDownloadHeads = new List<ExcelDownloadHeads>()
new ExcelDownloadHeads { Alias = "核算单元名称", Name = nameof(AttendanceStatistics.AccountingUnit) }, // {
new ExcelDownloadHeads { Alias = "科室名称", Name = nameof(AttendanceStatistics.Department) }, // new ExcelDownloadHeads { Alias = "核算单元名称", Name = nameof(AttendanceStatistics.AccountingUnit) },
new ExcelDownloadHeads { Alias = "姓名", Name = nameof(AttendanceStatistics.PersonnelName) }, // new ExcelDownloadHeads { Alias = "科室名称", Name = nameof(AttendanceStatistics.Department) },
new ExcelDownloadHeads { Alias = "员工号", Name = nameof(AttendanceStatistics.PersonnelNumber) }, // new ExcelDownloadHeads { Alias = "姓名", Name = nameof(AttendanceStatistics.PersonnelName) },
new ExcelDownloadHeads { Alias = "人员类别", Name = nameof(AttendanceStatistics.UnitType) }, // new ExcelDownloadHeads { Alias = "员工号", Name = nameof(AttendanceStatistics.PersonnelNumber) },
new ExcelDownloadHeads { Alias = "在科开始时问", Name = nameof(AttendanceStatistics.BeginDate) }, // new ExcelDownloadHeads { Alias = "人员类别", Name = nameof(AttendanceStatistics.UnitType) },
new ExcelDownloadHeads { Alias = "在科结束时间", Name = nameof(AttendanceStatistics.EndDate) }, // new ExcelDownloadHeads { Alias = "在科开始时问", Name = nameof(AttendanceStatistics.BeginDate) },
}; // new ExcelDownloadHeads { Alias = "在科结束时间", Name = nameof(AttendanceStatistics.EndDate) },
var result = _attendanceService.GetAttendance(allotId).Data; // };
var ser = JsonConvert.SerializeObject(result); // var userid = claim.GetUserId();
var rows = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(ser); // var result = _attendanceService.GetAttendance(allotId, userid).Data;
// var ser = JsonConvert.SerializeObject(result);
var filepath = _attendanceService.ExcelDownload(rows, "初始考勤记录", allotId, excelDownloadHeads); // var rows = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(ser);
var memoryStream = new MemoryStream(); // var filepath = _attendanceService.ExcelDownload(rows, "初始考勤记录", allotId, excelDownloadHeads);
using (var stream = new FileStream(filepath, FileMode.Open))
{ // var memoryStream = new MemoryStream();
stream.CopyToAsync(memoryStream).Wait(); // using (var stream = new FileStream(filepath, FileMode.Open))
} // {
memoryStream.Seek(0, SeekOrigin.Begin); // stream.CopyToAsync(memoryStream).Wait();
var provider = new FileExtensionContentTypeProvider(); // }
FileInfo fileInfo = new FileInfo(filepath); // memoryStream.Seek(0, SeekOrigin.Begin);
var memi = provider.Mappings[".xlsx"]; // var provider = new FileExtensionContentTypeProvider();
return File(memoryStream, memi, Path.GetFileName(fileInfo.Name)); // FileInfo fileInfo = new FileInfo(filepath);
} // var memi = provider.Mappings[".xlsx"];
// return File(memoryStream, memi, Path.GetFileName(fileInfo.Name));
//}
#endregion
#region 下载
/// <summary> /// <summary>
/// 考勤记录下载 /// 考勤记录下载
/// </summary> /// </summary>
...@@ -313,22 +323,21 @@ public IActionResult DownloadStatistics(int allotId) ...@@ -313,22 +323,21 @@ public IActionResult DownloadStatistics(int allotId)
{ {
List<ExcelDownloadHeads> excelDownloadHeads = new List<ExcelDownloadHeads>() List<ExcelDownloadHeads> excelDownloadHeads = new List<ExcelDownloadHeads>()
{ {
new ExcelDownloadHeads { Alias = "核算单元", Name = nameof(AttendanceStatistics.AccountingUnit) }, new ExcelDownloadHeads { Alias = "核算组别", Name = nameof(AttendanceStatistics.UnitType) },
new ExcelDownloadHeads { Alias = "科室名称", Name = nameof(AttendanceStatistics.Department) }, new ExcelDownloadHeads { Alias = "核算单元名称", Name = nameof(AttendanceStatistics.AccountingUnit) },
new ExcelDownloadHeads { Alias = "姓名", Name = nameof(AttendanceStatistics.PersonnelName) }, new ExcelDownloadHeads { Alias = "姓名", Name = nameof(AttendanceStatistics.PersonnelName) },
new ExcelDownloadHeads { Alias = "员工号", Name = nameof(AttendanceStatistics.PersonnelNumber) }, new ExcelDownloadHeads { Alias = "员工号", Name = nameof(AttendanceStatistics.PersonnelNumber) },
new ExcelDownloadHeads { Alias = "人员类别", Name = nameof(AttendanceStatistics.UnitType) }, 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 type = _attendanceService.GetAttendanceType(allotId); var type = _attendanceService.GetAttendanceType(allotId);
foreach (var item in type.Data) foreach (var item in type.Data)
{ {
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);
...@@ -357,7 +366,149 @@ public IActionResult DownloadStatistics(int allotId) ...@@ -357,7 +366,149 @@ public IActionResult DownloadStatistics(int allotId)
return File(memoryStream, memi, Path.GetFileName(path));*/ return File(memoryStream, memi, Path.GetFileName(path));*/
} }
/// <summary>
/// 科室确认详情(已下发结果展示列表)下载
/// </summary>
/// <param name="allotId"></param>
/// <param name="unitType">人员类别</param>
/// <param name="accountingUnit">核算单元</param>
/// <returns></returns>
[HttpPost]
[Route("download/auditDetail")]
public IActionResult DownloadAuditDetail(int allotId, string unitType, string accountingUnit, string searchTxet)
{
List<ExcelDownloadHeads> excelDownloadHeads = new List<ExcelDownloadHeads>()
{
new ExcelDownloadHeads { Alias = "核算组别", Name = nameof(AttendanceStatistics.UnitType) },
new ExcelDownloadHeads { Alias = "核算单元名称", Name = nameof(AttendanceStatistics.AccountingUnit) },
new ExcelDownloadHeads { Alias = "姓名", Name = nameof(AttendanceStatistics.PersonnelName) },
new ExcelDownloadHeads { Alias = "员工号", Name = nameof(AttendanceStatistics.PersonnelNumber) },
new ExcelDownloadHeads { Alias = "在科开始时问", Name = nameof(AttendanceStatistics.BeginDate) },
new ExcelDownloadHeads { Alias = "在科结束时间", Name = nameof(AttendanceStatistics.EndDate) },
};
var type = _attendanceService.GetAttendanceType(allotId);
foreach (var item in type.Data)
{
excelDownloadHeads.Add(new ExcelDownloadHeads() { Alias = item.AttendanceName, Name = item.AttendanceName });
}
excelDownloadHeads.Add(new ExcelDownloadHeads() { Alias = "出勤天数", Name = "AttendanceDays" });
var userid = claim.GetUserId();
var result = _attendanceService.AuditDetail(allotId, unitType, accountingUnit, searchTxet, userid).Data;
var ser = JsonConvert.SerializeObject(result);
var rows = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(ser);
var filepath = _attendanceService.ExcelDownload(rows, "最终考勤结果", allotId, excelDownloadHeads);
var memoryStream = new MemoryStream();
using (var stream = new FileStream(filepath, FileMode.Open))
{
stream.CopyToAsync(memoryStream).Wait();
}
memoryStream.Seek(0, SeekOrigin.Begin);
var provider = new FileExtensionContentTypeProvider();
FileInfo fileInfo = new FileInfo(filepath);
var memi = provider.Mappings[".xlsx"];
return File(memoryStream, memi, Path.GetFileName(fileInfo.Name));
}
#endregion #endregion
#region 最终考勤结果
/// <summary>
/// 科室确认列表
/// </summary>
/// <param name="allotId">绩效Id</param>
/// <param name="unitType">人员类别</param>
/// <param name="accountingUnit">核算单元</param>
/// <param name="state"> 操作类型 全部=0,未确认 = 1,确认 = 2,驳回 = 3,</param>
/// <returns></returns>
[HttpPost]
[Route("issue/audit/list")]
public ApiResponse<List<AttendanceAuditList>> AuditList(int allotId, string unitType, string accountingUnit, Attendance.State state)
{
return _attendanceService.AuditList(allotId, unitType, accountingUnit, state);
}
/// <summary>
/// 科室确认详情(已下发结果展示列表)
/// </summary>
/// <param name="allotId">绩效Id</param>
/// <param name="unitType"> 人员类别</param>
/// <param name="accountingUnit">核算单元</param>
/// <returns></returns>
[HttpPost]
[Route("issue/audit/detail")]
public ApiResponse<List<AttendanceAuditDetail>> AuditDetail(int allotId, string unitType, string accountingUnit, string searchTxet)
{
var userid = claim.GetUserId();
return _attendanceService.AuditDetail(allotId, unitType, accountingUnit, searchTxet, userid);
}
/// <summary>
/// 最终考勤结果下发(预确认显示)
/// </summary>
/// <param name="allotId">绩效Id</param>
/// <param name="unitType">人员类别</param>
/// <param name="accountingUnit">核算单元</param>
/// <param name="state"> 操作类型 新增 = 1, 修改 = 2, 删除 = 3,</param>
/// <returns></returns>
[HttpPost]
[Route("issue/check")]
public ApiResponse<List<PerAttendanceIssueDto>> PreConfirmationDisplay(int allotId, string unitType, string accountingUnit, Attendance.OperationType state)
{
var userid = claim.GetUserId();
return _attendanceService.PreConfirmationDisplay(allotId, userid, unitType, accountingUnit, state);
}
/// <summary>
/// 最终考勤结果下发
/// </summary>
/// <param name="allotId"></param>
/// <returns></returns>
[HttpPost]
[Route("issue/confirm")]
public ApiResponse IssueStatistics(int allotId)
{
var userid = claim.GetUserId();
var realName = claim.GetUserClaim(JwtClaimTypes.RealName);
return _attendanceService.IssueStatistics(allotId, userid, realName);
}
/// <summary>
/// 最终考勤结果驳回或确认无误((批量操作)
/// </summary>
/// <param name="attendanceIssueChoose"></param>
/// <returns></returns>
[HttpPost]
[Route("issue/choose")]
public ApiResponse ChooseStatistics(AttendanceIssueChoose attendanceIssueChoose)
{
var realName = claim.GetUserClaim(JwtClaimTypes.RealName);
return _attendanceService.ChooseStatistics(attendanceIssueChoose, realName);
}
///// <summary>
///// 最终考勤结果驳回或确认无误((批量操作)
///// </summary>
///// <param name="allotId"></param>
///// <param name="issueid">选择id</param>
///// <param name="state">操作类型 确认 = 2,驳回 = 3,</param>
///// <returns></returns>
//[HttpPost]
//[Route("issue/choose")]
//public ApiResponse ChooseStatistics(int allotId, int[] issueid, Attendance.State state, string remarks)
//{
// var realName = claim.GetUserClaim(JwtClaimTypes.RealName);
// return _attendanceService.ChooseStatistics(allotId, issueid, state, realName, remarks);
//}
#endregion
} }
} }
\ No newline at end of file
...@@ -368,13 +368,10 @@ public IActionResult WholeHospitalGrantSummaryDownload([FromBody] HospitalGrantS ...@@ -368,13 +368,10 @@ public IActionResult WholeHospitalGrantSummaryDownload([FromBody] HospitalGrantS
string.IsNullOrEmpty(request.EndTime) || !DateTime.TryParse(request.EndTime, out edate)) string.IsNullOrEmpty(request.EndTime) || !DateTime.TryParse(request.EndTime, out edate))
throw new PerformanceException("请输入正确的时间"); throw new PerformanceException("请输入正确的时间");
var resetGroupBy = request.GroupBy.Copy();
var list = _computeService.GetAllComputeViewByDateAndTotal("view_allot_sign_emp", request); var list = _computeService.GetAllComputeViewByDateAndTotal("view_allot_sign_emp", request);
if (null == list) if (null == list)
throw new PerformanceException("当前绩效记录不存在"); throw new PerformanceException("当前绩效记录不存在");
request.GroupBy = resetGroupBy;
List<string> headlist = new List<string>(); List<string> headlist = new List<string>();
foreach (var item in request.GroupBy.Union(request.SumBy).ToList()) foreach (var item in request.GroupBy.Union(request.SumBy).ToList())
...@@ -496,12 +493,11 @@ public IActionResult WholeHospitalAccountingGrantSummaryDownload([FromBody] Hosp ...@@ -496,12 +493,11 @@ public IActionResult WholeHospitalAccountingGrantSummaryDownload([FromBody] Hosp
string.IsNullOrEmpty(request.EndTime) || !DateTime.TryParse(request.EndTime, out edate)) string.IsNullOrEmpty(request.EndTime) || !DateTime.TryParse(request.EndTime, out edate))
throw new PerformanceException("请输入正确的时间"); throw new PerformanceException("请输入正确的时间");
var list = _computeService.GetAllComputeViewByDateAndTotal("view_allot_sign_dept", request); var list = _computeService.GetAllComputeViewByDateAndTotal("view_allot_sign_dept", request);
if (null == list) if (null == list)
throw new PerformanceException("当前绩效记录不存在"); throw new PerformanceException("当前绩效记录不存在");
List<string> headlist = new List<string>(); List<string> headlist = new List<string>() { };
foreach (var item in request.GroupBy.Union(request.SumBy).ToList()) foreach (var item in request.GroupBy.Union(request.SumBy).ToList())
{ {
...@@ -619,7 +615,6 @@ public IActionResult WholeHospitalFinanceGrantSummaryDownload([FromBody] Hospita ...@@ -619,7 +615,6 @@ public IActionResult WholeHospitalFinanceGrantSummaryDownload([FromBody] Hospita
string.IsNullOrEmpty(request.EndTime) || !DateTime.TryParse(request.EndTime, out edate)) string.IsNullOrEmpty(request.EndTime) || !DateTime.TryParse(request.EndTime, out edate))
throw new PerformanceException("请输入正确的时间"); throw new PerformanceException("请输入正确的时间");
var list = _computeService.GetAllComputeViewByDateAndTotal("view_allot_sign_emp_finance", request); var list = _computeService.GetAllComputeViewByDateAndTotal("view_allot_sign_emp_finance", request);
if (null == list) if (null == list)
throw new PerformanceException("当前绩效记录不存在"); throw new PerformanceException("当前绩效记录不存在");
......
...@@ -199,7 +199,7 @@ public ApiResponse OtherAutoComplete([FromBody] SecondEmpRequest request) ...@@ -199,7 +199,7 @@ public ApiResponse OtherAutoComplete([FromBody] SecondEmpRequest request)
public ApiResponse<List<SecondTempResponse>> Temp([FromBody] AllotDeptRequest request) public ApiResponse<List<SecondTempResponse>> Temp([FromBody] AllotDeptRequest request)
{ {
var userId = claimService.GetUserId(); var userId = claimService.GetUserId();
var result = secondAllotService.GetTemp(request.HospitalId, request.Department, userId); var result = secondAllotService.GetTemp(request.HospitalId, request.UnitType, request.Department, userId);
return new ApiResponse<List<SecondTempResponse>>(ResponseType.OK, result); return new ApiResponse<List<SecondTempResponse>>(ResponseType.OK, result);
} }
......
...@@ -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"
} }
...@@ -302,13 +302,6 @@ ...@@ -302,13 +302,6 @@
记录创建、下发、归档、上传绩效 记录创建、下发、归档、上传绩效
</summary> </summary>
</member> </member>
<member name="M:Performance.Api.Controllers.AttendanceController.GetAttendance(System.Int32)">
<summary>
查询绩效考勤记录
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.GetCallIn(System.Int32)"> <member name="M:Performance.Api.Controllers.AttendanceController.GetCallIn(System.Int32)">
<summary> <summary>
查询绩效调动记录 查询绩效调动记录
...@@ -385,13 +378,6 @@ ...@@ -385,13 +378,6 @@
<param name="allotId"></param> <param name="allotId"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Performance.Api.Controllers.AttendanceController.DownloadAttendance(System.Int32)">
<summary>
初始考勤记录下载
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DownloadVacation(System.Int32)"> <member name="M:Performance.Api.Controllers.AttendanceController.DownloadVacation(System.Int32)">
<summary> <summary>
考勤记录下载 考勤记录下载
...@@ -413,6 +399,58 @@ ...@@ -413,6 +399,58 @@
<param name="allotId"></param> <param name="allotId"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Performance.Api.Controllers.AttendanceController.DownloadAuditDetail(System.Int32,System.String,System.String,System.String)">
<summary>
科室确认详情(已下发结果展示列表)下载
</summary>
<param name="allotId"></param>
<param name="unitType">人员类别</param>
<param name="accountingUnit">核算单元</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.AuditList(System.Int32,System.String,System.String,Performance.DtoModels.Attendance.State)">
<summary>
科室确认列表
</summary>
<param name="allotId">绩效Id</param>
<param name="unitType">人员类别</param>
<param name="accountingUnit">核算单元</param>
<param name="state"> 操作类型 全部=0,未确认 = 1,确认 = 2,驳回 = 3,</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.AuditDetail(System.Int32,System.String,System.String,System.String)">
<summary>
科室确认详情(已下发结果展示列表)
</summary>
<param name="allotId">绩效Id</param>
<param name="unitType"> 人员类别</param>
<param name="accountingUnit">核算单元</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.PreConfirmationDisplay(System.Int32,System.String,System.String,Performance.DtoModels.Attendance.OperationType)">
<summary>
最终考勤结果下发(预确认显示)
</summary>
<param name="allotId">绩效Id</param>
<param name="unitType">人员类别</param>
<param name="accountingUnit">核算单元</param>
<param name="state"> 操作类型 新增 = 1, 修改 = 2, 删除 = 3,</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.IssueStatistics(System.Int32)">
<summary>
最终考勤结果下发
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.ChooseStatistics(Performance.DtoModels.Response.AttendanceIssueChoose)">
<summary>
最终考勤结果驳回或确认无误((批量操作)
</summary>
<param name="attendanceIssueChoose"></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>
预算管理查询(包含金额、占比) 预算管理查询(包含金额、占比)
......
...@@ -252,6 +252,66 @@ ...@@ -252,6 +252,66 @@
表示权限范围,如果与客户端申请的范围一致。 表示权限范围,如果与客户端申请的范围一致。
</summary> </summary>
</member> </member>
<member name="P:Performance.DtoModels.PerAttendanceIssueDto.UnitType">
<summary>
人员类别
</summary>
</member>
<member name="P:Performance.DtoModels.PerAttendanceIssueDto.AccountingUnit">
<summary>
核算单元
</summary>
</member>
<member name="P:Performance.DtoModels.PerAttendanceIssueDto.PersonnelNumber">
<summary>
工号
</summary>
</member>
<member name="P:Performance.DtoModels.PerAttendanceIssueDto.PersonnelName">
<summary>
姓名
</summary>
</member>
<member name="P:Performance.DtoModels.PerAttendanceIssueDto.BeginDate">
<summary>
在科开始时间
</summary>
</member>
<member name="P:Performance.DtoModels.PerAttendanceIssueDto.EndDate">
<summary>
在科结束时间
</summary>
</member>
<member name="P:Performance.DtoModels.PerAttendanceIssueDto.WorkFullDays">
<summary>
全勤天数
</summary>
</member>
<member name="P:Performance.DtoModels.PerAttendanceIssueDto.AttendanceDays">
<summary>
出勤天数
</summary>
</member>
<member name="P:Performance.DtoModels.PerAttendanceIssueDto.DeductionDays">
<summary>
核减天数
</summary>
</member>
<member name="P:Performance.DtoModels.PerAttendanceIssueDto.NoDeductionDays">
<summary>
不核减天数
</summary>
</member>
<member name="P:Performance.DtoModels.PerAttendanceIssueDto.OperationType">
<summary>
操作类型 新增 = 1, 修改 = 2, 删除 = 3,
</summary>
</member>
<member name="P:Performance.DtoModels.PerAttendanceIssueDto.Remarks">
<summary>
备注
</summary>
</member>
<member name="P:Performance.DtoModels.PerAgainData.RowNumber"> <member name="P:Performance.DtoModels.PerAgainData.RowNumber">
<summary> <summary>
行号 行号
...@@ -2838,6 +2898,216 @@ ...@@ -2838,6 +2898,216 @@
科室 科室
</summary> </summary>
</member> </member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.AttendanceIsueId">
<summary>
考勤结果id(确认or驳回调用)
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.AllotId">
<summary>
绩效Id
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.Code">
<summary>
核算单元编码
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.UnitType">
<summary>
人员类别
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.AccountingUnit">
<summary>
核算单元
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.PersonnelNumber">
<summary>
工号
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.PersonnelName">
<summary>
姓名
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.BeginDate">
<summary>
在科开始时间
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.EndDate">
<summary>
在科结束时间
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.WorkFullDays">
<summary>
全勤天数
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.AttendanceDays">
<summary>
出勤天数
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.DeductionDays">
<summary>
核减天数
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.NoDeductionDays">
<summary>
不核减天数
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.State">
<summary>
状态 未确认 = 1,确认 = 2,驳回 = 3
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.ConfirmUser">
<summary>
确定用户
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.ConfirmTime">
<summary>
确定时间
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.Remarks">
<summary>
备注
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetails.Value">
<summary>
请假天数
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetails.Title">
<summary>
考勤类型
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetails.Remark">
<summary>
备注
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.AttendanceIsueId">
<summary>
考勤结果id
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.Code">
<summary>
编码
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.UnitType">
<summary>
核算组别
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.AccountingUnit">
<summary>
核算单元
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.Count">
<summary>
总下发数
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.ConfirmCount">
<summary>
确认数
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.RejectCount">
<summary>
驳回数
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.OperationTime">
<summary>
操作时间
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.OperationUser">
<summary>
操作人
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.State">
<summary>
状态 未确认 = 1,确认 = 2,驳回 = 3
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.Remarks">
<summary>
状态描述
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceIssueChoose.AllotId">
<summary>
绩效Id
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceIssueChoose.Issueid">
<summary>
删除id
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceIssueChoose.state">
<summary>
操作类型
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceIssueChoose.Remarks">
<summary>
备注
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.HeadName">
<summary>
列头名称
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.BanChange">
<summary>
禁止修改
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.Readnoly">
<summary>
0 可读可写 1 只读
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.Visible">
<summary>
是否可见 0 不可见 1 可见
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.AttachLast">
<summary>
是否附带上次绩效 0 不附带 1 附带
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatistics.Code">
<summary>
核算单元编码
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatistics.AllotID">
<summary>
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatistics.UnitType"> <member name="P:Performance.DtoModels.AttendanceStatistics.UnitType">
<summary> <summary>
核算组别 核算组别
...@@ -2873,6 +3143,11 @@ ...@@ -2873,6 +3143,11 @@
在科结束时间 在科结束时间
</summary> </summary>
</member> </member>
<member name="P:Performance.DtoModels.AttendanceStatistics.AttendanceDays">
<summary>
出勤天数
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatisticsDetial.Value"> <member name="P:Performance.DtoModels.AttendanceStatisticsDetial.Value">
<summary> <summary>
请假天数 请假天数
...@@ -3068,31 +3343,6 @@ ...@@ -3068,31 +3343,6 @@
医院总收支结余 医院总收支结余
</summary> </summary>
</member> </member>
<member name="P:Performance.DtoModels.Response.CollectPermission.HeadName">
<summary>
列头名称
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.BanChange">
<summary>
禁止修改
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.Readnoly">
<summary>
0 可读可写 1 只读
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.Visible">
<summary>
是否可见 0 不可见 1 可见
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.AttachLast">
<summary>
是否附带上次绩效 0 不附带 1 附带
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResponse.Source"> <member name="P:Performance.DtoModels.ComputeResponse.Source">
<summary> <summary>
来源 来源
...@@ -4308,6 +4558,11 @@ ...@@ -4308,6 +4558,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 改过
......
...@@ -6118,6 +6118,101 @@ ...@@ -6118,6 +6118,101 @@
修改时间 修改时间
</summary> </summary>
</member> </member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.HospitalId">
<summary>
医院Id
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.AllotId">
<summary>
绩效Id
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.Code">
<summary>
核算单元编码
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.UnitType">
<summary>
人员类别
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.AccountingUnit">
<summary>
核算单元
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.PersonnelNumber">
<summary>
工号
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.PersonnelName">
<summary>
姓名
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.BeginDate">
<summary>
在科开始时间
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.EndDate">
<summary>
在科结束时间
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.WorkFullDays">
<summary>
全勤天数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.AttendanceDays">
<summary>
出勤天数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.DeductionDays">
<summary>
核减天数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.NoDeductionDays">
<summary>
不核减天数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.State">
<summary>
状态 未确认 = 1,确认 = 2,驳回 = 3
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.CreateUser">
<summary>
创建用户
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.CreateTime">
<summary>
创建时间
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.ConfirmUser">
<summary>
确定用户
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.ConfirmTime">
<summary>
确定时间
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.Remarks">
<summary>
备注
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_type.IsDeduction"> <member name="P:Performance.EntityModels.Entity.per_attendance_type.IsDeduction">
<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;
...@@ -275,7 +276,7 @@ public AutoMapperConfigs() ...@@ -275,7 +276,7 @@ public AutoMapperConfigs()
CreateMap<cof_workitem, WorkItemRequest>() CreateMap<cof_workitem, WorkItemRequest>()
.ReverseMap(); .ReverseMap();
CreateMap<cof_again,CofAgainRequest>().ReverseMap(); CreateMap<cof_again, CofAgainRequest>().ReverseMap();
} }
} }
} }
...@@ -117,6 +117,20 @@ public enum Deduction ...@@ -117,6 +117,20 @@ public enum Deduction
核减 = 1, 核减 = 1,
不核减 = 2, 不核减 = 2,
} }
public enum State
{
全部 = 0,
未确认 = 1,
确认 = 2,
驳回 = 3,
}
public enum OperationType
{
全部 = 0,
新增 = 1,
修改 = 2,
删除 = 3,
}
} }
public class SecondAllot public class SecondAllot
......
using Performance.EntityModels.Entity;
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 PerAttendanceIssueDto()
{ }
public PerAttendanceIssueDto(AttendanceStatistics item)
{
Code = item.Code;
UnitType = item.UnitType;
AccountingUnit = item.AccountingUnit;
PersonnelNumber = item.PersonnelNumber;
PersonnelName = item.PersonnelName;
BeginDate = item.BeginDate;
EndDate = item.EndDate;
DeductionDays = item.Detial.Where(w => !w.Remark.Contains("不核减")).Sum(w => w.Value);
NoDeductionDays = item.Detial.Sum(w => w.Value) - item.Detial.Where(w => !w.Remark.Contains("不核减")).Sum(w => w.Value);
AttendanceDays = item.AttendanceDays;
WorkFullDays = item.AttendanceDays + item.Detial.Where(w => !w.Remark.Contains("不核减")).Sum(w => w.Value);
OperationType = (int)Attendance.OperationType.新增;
Remarks = "";
}
public PerAttendanceIssueDto(per_attendance_issue item)
{
Code = item.Code;
UnitType = item.UnitType;
AccountingUnit = item.AccountingUnit;
PersonnelNumber = item.PersonnelNumber;
PersonnelName = item.PersonnelName;
BeginDate = item.BeginDate;
EndDate = item.EndDate;
DeductionDays = item.DeductionDays;
NoDeductionDays = item.NoDeductionDays;
AttendanceDays = item.AttendanceDays;
WorkFullDays = item.WorkFullDays;
OperationType = (int)Attendance.OperationType.删除;
Remarks = "删除数据";
}
//public int HospitalId { get; set; } //医院Id
//public int AllotId { get; set; } //绩效Id
public string Code { get; set; } //核算单元编码
/// <summary>
/// 人员类别
/// </summary>
public string UnitType { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 工号
/// </summary>
public string PersonnelNumber { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 在科开始时间
/// </summary>
public DateTime? BeginDate { get; set; }
/// <summary>
/// 在科结束时间
/// </summary>
public DateTime? EndDate { get; set; }
/// <summary>
/// 全勤天数
/// </summary>
public int WorkFullDays { get; set; }
/// <summary>
/// 出勤天数
/// </summary>
public int AttendanceDays { get; set; }
/// <summary>
/// 核减天数
/// </summary>
public int DeductionDays { get; set; }
/// <summary>
/// 不核减天数
/// </summary>
public int NoDeductionDays { get; set; }
/// <summary>
/// 操作类型 新增 = 1, 修改 = 2, 删除 = 3,
/// </summary>
public int OperationType { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; }
}
}
...@@ -10,6 +10,8 @@ public class AllotDeptRequest ...@@ -10,6 +10,8 @@ public class AllotDeptRequest
public int HospitalId { get; set; } public int HospitalId { get; set; }
public string? UnitType { get; set; }
public string Department { get; set; } public string Department { get; set; }
} }
} }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.DtoModels.Response
{
public class AttendanceAuditDetail
{
/// <summary>
/// 考勤结果id(确认or驳回调用)
/// </summary>
public int AttendanceIsueId { get; set; }
/// <summary>
/// 绩效Id
/// </summary>
public int AllotId { get; set; }
/// <summary>
/// 核算单元编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 人员类别
/// </summary>
public string UnitType { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 工号
/// </summary>
public string PersonnelNumber { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 在科开始时间
/// </summary>
public DateTime? BeginDate { get; set; }
/// <summary>
/// 在科结束时间
/// </summary>
public DateTime? EndDate { get; set; }
/// <summary>
/// 全勤天数
/// </summary>
public int WorkFullDays { get; set; }
/// <summary>
/// 出勤天数
/// </summary>
public int AttendanceDays { get; set; }
/// <summary>
/// 核减天数
/// </summary>
public int DeductionDays { get; set; }
/// <summary>
/// 不核减天数
/// </summary>
public int NoDeductionDays { get; set; }
/// <summary>
/// 状态 未确认 = 1,确认 = 2,驳回 = 3
/// </summary>
public int State { get; set; }
/// <summary>
/// 确定用户
/// </summary>
public string ConfirmUser { get; set; }
/// <summary>
/// 确定时间
/// </summary>
public DateTime? ConfirmTime { get; set; }
public List<AttendanceAuditDetails> Detial { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; }
}
public class AttendanceAuditDetails
{
/// <summary>
/// 请假天数
/// </summary>
public int Value { get; set; }
/// <summary>
/// 考勤类型
/// </summary>
public string Title { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
}
}
using System;
namespace Performance.DtoModels.Response
{
public class AttendanceAuditList
{
/// <summary>
/// 考勤结果id
/// </summary>
public int AttendanceIsueId { get; set; }
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 核算组别
/// </summary>
public string UnitType { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 总下发数
/// </summary>
public int Count { get; set; }
/// <summary>
/// 确认数
/// </summary>
public int ConfirmCount { get; set; }
/// <summary>
/// 驳回数
/// </summary>
public int RejectCount { get; set; }
/// <summary>
/// 操作时间
/// </summary>
public DateTime? OperationTime { get; set; }
/// <summary>
/// 操作人
/// </summary>
public string OperationUser { get; set; }
/// <summary>
/// 状态 未确认 = 1,确认 = 2,驳回 = 3
/// </summary>
public int State { get; set; }
/// <summary>
/// 状态描述
/// </summary>
public string Remarks { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.DtoModels.Response
{
public class AttendanceIssueChoose
{
/// <summary>
/// 绩效Id
/// </summary>
public int AllotId { get; set; }
/// <summary>
/// 删除id
/// </summary>
public int[] Issueid { get; set; }
/// <summary>
/// 操作类型
/// </summary>
public Attendance.State state { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; }
}
}
...@@ -5,6 +5,13 @@ namespace Performance.DtoModels ...@@ -5,6 +5,13 @@ namespace Performance.DtoModels
{ {
public class AttendanceStatistics public class AttendanceStatistics
{ {
/// <summary>
/// 核算单元编码
/// </summary>
public string Code { get; set; }
/// <summary>
///
/// </summary>
public int AllotID { get; set; } public int AllotID { get; set; }
/// <summary> /// <summary>
/// 核算组别 /// 核算组别
...@@ -36,6 +43,9 @@ public class AttendanceStatistics ...@@ -36,6 +43,9 @@ public class AttendanceStatistics
public DateTime EndDate { get; set; } public DateTime EndDate { get; set; }
public List<AttendanceStatisticsDetial> Detial { get; set; } public List<AttendanceStatisticsDetial> Detial { get; set; }
/// <summary>
/// 出勤天数
/// </summary>
public int AttendanceDays { get; set; } public int AttendanceDays { 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,7 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options) ...@@ -254,6 +254,7 @@ 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_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; }
/// <summary>
/// 医院Id
/// </summary>
public int HospitalId { get; set; }
/// <summary>
/// 绩效Id
/// </summary>
public int AllotId { get; set; }
/// <summary>
/// 核算单元编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 人员类别
/// </summary>
public string UnitType { get; set; }
///// <summary>
///// 科室名称
///// </summary>
//public string Department { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 工号
/// </summary>
public string PersonnelNumber { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 在科开始时间
/// </summary>
public DateTime? BeginDate { get; set; }
/// <summary>
/// 在科结束时间
/// </summary>
public DateTime? EndDate { get; set; }
/// <summary>
/// 全勤天数
/// </summary>
public int WorkFullDays { get; set; }
/// <summary>
/// 出勤天数
/// </summary>
public int AttendanceDays { get; set; }
/// <summary>
/// 核减天数
/// </summary>
public int DeductionDays { get; set; }
/// <summary>
/// 不核减天数
/// </summary>
public int NoDeductionDays { get; set; }
/// <summary>
/// 状态 未确认 = 1,确认 = 2,驳回 = 3
/// </summary>
public int State { get; set; }
/// <summary>
/// 创建用户
/// </summary>
public string CreateUser { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime? CreateTime { get; set; }
/// <summary>
/// 确定用户
/// </summary>
public string ConfirmUser { get; set; }
/// <summary>
/// 确定时间
/// </summary>
public DateTime? ConfirmTime { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; }
}
}
...@@ -406,5 +406,27 @@ public void Batch(int[] ids, string batch, string batchDate, string bankName) ...@@ -406,5 +406,27 @@ public void Batch(int[] ids, string batch, string batchDate, string bankName)
throw; throw;
} }
} }
/// <summary>
/// 考勤-考勤结果备份
/// </summary>
/// <param name="allot"></param>
public void PerAttendanceIssueBackup(int allotId)
{
using (var connection = context.Database.GetDbConnection())
{
if (connection.State != ConnectionState.Open) connection.Open();
try
{
connection.Execute("call proc_attendance_backup(@allotId);", new { allotId }, commandTimeout: 60 * 60);
}
catch (Exception)
{
throw;
}
}
}
} }
} }
\ No newline at end of file
...@@ -435,18 +435,18 @@ public List<dynamic> QueryComputeByDateAndTotal(string viewName, HospitalGrantSu ...@@ -435,18 +435,18 @@ public List<dynamic> QueryComputeByDateAndTotal(string viewName, HospitalGrantSu
Dictionary<string, List<string>> dict = new Dictionary<string, List<string>> Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>
{ {
{ "view_allot_sign_emp_group", new List<string>{ "hospitalid", "code", "unittype", "accountingunit", "source", "jobnumber", "employeename", "jobtitle", "bankcard", "batch", "jobcategory", "duty", "titleposition" } }, { "view_allot_sign_emp_group", new List<string>{ "code", "hospitalid", "unittype", "accountingunit", "source", "jobnumber", "employeename", "jobtitle", "bankcard", "batch", "jobcategory", "duty", "titleposition" } },
{ "view_allot_sign_emp_sum", new List<string>{ "perforsumfee", "performanagementfee", "nightworkperfor", "adjustlaterotherfee", "otherperfor", "hideotherperfor", "shouldgivefee", "reservedratiofee", "realgivefee" } }, { "view_allot_sign_emp_sum", new List<string>{ "perforsumfee", "performanagementfee", "nightworkperfor", "adjustlaterotherfee", "otherperfor", "hideotherperfor", "shouldgivefee", "reservedratiofee", "realgivefee" } },
{ "view_allot_sign_dept_group", new List<string>{ "hospitalid", "code", "unittype", "accountingunit" } }, { "view_allot_sign_dept_group", new List<string>{ "code", "hospitalid","unittype", "accountingunit" } },
{ "view_allot_sign_dept_sum", new List<string>{ "perforfee", "workloadfee", "assessbeforeotherfee", "perfortotal", "scoringaverage", "extra", "medicineextra", "materialsextra", "assesslaterotherfee", "assesslaterperfortotal", "adjustfactor", "adjustlaterotherfee", "aprperforamount", "hideaprotherperforamount", "assesslatermanagementfee", "realgivefee" } }, { "view_allot_sign_dept_sum", new List<string>{ "perforfee", "workloadfee", "assessbeforeotherfee", "perfortotal", "scoringaverage", "extra", "medicineextra", "materialsextra", "assesslaterotherfee", "assesslaterperfortotal", "adjustfactor", "adjustlaterotherfee", "aprperforamount", "hideaprotherperforamount", "assesslatermanagementfee", "realgivefee" } },
{ "view_allot_sign_emp_finance_group", new List<string>{ "hospitalid", "code", "unittype", "accountingunit","jobnumber", "employeename", } }, { "view_allot_sign_emp_finance_group", new List<string>{ "code", "hospitalid", "unittype", "accountingunit","jobnumber", "employeename", } },
{ "view_allot_sign_emp_finance_sum", new List<string>{ "perforsumfee", "performanagementfee", "nightworkperfor", "adjustlaterotherfee", "otherperfor", "hideotherperfor", "shouldgivefee", "reservedratiofee", "realgivefee" } }, { "view_allot_sign_emp_finance_sum", new List<string>{ "perforsumfee", "performanagementfee", "nightworkperfor", "adjustlaterotherfee", "otherperfor", "hideotherperfor", "shouldgivefee", "reservedratiofee", "realgivefee" } },
}; };
request.GroupBy.Remove("");
if (request.SumBy == null || !request.SumBy.Any(t => !string.IsNullOrEmpty(t))) request.SumBy = dict[viewName + "_sum"]; if (request.SumBy == null || !request.SumBy.Any(t => !string.IsNullOrEmpty(t))) request.SumBy = dict[viewName + "_sum"];
if (request.GroupBy == null || !request.GroupBy.Any(t => !string.IsNullOrEmpty(t))) request.GroupBy = dict[viewName + "_group"];
if (request.Search != null && request.Search.Any(w => !string.IsNullOrEmpty(w.Title) && !string.IsNullOrEmpty(w.Value))) if (request.Search != null && request.Search.Any(w => !string.IsNullOrEmpty(w.Title) && !string.IsNullOrEmpty(w.Value)))
{ {
......
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)
{
}
}
}
...@@ -2,10 +2,9 @@ ...@@ -2,10 +2,9 @@
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Newtonsoft.Json; using Newtonsoft.Json;
using OfficeOpenXml; using OfficeOpenXml;
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
using OfficeOpenXml.Style; using OfficeOpenXml.Style;
using Performance.DtoModels; using Performance.DtoModels;
using Performance.EntityModels; using Performance.DtoModels.Response;
using Performance.EntityModels.Entity; using Performance.EntityModels.Entity;
using Performance.EntityModels.Other; using Performance.EntityModels.Other;
using Performance.Infrastructure; using Performance.Infrastructure;
...@@ -15,8 +14,6 @@ ...@@ -15,8 +14,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.Services namespace Performance.Services
{ {
...@@ -24,82 +21,100 @@ public class AttendanceService : IAutoInjection ...@@ -24,82 +21,100 @@ public class AttendanceService : IAutoInjection
{ {
private readonly IMapper mapper; private readonly IMapper mapper;
private readonly ILogger<AttendanceService> logger; private readonly ILogger<AttendanceService> logger;
private readonly PerforUserRepository _userRepository;
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;
public AttendanceService( public AttendanceService(
IMapper mapper, IMapper mapper,
ILogger<AttendanceService> logger, ILogger<AttendanceService> logger,
PerforUserRepository userRepository,
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
)
{ {
this.mapper = mapper; this.mapper = mapper;
this.logger = logger; this.logger = logger;
_userRepository = userRepository;
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;
} }
#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>();
// 交叉补全科室结束时间 // // 交叉补全科室结束时间
foreach (var personnelNumber in attendanceData.Select(w => w.PersonnelNumber).Distinct()) // foreach (var personnelNumber in attendanceData.Select(w => w.PersonnelNumber).Distinct())
{ // {
var attendances = attendanceData.Where(w => w.PersonnelNumber == personnelNumber).OrderBy(w => w.AttendanceDate); // var attendances = attendanceData.Where(w => w.PersonnelNumber == personnelNumber).OrderBy(w => w.AttendanceDate);
for (int i = 0; i < attendances.Count() - 1; i++) // for (int i = 0; i < attendances.Count() - 1; i++)
{ // {
var begDate = attendances.ElementAt(i).AttendanceDate.Date; // var begDate = attendances.ElementAt(i).AttendanceDate.Date;
var endDate = attendances.ElementAt(i + 1).AttendanceDate.Date; // var endDate = attendances.ElementAt(i + 1).AttendanceDate.Date;
// 调入科室需要额外减去1天作为上一个科室结束时间 // // 调入科室需要额外减去1天作为上一个科室结束时间
var days = attendances.ElementAt(i + 1).Source == Attendance.Type.调入.ToString() ? -1 : 0; // var days = attendances.ElementAt(i + 1).Source == Attendance.Type.调入.ToString() ? -1 : 0;
if (endDate > begDate) // if (endDate > begDate)
{ // {
var stat = new AttendanceStatistics // var stat = new AttendanceStatistics
{ // {
AllotID = attendances.ElementAt(i).ALLOTID, // AllotID = attendances.ElementAt(i).ALLOTID,
UnitType = attendances.ElementAt(i).UnitType, // UnitType = attendances.ElementAt(i).UnitType,
AccountingUnit = attendances.ElementAt(i).AccountingUnit, // AccountingUnit = attendances.ElementAt(i).AccountingUnit,
Department = attendances.ElementAt(i).Department, // Department = attendances.ElementAt(i).Department,
PersonnelNumber = attendances.ElementAt(i).PersonnelNumber, // PersonnelNumber = attendances.ElementAt(i).PersonnelNumber,
PersonnelName = attendances.ElementAt(i).PersonnelName, // PersonnelName = attendances.ElementAt(i).PersonnelName,
BeginDate = begDate, // BeginDate = begDate,
EndDate = endDate.AddDays(days), // EndDate = endDate.AddDays(days),
Detial = new List<AttendanceStatisticsDetial>() // //Detial = new List<AttendanceStatisticsDetial>()
}; // };
statistics.Add(stat); // statistics.Add(stat);
} // }
} // }
} // }
if (statistics != null) // if (statistics != null)
return new ApiResponse<List<AttendanceStatistics>>(ResponseType.OK, statistics); // return new ApiResponse<List<AttendanceStatistics>>(ResponseType.OK, statistics);
else // else
{ // {
return new ApiResponse<List<AttendanceStatistics>>(ResponseType.Fail); // return new ApiResponse<List<AttendanceStatistics>>(ResponseType.Fail);
} // }
} //}
#endregion #endregion
...@@ -322,6 +337,7 @@ public ApiResponse BatchCallIn(int allotId, int hospitalId, SaveCollectData requ ...@@ -322,6 +337,7 @@ public ApiResponse BatchCallIn(int allotId, int hospitalId, SaveCollectData requ
} }
#endregion #endregion
#region 考勤类型 #region 考勤类型
...@@ -652,7 +668,7 @@ public ApiResponse AttendanceBatch(int allotId, int hospitalId, SaveCollectData ...@@ -652,7 +668,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 +681,16 @@ public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allot ...@@ -665,7 +681,16 @@ 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 userInfo = _userRepository.GetUser(userid);
if (userInfo?.User == null) throw new NotImplementedException("当前用户不存在");
if (userInfo?.URole == null) throw new NotImplementedException("当前用户暂未分配角色");
var unitTypes = UnitTypeUtil.GetMaps(userInfo?.URole.Type ?? 0);
if (unitTypes?.Any() == true)
attendanceData = attendanceData.Where(w => w.AccountingUnit == userInfo.User.Department && UnitTypeUtil.Is(w.UnitType, unitTypes)).ToList();
List<AttendanceStatistics> statistics = new List<AttendanceStatistics>(); List<AttendanceStatistics> statistics = new List<AttendanceStatistics>();
// 交叉补全科室结束时间 // 交叉补全科室结束时间
...@@ -690,7 +715,8 @@ public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allot ...@@ -690,7 +715,8 @@ public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allot
PersonnelName = attendances.ElementAt(i).PersonnelName, PersonnelName = attendances.ElementAt(i).PersonnelName,
BeginDate = begDate, BeginDate = begDate,
EndDate = endDate.AddDays(days), EndDate = endDate.AddDays(days),
Detial = new List<AttendanceStatisticsDetial>() //Detial = new List<AttendanceStatisticsDetial>()
Code = "",
}; };
statistics.Add(stat); statistics.Add(stat);
} }
...@@ -735,8 +761,284 @@ public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allot ...@@ -735,8 +761,284 @@ public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allot
int vacationesDays = stat.Detial.Where(w => !w.Remark.Contains("不核减")).Sum(w => w.Value); int vacationesDays = stat.Detial.Where(w => !w.Remark.Contains("不核减")).Sum(w => w.Value);
stat.AttendanceDays = SplitEveryDay(stat.BeginDate, stat.EndDate).Where(date => date >= stat.BeginDate && date <= stat.EndDate).Count() - vacationesDays; stat.AttendanceDays = SplitEveryDay(stat.BeginDate, stat.EndDate).Where(date => date >= stat.BeginDate && date <= stat.EndDate).Count() - vacationesDays;
} }
var cofaccounting = cofaccountingRepository.GetEntities(g => g.AllotId == allotId);
foreach (var item in statistics)
{
var code = cofaccounting.FirstOrDefault(w => w.UnitType == item.UnitType && w.AccountingUnit == item.AccountingUnit);
item.Code = code == null ? "" : code.Code;
}
return new ApiResponse<List<AttendanceStatistics>>(ResponseType.OK, "", statistics); return new ApiResponse<List<AttendanceStatistics>>(ResponseType.OK, "", statistics);
} }
#region 考勤下发
// 科室确认列表
public ApiResponse<List<AttendanceAuditList>> AuditList(int allotId, string unitType, string accountingUnit, Attendance.State state)
{
var issues = perforPerAttendanceIssueRepository.GetEntities(w => w.AllotId == allotId);
if (!string.IsNullOrEmpty(unitType))
issues = issues.Where(w => w.UnitType.Contains(unitType)).ToList();
if (!string.IsNullOrEmpty(accountingUnit))
issues = issues.Where(w => w.AccountingUnit.Contains(accountingUnit)).ToList();
var stateOrders = new int[] { (int)Attendance.State.未确认, (int)Attendance.State.驳回, (int)Attendance.State.确认 };
var items = issues.GroupBy(w => new { w.Code, w.UnitType, w.AccountingUnit })
.Select(w => new AttendanceAuditList
{
Code = w.Key.Code,
UnitType = w.Key.UnitType,
AccountingUnit = w.Key.AccountingUnit,
Count = w.Count(),
ConfirmCount = w.Count(p => p.State == (int)Attendance.State.确认),
RejectCount = w.Count(p => p.State == (int)Attendance.State.驳回),
OperationUser = w.OrderByDescending(o => o.ConfirmTime).Select(s => s.ConfirmUser).FirstOrDefault(),
OperationTime = w.OrderByDescending(o => o.ConfirmTime).Select(s => s.ConfirmTime).FirstOrDefault(),
Remarks = string.Join(";", w.Select(p => p.Remarks).Where(s => !string.IsNullOrEmpty(s)).Distinct()),
}).ToList();
foreach (var item in items)
{
item.State = (int)Attendance.State.未确认;
if (item.RejectCount > 0)
item.State = (int)Attendance.State.驳回;
else if (item.ConfirmCount == item.Count)
item.State = (int)Attendance.State.确认;
}
items = items.OrderBy(w => Array.IndexOf(stateOrders, w.State)).ToList();
if ((int)state == (int)Attendance.State.确认 || (int)state == (int)Attendance.State.未确认 || (int)state == (int)Attendance.State.驳回)
items = items.Where(w => w.State == (int)state).ToList();
return new ApiResponse<List<AttendanceAuditList>>(ResponseType.OK, items);
}
// 科室确认详情(已下发结果展示列表)
public ApiResponse<List<AttendanceAuditDetail>> AuditDetail(int allotId, string unitType, string accountingUnit, string searchTxet, int userid)
{
var types = perfoPperAttendanceTypeRepository.GetEntities(t => t.AllotId == allotId) ?? new List<per_attendance_type>();
var vacationeData = perfoPperAttendanceVacationeRepository.GetEntities(t => t.AllotId == allotId) ?? new List<per_attendance_vacation>();
var issues = perforPerAttendanceIssueRepository.GetEntities(w => w.AllotId == allotId).OrderBy(w => w.PersonnelNumber).ToList();
if (!string.IsNullOrEmpty(unitType))
issues = issues.Where(w => w.UnitType.Contains(unitType)).ToList();
if (!string.IsNullOrEmpty(accountingUnit))
issues = issues.Where(w => w.AccountingUnit.Contains(accountingUnit)).ToList();
if (!string.IsNullOrEmpty(searchTxet))
issues = issues.Where(w => w.PersonnelName.Contains(searchTxet) || w.PersonnelNumber.Contains(searchTxet)).ToList();
var stateOrders = new int[] { (int)Attendance.State.未确认, (int)Attendance.State.驳回, (int)Attendance.State.确认 };
var items = issues.Select(w => new AttendanceAuditDetail
{
AttendanceIsueId = w.Id,
AllotId = w.AllotId,
Code = w.Code,
UnitType = w.UnitType,
AccountingUnit = w.AccountingUnit,
PersonnelName = w.PersonnelName,
PersonnelNumber = w.PersonnelNumber,
BeginDate = w.BeginDate,
EndDate = w.EndDate,
WorkFullDays = w.WorkFullDays,
AttendanceDays = w.AttendanceDays,
DeductionDays = w.DeductionDays,
NoDeductionDays = w.NoDeductionDays,
State = w.State,
ConfirmUser = w.ConfirmUser,
ConfirmTime = w.ConfirmTime,
Remarks = w.Remarks,
}).OrderBy(w => Array.IndexOf(stateOrders, w.State)).ToList();
//当角色对应时过滤
var userInfo = _userRepository.GetUser(userid);
if (userInfo?.User == null) throw new NotImplementedException("当前用户不存在");
if (userInfo?.URole == null) throw new NotImplementedException("当前用户暂未分配角色");
var unitTypes = UnitTypeUtil.GetMaps(userInfo?.URole.Type ?? 0);
if (unitTypes?.Any() == true)
items = items.Where(w => w.AccountingUnit == userInfo.User.Department && UnitTypeUtil.Is(w.UnitType, unitTypes)).ToList();
var vacationes = vacationeData
.Where(w => w.BegDate > DateTime.MinValue && w.EndDate > DateTime.MinValue)
.Select(w => new
{
w.PersonnelNumber,
Type = types.FirstOrDefault(p => p.Id == w.TypeId)?.AttendanceName ?? "考勤类型缺失",
Dates = SplitEveryDay(w.BegDate.Value.Date, w.EndDate.Value.Date),
Remark = types.FirstOrDefault(p => p.Id == w.TypeId)?.IsDeduction == (int)Attendance.Deduction.核减 ? "核减" : "不核减",
});
foreach (var stat in items)
{
stat.Detial = vacationes
.Where(w => w.PersonnelNumber == stat.PersonnelNumber)
.Select(w => new AttendanceAuditDetails
{
Title = w.Type,
Value = w.Dates.Where(date => date >= stat.BeginDate && date <= stat.EndDate).Count(),
Remark = w.Remark,
})
.ToList();
foreach (var item in types)
{
if (!stat.Detial.Any(w => w.Title == item.AttendanceName))
{
stat.Detial.Add(new AttendanceAuditDetails
{
Title = item.AttendanceName,
Value = 0,
Remark = item.IsDeduction == (int)Attendance.Deduction.核减 ? "核减" : "不核减",
});
}
}
}
return new ApiResponse<List<AttendanceAuditDetail>>(ResponseType.OK, items);
}
// 最终考勤结果下发(预确认显示)
public ApiResponse<List<PerAttendanceIssueDto>> PreConfirmationDisplay(int allotId, int userid, string unitType, string accountingUnit, Attendance.OperationType state)
{
var statistics = GetAttendanceStatistics(allotId, userid).Data;
var issues = perforPerAttendanceIssueRepository.GetEntities(w => w.AllotId == allotId);
//删除(删除页面没有的数据)
var statisticPersonnelNumber = statistics.Select(s => s.PersonnelNumber);
var scStatistics = issues.Where(w => !statisticPersonnelNumber.Contains(w.PersonnelNumber)).ToList();
var issuedates = new List<PerAttendanceIssueDto>();
Func<per_attendance_issue, AttendanceStatistics, bool> func = (issue, statistic) =>
{
var result = true;
result =
issue.UnitType == statistic.UnitType &&
issue.AccountingUnit == statistic.AccountingUnit &&
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;
};
foreach (var item in statistics.Select(w => new { PersonnelNumber = w.PersonnelNumber, Code = w.Code }))
{
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);
if (issuePersonnel == null)
{
issuedates.Add(new PerAttendanceIssueDto(staticPersonnel));
}
else if (staticPersonnel != null && issuePersonnel != null)
{
if (func(issuePersonnel, staticPersonnel)) continue;
issuedates.Add(new PerAttendanceIssueDto(staticPersonnel)
{
PersonnelName = issuePersonnel.PersonnelName,
PersonnelNumber = issuePersonnel.PersonnelNumber,
OperationType = (int)Attendance.OperationType.修改,
Remarks = "修改数据",
});
}
}
if (scStatistics.Any())
{
foreach (var report in scStatistics)
issuedates.Add(new PerAttendanceIssueDto(report));
}
if (!string.IsNullOrEmpty(unitType))
issuedates = issuedates.Where(w => w.UnitType.Contains(unitType)).ToList();
if (!string.IsNullOrEmpty(accountingUnit))
issuedates = issuedates.Where(w => w.AccountingUnit.Contains(accountingUnit)).ToList();
if ((int)state == (int)Attendance.OperationType.新增 || (int)state == (int)Attendance.OperationType.修改 || (int)state == (int)Attendance.OperationType.删除)
issuedates = issuedates.Where(w => w.OperationType == (int)state).ToList();
return new ApiResponse<List<PerAttendanceIssueDto>>(ResponseType.OK, issuedates);
}
// 最终考勤结果下发
public ApiResponse IssueStatistics(int allotId, int userid, string realName, string unitType = "", string accountingUnit = "", Attendance.OperationType state = 0)
{
var allot = perforPerallotRepository.GetEntity(w => w.ID == allotId);
if (allot == null)
throw new PerformanceException("当前绩效记录不存在");
var preConfirmationDisplay = PreConfirmationDisplay(allotId, userid, unitType, accountingUnit, state).Data;
if (preConfirmationDisplay == null)
return new ApiResponse(ResponseType.NotFound, "暂无下发数据");
var issues = perforPerAttendanceIssueRepository.GetEntities(w => w.AllotId == allotId);
var insertIssues = 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();
if (insertIssues.Any())
{
var inserts = insertIssues.Select(item =>
{
return new per_attendance_issue()
{
AllotId = allotId,
HospitalId = allot.HospitalId,
Code = item.Code,
UnitType = item.UnitType,
AccountingUnit = item.AccountingUnit,
PersonnelNumber = item.PersonnelNumber,
PersonnelName = item.PersonnelName,
BeginDate = item.BeginDate,
EndDate = item.EndDate,
DeductionDays = item.DeductionDays,
NoDeductionDays = item.NoDeductionDays,
AttendanceDays = item.AttendanceDays,
WorkFullDays = item.AttendanceDays + item.DeductionDays,
CreateUser = realName,
CreateTime = DateTime.Now,
State = (int)Attendance.State.未确认,
};
});
perforPerAttendanceIssueRepository.AddRange(inserts.ToArray());
}
if (updateIssues.Any())
{
List<per_attendance_issue> updateIssuedates = new List<per_attendance_issue>();
foreach (var item in updateIssues)
{
var issuePersonnel = issues.FirstOrDefault(w => w.PersonnelNumber == item.PersonnelNumber && w.Code == item.Code);
issuePersonnel.UnitType = item.UnitType;
issuePersonnel.AccountingUnit = item.AccountingUnit;
issuePersonnel.Code = item.Code;
issuePersonnel.BeginDate = item.BeginDate;
issuePersonnel.EndDate = item.EndDate;
issuePersonnel.DeductionDays = item.DeductionDays;
issuePersonnel.NoDeductionDays = item.NoDeductionDays;
issuePersonnel.AttendanceDays = item.AttendanceDays;
issuePersonnel.WorkFullDays = item.AttendanceDays + item.DeductionDays;
issuePersonnel.State = (int)Attendance.State.未确认;
issuePersonnel.CreateUser = realName;
issuePersonnel.CreateTime = DateTime.Now;
issuePersonnel.ConfirmUser = "";
issuePersonnel.ConfirmTime = null;
issuePersonnel.Remarks = "";
updateIssuedates.Add(issuePersonnel);
}
perforPerAttendanceIssueRepository.UpdateRange(updateIssuedates.ToArray());
}
if (deleteIssues.Any())
{
var deletePersonnel = issues.Where(w => deleteIssues.Contains(w.PersonnelNumber)).ToList();
perforPerAttendanceIssueRepository.RemoveRange(deletePersonnel.ToArray());
}
perforPerallotRepository.PerAttendanceIssueBackup(allotId);
return new ApiResponse(ResponseType.OK, "下发成功");
}
// 最终考勤结果驳回或确认无误((批量操作)
public ApiResponse ChooseStatistics(AttendanceIssueChoose attendanceIssueChoose, string realName)
{
var issuedates = perforPerAttendanceIssueRepository.GetEntities(w => w.AllotId == attendanceIssueChoose.AllotId && attendanceIssueChoose.Issueid.Contains(w.Id)).ToList();
foreach (var item in issuedates)
{
item.State = (int)attendanceIssueChoose.state;
item.ConfirmUser = realName;
item.ConfirmTime = DateTime.Now;
item.Remarks = attendanceIssueChoose.Remarks;
}
perforPerAttendanceIssueRepository.UpdateRange(issuedates.ToArray());
return new ApiResponse(ResponseType.OK);
}
#endregion
// 拆分请假时间段为每个日期 // 拆分请假时间段为每个日期
private List<DateTime> SplitEveryDay(DateTime begin, DateTime end) private List<DateTime> SplitEveryDay(DateTime begin, DateTime end)
...@@ -903,5 +1205,7 @@ public string ExcelDownload(List<Dictionary<string, object>> rows, string name, ...@@ -903,5 +1205,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),
}; };
} }
} }
...@@ -31,8 +31,8 @@ public static List<cof_alias> PerformanceTotal(string route, string[] heads) ...@@ -31,8 +31,8 @@ public static List<cof_alias> PerformanceTotal(string route, string[] heads)
public static List<cof_alias> AllComputeView { get; } = new List<cof_alias> public static List<cof_alias> AllComputeView { get; } = new List<cof_alias>
{ {
new cof_alias{ Alias = "来源", Name = nameof(view_allot_sign_emp.Source), States = 1, SumStatus = 0, Sort = 1 }, new cof_alias{ Alias = "来源", Name = nameof(view_allot_sign_emp.Source), States = 1, SumStatus = 0, Sort = 1 },
new cof_alias{ Alias = "核算单元编码", Name = nameof(view_allot_sign_emp.Code), States = 1, SumStatus = 0, Sort = 1 },
new cof_alias{ Alias = "核算组别", Name = nameof(view_allot_sign_emp.UnitType), States = 1, SumStatus = 0, Sort = 2 }, new cof_alias{ Alias = "核算组别", Name = nameof(view_allot_sign_emp.UnitType), States = 1, SumStatus = 0, Sort = 2 },
new cof_alias{ Alias = "核算单元编码", Name = nameof(view_allot_sign_emp.Code), States = 1, SumStatus = 0, Sort = 2 },
new cof_alias{ Alias = "核算单元", Name = nameof(view_allot_sign_emp.AccountingUnit), States = 1, SumStatus = 0, Sort = 3 }, new cof_alias{ Alias = "核算单元", Name = nameof(view_allot_sign_emp.AccountingUnit), States = 1, SumStatus = 0, Sort = 3 },
new cof_alias{ Alias = "员工号", Name = nameof(view_allot_sign_emp.JobNumber), States = 1, SumStatus = 0, Sort = 4 }, new cof_alias{ Alias = "员工号", Name = nameof(view_allot_sign_emp.JobNumber), States = 1, SumStatus = 0, Sort = 4 },
...@@ -75,8 +75,8 @@ public static List<cof_alias> AllComputeViewByDate ...@@ -75,8 +75,8 @@ public static List<cof_alias> AllComputeViewByDate
public static List<cof_alias> AllComputePersonView { get; } = new List<cof_alias> public static List<cof_alias> AllComputePersonView { get; } = new List<cof_alias>
{ {
new cof_alias{ Alias = "核算单元编码", Name = nameof(view_allot_sign_emp.Code), States = 1, SumStatus = 0, Sort = 0 },
new cof_alias{ Alias = "核算组别", Name = nameof(view_allot_sign_emp.UnitType), States = 1, SumStatus = 0, Sort = 1 }, new cof_alias{ Alias = "核算组别", Name = nameof(view_allot_sign_emp.UnitType), States = 1, SumStatus = 0, Sort = 1 },
new cof_alias{ Alias = "核算单元编码", Name = nameof(view_allot_sign_emp.Code), States = 1, SumStatus = 0, Sort = 2 },
new cof_alias{ Alias = "核算单元", Name = nameof(view_allot_sign_emp.AccountingUnit), States = 1, SumStatus = 0, Sort = 2 }, new cof_alias{ Alias = "核算单元", Name = nameof(view_allot_sign_emp.AccountingUnit), States = 1, SumStatus = 0, Sort = 2 },
new cof_alias{ Alias = "员工号", Name = nameof(view_allot_sign_emp.JobNumber), States = 1, SumStatus = 0, Sort = 3 }, new cof_alias{ Alias = "员工号", Name = nameof(view_allot_sign_emp.JobNumber), States = 1, SumStatus = 0, Sort = 3 },
new cof_alias{ Alias = "人员姓名", Name = nameof(view_allot_sign_emp.EmployeeName), States = 1, SumStatus = 0, Sort = 4 }, new cof_alias{ Alias = "人员姓名", Name = nameof(view_allot_sign_emp.EmployeeName), States = 1, SumStatus = 0, Sort = 4 },
...@@ -128,8 +128,8 @@ public static List<cof_alias> AllComputePersonViewByDate ...@@ -128,8 +128,8 @@ public static List<cof_alias> AllComputePersonViewByDate
public static List<cof_alias> AllComputeDepartmentView { get; } = new List<cof_alias> public static List<cof_alias> AllComputeDepartmentView { get; } = new List<cof_alias>
{ {
new cof_alias{ Alias = "核算单元编码", Name = nameof(view_allot_sign_emp.Code), States = 1, SumStatus = 0, Sort = 0 },
new cof_alias{ Alias = "核算组别", Name = nameof(view_allot_sign_dept.UnitType), States = 1, SumStatus = 0, Sort = 1 }, new cof_alias{ Alias = "核算组别", Name = nameof(view_allot_sign_dept.UnitType), States = 1, SumStatus = 0, Sort = 1 },
new cof_alias{ Alias = "核算单元编码", Name = nameof(view_allot_sign_emp.Code), States = 1, SumStatus = 0, Sort = 2 },
new cof_alias{ Alias = "核算单元", Name = nameof(view_allot_sign_dept.AccountingUnit), States = 1, SumStatus = 0, Sort = 2 }, new cof_alias{ Alias = "核算单元", Name = nameof(view_allot_sign_dept.AccountingUnit), States = 1, SumStatus = 0, Sort = 2 },
new cof_alias{ Alias = "业绩绩效", Name = nameof(view_allot_sign_dept.PerforFee), States = 1, SumStatus = 1, Sort = 3 }, new cof_alias{ Alias = "业绩绩效", Name = nameof(view_allot_sign_dept.PerforFee), States = 1, SumStatus = 1, Sort = 3 },
new cof_alias{ Alias = "工作量绩效", Name = nameof(view_allot_sign_dept.WorkloadFee), States = 1, SumStatus = 1, Sort = 4 }, new cof_alias{ Alias = "工作量绩效", Name = nameof(view_allot_sign_dept.WorkloadFee), States = 1, SumStatus = 1, Sort = 4 },
......
...@@ -892,19 +892,28 @@ public bool DelValue(int secondId, List<ag_fixatitem> oldFixatItems, List<ag_fix ...@@ -892,19 +892,28 @@ public bool DelValue(int secondId, List<ag_fixatitem> oldFixatItems, List<ag_fix
/// </summary> /// </summary>
/// <param name="userId"></param> /// <param name="userId"></param>
/// <returns></returns> /// <returns></returns>
public List<SecondTempResponse> GetTemp(int hospitalid, string department, int userId) public List<SecondTempResponse> GetTemp(int hospitalid, string unitType, string department, int userId)
{ {
var temps = agtempRepository.GetEntities(t => t.IsEnable == 1); var temps = agtempRepository.GetEntities(t => t.IsEnable == 1);
if (temps != null && temps.Any()) if (temps != null && temps.Any())
{ {
ag_usetemp useTemp = null;
if (string.IsNullOrEmpty(unitType))
{
var userCenter = userRepository.GetUser(userId); var userCenter = userRepository.GetUser(userId);
var unitType = UnitTypeUtil.GetMaps(userCenter?.URole.Type ?? 0); var unitTypes = UnitTypeUtil.GetMaps(userCenter?.URole.Type ?? 0);
Expression<Func<ag_usetemp, bool>> exp = t => t.HospitalId == hospitalid && t.Department == department; Expression<Func<ag_usetemp, bool>> exp = t => t.HospitalId == hospitalid && t.Department == department;
if (userCenter?.URole != null && userCenter.URole.Type.HasValue) if (userCenter?.URole != null && userCenter.URole.Type.HasValue)
exp = exp.And(t => unitType.Contains(t.UnitType)); exp = exp.And(t => unitTypes.Contains(t.UnitType));
useTemp = agusetempRepository.GetEntity(exp);
}
else
{
useTemp = agusetempRepository.GetEntity(t => t.HospitalId == hospitalid && t.UnitType == unitType && t.Department == department);
}
var useTemp = agusetempRepository.GetEntity(exp);
var secondTemps = _mapper.Map<List<SecondTempResponse>>(temps); var secondTemps = _mapper.Map<List<SecondTempResponse>>(temps);
if (useTemp != null) if (useTemp != null)
secondTemps.ForEach(t => t.IsSelected = t.Id == useTemp.UseTempId); secondTemps.ForEach(t => t.IsSelected = t.Id == useTemp.UseTempId);
......
...@@ -69,7 +69,7 @@ public UserIdentity Login(LoginRequest request) ...@@ -69,7 +69,7 @@ public UserIdentity Login(LoginRequest request)
{ {
var user = _userRepository.GetEntity(t => t.Login == request.Account && t.IsDelete == 1); var user = _userRepository.GetEntity(t => t.Login == request.Account && t.IsDelete == 1);
if (user == null) if (user == null)
throw new PerformanceException($"用户不存在 UserId:{request.Account}"); throw new PerformanceException($"{request.Account}”用户不存在");
//MD5小写加密 //MD5小写加密
request.Password = PwdHelper.MD5AndSalt(request.Password); request.Password = PwdHelper.MD5AndSalt(request.Password);
......
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