Commit 852368db by lcx

获取抽取配置

parent c3f25536
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace Performance.Api.Controllers
{
[Route("api/modextract")]
[ApiController]
public class ExConfigController : Controller
{
public ExConfigController()
{
}
}
}
......@@ -35,7 +35,7 @@ public class ModExtractController : Controller
/// <returns></returns>
[Route("scheme")]
[HttpPost]
public ApiResponse Extract([CustomizeValidator(RuleSet = "Query"), FromBody]ModModuleRequest request)
public ApiResponse Extract([CustomizeValidator(RuleSet = "Query"), FromBody] ModModuleRequest request)
{
if (request.HospitalId == null || request.HospitalId.Value == 0)
return new ApiResponse(ResponseType.ParameterError, "HospitalId 不存在,请重新选择!");
......@@ -64,7 +64,7 @@ public ApiResponse FeeType()
/// <returns></returns>
[Route("source")]
[HttpPost]
public ApiResponse FeeSource([FromBody]ModModuleRequest request)
public ApiResponse FeeSource([FromBody] ModModuleRequest request)
{
if (request.HospitalId == null || request.HospitalId.Value == 0)
return new ApiResponse(ResponseType.ParameterError, "HospitalId 参数错误!");
......@@ -80,7 +80,7 @@ public ApiResponse FeeSource([FromBody]ModModuleRequest request)
/// <returns></returns>
[Route("addmodule")]
[HttpPost]
public ApiResponse AddModule([CustomizeValidator(RuleSet = "Add"), FromBody]ModModuleRequest request)
public ApiResponse AddModule([CustomizeValidator(RuleSet = "Add"), FromBody] ModModuleRequest request)
{
if (request.HospitalId == null || request.HospitalId.Value == 0)
return new ApiResponse(ResponseType.ParameterError, "HospitalId 参数错误!");
......@@ -95,7 +95,7 @@ public ApiResponse AddModule([CustomizeValidator(RuleSet = "Add"), FromBody]ModM
/// <returns></returns>
[Route("modules")]
[HttpPost]
public ApiResponse Module([CustomizeValidator(RuleSet = "Query"), FromBody]ModModuleRequest request)
public ApiResponse Module([CustomizeValidator(RuleSet = "Query"), FromBody] ModModuleRequest request)
{
if (request.HospitalId == null || request.HospitalId.Value == 0)
return new ApiResponse(ResponseType.ParameterError, "HospitalId 不存在,请重新选择!");
......@@ -110,7 +110,7 @@ public ApiResponse Module([CustomizeValidator(RuleSet = "Query"), FromBody]ModMo
/// <returns></returns>
[Route("editmodule")]
[HttpPost]
public ApiResponse EditModule([FromBody]ModModuleRequest request)
public ApiResponse EditModule([FromBody] ModModuleRequest request)
{
if (request.ModuleId == null || request.ModuleId == 0)
return new ApiResponse(ResponseType.ParameterError, "ModuleId 参数错误!");
......@@ -125,7 +125,7 @@ public ApiResponse EditModule([FromBody]ModModuleRequest request)
/// <returns></returns>
[Route("deletemodule")]
[HttpPost]
public ApiResponse DelModule([FromBody]ModModuleRequest request)
public ApiResponse DelModule([FromBody] ModModuleRequest request)
{
if (request.ModuleId == null || request.ModuleId == 0)
return new ApiResponse(ResponseType.ParameterError, "ModuleId 参数错误!");
......@@ -140,7 +140,7 @@ public ApiResponse DelModule([FromBody]ModModuleRequest request)
/// <returns></returns>
[Route("additem")]
[HttpPost]
public ApiResponse AddItem([FromBody]ItemListRequest request)
public ApiResponse AddItem([FromBody] ItemListRequest request)
{
if (request.ModuleId == null && request.ModuleId == 0)
return new ApiResponse(ResponseType.ParameterError, "ModuleId 参数错误!");
......@@ -158,7 +158,7 @@ public ApiResponse AddItem([FromBody]ItemListRequest request)
/// <returns></returns>
[Route("items")]
[HttpPost]
public ApiResponse Items([FromBody]ModItemRequest request)
public ApiResponse Items([FromBody] ModItemRequest request)
{
logger.LogInformation($"绩效收入模板配置项列表 : 请求地址 {url.HttpPost}/modextract/items");
HttpHelper.HttpPost(url.HttpPost + "/modextract/items", JsonHelper.Serialize(request), true);
......@@ -173,12 +173,12 @@ public ApiResponse Items([FromBody]ModItemRequest request)
/// <returns></returns>
[Route("edititem")]
[HttpPost]
public ApiResponse EditItem([FromBody]ItemListRequest request)
public ApiResponse EditItem([FromBody] ItemListRequest request)
{
if (request.Items == null || !request.Items.Any())
return new ApiResponse(ResponseType.ParameterError, "请选择需要修改的数据!");
var entity = modExtractService.EditItem(request.Items[0]);
var entity = 0;//= modExtractService.EditItem(request.Items[0]);
return new ApiResponse(ResponseType.OK, "修改成功!", entity);
}
......@@ -188,7 +188,7 @@ public ApiResponse EditItem([FromBody]ItemListRequest request)
/// <returns></returns>
[Route("deleteitem")]
[HttpPost]
public ApiResponse DelItem([FromBody]ModItemRequest request)
public ApiResponse DelItem([FromBody] ModItemRequest request)
{
if (request.ItemId == null && request.ItemId == 0)
return new ApiResponse(ResponseType.ParameterError, "ItemId 参数错误!");
......@@ -205,7 +205,7 @@ public ApiResponse DelItem([FromBody]ModItemRequest request)
/// <returns></returns>
[Route("addspecial")]
[HttpPost]
public ApiResponse AddSpecial([FromBody]SpecialListRequest request)
public ApiResponse AddSpecial([FromBody] SpecialListRequest request)
{
if (request.HospitalId == 0)
return new ApiResponse(ResponseType.ParameterError, "HospitalId 参数错误!");
......@@ -223,7 +223,7 @@ public ApiResponse AddSpecial([FromBody]SpecialListRequest request)
/// <returns></returns>
[Route("specials")]
[HttpPost]
public ApiResponse Specials([FromBody]ModSpecialRequest request)
public ApiResponse Specials([FromBody] ModSpecialRequest request)
{
var list = modExtractService.Special(request.HospitalId.Value);
return new ApiResponse(ResponseType.OK, list);
......@@ -235,7 +235,7 @@ public ApiResponse Specials([FromBody]ModSpecialRequest request)
/// <returns></returns>
[Route("editspecial")]
[HttpPost]
public ApiResponse EditSpecial([FromBody]SpecialListRequest request)
public ApiResponse EditSpecial([FromBody] SpecialListRequest request)
{
if (request.Items == null || !request.Items.Any())
return new ApiResponse(ResponseType.ParameterError, "请选择需要修改的数据!");
......@@ -250,7 +250,7 @@ public ApiResponse EditSpecial([FromBody]SpecialListRequest request)
/// <returns></returns>
[Route("deletespecial")]
[HttpPost]
public ApiResponse DelSpecial([FromBody]ModSpecialRequest request)
public ApiResponse DelSpecial([FromBody] ModSpecialRequest request)
{
if (request.SpecialId == null && request.SpecialId == 0)
return new ApiResponse(ResponseType.ParameterError, "SpecialId 参数错误!");
......@@ -279,7 +279,7 @@ public ApiResponse PerforType()
/// <returns></returns>
[Route("config")]
[HttpPost]
public ApiResponse Config([FromBody]ModModuleRequest request)
public ApiResponse Config([FromBody] ModModuleRequest request)
{
if (request.HospitalId == null || request.HospitalId.Value == 0)
return new ApiResponse(ResponseType.ParameterError, "HospitalId 不存在,请重新选择!");
......
......@@ -30,7 +30,7 @@ public class ItemListRequest
public Nullable<int> ModuleId { get; set; }
/// <summary> 新增项 </summary>
public List<mod_item> Items { get; set; }
public List<ex_item> Items { get; set; }
}
}
......@@ -47,9 +47,9 @@ public class ex_item
public Nullable<decimal> FactorValue3 { get; set; }
/// <summary>
/// 抽取绩效值SQL
///
/// </summary>
public Nullable<int> ExtractId { get; set; }
public Nullable<int> TypeId { get; set; }
/// <summary>
/// 数据库地址
......
......@@ -42,9 +42,9 @@ public class ex_module
public string Description { get; set; }
/// <summary>
/// 提取脚本ID
///
/// </summary>
public Nullable<int> ExtractId { get; set; }
public Nullable<int> TypeId { get; set; }
/// <summary>
/// 数据库地址
......
using Microsoft.Extensions.Logging;
using Performance.DtoModels;
using Performance.EntityModels;
using Performance.Infrastructure;
using Performance.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace Performance.Services
{
public class ExConfigService : IAutoInjection
{
private readonly PerforExtypeRepository extypeRepository;
private readonly PerforExscriptRepository exscriptRepository;
private readonly PerforExmoduleRepository exmoduleRepository;
private readonly PerforExitemRepository exitemRepository;
private readonly PerforModspecialRepository modspecialRepository;
private readonly PerforPerallotRepository perallotRepository;
private readonly PerforHospitalconfigRepository hospitalconfigRepository;
private readonly PerforExtractRepository extractRepository;
private readonly PerforModdicRepository moddicRepository;
private readonly ILogger logger;
public ExConfigService(PerforExtypeRepository extypeRepository,
PerforExscriptRepository exscriptRepository,
PerforExmoduleRepository exmoduleRepository,
PerforExitemRepository exitemRepository,
PerforModspecialRepository modspecialRepository,
PerforPerallotRepository perallotRepository,
PerforHospitalconfigRepository hospitalconfigRepository,
PerforExtractRepository extractRepository,
PerforModdicRepository moddicRepository,
ILogger<ExConfigService> logger)
{
this.extypeRepository = extypeRepository;
this.exscriptRepository = exscriptRepository;
this.exmoduleRepository = exmoduleRepository;
this.exitemRepository = exitemRepository;
this.modspecialRepository = modspecialRepository;
this.perallotRepository = perallotRepository;
this.hospitalconfigRepository = hospitalconfigRepository;
this.extractRepository = extractRepository;
this.moddicRepository = moddicRepository;
this.logger = logger;
}
#region Modules
public List<ex_module> QueryModule(int hospitalId)
{
//首次添加费用字典默认值
DefaultModules(hospitalId);
var list = exmoduleRepository.GetEntities(t => t.HospitalId == hospitalId).OrderBy(t => t.ModuleName).ToList();
return list;
}
private void DefaultModules(int hospitalId)
{
var moduleList = new ex_module[]
{
new ex_module{ ModuleName = "1.0.1 额外收入", SheetType = (int)SheetType.OtherIncome },
new ex_module{ ModuleName = "1.1.1 门诊开单收入", SheetType = (int)SheetType.Income },
new ex_module{ ModuleName = "1.1.2 门诊执行收入", SheetType = (int)SheetType.Income },
new ex_module{ ModuleName = "1.2.1 住院开单收入", SheetType = (int)SheetType.Income },
new ex_module{ ModuleName = "1.2.2 住院执行收入", SheetType = (int)SheetType.Income },
new ex_module{ ModuleName = "2.1 成本支出统计表", SheetType = (int)SheetType.Expend },
new ex_module{ ModuleName = "3.1 医生组工作量绩效测算表", SheetType = (int)SheetType.Workload },
new ex_module{ ModuleName = "3.2 护理组工作量绩效测算表", SheetType = (int)SheetType.Workload },
};
var data = exmoduleRepository.GetEntities(t => t.HospitalId == hospitalId);
var inexistence = data == null ? moduleList : moduleList.Where(t => !data.Select(p => p.ModuleName).ToArray().Contains(t.ModuleName));
if (inexistence != null && inexistence.Any())
{
List<ex_module> modules = new List<ex_module>();
foreach (var item in inexistence)
{
var module = new ex_module
{
HospitalId = hospitalId,
ModuleName = item.ModuleName,
SheetType = (int)item.SheetType,
ReadOnly = 1,
TypeId = null,
};
modules.Add(module);
}
if (modules.Any())
exmoduleRepository.AddRange(modules.ToArray());
}
}
public ex_module AddModule(ModModuleRequest request)
{
if (request.SheetType != (int)SheetType.Income)
throw new PerformanceException("模块类型错误,只支持收入模板配置");
string[] array = new string[] { "开单收入", "执行收入" };
if (request.ModuleName.IndexOf("开单收入") == -1 && request.ModuleName.IndexOf("执行收入") == -1)
throw new PerformanceException("模块名称规则错误");
//if (!Regex.IsMatch(request.ModuleName, @"^[\u4e00-\u9fa5]+$"))
// throw new PerformanceException("模块名称规则错误,请使用全中文命名");
var incomeList = exmoduleRepository.GetEntities(t => t.HospitalId == request.HospitalId && t.SheetType == (int)SheetType.Income);
if (incomeList.Any(t => Regex.Replace(t.ModuleName, @"\d", "").Replace(".", "").Replace(" ", "") == request.ModuleName))
throw new PerformanceException("绩效模板已存在!");
string addname = "";
var moduleList = exmoduleRepository.GetEntities(t => t.HospitalId == request.HospitalId && t.ModuleName.IndexOf("1.") != -1);
string name = request.ModuleName.Replace("开单收入", "").Replace("执行收入", "");
var exist = moduleList.Where(t => t.ModuleName.Contains(name));
if (exist != null && exist.Any())
{
string modulename = exist.OrderByDescending(t => t.ModuleName).First().ModuleName;
int[] sort = Array.ConvertAll(modulename.Split(' ')[0].Split(new string[] { "." }, StringSplitOptions.RemoveEmptyEntries), t => ConvertHelper.TryInt(t));
sort[2] += 1;
addname = string.Join(".", sort) + " " + request.ModuleName;
}
else
{
string modulename = moduleList.OrderByDescending(t => t.ModuleName).First().ModuleName;
int[] sort = Array.ConvertAll(modulename.Split(' ')[0].Split(new string[] { "." }, StringSplitOptions.RemoveEmptyEntries), t => ConvertHelper.TryInt(t));
sort[1] += 1;
addname = $"{sort[0]}.{sort[1]}.1 " + request.ModuleName;
}
ex_module entity = new ex_module
{
ModuleName = addname,
HospitalId = request.HospitalId,
Description = request.Description,
SheetType = request.SheetType,
TypeId = request.ExtractId,
ReadOnly = 0,
};
if (!exmoduleRepository.Add(entity))
throw new PerformanceException("添加失败!");
return entity;
}
public ex_module EditModule(ModModuleRequest request)
{
var entity = exmoduleRepository.GetEntity(t => t.Id == request.ModuleId);
if (entity == null)
throw new PerformanceException("该绩效抽取方案不存在!");
//if (entity.ReadOnly == 1)
// throw new PerformanceException("该绩效抽取方案不可编辑!");
var list = exmoduleRepository.GetEntities(t => t.Id != entity.Id && t.HospitalId == entity.HospitalId && t.ModuleName == request.ModuleName);
if (list != null && list.Any())
throw new PerformanceException("绩效模板已存在!");
entity.ModuleName = request.ModuleName ?? entity.ModuleName;
entity.SheetType = request.SheetType;
entity.Description = request.Description;
entity.TypeId = request.ExtractId;
entity.ConfigId = request.ConfigId;
if (!exmoduleRepository.Update(entity))
throw new PerformanceException("修改失败!");
return entity;
}
public void DelModule(int moduleId)
{
var entity = exmoduleRepository.GetEntity(t => t.Id == moduleId);
if (entity == null)
throw new PerformanceException("该绩效抽取方案不存在!");
if (!exmoduleRepository.Remove(entity))
throw new PerformanceException("删除失败!");
if (entity.SheetType != (int)SheetType.SpecialUnit)
{
var itemList = exitemRepository.GetEntities(t => t.ModuleId == moduleId);
if (itemList != null && itemList.Any())
exitemRepository.RemoveRange(itemList.ToArray());
}
else
{
var specialList = modspecialRepository.GetEntities(t => t.HospitalId == entity.HospitalId);
if (specialList != null && specialList.Any())
modspecialRepository.RemoveRange(specialList.ToArray());
}
}
#endregion
#region Items
public List<ex_item> QueryItems(int moduleId)
{
var list = exitemRepository.GetEntities(t => t.ModuleId == moduleId);
return list?.OrderBy(t => t.Id).ToList();
}
public List<ex_item> Items(int moduleId)
{
var list = exitemRepository.GetEntities(t => t.ModuleId == moduleId);
return list?.OrderBy(t => t.Id).ToList();
}
public List<ex_item> AddItem(ItemListRequest request)
{
var entity = exitemRepository.GetEntity(t => t.Id == request.ModuleId);
if (entity == null)
throw new PerformanceException("选择的绩效抽取方案不存在!");
var list = request.Items;
list.ForEach(t =>
{
t.ModuleId = entity.Id;
//t.ExtractId = entity.ExtractId;
t.ReadOnly = 0;
});
if (!exitemRepository.AddRange(list.ToArray()))
throw new PerformanceException("添加失败!");
return list;
}
public ex_item EditItem(ex_item entity)
{
var item = exitemRepository.GetEntity(t => t.Id == entity.Id); if (item == null)
throw new PerformanceException("选择修改的项不存在!");
item.ItemName = entity.ItemName;
item.FactorValue1 = entity.FactorValue1;
item.FactorValue2 = entity.FactorValue2;
item.FactorValue3 = entity.FactorValue3;
item.TypeId = entity.TypeId;
item.ConfigId = entity.ConfigId;
if (!exitemRepository.Update(item))
throw new PerformanceException("修改失败!");
return item;
}
public void DelItem(int itemId)
{
var item = exitemRepository.GetEntity(t => t.Id == itemId);
if (item == null)
throw new PerformanceException("Item项不存在!");
exitemRepository.Remove(item);
}
#endregion
#region 特殊科室
/// <summary>
/// 特殊科室模板配置项列表
/// </summary>
/// <returns></returns>
public List<mod_special> QuerySpecial(int hospitalId)
{
var list = modspecialRepository.GetEntities(t => t.HospitalId == hospitalId);
return list;
}
/// <summary>
/// 特殊科室模板配置项新增
/// </summary>
/// <returns></returns>
public List<mod_special> AddSpecial(SpecialListRequest request)
{
var list = request.Items;
list.ForEach(t => t.HospitalId = request.HospitalId);
if (!modspecialRepository.AddRange(list.ToArray()))
throw new PerformanceException("添加失败!");
return list;
}
/// <summary>
/// 特殊科室模板配置项修改
/// </summary>
/// <returns></returns>
public mod_special EditSpecial(mod_special entity)
{
var special = modspecialRepository.GetEntity(t => t.Id == entity.Id);
if (special == null)
throw new PerformanceException("选择修改的数据不存在!");
special.Department = entity.Department ?? special.Department;
special.Target = entity.Target;
special.TargetFactor = entity.TargetFactor;
special.AdjustFactor = entity.AdjustFactor;
special.ExtractId = entity.ExtractId;
special.ConfigId = entity.ConfigId;
if (!modspecialRepository.Update(special))
throw new PerformanceException("修改失败!");
return special;
}
/// <summary>
/// 特殊科室模板配置项删除
/// </summary>
/// <returns></returns>
public void DelSpecial(int specialId)
{
var special = modspecialRepository.GetEntity(t => t.Id == specialId);
if (special == null)
throw new PerformanceException("需要删除的项不存在!");
modspecialRepository.Remove(special);
}
#endregion
/// <summary>
/// 添加默认绩效模板配置
/// </summary>
/// <param name="moduleId"></param>
public void AddItems(int moduleId)
{
var module = exmoduleRepository.GetEntity(t => t.Id == moduleId);
if (module == null)
throw new PerformanceException("绩效模板不存在,请重新选择!");
if (module.SheetType != (int)SheetType.Income)
return;
var sqlconfig = moddicRepository.GetEntity(w => w.HospitalId == module.HospitalId && w.Type.Trim().ToLower() == "itemsql");
if (sqlconfig != null)
{
var hospitalConfig = hospitalconfigRepository.GetEntity(t => t.HospitalId == module.HospitalId && t.Id == sqlconfig.ConfigId);
if (hospitalConfig == null)
{
logger.LogInformation("添加默认收费项时,医院配置信息未设置");
return;
}
}
else
{
logger.LogInformation("添加默认收费项时医院未设置sql");
var hospitalConfigs = hospitalconfigRepository.GetEntities(t => t.HospitalId == module.HospitalId);
if (hospitalConfigs == null || !hospitalConfigs.Any())
{
logger.LogInformation("医院未设置数据库连接信息");
return;
}
string sql = "SELECT ITEM_TYPE FROM DIC_FEE GROUP BY ITEM_TYPE ORDER BY ITEM_TYPE";
}
}
private bool QueryAndAddItem(List<sys_hospitalconfig> hospitalconfigs, string sql)
{
logger.LogInformation("创建数据库连接");
foreach (var hospitalConfig in hospitalconfigs)
{
var connection = ConnectionBuilder.Create((DatabaseType)hospitalConfig.DataBaseType, hospitalConfig.DbSource, hospitalConfig.DbName, hospitalConfig.DbUser, hospitalConfig.DbPassword);
logger.LogInformation($"执行sql:{sql}");
var dataList = extractRepository.ExecuteScript(connection, sql, null);
logger.LogInformation($"获取数据{dataList?.Count ?? 0}条");
if (dataList != null && dataList.Any())
{
var itemList = dataList.Select(t => new ex_item
{
ItemName = t.Value.ToString(),
FactorValue1 = 0m,
FactorValue2 = 0m,
FactorValue3 = 0m,
ModuleId = module.Id,
TypeId = module.TypeId,
ReadOnly = 1
});
logger.LogInformation($"添加默认收费项 受影响行数{itemList.Count()}");
exitemRepository.AddRange(itemList.ToArray());
exmoduleRepository.Update(module);
}
}
return false;
}
}
}
......@@ -264,10 +264,10 @@ public List<mod_item> AddItem(ItemListRequest request)
//t.ExtractId = entity.ExtractId;
t.ReadOnly = 0;
});
if (!perforModitemRepository.AddRange(list.ToArray()))
throw new PerformanceException("添加失败!");
//if (!perforModitemRepository.AddRange(list.ToArray()))
// throw new PerformanceException("添加失败!");
return list;
return new List<mod_item>();
}
/// <summary>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment