Browse Source

职业病、用户

master
wxd 1 year ago
parent
commit
9573c74e0e
  1. 2
      src/Shentun.Peis.Application.Contracts/MyUser/IdentityUserWithExtensionDto.cs
  2. 44
      src/Shentun.Peis.Application.Contracts/OcCheckTypeDetails/CreateOcCheckTypeDetailManyInputDto.cs
  3. 36
      src/Shentun.Peis.Application.Contracts/OcCheckTypeDetails/OcCheckTypeDetailDto.cs
  4. 21
      src/Shentun.Peis.Application.Contracts/OcCheckTypeDetails/OcCheckTypeIdAndPoisonIdInputDto.cs
  5. 25
      src/Shentun.Peis.Application.Contracts/RegisterCheckPictures/ImportRegisterCheckPictureInputDto.cs
  6. 585
      src/Shentun.Peis.Application/MyUser/MyUserAppService.cs
  7. 142
      src/Shentun.Peis.Application/OcCheckTypeDetails/OcCheckTypeDetailAppService.cs
  8. 29
      src/Shentun.Peis.Application/RegisterCheckPictures/RegisterCheckPictureAppService.cs
  9. 4
      src/Shentun.Peis.DbMigrator/appsettings.json
  10. 63
      src/Shentun.Peis.Domain/OcCheckTypeDetails/OcCheckTypeDetail.cs
  11. 66
      src/Shentun.Peis.Domain/OcCheckTypeDetails/OcCheckTypeDetailManager.cs
  12. 33
      src/Shentun.Peis.EntityFrameworkCore/DbMapping/OcCheckTypeDetails/OcCheckTypeDetailDbMapping.cs
  13. 6
      src/Shentun.Peis.EntityFrameworkCore/EntityFrameworkCore/PeisDbContext.cs
  14. 15034
      src/Shentun.Peis.EntityFrameworkCore/Migrations/20240702095856_检查类别对应项目.Designer.cs
  15. 35
      src/Shentun.Peis.EntityFrameworkCore/Migrations/20240702095856_检查类别对应项目.cs
  16. 15040
      src/Shentun.Peis.EntityFrameworkCore/Migrations/20240702100812_检查类别对应项目2.Designer.cs
  17. 26
      src/Shentun.Peis.EntityFrameworkCore/Migrations/20240702100812_检查类别对应项目2.cs
  18. 41
      src/Shentun.Peis.EntityFrameworkCore/Migrations/PeisDbContextModelSnapshot.cs

2
src/Shentun.Peis.Application.Contracts/MyUser/IdentityUserWithExtensionDto.cs

@ -32,6 +32,6 @@ namespace Shentun.Peis.MyUser
/// <summary>
/// 科室ID
/// </summary>
public Guid OrganizationUnitId { get; set; }
public Guid? OrganizationUnitId { get; set; }
}
}

44
src/Shentun.Peis.Application.Contracts/OcCheckTypeDetails/CreateOcCheckTypeDetailManyInputDto.cs

@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace Shentun.Peis.OcCheckTypeDetails
{
public class CreateOcCheckTypeDetailManyInputDto
{
/// <summary>
/// 检查类别ID
/// </summary>
public Guid OcCheckTypeId { get; set; }
/// <summary>
/// 毒害因素ID
/// </summary>
public Guid PoisonId { get; set; }
public List<CreateOcCheckTypeDetailManyInputDetailDto> Details { get; set; } = new List<CreateOcCheckTypeDetailManyInputDetailDto>();
}
public class CreateOcCheckTypeDetailManyInputDetailDto
{
/// <summary>
/// 组合项目ID
/// </summary>
public Guid AsbitemId { get; set; }
/// <summary>
/// 价格
/// </summary>
public decimal Price { get; set; }
/// <summary>
/// 数量
/// </summary>
public short Amount { get; set; }
}
}

36
src/Shentun.Peis.Application.Contracts/OcCheckTypeDetails/OcCheckTypeDetailDto.cs

@ -0,0 +1,36 @@
using Shentun.Peis.Asbitems;
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.Peis.OcCheckTypeDetails
{
public class OcCheckTypeDetailDto: AsbitemDto
{
/// <summary>
/// 套餐中价格
/// </summary>
public decimal OcCheckTypeDetailPrice { get; set; }
/// <summary>
/// 数量
/// </summary>
public short OcCheckTypeDetailAmount { get; set; }
/// <summary>
/// 套餐中金额
/// </summary>
public decimal OcCheckTypeDetailMoney { get; set; }
/// <summary>
/// 项目金额
/// </summary>
public decimal AsbitemMoney { get; set; }
/// <summary>
/// 折扣
/// </summary>
public decimal Discount { get; set; }
}
}

21
src/Shentun.Peis.Application.Contracts/OcCheckTypeDetails/OcCheckTypeIdAndPoisonIdInputDto.cs

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.Text;
namespace Shentun.Peis.OcCheckTypeDetails
{
public class OcCheckTypeIdAndPoisonIdInputDto
{
/// <summary>
/// 检查类别ID
/// </summary>
public Guid OcCheckTypeId { get; set; }
/// <summary>
/// 毒害因素ID
/// </summary>
public List<Guid> PoisonIds { get; set; }
}
}

25
src/Shentun.Peis.Application.Contracts/RegisterCheckPictures/ImportRegisterCheckPictureInputDto.cs

@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.Peis.RegisterCheckPictures
{
public class ImportRegisterCheckPictureInputDto
{
/// <summary>
/// 检查条码号
/// </summary>
public string CheckRequestNo { get; set; }
/// <summary>
/// 图片原始名称
/// </summary>
public string PictureName { get; set; }
/// <summary>
/// 图片base64字符串
/// </summary>
public string PictureBase64 { get; set; }
}
}

585
src/Shentun.Peis.Application/MyUser/MyUserAppService.cs

@ -308,7 +308,8 @@ namespace Shentun.Peis.MyUser
Surname = s.Surname,
TenantId = s.TenantId,
UserName = s.UserName,
OrganizationUnitId = identityUserOrganizationUnitList.FirstOrDefault(m => m.UserId == s.Id).OrganizationUnitId,
//OrganizationUnitId = identityUserOrganizationUnitList.FirstOrDefault(m => m.UserId == s.Id) != null? identityUserOrganizationUnitList.FirstOrDefault(m => m.UserId == s.Id).OrganizationUnitId:Guid.Empty,
OrganizationUnitId = identityUserOrganizationUnitList.FirstOrDefault(m => m.UserId == s.Id)?.OrganizationUnitId,
SimpleCode = LanguageConverter.GetPYSimpleCode(s.Surname)
}).ToList();
@ -317,358 +318,358 @@ namespace Shentun.Peis.MyUser
}
/// <summary>
/// 获取列表 根据用户类别
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[Authorize(PeisPermissions.Users.Default)]
[HttpPost("api/identity/users/GetListByOperatorType")]
public async Task<List<ListByOperatorTypeDto>> GetListByOperatorTypeAsync(OperatorTypeIuputDto input)
/// <summary>
/// 获取列表 根据用户类别
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[Authorize(PeisPermissions.Users.Default)]
[HttpPost("api/identity/users/GetListByOperatorType")]
public async Task<List<ListByOperatorTypeDto>> GetListByOperatorTypeAsync(OperatorTypeIuputDto input)
{
var entlist = await _identityUserRepository.GetListAsync(m => m.IsDeleted == false);
var entlistDto = entlist.Where(m => input.OperatorTypes.Contains(m.GetProperty<char>("operator_type"))).Select(s => new ListByOperatorTypeDto
{
var entlist = await _identityUserRepository.GetListAsync(m => m.IsDeleted == false);
var entlistDto = entlist.Where(m => input.OperatorTypes.Contains(m.GetProperty<char>("operator_type"))).Select(s => new ListByOperatorTypeDto
{
Id = s.Id,
SimpleCode = LanguageConverter.GetPYSimpleCode(s.Surname),
Surname = s.Surname,
UserName = s.UserName
}).ToList();
Id = s.Id,
SimpleCode = LanguageConverter.GetPYSimpleCode(s.Surname),
Surname = s.Surname,
UserName = s.UserName
}).ToList();
return entlistDto;
}
return entlistDto;
}
/// <summary>
/// 修改用户信息
/// </summary>
/// <param name="id"></param>
/// <param name="input"></param>
/// <returns></returns>
//[Authorize(PeisPermissions.Users.Edit)]
//[HttpPost("api/identity/users/update")]
[RemoteService(false)]
public override async Task<IdentityUserDto> UpdateAsync(Guid id, IdentityUserUpdateDto input)
{
var entityDto = await base.UpdateAsync(id, input);
/// <summary>
/// 修改用户信息
/// </summary>
/// <param name="id"></param>
/// <param name="input"></param>
/// <returns></returns>
//[Authorize(PeisPermissions.Users.Edit)]
//[HttpPost("api/identity/users/update")]
[RemoteService(false)]
public override async Task<IdentityUserDto> UpdateAsync(Guid id, IdentityUserUpdateDto input)
{
var entityDto = await base.UpdateAsync(id, input);
var entity = await _identityUserRepository.GetAsync(id);
await _userCache.SetAsync(id, entity);
return entityDto;
var entity = await _identityUserRepository.GetAsync(id);
await _userCache.SetAsync(id, entity);
return entityDto;
}
}
/// <summary>
/// 修改
/// </summary>
/// <param name="id"></param>
/// <param name="input"></param>
/// <returns></returns>
[Authorize(PeisPermissions.Users.Edit)]
[HttpPost("api/identity/users/update")]
public async Task<IdentityUserDto> UpdateIdentityUserAsync(Guid id, IdentityUserUpdateInputDto input)
/// <summary>
/// 修改
/// </summary>
/// <param name="id"></param>
/// <param name="input"></param>
/// <returns></returns>
[Authorize(PeisPermissions.Users.Edit)]
[HttpPost("api/identity/users/update")]
public async Task<IdentityUserDto> UpdateIdentityUserAsync(Guid id, IdentityUserUpdateInputDto input)
{
#region 上传图片
string userPhoto = UploadUserPhotoAsync(new UploadUserPhotoInputDto
{
PictureBaseStr = input.UserPhoto,
UserId = id
});
string userSign = UploadUserSignAsync(new UploadUserPhotoInputDto
{
PictureBaseStr = input.UserSign,
UserId = id
});
#endregion
#region 上传图片
string userPhoto = UploadUserPhotoAsync(new UploadUserPhotoInputDto
{
PictureBaseStr = input.UserPhoto,
UserId = id
});
string userSign = UploadUserSignAsync(new UploadUserPhotoInputDto
{
PictureBaseStr = input.UserSign,
UserId = id
});
#endregion
input.Email = input.UserName + "@qq.com";
input.Email = input.UserName + "@qq.com";
await IdentityOptions.SetAsync();
await IdentityOptions.SetAsync();
var user = await UserManager.GetByIdAsync(id);
var user = await UserManager.GetByIdAsync(id);
user.SetProperty("user_sign", userSign);
user.SetProperty("user_photo", userPhoto);
user.SetProperty("operator_type", input.OperatorType);
user.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
user.SetProperty("user_sign", userSign);
user.SetProperty("user_photo", userPhoto);
user.SetProperty("operator_type", input.OperatorType);
user.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
(await UserManager.SetUserNameAsync(user, input.UserName)).CheckErrors();
(await UserManager.SetUserNameAsync(user, input.UserName)).CheckErrors();
await UpdateUserByInput(user, input);
input.MapExtraPropertiesTo(user);
await UpdateUserByInput(user, input);
input.MapExtraPropertiesTo(user);
(await UserManager.UpdateAsync(user)).CheckErrors();
(await UserManager.UpdateAsync(user)).CheckErrors();
if (!input.Password.IsNullOrEmpty())
{
(await UserManager.RemovePasswordAsync(user)).CheckErrors();
(await UserManager.AddPasswordAsync(user, input.Password)).CheckErrors();
}
if (!input.Password.IsNullOrEmpty())
{
(await UserManager.RemovePasswordAsync(user)).CheckErrors();
(await UserManager.AddPasswordAsync(user, input.Password)).CheckErrors();
}
await CurrentUnitOfWork.SaveChangesAsync();
await CurrentUnitOfWork.SaveChangesAsync();
var entityDto = ObjectMapper.Map<IdentityUser, IdentityUserDto>(user);
var entityDto = ObjectMapper.Map<IdentityUser, IdentityUserDto>(user);
var entity = await _identityUserRepository.GetAsync(id);
await _userCache.SetAsync(id, entity);
return entityDto;
}
var entity = await _identityUserRepository.GetAsync(id);
await _userCache.SetAsync(id, entity);
return entityDto;
}
/// <summary>
/// 获取用户信息 根据ID
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
//[Authorize(PeisPermissions.Users.Default)]
//[HttpGet("api/identity/users/getinfo")]
[RemoteService(false)]
public override Task<IdentityUserDto> GetAsync(Guid id)
{
return base.GetAsync(id);
}
/// <summary>
/// 获取用户信息 根据ID
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
//[Authorize(PeisPermissions.Users.Default)]
//[HttpGet("api/identity/users/getinfo")]
[RemoteService(false)]
public override Task<IdentityUserDto> GetAsync(Guid id)
/// <summary>
///上传用户照片 图片base64
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
private string UploadUserPhotoAsync(UploadUserPhotoInputDto input)
{
string fileName = "";
if (input.UserId != null)
{
return base.GetAsync(id);
fileName = input.UserId.ToString();
}
/// <summary>
///上传用户照片 图片base64
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
private string UploadUserPhotoAsync(UploadUserPhotoInputDto input)
else
{
string fileName = "";
if (input.UserId != null)
{
fileName = input.UserId.ToString();
}
else
{
fileName = Guid.NewGuid().ToString();
}
string imgurl = $"UserPhoto/{DateTime.Now.Year}/{DateTime.Now.Month}/{DateTime.Now.Day}/{fileName}";
var isupload = ImageHelper.Base64StrToImage(input.PictureBaseStr, imgurl);
if (!string.IsNullOrEmpty(isupload))
return isupload;
else
return "";
fileName = Guid.NewGuid().ToString();
}
string imgurl = $"UserPhoto/{DateTime.Now.Year}/{DateTime.Now.Month}/{DateTime.Now.Day}/{fileName}";
var isupload = ImageHelper.Base64StrToImage(input.PictureBaseStr, imgurl);
if (!string.IsNullOrEmpty(isupload))
return isupload;
else
return "";
}
/// <summary>
/// 上传用户签名 图片base64
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
private string UploadUserSignAsync(UploadUserPhotoInputDto input)
{
string fileName = "";
if (input.UserId != null)
{
fileName = input.UserId.ToString();
}
else
{
fileName = Guid.NewGuid().ToString();
}
string imgurl = $"UserSign/{DateTime.Now.Year}/{DateTime.Now.Month}/{DateTime.Now.Day}/{fileName}";
var isupload = ImageHelper.Base64StrToImage(input.PictureBaseStr, imgurl);
if (!string.IsNullOrEmpty(isupload))
return isupload;
else
return "";
}
/// <summary>
/// 获取用户信息 根据ID
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[Authorize(PeisPermissions.Users.Default)]
[HttpGet("api/identity/users/getinfo")]
public async Task<IdentityUserWithExtensionDto> GetWithExtensionAsync(Guid id)
/// <summary>
/// 上传用户签名 图片base64
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <exception cref="UserFriendlyException"></exception>
private string UploadUserSignAsync(UploadUserPhotoInputDto input)
{
string fileName = "";
if (input.UserId != null)
{
var ent = await UserManager.GetByIdAsync(id);
var userSign = !string.IsNullOrWhiteSpace(ent.GetProperty<string>("user_sign")) ? ImageHelper.GetImageBase64StringAsync(ent.GetProperty<string>("user_sign")) : "";
var userPhoto = !string.IsNullOrWhiteSpace(ent.GetProperty<string>("user_photo")) ? ImageHelper.GetImageBase64StringAsync(ent.GetProperty<string>("user_photo")) : "";
var operatorType = ent.GetProperty<char>("operator_type");
var entDto = ObjectMapper.Map<IdentityUser, IdentityUserWithExtensionDto>(ent);
entDto.UserPhoto = userPhoto;
entDto.UserSign = userSign;
entDto.OperatorType = operatorType;
return entDto;
fileName = input.UserId.ToString();
}
/// <summary>
/// 给用户绑定角色
/// </summary>
/// <param name="id">用户ID</param>
/// <param name="input">角色集合</param>
/// <returns></returns>
[Authorize(PeisPermissions.Users.Edit)]
[HttpPost("api/identity/users/updateroles")]
public override Task UpdateRolesAsync(Guid id, IdentityUserUpdateRolesDto input)
else
{
return base.UpdateRolesAsync(id, input);
fileName = Guid.NewGuid().ToString();
}
string imgurl = $"UserSign/{DateTime.Now.Year}/{DateTime.Now.Month}/{DateTime.Now.Day}/{fileName}";
var isupload = ImageHelper.Base64StrToImage(input.PictureBaseStr, imgurl);
if (!string.IsNullOrEmpty(isupload))
return isupload;
else
return "";
}
/// <summary>
/// 获取用户的角色信息 根据用户ID
/// </summary>
/// <param name="id">用户ID</param>
/// <returns></returns>
[Authorize(PeisPermissions.Users.Default)]
[HttpGet("api/identity/users/getroles")]
public override Task<ListResultDto<IdentityRoleDto>> GetRolesAsync(Guid id)
{
return base.GetRolesAsync(id);
}
/// <summary>
/// 获取用户信息 根据ID
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[Authorize(PeisPermissions.Users.Default)]
[HttpGet("api/identity/users/getinfo")]
public async Task<IdentityUserWithExtensionDto> GetWithExtensionAsync(Guid id)
{
var ent = await UserManager.GetByIdAsync(id);
var userSign = !string.IsNullOrWhiteSpace(ent.GetProperty<string>("user_sign")) ? ImageHelper.GetImageBase64StringAsync(ent.GetProperty<string>("user_sign")) : "";
var userPhoto = !string.IsNullOrWhiteSpace(ent.GetProperty<string>("user_photo")) ? ImageHelper.GetImageBase64StringAsync(ent.GetProperty<string>("user_photo")) : "";
var operatorType = ent.GetProperty<char>("operator_type");
var entDto = ObjectMapper.Map<IdentityUser, IdentityUserWithExtensionDto>(ent);
entDto.UserPhoto = userPhoto;
entDto.UserSign = userSign;
entDto.OperatorType = operatorType;
return entDto;
}
/// <summary>
/// 获取当前登录用户的角色信息
/// </summary>
/// <returns></returns>
[Authorize(PeisPermissions.Users.Default)]
[HttpGet("api/identity/users/getassignableroles")]
public override Task<ListResultDto<IdentityRoleDto>> GetAssignableRolesAsync()
{
return base.GetAssignableRolesAsync();
}
/// <summary>
/// 给用户绑定角色
/// </summary>
/// <param name="id">用户ID</param>
/// <param name="input">角色集合</param>
/// <returns></returns>
[Authorize(PeisPermissions.Users.Edit)]
[HttpPost("api/identity/users/updateroles")]
public override Task UpdateRolesAsync(Guid id, IdentityUserUpdateRolesDto input)
{
return base.UpdateRolesAsync(id, input);
}
/// <summary>
/// 暂未用到
/// </summary>
/// <param name="userName"></param>
/// <returns></returns>
[Authorize(PeisPermissions.Users.Default)]
[RemoteService(false)]
public override Task<IdentityUserDto> FindByUsernameAsync(string userName)
{
return base.FindByUsernameAsync(userName);
}
/// <summary>
/// 获取用户的角色信息 根据用户ID
/// </summary>
/// <param name="id">用户ID</param>
/// <returns></returns>
[Authorize(PeisPermissions.Users.Default)]
[HttpGet("api/identity/users/getroles")]
public override Task<ListResultDto<IdentityRoleDto>> GetRolesAsync(Guid id)
{
return base.GetRolesAsync(id);
}
/// <summary>
/// 暂未用到
/// </summary>
/// <param name="email"></param>
/// <returns></returns>
[Authorize(PeisPermissions.Users.Default)]
[RemoteService(false)]
public override Task<IdentityUserDto> FindByEmailAsync(string email)
{
return base.FindByEmailAsync(email);
}
/// <summary>
/// 用户登录
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/identity/users/login")]
public async Task<UserLoginDto> UserLogin(UserLoginRequestDto input)
{
/// <summary>
/// 获取当前登录用户的角色信息
/// </summary>
/// <returns></returns>
[Authorize(PeisPermissions.Users.Default)]
[HttpGet("api/identity/users/getassignableroles")]
public override Task<ListResultDto<IdentityRoleDto>> GetAssignableRolesAsync()
{
return base.GetAssignableRolesAsync();
}
UserLoginDto msg;
/// <summary>
/// 暂未用到
/// </summary>
/// <param name="userName"></param>
/// <returns></returns>
[Authorize(PeisPermissions.Users.Default)]
[RemoteService(false)]
public override Task<IdentityUserDto> FindByUsernameAsync(string userName)
{
return base.FindByUsernameAsync(userName);
}
var user = await _userManager.FindByNameAsync(input.UserName);
if (user != null)
{
/// <summary>
/// 暂未用到
/// </summary>
/// <param name="email"></param>
/// <returns></returns>
[Authorize(PeisPermissions.Users.Default)]
[RemoteService(false)]
public override Task<IdentityUserDto> FindByEmailAsync(string email)
{
return base.FindByEmailAsync(email);
}
var verifyResult = await _userManager.CheckPasswordAsync(user, input.PassWord);
if (verifyResult)
{
/// <summary>
/// 用户登录
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/identity/users/login")]
public async Task<UserLoginDto> UserLogin(UserLoginRequestDto input)
{
var PeisId = await _peisOrganizationUnitManager.GetPeisIdAsync(user.Id);
UserLoginDto msg;
if (user.IsActive == false)
{
throw new UserFriendlyException("账号已被禁用");
}
if (user.LockoutEnabled == true)
{
throw new UserFriendlyException("账号已被锁定");
}
var user = await _userManager.FindByNameAsync(input.UserName);
if (user != null)
{
TokenResponse token = await RequestAuthServerLoginByPasswordAsync(input.UserName, input.PassWord);
var verifyResult = await _userManager.CheckPasswordAsync(user, input.PassWord);
if (verifyResult)
{
if (token.HttpResponse != null && token.HttpResponse.StatusCode == HttpStatusCode.OK)
{
msg = new UserLoginDto
{
//code = 1,
//msg = "登录成功",
peisid = PeisId,
UserId = user.Id,
OperatorType = user.GetProperty<char>("operator_type"),
access_token = token.AccessToken,
expires_in = token.ExpiresIn,
refresh_token = token.RefreshToken,
token_type = token.TokenType
};
}
else
{
//msg = new UserLoginDto { code = 1, msg = "登录成功", peisid = PeisId };
throw new UserFriendlyException("获取token失败");
}
}
else
var PeisId = await _peisOrganizationUnitManager.GetPeisIdAsync(user.Id);
if (user.IsActive == false)
{
//msg = new UserLoginDto { code = -1, msg = "密码不正确" };
throw new UserFriendlyException("密码不正确");
throw new UserFriendlyException("账号已被禁用");
}
if (user.LockoutEnabled == true)
{
throw new UserFriendlyException("账号已被锁定");
}
TokenResponse token = await RequestAuthServerLoginByPasswordAsync(input.UserName, input.PassWord);
#region MyRegion
//var verifyResult = _passwordHasher.VerifyHashedPassword(user, user.PasswordHash, PassWord);
//if (verifyResult == PasswordVerificationResult.Success)
//{
// return "1";
//}
//else
//{
// throw new UserFriendlyException("密码错误");
//}
#endregion
if (token.HttpResponse != null && token.HttpResponse.StatusCode == HttpStatusCode.OK)
{
msg = new UserLoginDto
{
//code = 1,
//msg = "登录成功",
peisid = PeisId,
UserId = user.Id,
OperatorType = user.GetProperty<char>("operator_type"),
access_token = token.AccessToken,
expires_in = token.ExpiresIn,
refresh_token = token.RefreshToken,
token_type = token.TokenType
};
}
else
{
//msg = new UserLoginDto { code = 1, msg = "登录成功", peisid = PeisId };
throw new UserFriendlyException("获取token失败");
}
}
else
{
//msg = new UserLoginDto { code = -1, msg = "用户不存在" };
throw new UserFriendlyException("用户不存在");
//msg = new UserLoginDto { code = -1, msg = "密码不正确" };
throw new UserFriendlyException("密码不正确");
}
return msg;
}
#region MyRegion
//var verifyResult = _passwordHasher.VerifyHashedPassword(user, user.PasswordHash, PassWord);
//if (verifyResult == PasswordVerificationResult.Success)
//{
// return "1";
//}
//else
//{
// throw new UserFriendlyException("密码错误");
//}
#endregion
protected virtual async Task<TokenResponse> RequestAuthServerLoginByPasswordAsync(string username, string password)
}
else
{
var client = _httpClientFactory.CreateClient();
//msg = new UserLoginDto { code = -1, msg = "用户不存在" };
throw new UserFriendlyException("用户不存在");
}
var request = new PasswordTokenRequest
{
Address = _configuration["AuthServer:Authority"] + "/connect/token",
//GrantType = "password",
//UserName = username,
//Password = password,
//Scope = "Peis offline_access",
//ClientId = "Peis_App",
Parameters =
return msg;
}
protected virtual async Task<TokenResponse> RequestAuthServerLoginByPasswordAsync(string username, string password)
{
var client = _httpClientFactory.CreateClient();
var request = new PasswordTokenRequest
{
Address = _configuration["AuthServer:Authority"] + "/connect/token",
//GrantType = "password",
//UserName = username,
//Password = password,
//Scope = "Peis offline_access",
//ClientId = "Peis_App",
Parameters =
{
{"username",username},
{"password",password },
@ -676,12 +677,12 @@ namespace Shentun.Peis.MyUser
{"client_id","Peis_App" },
{"grant_type","password" }
}
};
//request.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
};
return await client.RequestTokenAsync(request);
}
//request.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
return await client.RequestTokenAsync(request);
}
}
}

142
src/Shentun.Peis.Application/OcCheckTypeDetails/OcCheckTypeDetailAppService.cs

@ -0,0 +1,142 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using NPOI.Util;
using Shentun.Peis.AsbitemDetails;
using Shentun.Peis.Items;
using Shentun.Peis.MedicalPackageDetails;
using Shentun.Peis.Models;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Identity;
using Volo.Abp.Users;
namespace Shentun.Peis.OcCheckTypeDetails
{
/// <summary>
/// 职业病检查类别对应的项目
/// </summary>
[ApiExplorerSettings(GroupName = "Work")]
[Authorize]
public class OcCheckTypeDetailAppService : ApplicationService
{
private readonly IRepository<OcCheckTypeDetail> _ocCheckTypeDetailRepository;
private readonly IRepository<Asbitem, Guid> _asbitemRepository;
private readonly OcCheckTypeDetailManager _manager;
private readonly CacheService _cacheService;
public OcCheckTypeDetailAppService(
IRepository<OcCheckTypeDetail> ocCheckTypeDetailRepository,
OcCheckTypeDetailManager manager,
CacheService cacheService,
IRepository<Asbitem, Guid> asbitemRepository)
{
_ocCheckTypeDetailRepository = ocCheckTypeDetailRepository;
_manager = manager;
_cacheService = cacheService;
_asbitemRepository = asbitemRepository;
}
/// <summary>
/// 批量创建 先删除
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/OcCheckTypeDetail/CreateOcCheckTypeDetailMany")]
public async Task CreateOcCheckTypeDetailManyAsync(CreateOcCheckTypeDetailManyInputDto input)
{
await _manager.CheckAndDeleteAsync(input.OcCheckTypeId, input.PoisonId);
if (input.Details.Any())
{
List<OcCheckTypeDetail> ocCheckTypeDetails = new List<OcCheckTypeDetail>();
foreach (var details in input.Details)
{
var entity = new OcCheckTypeDetail
{
AsbitemId = details.AsbitemId,
Price = details.Price,
Amount = details.Amount,
OcCheckTypeId = input.OcCheckTypeId,
PoisonId = input.PoisonId
};
ocCheckTypeDetails.Add(_manager.CreateAsync(entity));
}
if (ocCheckTypeDetails.Count > 0)
{
await _ocCheckTypeDetailRepository.InsertManyAsync(ocCheckTypeDetails);
}
}
}
/// <summary>
/// 获取职业病检查类别、毒害因素对应的组合项目列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/OcCheckTypeDetail/GetOcCheckTypeDetailByOcCheckTypeIdAndPoisonId")]
public async Task<List<OcCheckTypeDetailDto>> GetOcCheckTypeDetailByOcCheckTypeIdAndPoisonIdAsync(OcCheckTypeIdAndPoisonIdInputDto input)
{
if (!input.PoisonIds.Any())
throw new UserFriendlyException("毒害因素不能为空");
var query = from ocCheckTypeDetail in await _ocCheckTypeDetailRepository.GetQueryableAsync()
join asbitem in await _asbitemRepository.GetQueryableAsync() on ocCheckTypeDetail.AsbitemId equals asbitem.Id
where ocCheckTypeDetail.OcCheckTypeId == input.OcCheckTypeId && input.PoisonIds.Contains(ocCheckTypeDetail.PoisonId)
select new
{
ocCheckTypeDetail,
asbitem
};
var entdto = query.ToList().GroupBy(g=>g.asbitem).Select(s => new OcCheckTypeDetailDto
{
ClinicalMeaning = s.Key.ClinicalMeaning,
CreationTime = s.Key.CreationTime,
CreatorId = s.Key.CreatorId,
DefaultResult = s.Key.DefaultResult,
DeviceTypeId = s.Key.DeviceTypeId,
DiagnosisFunction = s.Key.DiagnosisFunction,
DisplayName = s.Key.DisplayName,
DisplayOrder = s.Key.DisplayOrder,
ForSexId = s.Key.ForSexId,
Id = s.Key.Id,
IsActive = s.Key.IsActive,
IsBeforeEat = s.Key.IsBeforeEat,
IsCheck = s.Key.IsCheck,
IsContinueProcess = s.Key.IsContinueProcess,
IsDiagnosisFunction = s.Key.IsDiagnosisFunction,
IsItemResultMerger = s.Key.IsItemResultMerger,
IsPictureRotate = s.Key.IsPictureRotate,
ItemTypeId = s.Key.ItemTypeId,
LastModificationTime = s.Key.LastModificationTime,
LastModifierId = s.Key.LastModifierId,
Price = s.Key.Price,
QueueTime = s.Key.QueueTime,
ShortName = s.Key.ShortName,
SimpleCode = s.Key.SimpleCode,
AsbitemMoney = s.FirstOrDefault().ocCheckTypeDetail.Amount * s.Key.Price,
Discount = s.Key.Price == 0 ? 100 : Math.Round(s.FirstOrDefault().ocCheckTypeDetail.Price * 100 / s.Key.Price, 2),
OcCheckTypeDetailAmount = s.FirstOrDefault().ocCheckTypeDetail.Amount,
OcCheckTypeDetailMoney = s.FirstOrDefault().ocCheckTypeDetail.Amount * s.FirstOrDefault().ocCheckTypeDetail.Price,
OcCheckTypeDetailPrice = s.FirstOrDefault().ocCheckTypeDetail.Price
}).ToList();
return entdto;
}
}
}

29
src/Shentun.Peis.Application/RegisterCheckPictures/RegisterCheckPictureAppService.cs

@ -340,6 +340,35 @@ namespace Shentun.Peis.RegisterCheckPictures
/// <summary>
/// 导入检查图片
/// </summary>
/// <returns></returns>
[HttpPost("api/app/RegisterCheckPicture/ImportRegisterCheckPicture")]
public async Task ImportRegisterCheckPictureAsync(ImportRegisterCheckPictureInputDto input)
{
var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.CheckRequestNo == input.CheckRequestNo);
if (registerCheckEnt == null)
throw new UserFriendlyException("检查条码号不正确");
if (string.IsNullOrWhiteSpace(input.PictureBase64))
throw new UserFriendlyException("图片不能为空");
var pic = new List<UploadRegisterCheckPictureManyPictureBaseStrsDto>();
pic.Add(new UploadRegisterCheckPictureManyPictureBaseStrsDto
{
FileName = input.PictureName,
PictureBaseStr = input.PictureBase64
});
await UploadRegisterCheckPictureManyAsync(new UploadRegisterCheckPictureManyDto
{
PictureBaseStrs = pic,
PictureFileType = '0',
RegisterCheckId = registerCheckEnt.Id
});
}
}
}

4
src/Shentun.Peis.DbMigrator/appsettings.json

@ -1,9 +1,9 @@
{
"ConnectionStrings": {
//"Default": "Host=140.143.162.39;Port=5432;Database=ShentunPeis070703;User ID=postgres;Password=shentun123;"
"Default": "Host=140.143.162.39;Port=5432;Database=ShentunPeis240701;User ID=postgres;Password=shentun123;"
//"Default": "Host=140.143.162.39;Port=5432;Database=ShentunPeisTemp;User ID=postgres;Password=shentun123;"
//"Default": "Host=localhost;Port=5432;Database=ShentunPeis1218;User ID=postgres;Password=wxd123;"
"Default": "Host=10.1.12.140;Port=5432;Database=ShentunPeis0508;User ID=postgres;Password=st123;"
//"Default": "Host=10.1.12.140;Port=5432;Database=ShentunPeis0508;User ID=postgres;Password=st123;"
},
"OpenIddict": {
"Applications": {

63
src/Shentun.Peis.Domain/OcCheckTypeDetails/OcCheckTypeDetail.cs

@ -0,0 +1,63 @@
using Microsoft.EntityFrameworkCore;
using Shentun.Peis.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Entities;
namespace Shentun.Peis.OcCheckTypeDetails
{
/// <summary>
/// 职业病检查类别 毒害因素 对应的项目
/// </summary>
[Table("oc_check_type_detail")]
public class OcCheckTypeDetail : Entity, IHasConcurrencyStamp
{
/// <summary>
/// 检查类别ID
/// </summary>
[Key]
[Column("oc_check_type_id")]
public Guid OcCheckTypeId { get; set; }
/// <summary>
/// 毒害因素ID
/// </summary>
[Key]
[Column("poison_id")]
public Guid PoisonId { get; set; }
/// <summary>
/// 组合项目编号
/// </summary>
[Key]
[Column("asbitem_id")]
public Guid AsbitemId { get; set; }
/// <summary>
/// 价格
/// </summary>
[Column("price")]
[Precision(10, 2)]
public decimal Price { get; set; }
/// <summary>
/// 数量
/// </summary>
[Column("amount")]
public short Amount { get; set; }
[Column("concurrency_stamp")]
public string ConcurrencyStamp { get; set; }
public override object[] GetKeys()
{
return new object[] { OcCheckTypeId, PoisonId, AsbitemId };
}
}
}

66
src/Shentun.Peis.Domain/OcCheckTypeDetails/OcCheckTypeDetailManager.cs

@ -0,0 +1,66 @@
using Shentun.Peis.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Domain.Services;
namespace Shentun.Peis.OcCheckTypeDetails
{
public class OcCheckTypeDetailManager : DomainService
{
private readonly IRepository<OcCheckTypeDetail> _repository;
public OcCheckTypeDetailManager(
IRepository<OcCheckTypeDetail> repository
)
{
_repository = repository;
}
/// <summary>
/// 创建
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public OcCheckTypeDetail CreateAsync(OcCheckTypeDetail entity)
{
DataHelper.CheckGuidIsDefaultValue(entity.AsbitemId, "组合项目编号");
DataHelper.CheckGuidIsDefaultValue(entity.OcCheckTypeId, "检查类别Id");
DataHelper.CheckGuidIsDefaultValue(entity.PoisonId, "毒害因素Id");
if (entity.Price < 0)
{
throw new ArgumentException($"价格参数为:{entity.Price},是无效值,只能大于等于0");
}
if (entity.Amount <= 0)
{
throw new ArgumentException($"数量参数为:{entity.Amount},是无效值,只能大于0");
}
return entity;
}
/// <summary>
/// 删除职业病检查类别对应的项目明细
/// </summary>
/// <param name="OcCheckTypeId"></param>
/// <param name="PoisonId"></param>
/// <returns></returns>
public async Task CheckAndDeleteAsync(Guid OcCheckTypeId, Guid PoisonId)
{
var ocCheckTypeDetailList = await _repository.GetListAsync(m => m.OcCheckTypeId == OcCheckTypeId && m.PoisonId == PoisonId);
if (ocCheckTypeDetailList.Any())
{
await _repository.DeleteManyAsync(ocCheckTypeDetailList);
}
}
}
}

33
src/Shentun.Peis.EntityFrameworkCore/DbMapping/OcCheckTypeDetails/OcCheckTypeDetailDbMapping.cs

@ -0,0 +1,33 @@
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore;
using Shentun.Peis.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Shentun.Peis.OcCheckTypeDetails;
using Shentun.Peis.EntityFrameworkCore;
namespace Shentun.Peis.DbMapping
{
internal class OcCheckTypeDetailDbMapping : IEntityTypeConfiguration<OcCheckTypeDetail>
{
public void Configure(EntityTypeBuilder<OcCheckTypeDetail> entity)
{
entity.HasKey(e => new { e.OcCheckTypeId, e.PoisonId, e.AsbitemId })
.HasName("pk_oc_check_type_detail");
entity.HasComment("职业病检查类别、毒害因素对应的组合项目");
entity.Property(t => t.AsbitemId).HasComment("组合项目编号").IsRequired().IsFixedLength();
entity.Property(e => e.OcCheckTypeId).HasComment("检查类别").IsFixedLength().IsRequired();
//entity.Property(e => e.CreationTime).HasDefaultValueSql("(date(timezone('UTC-8'::text, now())) - 1)");
entity.ConfigureByConvention();
}
}
}

6
src/Shentun.Peis.EntityFrameworkCore/EntityFrameworkCore/PeisDbContext.cs

@ -12,6 +12,7 @@ using Shentun.Peis.DbMapping.ChargeRequests;
using Shentun.Peis.DbMapping.PatientRegisterExters;
using Shentun.Peis.DbMapping.ThirdInterfaces;
using Shentun.Peis.Models;
using Shentun.Peis.OcCheckTypeDetails;
using Shentun.Peis.ProtectiveMeasuress;
using Shentun.Peis.RoleMenuInfos;
using Shentun.Utilities;
@ -354,6 +355,8 @@ public class PeisDbContext :
public DbSet<PatientPastMedicalHistory> PatientPastMedicalHistorys { get; set; } = null!;
public DbSet<OcCheckTypeDetail> OcCheckTypeDetails { get; set; }=null!;
public PeisDbContext(DbContextOptions<PeisDbContext> options)
: base(options)
{
@ -593,7 +596,8 @@ public class PeisDbContext :
.ApplyConfiguration(new OccupationalContraindicationsDbMapping())
.ApplyConfiguration(new SuspectedOccupationalDiseaseDbMapping())
.ApplyConfiguration(new PatientOccupationalMedicalHistoryDbMapping())
.ApplyConfiguration(new PatientPastMedicalHistoryDbMapping());
.ApplyConfiguration(new PatientPastMedicalHistoryDbMapping())
.ApplyConfiguration(new OcCheckTypeDetailDbMapping());
#endregion

15034
src/Shentun.Peis.EntityFrameworkCore/Migrations/20240702095856_检查类别对应项目.Designer.cs
File diff suppressed because it is too large
View File

35
src/Shentun.Peis.EntityFrameworkCore/Migrations/20240702095856_检查类别对应项目.cs

@ -0,0 +1,35 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Shentun.Peis.Migrations
{
public partial class : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "oc_check_type_detail",
columns: table => new
{
oc_check_type_id = table.Column<Guid>(type: "uuid", fixedLength: true, nullable: false, comment: "检查类别"),
poison_id = table.Column<Guid>(type: "uuid", nullable: false),
asbitem_id = table.Column<Guid>(type: "uuid", fixedLength: true, nullable: false, comment: "组合项目编号"),
price = table.Column<decimal>(type: "numeric(10,2)", precision: 10, scale: 2, nullable: false),
amount = table.Column<short>(type: "smallint", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("pk_oc_check_type_detail", x => new { x.oc_check_type_id, x.poison_id, x.asbitem_id });
},
comment: "职业病检查类别、毒害因素对应的组合项目");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "oc_check_type_detail");
}
}
}

15040
src/Shentun.Peis.EntityFrameworkCore/Migrations/20240702100812_检查类别对应项目2.Designer.cs
File diff suppressed because it is too large
View File

26
src/Shentun.Peis.EntityFrameworkCore/Migrations/20240702100812_检查类别对应项目2.cs

@ -0,0 +1,26 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Shentun.Peis.Migrations
{
public partial class 2 : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "concurrency_stamp",
table: "oc_check_type_detail",
type: "character varying(40)",
maxLength: 40,
nullable: true);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "concurrency_stamp",
table: "oc_check_type_detail");
}
}
}

41
src/Shentun.Peis.EntityFrameworkCore/Migrations/PeisDbContextModelSnapshot.cs

@ -11526,6 +11526,47 @@ namespace Shentun.Peis.Migrations
b.HasComment("用户控件权限-废弃");
});
modelBuilder.Entity("Shentun.Peis.OcCheckTypeDetails.OcCheckTypeDetail", b =>
{
b.Property<Guid>("OcCheckTypeId")
.HasColumnType("uuid")
.HasColumnName("oc_check_type_id")
.IsFixedLength()
.HasComment("检查类别");
b.Property<Guid>("PoisonId")
.HasColumnType("uuid")
.HasColumnName("poison_id");
b.Property<Guid>("AsbitemId")
.HasColumnType("uuid")
.HasColumnName("asbitem_id")
.IsFixedLength()
.HasComment("组合项目编号");
b.Property<short>("Amount")
.HasColumnType("smallint")
.HasColumnName("amount");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("character varying(40)")
.HasColumnName("concurrency_stamp");
b.Property<decimal>("Price")
.HasPrecision(10, 2)
.HasColumnType("numeric(10,2)")
.HasColumnName("price");
b.HasKey("OcCheckTypeId", "PoisonId", "AsbitemId")
.HasName("pk_oc_check_type_detail");
b.ToTable("oc_check_type_detail");
b.HasComment("职业病检查类别、毒害因素对应的组合项目");
});
modelBuilder.Entity("Shentun.Peis.RoleMenuInfos.RoleMenuInfo", b =>
{
b.Property<Guid>("RoleId")

Loading…
Cancel
Save