Commit 5b751ceb by lcx

数据抽取过滤空格换行、医院其他绩效根据角色显示对应的数据及上传文件

parent 8dd90516
......@@ -20,6 +20,7 @@ public class EmployeeController : Controller
private AllotService allotService;
private ClaimService claim;
private IHostingEnvironment evn;
public EmployeeController(EmployeeService employeeService, AllotService allotService,
ClaimService claim, IHostingEnvironment evn)
{
......@@ -236,7 +237,7 @@ public ApiResponse DeleteLogistics([FromBody] im_employee_clinic request)
return new ApiResponse(ResponseType.OK);
}
#endregion
#endregion 行政后勤
/// <summary>
/// 人事科修改参数后提交
......@@ -263,7 +264,7 @@ public ApiResponse GetAprList([FromBody] per_apr_amount request)
if (request.AllotId == 0)
return new ApiResponse(ResponseType.ParameterError, "参数AllotId无效!");
var employee = employeeService.GetAprList(request.AllotId);
var employee = employeeService.GetAprList(request.AllotId, claim.GetUserId());
return new ApiResponse(ResponseType.OK, "ok", employee);
}
......@@ -279,7 +280,7 @@ public ApiResponse GetAprGroupList([FromBody] per_apr_amount request)
if (request.AllotId == 0)
return new ApiResponse(ResponseType.ParameterError, "参数AllotId无效!");
var employee = employeeService.GetAprList(request.AllotId);
var employee = employeeService.GetAprList(request.AllotId, claim.GetUserId());
if (employee == null || !employee.Any())
return new ApiResponse(ResponseType.OK, "ok", employee);
......
......@@ -28,6 +28,7 @@ public class ExtractController : Controller
private readonly WebapiUrl url;
private readonly ILogger<ExtractController> logger;
private readonly IHostingEnvironment evn;
public ExtractController(DFExtractService extractService,
HospitalService hospitalService,
ExtractService extractService1,
......@@ -123,7 +124,9 @@ public void ExtractData([FromForm] IFormCollection form, int allotId, int hospit
return;
var path = string.Empty;
#region 保存历史绩效文件
if (form.Files == null || !form.Files.Any() || ((FormFileCollection)form.Files).FirstOrDefault() == null)
logger.LogInformation($"文件为空!");
else
......@@ -150,11 +153,13 @@ public void ExtractData([FromForm] IFormCollection form, int allotId, int hospit
}
}
}
#endregion
#endregion 保存历史绩效文件
//string filePath = newExtractService.ExtractData(allotId, request.Email, hospitalId);
//string filePath = extractService.ExtractData(allotId, email, hospitalId, "User" + userId, path); //抽取
string filePath = extractService1.Main(allotId, hospitalId, email, "User" + userId, path);
logger.LogInformation($"抽取文件地址: {filePath}");
#region 保存文件到网站下
......@@ -191,9 +196,9 @@ public void ExtractData([FromForm] IFormCollection form, int allotId, int hospit
else
logger.LogInformation($"保存提取文件提取文件不存在!");
#endregion
#endregion 保存文件到网站下
}
#endregion
#endregion 新版提取
}
}
\ No newline at end of file
......@@ -23,10 +23,13 @@ public static IDbConnection Create(DatabaseType type, string connectionString)
{
case DatabaseType.MySql:
return new MySqlConnection(connectionString);
case DatabaseType.SqlServer:
return new SqlConnection(connectionString);
case DatabaseType.Oracle:
return new OracleConnection(connectionString);
default:
throw new Exception($"nonsupport {DatabaseType.MySql}");
}
......@@ -47,14 +50,17 @@ public static string GetConnectionString(DatabaseType type, string ip, string da
switch (type)
{
case DatabaseType.MySql:
connectionString = $"Server={ip};Database={database};Uid={uid};Pwd={pwd};connection timeout=12000;pooling=true;charset=utf8;Convert Zero Datetime=True;port=3306;Allow User Variables=True;;";
connectionString = $"Server={ip};Database={database};Uid={uid};Pwd={pwd};connection timeout=12000;pooling=true;charset=utf8;Convert Zero Datetime=True;port=3306;Allow User Variables=True;";
break;
case DatabaseType.SqlServer:
connectionString = $"data source={ip};initial catalog={database};user id={uid};password={pwd};connection timeout=12000;";
break;
case DatabaseType.Oracle:
connectionString = $"Password={pwd};User ID={uid};Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={ip})(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME={database})));";
break;
default:
throw new Exception($"nonsupport {DatabaseType.MySql}");
}
......@@ -75,7 +81,5 @@ public static IDbConnection Create(DatabaseType type, string ip, string database
string connectionString = GetConnectionString(type, ip, database, uid, pwd);
return Create(type, connectionString);
}
}
}
\ No newline at end of file
......@@ -27,6 +27,7 @@ public class EmployeeService : IAutoInjection
private PerforPerallotRepository perallotRepository;
private PerforPerapramountRepository perapramountRepository;
private PerforImemployeelogisticsRepository perforImemployeelogisticsRepository;
private PerforUserroleRepository userroleRepository;
private ILogger<EmployeeService> logger;
public EmployeeService(PerforImemployeeRepository perforImemployeeRepository,
......@@ -37,6 +38,7 @@ public class EmployeeService : IAutoInjection
PerforPerallotRepository perallotRepository,
PerforPerapramountRepository perapramountRepository,
PerforImemployeelogisticsRepository perforImemployeelogisticsRepository,
PerforUserroleRepository userroleRepository,
ILogger<EmployeeService> logger)
{
this.perforImemployeeRepository = perforImemployeeRepository;
......@@ -47,6 +49,7 @@ public class EmployeeService : IAutoInjection
this.perallotRepository = perallotRepository;
this.perapramountRepository = perapramountRepository;
this.perforImemployeelogisticsRepository = perforImemployeelogisticsRepository;
this.userroleRepository = userroleRepository;
this.logger = logger;
}
......@@ -160,7 +163,7 @@ public bool Delete(EmployeeRequest request)
return perforImemployeeRepository.Remove(employee);
}
#endregion
#endregion 行政人员
#region 临床人员
......@@ -258,7 +261,7 @@ public bool DeleteClinic(im_employee_clinic request)
return perforImemployeeclinicRepository.Remove(employee);
}
#endregion
#endregion 临床人员
#region 行政后勤
......@@ -355,7 +358,7 @@ public bool DeleteLogistics(im_employee_clinic request)
return perforImemployeelogisticsRepository.Remove(employee);
}
#endregion
#endregion 行政后勤
/// <summary>
/// 人事科修改后提交状态
......@@ -374,9 +377,16 @@ public bool Audit(int allotId)
return perforPerallotRepository.Update(allot);
}
public List<per_apr_amount> GetAprList(int allotId)
public List<per_apr_amount> GetAprList(int allotId, int userId)
{
var list = perapramountRepository.GetEntities(t => t.AllotId == allotId && t.Amount.HasValue && t.Amount != 0);
var userrole = userroleRepository.GetEntity(t => t.UserID == userId);
if (userrole == null) throw new PerformanceException("用户未绑定角色");
var list = new List<per_apr_amount>();
if (new int[] { 1, 2, 5 }.Contains(userrole.RoleID)) // 绩效管理员、医院管理员、绩效核算办查看所有科室的数据
list = perapramountRepository.GetEntities(t => t.AllotId == allotId && (t.Amount ?? 0) != 0);
else
list = perapramountRepository.GetEntities(t => t.AllotId == allotId && (t.Amount ?? 0) != 0 && t.CreateUser == userId);
if (list != null && list.Any())
list = list.OrderBy(t => t.DoctorName).ToList();
......@@ -473,7 +483,15 @@ public bool ConfirmAudit(int userid, AprAmountAuditRequest request)
public void ImpoerAprEmployees(int allotid, string path, int userid)
{
var data = perapramountRepository.GetEntities(t => t.AllotId == allotid);
var userrole = userroleRepository.GetEntity(t => t.UserID == userid);
if (userrole == null) throw new PerformanceException("用户未绑定角色");
var data = new List<per_apr_amount>();
if (new int[] { 1, 2, 5 }.Contains(userrole.RoleID)) // 绩效管理员、医院管理员、绩效核算办查看所有科室的数据
data = perapramountRepository.GetEntities(t => t.AllotId == allotid && (t.Amount ?? 0) != 0);
else
data = perapramountRepository.GetEntities(t => t.AllotId == allotid && (t.Amount ?? 0) != 0 && t.CreateUser == userid);
if (data != null && data.Any())
perapramountRepository.RemoveRange(data.ToArray());
......@@ -513,7 +531,6 @@ public void ImpoerAprEmployees(int allotid, string path, int userid)
List<string> errorHeaders = new List<string>();
foreach (var key in dict.Keys.ToList())
{
if (!excelheader.Select(t => t.Item1).Contains(key)) errorHeaders.Add(key);
else dict[key] = excelheader.First(t => t.Item1 == key).Item2;
}
......
......@@ -208,7 +208,7 @@ public void DelModule(int moduleId)
}
}
#endregion
#endregion Modules
#region Items
......@@ -263,7 +263,7 @@ public void DelItem(int itemId)
exitemRepository.Remove(item);
}
#endregion
#endregion Items
#region 特殊科室
......@@ -326,7 +326,7 @@ public void DelSpecial(int specialId)
exspecialRepository.Remove(special);
}
#endregion
#endregion 特殊科室
public bool QueryHosConfigs(int moduleId, out int sheetType)
{
......@@ -393,6 +393,7 @@ private bool QueryAndAddItem(List<sys_hospitalconfig> hospitalconfigs, string sq
logger.LogInformation($"执行sql:{sql}");
try
{
logger.LogInformation($"ConnectionString: {connection?.ConnectionString}");
var dataList = extractRepository.ExecuteScript(connection, sql, null);
logger.LogInformation($"获取数据{dataList?.Count ?? 0}条");
if (dataList != null && dataList.Any())
......
......@@ -52,28 +52,33 @@ public static void SetCellValue<T>(this ICell cell, object value, T defaultValue
case "System.String"://字符串类型
cell.SetCellValue(ConvertHelper.To<string>(value));
break;
case "System.DateTime"://日期类型
cell.SetCellValue(ConvertHelper.To<DateTime>(value).ToString("yyyy/M/d"));
break;
case "System.Boolean"://布尔型
cell.SetCellValue(ConvertHelper.To<bool>(value));
break;
case "System.Int16"://整型
case "System.Int32":
case "System.Int64":
case "System.Byte":
cell.SetCellValue(ConvertHelper.To<int>(value));
break;
case "System.Decimal"://浮点型
case "System.Double":
cell.SetCellValue(ConvertHelper.To<double>(value));
break;
case "System.DBNull"://空值处理
default:
cell.SetCellValue("");
break;
#endregion
#endregion SetValue
}
}
catch
......@@ -103,16 +108,19 @@ public static void SetCellOValue(this ICell cell, object value)
case "System.String"://字符串类型
cell.SetCellValue(stringV);
break;
case "System.DateTime"://日期类型
DateTime dateV;
DateTime.TryParse(stringV, out dateV);
cell.SetCellValue(dateV.ToString("yyyy/M/d"));
break;
case "System.Boolean"://布尔型
bool boolV = false;
bool.TryParse(stringV, out boolV);
cell.SetCellValue(boolV);
break;
case "System.Int16"://整型
case "System.Int32":
case "System.Int64":
......@@ -121,20 +129,23 @@ public static void SetCellOValue(this ICell cell, object value)
int.TryParse(stringV, out intV);
cell.SetCellValue(intV);
break;
case "System.Decimal"://浮点型
case "System.Double":
double doubV = 0;
double.TryParse(stringV, out doubV);
cell.SetCellValue(doubV);
break;
case "System.DBNull"://空值处理
cell.SetCellValue("");
break;
default:
cell.SetCellValue("");
break;
#endregion
#endregion SetValue
}
}
catch
......@@ -171,7 +182,7 @@ public static string GetDecodeEscapes(this ICell cell)
cell.SetCellType(CellType.String);
string value = cell.StringCellValue;
if (!string.IsNullOrEmpty(value))
value = value.Replace("\n", "").Replace(" ", "").Trim();
value = value.Replace("\n", "").Replace("\r", "").Replace(" ", "").Trim();
return value;
}
......@@ -185,7 +196,7 @@ public static string NoBlank(this string @string)
{
if (string.IsNullOrEmpty(@string))
return "";
return @string.Replace("\n", "").Replace(" ", "").Trim();
return @string.Replace("\n", "").Replace("\r", "").Replace(" ", "").Trim();
}
public static IWorkbook GetWorkbook(string filePath)
......
......@@ -41,7 +41,7 @@ public static void WriteSheetHeader(ISheet sheet, PerSheetPoint point, SheetType
var column = columnHeader.GetCell(index).GetDecodeEscapes();
if (string.IsNullOrEmpty(column)) continue;
columns.RemoveAll(t => t.ColumnName == column);
columns.RemoveAll(t => t.ColumnName.NoBlank() == column);
if (index > headerFirstCellNum)
headerFirstCellNum = index + 1;
}
......@@ -106,6 +106,8 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
var cellStyle = style.SetBgkColorAndFormat(style.GetCellStyle(), StyleType.数据);
headers = headers.Select(t => t.NoBlank()).ToList();
int dataFirstCellNum = point.DataFirstCellNum.Value;
for (int rowIndex = dataFirstRowNum; rowIndex < sheet.LastRowNum + 1; rowIndex++)
......@@ -124,7 +126,7 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
var column = columnHeader.GetOrCreate(cellIndex).GetDecodeEscapes();
var cell = row.GetOrCreate(cellIndex);
var value = deptData.FirstOrDefault(t => t.Category == column)?.Value;
var value = deptData.FirstOrDefault(t => t.Category.NoBlank() == column)?.Value;
var notWrite = !value.HasValue && !string.IsNullOrEmpty(cell.ToString());
if (sheetType == SheetType.Income)
......@@ -161,6 +163,8 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
var deptStyle = style.GetCellStyle();
var cellStyle = style.SetBgkColorAndFormat(style.GetCellStyle(), StyleType.数据);
headers = headers.Select(t => t.NoBlank()).ToList();
dataFirstRowNum += 1;
foreach (string department in departments)
{
......@@ -180,7 +184,7 @@ public static void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType s
}
else if (sheetType == SheetType.Income || (headers != null && headers.Contains(column)))
{
var value = deptData.FirstOrDefault(t => t.Category == column)?.Value;
var value = deptData.FirstOrDefault(t => t.Category.NoBlank() == column)?.Value;
cell.SetCellValue<decimal>(value);
cell.CellStyle = cellStyle;
}
......@@ -234,7 +238,7 @@ public static string HasValue(params string[] list)
{ "核算单元", (dto) => new string []{ dto.OutNurseAccounting, dto.InpatNurseAccounting }.FirstOrDefault(t => !string.IsNullOrEmpty(t)) },
};
#endregion
#endregion ExtractData
#region CollectData
......@@ -257,6 +261,8 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
var cellStyle = style.SetBgkColorAndFormat(style.GetCellStyle(), StyleType.数据);
headers = headers.Select(t => t.NoBlank()).ToList();
int dataFirstCellNum = point.DataFirstCellNum.Value;
for (int rowIndex = dataFirstRowNum; rowIndex < sheet.LastRowNum + 1; rowIndex++)
......@@ -275,7 +281,7 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
var column = columnHeader.GetOrCreate(cellIndex).GetDecodeEscapes();
var cell = row.GetOrCreate(cellIndex);
var value = deptData.FirstOrDefault(t => t.TypeName == column)?.CellValue;
var value = deptData.FirstOrDefault(t => t.TypeName.NoBlank() == column)?.CellValue;
if (sheetType == SheetType.Income)
{
......@@ -307,6 +313,8 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
var deptStyle = style.GetCellStyle();
var cellStyle = style.SetBgkColorAndFormat(style.GetCellStyle(), StyleType.数据);
headers = headers.Select(t => t.NoBlank()).ToList();
dataFirstRowNum += 1;
foreach (string department in departments)
{
......@@ -326,7 +334,7 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
}
else if (sheetType == SheetType.Income || (headers != null && headers.Contains(column)))
{
var value = deptData.FirstOrDefault(t => t.TypeName == column)?.CellValue;
var value = deptData.FirstOrDefault(t => t.TypeName.NoBlank() == column)?.CellValue;
cell.SetCellValue<decimal>(value);
cell.CellStyle = cellStyle;
}
......@@ -358,6 +366,6 @@ public static void WriteCollectData(ISheet sheet, PerSheetPoint point, SheetType
{ "核算单元类型", (dto) => dto.UnitType },
};
#endregion
#endregion CollectData
}
}
\ No newline at end of file
......@@ -131,6 +131,8 @@ private void WriteDataToFile(IWorkbook workbook, int allotId, Dictionary<ExDataD
var employeeDict = peremployeeRepository.GetEntities(t => t.AllotId == allotId);
var collectData = collectdataRepository.GetEntities(t => t.AllotID == allotId);
logger.LogInformation($"allotId: {allotId}: 总金额 - {extractDto?.Sum(s => s.Value ?? 0)}");
WriteDataFactory factory = new WriteDataFactory();
var types = new List<SheetType> { SheetType.OtherIncome, SheetType.Income, SheetType.Expend, SheetType.Workload, SheetType.OtherWorkload };
decimal ratio = 60m;
......@@ -180,6 +182,7 @@ private object GetDataBySheetType(SheetType sheetType, List<ExtractTransDto> ext
case SheetType.ClinicEmployee:
case SheetType.AccountBasic:
return employeeDict;
default:
return extractDto;
}
......
......@@ -34,21 +34,17 @@ public void WriteSheetData(ISheet sheet, PerSheetPoint point, SheetType sheetTyp
var module = modules?.FirstOrDefault(t => t.SheetType == (int)sheetType && t.ModuleName.NoBlank() == sheet.SheetName.NoBlank());
if (module == null) return;
var items = exdict[ExDataDict.ExItem] as List<ex_item>;
var modelItems = items?.Where(t => t.ModuleId == module.Id);
if (modelItems == null || !modelItems.Any()) return;
var headers = modelItems.Select(t => new ExcelHeader
if (data is List<ExtractTransDto> extractDto && extractDto.Any())
{
ColumnName = t.ItemName.Trim(),
DoctorFactor = t.FactorValue1 ?? 0,
NurseFactor = t.FactorValue2 ?? 0,
TechnicianFactor = t.FactorValue3 ?? 0
var headers = extractDto.Select(t => new ExcelHeader
{
ColumnName = t.Category.Trim(),
DoctorFactor = 0,
NurseFactor = 0,
TechnicianFactor = 0
}).ToList();
WriteDataHelper.WriteSheetHeader(sheet, point, sheetType, style, headers);
if (data is List<ExtractTransDto> extractDto && extractDto.Any())
{
var columns = headers.Select(t => t.ColumnName).ToList();
WriteDataHelper.WriteSheetData(sheet, point, sheetType, style, columns, extractDto);
}
......
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