Commit 05a00395 by ruyun.zhang@suvalue.com

Merge branch 'release/v20210521jixiao.suvalue.com'

parents 2b44bef5 8ac3238c
......@@ -315,7 +315,7 @@ public ApiResponse SelfInfos([FromBody] UserRequest request)
if (request.Role <= 0)
user.IsAgainAdmin = user.Role != null ? roleArray.Contains(user.Role.First().Type ?? 0) : false;
else
user.IsAgainAdmin = user.Role != null ? roleArray.Contains(user.Role.First(t=>t.RoleID==request.Role).Type ?? 0) : false;
user.IsAgainAdmin = user.Role != null ? roleArray.Contains(user.Role.First(t => t.RoleID == request.Role).Type ?? 0) : false;
return new ApiResponse(ResponseType.OK, user);
}
......@@ -371,16 +371,34 @@ public ApiResponse DeleteUser([CustomizeValidator(RuleSet = "Delete"), FromBody]
#endregion
/// <summary>
/// 批量新增用户表头
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("GetBatchUserStructrue")]
[HttpPost]
public ApiResponse GetBatchUserStructrue()
{
var result = _userService.GetUserHandsFlat();
return new ApiResponse(ResponseType.OK, result);
}
/// <summary>
/// 批量新增用户
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[Route("BatchSaveUser")]
[HttpPost]
public ApiResponse BatchSaveUser()
public ApiResponse BatchSaveUser([CustomizeValidator(RuleSet = "Insert"), FromBody] UserCollectData data)
{
var result = _userService.SaveUserHandsFlat(data);
if (result == "")
return new ApiResponse(ResponseType.OK);
else
return new ApiResponse(ResponseType.Error, result);
return new ApiResponse(ResponseType.OK);
}
}
}
\ No newline at end of file
using FluentValidation.AspNetCore;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Internal;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.StaticFiles;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Performance.DtoModels;
......@@ -16,6 +18,7 @@
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
......@@ -88,7 +91,7 @@ public ApiResponse Success([FromBody] AllotRequest request)
/// <returns></returns>
[Route("insert")]
[HttpPost]
public ApiResponse Insert([CustomizeValidator(RuleSet = "Insert"), FromBody] AllotRequest request)
public ApiResponse Insert([FromBody] AllotRequest request)
{
var userId = _claim.GetUserId();
var result = _allotService.InsertAllot(request, userId);
......@@ -298,7 +301,28 @@ public ApiResponse GenerateReport([CustomizeValidator(RuleSet = "Delete"), FromB
await Task.Delay(TimeSpan.FromSeconds(5), token);
}
});
return new ApiResponse(ResponseType.OK);
return new ApiResponse(ResponseType.OK, "统计报表数据任务开始");
}
/// <summary>
/// 验证科室核算单元、工号
/// </summary>
/// <param name="allotId"></param>
/// <returns></returns>
[Route("accounting/verify/{allotId}")]
[HttpPost]
public ApiResponse AccountingVerify([FromRoute] int allotId)
{
_backgroundTaskQueue.QueueBackgroundWorkItem(async token =>
{
using (var scope = _serviceScopeFactory.CreateScope())
{
var scopedServices = scope.ServiceProvider.GetRequiredService<AllotService>();
scopedServices.AccoungtingVerify(allotId);
await Task.Delay(TimeSpan.FromSeconds(5), token);
}
});
return new ApiResponse(ResponseType.OK, "核算单元及组别数据验证任务开始");
}
/*
......@@ -500,5 +524,37 @@ public ApiResponse Reserved([FromBody] ReservedRequest request)
return new ApiResponse(ResponseType.OK, result);
}
/// <summary>
/// 下载当前测算表
/// </summary>
/// <param name="allotid"></param>
/// <returns></returns>
[Route("current/download/{allotid}")]
[HttpGet]
[AllowAnonymous]
public IActionResult DownloadCurrentCalculationTable(int allotid)
{
var allot = _allotService.GetAllot(allotid);
if (null == allot)
throw new PerformanceException("当前测算表不存在");
if (string.IsNullOrEmpty(allot.Path))
throw new PerformanceException("尚未提交测算表");
if (!FileHelper.IsExistFile(allot.Path))
throw new PerformanceException("测算表文件路径无效");
var memoryStream = new MemoryStream();
using (var stream = new FileStream(allot.Path, FileMode.Open))
{
stream.CopyToAsync(memoryStream).Wait();
}
memoryStream.Seek(0, SeekOrigin.Begin);
var provider = new FileExtensionContentTypeProvider();
FileInfo fileInfo = new FileInfo(allot.Path);
var memi = provider.Mappings[".xlsx"];
return File(memoryStream, memi, Path.GetFileName(fileInfo.Name));
}
}
}
......@@ -595,18 +595,37 @@ public ApiResponse AccountingDelete([FromRoute] int accountingId)
return new ApiResponse(ResponseType.OK);
}
/// <summary>
/// 核算单元及组别数据验证
/// 核算单元及组别批量表头
/// </summary>
/// <param name="allotId"></param>
/// <returns></returns>
[Route("accountingverify/{allotId}")]
[Route("BatchAccountingStructrue/{allotId}")]
[HttpPost]
public ApiResponse AccountingVerify([FromRoute] int allotId)
public ApiResponse BatchAccountingStructrue([FromRoute] int allotId)
{
_configService.AccoungtingVerify(allotId);
return new ApiResponse(ResponseType.OK);
var request = _configService.GetBatchAccountingStructrue(allotId);
return new ApiResponse(ResponseType.OK, request);
}
/// <summary>
/// 核算单元及组别批量添加
/// </summary>
/// <param name="allotId"></param>
/// <returns></returns>
[Route("BatchSaveAccounting/{allotId}")]
[HttpPost]
public ApiResponse BatchSaveAccounting(int allotId, [FromBody] SaveCollectData request)
{
var result = _configService.BatchSaveAccounting(allotId, request);
if (result)
return new ApiResponse(ResponseType.OK);
else
return new ApiResponse(ResponseType.Error, "请选择正确的核算组别");
}
#endregion
/// <summary>
......
......@@ -181,5 +181,56 @@ public ApiResponse DeptIncomeDetail([CustomizeValidator(RuleSet = "Select"), Fro
var data = personService.DeptIncomeDetail(request, claimService.GetUserId());
return new ApiResponse(ResponseType.OK, data);
}
/// <summary>
/// 批量人员字典表头
/// </summary>
/// <returns></returns>
[HttpPost]
[Route("person/GetBatchPersonStructrue/{hospitalId}")]
public ApiResponse GetBatchPersonStructrue(int hospitalId)
{
var result = personService.GetBatchPersonStructrue(hospitalId);
return new ApiResponse(ResponseType.OK, result);
}
/// <summary>
/// 批量添加人员信息
/// </summary>
/// <returns></returns>
[HttpPost]
[Route("person/{allotId}/BathSavePerson/{hospitalId}")]
public ApiResponse BathSavePerson(int allotId, int hospitalId, SaveCollectData request)
{
var result = personService.BathSavePerson(allotId, hospitalId, request);
if (result)
return new ApiResponse(ResponseType.OK);
else
return new ApiResponse(ResponseType.Error,"出勤天数或预留比例格式错误");
}
/// <summary>
/// 批量科室字典表头
/// </summary>
/// <returns></returns>
[HttpPost]
[Route("dept/GetDeptStructrue/{hospitalId}")]
public ApiResponse GetDeptStructrue(int hospitalId)
{
var result = personService.GetDepartmentHands(hospitalId);
return new ApiResponse(ResponseType.OK, result);
}
/// <summary>
/// 批量添加科室信息
/// </summary>
/// <returns></returns>
[HttpPost]
[Route("dept/SaveDeptHands/{hospitalId}")]
public ApiResponse SaveDeptHands(int hospitalId, SaveCollectData request)
{
personService.SaveDeptDicHands(hospitalId, request);
return new ApiResponse(ResponseType.OK);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
此文件由 Web 项目的发布/打包过程使用。可以通过编辑此 MSBuild 文件
自定义此过程的行为。为了解与此相关的更多内容,请访问 https://go.microsoft.com/fwlink/?LinkID=208121。
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DeleteExistingFiles>True</DeleteExistingFiles>
<ExcludeApp_Data>False</ExcludeApp_Data>
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<WebPublishMethod>FileSystem</WebPublishMethod>
<PublishProvider>FileSystem</PublishProvider>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<PublishProvider>FileSystem</PublishProvider>
<PublishUrl>bin\Release\netcoreapp2.2\publish\</PublishUrl>
<WebPublishMethod>FileSystem</WebPublishMethod>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<TargetFramework>netcoreapp2.2</TargetFramework>
<ProjectGuid>3ae00ff5-f0ba-4d72-a23b-770186309327</ProjectGuid>
<SelfContained>false</SelfContained>
<_IsPortable>true</_IsPortable>
<publishUrl>D:\publish\jx.suvalue.com2</publishUrl>
<DeleteExistingFiles>True</DeleteExistingFiles>
</PropertyGroup>
</Project>
\ No newline at end of file
......@@ -137,7 +137,14 @@
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AccountController.BatchSaveUser">
<member name="M:Performance.Api.Controllers.AccountController.GetBatchUserStructrue">
<summary>
批量新增用户表头
</summary>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AccountController.BatchSaveUser(Performance.DtoModels.UserCollectData)">
<summary>
批量新增用户
</summary>
......@@ -232,6 +239,13 @@
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AllotController.AccountingVerify(System.Int32)">
<summary>
验证科室核算单元、工号
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AllotController.Recalculation(Performance.DtoModels.RecalculationRequest)">
<summary>
重新计算院领导绩效
......@@ -287,6 +301,13 @@
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.AllotController.DownloadCurrentCalculationTable(System.Int32)">
<summary>
下载当前测算表
</summary>
<param name="allotid"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.BudgetController.Query(Performance.DtoModels.Request.BudgetRequest)">
<summary>
预算管理查询(包含金额、占比)
......@@ -607,12 +628,11 @@
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ConfigController.GetAccountingList(System.Int32,System.Int32)">
<member name="M:Performance.Api.Controllers.ConfigController.GetAccountingList(Performance.DtoModels.AccoungingRequest)">
<summary>
获取cof_accounting列表
</summary>
<param name="allotId"></param>
<param name="type">1 返回accounting列表 2 返回核算单元类型 3 返回核算单元</param>
<param name="request"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ConfigController.AccountingInsert(Performance.EntityModels.cof_accounting)">
......@@ -636,6 +656,20 @@
<param name="accountingId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ConfigController.BatchAccountingStructrue(System.Int32)">
<summary>
核算单元及组别批量表头
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ConfigController.BatchSaveAccounting(System.Int32,Performance.DtoModels.SaveCollectData)">
<summary>
核算单元及组别批量添加
</summary>
<param name="allotId"></param>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.ConfigController.WorkHeader(Performance.DtoModels.WorkItemRequest)">
<summary>
获取工作量绩效列头
......@@ -1143,6 +1177,30 @@
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.PersonController.GetBatchPersonStructrue(System.Int32)">
<summary>
批量人员字典表头
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.PersonController.BathSavePerson(System.Int32,System.Int32,Performance.DtoModels.SaveCollectData)">
<summary>
批量添加人员信息
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.PersonController.GetDeptStructrue(System.Int32)">
<summary>
批量科室字典表头
</summary>
<returns></returns>
</member>
<member name="M:Performance.Api.Controllers.PersonController.SaveDeptHands(System.Int32,Performance.DtoModels.SaveCollectData)">
<summary>
批量添加科室信息
</summary>
<returns></returns>
</member>
<member name="T:Performance.Api.Controllers.ReportController">
<summary>
报表
......
......@@ -1149,6 +1149,11 @@
岗位系数
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataAccountBaisc.GiveFee">
<summary>
考核后绩效
</summary>
</member>
<member name="P:Performance.DtoModels.PerDataClinicEmployee.UnitType">
<summary>
核算单元分类
......@@ -1819,6 +1824,21 @@
比率
</summary>
</member>
<member name="P:Performance.DtoModels.AccoungingRequest.AllotId">
<summary>
绩效Id
</summary>
</member>
<member name="P:Performance.DtoModels.AccoungingRequest.Type">
<summary>
1 返回accounting列表 2 返回核算单元类型 3 返回核算单元
</summary>
</member>
<member name="P:Performance.DtoModels.AccoungingRequest.UnitType">
<summary>
核算单元类型、核算组别
</summary>
</member>
<member name="T:Performance.DtoModels.AgainAllotRequest">
<summary>
二次分配请求
......
......@@ -4396,6 +4396,16 @@
备注
</summary>
</member>
<member name="P:Performance.EntityModels.per_apr_amount.IsVerify">
<summary>
0 未通过验证 1 通过验证
</summary>
</member>
<member name="P:Performance.EntityModels.per_apr_amount.VerifyMessage">
<summary>
验证失败描述
</summary>
</member>
<member name="T:Performance.EntityModels.per_budget_amount">
<summary>
预算管理金额
......@@ -4856,6 +4866,16 @@
</summary>
</member>
<member name="P:Performance.EntityModels.per_dept_dic.IsVerify">
<summary>
0 未通过验证 1 通过验证
</summary>
</member>
<member name="P:Performance.EntityModels.per_dept_dic.VerifyMessage">
<summary>
验证失败描述
</summary>
</member>
<member name="T:Performance.EntityModels.per_employee">
<summary>
绩效人员表
......@@ -4976,6 +4996,16 @@
</summary>
</member>
<member name="P:Performance.EntityModels.per_employee.IsVerify">
<summary>
0 未通过验证 1 通过验证
</summary>
</member>
<member name="P:Performance.EntityModels.per_employee.VerifyMessage">
<summary>
验证失败描述
</summary>
</member>
<member name="T:Performance.EntityModels.per_first">
<summary>
首次上传文件地址(当医院存在标准库时,首次上传用户提交固定格式的excel,开发人员配置SQL脚本)
......
using System;
using System.Collections.Generic;
using System.Text;
namespace Performance.DtoModels
{
public class PerEmployeeRquest
{
public string AccountingUnit { get; set; }
public string Department { get; set; }
public string DoctorName { get; set; }
public string PersonnelNumber { get; set; }
public string JobCategory { get; set; }
public string Duty { get; set; }
public string JobTitle { get; set; }
public string UnitType { get; set; }
public int? AttendanceDay { get; set; }
public decimal? ReservedRatio { get; set; }
public string Remark { get; set; }
}
}
......@@ -18,11 +18,30 @@ public class DeptdicResponse
public Deptdic LogisticsAccounting { get; set; }
public Deptdic SpecialAccounting { get; set; }
public DateTime? CreateTime { get; set; }
public int IsVerify { get; set; }
}
public class Deptdic
{
public int Id { get; set; }
public string AccountingUnit { get; set; }
public int IsVerify { get; set; }
public string VerifyMessage { get; set; }
}
public class DeptdicHands
{
public int HospitalId { get; set; }
public string HISDeptName { get; set; }
public string Department { get; set; }
public string OutDoctorAccounting { get; set; }
public string OutNurseAccounting { get; set; }
public string OutTechnicAccounting { get; set; }
public string InpatDoctorAccounting { get; set; }
public string InpatNurseAccounting { get; set; }
public string InpatTechnicAccounting { get; set; }
public string LogisticsAccounting { get; set; }
public string SpecialAccounting { get; set; }
public DateTime? CreateTime { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Performance.DtoModels
{
public class UserHandsResponse
{
public string RealName { get; set; }
public string Login { get; set; }
public string Password { get; set; }
public string Mobile { get; set; }
public string Mail { get; set; }
public string Department { get; set; }
public string RoleName { get; set; }
public string HosName { get; set; }
}
}
using System;
using FluentValidation;
using System;
using System.Collections.Generic;
using System.Text;
......@@ -11,4 +12,14 @@ public class SaveCollectData
public string[] ColHeaders { get; set; }
public string[][] Data { get; set; }
}
public class UserCollectData
{
public int HospitalId { get; set; }
public int? CreateUser { get; set; }
public string[] ColHeaders { get; set; }
public string[][] Data { get; set; }
}
}
......@@ -85,5 +85,15 @@ public class per_apr_amount
/// 备注
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 0 未通过验证 1 通过验证
/// </summary>
public int? IsVerify { get; set; }
/// <summary>
/// 验证失败描述
/// </summary>
public string VerifyMessage { get; set; }
}
}
......@@ -7,58 +7,68 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Performance.EntityModels
namespace Performance.EntityModels
{
/// <summary>
/// 科室字典表
/// </summary>
[Table("per_dept_dic")]
public class per_dept_dic
public class per_dept_dic
{
/// <summary>
///
/// </summary>
[Key]
public int Id { get; set; }
public int Id { get; set; }
/// <summary>
/// his系统科室名称
/// </summary>
public string HISDeptName { get; set; }
/// <summary>
/// 科室
/// </summary>
public string Department { get; set; }
/// <summary>
/// 核算单元
/// </summary>
public string AccountingUnit { get; set; }
/// <summary>
/// 核算单元类型
/// </summary>
public string UnitType { get; set; }
/// <summary>
/// 来源住院/门诊
/// </summary>
public string Source { get; set; }
/// <summary>
/// 医院Id
/// </summary>
public Nullable<int> HospitalId { get; set; }
/// <summary>
///
/// </summary>
public Nullable<DateTime> CreateTime { get; set; }
/// <summary>
///
/// </summary>
public Nullable<int> CreateUser { get; set; }
/// <summary>
/// 0 未通过验证 1 通过验证
/// </summary>
public int? IsVerify { get; set; }
/// <summary>
/// 验证失败描述
/// </summary>
public string VerifyMessage { get; set; }
}
}
......@@ -120,7 +120,7 @@ public class per_employee
/// 备注
/// </summary>
public string Remark { get; set; }
/// <summary>
///
/// </summary>
......@@ -130,5 +130,15 @@ public class per_employee
///
/// </summary>
public Nullable<int> CreateUser { get; set; }
/// <summary>
/// 0 未通过验证 1 通过验证
/// </summary>
public int? IsVerify { get; set; }
/// <summary>
/// 验证失败描述
/// </summary>
public string VerifyMessage { get; set; }
}
}
......@@ -219,11 +219,5 @@ union all
return flag;
}
}
public int VerifyAccountingAndUnittype(int allotId)
{
return Execute("call proc_verify_accoungingunit_unittype(@allotId);", new { allotId });
}
}
}
......@@ -440,6 +440,8 @@ public void Generate(per_allot allot)
UpdateAllotStates(allot.ID, (int)AllotStates.GenerateAccomplish, EnumHelper.GetDescription(AllotStates.GenerateAccomplish), generate);
perforCofdirectorRepository.SupplementaryData(allot.ID);
// 验证科室核算单元、工号
AccoungtingVerify(allot.ID);
//logManageService.WriteMsg("正在生成报表数据", "正在生成报表数据", 1, allot.ID, "ReceiveMessage", true);
//var res = reportService.ImportData(allot);
......@@ -474,6 +476,15 @@ public void GenerateReport(per_allot allot)
}
/// <summary>
/// 验证科室核算单元、工号
/// </summary>
/// <param name="allot"></param>
public void AccoungtingVerify(int allotId)
{
reportService.ExecProc("call proc_verify_accoungingunit_unittype(@allotId);", new { allotId });
}
/// <summary>
/// 重新计算院领导绩效
/// </summary>
/// <param name="allotId"></param>
......
......@@ -648,9 +648,9 @@ public List<cof_accounting> GetAccountingList(AccoungingRequest request)
case 1: //返回accounting列表
case 2: //返回核算单元类型
default:
return cofaccountingRepository.GetEntities(t => t.AllotId == request.AllotId);
return cofaccountingRepository.GetEntities(t => t.AllotId == request.AllotId)?.OrderBy(t=>t.AccountingUnit).ThenBy(t=>t.UnitType).ToList();
case 3: //返回核算单元
return cofaccountingRepository.GetEntities(t => t.AllotId == request.AllotId && t.UnitType == request.UnitType);
return cofaccountingRepository.GetEntities(t => t.AllotId == request.AllotId && t.UnitType == request.UnitType)?.OrderBy(t=>t.AccountingUnit).ThenBy(t=>t.UnitType).ToList();
}
}
......@@ -706,17 +706,63 @@ public bool AccountingDelete(int accountingId)
return cofaccountingRepository.Remove(entity);
}
public HandsonTable GetBatchAccountingStructrue(int AllotId)
{
var result = new HandsonTable((int)SheetType.Unidentifiable, Accounting.Select(t => t.Value).ToArray(), Accounting.Select(t => new collect_permission
{
HeadName = t.Value,
Visible = 1
}).ToList());
/// <summary>
/// 删除数据
/// </summary>
/// <param name="accountingId"></param>
/// <returns></returns>
public void AccoungtingVerify(int allotId)
if (result.Columns != null && result.Columns.Any())
{
foreach (var column in result.Columns)
{
if (column.Data == "核算组别")
{
column.Type = "autocomplete";
column.Source = EnumHelper.GetItems<UnitType>().Select(w => w.Description.Replace("行政后勤", "行政工勤")).ToArray();
column.Strict = true;
}
}
}
return result;
}
public bool BatchSaveAccounting(int allotId, SaveCollectData request)
{
_directorRepository.VerifyAccountingAndUnittype(allotId);
var dicData = CreateDataRow(0, allotId, request, Accounting);
var getAccounts = cofaccountingRepository.GetEntities();
var unitType = EnumHelper.GetItems<UnitType>().Select(w => w.Description.Replace("行政后勤", "行政工勤")).ToArray();
List<cof_accounting> accounts = new List<cof_accounting>();
foreach (var item in dicData)
{
var json = JsonHelper.Serialize(item);
var data = JsonHelper.Deserialize<cof_accounting>(json);
if (!unitType.Contains(data?.UnitType) && !string.IsNullOrEmpty(data?.UnitType)) return false;
if (getAccounts != null)
if (getAccounts.Any(t => t.AccountingUnit == data?.AccountingUnit && t.UnitType == data?.UnitType))continue;
var any = accounts.Any(t => t.AccountingUnit == data?.AccountingUnit && t.UnitType == data?.UnitType);
if (!string.IsNullOrEmpty(data.AccountingUnit) && !string.IsNullOrEmpty(data.UnitType) && !any)
{
accounts.Add(data);
}
}
if (accounts.Any())
cofaccountingRepository.AddRange(accounts.ToArray());
return true;
}
public static Dictionary<string, string> Accounting { get; } = new Dictionary<string, string>
{
{nameof(cof_accounting.AccountingUnit), "核算单元"},
{nameof(cof_accounting.UnitType), "核算组别"},
};
#endregion
#region Copy
......
......@@ -397,7 +397,7 @@ public List<per_apr_amount> GetAprList(int allotId, int userId)
else
list = perapramountRepository.GetEntities(t => t.AllotId == allotId && (t.Amount ?? 0) != 0 && t.CreateUser == userId);
if (list != null && list.Any())
list = list.OrderBy(t => t.DoctorName).ToList();
list = list.OrderBy(w => w.IsVerify).ThenBy(t => t.DoctorName).ToList();
return list;
}
......
......@@ -30,6 +30,7 @@ public class UserService : IAutoInjection
private PerforResaccountRepository _resaccountRepository;
private PerforPerallotRepository _perallotRepository;
private PerforPerdeptdicRepository _perdeptdicRepository;
private readonly PerforCofaccountingRepository perforCofaccountingRepository;
public UserService(IOptions<Application> application,
PerforSmsRepository smsRepository,
......@@ -44,7 +45,8 @@ public class UserService : IAutoInjection
PerforImspecialunitRepository imspecialunitRepository,
PerforResaccountRepository resaccountRepository,
PerforPerallotRepository perallotRepository,
PerforPerdeptdicRepository perdeptdicRepository)
PerforPerdeptdicRepository perdeptdicRepository,
PerforCofaccountingRepository perforCofaccountingRepository)
{
this.application = application.Value;
this._userRepository = userRepository;
......@@ -60,6 +62,7 @@ public class UserService : IAutoInjection
this._resaccountRepository = resaccountRepository;
this._perallotRepository = perallotRepository;
this._perdeptdicRepository = perdeptdicRepository;
this.perforCofaccountingRepository = perforCofaccountingRepository;
}
/// <summary>
......@@ -695,5 +698,175 @@ public ApiResponse DeleteUser(int iD)
}
#endregion
public HandsonTable GetUserHandsFlat()
{
var result = new HandsonTable((int)SheetType.Unidentifiable, Users.Select(t => t.Value).ToArray(), Users.Select(t => new collect_permission
{
HeadName = t.Value,
Visible = 1
}).ToList());
if (result.Columns != null && result.Columns.Any())
{
foreach (var column in result.Columns)
{
if (column.Data == "角色")
{
column.Type = "autocomplete";
column.Source = _roleRepository.GetEntities().Select(t => t.RoleName).ToArray();
column.Strict = true;
}
else if (column.Data == "分配医院")
{
column.Type = "autocomplete";
column.Source = _hospitalRepository.GetEntities().Select(t => t.HosName).ToArray();
column.Strict = true;
}
}
}
return result;
}
public string SaveUserHandsFlat(UserCollectData request)
{
try
{
var dicData = CreateDataRow(request, Users);
var getUsers = _userRepository.GetEntities();
var roles = _roleRepository.GetEntities();
var hospitals = _hospitalRepository.GetEntities();
//hack:后续修改为accounting中的数据
var accounts = perforCofaccountingRepository.GetEntities();
//var allot = _perallotRepository.GetEntities(t => t.HospitalId == request.HospitalId);
//var res = accounts?.Join(allot, t => t.AllotId, w => w.ID, (t, w) => new cof_accounting { AccountingUnit = t.AccountingUnit }).Distinct();
List<sys_user> users = new List<sys_user>();
List<sys_user_role> userRoles = new List<sys_user_role>();
List<sys_user_hospital> userHoss = new List<sys_user_hospital>();
var roleArr = new[] { "护士长", "科主任", "特殊科室", "行政科室" };
var allDataList = dicData.Select(item => JsonHelper.Deserialize<UserHandsResponse>(JsonHelper.Serialize(item)));
var names = allDataList?.Select(w => w?.HosName).Distinct();
Dictionary<string, List<string>> res = new Dictionary<string, List<string>>();
foreach (var item in names)
{
if (item == null) return "必填项为空";
var HospitalId = hospitals.FirstOrDefault(w => w.HosName == item)?.ID;
var allot = _perallotRepository.GetEntities(t => t.HospitalId == HospitalId);
var accountingUnits = accounts?.Join(allot, t => t.AllotId, w => w.ID, (t, w) => t.AccountingUnit).Distinct().ToList();
res.Add(item, accountingUnits);
}
foreach (var data in allDataList)
{
if (string.IsNullOrEmpty(data.Login) || string.IsNullOrEmpty(data.RealName) || string.IsNullOrEmpty(data.RoleName) || string.IsNullOrEmpty(data.HosName)) return "必填项为空";
if (roleArr.Contains(data.RoleName) && res == null) return "科室字典为空";
if (users.Any(c => c.Login == data?.Login) && !string.IsNullOrEmpty(data.Login)
|| getUsers.Any(c => c.Login == data?.Login)) return "登录名重复";
if (roleArr.Contains(data.RoleName) && res[data.HosName] != null && !res[data.HosName].Any(t => t == data.Department))
return "核算单元填写错误";
var user = new sys_user
{
RealName = data.RealName,
CreateDate = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd hh:mm:dd")),
CreateUser = request.CreateUser,
Department = data?.Department ?? "",
IsDelete = 1,
Login = data.Login,
Password = data?.Password ?? "123456",
States = 1,
Mobile = data?.Mobile ?? "",
Mail = data?.Mail ?? ""
};
users.Add(user);
//var userRole = new sys_user_role
//{
// RoleID = (int)roles.FirstOrDefault(t => t.RoleName == data.RoleName)?.Type,
//};
//userRoles.Add(userRole);
//var userHos = new sys_user_hospital
//{
// HospitalID = hospitals.FirstOrDefault(t => t.HosName == data.HosName)?.ID
//};
//userHoss.Add(userHos);
}
_userRepository.AddRange(users.ToArray());
//var roleJoin = userRoles.Join(users, t => new { }, w => new { }, (t, w) => new sys_user_role { RoleID = t.RoleID, UserID = w.ID });
//var hosJoin = userHoss.Join(users, t => new { }, w => new { }, (t, w) => new sys_user_hospital { HospitalID = t.HospitalID, UserID = w.ID });
var joinData = users.Join(allDataList, outer => new { outer.Login, outer.RealName, Department = outer.Department ?? "" }, inner => new { inner.Login, inner.RealName, Department = inner.Department ?? "" }, (outer, inner) => new { outer, inner });
var roleJoin = joinData.Select(t => new sys_user_role
{
UserID = t.outer.ID,
RoleID = (int)roles.FirstOrDefault(r => r.RoleName == t.inner.RoleName)?.Type
});
_userroleRepository.AddRange(roleJoin.ToArray());
var hosJoin = joinData.Select(t => new sys_user_hospital
{
UserID = t.outer.ID,
HospitalID = hospitals.FirstOrDefault(h => h.HosName == t.inner.HosName)?.ID
});
_userhospitalRepository.AddRange(hosJoin.ToArray());
return "";
}
catch (Exception e)
{
throw e;
}
}
public static Dictionary<string, string> Users { get; } = new Dictionary<string, string>
{
{nameof(sys_user.RealName), "姓名"},
{nameof(sys_user.Login), "登录名"},
{nameof(sys_user.Password), "密码"},
{nameof(sys_user.Mobile), "手机号码"},
{nameof(sys_user.Mail), "邮箱"},
{nameof(sys_role.RoleName), "角色"},
{nameof(sys_hospital.HosName), "分配医院"},
{nameof(sys_user.Department), "核算单元"},
};
private List<Dictionary<string, string>> CreateDataRow(UserCollectData request, Dictionary<string, string> config)
{
List<Dictionary<string, string>> allData = new List<Dictionary<string, string>>();
for (int r = 0; r < request.Data.Length; r++)
{
// 创建固定数据列
Dictionary<string, string> baseData = CreateBaseData(request, config, r);
allData.Add(baseData);
}
return allData;
}
private Dictionary<string, string> CreateBaseData(UserCollectData request, Dictionary<string, string> config, int rownumber)
{
Dictionary<string, string> result = new Dictionary<string, string>();
for (int c = 0; c < request.ColHeaders.Length; c++)
{
var header = request.ColHeaders[c];
var first = config.FirstOrDefault(w => w.Value == header);
if (!default(KeyValuePair<string, string>).Equals(first)
&& !result.ContainsKey(header)
&& request.Data[rownumber].Length > c)
{
result.Add(first.Key, request.Data[rownumber][c]);
}
}
return result;
}
}
}
\ No newline at end of file
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