Commit 47d6f28a by ruyun.zhang

添加考勤结果人员系数

parent 4882c1d5
......@@ -272,6 +272,11 @@
姓名
</summary>
</member>
<member name="P:Performance.DtoModels.PerAttendanceIssueDto.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.DtoModels.PerAttendanceIssueDto.BeginDate">
<summary>
在科开始时间
......@@ -2933,6 +2938,11 @@
姓名
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.DtoModels.Response.AttendanceAuditDetail.BeginDate">
<summary>
在科开始时间
......@@ -3198,6 +3208,11 @@
姓名
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatistics.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.DtoModels.AttendanceStatistics.BeginDate">
<summary>
在科开始时间
......
......@@ -6158,6 +6158,11 @@
姓名
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.BeginDate">
<summary>
在科开始时间
......@@ -6995,7 +7000,7 @@
</member>
<member name="P:Performance.EntityModels.per_employee.PermanentStaff">
<summary>
核算人
人员系
</summary>
</member>
<member name="P:Performance.EntityModels.per_employee.EfficiencyNumber">
......@@ -9528,6 +9533,11 @@
姓名
</summary>
</member>
<member name="P:Performance.EntityModels.Other.view_attendance.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.EntityModels.Other.view_attendance.AttendanceDate">
<summary>
考勤时间
......
......@@ -19,6 +19,7 @@ public PerAttendanceIssueDto(AttendanceStatistics item)
AccountingUnit = item.AccountingUnit;
PersonnelNumber = item.PersonnelNumber;
PersonnelName = item.PersonnelName;
PermanentStaff = item.PermanentStaff;
BeginDate = item.BeginDate;
EndDate = item.EndDate;
DeductionDays = item.Detial.Where(w => !w.Remark.Contains("不核减")).Sum(w => w.Value);
......@@ -36,6 +37,7 @@ public PerAttendanceIssueDto(per_attendance_issue item)
AccountingUnit = item.AccountingUnit;
PersonnelNumber = item.PersonnelNumber;
PersonnelName = item.PersonnelName;
PermanentStaff = item.PermanentStaff;
BeginDate = item.BeginDate;
EndDate = item.EndDate;
DeductionDays = item.DeductionDays;
......@@ -66,6 +68,10 @@ public PerAttendanceIssueDto(per_attendance_issue item)
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
/// <summary>
/// 在科开始时间
/// </summary>
public DateTime? BeginDate { get; set; }
......
......@@ -38,6 +38,10 @@ public class AttendanceAuditDetail
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal PermanentStaff { get; set; }
/// <summary>
/// 在科开始时间
/// </summary>
public DateTime? BeginDate { get; set; }
......@@ -85,7 +89,7 @@ public class AttendanceAuditDetails
/// <summary>
/// 请假天数
/// </summary>
public int Value { get; set; }
public object Value { get; set; }
/// <summary>
/// 考勤类型
/// </summary>
......
......@@ -34,6 +34,10 @@ public class AttendanceStatistics
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
/// <summary>
/// 在科开始时间
/// </summary>
public DateTime BeginDate { get; set; }
......
......@@ -46,6 +46,10 @@ public class per_attendance_issue
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
/// <summary>
/// 在科开始时间
/// </summary>
public DateTime? BeginDate { get; set; }
......
......@@ -87,7 +87,7 @@ public class per_employee
public Nullable<int> AttendanceDay { get; set; }
/// <summary>
/// 核算人
/// 人员系
/// </summary>
public Nullable<decimal> PermanentStaff { get; set; }
......
......@@ -30,6 +30,10 @@ public class view_attendance
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
/// <summary>
/// 考勤时间
/// </summary>
public DateTime AttendanceDate { get; set; }
......
using AutoMapper;
using GraphQL;
using MassTransit.Internals.Extensions;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using OfficeOpenXml;
......@@ -12,6 +15,7 @@
using Performance.Repository.Repository;
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.IO;
using System.Linq;
......@@ -21,6 +25,7 @@ public class AttendanceService : IAutoInjection
{
private readonly IMapper mapper;
private readonly ILogger<AttendanceService> logger;
private readonly DapperService _service;
private readonly PerforUserRepository _userRepository;
private readonly PerforPerallotRepository perforPerallotRepository;
private readonly PerforPerAttendanceRepository perforPerAttendanceRepository;
......@@ -35,6 +40,7 @@ public class AttendanceService : IAutoInjection
public AttendanceService(
IMapper mapper,
ILogger<AttendanceService> logger,
DapperService service,
PerforUserRepository userRepository,
PerforPerallotRepository perforPerallotRepository,
PerforPerAttendanceRepository perforPerAttendanceRepository,
......@@ -50,6 +56,7 @@ UserService userService
{
this.mapper = mapper;
this.logger = logger;
_service = service;
_userRepository = userRepository;
this.perforPerallotRepository = perforPerallotRepository;
this.perforPerAttendanceRepository = perforPerAttendanceRepository;
......@@ -784,6 +791,7 @@ public ApiResponse<List<AttendanceStatistics>> GetAttendanceStatistics(int allot
Department = attendances.ElementAt(i).Department,
PersonnelNumber = attendances.ElementAt(i).PersonnelNumber,
PersonnelName = attendances.ElementAt(i).PersonnelName,
PermanentStaff = attendances.ElementAt(i).PermanentStaff,
BeginDate = begDate,
EndDate = endDate.AddDays(days),
//Detial = new List<AttendanceStatisticsDetial>()
......@@ -883,46 +891,45 @@ public ApiResponse<List<AttendanceAuditList>> AuditList(int allotId, string unit
// 科室确认详情(已下发结果展示列表)
public ApiResponse<List<AttendanceAuditDetail>> AuditDetail(int allotId, string unitType, string accountingUnit, string searchTxet, int userid)
{
var types = perfoPperAttendanceTypeRepository.GetEntities(t => t.AllotId == allotId) ?? new List<per_attendance_type>();
var vacationeData = perfoPperAttendanceVacationeRepository.GetEntities(t => t.AllotId == allotId) ?? new List<per_attendance_vacation>();
var issues = perforPerAttendanceIssueRepository.GetEntities(w => w.AllotId == allotId).OrderBy(w => w.PersonnelNumber).ToList();
if (!string.IsNullOrEmpty(unitType))
issues = issues.Where(w => w.UnitType.Contains(unitType)).ToList();
if (!string.IsNullOrEmpty(accountingUnit))
issues = issues.Where(w => w.AccountingUnit.Contains(accountingUnit)).ToList();
if (!string.IsNullOrEmpty(searchTxet))
issues = issues.Where(w => w.PersonnelName.Contains(searchTxet) || w.PersonnelNumber.Contains(searchTxet)).ToList();
var stateOrders = new int[] { (int)Attendance.State.未确认, (int)Attendance.State.驳回, (int)Attendance.State.确认 };
var items = issues.Select(w => new AttendanceAuditDetail
{
AttendanceIsueId = w.Id,
AllotId = w.AllotId,
Code = w.Code,
UnitType = w.UnitType,
AccountingUnit = w.AccountingUnit,
PersonnelName = w.PersonnelName,
PersonnelNumber = w.PersonnelNumber,
BeginDate = w.BeginDate,
EndDate = w.EndDate,
WorkFullDays = w.WorkFullDays,
AttendanceDays = w.AttendanceDays,
DeductionDays = w.DeductionDays,
NoDeductionDays = w.NoDeductionDays,
State = w.State,
ConfirmUser = w.ConfirmUser,
ConfirmTime = w.ConfirmTime,
Remarks = w.Remarks,
}).OrderBy(w => Array.IndexOf(stateOrders, w.State)).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)
items = items.Where(w => w.AccountingUnit == userInfo.User.Department && UnitTypeUtil.Is(w.UnitType, unitTypes)).ToList();
var queryUnitTypes = new List<string>();
string queryAccountingUnit = accountingUnit;
string querySearchTxet = searchTxet;
var permissionUnitTypes = UnitTypeUtil.GetMaps(userInfo?.URole.Type ?? 0);
if (permissionUnitTypes?.Any() == true)
{
accountingUnit = userInfo.User.Department;
queryUnitTypes.AddRange(permissionUnitTypes);
}
else if (!string.IsNullOrEmpty(unitType))
{
queryUnitTypes.Add(unitType);
}
var names = typeof(per_attendance_issue).GetProperties().Select(w => w.Name);
var stateOrders = new int[] { (int)Attendance.State.未确认, (int)Attendance.State.驳回, (int)Attendance.State.确认 };
var issues = _service.QueryAttendanceIssue(allotId, queryUnitTypes, queryAccountingUnit, querySearchTxet);
List<AttendanceAuditDetail> items = new List<AttendanceAuditDetail>();
foreach (var isu in issues)
{
AttendanceAuditDetail item = JsonHelper.Deserialize<AttendanceAuditDetail>(JsonHelper.Serialize(isu));
item.Detial = new List<AttendanceAuditDetails>();
items.Add(item);
var dic = new RouteValueDictionary(isu);
foreach (var dicItem in dic.Where(w => !names.Any(name => name.Equals(w.Key, StringComparison.OrdinalIgnoreCase))))
{
item.Detial.Add(new AttendanceAuditDetails { Title = dicItem.Key, Remark = dicItem.Key, Value = dicItem.Value });
}
}
items = items.OrderBy(w => Array.IndexOf(stateOrders, w.State)).ToList();
var types = perfoPperAttendanceTypeRepository.GetEntities(t => t.AllotId == allotId) ?? new List<per_attendance_type>();
var vacationeData = perfoPperAttendanceVacationeRepository.GetEntities(t => t.AllotId == allotId) ?? new List<per_attendance_vacation>();
var vacationes = vacationeData
.Where(w => w.BegDate > DateTime.MinValue && w.EndDate > DateTime.MinValue)
......@@ -935,7 +942,7 @@ public ApiResponse<List<AttendanceAuditDetail>> AuditDetail(int allotId, string
});
foreach (var stat in items)
{
stat.Detial = vacationes
var detail = vacationes
.Where(w => w.PersonnelNumber == stat.PersonnelNumber)
.Select(w => new AttendanceAuditDetails
{
......@@ -944,12 +951,11 @@ public ApiResponse<List<AttendanceAuditDetail>> AuditDetail(int allotId, string
Remark = w.Remark,
})
.ToList();
foreach (var item in types)
{
if (!stat.Detial.Any(w => w.Title == item.AttendanceName))
if (!detail.Any(w => w.Title == item.AttendanceName))
{
stat.Detial.Add(new AttendanceAuditDetails
detail.Add(new AttendanceAuditDetails
{
Title = item.AttendanceName,
Value = 0,
......@@ -957,6 +963,7 @@ public ApiResponse<List<AttendanceAuditDetail>> AuditDetail(int allotId, string
});
}
}
stat.Detial.InsertRange(0, detail);
}
return new ApiResponse<List<AttendanceAuditDetail>>(ResponseType.OK, items);
}
......@@ -975,6 +982,7 @@ public ApiResponse<List<PerAttendanceIssueDto>> PreConfirmationDisplay(int allot
result =
issue.UnitType == statistic.UnitType &&
issue.AccountingUnit == statistic.AccountingUnit &&
issue.PermanentStaff == statistic.PermanentStaff &&
issue.BeginDate == statistic.BeginDate &&
issue.EndDate == statistic.EndDate &&
issue.AttendanceDays == statistic.AttendanceDays &&
......@@ -1037,7 +1045,6 @@ public ApiResponse IssueStatistics(int allotId, int userid, string realName, str
{
var inserts = insertIssues.Select(item =>
{
return new per_attendance_issue()
{
AllotId = allotId,
......@@ -1047,6 +1054,7 @@ public ApiResponse IssueStatistics(int allotId, int userid, string realName, str
AccountingUnit = item.AccountingUnit,
PersonnelNumber = item.PersonnelNumber,
PersonnelName = item.PersonnelName,
PermanentStaff = item.PermanentStaff,
BeginDate = item.BeginDate,
EndDate = item.EndDate,
DeductionDays = item.DeductionDays,
......@@ -1068,6 +1076,7 @@ public ApiResponse IssueStatistics(int allotId, int userid, string realName, str
var issuePersonnel = issues.FirstOrDefault(w => w.PersonnelNumber == item.PersonnelNumber && w.Code == item.Code);
issuePersonnel.UnitType = item.UnitType;
issuePersonnel.AccountingUnit = item.AccountingUnit;
issuePersonnel.PermanentStaff = item.PermanentStaff;
issuePersonnel.Code = item.Code;
issuePersonnel.BeginDate = item.BeginDate;
issuePersonnel.EndDate = item.EndDate;
......
......@@ -183,6 +183,7 @@ public static List<cof_alias> GetAllPersonnelTags(bool ownerQuery)
new cof_alias{ Alias = "出勤天数", Name = nameof(per_employee.AttendanceDay), States = 1, SumStatus = 0, Sort = 14 },
new cof_alias{ Alias = "预留比例", Name = nameof(per_employee.ReservedRatio), States = 1, SumStatus = 0, Sort = 16 },
new cof_alias{ Alias = "银行卡号", Name = nameof(per_employee.BankCard), States = 1, SumStatus = 0, Sort = 18 },
new cof_alias{ Alias = "人员系数", Name = nameof(per_employee.PermanentStaff), States = 0, SumStatus = 0, Sort = 19 },
new cof_alias{ Alias = "备用01", Name = nameof(per_employee.Reserve01), States = 0, SumStatus = 0, Sort = 20 },
new cof_alias{ Alias = "备用02", Name = nameof(per_employee.Reserve02), States = 0, SumStatus = 0, Sort = 20 },
......
......@@ -434,5 +434,52 @@ public int UpdateAllotStates(int allotId, int states, string remark, int generat
throw;
}
}
/// <summary>
/// 查询考勤下发绩效视图(运行视图定义)
/// </summary>
/// <param name="allotId"></param>
/// <param name="unitType"></param>
/// <param name="accountingUnit"></param>
/// <param name="personnelName"></param>
/// <param name="personnelNumber"></param>
/// <returns></returns>
public IEnumerable<dynamic> QueryAttendanceIssue(int allotId, List<string> unitType, string accountingUnit, string personnelNameOrNumber)
{
try
{
using (var connection = new MySqlConnection(_options.Value.PerformanceConnectionString))
{
if (connection.State != ConnectionState.Open) connection.Open();
string sql = $@"select * from view_attendance_issue where allotID = @allotId";
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@allotId", allotId);
if (unitType?.Any() == true)
{
sql += " and unitType in @unitType";
parameters.Add("@unitType", unitType);
}
if (!string.IsNullOrEmpty(accountingUnit))
{
sql += " and accountingUnit like @accountingUnit";
parameters.Add("@accountingUnit", $"%{accountingUnit}%");
}
if (!string.IsNullOrEmpty(personnelNameOrNumber))
{
sql += " and (personnelNumber like @personnelNameOrNumber or personnelName like @personnelNameOrNumber)";
parameters.Add("@personnelNameOrNumber", $"%{personnelNameOrNumber}%");
}
return connection.Query(sql, parameters, commandTimeout: 60 * 60);
}
}
catch (Exception ex)
{
_logger.LogError($"SQL执行异常:{ex}");
throw;
}
}
}
}
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