Commit 9052d81e by wyc

菜单管理/管理绩效详情重写/用户删除方法修改

parent 83f6f597
......@@ -253,7 +253,8 @@ public IActionResult DownloadUniteDeptdetail([FromBody] UniteDeptDetailRequest r
[HttpPost]
public ApiResponse GetEmpDetailSetting([FromQuery] int allotId)
{
throw new NotImplementedException();
var response = _computeService.GetEmpDetailSetting(allotId);
return new ApiResponse(ResponseType.OK, response);
}
/// <summary>
......@@ -266,7 +267,8 @@ public ApiResponse GetEmpDetailSetting([FromQuery] int allotId)
[HttpPost]
public ApiResponse SaveEmpDetailSetting([FromQuery] int allotId, [FromBody] List<UniteDeptDetailItem> request)
{
throw new NotImplementedException();
_computeService.SaveEmpDetailSetting(allotId, request);
return new ApiResponse(ResponseType.OK, "保存成功");
}
/// <summary>
......@@ -278,11 +280,12 @@ public ApiResponse SaveEmpDetailSetting([FromQuery] int allotId, [FromBody] List
[HttpPost]
public ApiResponse EmpDetail([FromBody] EmpDetailRequest request)
{
#region 提示
// 两个入口
// 一种只传参数 ComputeId
// 一种只传参数 AllotId、UnitType、AccountingUnit
/*
考核前绩效
核算人数
......@@ -305,7 +308,10 @@ public ApiResponse EmpDetail([FromBody] EmpDetailRequest request)
调节后其他绩效(6.10 调节后其他管理绩效)
绩效合计
*/
throw new NotImplementedException();
#endregion
var userid = _claim.GetUserId();
var response = _computeService.EmpDetail(request, userid);
return new ApiResponse(ResponseType.OK, response);
}
/// <summary>
......@@ -317,7 +323,20 @@ public ApiResponse EmpDetail([FromBody] EmpDetailRequest request)
[HttpPost]
public IActionResult DownloadEmpDetail([FromBody] EmpDetailRequest request)
{
throw new NotImplementedException();
var userid = _claim.GetUserId();
var response = _computeService.EmpDetail(request, userid);
var filepath = _computeService.ExcelDownload(response, "管理绩效详情", request.AllotId);
var memoryStream = new MemoryStream();
using (var stream = new FileStream(filepath, FileMode.Open))
{
stream.CopyToAsync(memoryStream).Wait();
}
memoryStream.Seek(0, SeekOrigin.Begin);
var provider = new FileExtensionContentTypeProvider();
FileInfo fileInfo = new FileInfo(filepath);
var memi = provider.Mappings[".xlsx"];
return File(memoryStream, memi, Path.GetFileName(fileInfo.Name));
}
#endregion
......
using Microsoft.AspNetCore.Mvc;
using Performance.DtoModels;
using Performance.DtoModels.Request;
using Performance.EntityModels;
using Performance.Services;
using System;
using System.Collections.Generic;
namespace Performance.Api.Controllers
{
[Route("api")]
public class MenuController : Controller
{
private MenuService _menuService;
......@@ -77,14 +79,26 @@ public ApiResponse DeleteSystemMenu(int menuID)
}
/// <summary>
/// 当前菜单下的角色
/// </summary>
/// <returns></returns>
[Route("system/menu/getrole")]
[HttpPost]
public ApiResponse<List<sys_role_menu>> GetRoleSystemMenu(int menuID)
{
return _menuService.GetRoleSystemMenu(menuID);
}
/// <summary>
/// 设置角色
/// </summary>
/// <returns></returns>
[Route("system/menu/setrole")]
[HttpPost]
public ApiResponse SetRoleSystemMenu(int menuID, int roleID)
public ApiResponse SetRoleSystemMenu([FromBody] RoleRequest roleRequest)
{
return _menuService.SetRoleSystemMenu(menuID, roleID);
return _menuService.SetRoleSystemMenu(roleRequest);
}
#endregion
......
......@@ -2259,7 +2259,13 @@
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.MenuController.SetRoleSystemMenu(System.Int32,System.Int32)">
<member name="M:Performance.Api.Controllers.MenuController.GetRoleSystemMenu(System.Int32)">
<summary>
当前菜单下的角色
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.MenuController.SetRoleSystemMenu(Performance.DtoModels.Request.RoleRequest)">
<summary>
设置角色
</summary>
......
......@@ -2319,11 +2319,6 @@
菜单Url
</summary>
</member>
<member name="P:Performance.DtoModels.Request.MenuRequest.MenuIcon">
<summary>
菜单图标
</summary>
</member>
<member name="P:Performance.DtoModels.Request.MenuRequest.States">
<summary>
菜单状态 1 启用 2禁用
......@@ -2334,6 +2329,21 @@
排序
</summary>
</member>
<member name="P:Performance.DtoModels.Request.RoleRequest.MenuID">
<summary>
菜单id
</summary>
</member>
<member name="P:Performance.DtoModels.Request.RoleRequest.RoleID">
<summary>
角色
</summary>
</member>
<member name="P:Performance.DtoModels.Request.RoleRequest.TogetherAdd">
<summary>
为父级添加相同角色
</summary>
</member>
<member name="P:Performance.DtoModels.Request.SmsCodeRequest.Type">
<summary>
短信验证类型 1 手机号登录 2 其他
......@@ -4856,6 +4866,11 @@
1 删除 2 驳回 3 修改 4 新增
</summary>
</member>
<member name="P:Performance.DtoModels.MenuResponse.ParentID">
<summary>
父级菜单ID
</summary>
</member>
<member name="P:Performance.DtoModels.MenuResponse.MenuName">
<summary>
菜单名称
......
......@@ -86,7 +86,10 @@
<summary> </summary>
</member>
<member name="P:Performance.EntityModels.PerformanceDbContext.cof_dept_detail">
<summary> </summary>
<summary>科室详情配置</summary>
</member>
<member name="P:Performance.EntityModels.PerformanceDbContext.cof_emp_detail">
<summary>管理绩效配置</summary>
</member>
<member name="P:Performance.EntityModels.PerformanceDbContext.cof_depttype">
<summary> 科室类型 </summary>
......@@ -1878,6 +1881,31 @@
</summary>
</member>
<member name="T:Performance.EntityModels.cof_emp_detail">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.cof_emp_detail.Id">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.cof_emp_detail.AllotId">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.cof_emp_detail.Settings">
<summary>
</summary>
</member>
<member name="P:Performance.EntityModels.cof_emp_detail.CreateTime">
<summary>
</summary>
</member>
<member name="T:Performance.EntityModels.cof_director">
<summary>
规模绩效、效率绩效计算系数配置
......
......@@ -233,4 +233,58 @@ public enum Format
四位小数百分比,
}
}
public class ManagementDept
{
public enum TitleManage
{
//人员工号 = 2701,
//人员分类 = 2801,
//核算单元 = 2901,
考核前其他绩效 = 3001,
考核前绩效 = 3101,
核算人数 = 3200,
人均绩效 = 3300,
基础绩效系数 = 3400,
出勤率 = 3501,
实际人均 = 3600,
效率绩效人数 = 3700,
效率系数 = 3800,
效率绩效小计 = 3900,
规模绩效系数 = 4000,
规模绩效小计 = 4100,
管理绩效发放系数 = 4200,
考核前管理绩效 = 4300,
考核得分率 = 4401,
考核后管理绩效 = 4500,
医院奖罚 = 4601,
夜班费 = 4611,
考核后绩效 = 4621,
其他管理绩效 = 4700,
调节系数 = 4801,
调节后其他绩效 = 4901,
绩效合计 = 5001,
}
public enum DisplayRule
{
始终隐藏,
始终显示,
下发显示,
总额下发后显示,
}
public enum Format
{
,
整数,
一位小数,
两位小数,
三位小数,
四位小数,
整数百分比,
一位小数百分比,
两位小数百分比,
三位小数百分比,
四位小数百分比,
}
}
}
......@@ -16,10 +16,6 @@ public class MenuRequest
/// </summary>
public string? MenuUrl { get; set; }
/// <summary>
/// 菜单图标
/// </summary>
public string? MenuIcon { get; set; }
/// <summary>
/// 菜单状态 1 启用 2禁用
/// </summary>
public int States { get; set; }
......@@ -28,4 +24,20 @@ public class MenuRequest
/// </summary>
public int? Sort { get; set; }
}
public class RoleRequest
{
/// <summary>
/// 菜单id
/// </summary>
public int MenuID { get; set; }
/// <summary>
/// 角色
/// </summary>
public int[] RoleID { get; set; }
/// <summary>
/// 为父级添加相同角色
/// </summary>
public bool TogetherAdd { get; set; }
}
}
......@@ -7,7 +7,10 @@ namespace Performance.DtoModels
public class MenuResponse
{
public int MenuID { get; set; }
/// <summary>
/// 父级菜单ID
/// </summary>
public int ParentID { get; set; }
/// <summary>
/// 菜单名称
/// </summary>
......
......@@ -10,6 +10,7 @@ public class UniteDeptDetailResponse
/// <summary> 0 不显示 1 显示 </summary>
public int ShowFormula { get; set; }
public List<DeptDetailItem> DetailItems { get; set; }
}
public class DeptDetailItem
{
......
......@@ -69,8 +69,10 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options)
public virtual DbSet<cof_check> cof_check { get; set; }
/// <summary> </summary>
public virtual DbSet<cof_cmi> cof_cmi { get; set; }
/// <summary> </summary>
/// <summary>科室详情配置</summary>
public virtual DbSet<cof_dept_detail> cof_dept_detail { get; set; }
/// <summary>管理绩效配置</summary>
public virtual DbSet<cof_emp_detail> cof_emp_detail { get; set; }
/// <summary> 科室类型 </summary>
public virtual DbSet<cof_depttype> cof_depttype { get; set; }
/// <summary> 规模绩效、效率绩效计算系数配置 </summary>
......
//-----------------------------------------------------------------------
// <copyright file=" cof_emp_detail.cs">
// * FileName: cof_emp_detail.cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels
{
/// <summary>
///
/// </summary>
[Table("cof_emp_detail")]
public class cof_emp_detail
{
/// <summary>
///
/// </summary>
[Key]
public int Id { get; set; }
/// <summary>
///
/// </summary>
public int AllotId { get; set; }
/// <summary>
///
/// </summary>
public string Settings { get; set; }
/// <summary>
///
/// </summary>
public DateTime CreateTime { get; set; }
}
}
//-----------------------------------------------------------------------
// <copyright file="cof_emp_detail.cs">
// * FileName: cof_emp_detail.cs
// </copyright>
//-----------------------------------------------------------------------
using Performance.EntityModels;
namespace Performance.Repository
{
/// <summary>
/// cof_emp_detail
/// </summary>
public partial class PerforCofEmpDetailRepository : PerforRepository<cof_emp_detail>
{
public PerforCofEmpDetailRepository(PerformanceDbContext context) : base(context)
{
}
}
}
......@@ -417,7 +417,15 @@ void RecursionUseSettings(List<DeptDetailItem> detailItems, List<UniteDeptDetail
var cfg = userDetailItems.FirstOrDefault(w => w.Title == detail.Title);
// 部分左右侧显示全部格式化
if (detail?.Total == 0)
{
detail.TotalFormat = detail.TotalFormat == null ? "0" : detail.TotalFormat;
}
else
{
detail.TotalFormat = ValueFormating(detail.Total, cfg?.Format);
}
// 只对右侧设置排序
detail.Sort = cfg == null ? detail.Sort : cfg.Sort;
// 备注
......@@ -934,5 +942,349 @@ int GetMaxColumnIndex(int maxColIndex, List<DeptDetailItem> detailItems)
#endregion
#region 管理绩效详情显示隐藏设置--加载和保存
public List<UniteDeptDetailItem> GetEmpDetailSetting(int allotId)
{
var allot = perforPerallotRepository.GetEntity(t => t.ID == allotId);
if (allot == null) throw new PerformanceException("绩效月信息错误");
var response = new List<UniteDeptDetailItem>() { };
#region 行政工勤
//response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.人员工号.ToString() });
//response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.人员分类.ToString() });
//response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.核算单元.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.考核前其他绩效.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.夜班费.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.考核后绩效.ToString() });
#endregion
#region 管理绩效
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.核算人数.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.人均绩效.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.基础绩效系数.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.实际人均.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.效率绩效人数.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.效率系数.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.效率绩效小计.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.规模绩效系数.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.规模绩效小计.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.管理绩效发放系数.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.考核前管理绩效.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.考核后管理绩效.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.其他管理绩效.ToString() });
#endregion
#region 共有
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.考核前绩效.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.出勤率.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.考核得分率.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.医院奖罚.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.调节系数.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.调节后其他绩效.ToString() });
response.Add(new UniteDeptDetailItem { Title = ManagementDept.TitleManage.绩效合计.ToString() });
#endregion
//初始化配置
InitRecursion(response, null);
#region 排序
var enumItems = EnumHelper.GetItems<ManagementDept.TitleManage>();
foreach (var detail in response)
{
var cfg = enumItems.FirstOrDefault(w => w.Name == detail.Title);
detail.Sort = cfg == null ? detail.Sort : cfg.Value;
}
#endregion
var entity = _perforCofEmpDetailRepository.GetEntity(w => w.AllotId == allotId);
var cofDeptDetail = string.IsNullOrEmpty(entity?.Settings)
? new List<UniteDeptDetailItem>()
: JsonHelper.Deserialize<List<UniteDeptDetailItem>>(entity.Settings);
GetRecursionUseSettings(response, cofDeptDetail);
response = response.OrderBy(w => w.Sort).ToList();
return response;
}
public void SaveEmpDetailSetting(int allotId, List<UniteDeptDetailItem> request)
{
var entity = _perforCofEmpDetailRepository.GetEntity(w => w.AllotId == allotId);
if (entity == null)
{
entity = new cof_emp_detail { AllotId = allotId, CreateTime = DateTime.Now, Settings = JsonHelper.Serialize(request) };
_perforCofEmpDetailRepository.Add(entity);
}
else
{
entity.Settings = JsonHelper.Serialize(request);
_perforCofEmpDetailRepository.Update(entity);
}
}
public List<UniteDeptDetailResponse> EmpDetail(EmpDetailRequest request, int userid)
{
//当角色对应时过滤
var userInfo = _userRepository.GetUser(userid);
if (userInfo?.User == null) throw new NotImplementedException("当前用户不存在");
if (userInfo.URole == null) throw new NotImplementedException("当前用户暂未分配角色");
if (!userInfo.Hospitals.NotNullOrEmpty()) throw new NotImplementedException("当前用户暂未分配医院");
var responses = new List<UniteDeptDetailResponse>();
var resComputes = new List<res_compute>();
if (request.ComputeId > 0)
{
var temp = _perforRescomputeRepository.GetEntity(t => t.ID == request.ComputeId);
if (temp == null) return new List<UniteDeptDetailResponse>();
resComputes.Add(temp);
}
else
{
// 查询当前角色下科室的绩效
UnitTypeUtil.Maps.TryGetValue(userInfo?.URole.Type ?? 0, out string[] unitTypes);
if (unitTypes == null || !unitTypes.Any()) return new List<UniteDeptDetailResponse>();
var accountingUnit = userInfo.User.Department;
var hospitalId = userInfo.HospitalIds.First();
if (userInfo.IsSecondAdmin)
{
var secondList = _agsecondallotRepository.Get(request.AllotId, unitTypes, userInfo.User.Department);
accountingUnit = secondList.FirstOrDefault()?.Department;
unitTypes = new string[] { secondList.FirstOrDefault()?.UnitType };
}
Dictionary<int, List<string>> dict = new Dictionary<int, List<string>>
{
{ (int)Role.科主任, new List<string>{ AccountUnitType.科主任.ToString()} },
{ (int)Role.护士长, new List<string>{ AccountUnitType.护士长.ToString() } },
{ (int)Role.行政科室, new List<string> { AccountUnitType.行政中层.ToString() } },
{ (int)Role.特殊科室, new List<string> { AccountUnitType.科主任.ToString() , AccountUnitType.护士长.ToString() } },
};
int roleType = userInfo?.URole.Type ?? 0;
var accountTypes = userInfo != null && dict.ContainsKey(roleType) ? dict[roleType] : new List<string>();
var temp = _rescomputeRepository.GetEntities(t => t.AllotID == request.AllotId && t.AccountingUnit == accountingUnit && (unitTypes.Contains(t.UnitType) || accountTypes.Contains(t.AccountType)));
if (temp == null) return new List<UniteDeptDetailResponse>();
resComputes.AddRange(temp);
}
foreach (var resCompute in resComputes)
{
var allot = perforPerallotRepository.GetEntity(t => t.ID == resCompute.AllotID);
if (allot == null) throw new PerformanceException("绩效月信息错误");
if (!Enum.TryParse(resCompute.UnitType == null ? resCompute.AccountType : resCompute.UnitType, ignoreCase: true, out UnitType unitType))
throw new PerformanceException("核算组别错误");
var ignore = _configuration.GetSection("UniteDeptDetailIgnore").Get<string[]>() ?? Array.Empty<string>();
var persheet = _perforPerSheetRepository.GetEntities(t => t.AllotID == resCompute.AllotID) ?? new List<per_sheet>();
var headers = _perforImheaderRepository.GetEntities(t => t.AllotID == resCompute.AllotID) ?? new List<im_header>();
var basicData = _perforImDataRepository.GetEntities(t => t.AllotID == resCompute.AllotID && t.AccountingUnit == resCompute.AccountingUnit) ?? new List<im_data>();
var employee = _perforImemployeeclinicRepository.GetEntity(t => t.AllotID == resCompute.AllotID && t.AccountingUnit == resCompute.AccountingUnit && t.UnitType == resCompute.UnitType && t.PersonnelNumber == resCompute.JobNumber);
var response = new UniteDeptDetailResponse
{
// Title = $"相关信息: {resCompute.JobNumber} {resCompute.EmployeeName} {resCompute.AccountType} {resCompute.AccountingUnit}",
Title = $"{resCompute.EmployeeName}({resCompute.JobNumber}) {resCompute.AccountType} {resCompute.AccountingUnit}",
UnitType = resCompute?.UnitType,
AccountingUnit = resCompute?.AccountingUnit,
DetailItems = new List<DeptDetailItem>()
};
#region 行政工勤
//response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.人员工号.ToString(), TotalFormat = resCompute.JobNumber });
//response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.人员分类.ToString(), TotalFormat = resCompute.AccountType });
//response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.核算单元.ToString(), TotalFormat = resCompute.AccountingUnit });
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.考核前其他绩效.ToString(), Total = resCompute.AssessBeforeOtherFee ?? 0 });
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.夜班费.ToString(), Total = resCompute.NightWorkPerfor ?? 0 });
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.考核后绩效.ToString(), Total = resCompute.GiveFee ?? 0 });
#endregion
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.考核前绩效.ToString(), Total = resCompute.PerforTotal ?? 0 });
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.核算人数.ToString(), Total = resCompute.Number ?? 0 });
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.人均绩效.ToString(), Total = (resCompute.Number ?? 0) == 0 ? 0 : resCompute.PerforTotal / resCompute.Number ?? 0 });
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.出勤率.ToString(), Total = resCompute.Attendance ?? 1 });
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.实际人均.ToString(), Total = resCompute.Avg ?? 0 });
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.效率绩效人数.ToString(), Total = resCompute.PermanentStaff ?? 0 });
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.效率系数.ToString(), Total = employee?.Efficiency ?? 0 });
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.效率绩效小计.ToString(), Total = resCompute.Efficiency ?? 0 });
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.规模绩效系数.ToString(), Total = employee?.Scale ?? 0 });
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.规模绩效小计.ToString(), Total = resCompute.Scale ?? 0 });
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.管理绩效发放系数.ToString(), Total = employee?.Management ?? 0 });
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.考核前管理绩效.ToString(), Total = resCompute.ShouldGiveFee ?? 0 });
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.考核得分率.ToString(), Total = resCompute.ScoreAverageRate ?? 1 });
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.考核后管理绩效.ToString(), Total = GetDecimal(resCompute.ShouldGiveFee * resCompute.ScoreAverageRate * resCompute.Attendance + resCompute.Punishment ?? 0), Remark = resCompute.Remark });
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.调节系数.ToString(), Total = employee?.Adjust ?? 1 });
var isShowManage = IsShowManage(resCompute.AllotID.Value);
var array = new List<int>();
if (resCompute.AccountType == AccountUnitType.行政中层.ToString())
{
array = new List<int>()
{
(int)ManagementDept.TitleManage.考核前其他绩效,
(int)ManagementDept.TitleManage.考核前绩效,
(int)ManagementDept.TitleManage.出勤率,
(int)ManagementDept.TitleManage.考核得分率,
(int)ManagementDept.TitleManage.医院奖罚,
(int)ManagementDept.TitleManage.夜班费,
(int)ManagementDept.TitleManage.考核后绩效,
(int)ManagementDept.TitleManage.调节系数,
(int)ManagementDept.TitleManage.调节后其他绩效,
(int)ManagementDept.TitleManage.绩效合计
};
isShowManage = 1;
}
else
{
array = new List<int>()
{
(int)ManagementDept.TitleManage.考核前绩效,
(int)ManagementDept.TitleManage.核算人数,
(int)ManagementDept.TitleManage.人均绩效,
(int)ManagementDept.TitleManage.基础绩效系数,
(int)ManagementDept.TitleManage.出勤率,
(int)ManagementDept.TitleManage.实际人均,
(int)ManagementDept.TitleManage.效率绩效人数,
(int)ManagementDept.TitleManage.效率系数,
(int)ManagementDept.TitleManage.效率绩效小计,
(int)ManagementDept.TitleManage.规模绩效系数,
(int)ManagementDept.TitleManage.规模绩效小计,
(int)ManagementDept.TitleManage.管理绩效发放系数,
(int)ManagementDept.TitleManage.考核前管理绩效,
(int)ManagementDept.TitleManage.考核得分率,
(int)ManagementDept.TitleManage.考核后管理绩效,
(int)ManagementDept.TitleManage.医院奖罚,
(int)ManagementDept.TitleManage.其他管理绩效,
(int)ManagementDept.TitleManage.调节系数,
(int)ManagementDept.TitleManage.调节后其他绩效,
(int)ManagementDept.TitleManage.绩效合计
};
}
// 开启 显示管理绩效
if (isShowManage != 1)
{
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.绩效合计.ToString(), Total = GetDecimal(resCompute.ShouldGiveFee * resCompute.ScoreAverageRate * resCompute.Attendance + resCompute.Punishment ?? 0) * (resCompute.Adjust ?? 1) + (resCompute.AdjustLaterOtherFee ?? 0) });
}
else
{
response.DetailItems.Add(new DeptDetailItem { Title = ManagementDept.TitleManage.绩效合计.ToString(), Total = resCompute.RealGiveFee ?? 0 });
}
var settings = GetEmpDetailSetting(resCompute.AllotID ?? 0);
// 显示详情
#region 补全公共附属表明细
{
var rightSheetTypeMaps = new DeptDetailItem[]
{
new DeptDetailItem { Title = ManagementDept.TitleManage.基础绩效系数.ToString(),SheetType=SheetType.PersonPostCoefficient, Total = employee?.Basics ?? 0 },
new DeptDetailItem { Title = ManagementDept.TitleManage.医院奖罚.ToString(),SheetType=SheetType.PersonExtra, Total = resCompute.Punishment ?? 0 },
new DeptDetailItem { Title = ManagementDept.TitleManage.其他管理绩效.ToString(),SheetType=SheetType.PersonOtherManagePerforFee, Total = resCompute.OtherManagePerfor ?? 0 },
new DeptDetailItem { Title = ManagementDept.TitleManage.调节后其他绩效.ToString(), SheetType = SheetType.AccountAdjustLaterOtherFee, Total = employee?.AdjustLaterOtherFee ?? 0, },
};
foreach (var detail in rightSheetTypeMaps)
{
response.DetailItems.Add(detail);
foreach (var sheet in persheet.Where(t => t.SheetType == (int)detail.SheetType))
{
var type = TypeConversion((int)unitType);
var sheetName = BeautifulName(sheet.SheetName);
var items = new List<Dictionary<string, object>>();
var postDatas = basicData.Where(t => t.SheetID == sheet.ID && t.IsTotal != 1 && t.UnitType == (int)type);
var headersDatas = headers.Where(t => t.SheetID == sheet.ID && t.IsTotal != 1).ToList();
postDatas = from temp1 in postDatas
join temp2 in headersDatas on temp1.TypeName equals temp2.CellValue
orderby temp2.PointCell ascending
select temp1;
foreach (var post in postDatas.GroupBy(t => new { t.TypeName }))
{
if (ignore.Contains(post.Key.TypeName)) continue;
var settingItem = settings.FirstOrDefault(w => w.Title == detail.Title) ?? new UniteDeptDetailItem() { Children = new List<UniteDeptDetailItem>() };
var gs = settingItem.Children.FirstOrDefault(w => w.Title == post.Key.TypeName) ?? new UniteDeptDetailItem { Format = "" };
if (string.IsNullOrEmpty(gs.Display))
gs.Display = UniteDept.DisplayRule.始终显示.ToString();
if (gs.Display == UniteDept.DisplayRule.始终隐藏.ToString()) continue;
var states = new int[] { (int)AllotStates.绩效下发, (int)AllotStates.归档 };
if (gs.Display == UniteDept.DisplayRule.下发显示.ToString() && userInfo.IsSecondAdmin && !states.Contains(allot.States)) continue;
var fz = post.Sum(group => group.IsFactor == 1 ? (group.CellValue * (group.FactorValue ?? 0)) : group.CellValue);
var row = new Dictionary<string, object>
{
{ "指标", post.Key.TypeName },
{ "分值", ValueFormating(fz, gs.Format) },
{ "说明", gs.Remark },
};
items.Add(row);
}
DeleteBlankColumn(items);
var amount = basicData?.Where(t => t.SheetID == sheet.ID && t.UnitType == (int)type && t.IsTotal == 1)?.FirstOrDefault()?.CellValue ?? 0;
detail.Total = amount;
detail.Items = items;
}
}
}
#endregion
RecursionUseSettings(response.DetailItems, settings, userInfo.IsSecondAdmin, allot);
response.DetailItems = response.DetailItems.Where(w => array.Contains(w.Sort)).ToList();
response.DetailItems = response.DetailItems.OrderBy(w => w.Sort).ToList();
responses.Add(response);
}
return responses;
}
public string ExcelDownload(List<UniteDeptDetailResponse> uniteDeptDetails, string name, int allotId)
{
var dpath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Files");
if (!Directory.Exists(dpath)) Directory.CreateDirectory(dpath);
string filepath = Path.Combine(dpath, $"{name}{DateTime.Now:yyyyMMdd}");
if (File.Exists(filepath)) File.Delete(filepath);
using (FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate))
using (ExcelPackage package = new ExcelPackage(fs))
{
foreach (var uniteDeptDetail in uniteDeptDetails)
{
var worksheet = package.Workbook.Worksheets.Add(uniteDeptDetail.Title);
worksheet.View.ShowGridLines = false;
var maxColIndex = GetMaxColumnIndex(0, uniteDeptDetail.DetailItems);
maxColIndex = maxColIndex == 0 ? 1 : maxColIndex;
worksheet.SetValue(1, 1, uniteDeptDetail.Title);
worksheet.Cells[1, 1, 1, maxColIndex].Merge = true;
worksheet.Cells[1, 1, 1, maxColIndex].Style.Font.Bold = true;
worksheet.Cells[1, 1, 1, maxColIndex].Style.Font.Size = 18;
worksheet.Cells[1, 1, 1, maxColIndex].Style.Border.BorderAround(ExcelBorderStyle.Thin);
worksheet.Cells[1, 1, 1, maxColIndex].Style.VerticalAlignment = ExcelVerticalAlignment.Center;
worksheet.Cells[1, 1, 1, maxColIndex].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
worksheet.Cells[1, 1].Style.Fill.PatternType = ExcelFillStyle.Solid;
worksheet.Cells[1, 1].Style.Fill.BackgroundColor.SetColor(Color.GhostWhite);
var rowIndex = 1;
WriteSheetCells(worksheet, maxColIndex, rowIndex, uniteDeptDetail.DetailItems);
worksheet.Cells.AutoFitColumns();
int lastColumnIndex = worksheet.Dimension.End.Column;
worksheet.Column(lastColumnIndex).Width = 88;
for (int row = 1; row <= worksheet.Dimension.End.Row; row++)
{
worksheet.Row(row).Height = 38;
}
}
package.Save();
}
return filepath;
}
#endregion
}
}
......@@ -41,6 +41,9 @@ public partial class ComputeService : IAutoInjection
private readonly PerforCofaliasRepository cofaliasRepository;
private readonly PerforReportRepository reportRepository;
private readonly PerforCofDeptDetailRepository _perforCofDeptDetailRepository;
private readonly PerforCofEmpDetailRepository _perforCofEmpDetailRepository;
private readonly PerforAgsecondallotRepository _agsecondallotRepository;
private readonly PerforRescomputeRepository _rescomputeRepository;
public ComputeService(
IMapper mapper,
......@@ -67,7 +70,11 @@ public partial class ComputeService : IAutoInjection
PerforCofaccountingRepository cofaccountingRepository,
PerforCofaliasRepository cofaliasRepository,
PerforReportRepository reportRepository,
PerforCofDeptDetailRepository perforCofDeptDetailRepository)
PerforCofDeptDetailRepository perforCofDeptDetailRepository,
PerforCofEmpDetailRepository perforCofEmpDetailRepository,
PerforAgsecondallotRepository agsecondallotRepository,
PerforRescomputeRepository rescomputeRepository
)
{
_mapper = mapper;
_configuration = configuration;
......@@ -94,6 +101,9 @@ public partial class ComputeService : IAutoInjection
this.cofaliasRepository = cofaliasRepository;
this.reportRepository = reportRepository;
_perforCofDeptDetailRepository = perforCofDeptDetailRepository;
_perforCofEmpDetailRepository = perforCofEmpDetailRepository;
_agsecondallotRepository = agsecondallotRepository;
_rescomputeRepository = rescomputeRepository;
}
public int IsShowManage(int allotId)
......@@ -1706,7 +1716,6 @@ public DeptDataDetails GetDoctorDetail(int computeId)
Management = employee?.Management ?? 0,//管理绩效发放系数
AdjustFactor = employee?.Adjust ?? 1, //调节系数
AdjustLaterOtherFee = employee?.AdjustLaterOtherFee ?? 0, //调节后其他绩效
AccountingUnit = resCompute.AccountingUnit,
EmployeeName = resCompute.EmployeeName,
PerforTotal = resCompute.PerforTotal, //科室考核前绩效
......@@ -1781,9 +1790,9 @@ public DeptDataDetails GetAdministration(int computeId)
Pandect = new PerDataAccountBaisc
{
EmployeeName = resCompute.EmployeeName,//医生姓名
AccountType = resCompute.AccountType,//核算单元类型
JobNumber = resCompute.JobNumber,//工号
AccountingUnit = resCompute.AccountingUnit,//核算单元
AccountType = resCompute.AccountType,//核算单元类型
JobTitle = resCompute.JobTitle,//职称
FitPeople = resCompute.FitPeople,//绩效基数核算参考对象
FitPeopleValue = resCompute.FitPeopleValue ?? 0,//绩效基础核算参考值
......
......@@ -20,7 +20,8 @@ public class MenuService : IAutoInjection
public MenuService(
IMapper mapper,
PerforMenuRepository menuRepository,
PerforRolemenuRepository perforRolemenuRepository)
PerforRolemenuRepository perforRolemenuRepository
)
{
_mapper = mapper;
_menuRepository = menuRepository;
......@@ -83,7 +84,6 @@ public ApiResponse UpdateSystemMenu(MenuRequest menuRequest)
data.ParentID = menuRequest.ParentID;
data.MenuName = menuRequest.MenuName;
data.MenuUrl = menuRequest.MenuUrl;
data.MenuIcon = menuRequest.MenuIcon;
data.States = menuRequest.States;
data.Sort = menuRequest.Sort;
_menuRepository.Update(data);
......@@ -96,18 +96,17 @@ public ApiResponse UpdateSystemMenu(MenuRequest menuRequest)
}
public ApiResponse DeleteSystemMenu(int menuID)
{
try
{
var datas = _menuRepository.GetEntities(w => w.ID == menuID || w.ParentID == menuID);
if (!datas.Any()) return new ApiResponse(ResponseType.NotFound, "未查到数据");
var menuIdDatas = datas.Select(s => s.ID).ToList();
var roleMenu = _rolemenuRepository.GetEntities(w => menuIdDatas.Contains(w.MenuID));
_menuRepository.RemoveRange(datas.ToArray());
if (roleMenu.Any())
_rolemenuRepository.RemoveRange(roleMenu.ToArray());
var sysMenus = _menuRepository.GetEntities(w => w.ID == menuID || w.ParentID == menuID);
if (sysMenus == null) return new ApiResponse(ResponseType.NotFound, "未查到数据");
var sysMenusId = sysMenus.Select(w => w.ID).ToList();
var sysRoleMenus = _rolemenuRepository.GetEntities(w => sysMenusId.Contains(w.MenuID));
_menuRepository.RemoveRange(sysMenus.ToArray());
if (sysRoleMenus.Any())
_rolemenuRepository.RemoveRange(sysRoleMenus.ToArray());
return new ApiResponse(ResponseType.OK);
}
catch (Exception ex)
......@@ -115,16 +114,43 @@ public ApiResponse DeleteSystemMenu(int menuID)
return new ApiResponse(ResponseType.Fail, "删除失败");
}
}
public ApiResponse<List<sys_role_menu>> GetRoleSystemMenu(int menuID)
{
var roles = _rolemenuRepository.GetEntities(t => t.MenuID == menuID);
return new ApiResponse<List<sys_role_menu>>(ResponseType.OK, roles);
}
public ApiResponse SetRoleSystemMenu(int menuID, int roleID)
public ApiResponse SetRoleSystemMenu(RoleRequest roleRequest)
{
try
{
var sysMenu = _menuRepository.GetEntity(w => w.ID == menuID);
if (sysMenu != null && sysMenu.ID < 0) return new ApiResponse(ResponseType.NotFound, "未查到菜单信息");
var roleMenu = _rolemenuRepository.GetEntity(w => w.MenuID == menuID && w.RoleID == roleID);
if (roleMenu != null && roleMenu.ID < 0) return new ApiResponse(ResponseType.NotFound, "当前角色已绑定当前菜单");
_rolemenuRepository.Add(new sys_role_menu() { MenuID = menuID, RoleID = roleID });
var sysRoleMenus = _rolemenuRepository.GetEntities(w => w.MenuID == roleRequest.MenuID);
if (sysRoleMenus != null && sysRoleMenus.Any())
_rolemenuRepository.RemoveRange(sysRoleMenus.ToArray());
var sysMenu = _menuRepository.GetEntity(w => w.ID == roleRequest.MenuID);
var sysMenus = _menuRepository.GetEntities();
var sysMenuIds = new List<int>();
sysMenuIds.Add(sysMenu.ID);
var temps = new List<sys_role_menu>();
var parentId = sysMenu.ParentID;
while (roleRequest.TogetherAdd)
{
var tempSysMenu = sysMenus.FirstOrDefault(w => w.ID == parentId);
if (tempSysMenu.ParentID == 0) break;
sysMenuIds.Add(tempSysMenu.ID);
parentId = tempSysMenu.ParentID;
}
foreach (var menuId in sysMenuIds)
{
foreach (var roleID in roleRequest.RoleID)
{
if (_rolemenuRepository.GetEntity(w => w.MenuID == menuId && w.RoleID == roleID) == null)
temps.Add(new sys_role_menu { MenuID = menuId, RoleID = roleID });
}
}
_rolemenuRepository.AddRange(temps.ToArray());
return new ApiResponse(ResponseType.OK);
}
catch (Exception ex)
......@@ -132,6 +158,5 @@ public ApiResponse SetRoleSystemMenu(int menuID, int roleID)
return new ApiResponse(ResponseType.Fail, "添加失败");
}
}
}
}
......@@ -601,29 +601,54 @@ public UserResponse UpdateUser(UserRequest request, int userId)
return _mapper.Map<UserResponse>(user);
}
public ApiResponse DeleteUser(int iD)
{
var user = _userRepository.GetEntity(t => t.ID == iD && t.IsDelete == 1);
if (null == user)
throw new PerformanceException($"用户不存在 UserId:{iD}");
user.IsDelete = 2;
var result = _userRepository.Remove(user);
var users = _userRepository.GetEntities(t => t.ParentID == user.ID && t.IsDelete == 1)?.ToArray();
if (users != null)
public ApiResponse DeleteUser(int userId)
{
_userRepository.RemoveRange(users);
foreach (var item in users)
try
{
var userRole = _userroleRepository.GetEntity(t => t.UserID == item.ID);
if (null != userRole)
_userroleRepository.Remove(userRole);
var sysUsers = _userRepository.GetEntities(t => t.ID == userId || t.ParentID == userId);
if (sysUsers == null) return new ApiResponse(ResponseType.NotFound, "未查到用户");
var sysUsersId = sysUsers.Select(w => w.ID).ToList();
var sysUesrRoles = _userroleRepository.GetEntities(t => sysUsersId.Contains(t.UserID));
_userRepository.RemoveRange(sysUsers.ToArray());
if (sysUesrRoles.Any())
_userroleRepository.RemoveRange(sysUesrRoles.ToArray());
return new ApiResponse(ResponseType.OK);
}
catch (Exception ex)
{
return new ApiResponse(ResponseType.Fail, "删除失败");
}
return result ? new ApiResponse(ResponseType.OK) : new ApiResponse(ResponseType.Fail);
}
#region 老删除
//public ApiResponse DeleteUser(int iD)
//{
// var user = _userRepository.GetEntity(t => t.ID == iD && t.IsDelete == 1);
// if (null == user)
// throw new PerformanceException($"用户不存在 UserId:{iD}");
// user.IsDelete = 2;
// var result = _userRepository.Remove(user);
// var users = _userRepository.GetEntities(t => t.ParentID == user.ID && t.IsDelete == 1)?.ToArray();
// if (users != null)
// {
// _userRepository.RemoveRange(users);
// foreach (var item in users)
// {
// var userRole = _userroleRepository.GetEntity(t => t.UserID == item.ID);
// if (null != userRole)
// _userroleRepository.Remove(userRole);
// }
// }
// return result ? new ApiResponse(ResponseType.OK) : new ApiResponse(ResponseType.Fail);
//}
#endregion
#endregion
public HandsonTableBase GetUserHandsFlat()
......
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