Commit 8d148275 by ruyun.zhang

考勤接口

parent 6cb7601b
......@@ -10,6 +10,7 @@
using System.IO;
using Newtonsoft.Json;
using System.Threading.Tasks;
using Performance.DtoModels.Response;
namespace Performance.Api.Controllers
{
......@@ -366,47 +367,83 @@ public IActionResult DownloadStatistics(int allotId)
#endregion
#region 最终考勤结果
/// <summary>
/// 科室确认列表
/// </summary>
/// <param name="allotId"></param>
/// <returns></returns>
[HttpPost]
[Route("issue/audit/list")]
public ApiResponse<List<AttendanceAuditList>> AuditList(int allotId)
{
return _attendanceService.AuditList(allotId);
}
/// <summary>
/// 科室确认详情
/// </summary>
/// <param name="allotId"></param>
/// <param name="unitType"></param>
/// <param name="accountingUnit"></param>
/// <returns></returns>
[HttpPost]
[Route("issue/audit/detail")]
public ApiResponse<List<per_attendance_issue>> AuditDetail(int allotId, string unitType, string accountingUnit)
{
return _attendanceService.AuditDetail(allotId, unitType, accountingUnit);
}
/// <summary>
/// 已下发结果展示列表
/// </summary>
/// <param name="allotId"></param>
/// <returns></returns>
[HttpGet("issue/result/list")]
public ApiResponse<List<AttendanceStatistics>> IssAttendanceResult(int allotId)
{
throw new NotImplementedException();
}
/// <summary>
/// 最终考勤结果下发(预确认显示)
/// </summary>
/// <param name="allotId"></param>
/// <param name="hospitalId"></param>
/// <returns></returns>
[HttpPost]
[Route("issue/statistics/PreConfirmationDisplay")]
public ApiResponse<List<PerAttendanceIssueDto>> PreConfirmationDisplay(int allotId, int hospitalId)
[Route("issue/check")]
public ApiResponse<List<PerAttendanceIssueDto>> PreConfirmationDisplay(int allotId)
{
var userid = claim.GetUserId();
return _attendanceService.PreConfirmationDisplay(allotId, userid, hospitalId);
return _attendanceService.PreConfirmationDisplay(allotId, userid);
}
/// <summary>
/// 最终考勤结果下发
/// </summary>
/// <param name="allotId"></param>
/// <param name="hospitalId"></param>
/// <returns></returns>
[HttpPost]
[Route("issue/statistics/{allotId}")]
public ApiResponse IssueStatistics(int allotId, int hospitalId)
[Route("issue/confirm")]
public ApiResponse IssueStatistics(int allotId)
{
var userid = claim.GetUserId();
return _attendanceService.IssueStatistics(allotId, userid, hospitalId);
return _attendanceService.IssueStatistics(allotId, userid);
}
/// <summary>
/// 最终考勤结果质疑或确认无误((批量操作)
/// 最终考勤结果驳回或确认无误((批量操作)
/// </summary>
/// <param name="allotId"></param>
/// <param name="issueid"></param>
/// <param name="choose"></param>
/// <param name="state">操作类型 确认 = 2,驳回 = 3,</param>
/// <returns></returns>
[HttpPost]
[Route("issue/statistics/choose")]
public ApiResponse ChooseStatistics(int allotId, int[] issueid, bool choose)
[Route("issue/choose")]
public ApiResponse ChooseStatistics(int allotId, int[] issueid, Attendance.State state)
{
var userid = claim.GetUserId();
return _attendanceService.ChooseStatistics(allotId, userid, issueid, choose);
return _attendanceService.ChooseStatistics(allotId, userid, issueid, state);
}
......
......@@ -199,7 +199,7 @@ public ApiResponse OtherAutoComplete([FromBody] SecondEmpRequest request)
public ApiResponse<List<SecondTempResponse>> Temp([FromBody] AllotDeptRequest request)
{
var userId = claimService.GetUserId();
var result = secondAllotService.GetTemp(request.HospitalId, request.Department, userId);
var result = secondAllotService.GetTemp(request.HospitalId, request.UnitType, request.Department, userId);
return new ApiResponse<List<SecondTempResponse>>(ResponseType.OK, result);
}
......
......@@ -413,29 +413,41 @@
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.PreConfirmationDisplay(System.Int32,System.Int32)">
<member name="M:Performance.Api.Controllers.AttendanceController.AuditList(System.Int32)">
<summary>
科室确认列表
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.AuditDetail(System.Int32,System.String,System.String)">
<summary>
科室确认详情
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.PreConfirmationDisplay(System.Int32)">
<summary>
最终考勤结果下发(预确认显示)
</summary>
<param name="allotId"></param>
<param name="hospitalId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.IssueStatistics(System.Int32,System.Int32)">
<member name="M:Performance.Api.Controllers.AttendanceController.IssueStatistics(System.Int32)">
<summary>
最终考勤结果下发
</summary>
<param name="allotId"></param>
<param name="hospitalId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AttendanceController.ChooseStatistics(System.Int32,System.Int32[],System.Boolean)">
<member name="M:Performance.Api.Controllers.AttendanceController.ChooseStatistics(System.Int32,System.Int32[],Performance.DtoModels.Attendance.State)">
<summary>
最终考勤结果质疑或确认无误((批量操作)
最终考勤结果驳回或确认无误((批量操作)
</summary>
<param name="allotId"></param>
<param name="issueid"></param>
<param name="choose"></param>
<param name="state">操作类型 确认 = 2,驳回 = 3,</param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.BudgetController.Query(Performance.DtoModels.Request.BudgetRequest)">
......
......@@ -2898,6 +2898,76 @@
科室
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.Code">
<summary>
编码
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.UnitType">
<summary>
核算组别
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.AccountingUnit">
<summary>
核算单元
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.Count">
<summary>
总下发数
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.ConfirmCount">
<summary>
确认数
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.RejectCount">
<summary>
驳回数
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.OperationTime">
<summary>
操作时间
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.OperationUser">
<summary>
操作人
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditList.StateRemark">
<summary>
状态描述
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.HeadName">
<summary>
列头名称
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.BanChange">
<summary>
禁止修改
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.Readnoly">
<summary>
0 可读可写 1 只读
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.Visible">
<summary>
是否可见 0 不可见 1 可见
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.AttachLast">
<summary>
是否附带上次绩效 0 不附带 1 附带
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatistics.UnitType">
<summary>
核算组别
......@@ -3128,31 +3198,6 @@
医院总收支结余
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.HeadName">
<summary>
列头名称
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.BanChange">
<summary>
禁止修改
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.Readnoly">
<summary>
0 可读可写 1 只读
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.Visible">
<summary>
是否可见 0 不可见 1 可见
</summary>
</member>
<member name="P:Performance.DtoModels.Response.CollectPermission.AttachLast">
<summary>
是否附带上次绩效 0 不附带 1 附带
</summary>
</member>
<member name="P:Performance.DtoModels.ComputeResponse.Source">
<summary>
来源
......
......@@ -121,7 +121,7 @@ public enum State
{
已下发未确认 = 1,
确认 = 2,
质疑 = 3,
驳回 = 3,
}
public enum OperationType
{
......
......@@ -10,6 +10,8 @@ public class AllotDeptRequest
public int HospitalId { get; set; }
public string? UnitType { get; set; }
public string Department { get; set; }
}
}
using System;
namespace Performance.DtoModels.Response
{
public class AttendanceAuditList
{
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 核算组别
/// </summary>
public string UnitType { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 总下发数
/// </summary>
public int Count { get; set; }
/// <summary>
/// 确认数
/// </summary>
public int ConfirmCount { get; set; }
/// <summary>
/// 驳回数
/// </summary>
public int RejectCount { get; set; }
/// <summary>
/// 操作时间
/// </summary>
public DateTime OperationTime { get; set; }
/// <summary>
/// 操作人
/// </summary>
public string OperationUser { get; set; }
/// <summary>
/// 状态描述
/// </summary>
public string StateRemark { get; set; }
}
}
using AutoMapper;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using AutoMapper;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using OfficeOpenXml;
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
using OfficeOpenXml.Style;
using Performance.DtoModels;
using Performance.EntityModels;
using Performance.DtoModels.Response;
using Performance.EntityModels.Entity;
using Performance.EntityModels.Other;
using Performance.Infrastructure;
using Performance.Repository;
using Performance.Repository.Repository;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.Services
{
......@@ -24,6 +21,7 @@ public class AttendanceService : IAutoInjection
{
private readonly IMapper mapper;
private readonly ILogger<AttendanceService> logger;
private readonly PerforUserRepository _userRepository;
private readonly PerforPerallotRepository perforPerallotRepository;
private readonly PerforPerAttendanceRepository perforPerAttendanceRepository;
private readonly PerforPerAttendanceIssueRepository perforPerAttendanceIssueRepository;
......@@ -38,6 +36,7 @@ public class AttendanceService : IAutoInjection
public AttendanceService(
IMapper mapper,
ILogger<AttendanceService> logger,
PerforUserRepository userRepository,
PerforPerallotRepository perforPerallotRepository,
PerforPerAttendanceRepository perforPerAttendanceRepository,
PerforPerAttendanceIssueRepository perforPerAttendanceIssueRepository,
......@@ -53,6 +52,7 @@ PerforPerAttendanceIssueRecordRepository perforPerAttendanceIssueRecordRepositor
{
this.mapper = mapper;
this.logger = logger;
_userRepository = userRepository;
this.perforPerallotRepository = perforPerallotRepository;
this.perforPerAttendanceRepository = perforPerAttendanceRepository;
this.perforPerAttendanceIssueRepository = perforPerAttendanceIssueRepository;
......@@ -687,11 +687,13 @@ public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allot
//查询全部数据
var attendanceData = perforPerallotRepository.GetAttendance(allotId);
//当角色对应时过滤
var roleType = new[] { (int)Role.护士长, (int)Role.科主任, (int)Role.特殊科室, (int)Role.行政科室, };
var user = userService.GetUser(userid);
var role = roleService.GetUserRole(user.UserID);
if (role.Any(t => roleType.Contains(t.Type.Value)))
attendanceData = attendanceData.Where(w => w.AccountingUnit == user.Department && w.UnitType == user.UnitType).ToList();
var userInfo = _userRepository.GetUser(userid);
if (userInfo?.User == null) throw new NotImplementedException("当前用户不存在");
if (userInfo?.URole == null) throw new NotImplementedException("当前用户暂未分配角色");
var unitTypes = UnitTypeUtil.GetMaps(userInfo?.URole.Type ?? 0);
if (unitTypes?.Any() == true)
attendanceData = attendanceData.Where(w => w.AccountingUnit == userInfo.User.Department && UnitTypeUtil.Is(w.UnitType, unitTypes)).ToList();
List<AttendanceStatistics> statistics = new List<AttendanceStatistics>();
// 交叉补全科室结束时间
......@@ -764,10 +766,46 @@ public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allot
return new ApiResponse<List<AttendanceStatistics>>(ResponseType.OK, "", statistics);
}
#region 考勤下发
public ApiResponse<List<PerAttendanceIssueDto>> PreConfirmationDisplay(int allotId, int userid, int hospitalId)
public ApiResponse<List<AttendanceAuditList>> AuditList(int allotId)
{
var issues = perforPerAttendanceIssueRepository.GetEntities(w => w.AllotId == allotId);
var items = issues.GroupBy(w => new { w.Code, w.UnitType, w.AccountingUnit })
.Select(w => new AttendanceAuditList
{
Code = w.Key.Code,
UnitType = w.Key.UnitType,
AccountingUnit = w.Key.AccountingUnit,
Count = w.Count(),
ConfirmCount = w.Count(p => p.State == (int)Attendance.State.确认),
RejectCount = w.Count(p => p.State == (int)Attendance.State.驳回),
}).ToList();
foreach (var item in items)
{
item.StateRemark = "未全部确认";
if (item.RejectCount > 0)
item.StateRemark = "驳回";
else if (item.ConfirmCount == item.Count)
item.StateRemark = "已确认";
}
return new ApiResponse<List<AttendanceAuditList>>(ResponseType.OK, items);
}
public ApiResponse<List<per_attendance_issue>> AuditDetail(int allotId, string unitType, string accountingUnit)
{
var issues = perforPerAttendanceIssueRepository.GetEntities(w => w.AllotId == allotId && w.UnitType == unitType);
issues = issues.Where(w => w.AccountingUnit == accountingUnit).ToList();
return new ApiResponse<List<per_attendance_issue>>(ResponseType.OK, issues);
}
public ApiResponse<List<PerAttendanceIssueDto>> PreConfirmationDisplay(int allotId, int userid)
{
var statistics = GetAttendanceStatistics(allotId, userid).Data;
var issues = perforPerAttendanceIssueRepository.GetEntities(w => w.AllotId == allotId && w.HospitalId == hospitalId);
var issues = perforPerAttendanceIssueRepository.GetEntities(w => w.AllotId == allotId);
var issuePersonnelNumber = issues.Select(s => s.PersonnelNumber);
var statisticPersonnelNumber = statistics.Select(s => s.PersonnelNumber);
//新增(查询页面有实表没有的数据)
......@@ -824,10 +862,14 @@ public ApiResponse<List<PerAttendanceIssueDto>> PreConfirmationDisplay(int allot
//下发
public ApiResponse IssueStatistics(int allotId, int userid, int hospitalId)
public ApiResponse IssueStatistics(int allotId, int userid)
{
var preConfirmationDisplay = PreConfirmationDisplay(allotId, userid, hospitalId).Data;
var issues = perforPerAttendanceIssueRepository.GetEntities(w => w.AllotId == allotId && w.HospitalId == hospitalId);
var allot = perforPerallotRepository.GetEntity(w => w.ID == allotId);
if (allot == null)
throw new PerformanceException("当前绩效记录不存在");
var preConfirmationDisplay = PreConfirmationDisplay(allotId, userid).Data;
var issues = perforPerAttendanceIssueRepository.GetEntities(w => w.AllotId == allotId);
var cofaccounting = cofaccountingRepository.GetEntities(g => g.AllotId == allotId);
var insertIssues = preConfirmationDisplay.Where(w => w.OperationType == (int)Attendance.OperationType.新增).ToList();
var updateIssues = preConfirmationDisplay.Where(w => w.OperationType == (int)Attendance.OperationType.修改).ToList();
......@@ -840,7 +882,7 @@ public ApiResponse IssueStatistics(int allotId, int userid, int hospitalId)
return new per_attendance_issue()
{
AllotId = allotId,
HospitalId = hospitalId,
HospitalId = allot.HospitalId,
Code = code == null ? "" : code.Code,
UnitType = item.UnitType,
AccountingUnit = item.AccountingUnit,
......@@ -924,12 +966,12 @@ public ApiResponse IssueStatistics(int allotId, int userid, int hospitalId)
}
public ApiResponse ChooseStatistics(int allotId, int userid, int[] issueid, bool choose)
public ApiResponse ChooseStatistics(int allotId, int userid, int[] issueid, Attendance.State state)
{
var issuedates = perforPerAttendanceIssueRepository.GetEntities(w => w.AllotId == allotId && issueid.Contains(w.Id)).ToList();
foreach (var item in issuedates)
{
item.State = choose ? (int)Attendance.State.确认 : (int)Attendance.State.质疑;
item.State = (int)state;
item.UpdateUser = userid;
item.UpdateTime = DateTime.Now;
}
......
......@@ -892,19 +892,28 @@ public bool DelValue(int secondId, List<ag_fixatitem> oldFixatItems, List<ag_fix
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public List<SecondTempResponse> GetTemp(int hospitalid, string department, int userId)
public List<SecondTempResponse> GetTemp(int hospitalid, string unitType, string department, int userId)
{
var temps = agtempRepository.GetEntities(t => t.IsEnable == 1);
if (temps != null && temps.Any())
{
var userCenter = userRepository.GetUser(userId);
var unitType = UnitTypeUtil.GetMaps(userCenter?.URole.Type ?? 0);
Expression<Func<ag_usetemp, bool>> exp = t => t.HospitalId == hospitalid && t.Department == department;
ag_usetemp useTemp = null;
if (string.IsNullOrEmpty(unitType))
{
var userCenter = userRepository.GetUser(userId);
var unitTypes = UnitTypeUtil.GetMaps(userCenter?.URole.Type ?? 0);
Expression<Func<ag_usetemp, bool>> exp = t => t.HospitalId == hospitalid && t.Department == department;
if (userCenter?.URole != null && userCenter.URole.Type.HasValue)
exp = exp.And(t => unitTypes.Contains(t.UnitType));
if (userCenter?.URole != null && userCenter.URole.Type.HasValue)
exp = exp.And(t => unitType.Contains(t.UnitType));
useTemp = agusetempRepository.GetEntity(exp);
}
else
{
useTemp = agusetempRepository.GetEntity(t => t.HospitalId == hospitalid && t.UnitType == unitType && t.Department == department);
}
var useTemp = agusetempRepository.GetEntity(exp);
var secondTemps = _mapper.Map<List<SecondTempResponse>>(temps);
if (useTemp != null)
secondTemps.ForEach(t => t.IsSelected = t.Id == useTemp.UseTempId);
......
......@@ -69,7 +69,7 @@ public UserIdentity Login(LoginRequest request)
{
var user = _userRepository.GetEntity(t => t.Login == request.Account && t.IsDelete == 1);
if (user == null)
throw new PerformanceException($"用户不存在 UserId:{request.Account}");
throw new PerformanceException($"{request.Account}”用户不存在");
//MD5小写加密
request.Password = PwdHelper.MD5AndSalt(request.Password);
......
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