Commit e99dbc90 by lcx

Merge branch 'rsk' into 科室取值

parents 5156f367 bd2d7fec
......@@ -150,5 +150,18 @@ public ApiResponse DeleteClinic([CustomizeValidator(RuleSet = "Delete"), FromBod
return new ApiResponse(ResponseType.Fail);
return new ApiResponse(ResponseType.OK);
}
/// <summary>
/// 人事科修改参数后提交
/// </summary>
/// <param name="allotid"></param>
/// <returns></returns>
[Route("manage/audit/{allotid}")]
[HttpPost]
public ApiResponse Audit(int allotid)
{
var result = employeeService.Audit(allotid);
return result ? new ApiResponse(ResponseType.OK, "提交成功") : new ApiResponse(ResponseType.Fail, "提交失败");
}
}
}
\ No newline at end of file
......@@ -2495,6 +2495,11 @@
是否在抽取数据0 否、1 是、2 抽取成功、3 抽取失败
</summary>
</member>
<member name="P:Performance.EntityModels.per_allot.Generate">
<summary>
1、人事科提交重新生成 2、生成成功
</summary>
</member>
<member name="T:Performance.EntityModels.per_budget_amount">
<summary>
预算管理金额
......
......@@ -126,7 +126,7 @@ public AutoMapperConfigs()
CreateMap<im_accountbasic, PerDataAccountBaisc>()
.ForMember(dest => dest.UnitType, opt => opt.MapFrom(src => src.UnitType))
.ForMember(dest => dest.UnitType, opt => opt.MapFrom(src => ((UnitType)src.UnitType).ToString()))
.ForMember(dest => dest.AccountingUnit, opt => opt.MapFrom(src => src.DoctorAccountingUnit))
.ForMember(dest => dest.Department, opt => opt.MapFrom(src => src.Department))
.ForMember(dest => dest.ManagerNumber, opt => opt.MapFrom(src => src.DoctorDirectorNumber))
......@@ -142,7 +142,7 @@ public AutoMapperConfigs()
.ForMember(dest => dest.Effic, opt => opt.MapFrom(src => src.DoctorEffic))
.ForMember(dest => dest.Grant, opt => opt.MapFrom(src => src.DoctorGrant));
CreateMap<PerDataSpecialUnit, im_specialunit>();
CreateMap<PerDataSpecialUnit, im_specialunit>().ReverseMap();
//CreateMap<PerDataAccountDoctor, res_accountdoctor>();
//CreateMap<PerDataAccountNurse, res_accountnurse>();
//CreateMap<res_accountdoctor, PerDataAccountBaisc>();
......
......@@ -80,5 +80,10 @@ public class per_allot
/// 是否在抽取数据0 否、1 是、2 抽取成功、3 抽取失败
/// </summary>
public Nullable<int> IsExtracting { get; set; }
/// <summary>
/// 1、人事科提交重新生成 2、生成成功
/// </summary>
public int Generate { get; set; }
}
}
......@@ -43,6 +43,25 @@ public int DeleteData(int allotId)
return Execute(sql, new { allotId });
}
public int DeleteResData(int allotId)
{
List<string> tableArray = new List<string>
{
"res_account",
"res_accountdoctor",
"res_accountnurse",
"res_baiscnorm",
"res_compute",
"res_specialunit",
"log_dbug",
};
string sql = "";
tableArray.ForEach(t => sql += $"delete from {t} where allotid=@allotId;");
sql += "delete from per_sheet where allotid=@allotId and source=2;";
return Execute(sql, new { allotId });
}
public int DelAgain(int againid)
{
List<string> tableArray = new List<string>
......
......@@ -20,11 +20,14 @@ namespace Performance.Repository
/// </summary>
public partial class PerforPerallotRepository : PerforRepository<per_allot>
{
public bool UpdateAllotStates(int allotId, int states, string remark)
public bool UpdateAllotStates(int allotId, int states, string remark, bool success)
{
var allot = GetEntity(t => t.ID == allotId);
allot.States = states;
allot.Remark = remark;
if (success && allot.Generate == 1)
allot.Generate = 2;
return Update(allot);
}
......
using AutoMapper;
using Microsoft.EntityFrameworkCore.Internal;
using Performance.DtoModels;
using Performance.EntityModels;
using Performance.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Performance.Services.AllotCompute
{
public class QueryDataService : IAutoInjection
{
private readonly LogManageService logManageService;
private readonly PerforPersheetRepository persheetRepository;
private readonly PerforImemployeeRepository imemployeeRepository;
private readonly PerforImemployeeclinicRepository imemployeeclinicRepository;
private readonly PerforImaccountbasicRepository imaccountbasicRepository;
private readonly PerforImspecialunitRepository imspecialunitRepository;
private readonly PerforImdataRepository imdataRepository;
private readonly PerforImheaderRepository imheaderRepository;
public QueryDataService(LogManageService logManageService,
PerforPersheetRepository persheetRepository,
PerforImemployeeRepository imemployeeRepository,
PerforImemployeeclinicRepository imemployeeclinicRepository,
PerforImaccountbasicRepository imaccountbasicRepository,
PerforImspecialunitRepository imspecialunitRepository,
PerforImdataRepository imdataRepository,
PerforImheaderRepository imheaderRepository)
{
this.logManageService = logManageService;
this.persheetRepository = persheetRepository;
this.imemployeeRepository = imemployeeRepository;
this.imemployeeclinicRepository = imemployeeclinicRepository;
this.imaccountbasicRepository = imaccountbasicRepository;
this.imspecialunitRepository = imspecialunitRepository;
this.imdataRepository = imdataRepository;
this.imheaderRepository = imheaderRepository;
}
public PerExcel QueryDataAndHeader(per_allot allot)
{
var sheetTypes = new List<int>
{
(int)SheetType.Employee,
(int)SheetType.Income,
(int)SheetType.OtherIncome,
(int)SheetType.Expend,
(int)SheetType.Overtime,
(int)SheetType.Workload,
(int)SheetType.SpecialUnit,
(int)SheetType.AccountBasic,
(int)SheetType.ClinicEmployee,
};
var sheets = persheetRepository.GetEntities(t => t.AllotID == allot.ID && sheetTypes.Contains(t.SheetType.Value));
return Query(sheets, allot.ID);
}
private PerExcel Query(List<per_sheet> sheets, int allotId)
{
if (sheets == null || !sheets.Any())
throw new Exception("未查询到数据");
var allheader = imheaderRepository.GetEntities(t => sheets.Select(s => s.ID).Contains(t.SheetID.Value));
if (allheader == null || !allheader.Any())
throw new Exception("未获取到列");
var perExcel = new PerExcel
{
PerSheet = new List<PerSheet>()
};
sheets.ForEach(t =>
{
perExcel.PerSheet.Add(new PerSheet
{
SheetName = t.SheetName,
SheetType = (SheetType)t.SheetType,
PerData = new List<IPerData>(),
PerHeader = new List<PerHeader>()
}); ;
});
foreach (var sheet in perExcel.PerSheet)
{
var imSheet = sheets.FirstOrDefault(t => t.SheetName == sheet.SheetName && t.SheetType == (int)sheet.SheetType);
logManageService.WriteMsg("获取基础数据", $"开始查询数据 -- {sheet.SheetName}", 1, allotId, "ReceiveMessage", true);
if (sheet.SheetType == SheetType.Employee)
{
QueryHeader(allotId, imSheet.ID, allheader, sheet);
QueryEmployee(allotId, imSheet.ID, sheet);
}
else if (sheet.SheetType == SheetType.ClinicEmployee)
{
QueryHeader(allotId, imSheet.ID, allheader, sheet);
QueryClinicEmployee(allotId, imSheet.ID, sheet);
}
else if (sheet.SheetType == SheetType.AccountBasic)
{
QueryHeader(allotId, imSheet.ID, allheader, sheet);
QueryAccountBasic(allotId, imSheet.ID, sheet);
}
else if (sheet.SheetType == SheetType.SpecialUnit)
{
QueryHeader(allotId, imSheet.ID, allheader, sheet);
QuerySpecialUnit(allotId, imSheet.ID, sheet);
}
else
{
QueryHeader(allotId, imSheet.ID, allheader, sheet);
QueryCommon(allotId, imSheet.ID, sheet);
}
}
logManageService.WriteMsg("保存基础数据", $"基础数据保存完成!", 1, allotId, "ReceiveMessage", true);
return perExcel;
}
private void QueryEmployee(int allotId, int sheetId, PerSheet sheet)
{
var data = imemployeeRepository.GetEntities(t => t.AllotID == allotId && t.SheetID == sheetId);
var sheetData = Mapper.Map<List<PerDataEmployee>>(data);
if (sheetData != null && sheetData.Any())
sheet.PerData.AddRange(sheetData);
}
private void QueryClinicEmployee(int allotId, int sheetId, PerSheet sheet)
{
var data = imemployeeclinicRepository.GetEntities(t => t.AllotID == allotId && t.SheetID == sheetId);
var sheetData = Mapper.Map<List<PerDataClinicEmployee>>(data);
if (sheetData != null && sheetData.Any())
sheet.PerData.AddRange(sheetData);
}
private void QueryAccountBasic(int allotId, int sheetId, PerSheet sheet)
{
var data = imaccountbasicRepository.GetEntities(t => t.AllotID == allotId && t.SheetID == sheetId);
var sheetData = Mapper.Map<List<PerDataAccountBaisc>>(data);
if (sheetData != null && sheetData.Any())
sheet.PerData.AddRange(sheetData);
}
private void QuerySpecialUnit(int allotId, int sheetId, PerSheet sheet)
{
var data = imspecialunitRepository.GetEntities(t => t.AllotID == allotId && t.SheetID == sheetId);
var sheetData = Mapper.Map<List<PerDataSpecialUnit>>(data);
if (sheetData != null && sheetData.Any())
sheet.PerData.AddRange(sheetData);
}
private void QueryCommon(int allotId, int sheetId, PerSheet sheet)
{
var data = imdataRepository.GetEntities(t => t.AllotID == allotId && t.SheetID == sheetId);
var sheetData = Mapper.Map<List<PerData>>(data);
if (sheetData != null && sheetData.Any())
sheet.PerData.AddRange(sheetData);
}
private void QueryHeader(int allotId, int sheetId, List<im_header> allheader, PerSheet sheet)
{
var perHeaders = new List<PerHeader>();
var headers = allheader.Where(t => (t.ParentID ?? 0) == 0 && t.SheetID == sheetId).ToList();
sheet.PerHeader = GetHeaderAndChild(headers, allheader, perHeaders);
}
private List<PerHeader> GetHeaderAndChild(List<im_header> headers, List<im_header> allheaders, List<PerHeader> perHeaders)
{
foreach (var header in headers)
{
var perHeader = Mapper.Map<PerHeader>(header);
var children = allheaders.Where(t => t.ParentID == header.ID);
if (children != null && children.Any())
{
perHeader.Children = GetHeaderAndChild(children.ToList(), allheaders, perHeaders);
}
perHeaders.Add(perHeader);
}
return perHeaders;
}
}
}
......@@ -41,6 +41,7 @@ public class AllotService : IAutoInjection
//private readonly IHubContext<AllotLogHub> hubContext;
private readonly LogManageService logManageService;
private readonly ReportService reportService;
private readonly QueryDataService queryDataService;
public AllotService(PerforPerallotRepository allotRepository,
BaiscNormService baiscNormService,
......@@ -61,7 +62,8 @@ public class AllotService : IAutoInjection
//IHubContext<AllotLogHub> hubContext
LogManageService logManageService,
ReportService reportService,
PerforCofdirectorRepository perforCofdirectorRepository)
PerforCofdirectorRepository perforCofdirectorRepository,
QueryDataService queryDataService)
{
_allotRepository = allotRepository;
_againallotRepository = againallotRepository;
......@@ -84,6 +86,7 @@ public class AllotService : IAutoInjection
this.logManageService = logManageService;
this.reportService = reportService;
this.perforCofdirectorRepository = perforCofdirectorRepository;
this.queryDataService = queryDataService;
}
#region 基础功能
......@@ -240,9 +243,9 @@ public bool Update(per_allot allot)
}
#endregion
public void UpdateAllotStates(int allotId, int states, string remark)
public void UpdateAllotStates(int allotId, int states, string remark, bool success = false)
{
_allotRepository.UpdateAllotStates(allotId, states, remark);
_allotRepository.UpdateAllotStates(allotId, states, remark, success);
}
/// <summary>
......@@ -256,10 +259,18 @@ public void Generate(per_allot allot, string mail)
try
{
logManageService.WriteMsg("绩效开始执行", $"正在生成{allot.Year}-{allot.Month.ToString().PadLeft(2, '0')}月份绩效!", 1, allot.ID, "ReceiveMessage", true);
configService.Clear(allot.ID);
var excel = new PerExcel();
if (allot.Generate == 1)
{
configService.ClearResData(allot.ID);
excel = queryDataService.QueryDataAndHeader(allot);
}
else
{
configService.Clear(allot.ID);
// 导出数据
var excel = importDataService.ReadDataAndSave(allot);
excel = importDataService.ReadDataAndSave(allot);
UpdateAllotStates(allot.ID, (int)AllotStates.InCheckData, EnumHelper.GetDescription(AllotStates.InCheckData));
if (!checkDataService.Check(excel, allot))
......@@ -269,7 +280,7 @@ public void Generate(per_allot allot, string mail)
logManageService.WriteMsg("绩效数据校验失败", "详情可至“更多 -- 查看日志”查看", 3, allot.ID, "ReceiveMessage", true);
return;
}
}
UpdateAllotStates(allot.ID, (int)AllotStates.InGenerate, EnumHelper.GetDescription(AllotStates.InGenerate));
//保底绩效计算需分两次进行;
......@@ -330,7 +341,7 @@ public void Generate(per_allot allot, string mail)
logManageService.WriteMsg("正在生成绩效", "保存绩效人均参考标准", 1, allot.ID, "ReceiveMessage", true);
perforResbaiscnormRepository.AddRange(baiscnormList.ToArray());
UpdateAllotStates(allot.ID, (int)AllotStates.GenerateAccomplish, EnumHelper.GetDescription(AllotStates.GenerateAccomplish));
UpdateAllotStates(allot.ID, (int)AllotStates.GenerateAccomplish, EnumHelper.GetDescription(AllotStates.GenerateAccomplish), true);
perforCofdirectorRepository.SupplementaryData(allot.ID);
logManageService.WriteMsg("正在生成报表数据", "正在生成报表数据", 1, allot.ID, "ReceiveMessage", true);
......
......@@ -575,6 +575,16 @@ public void Clear(int allotId)
}
/// <summary>
/// 清除核算数据
/// </summary>
/// <param name="allotId"></param>
public void ClearResData(int allotId)
{
var count = _directorRepository.DeleteResData(allotId);
logManageService.WriteMsg("清理无效数据", $"清理无效数据,受影响行数:{count}", 1, allotId, "ReceiveMessage", true);
}
/// <summary>
/// 清除二次绩效中无效数据
/// </summary>
/// <param name="againId"></param>
......
......@@ -245,5 +245,20 @@ public bool DeleteClinic(im_employee_clinic request)
}
#endregion
/// <summary>
/// 人事科修改后提交状态
/// </summary>
/// <param name="allotId"></param>
/// <returns></returns>
public bool Audit(int allotId)
{
var allot = perforPerallotRepository.GetEntity(t => t.ID == allotId);
if (allot == null)
throw new PerformanceException("绩效信息错误");
allot.Generate = 1;
return perforPerallotRepository.Update(allot);
}
}
}
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