Commit 647402d4 by ruyun.zhang

Merge branch 'feature/考勤下发' into develop

parents 7652ec8b 42cc5fc5
diff a/performance/Performance.Api/Controllers/AttendanceController.cs b/performance/Performance.Api/Controllers/AttendanceController.cs (rejected hunks)
@@ -160,7 +160,6 @@
/// <param name="allotId"></param>
/// <param name="attendanceType"></param>
/// <returns></returns>
- [HttpPost("Type/Edit/{allotId},{hospitalId}")]
[HttpPost("Type/Edit/{allotId}")]
public ApiResponse<AttendanceType> InsertAttendanceType(int allotId, AttendanceType attendanceType)
{
......@@ -901,6 +901,7 @@ public ApiResponse CopyDropDown()
//new CopyDrop{Label="收入费用类别",Value="drugTypes"},
new CopyDrop{Label="支出费用类别",Value="drugTypeDisburses"},
new CopyDrop{Label="费用类别系数",Value="drugTypeFactors"},
new CopyDrop{Label="考勤类型",Value="attendanceType"},
//new CopyDrop{Label="科室类型",Value="deptTypes"},
new CopyDrop{Label="二次绩效配置",Value="agains"},
};
......
......@@ -612,10 +612,22 @@ public ApiResponse<List<TitleValue>> ClearAprData([FromBody] AprAmountAuditReque
/// <param name="request"></param>
/// <returns></returns>
[HttpPost("autocomplate")]
public ApiResponse<List<view_per_apr_amount>> GetEmployeeMessage([FromBody] per_apr_amount request)
{
var result = employeeService.GetEmployeeMessage(request.AllotId, request.PersonnelNumber, request.DoctorName, claim.GetUserId());
return new ApiResponse<List<view_per_apr_amount>>(ResponseType.OK, "人员信息", result);
public ApiResponse<List<AutocomplateEmployeeResponse>> GetEmployeeMessage([FromBody] per_apr_amount request)
{
var userId = claim.GetUserId();
var user = userService.GetUserIdentity(userId);
var result = employeeService.GetEmployeeMessage(request.AllotId, request.PersonnelNumber, request.DoctorName, userId);
var res = result.Select(t => new AutocomplateEmployeeResponse
{
AllotId = request.AllotId,
PersonnelNumber = t.PersonnelNumber,
DoctorName = t.DoctorName,
TypeInDepartment = user.Department,
AccountingUnit = t.AccountingUnit,
PermanentStaff = t.PermanentStaff,
}).ToList();
return new ApiResponse<List<AutocomplateEmployeeResponse>>(ResponseType.OK, "人员信息", res);
}
/// <summary>
......
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
......@@ -52,6 +53,40 @@ public ApiResponse GetPersons([FromRoute] int allotId, [FromBody] PersonParamsRe
}
/// <summary>
/// 获取所有员工记录
/// </summary>
/// <param name="allotId">绩效月ID</param>
/// <param name="personnelNumber">工号</param>
/// <param name="personnelName">姓名</param>
/// <param name="unitType">核算组别</param>
/// <param name="accountingUnit">核算单元</param>
/// <param name="searchText">多字段查询;支持“工号/姓名/核算组别/核算单元”</param>
/// <param name="pageIndex">页码 默认1</param>
/// <param name="pageSize">行数 默认</param>
/// <returns></returns>
[Route("employee/list")]
[HttpPost]
public ApiResponse GetEmployee([FromQuery] int allotId,
[FromQuery, DefaultValue("")] string personnelNumber,
[FromQuery, DefaultValue("")] string personnelName,
[FromQuery, DefaultValue("")] string unitType,
[FromQuery, DefaultValue("")] string accountingUnit,
[FromQuery, DefaultValue("")] string searchText,
[FromQuery, DefaultValue(1)] int pageIndex,
[FromQuery, DefaultValue(20)] int pageSize)
{
var list = personService.GetEmployee(allotId, personnelNumber, personnelName, unitType, accountingUnit, searchText, pageIndex, pageSize);
return new ApiResponse(ResponseType.OK, new
{
list.CurrentPage,
list.TotalPages,
list.PageSize,
list.TotalCount,
list
});
}
/// <summary>
/// 新增员工信息
/// </summary>
/// <param name="request"></param>
......
......@@ -34,7 +34,7 @@
"/api/account/updateuser"
],
//登录过期时间
"ExpirationMinutes": "1200",
"ExpirationMinutes": "1200000",
//验证码过期
"SmsCodeMinutes": "5",
////护士长二次绩效管理员
......
......@@ -6118,6 +6118,166 @@
修改时间
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.Id">
<summary>
自增主键
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.HospitalId">
<summary>
医院Id,可空
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.AllotId">
<summary>
绩效Id
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.PersonnelNumber">
<summary>
工号
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.PersonnelName">
<summary>
姓名
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.Code">
<summary>
核算单元编码
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.UnitType">
<summary>
人员类别
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.AccountingUnit">
<summary>
核算单元
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.State">
<summary>
状态(未提交 = 0,提交 = 1,通过 = 2,驳回 = 3)
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.SubmitUser">
<summary>
提交用户
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.SubmitTime">
<summary>
提交时间
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.AuditUser">
<summary>
审核用户
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.AuditTime">
<summary>
审核时间
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.Remarks">
<summary>
备注
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept.Day01">
<summary>
01日
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.HospitalId">
<summary>
医院Id
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.AllotId">
<summary>
绩效Id
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.Code">
<summary>
核算单元编码
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.UnitType">
<summary>
人员类别
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.AccountingUnit">
<summary>
核算单元
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.PersonnelNumber">
<summary>
工号
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.PersonnelName">
<summary>
姓名
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.PermanentStaff">
<summary>
人员系数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.BeginDate">
<summary>
在科开始时间
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.EndDate">
<summary>
在科结束时间
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.WorkFullDays">
<summary>
全勤天数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.AttendanceDays">
<summary>
出勤天数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.DeductionDays">
<summary>
核减天数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.NoDeductionDays">
<summary>
不核减天数
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_dept_report.CreateTime">
<summary>
创建时间
</summary>
</member>
<member name="P:Performance.EntityModels.Entity.per_attendance_issue.HospitalId">
<summary>
医院Id
......@@ -6153,6 +6313,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>
在科开始时间
......@@ -6990,7 +7155,7 @@
</member>
<member name="P:Performance.EntityModels.per_employee.PermanentStaff">
<summary>
核算人
人员系
</summary>
</member>
<member name="P:Performance.EntityModels.per_employee.EfficiencyNumber">
......@@ -9523,6 +9688,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>
考勤时间
......
......@@ -38,5 +38,9 @@ public class Application
/// 开启反SQL注入白名单地址
/// </summary>
public string[] AntiSqlInjectRouteWhite { get; set; }
/// <summary>
/// 夜班绩效文本名称
/// </summary>
public string[] NightShiftTexts { get; set; }
}
}
using AutoMapper;
using Performance.DtoModels.Request;
using Performance.DtoModels.Response;
using Performance.EntityModels;
using Performance.EntityModels.Entity;
using Performance.Infrastructure;
......@@ -277,6 +278,8 @@ public AutoMapperConfigs()
.ReverseMap();
CreateMap<cof_again, CofAgainRequest>().ReverseMap();
CreateMap<AttendanceData, per_attendance>().ReverseMap();
CreateMap<AttendanceVacationData, per_attendance_vacation>().ReverseMap();
}
}
}
......@@ -124,6 +124,16 @@ public enum State
确认 = 2,
驳回 = 3,
}
/// <summary>
/// 考勤上报
/// </summary>
public enum Report
{
未提交 = 1,
提交 = 2,
通过 = 3,
驳回 = 4,
}
public enum OperationType
{
全部 = 0,
......
......@@ -14,11 +14,13 @@ public PerAttendanceIssueDto()
{ }
public PerAttendanceIssueDto(AttendanceStatistics item)
{
Id = 0;
Code = item.Code;
UnitType = item.UnitType;
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);
......@@ -31,11 +33,13 @@ public PerAttendanceIssueDto(AttendanceStatistics item)
public PerAttendanceIssueDto(per_attendance_issue item)
{
Id = item.Id;
Code = item.Code;
UnitType = item.UnitType;
AccountingUnit = item.AccountingUnit;
PersonnelNumber = item.PersonnelNumber;
PersonnelName = item.PersonnelName;
PermanentStaff = item.PermanentStaff;
BeginDate = item.BeginDate;
EndDate = item.EndDate;
DeductionDays = item.DeductionDays;
......@@ -48,6 +52,7 @@ public PerAttendanceIssueDto(per_attendance_issue item)
//public int HospitalId { get; set; } //医院Id
//public int AllotId { get; set; } //绩效Id
public int Id { get; set; }
public string Code { get; set; } //核算单元编码
/// <summary>
/// 人员类别
......@@ -66,6 +71,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; }
......
using System;
using System.Collections.Generic;
namespace Performance.DtoModels.Request
{
public class AttendanceDeptAudit
{
/// <summary>
/// 状态(通过 = 3,驳回 = 4)
/// </summary>
public int State { get; set; }
/// <summary>
/// 说明
/// </summary>
public string Remark { get; set; }
}
public class AttendanceDept
{
/// <summary>
/// 工号
/// </summary>
public string PersonnelNumber { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
/// <summary>
/// 01日
/// </summary>
public string Day01 { get; set; }
public string Day02 { get; set; }
public string Day03 { get; set; }
public string Day04 { get; set; }
public string Day05 { get; set; }
public string Day06 { get; set; }
public string Day07 { get; set; }
public string Day08 { get; set; }
public string Day09 { get; set; }
public string Day10 { get; set; }
public string Day11 { get; set; }
public string Day12 { get; set; }
public string Day13 { get; set; }
public string Day14 { get; set; }
public string Day15 { get; set; }
public string Day16 { get; set; }
public string Day17 { get; set; }
public string Day18 { get; set; }
public string Day19 { get; set; }
public string Day20 { get; set; }
public string Day21 { get; set; }
public string Day22 { get; set; }
public string Day23 { get; set; }
public string Day24 { get; set; }
public string Day25 { get; set; }
public string Day26 { get; set; }
public string Day27 { get; set; }
public string Day28 { get; set; }
public string Day29 { get; set; }
public string Day30 { get; set; }
public string Day31 { get; set; }
}
public class AttendanceDeptMore : AttendanceDept
{
/// <summary>
/// 绩效Id
/// </summary>
public int AllotId { get; set; }
/// <summary>
/// 核算单元编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 核算组别
/// </summary>
public string UnitType { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 状态(未提交 = 1,提交 = 2,通过 = 3,驳回 = 4)
/// </summary>
public int State { get; set; }
/// <summary>
/// 提交用户
/// </summary>
public string SubmitUser { get; set; }
/// <summary>
/// 提交时间
/// </summary>
public DateTime? SubmitTime { get; set; }
/// <summary>
/// 审核用户
/// </summary>
public string AuditUser { get; set; }
/// <summary>
/// 审核时间
/// </summary>
public DateTime? AuditTime { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; }
}
public class AttendanceDeptDetail
{
public List<TColumn> Columns { get; set; }
public List<AttendanceDeptMore> Data { 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>
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.DtoModels.Response
{
public class AttendanceData : AttendanceUpdateData
{
/// <summary>
/// 工号
/// </summary>
public string PersonnelNumber { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string PersonnelName { get; set; }
}
public class AttendanceUpdateData
{
/// <summary>
/// 拿来修改的id
/// </summary>
public int AttendanceId { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
/// <summary>
/// 人员类别
/// </summary>
public string CallInUnitType { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string CallInAccountingUnit { get; set; }
/// <summary>
/// 调入时间
/// </summary>
public DateTime? CallInDate { get; set; }
}
}
using System;
namespace Performance.DtoModels.Response
{
public class AttendanceDeptState : AttendanceDeptAuditList
{
/// <summary>
/// 标题名
/// </summary>
public string Title { get; set; }
}
public class AttendanceDeptAuditList
{
/// <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 FinishCount { get; set; }
/// <summary>
/// 驳回数
/// </summary>
public int RejectCount { get; set; }
/// <summary>
/// 状态(未提交 = 1,提交 = 2,通过 = 3,驳回 = 4)
/// </summary>
public int State { get; set; }
/// <summary>
/// 提交人
/// </summary>
public string SubmitUser { get; set; }
/// <summary>
/// 提交时间
/// </summary>
public DateTime? SubmitTime { get; set; }
/// <summary>
/// 审核人
/// </summary>
public string AuditUser { get; set; }
/// <summary>
/// 审核时间
/// </summary>
public DateTime? AuditTime { get; set; }
/// <summary>
/// 状态描述
/// </summary>
public string Remarks { get; set; }
}
}
using System;
using System.Collections.Generic;
namespace Performance.DtoModels
{
public class AttendanceDeptReport
{
/// <summary>
/// 核算单元编码
/// </summary>
public string Code { get; set; }
/// <summary>
///
/// </summary>
public int AllotID { get; set; }
/// <summary>
/// 核算组别
/// </summary>
public string UnitType { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 科室名称
/// </summary>
public string Department { get; set; }
/// <summary>
/// 工号
/// </summary>
public string PersonnelNumber { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
/// <summary>
/// 在科开始时间
/// </summary>
public DateTime BeginDate { get; set; }
/// <summary>
/// 在科结束时间
/// </summary>
public DateTime EndDate { get; set; }
public List<AttendanceDeptReportItem> Detial { get; set; }
/// <summary>
/// 出勤天数
/// </summary>
public int AttendanceDays { get; set; }
}
public class AttendanceDeptReportItem
{
/// <summary>
/// 请假天数
/// </summary>
public object Value { get; set; }
/// <summary>
/// 考勤类型
/// </summary>
public string Title { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
}
}
......@@ -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; }
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.DtoModels.Response
{
public class AttendanceVacationData : AttendanceVacationUpdateData
{
/// <summary>
/// 工号
/// </summary>
public string PersonnelNumber { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string PersonnelName { get; set; }
}
public class AttendanceVacationUpdateData
{
/// <summary>
/// 拿来修改的id
/// </summary>
public int AttendanceVacationId { get; set; }
/// <summary>
/// per_attendance_type表中ID
/// </summary>
public int TypeId { get; set; }
/// <summary>
/// 开始时间
/// </summary>
public DateTime? BegDate { get; set; }
/// <summary>
/// 结束时间
/// </summary>
public DateTime? EndDate { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.DtoModels.Response
{
public class AutocomplateEmployeeResponse
{
/// <summary>
///
/// </summary>
public int AllotId { get; set; }
/// <summary>
/// 人员工号
/// </summary>
public string PersonnelNumber { get; set; }
/// <summary>
/// 医生姓名
/// </summary>
public string DoctorName { get; set; }
/// <summary>
/// 录入科室
/// </summary>
public string TypeInDepartment { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
}
}
namespace Performance.DtoModels
{
public class TColumn
{
public TColumn()
{
}
public TColumn(string field, string title, int width = 80, string @fixed = "", bool sortable = false)
{
Field = field;
Title = title;
Width = width;
Fixed = @fixed;
Sortable = sortable;
}
public string Field { get; set; }
public string Title { get; set; }
public int Width { get; set; }
public string Fixed { get; set; }
public bool Sortable { get; set; }
}
}
......@@ -254,6 +254,8 @@ public PerformanceDbContext(DbContextOptions<PerformanceDbContext> options)
public virtual DbSet<sys_user_role> sys_user_role { get; set; }
public virtual DbSet<sys_version> sys_version { get; set; }
public virtual DbSet<per_attendance> per_attendance { get; set; }
public virtual DbSet<per_attendance_dept> per_attendance_dept { get; set; }
public virtual DbSet<per_attendance_dept_report> per_attendance_dept_report { get; set; }
public virtual DbSet<per_attendance_issue> per_attendance_issue { get; set; }
public virtual DbSet<per_attendance_type> per_attendance_type { get; set; }
public virtual DbSet<per_attendance_vacation> per_attendance_vacation { get; set; }
......
......@@ -17,6 +17,10 @@ public class per_attendance
public int AllotId { get; set; } //绩效Id
public string PersonnelNumber { get; set; } //工号
public string PersonnelName { get; set; } //姓名
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
public string CallInUnitType { get; set; } //人员类别
public string CallInAccountingUnit { get; set; } //核算单元
public DateTime? CallInDate { get; set; } //调入时间
......
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels.Entity
{
[Table("per_attendance_dept")]
public class per_attendance_dept
{
/// <summary>
/// 自增主键
/// </summary>
[Key]
public int Id { get; set; }
/// <summary>
/// 医院Id,可空
/// </summary>
public int? HospitalId { get; set; }
/// <summary>
/// 绩效Id
/// </summary>
public int AllotId { get; set; }
/// <summary>
/// 工号
/// </summary>
public string PersonnelNumber { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
/// <summary>
/// 核算单元编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 人员类别
/// </summary>
public string UnitType { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 状态(未提交 = 0,提交 = 1,通过 = 2,驳回 = 3)
/// </summary>
public int State { get; set; }
/// <summary>
/// 提交用户
/// </summary>
public string SubmitUser { get; set; }
/// <summary>
/// 提交时间
/// </summary>
public DateTime? SubmitTime { get; set; }
/// <summary>
/// 审核用户
/// </summary>
public string AuditUser { get; set; }
/// <summary>
/// 审核时间
/// </summary>
public DateTime? AuditTime { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; }
/// <summary>
/// 01日
/// </summary>
public int? Day01 { get; set; }
public int? Day02 { get; set; }
public int? Day03 { get; set; }
public int? Day04 { get; set; }
public int? Day05 { get; set; }
public int? Day06 { get; set; }
public int? Day07 { get; set; }
public int? Day08 { get; set; }
public int? Day09 { get; set; }
public int? Day10 { get; set; }
public int? Day11 { get; set; }
public int? Day12 { get; set; }
public int? Day13 { get; set; }
public int? Day14 { get; set; }
public int? Day15 { get; set; }
public int? Day16 { get; set; }
public int? Day17 { get; set; }
public int? Day18 { get; set; }
public int? Day19 { get; set; }
public int? Day20 { get; set; }
public int? Day21 { get; set; }
public int? Day22 { get; set; }
public int? Day23 { get; set; }
public int? Day24 { get; set; }
public int? Day25 { get; set; }
public int? Day26 { get; set; }
public int? Day27 { get; set; }
public int? Day28 { get; set; }
public int? Day29 { get; set; }
public int? Day30 { get; set; }
public int? Day31 { get; set; }
}
}
\ No newline at end of file
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels.Entity
{
[Table("per_attendance_dept_report")]
public class per_attendance_dept_report
{
[Key]
public int Id { get; set; }
/// <summary>
/// 医院Id
/// </summary>
public int HospitalId { get; set; }
/// <summary>
/// 绩效Id
/// </summary>
public int AllotId { get; set; }
/// <summary>
/// 核算单元编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 人员类别
/// </summary>
public string UnitType { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 工号
/// </summary>
public string PersonnelNumber { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string PersonnelName { get; set; }
/// <summary>
/// 人员系数
/// </summary>
public decimal? PermanentStaff { get; set; }
/// <summary>
/// 在科开始时间
/// </summary>
public DateTime? BeginDate { get; set; }
/// <summary>
/// 在科结束时间
/// </summary>
public DateTime? EndDate { get; set; }
/// <summary>
/// 全勤天数
/// </summary>
public int WorkFullDays { get; set; }
/// <summary>
/// 出勤天数
/// </summary>
public int AttendanceDays { get; set; }
/// <summary>
/// 核减天数
/// </summary>
public int DeductionDays { get; set; }
/// <summary>
/// 不核减天数
/// </summary>
public int NoDeductionDays { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime? CreateTime { 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; }
......
namespace Performance.EntityModels
{
public class AccountUnit
{
public string AccountingUnit { get; set; }
public string UnitType { get; set; }
}
}
......@@ -12,6 +12,7 @@ public class view_attendance
public int ALLOTID { get; set; }
public int YEAR { get; set; }
public int MONTH { get; set; }
public int Id { get; set; } = 0;
/// <summary>
/// 人员类别
/// </summary>
......@@ -29,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; }
......
......@@ -2,10 +2,9 @@
using System.Collections.Generic;
using System.Text;
namespace Performance.Infrastructure
public static partial class UtilExtensions
{
public static partial class UtilExtensions
{
public static string RemoveLineBreak(this string text)
{
return text.Replace("\n", "");
......@@ -15,6 +14,15 @@ public static string RemoveEnter(this string text)
{
return text.Replace("\r", "");
}
public static string RemoveSpace(this string text)
{
return text.Replace(" ", "");
}
public static string Clean(this string text)
{
return text.Trim().RemoveEnter().RemoveLineBreak().RemoveSpace();
}
/// <summary>
/// 分隔 移除空项
......@@ -48,5 +56,4 @@ public static bool EqualsIgnoreCase(this string text, string value)
{
return text.Equals(value, StringComparison.OrdinalIgnoreCase);
}
}
}
......@@ -29,6 +29,14 @@ public new PageList<per_employee> GetEntitiesForPaging(int pageNumber, int pageS
return PageList<per_employee>.Create(queryableAuthors, pageNumber, pageSize);
}
public new List<AccountUnit> GetEmployeeUnit(Expression<Func<per_employee, bool>> exp)
{
return context.Set<per_employee>()
.Where(exp)
.Select(w => new AccountUnit { UnitType = w.UnitType, AccountingUnit = w.AccountingUnit })
.Distinct()
.ToList();
}
//public Comparison GetComparison(ComparisonPagingRequest request)
//{
......
using Performance.EntityModels;
using Performance.EntityModels.Entity;
namespace Performance.Repository.Repository
{
public partial class PerforPerAttendanceDeptReportRepository : PerforRepository<per_attendance_dept_report>
{
/// <summary>
/// per_attendance Repository
/// </summary>
public PerforPerAttendanceDeptReportRepository(PerformanceDbContext context) : base(context)
{
}
}
}
using Performance.EntityModels;
using Performance.EntityModels.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Performance.Repository.Repository
{
public partial class PerforPerAttendanceDeptRepository : PerforRepository<per_attendance_dept>
{
/// <summary>
/// per_attendance Repository
/// </summary>
public PerforPerAttendanceDeptRepository(PerformanceDbContext context) : base(context)
{
}
}
}
using AutoMapper;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using AutoMapper;
using Microsoft.Extensions.Options;
using Performance.DtoModels;
using Performance.DtoModels.AppSettings;
using Performance.EntityModels;
using Performance.Infrastructure;
using Performance.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Performance.Services.AllotCompute
{
......@@ -17,6 +16,7 @@ namespace Performance.Services.AllotCompute
public class ProcessComputService : IAutoInjection
{
private readonly IMapper _mapper;
private readonly IOptions<Application> _options;
private readonly BudgetService _budgetService;
private PerforCofincomeRepository perforCofincomeRepository;
private PerforPersheetRepository perforPerSheetRepository;
......@@ -35,6 +35,7 @@ public class ProcessComputService : IAutoInjection
public ProcessComputService(
IMapper mapper,
IOptions<Application> options,
BudgetService budgetService,
PerforCofincomeRepository perforCofincomeRepository,
PerforPersheetRepository perforPerSheetRepository,
......@@ -52,6 +53,7 @@ public class ProcessComputService : IAutoInjection
PerforPerallotRepository perallotRepository)
{
_mapper = mapper;
_options = options;
_budgetService = budgetService;
this.perforCofincomeRepository = perforCofincomeRepository;
this.perforPerSheetRepository = perforPerSheetRepository;
......@@ -307,7 +309,10 @@ public List<PerSheet> Compute(PerExcel excel, List<PerSheet> perSheet, per_allot
workDoctor = info.Data.FirstOrDefault(t => t.UnitType == UnitType.医生组.ToString() && t.AccountingUnit == dept.AccountingUnit);
// 夜班绩效 从医院奖罚的明细项中获取
// 2022-03-16 wufeifei
string[] nightShiftTexts = new string[] { "夜班绩效", "夜班工作量", "夜班工作量奖励" };
string[] nightShiftTexts = _options.Value.NightShiftTexts;
if (nightShiftTexts?.Any() != true)
nightShiftTexts = new string[] { "夜班绩效", "夜班工作量", "夜班工作量奖励", "手术绩效", };
var nightShift = adjustLaterOtherFee?.FirstOrDefault(w => w.UnitType == dept.UnitType && w.AccountingUnit == dept.AccountingUnit && nightShiftTexts.Contains(w.TypeName?.Trim()))?.CellValue ?? 0;
dept.NightShiftWorkPerforFee = nightShift;
......@@ -391,7 +396,10 @@ public void ComputeOffice(per_allot allot, PerExcel excel)
{
// 夜班绩效 从医院奖罚的明细项中获取
// 2022-03-16 wufeifei
string[] nightShiftTexts = new string[] { "夜班绩效", "夜班工作量", "夜班工作量奖励" };
string[] nightShiftTexts = _options.Value.NightShiftTexts;
if (nightShiftTexts?.Any() != true)
nightShiftTexts = new string[] { "夜班绩效", "夜班工作量", "夜班工作量奖励", "手术绩效", };
var nightShift = adjustLaterOtherFee?.FirstOrDefault(w => w.UnitType == dept.UnitType && w.AccountingUnit == dept.AccountingUnit && nightShiftTexts.Contains(w.TypeName?.Trim()))?.CellValue ?? 0;
dept.NightShiftWorkPerforFee = nightShift;
......
using AutoMapper;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Performance.DtoModels;
using Performance.DtoModels.AppSettings;
using Performance.EntityModels;
using Performance.Infrastructure;
using Performance.Repository;
......@@ -17,6 +19,7 @@ namespace Performance.Services.AllotCompute
public class ResultComputeService : IAutoInjection
{
private readonly IMapper _mapper;
private readonly IOptions<Application> _options;
private readonly DapperService _service;
private readonly PerforPerallotRepository _perforPerallotRepository;
private readonly BaiscNormService baiscNormService;
......@@ -36,6 +39,7 @@ public class ResultComputeService : IAutoInjection
public ResultComputeService(
IMapper mapper,
IOptions<Application> options,
DapperService service,
PerforPerallotRepository perforPerallotRepository,
PerforHospitalRepository hospitalRepository,
......@@ -52,6 +56,7 @@ public class ResultComputeService : IAutoInjection
ILogger<ResultComputeService> logger)
{
_mapper = mapper;
_options = options;
_service = service;
_perforPerallotRepository = perforPerallotRepository;
this.baiscNormService = baiscNormService;
......@@ -174,7 +179,10 @@ public void SpecialUnitCompute(PerExcel excel, per_allot allot, List<res_baiscno
// 夜班绩效 从医院奖罚的明细项中获取
// 2022-03-16 wufeifei
string[] nightShiftTexts = new string[] { "夜班绩效", "夜班工作量", "夜班工作量奖励" };
string[] nightShiftTexts = _options.Value.NightShiftTexts;
if (nightShiftTexts?.Any() != true)
nightShiftTexts = new string[] { "夜班绩效", "夜班工作量", "夜班工作量奖励", "手术绩效", };
var nightShift = adjustLaterOtherFee?.FirstOrDefault(w => w.UnitType == dept?.UnitType && w.AccountingUnit == dept?.AccountingUnit && nightShiftTexts.Contains(w.TypeName?.Trim()))?.CellValue ?? 0;
decimal? headcount = null;
......@@ -702,9 +710,6 @@ public bool IssuedChangeSecond(per_allot allot, List<ag_secondallot> secondList)
}
}
perforAgsecondallotRepository.UpdateRange(updSeconds.ToArray());
_service.FreezeAllotSync(allot.ID);
_service.SecondUseTempRestore();
_service.RestoreSecondAllot();
}
_service.FreezeAllotSync(allot.ID);
_service.SecondUseTempRestore();
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -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 },
......
......@@ -738,7 +738,11 @@ public ApiResponse BatchSaveAccounting(int allotId, SaveCollectData request)
/// <param name="iD"></param>
public void Copy(per_allot allot)
{
NewCopy(new CopyRequest() { AllotId = allot.ID, Type = new[] { "personnels", "workItems", "drugTypeDisburses", "drugTypeFactors", "deptTypes", "agains", "accountings", "department" } });
NewCopy(new CopyRequest()
{
AllotId = allot.ID,
Type = new[] { "personnels", "workItems", "drugTypeDisburses", "drugTypeFactors", "deptTypes", "agains", "accountings", "department", "attendanceType" }
});
}
//todo:新copy
......@@ -764,6 +768,7 @@ public void NewCopy(CopyRequest request)
{ "deptTypes", (allot, prevAllotId) =>_copyService.Copy_DeptTypes(allot, prevAllotId, delHistotyData:true) },
{ "agains", (allot, prevAllotId) =>_copyService.Copy_Agains(allot, prevAllotId, delHistotyData:true) },
{ "accountings", (allot, prevAllotId) =>_copyService.Copy_Accountings(allot, prevAllotId, delHistotyData:true) },
{ "attendanceType", (allot, prevAllotId) =>_copyService.Copy_AttendanceType(allot, prevAllotId, delHistotyData:true) },
{ "department", (allot, prevAllotId) =>_copyService.Copy_DeptDic(allot, prevAllotId, delHistotyData:true) },
};
......
using Microsoft.Extensions.Logging;
using Performance.EntityModels;
using Performance.EntityModels.Entity;
using Performance.Repository;
using Performance.Repository.Repository;
using System;
using System.Linq;
using static Performance.DtoModels.Attendance;
namespace Performance.Services
{
......@@ -18,6 +20,7 @@ public class CopyService : IAutoInjection
private readonly PerforCofaccountingRepository _cofaccountingRepository;
private readonly PerforCofdrugtypeDisburseRepository _drugtypeDisburseRepository;
private readonly PerforCofdrugtypefactorRepository _cofdrugtypefactorRepository;
private readonly PerfoPperAttendanceTypeRepository _pperAttendanceTypeRepository;
public CopyService(
ILogger<ConfigService> logger,
......@@ -28,7 +31,8 @@ public class CopyService : IAutoInjection
PerforCofdepttypeRepository perforCofdepttypeRepository,
PerforCofaccountingRepository cofaccountingRepository,
PerforCofdrugtypeDisburseRepository drugtypeDisburseRepository,
PerforCofdrugtypefactorRepository cofdrugtypefactorRepository)
PerforCofdrugtypefactorRepository cofdrugtypefactorRepository,
PerfoPperAttendanceTypeRepository pperAttendanceTypeRepository)
{
_logger = logger;
_perdeptdicRepository = perdeptdicRepository;
......@@ -39,6 +43,7 @@ public class CopyService : IAutoInjection
_cofaccountingRepository = cofaccountingRepository;
_drugtypeDisburseRepository = drugtypeDisburseRepository;
_cofdrugtypefactorRepository = cofdrugtypefactorRepository;
_pperAttendanceTypeRepository = pperAttendanceTypeRepository;
}
......@@ -235,5 +240,30 @@ public void Copy_DeptDic(per_allot allot, int prevAllotId, bool delHistotyData =
}
}
public void Copy_AttendanceType(per_allot allot, int prevAllotId, bool delHistotyData = false)
{
var flag = delHistotyData;
_logger.LogInformation($"copy attendanceType");
var attendanceTypes = _pperAttendanceTypeRepository.GetEntities(t => t.AllotId == allot.ID);
if (delHistotyData && attendanceTypes != null && attendanceTypes.Any())
flag = _pperAttendanceTypeRepository.RemoveRange(attendanceTypes.ToArray());
if (flag || attendanceTypes == null || !attendanceTypes.Any())
{
attendanceTypes = _pperAttendanceTypeRepository.GetEntities(t => t.AllotId == prevAllotId) ?? _pperAttendanceTypeRepository.GetEntities(t => t.AllotId == -1);
if (attendanceTypes != null && attendanceTypes.Any())
{
var newAttendanceTypes = attendanceTypes.Select(t => new per_attendance_type
{
AllotId = allot.ID,
AttendanceName = t.AttendanceName,
HospitalId = t.HospitalId,
IsDeduction = t.IsDeduction
});
_pperAttendanceTypeRepository.AddRange(newAttendanceTypes.ToArray());
}
}
}
}
}
......@@ -434,5 +434,96 @@ 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="personnelNameOrNumber"></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 = @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;
}
}
/// <summary>
/// 查询考勤下发绩效视图(运行视图定义)
/// </summary>
/// <param name="allotId"></param>
/// <param name="unitType"></param>
/// <param name="accountingUnit"></param>
/// <param name="personnelNameOrNumber"></param>
/// <returns></returns>
public IEnumerable<dynamic> QueryAttendanceDeptReport(int allotId, 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_dept where allotID = @allotId";
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@allotId", allotId);
if (unitType?.Any() == true)
{
sql += " and unitType = @unitType";
parameters.Add("@unitType", unitType);
}
if (!string.IsNullOrEmpty(accountingUnit))
{
sql += " and accountingUnit = @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;
}
}
}
}
......@@ -959,7 +959,7 @@ public ApiResponse<AprTypeRequest> UpdateAprType(int typeId, AprTypeRequest requ
{
if (string.IsNullOrEmpty(request.PerforType.Trim()) || request.AllotId <= 0)
return new ApiResponse<AprTypeRequest>(ResponseType.ParameterError, "输入参数不能为空!");
var tepm = perAprAmountTypeRepository.GetEntity(t =>t.Id!=t.Id && t.AllotId == request.AllotId && t.PerforType == request.PerforType);
var tepm = perAprAmountTypeRepository.GetEntity(t => t.Id != t.Id && t.AllotId == request.AllotId && t.PerforType == request.PerforType);
if (tepm != null)
return new ApiResponse<AprTypeRequest>(ResponseType.ParameterError, "已存在该类型");
var res = perAprAmountTypeRepository.GetEntity(t => t.Id == typeId);
......@@ -996,9 +996,9 @@ public ApiResponse DeleteAprType(int typeId)
/// <param name="doctorName"></param>
/// <param name="userId"></param>
/// <returns></returns>
public List<view_per_apr_amount> GetEmployeeMessage(int allotId, string personnelNumber, string doctorName, int userId)
public List<per_employee> GetEmployeeMessage(int allotId, string personnelNumber, string doctorName, int userId)
{
if (string.IsNullOrEmpty(personnelNumber) && string.IsNullOrEmpty(doctorName)) return new List<view_per_apr_amount>();
if (string.IsNullOrEmpty(personnelNumber) && string.IsNullOrEmpty(doctorName)) return new List<per_employee>();
var user = userRepository.GetEntity(w => w.ID == userId && w.IsDelete == 1);
if (user == null) throw new PerformanceException("操作用户不存在或用户信息错误!");
......@@ -1007,8 +1007,7 @@ public List<view_per_apr_amount> GetEmployeeMessage(int allotId, string personne
var employeeId = 0;
if (!string.IsNullOrEmpty(personnelNumber))
{
var employee = peremployeeRepository.GetEntity(w => w.AllotId == allotId && w.PersonnelNumber != null
&& w.PersonnelNumber.Trim() == personnelNumber.Trim());
var employee = peremployeeRepository.GetEntity(w => w.AllotId == allotId && w.PersonnelNumber != null && w.PersonnelNumber.Trim() == personnelNumber.Trim());
if (employee != null)
{
employees.Add(employee);
......@@ -1023,17 +1022,7 @@ public List<view_per_apr_amount> GetEmployeeMessage(int allotId, string personne
if (filterEmployees != null && filterEmployees.Any()) employees.AddRange(filterEmployees);
}
if (employees == null || !employees.Any())
return new List<view_per_apr_amount>();
return employees.Select(t => new view_per_apr_amount
{
AllotId = allotId,
PersonnelNumber = t.PersonnelNumber,
DoctorName = t.DoctorName,
TypeInDepartment = user.Department,
AccountingUnit = t.AccountingUnit
}).ToList();
return employees ?? new List<per_employee>();
}
/// <summary>
......
using AutoMapper;
using MassTransit.Internals.GraphValidation;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
......@@ -35,6 +36,7 @@ public class PersonService : IAutoInjection
private readonly PerforAgsecondallotRepository agsecondallotRepository;
private readonly PerforHospitalRepository perforHospitalRepository;
private readonly PerforCofaccountingRepository perforCofaccountingRepository;
private readonly PerforPerAttendanceIssueRepository _issueRepository;
private readonly UserService userService;
private readonly DapperService dapperService;
private readonly Application application;
......@@ -53,11 +55,11 @@ public class PersonService : IAutoInjection
PerforAgsecondallotRepository agsecondallotRepository,
PerforHospitalRepository perforHospitalRepository,
PerforCofaccountingRepository perforCofaccountingRepository,
PerforPerAttendanceIssueRepository issueRepository,
UserService userService,
DapperService dapperService,
IOptions<Application> application,
IWebHostEnvironment evn
)
IWebHostEnvironment evn)
{
_mapper = mapper;
this.logger = logger;
......@@ -71,6 +73,7 @@ IWebHostEnvironment evn
this.agsecondallotRepository = agsecondallotRepository;
this.perforHospitalRepository = perforHospitalRepository;
this.perforCofaccountingRepository = perforCofaccountingRepository;
_issueRepository = issueRepository;
this.userService = userService;
this.dapperService = dapperService;
this.application = application.Value;
......@@ -150,6 +153,25 @@ public void CreateAllotPersons(int hospitalId, int allotId, int prevAllotId = -1
return entity;
}).ToList();
// lcr 2023-04-14 按调动记录最后一次所在科室更新人员字典
var issues = _issueRepository.GetEntities(w => w.AllotId == prevAllotId);
if (issues?.Any() == true)
{
foreach (var item in data)
{
var issuePersonnel = issues.Where(w => w.PersonnelNumber == item.PersonnelNumber).OrderByDescending(w => w.BeginDate).FirstOrDefault();
if (issuePersonnel != null)
{
if (issuePersonnel.UnitType != item.UnitType || issuePersonnel.AccountingUnit != item.AccountingUnit || issuePersonnel.PermanentStaff != item.PermanentStaff)
{
item.UnitType = issuePersonnel.UnitType;
item.AccountingUnit = issuePersonnel.AccountingUnit;
item.PermanentStaff = issuePersonnel.PermanentStaff;
}
}
}
}
SaveAllotPersons(data);
}
......@@ -234,6 +256,28 @@ public PageList<per_employee> GetPersons(int allotId, int userId, PersonParamsRe
}
/// <summary>
/// 获取所有员工记录分页
/// </summary>
/// <param name="allotId"></param>
/// <returns></returns>
public PageList<per_employee> GetEmployee(int allotId, string personnelNumber, string personnelName, string unitType, string accountingUnit, string searchText, int pageIndex, int pageSize)
{
Expression<Func<per_employee, bool>> exp = t => t.AllotId == allotId;
if (!string.IsNullOrEmpty(personnelNumber))
exp = exp.And(w => w.PersonnelNumber.Contains(personnelNumber));
if (!string.IsNullOrEmpty(personnelName))
exp = exp.And(w => w.DoctorName.Contains(personnelName));
if (!string.IsNullOrEmpty(unitType))
exp = exp.And(w => w.UnitType.Equals(unitType));
if (!string.IsNullOrEmpty(accountingUnit))
exp = exp.And(w => w.AccountingUnit.Contains(accountingUnit));
if (!string.IsNullOrEmpty(searchText))
exp = exp.And(w => w.PersonnelNumber.Contains(searchText) || w.DoctorName.Contains(searchText) || w.UnitType.Contains(searchText) || w.AccountingUnit.Contains(searchText));
return peremployeeRepository.GetEntitiesForPaging(pageIndex, pageSize, exp);
}
/// <summary>
/// 新增员工信息
/// </summary>
/// <param name="request"></param>
......
......@@ -205,6 +205,24 @@ public List<SecondColumnDictionary> GetTableHeaderDictionary(ComputeMode compute
var maps = new List<SecondColumnDictionary>()
{
// 顶部
new SecondColumnDictionary(getAlias(nameof(ag_headsource.TotalPerformance),"可分配绩效"),nameof(ag_headsource.TotalPerformance), true, 10, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.HosOtherPerformance),"医院其他绩效"),nameof(ag_headsource.HosOtherPerformance), true, 20, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.NightShiftWorkPerforTotal),"夜班绩效综合"),nameof(ag_headsource.NightShiftWorkPerforTotal), true, 30, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.TotalPreAccountingReward),"核算平均前单项"),nameof(ag_headsource.TotalPreAccountingReward), true, 40, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.TotalDistPerformance),"科室总绩效"),nameof(ag_headsource.TotalDistPerformance), true, 50, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.DirectorBasisPerformance),"主任基础绩效"),nameof(ag_headsource.DirectorBasisPerformance), true, 60, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.TotalDeptReward),"科室单项奖励"),nameof(ag_headsource.TotalDeptReward), true, 70, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.DaysFullAttendance),"满勤天数"),nameof(ag_headsource.DaysFullAttendance), true, 80, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.DepartmentsPerCapita),"科室人均"),nameof(ag_headsource.DepartmentsPerCapita), true, 90, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.TheNumberOfAccountingDepartment),"科室核算人数"),nameof(ag_headsource.TheNumberOfAccountingDepartment), true, 100, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.TheTotalAllocationOfPerformanceResults),"业绩分配绩效总额"),nameof(ag_headsource.TheTotalAllocationOfPerformanceResults), true, 110, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.SeniorityTitlesAccountedPerformance),"年资职称绩效占比"),nameof(ag_headsource.SeniorityTitlesAccountedPerformance), true, 120, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.SeniorityTitlesPerformance),"年资职称绩效"),nameof(ag_headsource.SeniorityTitlesPerformance), true, 130, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.Workload_Ratio_Default),"工作量绩效占比"),nameof(ag_headsource.Workload_Ratio_Default), true, 140, "Top", isNumber: true),
new SecondColumnDictionary(getAlias(nameof(ag_headsource.Workload_Amount_Default),"工作量绩效金额"),nameof(ag_headsource.Workload_Amount_Default), true, 150, "Top", isNumber: true),
// 表格
new SecondColumnDictionary(getAlias(nameof(ag_bodysource.WorkNumber),"人员工号"),nameof(ag_bodysource.WorkNumber),true,100, isNumber: false),
new SecondColumnDictionary(getAlias(nameof(ag_bodysource.Name),"姓名"),nameof(ag_bodysource.Name),true,100, isNumber: false),
new SecondColumnDictionary(getAlias(nameof(ag_bodysource.Department),"分配科室"),nameof(ag_bodysource.Department),true,100, isNumber: false),
......@@ -254,7 +272,8 @@ public List<SecondColumnDictionary> GetTableHeaderDictionary(ComputeMode compute
foreach (var item in alias)
{
if (!maps.Any(w => w.Key.Equals(item.Name, StringComparison.OrdinalIgnoreCase))
&& !notCalculate.Contains(item.Name))
&& !notCalculate.Contains(item.Name)
&& !item.OriginalName.Equals("Top", StringComparison.OrdinalIgnoreCase))
{
maps.Add(new SecondColumnDictionary(item.Alias, item.Name, false, item.Sort, color: "title_color", isNumber: false, expand: true));
}
......@@ -307,8 +326,8 @@ public List<SecondColumnDictionary> GetTableHeaderDictionary(ComputeMode compute
foreach (var item in workloadTypes.OrderBy(t => t.Id))
{
maps.Add(new SecondColumnDictionary($"{item.TypeName}占比", $"Workload_Ratio_{item.Id}", true, 1, "Top", isNumber: true));
maps.Add(new SecondColumnDictionary($"{item.TypeName}金额", $"Workload_Amount_{item.Id}", true, 1, "Top", isNumber: true));
maps.Add(new SecondColumnDictionary($"{item.TypeName}占比", $"Workload_Ratio_{item.Id}", true, 400, "Top", isNumber: true));
maps.Add(new SecondColumnDictionary($"{item.TypeName}金额", $"Workload_Amount_{item.Id}", true, 400, "Top", isNumber: true));
}
}
}
......@@ -324,7 +343,7 @@ public List<SecondColumnDictionary> GetTableHeaderDictionary(ComputeMode compute
{
maps.Add(new SecondColumnDictionary(item.Value, item.Title, false, ++preAccountingRewardSort, type: "PreAccountingReward", color: "preaccountingreward_color"));
}
return maps.OrderBy(w => w.Sort).ToList();
return maps.OrderBy(w => w.Site).ThenBy(w => w.Sort).ToList();
}
/// <summary>
......
......@@ -574,6 +574,7 @@ select new
AttendanceDay = t1.AttendanceDay,
ReservedRatio = t1.ReservedRatio,
BankCard = t1.BankCard,
PermanentStaff = t1.PermanentStaff,
Remark = t1.Remark,
Reserve01 = t1.Reserve01,
Reserve02 = t1.Reserve02,
......@@ -785,6 +786,7 @@ public ApiResponse SaveReportPersonTag(int hospitalId, int allotId, int userId,
employee.AttendanceDay = pdata.AttendanceDay;
employee.ReservedRatio = pdata.ReservedRatio;
employee.BankCard = pdata.BankCard;
employee.PermanentStaff = pdata.PermanentStaff;
employee.Remark = pdata.Remark;
employee.Reserve01 = pdata.Reserve01;
employee.Reserve02 = pdata.Reserve02;
......@@ -927,7 +929,7 @@ public void SaveReportTag(int hospitalId, SaveCollectData request)
{
var header = request.ColHeaders[c];
var first = alias.FirstOrDefault(w => w.Alias.ToLower() == header.ToLower());
if (!default(KeyValuePair<string, string>).Equals(first)
if (first!=null && !default(KeyValuePair<string, string>).Equals(first)
&& !result.ContainsKey(header)
&& request.Data[rownumber].Length > c)
{
......
......@@ -911,7 +911,8 @@ public List<SecondTempResponse> GetTemp(int hospitalid, string unitType, string
}
else
{
useTemp = agusetempRepository.GetEntity(t => t.HospitalId == hospitalid && t.UnitType == unitType && t.Department == department);
var useTemps = agusetempRepository.GetEntities(t => t.HospitalId == hospitalid);
useTemp = useTemps.FirstOrDefault(t => UnitTypeUtil.IsEqualsUnitType(t.UnitType, unitType) && t.Department == department);
}
var secondTemps = _mapper.Map<List<SecondTempResponse>>(temps);
......@@ -1681,7 +1682,7 @@ bool VerifySubmissioAmount(decimal? leftAmount, decimal? rightAmount)
var nightShiftWorkPerforFee = data.Sum(w => w.NightWorkPerformance ?? 0);
var total = data.Sum(t => (t.DistPerformance ?? 0) + (t.NightWorkPerformance ?? 0));
if (!VerifySubmissioAmount(nightShiftWorkPerforFee, second.NightShiftWorkPerforFee))
throw new PerformanceException($"夜班绩效金额不一致!夜班绩效金额:{second.NightShiftWorkPerforFee ?? 0:0.####},提交金额:{nightShiftWorkPerforFee:0.####}");
throw new PerformanceException($"专项绩效金额不一致!专项绩效金额:{second.NightShiftWorkPerforFee ?? 0:0.####},提交金额:{nightShiftWorkPerforFee:0.####}");
else if (!VerifySubmissioAmount(total, second.RealGiveFee))
throw new PerformanceException($"总金额与考核后金额不一致!可分配金额:{second.RealGiveFee:0.####},提交金额:{total:0.####}");
else
......
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