Commit 245866cc by lcx

费用类型系数查询、保存

parent 61a31bc8
...@@ -727,15 +727,15 @@ public ApiResponse GetDrugtypeFactor([FromBody] AllotDeptRequest request) ...@@ -727,15 +727,15 @@ public ApiResponse GetDrugtypeFactor([FromBody] AllotDeptRequest request)
[HttpPost("drugtype/factor/config")] [HttpPost("drugtype/factor/config")]
public ApiResponse GetDrugtypeFactorConfig([FromBody] AllotDeptRequest request) public ApiResponse GetDrugtypeFactorConfig([FromBody] AllotDeptRequest request)
{ {
var data = _configService.GetDrugtypeFactorConfig(request.HospitalId); var data = _configService.GetDrugtypeFactorConfig(request.HospitalId, request.AllotId);
return new ApiResponse(ResponseType.OK, data); return new ApiResponse(ResponseType.OK, data);
} }
[HttpPost("drugtype/factor/save")] [HttpPost("drugtype/factor/save")]
public ApiResponse SaveDrugtypeFactor([FromBody]int hospitalId) public ApiResponse SaveDrugtypeFactor([FromBody] DrugtypeFactorRequest request)
{ {
var data = _configService.GetDrugtypeFactorConfig(hospitalId); _configService.SaveDrugtypeFactor(request);
return new ApiResponse(ResponseType.OK, data); return new ApiResponse(ResponseType.OK, "保存成功!");
} }
#endregion #endregion
......
...@@ -100,6 +100,9 @@ ...@@ -100,6 +100,9 @@
<member name="P:Performance.EntityModels.PerformanceDbContext.cof_drugtype"> <member name="P:Performance.EntityModels.PerformanceDbContext.cof_drugtype">
<summary> 药占比费用列头名称 </summary> <summary> 药占比费用列头名称 </summary>
</member> </member>
<member name="P:Performance.EntityModels.PerformanceDbContext.cof_drugtype_factor">
<summary> 药占比费用列头名称系数 </summary>
</member>
<member name="P:Performance.EntityModels.PerformanceDbContext.cof_guarantee"> <member name="P:Performance.EntityModels.PerformanceDbContext.cof_guarantee">
<summary> 保底科室配置 </summary> <summary> 保底科室配置 </summary>
</member> </member>
...@@ -1884,11 +1887,6 @@ ...@@ -1884,11 +1887,6 @@
费用名称 费用名称
</summary> </summary>
</member> </member>
<member name="P:Performance.EntityModels.cof_drugtype_factor.ChargeType">
<summary>
费用类别
</summary>
</member>
<member name="P:Performance.EntityModels.cof_drugtype_factor.ExModuleId"> <member name="P:Performance.EntityModels.cof_drugtype_factor.ExModuleId">
<summary> <summary>
收入类型 收入类型
......
using System.Collections.Generic;
namespace Performance.DtoModels
{
public class DrugtypeFactorRequest
{
public int HospitalId { get; set; }
public int AllotId { get; set; }
public List<Dictionary<string, object>> Data { get; set; }
}
}
...@@ -77,6 +77,8 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options) ...@@ -77,6 +77,8 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options)
public virtual DbSet<cof_drugprop> cof_drugprop { get; set; } public virtual DbSet<cof_drugprop> cof_drugprop { get; set; }
/// <summary> 药占比费用列头名称 </summary> /// <summary> 药占比费用列头名称 </summary>
public virtual DbSet<cof_drugtype> cof_drugtype { get; set; } public virtual DbSet<cof_drugtype> cof_drugtype { get; set; }
/// <summary> 药占比费用列头名称系数 </summary>
public virtual DbSet<cof_drugtype_factor> cof_drugtype_factor { get; set; }
/// <summary> 保底科室配置 </summary> /// <summary> 保底科室配置 </summary>
public virtual DbSet<cof_guarantee> cof_guarantee { get; set; } public virtual DbSet<cof_guarantee> cof_guarantee { get; set; }
/// <summary> </summary> /// <summary> </summary>
......
...@@ -37,11 +37,6 @@ public class cof_drugtype_factor ...@@ -37,11 +37,6 @@ public class cof_drugtype_factor
public string Charge { get; set; } public string Charge { get; set; }
/// <summary> /// <summary>
/// 费用类别
/// </summary>
public string ChargeType { get; set; }
/// <summary>
/// 收入类型 /// 收入类型
/// </summary> /// </summary>
public Nullable<int> ExModuleId { get; set; } public Nullable<int> ExModuleId { get; set; }
......
...@@ -878,6 +878,24 @@ public void Copy(per_allot allot) ...@@ -878,6 +878,24 @@ public void Copy(per_allot allot)
_drugtypeRepository.AddRange(newAgains.ToArray()); _drugtypeRepository.AddRange(newAgains.ToArray());
} }
logger.LogInformation($"cofDrugtypefactor");
var cofDrugtypeFactor = cofdrugtypefactorRepository.GetEntities(t => t.AllotID == allot.ID);
if (cofDrugtypeFactor == null || cofDrugtypeFactor.Count == 0)
{
var drugtypefactoe = cofdrugtypefactorRepository.GetEntities(t => t.AllotID == allotId) ?? cofdrugtypefactorRepository.GetEntities(t => t.AllotID == -1);
var newAgains = drugtypefactoe.Select(t => new cof_drugtype_factor
{
HospitalId = allot.HospitalId,
AllotID = allot.ID,
ExModuleId = t.ExModuleId,
Charge = t.Charge,
YSZ = t.YSZ,
HLZ = t.HLZ,
YJZ = t.YJZ,
});
cofdrugtypefactorRepository.AddRange(newAgains.ToArray());
}
logger.LogInformation($"cofDepttype"); logger.LogInformation($"cofDepttype");
var cofDepttype = perforCofdepttypeRepository.GetEntities(t => t.AllotID == allot.ID); var cofDepttype = perforCofdepttypeRepository.GetEntities(t => t.AllotID == allot.ID);
if (cofDepttype == null || cofDepttype.Count == 0) if (cofDepttype == null || cofDepttype.Count == 0)
...@@ -1213,12 +1231,124 @@ public void SaveSecondaryAlias(SaveCollectData request) ...@@ -1213,12 +1231,124 @@ public void SaveSecondaryAlias(SaveCollectData request)
#region 费用类型系数 #region 费用类型系数
public List<view_dic_category_factor> GetDrugtypeFactor(AllotDeptRequest request) public SheetExportResponse GetDrugtypeFactor(AllotDeptRequest request)
{
SheetExportResponse sheet = new SheetExportResponse();
#region header
var models = perforExmoduleRepository.GetEntities(t => t.HospitalId == request.HospitalId && t.SheetType == (int)SheetType.Income);
if (models == null || !models.Any())
{ {
return _directorRepository.QueryCategoryFactor(request.HospitalId, request.AllotId)?.ToList(); exConfigService.DefaultModules(request.HospitalId);
models = perforExmoduleRepository.GetEntities(t => t.HospitalId == request.HospitalId && t.SheetType == (int)SheetType.Income);
if (models == null || !models.Any()) return sheet;
} }
public HandsonTable GetDrugtypeFactorConfig(int hospitalId) var mergeCells = new List<Cell>
{
new Cell{ CellType = "header", CellValue = "", PointCell = 0, MergeRow = 1, MergeCell = 1 },
new Cell{ CellType = "header", CellValue = "", PointCell = 1, MergeRow = 1, MergeCell = 1 },
};
var cells = new List<Cell>
{
new Cell{ CellType = "header", CellValue = "项目小类(测算表)", PointCell = 0, MergeRow = 1, MergeCell = 1 },
new Cell{ CellType = "header", CellValue = "费用大类(大屏展示)", PointCell = 1, MergeRow = 1, MergeCell = 1 }
};
var defaultColumns = new Dictionary<string, string>
{
{ UnitType.医生组.ToString(), "ysz" },
{ UnitType.护理组.ToString(), "hlz" },
{ UnitType.医技组.ToString(), "yjz" }
};
int index = 0;
foreach (var model in models)
{
mergeCells.Add(new Cell { CellType = "header", CellValue = model.ModuleName, PointCell = 2 + index * 3, MergeRow = 1, MergeCell = defaultColumns.Count });
int i = 0;
cells.AddRange(defaultColumns.Select(t =>
{
i++;
return new Cell
{
CellType = "header",
CellValue = t.Key,
PointCell = 1 + index * 3 + i,
MergeRow = 1,
MergeCell = 1
};
}));
index++;
}
sheet.Header = new List<Row>
{
new Row(0){ Data = mergeCells },
new Row(1){ Data = cells }
};
#endregion
#region data
List<Row> rows = new List<Row>();
var querydata = _directorRepository.QueryCategoryFactor(request.HospitalId, request.AllotId)?.ToList();
if (querydata != null && querydata.Any())
{
var fields = new Dictionary<string, Func<view_dic_category_factor, object>>
{
{ "ysz", t => t.YSZ },
{ "hlz", t => t.HLZ },
{ "yjz", t => t.YJZ }
};
var charges = querydata.Select(t => new { t.Charge, t.ChargeType }).Distinct().OrderBy(t => t.Charge).ThenBy(t => t.ChargeType);
index = 0;
foreach (var charge in charges)
{
var rowcells = new List<Cell>
{
new Cell { CellType = "body", CellValue = charge.Charge, PointCell = 0, MergeRow = 1, MergeCell = 1 },
new Cell { CellType = "body", CellValue = charge.ChargeType, PointCell = 0, MergeRow = 1, MergeCell = 1 },
};
int i = 0;
foreach (var model in models)
{
var modeldata = querydata.FirstOrDefault(t => t.Charge == charge.Charge && t.ChargeType == charge.ChargeType && t.ExModuleId == model.Id);
int j = 1;
foreach (var column in defaultColumns)
{
rowcells.Add(new Cell
{
CellType = "body",
CellValue = modeldata == null ? null : fields[column.Value].Invoke(modeldata),
PointCell = 1 + i * 3 + j,
MergeRow = 1,
MergeCell = 1
});
j++;
}
i++;
}
rows.Add(new Row(index) { Data = rowcells });
index++;
}
}
sheet.Row = rows;
#endregion
return sheet;
}
public HandsonTable GetDrugtypeFactorConfig(int hospitalId, int allotId)
{ {
HandsonTable table = new HandsonTable((int)SheetType.Unidentifiable, new string[] { }, new List<collect_permission>()); HandsonTable table = new HandsonTable((int)SheetType.Unidentifiable, new string[] { }, new List<collect_permission>());
...@@ -1231,7 +1361,13 @@ public HandsonTable GetDrugtypeFactorConfig(int hospitalId) ...@@ -1231,7 +1361,13 @@ public HandsonTable GetDrugtypeFactorConfig(int hospitalId)
if (models == null || !models.Any()) return table; if (models == null || !models.Any()) return table;
} }
var defaultColumns = new List<string> { UnitType.医生组.ToString(), UnitType.护理组.ToString(), UnitType.医技组.ToString() }; var defaultColumns = new Dictionary<string, string>
{
{ UnitType.医生组.ToString(), "ysz" },
{ UnitType.护理组.ToString(), "hlz" },
{ UnitType.医技组.ToString(), "yjz" }
};
var mergeCells = new List<NestedHeader> var mergeCells = new List<NestedHeader>
{ {
new NestedHeader("", 1), new NestedHeader("", 1),
...@@ -1241,63 +1377,130 @@ public HandsonTable GetDrugtypeFactorConfig(int hospitalId) ...@@ -1241,63 +1377,130 @@ public HandsonTable GetDrugtypeFactorConfig(int hospitalId)
{ {
"项目小类(测算表)", "费用大类(大屏展示)", "项目小类(测算表)", "费用大类(大屏展示)",
}; };
var columns = new List<HandsonColumn> var columns = new List<HandsonColumn>
{ {
new HandsonColumn("项目小类(测算表)", false), new HandsonColumn("charge", false),
new HandsonColumn("费用大类(大屏展示)", false), new HandsonColumn("chargetype", false),
}; };
foreach (var model in models) foreach (var model in models)
{ {
mergeCells.Add(new NestedHeader(model.ModuleName, defaultColumns.Count)); mergeCells.Add(new NestedHeader(model.ModuleName, defaultColumns.Count));
cells.AddRange(defaultColumns); cells.AddRange(defaultColumns.Select(t => t.Key));
columns.AddRange(defaultColumns.Select(t => new HandsonColumn(t, false, DataFormat.百分比))); columns.AddRange(defaultColumns.Select(t => new HandsonColumn(t.Value + $"_{model.Id}", false, DataFormat.百分比)));
}
#region data
List<Dictionary<string, object>> data = new List<Dictionary<string, object>>();
var querydata = _directorRepository.QueryCategoryFactor(hospitalId, allotId)?.ToList();
if (querydata != null && querydata.Any())
{
var fields = new Dictionary<string, Func<view_dic_category_factor, object>>
{
{ "ysz", t => t.YSZ },
{ "hlz", t => t.HLZ },
{ "yjz", t => t.YJZ }
};
var charges = querydata.Select(t => new { t.Charge, t.ChargeType }).Distinct().OrderBy(t => t.Charge).ThenBy(t => t.ChargeType);
foreach (var charge in charges)
{
Dictionary<string, object> dict = new Dictionary<string, object>
{
{ "Charge", charge.Charge },
{ "ChargeType", charge.ChargeType }
};
foreach (var model in models)
{
var modeldata = querydata.FirstOrDefault(t => t.Charge == charge.Charge && t.ChargeType == charge.ChargeType && t.ExModuleId == model.Id);
foreach (var column in defaultColumns)
{
if (modeldata == null)
{
dict.Add(column.Value + $"_{model.Id}", null);
}
else
{
dict.Add(column.Value + $"_{model.Id}", fields[column.Value].Invoke(modeldata));
}
}
}
data.Add(dict);
}
} }
#endregion
table.Columns = columns; table.Columns = columns;
table.NestedHeadersArray = new object[] { mergeCells, cells }; table.NestedHeadersArray = new object[] { mergeCells, cells };
table.ColHeaders = cells; table.ColHeaders = cells;
table.Data = data;
return table; return table;
} }
public void SaveDrugtypeFactor(List<object> nestedHeadersArray, string[][] data, int hospitalId, int allotId) public void SaveDrugtypeFactor(DrugtypeFactorRequest request)
{ {
if (data == null || !data.Any(t => t != null && t.Count() > 0 && !string.IsNullOrEmpty(t[0]))) return; if (request.Data == null || !request.Data.Any()) return;
var charges = new List<view_dic_category_factor>(); var moduleIds = request.Data.FirstOrDefault().Keys.Where(t => t.Contains("_")).Select(t => t.Split('_')[1]).Distinct();
if (nestedHeadersArray[0] is List<NestedHeader> modelHeaders && modelHeaders.Any(t => !string.IsNullOrEmpty(t.Label)))
{
var headers = nestedHeadersArray[1] as List<string>;
var modelnames = modelHeaders.Where(t => !string.IsNullOrEmpty(t.Label)).Select(t => t.Label);
var models = perforExmoduleRepository.GetEntities(t => t.HospitalId == hospitalId && t.SheetType == (int)SheetType.Income);
if (models == null || !models.Any()) return;
foreach (var item in data.Where(t => t != null && t.Count() == headers.Count && !string.IsNullOrEmpty(t[0]))) var factors = new List<cof_drugtype_factor>();
{ var charges = new List<cof_drugtype>();
string charge = item[0]; bool isHasChargeData = false;
string chargeType = item[1];
int index = 0; foreach (var item in request.Data)
foreach (var modelname in modelnames)
{ {
index++; string charge = string.Empty; string chargeType = string.Empty;
var exmodel = models.FirstOrDefault(t => t.ModuleName == modelname); if (item.ContainsKey("charge")) charge = item["charge"]?.ToString();
if (exmodel == null) continue; if (item.ContainsKey("chargetype")) chargeType = item["chargetype"]?.ToString();
if (string.IsNullOrEmpty(charge) && string.IsNullOrEmpty(chargeType)) continue;
var dic = new view_dic_category_factor isHasChargeData = true;
charges.Add(new cof_drugtype
{ {
HospitalId = hospitalId, HospitalId = request.HospitalId,
AllotID = allotId, AllotID = request.AllotId,
Charge = charge, Charge = charge,
ChargeType = chargeType, ChargeType = chargeType,
ExModuleId = exmodel.Id, });
ModuleName = modelname,
YSZ = ConvertHelper.To<decimal?>(item[2 + 3 * (index - 1)]), foreach (var moduleId in moduleIds)
HLZ = ConvertHelper.To<decimal?>(item[3 + 3 * (index - 1)]), {
YJZ = ConvertHelper.To<decimal?>(item[4 + 3 * (index - 1)]), var data = item.Where(t => t.Key.EndsWith(moduleId));
}; factors.Add(new cof_drugtype_factor
charges.Add(dic); {
HospitalId = request.HospitalId,
AllotID = request.AllotId,
Charge = charge,
ExModuleId = ConvertHelper.To<int>(moduleId),
YSZ = item.ContainsKey("ysz_" + moduleId) ? ConvertHelper.To<decimal?>(item["ysz_" + moduleId]) : null,
HLZ = item.ContainsKey("hlz_" + moduleId) ? ConvertHelper.To<decimal?>(item["hlz_" + moduleId]) : null,
YJZ = item.ContainsKey("yjz_" + moduleId) ? ConvertHelper.To<decimal?>(item["yjz_" + moduleId]) : null,
});
}
} }
var savedData = cofdrugtypefactorRepository.GetEntities(t => t.HospitalId == request.HospitalId && t.AllotID == request.AllotId);
if (savedData != null && savedData.Any())
{
cofdrugtypefactorRepository.RemoveRange(savedData.ToArray());
}
if (factors != null && factors.Any())
cofdrugtypefactorRepository.AddRange(factors.ToArray());
if (isHasChargeData)
{
var drugtypes = _drugtypeRepository.GetEntities(t => t.HospitalId == request.HospitalId && t.AllotID == request.AllotId);
if (drugtypes != null && drugtypes.Any())
{
_drugtypeRepository.RemoveRange(drugtypes.ToArray());
} }
if (charges != null && charges.Any())
_drugtypeRepository.AddRange(charges.ToArray());
} }
} }
......
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