Commit a10c4efd by ruyun.zhang@suvalue.com

v22.4.18

parents ee75cac4 7ca51ded
......@@ -556,5 +556,27 @@ public ApiResponse GetOwnerPerformance()
var res = _allotService.GetOwnerPerformance(userid);
return new ApiResponse(ResponseType.OK, res);
}
/// <summary>
/// H5查询个人绩效
/// </summary>
/// <param name="begin">开始月份:2021-03</param>
/// <param name="end">结束月份:2021-04</param>
/// <returns></returns>
[Route("owner/query/mobile")]
[HttpGet]
public ApiResponse<List<OwnerMobilePerformanceDto>> GetOwnerMobilePerformance(string begin = "", string end = "")
{
var userid = _claim.GetUserId();
var beginDate = begin.ToTryDateTime();
var endDate = end.ToTryDateTime();
if (beginDate == DateTime.MinValue || endDate == DateTime.MinValue)
throw new PerformanceException("您选择的时间范围无效");
endDate = endDate.AddMonths(1);
var dtos = _allotService.GetOwnerMobilePerformance(userid, beginDate, endDate);
return new ApiResponse<List<OwnerMobilePerformanceDto>>(ResponseType.OK, dtos);
}
}
}
......@@ -435,8 +435,19 @@ public ApiResponse CustomColumnHeaders([FromBody] ComputerAliasRequest request)
[HttpPost]
public ApiResponse Batch([FromBody] BatchRequest request)
{
var result = _computeService.Batch(request);
return result ? new ApiResponse(ResponseType.OK, "操作成功") : new ApiResponse(ResponseType.Fail, "操作失败");
return _computeService.Batch(request);
}
/// <summary>
/// 取消全院绩效进行批次标记
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("allcompute/batch/cancel")]
[HttpPost]
public ApiResponse BatchCancel([FromBody] BatchCancelRequest request)
{
return _computeService.BatchCancel(request);
}
#region 发放表下载
......
......@@ -4,6 +4,7 @@
using Microsoft.AspNetCore.Mvc;
using Performance.DtoModels;
using Performance.DtoModels.Request;
using Performance.DtoModels.Response;
using Performance.EntityModels;
using Performance.Infrastructure;
using Performance.Services;
......@@ -294,11 +295,13 @@ public ApiResponse GetAprGroupList([FromBody] AllotIdRequest request)
return new ApiResponse(ResponseType.OK, "ok", employee);
var result = employee.GroupBy(t => new { TypeInDepartment = t.TypeInDepartment ?? "" })
.Select(t => new per_apr_amount
.Select(t => new OhterAmountAuditResponse
{
TypeInDepartment = t.Key.TypeInDepartment,
Amount = t.Sum(s => s.Amount ?? 0),
Status = t.Any(s => s.Status == 2) ? 2 : t.Any(s => s.Status == 4) ? 4 : t.FirstOrDefault().Status,
AuditTime = t.Any(s => s.Status == 2) ? "" : t.Max(w => w.AuditTime)?.ToString("yyyy-MM-dd HH:mm:ss"),
Remark = t.Any(s => !s.MarkStatus.HasValue) ? "" : $"已审计{t.Max(w => w.MarkTime)?.ToString("(yyyy-MM-dd HH:mm:ss)")}"
});
return new ApiResponse(ResponseType.OK, "ok", result);
}
......@@ -401,6 +404,18 @@ public ApiResponse AuditResult([FromBody] AprAmountAuditRequest request)
}
/// <summary>
/// 医院其他绩效审计
/// </summary>
/// <returns></returns>
[HttpPost]
[Route("apr/mark")]
public ApiResponse AprMark([FromBody] AprAmountMarkRequest request)
{
var userid = claim.GetUserId();
return employeeService.AprMark(userid, request);
}
/// <summary>
/// 上传医院其他绩效文件
/// </summary>
/// <param name="form"></param>
......@@ -582,11 +597,13 @@ public ApiResponse GetAprHideGroupList([FromBody] AllotIdRequest request)
return new ApiResponse(ResponseType.OK, "ok", employee);
var result = employee.GroupBy(t => new { TypeInDepartment = t.TypeInDepartment ?? "" })
.Select(t => new per_apr_amount
.Select(t => new OhterAmountAuditResponse
{
TypeInDepartment = t.Key.TypeInDepartment,
Amount = t.Sum(s => s.Amount ?? 0),
Status = t.Any(s => s.Status == 2) ? 2 : t.Any(s => s.Status == 4) ? 4 : t.FirstOrDefault().Status,
AuditTime = t.Any(s => s.Status == 2) ? "" : t.Max(w => w.AuditTime)?.ToString("yyyy-MM-dd HH:mm:ss"),
Remark = t.Any(s => !s.MarkStatus.HasValue) ? "" : $"已审计{t.Max(w => w.MarkTime)?.ToString("(yyyy-MM-dd HH:mm:ss)")}"
});
return new ApiResponse(ResponseType.OK, "ok", result);
}
......@@ -688,6 +705,18 @@ public ApiResponse AuditResultHide([FromBody] AprAmountAuditRequest request)
}
/// <summary>
/// 不公示其他绩效审计
/// </summary>
/// <returns></returns>
[HttpPost]
[Route("apr/hide/mark")]
public ApiResponse AprMarkHide([FromBody] AprAmountMarkRequest request)
{
var userid = claim.GetUserId();
return employeeService.AprMarkHide(userid, request);
}
/// <summary>
/// 上传不公示其他绩效
/// </summary>
/// <param name="form"></param>
......
......@@ -371,6 +371,11 @@ public ApiResponse SubmitAudit(SubmitAuditRequest request)
public ApiResponse<List<ag_secondallot>> AuditList([FromBody] AllotDeptRequest request)
{
var list = secondAllotService.AuditList(request.AllotId);
foreach (var item in list)
{
item.Remark += item.MarkStatus.HasValue && item.MarkStatus == 1 ? $" 已审计{item.MarkTime?.ToString("(yyyy-MM-dd HH:mm:ss)")}" : "";
}
return new ApiResponse<List<ag_secondallot>>(ResponseType.OK, "审核列表", list);
}
......@@ -392,6 +397,22 @@ public ApiResponse AuditResult([FromBody] SecondAuditRequest request)
}
/// <summary>
/// 二次绩效审计
/// </summary>
/// <returns></returns>
[HttpPost]
[Route("/api/second/mark")]
public ApiResponse SecondMark([FromBody] SecondMarkRequest request)
{
if (request?.SecondIds == null || !request.SecondIds.Any())
return new ApiResponse(ResponseType.ParameterError, "参数SecondIds无效!");
var userid = claimService.GetUserId();
var result = secondAllotService.SecondMark(userid, request.SecondIds);
return result ? new ApiResponse(ResponseType.OK, "操作成功") : new ApiResponse(ResponseType.Fail, "操作失败");
}
/// <summary>
/// 护理部二次绩效审核列表
/// </summary>
/// <returns></returns>
......@@ -719,6 +740,7 @@ public ApiResponse RedistributionCompute([FromBody] SecondComputeDto request)
_redistributionService.ClearInvalidValue(cleanDatas);
var dic = _redistributionService.GetTableHeaderDictionary((ComputeMode)request.ComputeMode, allot, second, loads, workloadGroups);
_redistributionService.RowsExpand(allot, dic, cleanDatas);
return new ApiResponse(ResponseType.OK, new { Head = request.Head, Body = cleanDatas, Dic = dic });
}
catch (PerformanceException ex)
......@@ -918,8 +940,10 @@ public ApiResponse RedistributionDetail([FromBody] SecondBaseDto request)
// 返回信息
var (head, rows) = _redistributionService.RedistributionDetail((ComputeMode)request.ComputeMode, allot, second, workloadGroups);
var dic = _redistributionService.GetTableHeaderDictionary((ComputeMode)request.ComputeMode, allot, second, loads, workloadGroups);
_redistributionService.RowsExpand(allot, dic, rows);
return new ApiResponse(ResponseType.OK, new { Head = head, Body = rows, Dic = dic });
}
#endregion
......
......@@ -51,6 +51,9 @@
<Content Update="wwwroot\Performance.DtoModels.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\Performance.DtoModels.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\Performance.EntityModels.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
......@@ -66,6 +69,9 @@
<None Update="Template\医院人员绩效模板.xls">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Template\医院人员绩效模板.xlsx">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Template\医院绩效模板%28无执行科室%29.xlsx">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
......@@ -87,6 +93,13 @@
<None Update="Template\导入数据模板.xlsx">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Template\工作量数据导入模板.xlsx">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<Folder Include="wwwroot\" />
</ItemGroup>
<ProjectExtensions>
......
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DeleteExistingFiles>True</DeleteExistingFiles>
<ExcludeApp_Data>False</ExcludeApp_Data>
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<PublishProvider>FileSystem</PublishProvider>
<PublishUrl>bin\Release\net5.0\publish\</PublishUrl>
<WebPublishMethod>FileSystem</WebPublishMethod>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<DebugType>embedded</DebugType>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<PublishSingleFile>True</PublishSingleFile>
<EnableCompressionInSingleFile>true</EnableCompressionInSingleFile>
<SelfContained>true</SelfContained>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishReadyToRun>True</PublishReadyToRun>
<SiteUrlToLaunchAfterPublish />
<PublishTrimmed>True</PublishTrimmed>
<ProjectGuid>3ae00ff5-f0ba-4d72-a23b-770186309327</ProjectGuid>
</PropertyGroup>
</Project>
\ No newline at end of file
......@@ -6,6 +6,7 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Connections;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Authorization;
using Microsoft.Extensions.Configuration;
......@@ -15,6 +16,7 @@
using Performance.DtoModels;
using Performance.Infrastructure;
using Performance.Services;
using System;
using System.Globalization;
using System.Reflection;
using System.Text;
......@@ -87,7 +89,11 @@ public void ConfigureServices(IServiceCollection services)
services.AddDependencyInjectionConfiguration();
// signalr
services.AddSignalR();
services.AddSignalR(hubOptions =>
{
hubOptions.EnableDetailedErrors = true;
hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
});
// cors
services.AddCors(options =>
......@@ -132,7 +138,11 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<AllotLogHub>("/performance/allotLogHub");
endpoints.MapHub<AllotLogHub>("/performance/allotLogHub", options =>
{
options.Transports = HttpTransportType.WebSockets | HttpTransportType.LongPolling;
options.WebSockets.CloseTimeout = TimeSpan.FromMinutes(1);
});
endpoints.MapControllers();
});
......
......@@ -287,6 +287,125 @@
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AllotController.GetOwnerMobilePerformance(System.String,System.String)">
<summary>
H5查询个人绩效
</summary>
<param name="begin">开始月份:2021-03</param>
<param name="end">结束月份:2021-04</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.GetAttendance(System.Int32)">
<summary>
查询绩效考勤记录
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.GetCallIn(System.Int32)">
<summary>
查询绩效调动记录
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.GetBatchCallInHandsonTable(System.Int32)">
<summary>
返回HandsonTable格式调动记录
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.BatchCallIn(System.Int32,System.Int32,Performance.DtoModels.SaveCollectData)">
<summary>
批量插入调动记录
</summary>
<param name="allotId"></param>
<param name="hospitalId"></param>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.GetAttendanceType(System.Int32,System.Int32)">
<summary>
查询绩效考勤类型
</summary>
<param name="allotId"></param>
<param name="hospitalId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.InsertAttendanceType(System.Int32,System.Int32,Performance.EntityModels.Other.AttendanceType)">
<summary>
新增或修改考勤类型
</summary>
<param name="allotId"></param>
<param name="hospitalId"></param>
<param name="attendanceType"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DeleteAttendanceType(System.Int32)">
<summary>
删除考勤类型
</summary>
<param name="id"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.GetAttendanceVacationHandsonTable(System.Int32)">
<summary>
返回HandsonTable格式考勤记录
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.GetAttendanceVacation(System.Int32)">
<summary>
查询考勤记录
</summary>
<param name="allotId"></param>
<param name="hospitalId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.AttendanceBatch(System.Int32,System.Int32,Performance.DtoModels.SaveCollectData)">
<summary>
批量插入考勤记录,插入前需要删除所有后重新插入
</summary>
<param name="allotId"></param>
<param name="hospitalId"></param>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.GetAttendanceStatistics(System.Int32)">
<summary>
考勤结果统计
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DownloadAttendance(System.Int32)">
<summary>
初始考勤记录下载
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DownloadVacation(System.Int32)">
<summary>
考勤记录下载
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DownloadCallIn(System.Int32)">
<summary>
调动记录下载
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.DownloadStatistics(System.Int32)">
<summary>
生成最终考勤结果下载
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.BudgetController.Query(Performance.DtoModels.Request.BudgetRequest)">
<summary>
预算管理查询(包含金额、占比)
......@@ -541,6 +660,13 @@
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ComputeController.BatchCancel(Performance.DtoModels.Request.BatchCancelRequest)">
<summary>
取消全院绩效进行批次标记
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ComputeController.GetAdminPerDownload(System.Int32)">
<summary>
下载院领导、中层、工勤组绩效
......@@ -1066,6 +1192,12 @@
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.EmployeeController.AprMark(Performance.DtoModels.AprAmountMarkRequest)">
<summary>
医院其他绩效审计
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.EmployeeController.Import(Microsoft.AspNetCore.Http.IFormCollection)">
<summary>
上传医院其他绩效文件
......@@ -1158,6 +1290,12 @@
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.EmployeeController.AprMarkHide(Performance.DtoModels.AprAmountMarkRequest)">
<summary>
不公示其他绩效审计
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.EmployeeController.ImportAprHide(Microsoft.AspNetCore.Http.IFormCollection)">
<summary>
上传不公示其他绩效
......@@ -2031,6 +2169,12 @@
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.SecondAllotController.SecondMark(Performance.DtoModels.SecondMarkRequest)">
<summary>
二次绩效审计
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.SecondAllotController.NursingDeptlist(Performance.DtoModels.AllotDeptRequest)">
<summary>
护理部二次绩效审核列表
......
......@@ -202,16 +202,9 @@
<member name="F:Performance.DtoModels.DataFormat.分数">
<summary> 分数 </summary>
</member>
<member name="F:Performance.DtoModels.DataFormat.日期">
<member name="F:Performance.DtoModels.DataFormat.日期YYYYMMDD">
<summary> 日期 </summary>
</member>
<member name="M:Performance.DtoModels.HandsonTable.SetRowData(System.Collections.Generic.IEnumerable{Performance.DtoModels.HandsonRowData},System.Boolean)">
<summary>
</summary>
<param name="datas"></param>
<param name="isTypein">是否是用户录入的 是:true 不是:false</param>
</member>
<member name="P:Performance.DtoModels.HistoryData.Year">
<summary>
......@@ -1918,6 +1911,27 @@
<member name="P:Performance.DtoModels.AprAmountAuditRequest.Remark">
<summary> 备注 </summary>
</member>
<member name="P:Performance.DtoModels.AprAmountMarkRequest.AllotId">
<summary> 绩效ID </summary>
</member>
<member name="P:Performance.DtoModels.AprAmountMarkRequest.TypeInDepartments">
<summary> 需要审计的科室,支持多个科室一起审计 </summary>
</member>
<member name="P:Performance.DtoModels.Request.BatchRequest.Batch">
<summary>
批次号
</summary>
</member>
<member name="P:Performance.DtoModels.Request.BatchRequest.BatchDate">
<summary>
发放时间
</summary>
</member>
<member name="P:Performance.DtoModels.Request.BatchRequest.BankName">
<summary>
发放银行
</summary>
</member>
<member name="P:Performance.DtoModels.Request.BatchDetail.UnitType">
<summary>
核算单元分类
......@@ -1938,11 +1952,6 @@
工号
</summary>
</member>
<member name="P:Performance.DtoModels.Request.BatchDetail.Batch">
<summary>
批次
</summary>
</member>
<member name="P:Performance.DtoModels.Request.ComputerAvgRequest.PositionName">
<summary>
绩效核算人群
......@@ -2436,6 +2445,9 @@
<member name="P:Performance.DtoModels.SecondAuditRequest.Remark">
<summary> 备注 </summary>
</member>
<member name="P:Performance.DtoModels.SecondMarkRequest.SecondIds">
<summary> 二次绩效Id </summary>
</member>
<member name="T:Performance.DtoModels.SetDepartmentRequest">
<summary>
登录请求
......@@ -2703,6 +2715,56 @@
科室
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatistics.UnitType">
<summary>
核算组别
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatistics.AccountingUnit">
<summary>
核算单元
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatistics.Department">
<summary>
科室名称
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatistics.PersonnelNumber">
<summary>
工号
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatistics.PersonnelName">
<summary>
姓名
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatistics.BeginDate">
<summary>
在科开始时间
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatistics.EndDate">
<summary>
在科结束时间
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatisticsDetial.Value">
<summary>
请假天数
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatisticsDetial.Title">
<summary>
考勤类型
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatisticsDetial.Remark">
<summary>
备注
</summary>
</member>
<member name="P:Performance.DtoModels.BudgetRatioResponse.HospitalId">
<summary>
医院Id
......@@ -3532,6 +3594,51 @@
实发绩效
</summary>
</member>
<member name="P:Performance.DtoModels.OwnerPerformanceDto.IssueDate">
<summary>
发放时间
</summary>
</member>
<member name="P:Performance.DtoModels.OwnerMobilePerformanceDto.Total">
<summary>
绩效发放总额
</summary>
</member>
<member name="P:Performance.DtoModels.OwnerMobilePerformanceDto.Items">
<summary>
绩效明细
</summary>
</member>
<member name="P:Performance.DtoModels.OwnerMobileItemDto.Title">
<summary>
类型名称
</summary>
</member>
<member name="P:Performance.DtoModels.OwnerMobileItemDto.Amount">
<summary>
金额
</summary>
</member>
<member name="P:Performance.DtoModels.OwnerMobileItemDto.Details">
<summary>
明细项
</summary>
</member>
<member name="P:Performance.DtoModels.OwnerMobileItemDetailDto.Title">
<summary>
类型名称
</summary>
</member>
<member name="P:Performance.DtoModels.OwnerMobileItemDetailDto.Amount">
<summary>
金额
</summary>
</member>
<member name="P:Performance.DtoModels.OwnerMobileItemDetailDto.Date">
<summary>
发放时间,空则不显示
</summary>
</member>
<member name="P:Performance.DtoModels.PerEmployeeResponse.WorkTime">
<summary>
参加工作时间
......@@ -4103,6 +4210,11 @@
格式
</summary>
</member>
<member name="P:Performance.DtoModels.SecondColumnDictionary.Expand">
<summary>
true 扩展字段,通过配置额外展示
</summary>
</member>
<member name="P:Performance.DtoModels.SecondEmployeeDto.ComputeMode">
<summary>
计算方式:11 不计算 12 横向计算 13 纵向计算
......
......@@ -1070,11 +1070,6 @@
二次绩效列表
</summary>
</member>
<member name="P:Performance.EntityModels.ag_secondallot.Id">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.ag_secondallot.AllotId">
<summary>
绩效ID
......@@ -1115,26 +1110,6 @@
预发金额
</summary>
</member>
<member name="P:Performance.EntityModels.ag_secondallot.Efficiency">
<summary>
效率绩效
</summary>
</member>
<member name="P:Performance.EntityModels.ag_secondallot.Scale">
<summary>
规模绩效
</summary>
</member>
<member name="P:Performance.EntityModels.ag_secondallot.Grant">
<summary>
发放系数
</summary>
</member>
<member name="P:Performance.EntityModels.ag_secondallot.ShouldGiveFee">
<summary>
应发管理绩效
</summary>
</member>
<member name="P:Performance.EntityModels.ag_secondallot.Status">
<summary>
状态 1 未提交 2 等待审核 3 审核通过 4 驳回
......@@ -1190,6 +1165,11 @@
夜班绩效
</summary>
</member>
<member name="P:Performance.EntityModels.ag_secondallot.MarkStatus">
<summary>
审计状态 1 已审计
</summary>
</member>
<member name="T:Performance.EntityModels.ag_temp">
<summary>
二次绩效模板
......@@ -5960,6 +5940,11 @@
是否修改过配置 1修改过 0未修改
</summary>
</member>
<member name="P:Performance.EntityModels.per_allot.PigeonholeDate">
<summary>
归档日期
</summary>
</member>
<member name="T:Performance.EntityModels.per_apr_amount">
<summary>
......@@ -6040,6 +6025,11 @@
验证失败描述
</summary>
</member>
<member name="P:Performance.EntityModels.per_apr_amount.MarkStatus">
<summary>
审计状态 1 已审计
</summary>
</member>
<member name="T:Performance.EntityModels.per_apr_amount_hide">
<summary>
医院其他绩效
......@@ -6120,6 +6110,16 @@
验证失败描述
</summary>
</member>
<member name="P:Performance.EntityModels.per_apr_amount_hide.MarkStatus">
<summary>
审计状态 1 已审计
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_type.IsDeduction">
<summary>
是否核减出勤 1 核减 2 不核减
</summary>
</member>
<member name="T:Performance.EntityModels.per_batch">
<summary>
分批发放记录
......@@ -8845,6 +8845,56 @@
</summary>
</member>
<member name="P:Performance.EntityModels.Other.view_attendance.UnitType">
<summary>
人员类别
</summary>
</member>
<member name="P:Performance.EntityModels.Other.view_attendance.AccountingUnit">
<summary>
核算单元
</summary>
</member>
<member name="P:Performance.EntityModels.Other.view_attendance.PersonnelNumber">
<summary>
工号
</summary>
</member>
<member name="P:Performance.EntityModels.Other.view_attendance.PersonnelName">
<summary>
姓名
</summary>
</member>
<member name="P:Performance.EntityModels.Other.view_attendance.AttendanceDate">
<summary>
考勤时间
</summary>
</member>
<member name="P:Performance.EntityModels.Other.view_attendance.Source">
<summary>
来源
</summary>
</member>
<member name="P:Performance.EntityModels.Other.view_attendance.Department">
<summary>
科室名称
</summary>
</member>
<member name="P:Performance.EntityModels.Other.AttendanceType.Id">
<summary>
Id
</summary>
</member>
<member name="P:Performance.EntityModels.Other.AttendanceType.AttendanceName">
<summary>
考勤类型名称
</summary>
</member>
<member name="P:Performance.EntityModels.Other.AttendanceType.IsDeduction">
<summary>
是否核减出勤 1 核减 2 不核减
</summary>
</member>
<member name="P:Performance.EntityModels.HisData.HisDepartment">
<summary>
His科室
......
......@@ -116,7 +116,7 @@ public enum DataFormat
/// <summary> 分数 </summary>
分数,
/// <summary> 日期 </summary>
日期
日期YYYYMMDD
}
public enum Role
......@@ -134,6 +134,7 @@ public enum Role
数据收集 = 11,
护理部审核 = 12,
绩效查询 = 13,
审计 = 14,
}
public class Background
......@@ -165,4 +166,18 @@ public enum Status
驳回 = 4,
}
}
public class Attendance
{
public enum Type
{
开始,
调入,
结束,
}
public enum Deduction
{
核减 = 1,
不核减 = 2,
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.DtoModels
{
public class ExcelDownloadHeads
{
public string Alias { get; set; }
public string Name { get; set; }
}
}
......@@ -37,12 +37,6 @@ public HandsonTable(int sheetType, string[] cols, List<collect_permission> permi
InitColumns(permissions);
}
/// <summary>
///
/// </summary>
/// <param name="datas"></param>
/// <param name="isTypein">是否是用户录入的 是:true 不是:false</param>
public void SetRowData(IEnumerable<HandsonRowData> datas, bool isTypein)
{
foreach (var dt in datas)
......@@ -127,6 +121,11 @@ public HandsonColumn(string data, bool readOnly = false, DataFormat format = Dat
Type = "text";
break;
case DataFormat.日期YYYYMMDD:
Type = "DateFormat";
DateFormat = "YYYY/MM/DD";
break;
case DataFormat.小数:
Type = "numeric";
NumericFormat = new NumericFormat { Pattern = "0,00.00" };
......@@ -152,6 +151,7 @@ public HandsonColumn(string data, bool readOnly = false, DataFormat format = Dat
public string Data { get; set; }
public bool ReadOnly { get; set; }
public string Type { get; set; }
public string DateFormat { get; set; }
public string[] Source { get; set; }
public bool Strict { get; set; } = false;
......
using FluentValidation;
using System;
using System.Collections.Generic;
using System.Text;
namespace Performance.DtoModels
{
public class AprAmountMarkRequest
{
/// <summary> 绩效ID </summary>
public int AllotId { get; set; }
/// <summary> 需要审计的科室,支持多个科室一起审计 </summary>
public string[] TypeInDepartments { get; set; }
}
}
using System.Collections.Generic;
using System;
using System.Collections.Generic;
namespace Performance.DtoModels.Request
{
public class BatchCancelRequest
{
public int HospitalId { get; set; }
public int AllotId { get; set; }
public List<BatchDetail> Details { get; set; }
}
public class BatchRequest
{
public int HospitalId { get; set; }
public int AllotId { get; set; }
/// <summary>
/// 批次号
/// </summary>
public string Batch { get; set; }
/// <summary>
/// 发放时间
/// </summary>
public DateTime? BatchDate { get; set; }
/// <summary>
/// 发放银行
/// </summary>
public string BankName { get; set; }
public List<BatchDetail> Details { get; set; }
}
......@@ -32,10 +53,5 @@ public class BatchDetail
/// 工号
/// </summary>
public string JobNumber { get; set; }
/// <summary>
/// 批次
/// </summary>
public string Batch { get; set; }
}
}
......@@ -62,6 +62,7 @@ public class ComputerAliasUpdate
}
public class ComputerAliasHead
{
public string Name { get; set; }
public string Head { get; set; }
public int HeadId { get; set; }
public int Sort { get; set; }
......
......@@ -22,7 +22,6 @@ public SecondAuditRequestValidator()
{
RuleFor(x => x.SecondId).NotNull().NotEmpty().GreaterThan(0);
RuleFor(x => x.IsPass).NotNull().NotEmpty().InclusiveBetween(1, 2);
RuleFor(x => x.Remark).NotNull().NotEmpty();
}
}
}
namespace Performance.DtoModels
{
public class SecondMarkRequest
{
/// <summary> 二次绩效Id </summary>
public int[] SecondIds { get; set; }
}
}
using System;
using System.Collections.Generic;
namespace Performance.DtoModels
{
public class AttendanceStatistics
{
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 DateTime BeginDate { get; set; }
/// <summary>
/// 在科结束时间
/// </summary>
public DateTime EndDate { get; set; }
public List<AttendanceStatisticsDetial> Detial { get; set; }
public int AttendanceDays { get; set; }
}
public class AttendanceStatisticsDetial
{
/// <summary>
/// 请假天数
/// </summary>
public int Value { get; set; }
/// <summary>
/// 考勤类型
/// </summary>
public string Title { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Performance.DtoModels
......
......@@ -9,14 +9,14 @@ public class DeptdicResponse
public int HospitalId { get; set; }
public string HISDeptName { get; set; }
public string Department { get; set; }
public Deptdic OutDoctorAccounting { get; set; }
public Deptdic OutNurseAccounting { get; set; }
public Deptdic OutTechnicAccounting { get; set; }
public Deptdic InpatDoctorAccounting { get; set; }
public Deptdic InpatNurseAccounting { get; set; }
public Deptdic InpatTechnicAccounting { get; set; }
public Deptdic LogisticsAccounting { get; set; }
public Deptdic SpecialAccounting { get; set; }
public string OutDoctorAccounting { get; set; }
public string OutNurseAccounting { get; set; }
public string OutTechnicAccounting { get; set; }
public string InpatDoctorAccounting { get; set; }
public string InpatNurseAccounting { get; set; }
public string InpatTechnicAccounting { get; set; }
public string LogisticsAccounting { get; set; }
public string SpecialAccounting { get; set; }
public DateTime? CreateTime { get; set; }
public int IsVerify { get; set; }
}
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.DtoModels.Response
{
public class OhterAmountAuditResponse
{
public string TypeInDepartment { get; set; }
public decimal Amount { get; set; }
public int? Status { get; set; }
public string AuditTime { get; set; }
public string Remark { get; set; }
}
}
......@@ -15,5 +15,52 @@ public class OwnerPerformanceDto : view_allot_result
/// 实发绩效
/// </summary>
public decimal RealGiveFee { get; set; }
/// <summary>
/// 发放时间
/// </summary>
public string IssueDate { get; set; }
}
public class OwnerMobilePerformanceDto
{
/// <summary>
/// 绩效发放总额
/// </summary>
public decimal Total { get; set; }
/// <summary>
/// 绩效明细
/// </summary>
public List<OwnerMobileItemDto> Items { get; set; }
}
public class OwnerMobileItemDto
{
/// <summary>
/// 类型名称
/// </summary>
public string Title { get; set; }
/// <summary>
/// 金额
/// </summary>
public decimal Amount { get; set; }
/// <summary>
/// 明细项
/// </summary>
public List<OwnerMobileItemDetailDto> Details { get; set; }
}
public class OwnerMobileItemDetailDto
{
/// <summary>
/// 类型名称
/// </summary>
public string Title { get; set; }
/// <summary>
/// 金额
/// </summary>
public decimal Amount { get; set; }
/// <summary>
/// 发放时间,空则不显示
/// </summary>
public string Date { get; set; }
}
}
......@@ -18,9 +18,4 @@ public class PerEmployeeResponse : per_employee
/// </summary>
public new string BirthDate { get; set; }
}
public class PersonePassword : per_employee
{
public string Password { get; set; }
}
}
......@@ -38,12 +38,16 @@ public class SecondColumnDictionary
/// 格式
/// </summary>
public bool IsNumber { get; set; }
/// <summary>
/// true 扩展字段,通过配置额外展示
/// </summary>
public bool Expand { get; set; }
public SecondColumnDictionary()
{
}
public SecondColumnDictionary(string label, string key, bool isTrue, int sort, string site = "Table", string type = "", string color = "", int? width = null, bool isNumber = true)
public SecondColumnDictionary(string label, string key, bool isTrue, int sort, string site = "Table", string type = "", string color = "", int? width = null, bool isNumber = true, bool expand = false)
{
Label = label;
Key = key;
......@@ -54,6 +58,7 @@ public SecondColumnDictionary(string label, string key, bool isTrue, int sort, s
Color = color;
Width = width.HasValue ? width.ToString() : ((label ?? "").Length * 20 + 10).ToString();
IsNumber = isNumber;
Expand = expand;
}
}
}
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;
using Performance.EntityModels.Entity;
using System;
namespace Performance.EntityModels
......@@ -245,5 +246,8 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options)
/// <summary> 用户角色关联表 </summary>
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_type> per_attendance_type { get; set; }
public virtual DbSet<per_attendance_vacation> per_attendance_vacation { get; set; }
}
}
......@@ -15,9 +15,6 @@ namespace Performance.EntityModels
[Table("ag_secondallot")]
public class ag_secondallot
{
/// <summary>
///
/// </summary>
[Key]
public int Id { get; set; }
......@@ -60,25 +57,25 @@ public class ag_secondallot
/// 预发金额
/// </summary>
public Nullable<decimal> PreRealGiveFee { get; set; }
/// <summary>
/// 效率绩效
/// </summary>
public Nullable<decimal> Efficiency { get; set; }
///// <summary>
///// 效率绩效
///// </summary>
//public Nullable<decimal> Efficiency { get; set; }
/// <summary>
/// 规模绩效
/// </summary>
public Nullable<decimal> Scale { get; set; }
///// <summary>
///// 规模绩效
///// </summary>
//public Nullable<decimal> Scale { get; set; }
/// <summary>
/// 发放系数
/// </summary>
public Nullable<decimal> Grant { get; set; }
///// <summary>
///// 发放系数
///// </summary>
//public Nullable<decimal> Grant { get; set; }
/// <summary>
/// 应发管理绩效
/// </summary>
public Nullable<decimal> ShouldGiveFee { get; set; }
///// <summary>
///// 应发管理绩效
///// </summary>
//public Nullable<decimal> ShouldGiveFee { get; set; }
/// <summary>
/// 状态 1 未提交 2 等待审核 3 审核通过 4 驳回
......@@ -134,5 +131,12 @@ public class ag_secondallot
/// 夜班绩效
/// </summary>
public Nullable<decimal> NightShiftWorkPerforFee { get; set; }
/// <summary>
/// 审计状态 1 已审计
/// </summary>
public Nullable<int> MarkStatus { get; set; }
public Nullable<int> MarkUser { get; set; }
public Nullable<DateTime> MarkTime { get; set; }
}
}
......@@ -105,5 +105,9 @@ public class per_allot
/// 是否修改过配置 1修改过 0未修改
/// </summary>
public int IsModifyConfig { get; set; }
/// <summary>
/// 归档日期
/// </summary>
public Nullable<DateTime> PigeonholeDate { get; set; }
}
}
......@@ -95,5 +95,11 @@ public class per_apr_amount
/// 验证失败描述
/// </summary>
public string VerifyMessage { get; set; }
/// <summary>
/// 审计状态 1 已审计
/// </summary>
public Nullable<int> MarkStatus { get; set; }
public Nullable<int> MarkUser { get; set; }
public Nullable<DateTime> MarkTime { get; set; }
}
}
......@@ -90,5 +90,11 @@ public class per_apr_amount_hide
/// 验证失败描述
/// </summary>
public string VerifyMessage { get; set; }
/// <summary>
/// 审计状态 1 已审计
/// </summary>
public Nullable<int> MarkStatus { get; set; }
public Nullable<int> MarkUser { get; set; }
public Nullable<DateTime> MarkTime { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.EntityModels.Entity
{
[Table("per_attendance")]
public class per_attendance
{
[Key]
public int Id { get; set; }
public int HospitalId { get; set; } //医院Id
public int AllotId { get; set; } //绩效Id
public string PersonnelNumber { get; set; } //工号
public string PersonnelName { get; set; } //姓名
public string CallInUnitType { get; set; } //人员类别
public string CallInAccountingUnit { get; set; } //核算单元
public DateTime? CallInDate { get; set; } //调入时间
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.EntityModels.Entity
{
[Table("per_attendance_type")]
public class per_attendance_type
{
[Key]
public int Id { get; set; }
public int HospitalId { get; set; } //医院Id
public int AllotId { get; set; } //绩效Id
public string AttendanceName { get; set; } //考勤类型名称
/// <summary>
/// 是否核减出勤 1 核减 2 不核减
/// </summary>
public int IsDeduction { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.EntityModels.Entity
{
[Table("per_attendance_vacation")]
public class per_attendance_vacation
{
[Key]
public int Id { get; set; }
public int HospitalId { get; set; } //医院Id
public int AllotId { get; set; } //绩效Id
public string PersonnelNumber { get; set; } //工号
public string PersonnelName { get; set; } //姓名
public int TypeId { get; set; } //per_attendance_type表中ID
public DateTime? BegDate { get; set; } //开始时间
public DateTime? EndDate { get; set; } //结束时间
}
}
......@@ -39,7 +39,8 @@ public class per_batch
/// <summary>
/// 批次日期
/// </summary>
public DateTime BatchDate { get; set; }
public Nullable<DateTime> BatchDate { get; set; }
public string BankName { get; set; }
/// <summary>
/// 核算单元分类
......
......@@ -150,5 +150,15 @@ public class per_employee
///
/// </summary>
public Nullable<int> CreateUser { get; set; }
public string Reserve01 { get; set; }
public string Reserve02 { get; set; }
public string Reserve03 { get; set; }
public string Reserve04 { get; set; }
public string Reserve05 { get; set; }
public string Reserve06 { get; set; }
public string Reserve07 { get; set; }
public string Reserve08 { get; set; }
public string Reserve09 { get; set; }
public string Reserve10 { get; set; }
}
}
using Performance.EntityModels.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.EntityModels.Other
{
public class view_attendance
{
public int ALLOTID { get; set; }
public int YEAR { get; set; }
public int MONTH { get; set; }
/// <summary>
/// 人员类别
/// </summary>
public string UnitType { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 工号
/// </summary>
public string PersonnelNumber { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 考勤时间
/// </summary>
public DateTime AttendanceDate { get; set; }
/// <summary>
/// 来源
/// </summary>
public string Source { get; set; }
/// <summary>
/// 科室名称
/// </summary>
public string Department { get; set; }
}
public class InitialAttendance
{
public string UnitType { get; set; } //人员类别
public string AccountingUnit { get; set; } //核算单元
public string PersonnelNumber { get; set; } //工号
public string PersonnelName { get; set; } //姓名
public Nullable<DateTime> StartDate { get; set; } //入科开始时间
public Nullable<DateTime> EndDate { get; set; } //入科结束时间
public string Department { get; set; } //科室名称
}
public class RecordAttendcance : per_attendance_vacation
{
public int Days { get; set; }
public string AttendanceName { get; set; }
}
public class AttendaceHeads
{
public string Column { get; set; }
public string Name { get; set; }
}
public class AttendanceType
{
/// <summary>
/// Id
/// </summary>
public int Id { get; set; } //考勤类型名称
/// <summary>
/// 考勤类型名称
/// </summary>
public string AttendanceName { get; set; }
/// <summary>
/// 是否核减出勤 1 核减 2 不核减
/// </summary>
public string IsDeduction { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Globalization;
using System.Text;
namespace Performance.Infrastructure
{
public static partial class UtilExtensions
{
public static DateTime ToTryDateTime(this string value, params string[] formats)
{
return string.IsNullOrEmpty(value) ? DateTime.MinValue : ToDateTime(value, formats);
}
public static DateTime ToDateTime(this string value, params string[] formats)
{
if (formats.Length == 0)
{
formats = new string[]
{
"yyyyMMddHHmmss",
"yyyyMMddHHmmss",
"yyyy-MM-dd HH:mm:ss",
"yyyy年MM月dd日 HH时mm分ss秒" ,
"yyyyMdHHmmss",
"yyyy年M月d日 H时mm分ss秒",
"yyyy.M.d H:mm:ss",
"yyyy.MM.dd HH:mm:ss",
"yyyy-MM-dd",
"yyyyMMdd",
"yyyy/MM/dd",
"yyyy/M/d",
"yyyy-MM",
"yyyy/MM",
"yyyy/M",
};
}
if (DateTime.TryParseExact(value, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime now))
return now;
return DateTime.MinValue;
}
}
}
......@@ -7,6 +7,7 @@
using Dapper;
using Microsoft.EntityFrameworkCore;
using Performance.EntityModels;
using Performance.EntityModels.Other;
using System;
using System.Collections.Generic;
using System.Data;
......@@ -253,9 +254,7 @@ public IEnumerable<view_second_workload_result> GetSecondWorkload(int allotid, s
/// <summary>
/// 查询HIS提取数据,工作量字典
/// </summary>
/// <param name="allotid"></param>
/// <param name="unittype"></param>
/// <param name="accountingunit"></param>
/// <param name="hospitalId"></param>
/// <returns></returns>
public IEnumerable<string> GetSecondWorkloadMaps(int hospitalId)
{
......@@ -278,5 +277,46 @@ public IEnumerable<string> GetSecondWorkloadMaps(int hospitalId)
}
}
}
public IEnumerable<view_attendance> GetAttendance(int allotId)
{
var connection = context.Database.GetDbConnection();
if (connection.State != ConnectionState.Open) connection.Open();
try
{
string query = $@"SELECT * FROM view_attendance where allotId = @allotId";
return connection.Query<view_attendance>(query, new { allotId }, commandTimeout: 60 * 60);
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// 查询人员字典
/// </summary>
/// <param name="allotId"></param>
/// <returns></returns>
public IEnumerable<dynamic> QueryEmployee(int allotId)
{
using (var connection = context.Database.GetDbConnection())
{
if (connection.State != ConnectionState.Open) connection.Open();
try
{
string query = $@"SELECT * FROM view_employee WHERE AllotID = @allotId";
return connection.Query(query, new { allotId }, commandTimeout: 60 * 60);
}
catch (Exception)
{
throw;
}
}
}
}
}
\ No newline at end of file
......@@ -393,7 +393,7 @@ public List<EmployeeReservedDto> GetEmployeeReserved(int hospitalId, int year)
public List<view_allot_result> GetOwnerPerformance(List<int> hospitalId, string jobNumber)
{
string sql = "SELECT * FROM view_allot_result WHERE States = 8 AND HospitalID IN @HospitalID AND JobNumber=@JobNumber";
string sql = "SELECT * FROM view_allot_result WHERE States IN (6,8) AND HospitalID IN @HospitalID AND JobNumber=@JobNumber";
return DapperQuery<view_allot_result>(sql, new { HospitalID = hospitalId, JobNumber = jobNumber })?.ToList();
}
......
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 PerfoPperAttendanceTypeRepository : PerforRepository<per_attendance_type>
{
/// <summary>
/// per_attendance_type Repository
/// </summary>
public PerfoPperAttendanceTypeRepository(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 PerfoPperAttendanceVacationeRepository : PerforRepository<per_attendance_vacation>
{
/// <summary>
/// per_attendance_vacation Repository
/// </summary>
public PerfoPperAttendanceVacationeRepository(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 PerforPerAttendanceRepository : PerforRepository<per_attendance>
{
/// <summary>
/// per_attendance Repository
/// </summary>
public PerforPerAttendanceRepository(PerformanceDbContext context) : base(context)
{
}
}
}
......@@ -434,7 +434,8 @@ public List<per_apr_amount> GetAprList(int allotId, int userId)
if (userrole == null) throw new PerformanceException("用户未绑定角色");
var list = new List<per_apr_amount>();
if (new int[] { 1, 2, 5, 6 }.Contains(userrole.RoleID)) // 绩效管理员、医院管理员、绩效核算办、院领导查看所有科室的数据
var roles = new int[] { (int)Role.绩效管理员, (int)Role.医院管理员, (int)Role.绩效核算办, (int)Role.院领导, (int)Role.审计 };
if (roles.Contains(userrole.RoleID)) // 绩效管理员、医院管理员、绩效核算办、院领导查看所有科室的数据
list = perapramountRepository.GetEntities(t => t.AllotId == allotId && (t.Amount ?? 0) != 0);
else
list = perapramountRepository.GetEntities(t => t.AllotId == allotId && (t.Amount ?? 0) != 0 && t.CreateUser == userId);
......@@ -582,6 +583,28 @@ public ApiResponse ConfirmAudit(int userid, AprAmountAuditRequest request)
}
return new ApiResponse(ResponseType.OK, "");
}
/// <summary>
/// 医院其他绩效审计
/// </summary>
/// <param name="userid"></param>
/// <param name="request"></param>
/// <returns></returns>
public ApiResponse AprMark(int userid, AprAmountMarkRequest request)
{
List<Dictionary<string, string>> error = new List<Dictionary<string, string>>();
if (request?.TypeInDepartments == null || !request.TypeInDepartments.Any())
throw new PerformanceException("审计信息无效,请确认");
var allApramounts = perapramountRepository.GetEntities(t => t.AllotId == request.AllotId);
foreach (var department in request.TypeInDepartments)
{
string update = "update per_apr_amount set MarkStatus=@MarkStatus,MarkUser=@MarkUser,MarkTime=@MarkTime where TypeInDepartment=@TypeInDepartment and AllotId=@AllotId; ";
perapramountRepository.Execute(update, new { MarkStatus = 1, MarkUser = userid, MarkTime = DateTime.Now, TypeInDepartment = department, request.AllotId });
}
return new ApiResponse(ResponseType.OK, "");
}
/// <summary>
/// 上传导入医院其他绩效
/// </summary>
......@@ -594,7 +617,8 @@ public string ImpoerAprEmployees(int allotid, string path, int userid)
if (userrole == null) throw new PerformanceException("用户未绑定角色");
var data = new List<per_apr_amount>();
if (new int[] { 1, 2, 5 }.Contains(userrole.RoleID)) // 绩效管理员、医院管理员、绩效核算办查看所有科室的数据
var roles = new int[] { (int)Role.绩效管理员, (int)Role.医院管理员, (int)Role.绩效核算办, (int)Role.院领导, (int)Role.审计 };
if (roles.Contains(userrole.RoleID)) // 绩效管理员、医院管理员、绩效核算办查看所有科室的数据
data = perapramountRepository.GetEntities(t => t.AllotId == allotid && (t.Amount ?? 0) != 0);
else
data = perapramountRepository.GetEntities(t => t.AllotId == allotid && (t.Amount ?? 0) != 0 && t.CreateUser == userid);
......@@ -862,7 +886,9 @@ public List<per_apr_amount_hide> GetAprHideList(int allotId, int userId)
if (userrole == null) throw new PerformanceException("用户未绑定角色");
var list = new List<per_apr_amount_hide>();
if (new int[] { 1, 2, 5, 6 }.Contains(userrole.RoleID)) // 绩效管理员、医院管理员、绩效核算办、院领导查看所有科室的数据
var roles = new int[] { (int)Role.绩效管理员, (int)Role.医院管理员, (int)Role.绩效核算办, (int)Role.院领导, (int)Role.审计 };
if (roles.Contains(userrole.RoleID)) // 绩效管理员、医院管理员、绩效核算办查看所有科室的数据
list = _hideRepository.GetEntities(t => t.AllotId == allotId && (t.Amount ?? 0) != 0);
else
list = _hideRepository.GetEntities(t => t.AllotId == allotId && (t.Amount ?? 0) != 0 && t.CreateUser == userId);
......@@ -1007,6 +1033,26 @@ public ApiResponse ConfirmAuditHide(int userid, AprAmountAuditRequest request)
}
return new ApiResponse(ResponseType.OK, "");
}
/// <summary>
/// 不公示其他绩效审计
/// </summary>
/// <param name="userid"></param>
/// <param name="request"></param>
/// <returns></returns>
public ApiResponse AprMarkHide(int userid, AprAmountMarkRequest request)
{
List<Dictionary<string, string>> error = new List<Dictionary<string, string>>();
if (request?.TypeInDepartments == null || !request.TypeInDepartments.Any())
throw new PerformanceException("审计信息无效,请确认");
foreach (var department in request.TypeInDepartments)
{
string update = "update per_apr_amount_hide set MarkStatus=@MarkStatus,MarkUser=@MarkUser,MarkTime=@MarkTime where TypeInDepartment=@TypeInDepartment and AllotId=@AllotId; ";
_hideRepository.Execute(update, new { MarkStatus = 1, MarkUser = userid, MarkTime = DateTime.Now, TypeInDepartment = department, request.AllotId });
}
return new ApiResponse(ResponseType.OK, "");
}
/// <summary>
/// 上传导入医院其他绩效
......@@ -1020,7 +1066,8 @@ public void ImpoerAprHideEmployees(int allotid, string path, int userid)
if (userrole == null) throw new PerformanceException("用户未绑定角色");
var data = new List<per_apr_amount_hide>();
if (new int[] { 1, 2, 5 }.Contains(userrole.RoleID)) // 绩效管理员、医院管理员、绩效核算办查看所有科室的数据
var roles = new int[] { (int)Role.绩效管理员, (int)Role.医院管理员, (int)Role.绩效核算办, (int)Role.院领导, (int)Role.审计 };
if (roles.Contains(userrole.RoleID)) // 绩效管理员、医院管理员、绩效核算办查看所有科室的数据
data = _hideRepository.GetEntities(t => t.AllotId == allotid && (t.Amount ?? 0) != 0);
else
data = _hideRepository.GetEntities(t => t.AllotId == allotid && (t.Amount ?? 0) != 0 && t.CreateUser == userid);
......
......@@ -322,13 +322,13 @@ private List<ExtractTransDto> StandDataFormat(int hospitalId, int allotId, List<
DoctorName = item.DoctorName,
PersonnelNumber = item.PersonnelNumber,
Value = item.Fee ?? 0,
OutDoctorAccounting = firstDic?.OutDoctorAccounting?.AccountingUnit,
OutNurseAccounting = firstDic?.OutNurseAccounting?.AccountingUnit,
OutTechnicAccounting = firstDic?.OutTechnicAccounting?.AccountingUnit,
InpatDoctorAccounting = firstDic?.InpatDoctorAccounting?.AccountingUnit,
InpatNurseAccounting = firstDic?.InpatNurseAccounting?.AccountingUnit,
InpatTechnicAccounting = firstDic?.InpatTechnicAccounting?.AccountingUnit,
SpecialAccounting = firstDic?.SpecialAccounting?.AccountingUnit ?? dept,
OutDoctorAccounting = firstDic?.OutDoctorAccounting,
OutNurseAccounting = firstDic?.OutNurseAccounting,
OutTechnicAccounting = firstDic?.OutTechnicAccounting,
InpatDoctorAccounting = firstDic?.InpatDoctorAccounting,
InpatNurseAccounting = firstDic?.InpatNurseAccounting,
InpatTechnicAccounting = firstDic?.InpatTechnicAccounting,
SpecialAccounting = firstDic?.SpecialAccounting ?? dept,
EName = types.FirstOrDefault(w => w.Id == item.TypeId)?.EName,
};
data.Add(d);
......
......@@ -37,7 +37,7 @@ public class RecognitionDataFormat
{ DataFormat.百分比, new[] { 9,10 } },
{ DataFormat.科学计数, new[] { 11 } },
{ DataFormat.分数, new[] { 12,13 } },
{ DataFormat.日期, new[] { 14,15,16,17 } },
{ DataFormat.日期YYYYMMDD, new[] { 14,15,16,17 } },
};
public static DataFormat GetDataFormat(short type)
......
......@@ -322,7 +322,7 @@ public ApiResponse UpdatePerson(PerEmployeeResponse request)
throw new PerformanceException($"“关键信息缺失”请补全!");
}
var employees = peremployeeRepository.GetEntities(t => t.AllotId == request.AllotId && t.PersonnelNumber == request.PersonnelNumber);
var employees = peremployeeRepository.GetEntities(t => t.AllotId == request.AllotId && t.Id == request.Id);
if (employees == null)
throw new PerformanceException($"员工工号为“{request.PersonnelNumber}”不存在,请重新添加!");
......@@ -426,19 +426,35 @@ public IEnumerable<DeptdicResponse> GetDepartments(int hospitalId)
var depts = perdeptdicRepository.GetEntities(t => t.HospitalId == hospitalId);
if (depts == null || !depts.Any()) return null;
var result = depts.GroupBy(t => new { t.HISDeptName, t.Department }).Select(t => new DeptdicResponse
string GetDeptdic(List<per_dept_dic> dics, string department, string hISDeptName, UnitType unitType, string source = "")
{
if (hISDeptName == "介入室")
{
}
var dic = dics.FirstOrDefault(group => group.Department == department && group.HISDeptName == hISDeptName && group.UnitType == unitType.ToString() && group.Source == source);
if (dic == null)
dic = dics.FirstOrDefault(group => group.Department == department && group.HISDeptName == hISDeptName && group.UnitType == unitType.ToString());
return dic?.AccountingUnit;
}
var result = depts
.GroupBy(t => new { t.HISDeptName, t.Department })
.Select(t => new DeptdicResponse
{
HospitalId = hospitalId,
HISDeptName = t.Key.HISDeptName,
Department = t.Key.Department,
OutDoctorAccounting = GetDeptdic(t.FirstOrDefault(group => group.Department == t.Key.Department && group.HISDeptName == t.Key.HISDeptName && group.UnitType == UnitType.医生组.ToString() && group.Source == "门诊")),
OutNurseAccounting = GetDeptdic(t.FirstOrDefault(group => group.Department == t.Key.Department && group.HISDeptName == t.Key.HISDeptName && group.UnitType == UnitType.护理组.ToString() && group.Source == "门诊")),
OutTechnicAccounting = GetDeptdic(t.FirstOrDefault(group => group.Department == t.Key.Department && group.HISDeptName == t.Key.HISDeptName && group.UnitType == UnitType.医技组.ToString() && group.Source == "门诊")),
InpatDoctorAccounting = GetDeptdic(t.FirstOrDefault(group => group.Department == t.Key.Department && group.HISDeptName == t.Key.HISDeptName && group.UnitType == UnitType.医生组.ToString() && group.Source == "住院")),
InpatNurseAccounting = GetDeptdic(t.FirstOrDefault(group => group.Department == t.Key.Department && group.HISDeptName == t.Key.HISDeptName && group.UnitType == UnitType.护理组.ToString() && group.Source == "住院")),
InpatTechnicAccounting = GetDeptdic(t.FirstOrDefault(group => group.Department == t.Key.Department && group.HISDeptName == t.Key.HISDeptName && group.UnitType == UnitType.医技组.ToString() && group.Source == "住院")),
LogisticsAccounting = GetDeptdic(t.FirstOrDefault(group => group.Department == t.Key.Department && group.HISDeptName == t.Key.HISDeptName && group.UnitType == UnitType.行政后勤.ToString())),
SpecialAccounting = GetDeptdic(t.FirstOrDefault(group => group.Department == t.Key.Department && group.HISDeptName == t.Key.HISDeptName && group.UnitType == UnitType.特殊核算组.ToString())),
OutDoctorAccounting = GetDeptdic(t.ToList(), t.Key.Department, t.Key.HISDeptName, UnitType.医生组, "门诊"),
OutNurseAccounting = GetDeptdic(t.ToList(), t.Key.Department, t.Key.HISDeptName, UnitType.护理组, "门诊"),
OutTechnicAccounting = GetDeptdic(t.ToList(), t.Key.Department, t.Key.HISDeptName, UnitType.医技组, "门诊"),
InpatDoctorAccounting = GetDeptdic(t.ToList(), t.Key.Department, t.Key.HISDeptName, UnitType.医生组, "住院"),
InpatNurseAccounting = GetDeptdic(t.ToList(), t.Key.Department, t.Key.HISDeptName, UnitType.护理组, "住院"),
InpatTechnicAccounting = GetDeptdic(t.ToList(), t.Key.Department, t.Key.HISDeptName, UnitType.医技组, "住院"),
LogisticsAccounting = GetDeptdic(t.ToList(), t.Key.Department, t.Key.HISDeptName, UnitType.行政后勤),
SpecialAccounting = GetDeptdic(t.ToList(), t.Key.Department, t.Key.HISDeptName, UnitType.特殊核算组),
CreateTime = t.Max(group => group.CreateTime),
IsVerify = t.Min(w => w.IsVerify) ?? 1,
});
......@@ -472,19 +488,6 @@ public IEnumerable<DeptdicResponse> GetDepartments(int hospitalId)
return ("", new string[] { });
}
private Deptdic GetDeptdic(per_dept_dic dic)
{
if (dic == null) return new Deptdic() { IsVerify = 1 };
return new Deptdic
{
Id = dic.Id,
AccountingUnit = dic.AccountingUnit,
IsVerify = dic.IsVerify ?? 1,
VerifyMessage = dic.VerifyMessage,
};
}
/// <summary>
/// 创建科室核算信息
/// </summary>
......@@ -718,17 +721,8 @@ private string[] GetUnitType(int userId)
public HandsonTable GetBatchPersonStructrue(int hospitalId)
{
var hos = perforHospitalRepository.GetEntity(t => t.ID == hospitalId);
var cols = hos.IsOwnerQuery == 1 ? PersonPassword.Select(t => t.Item2).ToArray() : Person.Select(t => t.Item2).ToArray();
var permissions = hos.IsOwnerQuery == 1 ? PersonPassword.Select(t => new collect_permission
{
HeadName = t.Item2,
Visible = 1
}).ToList() : Person.Select(t => new collect_permission
{
HeadName = t.Item2,
Visible = 1
}).ToList();
var cols = Person.Select(t => t.Item2).ToArray();
var permissions = Person.Select(t => new collect_permission { HeadName = t.Item2, Visible = 1 }).ToList();
var result = new HandsonTable((int)SheetType.Unidentifiable, cols, permissions);
var deptdics = perdeptdicRepository.GetEntities(t => t.HospitalId == hospitalId);
......@@ -1073,23 +1067,6 @@ private void DeptDicList(int HospitalId, List<per_dept_dic> deptDics, DeptdicHan
return result;
}
public static List<(string, string, Func<PersonePassword, object>)> PersonPassword { get; } = new List<(string, string, Func<PersonePassword, object>)>
{
(nameof(PersonePassword.UnitType), "核算组别", t => t.UnitType),
(nameof(PersonePassword.AccountingUnit), "核算单元", t => t.AccountingUnit),
(nameof(PersonePassword.Department), "科室名称", t => t.Department),
(nameof(PersonePassword.DoctorName), "姓名" ,t => t.DoctorName),
(nameof(PersonePassword.PersonnelNumber), "员工工号", t => t.PersonnelNumber),
//(nameof(PersonePassword.JobCategory), "正式/临聘", t => t.JobCategory),
//(nameof(PersonePassword.Duty), "职务", t => t.Duty),
//(nameof(PersonePassword.JobTitle), "职称", t => t.JobTitle),
//(nameof(PersonePassword.AttendanceDay), "出勤天数", t => t.AttendanceDay),
//(nameof(PersonePassword.ReservedRatio), "预留比例", t => t.ReservedRatio),
//(nameof(PersonePassword.BankCard), "银行卡号", t => t.BankCard),
//(nameof(PersonePassword.Password), "密码", t => t.Password),
//(nameof(PersonePassword.Remark), "备注", t => t.Remark),
};
public static List<(string, string, Func<per_employee, object>)> Person { get; } = new List<(string, string, Func<per_employee, object>)>
{
(nameof(per_employee.UnitType), "核算组别", t => t.UnitType),
......
......@@ -181,7 +181,7 @@ public List<SecondColumnDictionary> GetTableHeaderDictionary(ComputeMode compute
/*
此处数据需要额外注意,前端显示规则:通过isTrue=true显示,显示名称为label
*/
var alias = _cofaliasRepository.GetEntities(t => t.HospitalId == allot.HospitalId && t.Route == "/second_entering") ?? new List<cof_alias>();
var alias = _cofaliasRepository.GetEntities(t => t.HospitalId == allot.HospitalId && t.Route == "/second_entering" && t.States == 1) ?? new List<cof_alias>();
Func<string, string, string> getAlias = (name, def) =>
{
try
......@@ -229,6 +229,27 @@ public List<SecondColumnDictionary> GetTableHeaderDictionary(ComputeMode compute
maps.Add(new SecondColumnDictionary(getAlias(nameof(ag_bodysource.TitleCoefficient), "职称系数"), nameof(ag_bodysource.TitleCoefficient), false, 203, color: "title_color", isNumber: true));
maps.Add(new SecondColumnDictionary(getAlias(nameof(ag_bodysource.TitlePerformanceScore), "职称绩效得分"), nameof(ag_bodysource.TitlePerformanceScore), false, 204, color: "title_color", isNumber: true));
}
// 扩展字典
if (alias != null && alias.Any())
{
List<string> notCalculate = new List<string>
{
nameof(ag_bodysource.Post),
nameof(ag_bodysource.StaffCoefficient),
nameof(ag_bodysource.ActualAttendance),
nameof(ag_bodysource.JobTitle),
nameof(ag_bodysource.TitleCoefficient),
nameof(ag_bodysource.TitlePerformanceScore),
};
foreach (var item in alias)
{
if (!maps.Any(w => w.Key.Equals(item.Name, StringComparison.OrdinalIgnoreCase))
&& !notCalculate.Contains(item.Name))
{
maps.Add(new SecondColumnDictionary(item.Alias, item.Name, false, item.Sort, color: "title_color", isNumber: false, expand: true));
}
}
}
// 工作量
if (computeMode != ComputeMode.NotCalculate)
......@@ -294,6 +315,35 @@ public List<SecondColumnDictionary> GetTableHeaderDictionary(ComputeMode compute
}
/// <summary>
/// 补充内容 扩展字段,通过配置额外展示
/// </summary>
/// <param name="allot"></param>
/// <param name="dic"></param>
/// <param name="rows"></param>
public void RowsExpand(per_allot allot, List<SecondColumnDictionary> dic, List<Dictionary<string, object>> rows)
{
if (dic != null && dic.Any(w => w.Expand))
{
var employees = _perallotRepository.QueryEmployee(allot.ID);
foreach (var row in rows)
{
var number = row.GetString(nameof(ag_bodysource.WorkNumber));
Dictionary<string, object> pairs = new Dictionary<string, object>();
var emp = employees.FirstOrDefault(w => w.PersonnelNumber == number);
if (emp != null)
pairs = JsonHelper.Deserialize<Dictionary<string, object>>(JsonHelper.Serialize(emp));
foreach (var item in dic.Where(w => w.Expand))
{
var value = pairs.GetString(item.Key);
row.AddOrUpdate(item.Key, value);
}
}
}
}
/// <summary>
/// 加载已保存工作量数据,加载时区分:已提交和未提交
/// </summary>
/// <param name="allot"></param>
......@@ -423,9 +473,14 @@ public List<SecondColumnDictionary> GetTableHeaderDictionary(ComputeMode compute
// 已提交
if (second.Status.HasValue && status.Contains(second.Status.Value))
{
foreach (var item in headDynamic.Where(w => w.FieldId.StartsWithIgnoreCase("Workload_Ratio_")).OrderBy(t => t.Id))
var groupDatas = headDynamic
.Where(w => w.FieldId.StartsWithIgnoreCase("Workload_Ratio_"))
.GroupBy(w => new { w.WorkTypeId, w.SecondId, w.FieldId, w.FieldName })
.Select(w => new { w.Key.FieldId, Value = w.OrderByDescending(w => w.Id).FirstOrDefault()?.Value ?? 0 });
foreach (var item in groupDatas)
{
head.AddOrUpdate(item.FieldId, item.Value ?? 0);
head.AddOrUpdate(item.FieldId, item.Value);
}
}
// 未提交
......
......@@ -525,7 +525,7 @@ public void SaveSecondAllotHeadData(int secondId, string json)
if (workValue == null || !workValue.Any())
return;
foreach (var value in workValue)
foreach (var value in workValue.Distinct())
{
for (int i = 0; i < prefix.Length; i++)
{
......
......@@ -1741,6 +1741,26 @@ public bool ConfirmAudit(int userId, SecondAuditRequest request)
return result;
}
/// <summary>
/// 审计
/// </summary>
/// <param name="userId"></param>
/// <param name="secondIds"></param>
/// <returns></returns>
public bool SecondMark(int userId, int[] secondIds)
{
var seconds = agsecondallotRepository.GetEntities(t => secondIds.Contains(t.Id));
if (seconds == null || !seconds.Any())
throw new PerformanceException("未能找到二次分配核算记录!");
foreach (var item in seconds)
{
item.MarkStatus = 1;
item.MarkUser = userId;
item.MarkTime = DateTime.Now;
}
return agsecondallotRepository.UpdateRange(seconds.ToArray());
}
///// <summary>
///// 审核结束 添加至二次绩效汇总
///// </summary>
......
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