Commit 5acae741 by 李承祥

Merge branch 'feature/jwt' into local

parent 366f0b36
using FluentValidation.AspNetCore;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Options;
......@@ -11,6 +12,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
namespace Performance.Api.Controllers
......@@ -44,42 +46,72 @@ public class AccountController : Controller
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[NoVerify]
[HttpPost]
[Route("login")]
public ApiResponse<UserIdentity> Login([FromBody]LoginRequest request)
[AllowAnonymous]
public ApiResponse<JwtToken> Login([FromBody]LoginRequest request)
{
var user = _userService.Login(request);
if (user == null)
return new ApiResponse<UserIdentity>(ResponseType.Fail, "用户不存在");
int[] roleArray = new int[] { _options.NurseRole, _options.DirectorRole };
return new ApiResponse<JwtToken>(ResponseType.Fail, "用户不存在");
user.Hospital = _hospitalService.GetUserHopital(user.UserID);
user.Role = _roleService.GetUserRole(user.UserID);
user.IsAgainAdmin = user.Role != null ? roleArray.Contains(user.Role.First().RoleID) : false;
var claims = new Claim[]
{
new Claim(JwtClaimTypes.Id, user.UserID.ToString()),
new Claim(JwtClaimTypes.Login, user.Login),
new Claim(JwtClaimTypes.RealName, user.RealName),
new Claim(JwtClaimTypes.Mail, user.Mail),
new Claim(JwtClaimTypes.AppName, request.AppName ?? ""),
new Claim(JwtClaimTypes.Device, request.Device ?? ""),
new Claim(JwtClaimTypes.Department, user.Department ?? ""),
};
if (string.IsNullOrEmpty(user.Token))
user.Token = Guid.NewGuid().ToString("N");
var jwtToken = JwtTokenHelper.GenerateToken(claims, _options.ExpirationMinutes);
return new ApiResponse<JwtToken>(ResponseType.OK, jwtToken);
}
var option = new MemoryCacheEntryOptions()
/// <summary>
/// 刷新登录JWT TOKEN
/// </summary>
/// <returns></returns>
[HttpPost]
[Route("refresh")]
public ApiResponse<JwtToken> Refresh()
{
var userClaim = _claim.GetUserClaim();
var claims = new Claim[]
{
SlidingExpiration = TimeSpan.FromMinutes(_options.ExpirationMinutes)
new Claim(JwtClaimTypes.Id, userClaim.FirstOrDefault(t => t.Type == JwtClaimTypes.Id).Value),
new Claim(JwtClaimTypes.Login, userClaim.FirstOrDefault(t => t.Type == JwtClaimTypes.Login).Value),
new Claim(JwtClaimTypes.RealName, userClaim.FirstOrDefault(t => t.Type == JwtClaimTypes.RealName).Value),
new Claim(JwtClaimTypes.Mail, userClaim.FirstOrDefault(t => t.Type == JwtClaimTypes.Mail).Value),
new Claim(JwtClaimTypes.AppName, userClaim.FirstOrDefault(t => t.Type == JwtClaimTypes.AppName).Value),
new Claim(JwtClaimTypes.Device, userClaim.FirstOrDefault(t => t.Type == JwtClaimTypes.Device).Value),
new Claim(JwtClaimTypes.Department, userClaim.FirstOrDefault(t => t.Type == JwtClaimTypes.Department).Value),
};
_memoryCache.Set(user.Token, user, option);
return new ApiResponse<UserIdentity>(ResponseType.OK, user);
}
var jwtToken = JwtTokenHelper.GenerateToken(claims, _options.ExpirationMinutes);
// 设置当前请求Jwt失效
var jwt = _claim.GetJwtToken();
//claimService.SetJwtBlacklist(jwt);
return new ApiResponse<JwtToken>(ResponseType.OK, jwtToken);
}
/// <summary>
/// 查询个人信息
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("selfinfo")]
[HttpPost]
public ApiResponse SelfInfo([FromBody]ApiRequest request)
public ApiResponse SelfInfo()
{
var user = _claim.At(request.Token);
var userid = _claim.GetUserId();
var user = _userService.GetUser(userid);
user.Role = _roleService.GetUserRole(user.UserID);
user.Hospital = _hospitalService.GetUserHopital(user.UserID);
int[] roleArray = new int[] { _options.NurseRole, _options.DirectorRole };
user.IsAgainAdmin = user.Role != null ? roleArray.Contains(user.Role.First().RoleID) : false;
return new ApiResponse(ResponseType.OK, user);
}
......@@ -92,7 +124,7 @@ public ApiResponse SelfInfo([FromBody]ApiRequest request)
[HttpPost]
public ApiResponse<UserResponse> UpdateSelf([CustomizeValidator(RuleSet = "Self"), FromBody]UserRequest request)
{
request.ID = _claim.At(request.Token).UserID;
request.ID = _claim.GetUserId();
var user = _userService.UpdateSelf(request);
return new ApiResponse<UserResponse>(ResponseType.OK, user);
}
......@@ -100,13 +132,12 @@ public ApiResponse<UserResponse> UpdateSelf([CustomizeValidator(RuleSet = "Self"
/// <summary>
/// 用户列表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("list")]
[HttpPost]
public ApiResponse<List<UserResponse>> List([FromBody]ApiRequest request)
public ApiResponse<List<UserResponse>> List()
{
var userList = _userService.GetUserList(_claim.At(request.Token).UserID);
var userList = _userService.GetUserList(_claim.GetUserId());
return new ApiResponse<List<UserResponse>>(ResponseType.OK, "ok", userList);
}
......@@ -119,8 +150,8 @@ public ApiResponse<List<UserResponse>> List([FromBody]ApiRequest request)
[HttpPost]
public ApiResponse<UserResponse> Insert([CustomizeValidator(RuleSet = "Insert"), FromBody]UserRequest request)
{
var userIdentity = _claim.At(request.Token);
var user = _userService.Insert(request, userIdentity.UserID);
var userId = _claim.GetUserId();
var user = _userService.Insert(request, userId);
user.Role = request.Role;
return new ApiResponse<UserResponse>(ResponseType.OK, user);
}
......@@ -146,8 +177,13 @@ public ApiResponse Delete([CustomizeValidator(RuleSet = "Delete"), FromBody]User
[HttpPost]
public ApiResponse<UserResponse> Update([CustomizeValidator(RuleSet = "Update"), FromBody]UserRequest request)
{
var userIdentity = _claim.At(request.Token);
var user = _userService.Update(request, userIdentity.IsAgainAdmin);
var userId = _claim.GetUserId();
int[] roleArray = new int[] { _options.NurseRole, _options.DirectorRole };
var roles = _roleService.GetUserRole(userId);
var isAgainAdmin = roles != null ? roleArray.Contains(roles.First().RoleID) : false;
var user = _userService.Update(request, isAgainAdmin);
user.Role = request.Role;
return new ApiResponse<UserResponse>(ResponseType.OK, user);
}
......@@ -161,7 +197,7 @@ public ApiResponse<UserResponse> Update([CustomizeValidator(RuleSet = "Update"),
[HttpPost]
public ApiResponse<UserResponse> Password([FromBody]PasswordRequest request)
{
var userid = _claim.At(request.Token).UserID;
var userid = _claim.GetUserId();
var user = _userService.UpdatePwd(request, userid);
return new ApiResponse<UserResponse>(ResponseType.OK, user);
}
......@@ -169,11 +205,10 @@ public ApiResponse<UserResponse> Password([FromBody]PasswordRequest request)
/// <summary>
/// 角色列表
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("rolelist")]
[HttpPost]
public ApiResponse<List<sys_role>> RoleList([FromBody]ApiRequest request)
public ApiResponse<List<sys_role>> RoleList()
{
var roleList = _userService.RoleList();
return new ApiResponse<List<sys_role>>(ResponseType.OK, "ok", roleList);
......
......@@ -29,6 +29,7 @@ namespace Performance.Api.Controllers
public class AgainAllotController : Controller
{
private AgainAllotService againAllotService;
private RoleService roleService;
private ComputeService computeService;
private ClaimService claimService;
private AllotService allotService;
......@@ -36,6 +37,7 @@ public class AgainAllotController : Controller
private ConfigService configService;
private Application application;
public AgainAllotController(AgainAllotService againAllotService,
RoleService roleService,
ClaimService claimService,
AllotService allotService,
IHostingEnvironment env,
......@@ -44,6 +46,7 @@ public class AgainAllotController : Controller
IOptions<Application> options)
{
this.againAllotService = againAllotService;
this.roleService = roleService;
this.claimService = claimService;
this.allotService = allotService;
this.env = env;
......@@ -58,10 +61,10 @@ public class AgainAllotController : Controller
/// <returns></returns>
[Route("allotlist")]
[HttpPost]
public ApiResponse AllotList([FromBody]ApiRequest request)
public ApiResponse AllotList()
{
var user = claimService.At(request);
var list = againAllotService.GetAllotList(user.UserID);
var userId = claimService.GetUserId();
var list = againAllotService.GetAllotList(userId);
return new ApiResponse(ResponseType.OK, list);
}
......@@ -122,19 +125,21 @@ public ApiResponse Import([FromForm] IFormCollection form)
[HttpPost]
public ApiResponse DepartmentDetail([CustomizeValidator(RuleSet = "Generate"), FromBody]AgainAllotRequest request)
{
var user = claimService.At(request);
var userId = claimService.GetUserId();
var roles = roleService.GetUserRole(userId);
var department = claimService.GetUserClaim(JwtClaimTypes.Department);
var again = againAllotService.GetAgainallot(request.AgainAllotID);
if (again == null)
return new ApiResponse(ResponseType.Fail, "当前二次绩效ID无效");
if (user.Role.First().RoleID == application.DirectorRole)
if (roles.First().RoleID == application.DirectorRole)
{
var detail = computeService.GetDepartmentDetail(again.AllotID.Value, user.Department, 1);
var detail = computeService.GetDepartmentDetail(again.AllotID.Value, department, 1);
return new ApiResponse(ResponseType.OK, detail);
}
else if (user.Role.First().RoleID == application.NurseRole)
else if (roles.First().RoleID == application.NurseRole)
{
var detail = computeService.GetDepartmentDetail(again.AllotID.Value, user.Department, 2);
var detail = computeService.GetDepartmentDetail(again.AllotID.Value, department, 2);
return new ApiResponse(ResponseType.OK, detail);
}
return new ApiResponse(ResponseType.Fail, "当前用户角色无法识别");
......@@ -149,8 +154,9 @@ public ApiResponse DepartmentDetail([CustomizeValidator(RuleSet = "Generate"), F
[HttpPost]
public ApiResponse Generate([CustomizeValidator(RuleSet = "Generate"), FromBody]AgainAllotRequest request)
{
var user = claimService.At(request);
var result = againAllotService.Generate(request, user);
var userId = claimService.GetUserId();
var department = claimService.GetUserClaim(JwtClaimTypes.Department);
var result = againAllotService.Generate(request, userId, department);
return new ApiResponse(ResponseType.OK);
}
......@@ -163,8 +169,7 @@ public ApiResponse Generate([CustomizeValidator(RuleSet = "Generate"), FromBody]
[HttpPost]
public ApiResponse Detail([CustomizeValidator(RuleSet = "Generate"), FromBody]AgainAllotRequest request)
{
var user = claimService.At(request);
var result = againAllotService.Detail(request, user);
var result = againAllotService.Detail(request);
return new ApiResponse(ResponseType.OK, new { result.AgainSituation, result.SheetExport });
}
}
......
......@@ -65,8 +65,8 @@ public ApiResponse List([FromBody]AllotRequest request)
[HttpPost]
public ApiResponse Insert([CustomizeValidator(RuleSet = "Insert"), FromBody]AllotRequest request)
{
var user = _claim.At(request);
var result = _allotService.InsertAllot(request, user.UserID);
var userId = _claim.GetUserId();
var result = _allotService.InsertAllot(request, userId);
_configService.Copy(result);
return new ApiResponse(ResponseType.OK, result);
}
......@@ -155,9 +155,18 @@ public ApiResponse Generate([CustomizeValidator(RuleSet = "Delete"), FromBody]Al
var allot = _allotService.GetAllot(request.ID);
if (null == allot || string.IsNullOrEmpty(allot.Path))
throw new PerformanceException("当前绩效记录不存在或没有上传数据文件");
var user = _claim.At(request);
//_allotService.Generate(allot, user.Mail);
BackgroundJob.Enqueue(() => _allotService.Generate(allot, user.Mail));
var email = _claim.GetUserClaim(JwtClaimTypes.Mail);
if (allot.States == (int)AllotStates.Wait)
return new ApiResponse(ResponseType.OK, "当前绩效正在等待生成");
_allotService.UpdateAllotStates(allot.ID, (int)AllotStates.Wait, EnumHelper.GetDescription(AllotStates.Wait));
if (_evn.IsEnvironment("Localhost"))
_allotService.Generate(allot, email);
else
BackgroundJob.Enqueue(() => _allotService.Generate(allot, email));
//_allotService.Generate(allot, email);
////BackgroundJob.Enqueue(() => _allotService.Generate(allot, email));
return new ApiResponse(ResponseType.OK);
}
......
......@@ -129,7 +129,7 @@ public ApiResponse EditAssessData([CustomizeValidator(RuleSet = "Edit"), FromBod
//考核模版列表
[HttpPost]
[Route("tempassesslist")]
public ApiResponse TempAssessList([FromBody]ApiRequest request)
public ApiResponse TempAssessList()
{
return assessService.TempAssessList();
}
......
......@@ -136,11 +136,12 @@ public ApiResponse AllCompute([FromBody]ComputerRequest request)
[HttpPost]
public ApiResponse UpdateRealfee([CustomizeValidator(RuleSet = "UpdateReal"), FromBody] ComputerRequest request)
{
var user = _claim.At(request);
var userId = _claim.GetUserId();
var realName = _claim.GetUserClaim(JwtClaimTypes.RealName);
var compute = _computeService.GetComputeSingle(request.ComputeId);
if (null == compute)
throw new PerformanceException("当前数据记录不存在");
compute = _computeService.UpdateRealfee(request, user);
compute = _computeService.UpdateRealfee(request, userId, realName);
return new ApiResponse(ResponseType.OK, "修改成功", compute);
}
......
......@@ -29,9 +29,9 @@ public HospitalController(HospitalService hospitalService, ClaimService claimSer
/// <returns></returns>
[Route("hospitallist")]
[HttpPost]
public ApiResponse<List<HospitalResponse>> GetHospitalList([FromBody]ApiRequest request)
public ApiResponse<List<HospitalResponse>> GetHospitalList()
{
var hospitalList = _hospitalService.GetUserHopital(_claim.At(request.Token).UserID);
var hospitalList = _hospitalService.GetUserHopital(_claim.GetUserId());
return new ApiResponse<List<HospitalResponse>>(ResponseType.OK, "ok", hospitalList);
}
......@@ -44,7 +44,7 @@ public ApiResponse<List<HospitalResponse>> GetHospitalList([FromBody]ApiRequest
[HttpPost]
public ApiResponse<HospitalResponse> Insert([CustomizeValidator(RuleSet = "Insert"), FromBody]HospitalRequest request)
{
var userid = _claim.At(request.Token).UserID;
var userid = _claim.GetUserId();
var hospital = _hospitalService.Insert(request, userid);
_hospitalService.InsertUserHospital(userid, hospital.HosID);
return new ApiResponse<HospitalResponse>(ResponseType.OK, hospital);
......@@ -68,7 +68,7 @@ public ApiResponse<HospitalResponse> Update([CustomizeValidator(RuleSet = "Updat
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Disable]
[ApiDisable]
[Route("delete")]
[HttpPost]
public ApiResponse Delete([CustomizeValidator(RuleSet = "Delete"), FromBody]HospitalRequest request)
......
......@@ -32,9 +32,9 @@ public MenuController(MenuService menuService, ClaimService claimService)
/// <returns></returns>
[Route("menulist")]
[HttpPost]
public ApiResponse<List<MenuResponse>> MenuList([FromBody]ApiRequest request)
public ApiResponse<List<MenuResponse>> MenuList()
{
var menuList = _menuService.GetMenuList(_claim.At(request.Token).UserID);
var menuList = _menuService.GetMenuList(_claim.GetUserId());
return new ApiResponse<List<MenuResponse>>(ResponseType.OK, menuList);
}
}
......
......@@ -45,7 +45,7 @@ public ApiResponse Extract([CustomizeValidator(RuleSet = "Query"), FromBody]ModM
/// <returns></returns>
[Route("type")]
[HttpPost]
public ApiResponse FeeType([FromBody]ApiRequest request)
public ApiResponse FeeType()
{
var list = modExtractService.FeeType();
return new ApiResponse(ResponseType.OK, list);
......@@ -153,6 +153,7 @@ public ApiResponse AddItem([FromBody]ItemListRequest request)
[HttpPost]
public ApiResponse Items([FromBody]ModItemRequest request)
{
LogHelper.Information(url.HttpPost + "/modextract/items", "请求地址");
HttpHelper.HttpPost(url.HttpPost + "/modextract/items", JsonHelper.Serialize(request), true);
var list = modExtractService.Items(request.ModuleId.Value);
return new ApiResponse(ResponseType.OK, list);
......
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Performance.DtoModels;
using System;
using System.Collections.Generic;
......@@ -12,6 +13,7 @@ public class NotFoundController : ControllerBase
{
[Route("error/404")]
[HttpGet]
[AllowAnonymous]
public ActionResult<ApiResponse> Get()
{
return new ApiResponse(ResponseType.NotFound, "not found");
......
......@@ -25,6 +25,7 @@ public ReportController(ReportService reportService, ClaimService claimService)
/// </summary>
/// <returns></returns>
[Route("survey")]
[HttpPost]
public ApiResponse Survey([CustomizeValidator(RuleSet = "Query"), FromBody]ReportRequest request)
{
var result = reportService.Survey(request.HospitalId);
......@@ -36,6 +37,7 @@ public ApiResponse Survey([CustomizeValidator(RuleSet = "Query"), FromBody]Repor
/// </summary>
/// <returns></returns>
[Route("doctoravg")]
[HttpPost]
public ApiResponse DoctorAvg([CustomizeValidator(RuleSet = "Query"), FromBody]ReportRequest request)
{
var result = reportService.DoctorAvg(request.HospitalId, request.IsIndex);
......@@ -47,6 +49,7 @@ public ApiResponse DoctorAvg([CustomizeValidator(RuleSet = "Query"), FromBody]Re
/// </summary>
/// <returns></returns>
[Route("nurseavg")]
[HttpPost]
public ApiResponse NurseAvg([CustomizeValidator(RuleSet = "Query"), FromBody]ReportRequest request)
{
var result = reportService.NurseAvg(request.HospitalId, request.IsIndex);
......@@ -58,6 +61,7 @@ public ApiResponse NurseAvg([CustomizeValidator(RuleSet = "Query"), FromBody]Rep
/// </summary>
/// <returns></returns>
[Route("outfeeavg")]
[HttpPost]
public ApiResponse OutFeeAvg([CustomizeValidator(RuleSet = "Query"), FromBody]ReportRequest request)
{
var list = reportService.OutFeeAvg(request.HospitalId);
......@@ -69,6 +73,7 @@ public ApiResponse OutFeeAvg([CustomizeValidator(RuleSet = "Query"), FromBody]Re
/// </summary>
/// <returns></returns>
[Route("inpatfeeavg")]
[HttpPost]
public ApiResponse InpatFeeAvg([CustomizeValidator(RuleSet = "Query"), FromBody]ReportRequest request)
{
var list = reportService.InpatFeeAvg(request.HospitalId);
......@@ -80,6 +85,7 @@ public ApiResponse InpatFeeAvg([CustomizeValidator(RuleSet = "Query"), FromBody]
/// </summary>
/// <returns></returns>
[Route("medicine")]
[HttpPost]
public ApiResponse Medicine([CustomizeValidator(RuleSet = "Query"), FromBody]ReportRequest request)
{
var list = reportService.Medicine(request.HospitalId, request.IsIndex);
......@@ -91,6 +97,7 @@ public ApiResponse Medicine([CustomizeValidator(RuleSet = "Query"), FromBody]Rep
/// </summary>
/// <returns></returns>
[Route("income")]
[HttpPost]
public ApiResponse Income([CustomizeValidator(RuleSet = "Query"), FromBody]ReportRequest request)
{
var list = reportService.Income(request.HospitalId, request.IsIndex);
......
using FluentValidation.AspNetCore;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Performance.DtoModels;
using Performance.DtoModels.Request;
......@@ -29,7 +30,7 @@ public SmsController(SmsService smsService)
/// <returns></returns>
[Route("code")]
[HttpPost]
[NoVerify]
[AllowAnonymous]
public ApiResponse Code([FromBody]SmsCodeRequest request)
{
if (!_smsService.SendCode(request.Type, request.Mobile))
......@@ -44,7 +45,7 @@ public ApiResponse Code([FromBody]SmsCodeRequest request)
/// <returns></returns>
[Route("check")]
[HttpPost]
[NoVerify]
[AllowAnonymous]
public ApiResponse Check([CustomizeValidator(RuleSet = "SmsCheck")][FromBody]SmsCodeRequest request)
{
if (!_smsService.Check(request.Mobile, request.Code))
......
using FluentValidation.AspNetCore;
using Hangfire;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Internal;
......@@ -25,7 +26,7 @@ public class TemplateController : Controller
private readonly TemplateService templateService;
private readonly ExtractService extractService;
private HospitalService hospitalService;
private IHostingEnvironment evn;
private IHostingEnvironment env;
private ClaimService claim;
private Application application;
private WebapiUrl url;
......@@ -35,7 +36,7 @@ public class TemplateController : Controller
public TemplateController(TemplateService templateService,
HospitalService hospitalService,
ExtractService extractService,
IHostingEnvironment evn,
IHostingEnvironment env,
ClaimService claim,
IOptions<Application> options,
IOptions<WebapiUrl> url,
......@@ -45,7 +46,7 @@ public class TemplateController : Controller
this.templateService = templateService;
this.extractService = extractService;
this.hospitalService = hospitalService;
this.evn = evn;
this.env = env;
this.claim = claim;
this.application = options.Value;
this.url = url.Value;
......@@ -54,6 +55,30 @@ public class TemplateController : Controller
}
/// <summary>
/// 从WebAPI下载模板
/// </summary>
/// <returns></returns>
[Route("downtemplate")]
[HttpGet]
[AllowAnonymous]
public IActionResult DownFile(int type = 1)
{
string path = (type == 1)
? Path.Combine(env.ContentRootPath, "Template", "医院绩效模板.xlsx")
: Path.Combine(env.ContentRootPath, "Template", "医院二次分配绩效模板.xlsx");
var memoryStream = new MemoryStream();
using (var stream = new FileStream(path, FileMode.Open))
{
stream.CopyToAsync(memoryStream).Wait();
}
memoryStream.Seek(0, SeekOrigin.Begin);
var provider = new FileExtensionContentTypeProvider();
var memi = provider.Mappings[".xlsx"];
return File(memoryStream, memi, Path.GetFileName(path));
}
/// <summary>
/// 上传文件
/// </summary>
/// <param name="form"></param>
......@@ -62,7 +87,7 @@ public class TemplateController : Controller
[HttpPost]
public ApiResponse Import([FromForm] IFormCollection form)
{
var user = claim.At(form.ToDictionary().GetValue("token", ""));
var userId = claim.GetUserId();
var hospitalid = form.ToDictionary().GetValue("hospitalid", 0);
if (hospitalid <= 0)
return new ApiResponse(ResponseType.Fail, "参数错误", "hospitalid无效");
......@@ -77,7 +102,7 @@ public ApiResponse Import([FromForm] IFormCollection form)
var name = FileHelper.GetFileNameNoExtension(file.FileName) + DateTime.Now.ToString("yyyyMMddHHmmssfff");
var ext = FileHelper.GetExtension(file.FileName);
var dpath = Path.Combine(evn.ContentRootPath, "Files", $"{hospitalid}", "first");
var dpath = Path.Combine(env.ContentRootPath, "Files", $"{hospitalid}", "first");
FileHelper.CreateDirectory(dpath);
var path = Path.Combine(dpath, $"{name}{ext}");
......@@ -91,7 +116,7 @@ public ApiResponse Import([FromForm] IFormCollection form)
var template = new per_first
{
HospitalId = hospitalid,
CreateUser = user.UserID,
CreateUser = userId,
CreateDate = DateTime.Now,
Path = path,
UploadDate = DateTime.Now,
......@@ -127,7 +152,7 @@ public ApiResponse ExtractData([CustomizeValidator(RuleSet = "Template"), FromBo
if (hospital == null)
return new ApiResponse(ResponseType.Fail, "医院无效");
var user = claim.At(request.Token);
var email = claim.GetUserClaim(JwtClaimTypes.Mail);
allot.IsExtracting = 1;
allotService.Update(allot);
string path = extractService.GetFilepath(hospital.ID, out int type);
......@@ -145,7 +170,7 @@ public ApiResponse ExtractData([CustomizeValidator(RuleSet = "Template"), FromBo
{
id = request.ID,
hospitalId = hospital.ID,
mail = user.Mail,
mail = email,
path = path
});
......@@ -171,7 +196,8 @@ public ApiResponse ExtractData([CustomizeValidator(RuleSet = "Template"), FromBo
/// </summary>
/// <returns></returns>
[Route("down")]
[NoVerify]
[AllowAnonymous]
[HttpGet]
public IActionResult DownFile([FromQuery]AllotRequest request)
{
var allot = allotService.GetAllot(request.ID);
......@@ -196,10 +222,12 @@ public IActionResult DownFile([FromQuery]AllotRequest request)
/// 保存提取文件
/// </summary>
/// <param name="form"></param>
/// <param name="allotId"></param>
/// <param name="hospitalId"></param>
/// <returns></returns>
[Route("savefile")]
[HttpPost]
[NoVerify]
[AllowAnonymous]
public ApiResponse SaveFile([FromForm] IFormCollection form, int allotId, int hospitalId)
{
logger.LogInformation($"保存提取文件 参数:allotId:{allotId} hospitalId:{hospitalId}");
......@@ -209,7 +237,7 @@ public ApiResponse SaveFile([FromForm] IFormCollection form, int allotId, int ho
if (file == null)
return new ApiResponse(ResponseType.Error, "上传文件无效");
var dpath = Path.Combine(evn.ContentRootPath, "Files", $"{hospitalId}", "autoextract");
var dpath = Path.Combine(env.ContentRootPath, "Files", $"{hospitalId}", "autoextract");
FileHelper.CreateDirectory(dpath);
var path = Path.Combine(dpath, FileHelper.GetFileName(file.FileName));
......
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
......@@ -12,7 +13,7 @@ public class ValuesController : ControllerBase
{
// GET api/values
[HttpGet]
[NoVerify]
[AllowAnonymous]
public ActionResult<IEnumerable<string>> Get()
{
//var excel = _excelService.Analyze(@"C:\Users\ry\Desktop\文件\测试.xlsx");
......@@ -21,7 +22,7 @@ public ActionResult<IEnumerable<string>> Get()
// GET api/values/5
[HttpGet("{id}")]
[NoVerify]
[AllowAnonymous]
public ActionResult<string> Getid(int id)
{
return "value";
......
......@@ -33,37 +33,20 @@ public ActionsFilter(ILoggerFactory factory, IMemoryCache cache, IHostingEnviron
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
var request = context.HttpContext.Request;
//记录Request请求
var authorization = context.HttpContext.Request.Headers["Authorization"];
var req = new { request.Path, request.Method, context.ActionArguments, Token = authorization.Count > 0 ? authorization.First() : "" };
_logger.LogInformation($"请求内容 {JsonHelper.Serialize(req)}");
//启用body倒带功能
request.EnableRewind();
//记录Request请求
var kv = GetRequestContent(request);
_logger.LogInformation($"请求内容 {request.Method}:{JsonHelper.Serialize(kv)}");
LogHelper.Information($"请求地址:{context.HttpContext.Request.Path};请求参数:{JsonHelper.Serialize(kv)}", "请求内容");
//接口禁用
var disable = ((ControllerActionDescriptor)context.ActionDescriptor).MethodInfo.GetCustomAttributes(typeof(DisableAttribute), true);
if (disable.Length > 0)
if (context.Filters.Any(item => item is ApiDisableAttribute))
{
var response = new ApiResponse(ResponseType.Disable, "接口已禁用");
context.Result = new ObjectResult(response);
return;
}
//token验证
if (!_env.IsDevelopment())
{
var arry = ((ControllerActionDescriptor)context.ActionDescriptor).MethodInfo.GetCustomAttributes(typeof(NoVerifyAttribute), true);
if (arry.Length == 0)
{
var token = kv.GetValue("token", "");
var user = _cache.Get<UserIdentity>(token);
if (string.IsNullOrEmpty(token) || user == null || !user.Token.Equals(token))
{
var response = new ApiResponse(ResponseType.TokenError, "Token无效");
context.Result = new ObjectResult(response);
return;
}
}
}
//验证请求参数
if (!context.ModelState.IsValid)
{
......@@ -76,6 +59,7 @@ public ActionsFilter(ILoggerFactory factory, IMemoryCache cache, IHostingEnviron
_logger.LogInformation($"响应结果:{jsonData}");
LogHelper.Information($"请求地址:{context.HttpContext.Request.Path};响应结果:{jsonData}", "响应结果");
}
//记录response结果
else
{
......@@ -93,58 +77,8 @@ public ActionsFilter(ILoggerFactory factory, IMemoryCache cache, IHostingEnviron
}
}
}
/// <summary>
/// 读取请求内容
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
private SortedDictionary<string, object> GetRequestContent(HttpRequest request)
{
if (request.Method.Equals("POST"))
{
if (request.Body.CanSeek)
{
var types = request.ContentType.Split(';');
if (types.Contains("application/json"))
{
using (var stream = request.Body)
{
stream.Position = 0;
var reader = new StreamReader(stream, Encoding.UTF8);
var requestContext = reader.ReadToEnd();
return JsonHelper.DeserializeLower(requestContext);
}
}
else if (types.Contains("application/x-www-form-urlencoded") || types.Contains("multipart/form-data"))
{
return request.Form.ToDictionary();
}
else if (types.Contains("text/xml"))
{
//暂不处理
}
}
}
else
{
if (request.Query.Count > 0)
{
var kv = new SortedDictionary<string, object>();
foreach (var item in request.Query)
{
kv.Add(item.Key, item.Value);
}
return kv;
}
}
return new SortedDictionary<string, object>();
}
}
[AttributeUsage(AttributeTargets.Method)]
public class NoVerifyAttribute : Attribute { }
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public class DisableAttribute : Attribute { }
public class ApiDisableAttribute : Attribute, IFilterMetadata { }
}
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Authorization;
using Microsoft.AspNetCore.Mvc.Filters;
using Performance.DtoModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
namespace Performance.Api
{
public class AuthenticationFilter : IAsyncAuthorizationFilter
{
private readonly ClaimService claimService;
public AuthenticationFilter(ClaimService claimService)
{
this.claimService = claimService;
}
public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
if (context.Filters.Any(item => item is IAllowAnonymousFilter))
return;
var headers = context.HttpContext.Request.Headers;
var authorization = headers["Authorization"];
if (authorization.Count == 0 || string.IsNullOrEmpty(authorization.First()))
{
var response = new ApiResponse(ResponseType.TokenError, "Token无效");
context.Result = new ObjectResult(response);
return;
}
// 获取token字符串
var token = authorization.First().Replace("Bearer ", "");
// jwt是否被禁用
if (!claimService.JwtUsable(token))
{
var response = new ApiResponse(ResponseType.TokenError, "当前请求Token已被禁用");
context.Result = new ObjectResult(response);
return;
}
// 调用此方法,根据token生成对应的"身份证持有人"
var principal = await AuthenticateJwtToken(token);
if (principal == null)
{
var response = new ApiResponse(ResponseType.TokenError, "Token无效");
context.Result = new ObjectResult(response);
}
else
{
context.HttpContext.User = principal; // 设置身份验证的主体
}
}
private Task<ClaimsPrincipal> AuthenticateJwtToken(string token)
{
if (ValidateToken(token, out Claim[] claims))
{
var infos = new ClaimsIdentity(claims, "Jwt");
ClaimsPrincipal user = new ClaimsPrincipal(infos);
return Task.FromResult(user);
}
return Task.FromResult<ClaimsPrincipal>(null);
}
private bool ValidateToken(string token, out Claim[] claims)
{
// 调用自定义的GetPrincipal获取Token的信息对象
var simplePrinciple = JwtTokenHelper.GetPrincipal(token);
// 获取主声明标识
var identity = simplePrinciple?.Identity as ClaimsIdentity;
claims = new Claim[] { };
if (identity == null)
return false;
if (identity.Claims != null && identity.Claims.Any())
claims = identity.Claims.ToArray();
return identity.IsAuthenticated;
}
}
}
......@@ -5,10 +5,20 @@
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<OutputPath />
<DocumentationFile>..\Performance.Api\wwwroot\Performance.Api.xml</DocumentationFile>
<NoWarn>1701;1702;1591</NoWarn>
</PropertyGroup>
<ItemGroup>
<Compile Remove="aaa\**" />
<Compile Remove="Files\**" />
<Content Remove="aaa\**" />
<Content Remove="Files\**" />
<EmbeddedResource Remove="aaa\**" />
<EmbeddedResource Remove="Files\**" />
<None Remove="aaa\**" />
<None Remove="Files\**" />
</ItemGroup>
......@@ -45,6 +55,24 @@
<Content Update="nlog.config">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\Performance.Api.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\Performance.DtoModels.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\Performance.EntityModels.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<None Update="Template\医院二次分配绩效模板.xlsx">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Template\医院绩效模板.xlsx">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<ProjectExtensions><VisualStudio><UserProperties appsettings_1json__JSONSchema="" /></VisualStudio></ProjectExtensions>
......
......@@ -12,16 +12,20 @@
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "api/values",
"launchUrl": "index.html",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
//"ASPNETCORE_ENVIRONMENT": "Development"
//"ASPNETCORE_ENVIRONMENT": "Production"
"ASPNETCORE_ENVIRONMENT": "Localhost"
}
},
"Performance.Api": {
"commandName": "Project",
"launchUrl": "api/values",
"launchUrl": "index.html",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
//"ASPNETCORE_ENVIRONMENT": "Development"
//"ASPNETCORE_ENVIRONMENT": "Production"
"ASPNETCORE_ENVIRONMENT": "Localhost"
},
"applicationUrl": "http://localhost:5001"
}
......
......@@ -26,6 +26,7 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Reflection;
......@@ -66,6 +67,7 @@ public void ConfigureServices(IServiceCollection services)
//筛选器配置
.AddMvc(option =>
{
option.Filters.Add<AuthenticationFilter>();
option.Filters.Add<ActionsFilter>();
option.Filters.Add<ExceptionsFilter>();
})
......@@ -108,12 +110,6 @@ public void ConfigureServices(IServiceCollection services)
.AddPerformanceRepoitory();
#endregion
#region swagger
//services.AddSwaggerGen(c =>
//{
// c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
//});
#endregion
#region custom util
......@@ -157,6 +153,41 @@ public void ConfigureServices(IServiceCollection services)
options.UseMySQL(connection.Value.PerformanceConnectionString);
});
#endregion
#region swagger
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Version = "v1.0", Title = "食管癌随访API接口" });
var xmlPath = new string[]
{
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwwroot", "Performance.Api.xml"),
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwwroot", "Performance.DtoModels.xml"),
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwwroot", "Performance.EntityModels.xml"),
};
var xmlPathsss = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwwroot", "Performance.Api.xml");
c.IncludeXmlComments(xmlPathsss, true);
//foreach (var item in xmlPath)
//{
// c.IncludeXmlComments(item, true);
//}
#region Token绑定到ConfigureServices
var security = new Dictionary<string, IEnumerable<string>> { { "Performance API", new string[] { } }, };
c.AddSecurityRequirement(security);
c.AddSecurityDefinition("Performance API", new ApiKeyScheme
{
Description = "JWT授权(数据将在请求头中进行传输) 直接在下框中输入Bearer {token}(注意两者之间是一个空格)",
Name = "Authorization",
In = "HEADER"
});
#endregion
});
#endregion
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
......@@ -171,16 +202,16 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerF
{
app.UseStatusCodePagesWithReExecute("/error/{0}");
}
//// Enable middleware to serve generated Swagger as a JSON endpoint.
//app.UseSwagger();
//// Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
//// specifying the Swagger JSON endpoint.
//app.UseSwaggerUI(c =>
//{
// c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
// c.RoutePrefix = string.Empty;
//});
#region Swagger
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint(Configuration["Application:SwaggerEndpoint"], "v1.0");
//c.SwaggerEndpoint("/swagger/v1/swagger.json", "v1.0");
c.RoutePrefix = "";
});
#endregion
#region hangfire
......
using Microsoft.Extensions.Caching.Memory;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Caching.Memory;
using Performance.DtoModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
namespace Performance.Api
{
public class ClaimService
{
IMemoryCache _memoryCache;
public ClaimService(IMemoryCache memoryCache)
private readonly IHttpContextAccessor contextAccessor;
private readonly IMemoryCache memoryCache;
public ClaimService(IHttpContextAccessor contextAccessor, IMemoryCache memoryCache)
{
this.contextAccessor = contextAccessor;
this.memoryCache = memoryCache;
}
/// <summary>
/// 获取当前请求登录ID
/// </summary>
/// <returns></returns>
public int GetUserId()
{
var claim = GetUserClaim().FirstOrDefault(t => t.Type == JwtClaimTypes.Id);
if (claim == null)
{
throw new PerformanceTokenErrorException("获取当前登录用户ID失败");
}
return Convert.ToInt32(claim.Value);
}
/// <summary>
/// 获取当前请求登录ID
/// </summary>
/// <returns></returns>
public string GetUserClaim(string jwtClaimTypes)
{
var claim = GetUserClaim().FirstOrDefault(t => t.Type == jwtClaimTypes);
if (claim == null)
{
throw new PerformanceTokenErrorException("获取当前登录用户ID失败");
}
return claim.Value;
}
/// <summary>
/// 获取当前请求所有身份信息
/// </summary>
/// <returns></returns>
public List<Claim> GetUserClaim()
{
if (contextAccessor.HttpContext.User == null)
{
throw new PerformanceException("获取当前请求登录信息失败");
}
return contextAccessor.HttpContext.User.Claims.ToList();
}
/// <summary>
/// 获取当前请求Jwt Token
/// </summary>
/// <returns></returns>
public string GetJwtToken()
{
var authorization = contextAccessor.HttpContext.Request.Headers["Authorization"];
if (authorization.Count == 0 || string.IsNullOrEmpty(authorization.First()))
{
throw new PerformanceException("获取当前请求Authorization失败");
}
return authorization.First().Replace("Bearer ", "");
}
/// <summary>
/// 设置jwt进入黑名单
/// </summary>
/// <param name="token"></param>
/// <returns></returns>
public bool SetJwtBlacklist(string token)
{
_memoryCache = memoryCache;
memoryCache.Set(token, DateTime.Now);
return true;
}
public UserIdentity At(ApiRequest request)
/// <summary>
/// 判断当前请求JWT是否可用 可用true
/// </summary>
/// <returns></returns>
public bool JwtUsable()
{
return At(request.Token);
string token = GetJwtToken();
return JwtUsable(token);
}
public UserIdentity At(string token)
/// <summary>
/// 判断当前请求JWT是否可用 可用true
/// </summary>
/// <param name="token"></param>
/// <returns></returns>
public bool JwtUsable(string token)
{
if (string.IsNullOrEmpty(token))
throw new PerformanceTokenErrorException("token is not null");
var user = _memoryCache.Get<UserIdentity>(token);
if (user == null)
throw new PerformanceTokenErrorException("当前用户未登录");
return user;
var @object = memoryCache.Get(token);
return @object == null;
}
}
}
using Microsoft.IdentityModel.Tokens;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.IO;
using System.Linq;
using System.Security.Claims;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace Performance.Api
{
public class JwtTokenHelper
{
private static byte[] secret = Encoding.ASCII.GetBytes(Consts.Secret);
public static JwtToken GenerateToken(Claim[] claims, int expiresMinute)
{
var authTime = DateTime.UtcNow;
var expiresAt = authTime.AddMinutes(expiresMinute);
var tokenDescriptor = new SecurityTokenDescriptor
{
Audience = Consts.Audience,
Issuer = Consts.Issuer,
Subject = new ClaimsIdentity(claims),
Expires = expiresAt,
SigningCredentials = new SigningCredentials(
new SymmetricSecurityKey(secret), SecurityAlgorithms.HmacSha256Signature)
};
var tokenHandler = new JwtSecurityTokenHandler();
var token = tokenHandler.CreateToken(tokenDescriptor);
var tokenString = tokenHandler.WriteToken(token);
return new JwtToken
{
access_token = tokenString,
token_type = "Bearer",
auth_time = new DateTimeOffset(authTime).ToUnixTimeSeconds(),
expires_at = new DateTimeOffset(expiresAt).ToUnixTimeSeconds()
};
}
public static ClaimsPrincipal GetPrincipal(string token)
{
try
{
// 创建一个JwtSecurityTokenHandler类,用来后续操作
var tokenHandler = new JwtSecurityTokenHandler();
// 将字符串token解码成token对象
var jwtToken = tokenHandler.ReadToken(token) as JwtSecurityToken;
if (jwtToken == null) return null;
// 生成验证token的参数
var validationParameters = new TokenValidationParameters()
{
RequireExpirationTime = true,
ValidateIssuer = true,
ValidateAudience = true,
ValidAudience = Consts.Audience,
ValidIssuer = Consts.Issuer,
IssuerSigningKey = new SymmetricSecurityKey(secret)
};
var principal = tokenHandler.ValidateToken(token, validationParameters, out SecurityToken securityToken);
// 返回秘钥的主体对象,包含秘钥的所有相关信息
return principal;
}
catch (Exception ex)
{
return null;
}
}
}
public class JwtToken
{
/// <summary>
/// access token
/// </summary>
public string access_token { get; set; }
/// <summary>
/// token type
/// </summary>
public string token_type { get; set; }
/// <summary>
/// 授权时间
/// </summary>
public long auth_time { get; set; }
/// <summary>
/// 过期时间
/// </summary>
public long expires_at { get; set; }
}
public static class JwtClaimTypes
{
public const string Id = "id";
public const string Login = "login";
public const string RealName = "realname";
public const string Mail = "mail";
public const string AppName = "appname";
public const string Device = "device";
public const string Department = "department";
}
public static class Consts
{
public const string Secret = "DH4neb6Aipe1ortdalusvo8iosQiBIYupLNPTu3j40PZ9tBbLrPD4mAmDVsB7nZw";
public const string Issuer = "suvalue";
public const string Audience = "jixiao.suvalue.com";
}
}
......@@ -13,7 +13,7 @@
},
"Application": {
//登录过期时间
"ExpirationMinutes": "420",
"ExpirationMinutes": "120",
//验证码过期
"SmsCodeMinutes": "5",
//护士长二次绩效管理员
......
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
},
"AppConnection": {
"PerformanceConnectionString": "server=192.168.18.166;database=db_performance;uid=root;pwd=1234qwer;pooling=true;charset=utf8;convert zero datetime=true;port=3306;connection timeout=120;max pool size=512;allow user variables=true;",
"HangfireConnectionString": "server=192.168.18.166;database=db_hangfire;uid=root;pwd=1234qwer;port=3306;allow user variables=true;",
"RedisConnectionString": "116.62.245.55:6379,defaultDatabase=2"
},
"Application": {
//登录过期时间
"ExpirationMinutes": "120",
//验证码过期
"SmsCodeMinutes": "5",
//护士长二次绩效管理员
"NurseRole": "3",
//科主任二次绩效管理员
"DirectorRole": "4",
"AbsolutePath": "E:\\wwwroot\\testjx.suvalue.com",
"HttpPath": "http://testjx.suvalue.com:81",
"SwaggerEndpoint": "/swagger/v1/swagger.json"
},
"WebapiUrl": {
"ImportFirst": "http://localhost:50997/api/extract/import",
"ExtractData": "http://localhost:50997/api/extract/index",
"ImportFile": ""
}
}
......@@ -36,7 +36,8 @@
//邮件指定接收人
"Receiver": [ "chengxiang.li@suvalue.com", "486035085@qq.com" ],
"AbsolutePath": "E:\\wwwroot\\testjx.suvalue.com",
"HttpPath": "http://testjx.suvalue.com:81"
"HttpPath": "http://testjx.suvalue.com:81",
"SwaggerEndpoint": "/api/swagger/v1/swagger.json"
},
"WebapiUrl": {
"ImportFirst": "http://localhost:50997/api/extract/import",
......
......@@ -6,27 +6,27 @@
namespace Performance.DtoModels
{
public class ApiRequest
{
/// <summary>
/// 登录后返回登录令牌
/// </summary>
public string Token { get; set; }
/// <summary>
/// 版本号 v1
/// </summary>
public string Version { get; set; }
/// <summary>
/// 设备号 1 苹果 2 安卓 3 网页
/// </summary>
public string Device { get; set; }
/// <summary>
/// App名称
/// </summary>
public string AppName { get; set; }
///// <summary>
///// 操作用户
///// </summary>
//public Nullable<int> ActiveUID { get; set; }
}
//public class ApiRequest
//{
// /// <summary>
// /// 登录后返回登录令牌
// /// </summary>
// public string Token { get; set; }
// /// <summary>
// /// 版本号 v1
// /// </summary>
// public string Version { get; set; }
// /// <summary>
// /// 设备号 1 苹果 2 安卓 3 网页
// /// </summary>
// public string Device { get; set; }
// /// <summary>
// /// App名称
// /// </summary>
// public string AppName { get; set; }
// ///// <summary>
// ///// 操作用户
// ///// </summary>
// //public Nullable<int> ActiveUID { get; set; }
//}
}
using AutoMapper;
using Performance.EntityModels;
using Performance.Infrastructure;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Performance.DtoModels.AutoMapper
......@@ -68,20 +70,66 @@ public AutoMapperConfigs()
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 : (src.UnitType == "护理组" ? 3 : 0))));
.ForMember(dest => dest.UnitType, opt => opt.MapFrom(src => EnumHelper.GetItems<UnitType>().FirstOrDefault(t => t.Name == src.UnitType).Value));
CreateMap<im_header, PerHeader>()
.ForMember(dest => dest.IsMerge, opt => opt.MapFrom(src => src.IsMerge == 1 ? true : false));
CreateMap<im_data, PerData>()
.ForMember(dest => dest.IsFactor, opt => opt.MapFrom(src => src.IsFactor == 1 ? true : false))
.ForMember(dest => dest.UnitType, opt => opt.MapFrom(src => src.UnitType == 1 ? "医生组" : (src.UnitType == 2 ? "护理组" : (src.UnitType == 3 ? "医技组" : ""))));
.ForMember(dest => dest.UnitType, opt => opt.MapFrom(src => EnumHelper.GetItems<UnitType>().FirstOrDefault(t => t.Value == src.UnitType).Name));
CreateMap<PerDataEmployee, im_employee>();
CreateMap<im_employee, PerDataEmployee>();
CreateMap<PerDataAccountBaisc, PerDataAccountDoctor>()
//CreateMap<PerDataAccountBaisc, PerDataAccount>()
// .ForMember(dest => dest.AccountingUnit, opt => opt.MapFrom(src => src.AccountingUnit))
// .ForMember(dest => dest.Department, opt => opt.MapFrom(src => src.Department))
// .ForMember(dest => dest.Number, opt => opt.MapFrom(src => src.Number))
// .ForMember(dest => dest.BasicFactor, opt => opt.MapFrom(src => src.BasicFactor))
// .ForMember(dest => dest.SlopeFactor, opt => opt.MapFrom(src => src.SlopeFactor))
// .ForMember(dest => dest.OtherPerfor1, opt => opt.MapFrom(src => src.OtherPerfor1))
// .ForMember(dest => dest.OtherPerfor2, opt => opt.MapFrom(src => src.OtherPerfor2))
// .ForMember(dest => dest.Extra, opt => opt.MapFrom(src => src.Extra))
// .ForMember(dest => dest.ScoringAverage, opt => opt.MapFrom(src => src.ScoringAverage))
// .ForMember(dest => dest.AdjustFactor, opt => opt.MapFrom(src => src.AdjustFactor));
//CreateMap<PerDataAccountBaisc, PerDataAccount>()
// .ForMember(dest => dest.AccountingUnit, opt => opt.MapFrom(src => src.AccountingUnit))
// .ForMember(dest => dest.Department, opt => opt.MapFrom(src => src.Department))
// .ForMember(dest => dest.Number, opt => opt.MapFrom(src => src.Number))
// .ForMember(dest => dest.BasicFactor, opt => opt.MapFrom(src => src.BasicFactor))
// .ForMember(dest => dest.SlopeFactor, opt => opt.MapFrom(src => src.SlopeFactor))
// .ForMember(dest => dest.OtherPerfor1, opt => opt.MapFrom(src => src.OtherPerfor1))
// .ForMember(dest => dest.OtherPerfor2, opt => opt.MapFrom(src => src.OtherPerfor2))
// .ForMember(dest => dest.Extra, opt => opt.MapFrom(src => src.Extra))
// .ForMember(dest => dest.ScoringAverage, opt => opt.MapFrom(src => src.ScoringAverage))
// .ForMember(dest => dest.AdjustFactor, opt => opt.MapFrom(src => src.AdjustFactor));
//CreateMap<PerDataAccountBaisc, im_accountbasic>();
//CreateMap<im_accountbasic, PerDataAccountBaisc>();
CreateMap<PerDataAccountBaisc, im_accountbasic>()
.ForMember(dest => dest.UnitType, opt => opt.MapFrom(src => src.UnitType))
.ForMember(dest => dest.DoctorAccountingUnit, opt => opt.MapFrom(src => src.AccountingUnit))
.ForMember(dest => dest.Department, opt => opt.MapFrom(src => src.Department))
.ForMember(dest => dest.DoctorDirectorNumber, opt => opt.MapFrom(src => src.ManagerNumber))
.ForMember(dest => dest.DoctorNumber, opt => opt.MapFrom(src => src.Number))
.ForMember(dest => dest.DoctorBasicFactor, opt => opt.MapFrom(src => src.BasicFactor))
.ForMember(dest => dest.DoctorSlopeFactor, opt => opt.MapFrom(src => src.SlopeFactor))
.ForMember(dest => dest.DoctorOtherPerfor1, opt => opt.MapFrom(src => src.OtherPerfor1))
.ForMember(dest => dest.DoctorOtherPerfor2, opt => opt.MapFrom(src => src.OtherPerfor2))
.ForMember(dest => dest.DoctorExtra, opt => opt.MapFrom(src => src.Extra))
.ForMember(dest => dest.DoctorScoringAverage, opt => opt.MapFrom(src => src.ScoringAverage))
.ForMember(dest => dest.DoctorAdjustFactor, opt => opt.MapFrom(src => src.AdjustFactor))
.ForMember(dest => dest.DoctorScale, opt => opt.MapFrom(src => src.Scale))
.ForMember(dest => dest.DoctorEffic, opt => opt.MapFrom(src => src.Effic))
.ForMember(dest => dest.DoctorGrant, opt => opt.MapFrom(src => src.Grant));
CreateMap<im_accountbasic, PerDataAccountBaisc>()
.ForMember(dest => dest.UnitType, opt => opt.MapFrom(src => src.UnitType))
.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))
.ForMember(dest => dest.Number, opt => opt.MapFrom(src => src.DoctorNumber))
.ForMember(dest => dest.BasicFactor, opt => opt.MapFrom(src => src.DoctorBasicFactor))
.ForMember(dest => dest.SlopeFactor, opt => opt.MapFrom(src => src.DoctorSlopeFactor))
......@@ -89,35 +137,26 @@ public AutoMapperConfigs()
.ForMember(dest => dest.OtherPerfor2, opt => opt.MapFrom(src => src.DoctorOtherPerfor2))
.ForMember(dest => dest.Extra, opt => opt.MapFrom(src => src.DoctorExtra))
.ForMember(dest => dest.ScoringAverage, opt => opt.MapFrom(src => src.DoctorScoringAverage))
.ForMember(dest => dest.AdjustFactor, opt => opt.MapFrom(src => src.DoctorAdjustFactor));
.ForMember(dest => dest.AdjustFactor, opt => opt.MapFrom(src => src.DoctorAdjustFactor))
.ForMember(dest => dest.Scale, opt => opt.MapFrom(src => src.DoctorScale))
.ForMember(dest => dest.Effic, opt => opt.MapFrom(src => src.DoctorEffic))
.ForMember(dest => dest.Grant, opt => opt.MapFrom(src => src.DoctorGrant));
CreateMap<PerDataAccountBaisc, PerDataAccountNurse>()
.ForMember(dest => dest.AccountingUnit, opt => opt.MapFrom(src => src.NurseAccountingUnit))
.ForMember(dest => dest.Department, opt => opt.MapFrom(src => src.Department))
.ForMember(dest => dest.Number, opt => opt.MapFrom(src => src.NurseNumber))
.ForMember(dest => dest.BasicFactor, opt => opt.MapFrom(src => src.NurseBasicFactor))
.ForMember(dest => dest.SlopeFactor, opt => opt.MapFrom(src => src.NurseSlopeFactor))
.ForMember(dest => dest.OtherPerfor1, opt => opt.MapFrom(src => src.NurseOtherPerfor1))
.ForMember(dest => dest.OtherPerfor2, opt => opt.MapFrom(src => src.NurseOtherPerfor2))
.ForMember(dest => dest.Extra, opt => opt.MapFrom(src => src.NurseExtra))
.ForMember(dest => dest.ScoringAverage, opt => opt.MapFrom(src => src.NurseScoringAverage))
.ForMember(dest => dest.AdjustFactor, opt => opt.MapFrom(src => src.NurseAdjustFactor));
CreateMap<PerDataAccountBaisc, im_accountbasic>();
CreateMap<im_accountbasic, PerDataAccountBaisc>();
CreateMap<PerDataSpecialUnit, im_specialunit>();
CreateMap<PerDataAccountDoctor, res_accountdoctor>();
CreateMap<res_accountdoctor, PerDataAccount>();
CreateMap<PerDataAccountNurse, res_accountnurse>();
CreateMap<res_accountnurse, PerDataAccount>();
CreateMap<res_accountdoctor, ComputeSource>();
CreateMap<res_accountnurse, ComputeSource>();
//CreateMap<PerDataAccountDoctor, res_accountdoctor>();
//CreateMap<PerDataAccountNurse, res_accountnurse>();
//CreateMap<res_accountdoctor, PerDataAccountBaisc>();
CreateMap<res_account, PerDataAccountBaisc>();
CreateMap<PerDataAccountBaisc, res_account>();
//CreateMap<PerDataAccountBaisc, res_accountnurse>();
//CreateMap<res_accountdoctor, ComputeSource>();
//CreateMap<res_accountnurse, ComputeSource>();
CreateMap<im_employee, ComputeEmployee>();
CreateMap<ComputeResult, res_compute>();
CreateMap<res_accountdoctor, DoctorResponse>();
CreateMap<res_accountnurse, NurseResponse>();
CreateMap<res_account, DoctorResponse>();
CreateMap<res_account, NurseResponse>();
//二次绩效
......
......@@ -17,9 +17,9 @@ public enum SmsCodeType
/// <summary> 用户状态 </summary>
public enum States
{
[Description("登录")]
[Description("启用")]
Enabled = 1,
[Description("其他")]
[Description("禁用")]
Disabled = 2,
}
......@@ -52,5 +52,8 @@ public enum AllotStates
/// <summary> 归档 </summary>
[Description("归档")]
Archive = 8,
/// <summary> 归档 </summary>
[Description("等待")]
Wait = 9,
}
}
......@@ -125,6 +125,8 @@ public class ComputeResult
/// </summary>
public decimal? Adjust { get; set; }
public string UnitType { get; set; }
///// <summary>
///// 工作量绩效
///// </summary>
......
using System;
using System.Collections.Generic;
using System.Text;
//using System;
//using System.Collections.Generic;
//using System.Text;
namespace Performance.DtoModels
{
public class ComputeSource
{
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
//namespace Performance.DtoModels
//{
// public class ComputeSource
// {
// /// <summary>
// /// 核算单元
// /// </summary>
// public string AccountingUnit { get; set; }
/// <summary>
/// 核算单元医生数量
/// </summary>
public Nullable<decimal> Number { get; set; }
// /// <summary>
// /// 核算单元医生数量
// /// </summary>
// public Nullable<decimal> Number { get; set; }
/// <summary>
/// 医生基础系数
/// </summary>
public Nullable<decimal> BasicFactor { get; set; }
// /// <summary>
// /// 医生基础系数
// /// </summary>
// public Nullable<decimal> BasicFactor { get; set; }
/// <summary>
/// 倾斜系数
/// </summary>
public Nullable<decimal> SlopeFactor { get; set; }
// /// <summary>
// /// 倾斜系数
// /// </summary>
// public Nullable<decimal> SlopeFactor { get; set; }
/// <summary>
/// 其他绩效1
/// </summary>
public Nullable<decimal> OtherPerfor1 { get; set; }
// /// <summary>
// /// 其他绩效1
// /// </summary>
// public Nullable<decimal> OtherPerfor1 { get; set; }
/// <summary>
/// 其他绩效2
/// </summary>
public Nullable<decimal> OtherPerfor2 { get; set; }
// /// <summary>
// /// 其他绩效2
// /// </summary>
// public Nullable<decimal> OtherPerfor2 { get; set; }
/// <summary>
/// 医院奖罚
/// </summary>
public Nullable<decimal> Extra { get; set; }
// /// <summary>
// /// 医院奖罚
// /// </summary>
// public Nullable<decimal> Extra { get; set; }
/// <summary>
/// 考核对分率
/// </summary>
public Nullable<decimal> ScoringAverage { get; set; }
// /// <summary>
// /// 考核对分率
// /// </summary>
// public Nullable<decimal> ScoringAverage { get; set; }
/// <summary>
/// 调节系数
/// </summary>
public Nullable<decimal> AdjustFactor { get; set; }
// /// <summary>
// /// 调节系数
// /// </summary>
// public Nullable<decimal> AdjustFactor { get; set; }
/// <summary>
/// 科室业绩
/// </summary>
public Nullable<decimal> Income { get; set; }
// /// <summary>
// /// 科室业绩
// /// </summary>
// public Nullable<decimal> Income { get; set; }
/// <summary>
/// 业绩绩效
/// </summary>
public Nullable<decimal> PerforFee { get; set; }
// /// <summary>
// /// 业绩绩效
// /// </summary>
// public Nullable<decimal> PerforFee { get; set; }
/// <summary>
/// 工作量绩效
/// </summary>
public Nullable<decimal> WorkloadFee { get; set; }
// /// <summary>
// /// 工作量绩效
// /// </summary>
// public Nullable<decimal> WorkloadFee { get; set; }
/// <summary>
/// 绩效合计
/// </summary>
public Nullable<decimal> PerforTotal { get; set; }
// /// <summary>
// /// 绩效合计
// /// </summary>
// public Nullable<decimal> PerforTotal { get; set; }
/// <summary>
/// 人均绩效
/// </summary>
public Nullable<decimal> Avg { get; set; }
// /// <summary>
// /// 人均绩效
// /// </summary>
// public Nullable<decimal> Avg { get; set; }
/// <summary>
/// 实发绩效
/// </summary>
public Nullable<decimal> GiveFee { get; set; }
}
}
// /// <summary>
// /// 实发绩效
// /// </summary>
// public Nullable<decimal> GiveFee { get; set; }
// }
//}
......@@ -11,6 +11,18 @@ public enum ExcelVersion
xls
}
/// <summary> 核算单元类型 </summary>
public enum UnitType
{
[Description("医生组")]
医生组 = 1,
[Description("护理组")]
护理组 = 2,
[Description("医技组")]
医技组 = 3,
}
public enum SheetType
{
/// <summary> 无法识别 </summary>
......@@ -59,58 +71,6 @@ public enum SheetType
}
/// <summary>
/// 绩效类型
/// </summary>
//public enum PerformanceType
//{
// /// <summary> </summary>
// [Description("")]
// Null = 0,
// /// <summary> 绩效基数临床科室主任(专门用来计算科主任绩效,由此产生=>>临床科室主任人均绩效)</summary>
// [Description("绩效基数临床科室主任")]
// StandardDirector = 1,
// /// <summary> 绩效基数临床科室副主任(专门用来计算科主任绩效,由此产生=>>临床科室副主任人均绩效) </summary>
// [Description("绩效基数临床科室副主任")]
// StandardDeputyDirector = 2,
// /// <summary> 绩效基数临床科室护士长(专门用来计算科主任绩效,由此产生=>>临床科室护士长人均绩效) </summary>
// [Description("绩效基数临床科室护士长")]
// StandardNurse = 3,
// /// <summary> 绩效基数医技科室主任(专门用来计算科主任绩效,由此产生=>>医技科室主任人均绩效) </summary>
// [Description("绩效基数医技科室主任")]
// StandardDirectorYJ = 14,
// /// <summary> 临床科室主任人均绩效 (绩效标准取 科室主任人均绩效) </summary>
// [Description("临床科室主任人均绩效")]
// ReferenceDirector = 4,
// /// <summary> 临床科室中层人均绩效 (绩效标准取 科室主任/护士长/科室副主任/医技主任 平均值) </summary>
// [Description("临床科室中层人均绩效")]
// ReferenceDirectorAvg = 5,
// /// <summary> 临床科室护士长人均绩效 (绩效标准取 护士长 平均值)</summary>
// [Description("临床科室护士长人均绩效")]
// ReferenceHeadNurse = 7,
// /// <summary> 临床科室副主任人均绩效 </summary>
// [Description("临床科室副主任人均绩效")]
// ReferenceDeputyDirector = 8,
// /// <summary> 临床科室医生人均绩效 </summary>
// [Description("临床科室医生人均绩效")]
// ReferenceDoctor = 9,
// /// <summary> 临床科室护士人均绩效 </summary>
// [Description("临床科室护士人均绩效")]
// ReferenceNurse = 10,
// /// <summary> 行政工勤人均绩效 </summary>
// [Description("行政工勤人均绩效")]
// LogisticsWorker = 11,
// /// <summary> 行政中层人均绩效 </summary>
// [Description("行政中层人均绩效")]
// MiddleManager = 12,
// /// <summary> 行政高层人均绩效 </summary>
// [Description("行政高层人均绩效")]
// TopManager = 13,
//}
/// <summary>
/// 核算单元类型
/// </summary>
public enum AccountUnitType
......@@ -119,11 +79,11 @@ public enum AccountUnitType
[Description("")]
Null = 1,
/// <summary> 临床科室 </summary>
[Description("临床科室")]
临床科室 = 2,
[Description("科主任")]
科主任 = 2,
/// <summary> 临床科室 </summary>
[Description("医技科室")]
医技科室 = 3,
[Description("护士长")]
护士长 = 3,
/// <summary> 行政高层 </summary>
[Description("行政高层")]
行政高层 = 4,
......@@ -165,16 +125,16 @@ public enum PerforType
医生护士平均,
}
/// <summary>
/// 当前枚举为效率绩效、规模绩效中系数中文名称
/// 对应表cof_director中JobTitle 全文字匹配
/// </summary>
public enum DirectorType
{
临床科室主任,
临床科室副主任,
医技科室主任,
医技科室副主任,
临床科室护士长,
}
///// <summary>
///// 当前枚举为效率绩效、规模绩效中系数中文名称
///// 对应表cof_director中JobTitle 全文字匹配
///// </summary>
//public enum DirectorType
//{
// 临床科室主任,
// 临床科室副主任,
// 医技科室主任,
// 医技科室副主任,
// 临床科室护士长,
//}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Performance.DtoModels
{
public class PerDataAccount : IPerData
{
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 科室
/// </summary>
public string Department { get; set; }
/// <summary>
/// 核算单元医生数量
/// </summary>
public Nullable<decimal> Number { get; set; }
/// <summary>
/// 医生基础系数
/// </summary>
public Nullable<decimal> BasicFactor { get; set; }
/// <summary>
/// 倾斜系数
/// </summary>
public Nullable<decimal> SlopeFactor { get; set; }
/// <summary>
/// 其他绩效1
/// </summary>
public Nullable<decimal> OtherPerfor1 { get; set; }
/// <summary>
/// 其他绩效2
/// </summary>
public Nullable<decimal> OtherPerfor2 { get; set; }
/// <summary>
/// 医院奖罚
/// </summary>
public Nullable<decimal> Extra { get; set; }
/// <summary>
/// 考核对分率
/// </summary>
public Nullable<decimal> ScoringAverage { get; set; }
/// <summary>
/// 调节系数
/// </summary>
public Nullable<decimal> AdjustFactor { get; set; }
/// <summary>
/// 科室业绩
/// </summary>
public Nullable<decimal> Income { get; set; }
/// <summary>
/// 业绩绩效
/// </summary>
public Nullable<decimal> PerforFee { get; set; }
/// <summary>
/// 工作量绩效
/// </summary>
public Nullable<decimal> WorkloadFee { get; set; }
/// <summary>
/// 绩效合计
/// </summary>
public Nullable<decimal> PerforTotal { get; set; }
/// <summary>
/// 人均绩效
/// </summary>
public Nullable<decimal> Avg { get; set; }
/// <summary>
/// 实发绩效
/// </summary>
public Nullable<decimal> RealGiveFee { get; set; }
}
}
//using System;
//using System.Collections.Generic;
//using System.Text;
//namespace Performance.DtoModels
//{
// public class PerDataAccount : IPerData
// {
// public int UnitType;
// /// <summary>
// /// 核算单元
// /// </summary>
// public string AccountingUnit { get; set; }
// /// <summary>
// /// 科室
// /// </summary>
// public string Department { get; set; }
// /// <summary>
// /// 核算单元医生数量
// /// </summary>
// public Nullable<decimal> Number { get; set; }
// /// <summary>
// /// 医生基础系数
// /// </summary>
// public Nullable<decimal> BasicFactor { get; set; }
// /// <summary>
// /// 倾斜系数
// /// </summary>
// public Nullable<decimal> SlopeFactor { get; set; }
// /// <summary>
// /// 其他绩效1
// /// </summary>
// public Nullable<decimal> OtherPerfor1 { get; set; }
// /// <summary>
// /// 其他绩效2
// /// </summary>
// public Nullable<decimal> OtherPerfor2 { get; set; }
// /// <summary>
// /// 医院奖罚
// /// </summary>
// public Nullable<decimal> Extra { get; set; }
// /// <summary>
// /// 考核对分率
// /// </summary>
// public Nullable<decimal> ScoringAverage { get; set; }
// /// <summary>
// /// 调节系数
// /// </summary>
// public Nullable<decimal> AdjustFactor { get; set; }
// /// <summary>
// /// 科室业绩
// /// </summary>
// public Nullable<decimal> Income { get; set; }
// /// <summary>
// /// 业绩绩效
// /// </summary>
// public Nullable<decimal> PerforFee { get; set; }
// /// <summary>
// /// 工作量绩效
// /// </summary>
// public Nullable<decimal> WorkloadFee { get; set; }
// /// <summary>
// /// 绩效合计
// /// </summary>
// public Nullable<decimal> PerforTotal { get; set; }
// /// <summary>
// /// 人均绩效
// /// </summary>
// public Nullable<decimal> Avg { get; set; }
// /// <summary>
// /// 实发绩效
// /// </summary>
// public Nullable<decimal> RealGiveFee { get; set; }
// }
//}
......@@ -6,21 +6,27 @@ namespace Performance.DtoModels
{
public class PerDataAccountBaisc : IPerData
{
/// <summary>
/// 行号
/// </summary>
public int RowNumber { get; set; }
/// <summary>
/// 核算单元类别 1 医生组 2护理组 3医技组
/// 备注
/// </summary>
public Nullable<int> UnitType { get; set; }
public string Remark { get; set; }
#region EXCEL读取
/// <summary>
/// 核算单元(医生组)
/// 核算单元类别 1 医生组 2护理组 3医技组
/// </summary>
public string DoctorAccountingUnit { get; set; }
public Nullable<int> UnitType { get; set; }
/// <summary>
/// 核算单元(护理组)
/// 核算单元
/// </summary>
public string NurseAccountingUnit { get; set; }
public string AccountingUnit { get; set; }
/// <summary>
/// 科室名称
......@@ -28,125 +34,99 @@ public class PerDataAccountBaisc : IPerData
public string Department { get; set; }
/// <summary>
/// 科主任数量
/// 科主任/护士长数量
/// </summary>
public decimal DoctorDirectorNumber { get; set; }
public decimal ManagerNumber { get; set; }
/// <summary>
/// 核算单元医生数量
/// </summary>
public decimal DoctorNumber { get; set; }
public decimal Number { get; set; }
/// <summary>
/// 医生基础系数
/// </summary>
public decimal DoctorBasicFactor { get; set; }
public decimal BasicFactor { get; set; }
/// <summary>
/// 倾斜系数
/// </summary>
public decimal DoctorSlopeFactor { get; set; }
public decimal SlopeFactor { get; set; }
/// <summary>
/// 其他绩效1
/// </summary>
public decimal DoctorOtherPerfor1 { get; set; }
public decimal OtherPerfor1 { get; set; }
/// <summary>
/// 其他绩效2
/// </summary>
public decimal DoctorOtherPerfor2 { get; set; }
public decimal OtherPerfor2 { get; set; }
/// <summary>
/// 医院奖罚
/// </summary>
public decimal DoctorExtra { get; set; }
public decimal Extra { get; set; }
/// <summary>
/// 考核对分率
/// </summary>
public decimal DoctorScoringAverage { get; set; }
/// <summary>
/// 调节系数
/// </summary>
public decimal DoctorAdjustFactor { get; set; }
public decimal ScoringAverage { get; set; }
/// <summary>
/// 护士长人数
/// </summary>
public decimal NurseHeadNumber { get; set; }
/// <summary>
/// 核算单元护士数量
/// 调节系数
/// </summary>
public decimal NurseNumber { get; set; }
public decimal AdjustFactor { get; set; }
/// <summary>
/// 护理基础系数
/// 规模绩效系数
/// </summary>
public decimal NurseBasicFactor { get; set; }
public decimal Scale { get; set; }
/// <summary>
/// 护理倾斜系数
/// 效率绩效系数
/// </summary>
public decimal NurseSlopeFactor { get; set; }
public decimal Effic { get; set; }
/// <summary>
/// 其他绩效1
/// 发放系数
/// </summary>
public decimal NurseOtherPerfor1 { get; set; }
public decimal Grant { get; set; }
#endregion
/// <summary>
/// 其他绩效2
/// </summary>
public decimal NurseOtherPerfor2 { get; set; }
/// <summary>
/// 医院奖罚
/// </summary>
public decimal NurseExtra { get; set; }
#region 由计算得出
/// <summary>
/// 考核对分率
/// 科室业绩
/// </summary>
public decimal NurseScoringAverage { get; set; }
/// <summary>
/// 调节系数
/// </summary>
public decimal NurseAdjustFactor { get; set; }
/// <summary>
/// 行号
/// </summary>
public int RowNumber { get; set; }
public Nullable<decimal> Income { get; set; }
/// <summary>
/// 规模绩效系数
/// 业绩绩效
/// </summary>
public Nullable<decimal> DoctorScale { get; set; }
public Nullable<decimal> PerforFee { get; set; }
/// <summary>
/// 效率绩效系数
/// 工作量绩效
/// </summary>
public Nullable<decimal> DoctorEffic { get; set; }
public Nullable<decimal> WorkloadFee { get; set; }
/// <summary>
/// 发放系数
/// 绩效合计
/// </summary>
public Nullable<decimal> DoctorGrant { get; set; }
public Nullable<decimal> PerforTotal { get; set; }
/// <summary>
/// 规模绩效系数
/// 人均绩效
/// </summary>
public Nullable<decimal> NurseScale { get; set; }
public Nullable<decimal> Avg { get; set; }
/// <summary>
/// 效率绩效系数
/// 实发绩效
/// </summary>
public Nullable<decimal> NurseEffic { get; set; }
public Nullable<decimal> RealGiveFee { get; set; }
/// <summary>
/// 发放系数
/// </summary>
public Nullable<decimal> NurseGrant { get; set; }
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Text;
//using System;
//using System.Collections.Generic;
//using System.Text;
namespace Performance.DtoModels
{
public class PerDataAccountDoctor : IPerData
{
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
//namespace Performance.DtoModels
//{
// public class PerDataAccountDoctor : IPerData
// {
// public int UnitType { get; set; }
// /// <summary>
// /// 核算单元
// /// </summary>
// public string AccountingUnit { get; set; }
/// <summary>
/// 科室名称
/// </summary>
public string Department { get; set; }
// /// <summary>
// /// 科室名称
// /// </summary>
// public string Department { get; set; }
/// <summary>
/// 核算单元医生数量
/// </summary>
public decimal Number { get; set; }
// /// <summary>
// /// 核算单元医生数量
// /// </summary>
// public decimal Number { get; set; }
/// <summary>
/// 医生基础系数
/// </summary>
public decimal BasicFactor { get; set; }
// /// <summary>
// /// 医生基础系数
// /// </summary>
// public decimal BasicFactor { get; set; }
/// <summary>
/// 倾斜系数
/// </summary>
public decimal SlopeFactor { get; set; }
// /// <summary>
// /// 倾斜系数
// /// </summary>
// public decimal SlopeFactor { get; set; }
/// <summary>
/// 其他绩效1
/// </summary>
public decimal OtherPerfor1 { get; set; }
// /// <summary>
// /// 其他绩效1
// /// </summary>
// public decimal OtherPerfor1 { get; set; }
/// <summary>
/// 其他绩效2
/// </summary>
public decimal OtherPerfor2 { get; set; }
// /// <summary>
// /// 其他绩效2
// /// </summary>
// public decimal OtherPerfor2 { get; set; }
/// <summary>
/// 医院奖罚
/// </summary>
public decimal Extra { get; set; }
// /// <summary>
// /// 医院奖罚
// /// </summary>
// public decimal Extra { get; set; }
/// <summary>
/// 考核对分率
/// </summary>
public decimal ScoringAverage { get; set; }
/// <summary>
/// 调节系数
/// </summary>
public decimal AdjustFactor { get; set; }
// /// <summary>
// /// 考核对分率
// /// </summary>
// public decimal ScoringAverage { get; set; }
// /// <summary>
// /// 调节系数
// /// </summary>
// public decimal AdjustFactor { get; set; }
/// <summary>
/// 科室业绩
/// </summary>
public decimal Income { get; set; }
// /// <summary>
// /// 科室业绩
// /// </summary>
// public decimal Income { get; set; }
/// <summary>
/// 工作量绩效
/// </summary>
public decimal WorkloadFee { get; set; }
// /// <summary>
// /// 工作量绩效
// /// </summary>
// public decimal WorkloadFee { get; set; }
/// <summary>
/// 绩效合计
/// </summary>
public decimal PerforTotal { get; set; }
// /// <summary>
// /// 绩效合计
// /// </summary>
// public decimal PerforTotal { get; set; }
/// <summary>
/// 业绩绩效
/// </summary>
public decimal PerforFee { get; set; }
/// <summary>
/// 实发绩效
/// </summary>
public decimal RealGiveFee { get; set; }
/// <summary>
/// 人均绩效
/// </summary>
public decimal Avg { get; set; }
}
}
// /// <summary>
// /// 业绩绩效
// /// </summary>
// public decimal PerforFee { get; set; }
// /// <summary>
// /// 实发绩效
// /// </summary>
// public decimal RealGiveFee { get; set; }
// /// <summary>
// /// 人均绩效
// /// </summary>
// public decimal Avg { get; set; }
// }
//}
using System;
using System.Collections.Generic;
using System.Text;
//using System;
//using System.Collections.Generic;
//using System.Text;
namespace Performance.DtoModels
{
public class PerDataAccountNurse : IPerData
{
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
//namespace Performance.DtoModels
//{
// public class PerDataAccountNurse : IPerData
// {
// public int UnitType { get; set; }
// /// <summary>
// /// 核算单元
// /// </summary>
// public string AccountingUnit { get; set; }
/// <summary>
/// 科室名称
/// </summary>
public string Department { get; set; }
// /// <summary>
// /// 科室名称
// /// </summary>
// public string Department { get; set; }
/// <summary>
/// 核算单元护士数量
/// </summary>
public decimal Number { get; set; }
// /// <summary>
// /// 核算单元护士数量
// /// </summary>
// public decimal Number { get; set; }
/// <summary>
/// 护理基础系数
/// </summary>
public decimal BasicFactor { get; set; }
// /// <summary>
// /// 护理基础系数
// /// </summary>
// public decimal BasicFactor { get; set; }
/// <summary>
/// 护理倾斜系数
/// </summary>
public decimal SlopeFactor { get; set; }
// /// <summary>
// /// 护理倾斜系数
// /// </summary>
// public decimal SlopeFactor { get; set; }
/// <summary>
/// 其他绩效1
/// </summary>
public decimal OtherPerfor1 { get; set; }
// /// <summary>
// /// 其他绩效1
// /// </summary>
// public decimal OtherPerfor1 { get; set; }
/// <summary>
/// 其他绩效2
/// </summary>
public decimal OtherPerfor2 { get; set; }
// /// <summary>
// /// 其他绩效2
// /// </summary>
// public decimal OtherPerfor2 { get; set; }
/// <summary>
/// 医院奖罚
/// </summary>
public decimal Extra { get; set; }
// /// <summary>
// /// 医院奖罚
// /// </summary>
// public decimal Extra { get; set; }
/// <summary>
/// 考核对分率
/// </summary>
public decimal ScoringAverage { get; set; }
/// <summary>
/// 调节系数
/// </summary>
public decimal AdjustFactor { get; set; }
// /// <summary>
// /// 考核对分率
// /// </summary>
// public decimal ScoringAverage { get; set; }
// /// <summary>
// /// 调节系数
// /// </summary>
// public decimal AdjustFactor { get; set; }
/// <summary>
/// 科室业绩
/// </summary>
public decimal Income { get; set; }
// /// <summary>
// /// 科室业绩
// /// </summary>
// public decimal Income { get; set; }
/// <summary>
/// 工作量绩效
/// </summary>
public decimal WorkloadFee { get; set; }
// /// <summary>
// /// 工作量绩效
// /// </summary>
// public decimal WorkloadFee { get; set; }
/// <summary>
/// 绩效合计
/// </summary>
public decimal PerforTotal { get; set; }
// /// <summary>
// /// 绩效合计
// /// </summary>
// public decimal PerforTotal { get; set; }
/// <summary>
/// 业绩绩效
/// </summary>
public decimal PerforFee { get; set; }
/// <summary>
/// 实发绩效
/// </summary>
public decimal RealGiveFee { get; set; }
// /// <summary>
// /// 业绩绩效
// /// </summary>
// public decimal PerforFee { get; set; }
// /// <summary>
// /// 实发绩效
// /// </summary>
// public decimal RealGiveFee { get; set; }
/// <summary>
/// 人均绩效
/// </summary>
public decimal Avg { get; set; }
}
}
// /// <summary>
// /// 人均绩效
// /// </summary>
// public decimal Avg { get; set; }
// }
//}
......@@ -4,6 +4,11 @@
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DocumentationFile>..\Performance.Api\wwwroot\Performance.DtoModels.xml</DocumentationFile>
<NoWarn>1701;1702;1591</NoWarn>
</PropertyGroup>
<ItemGroup>
<Compile Remove="PerExcel\PerComputeData.cs" />
</ItemGroup>
......
......@@ -8,7 +8,7 @@ namespace Performance.DtoModels
/// <summary>
/// 二次分配请求
/// </summary>
public class AgainAllotRequest : ApiRequest
public class AgainAllotRequest
{
/// <summary>
/// 二次分配ID
......
......@@ -5,7 +5,7 @@
namespace Performance.DtoModels
{
public class AllotRequest : ApiRequest
public class AllotRequest
{
public int ID { get; set; }
......
......@@ -5,7 +5,7 @@
namespace Performance.DtoModels
{
public class AssessColumnRequest : ApiRequest
public class AssessColumnRequest
{
public int ColumnID { get; set; }
public int AssessID { get; set; }
......
......@@ -5,7 +5,7 @@
namespace Performance.DtoModels
{
public class AssessDataRequest : ApiRequest
public class AssessDataRequest
{
public int AssessID { get; set; }
public List<AssessRow> AssessRow { get; set; }
......
......@@ -5,7 +5,7 @@
namespace Performance.DtoModels
{
public class AssessRequest : ApiRequest
public class AssessRequest
{
public int AssessID { get; set; }
public int AllotID { get; set; }
......
using System;
using FluentValidation;
using FluentValidation;
using System;
namespace Performance.DtoModels
{
public class CofAgainRequest: ApiRequest
public class CofAgainRequest
{
public int ID { get; set; }
......
......@@ -5,7 +5,7 @@
namespace Performance.DtoModels
{
public class ComputerRequest : ApiRequest
public class ComputerRequest
{
/// <summary>
/// 绩效数据id
......
......@@ -8,7 +8,7 @@ namespace Performance.DtoModels
/// <summary>
/// 查看科室绩效详情
/// </summary>
public class DeptDetailRequest : ApiRequest
public class DeptDetailRequest
{
/// <summary>
/// 绩效id
......
......@@ -5,7 +5,7 @@
namespace Performance.DtoModels
{
public class DirectorRequest : ApiRequest
public class DirectorRequest
{
public int ID { get; set; }
......
......@@ -5,7 +5,7 @@
namespace Performance.DtoModels
{
public class DrugpropRequest : ApiRequest
public class DrugpropRequest
{
public int ID { get; set; }
......
......@@ -8,7 +8,7 @@ namespace Performance.DtoModels
/// <summary>
/// 登录请求
/// </summary>
public class HospitalRequest : ApiRequest
public class HospitalRequest
{
public int ID { get; set; }
/// <summary>
......
......@@ -5,7 +5,7 @@
namespace Performance.DtoModels
{
public class IncomeRequest : ApiRequest
public class IncomeRequest
{
public int ID { get; set; }
......
......@@ -8,7 +8,7 @@ namespace Performance.DtoModels
/// <summary>
/// 登录请求
/// </summary>
public class LoginRequest : ApiRequest
public class LoginRequest
{
/// <summary>
/// 登录类型 1 手机号登录 2 账号登录
......@@ -16,6 +16,8 @@ public class LoginRequest : ApiRequest
public int LoginType { get; set; }
public string Account { get; set; }
public string Password { get; set; }
public string AppName { get; set; }
public string Device { get; set; }
}
public class LoginRequestValidator : AbstractValidator<LoginRequest>
......
......@@ -5,7 +5,7 @@
namespace Performance.DtoModels
{
public class ModItemRequest : ApiRequest
public class ModItemRequest
{
/// <summary>
///
......@@ -24,7 +24,7 @@ public class ModItemRequest : ApiRequest
}
public class ItemListRequest : ApiRequest
public class ItemListRequest
{
/// <summary> 方案Id </summary>
public Nullable<int> ModuleId { get; set; }
......
......@@ -5,7 +5,7 @@
namespace Performance.DtoModels
{
public class ModModuleRequest : ApiRequest
public class ModModuleRequest
{
/// <summary> 绩效模块Id </summary>
public Nullable<int> ModuleId { get; set; }
......
......@@ -5,7 +5,7 @@
namespace Performance.DtoModels
{
public class ModSpecialRequest : ApiRequest
public class ModSpecialRequest
{
/// <summary> 医院Id </summary>
public Nullable<int> HospitalId { get; set; }
......@@ -15,7 +15,7 @@ public class ModSpecialRequest : ApiRequest
}
public class SpecialListRequest : ApiRequest
public class SpecialListRequest
{
/// <summary> 医院Id </summary>
public int HospitalId { get; set; }
......
......@@ -6,7 +6,7 @@
namespace Performance.DtoModels
{
public class PasswordRequest : ApiRequest
public class PasswordRequest
{
/// <summary>
/// 原始密码
......
......@@ -5,7 +5,7 @@
namespace Performance.DtoModels
{
public class PositionRequest : ApiRequest
public class PositionRequest
{
public int ID { get; set; }
......
......@@ -5,7 +5,7 @@
namespace Performance.DtoModels
{
public class ReportRequest : ApiRequest
public class ReportRequest
{
public int HospitalId { get; set; }
......
......@@ -8,7 +8,7 @@ namespace Performance.DtoModels
/// <summary>
/// 登录请求
/// </summary>
public class SetDepartmentRequest : ApiRequest
public class SetDepartmentRequest
{
public int HospitalID { get; set; }
}
......
......@@ -8,7 +8,7 @@ namespace Performance.DtoModels
/// <summary>
/// sheet数据详情请求
/// </summary>
public class SheetExportRequest : ApiRequest
public class SheetExportRequest
{
public int SheetID { get; set; }
......
......@@ -8,7 +8,7 @@ namespace Performance.DtoModels
/// <summary>
/// sheet页列表请求
/// </summary>
public class SheetRequest : ApiRequest
public class SheetRequest
{
public int AllotID { get; set; }
......
......@@ -6,7 +6,7 @@
namespace Performance.DtoModels.Request
{
public class SmsCodeRequest : ApiRequest
public class SmsCodeRequest
{
/// <summary>
/// 短信验证类型 1 手机号登录 2 其他
......
......@@ -6,7 +6,7 @@
namespace Performance.DtoModels
{
public class UserRequest : ApiRequest
public class UserRequest
{
public int ID { get; set; }
/// <summary>
......
......@@ -6,7 +6,7 @@
namespace Performance.DtoModels
{
public class WorkyearRequest : ApiRequest
public class WorkyearRequest
{
public int ID { get; set; }
......
......@@ -6,7 +6,7 @@ namespace Performance.DtoModels
{
public class DeptDetailResponse
{
public PerDataAccount Pandect { get; set; }
public PerDataAccountBaisc Pandect { get; set; }
public List<DeptDetail> Economic { get; set; }
public List<DeptDetail> Workload { get; set; }
}
......
......@@ -21,6 +21,8 @@ public class DoctorResponse
/// </summary>
public Nullable<int> SheetID { get; set; }
public int UnitType { get; set; }
/// <summary>
/// 分组名称(医生、护士)
/// </summary>
......@@ -105,5 +107,10 @@ public class DoctorResponse
/// 实发绩效
/// </summary>
public Nullable<decimal> RealGiveFee { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
}
}
......@@ -21,6 +21,7 @@ public class NurseResponse
/// </summary>
public Nullable<int> SheetID { get; set; }
public int UnitType { get; set; }
/// <summary>
/// 分组名称(医生、护士)
/// </summary>
......@@ -105,5 +106,10 @@ public class NurseResponse
/// 实发绩效
/// </summary>
public Nullable<decimal> RealGiveFee { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
}
}
......@@ -12,103 +12,105 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options)
{
}
/// <summary> 二次分配概览 <summary>
/// <summary> 二次分配概览 </summary>
public virtual DbSet<ag_againsituation> ag_againsituation { get; set; }
/// <summary> 二次分配不固定数据 <summary>
/// <summary> 二次分配不固定数据 </summary>
public virtual DbSet<ag_data> ag_data { get; set; }
/// <summary> 二次分配人员名单 <summary>
/// <summary> 二次分配人员名单 </summary>
public virtual DbSet<ag_employee> ag_employee { get; set; }
/// <summary> 二次分配不固定列头数据 <summary>
/// <summary> 二次分配不固定列头数据 </summary>
public virtual DbSet<ag_header> ag_header { get; set; }
/// <summary> 考核类别 <summary>
/// <summary> 考核类别 </summary>
public virtual DbSet<as_assess> as_assess { get; set; }
/// <summary> 考核列头 <summary>
/// <summary> 考核列头 </summary>
public virtual DbSet<as_columns> as_columns { get; set; }
/// <summary> 考核数据 <summary>
/// <summary> 考核数据 </summary>
public virtual DbSet<as_data> as_data { get; set; }
/// <summary> 考核类别 <summary>
/// <summary> 考核类别 </summary>
public virtual DbSet<as_tempassess> as_tempassess { get; set; }
/// <summary> 考核列头 <summary>
/// <summary> 考核列头 </summary>
public virtual DbSet<as_tempcolumns> as_tempcolumns { get; set; }
/// <summary> <summary>
/// <summary> </summary>
public virtual DbSet<cof_again> cof_again { get; set; }
/// <summary> 上传excel文件校验配置 <summary>
/// <summary> 上传excel文件校验配置 </summary>
public virtual DbSet<cof_check> cof_check { get; set; }
/// <summary> 规模绩效、效率绩效计算系数配置 <summary>
/// <summary> 规模绩效、效率绩效计算系数配置 </summary>
public virtual DbSet<cof_director> cof_director { get; set; }
/// <summary> 工作量门诊药占比系数 <summary>
/// <summary> 工作量门诊药占比系数 </summary>
public virtual DbSet<cof_drugprop> cof_drugprop { get; set; }
/// <summary> 药占比费用列头名称 <summary>
/// <summary> 药占比费用列头名称 </summary>
public virtual DbSet<cof_drugtype> cof_drugtype { get; set; }
/// <summary> ICU医生护士有效收入汇总计算系数 <summary>
/// <summary> ICU医生护士有效收入汇总计算系数 </summary>
public virtual DbSet<cof_income> cof_income { get; set; }
/// <summary> 特殊绩效项指标 <summary>
/// <summary> 特殊绩效项指标 </summary>
public virtual DbSet<cof_singlefactor> cof_singlefactor { get; set; }
/// <summary> 工龄对应绩效系数配置 <summary>
/// <summary> 工龄对应绩效系数配置 </summary>
public virtual DbSet<cof_workyear> cof_workyear { get; set; }
/// <summary> <summary>
/// <summary> </summary>
public virtual DbSet<hos_personfee> hos_personfee { get; set; }
/// <summary> 科室核算导入信息 <summary>
/// <summary> 科室核算导入信息 </summary>
public virtual DbSet<im_accountbasic> im_accountbasic { get; set; }
/// <summary> <summary>
/// <summary> </summary>
public virtual DbSet<im_data> im_data { get; set; }
/// <summary> <summary>
/// <summary> </summary>
public virtual DbSet<im_employee> im_employee { get; set; }
/// <summary> <summary>
/// <summary> </summary>
public virtual DbSet<im_header> im_header { get; set; }
/// <summary> 特殊科室核算 <summary>
/// <summary> 特殊科室核算 </summary>
public virtual DbSet<im_specialunit> im_specialunit { get; set; }
/// <summary> <summary>
/// <summary> </summary>
public virtual DbSet<log_check> log_check { get; set; }
/// <summary> <summary>
/// <summary> </summary>
public virtual DbSet<log_dbug> log_dbug { get; set; }
/// <summary> 医院数据提取脚本 <summary>
/// <summary> 医院数据提取脚本 </summary>
public virtual DbSet<mod_extract> mod_extract { get; set; }
/// <summary> <summary>
/// <summary> </summary>
public virtual DbSet<mod_item> mod_item { get; set; }
/// <summary> <summary>
/// <summary> </summary>
public virtual DbSet<mod_module> mod_module { get; set; }
/// <summary> <summary>
/// <summary> </summary>
public virtual DbSet<mod_special> mod_special { get; set; }
/// <summary> <summary>
/// <summary> </summary>
public virtual DbSet<per_againallot> per_againallot { get; set; }
/// <summary> 医院绩效分配 <summary>
/// <summary> 医院绩效分配 </summary>
public virtual DbSet<per_allot> per_allot { get; set; }
/// <summary> 首次上传文件地址(当医院存在标准库时,首次上传用户提交固定格式的excel,开发人员配置SQL脚本) <summary>
/// <summary> 首次上传文件地址(当医院存在标准库时,首次上传用户提交固定格式的excel,开发人员配置SQL脚本) </summary>
public virtual DbSet<per_first> per_first { get; set; }
/// <summary> 上传数据解析 <summary>
/// <summary> 上传数据解析 </summary>
public virtual DbSet<per_sheet> per_sheet { get; set; }
/// <summary> 医生科室核算结果 <summary>
public virtual DbSet<res_accountdoctor> res_accountdoctor { get; set; }
/// <summary> 护理科室核算结果 <summary>
public virtual DbSet<res_accountnurse> res_accountnurse { get; set; }
/// <summary> 核算基础标准 <summary>
/// <summary> 科室核算结果 </summary>
public virtual DbSet<res_account> res_account { get; set; }
///// <summary> 医生科室核算结果 </summary>
//public virtual DbSet<res_accountdoctor> res_accountdoctor { get; set; }
///// <summary> 护理科室核算结果 </summary>
//public virtual DbSet<res_accountnurse> res_accountnurse { get; set; }
/// <summary> 核算基础标准 </summary>
public virtual DbSet<res_baiscnorm> res_baiscnorm { get; set; }
/// <summary> <summary>
/// <summary> </summary>
public virtual DbSet<res_compute> res_compute { get; set; }
/// <summary> <summary>
/// <summary> </summary>
public virtual DbSet<res_specialunit> res_specialunit { get; set; }
/// <summary> 医院数据提取脚本 <summary>
/// <summary> 医院数据提取脚本 </summary>
public virtual DbSet<sys_extract> sys_extract { get; set; }
/// <summary> 医院信息 <summary>
/// <summary> 医院信息 </summary>
public virtual DbSet<sys_hospital> sys_hospital { get; set; }
/// <summary> <summary>
/// <summary> </summary>
public virtual DbSet<sys_hospitalconfig> sys_hospitalconfig { get; set; }
/// <summary> 菜单表 <summary>
/// <summary> 菜单表 </summary>
public virtual DbSet<sys_menu> sys_menu { get; set; }
/// <summary> 角色表 <summary>
/// <summary> 角色表 </summary>
public virtual DbSet<sys_role> sys_role { get; set; }
/// <summary> 角色菜单关联表 <summary>
/// <summary> 角色菜单关联表 </summary>
public virtual DbSet<sys_role_menu> sys_role_menu { get; set; }
/// <summary> <summary>
/// <summary> </summary>
public virtual DbSet<sys_sms> sys_sms { get; set; }
/// <summary> <summary>
/// <summary> </summary>
public virtual DbSet<sys_task> sys_task { get; set; }
/// <summary> <summary>
/// <summary> </summary>
public virtual DbSet<sys_user> sys_user { get; set; }
/// <summary> <summary>
/// <summary> </summary>
public virtual DbSet<sys_user_hospital> sys_user_hospital { get; set; }
/// <summary> 用户角色关联表 <summary>
/// <summary> 用户角色关联表 </summary>
public virtual DbSet<sys_user_role> sys_user_role { get; set; }
}
}
//-----------------------------------------------------------------------
// <copyright file=" res_account.cs">
// * FileName: 科室核算结果.cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels
{
/// <summary>
/// 科室核算结果
/// </summary>
[Table("res_account")]
public class res_account
{
/// <summary>
///
/// </summary>
[Key]
public int ID { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> AllotID { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> SheetID { get; set; }
/// <summary>
/// 核算单元类型 1 医生组 2 护理组 3 医技组
/// </summary>
public Nullable<int> UnitType { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 科室
/// </summary>
public string Department { get; set; }
/// <summary>
/// 科主任/护士长数量
/// </summary>
public Nullable<int> ManagerNumber { get; set; }
/// <summary>
/// 核算单元医生数量
/// </summary>
public Nullable<decimal> Number { get; set; }
/// <summary>
/// 医生基础系数
/// </summary>
public Nullable<decimal> BasicFactor { get; set; }
/// <summary>
/// 倾斜系数
/// </summary>
public Nullable<decimal> SlopeFactor { get; set; }
/// <summary>
/// 其他绩效1
/// </summary>
public Nullable<decimal> OtherPerfor1 { get; set; }
/// <summary>
/// 其他绩效2
/// </summary>
public Nullable<decimal> OtherPerfor2 { get; set; }
/// <summary>
/// 医院奖罚
/// </summary>
public Nullable<decimal> Extra { get; set; }
/// <summary>
/// 考核对分率
/// </summary>
public Nullable<decimal> ScoringAverage { get; set; }
/// <summary>
/// 调节系数
/// </summary>
public Nullable<decimal> AdjustFactor { get; set; }
/// <summary>
/// 科室业绩
/// </summary>
public Nullable<decimal> Income { get; set; }
/// <summary>
/// 业绩绩效
/// </summary>
public Nullable<decimal> PerforFee { get; set; }
/// <summary>
/// 工作量绩效
/// </summary>
public Nullable<decimal> WorkloadFee { get; set; }
/// <summary>
/// 绩效合计
/// </summary>
public Nullable<decimal> PerforTotal { get; set; }
/// <summary>
/// 人均绩效
/// </summary>
public Nullable<decimal> Avg { get; set; }
/// <summary>
/// 实发绩效
/// </summary>
public Nullable<decimal> RealGiveFee { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 变更日志
/// </summary>
public string ChangeLog { get; set; }
}
}
//-----------------------------------------------------------------------
// <copyright file=" res_accountdoctor.cs">
// * FileName: 医生科室核算结果.cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels
{
/// <summary>
/// 医生科室核算结果
/// </summary>
[Table("res_accountdoctor")]
public class res_accountdoctor
{
/// <summary>
///
/// </summary>
[Key]
public int ID { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> AllotID { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> SheetID { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 科室
/// </summary>
public string Department { get; set; }
/// <summary>
/// 核算单元医生数量
/// </summary>
public Nullable<decimal> Number { get; set; }
/// <summary>
/// 医生基础系数
/// </summary>
public Nullable<decimal> BasicFactor { get; set; }
/// <summary>
/// 倾斜系数
/// </summary>
public Nullable<decimal> SlopeFactor { get; set; }
/// <summary>
/// 其他绩效1
/// </summary>
public Nullable<decimal> OtherPerfor1 { get; set; }
/// <summary>
/// 其他绩效2
/// </summary>
public Nullable<decimal> OtherPerfor2 { get; set; }
/// <summary>
/// 医院奖罚
/// </summary>
public Nullable<decimal> Extra { get; set; }
/// <summary>
/// 考核对分率
/// </summary>
public Nullable<decimal> ScoringAverage { get; set; }
/// <summary>
/// 调节系数
/// </summary>
public Nullable<decimal> AdjustFactor { get; set; }
/// <summary>
/// 科室业绩
/// </summary>
public Nullable<decimal> Income { get; set; }
/// <summary>
/// 业绩绩效
/// </summary>
public Nullable<decimal> PerforFee { get; set; }
/// <summary>
/// 工作量绩效
/// </summary>
public Nullable<decimal> WorkloadFee { get; set; }
/// <summary>
/// 绩效合计
/// </summary>
public Nullable<decimal> PerforTotal { get; set; }
/// <summary>
/// 人均绩效
/// </summary>
public Nullable<decimal> Avg { get; set; }
/// <summary>
/// 实发绩效
/// </summary>
public Nullable<decimal> RealGiveFee { get; set; }
/// <summary>
/// 变更日志
/// </summary>
public string ChangeLog { get; set; }
}
}
////-----------------------------------------------------------------------
//// <copyright file=" res_accountdoctor.cs">
//// * FileName: 医生科室核算结果.cs
//// </copyright>
////-----------------------------------------------------------------------
//using System;
//using System.ComponentModel.DataAnnotations;
//using System.ComponentModel.DataAnnotations.Schema;
//namespace Performance.EntityModels
//{
// /// <summary>
// /// 医生科室核算结果
// /// </summary>
// [Table("res_accountdoctor")]
// public class res_accountdoctor
// {
// /// <summary>
// ///
// /// </summary>
// [Key]
// public int ID { get; set; }
// /// <summary>
// ///
// /// </summary>
// public Nullable<int> AllotID { get; set; }
// /// <summary>
// ///
// /// </summary>
// public Nullable<int> SheetID { get; set; }
// /// <summary>
// /// 核算单元
// /// </summary>
// public string AccountingUnit { get; set; }
// /// <summary>
// /// 科室
// /// </summary>
// public string Department { get; set; }
// /// <summary>
// /// 科主任/护士长数量
// /// </summary>
// public Nullable<int> ManagerNumber { get; set; }
// /// <summary>
// /// 核算单元医生数量
// /// </summary>
// public Nullable<decimal> Number { get; set; }
// /// <summary>
// /// 医生基础系数
// /// </summary>
// public Nullable<decimal> BasicFactor { get; set; }
// /// <summary>
// /// 倾斜系数
// /// </summary>
// public Nullable<decimal> SlopeFactor { get; set; }
// /// <summary>
// /// 其他绩效1
// /// </summary>
// public Nullable<decimal> OtherPerfor1 { get; set; }
// /// <summary>
// /// 其他绩效2
// /// </summary>
// public Nullable<decimal> OtherPerfor2 { get; set; }
// /// <summary>
// /// 医院奖罚
// /// </summary>
// public Nullable<decimal> Extra { get; set; }
// /// <summary>
// /// 考核对分率
// /// </summary>
// public Nullable<decimal> ScoringAverage { get; set; }
// /// <summary>
// /// 调节系数
// /// </summary>
// public Nullable<decimal> AdjustFactor { get; set; }
// /// <summary>
// /// 科室业绩
// /// </summary>
// public Nullable<decimal> Income { get; set; }
// /// <summary>
// /// 业绩绩效
// /// </summary>
// public Nullable<decimal> PerforFee { get; set; }
// /// <summary>
// /// 工作量绩效
// /// </summary>
// public Nullable<decimal> WorkloadFee { get; set; }
// /// <summary>
// /// 绩效合计
// /// </summary>
// public Nullable<decimal> PerforTotal { get; set; }
// /// <summary>
// /// 人均绩效
// /// </summary>
// public Nullable<decimal> Avg { get; set; }
// /// <summary>
// /// 实发绩效
// /// </summary>
// public Nullable<decimal> RealGiveFee { get; set; }
// /// <summary>
// /// 变更日志
// /// </summary>
// public string ChangeLog { get; set; }
// }
//}
//-----------------------------------------------------------------------
// <copyright file=" res_accountnurse.cs">
// * FileName: 护理科室核算结果.cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels
{
/// <summary>
/// 护理科室核算结果
/// </summary>
[Table("res_accountnurse")]
public class res_accountnurse
{
/// <summary>
///
/// </summary>
[Key]
public int ID { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> AllotID { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> SheetID { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 科室
/// </summary>
public string Department { get; set; }
/// <summary>
/// 护士人数
/// </summary>
public Nullable<decimal> Number { get; set; }
/// <summary>
/// 护理基础系数
/// </summary>
public Nullable<decimal> BasicFactor { get; set; }
/// <summary>
/// 倾斜系数
/// </summary>
public Nullable<decimal> SlopeFactor { get; set; }
/// <summary>
/// 其他绩效1
/// </summary>
public Nullable<decimal> OtherPerfor1 { get; set; }
/// <summary>
/// 其他绩效2
/// </summary>
public Nullable<decimal> OtherPerfor2 { get; set; }
/// <summary>
/// 医院奖罚
/// </summary>
public Nullable<decimal> Extra { get; set; }
/// <summary>
/// 考核对分率
/// </summary>
public Nullable<decimal> ScoringAverage { get; set; }
/// <summary>
/// 调节系数
/// </summary>
public Nullable<decimal> AdjustFactor { get; set; }
/// <summary>
/// 科室业绩
/// </summary>
public Nullable<decimal> Income { get; set; }
/// <summary>
/// 业绩绩效
/// </summary>
public Nullable<decimal> PerforFee { get; set; }
/// <summary>
/// 工作量绩效
/// </summary>
public Nullable<decimal> WorkloadFee { get; set; }
/// <summary>
/// 绩效合计
/// </summary>
public Nullable<decimal> PerforTotal { get; set; }
/// <summary>
/// 人均绩效
/// </summary>
public Nullable<decimal> Avg { get; set; }
/// <summary>
/// 实发绩效
/// </summary>
public Nullable<decimal> RealGiveFee { get; set; }
}
}
////-----------------------------------------------------------------------
//// <copyright file=" res_accountnurse.cs">
//// * FileName: 护理科室核算结果.cs
//// </copyright>
////-----------------------------------------------------------------------
//using System;
//using System.ComponentModel.DataAnnotations;
//using System.ComponentModel.DataAnnotations.Schema;
//namespace Performance.EntityModels
//{
// /// <summary>
// /// 护理科室核算结果
// /// </summary>
// [Table("res_accountnurse")]
// public class res_accountnurse
// {
// /// <summary>
// ///
// /// </summary>
// [Key]
// public int ID { get; set; }
// /// <summary>
// ///
// /// </summary>
// public Nullable<int> AllotID { get; set; }
// /// <summary>
// ///
// /// </summary>
// public Nullable<int> SheetID { get; set; }
// /// <summary>
// /// 核算单元
// /// </summary>
// public string AccountingUnit { get; set; }
// /// <summary>
// /// 科室
// /// </summary>
// public string Department { get; set; }
// /// <summary>
// /// 科主任/护士长数量
// /// </summary>
// public Nullable<int> ManagerNumber { get; set; }
// /// <summary>
// /// 护士人数
// /// </summary>
// public Nullable<decimal> Number { get; set; }
// /// <summary>
// /// 护理基础系数
// /// </summary>
// public Nullable<decimal> BasicFactor { get; set; }
// /// <summary>
// /// 倾斜系数
// /// </summary>
// public Nullable<decimal> SlopeFactor { get; set; }
// /// <summary>
// /// 其他绩效1
// /// </summary>
// public Nullable<decimal> OtherPerfor1 { get; set; }
// /// <summary>
// /// 其他绩效2
// /// </summary>
// public Nullable<decimal> OtherPerfor2 { get; set; }
// /// <summary>
// /// 医院奖罚
// /// </summary>
// public Nullable<decimal> Extra { get; set; }
// /// <summary>
// /// 考核对分率
// /// </summary>
// public Nullable<decimal> ScoringAverage { get; set; }
// /// <summary>
// /// 调节系数
// /// </summary>
// public Nullable<decimal> AdjustFactor { get; set; }
// /// <summary>
// /// 科室业绩
// /// </summary>
// public Nullable<decimal> Income { get; set; }
// /// <summary>
// /// 业绩绩效
// /// </summary>
// public Nullable<decimal> PerforFee { get; set; }
// /// <summary>
// /// 工作量绩效
// /// </summary>
// public Nullable<decimal> WorkloadFee { get; set; }
// /// <summary>
// /// 绩效合计
// /// </summary>
// public Nullable<decimal> PerforTotal { get; set; }
// /// <summary>
// /// 人均绩效
// /// </summary>
// public Nullable<decimal> Avg { get; set; }
// /// <summary>
// /// 实发绩效
// /// </summary>
// public Nullable<decimal> RealGiveFee { get; set; }
// }
//}
......@@ -4,6 +4,11 @@
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DocumentationFile>..\Performance.Api\wwwroot\Performance.EntityModels.xml</DocumentationFile>
<NoWarn>1701;1702;1591</NoWarn>
</PropertyGroup>
<ItemGroup>
<Compile Remove="T4Template\**" />
<EmbeddedResource Remove="T4Template\**" />
......
......@@ -35,7 +35,7 @@ namespace Performance.EntityModels
foreach(Entity entity in entities)
{
#>
/// <summary> <#= entity.EntityComment #> <summary>
/// <summary> <#= entity.EntityComment #> </summary>
public virtual DbSet<<#= entity.EntityName #>> <#= entity.EntityName #> { get; set; }
<#
}
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using FluentValidation.AspNetCore;
using FluentValidation.AspNetCore;
using Microsoft.AspNetCore.Mvc;
using Performance.DtoModels;
using Performance.Infrastructure;
using Performance.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Performance.Extract.Api.Controllers
{
......@@ -29,6 +30,7 @@ public ApiResponse FeeSource([FromBody]ModModuleRequest request)
if (request.HospitalId == null || request.HospitalId.Value == 0)
return new ApiResponse(ResponseType.ParameterError, "HospitalId 参数错误!");
LogHelper.Information($"绩效考核项费用来源:{JsonHelper.Serialize(request)}", "请求参数");
var list = modExtractService.FeeSource(request);
return new ApiResponse(ResponseType.OK, list);
}
......@@ -41,6 +43,7 @@ public ApiResponse FeeSource([FromBody]ModModuleRequest request)
[HttpPost]
public ApiResponse Items([FromBody]ModItemRequest request)
{
LogHelper.Information($"绩效收入模板配置项列表:{JsonHelper.Serialize(request)}", "请求参数");
modExtractService.AddItems(request.ModuleId.Value);
return new ApiResponse(ResponseType.OK);
}
......
......@@ -25,6 +25,7 @@ public int DeleteData(int allotId)
"im_header",
"im_specialunit",
"per_sheet",
"res_account",
"res_accountdoctor",
"res_accountnurse",
"res_baiscnorm",
......
//-----------------------------------------------------------------------
// <copyright file=" im_data.cs">
// * FileName: im_data.cs
// </copyright>
//-----------------------------------------------------------------------
using Performance.EntityModels;
using System;
using System.Collections.Generic;
namespace Performance.Repository
{
/// <summary>
/// im_data Repository
/// </summary>
public partial class PerforImdataRepository : PerforRepository<im_data>
{
/// <summary>
/// 获取核算单元
/// </summary>
/// <param name="deptList">科室列表</param>
/// <param name="hospitalid">医院id</param>
/// <param name="sheetType">sheet模板类型</param>
/// <returns></returns>
public IEnumerable<im_data> GetAccountingUnit(int hospitalid, int sheettype, List<string> deptList)
{
string sql = "select distinct im.accountingUnit,im.department,im.unittype from im_data im " +
"inner join per_allot allot on im.AllotID = allot.ID " +
"inner join per_sheet sheet on im.SheetID = sheet.ID " +
"where allot.hospitalid = @hospitalid and sheet.sheettype = @sheettype and im.department in @deptList";
return DapperQuery(sql, new { hospitalid, sheettype, deptList }, 1000 * 60 * 5);
}
}
}
......@@ -4,7 +4,6 @@
// </copyright>
//-----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using Performance.EntityModels;
namespace Performance.Repository
......@@ -17,21 +16,5 @@ public partial class PerforImdataRepository : PerforRepository<im_data>
public PerforImdataRepository(PerformanceDbContext context) : base(context)
{
}
/// <summary>
/// 获取核算单元
/// </summary>
/// <param name="deptList">科室列表</param>
/// <param name="hospitalid">医院id</param>
/// <param name="sheetType">sheet模板类型</param>
/// <returns></returns>
public IEnumerable<im_data> GetAccountingUnit(int hospitalid, int sheettype, List<string> deptList)
{
string sql = "select distinct im.accountingUnit,im.department,im.unittype from im_data im " +
"inner join per_allot allot on im.AllotID = allot.ID " +
"inner join per_sheet sheet on im.SheetID = sheet.ID " +
"where allot.hospitalid = @hospitalid and sheet.sheettype = @sheettype and im.department in @deptList";
return DapperQuery(sql, new { hospitalid, sheettype, deptList }, 1000 * 60 * 5);
}
}
}
//-----------------------------------------------------------------------
// <copyright file=" res_account.cs">
// * FileName: res_account.cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using Performance.EntityModels;
namespace Performance.Repository
{
/// <summary>
/// res_account Repository
/// </summary>
public partial class PerforResaccountRepository : PerforRepository<res_account>
{
public PerforResaccountRepository(PerformanceDbContext context) : base(context)
{
}
}
}
//-----------------------------------------------------------------------
// <copyright file=" res_accountdoctor.cs">
// * FileName: res_accountdoctor.cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using Performance.EntityModels;
////-----------------------------------------------------------------------
//// <copyright file=" res_accountdoctor.cs">
//// * FileName: res_accountdoctor.cs
//// </copyright>
////-----------------------------------------------------------------------
//using System;
//using Performance.EntityModels;
namespace Performance.Repository
{
/// <summary>
/// res_accountdoctor Repository
/// </summary>
public partial class PerforResaccountdoctorRepository : PerforRepository<res_accountdoctor>
{
public PerforResaccountdoctorRepository(PerformanceDbContext context) : base(context)
{
}
}
}
//namespace Performance.Repository
//{
// /// <summary>
// /// res_accountdoctor Repository
// /// </summary>
// public partial class PerforResaccountdoctorRepository : PerforRepository<res_accountdoctor>
// {
// public PerforResaccountdoctorRepository(PerformanceDbContext context) : base(context)
// {
// }
// }
//}
//-----------------------------------------------------------------------
// <copyright file=" res_accountnurse.cs">
// * FileName: res_accountnurse.cs
// </copyright>
//-----------------------------------------------------------------------
using System;
using Performance.EntityModels;
////-----------------------------------------------------------------------
//// <copyright file=" res_accountnurse.cs">
//// * FileName: res_accountnurse.cs
//// </copyright>
////-----------------------------------------------------------------------
//using System;
//using Performance.EntityModels;
namespace Performance.Repository
{
/// <summary>
/// res_accountnurse Repository
/// </summary>
public partial class PerforResaccountnurseRepository : PerforRepository<res_accountnurse>
{
public PerforResaccountnurseRepository(PerformanceDbContext context) : base(context)
{
}
}
}
//namespace Performance.Repository
//{
// /// <summary>
// /// res_accountnurse Repository
// /// </summary>
// public partial class PerforResaccountnurseRepository : PerforRepository<res_accountnurse>
// {
// public PerforResaccountnurseRepository(PerformanceDbContext context) : base(context)
// {
// }
// }
//}
......@@ -15,11 +15,12 @@ public class AgainAllotService : IAutoInjection
{
private Application application;
private AgainService againService;
private RoleService roleService;
private ConfigService configService;
private PerforCofagainRepository perforCofagainRepository;
private PerforPeragainallotRepository perforPeragainallotRepository;
private PerforResaccountdoctorRepository perforResaccountdoctorRepository;
private PerforResaccountnurseRepository perforResaccountnurseRepository;
private PerforResaccountRepository perforResaccountRepository;
//private PerforResaccountnurseRepository perforResaccountnurseRepository;
private PerforUserRepository perforUserRepository;
private PerforUserhospitalRepository perforUserhospitalRepository;
private PerforPerallotRepository perforPerallotRepository;
......@@ -30,10 +31,11 @@ public class AgainAllotService : IAutoInjection
private PerforAgheaderRepository perforAgheaderRepository;
public AgainAllotService(IOptions<Application> options, AgainService againService,
RoleService roleService,
PerforCofagainRepository perforCofagainRepository,
PerforPeragainallotRepository perforPeragainallotRepository,
PerforResaccountdoctorRepository perforResaccountdoctorRepository,
PerforResaccountnurseRepository perforResaccountnurseRepository,
PerforResaccountRepository perforResaccountRepository,
//PerforResaccountnurseRepository perforResaccountnurseRepository,
PerforUserRepository perforUserRepository,
PerforUserhospitalRepository perforUserhospitalRepository,
PerforPerallotRepository perforPerallotRepository,
......@@ -45,10 +47,11 @@ public class AgainAllotService : IAutoInjection
{
this.application = options.Value;
this.againService = againService;
this.roleService = roleService;
this.perforCofagainRepository = perforCofagainRepository;
this.perforPeragainallotRepository = perforPeragainallotRepository;
this.perforResaccountdoctorRepository = perforResaccountdoctorRepository;
this.perforResaccountnurseRepository = perforResaccountnurseRepository;
this.perforResaccountRepository = perforResaccountRepository;
//this.perforResaccountnurseRepository = perforResaccountnurseRepository;
this.perforUserRepository = perforUserRepository;
this.perforUserhospitalRepository = perforUserhospitalRepository;
this.perforPerallotRepository = perforPerallotRepository;
......@@ -65,12 +68,14 @@ public class AgainAllotService : IAutoInjection
/// 生成二次绩效
/// </summary>
/// <param name="request"></param>
public bool Generate(AgainAllotRequest request, UserIdentity user)
public bool Generate(AgainAllotRequest request, int userId, string department)
{
var againAllot = perforPeragainallotRepository.GetEntity(t => t.ID == request.AgainAllotID);
if (againAllot == null || againAllot.ID == 0)
throw new PerformanceException("绩效二次分配不存在");
var roles = roleService.GetRole(userId);
perforPeragainallotRepository.Update(againAllot, p => { p.States = 2; });
//清理二次绩效无用数据
......@@ -86,15 +91,15 @@ public bool Generate(AgainAllotRequest request, UserIdentity user)
decimal? basicnumber = 0m;
//获取科室实发绩效
if (user.Role != null)
if (roles != null)
{
var role = user.Role.FirstOrDefault();
var role = roles.FirstOrDefault();
if (role != null)
{
if (application.NurseRole == role.RoleID)
basicnumber = perforResaccountnurseRepository.GetEntity(t => t.AllotID == againAllot.AllotID && t.AccountingUnit == user.Department)?.RealGiveFee;
else if (application.DirectorRole == role.RoleID)
basicnumber = perforResaccountdoctorRepository.GetEntity(t => t.AllotID == againAllot.AllotID && t.AccountingUnit == user.Department)?.RealGiveFee;
if (application.NurseRole == role.ID)
basicnumber = perforResaccountRepository.GetEntity(t => t.UnitType == (int)UnitType.护理组 && t.AllotID == againAllot.AllotID && t.AccountingUnit == department)?.RealGiveFee;
else if (application.DirectorRole == role.ID)
basicnumber = perforResaccountRepository.GetEntity(t => t.UnitType != (int)UnitType.护理组 && t.AllotID == againAllot.AllotID && t.AccountingUnit == department)?.RealGiveFee;
}
}
#endregion
......@@ -302,7 +307,7 @@ public bool Generate(AgainAllotRequest request, UserIdentity user)
/// <param name="request"></param>
/// <param name="user"></param>
/// <returns></returns>
public (SheetExportResponse SheetExport, PerAgainSituation AgainSituation) Detail(AgainAllotRequest request, UserIdentity user)
public (SheetExportResponse SheetExport, PerAgainSituation AgainSituation) Detail(AgainAllotRequest request)
{
var againAllot = perforPeragainallotRepository.GetEntity(t => t.ID == request.AgainAllotID);
if (againAllot == null || againAllot.ID == 0)
......
......@@ -19,38 +19,28 @@ public class BaiscNormService : IAutoInjection
/// </summary>
/// <param name="computes"></param>
/// <returns></returns>
public List<res_baiscnorm> ComputeAvg(List<res_baiscnorm> baiscnormList, List<im_accountbasic> accountbasicList,
List<ComputeResult> computes, List<im_employee> empolyeeList)
public List<res_baiscnorm> ComputeAvg(List<res_baiscnorm> baiscnormList, List<im_accountbasic> accountbasicList, List<ComputeResult> computes)
{
var keyList = new[]
{
//绩效基数平均值项目
new { type = AccountUnitType.临床科室, reference = PerforType.临床主任 },
new { type = AccountUnitType.临床科室, reference = PerforType.护士长 },
new { type = AccountUnitType.医技科室, reference = PerforType.医技主任 },
//new { type = AccountUnitType.临床科室, reference = PerforType.临床副主任 },
//new { type = AccountUnitType.医技科室, reference = PerforType.医技副主任 },
new { Reference = PerforType.临床主任 , UnitType = UnitType.医生组},
new { Reference = PerforType.护士长, UnitType = UnitType.护理组 },
new { Reference = PerforType.医技主任, UnitType = UnitType.医技组 },
};
foreach (var item in keyList)
{
var accountingUnitList = empolyeeList.Where(t => t.AccountType == item.type.ToString()).Select(t => t.AccountingUnit).ToList();
if (accountingUnitList.Any())
{
var count = (item.reference == PerforType.护士长)
? accountbasicList.Where(t => accountingUnitList.Contains(t.NurseAccountingUnit)).Sum(t => t.NurseHeadNumber)
: accountbasicList.Where(t => accountingUnitList.Contains(t.DoctorAccountingUnit)).Sum(t => t.DoctorDirectorNumber);
var dataList = computes.Where(t => t.AccountType == item.type.ToString() && t.FitPeople == EnumHelper.GetDescription(item.reference));
var count = accountbasicList.Where(t => t.UnitType == (int)item.UnitType).Sum(t => t.DoctorDirectorNumber);
var dataList = computes.Where(t => t.UnitType == item.UnitType.ToString());
var baiscnorm = new res_baiscnorm
{
PositionName = EnumHelper.GetDescription(item.reference),
PositionName = EnumHelper.GetDescription(item.Reference),
TotelNumber = count,
TotelValue = dataList?.Sum(t => t.GiveFee),
AvgValue = count != 0 ? dataList?.Sum(t => t.GiveFee) / count : 0
AvgValue = dataList?.Sum(t => t.GiveFee) / count
};
baiscnormList.Add(baiscnorm);
}
}
return baiscnormList;
}
......@@ -118,47 +108,32 @@ public List<res_baiscnorm> ComputeOtherAvg(List<res_baiscnorm> baiscnormList, Li
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
public List<res_baiscnorm> DocterNurseBaiscnorm(List<res_baiscnorm> baiscnormList, List<im_accountbasic> accountbasicList,
List<PerSheet> list, List<im_employee> empolyeeList)
{
// 护士
var sheetNurse = list.FirstOrDefault(t => t.SheetType == SheetType.ComputeNurseAccount);
var perdataNurse = sheetNurse.PerData.Select(t => (PerDataAccountNurse)t);
perdataNurse = perdataNurse.GroupBy(t => t.AccountingUnit)
.Select(t => new PerDataAccountNurse
{
AccountingUnit = t.Key,
Number = t.Sum(p => p.Number),
PerforTotal = t.Max(p => p.PerforTotal)
});
var baiscnormNurse = new res_baiscnorm
{
PositionName = EnumHelper.GetDescription(PerforType.护士),
TotelNumber = perdataNurse.Sum(t => t.Number),
TotelValue = perdataNurse.Sum(t => t.PerforTotal),
AvgValue = perdataNurse.Sum(t => t.PerforTotal) / perdataNurse.Sum(t => t.Number)
public List<res_baiscnorm> DocterNurseBaiscnorm(List<res_baiscnorm> baiscnormList, List<im_accountbasic> accountbasicList, List<PerSheet> list)
{
var pairs = new[]
{
new { SheetType = SheetType.ComputeDoctorAccount, UnitType = UnitType.医生组, PerforType = PerforType.临床医生 },
new { SheetType = SheetType.ComputeDoctorAccount, UnitType = UnitType.医技组, PerforType = PerforType.医技医生 },
new { SheetType = SheetType.ComputeNurseAccount, UnitType = UnitType.护理组, PerforType = PerforType.护士 },
};
baiscnormList.Add(baiscnormNurse);
// 医生
var accountingUnitList = empolyeeList.Where(t => t.AccountType == AccountUnitType.临床科室.ToString()).Select(t => t.AccountingUnit).ToList();
var count = accountbasicList.Where(t => accountingUnitList.Contains(t.DoctorAccountingUnit)).Sum(t => t.DoctorNumber + t.DoctorDirectorNumber);
var sheetDocter = list.FirstOrDefault(t => t.SheetType == SheetType.ComputeDoctorAccount);
var perdataDocter = sheetDocter.PerData.Select(t => (PerDataAccountDoctor)t);
foreach (var info in pairs)
{
var sheet = list.FirstOrDefault(t => t.SheetType == info.SheetType);
var perData = sheet.PerData.Select(t => (PerDataAccountBaisc)t);
//剔除不同科室相同核算单元
perdataDocter = perdataDocter.Where(t => accountingUnitList.Contains(t.AccountingUnit)).GroupBy(t => t.AccountingUnit)
.Select(t => new PerDataAccountDoctor { AccountingUnit = t.Key, PerforTotal = t.Max(p => p.PerforTotal) });
var groupData = perData.Where(t => t.UnitType == (int)info.UnitType)
.GroupBy(t => t.AccountingUnit)
.Select(t => new { AccountingUnit = t.Key, Number = t.Sum(p => p.ManagerNumber + p.Number), PerforTotal = t.Max(p => p.PerforTotal) });
var baiscnormDocter = new res_baiscnorm
var baiscnorm = new res_baiscnorm
{
PositionName = EnumHelper.GetDescription(PerforType.临床医生),
TotelNumber = count,
TotelValue = perdataDocter.Sum(t => t.PerforTotal),
AvgValue = perdataDocter.Sum(t => t.PerforTotal) / count
PositionName = EnumHelper.GetDescription(info.PerforType),
TotelNumber = groupData.Sum(t => t.Number),
TotelValue = groupData.Sum(t => t.PerforTotal),
AvgValue = groupData.Sum(t => t.PerforTotal) / groupData.Sum(t => t.Number)
};
baiscnormList.Add(baiscnormDocter);
baiscnormList.Add(baiscnorm);
}
return baiscnormList;
}
}
......
......@@ -204,7 +204,7 @@ public bool CheckData(PerExcel excel, per_allot allot)
var dataList = sheet.PerData.Select(t => (PerDataAccountBaisc)t);
foreach (var item in dataList)
{
if (string.IsNullOrEmpty(item.DoctorAccountingUnit) && string.IsNullOrEmpty(item.NurseAccountingUnit))
if (string.IsNullOrEmpty(item.AccountingUnit))
{
flag = false;
rowNumber.Add(item.RowNumber + 1);
......
......@@ -55,8 +55,8 @@ public List<res_baiscnorm> Compute(per_allot allot, PerExcel excel, List<PerShee
var computResult = computeDirector.Compute(computeEmployees, accountbasicList, allot);
//计算 绩效标准 基数(科主任、副主任、护士长 =>> 平均值)
List<res_baiscnorm> baiscnormList = new List<res_baiscnorm>();
baiscNormService.ComputeAvg(baiscnormList, accountbasicList, computResult, empolyeeList);
baiscNormService.DocterNurseBaiscnorm(baiscnormList, accountbasicList, perSheets, empolyeeList);
baiscNormService.ComputeAvg(baiscnormList, accountbasicList, computResult);
baiscNormService.DocterNurseBaiscnorm(baiscnormList, accountbasicList, perSheets);
var computResult2 = computeDirector.Compute(computeEmployees, allot, baiscnormList);
//计算 行政人员 平均值
......
......@@ -193,6 +193,10 @@ public bool Update(per_allot allot)
}
#endregion
public void UpdateAllotStates(int allotId, int states, string remark)
{
_allotRepository.UpdateAllotStates(allotId, states, remark);
}
/// <summary>
/// 生成绩效
/// </summary>
......@@ -205,17 +209,17 @@ public void Generate(per_allot allot, string mail)
{
logdbug.Add(allot.ID, "绩效开始执行", JsonHelper.Serialize(allot));
configService.Clear(allot.ID);
_allotRepository.UpdateAllotStates(allot.ID, (int)AllotStates.InCheckData, EnumHelper.GetDescription(AllotStates.InCheckData));
UpdateAllotStates(allot.ID, (int)AllotStates.InCheckData, EnumHelper.GetDescription(AllotStates.InCheckData));
// 导出数据
var excel = importDataService.ReadDataAndSave(allot);
if (!checkDataService.Check(excel, allot))
{
_allotRepository.UpdateAllotStates(allot.ID, (int)AllotStates.CheckFail, EnumHelper.GetDescription(AllotStates.CheckFail));
UpdateAllotStates(allot.ID, (int)AllotStates.CheckFail, EnumHelper.GetDescription(AllotStates.CheckFail));
SendEmail(allot, mail, 3, time);
logdbug.Add(allot.ID, "绩效数据校验失败", JsonHelper.Serialize(allot));
return;
}
_allotRepository.UpdateAllotStates(allot.ID, (int)AllotStates.InGenerate, EnumHelper.GetDescription(AllotStates.InGenerate));
UpdateAllotStates(allot.ID, (int)AllotStates.InGenerate, EnumHelper.GetDescription(AllotStates.InGenerate));
// 计算合并数据
logdbug.Add(allot.ID, "计算合并数据", JsonHelper.Serialize(allot));
List<PerSheet> list = processComputService.MergeAndSave(excel, allot);
......@@ -227,14 +231,14 @@ public void Generate(per_allot allot, string mail)
var baiscnormList = resultComputeService.Compute(allot, excel, list);
resultComputeService.SpecialUnitCompute(excel, allot, baiscnormList);
_allotRepository.UpdateAllotStates(allot.ID, (int)AllotStates.GenerateSucceed, EnumHelper.GetDescription(AllotStates.GenerateSucceed));
UpdateAllotStates(allot.ID, (int)AllotStates.GenerateSucceed, EnumHelper.GetDescription(AllotStates.GenerateSucceed));
//发送邮件
SendEmail(allot, mail, 1, time);
logdbug.Add(allot.ID, "绩效开始执行", "绩效生成成功");
}
catch (Exception ex)
{
_allotRepository.UpdateAllotStates(allot.ID, (int)AllotStates.GenerateFail, EnumHelper.GetDescription(AllotStates.GenerateFail));
UpdateAllotStates(allot.ID, (int)AllotStates.GenerateFail, EnumHelper.GetDescription(AllotStates.GenerateFail));
SendEmail(allot, mail, 2, time);
logdbug.Add(allot.ID, "绩效开始执行", ex.ToString());
//throw ex;
......
......@@ -333,25 +333,17 @@ private bool WriteExcel(string newpath, string originalPath, List<PerSheet> shee
var importRow = importSheet.CreateRow(maxHeaderRowNumber + i + 1);
Dictionary<string, Func<PerDataAccountBaisc, object>> keyValues = new Dictionary<string, Func<PerDataAccountBaisc, object>>
{
{ "核算单元(医生组)", (t) => t.DoctorAccountingUnit },
{ "核算单元(护理组)", (t) => t.NurseAccountingUnit },
{ "核算单元类型", (t) => EnumHelper.GetDescription((UnitType)t.UnitType) },
{ "核算单元", (t) => t.AccountingUnit },
{ "科室名称", (t) => t.Department },
{ "医生组核算单元医生数量", (t) => t.DoctorNumber },
{ "医生组基础系数", (t) => t.DoctorBasicFactor },
{ "医生组倾斜系数", (t) => t.DoctorSlopeFactor },
{ "医生组其他绩效1", (t) => t.DoctorOtherPerfor1 },
{ "医生组考核得分率", (t) => t.DoctorScoringAverage },
{ "医生组医院奖罚", (t) => t.DoctorExtra },
{ "医生组其他绩效2", (t) => t.DoctorOtherPerfor2 },
{ "医生组调节系数", (t) => t.DoctorAdjustFactor },
{ "护理组核算单元护士数量", (t) => t.NurseNumber },
{ "护理组基础系数", (t) => t.NurseBasicFactor },
{ "护理组倾斜系数", (t) => t.NurseSlopeFactor },
{ "护理组其他绩效1", (t) => t.NurseOtherPerfor1 },
{ "护理组考核得分率", (t) => t.NurseScoringAverage },
{ "护理组医院奖罚", (t) => t.NurseExtra },
{ "护理组其他绩效2", (t) => t.NurseOtherPerfor2 },
{ "护理组调节系数", (t) => t.NurseAdjustFactor },
{ "医生组核算单元医生数量", (t) => t.Number },
{ "医生组基础系数", (t) => t.BasicFactor },
{ "医生组倾斜系数", (t) => t.SlopeFactor },
{ "医生组其他绩效1", (t) => t.OtherPerfor1 },
{ "医生组考核得分率", (t) => t.ScoringAverage },
{ "医生组医院奖罚", (t) => t.Extra },
{ "医生组其他绩效2", (t) => t.OtherPerfor2 },
{ "医生组调节系数", (t) => t.AdjustFactor },
};
foreach (var item in keyValues.Keys)
{
......
......@@ -380,7 +380,7 @@ public void AddItems(int moduleId)
{
var hospitalConfig = configList.First();
var connection = ConnectionBuilder.Create(DatabaseType.SqlServer, hospitalConfig.DbSource, hospitalConfig.DbName, hospitalConfig.DbUser, hospitalConfig.DbPassword);
string sql = "select distinct category from inpat_fee where category is not null union select distinct category from out_fee where category is not null;";
string sql = "SELECT ITEM_TYPE FROM dbo.DIC_FEE GROUP BY ITEM_TYPE;";
var dataList = perforExtractRepository.ExecuteScript(connection, sql, null);
if (dataList != null && dataList.Any())
{
......@@ -392,6 +392,7 @@ public void AddItems(int moduleId)
ModuleId = module.Id,
ExtractId = module.ExtractId,
});
LogHelper.Information($"受影响行数{itemList.Count()}", "添加默认收费项");
perforModitemRepository.AddRange(itemList.ToArray());
module.IsGenerated = 1;
perforModmoduleRepository.Update(module);
......
......@@ -52,10 +52,11 @@ public PerSheet MergeCompute(PerExcel excel, List<EntityModels.cof_income> incom
//判断是否创建头部
if (!isHasData && dataList != null && dataList.Count() > 0)
isHasData = true;
foreach (var group in dataList.GroupBy(t => t.UnitType))
foreach (var item in EnumHelper.GetItems<UnitType>())
{
var typeName = $"{GetCleanSheetName(sheet.SheetName)}({ group.Key})";
var group = dataList.Where(t => t.UnitType == item.Name);
var typeName = $"{GetCleanSheetName(sheet.SheetName)}({item.Name})";
//创建子集头部信息
PerHeader childHeader = new PerHeader(1, childPointCell, typeName, 1, 1, 1, null, 2);
headList.Add(childHeader);
......@@ -64,11 +65,11 @@ public PerSheet MergeCompute(PerExcel excel, List<EntityModels.cof_income> incom
.GroupBy(t => t.AccountingUnit).Select(t => new PerData
{
SignID = childHeader.SignID,
UnitType = group.Key,
UnitType = item.Name,
AccountingUnit = t.Key,
CellValue = ComputeValue(t, sheet.SheetName, group.Key, incomeconfs),
CellValue = ComputeValue(t, sheet.SheetName, item.Name, incomeconfs),
TypeName = typeName,
RowNumber = dataList.FirstOrDefault(s => s.AccountingUnit == t.Key && s.UnitType == group.Key)?.RowNumber ?? 0,
RowNumber = dataList.FirstOrDefault(s => s.AccountingUnit == t.Key && s.UnitType == item.Name)?.RowNumber ?? 0,
ComputRule = type == SheetType.Expend ? 2 : 1
});
......@@ -143,7 +144,7 @@ public PerSheet OnceCompute(PerSheet sheet)
{
header.PointCell = header.PointCell + phead;
header.Children.ForEach(item => item.PointCell = item.PointCell + phead);
phead = phead + 2;
phead = phead + 3;
}
}
......@@ -155,23 +156,25 @@ public PerSheet OnceCompute(PerSheet sheet)
if (header.IsHasChildren)
{
var maxcell = header.Children.Max(t => t.PointCell);
var parentHead = new PerHeader(0, maxcell + 1, $" {header.CellValue}合计", 0, 1, 2, new List<PerHeader>(), 1);
var parentHead = new PerHeader(0, maxcell + 1, $" {header.CellValue}合计", 0, 1, 3, new List<PerHeader>(), 1);
perHeadList.Add(parentHead);
var typeClass = dataList.Where(t => header.Children.Select(s => s.CellValue).Contains(t.TypeName));
int pointcell = 0;
foreach (var group in typeClass.GroupBy(t => t.UnitType))
foreach (var item in EnumHelper.GetItems<UnitType>())
{
pointcell++;
var childHead = new PerHeader(1, maxcell + pointcell, group.Key, 1, 1, 1, null, 1);
var group = typeClass.Where(t => t.UnitType == item.Name);
var childHead = new PerHeader(1, maxcell + pointcell, item.Name, 1, 1, 1, null, 1);
parentHead.Children.Add(childHead);
var ds = group.Where(t => t.CellValue.HasValue )
var ds = group.Where(t => t.CellValue.HasValue)
.GroupBy(t => t.AccountingUnit).Select(t => new PerData
{
UnitType = group.Key,
UnitType = item.Name,
AccountingUnit = t.Key,
CellValue = t.Sum(s => s.CellValue),
TypeName = group.Key,
TypeName = item.Name,
RowNumber = t.FirstOrDefault()?.RowNumber ?? 0,
IsTotal = 1,
PointCell = maxcell + pointcell,
......@@ -201,13 +204,13 @@ public PerSheet OnceCompute(PerSheet sheet)
int thiscell = maxhead.Children != null && maxhead.Children.Count > 0
? maxhead.Children.Max(t => t.PointCell) + 1
: maxhead.PointCell;
PerHeader perHead = new PerHeader(0, thiscell, "科室可核算业绩收入", 0, 1, 2, new List<PerHeader>(), 1);
PerHeader perHead = new PerHeader(0, thiscell, "科室可核算业绩收入", 0, 1, 3, new List<PerHeader>(), 1);
var dataList = sheet.PerData.Select(t => (PerData)t);
List<PerData> perDataList = new List<PerData>();
//插入合计结果
var groupList = dataList.Where(t => t.IsTotal == 1 && t.CellValue.HasValue ).GroupBy(t => t.UnitType);
var groupList = dataList.Where(t => t.IsTotal == 1 && t.CellValue.HasValue).GroupBy(t => t.UnitType);
foreach (var group in groupList)
{
var childHead = new PerHeader(1, thiscell, group.Key, 1, 1, 1, null, 1);
......
......@@ -101,21 +101,23 @@ public PerSheet OnceCompute(PerSheet sheet, List<CofDrugProp> confs = null)
public (PerSheet Sheet, List<PerData> PerData) TwiceCompute(PerSheet sheet)
{
//获取最大列坐标位置
int thiscell = sheet.PerHeader.OrderByDescending(t => t.PointCell).FirstOrDefault().Children.Max(t => t.PointCell) + 1;
int thiscell = sheet.PerHeader.OrderByDescending(t => t.PointCell).FirstOrDefault().PointCell + 1;
PerHeader perHead = new PerHeader(0, thiscell, "工作量绩效合计", 0, 2, 1, new List<PerHeader>(), 1);
var dataList = sheet.PerData.Select(t => (PerData)t);
List<PerData> perDataList = new List<PerData>();
//插入合计结果
var groupList = dataList.Where(t => t.IsTotal == 1 && t.CellValue.HasValue).GroupBy(t => new { t.UnitType, t.AccountingUnit });
//var groupList = dataList.Where(t => t.IsTotal == 1 && t.CellValue.HasValue).GroupBy(t => new { t.UnitType, t.AccountingUnit });
var groupList = dataList.Where(t => t.CellValue.HasValue).GroupBy(t => new { t.UnitType, t.AccountingUnit });
foreach (var group in groupList)
{
var ds = group.Select(t => new PerData
{
UnitType = group.Key.UnitType,
AccountingUnit = group.Key.AccountingUnit,
CellValue = group.Sum(s => s.CellValue),
//CellValue = group.Sum(s => s.CellValue),
CellValue = group.Sum(s => s.IsFactor ? s.CellValue * s.FactorValue : s.CellValue),
TypeName = group.Key.UnitType,
RowNumber = group.FirstOrDefault()?.RowNumber ?? 0,
IsTotal = 1,
......
......@@ -33,20 +33,20 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
PerDataAccountBaisc unifyUnit = new PerDataAccountBaisc();
unifyUnit.RowNumber = r;
unifyUnit.UnitType = UnitType(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元类型").PointCell)?.ToString());
unifyUnit.DoctorAccountingUnit = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell)?.ToString();
unifyUnit.AccountingUnit = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元").PointCell)?.ToString();
unifyUnit.Department = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "科室名称").PointCell)?.ToString();
unifyUnit.DoctorDirectorNumber = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元科主任/护士长数量").PointCell)?.ToString());
unifyUnit.DoctorNumber = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元人员数量").PointCell)?.ToString());
unifyUnit.DoctorBasicFactor = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "预算比例").PointCell)?.ToString());
unifyUnit.DoctorSlopeFactor = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "倾斜系数").PointCell)?.ToString());
unifyUnit.DoctorScale = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "规模绩效系数").PointCell)?.ToString());
unifyUnit.DoctorEffic = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "效率绩效系数").PointCell)?.ToString());
unifyUnit.DoctorGrant = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "管理绩效发放系数").PointCell)?.ToString());
unifyUnit.DoctorOtherPerfor1 = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效1").PointCell)?.ToString());
unifyUnit.DoctorOtherPerfor2 = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效2").PointCell)?.ToString());
unifyUnit.DoctorExtra = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "医院奖罚").PointCell)?.ToString());
unifyUnit.DoctorScoringAverage = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "考核得分率").PointCell)?.ToString());
unifyUnit.DoctorAdjustFactor = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "调节系数").PointCell)?.ToString());
unifyUnit.ManagerNumber = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "科主任/护士长人数").PointCell)?.ToString());
unifyUnit.Number = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元人员数量").PointCell)?.ToString());
unifyUnit.BasicFactor = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "预算比例").PointCell)?.ToString());
unifyUnit.SlopeFactor = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "倾斜系数").PointCell)?.ToString());
unifyUnit.Scale = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "规模绩效系数").PointCell)?.ToString());
unifyUnit.Effic = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "效率绩效系数").PointCell)?.ToString());
unifyUnit.Grant = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "管理绩效发放系数").PointCell)?.ToString());
unifyUnit.OtherPerfor1 = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效1").PointCell)?.ToString());
unifyUnit.OtherPerfor2 = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "其他绩效2").PointCell)?.ToString());
unifyUnit.Extra = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "医院奖罚").PointCell)?.ToString());
unifyUnit.ScoringAverage = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "考核得分率").PointCell)?.ToString());
unifyUnit.AdjustFactor = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "调节系数").PointCell)?.ToString());
//unifyUnit.NurseHeadNumber = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元护士长数量" && p.Parent.CellValue == "护理组").PointCell)?.ToString());
//unifyUnit.NurseNumber = ConvertHelper.To<decimal>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元护士数量" && p.Parent.CellValue == "护理组").PointCell)?.ToString());
......
......@@ -39,7 +39,7 @@ public List<IPerData> ReadData(ISheet sheet, List<PerHeader> perHeader)
JobTitle = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "职称").PointCell)?.ToString(),
FitPeople = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "绩效基数核算参考对象").PointCell)?.ToString(),
FitPeopleRatio = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "绩效基数核算系数").PointCell)?.ToString()),
AccountType = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "核算单元分类").PointCell)?.ToString(),
AccountType = row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "人员分类").PointCell)?.ToString(),
PostCoefficient = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "岗位系数").PointCell)?.ToString()),
WorkTime = NopiSevice.GetCellDatetimeValue(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "参加工作时间").PointCell)),
ScoreAverageRate = ConvertHelper.To<decimal?>(row.GetCell(perHeader.FirstOrDefault(p => p.CellValue == "考核得分率").PointCell)?.ToString()),
......
......@@ -16,16 +16,16 @@ public class PerSheetDataReadWorkload : IPerSheetDataRead
public PerSheetPoint Point => new PerSheetPoint
{
HeaderFirstRowNum = 1,
HeaderLastRowNum = 2,
HeaderLastRowNum = 1,
HeaderFirstCellNum = 0,
DataFirstRowNum = 4,
DataFirstRowNum = 3,
AccountingUnit = new List<AccountingUnit>
{
new AccountingUnit
{
AccountingUnitCellNum = 0,
DeptCellNum = 1,
FactorRow = 3
FactorRow = 2
}
}
};
......
......@@ -15,22 +15,22 @@ public class ReportService : IAutoInjection
private PerforPerallotRepository perforPerallotRepository;
private PerforResbaiscnormRepository perforResbaiscnormRepository;
private PerforHospersonfeeRepository perforHospersonfeeRepository;
private PerforResaccountdoctorRepository perforResaccountdoctorRepository;
private PerforResaccountnurseRepository perforResaccountnurseRepository;
private PerforResaccountRepository perforResaccountRepository;
//private PerforResaccountnurseRepository perforResaccountnurseRepository;
public ReportService(PerforReportRepository perforReportRepository,
PerforPerallotRepository perforPerallotRepository,
PerforResbaiscnormRepository perforResbaiscnormRepository,
PerforHospersonfeeRepository perforHospersonfeeRepository,
PerforResaccountdoctorRepository perforResaccountdoctorRepository,
PerforResaccountnurseRepository perforResaccountnurseRepository)
//PerforResaccountdoctorRepository perforResaccountdoctorRepository,
PerforResaccountRepository perforResaccountRepository)
{
this.perforReportRepository = perforReportRepository;
this.perforPerallotRepository = perforPerallotRepository;
this.perforResbaiscnormRepository = perforResbaiscnormRepository;
this.perforHospersonfeeRepository = perforHospersonfeeRepository;
this.perforResaccountdoctorRepository = perforResaccountdoctorRepository;
this.perforResaccountnurseRepository = perforResaccountnurseRepository;
this.perforResaccountRepository = perforResaccountRepository;
//this.perforResaccountnurseRepository = perforResaccountnurseRepository;
}
/// <summary>
......@@ -102,11 +102,11 @@ public List<PerReport> DoctorAvg(int hospitalId, int isIndex)
throw new PerformanceException("用户未创建绩效!");
var result = new List<PerReport>();
var doctorList = perforResaccountdoctorRepository.GetEntities(t => allotList.Select(a => a.ID).Contains(t.AllotID.Value));
var doctorList = perforResaccountRepository.GetEntities(t => t.UnitType != (int)UnitType.护理组 && allotList.Select(a => a.ID).Contains(t.AllotID.Value));
if (isIndex == 1)
{
var allot = allotList.OrderByDescending(t => t.Year).ThenByDescending(t => t.Month).FirstOrDefault();
doctorList = perforResaccountdoctorRepository.GetEntities(t => t.AllotID == allot.ID);
doctorList = perforResaccountRepository.GetEntities(t => t.UnitType != (int)UnitType.护理组 && t.AllotID == allot.ID);
}
if (doctorList == null)
return result;
......@@ -134,11 +134,11 @@ public List<PerReport> NurseAvg(int hospitalId, int isIndex)
throw new PerformanceException("用户未创建绩效!");
var result = new List<PerReport>();
var doctorList = perforResaccountnurseRepository.GetEntities(t => allotList.Select(a => a.ID).Contains(t.AllotID.Value));
var doctorList = perforResaccountRepository.GetEntities(t => t.UnitType == (int)UnitType.护理组 && allotList.Select(a => a.ID).Contains(t.AllotID.Value));
if (isIndex == 1)
{
var allot = allotList.OrderByDescending(t => t.Year).ThenByDescending(t => t.Month).FirstOrDefault();
doctorList = perforResaccountnurseRepository.GetEntities(t => t.AllotID == allot.ID);
doctorList = perforResaccountRepository.GetEntities(t => t.UnitType == (int)UnitType.护理组 && t.AllotID == allot.ID);
}
if (doctorList == null)
return result;
......
......@@ -28,6 +28,18 @@ public class RoleService : IAutoInjection
/// <returns></returns>
public List<RoleResponse> GetUserRole(int userid)
{
var roles = GetRole(userid);
return Mapper.Map<List<RoleResponse>>(roles);
}
/// <summary>
/// 获取用户角色
/// </summary>
/// <param name="userid"></param>
/// <returns></returns>
public List<sys_role> GetRole(int userid)
{
if (userid <= 0)
throw new PerformanceException($"userid:{userid} 错误");
......@@ -37,7 +49,7 @@ public List<RoleResponse> GetUserRole(int userid)
var roles = _roleRepository.GetEntities(t => joinList.Select(j => j.RoleID).Contains(t.ID));
return Mapper.Map<List<RoleResponse>>(roles);
return roles;
}
}
}
......@@ -82,6 +82,15 @@ public UserIdentity Login(LoginRequest request)
throw new PerformanceException($"登录类型LoginType:{request.LoginType}暂不支持");
}
public UserIdentity GetUser(int userId)
{
var user = _userRepository.GetEntity(t => t.ID == userId);
if (user == null)
throw new PerformanceException("用户信息查询失败");
return Mapper.Map<UserIdentity>(user);
}
/// <summary>
/// 查询用户列表
/// </summary>
......
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