Commit 3cc6037d by ruyun.zhang@suvalue.com

Merge branch 'release/吴江'

parents a9705c11 1ac1da41
......@@ -147,9 +147,9 @@ public ApiResponse<UserResponse> UpdateSelf([CustomizeValidator(RuleSet = "Self"
/// <returns></returns>
[Route("list")]
[HttpPost]
public ApiResponse<List<UserResponse>> List()
public ApiResponse<List<UserResponse>> List([FromBody] UserRequest request)
{
var userList = _userService.GetUserList(_claim.GetUserId());
var userList = _userService.GetUserList(_claim.GetUserId(),request.Role);
return new ApiResponse<List<UserResponse>>(ResponseType.OK, "ok", userList);
}
......
......@@ -458,70 +458,8 @@ public ApiResponse Reserved([FromBody] ReservedRequest request)
return new ApiResponse(ResponseType.ParameterError, "绩效信息无效");
var userid = _claim.GetUserId();
var reserveds = _allotService.GetReserved(request.HospitalId, request.Year, userid);
#region 格式转换
var result = reserveds?.Select(w => new
{
w.HospitalId,
w.Year,
w.UnitType,
w.AccountingUnit,
w.EmployeeName,
w.JobNumber,
JanReseFee = w.JanFee * w.JanRatio,
JanGiveFee = w.JanFee * (1 - w.JanRatio),
FebReseFee = w.FebFee * w.FebRatio,
FebGiveFee = w.FebFee * (1 - w.FebRatio),
MarReseFee = w.MarFee * w.MarRatio,
MarGiveFee = w.MarFee * (1 - w.MarRatio),
AprReseFee = w.AprFee * w.AprRatio,
AprGiveFee = w.AprFee * (1 - w.AprRatio),
MayReseFee = w.MayFee * w.MayRatio,
MayGiveFee = w.MayFee * (1 - w.MayRatio),
JunReseFee = w.JunFee * w.JunRatio,
JunGiveFee = w.JunFee * (1 - w.JunRatio),
JulReseFee = w.JulFee * w.JulRatio,
JulGiveFee = w.JulFee * (1 - w.JulRatio),
AugReseFee = w.AugFee * w.AugRatio,
AugGiveFee = w.AugFee * (1 - w.AugRatio),
SepReseFee = w.SepFee * w.SepRatio,
SepGiveFee = w.SepFee * (1 - w.SepRatio),
OctReseFee = w.OctFee * w.OctRatio,
OctGiveFee = w.OctFee * (1 - w.OctRatio),
NovReseFee = w.NovFee * w.NovRatio,
NovGiveFee = w.NovFee * (1 - w.NovRatio),
DecReseFee = w.DecFee * w.DecRatio,
DecGiveFee = w.DecFee * (1 - w.DecRatio),
TotalReseFee = (w.JanFee * w.JanRatio ?? 0) + (w.FebFee * w.FebRatio ?? 0) + (w.MarFee * w.MarRatio ?? 0)
+ (w.AprFee * w.AprRatio ?? 0) + (w.MayFee * w.MayRatio ?? 0) + (w.JunFee * w.JunRatio ?? 0)
+ (w.JulFee * w.JulRatio ?? 0) + (w.AugFee * w.AugRatio ?? 0) + (w.SepFee * w.SepRatio ?? 0)
+ (w.OctFee * w.OctRatio ?? 0) + (w.NovFee * w.NovRatio ?? 0) + (w.DecFee * w.DecRatio ?? 0),
TotalGiveFee = (w.JanFee * (1 - w.JanRatio) ?? 0) + (w.FebFee * (1 - w.FebRatio) ?? 0) + (w.MarFee * (1 - w.MarRatio) ?? 0)
+ (w.AprFee * (1 - w.AprRatio) ?? 0) + (w.MayFee * (1 - w.MayRatio) ?? 0) + (w.JunFee * (1 - w.JunRatio) ?? 0)
+ (w.JulFee * (1 - w.JulRatio) ?? 0) + (w.AugFee * (1 - w.AugRatio) ?? 0) + (w.SepFee * (1 - w.SepRatio) ?? 0)
+ (w.OctFee * (1 - w.OctRatio) ?? 0) + (w.NovFee * (1 - w.NovRatio) ?? 0) + (w.DecFee * (1 - w.DecRatio) ?? 0),
});
#endregion 格式转换
return new ApiResponse(ResponseType.OK, result);
return new ApiResponse(ResponseType.OK, reserveds);
}
/// <summary>
......@@ -555,5 +493,18 @@ public IActionResult DownloadCurrentCalculationTable(int allotid)
var memi = provider.Mappings[".xlsx"];
return File(memoryStream, memi, Path.GetFileName(fileInfo.Name));
}
/// <summary>
/// 查询个人绩效
/// </summary>
/// <returns></returns>
[Route("owner/query")]
[HttpGet]
public ApiResponse GetOwnerPerformance()
{
var userid = _claim.GetUserId();
var res = _allotService.GetOwnerPerformance(userid);
return new ApiResponse(ResponseType.OK, res);
}
}
}
......@@ -109,10 +109,78 @@ public ApiResponse SaveCollectData(int allotId, [FromBody] SaveCollectData reque
{
if (allotId <= 0)
return new ApiResponse(ResponseType.ParameterError, "参数无效");
collectService.SaveCollectData(allotId, request);
collectService.SaveCollectData(allotId, request, claim.GetUserId());
return new ApiResponse(ResponseType.OK);
}
/// <summary>
/// 提交采集信息
/// </summary>
[HttpPost]
[Route("submitcollectdata/{allotId}")]
public ApiResponse SubmitCollectData(int allotId, [FromBody] SaveCollectData request)
{
if (allotId <= 0)
return new ApiResponse(ResponseType.ParameterError, "参数无效");
collectService.SaveCollectData(allotId, request, claim.GetUserId(), 2);
return new ApiResponse(ResponseType.OK);
}
}
}
\ No newline at end of file
/// <summary>
/// 数据录入显示列表
/// </summary>
[HttpPost]
[Route("collectdatalist/{hospitalId}")]
public ApiResponse CollectDataList(int hospitalId)
{
if (hospitalId <= 0)
return new ApiResponse(ResponseType.ParameterError, "参数无效");
var data = collectService.CollectDataList(hospitalId);
return new ApiResponse(ResponseType.OK, data);
}
/// <summary>
/// 核算办显示列表
/// </summary>
[HttpPost]
[Route("performanceforlist/{allotId}")]
public ApiResponse PerformanceforList(int allotId)
{
if (allotId <= 0)
return new ApiResponse(ResponseType.ParameterError, "参数无效");
var data = collectService.PerformanceforList(allotId);
return new ApiResponse(ResponseType.OK, data);
}
/// <summary>
/// 科室显示列表
/// </summary>
[HttpPost]
[Route("departmentlist/{allotId}")]
public ApiResponse DepartmentList(int allotId, [FromQuery] int userId)
{
if (allotId <= 0)
return new ApiResponse(ResponseType.ParameterError, "参数无效");
var data = collectService.DepartmentList(allotId, userId);
return new ApiResponse(ResponseType.OK, data);
}
/// <summary>
/// 提交数据审核
/// </summary>
[HttpPost]
[Route("collectdataaudit")]
public ApiResponse CollectDataAudit([FromBody] CollectAuditRequest request)
{
if (request == null || request.AllotId <= 0 || request.UserId <= 0 || !new int[] { 3, 4 }.Contains(request.Status))
return new ApiResponse(ResponseType.ParameterError, "参数无效");
var result = collectService.CollectDataAudit(request.AllotId, request.UserId, request.Status);
string remark = request.Status == 3 ? "审核通过" : "驳回成功";
return result ? new ApiResponse(ResponseType.OK, remark) : new ApiResponse(ResponseType.Fail, "操作失败");
}
}
}
......@@ -813,5 +813,44 @@ public ApiResponse SaveDrugtypeFactor([FromBody] DrugtypeFactorRequest request)
}
#endregion
/// <summary>
/// 加载上次
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost("loadthelasttime")]
public ApiResponse LoadTheLastTime([FromBody] CopyRequest request)
{
var allot = _allotService.GetAllot(request.AllotId);
if (allot == null)
return new ApiResponse(ResponseType.ParameterError, "AllotID错误");
_configService.NewCopy(request);
return new ApiResponse(ResponseType.OK, "保存成功!");
}
/// <summary>
/// 下拉
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost("copydropdown")]
public ApiResponse CopyDropDown()
{
var result = new List<CopyDrop>
{
new CopyDrop{Label="人员字典",Value="personnels"},
new CopyDrop{Label="工作量配置",Value="workItems"},
new CopyDrop{Label="收入费用类别",Value="drugTypes"},
new CopyDrop{Label="支出费用类别",Value="drugTypeDisburses"},
new CopyDrop{Label="费用类别系数",Value="drugTypeFactors"},
new CopyDrop{Label="科室类型",Value="deptTypes"},
new CopyDrop{Label="二次绩效配置",Value="agains"},
new CopyDrop{Label="核算单元及组别",Value="accountings"},
}; ;
return new ApiResponse(ResponseType.OK, result);
}
}
}
\ No newline at end of file
......@@ -436,8 +436,8 @@ public ApiResponse Import([FromForm] IFormCollection form)
if (!FileHelper.CreateFile(path, bytes))
return new ApiResponse(ResponseType.Fail, $"{file.FileName}上传失败");
}
employeeService.ImpoerAprEmployees(allotid, path, claim.GetUserId());
return new ApiResponse(ResponseType.OK);
var result = employeeService.ImpoerAprEmployees(allotid, path, claim.GetUserId());
return result == "" ? new ApiResponse(ResponseType.OK) : new ApiResponse(ResponseType.ParameterError, result);
}
/// <summary>
......@@ -469,7 +469,7 @@ public ApiResponse AprOverview(int allotId)
var result = new List<Dictionary<string, string>>();
if (role.Any(t => roleType.Contains(t.Type.Value)))
result = employeeService.GetOtherPerStats(allotId,user.Department??"");
result = employeeService.GetOtherPerStats(allotId, user.Department ?? "");
else
result = employeeService.GetOtherPerStats(allotId);
......
......@@ -269,5 +269,22 @@ public ApiResponse SaveDeptHands(int hospitalId, SaveCollectData request)
personService.SaveDeptDicHands(hospitalId, request);
return new ApiResponse(ResponseType.OK);
}
/// <summary>
/// 重新加载人员字典
/// </summary>
/// <param name="hospitalId"></param>
/// <param name="allotId"></param>
/// <returns></returns>
[HttpPost]
[Route("peson/{hospitalId}/reloadPersonnel/{allotId}")]
public ApiResponse ReloadPersonnel(int hospitalId, int allotId)
{
var result = personService.ReloadPersonnel(hospitalId, allotId);
if (result)
return new ApiResponse(ResponseType.OK, result);
else
return new ApiResponse(ResponseType.Error, result);
}
}
}
......@@ -218,5 +218,52 @@ public ApiResponse MenuReport([CustomizeValidator(RuleSet = "Menu"), FromBody] R
var list = reportService.MenuReport(request);
return new ApiResponse(ResponseType.OK, "", list);
}
/// 菜单报表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("operation")]
[HttpPost]
public ApiResponse Operation([FromBody] ReportRequest request)
{
if (request == null)
return new ApiResponse(ResponseType.Fail, "参数错误!");
var list = reportService.Operation(request);
return new ApiResponse(ResponseType.OK, "", list);
}
/// <summary>
/// 绩效汇报表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("table/normal")]
[HttpPost]
public ApiResponse TableNormal([FromBody] ConditionRequest request)
{
if (request == null)
return new ApiResponse(ResponseType.OK, "", new TableData());
var list = reportService.TableNormal(request);
return new ApiResponse(ResponseType.OK, "", list);
}
/// <summary>
/// 科室绩效对比
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("table/special")]
[HttpPost]
public ApiResponse TableSpecial([FromBody] ConditionRequest request)
{
if (request == null)
return new ApiResponse(ResponseType.OK, "", new TableData());
var list = reportService.TableSpecial(request);
return new ApiResponse(ResponseType.OK, "", list);
}
}
}
\ No newline at end of file
......@@ -384,10 +384,10 @@ public ApiResponse AuditResult([FromBody] SecondAuditRequest request)
{
var userid = claimService.GetUserId();
var result = secondAllotService.ConfirmAudit(userid, request);
if (request.IsPass == 1)
{
resultComputeService.SaveSecondReserved(request.SecondId);
}
//if (request.IsPass == 1)
//{
// resultComputeService.SaveSecondReserved(request.SecondId);
//}
return result ? new ApiResponse(ResponseType.OK, "操作成功") : new ApiResponse(ResponseType.Fail, "操作失败");
}
......@@ -575,6 +575,8 @@ public ApiResponse RedistributionLoad([FromBody] SecondLoadDto request)
overrideMode = (EmployeeSource)request.OverrideMode;
var result = _redistributionService.Load(request.SecondId, (ComputeMode)request.ComputeMode, overrideMode);
_redistributionService.ClearInvalidValue(result.Body?.Data);
return new ApiResponse(ResponseType.OK, result);
}
catch (PerformanceException ex)
......@@ -702,6 +704,7 @@ public ApiResponse RedistributionCompute([FromBody] SecondComputeDto request)
// 重算部分数据
_redistributionService.RedistributionCompute((ComputeMode)request.ComputeMode, request.Head, cleanDatas);
_redistributionService.ClearInvalidValue(cleanDatas);
var dic = _redistributionService.GetTableHeaderDictionary((ComputeMode)request.ComputeMode, allot, second, loads, workloadGroups);
return new ApiResponse(ResponseType.OK, new { Head = request.Head, Body = cleanDatas, Dic = dic });
}
......
......@@ -18,6 +18,7 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace Performance.Api.Controllers
......@@ -230,14 +231,18 @@ public ApiResponse NewExtractData([CustomizeValidator, FromBody] ExtractRequest
if (isSingle)
{
logger.LogInformation("同一项目中进行提取");
Task.Run(() =>
{
using (var scope = serviceScopeFactory.CreateScope())
{
var scopedServices = scope.ServiceProvider.GetRequiredService<ExtractService>();
logger.LogInformation("提取绩效数据参数:" + JsonHelper.Serialize(new { allotId = allot.ID, hospitalId = allot.HospitalId, userId = claim.GetUserId() }));
string extractFilePath = scopedServices.Main(allot.ID, allot.HospitalId, email, "User" + claim.GetUserId(), filePath, isSingle);
}
});
Thread.Sleep(1000);
}
else
{
......@@ -280,6 +285,21 @@ public ApiResponse NewExtractData([CustomizeValidator, FromBody] ExtractRequest
// B 使用配置作为模板
}
/// <summary>
/// 提取日志
/// </summary>
/// <returns></returns>
[HttpPost("PrejudgeLog/{allotId}")]
public ApiResponse PrejudgeLog([FromRoute] int allotId)
{
var allot = allotService.GetAllot(allotId);
if (allot == null)
return new ApiResponse(ResponseType.ParameterError, "AllotID错误");
var result=logService.GetLogDbug(allotId);
return new ApiResponse(ResponseType.OK, result);
}
#endregion 新版提取
/// <summary>
......@@ -434,5 +454,7 @@ public IActionResult ExtractIncome(int allotId)
var memi = provider.Mappings[fileExt];
return File(memoryStream, memi, Path.GetFileName(filepath));
}
}
}
......@@ -8,7 +8,7 @@ public JobRegistry()
{
//Schedule<ExtractDataJob>().ToRunNow().AndEvery(1).Days().At(23, 0);
//Schedule<ExtractDataJob>().ToRunEvery(1).Days().At(23, 0);
Schedule<ExtractGenerateJob>().ToRunEvery(1).Days().At(14, 00);
Schedule<ExtractGenerateJob>().ToRunEvery(1).Days().At(23, 00);
}
}
}
......@@ -8,7 +8,7 @@
},
"AppConnection": {
//"PerformanceConnectionString": "server=112.124.13.17;database=db_performance;uid=suvalue;pwd=suvalue2016;pooling=true;charset=utf8;convert zero datetime=true;port=3306;connection timeout=120;max pool size=512;allow user variables=true;",
"PerformanceConnectionString": "server=192.168.18.166;database=db_performance_screen;uid=root;pwd=1234qwer;pooling=true;charset=utf8;convert zero datetime=true;port=3306;connection timeout=120;max pool size=512;allow user variables=true;",
"PerformanceConnectionString": "server=192.168.18.166;database=db_test_zhangye;uid=root;pwd=1234qwer;pooling=true;charset=utf8;convert zero datetime=true;port=3306;connection timeout=120;max pool size=512;allow user variables=true;",
"HangfireConnectionString": "server=192.168.18.166;database=db_hangfire;uid=root;pwd=1234qwer;port=3306;allow user variables=true;",
"RedisConnectionString": "116.62.245.55:6379,defaultDatabase=2"
},
......
......@@ -43,7 +43,7 @@
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AccountController.List">
<member name="M:Performance.Api.Controllers.AccountController.List(Performance.DtoModels.UserRequest)">
<summary>
用户列表
</summary>
......@@ -308,6 +308,12 @@
<param name="allotid"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AllotController.GetOwnerPerformance">
<summary>
查询个人绩效
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.BudgetController.Query(Performance.DtoModels.Request.BudgetRequest)">
<summary>
预算管理查询(包含金额、占比)
......@@ -397,6 +403,31 @@
保存采集内容
</summary>
</member>
<member name="M:Performance.Api.Controllers.CollectController.SubmitCollectData(System.Int32,Performance.DtoModels.SaveCollectData)">
<summary>
提交采集信息
</summary>
</member>
<member name="M:Performance.Api.Controllers.CollectController.CollectDataList(System.Int32)">
<summary>
数据录入显示列表
</summary>
</member>
<member name="M:Performance.Api.Controllers.CollectController.PerformanceforList(System.Int32)">
<summary>
核算办显示列表
</summary>
</member>
<member name="M:Performance.Api.Controllers.CollectController.DepartmentList(System.Int32,System.Int32)">
<summary>
科室显示列表
</summary>
</member>
<member name="M:Performance.Api.Controllers.CollectController.CollectDataAudit(Performance.DtoModels.CollectAuditRequest)">
<summary>
提交数据审核
</summary>
</member>
<member name="M:Performance.Api.Controllers.ComputeController.GetCompute(Performance.DtoModels.ComputerRequest)">
<summary>
获取绩效发放列表
......@@ -516,6 +547,76 @@
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ComputeController.Batch(Performance.DtoModels.Request.BatchRequest)">
<summary>
全院绩效进行批次标记
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ComputeController.GetAdminPerDownload(System.Int32)">
<summary>
下载院领导、中层、工勤组绩效
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ComputeController.AllComputeDownload(System.Int32)">
<summary>
下载全院绩效列表
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ComputeController.AllComputeByPMDownLoad(System.Int32)">
<summary>
下载全院绩效列表(人事科)
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ComputeController.GethosdataView(Performance.DtoModels.ComputerRequest)">
<summary>
全院核算绩效发放(视图)
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ComputeController.GethosdataView(System.Int32)">
<summary>
全院核算绩效发放(视图) 下载
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ComputeController.AllComputeView(Performance.DtoModels.ComputerRequest)">
<summary>
获取全院绩效列表(视图)
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ComputeController.AllComputeViewDownload(System.Int32)">
<summary>
下载全院绩效列表
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ComputeController.AllComputeViewByPM(Performance.DtoModels.ComputerRequest)">
<summary>
获取全院绩效列表(人事科)
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ComputeController.AllComputeByPMViewDownLoad(System.Int32)">
<summary>
下载全院绩效列表(人事科)
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ConfigController.GetDrugtypeList(Performance.DtoModels.DrugpropRequest)">
<summary>
获取 药占比类型信息列表
......@@ -742,6 +843,20 @@
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ConfigController.LoadTheLastTime(Performance.DtoModels.CopyRequest)">
<summary>
加载上次
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ConfigController.CopyDropDown">
<summary>
下拉
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.CostTransferController.SubmitApplications(Performance.DtoModels.CostTransferRequest)">
<summary>
申请划拨
......@@ -1378,6 +1493,14 @@
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.PersonController.ReloadPersonnel(System.Int32,System.Int32)">
<summary>
重新加载人员字典
</summary>
<param name="hospitalId"></param>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="T:Performance.Api.Controllers.ReportController">
<summary>
报表
......@@ -1441,6 +1564,21 @@
<param name="request"></param>
<returns></returns>
</member>
<!-- Badly formed XML comment ignored for member "M:Performance.Api.Controllers.ReportController.Operation(Performance.DtoModels.ReportRequest)" -->
<member name="M:Performance.Api.Controllers.ReportController.TableNormal(Performance.DtoModels.ConditionRequest)">
<summary>
绩效汇报表
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportController.TableSpecial(Performance.DtoModels.ConditionRequest)">
<summary>
科室绩效对比
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportGlobalController.GetAllReportGlobal(System.Int32)">
<summary>
获取报表配置信息
......@@ -1822,6 +1960,12 @@
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.TemplateController.PrejudgeLog(System.Int32)">
<summary>
提取日志
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.TemplateController.DownFile(Performance.DtoModels.AllotRequest)">
<summary>
从WebAPI下载文件
......
......@@ -1918,6 +1918,31 @@
<member name="P:Performance.DtoModels.AprAmountAuditRequest.Remark">
<summary> 备注 </summary>
</member>
<member name="P:Performance.DtoModels.Request.BatchDetail.UnitType">
<summary>
核算单元分类
</summary>
</member>
<member name="P:Performance.DtoModels.Request.BatchDetail.AccountingUnit">
<summary>
核算单元
</summary>
</member>
<member name="P:Performance.DtoModels.Request.BatchDetail.EmployeeName">
<summary>
人员姓名
</summary>
</member>
<member name="P:Performance.DtoModels.Request.BatchDetail.JobNumber">
<summary>
工号
</summary>
</member>
<member name="P:Performance.DtoModels.Request.BatchDetail.Batch">
<summary>
批次
</summary>
</member>
<member name="P:Performance.DtoModels.Request.ComputerAvgRequest.PositionName">
<summary>
绩效核算人群
......@@ -1968,6 +1993,11 @@
参数值
</summary>
</member>
<member name="P:Performance.DtoModels.CollectAuditRequest.Status">
<summary>
3 审核通过 4 驳回
</summary>
</member>
<member name="P:Performance.DtoModels.ComputerRequest.ComputeId">
<summary>
绩效数据id
......@@ -2394,6 +2424,9 @@
<member name="P:Performance.DtoModels.ReportRequest.Month">
<summary></summary>
</member>
<member name="P:Performance.DtoModels.ReportRequest.AccountingUnit">
<summary> 科室 </summary>
</member>
<member name="P:Performance.DtoModels.SecondAuditRequest.SecondId">
<summary> 二次绩效Id </summary>
</member>
......@@ -2985,6 +3018,11 @@
职称
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResponse.Batch">
<summary>
批号
</summary>
</member>
<member name="P:Performance.DtoModels.CostTransferResponse.AllotId">
<summary>
......@@ -3294,6 +3332,101 @@
药占比对应系数
</summary>
</member>
<member name="P:Performance.DtoModels.EmployeeReservedDto.HospitalId">
<summary>
</summary>
</member>
<member name="P:Performance.DtoModels.EmployeeReservedDto.Year">
<summary>
</summary>
</member>
<member name="P:Performance.DtoModels.EmployeeReservedDto.UnitType">
<summary>
</summary>
</member>
<member name="P:Performance.DtoModels.EmployeeReservedDto.AccountingUnit">
<summary>
核算单元
</summary>
</member>
<member name="P:Performance.DtoModels.EmployeeReservedDto.EmployeeName">
<summary>
人员姓名
</summary>
</member>
<member name="P:Performance.DtoModels.EmployeeReservedDto.JobNumber">
<summary>
工号
</summary>
</member>
<member name="P:Performance.DtoModels.EmployeeReservedDto.JanReseFee">
<summary>
1月
</summary>
</member>
<member name="P:Performance.DtoModels.EmployeeReservedDto.FebReseFee">
<summary>
2月
</summary>
</member>
<member name="P:Performance.DtoModels.EmployeeReservedDto.MarReseFee">
<summary>
3月
</summary>
</member>
<member name="P:Performance.DtoModels.EmployeeReservedDto.AprReseFee">
<summary>
4月
</summary>
</member>
<member name="P:Performance.DtoModels.EmployeeReservedDto.MayReseFee">
<summary>
5月
</summary>
</member>
<member name="P:Performance.DtoModels.EmployeeReservedDto.JunReseFee">
<summary>
6月
</summary>
</member>
<member name="P:Performance.DtoModels.EmployeeReservedDto.JulReseFee">
<summary>
7月
</summary>
</member>
<member name="P:Performance.DtoModels.EmployeeReservedDto.AugReseFee">
<summary>
8月
</summary>
</member>
<member name="P:Performance.DtoModels.EmployeeReservedDto.SepReseFee">
<summary>
9月
</summary>
</member>
<member name="P:Performance.DtoModels.EmployeeReservedDto.OctReseFee">
<summary>
10月
</summary>
</member>
<member name="P:Performance.DtoModels.EmployeeReservedDto.NovReseFee">
<summary>
11月
</summary>
</member>
<member name="P:Performance.DtoModels.EmployeeReservedDto.DecReseFee">
<summary>
12月
</summary>
</member>
<member name="P:Performance.DtoModels.EmployeeReservedDto.TotalReseFee">
<summary>
汇总
</summary>
</member>
<member name="P:Performance.DtoModels.GuaranteeResponse.AllotId">
<summary>
......@@ -3339,6 +3472,11 @@
行政后勤是否显示管理绩效按钮 1 是 2 否
</summary>
</member>
<member name="P:Performance.DtoModels.HospitalResponse.IsOwnerQuery">
<summary>
是否开启个人绩效查询账号创建 1 是 2 否
</summary>
</member>
<member name="P:Performance.DtoModels.IncomeResponse.SheetNameKeyword">
<summary>
关键字匹配
......@@ -3379,6 +3517,26 @@
菜单状态 1 启用 2禁用
</summary>
</member>
<member name="P:Performance.DtoModels.OwnerPerformanceDto.ShouldGiveFee">
<summary>
应发绩效
</summary>
</member>
<member name="P:Performance.DtoModels.OwnerPerformanceDto.ReservedRatio">
<summary>
预留比例
</summary>
</member>
<member name="P:Performance.DtoModels.OwnerPerformanceDto.ReservedRatioFee">
<summary>
预留金额
</summary>
</member>
<member name="P:Performance.DtoModels.OwnerPerformanceDto.RealGiveFee">
<summary>
实发绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerEmployeeResponse.WorkTime">
<summary>
参加工作时间
......
......@@ -241,7 +241,12 @@ public AutoMapperConfigs()
CreateMap<cost_transfer, cost_transfer>(
).ForMember(back => back.Id, n => n.Ignore());
CreateMap<ag_headsource, SecPrintHeaderResponse>().ReverseMap();
CreateMap<ag_headsource, SecPrintHeaderResponse>()
.ForMember(dest => dest.TheTotalAllocationOfPerformanceResults, opt => opt.MapFrom(src => src.TotalDeptReward))
.ReverseMap();
CreateMap<view_allot_result, OwnerPerformanceDto>()
.ReverseMap();
}
}
}
......@@ -114,4 +114,20 @@ public enum DataFormat
/// <summary> 日期 </summary>
日期
}
public enum Role
{
绩效管理员 = 1,
医院管理员 = 2,
护士长 = 3,
科主任 = 4,
绩效核算办 = 5,
院领导 = 6,
财务科 = 7,
人事科 = 8,
特殊科室 = 9,
行政科室 = 10,
数据收集 = 11,
绩效查询 = 12,
}
}
......@@ -26,6 +26,8 @@ public class HandsonTable : HandsonTableBase
{
private IEnumerable<collect_permission> _permissions;
public bool ReadOnly { get; set; } = false;
public HandsonTable(int sheetType, string[] cols, List<collect_permission> permissions)
: base()
{
......@@ -48,12 +50,12 @@ public void SetRowData(IEnumerable<HandsonRowData> datas, bool isTypein)
var dic = CreateDataRow("编号", dt.Row.ToString());
foreach (var item in dt.CellData)
{
if (dic.ContainsKey(item.Name.ToLower()) && isTypein && _permissions.Any(w => w.HeadName.ToLower() == item.Name.ToLower()))
dic[item.Name.ToLower()] = item.Value?.ToString() ?? "";
else if (dic.ContainsKey(item.Name.ToLower()) && _permissions.Any(w => w.HeadName.ToLower() == item.Name.ToLower() && w.AttachLast > 0))
dic[item.Name.ToLower()] = item.Value?.ToString() ?? "";
else if (dic.ContainsKey(item.Name.ToLower()) && _permissions.Any(w => w.HeadName.ToLower() == item.Name.ToLower()))
dic[item.Name.ToLower()] = item.Value?.ToString() ?? "";
//if (dic.ContainsKey(item.Name.ToLower()) && isTypein && _permissions.Any(w => w.HeadName.ToLower() == item.Name.ToLower()))
// dic[item.Name.ToLower()] = item.Value?.ToString() ?? "";
//else if (dic.ContainsKey(item.Name.ToLower()) && _permissions.Any(w => w.HeadName.ToLower() == item.Name.ToLower() && w.AttachLast > 0))
// dic[item.Name.ToLower()] = item.Value?.ToString() ?? "";
//else if (dic.ContainsKey(item.Name.ToLower()) && _permissions.Any(w => w.HeadName.ToLower() == item.Name.ToLower()))
dic[item.Name.ToLower()] = item.Value?.ToString() ?? "";
}
Data.Add(dic);
}
......@@ -66,6 +68,7 @@ private void InitColHeaders(int sheetType, string[] cols)
new DefalutHandsonHeader{ SheetType = SheetType.OtherIncome, Necessity = new[] { "核算单元(医技组)","核算单元(医生组)","核算单元(护理组)","科室名称" } },
new DefalutHandsonHeader{ SheetType = SheetType.Expend, Necessity = new[] { "核算单元(医技组)","核算单元(医生组)","核算单元(护理组)","科室名称" } },
new DefalutHandsonHeader{ SheetType = SheetType.Workload, Necessity = new[] { "核算单元","科室名称" } },
new DefalutHandsonHeader{ SheetType = SheetType.SpecialUnit, Necessity = new[] { "科室名称" } },
//new DefalutHandsonHeader{ SheetType = SheetType.AccountExtra, Necessity = new[] { "核算单元","科室名称" } },
//new DefalutHandsonHeader{ SheetType = SheetType.PersonExtra, Necessity = new[] { "核算单元","科室名称" } },
};
......@@ -85,12 +88,16 @@ private void InitColHeaders(int sheetType, string[] cols)
private void InitColumns(List<collect_permission> permissions)
{
var defaults = new List<string> { "核算单元(医技组)", "核算单元(医生组)", "核算单元(护理组)", "核算单元", "科室名称" };
List<HandsonColumn> columns = new List<HandsonColumn>();
foreach (var col in ColHeaders)
{
var item = col.ToLower();
var readnoly = _permissions.FirstOrDefault(f => f.HeadName == item)?.Readnoly == 1;
columns.Add(new HandsonColumn(item.ToLower(), readnoly));
DataFormat format = defaults.Contains(col) ? DataFormat.普通格式 : DataFormat.小数;
columns.Add(new HandsonColumn(item.ToLower(), readnoly, format));
}
Columns = columns;
}
......
using System.Collections.Generic;
namespace Performance.DtoModels.Request
{
public class BatchRequest
{
public int HospitalId { get; set; }
public int AllotId { get; set; }
public List<BatchDetail> Details { get; set; }
}
public class BatchDetail
{
/// <summary>
/// 核算单元分类
/// </summary>
public string UnitType { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 人员姓名
/// </summary>
public string EmployeeName { get; set; }
/// <summary>
/// 工号
/// </summary>
public string JobNumber { get; set; }
/// <summary>
/// 批次
/// </summary>
public string Batch { get; set; }
}
}
namespace Performance.DtoModels
{
public class CollectAuditRequest
{
public int AllotId { get; set; }
public int UserId { get; set; }
/// <summary>
/// 3 审核通过 4 驳回
/// </summary>
public int Status { get; set; }
}
}
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Text;
namespace Performance.DtoModels
{
public class ConditionRequest
{
public int HospitalId { get; set; }
public int ReportId { get; set; }
public int[] Year { get; set; }
public int[] Month { get; set; }
public string[] AccountingUnit { get; set; }
public string[] UnitType { get; set; }
}
public class Condition
{
public int Year { get; set; }
public int Month { get; set; }
public string AccountingUnit { get; set; }
public string UnitType { get; set; }
}
public class TableData
{
public List<Column> Columns { get; set; }
public JArray Data { get; set; }
}
public class Column
{
public string Label { get; set; }
public string Prop { get; set; }
public List<Column> Children { get; set; }
}
public class QueryData
{
public int HospitalId { get; set; }
public int Year { get; set; }
public int Month { get; set; }
public string AccountingUnit { get; set; }
public string UnitType { get; set; }
public string SourceType { get; set; }
public string Category { get; set; }
public string ItemName { get; set; }
public decimal? Value { get; set; }
public List<QueryData> Children { get; set; }
}
public class QueryResult
{
public string Fixed1 { get; set; }
public string Fixed2 { get; set; }
public string Fixed3 { get; set; }
public string Fixed4 { get; set; }
public string Fixed5 { get; set; }
public string Column1 { get; set; }
public string Column2 { get; set; }
public string Column3 { get; set; }
public decimal? Value { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Performance.DtoModels
{
public class CopyRequest
{
public int AllotId { get; set; }
public string[] Type { get; set; }
}
public class CopyDrop
{
public string Label { get; set; }
public string Value { get; set; }
}
}
......@@ -23,6 +23,9 @@ public class ReportRequest
/// <summary> 月 </summary>
public string Month { get; set; }
/// <summary> 科室 </summary>
public string[] AccountingUnit { get; set; }
}
public class ReportRequestValidator : AbstractValidator<ReportRequest>
{
......
......@@ -113,21 +113,25 @@ public ComputeResponse(string source, string accountingUnit, string employeeName
/// 银行卡号
/// </summary>
public string BankCard { get; set; }
/// <summary>
/// 正式/临聘
/// </summary>
public string JobCategory { get; set; }
/// <summary>
/// 职务
/// </summary>
public string Duty { get; set; }
/// <summary>
/// 职称
/// </summary>
public string TitlePosition { get; set; }
/// <summary>
/// 批号
/// </summary>
public string Batch { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Performance.DtoModels
{
public class EmployeeReservedDto
{
/// <summary>
///
/// </summary>
public int HospitalId { get; set; }
/// <summary>
///
/// </summary>
public int Year { get; set; }
/// <summary>
///
/// </summary>
public string UnitType { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 人员姓名
/// </summary>
public string EmployeeName { get; set; }
/// <summary>
/// 工号
/// </summary>
public string JobNumber { get; set; }
/// <summary>
/// 1月
/// </summary>
public Nullable<decimal> JanReseFee { get; set; }
public Nullable<decimal> JanGiveFee { get; set; }
/// <summary>
/// 2月
/// </summary>
public Nullable<decimal> FebReseFee { get; set; }
public Nullable<decimal> FebGiveFee { get; set; }
/// <summary>
/// 3月
/// </summary>
public Nullable<decimal> MarReseFee { get; set; }
public Nullable<decimal> MarGiveFee { get; set; }
/// <summary>
/// 4月
/// </summary>
public Nullable<decimal> AprReseFee { get; set; }
public Nullable<decimal> AprGiveFee { get; set; }
/// <summary>
/// 5月
/// </summary>
public Nullable<decimal> MayReseFee { get; set; }
public Nullable<decimal> MayGiveFee { get; set; }
/// <summary>
/// 6月
/// </summary>
public Nullable<decimal> JunReseFee { get; set; }
public Nullable<decimal> JunGiveFee { get; set; }
/// <summary>
/// 7月
/// </summary>
public Nullable<decimal> JulReseFee { get; set; }
public Nullable<decimal> JulGiveFee { get; set; }
/// <summary>
/// 8月
/// </summary>
public Nullable<decimal> AugReseFee { get; set; }
public Nullable<decimal> AugGiveFee { get; set; }
/// <summary>
/// 9月
/// </summary>
public Nullable<decimal> SepReseFee { get; set; }
public Nullable<decimal> SepGiveFee { get; set; }
/// <summary>
/// 10月
/// </summary>
public Nullable<decimal> OctReseFee { get; set; }
public Nullable<decimal> OctGiveFee { get; set; }
/// <summary>
/// 11月
/// </summary>
public Nullable<decimal> NovReseFee { get; set; }
public Nullable<decimal> NovGiveFee { get; set; }
/// <summary>
/// 12月
/// </summary>
public Nullable<decimal> DecReseFee { get; set; }
public Nullable<decimal> DecGiveFee { get; set; }
/// <summary>
/// 汇总
/// </summary>
public Nullable<decimal> TotalReseFee { get; set; }
public Nullable<decimal> TotalGiveFee { get; set; }
}
}
......@@ -37,5 +37,10 @@ public class HospitalResponse
/// 行政后勤是否显示管理绩效按钮 1 是 2 否
/// </summary>
public Nullable<int> IsShowManageButton { get; set; }
/// <summary>
/// 是否开启个人绩效查询账号创建 1 是 2 否
/// </summary>
public Nullable<int> IsOwnerQuery { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Performance.DtoModels
{
public class OwnerPerformanceDto : view_allot_result
{
public IEnumerable<OwnerPerformanceDto> Detail { get; set; }
/// <summary>
/// 应发绩效
/// </summary>
public decimal? ShouldGiveFee { get; set; }
/// <summary>
/// 预留比例
/// </summary>
public decimal? ReservedRatio { get; set; }
/// <summary>
/// 预留金额
/// </summary>
public decimal? ReservedRatioFee { get; set; }
/// <summary>
/// 实发绩效
/// </summary>
public decimal RealGiveFee { get; set; }
}
}
......@@ -18,4 +18,9 @@ public class PerEmployeeResponse : per_employee
/// </summary>
public new string BirthDate { get; set; }
}
public class PersonePassword : per_employee
{
public string Password { get; set; }
}
}
......@@ -9,6 +9,7 @@ public class SaveCollectData
{
public int SheetType { get; set; }
public string SheetName { get; set; }
public int? CreateUser { get; set; }
public string[] ColHeaders { get; set; }
public string[][] Data { get; set; }
}
......@@ -18,7 +19,7 @@ public class UserCollectData
public int HospitalId { get; set; }
public int? CreateUser { get; set; }
public string[] ColHeaders { get; set; }
public string[][] Data { get; set; }
public new string[][] Data { get; set; }
}
......
......@@ -165,6 +165,8 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options)
public virtual DbSet<per_apr_amount> per_apr_amount { get; set; }
/// <summary> </summary>
public virtual DbSet<per_apr_amount_hide> per_apr_amount_hide { get; set; }
/// <summary> 分批发放记录 </summary>
public virtual DbSet<per_batch> per_batch { get; set; }
/// <summary> 预算管理金额 </summary>
public virtual DbSet<per_budget_amount> per_budget_amount { get; set; }
/// <summary> 预算管理占比 </summary>
......@@ -205,16 +207,16 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options)
public virtual DbSet<report_performance_tags> report_performance_tags { get; set; }
/// <summary> 科室核算结果 </summary>
public virtual DbSet<res_account> res_account { get; set; }
/// <summary> 医生科室核算结果 </summary>
public virtual DbSet<res_accountdoctor> res_accountdoctor { get; set; }
/// <summary> 护理科室核算结果 </summary>
public virtual DbSet<res_accountnurse> res_accountnurse { get; set; }
///// <summary> 医生科室核算结果 </summary>
//public virtual DbSet<res_accountdoctor> res_accountdoctor { get; set; }
///// <summary> 护理科室核算结果 </summary>
//public virtual DbSet<res_accountnurse> res_accountnurse { get; set; }
/// <summary> 核算基础标准 </summary>
public virtual DbSet<res_baiscnorm> res_baiscnorm { get; set; }
/// <summary> </summary>
public virtual DbSet<res_compute> res_compute { get; set; }
/// <summary> </summary>
public virtual DbSet<res_reserved> res_reserved { get; set; }
///// <summary> </summary>
//public virtual DbSet<res_reserved> res_reserved { get; set; }
/// <summary> </summary>
public virtual DbSet<res_specialunit> res_specialunit { get; set; }
/// <summary> 医院数据提取脚本 </summary>
......
......@@ -47,6 +47,11 @@ public class ag_bodysource
public string Department { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 岗位
/// </summary>
public string Post { get; set; }
......
......@@ -3,6 +3,7 @@
// * FileName: .cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
......@@ -79,5 +80,25 @@ public class collect_data
/// 单元格value
/// </summary>
public string CellValue { get; set; }
/// <summary>
/// 1 保存 2 提交(等待审核) 3 审核通过 4 驳回
/// </summary>
public int Status { get; set; }
/// <summary>
/// 保存数据的用户
/// </summary>
public int SavedUser { get; set; }
/// <summary>
/// 保存数据的时间
/// </summary>
public Nullable<DateTime> SavedTime { get; set; }
/// <summary>
/// 提交数据的用户
/// </summary>
public Nullable<int> SubmitUser { get; set; }
}
}
//-----------------------------------------------------------------------
// <copyright file=" per_batch.cs">
// * FileName: 分批发放记录.cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels
{
/// <summary>
/// 分批发放记录
/// </summary>
[Table("per_batch")]
public class per_batch
{
/// <summary>
///
/// </summary>
[Key]
public int Id { get; set; }
/// <summary>
///
/// </summary>
public int HospitalId { get; set; }
/// <summary>
///
/// </summary>
public int AllotId { get; set; }
/// <summary>
/// 批次
/// </summary>
public string Batch { get; set; }
/// <summary>
/// 批次日期
/// </summary>
public DateTime BatchDate { get; set; }
/// <summary>
/// 核算单元分类
/// </summary>
public string UnitType { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 人员姓名
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 工号
/// </summary>
public string PersonnelNumber { get; set; }
}
}
//-----------------------------------------------------------------------
// <copyright file=" res_accountdoctor.cs">
// * FileName: 医生科室核算结果.cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels
{
/// <summary>
/// 医生科室核算结果
/// </summary>
[Table("res_accountdoctor")]
public class res_accountdoctor
{
/// <summary>
///
/// </summary>
[Key]
public int ID { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> AllotID { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> SheetID { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 科室
/// </summary>
public string Department { get; set; }
/// <summary>
/// 科主任/护士长数量
/// </summary>
public Nullable<int> ManagerNumber { get; set; }
/// <summary>
/// 核算单元医生数量
/// </summary>
public Nullable<decimal> Number { get; set; }
/// <summary>
/// 医生基础系数
/// </summary>
public Nullable<decimal> BasicFactor { get; set; }
/// <summary>
/// 倾斜系数
/// </summary>
public Nullable<decimal> SlopeFactor { get; set; }
/// <summary>
/// 其他绩效1
/// </summary>
public Nullable<decimal> OtherPerfor1 { get; set; }
/// <summary>
/// 其他绩效2
/// </summary>
public Nullable<decimal> OtherPerfor2 { get; set; }
/// <summary>
/// 医院奖罚
/// </summary>
public Nullable<decimal> Extra { get; set; }
/// <summary>
/// 考核对分率
/// </summary>
public Nullable<decimal> ScoringAverage { get; set; }
/// <summary>
/// 调节系数
/// </summary>
public Nullable<decimal> AdjustFactor { get; set; }
/// <summary>
/// 科室业绩
/// </summary>
public Nullable<decimal> Income { get; set; }
/// <summary>
/// 业绩绩效
/// </summary>
public Nullable<decimal> PerforFee { get; set; }
/// <summary>
/// 工作量绩效
/// </summary>
public Nullable<decimal> WorkloadFee { get; set; }
/// <summary>
/// 绩效合计
/// </summary>
public Nullable<decimal> PerforTotal { get; set; }
/// <summary>
/// 人均绩效
/// </summary>
public Nullable<decimal> Avg { get; set; }
/// <summary>
/// 实发绩效
/// </summary>
public Nullable<decimal> RealGiveFee { get; set; }
/// <summary>
/// 变更日志
/// </summary>
public string ChangeLog { get; set; }
}
}
////-----------------------------------------------------------------------
//// <copyright file=" res_accountdoctor.cs">
//// * FileName: 医生科室核算结果.cs
//// </copyright>
////-----------------------------------------------------------------------
//using System;
//using System.ComponentModel.DataAnnotations;
//using System.ComponentModel.DataAnnotations.Schema;
//namespace Performance.EntityModels
//{
// /// <summary>
// /// 医生科室核算结果
// /// </summary>
// [Table("res_accountdoctor")]
// public class res_accountdoctor
// {
// /// <summary>
// ///
// /// </summary>
// [Key]
// public int ID { get; set; }
// /// <summary>
// ///
// /// </summary>
// public Nullable<int> AllotID { get; set; }
// /// <summary>
// ///
// /// </summary>
// public Nullable<int> SheetID { get; set; }
// /// <summary>
// /// 核算单元
// /// </summary>
// public string AccountingUnit { get; set; }
// /// <summary>
// /// 科室
// /// </summary>
// public string Department { get; set; }
// /// <summary>
// /// 科主任/护士长数量
// /// </summary>
// public Nullable<int> ManagerNumber { get; set; }
// /// <summary>
// /// 核算单元医生数量
// /// </summary>
// public Nullable<decimal> Number { get; set; }
// /// <summary>
// /// 医生基础系数
// /// </summary>
// public Nullable<decimal> BasicFactor { get; set; }
// /// <summary>
// /// 倾斜系数
// /// </summary>
// public Nullable<decimal> SlopeFactor { get; set; }
// /// <summary>
// /// 其他绩效1
// /// </summary>
// public Nullable<decimal> OtherPerfor1 { get; set; }
// /// <summary>
// /// 其他绩效2
// /// </summary>
// public Nullable<decimal> OtherPerfor2 { get; set; }
// /// <summary>
// /// 医院奖罚
// /// </summary>
// public Nullable<decimal> Extra { get; set; }
// /// <summary>
// /// 考核对分率
// /// </summary>
// public Nullable<decimal> ScoringAverage { get; set; }
// /// <summary>
// /// 调节系数
// /// </summary>
// public Nullable<decimal> AdjustFactor { get; set; }
// /// <summary>
// /// 科室业绩
// /// </summary>
// public Nullable<decimal> Income { get; set; }
// /// <summary>
// /// 业绩绩效
// /// </summary>
// public Nullable<decimal> PerforFee { get; set; }
// /// <summary>
// /// 工作量绩效
// /// </summary>
// public Nullable<decimal> WorkloadFee { get; set; }
// /// <summary>
// /// 绩效合计
// /// </summary>
// public Nullable<decimal> PerforTotal { get; set; }
// /// <summary>
// /// 人均绩效
// /// </summary>
// public Nullable<decimal> Avg { get; set; }
// /// <summary>
// /// 实发绩效
// /// </summary>
// public Nullable<decimal> RealGiveFee { get; set; }
// /// <summary>
// /// 变更日志
// /// </summary>
// public string ChangeLog { get; set; }
// }
//}
//-----------------------------------------------------------------------
// <copyright file=" res_accountnurse.cs">
// * FileName: 护理科室核算结果.cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels
{
/// <summary>
/// 护理科室核算结果
/// </summary>
[Table("res_accountnurse")]
public class res_accountnurse
{
/// <summary>
///
/// </summary>
[Key]
public int ID { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> AllotID { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> SheetID { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 科室
/// </summary>
public string Department { get; set; }
/// <summary>
/// 科主任/护士长数量
/// </summary>
public Nullable<int> ManagerNumber { get; set; }
/// <summary>
/// 护士人数
/// </summary>
public Nullable<decimal> Number { get; set; }
/// <summary>
/// 护理基础系数
/// </summary>
public Nullable<decimal> BasicFactor { get; set; }
/// <summary>
/// 倾斜系数
/// </summary>
public Nullable<decimal> SlopeFactor { get; set; }
/// <summary>
/// 其他绩效1
/// </summary>
public Nullable<decimal> OtherPerfor1 { get; set; }
/// <summary>
/// 其他绩效2
/// </summary>
public Nullable<decimal> OtherPerfor2 { get; set; }
/// <summary>
/// 医院奖罚
/// </summary>
public Nullable<decimal> Extra { get; set; }
/// <summary>
/// 考核对分率
/// </summary>
public Nullable<decimal> ScoringAverage { get; set; }
/// <summary>
/// 调节系数
/// </summary>
public Nullable<decimal> AdjustFactor { get; set; }
/// <summary>
/// 科室业绩
/// </summary>
public Nullable<decimal> Income { get; set; }
/// <summary>
/// 业绩绩效
/// </summary>
public Nullable<decimal> PerforFee { get; set; }
/// <summary>
/// 工作量绩效
/// </summary>
public Nullable<decimal> WorkloadFee { get; set; }
/// <summary>
/// 绩效合计
/// </summary>
public Nullable<decimal> PerforTotal { get; set; }
/// <summary>
/// 人均绩效
/// </summary>
public Nullable<decimal> Avg { get; set; }
/// <summary>
/// 实发绩效
/// </summary>
public Nullable<decimal> RealGiveFee { get; set; }
}
}
////-----------------------------------------------------------------------
//// <copyright file=" res_accountnurse.cs">
//// * FileName: 护理科室核算结果.cs
//// </copyright>
////-----------------------------------------------------------------------
//using System;
//using System.ComponentModel.DataAnnotations;
//using System.ComponentModel.DataAnnotations.Schema;
//namespace Performance.EntityModels
//{
// /// <summary>
// /// 护理科室核算结果
// /// </summary>
// [Table("res_accountnurse")]
// public class res_accountnurse
// {
// /// <summary>
// ///
// /// </summary>
// [Key]
// public int ID { get; set; }
// /// <summary>
// ///
// /// </summary>
// public Nullable<int> AllotID { get; set; }
// /// <summary>
// ///
// /// </summary>
// public Nullable<int> SheetID { get; set; }
// /// <summary>
// /// 核算单元
// /// </summary>
// public string AccountingUnit { get; set; }
// /// <summary>
// /// 科室
// /// </summary>
// public string Department { get; set; }
// /// <summary>
// /// 科主任/护士长数量
// /// </summary>
// public Nullable<int> ManagerNumber { get; set; }
// /// <summary>
// /// 护士人数
// /// </summary>
// public Nullable<decimal> Number { get; set; }
// /// <summary>
// /// 护理基础系数
// /// </summary>
// public Nullable<decimal> BasicFactor { get; set; }
// /// <summary>
// /// 倾斜系数
// /// </summary>
// public Nullable<decimal> SlopeFactor { get; set; }
// /// <summary>
// /// 其他绩效1
// /// </summary>
// public Nullable<decimal> OtherPerfor1 { get; set; }
// /// <summary>
// /// 其他绩效2
// /// </summary>
// public Nullable<decimal> OtherPerfor2 { get; set; }
// /// <summary>
// /// 医院奖罚
// /// </summary>
// public Nullable<decimal> Extra { get; set; }
// /// <summary>
// /// 考核对分率
// /// </summary>
// public Nullable<decimal> ScoringAverage { get; set; }
// /// <summary>
// /// 调节系数
// /// </summary>
// public Nullable<decimal> AdjustFactor { get; set; }
// /// <summary>
// /// 科室业绩
// /// </summary>
// public Nullable<decimal> Income { get; set; }
// /// <summary>
// /// 业绩绩效
// /// </summary>
// public Nullable<decimal> PerforFee { get; set; }
// /// <summary>
// /// 工作量绩效
// /// </summary>
// public Nullable<decimal> WorkloadFee { get; set; }
// /// <summary>
// /// 绩效合计
// /// </summary>
// public Nullable<decimal> PerforTotal { get; set; }
// /// <summary>
// /// 人均绩效
// /// </summary>
// public Nullable<decimal> Avg { get; set; }
// /// <summary>
// /// 实发绩效
// /// </summary>
// public Nullable<decimal> RealGiveFee { get; set; }
// }
//}
//-----------------------------------------------------------------------
// <copyright file=" res_reserved.cs">
// * FileName: .cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels
{
/// <summary>
///
/// </summary>
[Table("res_reserved")]
public class res_reserved
{
/// <summary>
///
/// </summary>
[Key]
public int Id { get; set; }
/// <summary>
///
/// </summary>
public int HospitalId { get; set; }
/// <summary>
///
/// </summary>
public int Year { get; set; }
/// <summary>
///
/// </summary>
public string UnitType { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 人员姓名
/// </summary>
public string EmployeeName { get; set; }
/// <summary>
/// 工号
/// </summary>
public string JobNumber { get; set; }
/// <summary>
/// 一月
/// </summary>
public Nullable<decimal> JanFee { get; set; }
/// <summary>
/// 一月
/// </summary>
public Nullable<decimal> JanRatio { get; set; }
/// <summary>
/// 二月
/// </summary>
public Nullable<decimal> FebFee { get; set; }
/// <summary>
/// 二月
/// </summary>
public Nullable<decimal> FebRatio { get; set; }
/// <summary>
/// 三月
/// </summary>
public Nullable<decimal> MarFee { get; set; }
/// <summary>
/// 三月
/// </summary>
public Nullable<decimal> MarRatio { get; set; }
/// <summary>
/// 四月
/// </summary>
public Nullable<decimal> AprFee { get; set; }
/// <summary>
/// 四月
/// </summary>
public Nullable<decimal> AprRatio { get; set; }
/// <summary>
/// 五月
/// </summary>
public Nullable<decimal> MayFee { get; set; }
/// <summary>
/// 五月
/// </summary>
public Nullable<decimal> MayRatio { get; set; }
/// <summary>
/// 六月
/// </summary>
public Nullable<decimal> JunFee { get; set; }
/// <summary>
/// 六月
/// </summary>
public Nullable<decimal> JunRatio { get; set; }
/// <summary>
/// 七月
/// </summary>
public Nullable<decimal> JulFee { get; set; }
/// <summary>
/// 七月
/// </summary>
public Nullable<decimal> JulRatio { get; set; }
/// <summary>
/// 八月
/// </summary>
public Nullable<decimal> AugFee { get; set; }
/// <summary>
/// 八月
/// </summary>
public Nullable<decimal> AugRatio { get; set; }
/// <summary>
/// 九月
/// </summary>
public Nullable<decimal> SepFee { get; set; }
/// <summary>
/// 九月
/// </summary>
public Nullable<decimal> SepRatio { get; set; }
/// <summary>
/// 十月
/// </summary>
public Nullable<decimal> OctFee { get; set; }
/// <summary>
/// 十月
/// </summary>
public Nullable<decimal> OctRatio { get; set; }
/// <summary>
/// 十一月
/// </summary>
public Nullable<decimal> NovFee { get; set; }
/// <summary>
/// 十一月
/// </summary>
public Nullable<decimal> NovRatio { get; set; }
/// <summary>
/// 十二月
/// </summary>
public Nullable<decimal> DecFee { get; set; }
/// <summary>
/// 十二月
/// </summary>
public Nullable<decimal> DecRatio { get; set; }
}
}
////-----------------------------------------------------------------------
//// <copyright file=" res_reserved.cs">
//// * FileName: .cs
//// </copyright>
////-----------------------------------------------------------------------
//using System;
//using System.ComponentModel.DataAnnotations;
//using System.ComponentModel.DataAnnotations.Schema;
//namespace Performance.EntityModels
//{
// /// <summary>
// ///
// /// </summary>
// [Table("res_reserved")]
// public class res_reserved
// {
// /// <summary>
// ///
// /// </summary>
// [Key]
// public int Id { get; set; }
// /// <summary>
// ///
// /// </summary>
// public int HospitalId { get; set; }
// /// <summary>
// ///
// /// </summary>
// public int Year { get; set; }
// /// <summary>
// ///
// /// </summary>
// public string UnitType { get; set; }
// /// <summary>
// /// 核算单元
// /// </summary>
// public string AccountingUnit { get; set; }
// /// <summary>
// /// 人员姓名
// /// </summary>
// public string EmployeeName { get; set; }
// /// <summary>
// /// 工号
// /// </summary>
// public string JobNumber { get; set; }
// /// <summary>
// /// 一月
// /// </summary>
// public Nullable<decimal> JanFee { get; set; }
// /// <summary>
// /// 一月
// /// </summary>
// public Nullable<decimal> JanRatio { get; set; }
// /// <summary>
// /// 二月
// /// </summary>
// public Nullable<decimal> FebFee { get; set; }
// /// <summary>
// /// 二月
// /// </summary>
// public Nullable<decimal> FebRatio { get; set; }
// /// <summary>
// /// 三月
// /// </summary>
// public Nullable<decimal> MarFee { get; set; }
// /// <summary>
// /// 三月
// /// </summary>
// public Nullable<decimal> MarRatio { get; set; }
// /// <summary>
// /// 四月
// /// </summary>
// public Nullable<decimal> AprFee { get; set; }
// /// <summary>
// /// 四月
// /// </summary>
// public Nullable<decimal> AprRatio { get; set; }
// /// <summary>
// /// 五月
// /// </summary>
// public Nullable<decimal> MayFee { get; set; }
// /// <summary>
// /// 五月
// /// </summary>
// public Nullable<decimal> MayRatio { get; set; }
// /// <summary>
// /// 六月
// /// </summary>
// public Nullable<decimal> JunFee { get; set; }
// /// <summary>
// /// 六月
// /// </summary>
// public Nullable<decimal> JunRatio { get; set; }
// /// <summary>
// /// 七月
// /// </summary>
// public Nullable<decimal> JulFee { get; set; }
// /// <summary>
// /// 七月
// /// </summary>
// public Nullable<decimal> JulRatio { get; set; }
// /// <summary>
// /// 八月
// /// </summary>
// public Nullable<decimal> AugFee { get; set; }
// /// <summary>
// /// 八月
// /// </summary>
// public Nullable<decimal> AugRatio { get; set; }
// /// <summary>
// /// 九月
// /// </summary>
// public Nullable<decimal> SepFee { get; set; }
// /// <summary>
// /// 九月
// /// </summary>
// public Nullable<decimal> SepRatio { get; set; }
// /// <summary>
// /// 十月
// /// </summary>
// public Nullable<decimal> OctFee { get; set; }
// /// <summary>
// /// 十月
// /// </summary>
// public Nullable<decimal> OctRatio { get; set; }
// /// <summary>
// /// 十一月
// /// </summary>
// public Nullable<decimal> NovFee { get; set; }
// /// <summary>
// /// 十一月
// /// </summary>
// public Nullable<decimal> NovRatio { get; set; }
// /// <summary>
// /// 十二月
// /// </summary>
// public Nullable<decimal> DecFee { get; set; }
// /// <summary>
// /// 十二月
// /// </summary>
// public Nullable<decimal> DecRatio { get; set; }
// }
//}
......@@ -120,5 +120,10 @@ public class sys_hospital
/// 行政后勤是否显示管理绩效按钮 1 是 2 否
/// </summary>
public Nullable<int> IsShowManageButton { get; set; }
/// <summary>
/// 是否开启个人绩效查询账号创建 1 是 2 否
/// </summary>
public Nullable<int> IsOwnerQuery { get; set; }
}
}
//-----------------------------------------------------------------------
// <copyright file=" view_operation_report_result.cs">
// * FileName: .cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels
{
/// <summary>
///
/// </summary>
[Table("view_operation_report_result")]
public class view_operation_report_result
{
/// <summary>
///
/// </summary>
public int HospitalId { get; set; }
/// <summary>
///
/// </summary>
public int Year { get; set; }
/// <summary>
///
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
///
/// </summary>
public string SourceType { get; set; }
/// <summary>
///
/// </summary>
public string Category { get; set; }
/// <summary>
///
/// </summary>
public string ItemName { get; set; }
/// <summary>
///
/// </summary>
public Nullable<decimal> January { get; set; }
/// <summary>
///
/// </summary>
public Nullable<decimal> February { get; set; }
/// <summary>
///
/// </summary>
public Nullable<decimal> March { get; set; }
/// <summary>
///
/// </summary>
public Nullable<decimal> April { get; set; }
/// <summary>
///
/// </summary>
public Nullable<decimal> May { get; set; }
/// <summary>
///
/// </summary>
public Nullable<decimal> June { get; set; }
/// <summary>
///
/// </summary>
public Nullable<decimal> July { get; set; }
/// <summary>
///
/// </summary>
public Nullable<decimal> August { get; set; }
/// <summary>
///
/// </summary>
public Nullable<decimal> September { get; set; }
/// <summary>
///
/// </summary>
public Nullable<decimal> October { get; set; }
/// <summary>
///
/// </summary>
public Nullable<decimal> November { get; set; }
/// <summary>
///
/// </summary>
public Nullable<decimal> December { get; set; }
}
}
namespace Performance.DtoModels
{
public class view_allot_result
{
public int HospitalID { get; set; }
public int Year { get; set; }
public int Month { get; set; }
/// <summary>
/// 来源
/// </summary>
public string Source { get; set; }
public string SourceItem { get; set; }
public int AllotId { get; set; }
public int States { get; set; }
public int? SecondId { get; set; }
public string UnitType { get; set; }
public string AccountingUnit { get; set; }
public int? IsShowManage { get; set; }
public string EmployeeName { get; set; }
public string JobNumber { get; set; }
public string JobTitle { get; set; }
/// <summary>
/// 业绩绩效
/// </summary>
public decimal? PerforSumFee { get; set; }
/// <summary>
/// 管理绩效
/// </summary>
public decimal? PerforManagementFee { get; set; }
/// <summary>
/// 夜班绩效
/// </summary>
public decimal? NightWorkPerfor { get; set; }
/// <summary>
/// 调节后其他绩效
/// </summary>
public decimal? AdjustLaterOtherFee { get; set; }
/// <summary>
/// 医院其他绩效
/// </summary>
public decimal? OtherPerfor { get; set; }
/// <summary>
/// 不公示其他绩效
/// </summary>
public decimal? HideOtherPerfor { get; set; }
/// <summary>
/// 实发绩效
/// </summary>
public decimal? RealPerformance { get; set; }
/// <summary>
/// 应发小计
/// </summary>
public decimal? ShouldGiveFee { get; set; }
/// <summary>
/// 预留金额
/// </summary>
public decimal? ReservedRatioFee { get; set; }
public string Emp_UnitType { get; set; }
public string Emp_AccountingUnit { get; set; }
public string BankCard { get; set; }
public string JobCategory { get; set; }
public string Duty { get; set; }
public string TitlePosition { get; set; }
}
}
namespace Performance.DtoModels
{
public class view_allot_sign_dept
{
public int HospitalId { get; set; }
public int AllotID { get; set; }
public int Year { get; set; }
public int Month { get; set; }
public int UnitName { get; set; }
public int AccountingUnit { get; set; }
public int PerforFee { get; set; }
public int WorkloadFee { get; set; }
public int AssessBeforeOtherFee { get; set; }
public int PerforTotal { get; set; }
public int ScoringAverage { get; set; }
public int Extra { get; set; }
public int MedicineExtra { get; set; }
public int MaterialsExtra { get; set; }
public int AssessLaterOtherFee { get; set; }
public int AssessLaterPerforTotal { get; set; }
public int AdjustFactor { get; set; }
public int AdjustLaterOtherFee { get; set; }
public int AprPerforAmount { get; set; }
public int HideAprOtherPerforAmount { get; set; }
public int AssessLaterManagementFee { get; set; }
public int RealGiveFee { get; set; }
}
}
namespace Performance.DtoModels
{
public class view_allot_sign_emp
{
public int HospitalID { get; set; }
public int Year { get; set; }
public int Month { get; set; }
public int Source { get; set; }
public int AllotId { get; set; }
public int SecondId { get; set; }
public int States { get; set; }
public string UnitType { get; set; }
public string AccountingUnit { get; set; }
public string IsShowManage { get; set; }
public string EmployeeName { get; set; }
public string JobNumber { get; set; }
public string JobTitle { get; set; }
public string Emp_UnitType { get; set; }
public string Emp_AccountingUnit { get; set; }
public string BankCard { get; set; }
public string Batch { get; set; }
public string JobCategory { get; set; }
public string Duty { get; set; }
public string TitlePosition { get; set; }
public string PerforSumFee { get; set; }
public decimal PerforManagementFee { get; set; }
public decimal NightWorkPerfor { get; set; }
public decimal AdjustLaterOtherFee { get; set; }
public decimal OtherPerfor { get; set; }
public decimal HideOtherPerfor { get; set; }
public decimal ShouldGiveFee { get; set; }
public decimal ReservedRatioFee { get; set; }
public decimal RealGiveFee { get; set; }
}
}
namespace Performance.EntityModels
using System;
namespace Performance.EntityModels
{
public class view_per_apr_amount : per_apr_amount
{
......@@ -44,5 +46,7 @@ public view_per_total_amount(string unitType, string accountingUnit, string pers
/// 是否被使用 默认false
/// </summary>
public bool Use { get; set; }
public DateTime AuditTime { get; set; }
}
}
......@@ -54,7 +54,7 @@ public static void AddOrUpdate(this Dictionary<string, object> keyValues, string
if (default(KeyValuePair<string, object>).Equals(pair))
keyValues.Add(key, value);
else
keyValues[key] = value;
keyValues[pair.Key] = value;
}
/// <summary>
......
......@@ -179,19 +179,13 @@ public IEnumerable<report_original_workload> QueryWorkloadData(int allotid, stri
if (connection.State != ConnectionState.Open) connection.Open();
try
{
string unittype = unittypes.Any(t => !string.IsNullOrEmpty(t) && t.Contains("医生"))
? "医生组"
: unittypes.Any(t => !string.IsNullOrEmpty(t) && t.Contains("护理")) ? "护理组" : "其他组";
string clear = @"SELECT DISTINCT t3.AccountingUnit as Department,ifnull(t1.DoctorName, '未知') DoctorName,t1.PersonnelNumber,t1.Category,SUM(t1.Fee) Fee FROM ex_result t1
JOIN (select distinct AccountingUnit,HISDeptName,unittype from per_dept_dic where HospitalId = @hospitalid) t3 ON t1.Department = t3.HISDeptName
WHERE t1.allotid = @allotid
AND t3.unittype in @unittypes
AND t3.accountingunit = @accountingunit
AND (t1.Source LIKE CONCAT('%',@unittype,'工作量%') OR t1.Source = '通用工作量')
AND T1.IsDelete = 0
GROUP BY ifnull(t1.DoctorName, '未知'),t1.PersonnelNumber,t1.Category
ORDER BY t1.doctorname,t1.Category;";
return connection.Query<report_original_workload>(clear, new { allotid, accountingunit, unittypes, unittype, hospitalid }, commandTimeout: 60 * 60);
string clear = @"
SELECT DISTINCT AccountingUnit as Department,if(ifnull(DoctorName,'')='', '未知',DoctorName) DoctorName,PersonnelNumber,Category,ROUND(SUM(Fee),2) Fee
FROM view_second_report_workload
WHERE AllotId = @allotid AND UnitType in @unittypes AND AccountingUnit = @accountingunit
GROUP BY AccountingUnit,DoctorName,PersonnelNumber,Category
ORDER BY doctorname,Category;";
return connection.Query<report_original_workload>(clear, new { allotid, accountingunit, unittypes = unittypes.Union(new string[] { "通用工作量" }), hospitalid }, commandTimeout: 60 * 60);
}
catch (Exception ex)
{
......@@ -204,23 +198,24 @@ public IEnumerable<report_original_workload> QueryWorkloadData(int allotid, stri
/// 查询门诊收入数据
/// </summary>
/// <param name="allotid"></param>
public IEnumerable<ex_result> QueryIncomeData(int allotid, string source, string accountingunit, string[] unittype, int hospitalid)
public IEnumerable<ex_result> QueryIncomeData(int allotid, string source, string accountingunit, string[] unittypes, int hospitalid)
{
using (var connection = context.Database.GetDbConnection())
{
if (connection.State != ConnectionState.Open) connection.Open();
try
{
string clear = $@"SELECT DISTINCT t3.AccountingUnit as Department,ifnull(t1.DoctorName, '未知') DoctorName,t1.PersonnelNumber,t1.Category,SUM(t1.Fee) Fee FROM ex_result t1
JOIN (select distinct AccountingUnit,HISDeptName,unittype from per_dept_dic where HospitalId = @hospitalid) t3 ON t1.Department = t3.HISDeptName
WHERE t1.allotid = @allotid
AND t3.unittype in @unittype
AND t3.accountingunit = @accountingunit
AND (t1.Source like '%{source}开单%' OR t1.Source like '%{source}就诊%')
AND T1.IsDelete = 0
GROUP BY ifnull(t1.DoctorName, '未知'),t1.PersonnelNumber,t1.Category
ORDER BY t1.doctorname,t1.Category;";
return connection.Query<ex_result>(clear, new { allotid, accountingunit, unittype, hospitalid }, commandTimeout: 60 * 60);
var tableName = (source == "门诊") ? "view_second_report_income_out" : "view_second_report_income_inpat";
string clear = $@"
SELECT DISTINCT AccountingUnit as Department,if(ifnull(DoctorName,'')='', '未知',DoctorName) DoctorName,PersonnelNumber,Category,ROUND(SUM(Fee),2) Fee
FROM {tableName}
WHERE AllotId = @allotid AND UnitType in @unittypes AND AccountingUnit = @accountingunit
GROUP BY AccountingUnit,DoctorName,PersonnelNumber,Category
ORDER BY doctorname,Category;";
return connection.Query<ex_result>(clear, new { allotid, accountingunit, unittypes, hospitalid }, commandTimeout: 60 * 60);
}
catch (Exception ex)
{
......@@ -243,7 +238,12 @@ public IEnumerable<view_second_workload_result> GetSecondWorkload(int allotid, s
if (connection.State != ConnectionState.Open) connection.Open();
try
{
string query = $@"SELECT * FROM view_second_workload_result WHERE AllotId = @allotid AND UnitType = @unittype AND AccountingUnit = @accountingunit";
string query = $@"
SELECT TAB1.HospitalId,AllotId,TAB1.UnitType,AccountingUnit,HISDeptName,ItemId,ItemName,FactorValue,DoctorName,PersonnelNumber,Category,SUM(Fee) Value
FROM view_second_workload TAB1
JOIN view_second_workload_his TAB2 ON TAB1.HospitalId = TAB2.HospitalId AND (TAB1.UnitType = TAB2.UnitType ) AND TAB1.HISDeptName = TAB2.Department AND TAB1.SourceCategory = TAB2.Category
WHERE AllotId = @allotid AND TAB1.UnitType = @unittype AND AccountingUnit = @accountingunit
GROUP BY TAB1.HospitalId,AllotId,TAB1.UnitType,AccountingUnit,HISDeptName,ItemId,ItemName,FactorValue,DoctorName,PersonnelNumber,Category";
return connection.Query<view_second_workload_result>(query, new { allotid, unittype, accountingunit }, commandTimeout: 60 * 60);
}
catch (Exception ex)
......
......@@ -32,6 +32,7 @@ public List<view_per_apr_amount> GetFullAmount(Expression<Func<per_apr_amount, b
AccountingUnit = w.AccountingUnit,
AllotId = w.AllotId,
PersonnelNumber = w.PersonnelNumber,
DoctorName = w.DoctorName,
});
var res = from outer in amounts
......@@ -43,9 +44,9 @@ public List<view_per_apr_amount> GetFullAmount(Expression<Func<per_apr_amount, b
Id = outer.Id,
AllotId = outer.AllotId,
PersonnelNumber = outer.PersonnelNumber,
DoctorName = outer.DoctorName,
PerforType = outer.PerforType,
Amount = outer.Amount,
DoctorName = tt?.DoctorName ?? "",
AccountingUnit = tt?.AccountingUnit ?? "",
UnitType = tt?.UnitType ?? "",
TypeInDepartment = outer.TypeInDepartment,
......
......@@ -32,6 +32,7 @@ public List<view_per_apr_amount> GetFullAmount(Expression<Func<per_apr_amount_hi
AccountingUnit = w.AccountingUnit,
AllotId = w.AllotId,
PersonnelNumber = w.PersonnelNumber,
DoctorName = w.DoctorName,
});
var res = from outer in amounts
......@@ -43,9 +44,9 @@ public List<view_per_apr_amount> GetFullAmount(Expression<Func<per_apr_amount_hi
Id = outer.Id,
AllotId = outer.AllotId,
PersonnelNumber = outer.PersonnelNumber,
DoctorName = outer.DoctorName,
PerforType = outer.PerforType,
Amount = outer.Amount,
DoctorName = tt?.DoctorName ?? "",
AccountingUnit = tt?.AccountingUnit ?? "",
UnitType = tt?.UnitType ?? "",
TypeInDepartment = outer.TypeInDepartment,
......
......@@ -370,5 +370,30 @@ public List<PerReport> NurseAvg(ReportRequest request)
return DapperQuery(sql, new { hospitalId = request.HospitalId }).ToList();
}
#endregion
/// <summary>
/// 获取医院预留绩效
/// </summary>
/// <param name="hospitalId"></param>
/// <param name="year"></param>
/// <returns></returns>
public List<EmployeeReservedDto> GetEmployeeReserved(int hospitalId, int year)
{
string sql = "SELECT * FROM view_allot_result_report WHERE HospitalID=@HospitalID AND Year=@Year";
return DapperQuery<EmployeeReservedDto>(sql, new { HospitalID = hospitalId, Year = year })?.ToList();
}
public List<view_allot_result> GetOwnerPerformance(List<int> hospitalId, string jobNumber)
{
string sql = "SELECT * FROM view_allot_result WHERE HospitalID IN @HospitalID AND JobNumber=@JobNumber";
return DapperQuery<view_allot_result>(sql, new { HospitalID = hospitalId, JobNumber = jobNumber })?.ToList();
}
public List<dynamic> QueryCompute(int allotId, string viewName)
{
var sql = $@"SELECT * FROM {viewName} WHERE AllotId = @AllotId; ";
return DapperQuery<dynamic>(sql, new { allotId })?.ToList();
}
}
}
//-----------------------------------------------------------------------
// <copyright file=" per_batch.cs">
// * FileName: per_batch.cs
// </copyright>
//-----------------------------------------------------------------------
using Performance.EntityModels;
namespace Performance.Repository
{
/// <summary>
/// per_batch Repository
/// </summary>
public partial class PerforPerbatchRepository : PerforRepository<per_batch>
{
public PerforPerbatchRepository(PerformanceDbContext context) : base(context)
{
}
}
}
//-----------------------------------------------------------------------
// <copyright file=" res_accountdoctor.cs">
// * FileName: res_accountdoctor.cs
// </copyright>
//-----------------------------------------------------------------------
using Performance.EntityModels;
////-----------------------------------------------------------------------
//// <copyright file=" res_accountdoctor.cs">
//// * FileName: res_accountdoctor.cs
//// </copyright>
////-----------------------------------------------------------------------
//using Performance.EntityModels;
namespace Performance.Repository
{
/// <summary>
/// res_accountdoctor Repository
/// </summary>
public partial class PerforResaccountdoctorRepository : PerforRepository<res_accountdoctor>
{
public PerforResaccountdoctorRepository(PerformanceDbContext context) : base(context)
{
}
}
}
//namespace Performance.Repository
//{
// /// <summary>
// /// res_accountdoctor Repository
// /// </summary>
// public partial class PerforResaccountdoctorRepository : PerforRepository<res_accountdoctor>
// {
// public PerforResaccountdoctorRepository(PerformanceDbContext context) : base(context)
// {
// }
// }
//}
//-----------------------------------------------------------------------
// <copyright file=" res_accountnurse.cs">
// * FileName: res_accountnurse.cs
// </copyright>
//-----------------------------------------------------------------------
using Performance.EntityModels;
////-----------------------------------------------------------------------
//// <copyright file=" res_accountnurse.cs">
//// * FileName: res_accountnurse.cs
//// </copyright>
////-----------------------------------------------------------------------
//using Performance.EntityModels;
namespace Performance.Repository
{
/// <summary>
/// res_accountnurse Repository
/// </summary>
public partial class PerforResaccountnurseRepository : PerforRepository<res_accountnurse>
{
public PerforResaccountnurseRepository(PerformanceDbContext context) : base(context)
{
}
}
}
//namespace Performance.Repository
//{
// /// <summary>
// /// res_accountnurse Repository
// /// </summary>
// public partial class PerforResaccountnurseRepository : PerforRepository<res_accountnurse>
// {
// public PerforResaccountnurseRepository(PerformanceDbContext context) : base(context)
// {
// }
// }
//}
//-----------------------------------------------------------------------
// <copyright file=" res_reserved.cs">
// * FileName: res_reserved.cs
// </copyright>
//-----------------------------------------------------------------------
using Performance.EntityModels;
////-----------------------------------------------------------------------
//// <copyright file=" res_reserved.cs">
//// * FileName: res_reserved.cs
//// </copyright>
////-----------------------------------------------------------------------
//using Performance.EntityModels;
namespace Performance.Repository
{
/// <summary>
/// res_reserved Repository
/// </summary>
public partial class PerforResreservedRepository : PerforRepository<res_reserved>
{
public PerforResreservedRepository(PerformanceDbContext context) : base(context)
{
}
}
}
//namespace Performance.Repository
//{
// /// <summary>
// /// res_reserved Repository
// /// </summary>
// public partial class PerforResreservedRepository : PerforRepository<res_reserved>
// {
// public PerforResreservedRepository(PerformanceDbContext context) : base(context)
// {
// }
// }
//}
......@@ -324,7 +324,7 @@ public List<PerSheet> Compute(PerExcel excel, List<PerSheet> perSheet, per_allot
dept.PerforFee = dept.Income * dept.BasicFactor;
//dept.PerforTotal = Math.Round((dept.PerforFee + dept.WorkloadFee + dept.OtherPerfor1 + dept.AssessBeforeOtherFee) ?? 0);
dept.PerforTotal = Math.Round((dept.PerforFee + dept.WorkloadFee + dept.AssessBeforeOtherFee) ?? 0);
dept.PerforTotal = Math.Round((dept.PerforFee + dept.WorkloadFee + dept.AssessBeforeOtherFee) ?? 0, MidpointRounding.AwayFromZero);
dept.AssessLaterPerforTotal = Math.Round((dept.PerforTotal * dept.ScoringAverage + dept.MedicineExtra + dept.MaterialsExtra + dept.Extra + dept.AssessLaterOtherFee) ?? 0, MidpointRounding.AwayFromZero);
dept.RealGiveFee = Math.Round((dept.AssessLaterPerforTotal * dept.AdjustFactor + dept.AdjustLaterOtherFee) ?? 0, MidpointRounding.AwayFromZero);
//dept.Avg = dept.ManagerNumber + dept.Number == 0 ? 0 : dept.PerforTotal / (dept.ManagerNumber + dept.Number);
......@@ -416,11 +416,10 @@ public void ComputeOffice(per_allot allot, PerExcel excel)
//dept.MedicineExtra = 0;// (drugExtra ?? 0);
//dept.MaterialsExtra = 0;//(materialsExtra ?? 0);
dept.PerforFee = empolyees.Sum(w => w.PerforTotal ?? 0);
dept.PerforTotal = Math.Round(empolyees.Sum(w => w.GiveFee ?? 0));
dept.AssessLaterPerforTotal = Math.Round((dept.PerforTotal * dept.ScoringAverage + dept.MedicineExtra + dept.MaterialsExtra + dept.Extra) ?? 0);
dept.RealGiveFee = Math.Round((dept.AssessLaterPerforTotal * dept.AdjustFactor + dept.AdjustLaterOtherFee) ?? 0);
dept.PerforTotal = Math.Round(empolyees.Sum(w => w.GiveFee ?? 0), MidpointRounding.AwayFromZero);
dept.AssessLaterPerforTotal = Math.Round((dept.PerforTotal * dept.ScoringAverage + dept.MedicineExtra + dept.MaterialsExtra + dept.Extra) ?? 0, MidpointRounding.AwayFromZero);
dept.RealGiveFee = Math.Round((dept.AssessLaterPerforTotal * dept.AdjustFactor + dept.AdjustLaterOtherFee) ?? 0, MidpointRounding.AwayFromZero);
//dept.Avg = dept.ManagerNumber + dept.Number == 0 ? 0 : dept.PerforTotal / (dept.ManagerNumber + dept.Number);
dept.Avg = dept.Number == 0 ? 0 : dept.PerforTotal / dept.Number;
......
......@@ -379,7 +379,7 @@ private decimal GetMedicineProportion(int hospitalid, int year, int month)
string sql = @"select ifnull(sum(cellvalue),0) as fee
from report_original_income t1
join cof_drugtype t2 on t1.allotid = t2.allotid and t2.chargetype = '药费'
where hospitalid=@hospitalid and year=@year and month=@month";
where t1.hospitalid=@hospitalid and t1.year=@year and t1.month=@month";
return perbudgetresultRepository.DapperQueryFirstOrDefault<decimal>(sql, new { hospitalid, year, month });
}
///材料支出
......@@ -388,7 +388,7 @@ private decimal GetMaterialCosts(int hospitalid, int year, int month)
string sql = @"select ifnull(sum(cellvalue),0) as fee
from report_original_income t1
join cof_drugtype t2 on t1.allotid = t2.allotid and t2.chargetype = '材料费'
where hospitalid=@hospitalid and year=@year and month=@month";
where t1.hospitalid=@hospitalid and t1.year=@year and t1.month=@month";
return perbudgetresultRepository.DapperQueryFirstOrDefault<decimal>(sql, new { hospitalid, year, month });
}
}
......
......@@ -445,6 +445,10 @@ public bool InsertApr(per_apr_amount request, int userId)
if (string.IsNullOrEmpty(request.PerforType) && request.Amount != 0)
throw new PerformanceException("文件中存在“绩效类型”为空的数据");
var employee = peremployeeRepository.GetEntity(t => t.AllotId == request.AllotId && t.PersonnelNumber == request.PersonnelNumber);
if (employee == null)
throw new PerformanceException("工号在字典中不存在");
request.TypeInDepartment = GetTypeInDepartment(userId);
request.Status = 2;
request.CreateDate = DateTime.Now;
......@@ -502,21 +506,24 @@ public bool DeleteApr(int id)
/// <returns></returns>
public bool ConfirmAudit(int userid, AprAmountAuditRequest request)
{
if (request?.Members == null)
throw new PerformanceException("审核信息无效,请确认");
foreach (var item in request.Members)
if (request.IsPass == 1)
{
if (string.IsNullOrEmpty(item.DoctorName) && string.IsNullOrEmpty(item.PersonnelNumber))
if (request?.Members == null || !request.Members.Any())
throw new PerformanceException("审核信息无效,请确认");
foreach (var item in request.Members)
{
if (string.IsNullOrEmpty(item.DoctorName) && string.IsNullOrEmpty(item.PersonnelNumber))
throw new PerformanceException("审核信息无效,请确认");
}
}
var allApramounts = perapramountRepository.GetEntities(t => t.AllotId == request.AllotId);
foreach (var member in request.Members)
{
var apramounts = allApramounts?.Where(t => (t.DoctorName ?? "") == member.DoctorName && (t.PersonnelNumber ?? "") == member.PersonnelNumber);
if (apramounts == null)
throw new PerformanceException("审核信息无效,请确认");
var apramounts = allApramounts?.Where(t => (t.PersonnelNumber ?? "") == member.PersonnelNumber);
if (request.IsPass == 1 && (apramounts == null || !apramounts.Any()))
throw new PerformanceException($"工号为“{member.PersonnelNumber}”的审核信息无效,请确认");
foreach (var item in apramounts)
{
......@@ -535,7 +542,7 @@ public bool ConfirmAudit(int userid, AprAmountAuditRequest request)
/// <param name="allotid"></param>
/// <param name="path"></param>
/// <param name="userid"></param>
public void ImpoerAprEmployees(int allotid, string path, int userid)
public string ImpoerAprEmployees(int allotid, string path, int userid)
{
var userrole = userroleRepository.GetEntity(t => t.UserID == userid);
if (userrole == null) throw new PerformanceException("用户未绑定角色");
......@@ -560,7 +567,7 @@ public void ImpoerAprEmployees(int allotid, string path, int userid)
? (IWorkbook)(new XSSFWorkbook(fs))
: (IWorkbook)(new HSSFWorkbook(fs));
}
if (workbook == null) return;
if (workbook == null) return "";
var sheet = workbook.GetSheetAt(0);
var firstRow = sheet.GetRow(0);
......@@ -589,6 +596,8 @@ public void ImpoerAprEmployees(int allotid, string path, int userid)
var entities = new List<per_apr_amount>();
var createtime = DateTime.Now;
var typeIn = GetTypeInDepartment(userid);
var employees = peremployeeRepository.GetEntities(t => t.AllotId == allotid);
for (int rowindex = 1; rowindex < sheet.LastRowNum + 1; rowindex++)
{
var row = sheet.GetRow(rowindex);
......@@ -610,6 +619,13 @@ public void ImpoerAprEmployees(int allotid, string path, int userid)
entities.Add(entity);
}
//var numbers = entities.Select(t => t.PersonnelNumber).Except(employees.Select(w => w.PersonnelNumber));
//if (numbers?.Count() > 0 && numbers?.Count() <= 5)
// return $@"以下工号在字典中不存在:{JsonHelper.Serialize(numbers.ToArray())}";
//else if (numbers?.Count() > 5)
// return $@"以下工号在字典中不存在:{JsonHelper.Serialize(numbers.Take(5)).Replace("]", ",...]")}";
// 补充核算单元
if (entities.Any())
{
......@@ -627,6 +643,7 @@ public void ImpoerAprEmployees(int allotid, string path, int userid)
//}
perapramountRepository.AddRange(entities.ToArray());
}
return "";
}
catch (PerformanceException ex)
{
......@@ -635,6 +652,7 @@ public void ImpoerAprEmployees(int allotid, string path, int userid)
catch (Exception ex)
{
logger.LogError(ex.ToString());
return "上传失败";
}
}
......@@ -665,7 +683,7 @@ public List<TitleValue> GetPerforTypeDict(int allotId)
/// </summary>
/// <param name="allotId"></param>
/// <returns></returns>
public List<Dictionary<string, string>> GetOtherPerStats(int allotId, string department=null)
public List<Dictionary<string, string>> GetOtherPerStats(int allotId, string department = null)
{
var others = new List<Dictionary<string, string>>();
var aprAmountList = perapramountRepository.GetFullAmount(w => w.AllotId == allotId && w.Status == 3);
......@@ -711,7 +729,7 @@ public view_per_apr_amount GetEmployeeMessage(int allotId, string personnelNumbe
var user = userRepository.GetEntity(w => w.ID == userId && w.IsDelete == 1);
if (user == null) throw new PerformanceException("操作用户不存在或用户信息错误!");
var employee = peremployeeRepository.GetEntity(w => w.AllotId == allotId && w.PersonnelNumber.Trim() == personnelNumber.Trim());
var employee = peremployeeRepository.GetEntity(w => w.AllotId == allotId && w.PersonnelNumber != null && w.PersonnelNumber.Trim() == personnelNumber.Trim());
if (employee == null) return new view_per_apr_amount();
return new view_per_apr_amount
......@@ -894,7 +912,7 @@ public bool DeleteAprHide(int id)
/// <returns></returns>
public bool ConfirmAuditHide(int userid, AprAmountAuditRequest request)
{
if (request?.Members == null)
if (request?.Members == null || !request.Members.Any())
throw new PerformanceException("审核信息无效,请确认");
foreach (var item in request.Members)
......@@ -907,7 +925,7 @@ public bool ConfirmAuditHide(int userid, AprAmountAuditRequest request)
foreach (var member in request.Members)
{
var apramounts = allApramounts?.Where(t => (t.DoctorName ?? "") == member.DoctorName && (t.PersonnelNumber ?? "") == member.PersonnelNumber);
if (apramounts == null)
if (apramounts == null || !apramounts.Any())
throw new PerformanceException("审核信息无效,请确认");
foreach (var item in apramounts)
......
......@@ -51,14 +51,17 @@ public static void SetCellValue<T>(this ICell cell, object value, T defaultValue
#region SetValue
case "System.String"://字符串类型
cell.SetCellType(CellType.String);
cell.SetCellValue(ConvertHelper.To<string>(value));
break;
case "System.DateTime"://日期类型
cell.SetCellType(CellType.String);
cell.SetCellValue(ConvertHelper.To<DateTime>(value).ToString("yyyy/M/d"));
break;
case "System.Boolean"://布尔型
cell.SetCellType(CellType.String);
cell.SetCellValue(ConvertHelper.To<bool>(value));
break;
......@@ -66,16 +69,19 @@ public static void SetCellValue<T>(this ICell cell, object value, T defaultValue
case "System.Int32":
case "System.Int64":
case "System.Byte":
cell.SetCellType(CellType.Numeric);
cell.SetCellValue(ConvertHelper.To<int>(value));
break;
case "System.Decimal"://浮点型
case "System.Double":
cell.SetCellType(CellType.Numeric);
cell.SetCellValue(ConvertHelper.To<double>(value));
break;
case "System.DBNull"://空值处理
default:
cell.SetCellType(CellType.String);
cell.SetCellValue("");
break;
......@@ -84,6 +90,7 @@ public static void SetCellValue<T>(this ICell cell, object value, T defaultValue
}
catch
{
cell.SetCellType(CellType.String);
cell.SetCellValue("");
}
}
......
......@@ -13,13 +13,13 @@ namespace Performance.Services.ExtractExcelService
{
public class ExtractHelper
{
public static string GetExtractFile(int hospitalId, ref string newFilePath, string allotFilePath = "")
public static string GetExtractFile(int hospitalId, per_allot allot, ref string newFilePath, string allotFilePath = "")
{
string originalPath = string.IsNullOrEmpty(allotFilePath)
? Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Template", "医院绩效模板.xlsx")
: allotFilePath;
CloseAutoFilter(originalPath);
var (tempPath, filePath) = CopyOriginalFile(hospitalId, originalPath);
var (tempPath, filePath) = CopyOriginalFile(hospitalId, originalPath, allot);
newFilePath = filePath;
return tempPath;
}
......@@ -31,14 +31,14 @@ public static string GetExtractFile(int hospitalId, string prefix = "绩效提
return Path.Combine(dpath, $"{prefix}{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.xlsx");
}
private static (string TempPath, string FilePath) CopyOriginalFile(int hospitalId, string originalPath)
private static (string TempPath, string FilePath) CopyOriginalFile(int hospitalId, string originalPath, per_allot allot)
{
var ext = FileHelper.GetExtension(originalPath);
var dpath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Files", $"{hospitalId}", "autoextract");
FileHelper.CreateDirectory(dpath);
string tempPath = Path.Combine(dpath, $"Template{DateTime.Now.ToString("yyyyMMddHHmmssfff")}{ext}");
FileHelper.Copy(originalPath, tempPath);
string filePath = Path.Combine(dpath, $"绩效提取数据{DateTime.Now.ToString("yyyyMMddHHmmssfff")}{ext}");
string filePath = Path.Combine(dpath, $"{allot.Year}{allot.Month.ToString().PadLeft(2, '0')}绩效提取数据{DateTime.Now.ToString("yyyyMMddHHmmssfff")}{ext}");
return (tempPath, filePath);
}
......
......@@ -255,9 +255,15 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
var deptContents = new Dictionary<int, string>
{
{ 1, item.Department },
{ 2, item.NurseAccount },
{ 3, item.DoctorAccount },
{ 4, item.TechnicAccounting },
{ 2, (sheet.SheetName.Contains("门诊")
? deptData.FirstOrDefault(t => !string.IsNullOrEmpty(t.OutNurseAccounting))?.OutNurseAccounting
: deptData.FirstOrDefault(t => !string.IsNullOrEmpty(t.InpatNurseAccounting))?.InpatNurseAccounting) ?? item.NurseAccount },
{ 3, (sheet.SheetName.Contains("门诊")
? deptData.FirstOrDefault(t => !string.IsNullOrEmpty(t.OutDoctorAccounting))?.OutDoctorAccounting
: deptData.FirstOrDefault(t => !string.IsNullOrEmpty(t.InpatDoctorAccounting))?.InpatDoctorAccounting) ?? item.DoctorAccount },
{ 4, (sheet.SheetName.Contains("门诊")
? deptData.FirstOrDefault(t => !string.IsNullOrEmpty(t.OutTechnicAccounting))?.OutTechnicAccounting
: deptData.FirstOrDefault(t => !string.IsNullOrEmpty(t.InpatTechnicAccounting))?.InpatTechnicAccounting) ?? item.TechnicAccounting },
};
foreach (var content in deptContents)
......@@ -296,9 +302,9 @@ public static string HasValue(params string[] list)
private static readonly Dictionary<string, Func<ExtractTransDto, string>> fieldInpat = new Dictionary<string, Func<ExtractTransDto, string>>
{
{ "科室名称", (dto) => dto.Department },
{ "核算单元(医生组)", (dto) => dto.InpatDoctorAccounting },
{ "核算单元(护理组)", (dto) => dto.InpatNurseAccounting },
{ "核算单元(医技组)", (dto) => dto.InpatTechnicAccounting },
{ "核算单元(医生组)", (dto) => dto.InpatDoctorAccounting },
{ "核算单元(护理组)", (dto) => dto.InpatNurseAccounting },
{ "核算单元(医技组)", (dto) => dto.InpatTechnicAccounting },
};
/// <summary> 门诊核算单元 </summary>
......
......@@ -75,10 +75,10 @@ public string Main(int allotId, int hospitalId, string email, string groupName,
IWorkbook workbook = null;
try
{
logService.ReturnTheLog(allotId, groupName, 2, "等待提取", $"确认配置信息是否可完成数据提取...", 1, isSingle);
logService.ClearExtractLog(allotId);
logService.ReturnTheLog(allotId, groupName, 2, "等待提取", $"确认配置信息是否可完成数据提取...", 1, isSingle);
var allots = perallotRepository.GetEntities(t => t.HospitalId == hospitalId);
if (allots == null || !allots.Any(t => t.ID == allotId)) throw new Exception("绩效不存在");
......@@ -89,13 +89,14 @@ public string Main(int allotId, int hospitalId, string email, string groupName,
queryService.ClearHistoryData(allot.ID, groupName, isSingle);
dictionaryService.Handler(hospitalId, allot, groupName, isSingle);
var data = queryService.Handler(hospitalId, allot, groupName, isSingle, ref dict);
var standData = StandDataFormat(hospitalId, data);
dictionaryService.Handler(hospitalId, allot, groupName, isSingle);
var statesArray = new int[] { (int)AllotStates.GenerateSucceed, (int)AllotStates.Archive };
var templateFilePath = ExtractHelper.GetExtractFile(hospitalId, ref extractFilePath, filePath);
var templateFilePath = ExtractHelper.GetExtractFile(hospitalId, allot, ref extractFilePath, filePath);
logService.ReturnTheLog(allotId, groupName, 2, "创建文件", $"模板文件: {templateFilePath}", 1, isSingle);
if (!FileHelper.IsExistFile(templateFilePath)) throw new PerformanceException("抽取文件创建失败");
......@@ -147,7 +148,7 @@ private void WriteDataToFile(IWorkbook workbook, per_allot allot, Dictionary<ExD
ExtractHelper.CreateNotExistSheet(models, workbook);
var employeeDict = peremployeeRepository.GetEntities(t => t.AllotId == allot.ID);
var collectData = collectdataRepository.GetEntities(t => t.AllotID == allot.ID);
var collectData = collectdataRepository.GetEntities(t => t.AllotID == allot.ID && t.Status == 3);
var drugfactorData = drugtypefactorRepository.GetEntities(t => t.AllotID == allot.ID) ?? new List<cof_drugtype_factor>();
if (!exdict.ContainsKey(ExDataDict.IncomeFactor))
......@@ -157,6 +158,7 @@ private void WriteDataToFile(IWorkbook workbook, per_allot allot, Dictionary<ExD
WriteDataFactory factory = new WriteDataFactory();
var types = new List<SheetType> { SheetType.OtherIncome, SheetType.Income, SheetType.Expend, SheetType.Workload, SheetType.OtherWorkload/*, SheetType.AccountBasic*/ };
types.AddRange(OtherConfigSheet);
decimal ratio = 60m;
//string accountBasicSheetName = "";
......@@ -320,5 +322,24 @@ private List<ExtractTransDto> StandDataFormat(int hospitalId, List<ex_result> re
return groupdata.ToList();
}
private readonly List<SheetType> OtherConfigSheet = new List<SheetType>
{
SheetType.AccountExtra,
SheetType.PersonExtra,
SheetType.AccountDrugAssess,
SheetType.AccountMaterialsAssess,
SheetType.AccountScoreAverage,
SheetType.AccountAdjustLaterOtherFee,
SheetType.PersonAdjustLaterOtherFee,
SheetType.BudgetRatio,
SheetType.AssessBeforeOtherFee,
SheetType.PersonOtherManagePerforFee,
SheetType.PersonAdjustLaterOtherManagePerforFee,
SheetType.PersonPostCoefficient,
SheetType.WorkloadMedicineProp,
SheetType.WorkloadCMI,
SheetType.WorkloadIncline,
};
}
}
using Dapper;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.Extensions.Logging;
using Performance.DtoModels;
using Performance.EntityModels;
using Performance.Infrastructure;
using Performance.Repository;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
......@@ -191,36 +194,53 @@ private List<ex_result> ExtractModuleData(per_allot allot, string groupName, boo
logService.ReturnTheLog(allot.ID, groupName, 3, "", ratio > 20 ? 20 : ratio, 1, isSingle);
logService.ReturnTheLog(allot.ID, groupName, 2, "提取数据", $"开始提取模块“{string.Join("、", thisModules.Select(t => t.ModuleName))}”的数据", 1, isSingle);
Dictionary<int, IDbConnection> pools = new Dictionary<int, IDbConnection>();
foreach (var script in scripts.Where(t => t.TypeId == typeId))
{
var config = configs.FirstOrDefault(t => t.Id == script.ConfigId) ?? configs.FirstOrDefault(t => t.DataBaseType == script.DatabaseType);
if (config == null) continue;
var querydata = QueryData(config, allot, script.ExecScript);
if (querydata != null && querydata.Any())
try
{
thisModules.ForEach(f =>
if(!pools.ContainsKey(config.Id))
pools.Add(config.Id, ConnectionBuilder.Create((DatabaseType)config.DataBaseType, config.DbSource, config.DbName, config.DbUser, config.DbPassword));
IDbConnection connection = pools[config.Id];
var parameters = GetParameters(allot);
var querydata = QueryData(connection, parameters, script.ExecScript);
if (querydata != null && querydata.Any())
{
var result = querydata.Select(t => new ex_result
thisModules.ForEach(f =>
{
Department = t.Department,
Category = t.Category?.Trim(),
Fee = t.Value,
DoctorName = t.DoctorName,
PersonnelNumber = t.PersonnelNumber,
Source = f.ModuleName,
DatabaseType = config.DataBaseType,
ConfigId = config.Id,
AllotId = allot.ID,
CreateTime = CreateTime,
}).ToList();
exresultRepository.AddRange(result.ToArray());
data.AddRange(result);
});
var result = querydata.Select(t => new ex_result
{
Department = t.Department,
Category = t.Category?.Trim(),
Fee = t.Value,
DoctorName = t.DoctorName,
PersonnelNumber = t.PersonnelNumber,
Source = f.ModuleName,
DatabaseType = config.DataBaseType,
ConfigId = config.Id,
AllotId = allot.ID,
CreateTime = CreateTime,
}).ToList();
exresultRepository.AddRange(result.ToArray());
data.AddRange(result);
});
}
logService.ReturnTheLog(allot.ID, groupName, 2, "提取数据", $"模块“{string.Join("、", thisModules.Select(t => t.ModuleName))}”的数据已完成提取", 1, isSingle);
}
catch (Exception ex)
{
logger.LogError($"数据库“{config.DbName}”连接失败: {ex}; {Infrastructure.JsonHelper.Serialize(script)}");
logService.ReturnTheLog(allot.ID, groupName, 2, "数据库连接", $"数据库“{config.DbName}”连接失败", 3, isSingle);
}
}
logService.ReturnTheLog(allot.ID, groupName, 2, "提取数据", $"模块“{string.Join("、", thisModules.Select(t => t.ModuleName))}”的数据已完成提取", 1, isSingle);
}
}
......@@ -372,17 +392,30 @@ public IEnumerable<ExtractDto> QueryData(sys_hospitalconfig config, per_allot al
var parameters = GetParameters(allot);
using (var connection = ConnectionBuilder.Create((DatabaseType)config.DataBaseType, config.DbSource, config.DbName, config.DbUser, config.DbPassword))
{
foreach (var item in parameters)
{
execsql = Regex.Replace(execsql, item.Key, item.Value, RegexOptions.IgnoreCase);
}
return QueryData(connection, parameters, execsql);
}
}
/// <summary>
/// 查询数据
/// </summary>
/// <param name="config"></param>
/// <param name="allot"></param>
/// <param name="execsql"></param>
/// <param name="source"></param>
/// <param name="category"></param>
/// <returns></returns>
public IEnumerable<ExtractDto> QueryData(IDbConnection connection, Dictionary<string, string> parameters, string execsql)
{
foreach (var item in parameters)
{
execsql = Regex.Replace(execsql, item.Key, item.Value, RegexOptions.IgnoreCase);
}
logger.LogInformation($"提取绩效数据SQL脚本{execsql}");
var result = connection.Query<ExtractDto>(execsql, commandTimeout: 20000);
logger.LogInformation($"提取绩效数据执行脚本获取数据{result?.Count() ?? 0}条记录");
logger.LogInformation($"提取绩效数据SQL脚本{execsql}");
var result = connection.Query<ExtractDto>(execsql, commandTimeout: 20000);
logger.LogInformation($"提取绩效数据执行脚本获取数据{result?.Count() ?? 0}条记录");
return result;
}
return result;
}
/// <summary>
......
......@@ -22,6 +22,17 @@ public SpecialUnitDataWrite(ILogger logger)
public void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, List<collect_data> collects, Dictionary<ExDataDict, object> exdict = null)
{
if (collects == null || !collects.Any()) return;
var data = collects.Select(t => new ExtractTransDto
{
Department = t.Department,
SpecialAccounting = t.Department,
Category = t.TypeName,
Value = ConvertHelper.To<decimal>(t.CellValue)
}).ToList();
WriteSheetData(sheet, point, sheetType, style, data, exdict);
}
public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetType, ExcelStyle style, object data, Dictionary<ExDataDict, object> exdict = null)
......
......@@ -3,9 +3,11 @@
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.Threading.Tasks;
namespace Performance.Services
......@@ -130,5 +132,11 @@ public bool ClearExtractLog(int allotId)
{
return logdbug.ClearExtractLog(allotId);
}
//todo:log信息展示
public List<log_dbug> GetLogDbug(int allotId)
{
return logdbug.GetEntities(t => t.AllotID == allotId && t.Type==2);
}
}
}
......@@ -372,7 +372,7 @@ public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, List<PerS
UnitType = empolyee.UnitType,
AccountingUnit = empolyee.AccountingUnit,
AccountType = basicRule.AccountUnitType.ToString(),
AccountType = AccountTypeUnit.Recognition(empolyee.JobTitle, basicRule.AccountUnitType),
EmployeeName = empolyee.DoctorName,
FitPeople = empolyee.FitPeople,
FitPeopleRatio = empolyee.FitPeopleRatio,
......@@ -407,17 +407,17 @@ public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, List<PerS
compute.Avg = avg * (empolyee.Basics ?? 0) * compute.Attendance;
compute.Punishment = (empolyee?.Punishment ?? 0);
// 考核前管理绩效
compute.ShouldGiveFee = Math.Round((compute.Efficiency + compute.Scale) * compute.Grant + compute.OtherManagePerfor ?? 0);
compute.ShouldGiveFee = Math.Round((compute.Efficiency + compute.Scale) * compute.Grant + compute.OtherManagePerfor ?? 0, MidpointRounding.AwayFromZero);
// 考核后管理绩效
compute.AssessLaterManagementFee = Math.Round(compute.ShouldGiveFee * compute.ScoreAverageRate * compute.Attendance + compute.Punishment ?? 0);
compute.AssessLaterManagementFee = Math.Round(compute.ShouldGiveFee * compute.ScoreAverageRate * compute.Attendance + compute.Punishment ?? 0, MidpointRounding.AwayFromZero);
// 考核前绩效
compute.PerforSumFee = compute.Attendance == 0 ? Math.Round(compute.ShouldGiveFee ?? 0) : Math.Round(compute.Avg / compute.Attendance + compute.ShouldGiveFee ?? 0);
compute.PerforSumFee = compute.Attendance == 0 ? Math.Round(compute.ShouldGiveFee ?? 0, MidpointRounding.AwayFromZero) : Math.Round(compute.Avg / compute.Attendance + compute.ShouldGiveFee ?? 0, MidpointRounding.AwayFromZero);
// 考核后绩效
compute.GiveFee = Math.Round((compute.Avg ?? 0) + (compute.AssessLaterManagementFee ?? 0));
compute.GiveFee = Math.Round((compute.Avg ?? 0) + (compute.AssessLaterManagementFee ?? 0), MidpointRounding.AwayFromZero);
// 参考基数专用绩效合计
compute.BaiscNormPerforTotal = compute.PerforSumFee;
// 实发绩效
compute.RealGiveFee = Math.Round(((compute.Avg ?? 0) + (compute.AssessLaterManagementFee ?? 0)) * compute.Adjust + (compute.AdjustLaterOtherFee ?? 0) ?? 0);
compute.RealGiveFee = Math.Round(((compute.Avg ?? 0) + (compute.AssessLaterManagementFee ?? 0)) * compute.Adjust + (compute.AdjustLaterOtherFee ?? 0) ?? 0, MidpointRounding.AwayFromZero);
////绩效合计
//compute.PerforSumFee = Math.Round((compute.Avg * (empolyee.Basics ?? 0)) + compute.ShouldGiveFee + compute.AssessBeforeOtherFee ?? 0);
......@@ -442,11 +442,8 @@ public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, List<PerS
/// <param name="empolyeeList"></param>
/// <param name="baiscnormList"></param>
/// <returns></returns>
public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, per_allot allot, List<res_baiscnorm> baiscnormList)
public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, per_allot allot, List<res_baiscnorm> baiscnormList, List<im_accountbasic> accountbasicList = null)
{
////年资系数
//var workyearList = perforCofworkyearRepository.GetEntities(t => t.AllotID == allot.ID);
List<ComputeResult> computeList = new List<ComputeResult>();
if (empolyeeList == null) return computeList;
......@@ -517,22 +514,31 @@ public List<ComputeResult> Compute(List<ComputeEmployee> empolyeeList, per_allot
// 行政高层 行政中层 夜班费
compute.NightWorkPerfor = item.NightWorkPerfor;
//考核前绩效
compute.PerforTotal = Math.Round(compute.BaiscNormValue * compute.PostCoefficient * compute.Attendance + compute.AssessBeforeOtherFee ?? 0);
compute.PerforTotal = Math.Round(compute.BaiscNormValue * compute.PostCoefficient * compute.Attendance + compute.AssessBeforeOtherFee ?? 0, MidpointRounding.AwayFromZero);
//考核后绩效
compute.GiveFee = Math.Round(compute.PerforTotal * compute.ScoreAverageRate + compute.Punishment ?? 0);
compute.GiveFee = Math.Round(compute.PerforTotal * compute.ScoreAverageRate + compute.Punishment ?? 0, MidpointRounding.AwayFromZero);
//实发绩效
compute.RealGiveFee = Math.Round((compute.GiveFee * compute.Adjust + compute.AdjustLaterOtherFee) ?? 0);
compute.RealGiveFee = Math.Round((compute.GiveFee * compute.Adjust + compute.AdjustLaterOtherFee) ?? 0, MidpointRounding.AwayFromZero);
}
else if (AccountUnitType.行政工勤.ToString() == involve)
{
// 行政工勤 根据测算表判读是否需要二次分配 默认不需要
compute.NeedSecondAllot = string.IsNullOrWhiteSpace(item.NeedSecondAllot) ? "否" : item.NeedSecondAllot;
#region 禅道137
// 行政后勤人员不需要二次分配的时候,个人的考核得分及调节系数取4.1表里面的科室的考核得分和调节系数
if (compute.NeedSecondAllot == "否")
{
var resAccount = accountbasicList?.FirstOrDefault(t => UnitTypeUtil.IsOffice(t.UnitType) && t.DoctorAccountingUnit == compute.AccountingUnit);
compute.ScoreAverageRate = resAccount?.DoctorScoringAverage ?? 1;
compute.Adjust = resAccount?.DoctorAdjustFactor ?? 1m;
}
#endregion
//考核前绩效
compute.PerforTotal = Math.Round(compute.BaiscNormValue * compute.PostCoefficient * compute.Attendance + compute.OtherPerfor ?? 0);
compute.PerforTotal = Math.Round(compute.BaiscNormValue * compute.PostCoefficient * compute.Attendance + compute.OtherPerfor ?? 0, MidpointRounding.AwayFromZero);
//考核后绩效 更加开关来控制显示
compute.GiveFee = compute.PerforTotal * compute.ScoreAverageRate;
//实发绩效 更加开关来控制显示
compute.RealGiveFee = Math.Round(compute.GiveFee * compute.Adjust ?? 0);
compute.RealGiveFee = Math.Round(compute.GiveFee * compute.Adjust ?? 0, MidpointRounding.AwayFromZero);
}
computeList.Add(compute);
//// 行政高层 行政中层 夜班费
......
......@@ -17,7 +17,7 @@ public class PerSheetService : IAutoInjection
//private PerforCofdrugpropRepository _perforCofdrugpropRepository;
private PerforCofdrugtypeRepository _perforCofdrugtypeRepository;
public PerSheetService(PerHeaderService perHeader,
//PerforCofdrugpropRepository perforCofdrugpropRepository,
//PerforCofdrugpropRepository perforCofdrugpropRepository,
PerforCofdrugtypeRepository perforCofdrugtypeRepository)
{
_perHeader = perHeader;
......@@ -83,7 +83,7 @@ public SheetType GetSheetType(string sheetName)
return SheetType.Employee;
else if (sheetName.StartsWith("业务中层"))
return SheetType.ClinicEmployee;
else if (sheetName.StartsWith("行政后勤"))
else if (sheetName.StartsWith("行政后勤") || sheetName.StartsWith("行政后勤-"))
return SheetType.LogisticsEmployee;
else if (sheetName.StartsWith("1.0"))
return SheetType.OtherIncome;
......
......@@ -19,6 +19,7 @@ public class PerSheetDataReadAccountExtra : IPerSheetDataRead
HeaderLastRowNum = 1,
HeaderFirstCellNum = 0,
DataFirstRowNum = 2,
DataFirstCellNum = 3,
TotalCellNum = 0,
AccountingUnit = new List<AccountingUnit>
{
......
......@@ -19,7 +19,7 @@ public class PerSheetDataReadPersonExtra : IPerSheetDataRead
HeaderLastRowNum = 1,
HeaderFirstCellNum = 0,
DataFirstRowNum = 2,
DataFirstCellNum = 4,
DataFirstCellNum = 5,
TotalCellNum = 0,
AccountingUnit = new List<AccountingUnit>
{
......
......@@ -531,7 +531,7 @@ public HandsonTable GetReportPersonTag(int hospitalId)
Visible = 1
}).ToList());
var data = reportperformancepersontagsRepository.GetEntities(t => t.HospitalId == hospitalId)?.OrderBy(t=>Convert.ToInt32(t.PersonnelNumber));
var data = reportperformancepersontagsRepository.GetEntities(t => t.HospitalId == hospitalId)?.OrderBy(t => ConvertHelper.To<long>(t.PersonnelNumber));
if (data == null) return result;
List<HandsonRowData> rowDatas = new List<HandsonRowData>();
......@@ -578,7 +578,7 @@ public HandsonTable GetReportTag(int hospitalId)
Visible = 1
}).ToList());
var data = reportperformancetagsRepository.GetEntities(t => t.HospitalId == hospitalId)?.OrderBy(t=>t.UnitType);
var data = reportperformancetagsRepository.GetEntities(t => t.HospitalId == hospitalId)?.OrderBy(t => t.UnitType);
if (data == null) return result;
List<HandsonRowData> rowDatas = new List<HandsonRowData>();
......
......@@ -412,9 +412,12 @@ private void SupplementFixedData(ag_secondallot secondAllot, List<BodyItem> body
var keyValue = new Dictionary<string, string>
{
{ "发放月份", $"{secondAllot.Year}{secondAllot.Month.ToString().PadLeft(2, '0')}月" },
{ "可分配绩效", secondAllot.RealGiveFee.ToString() },
//{ "可分配绩效", secondAllot.RealGiveFee.ToString() },
};
if (new int[] { 1, 4 }.Contains(secondAllot.Status ?? 0))
keyValue.Add("可分配绩效", secondAllot.RealGiveFee.ToString());
var pairs = new Dictionary<string, string>
{
{ "职称绩效", "年资职称绩效占比" },
......@@ -1011,7 +1014,12 @@ public enum EmployeeSource
/// <summary>
/// 人员字典
/// </summary>
EmployeeDict = 2
EmployeeDict = 2,
/// <summary>
/// 工作量
/// </summary>
Workload = 3
}
/// <summary>
......
......@@ -8,6 +8,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Performance.Services
{
......@@ -511,7 +512,42 @@ public void SaveSecondAllotHeadData(int secondId, string json)
List<ag_worktype_source> insertData = new List<ag_worktype_source>();
var worktypeSources = agworktypesourceRepository.GetEntities(t => t.SecondId == secondId);
if (worktypeSources == null || !worktypeSources.Any())
return;
{
var workTypes = agworkloadtypeRepository.GetEntities();
var workValue = new List<int>();
foreach (var item in keys)
{
var value = item.Replace("workload_ratio_", "").Replace("workload_amount_", "");
if (!Regex.IsMatch(value, @"^\d")) continue;
workValue.Add(Convert.ToInt32(value));
}
if (workValue == null || !workValue.Any())
return;
foreach (var value in workValue)
{
for (int i = 0; i < prefix.Length; i++)
{
var fieldId = prefix[i] + $"{value}";
var typeName = workTypes?.FirstOrDefault(t => t.Id == value)?.TypeName;
var source = new ag_worktype_source
{
WorkTypeId = value,
SecondId = secondId,
FieldId = fieldId,
FieldName = i == 0 ? typeName + "占比" : typeName + "金额",
Value = prefix[i].StartsWith(prefix[0]) ? (decimal?)Convert.ToDecimal(dict[fieldId.ToLower()]) : null,
};
insertData.Add(source);
}
}
agworktypesourceRepository.AddRange(insertData.ToArray());
}
worktypeSources = agworktypesourceRepository.GetEntities(t => t.SecondId == secondId);
foreach (var key in keys)
{
......
......@@ -113,7 +113,8 @@ public SheetExportResponse SheetExport(int sheetID)
}
else
{
CommonExport(sheetID, response);
CommonExport(sheetID, response,sheet.SheetType);
//response.Header = response.Header.Select(t => t.Data.ToDistinct(c => c.CellValue)).ToList();
if (new int[] { (int)SheetType.Income, (int)SheetType.OtherIncome, (int)SheetType.Expend, (int)SheetType.Workload }.Contains(sheet.SheetType.Value))
{
var point = 0;
......@@ -141,12 +142,17 @@ public SheetExportResponse SheetExport(int sheetID)
return response;
}
private void CommonExport(int sheetID, SheetExportResponse response)
private void CommonExport(int sheetID, SheetExportResponse response,int? sheetType)
{
var headList = _perforImHeaderRepository.GetEntities(t => t.SheetID == sheetID)?.OrderBy(t => t.PointCell).ToDistinct(t=>t.CellValue);
var headList = _perforImHeaderRepository.GetEntities(t => t.SheetID == sheetID)?.OrderBy(t => t.PointCell);
if (headList == null) return;
var dataList = _perforImDataRepository.GetEntities(t => t.SheetID == sheetID)?.OrderByDescending(t => t.AccountingUnit).ToList();
if (sheetType == (int)SheetType.AccountBasic)
headList = headList.ToDistinct(t => t.CellValue).OrderBy(t => t.PointCell);
var dataList = _perforImDataRepository.GetEntities(t => t.SheetID == sheetID)?.OrderByDescending(t => t.AccountingUnit).ToList();
var sheet = _perforImSheetRepository.GetEntity(t => t.ID == sheetID);
//添加系数值
......
using Performance.DtoModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Performance.Services
......@@ -12,7 +13,7 @@ public class UnitTypeUtil
/// </summary>
/// <param name="unit"></param>
/// <returns></returns>
public static bool IsOffice(int unit)
public static bool IsOffice(int? unit)
{
return unit == (int)UnitType.行政后勤;
}
......@@ -30,10 +31,35 @@ public static bool IsOffice(string unit)
/// 核算单元类型是否相同
/// </summary>
/// <param name="left"></param>
/// <param name="right"></param>
/// <returns></returns>
public static bool IsEqualsUnitType(string left, string right)
{
return left?.Replace("行政后勤", "行政工勤") == right?.Replace("行政后勤", "行政工勤");
}
public static bool Is(string unit, params UnitType[] types)
{
return !string.IsNullOrEmpty(unit) && types.Any(w => IsEqualsUnitType(w.ToString(), unit));
}
}
public class AccountTypeUnit
{
private static string[] dic = new string[] { "科主任", "护士长" };
/// <summary>
/// 自动识别职称文本
/// </summary>
/// <param name="name"></param>
/// <param name="defaultValue"></param>
/// <returns></returns>
public static string Recognition(string name, AccountUnitType defaultValue)
{
if (dic.Any(w => !string.IsNullOrEmpty(name) && name.Contains(w)))
return dic.First(w => !string.IsNullOrEmpty(name) && name.Contains(w));
return defaultValue.ToString();
}
}
}
......@@ -129,12 +129,20 @@ public sys_role GetUserFirstRole(int userId)
return role;
}
public List<int> GetUserHospital(int userId)
{
var userHospital = _userhospitalRepository.GetEntities(t => t.UserID == userId);
if (userHospital != null && userHospital.Any(w => w.HospitalID.HasValue))
return userHospital.Where(w => w.HospitalID.HasValue).Select(w => w.HospitalID.Value).ToList();
return new List<int>();
}
/// <summary>
/// 查询用户列表
/// </summary>
/// <param name="userID"></param>
/// <returns></returns>
public List<UserResponse> GetUserList(int userID)
public List<UserResponse> GetUserList(int userID,int roleType=1)
{
var userRoles = _userroleRepository.GetEntities();
var userHospitals = _userhospitalRepository.GetEntities();
......@@ -143,6 +151,18 @@ public List<UserResponse> GetUserList(int userID)
var roles = _roleRepository.GetEntities();
var userrole = userRoles?.FirstOrDefault(t => t.UserID == userID);
if (roleType == 12)
{
var jxQuery = userRoles.Where(t=>t.RoleID==roles?.FirstOrDefault(c=>c.RoleName=="绩效查询")?.ID).Select(t => t.UserID);
users = users.Where(t => jxQuery.Contains(t.ID)).ToList();
}
else
{
var jxQuery = userRoles.Where(t =>roles.Where(c => c.RoleName != "绩效查询").Select(c=>c.ID).Contains(t.RoleID)).Select(t => t.UserID);
users = users.Where(t => jxQuery.Contains(t.ID)).ToList();
}
if (userrole == null)
throw new PerformanceException("用户未配置角色");
var role = roles?.FirstOrDefault(t => t.ID == userrole.RoleID);
......@@ -727,6 +747,11 @@ public HandsonTable GetUserHandsFlat()
return result;
}
/// <summary>
/// 批量保存用户
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public string SaveUserHandsFlat(UserCollectData request)
{
try
......@@ -735,7 +760,7 @@ public string SaveUserHandsFlat(UserCollectData request)
var getUsers = _userRepository.GetEntities();
var roles = _roleRepository.GetEntities();
var hospitals = _hospitalRepository.GetEntities();
//hack:后续修改为accounting中的数据
var accounts = perforCofaccountingRepository.GetEntities();
//var allot = _perallotRepository.GetEntities(t => t.HospitalId == request.HospitalId);
//var res = accounts?.Join(allot, t => t.AllotId, w => w.ID, (t, w) => new cof_accounting { AccountingUnit = t.AccountingUnit }).Distinct();
......
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