Commit 457e181a by zry

接口返回数据,保存sheet值 初稿

parent fdcb6efb
......@@ -145,28 +145,47 @@ public ApiResponse Generate([CustomizeValidator(RuleSet = "Delete"), FromBody]Al
if (null == allot || string.IsNullOrEmpty(allot.Path))
throw new PerformanceException("当前绩效记录不存在或没有上传数据文件");
Action<PerExcelService> action = (service) =>
{
// 拷贝配置信息
service.Copy(allot.ID);
_perExcelService.Copy(allot.ID);
// 导出数据
var excel = service.Import(allot.Path);
var excel = _perExcelService.Import(allot.Path);
// 保存数据
service.ImportSave(excel);
//service.ImportSave(excel);
// 计算合并数据
service.ProcessCompute(excel);
List<PerSheet> list = _perExcelService.ProcessCompute(excel);
// 保存过程数据
service.ProcessSave(excel);
_perExcelService.ProcessSave(list, allot.ID);
// 计算最总数据
service.Compute(excel);
_perExcelService.Compute(excel);
//Action<PerExcelService> action = (service) =>
//{
// // 拷贝配置信息
// service.Copy(allot.ID);
// // 导出数据
// var excel = service.Import(allot.Path);
// // 保存数据
// //service.ImportSave(excel);
// // 计算合并数据
// service.ProcessCompute(excel);
// // 保存过程数据
// service.ProcessSave(excel, allot.ID);
// // 计算最总数据
// service.Compute(excel);
};
BackgroundJob.Enqueue<PerExcelService>(p => action.Invoke(p));
//};
//BackgroundJob.Enqueue(() => action.Invoke(_perExcelService));
return new ApiResponse(ResponseType.OK);
}
}
......
......@@ -17,25 +17,40 @@ namespace Performance.Api.Controllers
[Route("api/[controller]")]
public class SheetController : Controller
{
private UserService _userService;
private RoleService _roleService;
private IMemoryCache _memoryCache;
private Application _options;
private SheetSevice _sheetSevice;
private ClaimService _claim;
private HospitalService _hospitalService;
public SheetController(UserService userService,
HospitalService hospitalService,
RoleService roleService,
IMemoryCache memoryCache,
IOptions<Application> options,
public SheetController(SheetSevice sheetSevice,
ClaimService claim)
{
_userService = userService;
_roleService = roleService;
_memoryCache = memoryCache;
_hospitalService = hospitalService;
_options = options.Value;
_sheetSevice = sheetSevice;
_claim = claim;
}
/// <summary>
/// sheet 列表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("sheetlist")]
[HttpPost]
public ApiResponse SheetList([FromBody]SheetRequest request)
{
var sheetList = _sheetSevice.SheetList(request.AllotID);
return new ApiResponse(ResponseType.OK, sheetList);
}
/// <summary>
/// sheet 数据详情
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("sheetexport")]
[HttpPost]
public ApiResponse SheetExport([FromBody]SheetExportRequest request)
{
var exportData = _sheetSevice.SheetExport(request.SheetID);
return new ApiResponse(ResponseType.OK, exportData);
}
}
}
using Performance.DtoModels;
using Performance.Infrastructure;
using Performance.Repository;
using Performance.Services;
using System;
using System.Collections.Generic;
......@@ -15,45 +16,48 @@ static void Main(string[] args)
Console.WriteLine("Hello World!");
PerHeaderService perHeaderService = new PerHeaderService();
PerSheetService perSheetService = new PerSheetService(perHeaderService);
PerExcelService perExcelService = new PerExcelService(perSheetService, perHeaderService);
//var excel = perExcelService.Import(@"E:\code_git\performance\performance\Performance.Api\Files\9\201911\医院绩效分配系统数据收集模板V120190307133444707.xlsx");
// 拷贝配置信息
//perExcelService.Copy(allot.ID);
string path = @"E:\code_git\performance\performance\Performance.Api\Files\9\201911\医院绩效分配系统数据收集模板V120190307133444707.xlsx";
// 导出数据
var excel = perExcelService.Import(path);
//PerHeaderService perHeaderService = new PerHeaderService();
//PerSheetService perSheetService = new PerSheetService(perHeaderService);
//PerExcelService perExcelService = new PerExcelService(perSheetService, perHeaderService);
////var excel = perExcelService.Import(@"E:\code_git\performance\performance\Performance.Api\Files\9\201911\医院绩效分配系统数据收集模板V120190307133444707.xlsx");
var workbook1 = perExcelService.ExportCompute(excel.PerSheet);
using (FileStream file = new FileStream($@"F:\myworkbook\org_{DateTime.Now.ToString("yyyyMMddhhmmss")}.xlsx", FileMode.Create))
{
workbook1.Write(file);
}
//// 拷贝配置信息
////perExcelService.Copy(allot.ID);
//string path = @"E:\code_git\performance\performance\Performance.Api\Files\9\201911\医院绩效分配系统数据收集模板V120190307133444707.xlsx";
//// 导出数据
//var excel = perExcelService.Import(path);
//var workbook1 = perExcelService.ExportCompute(excel.PerSheet);
// 保存数据
//perExcelService.ImportSave(excel);
//using (FileStream file = new FileStream($@"F:\myworkbook\org_{DateTime.Now.ToString("yyyyMMddhhmmss")}.xlsx", FileMode.Create))
//{
// workbook1.Write(file);
//}
// 计算合并数据
List<PerSheet> list = perExcelService.ProcessCompute(excel);
//// 保存数据
////perExcelService.ImportSave(excel);
// 保存过程数据
//// 计算合并数据
//List<PerSheet> list = perExcelService.ProcessCompute(excel);
//// 保存过程数据
//perExcelService.ProcessSave(excel);
// 生成结果excel
var workbook2 = perExcelService.ExportCompute(list);
//// 生成结果excel
//var workbook2 = perExcelService.ExportCompute(list);
using (FileStream file = new FileStream($@"F:\myworkbook\comp_{DateTime.Now.ToString("yyyyMMddhhmmss")}.xlsx", FileMode.Create))
{
workbook2.Write(file);
}
//using (FileStream file = new FileStream($@"F:\myworkbook\comp_{DateTime.Now.ToString("yyyyMMddhhmmss")}.xlsx", FileMode.Create))
//{
// workbook2.Write(file);
//}
// 计算最总数据
perExcelService.Compute(excel);
//// 计算最总数据
//perExcelService.Compute(excel);
Console.ReadKey();
}
......
......@@ -55,6 +55,19 @@ public AutoMapperConfigs()
// 绩效 响应
CreateMap<AllotResponse, sys_allot>();
CreateMap<sys_allot, AllotResponse>();
// sheet 响应
CreateMap<SheetResponse, im_sheet>()
.ForMember(dest => dest.ID, opt => opt.MapFrom(src => src.SheetID));
CreateMap<im_sheet, SheetResponse>()
.ForMember(dest => dest.SheetID, opt => opt.MapFrom(src => src.ID));
CreateMap<PerHeader, im_header>()
.ForMember(dest => dest.IsMerge, opt => opt.MapFrom(src => src.IsMerge ? 1 : 2));
CreateMap<PerData, im_data>()
.ForMember(dest => dest.IsFactor, opt => opt.MapFrom(src => src.IsFactor ? 1 : 2))
.ForMember(dest => dest.UnitType, opt => opt.MapFrom(src => src.UnitType == "医生组" ? 1 : (src.UnitType == "护理组" ? 2 : 0)));
}
}
}
......@@ -16,7 +16,7 @@ public class PerHeader
public bool IsMerge => MergeRow > 1 || MergeCell > 1;
public int MergeRow { get; set; }
public int MergeCell { get; set; }
public string CellName { get; set; }
public string CellValue { get; set; }
public int Level { get; set; }
public bool IsHasChildren => Children != null && Children.Any();
......@@ -29,7 +29,7 @@ public PerHeader(int pointRow, int pointCell, string cellName, int level, int me
{
PointRow = pointRow;
PointCell = pointCell;
CellName = cellName;
CellValue = cellName;
Level = level;
MergeRow = mergeRow;
MergeCell = mergeCell;
......
......@@ -5,7 +5,7 @@
namespace Performance.DtoModels
{
public class AllotRequest
public class AllotRequest : ApiRequest
{
public int ID { get; set; }
......
using FluentValidation;
using System;
using System.Collections.Generic;
using System.Text;
namespace Performance.DtoModels
{
/// <summary>
/// sheet数据详情请求
/// </summary>
public class SheetExportRequest : ApiRequest
{
public int SheetID { get; set; }
}
public class SheetExportRequestValidator : AbstractValidator<SheetExportRequest>
{
public SheetExportRequestValidator()
{
RuleFor(x => x.SheetID).NotNull().GreaterThan(0);
}
}
}
using FluentValidation;
using System;
using System.Collections.Generic;
using System.Text;
namespace Performance.DtoModels
{
/// <summary>
/// sheet页列表请求
/// </summary>
public class SheetRequest : ApiRequest
{
public int AllotID { get; set; }
}
public class SheetRequestValidator : AbstractValidator<SheetRequest>
{
public SheetRequestValidator()
{
RuleFor(x => x.AllotID).NotNull().GreaterThan(0);
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Performance.DtoModels
{
public class SheetExportResponse
{
/// <summary>
/// sheetID
/// </summary>
public int SheetID { get; set; }
/// <summary>
/// sheet名称
/// </summary>
public string SheetName { get; set; }
/// <summary>
/// sheet模板类型
/// </summary>
public int SheetType { get; set; }
/// <summary>
/// sheet头
/// </summary>
public List<Row> Header { get; set; }
/// <summary>
/// sheet数据
/// </summary>
public List<Row> Row { get; set; }
public SheetExportResponse() { }
public SheetExportResponse(int sheetID, string sheetName, int sheetType)
{
SheetID = sheetID;
SheetName = sheetName;
SheetType = sheetType;
Header = new List<Row>();
Row = new List<Row>();
}
}
public class Row
{
public int Rownumber { get; set; }
public string AccountingUnit { get; set; }
public List<RowData> Data { get; set; }
public Row() { }
public Row(int rownumber)
{
Rownumber = rownumber;
Data = new List<RowData>();
}
public Row(int rownumber, string accountingUnit)
{
Rownumber = rownumber;
AccountingUnit = accountingUnit;
Data = new List<RowData>();
}
}
public class RowData
{
public int PointCell { get; set; }
public object CellValue { get; set; }
public int MergeRow { get; set; }
public int MergeCell { get; set; }
public RowData() { }
public RowData(int pointCell, object cellValue, int mergeRow, int mergeCell)
{
PointCell = pointCell;
CellValue = cellValue;
MergeRow = mergeRow;
MergeCell = mergeCell;
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Performance.DtoModels
{
public class SheetResponse
{
/// <summary>
/// SheetID
/// </summary>
public int SheetID { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> AllotID { get; set; }
/// <summary>
///
/// </summary>
public string SheetName { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> SheetType { get; set; }
}
}
......@@ -20,5 +20,9 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options)
public virtual DbSet<sys_role_menu> Sys_Role_Menu { get; set; }
public virtual DbSet<sys_user_role> Sys_User_Role { get; set; }
public virtual DbSet<sys_allot> Sys_Allot { get; set; }
public virtual DbSet<im_sheet> Im_Sheet { get; set; }
public virtual DbSet<im_employee> Im_Employee { get; set; }
public virtual DbSet<im_header> Im_Header { get; set; }
public virtual DbSet<im_data> Im_Data { get; set; }
}
}
using NPOI.HSSF.UserModel;
using AutoMapper;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;
using Performance.DtoModels;
using Performance.EntityModels;
using Performance.Infrastructure;
using Performance.Repository;
using System;
using System.Collections.Generic;
using System.IO;
......@@ -16,11 +18,20 @@ public class PerExcelService : IAutoInjection
{
private PerSheetService _perSheetService;
private PerHeaderService _perHeaderService;
private PerforImSheetRepository _perforImSheetRepository;
private PerforImDataRepository _perforImDataRepository;
private PerforImHeaderRepository _perforImHeaderRepository;
public PerExcelService(PerSheetService perSheetService,
PerHeaderService perHeaderService)
PerHeaderService perHeaderService,
PerforImSheetRepository perforImSheetRepository,
PerforImDataRepository perforImDataRepository,
PerforImHeaderRepository perforImHeaderRepository)
{
_perSheetService = perSheetService;
_perHeaderService = perHeaderService;
_perforImSheetRepository = perforImSheetRepository;
_perforImDataRepository = perforImDataRepository;
_perforImHeaderRepository = perforImHeaderRepository;
}
/// <summary>
......@@ -62,7 +73,7 @@ public PerExcel Import(string path)
/// <param name="iD"></param>
public void Copy(int iD)
{
throw new NotImplementedException();
//throw new NotImplementedException();
}
/// <summary>
......@@ -87,9 +98,39 @@ public List<PerSheet> ProcessCompute(PerExcel excel)
/// 保存绩效结果
/// </summary>
/// <param name="excel"></param>
public void ProcessSave(PerExcel excel)
public void ProcessSave(List<PerSheet> perSheets, int allotId)
{
throw new NotImplementedException();
foreach (var sheet in perSheets)
{
var imsheet = new im_sheet { AllotID = allotId, SheetName = sheet.SheetName, SheetType = (int)sheet.SheetType };
_perforImSheetRepository.Add(imsheet);
foreach (var header in sheet.PerHeader)
{
var imheader = Mapper.Map<im_header>(header);
imheader.SheetID = imsheet.ID;
_perforImHeaderRepository.Add(imheader);
if (header.IsHasChildren)
{
foreach (var child in header.Children)
{
var imheaderChild = Mapper.Map<im_header>(child);
imheaderChild.SheetID = imsheet.ID;
imheaderChild.ParentID = imheader.ID;
_perforImHeaderRepository.Add(imheaderChild);
}
}
}
var dataList = sheet.PerData.Select(t => (PerData)t);
foreach (var data in dataList)
{
var imdata = Mapper.Map<im_data>(data);
imdata.SheetID = imsheet.ID;
_perforImDataRepository.Add(imdata);
}
}
//throw new NotImplementedException();
}
public IWorkbook ExportCompute(List<PerSheet> sheetList)
......@@ -130,7 +171,7 @@ public IWorkbook ExportCompute(List<PerSheet> sheetList)
dataRow.GetCell(0).CellStyle = cellstyle;
foreach (var header in headList.OrderBy(t => t.PointCell))
{
var cellValue = dataList.FirstOrDefault(t => t.AccountingUnit == accountingUnit && t.TypeName == header.CellName)?.CellValue;
var cellValue = dataList.FirstOrDefault(t => t.AccountingUnit == accountingUnit && t.TypeName == header.CellValue)?.CellValue;
if (cellValue.HasValue && cellValue.Value > 0)
{
dataRow.CreateCell(header.PointCell).SetCellValue(Convert.ToDouble(cellValue.Value));
......@@ -158,7 +199,7 @@ private IRow CreateRow(ICellStyle cellstyle, ISheet exportSheet, IRow row, PerHe
exportSheet.AddMergedRegion(cellRange);
}
row = row ?? exportSheet.CreateRow(header.PointRow);
row.CreateCell(header.PointCell).SetCellValue(header.CellName);
row.CreateCell(header.PointCell).SetCellValue(header.CellValue);
row.GetCell(header.PointCell).CellStyle = cellstyle;
return row;
}
......@@ -169,7 +210,7 @@ private IRow CreateRow(ICellStyle cellstyle, ISheet exportSheet, IRow row, PerHe
/// <param name="excel"></param>
public void Compute(PerExcel excel)
{
throw new NotImplementedException();
//throw new NotImplementedException();
}
}
}
......@@ -171,7 +171,7 @@ private List<PerHeader> ReadHeadMatrix(ISheet sheet, PerSheetPoint point, List<L
PointCell = point.HeaderFirstCellNum.Value + c,
MergeCell = ci,
MergeRow = ri,
CellName = sheet.GetRow(point.HeaderFirstRowNum.Value + r)
CellValue = sheet.GetRow(point.HeaderFirstRowNum.Value + r)
?.GetCell(point.HeaderFirstCellNum.Value + c)
?.ToString()
?.RemoveLineBreak()
......
......@@ -50,8 +50,8 @@ public SheetType GetSheetType(string sheetName)
//else
if (sheetName.StartsWith("1.0"))
return SheetType.OtherIncome;
else if (sheetName.StartsWith("1.1"))
return SheetType.Income;
//else if (sheetName.StartsWith("1.1"))
//return SheetType.Income;
else if (sheetName.StartsWith("2."))
return SheetType.Expend;
else if (sheetName.StartsWith("3."))
......
......@@ -29,7 +29,7 @@ public PerSheet ProcessCompute(PerExcel excel)
};
//初始核算单元列头
compSheet.PerHeader.Add(new PerHeader { CellName = "核算单元", Level = 0, MergeCell = 1, MergeRow = 2, PointCell = 0, PointRow = 0 });
compSheet.PerHeader.Add(new PerHeader { CellValue = "核算单元", Level = 0, MergeCell = 1, MergeRow = 2, PointCell = 0, PointRow = 0 });
//起始列
int pointCell = 1;
//计算需从以下sheet中拿取数据
......
......@@ -24,7 +24,7 @@ public PerSheet ProcessCompute(PerExcel excel)
};
//初始核算单元列头
compSheet.PerHeader.Add(new PerHeader { CellName = "核算单元", Level = 0, MergeCell = 1, MergeRow = 2, PointCell = 0, PointRow = 0 });
compSheet.PerHeader.Add(new PerHeader { CellValue = "核算单元", Level = 0, MergeCell = 1, MergeRow = 2, PointCell = 0, PointRow = 0 });
//起始列
int pointCell = 1;
//计算需从以下sheet中拿取数据
......
......@@ -28,27 +28,27 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
for (int r = Point.DataFirstRowNum.Value; r < sheet.LastRowNum + 1; r++)
{
var row = sheet.GetRow(r);
var accountingUnit = row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "核算单元").PointCell).ToString();
var accountingUnit = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell).ToString();
if (string.IsNullOrEmpty(accountingUnit))
continue;
PerDataEmployee employee = new PerDataEmployee
{
RowNumber = r,
AccountingUnit = row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "核算单元").PointCell).ToString(),
Department = row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "科室").PointCell).ToString(),
DoctorName = row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "医生姓名").PointCell).ToString(),
JobTitle = row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "职称").PointCell).ToString(),
FitPeople = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "绩效基数核算参考对象").PointCell).ToString()),
PostCoefficient = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "岗位系数").PointCell).ToString()),
WorkTime = ConvertHelper.To<DateTime?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "考核得分率").PointCell).ToString()),
ScoreAverageRate = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "医生姓名").PointCell).ToString()),
Attendance = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "出勤率").PointCell).ToString()),
PeopleNumber = ConvertHelper.To<int?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "核算单元医生数").PointCell).ToString()),
Workload = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "工作量绩效").PointCell).ToString()),
OthePerfor = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "其他绩效").PointCell).ToString()),
Punishment = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "医院奖罚").PointCell).ToString()),
Adjust = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "调节系数").PointCell).ToString()),
Grant = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "发放系数").PointCell).ToString()),
AccountingUnit = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell).ToString(),
Department = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "科室").PointCell).ToString(),
DoctorName = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "医生姓名").PointCell).ToString(),
JobTitle = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "职称").PointCell).ToString(),
FitPeople = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "绩效基数核算参考对象").PointCell).ToString()),
PostCoefficient = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "岗位系数").PointCell).ToString()),
WorkTime = ConvertHelper.To<DateTime?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "考核得分率").PointCell).ToString()),
ScoreAverageRate = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "医生姓名").PointCell).ToString()),
Attendance = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "出勤率").PointCell).ToString()),
PeopleNumber = ConvertHelper.To<int?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元医生数").PointCell).ToString()),
Workload = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "工作量绩效").PointCell).ToString()),
OthePerfor = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效").PointCell).ToString()),
Punishment = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "医院奖罚").PointCell).ToString()),
Adjust = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "调节系数").PointCell).ToString()),
Grant = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "发放系数").PointCell).ToString()),
};
dataList.Add(employee);
}
......
......@@ -59,11 +59,11 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
continue;
var athead = vhead.ElementAt(c);
if (!string.IsNullOrEmpty(athead?.CellName)
&& Point.AccountingUnit.Any(t => athead.CellName.Contains(t.UnitType))
&& !athead.CellName.Contains(unit.UnitType))
if (!string.IsNullOrEmpty(athead?.CellValue)
&& Point.AccountingUnit.Any(t => athead.CellValue.Contains(t.UnitType))
&& !athead.CellValue.Contains(unit.UnitType))
continue;
if (!string.IsNullOrEmpty(athead?.CellName) && athead.CellName.Contains("备注"))
if (!string.IsNullOrEmpty(athead?.CellValue) && athead.CellValue.Contains("备注"))
continue;
PerData data = new PerData
......@@ -71,14 +71,14 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
RowNumber = r,
AccountingUnit = accountingUnit,
Department = row.GetCell(unit.DeptCellNum.Value)?.ToString(),
TypeName = athead?.CellName,
TypeName = athead?.CellValue,
CellValue = ConvertHelper.To<decimal?>(row.GetCell(athead.PointCell)?.ToString()),
Annotation = row.GetCell(athead.PointCell)?.CellComment?.String?.String,
UnitType = unit.UnitType, //手动匹配
IsFactor = false,
};
var lastcell = vhead.OrderByDescending(t => t.PointCell).First();
if (lastcell.CellName.Contains("备注"))
if (lastcell.CellValue.Contains("备注"))
data.Remark = row.GetCell(lastcell.PointCell)?.ToString();
dataList.Add(data);
}
......
......@@ -66,7 +66,7 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
RowNumber = r,
AccountingUnit = accountingUnit,
Department = row.GetCell(unit.DeptCellNum.Value)?.ToString(),
TypeName = athead?.CellName,
TypeName = athead?.CellValue,
CellValue = ConvertHelper.To<decimal?>(row.GetCell(athead.PointCell)?.ToString()),
Annotation = row.GetCell(athead.PointCell)?.CellComment?.String?.String,
UnitType = unit.UnitType, //手动匹配
......
......@@ -54,7 +54,7 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
RowNumber = r,
AccountingUnit = accountingUnit,
Department = row.GetCell(unit.DeptCellNum.Value)?.ToString(),
TypeName = athead?.CellName,
TypeName = athead?.CellValue,
CellValue = ConvertHelper.To<decimal?>(row.GetCell(athead.PointCell)?.ToString()),
Annotation = row.GetCell(athead.PointCell)?.CellComment?.String?.String,
UnitType = GetUnitType(sheet.SheetName, perHeader),
......@@ -79,9 +79,9 @@ private string GetUnitType(string sheetName, List<PerHeader> perHeader)
return "医生组";
else if (sheetName.Contains("护理组"))
return "护理组";
else if (perHeader.Any(t => t.CellName.Contains("核算单元") && t.CellName.Contains("医生组")))
else if (perHeader.Any(t => t.CellValue.Contains("核算单元") && t.CellValue.Contains("医生组")))
return "医生组";
else if (perHeader.Any(t => t.CellName.Contains("核算单元") && t.CellName.Contains("护理组")))
else if (perHeader.Any(t => t.CellValue.Contains("核算单元") && t.CellValue.Contains("护理组")))
return "护理组";
return "";
}
......
......@@ -33,26 +33,26 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
{
var row = sheet.GetRow(r);
var accountingUnit = row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "核算单元").PointCell).ToString();
var accountingUnit = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell).ToString();
if (string.IsNullOrEmpty(accountingUnit))
continue;
PerDataUnifyUnit unifyUnit = new PerDataUnifyUnit
{
RowNumber = r,
AccountingUnit = row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "核算单元").PointCell).ToString(),
Department = row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "科室").PointCell).ToString(),
DoctorNumber = ConvertHelper.To<int?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "核算单元医生数量" && p.Parent.CellName == "医生组").PointCell).ToString()),
DoctorFactor = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "医生预设总系数" && p.Parent.CellName == "医生组").PointCell).ToString()),
DoctorOtherPerfor1 = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "其他绩效1" && p.Parent.CellName == "医生组").PointCell).ToString()),
DoctorOtherPerfor2 = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "其他绩效2" && p.Parent.CellName == "医生组").PointCell).ToString()),
DoctorExtra = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "医院奖罚" && p.Parent.CellName == "医生组").PointCell).ToString()),
DoctorScoringAverage = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "考核对分率" && p.Parent.CellName == "医生组").PointCell).ToString()),
NurseNumber = ConvertHelper.To<int?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "核算单元护士数量" && p.Parent.CellName == "护理组").PointCell).ToString()),
NurseFactor = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "护理预设总系数" && p.Parent.CellName == "护理组").PointCell).ToString()),
NurseOtherPerfor1 = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "其他绩效1" && p.Parent.CellName == "护理组").PointCell).ToString()),
NurseOtherPerfor2 = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "其他绩效2" && p.Parent.CellName == "护理组").PointCell).ToString()),
NurseExtra = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "医院奖罚" && p.Parent.CellName == "护理组").PointCell).ToString()),
NurseScoringAverage = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellName == "考核对分率" && p.Parent.CellName == "护理组").PointCell).ToString()),
AccountingUnit = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell).ToString(),
Department = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "科室").PointCell).ToString(),
DoctorNumber = ConvertHelper.To<int?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元医生数量" && p.Parent.CellValue == "医生组").PointCell).ToString()),
DoctorFactor = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "医生预设总系数" && p.Parent.CellValue == "医生组").PointCell).ToString()),
DoctorOtherPerfor1 = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效1" && p.Parent.CellValue == "医生组").PointCell).ToString()),
DoctorOtherPerfor2 = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效2" && p.Parent.CellValue == "医生组").PointCell).ToString()),
DoctorExtra = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "医院奖罚" && p.Parent.CellValue == "医生组").PointCell).ToString()),
DoctorScoringAverage = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "考核对分率" && p.Parent.CellValue == "医生组").PointCell).ToString()),
NurseNumber = ConvertHelper.To<int?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元护士数量" && p.Parent.CellValue == "护理组").PointCell).ToString()),
NurseFactor = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "护理预设总系数" && p.Parent.CellValue == "护理组").PointCell).ToString()),
NurseOtherPerfor1 = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效1" && p.Parent.CellValue == "护理组").PointCell).ToString()),
NurseOtherPerfor2 = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效2" && p.Parent.CellValue == "护理组").PointCell).ToString()),
NurseExtra = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "医院奖罚" && p.Parent.CellValue == "护理组").PointCell).ToString()),
NurseScoringAverage = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "考核对分率" && p.Parent.CellValue == "护理组").PointCell).ToString()),
};
dataList.Add(unifyUnit);
}
......
......@@ -56,7 +56,7 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
RowNumber = r,
AccountingUnit = accountingUnit,
Department = row.GetCell(unit.DeptCellNum.Value)?.ToString(),
TypeName = athead?.CellName,
TypeName = athead?.CellValue,
CellValue = ConvertHelper.To<decimal?>(row.GetCell(athead.PointCell)?.ToString()),
Annotation = row.GetCell(athead.PointCell)?.CellComment?.String?.String,
UnitType = unit.UnitType,
......
using System;
using AutoMapper;
using Performance.DtoModels;
using Performance.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Performance.Services
......@@ -9,5 +13,136 @@ namespace Performance.Services
/// </summary>
public class SheetSevice : IAutoInjection
{
private PerforAllotRepository _perforAllotRepository;
private PerforImSheetRepository _perforImSheetRepository;
private PerforImDataRepository _perforImDataRepository;
private PerforImHeaderRepository _perforImHeaderRepository;
private PerforImEmployeeRepository _perforImEmployeeRepository;
public SheetSevice(PerforAllotRepository perforAllotRepository,
PerforImSheetRepository perforImSheetRepository,
PerforImDataRepository perforImDataRepository,
PerforImHeaderRepository perforImHeaderRepository,
PerforImEmployeeRepository perforImEmployeeRepository)
{
_perforAllotRepository = perforAllotRepository;
_perforImSheetRepository = perforImSheetRepository;
_perforImDataRepository = perforImDataRepository;
_perforImHeaderRepository = perforImHeaderRepository;
_perforImEmployeeRepository = perforImEmployeeRepository;
}
/// <summary>
/// sheet 列表查询
/// </summary>
/// <param name="allotID"></param>
/// <returns></returns>
public List<SheetResponse> SheetList(int allotID)
{
var allot = _perforAllotRepository.GetEntity(t => t.ID == allotID);
if (allot == null)
throw new PerformanceException("参数allotid无效");
var sheetList = _perforImSheetRepository.GetEntities(t => t.AllotID == allotID);
return Mapper.Map<List<SheetResponse>>(sheetList);
}
/// <summary>
/// sheet数据查询
/// </summary>
/// <param name="sheetID"></param>
/// <returns></returns>
public SheetExportResponse SheetExport(int sheetID)
{
var sheet = _perforImSheetRepository.GetEntity(t => t.ID == sheetID);
if (sheet == null)
throw new PerformanceException("参数sheetid无效");
SheetExportResponse response = new SheetExportResponse(sheet.ID, sheet.SheetName, sheet.SheetType.Value);
if (sheet.SheetType == (int)SheetType.Employee)
{
var employeeList = _perforImEmployeeRepository.GetEntities(t => t.SheetID == sheetID);
if (employeeList != null && employeeList.Count() > 0)
{
var row = new Row(0);
row.Data.Add(new RowData(1, "核算单元", 1, 1));
row.Data.Add(new RowData(2, "科室", 1, 1));
row.Data.Add(new RowData(3, "医生姓名", 1, 1));
row.Data.Add(new RowData(4, "职称", 1, 1));
row.Data.Add(new RowData(5, "绩效基数核算参考对象", 1, 1));
row.Data.Add(new RowData(6, "岗位系数", 1, 1));
row.Data.Add(new RowData(7, "考核得分率", 1, 1));
row.Data.Add(new RowData(8, "医生姓名", 1, 1));
row.Data.Add(new RowData(9, "出勤率", 1, 1));
row.Data.Add(new RowData(10, "核算单元医生数", 1, 1));
row.Data.Add(new RowData(11, "工作量绩效", 1, 1));
row.Data.Add(new RowData(12, "其他绩效", 1, 1));
row.Data.Add(new RowData(13, "医院奖罚", 1, 1));
row.Data.Add(new RowData(14, "调节系数", 1, 1));
row.Data.Add(new RowData(15, "发放系数", 1, 1));
response.Header.Add(row);
for (int i = 0; i < employeeList.Count(); i++)
{
var item = employeeList.ElementAt(i);
var rowbody = new Row(i);
rowbody.Data.Add(new RowData(1, item.AccountingUnit, 1, 1));
rowbody.Data.Add(new RowData(2, item.Department, 1, 1));
rowbody.Data.Add(new RowData(3, item.DoctorName, 1, 1));
rowbody.Data.Add(new RowData(4, item.JobTitle, 1, 1));
rowbody.Data.Add(new RowData(5, item.FitPeople, 1, 1));
rowbody.Data.Add(new RowData(6, item.PostCoefficient, 1, 1));
rowbody.Data.Add(new RowData(7, item.WorkTime, 1, 1));
rowbody.Data.Add(new RowData(8, item.ScoreAverageRate, 1, 1));
rowbody.Data.Add(new RowData(9, item.Attendance, 1, 1));
rowbody.Data.Add(new RowData(10, item.PeopleNumber, 1, 1));
rowbody.Data.Add(new RowData(11, item.Workload, 1, 1));
rowbody.Data.Add(new RowData(12, item.OthePerfor, 1, 1));
rowbody.Data.Add(new RowData(13, item.Punishment, 1, 1));
rowbody.Data.Add(new RowData(14, item.Adjust, 1, 1));
rowbody.Data.Add(new RowData(15, item.Grant, 1, 1));
response.Header.Add(rowbody);
}
}
}
else
{
var headList = _perforImHeaderRepository.GetEntities(t => t.SheetID == sheetID);
var dataList = _perforImDataRepository.GetEntities(t => t.SheetID == sheetID);
//创建列头行
var rowhead = new Row(0);
response.Header.Add(rowhead);
foreach (var header in headList.Where(t => !t.ParentID.HasValue || t.ParentID.Value == 0))
{
rowhead.Data.Add(new RowData(header.PointCell.Value, header.CellValue, header.MergeRow.Value, header.MergeCell.Value));
}
if (headList.Any(t => t.ParentID.HasValue && t.ParentID.Value > 0))
{
var rowhead2 = new Row(1);
response.Header.Add(rowhead2);
foreach (var header in headList.Where(t => t.ParentID.HasValue && t.ParentID.Value > 0))
{
rowhead2.Data.Add(new RowData(header.PointCell.Value, header.CellValue, header.MergeRow.Value, header.MergeCell.Value));
}
}
Row rowbody = null;
foreach (var data in dataList.OrderBy(t => t.RowNumber))
{
var header = headList.Where(t => t.CellValue == data.TypeName).OrderByDescending(t => t.ParentID).FirstOrDefault();
if (rowbody == null || rowbody.Rownumber != data.RowNumber)
{
rowbody = new Row(data.RowNumber.Value, data.AccountingUnit);
response.Row.Add(rowbody);
}
rowbody.Data.Add(new RowData(header.PointCell.Value, data.CellValue, 1, 1));
}
}
return response;
}
}
}
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