添加项目文件。
This commit is contained in:
@@ -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()));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user