添加项目文件。

This commit is contained in:
DK
2022-03-28 15:27:40 +08:00
parent b620fcb0cf
commit dc78fd1a09
898 changed files with 173053 additions and 0 deletions
@@ -0,0 +1,100 @@
namespace IRaCIS.Application.Contracts
{
public class MenuCommand
{
public Guid? MenuId { get; set; }
//上级菜单
public Guid? ParentId { get; set; } = Guid.Empty;
// 类型(M目录 C菜单 F按钮 L链接)
public string MenuType { get; set; } = string.Empty;
public string MenuIcon { get; set; } = String.Empty;
public string MenuName { get; set; } = string.Empty;
//路由地址
public string Path { get; set; } = string.Empty;
//组件路径
public string Component { get; set; } = string.Empty;
public int ShowOrder { get; set; }
//启用 禁用
public bool IsEnable { get; set; } = true;
public bool IsCache { get; set; } = false;
public bool IsDisplay { get; set; }
public bool IsInTabDisplay { get; set; }
public bool IsExternalLink { get; set; }
//权限点
public string PermissionStr { get; set; } = String.Empty;
//Api 接口地址
public string ApiPath { get; set; } = String.Empty;
public string Meta { get; set; } = string.Empty;
public string Note { get; set; }
public string Redirect { get; set; } = string.Empty;
}
public class MenuDTO : MenuCommand
{
public DateTime CreateTime { get; set; }
public Guid CreateUserId { get; set; }
public DateTime UpdateTime { get; set; }
public Guid UpdateUserId { get; set; }
}
public class MenuQueyDTO
{
public Guid? ParentId { get; set; }
public string? MenuType { get; set; }
public bool? IsEnable { get; set; }
public bool? IsCache { get; set; }
public bool? IsDisplay { get; set; }
public bool? IsInTabDisplay { get; set; }
public bool? IsExternalLink { get; set; }
}
public class MenuFunctionDTO:MenuCommand
{
public List<MenuFunctionDTO> Children { get; set; }=new List<MenuFunctionDTO>();
public DateTime CreateTime { get; set; }
public Guid CreateUserId { get; set; }
public DateTime UpdateTime { get; set; }
public Guid UpdateUserId { get; set; }
}
public class RoleMenuFunctionSelectDTO
{
public Guid RoleId { get; set; }
public List<Guid> MenuFunctionId { get; set; }=new List<Guid>();
}
public class FunctionSelectDTO
{
public Guid RoleId { get; set; }
public Guid FunctionId { get; set; }
public bool IsSelect { get; set; }
}
}
@@ -0,0 +1,30 @@
using System;
namespace IRaCIS.Application.Contracts
{
public class RoleDTO
{
public Guid? Id { get; set; } = Guid.Empty;
public string RoleName { get; set; } = string.Empty;
public string RoleDescription { get; set; } = string.Empty;
public int PrivilegeLevel { get; set; }
}
public class UserRoleSelectDTO
{
public Guid userId { get; set; }
public Guid roleId { get; set; }
public bool isSelect { get; set; }
}
public class UserSelectRoleDTO : RoleDTO
{
public bool IsSelect { get; set; }
}
public class RoleCommand : RoleDTO
{
}
}
@@ -0,0 +1,26 @@
namespace IRaCIS.Application.Contracts
{
public class DictionaryTreeNode
{
public Guid Id { get; set; }
public string KeyName { get; set; } = string.Empty;
public string Type { get; set; } = string.Empty;
public List<DictionaryTreeNode> Children { get; set; }=new List<DictionaryTreeNode>();
}
public class MenuTreeNodeSelect: MenuCommand
{
public List<MenuTreeNodeSelect> Children { get; set; } = new List<MenuTreeNodeSelect>();
public bool IsSelect { get; set; } = false;
}
public class MenuTreeNode : MenuCommand
{
public List<MenuTreeNode> Children { get; set; } = new List<MenuTreeNode>();
}
}
@@ -0,0 +1,220 @@
using System;
using System.Collections.Generic;
using IRaCIS.Core.Infrastructure.Extention;
using IRaCIS.Core.Domain.Share;
using Newtonsoft.Json;
namespace IRaCIS.Application.Contracts
{
public class UserTypeViewModel
{
public Guid Id { get; set; }
public string UserType { get; set; } = string.Empty;
public UserTypeEnum UserTypeEnum { get; set; }
public string Description { get; set; } = string.Empty;
}
public class UserLoginDTO
{
public string UserName { get; set; } = string.Empty;
public string Password { get; set; } = string.Empty;
}
public class LoginReturnDTO
{
public UserBasicInfo BasicInfo { get; set; } = new UserBasicInfo();
public string JWTStr { get; set; }=string.Empty;
}
public class UserBasicInfo
{
public Guid Id { get; set; }
public string UserName { get; set; } = string.Empty;
public string RealName { get; set; } = string.Empty;
public int Sex { get; set; } // 1-男 2-女
public UserTypeEnum UserTypeEnum { get; set; }
public bool IsAdmin { get; set; } = false;
public string UserTypeShortName { get; set; } = string.Empty;
public bool PasswordChanged { get; set; }
public int Status { get; set; }
public Guid UserTypeId { get; set; }
public string Code { get; set; } = String.Empty;
public string PermissionStr { get; set; } = String.Empty;
public bool IsFirstAdd { get; set; }
public bool IsReviewer { get; set; } = false;
}
public class MenuFuncTreeNodeView
{
[JsonIgnore]
public Guid Id { get; set; }
[JsonIgnore]
public Guid ParentId { get; set; } = Guid.Empty;
[JsonIgnore]
public int ShowOrder { get; set; }
public string routeName { get; set; } = string.Empty;
public string component { get; set; } = string.Empty;
public string redirect { get; set; } = string.Empty;
public string path { get; set; } = string.Empty;
public Meta meta { get; set; } = new Meta();
public bool hidden { get; set; }
public List<MenuFuncTreeNodeView> Childrens { get; set; }=new List<MenuFuncTreeNodeView>();
}
public class Meta
{
public string MetaTitle { get; set; } = string.Empty;
public bool MetaBreadcrumb { get; set; } = false;
public string MetaIcon { get; set; } = string.Empty;
public string MetaActiveMenu { get; set; } = string.Empty;
}
public class FunctionTreeNodeDTO
{
[JsonIgnore]
public Guid Id { get; set; }
[JsonIgnore]
public Guid ParentId { get; set; } = Guid.Empty;
[JsonIgnore]
public int ShowOrder { get; set; }
public string RouteName { get; set; } = string.Empty;
public string FunctionName { get; set; } = string.Empty;
public List<FunctionTreeNodeDTO> Childrens { get; set; } = new List<FunctionTreeNodeDTO>();
}
public class UserDetailDTO : UserInfo
{
public bool CanEditUserType { get; set; }
}
public class UserInfo
{
public Guid Id { get; set; }
public string UserName { get; set; } = string.Empty;
public string Password { get; set; } = string.Empty;
public string RealName { get; set; } = string.Empty;
public string FirstName { get; set; } = string.Empty;
public string LastName { get; set; } = string.Empty;
public int Sex { get; set; } // 1-男 2-女
public int Status { get; set; } = 1; // 0-已删除 1-正常
public string Phone { get; set; } = string.Empty;
public string EMail { get; set; } = string.Empty;
public Guid UserTypeId { get; set; } = Guid.Empty;
public string UserCode { get; set; } = string.Empty;
public bool IsZhiZhun { get; set; }
public string UserType { get; set; } = string.Empty;
public string UserTypeShortName { get; set; } = string.Empty;
public UserTypeEnum UserTypeEnum { get; set; }
//public Guid OrganizationTypeId { get; set; } = Guid.Empty;
//public string OrganizationType { get; set; } = String.Empty;
//public Guid OrganizationId { get; set; }
public string OrganizationName { get; set; } = string.Empty;
public string DepartmentName { get; set; } = String.Empty;
public string PositionName { get; set; } = String.Empty;
}
/// <summary>
/// 添加用户是的返回模型
/// </summary>
public class UserAddedReturnDTO
{
public Guid Id { get; set; }
public string UserCode { get; set; } = string.Empty;
public int VerificationCode { get; set; }
}
public class UserCommand : UserInfo
{
public bool IsFirstAdd { get; set; } = true;
//public string FirstName { get; set; }
//public string LastName { get; set; }
}
public class EditPasswordCommand
{
public string NewPassWord { get; set; } = string.Empty;
public string OldPassWord { get; set; } = string.Empty;
}
public class UserListQueryDTO : PageInput
{
public string UserName { get; set; } = string.Empty;
public string Phone { get; set; } = string.Empty;
public string OrganizationName { get; set; } = string.Empty;
public Guid? UserType { get; set; }
public UserStateEnum? UserState { get; set; }
}
public class UserRoleInfoDTO
{
public List<string> RoleList { get; set; } = new List<string>();
public int MaxPrivilegeLevel { get; set; }
}
public class UserListDTO : UserInfo
{
[JsonIgnore]
public Guid testGuid { get; set; }
public bool CanEditUserType { get; set; }
public List<string> RoleNameArray { get; set; } = new List<string>();
public IEnumerable<RoleDTO> RoleNameList { get; set; } = new List<RoleDTO>();
}
public class UserIdRoleName : RoleDTO
{
public Guid UserId { get; set; }
}
public class UserIdRoleNameList
{
public Guid UserId { get; set; }
public IEnumerable<RoleDTO> RoleList { get; set; }=new List<RoleDTO>();
}
public class ResetPasswordCommand
{
public string EmailOrPhone { get; set; } = string.Empty;
public VerifyType VerificationType { get; set; }
public string VerificationCode { get; set; } = string.Empty;
public string NewPwd { get; set; } = string.Empty;
public bool IsReviewer { get; set; } = false;
}
}
@@ -0,0 +1,87 @@
//--------------------------------------------------------------------
// 此代码由T4模板自动生成 byzhouhang 20210918
// 生成时间 2021-11-03 09:38:51
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------
using IRaCIS.Core.Domain.Share;
namespace IRaCIS.Core.Application.Contracts
{
/// <summary> UserTypeRoleView 列表视图模型 </summary>
public class UserTypeRoleView : UserTypeMenuAddOrEdit
{
public List<UserTypeGroupInfo> UserTypeGroupList { get; set; } = new List<UserTypeGroupInfo>();
public new List<Guid> UserTypeGroupIdList => UserTypeGroupList.Select(t=>t.DictionaryId).ToList();
}
public class UserTypeGroupInfo
{
public Guid UserTypeId { get; set; }
public Guid DictionaryId { get; set; }
public string GroupName { get; set; }=string.Empty;
public string GroupNameCN { get; set; } = string.Empty;
}
///<summary>UserTypeRoleQuery 列表查询参数模型</summary>
public class UserTypeQuery
{
public Guid? GroupId { get; set; }
public string? SearchFilter { get; set; } = string.Empty;
}
public class UserTypeMenuAddOrEdit: UserTypeRoleAddOrEdit
{
public List<Guid> MenuIds { get; set; } = new List<Guid>();
}
public class UserTypeRoleAddOrEdit
{
public Guid? Id { get; set; }
public string UserTypeName { get; set; } = string.Empty;
public string UserTypeShortName { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;
public string PermissionStr { get; set; } = string.Empty;
public int Order { get; set; }
public List<Guid> UserTypeGroupIdList { get; set; } = new List<Guid>();
/// <summary> 用户类型名称简写/// </summary>
//public bool IsInternal { get; set; }
//public UserTypeGroup Type { get; set; } = UserTypeGroup.TrialUser;
}
public class TrialUserType
{
public Guid Id { get; set; }
public string UserType { get; set; } = string.Empty;
public UserTypeEnum UserTypeEnum { get; set; }
public string UserTypeShortName { get; set; } = string.Empty;
public string PermissionStr { get; set; } = String.Empty;
//public UserTypeGroup Type { get; set; }
//public bool IsInternal { get; set; }
}
}
@@ -0,0 +1,13 @@
using IRaCIS.Application.Contracts;
namespace IRaCIS.Application.Services
{
public interface IMenuService
{
Task<IResponseOutput> AddOrUpdateMenu(MenuCommand menuAddOrUpdateModel);
Task<IResponseOutput> DeleteMenu(Guid menuId);
Task<List<MenuDTO>> GetMenuList(MenuQueyDTO menuQueyDTO);
Task<List<MenuTreeNode>> GetMenuTree();
Task<List<MenuTreeNodeSelect>> GetUserTypeMenuTree(Guid userTypeId);
}
}
@@ -0,0 +1,20 @@
using IRaCIS.Application.Contracts;
using IRaCIS.Core.Domain.Share;
namespace IRaCIS.Application.Services
{
public interface IUserService
{
Task<IResponseOutput<UserAddedReturnDTO>> AddUser(UserCommand userAddModel);
Task<IResponseOutput> DeleteUser(Guid userId);
Task<UserDetailDTO> GetUser(Guid id);
Task<PageOutput<UserListDTO>> GetUserList(UserListQueryDTO param);
Task<IResponseOutput<LoginReturnDTO>> Login(string userName, string password);
Task<IResponseOutput> ModifyPassword(EditPasswordCommand editPwModel);
Task<IResponseOutput> ResetPassword(Guid userId);
Task<IResponseOutput> SendVerificationCode(string emailOrPhone, VerifyType verificationType, bool isReviewer = false);
Task<IResponseOutput> SetNewPassword(ResetPasswordCommand resetPwdModel);
Task<IResponseOutput> UpdateUser(UserCommand model);
Task<IResponseOutput> UpdateUserState(Guid userId, UserStateEnum state);
}
}
@@ -0,0 +1,18 @@
//--------------------------------------------------------------------
// 此代码由T4模板自动生成 byzhouhang 20210918
// 生成时间 2021-11-03 09:38:11
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------
using IRaCIS.Core.Domain.Share;
namespace IRaCIS.Core.Application.Contracts
{
public interface IUserTypeService
{
Task<IResponseOutput> AddOrUpdateUserTypeRole(UserTypeMenuAddOrEdit addOrEditUserTypeRole);
Task<IResponseOutput> DeleteUserTypeRole(Guid userTypeRoleId);
Task<List<TrialUserType>> GetTrialUserTypeList();
Task<List<TrialUserType>> GetUserTypeList(UserTypeSelectEnum userTypeSelectEnum);
Task<List<UserTypeRoleView>> GetUserTypeRoleList(UserTypeQuery userTypeQuery);
}
}
@@ -0,0 +1,357 @@
using IRaCIS.Application.Contracts;
using IRaCIS.Core.Infra.EFCore;
using Microsoft.AspNetCore.Mvc;
namespace IRaCIS.Application.Services
{
[ApiExplorerSettings(GroupName = "Management")]
public class MenuService : BaseService, IMenuService
{
private readonly IRepository<Menu> menuRepository;
public MenuService(IRepository<Menu> menuRepository)
{
this.menuRepository = menuRepository;
}
/// <summary>
/// 添加菜单 New
/// </summary>
/// <param name="menuAddOrUpdateModel"></param>
/// <returns></returns>
public async Task<IResponseOutput> AddOrUpdateMenu(MenuCommand menuAddOrUpdateModel)
{
var exp = new EntityVerifyExp<Menu>()
{
VerifyExp = u => u.ParentId == menuAddOrUpdateModel.ParentId && u.MenuName == menuAddOrUpdateModel.MenuName,
VerifyMsg = "A son node with the same name already existed under this parent node."
};
var menu = await _repository.InsertOrUpdateAsync<Menu, MenuCommand>(menuAddOrUpdateModel, true, exp);
return ResponseOutput.Ok(menu.Id.ToString());
#region
//if (menuAddOrUpdateModel.Id == null)
//{
// bool exist = _menuFunctionRepository.Any(u => u.ParentId == menuAddOrUpdateModel.ParentId && u.MenuName == menuAddOrUpdateModel.MenuName);
// if (exist)
// {
// return ResponseOutput.NotOk("A son node with the same name already existed under this parent node.");
// }
// if (!string.IsNullOrWhiteSpace(menuAddOrUpdateModel.FunctionName))
// {
// menuAddOrUpdateModel.IsFunction = true;
// }
// var result = _menuFunctionRepository.Add(_mapper.Map<MenuFunction>(menuAddOrUpdateModel));
// if (_menuFunctionRepository.SaveChanges())
// {
// return ResponseOutput.Ok(result.Id.ToString());
// }
// return ResponseOutput.NotOk();
//}
//else
//{
// var menuUpdateModel = menuAddOrUpdateModel;
// bool exist = _menuFunctionRepository.Any(u => u.ParentId == menuUpdateModel.ParentId &&
// u.MenuName == menuUpdateModel.MenuName && u.Id != menuUpdateModel.Id);
// if (exist)
// {
// return ResponseOutput.NotOk("A son node with the same name already existed under this parent node.");
// }
// var updateModel = _mapper.Map<MenuFunction>(menuUpdateModel);
// if (!string.IsNullOrWhiteSpace(updateModel.FunctionName))
// {
// updateModel.IsFunction = true;
// }
// _menuFunctionRepository.Update(updateModel);
// var success = _menuFunctionRepository.SaveChanges();
// return ResponseOutput.Result(success);
//}
#endregion
}
/// <summary>
/// 删除菜单 已验证 父节点不允许删除 New
/// </summary>
/// <param name="menuId"></param>
/// <returns></returns>
[HttpDelete("{menuId:guid}")]
public async Task<IResponseOutput> DeleteMenu(Guid menuId)
{
if (await menuRepository.AnyAsync(t => t.ParentId == menuId))
{
return ResponseOutput.NotOk("不允许直接删除父节点");
}
var success =await menuRepository.DeleteFromQueryAsync(u => u.Id == menuId);
return ResponseOutput.Result(success);
}
/// <summary>
/// 所有的菜单树 包括禁用的 New
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<List<MenuTreeNode>> GetMenuTree()
{
var allMenuList = (await menuRepository.ProjectTo<MenuTreeNode>(_mapper.ConfigurationProvider).ToListAsync()).IfNullThrowException();
var list = allMenuList.ToTree((root, child) => child.ParentId == Guid.Empty,
(root, child) => child.ParentId == root.MenuId,
(child, datalist) =>
{
child.Children ??= new List<MenuTreeNode>();
child.Children.AddRange(datalist);
}, item => item.ShowOrder);
return list;
}
/// <summary>
/// 菜单列表 参数都是可传的 根据需要传递 New
/// </summary>
/// <param name="menuQueyDTO"></param>
/// <returns></returns>
[HttpPost]
public async Task<List<MenuDTO>> GetMenuList(MenuQueyDTO menuQueyDTO)
{
return await menuRepository
.WhereIf(menuQueyDTO.ParentId != null, t => t.ParentId == menuQueyDTO.ParentId)
.WhereIf(menuQueyDTO.IsEnable != null, t => t.IsEnable == menuQueyDTO.IsEnable)
.WhereIf(menuQueyDTO.IsCache != null, t => t.IsCache == menuQueyDTO.IsCache)
.WhereIf(menuQueyDTO.IsDisplay != null, t => t.IsDisplay == menuQueyDTO.IsDisplay)
.WhereIf(menuQueyDTO.IsExternalLink != null, t => t.IsExternalLink == menuQueyDTO.IsExternalLink)
.WhereIf(menuQueyDTO.IsInTabDisplay != null, t => t.IsInTabDisplay == menuQueyDTO.IsInTabDisplay)
.WhereIf(menuQueyDTO.MenuType != null, t => t.MenuType == menuQueyDTO.MenuType)
.ProjectTo<MenuDTO>(_mapper.ConfigurationProvider).ToListAsync();
}
/// <summary>
/// 获取某用户类型(角色) 菜单树 勾选情况 New
/// </summary>
/// <param name="userTypeId"></param>
/// <returns></returns>
[HttpGet("{userTypeId:guid}")]
public async Task<List<MenuTreeNodeSelect>> GetUserTypeMenuTree(Guid userTypeId)
{
var menuFunctionlist = (await menuRepository
.ProjectTo<MenuTreeNodeSelect>(_mapper.ConfigurationProvider, new { userTypeId = userTypeId }).ToListAsync()).IfNullThrowException();
var list = menuFunctionlist.ToTree((root, child) => child.ParentId == Guid.Empty,
(root, child) => child.ParentId == root.MenuId,
(child, datalist) =>
{
child.Children ??= new List<MenuTreeNodeSelect>();
child.Children.AddRange(datalist);
}, item => item.ShowOrder);
return list;
}
public async Task<List<MenuTreeNode>> GetUserMenuTree()
{
var menuFunctionlist = await _repository.GetQueryable<UserTypeMenu>()
.Where(t => t.UserTypeId == _userInfo.UserTypeId && (t.Menu.MenuType == "M" || t.Menu.MenuType == "C") && t.Menu.IsEnable)
.ProjectTo<MenuTreeNode>(_mapper.ConfigurationProvider).ToListAsync();
var list = menuFunctionlist.ToTree((root, child) => child.ParentId == Guid.Empty,
(root, child) => child.ParentId == root.MenuId,
(child, datalist) =>
{
child.Children ??= new List<MenuTreeNode>();
child.Children.AddRange(datalist);
}, item => item.ShowOrder);
return list;
}
public async Task<List<string>> GetUserPermissions()
{
var list = await _repository.GetQueryable<UserTypeMenu>()
.Where(t => t.UserTypeId == _userInfo.UserTypeId && t.Menu.MenuType == "F")
.Select(t => t.Menu.PermissionStr).ToListAsync();
//var str = await _repository.Where<UserType>(t => t.Id == _userInfo.UserTypeId).Select(t => t.PermissionStr).FirstOrDefaultAsync();
list.Add(_userInfo.PermissionStr);
return list;
}
#region
//public List<MenuTreeNode> GetMenuFunction()
//{
// var allMenuList = _menuFunctionRepository.ProjectTo<MenuFunctionDTO>(_mapper.ConfigurationProvider).ToList();
// return GetTreeList(Guid.Empty, allMenuList);
//}
///// <summary>
///// 根据父节点ID递归生成树
///// </summary>
///// <param name="parentId"></param>
///// <param name="allMenuList"></param>
///// <returns></returns>
//[NonDynamicMethod]
//public List<MenuTreeNode> GetTreeList(Guid? parentId, List<MenuFunctionDTO> allMenuList)
//{
// //树节点集合 每个节点包含一个菜单项 和一个子菜单集合
// List<MenuTreeNode> treeList = new List<MenuTreeNode>();
// // 根据父菜单节点获取子菜单节点 并且进行排序
// List<MenuFunctionDTO> menuList = allMenuList.Where(x => x.ParentId == parentId).OrderBy(t => t.ShowOrder).ToList();
// foreach (var menuItem in menuList)
// {
// MenuTreeNode treeItem = new MenuTreeNode()
// {
// Id = menuItem.Id,
// ParentId = menuItem.ParentId,
// RouteName = menuItem.RouteName,
// MenuName = menuItem.MenuName,
// Path = menuItem.Path,
// Hidden = menuItem.Hidden,
// Component = menuItem.Component,
// FunctionName = menuItem.FunctionName,
// IsFunction = menuItem.IsFunction,
// MetaActiveMenu = menuItem.MetaActiveMenu,
// MetaBreadcrumb = menuItem.MetaBreadcrumb,
// MetaIcon = menuItem.MetaIcon,
// MetaTitle = menuItem.MetaTitle,
// Redirect = menuItem.Redirect,
// ShowOrder = menuItem.ShowOrder,
// Note = menuItem.Note,
// Status = menuItem.Status,
// Children = GetTreeList(menuItem.Id, allMenuList)
// };
// treeList.Add(treeItem);
// }
// return treeList;
//}
///// <summary>
///// 获取某角色 菜单树 勾选情况 和 功能勾选情况
///// </summary>
///// <param name="roleId"></param>
///// <returns></returns>
//[HttpGet("{roleId:guid}")]
//public List<MenuTreeNodeSelect> GetRoleMenuFunction(Guid roleId)
//{
// var menuFuncQuery = from function in _menuFunctionRepository.Where(u => !u.IsFunction)
// join roleMenuFunctionItem in _roleMenuFunctionRepository.AsQueryable()
// .Where(t => t.UserTypeId == roleId)
// on function.Id equals roleMenuFunctionItem.MenuFunctionId into t
// from roleFunction in t.DefaultIfEmpty()
// select new MenuTreeNodeSelect()
// {
// IsSelect = roleFunction != null,
// ShowOrder = function.ShowOrder,
// MenuName = function.MenuName,
// Note = function.Note,
// FunctionName = function.FunctionName,
// ParentId = function.ParentId,
// Id = function.Id,
// };
// var list = menuFuncQuery.ToList();
// return GetSelectTreeList(Guid.Empty, list);
//}
//[NonDynamicMethod]
//private List<MenuTreeNodeSelect> GetSelectTreeList(Guid parentId, List<MenuTreeNodeSelect> allMenuList)
//{
// List<MenuTreeNodeSelect> TreeList = new List<MenuTreeNodeSelect>();
// List<MenuTreeNodeSelect> menuList = allMenuList.Where(x => x.ParentId == parentId).OrderBy(t => t.ShowOrder).ToList();
// foreach (var menuItem in menuList)
// {
// MenuTreeNodeSelect treeItem = new MenuTreeNodeSelect()
// {
// Id = menuItem.Id,
// ParentId = menuItem.ParentId,
// RouteName = menuItem.RouteName,
// MenuName = menuItem.MenuName,
// Note = menuItem.Note,
// IsSelect = menuItem.IsSelect,
// ShowOrder = menuItem.ShowOrder,
// Children = GetSelectTreeList(menuItem.Id, allMenuList)
// };
// TreeList.Add(treeItem);
// }
// return TreeList;
//}
//[NonDynamicMethod]
//private List<MenuTreeNode> GetTreeList(Guid? parentId, List<MenuTreeNode> allMenuList)
//{
// List<MenuTreeNode> TreeList = new List<MenuTreeNode>();
// List<MenuTreeNode> menuList = allMenuList.Where(x => x.ParentId == parentId).OrderBy(t => t.ShowOrder).ToList();
// foreach (var menuItem in menuList)
// {
// MenuTreeNode treeItem = new MenuTreeNode()
// {
// Id = menuItem.Id,
// ParentId = menuItem.ParentId,
// RouteName = menuItem.RouteName,
// MenuName = menuItem.MenuName,
// Path = menuItem.Path,
// Hidden = menuItem.Hidden,
// Component = menuItem.Component,
// FunctionName = menuItem.FunctionName,
// IsFunction = menuItem.IsFunction,
// MetaActiveMenu = menuItem.MetaActiveMenu,
// MetaBreadcrumb = menuItem.MetaBreadcrumb,
// MetaIcon = menuItem.MetaIcon,
// MetaTitle = menuItem.MetaTitle,
// Redirect = menuItem.Redirect,
// ShowOrder = menuItem.ShowOrder,
// Note = menuItem.Note,
// Status = menuItem.Status,
// Children = GetTreeList(menuItem.Id, allMenuList)
// };
// TreeList.Add(treeItem);
// }
// return TreeList;
//}
#endregion
}
}
@@ -0,0 +1,597 @@
using IRaCIS.Core.Infrastructure.ExpressionExtend;
using IRaCIS.Application.Interfaces;
using IRaCIS.Application.Contracts;
using IRaCIS.Core.Infra.EFCore;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure;
using System.Text.RegularExpressions;
using Autofac.Extras.DynamicProxy;
using IRaCIS.Core.API.Utility.AOP;
using Microsoft.AspNetCore.Mvc;
using Panda.DynamicWebApi.Attributes;
namespace IRaCIS.Application.Services
{
[ApiExplorerSettings(GroupName = "Management")]
[Intercept(typeof(UserAddAOP))]
public class UserService : BaseService, IUserService
{
private readonly IRepository<User> _userRepository;
private readonly IMailVerificationService _mailVerificationService;
private readonly IRepository<VerificationCode> _verificationCodeRepository;
private readonly IRepository<Doctor> _doctorRepository;
private readonly IRepository<TrialUser> _userTrialRepository;
public UserService(IRepository<User> userRepository,
IMailVerificationService mailVerificationService,
IRepository<VerificationCode> verificationCodeRepository,
IRepository<Doctor> doctorRepository,
IRepository<TrialUser> userTrialRepository
)
{
_userRepository = userRepository;
_mailVerificationService = mailVerificationService;
_verificationCodeRepository = verificationCodeRepository;
_doctorRepository = doctorRepository;
_userTrialRepository = userTrialRepository;
}
/// <summary>发送验证码 邮箱或者手机号 New </summary>
[HttpGet("{email}")]
public async Task<IResponseOutput> SendVerificationCode(string email)
{
//检查手机或者邮箱是否有效
if (!Regex.IsMatch(email, @"^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$"))
{
return ResponseOutput.NotOk("Please input a legal email");
}
////查找改邮箱或者手机的用户
//var exist = await _userRepository.AnyAsync(t => t.EMail == email);
//if (!exist)
//{
// return ResponseOutput.NotOk("No user with this email exists.");
//}
//var user = await _userRepository.FirstOrDefaultAsync(t => t.EMail == email);
//验证码 6位
int verificationCode = new Random().Next(100000, 1000000);
await _mailVerificationService.SendMailEditEmail(_userInfo.Id, _userInfo.RealName , email, verificationCode);
return ResponseOutput.Ok();
}
[HttpPut("{newEmail}/{verificationCode}")]
public async Task<IResponseOutput> SetNewEmail( string newEmail,string verificationCode)
{
var verificationRecord = await _verificationCodeRepository
.FirstOrDefaultAsync(t => t.UserId == _userInfo.Id && t.Code == verificationCode && t.CodeType == 0);
//检查数据库是否存在该验证码
if (verificationRecord == null)
{
return ResponseOutput.NotOk("Verification code error");
}
else
{
//检查验证码是否失效
if (verificationRecord.ExpirationTime < DateTime.Now)
{
return ResponseOutput.NotOk("The verification code has expired");
}
else //验证码正确 并且 没有超时
{
//更新密码
//var pwd = MD5Helper.Md5(newPwd);
//var count = _doctorRepository.Update<Doctor>().Where(t => t.Id == doctor.Id).Set(d => d.Password == pwd).ExecuteAffrows();
if (await _userRepository.AnyAsync(t => (t.EMail == newEmail && t.UserTypeId == _userInfo.UserTypeId && t.Id != _userInfo.Id)))
{
return ResponseOutput.NotOk("The mailbox for this user type already exists");
}
var success = await _userRepository.UpdateFromQueryAsync(t => t.Id == _userInfo.Id, u => new User()
{
EMail= newEmail
});
//删除验证码历史记录
await _verificationCodeRepository.DeleteFromQueryAsync(t => t.UserId == _userInfo.Id && t.CodeType ==0);
return ResponseOutput.Result(success);
}
}
}
[HttpPut("{newPhone}")]
public async Task<IResponseOutput> SetNewPhone( string newPhone)
{
var success = await _userRepository.UpdateFromQueryAsync(t => t.Id == _userInfo.Id, u => new User()
{
Phone = newPhone
});
return ResponseOutput.Ok();
}
[HttpPut("{newUserName}")]
public async Task<IResponseOutput> SetNewUserName( string newUserName)
{
if (await _userRepository.AnyAsync(t => t.UserName == newUserName && t.Id != _userInfo.Id))
{
return ResponseOutput.NotOk("UserId already exists");
}
var success = await _userRepository.UpdateFromQueryAsync(t => t.Id == _userInfo.Id, u => new User()
{
UserName = newUserName
});
return ResponseOutput.Ok();
}
/// <summary>
/// 发送验证码 邮箱或者手机号
/// </summary>
/// <param name="emailOrPhone"></param>
/// <param name="verificationType"></param>
/// <param name="isReviewer"></param>
/// <returns></returns>
[HttpGet("{emailOrPhone}/{verificationType:int}")]
public async Task<IResponseOutput> SendVerificationCode(string emailOrPhone, VerifyType verificationType, bool isReviewer = false)
{
if (string.IsNullOrEmpty(emailOrPhone))
{
return ResponseOutput.NotOk(verificationType == VerifyType.Email ? "Please input email" : "Please input phone");
}
//防止输入前后有空格
var emailOrPhoneStr = emailOrPhone.Trim();
//检查手机或者邮箱是否有效
if (!Regex.IsMatch(emailOrPhoneStr, @"/^1[34578]\d{9}$/") && !Regex.IsMatch(emailOrPhoneStr, @"^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$"))
{
return ResponseOutput.NotOk(verificationType == VerifyType.Email
? "Please input a legal email"
: "Please input a legal phone");
}
//医生登录
if (isReviewer)
{
var exist = await _doctorRepository.AnyAsync(t => t.EMail == emailOrPhoneStr || t.Phone == emailOrPhoneStr);
if (!exist)
{
return ResponseOutput.NotOk(verificationType == VerifyType.Email
? "No user with this email exists."
: "No user with this phone exists.");
}
var user = await _doctorRepository.FirstOrDefaultAsync(t => t.EMail == emailOrPhoneStr || t.Phone == emailOrPhoneStr);
//邮箱
if (verificationType == VerifyType.Email)
{
//验证码 6位
int verificationCode = new Random().Next(100000, 1000000);
await _mailVerificationService.SendMail(user.Id, user.ChineseName, emailOrPhoneStr,
verificationCode);
}
//手机短信
else
{
}
}
else//管理用户登录
{
//查找改邮箱或者手机的用户
var exist = await _userRepository.AnyAsync(t => t.EMail == emailOrPhoneStr || t.Phone == emailOrPhoneStr);
if (!exist)
{
return ResponseOutput.NotOk(verificationType == VerifyType.Email
? "No user with this email exists."
: "No user with this phone exists.");
}
var user = await _userRepository.FirstOrDefaultAsync(t => t.EMail == emailOrPhoneStr || t.Phone == emailOrPhoneStr);
//邮箱
if (verificationType == VerifyType.Email)
{
//验证码 6位
int verificationCode = new Random().Next(100000, 1000000);
await _mailVerificationService.SendMail(user.Id, user.LastName + ' ' + user.FirstName, emailOrPhoneStr,
verificationCode);
}
//手机短信
else
{
}
}
return ResponseOutput.Ok();
}
/// <summary>
/// 验证设置新密码
/// </summary>
/// <param name="resetPwdModel"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> SetNewPassword(ResetPasswordCommand resetPwdModel)
{
if (resetPwdModel.IsReviewer)
{
var emailOrPhoneStr = resetPwdModel.EmailOrPhone.Trim();
var verificationCodeStr = resetPwdModel.VerificationCode.Trim();
var user = await _doctorRepository.FirstOrDefaultAsync(t => t.EMail == emailOrPhoneStr || t.Phone == emailOrPhoneStr);
var verificationRecord = await _verificationCodeRepository
.FirstOrDefaultAsync(t => t.UserId == user.Id && t.Code == verificationCodeStr && t.CodeType == resetPwdModel.VerificationType);
//检查数据库是否存在该验证码
if (verificationRecord == null)
{
return ResponseOutput.NotOk("Verification code error");
}
else
{
//检查验证码是否失效
if (verificationRecord.ExpirationTime < DateTime.Now)
{
return ResponseOutput.NotOk("The verification code has expired");
}
else //验证码正确 并且 没有超时
{
//更新密码
var success = await _doctorRepository.UpdateFromQueryAsync(t => t.Id == user.Id, u => new Doctor()
{
Password = resetPwdModel.NewPwd
});
//删除验证码历史记录
await _verificationCodeRepository.DeleteFromQueryAsync(t => t.UserId == user.Id && t.CodeType == resetPwdModel.VerificationType);
return ResponseOutput.Result(success);
}
}
}
else
{
var emailOrPhoneStr = resetPwdModel.EmailOrPhone.Trim();
var verificationCodeStr = resetPwdModel.VerificationCode.Trim();
var user = await _userRepository.FirstOrDefaultAsync(t => t.EMail == emailOrPhoneStr || t.Phone == emailOrPhoneStr);
var verificationRecord = await _verificationCodeRepository
.FirstOrDefaultAsync(t => t.UserId == user.Id && t.Code == verificationCodeStr && t.CodeType == resetPwdModel.VerificationType);
//检查数据库是否存在该验证码
if (verificationRecord == null)
{
return ResponseOutput.NotOk("Verification code error");
}
else
{
//检查验证码是否失效
if (verificationRecord.ExpirationTime < DateTime.Now)
{
return ResponseOutput.NotOk("The verification code has expired");
}
else //验证码正确 并且 没有超时
{
//更新密码
//var pwd = MD5Helper.Md5(newPwd);
//var count = _doctorRepository.Update<Doctor>().Where(t => t.Id == doctor.Id).Set(d => d.Password == pwd).ExecuteAffrows();
var success = await _userRepository.UpdateFromQueryAsync(t => t.Id == user.Id, u => new User()
{
Password = resetPwdModel.NewPwd,
PasswordChanged = true
});
//删除验证码历史记录
await _verificationCodeRepository.DeleteFromQueryAsync(t => t.UserId == user.Id && t.CodeType == resetPwdModel.VerificationType);
return ResponseOutput.Result(success);
}
}
}
}
/// <summary>
/// 获取用户列表
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
[HttpPost]
public async Task<PageOutput<UserListDTO>> GetUserList(UserListQueryDTO param)
{
var userQueryable = _userRepository.Where(x => x.UserTypeEnum != UserTypeEnum.SuperAdmin)
.WhereIf(!string.IsNullOrWhiteSpace(param.UserName), t => t.UserName.Contains(param.UserName) || (t.LastName + ' ' + t.FirstName).Contains(param.UserName))
.WhereIf(!string.IsNullOrWhiteSpace(param.Phone), t => t.Phone.Contains(param.Phone))
.WhereIf(!string.IsNullOrWhiteSpace(param.OrganizationName), t => t.OrganizationName.Contains(param.OrganizationName))
.WhereIf(param.UserType != null, t => t.UserTypeId == param.UserType)
.WhereIf(param.UserState != null, t => t.Status == param.UserState)
.ProjectTo<UserListDTO>(_mapper.ConfigurationProvider);
return await userQueryable.ToPagedListAsync(param.PageIndex, param.PageSize, param.SortField == string.Empty ? "UserName" : param.SortField, param.Asc);
}
/// <summary>
/// 根据用户Id获取用户详细信息[New]
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("{id:guid}")]
public async Task<UserDetailDTO> GetUser(Guid id)
{
var userQuery = _userRepository.Where(t => t.Id == id).ProjectTo<UserDetailDTO>(_mapper.ConfigurationProvider);
return await (userQuery.FirstOrDefaultAsync()).IfNullThrowException();
}
/// <summary>
/// 添加用户
/// </summary>
/// <param name="userAddModel"></param>
/// <returns></returns>
public async Task<IResponseOutput<UserAddedReturnDTO>> AddUser(UserCommand userAddModel)
{
if (await _userRepository.AnyAsync(t => t.UserName == userAddModel.UserName ||(t.EMail == userAddModel.EMail && t.UserTypeId == userAddModel.UserTypeId)))
{
return ResponseOutput.NotOk(" UserId or The mailbox for this user type already exists", new UserAddedReturnDTO());
}
var saveItem = _mapper.Map<User>(userAddModel);
saveItem.Code = await _userRepository.Select(t => t.Code).DefaultIfEmpty().MaxAsync() + 1;
saveItem.UserCode = AppSettings.UserCodePrefix + saveItem.Code.ToString("D4");
if (saveItem.IsZhiZhun)
{
saveItem.OrganizationName = "Zhizhun";
}
//验证码 6位
int verificationCode = new Random().Next(100000, 1000000);
saveItem.Password = MD5Helper.Md5("123456");
await _userRepository.AddAsync(saveItem);
var success = await _userRepository.SaveChangesAsync();
return ResponseOutput.Result(success, new UserAddedReturnDTO { Id = saveItem.Id, UserCode = saveItem.UserCode, VerificationCode = verificationCode });
}
/// <summary>
/// 更新用户
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public async Task<IResponseOutput> UpdateUser(UserCommand model)
{
// 判断当前用户名是否已经存在
if (await _userRepository.AnyAsync(t => (t.UserName == model.UserName && t.Id != model.Id) || (t.EMail == model.EMail && t.UserTypeId==model.UserTypeId && t.Id != model.Id)))
{
return ResponseOutput.NotOk("UserId or The mailbox for this user type already exists");
}
var user = await _userRepository.FirstOrDefaultAsync(t => t.Id == model.Id);
if (user == null) return Null404NotFound(user);
_mapper.Map(model, user);
if (user.IsZhiZhun)
{
user.OrganizationName = "Zhizhun";
}
var success = await _userRepository.SaveChangesAsync();
return ResponseOutput.Result(success);
}
/// <summary>
/// 删除用户
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
[HttpDelete("{userId:guid}")]
public async Task<IResponseOutput> DeleteUser(Guid userId)
{
if (await _userTrialRepository.AnyAsync(t => t.Id == userId))
{
return ResponseOutput.NotOk("This user has participated in the trial and couldn't be deleted");
}
var success = await _userRepository.DeleteFromQueryAsync(t => t.Id == userId);
return ResponseOutput.Result(success);
}
/// <summary>
/// 禁用或者启用账户
/// </summary>
/// <param name="userId"></param>
/// <param name="state"></param>
/// <returns></returns>
[HttpPost("{userId:guid}/{state:int}")]
public async Task<IResponseOutput> UpdateUserState(Guid userId, UserStateEnum state)
{
var success = await _userRepository.UpdateFromQueryAsync(u => u.Id == userId, t => new User
{
Status = state
});
return ResponseOutput.Result(success);
}
/// <summary>
/// 重置密码为 默认密码
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
[HttpGet("{userId:guid}")]
public async Task<IResponseOutput> ResetPassword(Guid userId)
{
var success = await _userRepository.UpdateFromQueryAsync(t => t.Id == userId, u => new User()
{
Password = MD5Helper.Md5(StaticData.DefaultPassword),
PasswordChanged = false
});
return ResponseOutput.Result(success);
}
/// <summary>
/// 修改密码,当前支持旧密码修改密码,手机及邮箱验证码后续支持[New]
/// </summary>
/// <param name="editPwModel"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> ModifyPassword(EditPasswordCommand editPwModel)
{
if (await _userRepository.FirstOrDefaultAsync(t => t.Id == _userInfo.Id && t.Password == editPwModel.OldPassWord) != null)
{
var success = await _userRepository.UpdateFromQueryAsync(t => t.Id == _userInfo.Id, u => new User()
{
Password = editPwModel.NewPassWord,
IsFirstAdd = false
});
return ResponseOutput.Result(success);
}
if (await _doctorRepository.AnyAsync(t => t.Id == _userInfo.Id && t.Password == editPwModel.OldPassWord))
{
var success = await _doctorRepository.UpdateFromQueryAsync(t => t.Id == _userInfo.Id, u => new Doctor()
{
Password = editPwModel.NewPassWord
});
return ResponseOutput.Result(success);
}
return ResponseOutput.NotOk("Old password is wrong.");
}
/// <summary>
/// 用户登陆
/// </summary>
/// <param name="userName"></param>
/// <param name="password"></param>
/// <returns></returns>
[NonDynamicMethod]
public async Task<IResponseOutput<LoginReturnDTO>> Login(string userName, string password)
{
var userLoginReturnModel = new LoginReturnDTO();
var loginUser = await _userRepository.Where(u => u.UserName == userName && u.Password == password).ProjectTo<UserBasicInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
if (loginUser == null)
{
//此处下面 代码 为了支持医生也能登录 而且前端不加选择到底是管理用户 还是医生用户 奇怪的需求 无法理解
var loginDoctor = await _doctorRepository.Where(u => u.Phone == userName && u.Password == password).ProjectTo<UserBasicInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
if (loginDoctor == null)
{
return ResponseOutput.NotOk("Please check the user name or password.", new LoginReturnDTO());
}
userLoginReturnModel.BasicInfo = loginDoctor;
return ResponseOutput.Ok(userLoginReturnModel);
}
if (loginUser.Status == 0)
{
return ResponseOutput.NotOk("The user has been disabled!", new LoginReturnDTO());
}
userLoginReturnModel.BasicInfo = loginUser;
return ResponseOutput.Ok(userLoginReturnModel);
}
}
}
@@ -0,0 +1,152 @@
//--------------------------------------------------------------------
// 此代码由T4模板自动生成 byzhouhang 20210918
// 生成时间 2021-11-03 09:38:11
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------
using Microsoft.AspNetCore.Mvc;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure.ExpressionExtend;
using IRaCIS.Core.Infra.EFCore;
namespace IRaCIS.Core.Application.Contracts
{
/// <summary>
/// UserTypeRoleService
/// </summary>
[ApiExplorerSettings(GroupName = "Management")]
public class UserTypeRoleService : BaseService, IUserTypeService
{
private readonly IRepository<UserType> userTypeServiceRepository;
public UserTypeRoleService(IRepository<UserType> userTypeServiceRepository)
{
this.userTypeServiceRepository = userTypeServiceRepository;
}
[HttpPost]
public async Task<List<UserTypeRoleView>> GetUserTypeRoleList(UserTypeQuery userTypeQuery)
{
var userTypeRoleQueryable = userTypeServiceRepository
.WhereIf(!string.IsNullOrWhiteSpace(userTypeQuery.SearchFilter), t => t.Description.Contains(userTypeQuery.SearchFilter!) || t.UserTypeName.Contains(userTypeQuery.SearchFilter!) || t.UserTypeShortName.Contains(userTypeQuery.SearchFilter!))
.WhereIf(userTypeQuery.GroupId!=null,t=>t.UserTypeGroupList.Any(t=>t.DictionaryId== userTypeQuery.GroupId))
.OrderBy(t => t.UserTypeEnum).ProjectTo<UserTypeRoleView>(_mapper.ConfigurationProvider);
return await userTypeRoleQueryable.ToListAsync();
}
public async Task<IResponseOutput> AddOrUpdateUserTypeRole(UserTypeMenuAddOrEdit addOrEditUserTypeRole)
{
var entity = new UserType();
if (addOrEditUserTypeRole.Id == null)
{
entity = _mapper.Map<UserType>(addOrEditUserTypeRole);
entity.UserTypeEnum = userTypeServiceRepository.Select(t => t.UserTypeEnum).DefaultIfEmpty().Max() + 1;
await _repository.AddAsync(entity);
}
else
{
if (addOrEditUserTypeRole.MenuIds.Count > 0)
{
entity = userTypeServiceRepository.Where(t => t.Id == addOrEditUserTypeRole.Id, true).Include(t => t.UserTypeMenuList).Include(t=>t.UserTypeGroupList).FirstOrDefault();
}
else
{
entity = userTypeServiceRepository.Where(t => t.Id == addOrEditUserTypeRole.Id, true).FirstOrDefault();
}
_mapper.Map(addOrEditUserTypeRole, entity);
}
var success = await _repository.SaveChangesAsync();
return ResponseOutput.Ok( entity.Id.ToString());
}
[HttpDelete("{userTypeId:guid}")]
public async Task<IResponseOutput> DeleteUserTypeRole(Guid userTypeId)
{
if ( await _repository.AnyAsync<User>(t => t.UserTypeId == userTypeId))
{
return ResponseOutput.NotOk("该用户类型,被某些用户已使用,不能删除");
}
var success = await userTypeServiceRepository.DeleteFromQueryAsync(t => t.Id == userTypeId);
return ResponseOutput.Result(success);
}
/// <summary>
/// 通过传递场景枚举 返回对应的下拉框数据 1:是外部 2:是内部 3:是Site调研
/// </summary>
/// <param name="userTypeSelectEnum"></param>
/// <returns></returns>
[HttpGet("{userTypeSelectEnum:int}")]
public async Task<List<TrialUserType>> GetUserTypeList(UserTypeSelectEnum userTypeSelectEnum)
{
var userTypeEnums = new List<UserTypeEnum>();
if (userTypeSelectEnum == UserTypeSelectEnum.ExternalUser)
{
userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.CPM, UserTypeEnum.SPM, UserTypeEnum.CPM, UserTypeEnum.SMM, UserTypeEnum.CMM, UserTypeEnum.EA };
}
if (userTypeSelectEnum == UserTypeSelectEnum.InnerUser)
{
userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.IQC, UserTypeEnum.APM, UserTypeEnum.MIM, UserTypeEnum.MW };
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin)
{
userTypeEnums.Add(UserTypeEnum.ProjectManager);
}
}
if (userTypeSelectEnum == UserTypeSelectEnum.SiteSurvey)
{
userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.CRA, UserTypeEnum.ClinicalResearchCoordinator };
}
var query = userTypeServiceRepository.Where(x => x.UserTypeEnum != UserTypeEnum.SuperAdmin)
.WhereIf(userTypeSelectEnum != UserTypeSelectEnum.None, t => userTypeEnums.Contains(t.UserTypeEnum))
.OrderBy(t => t.Order).ProjectTo<TrialUserType>(_mapper.ConfigurationProvider);
return await query.ToListAsync();
}
/// <summary>
/// 项目文档 配置 哪里用户类型下拉
/// </summary>
/// <returns></returns>
public async Task<List<TrialUserType>> GetTrialUserTypeList()
{
var query = userTypeServiceRepository.Where(x => x.UserTypeEnum != UserTypeEnum.SuperAdmin)
//.Where(t => t.Type == UserTypeGroup.TrialUser)
.OrderBy(t => t.Order).ProjectTo<TrialUserType>(_mapper.ConfigurationProvider);
return await query.ToListAsync();
}
}
}
@@ -0,0 +1,96 @@
using AutoMapper;
using AutoMapper.EquivalencyExpression;
using IRaCIS.Application.Contracts;
using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Domain.Models;
namespace IRaCIS.Core.Application.Service
{
public class ManagementConfig : Profile
{
public ManagementConfig()
{
CreateMap<UserTypeMenu, MenuTreeNode>().IncludeMembers(t => t.Menu);
CreateMap<RoleCommand, Role>();
CreateMap<UserCommand, User>().ForMember(d => d.UserCode, x => x.Ignore());
CreateMap<UserType, UserTypeMenuAddOrEdit>().ReverseMap()
.ForMember(t => t.UserTypeMenuList, u => u.MapFrom(c => c.MenuIds))
.ForMember(t => t.UserTypeGroupList, u => u.MapFrom(c => c.UserTypeGroupIdList));
CreateMap<Guid, UserTypeGroup>().ForMember(t => t.DictionaryId, u => u.MapFrom(c => c))
.EqualityComparison((odto, o) => odto == o.DictionaryId);
CreateMap<Guid, UserTypeMenu>().ForMember(t=>t.MenuId,u=>u.MapFrom(c=>c))
.EqualityComparison((odto, o) => odto == o.MenuId);
CreateMap<UserTypeGroup, UserTypeGroupInfo>()
.ForMember(t => t.GroupName, u => u.MapFrom(c => c.Group.Value))
.ForMember(t => t.GroupNameCN, u => u.MapFrom(c => c.Group.ValueCN));
CreateMap<MenuCommand, Menu>().ForMember(d => d.Id, u => u.MapFrom(t => t.MenuId)).ReverseMap();
CreateMap<Menu, MenuTreeNode>()
.ForMember(d => d.MenuId, u => u.MapFrom(t => t.Id));
CreateMap<Menu, MenuDTO>().ForMember(d => d.MenuId, u => u.MapFrom(t => t.Id));
CreateMap<UserType, UserTypeRoleView>()
.ForMember(t => t.MenuIds, u => u.MapFrom(c => c.UserTypeMenuList.Select(t=>t.MenuId)));
CreateMap<Role, RoleDTO>();
CreateMap<Menu, MenuFunctionDTO>();
CreateMap<User, UserSelectionModel>();
CreateMap<UserType, UserTypeViewModel>();
//用户类型菜单勾选
var userTypeId = Guid.Empty;
CreateMap<Menu, MenuTreeNodeSelect>()
.ForMember(d => d.IsSelect, u => u.MapFrom(s => s.UserTypeMenuList.Any(t => t.UserTypeId == userTypeId)));
//菜单树
CreateMap<Menu, MenuFuncTreeNodeView>()
/*.ForMember(d => d.meta, u => u.MapFrom(s => new Meta() { MetaTitle = s.MetaTitle, MetaBreadcrumb = s.MetaBreadcrumb, MetaIcon = s.MetaIcon, MetaActiveMenu = s.MetaActiveMenu }))*/;
//功能树
CreateMap<Menu, FunctionTreeNodeDTO>();
//普通用户菜单树
CreateMap<UserTypeMenu, MenuFuncTreeNodeView>().IncludeMembers(t => t.Menu)
.ForMember(d => d.Id, u => u.MapFrom(t => t.Menu.Id));
//.ForMember(d => d.meta, u => u.MapFrom(s => new Meta() { MetaTitle = s.MenuFunction.MetaTitle, MetaBreadcrumb = s.MenuFunction.MetaBreadcrumb, MetaIcon = s.MenuFunction.MetaIcon, MetaActiveMenu = s.MenuFunction.MetaActiveMenu }));
CreateMap<UserTypeMenu, FunctionTreeNodeDTO>().IncludeMembers(t => t.Menu)
.ForMember(d => d.Id, u => u.MapFrom(t => t.Menu.Id));
CreateMap<UserType, TrialUserType>()
.ForMember(d => d.UserType, u => u.MapFrom(t => t.UserTypeName));
CreateMap<User, UserDetailDTO>()
.ForMember(d => d.RealName, u => u.MapFrom(s => s.LastName + " / " + s.FirstName))
.ForMember(d => d.UserTypeId, u => u.MapFrom(s => s.UserTypeRole.Id))
.ForMember(d => d.UserType, u => u.MapFrom(s => s.UserTypeRole.UserTypeName))
.ForMember(d => d.UserTypeShortName, u => u.MapFrom(s => s.UserTypeRole.UserTypeShortName))
.ForMember(d => d.CanEditUserType, u => u.MapFrom(s => !s.UserTrials.Any()));
CreateMap<User, UserListDTO>()
.ForMember(d => d.RealName, u => u.MapFrom(s => s.LastName + " / " + s.FirstName))
.ForMember(d => d.UserTypeId, u => u.MapFrom(s => s.UserTypeRole.Id))
.ForMember(d => d.UserType, u => u.MapFrom(s => s.UserTypeRole.UserTypeShortName))
.ForMember(d => d.CanEditUserType, u => u.MapFrom(s => !s.UserTrials.Any()));
}
}
}