Commit 654deda7 by lcx

Merge branch 'feature/实发绩效检验,医技组绩效,绩效汇总表合并' into develop

parents 21af914a 0a9aedaa
......@@ -74,6 +74,22 @@ public ApiResponse<List<res_specialunit>> GetSpecial([FromBody] ComputerRequest
}
/// <summary>
/// 医技组科室绩效列表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("getmedicaldata")]
[HttpPost]
public ApiResponse<List<DeptResponse>> GetMedicalTechnician([FromBody] ComputerRequest request)
{
var allot = _allotService.GetAllot(request.AllotId);
if (null == allot)
throw new PerformanceException("当前绩效记录不存在");
var list = _computeService.GetMedicalPerformance(request.AllotId);
return new ApiResponse<List<DeptResponse>>(ResponseType.OK, "ok", list);
}
/// <summary>
/// 医生组科室绩效列表
/// </summary>
/// <param name="request"></param>
......@@ -386,8 +402,14 @@ public ApiResponse<res_baiscnorm> EditHospitalAvg([FromBody] ComputerAvgRequest
[HttpPost]
public ApiResponse CustomColumnHeaders([FromBody] ComputerAliasRequest request)
{
var result = _computeService.CustomColumnHeaders(request.HospitalId, request.Route);
if (request.Heads != null)
for (int i = 0; i < request.Heads.Length; i++)
{
request.Heads[i] = request.Heads[i].ToLower();
}
var result = _computeService.CustomColumnHeaders(request.HospitalId, request.Route, request.Heads);
return new ApiResponse(ResponseType.OK, result);
}
/// <summary>
......
......@@ -3,6 +3,7 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Performance.DtoModels;
using Performance.DtoModels.Request;
using Performance.EntityModels;
using Performance.Infrastructure;
using Performance.Services;
......@@ -318,6 +319,8 @@ public ApiResponse GetAprDetail([FromBody] per_apr_amount request)
if (employee == null || !employee.Any())
return new ApiResponse(ResponseType.OK, "ok", employee);
var result = employee.GroupBy(t => new { t.AccountingUnit, t.PersonnelNumber, t.DoctorName }).Select(t => new
{
PersonnelNumber = t.Key.PersonnelNumber,
......@@ -736,6 +739,22 @@ public ApiResponse GetDeptComparison([FromBody] ComparisonPagingRequest request)
return new ApiResponse(ResponseType.OK, relust);
}
/// <summary>
/// 实发绩效校验
/// </summary>
/// <param name="allotId"></param>
/// <returns></returns>
[Route("getDeptComparisonTotal/{allotId}")]
[HttpPost]
public ApiResponse GetDeptComparisonTotal([FromRoute] int allotId)
{
var allot = allotService.GetAllot(allotId);
if (allot == null)
return new ApiResponse(ResponseType.ParameterError, "allotId无效");
var relust = employeeService.GetDeptComparisonTotal(allotId);
return new ApiResponse(ResponseType.OK, relust);
}
#region 手工录入
/// <summary>
......@@ -767,7 +786,6 @@ public ApiResponse GetGatherHands([FromRoute] int allotId, [FromBody] GatherRequ
{
if (allotId <= 0)
return new ApiResponse(ResponseType.Fail, "参数错误", "allotid无效");
var relust = employeeService.GetGatherHands(allotId, request);
return new ApiResponse(ResponseType.OK, relust);
}
......@@ -780,14 +798,19 @@ public ApiResponse GetGatherHands([FromRoute] int allotId, [FromBody] GatherRequ
/// <returns></returns>
[Route("savegatherhands/{allotId}")]
[HttpPost]
public ApiResponse SaveGatherHands(int allotId, [FromBody] SaveGatherData request)
public ApiResponse SaveGatherHands([FromRoute] int allotId, [FromBody] SaveGatherData request)
{
if (allotId <= 0)
return new ApiResponse(ResponseType.Fail, "参数错误", "allotid无效");
if (string.IsNullOrEmpty(request.Source) || string.IsNullOrEmpty(request.Category))
return new ApiResponse(ResponseType.OK);
return new ApiResponse(ResponseType.Fail);
if (request.Data == null || !request.Data.Any())
return new ApiResponse(ResponseType.Fail, "用户提交数据为空");
employeeService.CheckGatherData(allotId, request);
employeeService.SaveGatherHands(allotId, request);
employeeService.AddCategoryToConfig(allotId);
return new ApiResponse(ResponseType.OK);
}
......@@ -795,33 +818,40 @@ public ApiResponse SaveGatherHands(int allotId, [FromBody] SaveGatherData reques
/// 手工录入列表 - 明细
/// </summary>
/// <param name="allotId"></param>
/// <param name="request"></param>
/// <param name="department">科室</param>
/// <param name="source">来源</param>
/// <param name="request">分页</param>
/// <returns></returns>
[Route("getgather/{allotId}")]
[Route("getgather/{allotId},{department},{source}")]
[HttpPost]
public ApiResponse GetGather([FromRoute] int allotId, [FromBody] PersonParamsRequest request)
public ApiResponse GetGather([FromRoute] int allotId, string department, string source, [FromBody] PersonParamsRequest request)
{
if (allotId <= 0)
return new ApiResponse(ResponseType.Fail, "参数错误", "allotid无效");
if (allotId <= 0 || string.IsNullOrEmpty(department) || string.IsNullOrEmpty(source))
return new ApiResponse(ResponseType.Fail, "参数错误", "请检查allotId,department,source是否正确");
var result = employeeService.GetGather(allotId, request);
var result = employeeService.GetGather(allotId, department, source, request);
return new ApiResponse(ResponseType.OK, result);
}
/// <summary>
/// 手工录入列表 - 汇总
/// </summary>
/// <param name="allotId"></param>
/// <param name="request"></param>
/// <param name="request">分页</param>
/// <returns></returns>
[Route("getgathertotal/{allotId}")]
[HttpPost]
public ApiResponse GetGatherTotal([FromRoute] int allotId, [FromBody] PersonParamsRequest request)
{
return new ApiResponse(ResponseType.OK);
}
if (allotId <= 0)
return new ApiResponse(ResponseType.Fail, "参数错误", "allotid无效");
var result = employeeService.GetGatherTotal(allotId, request);
return new ApiResponse(ResponseType.OK, result);
}
#endregion
}
}
......@@ -61,13 +61,13 @@ public ApiResponse CustomExtract(int allotId)
}
else
{
scopedQueue.Send(new Notification(allotId, "Notification", new TextContent("自定义数据提取数据失败", NotificationLevel.ERR)));
scopedQueue.Send(new Notification(allotId, "ReceiveMessage", new TextContent("自定义数据提取数据失败", NotificationLevel.ERR)));
}
await Task.Delay(TimeSpan.FromSeconds(5), token);
}
});
_notificationQueue.Send(new Notification(allotId, "Notification", new TextContent("自定义数据提取任务开始执行")));
_notificationQueue.Send(new Notification(allotId, "ReceiveMessage", new TextContent("自定义数据提取任务开始执行")));
return new ApiResponse(ResponseType.OK);
......
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Memory;
using Performance.DtoModels;
using Performance.Infrastructure;
using System;
using System.IO;
using System.Threading.Tasks;
namespace Performance.Api
{
/// <summary>
/// 过期限制
/// </summary>
public class ExpirationLimitMiddleware
{
private readonly RequestDelegate _next;
public ExpirationLimitMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
if (context.Request.Path.StartsWithSegments("/api/function/limit"))
{
var response = new ApiResponse(ResponseType.OK, new
{
ExpirationTime = FunctionLimit.Limit.ExpirationTime.ToString("yyyy-MM-dd"),
Remark = FunctionLimit.Limit.Remark,
});
context.Response.ContentType = "application/json";
await context.Response.WriteAsync(JsonHelper.Serialize(response));
return;
}
else if (FunctionLimit.Limit.ExpirationTime > DateTime.Now)
{
await _next.Invoke(context);
return;
}
else
{
var response = new ApiResponse(ResponseType.Expiration, FunctionLimit.Limit.Remark);
context.Response.ContentType = "application/json";
await context.Response.WriteAsync(JsonHelper.Serialize(response));
}
}
}
}
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using XC.RSAUtil;
namespace Performance.Api
{
public class LimitInformation
{
public DateTime ExpirationTime { get; set; }
public string Remark { get; internal set; }
}
public class FunctionLimit
{
public static LimitInformation Limit { get; } = new LimitInformation();
public static void Init()
{
string message = "此网站的验证证书有问题,验证证书已过期或还未生效,请及时联系供应厂商进行维护升级。";
var filePath = Path.Combine(Environment.CurrentDirectory, "secret.key");
if (!File.Exists(filePath))
{
Limit.ExpirationTime = DateTime.MinValue;
Limit.Remark = message;
return;
}
string content = ReadLimitContent(filePath);
if (string.IsNullOrEmpty(content))
{
Limit.ExpirationTime = DateTime.MinValue;
Limit.Remark = message;
return;
}
var timestamp = ConvertToExpiration(content);
if (timestamp == 0)
{
Limit.ExpirationTime = DateTime.MinValue;
Limit.Remark = message;
return;
}
Limit.ExpirationTime = (new DateTime(1970, 1, 1, 8, 0, 0, DateTimeKind.Unspecified)).AddSeconds(timestamp);
Limit.Remark = Limit.ExpirationTime > DateTime.Now ? "已授权开放使用!" : message;
}
private static long ConvertToExpiration(string content)
{
long result = 0;
try
{
var bigDataRsa = new RsaPkcs8Util(Encoding.UTF8, "", privateKey, 2048);
var timestamp = bigDataRsa.DecryptBigData(content, RSAEncryptionPadding.Pkcs1);
long.TryParse(timestamp, out result);
return result;
}
catch (Exception) { }
return result;
}
private static string ReadLimitContent(string filePath)
{
var content = "";
try
{
using (FileStream stream = new FileStream(filePath, FileMode.Open))
using (StreamReader reader = new StreamReader(stream))
{
content = reader.ReadToEnd();
}
}
catch (Exception) { }
return content;
}
private static string privateKey = @"-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC/XTloNsKshhr/
GC34GSQqKxiojkSWBZ+Xe3SxryqrYjx8yyjdrTgBq8lXOO9xtu+jr3XcFwHhFsq5
iK8qwRZQhinASjOFroeszrn0dbuLMT3ad+pCfdkXKcOwmCifHWLqODn0JXmPnTx5
8F1JD954J1Es8ugyJ6S77T0iPezmHvPgxV0Cn4E7Lg2114LwBgy1Kgb5S/b3pz5P
MQKECPRqK69SRIzUU7Nvw1LrqjK9OF5ZWYdGBlCBpRvbd0RIrgJ3NzAUCrE5t3Y+
KI3UM02FhoGzWM0j8oC/P6GGkNL8bY5JMR2TGWfUiB1UUjT+Y2hCCl0tfZUBWPDu
NVeqB9dxAgMBAAECggEAGOU56LLnFKbFsFYm9NXgfJPqu1L23UWSA5UOE2ekd3Nq
RxnvERfN53m/0dcYX4TbHEJhZOahWfUrHoQHtdo02vj5SYjdtxCDmhmy23jNk0gu
sdNT6J6StY67ZKgG8NxT2ADEmVyeue5MxdhdannkCWGkD+LyDkRWDBTLFT9VKIK4
dV22NdL7uvIYH+dP8fUYm6sM65+fAcPwj5bVPhCI90TjJo93e2/aBtzaMjdrRcfY
r8AaRMuY8m/QDvVhIaurki1JxG+Qwz4gT5eWhI8qUwGsxti92/Mz+B3oT8X+AhP0
tEsRNxu+BrDeb6qM3JpYaR4UbJIFLljVWRFRa67L+QKBgQD1f1eoh6YbMXI9c3Ty
3u5YRawVRG47MtuMDu94PqUKjo57evQEaOvtwPYADR1G1qFDRJbSbTsVhXEH5YaA
SuYdNYBNYJzPkD6Du+gwFqiemolKbMb2bTGtdci4FEZIcHS8u+FaARtAJuUWqtTY
KMqyu95JTcLrHYBnlynWwy+QdwKBgQDHjQVZGIOH2WW6OG7wHHicc7SxjRiBTADk
aIJAM1JJlgTHZ4o9v47DBOPAT7MCcbI8Ln+/kbJgdNMFC3SyPpzNHtvRp48dNXxx
liGtLys8GBaBEDzI0jmXb5nZXLk5DfwZEOQ57T4TbYjuBlwjY/FQl+7HWUKgwEt8
AvPjefb5VwKBgQC+YisQv2HJ5Oa7UTZ4wvoD6sQxGgiCUEaCr3J2xd4n+bX1fLyQ
Tu3oS6R7FbCGpxwYlrCAL8WKQxoNDarpAyzBqiP93da+ARb6AldmM6xAk4e09/a0
VKoZ4yXt24tF0jA1zV5N9l2zunYexgyaNcg8JAWWw39N5msV6ty/eE8CsQKBgQCi
IfI2cbRsrDX7F98LOBbHBzvJBtriMt6GtmMdxpUVNM6tNXMcuIdF7LMfjaHkWnx2
aVFiVP6ZYFITxzsJl9XO00PHFF0zXkG+CD1UeP6n1Opz8r1wbV5drE9UTAIyWSp7
Mz470oadQmH/AyvZlVp8IPXhAqUf9x1dpQiDypTgAQKBgQDLeiwRRG6SxnZDddDK
RNKJaMz1q0GM3KPC4MuM8gPkWBRnrGZ67J3bTpgPYVVFxxyIspDG6miMATfZXnDF
OKst4raozj7kX5ghZRZCI2okvFEipVkBSwPdAB20mx5DENXOtpr2h+V/57AgD8Ua
UGTpnMMY2uONH/H/mMPny8D5LA==
-----END PRIVATE KEY-----";
}
}
using Microsoft.AspNetCore.Builder;
namespace Performance.Api
{
public static class RequestCultureMiddlewareExtensions
{
/// <summary>
/// 过期限制
/// </summary>
/// <param name="builder"></param>
/// <returns></returns>
public static IApplicationBuilder UseExpirationLimit(this IApplicationBuilder builder)
{
return builder.UseMiddleware<ExpirationLimitMiddleware>();
}
}
}
......@@ -22,6 +22,16 @@
<EmbeddedResource Remove="Files\**" />
<None Remove="Files\**" />
</ItemGroup>
<ItemGroup>
<Content Include="secret.key">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="XC.RSAUtil" Version="1.3.6" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Performance.DtoModels\Performance.DtoModels.csproj" />
......
......@@ -11,6 +11,7 @@ public class Program
{
public static void Main(string[] args)
{
FunctionLimit.Init();
var logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
try
{
......@@ -45,5 +46,6 @@ public static void Main(string[] args)
logging.SetMinimumLevel(LogLevel.Trace);
})
.UseNLog();
}
}
......@@ -5,12 +5,14 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Authorization;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Performance.Api.Configurations;
using Performance.DtoModels;
using Performance.Infrastructure;
using Performance.Services;
using System.Globalization;
......@@ -112,6 +114,9 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseStatusCodePagesWithReExecute("/error/{0}");
}
app.UseExpirationLimit();
app.UseRouting();
app.UseAuthentication();
......@@ -145,4 +150,5 @@ private void JsonOptions(MvcNewtonsoftJsonOptions json)
json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
}
}
}
UvHeSCNjMucE7mxfpB2wK1XQVSrGyXzxtRzclDPX+IoTYesKy64t4LEB4RpXEkF6lr8f9+GFSX0FPokmRGOzmP/Z+1kYdcu1FnA6DKI5izIe8BmL4GrGzyJYfxrPju8UzHiMexCHBxwzg7KrASjQBuzGS8UDvmOM5+ycZgar3h9zuG//kS9am2+a6BnWYk0iEOH7PGqo/QUOzN7hiSTF6y+Bl0ZmwdFy88sfBDccL9oZ4IbiM1I/zZjC1E4f6A97Tdr6h+BJ7e6kClrbk7TbOGMYKi5JY3CKCmVtCEUSvNriiHlazneLYYIDLFtjpor/9xfG+EDjrPANGtijoNi4YQ==
\ No newline at end of file
......@@ -440,6 +440,13 @@
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ComputeController.GetMedicalTechnician(Performance.DtoModels.ComputerRequest)">
<summary>
医技组科室绩效列表
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ComputeController.GetDoctor(Performance.DtoModels.ComputerRequest)">
<summary>
医生组科室绩效列表
......@@ -1190,6 +1197,13 @@
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.EmployeeController.GetDeptComparisonTotal(System.Int32)">
<summary>
实发绩效校验
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.EmployeeController.GetGatherDrop(System.Int32)">
<summary>
手工录入 - 下拉列表
......@@ -1213,12 +1227,14 @@
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.EmployeeController.GetGather(System.Int32,Performance.DtoModels.PersonParamsRequest)">
<member name="M:Performance.Api.Controllers.EmployeeController.GetGather(System.Int32,System.String,System.String,Performance.DtoModels.PersonParamsRequest)">
<summary>
手工录入列表 - 明细
</summary>
<param name="allotId"></param>
<param name="request"></param>
<param name="department">科室</param>
<param name="source">来源</param>
<param name="request">分页</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.EmployeeController.GetGatherTotal(System.Int32,Performance.DtoModels.PersonParamsRequest)">
......@@ -1226,7 +1242,7 @@
手工录入列表 - 汇总
</summary>
<param name="allotId"></param>
<param name="request"></param>
<param name="request">分页</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ExConfigController.Extract(Performance.DtoModels.ModModuleRequest)">
......@@ -1656,13 +1672,27 @@
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportController.AllComputeViewDownload(Performance.DtoModels.BeginEndTimeDown)">
<member name="M:Performance.Api.Controllers.ReportController.AllComputeViewDownload(Performance.DtoModels.BeginEndTime)">
<summary>
全院绩效发放(视图)下载
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportController.GetWholeHospitalGrantSummary(Performance.DtoModels.HospitalGrantSummary)">
<summary>
全院绩效发放汇总表(视图)
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportController.WholeHospitalGrantSummaryDownload(Performance.DtoModels.HospitalGrantSummaryDown)">
<summary>
全院绩效发放汇总表(视图)下载
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportController.GethosdataView(Performance.DtoModels.BeginEndTime)">
<summary>
全院核算绩效发放(视图)
......@@ -1670,13 +1700,27 @@
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportController.GethosdataView(Performance.DtoModels.BeginEndTimeDown)">
<member name="M:Performance.Api.Controllers.ReportController.GethosdataViewDown(Performance.DtoModels.BeginEndTime)">
<summary>
全院核算绩效发放(视图) 下载
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportController.GetWholeHospitalAccountingGrantSummary(Performance.DtoModels.HospitalGrantSummary)">
<summary>
全院核算绩效发放汇总表(视图)
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportController.WholeHospitalAccountingGrantSummaryDownload(Performance.DtoModels.HospitalGrantSummaryDown)">
<summary>
全院核算绩效发放汇总表(视图)下载
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportController.AllComputeViewByPM(Performance.DtoModels.BeginEndTime)">
<summary>
获取财务全院绩效列表(视图)
......@@ -1684,13 +1728,27 @@
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportController.AllComputeByPMViewDownLoad(Performance.DtoModels.BeginEndTimeDown)">
<member name="M:Performance.Api.Controllers.ReportController.AllComputeByPMViewDownLoad(Performance.DtoModels.BeginEndTime)">
<summary>
获取财务全院绩效列表(视图)下载
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportController.GetWholeHospitalFinanceGrantSummary(Performance.DtoModels.HospitalGrantSummary)">
<summary>
财务全院绩效发放汇总表(视图)
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportController.WholeHospitalFinanceGrantSummaryDownload(Performance.DtoModels.HospitalGrantSummaryDown)">
<summary>
财务全院绩效发放汇总表(视图)下载
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportGlobalController.GetAllReportGlobal(System.Int32)">
<summary>
获取报表配置信息
......@@ -2107,6 +2165,18 @@
<param name="query"></param>
<returns></returns>
</member>
<member name="T:Performance.Api.ExpirationLimitMiddleware">
<summary>
过期限制
</summary>
</member>
<member name="M:Performance.Api.RequestCultureMiddlewareExtensions.UseExpirationLimit(Microsoft.AspNetCore.Builder.IApplicationBuilder)">
<summary>
过期限制
</summary>
<param name="builder"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.ClaimService.GetUserId">
<summary>
获取当前请求登录ID
......
......@@ -1695,6 +1695,11 @@
状态 1 可用 0 禁用
</summary>
</member>
<member name="P:Performance.EntityModels.cof_alias.SumStatus">
<summary>
状态 1 求和 0 不求和
</summary>
</member>
<member name="T:Performance.EntityModels.cof_check">
<summary>
上传excel文件校验配置
......@@ -3569,11 +3574,6 @@
创建时间
</summary>
</member>
<member name="P:Performance.EntityModels.ex_result.IsDelete">
<summary>
1 删除 0 未删除
</summary>
</member>
<member name="P:Performance.EntityModels.ex_result_gather.Id">
<summary>
......@@ -3624,11 +3624,6 @@
备注
</summary>
</member>
<member name="P:Performance.EntityModels.ex_result_gather.States">
<summary>
1 未通过 2 通过
</summary>
</member>
<member name="T:Performance.EntityModels.ex_script">
<summary>
......
......@@ -69,8 +69,8 @@ static void Main(string[] args)
var task = emailService.SendAsync(message);
task.Wait();
Mapper.Initialize(cfg => cfg.AddProfile<AutoMapperConfigs>());
services.AddAutoMapper();
//Mapper.Initialize(cfg => cfg.AddProfile<AutoMapperConfigs>());
//services.AddAutoMapper();
//service注入 repoitory注入
services
......@@ -79,10 +79,10 @@ static void Main(string[] args)
var connection = configuration.GetSection("AppConnection:PerformanceConnectionString").Value;
services.AddDbContext<PerformanceDbContext>(options =>
{
options.UseMySQL(connection);
});
//services.AddDbContext<PerformanceDbContext>(options =>
//{
// options.UseMySQL(connection);
//});
Console.ReadKey();
}
......
......@@ -94,12 +94,19 @@ public class ColumnHeadsConfig
{
public static List<Heads> GatherHeads { get; } = new List<Heads>
{
new Heads{Column="科室",Name=nameof(ex_result_gather.Department)},
new Heads{Column="医生姓名",Name=nameof(ex_result_gather.DoctorName)},
new Heads{Column="人员工号",Name=nameof(ex_result_gather.PersonnelNumber)},
new Heads{Column="费用类型",Name=nameof(ex_result_gather.Category)},
new Heads{Column="费用",Name=nameof(ex_result_gather.Fee)},
new Heads{Column="来源",Name=nameof(ex_result_gather.Source)}
new Heads{Column="来源",Name=nameof(GatherInfoRequest.Source)},
new Heads{Column="科室",Name=nameof(GatherInfoRequest.Department)},
new Heads{Column="医生姓名",Name=nameof(GatherInfoRequest.DoctorName)},
new Heads{Column="人员工号",Name=nameof(GatherInfoRequest.PersonnelNumber)},
new Heads{Column="费用类型",Name=nameof(GatherInfoFee.Category)},
new Heads{Column="费用",Name=nameof(GatherInfoFee.Fee)},
};
public static List<Heads> GatherTotal { get; } = new List<Heads>
{
new Heads{Column="科室",Name=nameof(GatherTotalRequest.Department)},
new Heads{Column="来源",Name=nameof(GatherTotalRequest.Source)},
new Heads{Column="费用",Name=nameof(GatherTotalRequest.Fee)}
};
}
......
using FluentValidation;
using Performance.EntityModels;
using System;
using System.Collections.Generic;
using System.Text;
......@@ -49,31 +50,46 @@ public ComputerRequestValidator()
public class ComputerAliasRequest
{
public int HospitalId { get; set; }
public string Route { get; set; }
public string[] Heads { get; set; }
}
public class BeginEndTime
{
public string BeginTime { get; set; } // 2021-01
public string EndTime { get; set; } // 2021-08
public int CurrentPage { get; set; }
public int PageSize { get; set; }
public int HospitalId { get; set; }
public List<TitleValue> Search { get; set; }
public string SortBy { get; set; }
public int CurrentPage { get; set; } = 0;
public int PageSize { get; set; } = 0;
}
public class BeginEndTimeDown
public class HospitalGrantSummary : BeginEndTime
{
public string BeginTime { get; set; } // 2021-01
public string EndTime { get; set; } // 2021-08
public int HospitalId { get; set; }
public List<string> GroupBy { get; set; }
public List<string> SumBy { get; set; }
}
public class QueryComputeByDateGetPage
public class HospitalGrantSummaryDown : HospitalGrantSummary
{
public string[] heads { get; set; }
}
public class QueryComputeByDateGetPage : GetPage
{
public List<dynamic> Data { get; set; }
public Dictionary<string, decimal> TotalData { get; set; }
}
public class GetPage
{
public int CurrentPage { get; set; }
public int TotalPages { get; set; }
public int PageSize { get; set; }
public int TotalCount { get; set; }
}
}
......@@ -4,10 +4,10 @@
namespace Performance.DtoModels
{
public class ComparisonResponse
public class ComparisonResponse<T>
{
public List<Heads> Heads { get; set; }
public Comparison Datas { get; set; }
public T Datas { get; set; }
}
public class Heads
......@@ -16,9 +16,9 @@ public class Heads
public string Name { get; set; }
}
public class Comparison
public class Comparison<T>
{
public List<view_check_emp> Datas { get; set; }
public List<T> Datas { get; set; }
public int TotalCount { get; set; }
}
......
using Performance.EntityModels;
using Performance.DtoModels.Request;
using Performance.EntityModels;
using Performance.Infrastructure.Models;
using System.Collections.Generic;
......@@ -7,7 +8,16 @@ namespace Performance.DtoModels
public class GatherResponse
{
public List<Heads> Heads { get; set; }
public PageList<ex_result_gather> Datas { get; set; }
public List<GatherTotalRequest> Datas { get; set; }
public int CurrentPage { get; set; }
public int TotalPages { get; set; }
public int PageSize { get; set; }
public int TotalCount { get; set; }
}
public class GatherInfo
{
public List<Heads> Heads { get; set; }
public List<GatherInfoRequest> Datas { get; set; }
public int CurrentPage { get; set; }
public int TotalPages { get; set; }
public int PageSize { get; set; }
......@@ -28,4 +38,27 @@ public class GatherRequest
public string Source { get; set; }
public string Category { get; set; }
}
public class GatherTotalRequest
{
public int ID { get; set; }
public string Department { get; set; }
public string Source { get; set; }
public decimal Fee { get; set; }
}
public class GatherInfoRequest
{
public string Source { get; set; }
public string Department { get; set; }
public string DoctorName { get; set; }
public string PersonnelNumber { get; set; }
public List<GatherInfoFee> Detail { get; set; }
}
public class GatherInfoFee
{
public string Category { get; set; }
public decimal? Fee { get; set; }
}
}
......@@ -15,5 +15,6 @@ public enum ResponseType
Disable = 7,
TooManyRequests = 8,
Warning = 9,
Expiration = 99,
}
}
......@@ -50,5 +50,9 @@ public class cof_alias
/// 状态 1 可用 0 禁用
/// </summary>
public Nullable<int> States { get; set; }
/// <summary>
/// 状态 1 求和 0 不求和
/// </summary>
public Nullable<int> SumStatus { get; set; }
}
}
......@@ -79,6 +79,6 @@ public class ex_result
/// <summary>
/// 1 删除 0 未删除
/// </summary>
public int IsDelete { get; set; }
// public int IsDelete { get; set; }
}
}
......@@ -49,6 +49,6 @@ public class ex_result_gather
/// <summary>
/// 1 未通过 2 通过
/// </summary>
public int States { get; set; }
// public int States { get; set; }
}
}
......@@ -6,7 +6,7 @@ public class view_allot_sign_dept
public int AllotID { get; set; }
public int Year { get; set; }
public int Month { get; set; }
public int UnitName { get; set; }
public int UnitType { get; set; }
public int AccountingUnit { get; set; }
public int PerforFee { get; set; }
public int WorkloadFee { get; set; }
......
......@@ -26,8 +26,16 @@ public class view_check_emp : view_check_dept
public string JobNumber { get; set; }
public string EmployeeName { get; set; }
}
public class DeptComparisonTotal
{
public string UnitType { get; set; }
public int Count { get; set; }
public decimal? SumFee{ get; set; }
}
}
using Performance.EntityModels;
using Performance.Infrastructure.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
namespace Performance.Repository
{
public partial class PerforExresultgatherRepository : PerforRepository<ex_result_gather>
{
public PageList<ex_result_gather> GetGatherForPaging(int pageNumber, int pageSize, Expression<Func<ex_result_gather, bool>> exp)
{
IQueryable<ex_result_gather> queryableAuthors = context.Set<ex_result_gather>()
.Where(exp)
.OrderBy(w => w.Department)
.ThenBy(t => t.PersonnelNumber);
return PageList<ex_result_gather>.Create(queryableAuthors, pageNumber, pageSize);
}
}
}
......@@ -30,13 +30,6 @@ public new PageList<per_employee> GetEntitiesForPaging(int pageNumber, int pageS
}
public PageList<ex_result_gather> GetGatherForPaging(int pageNumber, int pageSize, Expression<Func<ex_result_gather, bool>> exp)
{
IQueryable<ex_result_gather> queryableAuthors = context.Set<ex_result_gather>().Where(exp).OrderBy(w => w.Department).ThenBy(t => t.PersonnelNumber);
return PageList<ex_result_gather>.Create(queryableAuthors, pageNumber, pageSize);
}
//public Comparison GetComparison(ComparisonPagingRequest request)
//{
// var search = "";
......@@ -67,7 +60,7 @@ public PageList<ex_result_gather> GetGatherForPaging(int pageNumber, int pageSiz
/// <param name="allotId"></param>
/// <param name="searchQuery"></param>
/// <returns></returns>
public Comparison CheckEmployeeRealGiveFeeDiff(int allotId, string searchQuery)
public DtoModels.Comparison<view_check_emp> CheckEmployeeRealGiveFeeDiff(ComparisonPagingRequest request)
{
var queryData = @"
SELECT
......@@ -80,7 +73,7 @@ public Comparison CheckEmployeeRealGiveFeeDiff(int allotId, string searchQuery)
) TAB
WHERE if(@searchQuery='','',AccountingUnit) LIKE @parm OR if(@searchQuery='','',JobNumber) LIKE @parm OR if(@searchQuery='','',EmployeeName) LIKE @parm
GROUP BY HospitalId,Year,Month,AllotID,UnitType,AccountingUnit,JobNumber
ORDER BY HospitalId,Year,Month,ABS(SUM(RealGiveFeeExecl) - SUM(RealGiveFeeCompute)) DESC
ORDER BY HospitalId,Year,Month,ABS(SUM(RealGiveFeeExecl) - SUM(RealGiveFeeCompute)) DESC LIMIT @pageSize OFFSET @pageIndex
";
var queryCount = @"
......@@ -89,27 +82,27 @@ public Comparison CheckEmployeeRealGiveFeeDiff(int allotId, string searchQuery)
SELECT * FROM view_check_emp_employee WHERE AllotId = @allotId UNION ALL
SELECT * FROM view_check_emp_logistics WHERE AllotId = @allotId
) TAB
WHERE if(@searchQuery='','',AccountingUnit) LIKE @parm OR if(@searchQuery='','',JobNumber) LIKE @parm OR if(@searchQuery='','',EmployeeName) LIKE @parm
WHERE if(@searchQuery='','',AccountingUnit) LIKE @parm OR if(@searchQuery='','',JobNumber) LIKE @parm OR if(@searchQuery='','',EmployeeName) LIKE @parm
";
return new Comparison()
return new DtoModels.Comparison<view_check_emp>()
{
Datas = DapperQuery<view_check_emp>(queryData, new { allotId, searchQuery, parm = $"%{searchQuery}%" })?.ToList() ?? new List<view_check_emp>(),
TotalCount = DapperQuery<int>(queryCount, new { allotId, searchQuery, parm = $"%{searchQuery}%" })?.FirstOrDefault() ?? 0,
Datas = DapperQuery<view_check_emp>(queryData, new { pageIndex = request.PageIndex-1, pageSize = request.PageSize, allotId = request.AllotId, searchQuery = request.SearchQuery, parm = $"%{request.SearchQuery}%" })?.ToList() ?? new List<view_check_emp>(),
TotalCount = DapperQuery<int>(queryCount, new { allotId = request.AllotId, searchQuery = request.SearchQuery, parm = $"%{request.SearchQuery}%" })?.FirstOrDefault() ?? 0,
};
}
/// <summary>
/// 科室实发绩效比对
/// </summary>
public Comparison CheckAccountingUnitRealGiveFeeDiff(int allotId, string searchQuery)
public DtoModels.Comparison<view_check_emp> CheckAccountingUnitRealGiveFeeDiff(ComparisonPagingRequest request)
{
var queryData = @"
SELECT *,IFNULL(RealGiveFeeExecl,0) - IFNULL(RealGiveFeeCompute,0) AS Diff FROM (
SELECT * FROM view_check_dept_account WHERE AllotId = @allotId UNION ALL
SELECT * FROM view_check_dept_specialunit WHERE AllotId = @allotId
) TAB
) TAB
WHERE if(@searchQuery='','',AccountingUnit) LIKE @parm
ORDER BY HospitalId,Year,Month,ABS(DIFF) DESC
ORDER BY HospitalId,Year,Month,ABS(DIFF) DESC LIMIT @pageSize OFFSET @pageIndex
";
var queryCount = @"
......@@ -117,12 +110,30 @@ public Comparison CheckAccountingUnitRealGiveFeeDiff(int allotId, string searchQ
SELECT * FROM view_check_dept_account WHERE AllotId = @allotId UNION ALL
SELECT * FROM view_check_dept_specialunit WHERE AllotId = @allotId
) TAB
WHERE if(@searchQuery='','',AccountingUnit) LIKE @parm
WHERE if(@searchQuery='','',AccountingUnit) LIKE @parm
";
return new Comparison()
return new DtoModels.Comparison<view_check_emp>()
{
Datas = DapperQuery<view_check_emp>(queryData, new { pageIndex = request.PageIndex-1, pageSize = request.PageSize,allotId = request.AllotId, searchQuery = request.SearchQuery, parm = $"%{request.SearchQuery}%" })?.ToList() ?? new List<view_check_emp>(),
TotalCount = DapperQuery<int>(queryCount, new { allotId = request.AllotId, searchQuery = request.SearchQuery, parm = $"%{request.SearchQuery}%" })?.FirstOrDefault() ?? 0,
};
}
/// <summary>
/// 实发绩效校验
/// </summary>
public DtoModels.Comparison<DeptComparisonTotal> CheckView_check_deptUnitRealGiveFeeDiffTotal(int allotId)
{
var queryData = @"SELECT UnitType,Count(1) Count,Sum(RealGiveFeeCompute) SumFee FROM
(SELECT *,IFNULL(RealGiveFeeExecl,0) - IFNULL(RealGiveFeeCompute,0) AS Diff FROM (
SELECT * FROM view_check_dept_account UNION ALL
SELECT * FROM view_check_dept_specialunit
) TAB
ORDER BY HospitalId,Year,Month,ABS(DIFF) DESC )view_check_dept
where AllotID = @allotId and Diff <> 0 GROUP BY UnitType";
return new DtoModels.Comparison<DeptComparisonTotal>()
{
Datas = DapperQuery<view_check_emp>(queryData, new { allotId, searchQuery, parm = $"%{searchQuery}%" })?.ToList() ?? new List<view_check_emp>(),
TotalCount = DapperQuery<int>(queryCount, new { allotId, searchQuery, parm = $"%{searchQuery}%" })?.FirstOrDefault() ?? 0,
Datas = DapperQuery<DeptComparisonTotal>(queryData, new { allotId })?.ToList() ?? new List<DeptComparisonTotal>(),
};
}
......
using Microsoft.EntityFrameworkCore;
using Dapper;
using Microsoft.EntityFrameworkCore;
using Performance.DtoModels;
using Performance.EntityModels;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
namespace Performance.Repository
{
public partial class PerforReportRepository : PerforRepository<PerReport>
{
private readonly IDbConnection connection;
public PerforReportRepository(PerformanceDbContext context) : base(context)
{
connection = context?.Database.GetDbConnection() ?? throw new ArgumentNullException(nameof(context));
}
/// <summary>
......@@ -397,13 +402,78 @@ public List<dynamic> QueryCompute(int allotId, string viewName)
return DapperQuery<dynamic>(sql, new { allotId })?.ToList();
}
public List<dynamic> QueryComputeByDate(string viewName, DateTime beginTime, DateTime endTime)
public List<dynamic> QueryComputeByDate(string viewName, BeginEndTime request)
{
var sql = $@"SELECT * FROM {viewName}
where STR_TO_DATE(concat(Year,'-',Month,'-01'),'%Y-%m-%d') >= @beginTime
and STR_TO_DATE(concat(Year,'-',Month,'-01'),'%Y-%m-%d') < @endTime";
and STR_TO_DATE(concat(Year,'-',Month,'-01'),'%Y-%m-%d') < @endTime and hospitalid = {request.HospitalId}";
if (request.Search != null && request.Search.Any(w => !string.IsNullOrEmpty(w.Title) && !string.IsNullOrEmpty(w.Value)))
{
var where = request.Search.Where(w => !string.IsNullOrEmpty(w.Title) && !string.IsNullOrEmpty(w.Value)).Select(t => $"{t.Title} like '%{t.Value}%'");
sql += " and " + string.Join(" and ", where);
}
if (!string.IsNullOrEmpty(request.SortBy))
sql += $" order by {request.SortBy} ";
return DapperQuery<dynamic>(sql, new { beginTime = request.BeginTime, endTime = request.EndTime }).ToList();
}
public List<dynamic> QueryComputeByDateAndTotal(string viewName, HospitalGrantSummary request)
{
if (!new string[] { "view_allot_sign_dept", "view_allot_sign_emp", "view_allot_sign_emp_finance" }.Contains(viewName)) return new List<dynamic>();
var sql = $@" SELECT * FROM {viewName} where STR_TO_DATE(concat(Year,'-',Month,'-01'),'%Y-%m-%d') >= @beginTime
and STR_TO_DATE(concat(Year,'-',Month,'-01'),'%Y-%m-%d') < @endTime and hospitalid = {request.HospitalId}";
Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>
{
{ "view_allot_sign_emp_group", new List<string>{ "hospitalid", "year", "month", "source", "allotid", "secondid", "states", "unittype", "accountingunit", "isshowmanage", "employeename", "jobnumber", "jobtitle", "emp_unittype", "emp_accountingunit", "bankcard", "batch", "jobcategory", "duty", "titleposition" } },
{ "view_allot_sign_emp_sum", new List<string>{ "perforsumfee", "performanagementfee", "nightworkperfor", "adjustlaterotherfee", "otherperfor", "hideotherperfor", "shouldgivefee", "reservedratiofee", "realgivefee" } },
{ "view_allot_sign_dept_group", new List<string>{ "hospitalid", "allotid", "year", "month", "unittype", "accountingunit" } },
{ "view_allot_sign_dept_sum", new List<string>{ "perforfee", "workloadfee", "assessbeforeotherfee", "perfortotal", "scoringaverage", "extra", "medicineextra", "materialsextra", "assesslaterotherfee", "assesslaterperfortotal", "adjustfactor", "adjustlaterotherfee", "aprperforamount", "hideaprotherperforamount", "assesslatermanagementfee", "realgivefee" } },
{ "view_allot_sign_emp_finance_group", new List<string>{ "hospitalid", "year", "month", "allotid", "jobnumber", "employeename", "jobtitle", "unittype", "accountingunit", "bankcard", "jobcategory", "duty", "titleposition" } },
{ "view_allot_sign_emp_finance_sum", new List<string>{ "perforsumfee", "performanagementfee", "nightworkperfor", "adjustlaterotherfee", "otherperfor", "hideotherperfor", "shouldgivefee", "reservedratiofee", "realgivefee" } },
};
if (request.GroupBy == null || !request.GroupBy.Any(t => !string.IsNullOrEmpty(t))) request.GroupBy = dict[viewName + "_group"];
return DapperQuery<dynamic>(sql, new { beginTime = beginTime.ToString("yyyy-MM-dd"), endTime = endTime.ToString("yyyy-MM-dd") }).ToList();
if (request.SumBy == null || !request.SumBy.Any(t => !string.IsNullOrEmpty(t))) request.SumBy = dict[viewName + "_sum"];
if (request.Search != null && request.Search.Any(w => !string.IsNullOrEmpty(w.Title) && !string.IsNullOrEmpty(w.Value)))
{
var where = request.Search.Where(w => !string.IsNullOrEmpty(w.Title) && !string.IsNullOrEmpty(w.Value)).Select(t => $"{t.Title} like '%{t.Value}%'");
sql += " and " + string.Join(" and ", where);
}
if (!string.IsNullOrEmpty(request.SortBy))
sql += $" order by {request.SortBy} ";
sql = $"select {string.Join(",", request.GroupBy)}, {string.Join(",", request.SumBy.Select(t => $"sum({t}) {t}"))} from ({sql}) tab group by {string.Join(",", request.GroupBy)}";
return DapperQuery<dynamic>(sql, new { beginTime = request.BeginTime, endTime = request.EndTime }).ToList();
}
public (List<dynamic> list, int count) QueryComputePageData(string query, object param = null)
{
try
{
using (var multi = connection.QueryMultiple(query, param, commandTimeout: 1000))
{
var list = multi.Read<dynamic>().ToList();
var count = multi.Read<int>().FirstOrDefault();
return (list, count);
}
}
catch
{
return (new List<dynamic>(), 0);
}
}
public CustonPagingData QueryCustom(CustomPagingRequest request, bool IsHead)
......
......@@ -869,6 +869,7 @@ public bool BatchSaveAccounting(int allotId, SaveCollectData request)
var json = JsonHelper.Serialize(item);
var data = JsonHelper.Deserialize<cof_accounting>(json);
data.AllotId = allotId;
if (!unitType.Contains(data?.UnitType) && !string.IsNullOrEmpty(data?.UnitType)) return false;
if (getAccounts != null)
if (getAccounts.Any(t => t.AccountingUnit == data?.AccountingUnit && t.UnitType == data?.UnitType)) continue;
......
......@@ -8,6 +8,7 @@
using Performance.Infrastructure;
using Performance.Repository;
using Performance.Services.ExtractExcelService;
using Performance.Services.Queues;
using System;
using System.Collections.Generic;
using System.IO;
......@@ -26,6 +27,7 @@ public class CustomExtractService : IAutoInjection
private readonly PerforPerdeptdicRepository _perforPerdeptdicRepository;
private readonly PerforHospitalconfigRepository _perforHospitalconfigRepository;
private readonly PerforCustscriptRepository _perforcustscriptRepository;
private readonly IHubNotificationQueue _notificationQueue;
public CustomExtractService(
ILogger<CustomExtractService> logger,
......@@ -35,7 +37,8 @@ public class CustomExtractService : IAutoInjection
PerforPerallotRepository perallotRepository,
PerforPerdeptdicRepository perforPerdeptdicRepository,
PerforHospitalconfigRepository perforHospitalconfigRepository,
PerforCustscriptRepository perforcustscriptRepository)
PerforCustscriptRepository perforcustscriptRepository,
IHubNotificationQueue notificationQueue)
{
_logger = logger;
_options = options;
......@@ -45,6 +48,7 @@ public class CustomExtractService : IAutoInjection
_perforPerdeptdicRepository = perforPerdeptdicRepository;
_perforHospitalconfigRepository = perforHospitalconfigRepository;
_perforcustscriptRepository = perforcustscriptRepository;
_notificationQueue = notificationQueue;
}
public bool CheckConfigScript(int userId, int allotId)
......@@ -136,6 +140,7 @@ private void WriteDataToFile(int userId, per_allot allot, List<cust_script> scri
var conf = configs.FirstOrDefault(w => w.Id == item.ConfigId);
if (conf != null)
{
_notificationQueue.Send(new Notification(allot.ID, "ReceiveMessage", new TextContent($"正在提取“{item.Name}”的数据")));
var execsql = item.Script;
var dynamics = QueryData(conf, execsql, parameters);
......@@ -150,8 +155,12 @@ private void WriteDataToFile(int userId, per_allot allot, List<cust_script> scri
var sheet = workbook.CreateSheet(item.Name);
// 没数据跳过
if (dynamics == null || dynamics.Count() == 0)
{
_notificationQueue.Send(new Notification(allot.ID, "ReceiveMessage", new TextContent($"“{item.Name}”提取的数据为空")));
continue;
}
_notificationQueue.Send(new Notification(allot.ID, "ReceiveMessage", new TextContent($"正在写入“{item.Name}”的数据")));
var headers = ((IDictionary<string, object>)dynamics.ElementAt(0)).Keys;
for (int col = 0; col < headers.Count; col++)
{
......@@ -219,6 +228,7 @@ private void WriteDataToFile(int userId, per_allot allot, List<cust_script> scri
}
row++;
}
_notificationQueue.Send(new Notification(allot.ID, "ReceiveMessage", new TextContent($"“{item.Name}”的数据写入完成")));
}
catch (Exception ex)
{
......
......@@ -191,18 +191,34 @@ public string AllComputerViewReport(int allotId, List<dynamic> dynamics, string
/// <param name="allData"></param>
/// <param name="isAll"></param>
/// <returns></returns>
public string AllComputerViewReportByDate(int hospitalId, List<dynamic> dynamics, string route, string name, DateTime beginTime, DateTime endTime)
public string AllComputerViewReportByDate(int hospitalId, List<dynamic> dynamics, string route, string name, DateTime beginTime, DateTime endTime,params string[] headlist)
{
var hospital = perforHospital.GetEntity(t => t.ID == hospitalId);
var title = (beginTime.AddMonths(1).Date == endTime.Date)
? $"{beginTime.ToString("yyyy年MM月")}{hospital.HosName}医院 --- {name}"
: $"{beginTime.ToString("yyyy年MM月")}{endTime.ToString("yyyy年MM月")}{hospital.HosName}医院 --- {name}";
return AllComputerDown(hospital, dynamics, route, title, name);
: $"{beginTime.ToString("yyyy年MM月")}{endTime.AddMonths(-1).ToString("yyyy年MM月")}{hospital.HosName}医院 --- {name}";
return AllComputerDown(hospital, dynamics, route, title, name, headlist);
}
public string AllComputerDown(sys_hospital hospital, List<dynamic> dynamics, string route, string title, string name)
public string AllComputerDown(sys_hospital hospital, List<dynamic> dynamics, string route, string title, string name, params string[] headlist)
{
var headList = _computeService.CustomColumnHeaders(hospital.ID, route).Where(w => w.States == 1).ToList();
var ser = JsonHelper.Serialize(dynamics);
var dict = JsonHelper.Deserialize<List<Dictionary<string, object>>>(ser);
var data = new List<Dictionary<string, object>>();
foreach (var obj in dict)
{
Dictionary<string, object> nobj = new Dictionary<string, object>();
foreach (var item in obj)
{
nobj[item.Key.ToLower()] = item.Value;
}
data.Add(nobj);
}
var headList = _computeService.CustomColumnHeaders(hospital.ID, route, headlist).Where(w => w.States == 1).ToList();
var dpath = Path.Combine(evn.ContentRootPath, "Files", "PerformanceRelease", $"{hospital.ID}");
FileHelper.CreateDirectory(dpath);
string filepath = Path.Combine(dpath, $"{hospital.HosName}-{name}-{DateTime.Now:yyyyMMdd}");
......@@ -225,11 +241,11 @@ public string AllComputerDown(sys_hospital hospital, List<dynamic> dynamics, str
}
for (int col = 0; col < headList.Count; col++)
{
for (int row = 0; row < dynamics.Count(); row++)
for (int row = 0; row < data.Count(); row++)
{
var data = dynamics.ElementAt(row);
var temp = (IDictionary<string, object>)data;
var value = temp[headList[col].Name];
var temp = data.ElementAt(row);
var low = temp.Keys.ToString().ToLower();
var value = temp[headList[col].Name.ToLower()];
worksheet.Cells[row + 3, col + 1].Value = value;
}
......@@ -272,6 +288,7 @@ public string AllComputerDown(sys_hospital hospital, List<dynamic> dynamics, str
return filepath;
}
public static List<(string, Func<ComputeResponse, object>, Func<List<ComputeResponse>, decimal>)> AllCompute { get; } = new List<(string, Func<ComputeResponse, object>, Func<List<ComputeResponse>, decimal>)>
{
("来源",t=>t.Source,null),
......
......@@ -120,6 +120,7 @@ private void Employee(per_allot allot, List<sys_hospitalconfig> configs, IEnumer
if (limitData == null || !limitData.Any()) return;
var columns = ((IDictionary<string, object>)limitData.ElementAt(0)).Select(t => t.Key.ToLower()).ToList();
if (columns == null || !columns.Any()) return;
var data = queryService.QueryData<per_employee>(config, sql, allot, isSingle).ToList();
data.ForEach(t =>
......@@ -191,6 +192,9 @@ private void JudgeDataEqual(List<string> columns, List<per_employee> emps, List<
{ nameof(per_employee.BankCard), (t) => t.BankCard },
};
columns = columns.Intersect(dict.Keys.Select(t => t.ToLower())).ToList();
if (columns == null || !columns.Any()) return;
if (columns.Contains(nameof(per_employee.PersonnelNumber).ToLower())) columns.Remove(nameof(per_employee.PersonnelNumber).ToLower());
if (!columns.Contains(nameof(per_employee.AccountingUnit).ToLower())) columns.Add(nameof(per_employee.AccountingUnit).ToLower());
......
......@@ -102,9 +102,9 @@ public string Main(int allotId, int hospitalId, string email, string groupName,
queryService.ClearHistoryData(allot.ID, groupName, isSingle);
//employeeService.SyncDataToResult(allotId);
employeeService.SyncDataToResult(allotId);
var data = exresultRepository.GetEntities(t => t.AllotId == allotId && t.IsDelete == 0);
var data = exresultRepository.GetEntities(t => t.AllotId == allotId);
data.AddRange(queryService.Handler(hospitalId, allot, groupName, isSingle, ref dict));
var standData = StandDataFormat(hospitalId, data);
......
......@@ -49,6 +49,20 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp
if (exdict.ContainsKey(ExDataDict.IncomeFactor) && exdict[ExDataDict.IncomeFactor] is List<cof_drugtype_factor> factors && factors.Any(t => t.ExModuleId == module.Id))
{
factors = factors.Where(t => t.ExModuleId == module.Id).ToList();
var columnHeader = sheet.GetOrCreate(point.HeaderFirstRowNum.Value);
var excelcolumns = new List<string>();
if (columnHeader != null)
{
excelcolumns = columnHeader.GetCellValues();
if (excelcolumns != null && excelcolumns.Any())
{
excelcolumns.RemoveAll(w => w.Contains("核算单元"));
excelcolumns.Remove("科室名称");
categories = categories.Union(excelcolumns).Distinct();
}
}
// categories = categories.Union(factors.Select(t => t.Charge)).Distinct();
headers = categories.GroupJoin(factors, inner => new { category = inner.NoBlank() }, outer => new { category = outer.Charge.NoBlank() }, (inner, outer) => new { inner, outer })
.Select(t => new ExcelHeader
......
......@@ -53,9 +53,9 @@ private void Consumer()
}
public enum NotificationLevel
{
[Description("通知")] INF,
[Description("警告")] WAR,
[Description("错误")] ERR,
[Description("通知")] INF = 1,
[Description("警告")] WAR = 2,
[Description("错误")] ERR = 3,
}
public class Notification
{
......@@ -75,11 +75,11 @@ public abstract class PushContent
protected PushContent(string subject, NotificationLevel level)
{
Subject = subject;
LogLevel = level.ToString();
LogLevel = (int)level;
}
public abstract string Type { get; }
public string LogLevel { get; }
public int LogLevel { get; }
public string Time { get => DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); }
public string Subject { get; set; }
}
......@@ -120,7 +120,7 @@ public UrlContent(string subject, string url, NotificationLevel level = Notifica
}
public class CustomDownloadContent : Notification.PushContent
{
public CustomDownloadContent(string subject,object @object ,NotificationLevel level = NotificationLevel.INF)
public CustomDownloadContent(string subject, object @object, NotificationLevel level = NotificationLevel.INF)
: base(subject, level)
{
Arguments = @object;
......
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