H5页面接口

parent f6704bd6
...@@ -575,96 +575,7 @@ public ApiResponse GetOwnerMobilePerformance(string begin = "", string end = "") ...@@ -575,96 +575,7 @@ public ApiResponse GetOwnerMobilePerformance(string begin = "", string end = "")
throw new PerformanceException("您选择的时间范围无效"); throw new PerformanceException("您选择的时间范围无效");
endDate = endDate.AddMonths(1); endDate = endDate.AddMonths(1);
var dtos = _allotService.GetOwnerMobilePerformance(userid, beginDate, endDate);
List<OwnerMobilePerformanceDto> dtos = new List<OwnerMobilePerformanceDto>();
var datas = _allotService.GetOwnerPerformance(userid);
var groupDatas = datas
.Where(w => (new DateTime(w.Year, w.Month, 1)) >= beginDate && (new DateTime(w.Year, w.Month, 1)) < endDate)
.GroupBy(w => w.JobNumber);
foreach (var item in groupDatas)
{
var perforSumFee = new OwnerMobileItemDto
{
Title = "业绩绩效",
Amount = item.Sum(w => w.PerforSumFee) ?? 0,
Details = item.SelectMany(w => w.Detail)
.Where(w => (w.PerforSumFee ?? 0) != 0)
.Select(w => new OwnerMobileItemDetailDto
{
Title = w.AccountingUnit,
Amount = w.PerforSumFee ?? 0,
}).ToList()
};
var perforManagementFee = new OwnerMobileItemDto
{
Title = "管理绩效",
Amount = item.Sum(w => w.PerforManagementFee) ?? 0,
Details = item.SelectMany(w => w.Detail)
.Where(w => (w.PerforManagementFee ?? 0) != 0)
.Select(w => new OwnerMobileItemDetailDto
{
Title = w.AccountingUnit,
Amount = w.PerforManagementFee ?? 0,
}).ToList()
};
var nightWorkPerfor = new OwnerMobileItemDto
{
Title = "夜班绩效",
Amount = item.Sum(w => w.NightWorkPerfor) ?? 0,
Details = item.SelectMany(w => w.Detail)
.Where(w => (w.NightWorkPerfor ?? 0) != 0)
.Select(w => new OwnerMobileItemDetailDto
{
Title = w.AccountingUnit,
Amount = w.NightWorkPerfor ?? 0,
}).ToList()
};
var otherPerfor = new OwnerMobileItemDto
{
Title = "医院其他绩效",
Amount = item.Sum(w => w.OtherPerfor) ?? 0,
Details = item.SelectMany(w => w.Detail)
.Where(w => (w.OtherPerfor ?? 0) != 0)
.Select(w => new OwnerMobileItemDetailDto
{
Title = w.SourceItem,
Amount = w.OtherPerfor ?? 0,
}).ToList()
};
var hideOtherPerfor = new OwnerMobileItemDto
{
Title = "不公示其他绩效",
Amount = item.Sum(w => w.HideOtherPerfor) ?? 0,
Details = item.SelectMany(w => w.Detail)
.Where(w => (w.HideOtherPerfor ?? 0) != 0)
.Select(w => new OwnerMobileItemDetailDto
{
Title = w.SourceItem,
Amount = w.HideOtherPerfor ?? 0,
}).ToList()
};
var reservedRatioFee = new OwnerMobileItemDto
{
Title = "预留绩效",
Amount = item.Sum(w => w.ReservedRatioFee) ?? 0,
Details = new List<OwnerMobileItemDetailDto>()
};
var dto = new OwnerMobilePerformanceDto { Total = item.Sum(w => w.RealGiveFee), Items = new List<OwnerMobileItemDto>() };
if (perforSumFee.Amount != 0) dto.Items.Add(perforSumFee);
if (perforManagementFee.Amount != 0) dto.Items.Add(perforManagementFee);
if (nightWorkPerfor.Amount != 0) dto.Items.Add(nightWorkPerfor);
if (otherPerfor.Amount != 0) dto.Items.Add(otherPerfor);
if (hideOtherPerfor.Amount != 0) dto.Items.Add(hideOtherPerfor);
if (reservedRatioFee.Amount != 0) dto.Items.Add(reservedRatioFee);
dtos.Add(dto);
}
return new ApiResponse(ResponseType.OK, dtos); return new ApiResponse(ResponseType.OK, dtos);
} }
} }
......
...@@ -3594,6 +3594,11 @@ ...@@ -3594,6 +3594,11 @@
实发绩效 实发绩效
</summary> </summary>
</member> </member>
<member name="P:Performance.DtoModels.OwnerPerformanceDto.IssueDate">
<summary>
发放时间
</summary>
</member>
<member name="P:Performance.DtoModels.OwnerMobilePerformanceDto.Total"> <member name="P:Performance.DtoModels.OwnerMobilePerformanceDto.Total">
<summary> <summary>
绩效发放总额 绩效发放总额
......
...@@ -5940,6 +5940,11 @@ ...@@ -5940,6 +5940,11 @@
是否修改过配置 1修改过 0未修改 是否修改过配置 1修改过 0未修改
</summary> </summary>
</member> </member>
<member name="P:Performance.EntityModels.per_allot.PigeonholeDate">
<summary>
归档日期
</summary>
</member>
<member name="T:Performance.EntityModels.per_apr_amount"> <member name="T:Performance.EntityModels.per_apr_amount">
<summary> <summary>
......
...@@ -15,6 +15,10 @@ public class OwnerPerformanceDto : view_allot_result ...@@ -15,6 +15,10 @@ public class OwnerPerformanceDto : view_allot_result
/// 实发绩效 /// 实发绩效
/// </summary> /// </summary>
public decimal RealGiveFee { get; set; } public decimal RealGiveFee { get; set; }
/// <summary>
/// 发放时间
/// </summary>
public string IssueDate { get; set; }
} }
......
...@@ -105,5 +105,9 @@ public class per_allot ...@@ -105,5 +105,9 @@ public class per_allot
/// 是否修改过配置 1修改过 0未修改 /// 是否修改过配置 1修改过 0未修改
/// </summary> /// </summary>
public int IsModifyConfig { get; set; } public int IsModifyConfig { get; set; }
/// <summary>
/// 归档日期
/// </summary>
public Nullable<DateTime> PigeonholeDate { get; set; }
} }
} }
...@@ -39,7 +39,7 @@ public class per_batch ...@@ -39,7 +39,7 @@ public class per_batch
/// <summary> /// <summary>
/// 批次日期 /// 批次日期
/// </summary> /// </summary>
public DateTime BatchDate { get; set; } public Nullable<DateTime> BatchDate { get; set; }
public string BankName { get; set; } public string BankName { get; set; }
/// <summary> /// <summary>
......
...@@ -393,7 +393,7 @@ public List<EmployeeReservedDto> GetEmployeeReserved(int hospitalId, int year) ...@@ -393,7 +393,7 @@ public List<EmployeeReservedDto> GetEmployeeReserved(int hospitalId, int year)
public List<view_allot_result> GetOwnerPerformance(List<int> hospitalId, string jobNumber) public List<view_allot_result> GetOwnerPerformance(List<int> hospitalId, string jobNumber)
{ {
string sql = "SELECT * FROM view_allot_result WHERE States = 8 AND HospitalID IN @HospitalID AND JobNumber=@JobNumber"; string sql = "SELECT * FROM view_allot_result WHERE States IN (6,8) AND HospitalID IN @HospitalID AND JobNumber=@JobNumber";
return DapperQuery<view_allot_result>(sql, new { HospitalID = hospitalId, JobNumber = jobNumber })?.ToList(); return DapperQuery<view_allot_result>(sql, new { HospitalID = hospitalId, JobNumber = jobNumber })?.ToList();
} }
......
using AutoMapper; using AutoMapper;
using Dapper;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using MySql.Data.MySqlClient; using MySql.Data.MySqlClient;
...@@ -17,17 +16,12 @@ ...@@ -17,17 +16,12 @@
using System.Data; using System.Data;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Dapper;
using Microsoft.Extensions.Caching.Memory;
namespace Performance.Services namespace Performance.Services
{ {
public class AllotService : IAutoInjection public class AllotService : IAutoInjection
{ {
private BaiscNormService baiscNormService; private BaiscNormService baiscNormService;
private CheckDataService checkDataService;
private ImportDataService importDataService; private ImportDataService importDataService;
private ProcessComputService processComputService; private ProcessComputService processComputService;
private ResultComputeService resultComputeService; private ResultComputeService resultComputeService;
...@@ -53,8 +47,7 @@ public class AllotService : IAutoInjection ...@@ -53,8 +47,7 @@ public class AllotService : IAutoInjection
private PerforCofdirectorRepository perforCofdirectorRepository; private PerforCofdirectorRepository perforCofdirectorRepository;
private readonly PerforReportRepository _reportRepository; private readonly PerforReportRepository _reportRepository;
private readonly PerforPeremployeeRepository _perforPeremployeeRepository; private readonly PerforPeremployeeRepository _perforPeremployeeRepository;
private readonly PerforPerbatchRepository _batchRepository;
//private readonly IHubContext<AllotLogHub> hubContext;
private readonly LogManageService logManageService; private readonly LogManageService logManageService;
private readonly ReportService reportService; private readonly ReportService reportService;
...@@ -64,7 +57,6 @@ public class AllotService : IAutoInjection ...@@ -64,7 +57,6 @@ public class AllotService : IAutoInjection
IMapper mapper, IMapper mapper,
PerforPerallotRepository allotRepository, PerforPerallotRepository allotRepository,
BaiscNormService baiscNormService, BaiscNormService baiscNormService,
CheckDataService checkDataService,
ImportDataService importDataService, ImportDataService importDataService,
ProcessComputService processComputService, ProcessComputService processComputService,
ResultComputeService resultComputeService, ResultComputeService resultComputeService,
...@@ -82,7 +74,6 @@ public class AllotService : IAutoInjection ...@@ -82,7 +74,6 @@ public class AllotService : IAutoInjection
PerforHospitalRepository perforHospitalRepository, PerforHospitalRepository perforHospitalRepository,
PerforResbaiscnormRepository perforResbaiscnormRepository, PerforResbaiscnormRepository perforResbaiscnormRepository,
PerforHospitalconfigRepository perforHospitalconfigRepository, PerforHospitalconfigRepository perforHospitalconfigRepository,
//IHubContext<AllotLogHub> hubContext
RoleService roleService, RoleService roleService,
UserService userService, UserService userService,
LogManageService logManageService, LogManageService logManageService,
...@@ -90,6 +81,7 @@ public class AllotService : IAutoInjection ...@@ -90,6 +81,7 @@ public class AllotService : IAutoInjection
PerforCofdirectorRepository perforCofdirectorRepository, PerforCofdirectorRepository perforCofdirectorRepository,
PerforReportRepository reportRepository, PerforReportRepository reportRepository,
PerforPeremployeeRepository perforPeremployeeRepository, PerforPeremployeeRepository perforPeremployeeRepository,
PerforPerbatchRepository batchRepository,
QueryDataService queryDataService) QueryDataService queryDataService)
{ {
_mapper = mapper; _mapper = mapper;
...@@ -98,7 +90,6 @@ public class AllotService : IAutoInjection ...@@ -98,7 +90,6 @@ public class AllotService : IAutoInjection
_logger = logger; _logger = logger;
_evn = evn; _evn = evn;
this.baiscNormService = baiscNormService; this.baiscNormService = baiscNormService;
this.checkDataService = checkDataService;
this.importDataService = importDataService; this.importDataService = importDataService;
this.processComputService = processComputService; this.processComputService = processComputService;
this.resultComputeService = resultComputeService; this.resultComputeService = resultComputeService;
...@@ -122,6 +113,7 @@ public class AllotService : IAutoInjection ...@@ -122,6 +113,7 @@ public class AllotService : IAutoInjection
this.perforCofdirectorRepository = perforCofdirectorRepository; this.perforCofdirectorRepository = perforCofdirectorRepository;
_reportRepository = reportRepository; _reportRepository = reportRepository;
_perforPeremployeeRepository = perforPeremployeeRepository; _perforPeremployeeRepository = perforPeremployeeRepository;
_batchRepository = batchRepository;
this.queryDataService = queryDataService; this.queryDataService = queryDataService;
} }
...@@ -590,6 +582,7 @@ private void SendEmail(per_allot allot, string mail, int type, DateTime time) ...@@ -590,6 +582,7 @@ private void SendEmail(per_allot allot, string mail, int type, DateTime time)
public void Pigeonhole(per_allot allot) public void Pigeonhole(per_allot allot)
{ {
allot.States = 8; allot.States = 8;
allot.PigeonholeDate = DateTime.Now;
allot.Remark = "归档"; allot.Remark = "归档";
_allotRepository.Update(allot); _allotRepository.Update(allot);
//if (_allotRepository.Update(allot)) //if (_allotRepository.Update(allot))
...@@ -707,6 +700,27 @@ public List<OwnerPerformanceDto> GetOwnerPerformance(int userid) ...@@ -707,6 +700,27 @@ public List<OwnerPerformanceDto> GetOwnerPerformance(int userid)
return new List<OwnerPerformanceDto>(); return new List<OwnerPerformanceDto>();
var employees = _perforPeremployeeRepository.GetEntities(w => w.PersonnelNumber == jobNumber); var employees = _perforPeremployeeRepository.GetEntities(w => w.PersonnelNumber == jobNumber);
var allotIds = owner.Select(w => w.AllotId).Distinct().ToList();
var batchs = _batchRepository.GetEntities(w => allotIds.Contains(w.AllotId));
var allots = _allotRepository.GetEntities(w => allotIds.Contains(w.ID));
// 发放时间 归档状态永远显示,如果没有发放时间则使用归档时间,绩效下发状态下显示标记发放时间
Func<OwnerPerformanceDto, string> getIssueDate = (owner) =>
{
var batch = batchs.FirstOrDefault(p => p.AllotId == owner.AllotId
&& p.UnitType == owner.UnitType && p.AccountingUnit == owner.AccountingUnit
&& p.PersonnelNumber == owner.JobNumber);
var allot = allots.FirstOrDefault(w => w.ID == owner.AllotId);
if (batch?.BatchDate != null && batch.BatchDate.HasValue)
return batch.BatchDate.Value.ToString("yyyy年MM月dd日 HH:mm");
else if (allot?.States == (int)AllotStates.Archive)
{
if (allot?.PigeonholeDate != null && allot.PigeonholeDate.HasValue)
return allot.PigeonholeDate.Value.ToString("yyyy年MM月dd日 HH:mm");
return $"{allot.Year}{allot}月";
}
return "";
};
var res = owner var res = owner
.Where(w => w.States == (int)AllotStates.Archive) .Where(w => w.States == (int)AllotStates.Archive)
...@@ -732,13 +746,15 @@ public List<OwnerPerformanceDto> GetOwnerPerformance(int userid) ...@@ -732,13 +746,15 @@ public List<OwnerPerformanceDto> GetOwnerPerformance(int userid)
{ {
var dto = _mapper.Map<OwnerPerformanceDto>(detial); var dto = _mapper.Map<OwnerPerformanceDto>(detial);
dto.Source = string.IsNullOrEmpty(detial.SourceItem) ? detial.Source : $"{detial.Source}-{detial.SourceItem}"; dto.Source = string.IsNullOrEmpty(detial.SourceItem) ? detial.Source : $"{detial.Source}-{detial.SourceItem}";
dto.IssueDate = getIssueDate(dto);
// 应发绩效 // 应发绩效
dto.ShouldGiveFee = Math.Round((dto.RealPerformance ?? 0) + (dto.OtherPerfor ?? 0) + (dto.HideOtherPerfor ?? 0) + (dto.NightWorkPerfor ?? 0), 2, MidpointRounding.AwayFromZero); dto.ShouldGiveFee = Math.Round((dto.RealPerformance ?? 0) + (dto.OtherPerfor ?? 0) + (dto.HideOtherPerfor ?? 0) + (dto.NightWorkPerfor ?? 0), 2, MidpointRounding.AwayFromZero);
dto.ReservedRatio = employees?.FirstOrDefault(emp => emp.AllotId == dto.AllotId && emp.PersonnelNumber == jobNumber)?.ReservedRatio ?? 0; // 预留比例 dto.ReservedRatio = employees?.FirstOrDefault(emp => emp.AllotId == dto.AllotId && emp.PersonnelNumber == jobNumber)?.ReservedRatio ?? 0; // 预留比例
dto.ReservedRatioFee = Math.Round((dto.RealPerformance ?? 0) * (dto.ReservedRatio ?? 0), 2, MidpointRounding.AwayFromZero); // 预留绩效 dto.ReservedRatioFee = Math.Round((dto.RealPerformance ?? 0) * (dto.ReservedRatio ?? 0), 2, MidpointRounding.AwayFromZero); // 预留绩效
dto.RealGiveFee = Math.Round(dto.ShouldGiveFee - (dto.ReservedRatioFee ?? 0) ?? 0, 2, MidpointRounding.AwayFromZero); // 实发绩效 dto.RealGiveFee = Math.Round(dto.ShouldGiveFee - (dto.ReservedRatioFee ?? 0) ?? 0, 2, MidpointRounding.AwayFromZero); // 实发绩效
return dto; return dto;
}), })
.Where(w => !string.IsNullOrEmpty(w.IssueDate)),
}) })
.ToList(); .ToList();
...@@ -758,5 +774,112 @@ public List<OwnerPerformanceDto> GetOwnerPerformance(int userid) ...@@ -758,5 +774,112 @@ public List<OwnerPerformanceDto> GetOwnerPerformance(int userid)
return res?.OrderByDescending(w => w.Year).ThenByDescending(w => w.Month).ToList(); return res?.OrderByDescending(w => w.Year).ThenByDescending(w => w.Month).ToList();
} }
/// <summary>
/// 格式转换
/// </summary>
/// <param name="userid"></param>
/// <param name="beginDate"></param>
/// <param name="endDate"></param>
/// <returns></returns>
public List<OwnerMobilePerformanceDto> GetOwnerMobilePerformance(int userid, DateTime beginDate, DateTime endDate)
{
List<OwnerMobilePerformanceDto> dtos = new List<OwnerMobilePerformanceDto>();
var datas = GetOwnerPerformance(userid);
if (datas == null || datas.Count == 0)
return dtos;
var filterDatas = datas
.Where(w => (new DateTime(w.Year, w.Month, 1)) >= beginDate && (new DateTime(w.Year, w.Month, 1)) < endDate);
var groupDatas = filterDatas.GroupBy(w => w.JobNumber);
foreach (var item in groupDatas)
{
var perforSumFee = new OwnerMobileItemDto
{
Title = "业绩绩效",
Amount = item.Sum(w => w.PerforSumFee) ?? 0,
Details = item.SelectMany(w => w.Detail)
.Where(w => (w.PerforSumFee ?? 0) != 0 && !string.IsNullOrEmpty(w.IssueDate))
.Select(w => new OwnerMobileItemDetailDto
{
Title = w.AccountingUnit,
Amount = w.PerforSumFee ?? 0,
Date = w.IssueDate,
}).ToList()
};
var perforManagementFee = new OwnerMobileItemDto
{
Title = "管理绩效",
Amount = item.Sum(w => w.PerforManagementFee) ?? 0,
Details = item.SelectMany(w => w.Detail)
.Where(w => (w.PerforManagementFee ?? 0) != 0 && !string.IsNullOrEmpty(w.IssueDate))
.Select(w => new OwnerMobileItemDetailDto
{
Title = w.AccountingUnit,
Amount = w.PerforManagementFee ?? 0,
Date = w.IssueDate,
}).ToList()
};
var nightWorkPerfor = new OwnerMobileItemDto
{
Title = "夜班绩效",
Amount = item.Sum(w => w.NightWorkPerfor) ?? 0,
Details = item.SelectMany(w => w.Detail)
.Where(w => (w.NightWorkPerfor ?? 0) != 0 && !string.IsNullOrEmpty(w.IssueDate))
.Select(w => new OwnerMobileItemDetailDto
{
Title = w.AccountingUnit,
Amount = w.NightWorkPerfor ?? 0,
Date = w.IssueDate,
}).ToList()
};
var otherPerfor = new OwnerMobileItemDto
{
Title = "医院其他绩效",
Amount = item.Sum(w => w.OtherPerfor) ?? 0,
Details = item.SelectMany(w => w.Detail)
.Where(w => (w.OtherPerfor ?? 0) != 0 && !string.IsNullOrEmpty(w.IssueDate))
.Select(w => new OwnerMobileItemDetailDto
{
Title = w.SourceItem,
Amount = w.OtherPerfor ?? 0,
Date = w.IssueDate,
}).ToList()
};
var hideOtherPerfor = new OwnerMobileItemDto
{
Title = "不公示其他绩效",
Amount = item.Sum(w => w.HideOtherPerfor) ?? 0,
Details = item.SelectMany(w => w.Detail)
.Where(w => (w.HideOtherPerfor ?? 0) != 0 && !string.IsNullOrEmpty(w.IssueDate))
.Select(w => new OwnerMobileItemDetailDto
{
Title = w.SourceItem,
Amount = w.HideOtherPerfor ?? 0,
Date = w.IssueDate,
}).ToList()
};
var reservedRatioFee = new OwnerMobileItemDto
{
Title = "预留绩效",
Amount = item.Sum(w => w.ReservedRatioFee) ?? 0,
Details = new List<OwnerMobileItemDetailDto>()
};
var dto = new OwnerMobilePerformanceDto { Total = item.Sum(w => w.RealGiveFee), Items = new List<OwnerMobileItemDto>() };
if (perforSumFee.Amount != 0) dto.Items.Add(perforSumFee);
if (perforManagementFee.Amount != 0) dto.Items.Add(perforManagementFee);
if (nightWorkPerfor.Amount != 0) dto.Items.Add(nightWorkPerfor);
if (otherPerfor.Amount != 0) dto.Items.Add(otherPerfor);
if (hideOtherPerfor.Amount != 0) dto.Items.Add(hideOtherPerfor);
if (reservedRatioFee.Amount != 0) dto.Items.Add(reservedRatioFee);
dtos.Add(dto);
}
return dtos;
}
} }
} }
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