初始提交

This commit is contained in:
wanyongkang
2020-10-07 20:25:03 +08:00
commit d318014316
3809 changed files with 263103 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
namespace Hncore.Pass.Manage.Configs
{
/// <summary>
/// 当前Web项目的appsettings.xxx.json配置信息承载类
/// </summary>
///
public class AppSettings
{
/// <summary>
/// 允许的主机列表
/// </summary>
public string AllowedHosts { get; set; }
/// <summary>
/// 新数据库连接字符串
/// </summary>
public string DbConString { get; set; }
/// <summary>
/// 旧数据库连接字符串
/// </summary>
public string OldDbConString { get; set; }
/// <summary>
/// Redis连接信息
/// </summary>
public string Redis { get; set; }
}
}

View File

@@ -0,0 +1,34 @@
namespace Hncore.Pass.Manage.Configs
{
/// <summary>
/// RabbitMQ配置信息承载类
/// </summary>
///
public class RabbitMqConfig
{
/// <summary>
/// 主机地址
/// </summary>
public string HostName { get; set; }
/// <summary>
/// 端口号
/// </summary>
public string Port { get; set; }
/// <summary>
/// 登录名
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 登录密码
/// </summary>
public string Password { get; set; }
/// <summary>
/// 虚拟主机路径
/// </summary>
public string VirtualHost { get; set; }
}
}

View File

@@ -0,0 +1,65 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Configs;
using Hncore.Pass.Manage.Util;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options;
namespace Hncore.Pass.Manage.Controllers
{
/// <summary>
/// 管理员权限模块专用父控制器(提供了一些在管理员权限模块中专用的功能)
/// </summary>
///
[ApiVersion("1.0")]
[Route("api/Manage/v{version:apiVersion}/[controller]/[action]")]
public class ManageControllerBase : HncoreControllerBase
{
/// <summary>
/// 配置文件数据承载对象
/// </summary>
protected readonly AppSettings _appSettings;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="hca">HTTP上下文访问对象</param>
///
public ManageControllerBase (IHttpContextAccessor hca)
{
//获取当前应用配置信息承载对象
var oa=hca.HttpContext.RequestServices.GetService(typeof(IOptionsMonitor<AppSettings>)) as IOptionsMonitor<AppSettings>;
this._appSettings = oa.CurrentValue;
}
/// <summary>
/// 创建成功分页结果对象
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <param name="total">记录总数</param>
/// <param name="data">数据对象</param>
/// <param name="message">提示信息</param>
/// <returns>响应给客户端的结果对象</returns>
///
protected ApiResultPaged<T> SuccessPaged<T>(int total, T data, string message = "") where T : class, new()
{
return new ApiResultPaged<T>(ResultCode.C_SUCCESS, message) {TotalCount=total, Data = data };
}
/// <summary>
/// 创建失败分页结果对象
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <param name="message">提示信息</param>
/// <returns>响应给客户端的结果对象</returns>
///
protected ApiResultPaged<T> ErrorPaged<T>(string message = "") where T : class, new()
{
return new ApiResultPaged<T>(ResultCode.C_UNKNOWN_ERROR, message) { TotalCount = 0 };
}
}
}

View File

@@ -0,0 +1,127 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Hncore.Infrastructure.DDD;
using Hncore.Infrastructure.WebApi;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Hncore.Pass.Manage.Request;
using Hncore.Pass.Manage.Response;
using Hncore.Pass.Manage.Service;
using Hncore.Infrastructure.Common;
using Hncore.Pass.Manage.Domain;
using Hncore.Pass.Manage.Response.ManagerToPermission;
using Hncore.Infrastructure.Extension;
using Hncore.Pass.Manage.Repository;
using Hncore.Infrastructure.EF;
using Microsoft.EntityFrameworkCore;
using Hncore.Pass.ManageDataDomain.Request;
namespace Hncore.Pass.Manage.Controllers
{
[ApiVersion("1.0")]
[Route("api/Manage/v{version:apiVersion}/ManageDataDomain/[action]")]
public class ManageDataDomainController : HncoreControllerBase
{
EfDbContext m_DbContext { get; set; }
public ManageDataDomainController(EfDbContext _DbContext)
{
m_DbContext = _DbContext;
}
/// <summary>
/// 获取单个管理员
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
[HttpGet]
public async Task<ApiResult> GetOne([FromQuery] QueryByIdRequest param)
{
return Success(await QueryItemManagerResponse.Query(
m_DbContext.Set<Manager>().GetQueryable()
, m_DbContext.Set<ManagerToPermission>().GetQueryable()
, m_DbContext.Set<AuthorityManagerDataDomain>().GetQueryable()
, param)
);
}
/// <summary>
/// 获取单个管理员,门禁调用
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
[HttpGet, AllowAnonymous]
public async Task<ApiResult> GetOneManage([FromQuery] QueryByIdRequest param)
{
return Success(await m_DbContext.Set<Manager>().GetOneAsync(p => p.Id == param.Id));
}
/// <summary>
/// 获取管理员的项目列表
/// </summary>
/// <param name="request">请求参数对象</param>
/// <returns>响应结果对象</returns>
[HttpGet]
public async Task<ApiResult> Get([FromQuery]int id)
{
var projectcodes =await m_DbContext.Set<AuthorityManagerDataDomain>().Where(p => p.ManagerId == id && p.DeleteTag == 0).Select(s => s.ProjectCode).ToArrayAsync();
var ret = new
{
Projectcodes = projectcodes,
Managerid = id
};
return Success(ret);
}
/// <summary>
/// 绑定项目
/// </summary>
/// <param name="request">请求参数对象</param>
/// <returns>响应结果对象</returns>
[HttpPost]
public async Task<ApiResult> BindDataDomain([FromBody]RequestBase<BindDataDomainRequest> request)
{
var requestCodes = request.Data.Projectcodes;
//获取当前管理员关联的小区编码
var currentProjects = await m_DbContext.Set<AuthorityManagerDataDomain>().Where(p => p.TenantId == request.TenantId && p.DeleteTag == 0 && p.ManagerId == request.Data.Managerid).ToListAsync();
//添加目前未关联的小区编码
var addList = new List<AuthorityManagerDataDomain>();
var currentCodes = currentProjects.Select(s => s.ProjectCode).ToArray();
foreach (var projectCode in requestCodes.Where(code => !currentCodes.Contains(code)))
{
addList.Add(new AuthorityManagerDataDomain()
{
ProjectCode = projectCode,
CreatorId = request.OperaterId,
TenantId = request.TenantId,
ManagerId = request.Data.Managerid,
UpdatorId = request.OperaterId,
});
}
await m_DbContext.Set<AuthorityManagerDataDomain>().AddRangeAsync(addList);
//移除将来未关联的小区编码
var removeList = new List<AuthorityManagerDataDomain>();
var removeCodes = currentCodes.Where(code => !requestCodes.Contains(code)).ToArray();
foreach (var managerDataDomain in currentProjects.Where(m => removeCodes.Contains(m.ProjectCode)))
{
managerDataDomain.UpdatorId = request.OperaterId;
managerDataDomain.DeleteTag = 1;
removeList.Add(managerDataDomain);
}
m_DbContext.Set<AuthorityManagerDataDomain>().UpdateRange(removeList);
//提交
await m_DbContext.SaveChangesAsync();
return Success(request.Data);
}
}
}

View File

@@ -0,0 +1,285 @@
using Hncore.Infrastructure.EF;
using Hncore.Infrastructure.Extension;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Domain;
using Hncore.Pass.Manage.Repository;
using Hncore.Pass.Manage.Request;
using Hncore.Pass.Manage.Response;
using Hncore.Pass.Manage.Response.ManagerToPermission;
using Hncore.Pass.Manage.Service;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Controllers
{
public class ManagerController : ManageControllerBase
{
EfDbContext m_DbContext { get; set; }
private ManagerService _managerService;
public ManagerController(EfDbContext _DbContext, ManagerService managerService, IHttpContextAccessor hca) : base(hca)
{
m_DbContext = _DbContext;
_managerService = managerService;
}
/// <summary>
/// 创建管理员添加权限
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
[HttpPost]
public async Task<ApiResult> Post([FromBody] EditManagerRequest param)
{
param.TenantId = this.Request.GetManageUserInfo().TenantId;
var manager = await Manager.Create(param, m_DbContext.Set<Manager>().GetQueryable());
await m_DbContext.Set<Manager>().AddAsync(manager);
await m_DbContext.SaveChangesAsync();
List<ManagerToPermission> list = new List<ManagerToPermission>();
foreach (var item in param.Permissions)
{
if (item.AllowView == 1)
{
ManagerToPermission mp = new ManagerToPermission();
mp.TenantId = param.TenantId;
mp.ManagerId = manager.Id;
mp.PermissionCode = item.PermissionCode;
mp.AllowView = item.AllowView;
mp.AllowAdd = item.AllowAdd;
mp.AllowEdit = item.AllowEdit;
mp.AllowDel = item.AllowDel;
mp.CreateTime = DateTime.Now;
mp.UpdateTime = DateTime.Now;
mp.CreatorId = param.OperaterId;
list.Add(mp);
}
}
await m_DbContext.Set<ManagerToPermission>().AddRangeAsync(list);
await m_DbContext.SaveChangesAsync();
return Success(new EditManagerResponse().FromEntity(manager));
}
[HttpPost]
public async Task<ApiResult> Put([FromBody] EditManagerRequest param)
{
param.TenantId = this.Request.GetManageUserInfo().TenantId;
var manager = await m_DbContext.Set<Manager>().FindByIdAsync(param.Id);
await manager.Edit(param, m_DbContext.Set<Manager>().GetQueryable());
List<ManagerToPermission> list = new List<ManagerToPermission>();
List<ManagerToPermission> listdel = new List<ManagerToPermission>();
foreach (var item in param.Permissions)
{
if (item.AllowView == 1)
{
ManagerToPermission mp = new ManagerToPermission();
mp.TenantId = param.TenantId;
mp.ManagerId = manager.Id;
mp.PermissionCode = item.PermissionCode;
mp.AllowView = item.AllowView;
mp.AllowAdd = item.AllowAdd;
mp.AllowEdit = item.AllowEdit;
mp.AllowDel = item.AllowDel;
mp.CreateTime = DateTime.Now;
mp.UpdateTime = DateTime.Now;
mp.CreatorId = param.OperaterId;
list.Add(mp);
}
}
var search = m_DbContext.Set<ManagerToPermission>().GetQueryable().Where(p => p.DeleteTag == 0 && p.ManagerId == param.Id);
foreach (var item in search)
{
listdel.Add(item);
}
m_DbContext.Set<ManagerToPermission>().RemoveRange(listdel);
await m_DbContext.Set<ManagerToPermission>().AddRangeAsync(list);
await m_DbContext.SaveChangesAsync();
return Success(new EditManagerResponse().FromEntity(manager));
}
/// <summary>
/// 删除管理员
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
[HttpPost]
public async Task<ApiResult> Delete([FromBody] DelManagerRequest param)
{
var manager = await m_DbContext.Set<Manager>().FindByIdAsync(param.Id);
manager.Delete(param.OperaterId);
await m_DbContext.SaveChangesAsync();
return Success(manager);
}
/// <summary>
/// 获取单个管理员
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
[HttpGet]
public async Task<ApiResult> GetOne([FromQuery] QueryByIdRequest param)
{
param.TenantId = this.Request.GetManageUserInfo().TenantId;
return Success(await QueryItemManagerResponse.Query(
m_DbContext.Set<Manager>().GetQueryable()
, m_DbContext.Set<ManagerToPermission>().GetQueryable()
, m_DbContext.Set<AuthorityManagerDataDomain>().GetQueryable()
, param)
);
}
/// <summary>
/// 获取单个管理员,门禁调用
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
[HttpGet,AllowAnonymous]
public async Task<ApiResult> GetOneManage([FromQuery] QueryByIdRequest param)
{
return Success(await m_DbContext.Set<Manager>().GetOneAsync(p=>p.Id==param.Id));
}
/// <summary>
/// 获取列表数据
/// </summary>
/// <param name="request">请求参数对象</param>
/// <returns>响应结果对象</returns>
[HttpGet]
public async Task<ApiResult<List<QueryListManagerResponse>>> Get([FromQuery]QueryListManagerRequest request)
{
request.TenantId = this.Request.GetManageUserInfo().TenantId;
request.OperaterId = this.Request.GetManageUserInfo().OperaterId;
(int total, List<QueryListManagerResponse> list) res = await _managerService.Get(request);
return SuccessPaged(res.total, res.list, "成功");
}
/// <summary>
/// 超级管理员移交管理员权限
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
[HttpPost,AllowAnonymous]
public async Task<ApiResult> TransferPrivilege([FromBody] RequestBase<TransferPrivilegeDTO> param)
{
#region
if (!param.Data.Key.Has() || !param.Data.Code.Has()) return Error("短信验证码错误");
var tmp = RedisHelper.Get<SmsValidDTO>(param.Data.Key);
if (tmp==null) return Error("短信验证码过期");
if (!string.Equals(tmp.Code, param.Data.Code)) return Error("短信验证码错误");
#endregion
//管理员表操作
var manager = await m_DbContext.Set<Manager>().FindByIdAsync(param.OperaterId);
manager.IsRoot = false;
manager.DeleteTag = 1;
m_DbContext.Set<Manager>().Update(manager);
var managernew = await m_DbContext.Set<Manager>().FindByIdAsync(param.Data.Id);
managernew.IsRoot = true;
m_DbContext.Set<Manager>().Update(managernew);
///管理员权限表操作
var search = m_DbContext.Set<ManagerToPermission>().GetQueryable().Where(p => p.DeleteTag == 0 && p.ManagerId == param.OperaterId && p.TenantId == param.TenantId);
foreach (var item in search)
{
ManagerToPermission mp = new ManagerToPermission();
mp.TenantId = param.TenantId;
mp.ManagerId = param.Data.Id;
mp.PermissionCode = item.PermissionCode;
mp.AllowView = item.AllowView;
mp.AllowAdd = item.AllowAdd;
mp.AllowEdit = item.AllowEdit;
mp.AllowDel = item.AllowDel;
mp.CreateTime = DateTime.Now;
mp.UpdateTime = DateTime.Now;
mp.CreatorId = param.OperaterId;
m_DbContext.Set<ManagerToPermission>().Add(mp);
}
var del = m_DbContext.Set<ManagerToPermission>().GetQueryable().Where(p => p.DeleteTag == 0 && p.ManagerId == param.Data.Id && p.TenantId == param.TenantId).ToList();
m_DbContext.Set<ManagerToPermission>().RemoveRange(del);
//被转移人项目
var recipientProject = m_DbContext.Set<AuthorityManagerDataDomain>().GetQueryable().Where(p => p.DeleteTag == 0 && p.ManagerId == param.Data.Id && p.TenantId == param.TenantId);
//我的项目
var myProject = m_DbContext.Set<AuthorityManagerDataDomain>().GetQueryable().Where(p => p.DeleteTag == 0 && p.ManagerId == param.OperaterId && p.TenantId == param.TenantId);
foreach (var item in recipientProject)
{
item.DeleteTag = 1;
m_DbContext.Set<AuthorityManagerDataDomain>().Update(item);
}
foreach (var item in myProject)
{
item.DeleteTag = 1;
m_DbContext.Set<AuthorityManagerDataDomain>().Update(item);
}
//物业总项目
var ownerProject = m_DbContext.Set<etor_property_estate>().GetQueryable().Where(p => p.DeleteTag == 0 && p.owner_id == param.TenantId);
foreach (var item in ownerProject)
{
AuthorityManagerDataDomain mp = new AuthorityManagerDataDomain();
mp.TenantId = item.owner_id;
mp.ProjectCode = item.projectcode;
mp.DeleteTag = 0;
mp.ManagerId = param.Data.Id;
mp.UpdateTime = DateTime.Now;
mp.UpdatorId = param.OperaterId;
m_DbContext.Set<AuthorityManagerDataDomain>().Add(mp);
}
var mymanager = await m_DbContext.Set<Manager>().FindByIdAsync(param.OperaterId);
mymanager.IsRoot = false;
manager.DeleteTag = 1;
m_DbContext.Set<Manager>().Update(mymanager);
await m_DbContext.SaveChangesAsync();
return Success(param.Data.Id);
}
/// <summary>
/// 根据管理员获取管理员小区权限
/// </summary>
/// <param name="managerId"></param>
/// <returns></returns>
[HttpGet,AllowAnonymous]
public async Task<ApiResult> GetByManageId([FromQuery] int ManagerId)
{
var result = await QueryPermissionByManagerIdResponse.GetByManageId(m_DbContext.Set<AuthorityManagerDataDomain>().GetQueryable(), m_DbContext.Set<etor_property_estate>().GetQueryable(), m_DbContext.Set<Manager>().GetQueryable(), ManagerId);
return Success(result);
}
/// <summary>
/// 根据当前登录人,查询本物业下边超级管理员手机号
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
[HttpGet]
public async Task<ApiResult> GetAdminPhoneByManageId([FromQuery] QueryByIdRequest param)
{
var result = m_DbContext.Set<Manager>().GetQueryable().Where(p => p.TenantId == param.TenantId && p.IsRoot == true).ToList();
if (result != null && result.Count() > 0) return Success<string>(result[0].Phone);
return Success<string>("");
}
}
}

View File

@@ -0,0 +1,124 @@
using Hncore.Infrastructure.DDD;
using Hncore.Infrastructure.EF;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Domain;
using Hncore.Pass.Manage.Repository;
using Hncore.Pass.Manage.Request;
using Hncore.Pass.Manage.Response;
using Hncore.Pass.Manage.Service;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Controllers
{
public class ManagerTagController : ManageControllerBase
{
EfDbContext m_DbContext { get; set; }
private ManagerTagService _managerTagService;
public ManagerTagController(EfDbContext _DbContext,
ManagerTagService managerTagService,
IHttpContextAccessor hca) : base(hca)
{
m_DbContext = _DbContext;
_managerTagService = managerTagService;
}
/// <summary>
/// 获取列表数据
/// </summary>
/// <param name="request">请求参数对象</param>
/// <returns>响应结果对象</returns>
[HttpGet]
public async Task<ApiResult<List<ManagerTagResponse>>> GetList([FromQuery]ManagerTagRequest request)
{
(int total, List<ManagerTagResponse> list) res = await _managerTagService.GetTagList(request);
return SuccessPaged(res.total, res.list, "成功");
}
/// <summary>
/// 根据管理员标签获取管理员权限
/// </summary>
/// <param name="request">请求参数对象</param>
/// <returns>响应结果对象</returns>
[HttpGet]
public async Task<ApiResult<List<ManagerTagToPermissionResponse>>> GetTagToPerssionList ([FromQuery]ManagerTagToPerRequest request)
{
(int total, List<ManagerTagToPermissionResponse> list) res = await _managerTagService.GetTagToPerssionList(request);
return SuccessPaged(res.total, res.list, "成功");
}
/// <summary>
/// 创建管理员标签
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
[HttpPost]
public async Task<ApiResult> Post([FromBody] RequestBase<EditManagerTagRequest> param)
{
var managerTag = await Domain.ManagerTag.Create(param, m_DbContext.Set<ManagerTag>().GetQueryable());
m_DbContext.Set<ManagerTag>().Add(managerTag);
var res = UofCommit(() => new CreateOrEditManagerTagResponse().FromEntity(managerTag));
List< ManagerTagToPermission> list =new List<ManagerTagToPermission>();
foreach (var item in param.Data.Permissions)
{
ManagerTagToPermission mp =new ManagerTagToPermission();
mp.OwnerId = param.TenantId;
mp.ManagerTagId = managerTag.Id;
mp.PermissionCode = item.PermissionCode;
mp.AllowView = item.AllowView;
mp.AllowAdd = item.AllowAdd;
mp.AllowEdit = item.AllowEdit;
mp.AllowDel = item.AllowDel;
mp.CreateTime = DateTime.Now;
mp.UpdateTime = DateTime.Now;
mp.CreatorId = param.OperaterId;
list.Add(mp);
}
await m_DbContext.Set<ManagerTagToPermission>().AddRangeAsync(list);
return await UofCommitAsync(() => new CreateOrEditManagerTagResponse().FromEntity(managerTag));
}
/// <summary>
/// 编辑管理员标签
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
[HttpPost]
public async Task<ApiResult> Put([FromBody] RequestBase<EditManagerTagRequest> param)
{
var managerTag = await m_DbContext.Set<ManagerTag>().FindByIdAsync(param.Data.Id);
await managerTag.Edit(param, m_DbContext.Set<ManagerTag>().GetQueryable());
return await UofCommitAsync(() => new CreateOrEditManagerTagResponse().FromEntity(managerTag));
}
/// <summary>
/// 删除管理员标签
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
[HttpPost]
public async Task<ApiResult> Delete([FromBody] QueryByIdRequest param)
{
var managerTag = await m_DbContext.Set<ManagerTag>().FindByIdAsync(param.Id);
managerTag.Delete(param.OperaterId);
return await UofCommitAsync(() => managerTag);
}
}
}

View File

@@ -0,0 +1,92 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Hncore.Infrastructure.DDD;
using Hncore.Infrastructure.WebApi;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Hncore.Pass.Manage.Request;
using Hncore.Pass.Manage.Response;
using Hncore.Pass.Manage.Service;
using Hncore.Infrastructure.Common;
using Hncore.Pass.Manage.Domain;
using Hncore.Pass.Manage.Repository;
using Hncore.Infrastructure.EF;
namespace Hncore.Pass.Manage.Controllers
{
public class ManagerToPermissionController : ManageControllerBase
{
EfDbContext m_DbContext { get; set; }
private ManagerPermissionService _managerPermissionService ;
public ManagerToPermissionController(EfDbContext _DbContext,
ManagerPermissionService managerPermissionService,
IHttpContextAccessor hca) : base(hca)
{
m_DbContext = _DbContext;
_managerPermissionService = managerPermissionService;
}
/// <summary>
/// 创建管理员权限
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
[HttpPost]
public async Task<ApiResult> Post([FromBody] RequestBase<EditManagerToPermissionRequest> param)
{
var managerToPermission = await Domain.ManagerToPermission.Create(param, m_DbContext.Set<ManagerToPermission>().GetQueryable());
await m_DbContext.Set<ManagerToPermission>().AddAsync(managerToPermission);
return await UofCommitAsync(() => new CreateOrEditManagerToResponse().FromEntity(managerToPermission));
}
/// <summary>
/// 编辑管理员权限
/// </summary>
/// <param name="param"></param>
/// <returns></returns>
[HttpPost]
public async Task<ApiResult> Put([FromBody] RequestBase<EditManagerToPermissionRequest> param)
{
var managerToPermission = await m_DbContext.Set<ManagerToPermission>().FindByIdAsync(param.Data.Id);
await managerToPermission.Edit(param, m_DbContext.Set<ManagerToPermission>().GetQueryable());
return await UofCommitAsync(() => new CreateOrEditManagerToResponse().FromEntity(managerToPermission));
}
/// <summary>
/// 根据操作人获取权限
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet]
public async Task<ApiResult> GetByOperator([FromQuery]QueryByIdRequest request)
{
List<QueryPermissionResponse> list = await _managerPermissionService.GetByOperator(request,true);
return Success(list, "成功");
}
/// <summary>
/// 根据登录人的权限权限
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet]
public async Task<ApiResult> GetPermissions()
{
QueryByIdRequest request = new QueryByIdRequest() { Id = this.Request.GetManageUserInfo().OperaterId };
List<QueryPermissionResponse> list = await _managerPermissionService.GetByOperator(request, false);
return Success(list, "成功");
}
}
}

View File

@@ -0,0 +1,19 @@
using Hncore.Infrastructure.WebApi;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Hncore.Pass.Manage.Controllers
{
[ApiVersion("1.0")]
[Route("api/manage/v{version:apiVersion}/test/[action]")]
public class TestController: HncoreControllerBase
{
[HttpGet,AllowAnonymous]
public string Name()
{
return "Manage";
}
}
}

View File

@@ -0,0 +1,57 @@
using System;
using Hncore.Infrastructure.DDD;
namespace Hncore.Pass.Manage.Domain
{
/// <summary>
/// 管理员项目映射实体模型类
/// </summary>
///
public class AuthorityManagerDataDomain : AggregateRoot<int>, ITenant
{
/// <summary>
/// 楼宇ID
/// <summary>
public override int Id { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int TenantId { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; } = DateTime.Now;
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; } = DateTime.Now;
/// <summary>
/// 创建人ID
/// <summary>
public int CreatorId { get; set; }
/// <summary>
/// 更新人ID
/// <summary>
public int UpdatorId { get; set; }
/// <summary>
/// 软删除标记0.代表正常1.代表已删除
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 管理员数据库ID
/// </summary>
public int ManagerId { get; set; }
/// <summary>
/// 项目编码
/// </summary>
public int ProjectCode { get; set; }
}
}

View File

@@ -0,0 +1,190 @@
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.DDD;
using Hncore.Infrastructure.EntitiesExtension;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Request;
using Microsoft.EntityFrameworkCore;
using System;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Domain
{
/// <summary>
/// 物业管理员表
/// </summary>
public partial class Manager : EntityWithTime<int>, ITenant
{
/// <summary>
/// 所属物业ID
/// <summary>
public int TenantId { get; set; }
/// <summary>
/// 更新人ID
/// <summary>
public int UpdatorId { get; set; }
/// <summary>
/// 创建人ID
/// <summary>
public int CreatorId { get; set; }
/// <summary>
/// 管理员登录名[16
/// </summary>
public string LoginCode { get; set; }
/// <summary>
/// 登录密码[20]
/// </summary>
public string Password { get; set; }
/// <summary>
/// 管理员角色
/// </summary>
public int RoleId { get; set; }
/// <summary>
/// 状态
/// </summary>
public int State { get; set; }
/// <summary>
/// 头像地址[30
/// </summary>
public string PhotoUrl { get; set; }
/// <summary>
/// 微信openid[50]
/// </summary>
public string WxOpenid { get; set; }
/// <summary>
/// 微信昵称
/// </summary>
public string WxNickName { get; set; }
/// <summary>
/// 微信头像
/// </summary>
public string WxImage { get; set; }
/// <summary>
/// 注册来源
/// </summary>
public int Source { get; set; }
/// <summary>
/// 管理员手机号
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 账号code
/// </summary>
public string ManagerCode { get; set; }
/// <summary>
/// 管理员姓名
/// </summary>
public string RealName { get; set; }
/// <summary>
/// 电子邮箱
/// </summary>
public string Email { get; set; }
/// <summary>
/// 是否主管理员权限
/// </summary>
public bool IsRoot { get; set; }
public int SystemId { get; set; }
private static async Task EditCheckAsync(IQueryable<Manager> queryable, EditManagerRequest request, int id = 0)
{
Expression<Func<Manager, bool>> condition = t => t.LoginCode == request.LoginCode || t.Phone== request.Phone;
if (id > 0)
{
condition = condition.And(t => t.Id != id);
}
if (await queryable.AnyAsync(condition))
{
BusinessException.Throw("管理员手机号或登陆名重复");
}
}
/// <summary>
/// 创建管理员
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public static async Task<Manager> Create(EditManagerRequest request,
IQueryable<Manager> queryable)
{
await EditCheckAsync(queryable, request, 0);
var Manager = new Manager()
{
TenantId = request.TenantId,
CreatorId = request.OperaterId,
UpdatorId = request.OperaterId,
CreateTime = DateTime.Now,
UpdateTime = DateTime.Now,
LoginCode = request.LoginCode,
Password = SecurityHelper.HashPassword(request.Password),
PhotoUrl = request.photourl,
RealName = request.RealName,
State = 1,
Phone = request.Phone,
RoleId = -100, ///新规则的权限用-100标识
SystemId = 100,
};
return Manager;
}
/// <summary>
/// 编辑管理员
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public async Task<Manager> Edit(EditManagerRequest request, IQueryable<Manager> queryable)
{
await EditCheckAsync(queryable, request, request.Id);
TenantId = request.TenantId;
UpdatorId = request.OperaterId;
UpdateTime = DateTime.Now;
LoginCode = request.LoginCode;
if (!string.IsNullOrEmpty(request.Password))
{ Password = SecurityHelper.HashPassword(request.Password); }
PhotoUrl = request.photourl;
RealName = request.RealName;
Phone = request.Phone;
RoleId = request.roleid;
return this;
}
/// <summary>
/// 删除管理员
/// </summary>
/// <param name="updatorId"></param>
/// <returns></returns>
public Manager Delete(int updatorId)
{
DeleteTag = 1;
UpdatorId = updatorId;
return this;
}
}
}

View File

@@ -0,0 +1,156 @@
using System;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.DDD;
using Hncore.Infrastructure.EntitiesExtension;
using Hncore.Infrastructure.Extension;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Request;
using Microsoft.EntityFrameworkCore;
namespace Hncore.Pass.Manage.Domain
{
public class ManagerTag : AggregateRoot<int>
{
/// <summary>
/// 用户数据库ID
/// <summary>
public override int Id { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int OwnerId { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 创建人ID
/// <summary>
public int CreatorId { get; set; }
/// <summary>
/// 更新人ID
/// <summary>
public int UpdatorId { get; set; }
/// <summary>
/// 软删除标记0.代表正常1.代表已删除
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 管理员id
/// <summary>
public int ManagerId { get; set; }
/// <summary>
/// 管理员标签
/// <summary>
public string Tag { get; set; }
/// <summary>
/// 管理员标签类型
/// <summary>
public int TagType { get; set; }
private static async Task EditCheckAsync(IQueryable<ManagerTag> queryable, string tag ,int managerId, int id=0 )
{
if(string.IsNullOrWhiteSpace(tag))
{
BusinessException.Throw("管理员类型名称不能为空");
}
Expression<Func<ManagerTag, bool>> condition = t => t.Tag == tag && t.ManagerId== managerId;
if (id > 0)
{
condition = condition.And(t => t.Id != id);
}
if (await queryable.AnyAsync(condition))
{
BusinessException.Throw("管理员类型重名");
}
}
/// <summary>
/// 创建管理员标签
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public static async Task<ManagerTag> Create(RequestBase<EditManagerTagRequest> request,
IQueryable<ManagerTag> queryable)
{
await EditCheckAsync(queryable, request.Data.Tag, request.Data.ManagerId);
await CheckCountAsync(queryable, request.Data.ManagerId);
var ManagerTag = new ManagerTag()
{
Tag = request.Data.Tag,
ManagerId=request.Data.ManagerId,
OwnerId = request.TenantId,
CreatorId = request.OperaterId,
UpdatorId = request.OperaterId,
CreateTime = DateTime.Now,
UpdateTime = DateTime.Now
};
return ManagerTag ;
}
private static async Task CheckCountAsync(IQueryable<ManagerTag> queryable, int ManagerId )
{
Expression<Func<ManagerTag, bool>> condition = t => t.ManagerId == ManagerId;
int totalcount= queryable.Count(condition);
if (totalcount >= 5)
{
BusinessException.Throw("管理员最多可添加5个类型");
}
}
/// <summary>
/// 编辑管理员标签
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public async Task<ManagerTag> Edit(RequestBase<EditManagerTagRequest> request, IQueryable<ManagerTag> queryable)
{
await EditCheckAsync(queryable, request.Data.Tag, request.Data.Id);
Tag = request.Data.Tag;
UpdatorId = request.OperaterId;
UpdateTime = DateTime.Now;
return this;
}
/// <summary>
/// 删除管理员标签
/// </summary>
/// <param name="updatorId"></param>
/// <returns></returns>
public ManagerTag Delete(int updatorId)
{
DeleteTag = 1;
UpdatorId = updatorId;
return this;
}
}
}

View File

@@ -0,0 +1,92 @@
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.DDD;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Data;
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Request;
namespace Hncore.Pass.Manage.Domain
{
public class ManagerTagToPermission : AggregateRoot<int>
{
/// <summary>
/// 用户数据库ID
/// <summary>
public override int Id { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int OwnerId { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 创建人ID
/// <summary>
public int CreatorId { get; set; }
/// <summary>
/// 更新人ID
/// <summary>
public int UpdatorId { get; set; }
/// <summary>
/// 软删除标记0.代表正常1.代表已删除
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 管理员标签id
/// <summary>
public int ManagerTagId { get; set; }
/// <summary>
/// 权限编码
/// <summary>
public string PermissionCode { get; set; }
/// <summary>
/// 是否查看
/// </summary>
public int AllowView { get; set; }
/// <summary>
/// 是否添加
/// </summary>
public int AllowAdd { get; set; }
/// <summary>
/// 是否修改
/// </summary>
public int AllowEdit { get; set; }
/// <summary>
/// 是否删除
/// </summary>
public int AllowDel { get; set; }
}
}

View File

@@ -0,0 +1,138 @@
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.DDD;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Data;
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Request;
namespace Hncore.Pass.Manage.Domain
{
public class ManagerToPermission : AggregateRoot<int>, ITenant
{
/// <summary>
/// 用户数据库ID
/// <summary>
public override int Id { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int TenantId { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 创建人ID
/// <summary>
public int CreatorId { get; set; }
/// <summary>
/// 更新人ID
/// <summary>
public int UpdatorId { get; set; }
/// <summary>
/// 软删除标记0.代表正常1.代表已删除
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 管理员id
/// <summary>
public int ManagerId { get; set; }
/// <summary>
/// 权限编码
/// <summary>
public string PermissionCode { get; set; }
/// <summary>
/// 是否查看
/// </summary>
public int AllowView { get; set; }
/// <summary>
/// 是否添加
/// </summary>
public int AllowAdd { get; set; }
/// <summary>
/// 是否修改
/// </summary>
public int AllowEdit { get; set; }
/// <summary>
/// 是否删除
/// </summary>
public int AllowDel { get; set; }
public DateTime? ExpiredTime { get; set; }
/// <summary>
/// 创建管理员权限关系
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public static async Task<ManagerToPermission> Create(RequestBase<EditManagerToPermissionRequest> request,
IQueryable<ManagerToPermission> queryable)
{
var ManagerToPermission = new ManagerToPermission()
{
ManagerId = request.Data.ManagerId,
PermissionCode = request.Data.PermissionCode,
AllowView = request.Data.AllowView,
AllowAdd = request.Data.AllowAdd,
AllowEdit = request.Data.AllowEdit,
AllowDel = request.Data.AllowDel,
TenantId = request.TenantId,
CreatorId = request.OperaterId,
UpdatorId = request.OperaterId,
CreateTime = DateTime.Now,
UpdateTime = DateTime.Now
};
return ManagerToPermission;
}
/// <summary>
/// 编辑管理员权限关系
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public async Task<ManagerToPermission> Edit(RequestBase<EditManagerToPermissionRequest> request, IQueryable<ManagerToPermission> queryable)
{
PermissionCode = request.Data.PermissionCode;
UpdatorId = request.OperaterId;
UpdateTime = DateTime.Now;
return this;
}
}
}

View File

@@ -0,0 +1,123 @@
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.DDD;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Data;
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Request;
namespace Hncore.Pass.Manage.Domain
{
public class Permission : AggregateRoot<int>
{
/// <summary>
/// 用户数据库ID
/// <summary>
public override int Id { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 创建人ID
/// <summary>
public int CreatorId { get; set; }
/// <summary>
/// 更新人ID
/// <summary>
public int UpdatorId { get; set; }
/// <summary>
/// 软删除标记0.代表正常1.代表已删除
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 权限编码
/// <summary>
public string Permissioncode { get; set; }
public string Parentcode { get; set; }
public string Permissionlabel { get; set; }
public string Permissionurl { get; set; }
/// <summary>
/// 图标[50]
/// </summary>
public string Icon { get; set; }
/// <summary>
/// 激活图标
/// </summary>
public string Iconactivate { get; set; }
/// <summary>
/// 是否查看
/// </summary>
public int AllowView { get; set; }
/// <summary>
/// 是否添加
/// </summary>
public int AllowAdd { get; set; }
/// <summary>
/// 是否修改
/// </summary>
public int AllowEdit { get; set; }
/// <summary>
/// 是否删除
/// </summary>
public int AllowDel { get; set; }
/// <summary>
/// 显示排序
/// </summary>
public int Sortorder { get; set; }
/// <summary>
/// 是否收费
/// </summary>
public bool Ischarge { get; set; }
/// <summary>
/// 模块编码
/// </summary>
public string Nodecode { get; set; }
/// <summary>
/// 是否新功能
/// </summary>
public bool isnew { get; set; }
/// <summary>
/// 系统标识
/// </summary>
public int Systemid { get; set; }
/// <summary>
/// app权限编码
/// </summary>
public string Appcodes { get; set; }
}
}

View File

@@ -0,0 +1,157 @@
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.DDD;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Data;
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Request;
using Hncore.Infrastructure.EntitiesExtension;
using Hncore.Infrastructure.Common;
namespace Hncore.Pass.Manage.Domain
{
public partial class etor_property_estate : AggregateRoot<int>
{
/// <summary>
/// 写字楼/小区id
/// <summary>
public int ID { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 删除标记
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int owner_id { get; set; }
/// <summary>
/// 小区/写字楼编码
/// </summary>
public int projectcode { get; set; }
/// <summary>
/// 写字楼/小区名称
/// </summary>
public string name { get; set; }
/// <summary>
/// 首字母
/// </summary>
public string firstword { get; set; }
/// <summary>
/// 地址
/// </summary>
public string location { get; set; }
/// <summary>
/// 备注
/// </summary>
public string bak { get; set; }
/// <summary>
/// 区分小区/写字楼/公寓
/// </summary>
public int type { get; set; }
/// <summary>
/// 省份
/// </summary>
public int province { get; set; }
/// <summary>
/// 市
/// </summary>
public int city { get; set; }
/// <summary>
/// 区
/// </summary>
public int area { get; set; }
/// <summary>
/// 客服电话
/// </summary>
public string servicetel { get; set; }
/// <summary>
/// 负责人
/// </summary>
public string director { get; set; }
/// <summary>
/// 负责人电话
/// </summary>
public string directortel { get; set; }
/// <summary>
/// 小区图标
/// </summary>
public string logoimg { get; set; }
/// <summary>
/// 占地面积
/// </summary>
public float? locationarea { get; set; }
/// <summary>
/// 建筑面积
/// </summary>
public float? buildingarea { get; set; }
/// <summary>
/// 公共场所面积
/// </summary>
public float? publicarea { get; set; }
/// <summary>
/// 车位面积
/// </summary>
public float? parkinglotarea { get; set; }
/// <summary>
/// 车库面积
/// </summary>
public float? parkinghousearea { get; set; }
/// <summary>
/// 车位数
/// </summary>
public int? parkinglotcount { get; set; }
public int creatorid { get; set; }
public int updatorid { get; set; }
/// <summary>
/// pos账号
/// </summary>
public string posLoginAccount { get; set; }
/// <summary>
/// 支付商户号
/// </summary>
public string pay_mch_id { get; set; }
/// <summary>
/// 支付密钥
/// </summary>
public string pay_key { get; set; }
}
}

View File

@@ -0,0 +1,37 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Filters
{
/// <summary>
/// 全局异常过滤器(主要是发生异常后写日志)
/// </summary>
///
public class HttpGlobalExceptionFilter : IExceptionFilter
{
/// <summary>
/// 日志工厂对象
/// </summary>
readonly ILoggerFactory _loggerFactory;
/// <summary>
/// 主机环境对象
/// </summary>
readonly IHostingEnvironment _env;
public HttpGlobalExceptionFilter(ILoggerFactory loggerFactory, IHostingEnvironment env)
{
_loggerFactory = loggerFactory;
_env = env;
}
public void OnException(ExceptionContext context)
{
throw context.Exception;
}
}
}

View File

@@ -0,0 +1,49 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<ServerGarbageCollection>false</ServerGarbageCollection>
<ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Domain\BaseSetting\**" />
<Compile Remove="Models\**" />
<Content Remove="Domain\BaseSetting\**" />
<Content Remove="Models\**" />
<EmbeddedResource Remove="Domain\BaseSetting\**" />
<EmbeddedResource Remove="Models\**" />
<None Remove="Domain\BaseSetting\**" />
<None Remove="Models\**" />
</ItemGroup>
<ItemGroup>
<Compile Remove="Service\ManageService.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="AutoMapper" Version="8.1.0" />
<PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.2.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.2.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="2.2.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.3" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.2.0" />
</ItemGroup>
<ItemGroup>
<Folder Include="Repository\Map\BaseSetting\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Infrastructure\Hncore.Infrastructure\Hncore.Infrastructure.csproj" />
</ItemGroup>
<ProjectExtensions><VisualStudio><UserProperties appsettings_1Development_1json__JSONSchema="" /></VisualStudio></ProjectExtensions>
</Project>

View File

@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace Hncore.Pass.Manage
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
}

View File

@@ -0,0 +1,27 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:58643",
"sslPort": 44388
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Hncore.Pass.Manage": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:5007"
}
}
}

View File

@@ -0,0 +1,38 @@
using Hncore.Infrastructure.EF;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
namespace Hncore.Pass.Manage.Repository
{
/// <summary>
/// EF数据库上下文类
/// </summary>
///
public class EfDbContext : DbContextBase
{
public DbContext DbContext => this;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="options">上下文实体</param>
/// <param name="httpContextAccessor">http请求上下文</param>
public EfDbContext(DbContextOptions<EfDbContext> options, IHttpContextAccessor httpContextAccessor) :
base(options, httpContextAccessor)
{
}
/// <summary>
/// 创建映射
/// </summary>
/// <param name="modelBuilder"></param>
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.AutoMap(typeof(EfDbContext));
base.OnModelCreating(modelBuilder);
}
}
}

View File

@@ -0,0 +1,40 @@
using Hncore.Infrastructure.EF;
using Hncore.Pass.Manage.Domain;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Repository.Map
{
/// <summary>
/// 管理员项目映射实体表映射类
/// </summary>
///
public class AuthorityManagerDataDomainMap : EntityMapBase<AuthorityManagerDataDomain>
{
/// <summary>
/// 映射方法
/// </summary>
/// <param name="builder">实体模型构建器</param>
///
public override void Map(EntityTypeBuilder<AuthorityManagerDataDomain> builder)
{
builder.ToTable("etor_authority_managerdatadomain");//指定表名
builder.HasKey(t => t.Id); //指定主键
builder.Property(t => t.Id).HasColumnName("id").ValueGeneratedOnAdd(); //指定主键在创建的时候自动生成
builder.Property(t => t.TenantId).HasColumnName("owner_id");//所属物业ID
builder.Property(t => t.CreateTime).HasColumnName("createtime");//创建时间
builder.Property(t => t.UpdateTime).HasColumnName("updatetime");//更新时间
builder.Property(t => t.CreatorId).HasColumnName("creatorid");//创建人ID
builder.Property(t => t.UpdatorId).HasColumnName("updatorid");//更新人ID
builder.Property(t => t.DeleteTag).HasColumnName("deletetag");//软删除标记
builder.Property(t => t.ManagerId).HasColumnName("managerid");//管理员数据库ID
builder.Property(t => t.ProjectCode).HasColumnName("projectcode");//项目编码
}
}
}

View File

@@ -0,0 +1,32 @@
using Hncore.Infrastructure.EF;
using Hncore.Pass.Manage.Domain;
using Hncore.Pass.Manage.Request;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Repository.Map
{
/// <summary>
/// 管理员项目映射实体表映射类
/// </summary>
///
public class ManagerMap : EntityMapBase<Manager>
{
/// <summary>
/// 映射方法
/// </summary>
/// <param name="builder">实体模型构建器</param>
///
public override void Map(EntityTypeBuilder<Manager> builder)
{
builder.ToTable("manager");//指定表名
builder.HasKey(t => t.Id); //指定主键
builder.Property(t => t.Id).HasColumnName("id").ValueGeneratedOnAdd(); //指定主键在创建的时候自动生成
}
}
}

View File

@@ -0,0 +1,45 @@
using Hncore.Infrastructure.EF;
using Hncore.Pass.Manage.Domain;
using Hncore.Pass.Manage.Request;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Repository.Map
{
/// <summary>
/// 管理员项目映射实体表映射类
/// </summary>
///
public class ManagerTagMap : EntityMapBase<ManagerTag>
{
/// <summary>
/// 映射方法
/// </summary>
/// <param name="builder">实体模型构建器</param>
///
public override void Map(EntityTypeBuilder<ManagerTag> builder)
{
builder.ToTable("etor_authority_managertag");//指定表名
builder.HasKey(t => t.Id); //指定主键
builder.Property(t => t.Id).HasColumnName("id").ValueGeneratedOnAdd(); //指定主键在创建的时候自动生成
builder.Property(t => t.OwnerId).HasColumnName("owner_id");//所属物业ID
builder.Property(t => t.CreateTime).HasColumnName("createtime");//创建时间
builder.Property(t => t.UpdateTime).HasColumnName("updatetime");//更新时间
builder.Property(t => t.CreatorId).HasColumnName("creatorid");//创建人ID
builder.Property(t => t.UpdatorId).HasColumnName("updatorid");//更新人ID
builder.Property(t => t.DeleteTag).HasColumnName("deletetag");//软删除标记
builder.Property(t => t.ManagerId).HasColumnName("managerid");//管理员id
builder.Property(t => t.Tag).HasColumnName("tag");//管理员标签
builder.Property(t => t.TagType).HasColumnName("tagtype");//管理员标签
}
}
}

View File

@@ -0,0 +1,47 @@
using Hncore.Infrastructure.EF;
using Hncore.Pass.Manage.Domain;
using Hncore.Pass.Manage.Request;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Repository.Map
{
/// <summary>
/// 管理员项目映射实体表映射类
/// </summary>
///
public class ManagerTagToPermissionMap : EntityMapBase<ManagerTagToPermission>
{
/// <summary>
/// 映射方法
/// </summary>
/// <param name="builder">实体模型构建器</param>
///
public override void Map(EntityTypeBuilder<ManagerTagToPermission> builder)
{
builder.ToTable("etor_authority_managertagtopermission");//指定表名
builder.HasKey(t => t.Id); //指定主键
builder.Property(t => t.Id).HasColumnName("id").ValueGeneratedOnAdd(); //指定主键在创建的时候自动生成
builder.Property(t => t.OwnerId).HasColumnName("owner_id");//所属物业ID
builder.Property(t => t.CreateTime).HasColumnName("createtime");//创建时间
builder.Property(t => t.UpdateTime).HasColumnName("updatetime");//更新时间
builder.Property(t => t.CreatorId).HasColumnName("creatorid");//创建人ID
builder.Property(t => t.UpdatorId).HasColumnName("updatorid");//更新人ID
builder.Property(t => t.DeleteTag).HasColumnName("deletetag");//软删除标记
builder.Property(t => t.ManagerTagId).HasColumnName("managertagid");//管理员id
builder.Property(t => t.PermissionCode).HasColumnName("permissioncode");//权限编码
builder.Property(t => t.AllowView).HasColumnName("allowview");//是否查看
builder.Property(t => t.AllowAdd).HasColumnName("allowadd");//是否添加
builder.Property(t => t.AllowEdit).HasColumnName("allowedit");//是否编辑
builder.Property(t => t.AllowDel).HasColumnName("allowdel");//是否删除
}
}
}

View File

@@ -0,0 +1,33 @@
using Hncore.Infrastructure.EF;
using Hncore.Pass.Manage.Domain;
using Hncore.Pass.Manage.Request;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Repository.Map
{
/// <summary>
/// 管理员项目映射实体表映射类
/// </summary>
///
public class ManagerToPermissionMap : EntityMapBase<Domain.ManagerToPermission>
{
/// <summary>
/// 映射方法
/// </summary>
/// <param name="builder">实体模型构建器</param>
///
public override void Map(EntityTypeBuilder<Domain.ManagerToPermission> builder)
{
builder.ToTable("manager_permission_map");//指定表名
builder.HasKey(t => t.Id); //指定主键
builder.Property(t => t.Id).HasColumnName("id").ValueGeneratedOnAdd(); //指定主键在创建的时候自动生成
}
}
}

View File

@@ -0,0 +1,33 @@
using Hncore.Infrastructure.EF;
using Hncore.Pass.Manage.Domain;
using Hncore.Pass.Manage.Request;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Repository.Map
{
/// <summary>
/// 管理员项目映射实体表映射类
/// </summary>
///
public class PermissionMap : EntityMapBase<Domain.Permission>
{
/// <summary>
/// 映射方法
/// </summary>
/// <param name="builder">实体模型构建器</param>
///
public override void Map(EntityTypeBuilder<Domain.Permission> builder)
{
builder.ToTable("manager_permission");//指定表名
builder.HasKey(t => t.Id); //指定主键
builder.Property(t => t.Id).HasColumnName("Id").ValueGeneratedOnAdd(); //指定主键在创建的时候自动生成
}
}
}

View File

@@ -0,0 +1,29 @@
using Hncore.Infrastructure.EF;
using Hncore.Pass.Manage.Domain;
using Hncore.Pass.Manage.Request;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Repository.Map
{
public class etor_property_estateMap : EntityMapBase<etor_property_estate>
{
public override void Map(EntityTypeBuilder<etor_property_estate> builder)
{
builder.ToTable("etor_property_estate");
builder.HasKey(t => t.Id);
builder.Property(t => t.Id).ValueGeneratedOnAdd();
}
}
}

View File

@@ -0,0 +1,17 @@
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Domain;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.ManageDataDomain.Request
{
public class BindDataDomainRequest
{
public System.Int32 Managerid { get; set; }
public System.Int32[] Projectcodes { get; set; }
}
}

View File

@@ -0,0 +1,23 @@
using Hncore.Infrastructure.WebApi;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Request
{
public class DelManagerRequest : RequestBase
{
/// <summary>
/// 数据库id
/// </summary>
[FromQuery(Name = "Data.Id")]
public int Id { get; set; }
}
}

View File

@@ -0,0 +1,139 @@
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Domain;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Request
{
public class EditManagerRequest : RequestBase
{
/// <summary>
/// 管理员id
/// <summary>
public int Id { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 删除标记
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int OwnerId { get; set; }
/// <summary>
/// 更新人ID
/// <summary>
public int UpdatorId { get; set; }
/// <summary>
/// 创建人ID
/// <summary>
public int CreatorId { get; set; }
/// <summary>
/// 管理员登录名
/// </summary>
public string LoginCode { get; set; }
/// <summary>
/// 登录密码[20]
/// </summary>
public string Password { get; set; }
/// <summary>
/// 管理员手机号
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 管理员姓名
/// </summary>
public string RealName { get; set; }
/// <summary>
/// 关联的内部人员id
/// </summary>
public int workerid { get; set; }
/// <summary>
/// 管理员角色
/// </summary>
public int roleid { get; set; }
/// <summary>
/// 状态
/// </summary>
public int state { get; set; }
/// <summary>
/// 头像地址[30
/// </summary>
public string photourl { get; set; }
/// <summary>
/// 微信openid[50]
/// </summary>
public string wxopenid { get; set; }
/// <summary>
/// 微信昵称
/// </summary>
public string wxnickname { get; set; }
/// <summary>
/// 微信头像
/// </summary>
public string wximage { get; set; }
/// <summary>
/// 注册来源
/// </summary>
public int source { get; set; }
/// <summary>
/// 系统ID
/// </summary>
public int systemid { get; set; }
/// <summary>
/// 账号code
/// </summary>
public string managercode { get; set; }
/// <summary>
/// 电子邮箱
/// </summary>
public string Email { get; set; }
/// <summary>
/// 项目关联
/// </summary>
public string ProjectContact { get; set; }
/// <summary>
/// 权限集合
/// </summary>
public List<ManagerToPermission> Permissions;
}
}

View File

@@ -0,0 +1,29 @@
namespace Hncore.Pass.Manage.Request
{
public class LoginRequest
{
public LoginRequestData Data { get; set; }
}
public class LoginRequestData
{
/// <summary>
/// 登录名
/// </summary>
public System.String Logincode { get; set; }
/// <summary>
/// 密码
/// </summary>
public System.String Password { get; set; }
/// <summary>
/// 验证码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 验证码key
/// </summary>
public string CodeKey { get; set; }
}
}

View File

@@ -0,0 +1,61 @@
using Hncore.Infrastructure.WebApi;
namespace Hncore.Pass.Manage.Request
{
public class QueryListManagerRequest :PageRequestBase
{
public int Id { get; set; }
/// <summary>
/// 查询关键字
/// </summary>
public string KeyWord { get; set; }
/// <summary>
/// 创建人ID
/// <summary>
public int CreatorId { get; set; }
/// <summary>
/// IsRoot 查询字管理员列表
/// <summary>
public int IsRoot { get; set; }
}
public class TransferPrivilegeDTO
{
/// <summary>
/// ID
/// </summary>
public int Id { get; set; }
/// <summary>
/// 短信Key
/// </summary>
public string Key { get; set; }
/// <summary>
/// 短信Code
/// <summary>
public string Code { get; set; }
}
public class SmsValidDTO
{
/// <summary>
/// 短信验证码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 手机号
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 时间戳
/// <summary>
public string TimeStamp { get; set; }
}
}

View File

@@ -0,0 +1,48 @@
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Domain;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Request
{
public class QueryManagerRequest : RequestBase
{
/// <summary>
/// 管理员id
/// <summary>
[FromQuery(Name = "Data.Id")]
public int Id { get; set; }
/// <summary>
/// 管理员登录名
/// </summary>
[FromQuery(Name = "Data.LoginCode")]
public string LoginCode { get; set; }
/// <summary>
/// 管理员手机号
/// </summary>
[FromQuery(Name = "Data.Phone")]
public string Phone { get; set; }
/// <summary>
/// 管理员姓名
/// </summary>
[FromQuery(Name = "Data.RealName")]
public string RealName { get; set; }
/// <summary>
/// 权限集合
/// </summary>
public List<ManagerToPermission> Permissions;
}
}

View File

@@ -0,0 +1,33 @@
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Domain;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Request
{
public class EditManagerTagRequest : RequestBase
{
/// <summary>
/// 流水id
/// </summary>
[JsonProperty("Id")]
public int Id { get; set; }
[JsonProperty("Tag")]
public string Tag { get; set; }
[JsonProperty("ManagerId")]
public int ManagerId { get; set; }
/// <summary>
/// 权限集合
/// </summary>
public List<ManagerTagToPermission> Permissions;
}
}

View File

@@ -0,0 +1,41 @@
using Hncore.Infrastructure.WebApi;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Request
{
public class ManagerTagRequest : RequestBase
{
/// <summary>
/// 用户数据库ID
/// <summary>
[FromQuery(Name = "Data.Id")]
public string Id { get; set; }
/// <summary>
/// 管理员标签
/// </summary>
[FromQuery(Name = "Data.Tag")]
public string Tag { get; set; }
/// <summary>
/// 管理员id
/// </summary>
[FromQuery(Name = "Data.ManagerId")]
public int ManagerId { get; set; }
/// <summary>
/// 管理员id
/// </summary>
[FromQuery(Name = "Data.TagType")]
public int TagType { get; set; }
}
}

View File

@@ -0,0 +1,34 @@
using Hncore.Infrastructure.WebApi;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Request
{
/// <summary>
/// 管理员标签关联权限对象
/// </summary>
public class ManagerTagToPerRequest : RequestBase
{
/// <summary>
/// 用户数据库ID
/// <summary>
[FromQuery(Name = "Data.Id")]
public string Id { get; set; }
/// <summary>
/// 管理员标签id
/// </summary>
[FromQuery(Name = "Data.ManagerTagId")]
public int ManagerTagId { get; set; }
}
}

View File

@@ -0,0 +1,100 @@
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Domain;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Request
{
public class CreateManagerToPermissionRequest : RequestBase
{
/// <summary>
/// 管理员id
/// <summary>
public int Id { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 删除标记
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int OwnerId { get; set; }
/// <summary>
/// 更新人ID
/// <summary>
public int UpdatorId { get; set; }
/// <summary>
/// 创建人ID
/// <summary>
public int CreatorId { get; set; }
/// <summary>
/// 管理员登录名
/// </summary>
public string LoginCode { get; set; }
/// <summary>
/// 登录密码[20]
/// </summary>
public string Password { get; set; }
/// <summary>
/// 管理员手机号
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 管理员姓名
/// </summary>
public string RealName { get; set; }
/// <summary>
/// 关联的内部人员id
/// </summary>
public int workerid { get; set; }
/// <summary>
/// 管理员角色
/// </summary>
public int roleid { get; set; }
/// <summary>
/// 状态
/// </summary>
public int state { get; set; }
/// <summary>
/// 权限集合
/// </summary>
public List<ManagerToPermission> Permissions ;
}
}

View File

@@ -0,0 +1,61 @@
using Hncore.Infrastructure.WebApi;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Request
{
public class EditManagerToPermissionRequest : RequestBase
{
/// <summary>
/// 用户数据库ID
/// <summary>
[JsonProperty("Id")]
public int Id { get; set; }
/// <summary>
/// 管理员id
/// </summary>
[JsonProperty("ManagerId")]
public int ManagerId { get; set; }
/// <summary>
/// 权限编码
/// </summary>
[JsonProperty("PermissionCode")]
public string PermissionCode { get; set; }
/// <summary>
/// 是否查看
/// </summary>
[JsonProperty("AllowView")]
public int AllowView { get; set; }
/// <summary>
/// 是否添加
/// </summary>
[JsonProperty("AllowAdd")]
public int AllowAdd { get; set; }
/// <summary>
/// 是否修改
/// </summary>
[JsonProperty("AllowEdit")]
public int AllowEdit { get; set; }
/// <summary>
/// 是否删除
/// </summary>
[JsonProperty("AllowDel")]
public int AllowDel { get; set; }
}
}

View File

@@ -0,0 +1,40 @@
using Hncore.Infrastructure.WebApi;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Request
{
public class ManagerToPermissionRequest :RequestBase
{
/// <summary>
/// 用户数据库ID
/// <summary>
[JsonProperty("Id")]
public int Id { get; set; }
/// <summary>
/// 管理员标签
/// </summary>
[JsonProperty("Tag")]
public string Tag { get; set; }
/// <summary>
/// 管理员id
/// </summary>
[JsonProperty("ManagerId")]
public int ManagerId { get; set; }
/// <summary>
/// 权限编码
/// </summary>
[JsonProperty("PermissionCode")]
public string PermissionCode { get; set; }
}
}

View File

@@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Response
{
public class CreateOrEditManagerTagResponse
{
/// <summary>
/// 用户数据库ID
/// <summary>
public int Id { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int OwnerId { get; set; }
/// <summary>
/// 管理员标签
/// </summary>
public string Tag { get; set; }
public CreateOrEditManagerTagResponse FromEntity(Domain.ManagerTag managerTag)
{
Id = managerTag.Id;
Tag = managerTag.Tag;
return this;
}
}
}

View File

@@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Response
{
public class CreateOrEditManagerToResponse
{
/// <summary>
/// 用户数据库ID
/// <summary>
public int Id { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int OwnerId { get; set; }
/// <summary>
/// 软删除标记0.代表正常1.代表已删除
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 管理员标签
/// </summary>
public string PermissionCode { get; set; }
public CreateOrEditManagerToResponse FromEntity(Domain.ManagerToPermission managerToPermission)
{
PermissionCode = managerToPermission.PermissionCode;
Id = managerToPermission.Id;
return this;
}
}
}

View File

@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Response
{
public class DomainResponse
{
/// <summary>
/// 用户关系Domain数据库ID
/// <summary>
public int Id { get; set; }
/// <summary>
/// 项目编码
/// </summary>
public int ProjectCode { get; set; }
}
}

View File

@@ -0,0 +1,66 @@
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.DDD;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Data;
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Request;
namespace Hncore.Pass.Manage.Response
{
public class EditManagerResponse
{
/// <summary>
/// 用户数据库ID
/// <summary>
public int Id { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int OwnerId { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 管理员登录名
/// </summary>
public string LoginCode { get; set; }
/// <summary>
/// 管理员手机号
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
public EditManagerResponse FromEntity(Domain.Manager manager)
{
Id = manager.Id;
LoginCode = manager.LoginCode ;
Phone = manager.Phone;
OwnerId = manager.TenantId;
CreateTime = manager.CreateTime;
UpdateTime = manager.UpdateTime;
return this;
}
}
}

View File

@@ -0,0 +1,43 @@
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.DDD;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Data;
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Request;
namespace Hncore.Pass.Manage.Response
{
public class ManagerResponse
{
/// <summary>
/// 用户数据库ID
/// <summary>
public int Id { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int OwnerId { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
}
}

View File

@@ -0,0 +1,71 @@
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.DDD;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Data;
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Request;
namespace Hncore.Pass.Manage.Response
{
public class PermissionResponse
{
/// <summary>
/// 用户数据库ID
/// <summary>
public int Id { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int OwnerId { get; set; }
/// <summary>
/// 软删除标记0.代表正常1.代表已删除
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 管理员id
/// <summary>
public int ManagerId { get; set; }
/// <summary>
/// 权限编码
/// <summary>
public string PermissionCode { get; set; }
/// <summary>
/// 是否查看
/// </summary>
public int AllowView { get; set; }
/// <summary>
/// 是否添加
/// </summary>
public int AllowAdd { get; set; }
/// <summary>
/// 是否修改
/// </summary>
public int AllowEdit { get; set; }
/// <summary>
/// 是否删除
/// </summary>
public int AllowDel { get; set; }
}
}

View File

@@ -0,0 +1,43 @@
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.DDD;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Data;
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Request;
namespace Hncore.Pass.Manage.Response
{
public class QuertManagerProjectResponse
{
/// <summary>
/// 用户数据库ID
/// <summary>
public int Id { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int OwnerId { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
}
}

View File

@@ -0,0 +1,135 @@
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.DDD;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Data;
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Request;
using Hncore.Pass.Manage.Domain;
namespace Hncore.Pass.Manage.Response
{
public class QueryItemManagerResponse
{
/// <summary>
/// 用户数据库ID
/// <summary>
public int Id { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int OwnerId { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 删除标记
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 管理员登录名
/// </summary>
public string LoginCode { get; set; }
/// <summary>
/// 管理员手机号
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 头像地址
/// </summary>
public string Photourl { get; set; }
/// <summary>
/// 项目关联
/// </summary>
public string ProjectContact { get; set; }
/// <summary>
/// 管理员姓名
/// </summary>
public string RealName { get; set; }
public int Isroot { get; set; }
public int RoleCode { get; set; }
public List<PermissionResponse> Permission =new List<PermissionResponse>();
public List<DomainResponse> Domain = new List<DomainResponse>();
public static async Task<QueryItemManagerResponse> Query(
IQueryable<Domain.Manager> ManagerQueryable
, IQueryable<Domain.ManagerToPermission> ManagerToPermissionQueryable
, IQueryable<Domain.AuthorityManagerDataDomain> DomainQueryable
, QueryByIdRequest param
)
{
var search = from dw in ManagerQueryable.Where(p => p.DeleteTag == 0 && p.Id == param.Id && p.TenantId == param.TenantId)
join mtp in ManagerToPermissionQueryable.Where(p => p.DeleteTag == 0)
on dw.Id equals mtp.ManagerId into Permissions
select new { dw, Permissions };
var list = search.ToList();
QueryItemManagerResponse pm = new QueryItemManagerResponse();
foreach (var item in list)
{
pm.Id = item.dw.Id;
pm.CreateTime = item.dw.CreateTime;
pm.UpdateTime = item.dw.UpdateTime;
pm.DeleteTag = item.dw.DeleteTag;
pm.OwnerId = item.dw.TenantId;
pm.LoginCode = item.dw.LoginCode;
pm.RealName = item.dw.RealName;
pm.Phone = item.dw.Phone;
pm.Photourl = item.dw.PhotoUrl;
pm.RoleCode = item.dw.RoleId;
// pm.ProjectContact = item.dw.ProjectContact;
foreach (var itemper in item.Permissions)
{
PermissionResponse mtp =new PermissionResponse() ;
mtp.ManagerId = itemper.ManagerId;
mtp.Id = itemper.Id;
mtp.AllowAdd = itemper.AllowAdd;
mtp.AllowDel = itemper.AllowDel;
mtp.AllowEdit = itemper.AllowEdit;
mtp.AllowView = itemper.AllowView;
mtp.PermissionCode = itemper.PermissionCode;
mtp.OwnerId = item.dw.TenantId;
pm.Permission.Add(mtp);
}
}
//var projectList= DomainQueryable.Where(p => p.DeleteTag == 0 && p.ManagerId == param.Id && p.TenantId == param.TenantId);
//foreach(var project in projectList)
//{
// pm.Domain.Add(new DomainResponse() {
// Id= project.Id,
// ProjectCode= project.ProjectCode
// });
//}
return pm;
}
}
}

View File

@@ -0,0 +1,139 @@
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.DDD;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Data;
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Request;
using Hncore.Infrastructure.EntitiesExtension;
using Hncore.Infrastructure.Extension;
namespace Hncore.Pass.Manage.Response
{
public class QueryListManagerResponse
{
/// <summary>
/// 管理员id
/// <summary>
public int Id { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 删除标记
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int OwnerId { get; set; }
/// <summary>
/// 更新人ID
/// <summary>
public int UpdatorId { get; set; }
/// <summary>
/// 创建人ID
/// <summary>
public int CreatorId { get; set; }
/// <summary>
/// 管理员登录名[16
/// </summary>
public string LoginCode { get; set; }
/// <summary>
/// 登录密码[20]
/// </summary>
public string Password { get; set; }
/// <summary>
/// 关联的内部人员id
/// </summary>
public int workerid { get; set; }
/// <summary>
/// 管理员角色
/// </summary>
public int roleid { get; set; }
/// <summary>
/// 状态
/// </summary>
public int state { get; set; }
/// <summary>
/// 头像地址[30
/// </summary>
public string Photourl { get; set; }
/// <summary>
/// 微信openid[50]
/// </summary>
public string Wxopenid { get; set; }
/// <summary>
/// 微信昵称
/// </summary>
public string wxnickname { get; set; }
/// <summary>
/// 微信头像
/// </summary>
public string wximage { get; set; }
/// <summary>
/// 注册来源
/// </summary>
public int source { get; set; }
/// <summary>
/// 系统ID
/// </summary>
public int systemid { get; set; }
/// <summary>
/// 管理员手机号
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 账号code
/// </summary>
public string managercode { get; set; }
/// <summary>
/// 管理员姓名
/// </summary>
public string RealName { get; set; }
/// <summary>
/// 电子邮箱
/// </summary>
public string Email { get; set; }
/// <summary>
/// 项目关联
/// </summary>
public string ProjectContact { get; set; }
/// <summary>
/// 关联项目数量
/// </summary>
public int BuildingCount { get; set; }
}
}

View File

@@ -0,0 +1,55 @@
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.DDD;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Data;
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Request;
namespace Hncore.Pass.Manage.Response
{
public class ManagerTagResponse
{
/// <summary>
/// 用户数据库ID
/// <summary>
public int Id { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int OwnerId { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 管理员标签名称
/// <summary>
public string Tag { get; set; }
/// <summary>
/// 管理员标签类型
/// <summary>
public int TagType { get; set; }
/// <summary>
/// 管理员id
/// <summary>
public int ManagerId { get; set; }
}
}

View File

@@ -0,0 +1,92 @@
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.DDD;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Data;
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Request;
namespace Hncore.Pass.Manage.Response
{
public class ManagerTagToPermissionResponse
{
/// <summary>
/// 用户数据库ID
/// <summary>
public int Id { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int OwnerId { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 创建人ID
/// <summary>
public int CreatorId { get; set; }
/// <summary>
/// 更新人ID
/// <summary>
public int UpdatorId { get; set; }
/// <summary>
/// 软删除标记0.代表正常1.代表已删除
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 管理员标签id
/// <summary>
public int ManagerTagId { get; set; }
/// <summary>
/// 权限编码
/// <summary>
public string PermissionCode { get; set; }
/// <summary>
/// 是否查看
/// </summary>
public int AllowView { get; set; }
/// <summary>
/// 是否添加
/// </summary>
public int AllowAdd { get; set; }
/// <summary>
/// 是否修改
/// </summary>
public int AllowEdit { get; set; }
/// <summary>
/// 是否删除
/// </summary>
public int AllowDel { get; set; }
}
}

View File

@@ -0,0 +1,82 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Data;
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Request;
using Hncore.Infrastructure.EntitiesExtension;
using Hncore.Infrastructure.Extension;
namespace Hncore.Pass.Manage.Response.ManagerToPermission
{
public class QueryPermissionByManagerIdResponse
{
/// <summary>
/// ID
/// <summary>
public int Id { get; set; }
/// <summary>
/// 所属物业ID
/// <summary>
public int OwnerId { get; set; }
/// <summary>
/// 管理员数据库ID
/// </summary>
public int ManagerId { get; set; }
/// <summary>
/// 项目编码
/// </summary>
public int ProjectCode { get; set; }
/// <summary>
/// 小区名称
/// </summary>
public string ProjectName { get; set; }
/// <summary>
/// 管理员与权限对应表
/// </summary>
/// <param name="domainQueryable"></param>
/// <param name="managerId"></param>
/// <returns></returns>
public static async Task<List<QueryPermissionByManagerIdResponse>> GetByManageId(
IQueryable<Domain.AuthorityManagerDataDomain> domainQueryable,
IQueryable<Domain.etor_property_estate> projects,
IQueryable<Domain.Manager> manages ,
int managerId)
{
List<QueryPermissionByManagerIdResponse> result = new List<QueryPermissionByManagerIdResponse>();
var manage = await manages.FirstOrDefaultAsync(p=>p.Id== managerId);
if (manage.IsRoot)
{
result = await projects.Where(p => p.owner_id == manage.TenantId && p.DeleteTag == 0).Select(r => new QueryPermissionByManagerIdResponse()
{
Id = 0,
ManagerId = managerId,
OwnerId = r.owner_id,
ProjectCode = r.projectcode,
ProjectName = r.name
}).ToListAsync();
}
else {
result = await (from domain in domainQueryable.Where(p => p.ManagerId == managerId && p.DeleteTag == 0)
join pro in projects
on domain.ProjectCode equals pro.projectcode
select new QueryPermissionByManagerIdResponse()
{
Id = domain.Id,
ManagerId = domain.ManagerId,
OwnerId = domain.TenantId,
ProjectCode = domain.ProjectCode,
ProjectName = pro.name
}).ToListAsync();
}
return result;
}
}
}

View File

@@ -0,0 +1,130 @@
using Hncore.Infrastructure.Data;
using Hncore.Infrastructure.DDD;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Data;
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Request;
using Hncore.Infrastructure.EntitiesExtension;
using Hncore.Infrastructure.Extension;
namespace Hncore.Pass.Manage.Response
{
public class QueryPermissionResponse
{
/// 用户数据库ID
/// <summary>
public int Id { get; set; }
/// <summary>
/// 创建时间
/// <summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新时间
/// <summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// 创建人ID
/// <summary>
public int CreatorId { get; set; }
/// <summary>
/// 更新人ID
/// <summary>
public int UpdatorId { get; set; }
/// <summary>
/// 软删除标记0.代表正常1.代表已删除
/// <summary>
public int DeleteTag { get; set; }
/// <summary>
/// 管理员id
/// <summary>
public int ManagerId { get; set; }
/// <summary>
/// 权限编码
/// <summary>
public string Permissioncode { get; set; }
public string Parentcode { get; set; }
public string Permissionlabel { get; set; }
public string Permissionurl { get; set; }
/// <summary>
/// 图标[50]
/// </summary>
public string Icon { get; set; }
/// <summary>
/// 激活图标
/// </summary>
public string Iconactivate { get; set; }
/// <summary>
/// 是否查看
/// </summary>
public Boolean AllowView { get; set; } = false;
/// <summary>
/// 是否添加
/// </summary>
public Boolean AllowAdd { get; set; } = false;
/// <summary>
/// 是否修改
/// </summary>
public Boolean AllowEdit { get; set; } = false;
/// <summary>
/// 是否删除
/// </summary>
public Boolean AllowDel { get; set; } = false;
/// <summary>
/// 显示排序
/// </summary>
public int Sortorder { get; set; }
/// <summary>
/// 是否收费
/// </summary>
public bool Ischarge { get; set; }
/// <summary>
/// 模块编码
/// </summary>
public string Nodecode { get; set; }
/// <summary>
/// 是否新功能
/// </summary>
public bool isnew { get; set; }
/// <summary>
/// 系统标识
/// </summary>
public int Systemid { get; set; }
/// <summary>
///
/// </summary>
public string Appcodes { get; set; }
public IList<QueryPermissionResponse> Children { get; set; }
}
}

View File

@@ -0,0 +1,71 @@
using Hncore.Infrastructure.EF;
using Hncore.Pass.Manage.Configs;
using Hncore.Pass.Manage.Domain;
using Hncore.Pass.Manage.Repository;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options;
using System;
using System.Linq;
using System.Linq.Expressions;
namespace Hncore.Pass.Manage.Service
{
/// <summary>
/// 父业务逻辑类
/// </summary>
///
public abstract class BaseService
{
/// <summary>
/// 配置文件数据承载对象
/// </summary>
protected readonly AppSettings _appSettings;
/// <summary>
/// EF上下文对象
/// </summary>
protected readonly EfDbContext _dbCtx;
/// <summary>
/// 数据库连接字符串
/// </summary>
public string OldDbConString { get { return _appSettings.OldDbConString; } }
/// <summary>
/// 构造函数
/// </summary>
/// <param name="hca">HTTP上下文访问对象</param>
public BaseService(IHttpContextAccessor hca)
{
this._dbCtx= hca.HttpContext.RequestServices.GetService(typeof(EfDbContext)) as EfDbContext;
//获取当前应用配置信息承载对象
var oa=hca.HttpContext.RequestServices.GetService(typeof(IOptionsMonitor<AppSettings>)) as IOptionsMonitor<AppSettings>;
this._appSettings = oa.CurrentValue;
}
/// <summary>
/// 获取操作员有权操作的项目编码列表(可直接用于EF查询中的Labmda查询条件中)
/// </summary>
/// <param name="operaterId">操作员数据库ID</param>
/// <param name="ownerId">隶属的物业ID</param>
/// <returns>有权操作的项目编码列表没有就返回null</returns>
public IQueryable<int> GetManagerProjectCodeList(int operaterId, int ownerId = 0)
{
if (operaterId <= 0)
return null;
Expression<Func<AuthorityManagerDataDomain, bool>> expression = c => c.DeleteTag == 0 && c.ManagerId == operaterId;
if (ownerId > 0)
{//如果传递了物业ID需要动态将物业ID追加到Lambda表达式中去
var p1 = expression.Parameters[0];
var ownerIdExpression = Expression.PropertyOrField(p1, "OwnerId");
var m3 = Expression.Equal(ownerIdExpression, Expression.Constant(ownerId));
var body= Expression.And(expression.Body, m3);
expression = Expression.Lambda<Func<AuthorityManagerDataDomain, bool>>(body, p1);
}
IQueryable<int> list = _dbCtx.Set<AuthorityManagerDataDomain>().GetQueryable().Where(expression).Select(c => c.ProjectCode);
return list;
}
}
}

View File

@@ -0,0 +1,155 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using Etor.Infrastructure.Common;
using Etor.Infrastructure.Data;
using Etor.Infrastructure.Extension;
using Etor.PSIP.Manage.Models;
using Etor.PSIP.Manage.Request;
using Etor.PSIP.Manage.Response;
using JWT;
using JWT.Algorithms;
using JWT.Serializers;
using Microsoft.EntityFrameworkCore;
namespace Etor.PSIP.Manage.Service
{
public class ManageService
{
private static string _secret = "etor_yh_lzh_20f_2017_PETER";
private EtorPropertyDbContext _dbContext;
public ManageService(EtorPropertyDbContext dbContext)
{
_dbContext = dbContext;
}
public async Task<LoginResponse> Login(LoginRequestData request)
{
if (request == null
|| !request.Code.Has()
|| !request.CodeKey.Has()
|| !request.Logincode.Has()
|| !request.Password.Has()
)
{
BusinessException.Throw("登陆信息异常");
}
string valCode = await RedisHelper.GetAsync(request.CodeKey);
if (!valCode.Has() || valCode.ToLower() != request.Code.ToLower())
{
BusinessException.Throw("验证码错误");
}
var manage = await _dbContext.Set<etor_authority_manager>()
.FirstOrDefaultAsync(m => (m.logincode == request.Logincode || m.phone == request.Logincode)
&& m.DeleteTag == 0
&& m.state == (int) ManagerState.Enabled);
if (manage == null)
{
BusinessException.Throw("登录名不存在");
}
if (HashPassword(request.Password).ToUpper() != manage.password.ToUpper())
{
BusinessException.Throw("密码错误");
}
var tokenDic = new Dictionary<string, object>()
{
{"LoginName", manage.logincode},
{"RoleName", ""},
{"OperaterID", manage.ID},
{"OwnerID", manage.owner_id}
};
var isRoot = await _dbContext.Set<etor_authority_role>().AnyAsync(r => r.DeleteTag == 0
&& r.ID == manage.roleid
&& r.owner_id == manage.owner_id
&& r.isroot);
if (!isRoot)
{
int[] domains = await _dbContext.Set<etor_authority_managerdatadomain>()
.Where(p => p.owner_id == manage.owner_id && p.DeleteTag == 0 && p.managerid == manage.ID)
.Select(t => t.projectcode)
.ToArrayAsync();
tokenDic.Add("DataDomain", domains);
}
var minutes = (DateTime.Now.AddYears(1) - DateTime.Now).TotalMinutes;
var token = GenerateToken(tokenDic, Convert.ToInt32(minutes));
var response = new LoginManagerResponse().FromEntity(manage);
var property = await _dbContext.Set<etor_property>()
.FirstOrDefaultAsync(f => f.ID == manage.owner_id && f.DeleteTag == 0);
response.PropertyCompanyName = property.companyname;
response.ExpiredTime = property.ExpiredTime;
response.ValidDays = (property.ExpiredTime - DateTime.Now.Date).Days;
response.IsRootUser = isRoot;
if (response.Phone.Has())
{
var employee = await _dbContext.EtorNinternalStaff.FirstOrDefaultAsync(_ => _.DeleteTag == 0
&& _.Mobile ==
response.Phone);
if (employee != null)
{
response.WorkerName = employee.Position;
var departmentName = await _dbContext.Set<etor_ninternal_department>()
.Where(_ => _.DeleteTag == 0 && _.ID == employee.Departmentid)
.Select(t => t.departmentname)
.FirstOrDefaultAsync();
response.DepartmentName = departmentName;
}
}
return new LoginResponse()
{
Token = token,
Manager = response
};
}
private static string GenerateToken(Dictionary<string, object> param, int timeoutMinutes = 120)
{
IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
IJsonSerializer serializer = new JsonNetSerializer();
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
IDateTimeProvider provider = new UtcDateTimeProvider();
var now = provider.GetNow();
var secondsSinceEpoch = Math.Round((now - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds);
param["exp"] = secondsSinceEpoch + Math.Max(0, timeoutMinutes) * 60; //什么时候签发的
//param["exp"] = secondsSinceEpoch + 1;//什么时候签发的
var token = encoder.Encode(param, _secret);
return token;
}
public static string HashPassword(string password)
{
using (MD5 md5 = MD5.Create())
{
byte[] bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(password));
return Convert.ToBase64String(bytes);
}
}
}
}

View File

@@ -0,0 +1,144 @@
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.DDD;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Domain;
using Hncore.Pass.Manage.Request;
using Hncore.Pass.Manage.Response;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using Hncore.Infrastructure.EntitiesExtension;
using Hncore.Pass.Manage.Repository;
using Hncore.Infrastructure.EF;
namespace Hncore.Pass.Manage.Service
{
/// <summary>
/// 管理员业务逻辑类
/// </summary>
///
public class ManagerPermissionService : BaseService
{
EfDbContext m_DbContext { get; set; }
/// <summary>
/// 构造函数
/// </summary>
/// <param name="">管理员标签查询对象</param>
public ManagerPermissionService(EfDbContext _DbContext,
IHttpContextAccessor hca) : base(hca)
{
m_DbContext = _DbContext;
}
/// <summary>
/// 获取管理员权限
/// </summary>
/// <param name="request">请求对象</param>
/// <returns>响应列表对象</returns>
public async Task<List<QueryPermissionResponse>> GetByOperator(QueryByIdRequest param,bool showAll)
{
//获取到所拥有的所有权限
// var meCodes = m_DbContext.Set<ManagerToPermission>().GetQueryable().Where(c => c.DeleteTag == 0 && c.ManagerId == param.Id).Select(c => c.PermissionCode);
// var search = m_DbContext.Set<Permission>().GetQueryable().Where(c => c.DeleteTag == 0 && c.Systemid == 100 && meCodes.Contains(c.Permissioncode));
var managerpPrmissions = new List<ManagerToPermission>();
var manager = await m_DbContext.Set<Manager>().FindByIdAsync(param.Id);
var permissions = m_DbContext.Set<Permission>().GetQueryable()
.Where(c => c.DeleteTag == 0 && c.Systemid == 100)
.OrderBy(m => m.Sortorder)
.ToList();
if (manager.IsRoot)
{
permissions.ForEach(m => {
managerpPrmissions.Add(new ManagerToPermission()
{
AllowAdd = 1,
AllowDel = 1,
AllowEdit = 1,
AllowView = 1,
ManagerId = manager.Id,
PermissionCode = m.Permissioncode,
TenantId = manager.TenantId,
});
});
}
else
{
managerpPrmissions = m_DbContext.Set<ManagerToPermission>().GetQueryable().Where(c => c.DeleteTag == 0 && c.ManagerId == param.Id).ToList();
}
List<QueryPermissionResponse> result = CreatePermissionList(permissions, "0", managerpPrmissions, showAll);
return result;
}
/// <summary>
/// 组装权限列表
/// </summary>
/// <param name="all">所有的权限列表</param>
/// <param name="parentCode">父级权限编码</param>
/// <returns>组装好的列表</returns>
private List<QueryPermissionResponse> CreatePermissionList(List<Permission> all, string parentCode, List<ManagerToPermission> mlist, bool showAll=true)
{
var list = all.Where(c => c.Parentcode == parentCode);
if (list == null || list.Count() <= 0)
return null;
List<QueryPermissionResponse> result = new List<QueryPermissionResponse>();
foreach (var item in list)
{
QueryPermissionResponse mdl = ConvertToQueryPermission(item, mlist, showAll);
if (mdl == null) continue;
var child = all.Where(c => c.Parentcode == item.Permissioncode);
if (child != null && child.Count() > 0)
mdl.Children = CreatePermissionList(all, item.Permissioncode, mlist, showAll);
result.Add(mdl);
}
return result;
}
/// <summary>
/// 实体转换返回数据对象
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
private QueryPermissionResponse ConvertToQueryPermission(Permission item, List<ManagerToPermission> mlist,bool showAll=true)
{
var one = mlist.FirstOrDefault(t => t.PermissionCode == item.Permissioncode);
QueryPermissionResponse mp = new QueryPermissionResponse();
if (one != null)
{
mp.AllowAdd = true;
mp.AllowDel = true;
mp.AllowEdit = true;
mp.AllowView = true;
}
if (one == null && !showAll) return null;
mp.Id = item.Id;
mp.Permissioncode = item.Permissioncode;
mp.Permissionlabel = item.Permissionlabel;
mp.Permissionurl = item.Permissionurl;
mp.Parentcode = item.Parentcode;
mp.DeleteTag = item.DeleteTag;
mp.CreatorId = item.CreatorId;
mp.CreateTime = item.CreateTime;
mp.UpdateTime = item.UpdateTime;
mp.Sortorder = item.Sortorder;
mp.Icon = item.Icon;
mp.Iconactivate = item.Iconactivate;
mp.Systemid = item.Systemid;
mp.isnew = item.isnew;
return mp;
}
}
}

View File

@@ -0,0 +1,96 @@
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.DDD;
using Hncore.Infrastructure.EF;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Domain;
using Hncore.Pass.Manage.Repository;
using Hncore.Pass.Manage.Request;
using Hncore.Pass.Manage.Response;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Service
{
/// <summary>
/// 管理员业务逻辑类
/// </summary>
///
public class ManagerService : BaseService
{
EfDbContext m_DbContext { get; set; }
/// <summary>
/// 构造函数
/// </summary>
/// <param name="">管理员标签查询对象</param>
public ManagerService(EfDbContext _DbContext,
IHttpContextAccessor hca) : base(hca)
{
m_DbContext = _DbContext;
}
/// <summary>
/// 获取管理员列表
/// </summary>
/// <param name="request">请求对象</param>
/// <returns>响应列表对象</returns>
public async Task<(int total, List<QueryListManagerResponse> list)> Get(QueryListManagerRequest request)
{
var root =m_DbContext.Set<Manager>().GetOne(p=>p.Id==request.OperaterId && p.IsRoot == true);
IQueryable<Manager> managers;
if (null ==root)
{
managers = m_DbContext.Set<Manager>().GetQueryable().Where(m => m.CreatorId == request.OperaterId && m.IsRoot == false);
}else
{
managers = m_DbContext.Set<Manager>().GetQueryable().Where(m => m.TenantId == request.TenantId && m.DeleteTag == 0);
//是否过滤超级管理员
if (request.IsRoot == 1)
managers = managers.Where(m => m.IsRoot == false);
}
var search = managers;
//过滤关键字
if (!string.IsNullOrEmpty(request.KeyWord))
search = search.Where(m => m.LoginCode.Contains(request.KeyWord) || m.RealName.Contains(request.KeyWord) || m.Phone.Contains(request.KeyWord));
int total = await search.CountAsync();//异步查询记录总数
//排序分页
var list = search.OrderByDescending(m => m.UpdateTime).Skip((request.PageIndex-1) * request.PageSize).Take(request.PageSize).ToList();
List<QueryListManagerResponse> result = new List<QueryListManagerResponse>();
foreach (var item in list)
{
QueryListManagerResponse m = new QueryListManagerResponse();
m.Id = item.Id;
m.LoginCode = item.LoginCode;
m.OwnerId = request.TenantId;
m.Phone = item.Phone;
m.Photourl = item.PhotoUrl;
m.RealName = item.RealName;
m.CreateTime = item.CreateTime;
m.UpdateTime = item.UpdateTime;
m.CreatorId = item.CreatorId;
m.UpdatorId = item.UpdatorId;
m.DeleteTag = item.DeleteTag;
m.Wxopenid = item.WxOpenid;
m.roleid = item.RoleId;
result.Add(m);
}
return (total,result);
}
}
}

View File

@@ -0,0 +1,107 @@
using Hncore.Infrastructure.DDD;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Domain;
using Hncore.Pass.Manage.Request;
using Hncore.Pass.Manage.Response;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using Hncore.Infrastructure.Common;
using Hncore.Infrastructure.Serializer;
using Microsoft.VisualStudio.TestPlatform.CoreUtilities.Helpers;
using Hncore.Pass.Manage.Repository;
using Hncore.Infrastructure.EF;
namespace Hncore.Pass.Manage.Service
{
/// <summary>
/// 管理员标签业务逻辑类
/// </summary>
///
public class ManagerTagService : BaseService
{
EfDbContext m_DbContext { get; set; }
/// <summary>
/// 构造函数
/// </summary>
/// <param name="feePayRecordQuery">管理员标签查询对象</param>
public ManagerTagService(EfDbContext _DbContext,
IHttpContextAccessor hca) : base(hca)
{
m_DbContext = _DbContext;
}
/// <summary>
/// 获取管理员标签
/// </summary>
/// <param name="request">请求对象</param>
/// <returns>响应列表对象</returns>
public async Task<(int total, List<ManagerTagResponse> list)> GetTagList(ManagerTagRequest request)
{
Expression<Func<ManagerTag, bool>> exp = c =>(c.OwnerId==request.TenantId && c.DeleteTag == 0 && c.ManagerId == request.ManagerId && c.TagType==0)|| c.TagType==1;
var search = m_DbContext.Set<ManagerTag>().GetQueryable().Where(exp);
if (!EnvironmentVariableHelper.IsAspNetCoreProduction)
{
LogHelper.Debug("获取管理员标签",request.ToJson(true));
}
int total = await search.CountAsync();//异步查询记录总数
var paged = await search.OrderByDescending(c=>c.TagType).ToListAsync();
List<ManagerTagResponse> list = new List<ManagerTagResponse>();
foreach (var item in paged)
{
ManagerTagResponse mtr =new ManagerTagResponse() ;
mtr.Id = item.Id;
mtr.Tag = item.Tag;
mtr.TagType = item.TagType;
mtr.ManagerId = item.ManagerId;
mtr.CreateTime = item.CreateTime;
mtr.UpdateTime = item.UpdateTime;
list.Add(mtr);
}
return (total, list);
}
/// <summary>
/// 获取管理员标签权限信息
/// </summary>
/// <param name="request">请求对象</param>
/// <returns>响应列表对象</returns>
public async Task<(int total, List<ManagerTagToPermissionResponse> list)> GetTagToPerssionList(ManagerTagToPerRequest request)
{
Expression<Func<ManagerTagToPermission, bool>> exp = c => c.ManagerTagId == request.ManagerTagId;
var search = m_DbContext.Set<ManagerTagToPermission>().GetQueryable().Where(exp);
int total = await search.CountAsync();//异步查询记录总数
var paged = await search.OrderByDescending(c => c.Id).ToListAsync();
List<ManagerTagToPermissionResponse> list = new List<ManagerTagToPermissionResponse>();
foreach (var item in paged)
{
ManagerTagToPermissionResponse mp = new ManagerTagToPermissionResponse();
mp.Id = item.Id;
mp.ManagerTagId = item.ManagerTagId;
mp.PermissionCode = item.PermissionCode;
mp.AllowView = item.AllowView;
mp.AllowAdd = item.AllowAdd;
mp.AllowEdit = item.AllowEdit;
mp.AllowDel = item.AllowDel;
mp.CreateTime = item.CreateTime;
mp.UpdateTime = item.UpdateTime;
list.Add(mp);
}
return (total, list);
}
}
}

View File

@@ -0,0 +1,94 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Hncore.Infrastructure.WebApi;
using Hncore.Pass.Manage.Configs;
using Hncore.Pass.Manage.Repository;
using Hncore.Pass.Manage.Util;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace Hncore.Pass.Manage
{
/// <summary>
/// 应用程序启动类(主要完成服务注册和中间件注册构建HTTP请求管道)
/// 应用启动流程:应用启动 -> Startup构造函数 -> ConfigureServices方法 -> Configure方法
/// </summary>
///
public class Startup
{
/// <summary>
/// 配置信息对象
/// </summary>
public IConfiguration Configuration { get; }
/// <summary>
/// 构造函数(第1个被执行的函数)
/// </summary>
/// <param name="env">提供了当前应用程序的运行的宿主环境配置信息象</param>
///
public Startup(IHostingEnvironment env)
{
/*
appsettings.Development.json中配置了开发环境专用配置信息
appsettings.Production.json中配置了生产环境专用配置信息
appsettings.json保存了两个环境均会用到的公共配置信息
此处主要是加载公共配置信息和专用配置信息,例如如果当前为
开发模式会加载appsettings.json和appsettings.Development.json两个文件中的配置信息
生产模式会加载appsettings.json和appsettings.Production.json两个文件中的配置信息
*/
Configuration = env.UseAppsettings();
}
/// <summary>
/// 服务配置相当于Java项目中的spring.xml用来将配置对象添加到容器中管理起来备用(第2个被执行的函数)
/// </summary>
/// <param name="services">服务集合对象(可以理解为内置的依赖注入容器)</param>
/// <returns>构造好的服务提供对象</returns>
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.Configure<AppSettings>(Configuration);//加载appsettiong.xxx.json中的配置信息到AppSettings对象中备用
//添加EF数据库上下文对象
services.AddDbContext<EfDbContext>(c => c.UseMySql(Configuration["MySql"]));
//配置Redis
RedisHelper.Initialization(new CSRedis.CSRedisClient(Configuration["Redis"]));
//HttpClient配置
services.AddHttpClient();
services.MyServicesSpecialUseConfigure();//本Web应用专用配置
//根据应用配置信息对象、编译版本、服务选项对象创建服务提供对象
IServiceProvider result = services.Init(Configuration, CompatibilityVersion.Version_2_2, new ServiceOption
{
//启用全局授权过滤器(由ManageAuthFilter类具体实现)
UseGlobalManageAuthFilter = false
});
return result;
}
/// <summary>
/// 请求管道配置可以将一些中间组件添加到app对象中
/// </summary>
/// <param name="app">用于构建应用程序的请求管道</param>
/// <param name="env">提供了当前应用程序的运行的宿主环境配置信息</param>
/// <param name="loggerFactory">日志工厂</param>
///
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime applicationLifetime)
{
//初始化应用程序构建器启用NLog、统一错误异常处理、跨域请求、MVC等
app.Init(loggerFactory, applicationLifetime);
// app.MySpecialUseConfigure(env, loggerFactory);//本Web应用专用配置
}
}
}

View File

@@ -0,0 +1,91 @@
using Microsoft.Extensions.DependencyInjection;
using Hncore.Pass.Manage.Repository;
using Hncore.Pass.Manage.Service;
using Hncore.Pass.Manage.Filters;
using AutoMapper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Caching.Distributed;
using Hncore.Pass.Manage.Util;
namespace Hncore.Pass.Manage.Util
{
/// <summary>
/// 应用工具类
/// </summary>
///
public static class AppUtil
{
/// <summary>
/// 当前应用的服务专用扩展配置
/// </summary>
/// <param name="services">服务集合(容器对象)</param>
/// <returns>服务集合(容器对象)</returns>
///
public static IServiceCollection MyServicesSpecialUseConfigure(this IServiceCollection services)
{
LoadServicesToContainer(services);//配置服务依赖注入
RegisterGlobalFilters(services);//注册全局过滤器
return services;
}
/// <summary>
/// 当前应用的专用扩展配置
/// </summary>
/// <param name="app">用于构建应用程序的请求管道</param>
/// <param name="env">提供了当前应用程序的运行的宿主环境配置信息</param>
/// <param name="loggerFactory">日志工厂</param>
///
public static void MySpecialUseConfigure(this IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
AutoMapperConfig();//AutoMapper映射配置
}
/// <summary>
/// 将当前项目常用的服务加载到容器中管理起来(该函数会在Startup中的ConfigureServices)
/// </summary>
/// <param name="services">服务集合(容器对象)</param>
private static void LoadServicesToContainer(IServiceCollection services)
{
/**********添加服务相关类**********/
services.AddScoped<ManagerTagService>();//管理员标签服务
services.AddScoped<ManagerService>();//管理员服务
services.AddScoped<ManagerPermissionService>();//管理员权限菜单
}
/// <summary>
/// AutoMapper配置
/// </summary>
///
private static void AutoMapperConfig()
{
Mapper.Initialize(c => {
c.AddProfile<AutoMapperProfile>();//指定映射关系处理类
});
}
/// <summary>
/// 注册全局过滤器
/// </summary>
/// <param name="services">服务集合(容器对象)</param>
private static void RegisterGlobalFilters(IServiceCollection services)
{
//services.AddMvc(c => {
// c.Filters.Add<HttpGlobalExceptionFilter>();//全局异常过滤器
//});
}
}
}

View File

@@ -0,0 +1,27 @@
using Hncore.Pass.Manage.Domain;
using Hncore.Pass.Manage.Request;
using Hncore.Pass.Manage.Response;
using AutoMapper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Hncore.Pass.Manage.Util
{
/// <summary>
/// AutoMapper映射关系处理类
/// </summary>
///
public class AutoMapperProfile : Profile
{
/// <summary>
/// 构造函数,所有映射关联在此完成关联
/// </summary>
///
public AutoMapperProfile()
{
CreateMap<ManagerTag, ManagerTagResponse>();//
}
}
}

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<gcServer enabled="true"/>
</runtime>
</configuration>

View File

@@ -0,0 +1,11 @@
{
"MySql": "Server=47.92.244.89;Database=hualianyun;User=root;Password=qaz123!@#;Convert Zero Datetime=True;TreatTinyAsBoolean=false;port=5000",
"Redis": "47.92.85.90:6379,password=etor0070x01,defaultDatabase=7",
"RabbitMqConfig": {
"HostName": "47.111.18.99",
"Port": 5672,
"UserName": "test",
"Password": "123456",
"VirtualHost": "/"
}
}

View File

@@ -0,0 +1,12 @@
{
"DbConString": "Server=47.92.244.89;Database=property;User=root;Password=qaz123!@#;Convert Zero Datetime=True;TreatTinyAsBoolean=false;port=5000",
"OldDbConString": "Server=47.92.244.89;Database=property;User=root;Password=qaz123!@#;Convert Zero Datetime=True;TreatTinyAsBoolean=false;port=5000",
"Redis": "192.168.1.245:6379,password=123456,defaultDatabase=0,poolsize=1",
"RabbitMqConfig": {
"HostName": "192.168.1.245",
"Port": 5672,
"UserName": "test",
"Password": "123456",
"VirtualHost": "/"
}
}

View File

@@ -0,0 +1,11 @@
{
"DbConString": "Server=47.92.244.89;Database=property;User=root;Password=qaz123!@#;Convert Zero Datetime=True;TreatTinyAsBoolean=false;port=5000",
"Redis": "127.0.0.1:6379,password=123456,defaultDatabase=0",
"RabbitMqConfig": {
"HostName": "172.26.148.123",
"Port": 5672,
"UserName": "psip",
"Password": "6F56A41A83E6D6DEEEEF205E0DDEBAF4",
"VirtualHost": "psip"
}
}

View File

@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}