Commit 647402d4 by ruyun.zhang

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

parents 7652ec8b 42cc5fc5
......@@ -11,6 +11,11 @@
using Newtonsoft.Json;
using System.Threading.Tasks;
using Performance.DtoModels.Response;
using Performance.DtoModels.Request;
using static Performance.Services.ExtractExcelService.WriteDataHelper;
using System.Linq;
using Performance.Infrastructure;
using System.ComponentModel;
namespace Performance.Api.Controllers
{
......@@ -40,7 +45,7 @@ public class AttendanceController : ControllerBase
///// <summary>
///// 查询绩效考勤记录
///// </summary>
///// <param name="allotId"></param>
///// <param name="allotId">绩效月ID</param>
///// <returns></returns>
//[HttpGet("GetAttendance/{allotId}")]
//public ApiResponse<List<AttendanceStatistics>> GetAttendance(int allotId)
......@@ -57,7 +62,7 @@ public class AttendanceController : ControllerBase
/// <summary>
/// 查询绩效调动记录
/// </summary>
/// <param name="allotId"></param>
/// <param name="allotId">绩效月ID</param>
/// <returns></returns>
[HttpGet("CallIn/{allotId}")]
public ApiResponse<List<view_attendance>> GetCallIn(int allotId)
......@@ -81,7 +86,7 @@ public ApiResponse GetBatchCallInHandsonTable(int allotId)
/// <summary>
/// 批量插入调动记录
/// </summary>
/// <param name="allotId"></param>
/// <param name="allotId">绩效月ID</param>
/// <param name="hospitalId"></param>
/// <param name="request"></param>
/// <returns></returns>
......@@ -97,32 +102,74 @@ public ApiResponse BatchCallIn(int allotId, int hospitalId, SaveCollectData requ
// 表格错误提醒参考PersonService.CreatePerson方法
return _attendanceService.BatchCallIn(allotId, hospitalId, request);
}
/// <summary>
/// 考勤-调动记录表(添加)
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost("CallIn/Add")]
public ApiResponse AttendanceAdd(int allotId, AttendanceData request)
{
return _attendanceService.AttendanceAdd(allotId, request);
}
/// <summary>
/// 考勤-调动记录表(修改)
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost("CallIn/Update")]
public ApiResponse AttendanceUpdate(int allotId, AttendanceUpdateData request)
{
return _attendanceService.AttendanceUpdate(allotId, request);
}
/// <summary>
/// 考勤-调动记录表(删除)
/// </summary>
/// <param name="attendanceId"></param>
/// <returns></returns>
[HttpPost("CallIn/Delete")]
public ApiResponse AttendanceDelete(int attendanceId)
{
return _attendanceService.AttendanceDelete(attendanceId);
}
/// <summary>
/// 考勤-调动记录表(全部删除)
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <returns></returns>
[HttpPost("CallIn/ClearAll")]
public ApiResponse AttendanceClearAll(int allotId)
{
return _attendanceService.AttendanceClearAll(allotId);
}
#endregion
#region 考勤类型
/// <summary>
/// 查询绩效考勤类型
/// </summary>
/// <param name="allotId"></param>
/// <param name="hospitalId"></param>
/// <param name="allotId">绩效月ID</param>
/// <returns></returns>
[HttpGet("Type/{allotId},{hospitalId}")]
public ApiResponse<List<per_attendance_type>> GetAttendanceType(int allotId, int hospitalId)
public ApiResponse<List<per_attendance_type>> GetAttendanceType(int allotId)
{
return _attendanceService.GetAttendanceType(allotId);
}
/// <summary>
/// 新增或修改考勤类型
/// </summary>
/// <param name="allotId"></param>
/// <param name="hospitalId"></param>
/// <param name="allotId">绩效月ID</param>
/// <param name="attendanceType"></param>
/// <returns></returns>
[HttpPost("Type/Edit/{allotId},{hospitalId}")]
public ApiResponse<AttendanceType> InsertAttendanceType(int allotId, int hospitalId, AttendanceType attendanceType)
public ApiResponse<AttendanceType> InsertAttendanceType(int allotId, AttendanceType attendanceType)
{
// obj自己定义结构
return _attendanceService.InsertAttendanceType(allotId, hospitalId, attendanceType);
return _attendanceService.InsertAttendanceType(allotId, attendanceType);
}
/// <summary>
/// 删除考勤类型
......@@ -153,7 +200,7 @@ public ApiResponse GetAttendanceVacationHandsonTable(int allotId)
/// <summary>
/// 查询考勤记录
/// </summary>
/// <param name="allotId"></param>
/// <param name="allotId">绩效月ID</param>
/// <param name="hospitalId"></param>
/// <returns></returns>
[HttpGet("Vacation/{allotId},{hospitalId}")]
......@@ -165,7 +212,7 @@ public ApiResponse<List<RecordAttendcance>> GetAttendanceVacation(int allotId, i
/// <summary>
/// 批量插入考勤记录,插入前需要删除所有后重新插入
/// </summary>
/// <param name="allotId"></param>
/// <param name="allotId">绩效月ID</param>
/// <param name="hospitalId"></param>
/// <param name="request"></param>
/// <returns></returns>
......@@ -180,12 +227,63 @@ public ApiResponse AttendanceBatch(int allotId, int hospitalId, SaveCollectData
// 表格错误提醒参考PersonService.CreatePerson方法
return _attendanceService.AttendanceBatch(allotId, hospitalId, request);
}
//public ApiResponse AttendanceAdd(int allotId, int hospitalId, SaveCollectData request)
//{
// return _attendanceService.AttendanceAdd(allotId, hospitalId, request);
//}
/// <summary>
/// 考勤-考勤记录表(添加)
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost("Vacation/Add")]
public ApiResponse AttendanceVacationAdd(int allotId, AttendanceVacationData request)
{
return _attendanceService.AttendanceVacationAdd(allotId, request);
}
/// <summary>
/// 考勤-考勤记录表(修改)
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost("Vacation/Update")]
public ApiResponse AttendanceVacationUpdate(int allotId, AttendanceVacationUpdateData request)
{
return _attendanceService.AttendanceVacationUpdate(allotId, request);
}
/// <summary>
/// 考勤-考勤记录表(删除)
/// </summary>
/// <param name="attendanceId"></param>
/// <returns></returns>
[HttpPost("Vacation/Delete")]
public ApiResponse AttendanceVacationDelete(int attendanceId)
{
return _attendanceService.AttendanceVacationDelete(attendanceId);
}
/// <summary>
/// 考勤-考勤记录表(全部删除)
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <returns></returns>
[HttpPost("Vacation/ClearAll")]
public ApiResponse AttendanceVacationClearAll(int allotId)
{
return _attendanceService.AttendanceVacationClearAll(allotId);
}
#endregion
/// <summary>
/// 考勤结果统计
/// </summary>
/// <param name="allotId"></param>
/// <param name="allotId">绩效月ID</param>
/// <returns></returns>
[HttpGet("statistics/{allotId}")]
public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allotId)
......@@ -200,7 +298,7 @@ public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allot
///// <summary>
///// 初始考勤记录下载
///// </summary>
///// <param name="allotId"></param>
///// <param name="allotId">绩效月ID</param>
///// <returns></returns>
//[HttpPost]
//[Route("download/attendance/{allotId}")]
......@@ -241,7 +339,7 @@ public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allot
/// <summary>
/// 考勤记录下载
/// </summary>
/// <param name="allotId"></param>
/// <param name="allotId">绩效月ID</param>
/// <returns></returns>
[HttpPost]
[Route("download/vacation/{allotId}")]
......@@ -279,7 +377,7 @@ public IActionResult DownloadVacation(int allotId)
/// <summary>
/// 调动记录下载
/// </summary>
/// <param name="allotId"></param>
/// <param name="allotId">绩效月ID</param>
/// <returns></returns>
[HttpPost]
[Route("download/callin/{allotId}")]
......@@ -315,7 +413,7 @@ public IActionResult DownloadCallIn(int allotId)
/// <summary>
/// 生成最终考勤结果下载
/// </summary>
/// <param name="allotId"></param>
/// <param name="allotId">绩效月ID</param>
/// <returns></returns>
[HttpPost]
[Route("download/statistics/{allotId}")]
......@@ -329,6 +427,7 @@ public IActionResult DownloadStatistics(int allotId)
new ExcelDownloadHeads { Alias = "员工号", Name = nameof(AttendanceStatistics.PersonnelNumber) },
new ExcelDownloadHeads { Alias = "在科开始时问", Name = nameof(AttendanceStatistics.BeginDate) },
new ExcelDownloadHeads { Alias = "在科结束时间", Name = nameof(AttendanceStatistics.EndDate) },
new ExcelDownloadHeads { Alias = "人员系数", Name = nameof(AttendanceStatistics.PermanentStaff) },
};
var type = _attendanceService.GetAttendanceType(allotId);
foreach (var item in type.Data)
......@@ -370,7 +469,7 @@ public IActionResult DownloadStatistics(int allotId)
/// <summary>
/// 科室确认详情(已下发结果展示列表)下载
/// </summary>
/// <param name="allotId"></param>
/// <param name="allotId">绩效月ID</param>
/// <param name="unitType">人员类别</param>
/// <param name="accountingUnit">核算单元</param>
/// <returns></returns>
......@@ -386,15 +485,16 @@ public IActionResult DownloadAuditDetail(int allotId, string unitType, string ac
new ExcelDownloadHeads { Alias = "员工号", Name = nameof(AttendanceStatistics.PersonnelNumber) },
new ExcelDownloadHeads { Alias = "在科开始时问", Name = nameof(AttendanceStatistics.BeginDate) },
new ExcelDownloadHeads { Alias = "在科结束时间", Name = nameof(AttendanceStatistics.EndDate) },
new ExcelDownloadHeads { Alias = "人员系数", Name = nameof(AttendanceStatistics.PermanentStaff) },
};
var type = _attendanceService.GetAttendanceType(allotId);
foreach (var item in type.Data)
var userid = claim.GetUserId();
var result = _attendanceService.AuditDetail(allotId, unitType, accountingUnit, searchTxet, userid).Data;
foreach (var item in result.SelectMany(w => w.Detial).Select(w => w.Title).Distinct())
{
excelDownloadHeads.Add(new ExcelDownloadHeads() { Alias = item.AttendanceName, Name = item.AttendanceName });
excelDownloadHeads.Add(new ExcelDownloadHeads() { Alias = item, Name = item });
}
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);
......@@ -415,7 +515,6 @@ public IActionResult DownloadAuditDetail(int allotId, string unitType, string ac
#endregion
#region 最终考勤结果
/// <summary>
/// 科室确认列表
/// </summary>
......@@ -432,14 +531,13 @@ public ApiResponse<List<AttendanceAuditList>> AuditList(int allotId, string unit
return _attendanceService.AuditList(allotId, unitType, accountingUnit, state);
}
/// <summary>
/// 科室确认详情(已下发结果展示列表)
/// </summary>
/// <param name="allotId">绩效Id</param>
/// <param name="unitType"> 人员类别</param>
/// <param name="accountingUnit">核算单元</param>
/// <param name="searchTxet">搜索文本框(姓名\工号)</param>
/// <returns></returns>
[HttpPost]
[Route("issue/audit/detail")]
......@@ -468,7 +566,7 @@ public ApiResponse<List<PerAttendanceIssueDto>> PreConfirmationDisplay(int allot
/// <summary>
/// 最终考勤结果下发
/// </summary>
/// <param name="allotId"></param>
/// <param name="allotId">绩效月ID</param>
/// <returns></returns>
[HttpPost]
[Route("issue/confirm")]
......@@ -479,7 +577,6 @@ public ApiResponse IssueStatistics(int allotId)
return _attendanceService.IssueStatistics(allotId, userid, realName);
}
/// <summary>
/// 最终考勤结果驳回或确认无误((批量操作)
/// </summary>
......@@ -489,26 +586,385 @@ public ApiResponse IssueStatistics(int allotId)
[Route("issue/choose")]
public ApiResponse ChooseStatistics(AttendanceIssueChoose attendanceIssueChoose)
{
var userid = claim.GetUserId();
var realName = claim.GetUserClaim(JwtClaimTypes.RealName);
return _attendanceService.ChooseStatistics(attendanceIssueChoose, realName);
return _attendanceService.ChooseStatistics(attendanceIssueChoose, userid, realName);
}
#endregion
#region 考勤上报
/// <summary>
/// 科室上报审核列表
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <param name="unitType">核算组别</param>
/// <param name="accountingUnit">核算单元</param>
/// <param name="state"></param>
/// <returns></returns>
[HttpPost]
[Route("dept/audit/list")]
public ApiResponse<List<AttendanceDeptAuditList>> DeptAuditList(int allotId, string unitType, string accountingUnit, int? state = -1)
{
return _attendanceService.DeptAuditList(allotId, unitType, accountingUnit, state ?? -1);
}
/// <summary>
/// 科室考勤上报录入状态
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <param name="unitType">核算组别</param>
/// <returns></returns>
[HttpPost]
[Route("dept/state")]
public ApiResponse<AttendanceDeptState> DeptState(int allotId, string unitType)
{
var userid = claim.GetUserId();
return _attendanceService.DeptState(allotId, userid, unitType);
}
/// <summary>
/// 科室考勤上报录入加载
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <returns></returns>
[HttpPost]
[Route("dept/load")]
public ApiResponse DeptLoad(int allotId)
{
var userid = claim.GetUserId();
var realName = claim.GetUserClaim(JwtClaimTypes.RealName);
return _attendanceService.DeptLoad(allotId, userid, realName);
}
/// <summary>
/// 科室考勤上报录入保存
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <param name="unitType">核算组别</param>
/// <param name="datas"></param>
/// <returns></returns>
[HttpPost]
[Route("dept/save")]
public ApiResponse DeptSave(int allotId, string unitType, [FromBody] List<AttendanceDept> datas)
{
var userid = claim.GetUserId();
var realName = claim.GetUserClaim(JwtClaimTypes.RealName);
if (!Enum.TryParse(unitType, out UnitType unitType1))
throw new PerformanceException("核算组别错误");
return _attendanceService.DeptSave(allotId, datas, unitType, userid, realName);
}
/// <summary>
/// 科室考勤上报录入结果统计
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <param name="unitType">核算组别</param>
/// <param name="accountingUnit">核算单元</param>
/// <param name="searchTxet">工号/姓名</param>
/// <param name="datas"></param>
/// <returns></returns>
[HttpPost]
[Route("dept/compute")]
public ApiResponse<List<AttendanceStatistics>> DeptCompute(int allotId, string unitType, string accountingUnit, string searchTxet, [FromBody] List<AttendanceDept> datas)
{
if (!Enum.TryParse(unitType, out UnitType unitType1))
throw new PerformanceException("核算组别错误");
List<AttendanceDeptMore> deptDetail = new List<AttendanceDeptMore>();
if (datas?.Any() != true)
{
deptDetail = _attendanceService.DeptDetail(allotId, unitType, accountingUnit, searchTxet)?.Data?.Data ?? new List<AttendanceDeptMore>();
}
else
{
deptDetail = datas.Select(w => new AttendanceDeptMore
{
AllotId = allotId,
Code = "",
UnitType = unitType,
AccountingUnit = accountingUnit,
PersonnelNumber = w.PersonnelNumber,
PersonnelName = w.PersonnelName,
PermanentStaff = w.PermanentStaff,
AuditTime = DateTime.Now,
AuditUser = "",
Day01 = w.Day01,
Day02 = w.Day02,
Day03 = w.Day03,
Day04 = w.Day04,
Day05 = w.Day05,
Day06 = w.Day06,
Day07 = w.Day07,
Day08 = w.Day08,
Day09 = w.Day09,
Day10 = w.Day10,
Day11 = w.Day11,
Day12 = w.Day12,
Day13 = w.Day13,
Day14 = w.Day14,
Day15 = w.Day15,
Day16 = w.Day16,
Day17 = w.Day17,
Day18 = w.Day18,
Day19 = w.Day19,
Day20 = w.Day20,
Day21 = w.Day21,
Day22 = w.Day22,
Day23 = w.Day23,
Day24 = w.Day24,
Day25 = w.Day25,
Day26 = w.Day26,
Day27 = w.Day27,
Day28 = w.Day28,
Day29 = w.Day29,
Day30 = w.Day30,
Day31 = w.Day31,
}).ToList();
}
return _attendanceService.DeptCompute(allotId, deptDetail);
}
/// <summary>
/// 科室考勤上报录入结果统计下载
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <param name="unitType">核算组别</param>
/// <param name="accountingUnit">核算单元</param>
/// <param name="searchTxet">工号/姓名</param>
/// <returns></returns>
[HttpPost]
[Route("dept/download/compute")]
public IActionResult DownloadDeptCompute(int allotId, string unitType, string accountingUnit, string searchTxet)
{
if (!Enum.TryParse(unitType, out UnitType unitType1))
throw new PerformanceException("核算组别错误");
if (string.IsNullOrEmpty(accountingUnit))
throw new PerformanceException("核算单元错误");
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) },
new ExcelDownloadHeads { Alias = "人员系数", Name = nameof(AttendanceStatistics.PermanentStaff) },
};
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 deptDetail = _attendanceService.DeptDetail(allotId, unitType, accountingUnit, searchTxet)?.Data?.Data ?? new List<AttendanceDeptMore>();
var res = _attendanceService.DeptCompute(allotId, deptDetail);
var result = (res?.Data == null) ? new List<AttendanceStatistics>() : res.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));
}
/// <summary>
/// 科室考勤上报录入提交
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <param name="unitType">核算组别</param>
/// <param name="datas"></param>
/// <returns></returns>
[HttpPost]
[Route("dept/submit")]
public ApiResponse DeptSubmit(int allotId, string unitType, [FromBody] List<AttendanceDept> datas)
{
var userid = claim.GetUserId();
var realName = claim.GetUserClaim(JwtClaimTypes.RealName);
var saveRes = _attendanceService.DeptSave(allotId, datas, unitType, userid, realName);
if (saveRes.State != ResponseType.OK)
return saveRes;
return _attendanceService.DeptSubmit(allotId, unitType, userid, realName);
}
/// <summary>
/// 科室考勤上报录入撤回
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <param name="unitType">核算组别</param>
/// <returns></returns>
[HttpPost]
[Route("dept/rollback")]
public ApiResponse DeptRollback(int allotId, string unitType)
{
var userid = claim.GetUserId();
var realName = claim.GetUserClaim(JwtClaimTypes.RealName);
return _attendanceService.DeptRollback(allotId, unitType, userid, realName);
}
/// <summary>
/// 科室考勤上报结果审核
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <param name="unitType">核算组别</param>
/// <param name="accountingUnit">核算单元</param>
/// <param name="audit"></param>
/// <returns></returns>
[HttpPost]
[Route("dept/audit")]
public ApiResponse DeptAudit(int allotId, string unitType, string accountingUnit, [FromBody] AttendanceDeptAudit audit)
{
if (audit == null)
throw new PerformanceException("审核参数错误");
if (string.IsNullOrEmpty(unitType) || string.IsNullOrEmpty(accountingUnit))
throw new PerformanceException("核算单元及组别信息错误");
var states = new int[] { (int)Attendance.Report.通过, (int)Attendance.Report.驳回, };
if (!states.Contains(audit.State))
throw new PerformanceException("暂不支持当前审核模式");
var realName = claim.GetUserClaim(JwtClaimTypes.RealName);
return _attendanceService.DeptAudit(allotId, unitType, accountingUnit, audit.State, audit.Remark, realName);
}
/// <summary>
/// 科室考勤上报结果详情
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <param name="unitType">核算组别</param>
/// <param name="accountingUnit">核算单元</param>
/// <param name="searchTxet">工号/姓名</param>
/// <returns></returns>
[HttpPost]
[Route("dept/detail")]
public ApiResponse<AttendanceDeptDetail> DeptDetail(int allotId, string unitType, string accountingUnit, string searchTxet)
{
return _attendanceService.DeptDetail(allotId, unitType, accountingUnit, searchTxet);
}
/// <summary>
/// 科室考勤上报结果详情下载
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <param name="unitType">核算组别</param>
/// <param name="accountingUnit">核算单元</param>
/// <param name="searchTxet">工号/姓名</param>
/// <returns></returns>
[HttpPost]
[Route("dept/detail/download")]
public IActionResult DeptDetailDownload(int allotId, string unitType, string accountingUnit, string searchTxet)
{
if (!Enum.TryParse(unitType, out UnitType unitType1))
throw new PerformanceException("核算组别错误");
var res = _attendanceService.DeptDetail(allotId, unitType, accountingUnit, searchTxet);
var heads = res.Data.Columns.Select(w => new ExcelDownloadHeads { Alias = w.Title, Name = w.Field }).ToList();
var rows = JsonHelper.Deserialize<List<Dictionary<string, object>>>(JsonHelper.Serialize(res.Data.Data));
var filepath = _attendanceService.ExcelDownload(rows, "科室考勤上报结果详情", allotId, heads);
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));
}
/// <summary>
/// 科室考勤上报汇总统计
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <param name="unitType">核算组别</param>
/// <param name="accountingUnit">核算单元</param>
/// <param name="searchTxet">工号/姓名</param>
/// <returns></returns>
/// <exception cref="PerformanceException"></exception>
[HttpPost]
[Route("dept/report")]
public ApiResponse<List<AttendanceDeptReport>> DeptReport(int allotId, string unitType, string accountingUnit, string searchTxet)
{
return _attendanceService.DeptReport(allotId, unitType, accountingUnit, searchTxet);
}
/// <summary>
/// 科室考勤上报汇总数据刷新
/// </summary>
/// <param name="allotId"></param>
/// <returns></returns>
[HttpPost]
[Route("dept/report/refresh")]
public ApiResponse DeptReportRefresh(int allotId)
{
_attendanceService.DeptReportRefresh(allotId, (int)Attendance.Report.通过);
return new ApiResponse(ResponseType.OK, "刷新成功");
}
/// <summary>
/// 科室考勤上报汇总统计下载
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <param name="unitType">核算组别</param>
/// <param name="accountingUnit">核算单元</param>
/// <param name="searchTxet">工号/姓名</param>
/// <returns></returns>
[HttpPost]
[Route("dept/download/report")]
public IActionResult DownloadDeptReport(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) },
new ExcelDownloadHeads { Alias = "人员系数", Name = nameof(AttendanceStatistics.PermanentStaff) },
};
var res = _attendanceService.DeptReport(allotId, unitType, accountingUnit, searchTxet);
var result = (res?.Data == null) ? new List<AttendanceDeptReport>() : res.Data;
foreach (var item in result.SelectMany(w => w.Detial).Select(w => w.Title).Distinct())
{
excelDownloadHeads.Add(new ExcelDownloadHeads() { Alias = item, Name = item });
}
excelDownloadHeads.Add(new ExcelDownloadHeads() { Alias = "出勤天数", Name = "AttendanceDays" });
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));
}
///// <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
diff a/performance/Performance.Api/Controllers/AttendanceController.cs b/performance/Performance.Api/Controllers/AttendanceController.cs (rejected hunks)
@@ -160,7 +160,6 @@
/// <param name="allotId"></param>
/// <param name="attendanceType"></param>
/// <returns></returns>
- [HttpPost("Type/Edit/{allotId},{hospitalId}")]
[HttpPost("Type/Edit/{allotId}")]
public ApiResponse<AttendanceType> InsertAttendanceType(int allotId, AttendanceType attendanceType)
{
......@@ -901,6 +901,7 @@ public ApiResponse CopyDropDown()
//new CopyDrop{Label="收入费用类别",Value="drugTypes"},
new CopyDrop{Label="支出费用类别",Value="drugTypeDisburses"},
new CopyDrop{Label="费用类别系数",Value="drugTypeFactors"},
new CopyDrop{Label="考勤类型",Value="attendanceType"},
//new CopyDrop{Label="科室类型",Value="deptTypes"},
new CopyDrop{Label="二次绩效配置",Value="agains"},
};
......
......@@ -612,10 +612,22 @@ public ApiResponse<List<TitleValue>> ClearAprData([FromBody] AprAmountAuditReque
/// <param name="request"></param>
/// <returns></returns>
[HttpPost("autocomplate")]
public ApiResponse<List<view_per_apr_amount>> GetEmployeeMessage([FromBody] per_apr_amount request)
{
var result = employeeService.GetEmployeeMessage(request.AllotId, request.PersonnelNumber, request.DoctorName, claim.GetUserId());
return new ApiResponse<List<view_per_apr_amount>>(ResponseType.OK, "人员信息", result);
public ApiResponse<List<AutocomplateEmployeeResponse>> GetEmployeeMessage([FromBody] per_apr_amount request)
{
var userId = claim.GetUserId();
var user = userService.GetUserIdentity(userId);
var result = employeeService.GetEmployeeMessage(request.AllotId, request.PersonnelNumber, request.DoctorName, userId);
var res = result.Select(t => new AutocomplateEmployeeResponse
{
AllotId = request.AllotId,
PersonnelNumber = t.PersonnelNumber,
DoctorName = t.DoctorName,
TypeInDepartment = user.Department,
AccountingUnit = t.AccountingUnit,
PermanentStaff = t.PermanentStaff,
}).ToList();
return new ApiResponse<List<AutocomplateEmployeeResponse>>(ResponseType.OK, "人员信息", res);
}
/// <summary>
......
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
......@@ -52,6 +53,40 @@ public ApiResponse GetPersons([FromRoute] int allotId, [FromBody] PersonParamsRe
}
/// <summary>
/// 获取所有员工记录
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <param name="personnelNumber">工号</param>
/// <param name="personnelName">姓名</param>
/// <param name="unitType">核算组别</param>
/// <param name="accountingUnit">核算单元</param>
/// <param name="searchText">多字段查询;支持“工号/姓名/核算组别/核算单元”</param>
/// <param name="pageIndex">页码 默认1</param>
/// <param name="pageSize">行数 默认</param>
/// <returns></returns>
[Route("employee/list")]
[HttpPost]
public ApiResponse GetEmployee([FromQuery] int allotId,
[FromQuery, DefaultValue("")] string personnelNumber,
[FromQuery, DefaultValue("")] string personnelName,
[FromQuery, DefaultValue("")] string unitType,
[FromQuery, DefaultValue("")] string accountingUnit,
[FromQuery, DefaultValue("")] string searchText,
[FromQuery, DefaultValue(1)] int pageIndex,
[FromQuery, DefaultValue(20)] int pageSize)
{
var list = personService.GetEmployee(allotId, personnelNumber, personnelName, unitType, accountingUnit, searchText, pageIndex, pageSize);
return new ApiResponse(ResponseType.OK, new
{
list.CurrentPage,
list.TotalPages,
list.PageSize,
list.TotalCount,
list
});
}
/// <summary>
/// 新增员工信息
/// </summary>
/// <param name="request"></param>
......
......@@ -34,7 +34,7 @@
"/api/account/updateuser"
],
//登录过期时间
"ExpirationMinutes": "1200",
"ExpirationMinutes": "1200000",
//验证码过期
"SmsCodeMinutes": "5",
////护士长二次绩效管理员
......
......@@ -306,7 +306,7 @@
<summary>
查询绩效调动记录
</summary>
<param name="allotId"></param>
<param name="allotId">绩效月ID</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.GetBatchCallInHandsonTable(System.Int32)">
......@@ -319,25 +319,53 @@
<summary>
批量插入调动记录
</summary>
<param name="allotId"></param>
<param name="allotId">绩效月ID</param>
<param name="hospitalId"></param>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.GetAttendanceType(System.Int32,System.Int32)">
<member name="M:Performance.Api.Controllers.AttendanceController.AttendanceAdd(System.Int32,Performance.DtoModels.Response.AttendanceData)">
<summary>
考勤-调动记录表(添加)
</summary>
<param name="allotId">绩效月ID</param>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.AttendanceUpdate(System.Int32,Performance.DtoModels.Response.AttendanceUpdateData)">
<summary>
考勤-调动记录表(修改)
</summary>
<param name="allotId">绩效月ID</param>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.AttendanceDelete(System.Int32)">
<summary>
考勤-调动记录表(删除)
</summary>
<param name="attendanceId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.AttendanceClearAll(System.Int32)">
<summary>
考勤-调动记录表(全部删除)
</summary>
<param name="allotId">绩效月ID</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.GetAttendanceType(System.Int32)">
<summary>
查询绩效考勤类型
</summary>
<param name="allotId"></param>
<param name="hospitalId"></param>
<param name="allotId">绩效月ID</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.InsertAttendanceType(System.Int32,System.Int32,Performance.EntityModels.Other.AttendanceType)">
<member name="M:Performance.Api.Controllers.AttendanceController.InsertAttendanceType(System.Int32,Performance.EntityModels.Other.AttendanceType)">
<summary>
新增或修改考勤类型
</summary>
<param name="allotId"></param>
<param name="hospitalId"></param>
<param name="allotId">绩效月ID</param>
<param name="attendanceType"></param>
<returns></returns>
</member>
......@@ -358,7 +386,7 @@
<summary>
查询考勤记录
</summary>
<param name="allotId"></param>
<param name="allotId">绩效月ID</param>
<param name="hospitalId"></param>
<returns></returns>
</member>
......@@ -366,44 +394,74 @@
<summary>
批量插入考勤记录,插入前需要删除所有后重新插入
</summary>
<param name="allotId"></param>
<param name="allotId">绩效月ID</param>
<param name="hospitalId"></param>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.AttendanceVacationAdd(System.Int32,Performance.DtoModels.Response.AttendanceVacationData)">
<summary>
考勤-考勤记录表(添加)
</summary>
<param name="allotId">绩效月ID</param>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.AttendanceVacationUpdate(System.Int32,Performance.DtoModels.Response.AttendanceVacationUpdateData)">
<summary>
考勤-考勤记录表(修改)
</summary>
<param name="allotId">绩效月ID</param>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.AttendanceVacationDelete(System.Int32)">
<summary>
考勤-考勤记录表(删除)
</summary>
<param name="attendanceId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.AttendanceVacationClearAll(System.Int32)">
<summary>
考勤-考勤记录表(全部删除)
</summary>
<param name="allotId">绩效月ID</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.GetAttendanceStatistics(System.Int32)">
<summary>
考勤结果统计
</summary>
<param name="allotId"></param>
<param name="allotId">绩效月ID</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DownloadVacation(System.Int32)">
<summary>
考勤记录下载
</summary>
<param name="allotId"></param>
<param name="allotId">绩效月ID</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DownloadCallIn(System.Int32)">
<summary>
调动记录下载
</summary>
<param name="allotId"></param>
<param name="allotId">绩效月ID</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DownloadStatistics(System.Int32)">
<summary>
生成最终考勤结果下载
</summary>
<param name="allotId"></param>
<param name="allotId">绩效月ID</param>
<returns></returns>
</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="allotId">绩效月ID</param>
<param name="unitType">人员类别</param>
<param name="accountingUnit">核算单元</param>
<returns></returns>
......@@ -425,6 +483,7 @@
<param name="allotId">绩效Id</param>
<param name="unitType"> 人员类别</param>
<param name="accountingUnit">核算单元</param>
<param name="searchTxet">搜索文本框(姓名\工号)</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.PreConfirmationDisplay(System.Int32,System.String,System.String,Performance.DtoModels.Attendance.OperationType)">
......@@ -441,7 +500,7 @@
<summary>
最终考勤结果下发
</summary>
<param name="allotId"></param>
<param name="allotId">绩效月ID</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.ChooseStatistics(Performance.DtoModels.Response.AttendanceIssueChoose)">
......@@ -451,6 +510,136 @@
<param name="attendanceIssueChoose"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DeptAuditList(System.Int32,System.String,System.String,System.Nullable{System.Int32})">
<summary>
科室上报审核列表
</summary>
<param name="allotId">绩效月ID</param>
<param name="unitType">核算组别</param>
<param name="accountingUnit">核算单元</param>
<param name="state"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DeptState(System.Int32,System.String)">
<summary>
科室考勤上报录入状态
</summary>
<param name="allotId">绩效月ID</param>
<param name="unitType">核算组别</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DeptLoad(System.Int32)">
<summary>
科室考勤上报录入加载
</summary>
<param name="allotId">绩效月ID</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DeptSave(System.Int32,System.String,System.Collections.Generic.List{Performance.DtoModels.Request.AttendanceDept})">
<summary>
科室考勤上报录入保存
</summary>
<param name="allotId">绩效月ID</param>
<param name="unitType">核算组别</param>
<param name="datas"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DeptCompute(System.Int32,System.String,System.String,System.String,System.Collections.Generic.List{Performance.DtoModels.Request.AttendanceDept})">
<summary>
科室考勤上报录入结果统计
</summary>
<param name="allotId">绩效月ID</param>
<param name="unitType">核算组别</param>
<param name="accountingUnit">核算单元</param>
<param name="searchTxet">工号/姓名</param>
<param name="datas"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DownloadDeptCompute(System.Int32,System.String,System.String,System.String)">
<summary>
科室考勤上报录入结果统计下载
</summary>
<param name="allotId">绩效月ID</param>
<param name="unitType">核算组别</param>
<param name="accountingUnit">核算单元</param>
<param name="searchTxet">工号/姓名</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DeptSubmit(System.Int32,System.String,System.Collections.Generic.List{Performance.DtoModels.Request.AttendanceDept})">
<summary>
科室考勤上报录入提交
</summary>
<param name="allotId">绩效月ID</param>
<param name="unitType">核算组别</param>
<param name="datas"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DeptRollback(System.Int32,System.String)">
<summary>
科室考勤上报录入撤回
</summary>
<param name="allotId">绩效月ID</param>
<param name="unitType">核算组别</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DeptAudit(System.Int32,System.String,System.String,Performance.DtoModels.Request.AttendanceDeptAudit)">
<summary>
科室考勤上报结果审核
</summary>
<param name="allotId">绩效月ID</param>
<param name="unitType">核算组别</param>
<param name="accountingUnit">核算单元</param>
<param name="audit"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DeptDetail(System.Int32,System.String,System.String,System.String)">
<summary>
科室考勤上报结果详情
</summary>
<param name="allotId">绩效月ID</param>
<param name="unitType">核算组别</param>
<param name="accountingUnit">核算单元</param>
<param name="searchTxet">工号/姓名</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DeptDetailDownload(System.Int32,System.String,System.String,System.String)">
<summary>
科室考勤上报结果详情下载
</summary>
<param name="allotId">绩效月ID</param>
<param name="unitType">核算组别</param>
<param name="accountingUnit">核算单元</param>
<param name="searchTxet">工号/姓名</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DeptReport(System.Int32,System.String,System.String,System.String)">
<summary>
科室考勤上报汇总统计
</summary>
<param name="allotId">绩效月ID</param>
<param name="unitType">核算组别</param>
<param name="accountingUnit">核算单元</param>
<param name="searchTxet">工号/姓名</param>
<returns></returns>
<exception cref="T:Performance.DtoModels.PerformanceException"></exception>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DeptReportRefresh(System.Int32)">
<summary>
科室考勤上报汇总数据刷新
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DownloadDeptReport(System.Int32,System.String,System.String,System.String)">
<summary>
科室考勤上报汇总统计下载
</summary>
<param name="allotId">绩效月ID</param>
<param name="unitType">核算组别</param>
<param name="accountingUnit">核算单元</param>
<param name="searchTxet">工号/姓名</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.BudgetController.Query(Performance.DtoModels.Request.BudgetRequest)">
<summary>
预算管理查询(包含金额、占比)
......@@ -1898,6 +2087,20 @@
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.PersonController.GetEmployee(System.Int32,System.String,System.String,System.String,System.String,System.String,System.Int32,System.Int32)">
<summary>
获取所有员工记录
</summary>
<param name="allotId">绩效月ID</param>
<param name="personnelNumber">工号</param>
<param name="personnelName">姓名</param>
<param name="unitType">核算组别</param>
<param name="accountingUnit">核算单元</param>
<param name="searchText">多字段查询;支持“工号/姓名/核算组别/核算单元”</param>
<param name="pageIndex">页码 默认1</param>
<param name="pageSize">行数 默认</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.PersonController.CreatePerson(Performance.DtoModels.PerEmployeeResponse)">
<summary>
新增员工信息
......
......@@ -64,6 +64,11 @@
开启反SQL注入白名单地址
</summary>
</member>
<member name="P:Performance.DtoModels.AppSettings.Application.NightShiftTexts">
<summary>
夜班绩效文本名称
</summary>
</member>
<member name="T:Performance.DtoModels.AppSettings.AppSQLEncrypt">
<summary>
数据库密码加密
......@@ -172,6 +177,11 @@
<member name="F:Performance.DtoModels.DataFormat.日期YYYYMMDD">
<summary> 日期 </summary>
</member>
<member name="T:Performance.DtoModels.Attendance.Report">
<summary>
考勤上报
</summary>
</member>
<member name="P:Performance.DtoModels.HistoryData.Year">
<summary>
......@@ -272,6 +282,11 @@
姓名
</summary>
</member>
<member name="P:Performance.DtoModels.PerAttendanceIssueDto.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.DtoModels.PerAttendanceIssueDto.BeginDate">
<summary>
在科开始时间
......@@ -2085,6 +2100,86 @@
<member name="P:Performance.DtoModels.AprAmountMarkRequest.TypeInDepartments">
<summary> 需要审计的科室,支持多个科室一起审计 </summary>
</member>
<member name="P:Performance.DtoModels.Request.AttendanceDeptAudit.State">
<summary>
状态(通过 = 3,驳回 = 4)
</summary>
</member>
<member name="P:Performance.DtoModels.Request.AttendanceDeptAudit.Remark">
<summary>
说明
</summary>
</member>
<member name="P:Performance.DtoModels.Request.AttendanceDept.PersonnelNumber">
<summary>
工号
</summary>
</member>
<member name="P:Performance.DtoModels.Request.AttendanceDept.PersonnelName">
<summary>
姓名
</summary>
</member>
<member name="P:Performance.DtoModels.Request.AttendanceDept.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.DtoModels.Request.AttendanceDept.Day01">
<summary>
01日
</summary>
</member>
<member name="P:Performance.DtoModels.Request.AttendanceDeptMore.AllotId">
<summary>
绩效Id
</summary>
</member>
<member name="P:Performance.DtoModels.Request.AttendanceDeptMore.Code">
<summary>
核算单元编码
</summary>
</member>
<member name="P:Performance.DtoModels.Request.AttendanceDeptMore.UnitType">
<summary>
核算组别
</summary>
</member>
<member name="P:Performance.DtoModels.Request.AttendanceDeptMore.AccountingUnit">
<summary>
核算单元
</summary>
</member>
<member name="P:Performance.DtoModels.Request.AttendanceDeptMore.State">
<summary>
状态(未提交 = 1,提交 = 2,通过 = 3,驳回 = 4)
</summary>
</member>
<member name="P:Performance.DtoModels.Request.AttendanceDeptMore.SubmitUser">
<summary>
提交用户
</summary>
</member>
<member name="P:Performance.DtoModels.Request.AttendanceDeptMore.SubmitTime">
<summary>
提交时间
</summary>
</member>
<member name="P:Performance.DtoModels.Request.AttendanceDeptMore.AuditUser">
<summary>
审核用户
</summary>
</member>
<member name="P:Performance.DtoModels.Request.AttendanceDeptMore.AuditTime">
<summary>
审核时间
</summary>
</member>
<member name="P:Performance.DtoModels.Request.AttendanceDeptMore.Remarks">
<summary>
备注
</summary>
</member>
<member name="P:Performance.DtoModels.Request.BatchRequest.Batch">
<summary>
批次号
......@@ -2933,6 +3028,11 @@
姓名
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.BeginDate">
<summary>
在科开始时间
......@@ -3053,6 +3153,111 @@
状态描述
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceData.PersonnelNumber">
<summary>
工号
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceData.PersonnelName">
<summary>
姓名
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceUpdateData.AttendanceId">
<summary>
拿来修改的id
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceUpdateData.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceUpdateData.CallInUnitType">
<summary>
人员类别
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceUpdateData.CallInAccountingUnit">
<summary>
核算单元
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceUpdateData.CallInDate">
<summary>
调入时间
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceDeptState.Title">
<summary>
标题名
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceDeptAuditList.Code">
<summary>
编码
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceDeptAuditList.UnitType">
<summary>
核算组别
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceDeptAuditList.AccountingUnit">
<summary>
核算单元
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceDeptAuditList.Count">
<summary>
总下发数
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceDeptAuditList.ConfirmCount">
<summary>
确认数
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceDeptAuditList.FinishCount">
<summary>
通过数
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceDeptAuditList.RejectCount">
<summary>
驳回数
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceDeptAuditList.State">
<summary>
状态(未提交 = 1,提交 = 2,通过 = 3,驳回 = 4)
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceDeptAuditList.SubmitUser">
<summary>
提交人
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceDeptAuditList.SubmitTime">
<summary>
提交时间
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceDeptAuditList.AuditUser">
<summary>
审核人
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceDeptAuditList.AuditTime">
<summary>
审核时间
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceDeptAuditList.Remarks">
<summary>
状态描述
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceIssueChoose.AllotId">
<summary>
绩效Id
......@@ -3073,6 +3278,66 @@
备注
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceVacationData.PersonnelNumber">
<summary>
工号
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceVacationData.PersonnelName">
<summary>
姓名
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceVacationUpdateData.AttendanceVacationId">
<summary>
拿来修改的id
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceVacationUpdateData.TypeId">
<summary>
per_attendance_type表中ID
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceVacationUpdateData.BegDate">
<summary>
开始时间
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceVacationUpdateData.EndDate">
<summary>
结束时间
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AutocomplateEmployeeResponse.AllotId">
<summary>
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AutocomplateEmployeeResponse.PersonnelNumber">
<summary>
人员工号
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AutocomplateEmployeeResponse.DoctorName">
<summary>
医生姓名
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AutocomplateEmployeeResponse.TypeInDepartment">
<summary>
录入科室
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AutocomplateEmployeeResponse.AccountingUnit">
<summary>
核算单元
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AutocomplateEmployeeResponse.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.HeadName">
<summary>
列头名称
......@@ -3098,6 +3363,76 @@
是否附带上次绩效 0 不附带 1 附带
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceDeptReport.Code">
<summary>
核算单元编码
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceDeptReport.AllotID">
<summary>
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceDeptReport.UnitType">
<summary>
核算组别
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceDeptReport.AccountingUnit">
<summary>
核算单元
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceDeptReport.Department">
<summary>
科室名称
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceDeptReport.PersonnelNumber">
<summary>
工号
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceDeptReport.PersonnelName">
<summary>
姓名
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceDeptReport.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceDeptReport.BeginDate">
<summary>
在科开始时间
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceDeptReport.EndDate">
<summary>
在科结束时间
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceDeptReport.AttendanceDays">
<summary>
出勤天数
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceDeptReportItem.Value">
<summary>
请假天数
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceDeptReportItem.Title">
<summary>
考勤类型
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceDeptReportItem.Remark">
<summary>
备注
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatistics.Code">
<summary>
核算单元编码
......@@ -3133,6 +3468,11 @@
姓名
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatistics.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatistics.BeginDate">
<summary>
在科开始时间
......
......@@ -6118,6 +6118,166 @@
修改时间
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.Id">
<summary>
自增主键
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.HospitalId">
<summary>
医院Id,可空
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.AllotId">
<summary>
绩效Id
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.PersonnelNumber">
<summary>
工号
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.PersonnelName">
<summary>
姓名
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.Code">
<summary>
核算单元编码
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.UnitType">
<summary>
人员类别
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.AccountingUnit">
<summary>
核算单元
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.State">
<summary>
状态(未提交 = 0,提交 = 1,通过 = 2,驳回 = 3)
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.SubmitUser">
<summary>
提交用户
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.SubmitTime">
<summary>
提交时间
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.AuditUser">
<summary>
审核用户
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.AuditTime">
<summary>
审核时间
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.Remarks">
<summary>
备注
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.Day01">
<summary>
01日
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.HospitalId">
<summary>
医院Id
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.AllotId">
<summary>
绩效Id
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.Code">
<summary>
核算单元编码
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.UnitType">
<summary>
人员类别
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.AccountingUnit">
<summary>
核算单元
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.PersonnelNumber">
<summary>
工号
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.PersonnelName">
<summary>
姓名
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.BeginDate">
<summary>
在科开始时间
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.EndDate">
<summary>
在科结束时间
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.WorkFullDays">
<summary>
全勤天数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.AttendanceDays">
<summary>
出勤天数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.DeductionDays">
<summary>
核减天数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.NoDeductionDays">
<summary>
不核减天数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.CreateTime">
<summary>
创建时间
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.HospitalId">
<summary>
医院Id
......@@ -6153,6 +6313,11 @@
姓名
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.BeginDate">
<summary>
在科开始时间
......@@ -6990,7 +7155,7 @@
</member>
<member name="P:Performance.EntityModels.per_employee.PermanentStaff">
<summary>
核算人
人员系
</summary>
</member>
<member name="P:Performance.EntityModels.per_employee.EfficiencyNumber">
......@@ -9523,6 +9688,11 @@
姓名
</summary>
</member>
<member name="P:Performance.EntityModels.Other.view_attendance.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.EntityModels.Other.view_attendance.AttendanceDate">
<summary>
考勤时间
......
......@@ -38,5 +38,9 @@ public class Application
/// 开启反SQL注入白名单地址
/// </summary>
public string[] AntiSqlInjectRouteWhite { get; set; }
/// <summary>
/// 夜班绩效文本名称
/// </summary>
public string[] NightShiftTexts { get; set; }
}
}
using AutoMapper;
using Performance.DtoModels.Request;
using Performance.DtoModels.Response;
using Performance.EntityModels;
using Performance.EntityModels.Entity;
using Performance.Infrastructure;
......@@ -277,6 +278,8 @@ public AutoMapperConfigs()
.ReverseMap();
CreateMap<cof_again, CofAgainRequest>().ReverseMap();
CreateMap<AttendanceData, per_attendance>().ReverseMap();
CreateMap<AttendanceVacationData, per_attendance_vacation>().ReverseMap();
}
}
}
......@@ -124,6 +124,16 @@ public enum State
确认 = 2,
驳回 = 3,
}
/// <summary>
/// 考勤上报
/// </summary>
public enum Report
{
未提交 = 1,
提交 = 2,
通过 = 3,
驳回 = 4,
}
public enum OperationType
{
全部 = 0,
......
......@@ -14,11 +14,13 @@ public PerAttendanceIssueDto()
{ }
public PerAttendanceIssueDto(AttendanceStatistics item)
{
Id = 0;
Code = item.Code;
UnitType = item.UnitType;
AccountingUnit = item.AccountingUnit;
PersonnelNumber = item.PersonnelNumber;
PersonnelName = item.PersonnelName;
PermanentStaff = item.PermanentStaff;
BeginDate = item.BeginDate;
EndDate = item.EndDate;
DeductionDays = item.Detial.Where(w => !w.Remark.Contains("不核减")).Sum(w => w.Value);
......@@ -31,11 +33,13 @@ public PerAttendanceIssueDto(AttendanceStatistics item)
public PerAttendanceIssueDto(per_attendance_issue item)
{
Id = item.Id;
Code = item.Code;
UnitType = item.UnitType;
AccountingUnit = item.AccountingUnit;
PersonnelNumber = item.PersonnelNumber;
PersonnelName = item.PersonnelName;
PermanentStaff = item.PermanentStaff;
BeginDate = item.BeginDate;
EndDate = item.EndDate;
DeductionDays = item.DeductionDays;
......@@ -48,6 +52,7 @@ public PerAttendanceIssueDto(per_attendance_issue item)
//public int HospitalId { get; set; } //医院Id
//public int AllotId { get; set; } //绩效Id
public int Id { get; set; }
public string Code { get; set; } //核算单元编码
/// <summary>
/// 人员类别
......@@ -66,6 +71,10 @@ public PerAttendanceIssueDto(per_attendance_issue item)
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
/// <summary>
/// 在科开始时间
/// </summary>
public DateTime? BeginDate { get; set; }
......
using System;
using System.Collections.Generic;
namespace Performance.DtoModels.Request
{
public class AttendanceDeptAudit
{
/// <summary>
/// 状态(通过 = 3,驳回 = 4)
/// </summary>
public int State { get; set; }
/// <summary>
/// 说明
/// </summary>
public string Remark { get; set; }
}
public class AttendanceDept
{
/// <summary>
/// 工号
/// </summary>
public string PersonnelNumber { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
/// <summary>
/// 01日
/// </summary>
public string Day01 { get; set; }
public string Day02 { get; set; }
public string Day03 { get; set; }
public string Day04 { get; set; }
public string Day05 { get; set; }
public string Day06 { get; set; }
public string Day07 { get; set; }
public string Day08 { get; set; }
public string Day09 { get; set; }
public string Day10 { get; set; }
public string Day11 { get; set; }
public string Day12 { get; set; }
public string Day13 { get; set; }
public string Day14 { get; set; }
public string Day15 { get; set; }
public string Day16 { get; set; }
public string Day17 { get; set; }
public string Day18 { get; set; }
public string Day19 { get; set; }
public string Day20 { get; set; }
public string Day21 { get; set; }
public string Day22 { get; set; }
public string Day23 { get; set; }
public string Day24 { get; set; }
public string Day25 { get; set; }
public string Day26 { get; set; }
public string Day27 { get; set; }
public string Day28 { get; set; }
public string Day29 { get; set; }
public string Day30 { get; set; }
public string Day31 { get; set; }
}
public class AttendanceDeptMore : AttendanceDept
{
/// <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>
/// 状态(未提交 = 1,提交 = 2,通过 = 3,驳回 = 4)
/// </summary>
public int State { get; set; }
/// <summary>
/// 提交用户
/// </summary>
public string SubmitUser { get; set; }
/// <summary>
/// 提交时间
/// </summary>
public DateTime? SubmitTime { get; set; }
/// <summary>
/// 审核用户
/// </summary>
public string AuditUser { get; set; }
/// <summary>
/// 审核时间
/// </summary>
public DateTime? AuditTime { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; }
}
public class AttendanceDeptDetail
{
public List<TColumn> Columns { get; set; }
public List<AttendanceDeptMore> Data { get; set; }
}
}
......@@ -38,6 +38,10 @@ public class AttendanceAuditDetail
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal PermanentStaff { get; set; }
/// <summary>
/// 在科开始时间
/// </summary>
public DateTime? BeginDate { get; set; }
......@@ -85,7 +89,7 @@ public class AttendanceAuditDetails
/// <summary>
/// 请假天数
/// </summary>
public int Value { get; set; }
public object Value { get; set; }
/// <summary>
/// 考勤类型
/// </summary>
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.DtoModels.Response
{
public class AttendanceData : AttendanceUpdateData
{
/// <summary>
/// 工号
/// </summary>
public string PersonnelNumber { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string PersonnelName { get; set; }
}
public class AttendanceUpdateData
{
/// <summary>
/// 拿来修改的id
/// </summary>
public int AttendanceId { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
/// <summary>
/// 人员类别
/// </summary>
public string CallInUnitType { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string CallInAccountingUnit { get; set; }
/// <summary>
/// 调入时间
/// </summary>
public DateTime? CallInDate { get; set; }
}
}
using System;
namespace Performance.DtoModels.Response
{
public class AttendanceDeptState : AttendanceDeptAuditList
{
/// <summary>
/// 标题名
/// </summary>
public string Title { get; set; }
}
public class AttendanceDeptAuditList
{
/// <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 FinishCount { get; set; }
/// <summary>
/// 驳回数
/// </summary>
public int RejectCount { get; set; }
/// <summary>
/// 状态(未提交 = 1,提交 = 2,通过 = 3,驳回 = 4)
/// </summary>
public int State { get; set; }
/// <summary>
/// 提交人
/// </summary>
public string SubmitUser { get; set; }
/// <summary>
/// 提交时间
/// </summary>
public DateTime? SubmitTime { get; set; }
/// <summary>
/// 审核人
/// </summary>
public string AuditUser { get; set; }
/// <summary>
/// 审核时间
/// </summary>
public DateTime? AuditTime { get; set; }
/// <summary>
/// 状态描述
/// </summary>
public string Remarks { get; set; }
}
}
using System;
using System.Collections.Generic;
namespace Performance.DtoModels
{
public class AttendanceDeptReport
{
/// <summary>
/// 核算单元编码
/// </summary>
public string Code { get; set; }
/// <summary>
///
/// </summary>
public int AllotID { get; set; }
/// <summary>
/// 核算组别
/// </summary>
public string UnitType { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 科室名称
/// </summary>
public string Department { get; set; }
/// <summary>
/// 工号
/// </summary>
public string PersonnelNumber { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
/// <summary>
/// 在科开始时间
/// </summary>
public DateTime BeginDate { get; set; }
/// <summary>
/// 在科结束时间
/// </summary>
public DateTime EndDate { get; set; }
public List<AttendanceDeptReportItem> Detial { get; set; }
/// <summary>
/// 出勤天数
/// </summary>
public int AttendanceDays { get; set; }
}
public class AttendanceDeptReportItem
{
/// <summary>
/// 请假天数
/// </summary>
public object Value { get; set; }
/// <summary>
/// 考勤类型
/// </summary>
public string Title { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
}
}
......@@ -34,6 +34,10 @@ public class AttendanceStatistics
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
/// <summary>
/// 在科开始时间
/// </summary>
public DateTime BeginDate { get; set; }
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.DtoModels.Response
{
public class AttendanceVacationData : AttendanceVacationUpdateData
{
/// <summary>
/// 工号
/// </summary>
public string PersonnelNumber { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string PersonnelName { get; set; }
}
public class AttendanceVacationUpdateData
{
/// <summary>
/// 拿来修改的id
/// </summary>
public int AttendanceVacationId { get; set; }
/// <summary>
/// per_attendance_type表中ID
/// </summary>
public int TypeId { get; set; }
/// <summary>
/// 开始时间
/// </summary>
public DateTime? BegDate { get; set; }
/// <summary>
/// 结束时间
/// </summary>
public DateTime? EndDate { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.DtoModels.Response
{
public class AutocomplateEmployeeResponse
{
/// <summary>
///
/// </summary>
public int AllotId { get; set; }
/// <summary>
/// 人员工号
/// </summary>
public string PersonnelNumber { get; set; }
/// <summary>
/// 医生姓名
/// </summary>
public string DoctorName { get; set; }
/// <summary>
/// 录入科室
/// </summary>
public string TypeInDepartment { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
}
}
namespace Performance.DtoModels
{
public class TColumn
{
public TColumn()
{
}
public TColumn(string field, string title, int width = 80, string @fixed = "", bool sortable = false)
{
Field = field;
Title = title;
Width = width;
Fixed = @fixed;
Sortable = sortable;
}
public string Field { get; set; }
public string Title { get; set; }
public int Width { get; set; }
public string Fixed { get; set; }
public bool Sortable { get; set; }
}
}
......@@ -254,6 +254,8 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options)
public virtual DbSet<sys_user_role> sys_user_role { get; set; }
public virtual DbSet<sys_version> sys_version { get; set; }
public virtual DbSet<per_attendance> per_attendance { get; set; }
public virtual DbSet<per_attendance_dept> per_attendance_dept { get; set; }
public virtual DbSet<per_attendance_dept_report> per_attendance_dept_report { 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_vacation> per_attendance_vacation { get; set; }
......
......@@ -17,6 +17,10 @@ public class per_attendance
public int AllotId { get; set; } //绩效Id
public string PersonnelNumber { get; set; } //工号
public string PersonnelName { get; set; } //姓名
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
public string CallInUnitType { get; set; } //人员类别
public string CallInAccountingUnit { get; set; } //核算单元
public DateTime? CallInDate { get; set; } //调入时间
......
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels.Entity
{
[Table("per_attendance_dept")]
public class per_attendance_dept
{
/// <summary>
/// 自增主键
/// </summary>
[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 PersonnelNumber { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
/// <summary>
/// 核算单元编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 人员类别
/// </summary>
public string UnitType { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 状态(未提交 = 0,提交 = 1,通过 = 2,驳回 = 3)
/// </summary>
public int State { get; set; }
/// <summary>
/// 提交用户
/// </summary>
public string SubmitUser { get; set; }
/// <summary>
/// 提交时间
/// </summary>
public DateTime? SubmitTime { get; set; }
/// <summary>
/// 审核用户
/// </summary>
public string AuditUser { get; set; }
/// <summary>
/// 审核时间
/// </summary>
public DateTime? AuditTime { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; }
/// <summary>
/// 01日
/// </summary>
public int? Day01 { get; set; }
public int? Day02 { get; set; }
public int? Day03 { get; set; }
public int? Day04 { get; set; }
public int? Day05 { get; set; }
public int? Day06 { get; set; }
public int? Day07 { get; set; }
public int? Day08 { get; set; }
public int? Day09 { get; set; }
public int? Day10 { get; set; }
public int? Day11 { get; set; }
public int? Day12 { get; set; }
public int? Day13 { get; set; }
public int? Day14 { get; set; }
public int? Day15 { get; set; }
public int? Day16 { get; set; }
public int? Day17 { get; set; }
public int? Day18 { get; set; }
public int? Day19 { get; set; }
public int? Day20 { get; set; }
public int? Day21 { get; set; }
public int? Day22 { get; set; }
public int? Day23 { get; set; }
public int? Day24 { get; set; }
public int? Day25 { get; set; }
public int? Day26 { get; set; }
public int? Day27 { get; set; }
public int? Day28 { get; set; }
public int? Day29 { get; set; }
public int? Day30 { get; set; }
public int? Day31 { get; set; }
}
}
\ No newline at end of file
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels.Entity
{
[Table("per_attendance_dept_report")]
public class per_attendance_dept_report
{
[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 AccountingUnit { get; set; }
/// <summary>
/// 工号
/// </summary>
public string PersonnelNumber { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { 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>
/// 创建时间
/// </summary>
public DateTime? CreateTime { get; set; }
}
}
......@@ -46,6 +46,10 @@ public class per_attendance_issue
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
/// <summary>
/// 在科开始时间
/// </summary>
public DateTime? BeginDate { get; set; }
......
......@@ -87,7 +87,7 @@ public class per_employee
public Nullable<int> AttendanceDay { get; set; }
/// <summary>
/// 核算人
/// 人员系
/// </summary>
public Nullable<decimal> PermanentStaff { get; set; }
......
namespace Performance.EntityModels
{
public class AccountUnit
{
public string AccountingUnit { get; set; }
public string UnitType { get; set; }
}
}
......@@ -12,6 +12,7 @@ public class view_attendance
public int ALLOTID { get; set; }
public int YEAR { get; set; }
public int MONTH { get; set; }
public int Id { get; set; } = 0;
/// <summary>
/// 人员类别
/// </summary>
......@@ -29,6 +30,10 @@ public class view_attendance
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
/// <summary>
/// 考勤时间
/// </summary>
public DateTime AttendanceDate { get; set; }
......
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using OfficeOpenXml;
using OfficeOpenXml.Style;
using Performance.Infrastructure;
public interface IChildren<T>
{
IEnumerable<T> Children { get; set; }
}
public class EColumn : IChildren<EColumn>
{
public EColumn(string label, string name, decimal sort = 0m, IEnumerable<EColumn>? children = null, string comment = "")
{
Label = label;
Name = name;
Sort = sort;
Comment = comment;
Children = children ?? new HashSet<EColumn>();
}
public string Label { get; set; }
public string Name { get; set; }
public string Comment { get; set; }
public decimal Sort { get; set; }
public IEnumerable<EColumn> Children { get; set; }
}
public class ExcelDownloadRequest
{
/// <summary>
/// 工作表名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 数据
/// </summary>
public List<Dictionary<string, object>> Rows { get; set; }
/// <summary>
/// 列头
/// </summary>
public IEnumerable<EColumn> Columns { get; set; }
/// <summary>
/// 不需要导出的列
/// </summary>
public string[] IgnoreColumns { get; set; } = new string[0];
}
public static partial class UtilExtensions
{
public static DataTable Read(this ExcelPackage package, string name, int startRow = 1, int startCol = 1)
{
if (package is null)
throw new ArgumentNullException(nameof(package));
if (!package.Workbook.Worksheets.Any(w => w.Name == name))
return package.Read(0);
var worksheet = package.Workbook.Worksheets[name];
return Read(worksheet, startRow, startCol);
}
public static DataTable Read(this ExcelPackage package, int index, int startRow = 1, int startCol = 1)
{
if (package is null)
throw new ArgumentNullException(nameof(package));
if (package.Workbook.Worksheets.Count <= index)
throw new IndexOutOfRangeException(nameof(index));
var worksheet = package.Workbook.Worksheets[index];
return Read(worksheet, startRow, startCol);
}
public static bool TryRead(this ExcelWorksheet ws, out DataTable table, int startRow = 1, int startCol = 1)
{
table = new DataTable();
try
{
table = Read(ws, startRow, startCol);
return true;
}
catch { }
return false;
}
public static DataTable Read(this ExcelWorksheet ws, int startRow = 1, int startCol = 1)
{
var table = new DataTable();
foreach (var firstRowCell in ws.Cells[startRow, startCol, 1, ws.Dimension.End.Column])
{
var name = !string.IsNullOrEmpty(firstRowCell.Text) ? firstRowCell.Text : string.Format("EColumn {0}", firstRowCell.Start.Column);
if (!string.IsNullOrEmpty(name) && table.Columns.Contains(name))
throw new Exception("重复列名" + name);
table.Columns.Add(name);
}
for (var rowNum = startRow + 1; rowNum <= ws.Dimension.End.Row; rowNum++)
{
var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
var row = table.NewRow();
foreach (var cell in wsRow)
{
if (table.Columns.Count >= cell.Start.Column)
row[cell.Start.Column - 1] = cell.Value?.ToString()?.Trim()?.Clean() ?? "";
}
table.Rows.Add(row);
}
return table;
}
/// <summary>
/// 修改列头
/// </summary>
/// <param name="updateHead">修改列头名称</param>
/// <returns></returns>
public static List<string> UpdateHeads(this DataTable dt, Dictionary<string, string> updateHead)
{
List<string> heads = new List<string>();
for (int i = 0; i < dt.Columns.Count; i++)
{
if (updateHead.ContainsKey(dt.Columns[i].ColumnName))
dt.Columns[i].ColumnName = updateHead[dt.Columns[i].ColumnName];
heads.Add(dt.Columns[i].ColumnName);
}
return heads;
}
/// <summary>
/// 数据表转键值对集合
/// 把DataTable转成 List集合, 存每一行
/// 集合中放的是键值对字典,存每一列 ,键/值相同
/// </summary>
/// <param name="dt">数据表</param>
/// <returns>哈希表数组</returns>
public static List<Dictionary<string, object>> ToListDictionary(this DataTable dt)
{
List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
foreach (DataRow dr in dt.Rows)
{
Dictionary<string, object> dic = new Dictionary<string, object>();
foreach (DataColumn dc in dt.Columns)
{
dic.Add(dc.ColumnName, dr[dc.ColumnName]);
}
list.Add(dic);
}
return list;
}
public static bool Export(string filepath, params ExcelDownloadRequest[] contents)
{
return Export(contents.ToList(), filepath);
}
/// <summary>
/// 导出Excel
/// </summary>
/// <param name="data"></param>
/// <param name="filepath">路径</param>
/// <returns></returns>
public static bool Export(List<ExcelDownloadRequest> data, string filepath)
{
FileHelper.CreateFile(filepath);
using (Stream newStream = new FileStream(filepath, FileMode.Create))
{
using (ExcelPackage package = new ExcelPackage(newStream))
{
foreach (var item in data)
{
if (package.Workbook.Worksheets.Any(t => t.Name == item.Name))
package.Workbook.Worksheets.Delete(item.Name);
var worksheet = package.Workbook.Worksheets.Add(item.Name);
CreateWorksheet(worksheet, item);
}
package.Save();
return true;
}
}
}
/// <summary>
/// 导出Excel
/// </summary>
/// <param name="worksheet"></param>
/// <param name="excelDownloadRequest"></param>
public static void CreateWorksheet(ExcelWorksheet worksheet, ExcelDownloadRequest excelDownloadRequest)
{
excelDownloadRequest.Rows = excelDownloadRequest.Rows ?? new List<Dictionary<string, object>> { };
//获取列头最大行
List<int> all = new List<int>();
GetTreeCount(excelDownloadRequest.Columns, all);
int headRow = all.Max();
//获取列头
var headList = GetHeads(excelDownloadRequest.Columns.OrderBy(t => t.Sort), excelDownloadRequest.IgnoreColumns);
//生成列头
GenerateHeads(worksheet, excelDownloadRequest.Columns, excelDownloadRequest.IgnoreColumns, headRow);
for (int col = 0; col < headList.Count; col++)
{
for (int row = 0; row < excelDownloadRequest.Rows.Count; row++)
{
var temp = excelDownloadRequest.Rows.ElementAt(row);
if (temp.ContainsKey(headList[col].Name))
worksheet.Cells[row + headRow + 1, col + 1].Value = temp[headList[col].Name] ?? "";
}
}
#region 样式设置
for (int row = worksheet.Dimension.Start.Row; row <= worksheet.Dimension.End.Row; row++)
{
worksheet.Row(row).Height = 20;
for (int col = worksheet.Dimension.Start.Column; col <= worksheet.Dimension.End.Column; col++)
{
worksheet.Cells[row, col].Style.VerticalAlignment = ExcelVerticalAlignment.Center;
worksheet.Cells[row, col].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
worksheet.Cells[row, col].Style.Border.BorderAround(ExcelBorderStyle.Thin);
}
}
worksheet.View.FreezePanes(headRow + 1, 1);
worksheet.Cells.AutoFitColumns();
for (int col = worksheet.Dimension.Start.Column; col <= worksheet.Dimension.End.Column; col++)
{
worksheet.Column(col).Width = worksheet.Column(col).Width > 20 ? 20 : worksheet.Column(col).Width;
}
#endregion
}
/// <summary>
/// 获得列头
/// </summary>
/// <param name="columns"></param>
/// <param name="ignoreColumns"></param>
/// <returns></returns>
private static List<EColumn> GetHeads(IEnumerable<EColumn> columns, string[] ignoreColumns)
{
List<EColumn> heads = new List<EColumn>();
foreach (var item in columns.OrderBy(w => w.Sort))
{
if (!ignoreColumns.Contains(item.Name) && !ignoreColumns.Contains(item.Label))
{
if (item.Children?.Any() != true)
heads.Add(item);
else
heads.AddRange(GetHeads(item.Children, ignoreColumns));
}
}
return heads;
}
/// <summary>
/// 生成excel列头
/// </summary>
/// <param name="worksheet"></param>
/// <param name="columns"></param>
/// <param name="ignoreColumns"></param>
/// <param name="headRow"></param>
/// <param name="row"></param>
/// <param name="col"></param>
private static void GenerateHeads(ExcelWorksheet worksheet, IEnumerable<EColumn> columns, string[] ignoreColumns, int headRow, int row = 1, int col = 1)
{
int colIndex = col;
foreach (var item in columns.OrderBy(w => w.Sort))
{
if (!ignoreColumns.Contains(item.Label) && !ignoreColumns.Contains(item.Name))
{
int children = GetMinChildCount(item.Children, 0);
worksheet.Cells[row, colIndex].Value = string.IsNullOrEmpty(item.Label) ? item.Name : item.Label;
if (!string.IsNullOrWhiteSpace(item.Comment))
worksheet.Cells[row, colIndex].AddComment(item.Comment, "SYSTEM");
worksheet.Cells[row, colIndex].Style.Font.Bold = true;
if (children != 0)
{
worksheet.Cells[row, colIndex, row, colIndex + children - 1].Merge = true;
GenerateHeads(worksheet, item.Children, ignoreColumns, headRow, row + 1, colIndex);
colIndex += children;
}
else
{
worksheet.Cells[row, colIndex, headRow, colIndex].Merge = true;
colIndex++;
}
}
}
}
/// <summary>
/// 获取树最大深度
/// </summary>
/// <param name="columns"></param>
/// <param name="all"></param>
/// <param name="level"></param>
private static void GetTreeCount(IEnumerable<EColumn> columns, List<int> all, int level = 1)
{
foreach (var item in columns)
{
if (item.Children?.Any() == true)
{
GetTreeCount(item.Children, all, level + 1);
}
else
all.Add(level);
}
}
/// <summary>
/// 获得最小的子集数量
/// </summary>
/// <param name="columns"></param>
/// <param name="count"></param>
/// <returns></returns>
private static int GetMinChildCount(IEnumerable<EColumn> columns, int count)
{
foreach (var col in columns)
{
if (col.Children?.Any() != true)
count++;
else
count = GetMinChildCount(col.Children, count);
}
return count;
}
}
\ No newline at end of file
......@@ -2,10 +2,9 @@
using System.Collections.Generic;
using System.Text;
namespace Performance.Infrastructure
public static partial class UtilExtensions
{
public static partial class UtilExtensions
{
public static string RemoveLineBreak(this string text)
{
return text.Replace("\n", "");
......@@ -15,6 +14,15 @@ public static string RemoveEnter(this string text)
{
return text.Replace("\r", "");
}
public static string RemoveSpace(this string text)
{
return text.Replace(" ", "");
}
public static string Clean(this string text)
{
return text.Trim().RemoveEnter().RemoveLineBreak().RemoveSpace();
}
/// <summary>
/// 分隔 移除空项
......@@ -48,5 +56,4 @@ public static bool EqualsIgnoreCase(this string text, string value)
{
return text.Equals(value, StringComparison.OrdinalIgnoreCase);
}
}
}
......@@ -29,6 +29,14 @@ public new PageList<per_employee> GetEntitiesForPaging(int pageNumber, int pageS
return PageList<per_employee>.Create(queryableAuthors, pageNumber, pageSize);
}
public new List<AccountUnit> GetEmployeeUnit(Expression<Func<per_employee, bool>> exp)
{
return context.Set<per_employee>()
.Where(exp)
.Select(w => new AccountUnit { UnitType = w.UnitType, AccountingUnit = w.AccountingUnit })
.Distinct()
.ToList();
}
//public Comparison GetComparison(ComparisonPagingRequest request)
//{
......
using Performance.EntityModels;
using Performance.EntityModels.Entity;
namespace Performance.Repository.Repository
{
public partial class PerforPerAttendanceDeptReportRepository : PerforRepository<per_attendance_dept_report>
{
/// <summary>
/// per_attendance Repository
/// </summary>
public PerforPerAttendanceDeptReportRepository(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 PerforPerAttendanceDeptRepository : PerforRepository<per_attendance_dept>
{
/// <summary>
/// per_attendance Repository
/// </summary>
public PerforPerAttendanceDeptRepository(PerformanceDbContext context) : base(context)
{
}
}
}
using AutoMapper;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using AutoMapper;
using Microsoft.Extensions.Options;
using Performance.DtoModels;
using Performance.DtoModels.AppSettings;
using Performance.EntityModels;
using Performance.Infrastructure;
using Performance.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Performance.Services.AllotCompute
{
......@@ -17,6 +16,7 @@ namespace Performance.Services.AllotCompute
public class ProcessComputService : IAutoInjection
{
private readonly IMapper _mapper;
private readonly IOptions<Application> _options;
private readonly BudgetService _budgetService;
private PerforCofincomeRepository perforCofincomeRepository;
private PerforPersheetRepository perforPerSheetRepository;
......@@ -35,6 +35,7 @@ public class ProcessComputService : IAutoInjection
public ProcessComputService(
IMapper mapper,
IOptions<Application> options,
BudgetService budgetService,
PerforCofincomeRepository perforCofincomeRepository,
PerforPersheetRepository perforPerSheetRepository,
......@@ -52,6 +53,7 @@ public class ProcessComputService : IAutoInjection
PerforPerallotRepository perallotRepository)
{
_mapper = mapper;
_options = options;
_budgetService = budgetService;
this.perforCofincomeRepository = perforCofincomeRepository;
this.perforPerSheetRepository = perforPerSheetRepository;
......@@ -307,7 +309,10 @@ public List<PerSheet> Compute(PerExcel excel, List<PerSheet> perSheet, per_allot
workDoctor = info.Data.FirstOrDefault(t => t.UnitType == UnitType.医生组.ToString() && t.AccountingUnit == dept.AccountingUnit);
// 夜班绩效 从医院奖罚的明细项中获取
// 2022-03-16 wufeifei
string[] nightShiftTexts = new string[] { "夜班绩效", "夜班工作量", "夜班工作量奖励" };
string[] nightShiftTexts = _options.Value.NightShiftTexts;
if (nightShiftTexts?.Any() != true)
nightShiftTexts = new string[] { "夜班绩效", "夜班工作量", "夜班工作量奖励", "手术绩效", };
var nightShift = adjustLaterOtherFee?.FirstOrDefault(w => w.UnitType == dept.UnitType && w.AccountingUnit == dept.AccountingUnit && nightShiftTexts.Contains(w.TypeName?.Trim()))?.CellValue ?? 0;
dept.NightShiftWorkPerforFee = nightShift;
......@@ -391,7 +396,10 @@ public void ComputeOffice(per_allot allot, PerExcel excel)
{
// 夜班绩效 从医院奖罚的明细项中获取
// 2022-03-16 wufeifei
string[] nightShiftTexts = new string[] { "夜班绩效", "夜班工作量", "夜班工作量奖励" };
string[] nightShiftTexts = _options.Value.NightShiftTexts;
if (nightShiftTexts?.Any() != true)
nightShiftTexts = new string[] { "夜班绩效", "夜班工作量", "夜班工作量奖励", "手术绩效", };
var nightShift = adjustLaterOtherFee?.FirstOrDefault(w => w.UnitType == dept.UnitType && w.AccountingUnit == dept.AccountingUnit && nightShiftTexts.Contains(w.TypeName?.Trim()))?.CellValue ?? 0;
dept.NightShiftWorkPerforFee = nightShift;
......
using AutoMapper;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Performance.DtoModels;
using Performance.DtoModels.AppSettings;
using Performance.EntityModels;
using Performance.Infrastructure;
using Performance.Repository;
......@@ -17,6 +19,7 @@ namespace Performance.Services.AllotCompute
public class ResultComputeService : IAutoInjection
{
private readonly IMapper _mapper;
private readonly IOptions<Application> _options;
private readonly DapperService _service;
private readonly PerforPerallotRepository _perforPerallotRepository;
private readonly BaiscNormService baiscNormService;
......@@ -36,6 +39,7 @@ public class ResultComputeService : IAutoInjection
public ResultComputeService(
IMapper mapper,
IOptions<Application> options,
DapperService service,
PerforPerallotRepository perforPerallotRepository,
PerforHospitalRepository hospitalRepository,
......@@ -52,6 +56,7 @@ public class ResultComputeService : IAutoInjection
ILogger<ResultComputeService> logger)
{
_mapper = mapper;
_options = options;
_service = service;
_perforPerallotRepository = perforPerallotRepository;
this.baiscNormService = baiscNormService;
......@@ -174,7 +179,10 @@ public void SpecialUnitCompute(PerExcel excel, per_allot allot, List<res_baiscno
// 夜班绩效 从医院奖罚的明细项中获取
// 2022-03-16 wufeifei
string[] nightShiftTexts = new string[] { "夜班绩效", "夜班工作量", "夜班工作量奖励" };
string[] nightShiftTexts = _options.Value.NightShiftTexts;
if (nightShiftTexts?.Any() != true)
nightShiftTexts = new string[] { "夜班绩效", "夜班工作量", "夜班工作量奖励", "手术绩效", };
var nightShift = adjustLaterOtherFee?.FirstOrDefault(w => w.UnitType == dept?.UnitType && w.AccountingUnit == dept?.AccountingUnit && nightShiftTexts.Contains(w.TypeName?.Trim()))?.CellValue ?? 0;
decimal? headcount = null;
......@@ -702,9 +710,6 @@ public bool IssuedChangeSecond(per_allot allot, List<ag_secondallot> secondList)
}
}
perforAgsecondallotRepository.UpdateRange(updSeconds.ToArray());
_service.FreezeAllotSync(allot.ID);
_service.SecondUseTempRestore();
_service.RestoreSecondAllot();
}
_service.FreezeAllotSync(allot.ID);
_service.SecondUseTempRestore();
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -183,6 +183,7 @@ public static List<cof_alias> GetAllPersonnelTags(bool ownerQuery)
new cof_alias{ Alias = "出勤天数", Name = nameof(per_employee.AttendanceDay), States = 1, SumStatus = 0, Sort = 14 },
new cof_alias{ Alias = "预留比例", Name = nameof(per_employee.ReservedRatio), States = 1, SumStatus = 0, Sort = 16 },
new cof_alias{ Alias = "银行卡号", Name = nameof(per_employee.BankCard), States = 1, SumStatus = 0, Sort = 18 },
new cof_alias{ Alias = "人员系数", Name = nameof(per_employee.PermanentStaff), States = 0, SumStatus = 0, Sort = 19 },
new cof_alias{ Alias = "备用01", Name = nameof(per_employee.Reserve01), States = 0, SumStatus = 0, Sort = 20 },
new cof_alias{ Alias = "备用02", Name = nameof(per_employee.Reserve02), States = 0, SumStatus = 0, Sort = 20 },
......
......@@ -738,7 +738,11 @@ public ApiResponse BatchSaveAccounting(int allotId, SaveCollectData request)
/// <param name="iD"></param>
public void Copy(per_allot allot)
{
NewCopy(new CopyRequest() { AllotId = allot.ID, Type = new[] { "personnels", "workItems", "drugTypeDisburses", "drugTypeFactors", "deptTypes", "agains", "accountings", "department" } });
NewCopy(new CopyRequest()
{
AllotId = allot.ID,
Type = new[] { "personnels", "workItems", "drugTypeDisburses", "drugTypeFactors", "deptTypes", "agains", "accountings", "department", "attendanceType" }
});
}
//todo:新copy
......@@ -764,6 +768,7 @@ public void NewCopy(CopyRequest request)
{ "deptTypes", (allot, prevAllotId) =>_copyService.Copy_DeptTypes(allot, prevAllotId, delHistotyData:true) },
{ "agains", (allot, prevAllotId) =>_copyService.Copy_Agains(allot, prevAllotId, delHistotyData:true) },
{ "accountings", (allot, prevAllotId) =>_copyService.Copy_Accountings(allot, prevAllotId, delHistotyData:true) },
{ "attendanceType", (allot, prevAllotId) =>_copyService.Copy_AttendanceType(allot, prevAllotId, delHistotyData:true) },
{ "department", (allot, prevAllotId) =>_copyService.Copy_DeptDic(allot, prevAllotId, delHistotyData:true) },
};
......
using Microsoft.Extensions.Logging;
using Performance.EntityModels;
using Performance.EntityModels.Entity;
using Performance.Repository;
using Performance.Repository.Repository;
using System;
using System.Linq;
using static Performance.DtoModels.Attendance;
namespace Performance.Services
{
......@@ -18,6 +20,7 @@ public class CopyService : IAutoInjection
private readonly PerforCofaccountingRepository _cofaccountingRepository;
private readonly PerforCofdrugtypeDisburseRepository _drugtypeDisburseRepository;
private readonly PerforCofdrugtypefactorRepository _cofdrugtypefactorRepository;
private readonly PerfoPperAttendanceTypeRepository _pperAttendanceTypeRepository;
public CopyService(
ILogger<ConfigService> logger,
......@@ -28,7 +31,8 @@ public class CopyService : IAutoInjection
PerforCofdepttypeRepository perforCofdepttypeRepository,
PerforCofaccountingRepository cofaccountingRepository,
PerforCofdrugtypeDisburseRepository drugtypeDisburseRepository,
PerforCofdrugtypefactorRepository cofdrugtypefactorRepository)
PerforCofdrugtypefactorRepository cofdrugtypefactorRepository,
PerfoPperAttendanceTypeRepository pperAttendanceTypeRepository)
{
_logger = logger;
_perdeptdicRepository = perdeptdicRepository;
......@@ -39,6 +43,7 @@ public class CopyService : IAutoInjection
_cofaccountingRepository = cofaccountingRepository;
_drugtypeDisburseRepository = drugtypeDisburseRepository;
_cofdrugtypefactorRepository = cofdrugtypefactorRepository;
_pperAttendanceTypeRepository = pperAttendanceTypeRepository;
}
......@@ -235,5 +240,30 @@ public void Copy_DeptDic(per_allot allot, int prevAllotId, bool delHistotyData =
}
}
public void Copy_AttendanceType(per_allot allot, int prevAllotId, bool delHistotyData = false)
{
var flag = delHistotyData;
_logger.LogInformation($"copy attendanceType");
var attendanceTypes = _pperAttendanceTypeRepository.GetEntities(t => t.AllotId == allot.ID);
if (delHistotyData && attendanceTypes != null && attendanceTypes.Any())
flag = _pperAttendanceTypeRepository.RemoveRange(attendanceTypes.ToArray());
if (flag || attendanceTypes == null || !attendanceTypes.Any())
{
attendanceTypes = _pperAttendanceTypeRepository.GetEntities(t => t.AllotId == prevAllotId) ?? _pperAttendanceTypeRepository.GetEntities(t => t.AllotId == -1);
if (attendanceTypes != null && attendanceTypes.Any())
{
var newAttendanceTypes = attendanceTypes.Select(t => new per_attendance_type
{
AllotId = allot.ID,
AttendanceName = t.AttendanceName,
HospitalId = t.HospitalId,
IsDeduction = t.IsDeduction
});
_pperAttendanceTypeRepository.AddRange(newAttendanceTypes.ToArray());
}
}
}
}
}
......@@ -434,5 +434,96 @@ public int UpdateAllotStates(int allotId, int states, string remark, int generat
throw;
}
}
/// <summary>
/// 查询考勤下发绩效视图(运行视图定义)
/// </summary>
/// <param name="allotId"></param>
/// <param name="unitType"></param>
/// <param name="accountingUnit"></param>
/// <param name="personnelNameOrNumber"></param>
/// <returns></returns>
public IEnumerable<dynamic> QueryAttendanceIssue(int allotId, List<string> unitType, string accountingUnit, string personnelNameOrNumber)
{
try
{
using (var connection = new MySqlConnection(_options.Value.PerformanceConnectionString))
{
if (connection.State != ConnectionState.Open) connection.Open();
string sql = $@"select * from view_attendance_issue where allotID = @allotId";
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@allotId", allotId);
if (unitType?.Any() == true)
{
sql += " and unitType in @unitType";
parameters.Add("@unitType", unitType);
}
if (!string.IsNullOrEmpty(accountingUnit))
{
sql += " and accountingUnit = @accountingUnit";
parameters.Add("@accountingUnit", accountingUnit);
}
if (!string.IsNullOrEmpty(personnelNameOrNumber))
{
sql += " and (personnelNumber like @personnelNameOrNumber or personnelName like @personnelNameOrNumber)";
parameters.Add("@personnelNameOrNumber", $"%{personnelNameOrNumber}%");
}
return connection.Query(sql, parameters, commandTimeout: 60 * 60);
}
}
catch (Exception ex)
{
_logger.LogError($"SQL执行异常:{ex}");
throw;
}
}
/// <summary>
/// 查询考勤下发绩效视图(运行视图定义)
/// </summary>
/// <param name="allotId"></param>
/// <param name="unitType"></param>
/// <param name="accountingUnit"></param>
/// <param name="personnelNameOrNumber"></param>
/// <returns></returns>
public IEnumerable<dynamic> QueryAttendanceDeptReport(int allotId, string unitType, string accountingUnit, string personnelNameOrNumber)
{
try
{
using (var connection = new MySqlConnection(_options.Value.PerformanceConnectionString))
{
if (connection.State != ConnectionState.Open) connection.Open();
string sql = $@"select * from view_attendance_dept where allotID = @allotId";
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@allotId", allotId);
if (unitType?.Any() == true)
{
sql += " and unitType = @unitType";
parameters.Add("@unitType", unitType);
}
if (!string.IsNullOrEmpty(accountingUnit))
{
sql += " and accountingUnit = @accountingUnit";
parameters.Add("@accountingUnit", accountingUnit);
}
if (!string.IsNullOrEmpty(personnelNameOrNumber))
{
sql += " and (personnelNumber like @personnelNameOrNumber or personnelName like @personnelNameOrNumber)";
parameters.Add("@personnelNameOrNumber", $"%{personnelNameOrNumber}%");
}
return connection.Query(sql, parameters, commandTimeout: 60 * 60);
}
}
catch (Exception ex)
{
_logger.LogError($"SQL执行异常:{ex}");
throw;
}
}
}
}
......@@ -959,7 +959,7 @@ public ApiResponse<AprTypeRequest> UpdateAprType(int typeId, AprTypeRequest requ
{
if (string.IsNullOrEmpty(request.PerforType.Trim()) || request.AllotId <= 0)
return new ApiResponse<AprTypeRequest>(ResponseType.ParameterError, "输入参数不能为空!");
var tepm = perAprAmountTypeRepository.GetEntity(t =>t.Id!=t.Id && t.AllotId == request.AllotId && t.PerforType == request.PerforType);
var tepm = perAprAmountTypeRepository.GetEntity(t => t.Id != t.Id && t.AllotId == request.AllotId && t.PerforType == request.PerforType);
if (tepm != null)
return new ApiResponse<AprTypeRequest>(ResponseType.ParameterError, "已存在该类型");
var res = perAprAmountTypeRepository.GetEntity(t => t.Id == typeId);
......@@ -996,9 +996,9 @@ public ApiResponse DeleteAprType(int typeId)
/// <param name="doctorName"></param>
/// <param name="userId"></param>
/// <returns></returns>
public List<view_per_apr_amount> GetEmployeeMessage(int allotId, string personnelNumber, string doctorName, int userId)
public List<per_employee> GetEmployeeMessage(int allotId, string personnelNumber, string doctorName, int userId)
{
if (string.IsNullOrEmpty(personnelNumber) && string.IsNullOrEmpty(doctorName)) return new List<view_per_apr_amount>();
if (string.IsNullOrEmpty(personnelNumber) && string.IsNullOrEmpty(doctorName)) return new List<per_employee>();
var user = userRepository.GetEntity(w => w.ID == userId && w.IsDelete == 1);
if (user == null) throw new PerformanceException("操作用户不存在或用户信息错误!");
......@@ -1007,8 +1007,7 @@ public List<view_per_apr_amount> GetEmployeeMessage(int allotId, string personne
var employeeId = 0;
if (!string.IsNullOrEmpty(personnelNumber))
{
var employee = peremployeeRepository.GetEntity(w => w.AllotId == allotId && w.PersonnelNumber != null
&& w.PersonnelNumber.Trim() == personnelNumber.Trim());
var employee = peremployeeRepository.GetEntity(w => w.AllotId == allotId && w.PersonnelNumber != null && w.PersonnelNumber.Trim() == personnelNumber.Trim());
if (employee != null)
{
employees.Add(employee);
......@@ -1023,17 +1022,7 @@ public List<view_per_apr_amount> GetEmployeeMessage(int allotId, string personne
if (filterEmployees != null && filterEmployees.Any()) employees.AddRange(filterEmployees);
}
if (employees == null || !employees.Any())
return new List<view_per_apr_amount>();
return employees.Select(t => new view_per_apr_amount
{
AllotId = allotId,
PersonnelNumber = t.PersonnelNumber,
DoctorName = t.DoctorName,
TypeInDepartment = user.Department,
AccountingUnit = t.AccountingUnit
}).ToList();
return employees ?? new List<per_employee>();
}
/// <summary>
......
using AutoMapper;
using MassTransit.Internals.GraphValidation;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
......@@ -35,6 +36,7 @@ public class PersonService : IAutoInjection
private readonly PerforAgsecondallotRepository agsecondallotRepository;
private readonly PerforHospitalRepository perforHospitalRepository;
private readonly PerforCofaccountingRepository perforCofaccountingRepository;
private readonly PerforPerAttendanceIssueRepository _issueRepository;
private readonly UserService userService;
private readonly DapperService dapperService;
private readonly Application application;
......@@ -53,11 +55,11 @@ public class PersonService : IAutoInjection
PerforAgsecondallotRepository agsecondallotRepository,
PerforHospitalRepository perforHospitalRepository,
PerforCofaccountingRepository perforCofaccountingRepository,
PerforPerAttendanceIssueRepository issueRepository,
UserService userService,
DapperService dapperService,
IOptions<Application> application,
IWebHostEnvironment evn
)
IWebHostEnvironment evn)
{
_mapper = mapper;
this.logger = logger;
......@@ -71,6 +73,7 @@ IWebHostEnvironment evn
this.agsecondallotRepository = agsecondallotRepository;
this.perforHospitalRepository = perforHospitalRepository;
this.perforCofaccountingRepository = perforCofaccountingRepository;
_issueRepository = issueRepository;
this.userService = userService;
this.dapperService = dapperService;
this.application = application.Value;
......@@ -150,6 +153,25 @@ public void CreateAllotPersons(int hospitalId, int allotId, int prevAllotId = -1
return entity;
}).ToList();
// lcr 2023-04-14 按调动记录最后一次所在科室更新人员字典
var issues = _issueRepository.GetEntities(w => w.AllotId == prevAllotId);
if (issues?.Any() == true)
{
foreach (var item in data)
{
var issuePersonnel = issues.Where(w => w.PersonnelNumber == item.PersonnelNumber).OrderByDescending(w => w.BeginDate).FirstOrDefault();
if (issuePersonnel != null)
{
if (issuePersonnel.UnitType != item.UnitType || issuePersonnel.AccountingUnit != item.AccountingUnit || issuePersonnel.PermanentStaff != item.PermanentStaff)
{
item.UnitType = issuePersonnel.UnitType;
item.AccountingUnit = issuePersonnel.AccountingUnit;
item.PermanentStaff = issuePersonnel.PermanentStaff;
}
}
}
}
SaveAllotPersons(data);
}
......@@ -234,6 +256,28 @@ public PageList<per_employee> GetPersons(int allotId, int userId, PersonParamsRe
}
/// <summary>
/// 获取所有员工记录分页
/// </summary>
/// <param name="allotId"></param>
/// <returns></returns>
public PageList<per_employee> GetEmployee(int allotId, string personnelNumber, string personnelName, string unitType, string accountingUnit, string searchText, int pageIndex, int pageSize)
{
Expression<Func<per_employee, bool>> exp = t => t.AllotId == allotId;
if (!string.IsNullOrEmpty(personnelNumber))
exp = exp.And(w => w.PersonnelNumber.Contains(personnelNumber));
if (!string.IsNullOrEmpty(personnelName))
exp = exp.And(w => w.DoctorName.Contains(personnelName));
if (!string.IsNullOrEmpty(unitType))
exp = exp.And(w => w.UnitType.Equals(unitType));
if (!string.IsNullOrEmpty(accountingUnit))
exp = exp.And(w => w.AccountingUnit.Contains(accountingUnit));
if (!string.IsNullOrEmpty(searchText))
exp = exp.And(w => w.PersonnelNumber.Contains(searchText) || w.DoctorName.Contains(searchText) || w.UnitType.Contains(searchText) || w.AccountingUnit.Contains(searchText));
return peremployeeRepository.GetEntitiesForPaging(pageIndex, pageSize, exp);
}
/// <summary>
/// 新增员工信息
/// </summary>
/// <param name="request"></param>
......
......@@ -205,6 +205,24 @@ public List<SecondColumnDictionary> GetTableHeaderDictionary(ComputeMode compute
var maps = new List<SecondColumnDictionary>()
{
// 顶部
new SecondColumnDictionary(getAlias(nameof(ag_headsource.TotalPerformance),"可分配绩效"),nameof(ag_headsource.TotalPerformance), true, 10, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.HosOtherPerformance),"医院其他绩效"),nameof(ag_headsource.HosOtherPerformance), true, 20, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.NightShiftWorkPerforTotal),"夜班绩效综合"),nameof(ag_headsource.NightShiftWorkPerforTotal), true, 30, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.TotalPreAccountingReward),"核算平均前单项"),nameof(ag_headsource.TotalPreAccountingReward), true, 40, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.TotalDistPerformance),"科室总绩效"),nameof(ag_headsource.TotalDistPerformance), true, 50, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.DirectorBasisPerformance),"主任基础绩效"),nameof(ag_headsource.DirectorBasisPerformance), true, 60, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.TotalDeptReward),"科室单项奖励"),nameof(ag_headsource.TotalDeptReward), true, 70, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.DaysFullAttendance),"满勤天数"),nameof(ag_headsource.DaysFullAttendance), true, 80, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.DepartmentsPerCapita),"科室人均"),nameof(ag_headsource.DepartmentsPerCapita), true, 90, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.TheNumberOfAccountingDepartment),"科室核算人数"),nameof(ag_headsource.TheNumberOfAccountingDepartment), true, 100, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.TheTotalAllocationOfPerformanceResults),"业绩分配绩效总额"),nameof(ag_headsource.TheTotalAllocationOfPerformanceResults), true, 110, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.SeniorityTitlesAccountedPerformance),"年资职称绩效占比"),nameof(ag_headsource.SeniorityTitlesAccountedPerformance), true, 120, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.SeniorityTitlesPerformance),"年资职称绩效"),nameof(ag_headsource.SeniorityTitlesPerformance), true, 130, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.Workload_Ratio_Default),"工作量绩效占比"),nameof(ag_headsource.Workload_Ratio_Default), true, 140, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.Workload_Amount_Default),"工作量绩效金额"),nameof(ag_headsource.Workload_Amount_Default), true, 150, "Top", isNumber: true),
// 表格
new SecondColumnDictionary(getAlias(nameof(ag_bodysource.WorkNumber),"人员工号"),nameof(ag_bodysource.WorkNumber),true,100, isNumber: false),
new SecondColumnDictionary(getAlias(nameof(ag_bodysource.Name),"姓名"),nameof(ag_bodysource.Name),true,100, isNumber: false),
new SecondColumnDictionary(getAlias(nameof(ag_bodysource.Department),"分配科室"),nameof(ag_bodysource.Department),true,100, isNumber: false),
......@@ -254,7 +272,8 @@ public List<SecondColumnDictionary> GetTableHeaderDictionary(ComputeMode compute
foreach (var item in alias)
{
if (!maps.Any(w => w.Key.Equals(item.Name, StringComparison.OrdinalIgnoreCase))
&& !notCalculate.Contains(item.Name))
&& !notCalculate.Contains(item.Name)
&& !item.OriginalName.Equals("Top", StringComparison.OrdinalIgnoreCase))
{
maps.Add(new SecondColumnDictionary(item.Alias, item.Name, false, item.Sort, color: "title_color", isNumber: false, expand: true));
}
......@@ -307,8 +326,8 @@ public List<SecondColumnDictionary> GetTableHeaderDictionary(ComputeMode compute
foreach (var item in workloadTypes.OrderBy(t => t.Id))
{
maps.Add(new SecondColumnDictionary($"{item.TypeName}占比", $"Workload_Ratio_{item.Id}", true, 1, "Top", isNumber: true));
maps.Add(new SecondColumnDictionary($"{item.TypeName}金额", $"Workload_Amount_{item.Id}", true, 1, "Top", isNumber: true));
maps.Add(new SecondColumnDictionary($"{item.TypeName}占比", $"Workload_Ratio_{item.Id}", true, 400, "Top", isNumber: true));
maps.Add(new SecondColumnDictionary($"{item.TypeName}金额", $"Workload_Amount_{item.Id}", true, 400, "Top", isNumber: true));
}
}
}
......@@ -324,7 +343,7 @@ public List<SecondColumnDictionary> GetTableHeaderDictionary(ComputeMode compute
{
maps.Add(new SecondColumnDictionary(item.Value, item.Title, false, ++preAccountingRewardSort, type: "PreAccountingReward", color: "preaccountingreward_color"));
}
return maps.OrderBy(w => w.Sort).ToList();
return maps.OrderBy(w => w.Site).ThenBy(w => w.Sort).ToList();
}
/// <summary>
......
......@@ -574,6 +574,7 @@ select new
AttendanceDay = t1.AttendanceDay,
ReservedRatio = t1.ReservedRatio,
BankCard = t1.BankCard,
PermanentStaff = t1.PermanentStaff,
Remark = t1.Remark,
Reserve01 = t1.Reserve01,
Reserve02 = t1.Reserve02,
......@@ -785,6 +786,7 @@ public ApiResponse SaveReportPersonTag(int hospitalId, int allotId, int userId,
employee.AttendanceDay = pdata.AttendanceDay;
employee.ReservedRatio = pdata.ReservedRatio;
employee.BankCard = pdata.BankCard;
employee.PermanentStaff = pdata.PermanentStaff;
employee.Remark = pdata.Remark;
employee.Reserve01 = pdata.Reserve01;
employee.Reserve02 = pdata.Reserve02;
......@@ -927,7 +929,7 @@ public void SaveReportTag(int hospitalId, SaveCollectData request)
{
var header = request.ColHeaders[c];
var first = alias.FirstOrDefault(w => w.Alias.ToLower() == header.ToLower());
if (!default(KeyValuePair<string, string>).Equals(first)
if (first!=null && !default(KeyValuePair<string, string>).Equals(first)
&& !result.ContainsKey(header)
&& request.Data[rownumber].Length > c)
{
......
......@@ -911,7 +911,8 @@ public List<SecondTempResponse> GetTemp(int hospitalid, string unitType, string
}
else
{
useTemp = agusetempRepository.GetEntity(t => t.HospitalId == hospitalid && t.UnitType == unitType && t.Department == department);
var useTemps = agusetempRepository.GetEntities(t => t.HospitalId == hospitalid);
useTemp = useTemps.FirstOrDefault(t => UnitTypeUtil.IsEqualsUnitType(t.UnitType, unitType) && t.Department == department);
}
var secondTemps = _mapper.Map<List<SecondTempResponse>>(temps);
......@@ -1681,7 +1682,7 @@ bool VerifySubmissioAmount(decimal? leftAmount, decimal? rightAmount)
var nightShiftWorkPerforFee = data.Sum(w => w.NightWorkPerformance ?? 0);
var total = data.Sum(t => (t.DistPerformance ?? 0) + (t.NightWorkPerformance ?? 0));
if (!VerifySubmissioAmount(nightShiftWorkPerforFee, second.NightShiftWorkPerforFee))
throw new PerformanceException($"夜班绩效金额不一致!夜班绩效金额:{second.NightShiftWorkPerforFee ?? 0:0.####},提交金额:{nightShiftWorkPerforFee:0.####}");
throw new PerformanceException($"专项绩效金额不一致!专项绩效金额:{second.NightShiftWorkPerforFee ?? 0:0.####},提交金额:{nightShiftWorkPerforFee:0.####}");
else if (!VerifySubmissioAmount(total, second.RealGiveFee))
throw new PerformanceException($"总金额与考核后金额不一致!可分配金额:{second.RealGiveFee:0.####},提交金额:{total:0.####}");
else
......
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