Commit a9fa3be3 by lcx

Merge branch 'feature/自动执行“加载上月”' into develop

# Conflicts:
#	performance/Performance.Api/Job/JobRegistry.cs
#	performance/Performance.Api/Startup.cs
parents a708b1e2 5928d132
......@@ -234,6 +234,7 @@ public ApiResponse ImportExtraction(int allotId)
allot.Remark = EnumHelper.GetDescription(AllotStates.FileUploaded);
allot.UploadDate = DateTime.Now;
allot.Generate = (int)AllotGenerate.Init;
allot.IsModifyConfig = 1;
if (!_allotService.Update(allot))
return new ApiResponse(ResponseType.Fail, $"上传成功,修改状态失败");
_configService.Clear(allot.ID);
......
......@@ -394,6 +394,20 @@ public ApiResponse<res_baiscnorm> EditHospitalAvg([FromBody] ComputerAvgRequest
#endregion
/// <summary>
/// 修改列头显示状态
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("updateheadersstatus")]
[HttpPost]
public ApiResponse UpdateHeadersStatus([FromBody] ComputerAliasUpdate request)
{
if (_computeService.UpdateHeadersStatus(request))
return new ApiResponse(ResponseType.OK, "修改成功");
return new ApiResponse(ResponseType.OK, "修改失败");
}
/// <summary>
/// 自定义列头
/// </summary>
/// <param name="request"></param>
......
......@@ -128,16 +128,17 @@ public ApiResponse Import(int hospitalId, [FromForm] IFormCollection form)
/// 获取人员标签配置
/// </summary>
/// <param name="hospitalId"></param>
/// <param name="allotId"></param>
/// <returns></returns>
[Route("ReportPersonTag")]
[HttpPost]
public ApiResponse ReportPersonTag(int hospitalId)
public ApiResponse ReportPersonTag(int hospitalId, int allotId)
{
if (hospitalId<=0)
if (hospitalId <= 0)
{
return new ApiResponse(ResponseType.Fail,"参数错误", "hospitalId无效");
return new ApiResponse(ResponseType.Fail, "参数错误", "hospitalId无效");
}
var relust = reportGlobalService.GetReportPersonTag(hospitalId);
var relust = reportGlobalService.GetReportPersonTag(hospitalId, allotId);
return new ApiResponse(ResponseType.OK, relust);
}
......@@ -145,17 +146,20 @@ public ApiResponse ReportPersonTag(int hospitalId)
/// 保存科室标签配置
/// </summary>
/// <param name="hospitalId"></param>
/// <param name="allotId"></param>
/// <param name="request"></param>
/// <returns></returns>
[Route("saveReportPersonTag")]
[Route("saveReportPersonTag/{allotId}")]
[HttpPost]
public ApiResponse SaveReportPersonTag(int hospitalId,[FromBody] SaveCollectData request)
public ApiResponse SaveReportPersonTag(int hospitalId, int allotId, [FromBody] SaveCollectData request)
{
if (hospitalId <= 0)
{
return new ApiResponse(ResponseType.Fail, "参数错误", "hospitalId无效");
}
reportGlobalService.SaveReportPersonTag(hospitalId,request);
var result = reportGlobalService.SaveReportPersonTag(hospitalId, allotId, request);
if (result != null && result.Any())
return new ApiResponse(ResponseType.Fail, $"保存失败:工号{string.Join(", ", result)}不存在");
return new ApiResponse(ResponseType.OK);
}
......
using FluentScheduler;
using Microsoft.Extensions.Logging;
using Performance.Infrastructure;
using Performance.Repository;
using Performance.Services;
using System;
using System.Linq;
namespace Performance.Api
{
public class AutoSyncConfigJob : IJob
{
private readonly ILogger logger;
private readonly PerforPerallotRepository perallotRepository;
private readonly ConfigService configService;
public AutoSyncConfigJob(
ILogger<AutoSyncConfigJob> logger,
PerforPerallotRepository perallotRepository,
ConfigService configService
)
{
this.logger = logger;
this.perallotRepository = perallotRepository;
this.configService = configService;
}
public void Execute()
{
try
{
logger.LogInformation("开始同步配置");
var list = perallotRepository.GetEntities();
if (list == null || !list.Any()) return;
var hospitalIds = list.Select(t => t.HospitalId).Distinct().OrderBy(t => t);
foreach (var hospitalId in hospitalIds)
{
var allots = list.Where(w => w.HospitalId == hospitalId)?.OrderByDescending(t => t.Year).ThenByDescending(t => t.Month).ToList();
if (allots == null || !allots.Any()) continue;
while (allots != null && allots.Any(w => w.IsModifyConfig == 0))
{
var prevAllot = allots.FirstOrDefault(t => t.IsModifyConfig == 1);
if (prevAllot == null) continue;
var date = ConvertHelper.To<DateTime>($"{prevAllot.Year}-{prevAllot.Month}");
var needSyncData = allots.Where(w => ConvertHelper.To<DateTime>($"{w.Year}-{w.Month}") > date);
if (needSyncData != null && needSyncData.Any())
{
foreach (var item in needSyncData)
configService.CopyCommand(item, prevAllot.ID, true);
}
var noModify = allots.FirstOrDefault(w => ConvertHelper.To<DateTime>($"{w.Year}-{w.Month}") < date && w.IsModifyConfig == 0);
if (noModify != null)
date = ConvertHelper.To<DateTime>($"{noModify.Year}-{noModify.Month}");
allots = allots.Where(w => ConvertHelper.To<DateTime>($"{w.Year}-{w.Month}") <= date)?.ToList();
}
}
logger.LogInformation("同步配置结束");
}
catch (Exception ex)
{
logger.LogError($"同步配置发生异常:" + ex);
}
}
}
}
......@@ -14,6 +14,7 @@ public JobRegistry(IServiceProvider provider)
//Schedule(() => provider.GetService<ClearLoggerJob>()).ToRunNow().AndEvery(60).Seconds();
Schedule(() => provider.GetService<ClearLoggerJob>()).ToRunNow().AndEvery(1).Days().At(3, 00);
Schedule(() => provider.GetService<BackgroundJob>()).ToRunNow().AndEvery(10).Seconds();
Schedule(() => provider.GetService<AutoSyncConfigJob>()).ToRunEvery(1).Days().At(0, 00);
}
}
}
......@@ -103,6 +103,7 @@ public void ConfigureServices(IServiceCollection services)
services.AddTransient<ExtractDataJob>();
services.AddTransient<ClearLoggerJob>();
services.AddTransient<BackgroundJob>();
services.AddTransient<AutoSyncConfigJob>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
......
......@@ -545,6 +545,13 @@
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ComputeController.UpdateHeadersStatus(Performance.DtoModels.ComputerAliasUpdate)">
<summary>
修改列头显示状态
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ComputeController.CustomColumnHeaders(Performance.DtoModels.ComputerAliasRequest)">
<summary>
自定义列头
......@@ -1785,18 +1792,20 @@
<param name="form"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportGlobalController.ReportPersonTag(System.Int32)">
<member name="M:Performance.Api.Controllers.ReportGlobalController.ReportPersonTag(System.Int32,System.Int32)">
<summary>
获取人员标签配置
</summary>
<param name="hospitalId"></param>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ReportGlobalController.SaveReportPersonTag(System.Int32,Performance.DtoModels.SaveCollectData)">
<member name="M:Performance.Api.Controllers.ReportGlobalController.SaveReportPersonTag(System.Int32,System.Int32,Performance.DtoModels.SaveCollectData)">
<summary>
保存科室标签配置
</summary>
<param name="hospitalId"></param>
<param name="allotId"></param>
<param name="request"></param>
<returns></returns>
</member>
......
......@@ -1715,6 +1715,11 @@
状态 1 求和 0 不求和
</summary>
</member>
<member name="P:Performance.EntityModels.cof_alias.Sort">
<summary>
排序
</summary>
</member>
<member name="T:Performance.EntityModels.cof_check">
<summary>
上传excel文件校验配置
......@@ -5940,6 +5945,11 @@
自定义提取绩效数据文件生成路径
</summary>
</member>
<member name="P:Performance.EntityModels.per_allot.IsModifyConfig">
<summary>
是否修改过配置 1修改过 0未修改
</summary>
</member>
<member name="T:Performance.EntityModels.per_apr_amount">
<summary>
......
......@@ -54,6 +54,19 @@ public class ComputerAliasRequest
public string[] Heads { get; set; }
}
public class ComputerAliasUpdate
{
public int HospitalId { get; set; }
public string Route { get; set; }
public List<ComputerAliasHead> computerAliasHead { get; set; }
}
public class ComputerAliasHead
{
public string Head { get; set; }
public int HeadId { get; set; }
public int Sort { get; set; }
}
public class BeginEndTime
{
public string BeginTime { get; set; } // 2021-01
......
......@@ -49,10 +49,16 @@ public class cof_alias
/// <summary>
/// 状态 1 可用 0 禁用
/// </summary>
public Nullable<int> States { get; set; }
public int States { get; set; }
/// <summary>
/// 状态 1 求和 0 不求和
/// </summary>
public Nullable<int> SumStatus { get; set; }
public int SumStatus { get; set; }
/// <summary>
/// 排序
/// </summary>
public int Sort { get; set; }
}
}
......@@ -100,5 +100,10 @@ public class per_allot
/// 自定义提取绩效数据文件生成路径
/// </summary>
public string CustomExtractPath { get; set; }
/// <summary>
/// 是否修改过配置 1修改过 0未修改
/// </summary>
public int IsModifyConfig { get; set; }
}
}
......@@ -940,6 +940,11 @@ public void Copy(per_allot allot)
int allotId = index + 1 < list.Count ? list[index + 1].ID : list.First().ID;
if (allotId == allot.ID) allotId = -1;
CopyCommand(allot, allotId);
}
public void CopyCommand(per_allot allot, int prevAllotId, bool delHistotyData = false)
{
#region 弃用
//var hospital = perforHospitalRepository.GetEntity(t => t.ID == allot.HospitalId);
......@@ -992,13 +997,17 @@ public void Copy(per_allot allot)
#endregion
personService.CreateAllotPersons(allot.HospitalId, allot.ID, allotId);
var flag = delHistotyData;
personService.CreateAllotPersons(allot.HospitalId, allot.ID, prevAllotId);
logger.LogInformation($"copy workItems");
var workItems = _workitemRepository.GetEntities(t => t.AllotID == allot.ID);
if (workItems == null || !workItems.Any())
if (delHistotyData && workItems != null && workItems.Any())
flag = _workitemRepository.RemoveRange(workItems.ToArray());
if (flag || workItems == null || !workItems.Any())
{
workItems = _workitemRepository.GetEntities(t => t.AllotID == allotId) ?? _workitemRepository.GetEntities(t => t.AllotID == -1);
workItems = _workitemRepository.GetEntities(t => t.AllotID == prevAllotId) ?? _workitemRepository.GetEntities(t => t.AllotID == -1);
if (workItems != null && workItems.Any())
{
var newWorkItems = workItems.Select(t => new cof_workitem { AllotID = allot.ID, Type = t.Type, Item = t.Item });
......@@ -1008,9 +1017,11 @@ public void Copy(per_allot allot)
logger.LogInformation($"copy drugTypes");
var drugTypes = _drugtypeRepository.GetEntities(t => t.AllotID == allot.ID);
if (drugTypes == null || !drugTypes.Any())
if (delHistotyData && drugTypes != null && drugTypes.Any())
flag = _drugtypeRepository.RemoveRange(drugTypes.ToArray());
if (flag || drugTypes == null || !drugTypes.Any())
{
drugTypes = _drugtypeRepository.GetEntities(t => t.AllotID == allotId) ?? _drugtypeRepository.GetEntities(t => t.AllotID == -1);
drugTypes = _drugtypeRepository.GetEntities(t => t.AllotID == prevAllotId) ?? _drugtypeRepository.GetEntities(t => t.AllotID == -1);
if (drugTypes != null && drugTypes.Any())
{
var newDrugTypes = drugTypes.Select(t => new cof_drugtype { HospitalId = allot.HospitalId, AllotID = allot.ID, Charge = t.Charge, ChargeType = t.ChargeType });
......@@ -1020,9 +1031,11 @@ public void Copy(per_allot allot)
logger.LogInformation($"copy drugTypeDisburses");
var drugTypeDisburses = drugtypeDisburseRepository.GetEntities(t => t.AllotID == allot.ID);
if (drugTypeDisburses == null || !drugTypeDisburses.Any())
if (delHistotyData && drugTypeDisburses != null && drugTypeDisburses.Any())
flag = drugtypeDisburseRepository.RemoveRange(drugTypeDisburses.ToArray());
if (flag || drugTypeDisburses == null || !drugTypeDisburses.Any())
{
drugTypeDisburses = drugtypeDisburseRepository.GetEntities(t => t.AllotID == allotId) ?? drugtypeDisburseRepository.GetEntities(t => t.AllotID == -1);
drugTypeDisburses = drugtypeDisburseRepository.GetEntities(t => t.AllotID == prevAllotId) ?? drugtypeDisburseRepository.GetEntities(t => t.AllotID == -1);
if (drugTypeDisburses != null && drugTypeDisburses.Any())
{
var newDrugTypeDisburses = drugTypeDisburses.Select(t => new cof_drugtype_disburse { HospitalId = allot.HospitalId, AllotID = allot.ID, Charge = t.Charge, ChargeType = t.ChargeType });
......@@ -1032,9 +1045,11 @@ public void Copy(per_allot allot)
logger.LogInformation($"copy drugTypeFactors");
var drugTypeFactors = cofdrugtypefactorRepository.GetEntities(t => t.AllotID == allot.ID);
if (drugTypeFactors == null || !drugTypeFactors.Any())
if (delHistotyData && drugTypeFactors != null && drugTypeFactors.Any())
flag = cofdrugtypefactorRepository.RemoveRange(drugTypeFactors.ToArray());
if (flag || drugTypeFactors == null || !drugTypeFactors.Any())
{
drugTypeFactors = cofdrugtypefactorRepository.GetEntities(t => t.AllotID == allotId) ?? cofdrugtypefactorRepository.GetEntities(t => t.AllotID == -1);
drugTypeFactors = cofdrugtypefactorRepository.GetEntities(t => t.AllotID == prevAllotId) ?? cofdrugtypefactorRepository.GetEntities(t => t.AllotID == -1);
if (drugTypeFactors != null && drugTypeFactors.Any())
{
var newDrugtypeFactors = drugTypeFactors.Select(t => new cof_drugtype_factor
......@@ -1053,9 +1068,11 @@ public void Copy(per_allot allot)
logger.LogInformation($"copy deptTypes");
var deptTypes = perforCofdepttypeRepository.GetEntities(t => t.AllotID == allot.ID);
if (deptTypes == null || !deptTypes.Any())
if (delHistotyData && deptTypes != null && deptTypes.Any())
flag = perforCofdepttypeRepository.RemoveRange(deptTypes.ToArray());
if (flag || deptTypes == null || !deptTypes.Any())
{
deptTypes = perforCofdepttypeRepository.GetEntities(t => t.AllotID == allotId) ?? perforCofdepttypeRepository.GetEntities(t => t.AllotID == -1);
deptTypes = perforCofdepttypeRepository.GetEntities(t => t.AllotID == prevAllotId) ?? perforCofdepttypeRepository.GetEntities(t => t.AllotID == -1);
if (deptTypes != null && deptTypes.Any())
{
var newDeptTypes = deptTypes.Select(t => new cof_depttype { AllotID = allot.ID, Charge = t.Charge, ChargeType = t.ChargeType });
......@@ -1065,9 +1082,11 @@ public void Copy(per_allot allot)
logger.LogInformation($"copy agains");
var agains = _againRepository.GetEntities(t => t.AllotID == allot.ID);
if (agains == null || !agains.Any())
if (delHistotyData && agains != null && agains.Any())
flag = _againRepository.RemoveRange(agains.ToArray());
if (flag || agains == null || !agains.Any())
{
agains = _againRepository.GetEntities(t => t.AllotID == allotId) ?? _againRepository.GetEntities(t => t.AllotID == -1);
agains = _againRepository.GetEntities(t => t.AllotID == prevAllotId) ?? _againRepository.GetEntities(t => t.AllotID == -1);
if (agains != null && agains.Any())
{
var days = DateTime.DaysInMonth(allot.Year, allot.Month);
......@@ -1078,9 +1097,11 @@ public void Copy(per_allot allot)
logger.LogInformation($"copy accountings");
var accountings = cofaccountingRepository.GetEntities(t => t.AllotId == allot.ID);
if (accountings == null || !accountings.Any())
if (delHistotyData && accountings != null && accountings.Any())
flag = cofaccountingRepository.RemoveRange(accountings.ToArray());
if (flag || accountings == null || !accountings.Any())
{
accountings = cofaccountingRepository.GetEntities(t => t.AllotId == allotId) ?? cofaccountingRepository.GetEntities(t => t.AllotId == -1);
accountings = cofaccountingRepository.GetEntities(t => t.AllotId == prevAllotId) ?? cofaccountingRepository.GetEntities(t => t.AllotId == -1);
if (accountings != null && accountings.Any())
{
var newAccountings = accountings.Select(t => new cof_accounting { AllotId = allot.ID, UnitType = t.UnitType, AccountingUnit = t.AccountingUnit });
......
......@@ -748,12 +748,12 @@ public bool BathSavePerson(int AllotId, int HospitalId, SaveCollectData request)
var json = JsonHelper.Serialize(item);
var data = JsonHelper.Deserialize<per_employee>(json);
if (!string.IsNullOrEmpty(item["AttendanceDay"]) && !string.IsNullOrEmpty(item["ReservedRatio"]))
{
decimal attendanceDay = ConvertHelper.To<decimal>(item["AttendanceDay"]), reservedRatio = ConvertHelper.To<decimal>(item["ReservedRatio"]);
if ((!Regex.IsMatch(item["AttendanceDay"], "^(?:[0-2]*[0-9]?|30|31)$")) || (!Regex.IsMatch(item["ReservedRatio"], @"^(0.\d{1,2}|0|1)?$")))
return false;
}
//if (!string.IsNullOrEmpty(item["AttendanceDay"]) && !string.IsNullOrEmpty(item["ReservedRatio"]))
//{
// decimal attendanceDay = ConvertHelper.To<decimal>(item["AttendanceDay"]), reservedRatio = ConvertHelper.To<decimal>(item["ReservedRatio"]);
// if ((!Regex.IsMatch(item["AttendanceDay"], "^(?:[0-2]*[0-9]?|30|31)$")) || (!Regex.IsMatch(item["ReservedRatio"], @"^(0.\d{1,2}|0|1)?$")))
// return false;
//}
var any = employees.Any(w => w.Department?.Trim() == data.Department?.Trim() && w.DoctorName?.Trim() == data.DoctorName?.Trim());
......@@ -944,15 +944,15 @@ private void DeptDicList(int HospitalId, List<per_dept_dic> deptDics, DeptdicHan
(nameof(PersonePassword.Department), "科室名称", t => t.Department),
(nameof(PersonePassword.DoctorName), "姓名" ,t => t.DoctorName),
(nameof(PersonePassword.PersonnelNumber), "员工工号", t => t.PersonnelNumber),
(nameof(PersonePassword.JobCategory), "正式/临聘", t => t.JobCategory),
(nameof(PersonePassword.Duty), "职务", t => t.Duty),
(nameof(PersonePassword.JobTitle), "职称", t => t.JobTitle),
//(nameof(PersonePassword.JobCategory), "正式/临聘", t => t.JobCategory),
//(nameof(PersonePassword.Duty), "职务", t => t.Duty),
//(nameof(PersonePassword.JobTitle), "职称", t => t.JobTitle),
(nameof(PersonePassword.UnitType), "人员类别", t => t.UnitType),
(nameof(PersonePassword.AttendanceDay), "出勤天数", t => t.AttendanceDay),
(nameof(PersonePassword.ReservedRatio), "预留比例", t => t.ReservedRatio),
(nameof(PersonePassword.BankCard), "银行卡号", t => t.BankCard),
(nameof(PersonePassword.Password), "密码", t => t.Password),
(nameof(PersonePassword.Remark), "备注", t => t.Remark),
//(nameof(PersonePassword.AttendanceDay), "出勤天数", t => t.AttendanceDay),
//(nameof(PersonePassword.ReservedRatio), "预留比例", t => t.ReservedRatio),
//(nameof(PersonePassword.BankCard), "银行卡号", t => t.BankCard),
//(nameof(PersonePassword.Password), "密码", t => t.Password),
//(nameof(PersonePassword.Remark), "备注", t => t.Remark),
};
public static List<(string, string, Func<per_employee, object>)> Person { get; } = new List<(string, string, Func<per_employee, object>)>
......@@ -961,14 +961,14 @@ private void DeptDicList(int HospitalId, List<per_dept_dic> deptDics, DeptdicHan
(nameof(per_employee.Department), "科室名称", t => t.Department),
(nameof(per_employee.DoctorName), "姓名" ,t => t.DoctorName),
(nameof(per_employee.PersonnelNumber), "员工工号", t => t.PersonnelNumber),
(nameof(per_employee.JobCategory), "正式/临聘", t => t.JobCategory),
(nameof(per_employee.Duty), "职务", t => t.Duty),
(nameof(per_employee.JobTitle), "职称", t => t.JobTitle),
//(nameof(per_employee.JobCategory), "正式/临聘", t => t.JobCategory),
//(nameof(per_employee.Duty), "职务", t => t.Duty),
//(nameof(per_employee.JobTitle), "职称", t => t.JobTitle),
(nameof(per_employee.UnitType), "人员类别", t => t.UnitType),
(nameof(per_employee.AttendanceDay), "出勤天数", t => t.AttendanceDay),
(nameof(per_employee.ReservedRatio), "预留比例", t => t.ReservedRatio),
(nameof(per_employee.BankCard), "银行卡号", t => t.BankCard),
(nameof(per_employee.Remark), "备注", t => t.Remark),
//(nameof(per_employee.AttendanceDay), "出勤天数", t => t.AttendanceDay),
//(nameof(per_employee.ReservedRatio), "预留比例", t => t.ReservedRatio),
//(nameof(per_employee.BankCard), "银行卡号", t => t.BankCard),
//(nameof(per_employee.Remark), "备注", t => t.Remark),
};
private static Dictionary<string, string> DeptDic { get; } = new Dictionary<string, string>
......
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