mirror of
https://github.com/anjoy8/Blog.Core.git
synced 2024-09-20 23:48:27 +08:00
去除dal冗余代码,科学上网管理
This commit is contained in:
parent
5c49c9bff4
commit
6d9a0ede04
|
@ -922,6 +922,76 @@
|
|||
Tibug 博文
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Blog.Core.Model.Models.TrojanCusServers">
|
||||
<summary>
|
||||
users自定义服务器
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Blog.Core.Model.Models.TrojanDetails">
|
||||
<summary>
|
||||
用户流量每月汇总表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Blog.Core.Model.Models.TrojanDetails.id">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Blog.Core.Model.Models.TrojanDetails.userId">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Blog.Core.Model.Models.TrojanDetails.calDate">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Blog.Core.Model.Models.TrojanDetails.download">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Blog.Core.Model.Models.TrojanDetails.upload">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Blog.Core.Model.Models.TrojanDetails.CreateId">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Blog.Core.Model.Models.TrojanDetails.CreateBy">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Blog.Core.Model.Models.TrojanDetails.CreateTime">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Blog.Core.Model.Models.TrojanServers">
|
||||
<summary>
|
||||
Trojan服务器
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Blog.Core.Model.Models.TrojanUrlServers">
|
||||
<summary>
|
||||
users自定义URL服务器
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Blog.Core.Model.Models.TrojanUsers">
|
||||
<summary>
|
||||
Trojan用户
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Blog.Core.Model.Models.TrojanUsers.useList">
|
||||
<summary>
|
||||
历史流量记录
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Blog.Core.Model.Models.UserRole">
|
||||
<summary>
|
||||
用户跟角色关联表
|
||||
|
@ -2347,6 +2417,73 @@
|
|||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Blog.Core.Model.ViewModels.TrojanLimitFlowDto">
|
||||
<summary>
|
||||
限制流量dto
|
||||
作者:胡丁文
|
||||
时间:2020-4-27 16:57:07
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Blog.Core.Model.ViewModels.TrojanLimitFlowDto.users">
|
||||
<summary>
|
||||
用户
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Blog.Core.Model.ViewModels.TrojanLimitFlowDto.quota">
|
||||
<summary>
|
||||
流量(-1为无限,单位为最小单位byte)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Blog.Core.Model.ViewModels.TrojanServerSpliceDto">
|
||||
<summary>
|
||||
Trojan服务器拼接服务器和订阅地址
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Blog.Core.Model.ViewModels.TrojanServerSpliceDto.normalApi">
|
||||
<summary>
|
||||
普通订阅连接
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Blog.Core.Model.ViewModels.TrojanServerSpliceDto.clashApi">
|
||||
<summary>
|
||||
clash订阅连接
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Blog.Core.Model.ViewModels.TrojanServerSpliceDto.clashApiBackup">
|
||||
<summary>
|
||||
备用clash订阅连接
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Blog.Core.Model.ViewModels.TrojanUseDetailDto">
|
||||
<summary>
|
||||
Trojan用户流量统计分组
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Blog.Core.Model.ViewModels.TrojanUseDetailDto.userId">
|
||||
<summary>
|
||||
用户ID
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Blog.Core.Model.ViewModels.TrojanUseDetailDto.moth">
|
||||
<summary>
|
||||
月度
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Blog.Core.Model.ViewModels.TrojanUseDetailDto.up">
|
||||
<summary>
|
||||
上传流量
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Blog.Core.Model.ViewModels.TrojanUseDetailDto.down">
|
||||
<summary>
|
||||
下载流量
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Blog.Core.Model.ViewModels.TrojanUseDetailDto.total">
|
||||
<summary>
|
||||
下载流量
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Blog.Core.Model.ViewModels.WeChatApiDto">
|
||||
<summary>
|
||||
微信接口消息DTO
|
||||
|
|
|
@ -639,6 +639,164 @@
|
|||
<param name="id"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.GetUser(Blog.Core.Model.PaginationModel)">
|
||||
<summary>
|
||||
获取Trojan用户
|
||||
</summary>
|
||||
<param name="pagination"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.GetAllUser(Blog.Core.Model.PaginationModel)">
|
||||
<summary>
|
||||
获取Trojan用户
|
||||
</summary>
|
||||
<param name="pagination"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.GetAllTrojanUser">
|
||||
<summary>
|
||||
获取Trojan用户-下拉列表用
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.AddUser(Blog.Core.Model.Models.TrojanUsers)">
|
||||
<summary>
|
||||
添加Trojan用户
|
||||
</summary>
|
||||
<param name="user"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.UpdateUser(Blog.Core.Model.Models.TrojanUsers)">
|
||||
<summary>
|
||||
更新Trojan用户
|
||||
</summary>
|
||||
<param name="user"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.DelUser(System.Int32[])">
|
||||
<summary>
|
||||
删除用户
|
||||
</summary>
|
||||
<param name="users"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.ResetFlow(System.Int32[])">
|
||||
<summary>
|
||||
重置流量
|
||||
</summary>
|
||||
<param name="users"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.LimitFlow(Blog.Core.Model.ViewModels.TrojanLimitFlowDto)">
|
||||
<summary>
|
||||
限制流量
|
||||
</summary>
|
||||
<param name="limit"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.ResetPass(System.Int32[])">
|
||||
<summary>
|
||||
重置链接密码
|
||||
</summary>
|
||||
<param name="users"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.GetServers">
|
||||
<summary>
|
||||
获取Trojan服务器
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.GetSpliceServers(System.String)">
|
||||
<summary>
|
||||
获取拼接后的Trojan服务器
|
||||
</summary>
|
||||
<param name="id">passwordshow</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.DelServers(System.Int32[])">
|
||||
<summary>
|
||||
删除Trojan服务器
|
||||
</summary>
|
||||
<param name="servers"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.UpdateServers(Blog.Core.Model.Models.TrojanServers)">
|
||||
<summary>
|
||||
更新Trojan服务器
|
||||
</summary>
|
||||
<param name="server"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.AddServers(Blog.Core.Model.Models.TrojanServers)">
|
||||
<summary>
|
||||
添加Trojan服务器
|
||||
</summary>
|
||||
<param name="server"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.GetCusServers">
|
||||
<summary>
|
||||
获取Cus服务器
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.DelCusServers(System.Int32[])">
|
||||
<summary>
|
||||
删除Cus服务器
|
||||
</summary>
|
||||
<param name="servers"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.UpdateCusServers(Blog.Core.Model.Models.TrojanCusServers)">
|
||||
<summary>
|
||||
更新Cus服务器
|
||||
</summary>
|
||||
<param name="server"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.AddCusServers(Blog.Core.Model.Models.TrojanCusServers)">
|
||||
<summary>
|
||||
添加Cus服务器
|
||||
</summary>
|
||||
<param name="server"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.GetUrlServers">
|
||||
<summary>
|
||||
获取Url服务器
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.DelUrlServers(System.Int32[])">
|
||||
<summary>
|
||||
删除Url服务器
|
||||
</summary>
|
||||
<param name="servers"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.UpdateUrlServers(Blog.Core.Model.Models.TrojanUrlServers)">
|
||||
<summary>
|
||||
更新Url服务器
|
||||
</summary>
|
||||
<param name="server"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.AddUrlServers(Blog.Core.Model.Models.TrojanUrlServers)">
|
||||
<summary>
|
||||
添加Url服务器
|
||||
</summary>
|
||||
<param name="server"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Blog.Core.Controllers.TrojanController.RSS(System.String,System.Boolean)">
|
||||
<summary>
|
||||
获取订阅数据
|
||||
</summary>
|
||||
<param name="id">链接密码</param>
|
||||
<param name="isUseBase64">是否使用base64加密</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Blog.Core.Controllers.UserController">
|
||||
<summary>
|
||||
用户管理
|
||||
|
|
455
Blog.Core.Api/Controllers/TrojanController.cs
Normal file
455
Blog.Core.Api/Controllers/TrojanController.cs
Normal file
|
@ -0,0 +1,455 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Blog.Core.Common;
|
||||
using Blog.Core.Common.Extensions;
|
||||
using Blog.Core.Common.Helper;
|
||||
using Blog.Core.Common.HttpContextUser;
|
||||
using Blog.Core.IServices;
|
||||
using Blog.Core.IServices.BASE;
|
||||
using Blog.Core.Model;
|
||||
using Blog.Core.Model.Models;
|
||||
using Blog.Core.Model.ViewModels;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace Blog.Core.Controllers
|
||||
{
|
||||
[Route("api/[controller]/[action]")]
|
||||
[ApiController]
|
||||
[Authorize(Permissions.Name)]
|
||||
public class TrojanController : ControllerBase
|
||||
{
|
||||
private ITrojanUsersServices _trojanUsersServices;
|
||||
public IBaseServices<TrojanServers> _baseServicesServers;
|
||||
public IBaseServices<TrojanDetails> _baseServicesDetails;
|
||||
public IBaseServices<TrojanCusServers> _baseServicesCusServers;
|
||||
public IBaseServices<TrojanUrlServers> _baseServicesUrlServers;
|
||||
private IUser _user;
|
||||
public TrojanController(ITrojanUsersServices trojanUsersServices,IUser user
|
||||
, IBaseServices<TrojanServers> baseServicesServers
|
||||
, IBaseServices<TrojanDetails> baseServicesDetails
|
||||
, IBaseServices<TrojanCusServers> baseServicesCusServers
|
||||
, IBaseServices<TrojanUrlServers> baseServicesUrlServers)
|
||||
{
|
||||
_baseServicesDetails = baseServicesDetails;
|
||||
_baseServicesServers = baseServicesServers;
|
||||
_trojanUsersServices = trojanUsersServices;
|
||||
_baseServicesCusServers = baseServicesCusServers;
|
||||
_baseServicesUrlServers = baseServicesUrlServers;
|
||||
_user = user;
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取Trojan用户
|
||||
/// </summary>
|
||||
/// <param name="pagination"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public async Task<MessageModel<PageModel<TrojanUsers>>> GetUser([FromQuery]PaginationModel pagination)
|
||||
{
|
||||
return await GetAllUser(pagination);
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取Trojan用户
|
||||
/// </summary>
|
||||
/// <param name="pagination"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public async Task<MessageModel<PageModel<TrojanUsers>>> GetAllUser([FromQuery]PaginationModel pagination)
|
||||
{
|
||||
var data = await _trojanUsersServices.QueryPage(pagination);
|
||||
if (data.data.Count > 0)
|
||||
{
|
||||
var ids = data.data.Select(t => t.id).ToList();
|
||||
var where = LinqHelper.True<TrojanDetails>();
|
||||
where = where.And(t => ids.Contains(t.userId)).And(t => t.calDate < DateTime.Now).And(t => t.calDate > DateTime.Now.AddMonths(-12));
|
||||
var userDetails = await _baseServicesDetails.Query(where);
|
||||
foreach (var trojanUser in data.data)
|
||||
{
|
||||
|
||||
var ls = from t in userDetails
|
||||
where t.userId == trojanUser.id
|
||||
group t by new { moth = t.calDate.ToString("yyyy-MM"), id = t.userId } into g
|
||||
orderby g.Key.moth descending
|
||||
select new TrojanUseDetailDto { userId = g.Key.id, moth = g.Key.moth, up = g.Sum(t => Convert.ToDecimal(t.upload)), down = g.Sum(t => Convert.ToDecimal(t.download)) };
|
||||
var lsData = ls.ToList();
|
||||
trojanUser.useList = lsData;
|
||||
}
|
||||
}
|
||||
return MessageModel<PageModel<TrojanUsers>>.Success("获取成功", data);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取Trojan用户-下拉列表用
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public async Task<MessageModel<DataTable>> GetAllTrojanUser()
|
||||
{
|
||||
var data = await _trojanUsersServices.QueryTable("select id,username from users");
|
||||
return MessageModel<DataTable>.Success("获取成功", data);
|
||||
}
|
||||
/// <summary>
|
||||
/// 添加Trojan用户
|
||||
/// </summary>
|
||||
/// <param name="user"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<MessageModel<object>> AddUser([FromBody]TrojanUsers user)
|
||||
{
|
||||
var find = await _trojanUsersServices.Query(t => t.username == user.username);
|
||||
if(find!=null && find.Count>0) return MessageModel<object>.Fail("用户名已存在");
|
||||
var pass = StringHelper.GetGUID();
|
||||
var passEcrypt = ShaHelper.Sha224(pass);
|
||||
//user.quota = 0;
|
||||
user.upload = 0;
|
||||
user.download = 0;
|
||||
user.password = passEcrypt;
|
||||
user.passwordshow = pass;
|
||||
var data = await _trojanUsersServices.Add(user);
|
||||
return MessageModel<object>.Success("添加成功", data);
|
||||
}
|
||||
/// <summary>
|
||||
/// 更新Trojan用户
|
||||
/// </summary>
|
||||
/// <param name="user"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
public async Task<MessageModel<object>> UpdateUser([FromBody]TrojanUsers user)
|
||||
{
|
||||
var find = await _trojanUsersServices.QueryById(user.id);
|
||||
if (find == null) return MessageModel<object>.Fail("用户名不存在");
|
||||
find.username = user.username;
|
||||
var data = await _trojanUsersServices.Update(find, new List<string> { "username" });
|
||||
return MessageModel<object>.Success("更新成功", data);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除用户
|
||||
/// </summary>
|
||||
/// <param name="users"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
public async Task<MessageModel<string>> DelUser([FromBody]int[] users)
|
||||
{
|
||||
var data = await _trojanUsersServices.Query(t => users.Contains(t.id));
|
||||
var list = data.Select(t => t.id.ToString()).ToArray();
|
||||
await _trojanUsersServices.DeleteByIds(list);
|
||||
return MessageModel<string>.Success("删除成功");
|
||||
}
|
||||
/// <summary>
|
||||
/// 重置流量
|
||||
/// </summary>
|
||||
/// <param name="users"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
public async Task<MessageModel<string>> ResetFlow([FromBody]int[] users)
|
||||
{
|
||||
var data = await _trojanUsersServices.Query(t => users.Contains(t.id));
|
||||
foreach (var item in data)
|
||||
{
|
||||
item.upload = 0;
|
||||
item.download = 0;
|
||||
await _trojanUsersServices.Update(item, new List<string> { "upload", "download" });
|
||||
}
|
||||
return MessageModel<string>.Success("重置流量成功");
|
||||
}
|
||||
/// <summary>
|
||||
/// 限制流量
|
||||
/// </summary>
|
||||
/// <param name="limit"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
public async Task<MessageModel<string>> LimitFlow([FromBody] TrojanLimitFlowDto limit)
|
||||
{
|
||||
var data = await _trojanUsersServices.Query(t => limit.users.Contains(t.id));
|
||||
foreach (var item in data)
|
||||
{
|
||||
item.quota = limit.quota;
|
||||
await _trojanUsersServices.Update(item, new List<string> { "quota" });
|
||||
}
|
||||
return MessageModel<string>.Success("限制流量成功");
|
||||
}
|
||||
/// <summary>
|
||||
/// 重置链接密码
|
||||
/// </summary>
|
||||
/// <param name="users"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
public async Task<MessageModel<string>> ResetPass([FromBody]int[] users)
|
||||
{
|
||||
var data = await _trojanUsersServices.Query(t => users.Contains(t.id));
|
||||
var pass = StringHelper.GetGUID();
|
||||
var passEcrypt = ShaHelper.Sha224(pass);
|
||||
foreach (var item in data)
|
||||
{
|
||||
item.password = passEcrypt;
|
||||
item.passwordshow = pass;
|
||||
await _trojanUsersServices.Update(item, new List<string> { "password" , "passwordshow" });
|
||||
}
|
||||
return MessageModel<string>.Success("重置链接密码成功");
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取Trojan服务器
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public async Task<MessageModel<List<TrojanServers>>> GetServers()
|
||||
{
|
||||
var data = await _baseServicesServers.Query();
|
||||
data = data.OrderBy(t => t.servername).ToList();
|
||||
return MessageModel<List<TrojanServers>>.Success("获取成功", data);
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取拼接后的Trojan服务器
|
||||
/// </summary>
|
||||
/// <param name="id">passwordshow</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public async Task<MessageModel<TrojanServerSpliceDto>> GetSpliceServers(string id)
|
||||
{
|
||||
var data = await _baseServicesServers.Query();
|
||||
data = data.OrderBy(t => t.servername).ToList();
|
||||
var res = new TrojanServerSpliceDto();
|
||||
res.normalApi = Appsettings.app(new string[] { "trojan", "normalApi" }).ObjToString();
|
||||
res.clashApi = Appsettings.app(new string[] { "trojan", "clashApi" }).ObjToString();
|
||||
res.clashApiBackup = Appsettings.app(new string[] { "trojan", "clashApiBackup" }).ObjToString();
|
||||
foreach (var item in data)
|
||||
{
|
||||
var serverSplice = GetSplice(item, id);
|
||||
res.list.Add(new TrojanServerDto { name = item.servername, value = serverSplice });
|
||||
}
|
||||
return MessageModel<TrojanServerSpliceDto>.Success("获取成功", res); ;
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
/// 删除Trojan服务器
|
||||
/// </summary>
|
||||
/// <param name="servers"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
public async Task<MessageModel<List<TrojanServers>>> DelServers([FromBody]int[] servers)
|
||||
{
|
||||
var data = await _baseServicesServers.DeleteByIds(servers.Select(t=>t.ToString()).ToArray());
|
||||
if (data)
|
||||
return MessageModel<List<TrojanServers>>.Success("删除成功");
|
||||
else
|
||||
return MessageModel<List<TrojanServers>>.Fail("删除失败");
|
||||
}
|
||||
/// <summary>
|
||||
/// 更新Trojan服务器
|
||||
/// </summary>
|
||||
/// <param name="server"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
public async Task<MessageModel<List<TrojanServers>>> UpdateServers(TrojanServers server)
|
||||
{
|
||||
var data = await _baseServicesServers.Update(server);
|
||||
return MessageModel<List<TrojanServers>>.Success("更新成功");
|
||||
}
|
||||
/// <summary>
|
||||
/// 添加Trojan服务器
|
||||
/// </summary>
|
||||
/// <param name="server"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<MessageModel<List<TrojanServers>>> AddServers(TrojanServers server)
|
||||
{
|
||||
var data = await _baseServicesServers.Add(server);
|
||||
return MessageModel<List<TrojanServers>>.Success("添加成功");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取Cus服务器
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public async Task<MessageModel<List<TrojanCusServers>>> GetCusServers()
|
||||
{
|
||||
var data = await _baseServicesCusServers.Query();
|
||||
data = data.OrderBy(t => t.servername).ToList();
|
||||
return MessageModel<List<TrojanCusServers>>.Success("获取成功", data);
|
||||
}
|
||||
/// <summary>
|
||||
/// 删除Cus服务器
|
||||
/// </summary>
|
||||
/// <param name="servers"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
public async Task<MessageModel<List<TrojanCusServers>>> DelCusServers([FromBody] int[] servers)
|
||||
{
|
||||
var data = await _baseServicesCusServers.DeleteByIds(servers.Select(t => t.ToString()).ToArray());
|
||||
if (data)
|
||||
return MessageModel<List<TrojanCusServers>>.Success("删除成功");
|
||||
else
|
||||
return MessageModel<List<TrojanCusServers>>.Fail("删除失败");
|
||||
}
|
||||
/// <summary>
|
||||
/// 更新Cus服务器
|
||||
/// </summary>
|
||||
/// <param name="server"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
public async Task<MessageModel<List<TrojanCusServers>>> UpdateCusServers(TrojanCusServers server)
|
||||
{
|
||||
var data = await _baseServicesCusServers.Update(server);
|
||||
return MessageModel<List<TrojanCusServers>>.Success("更新成功");
|
||||
}
|
||||
/// <summary>
|
||||
/// 添加Cus服务器
|
||||
/// </summary>
|
||||
/// <param name="server"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<MessageModel<List<TrojanCusServers>>> AddCusServers(TrojanCusServers server)
|
||||
{
|
||||
var data = await _baseServicesCusServers.Add(server);
|
||||
return MessageModel<List<TrojanCusServers>>.Success("添加成功");
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取Url服务器
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public async Task<MessageModel<List<TrojanUrlServers>>> GetUrlServers()
|
||||
{
|
||||
var data = await _baseServicesUrlServers.Query();
|
||||
data = data.OrderBy(t => t.servername).ToList();
|
||||
return MessageModel<List<TrojanUrlServers>>.Success("获取成功", data);
|
||||
}
|
||||
/// <summary>
|
||||
/// 删除Url服务器
|
||||
/// </summary>
|
||||
/// <param name="servers"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
public async Task<MessageModel<List<TrojanUrlServers>>> DelUrlServers([FromBody] int[] servers)
|
||||
{
|
||||
var data = await _baseServicesUrlServers.DeleteByIds(servers.Select(t => t.ToString()).ToArray());
|
||||
if (data)
|
||||
return MessageModel<List<TrojanUrlServers>>.Success("删除成功");
|
||||
else
|
||||
return MessageModel<List<TrojanUrlServers>>.Fail("删除失败");
|
||||
}
|
||||
/// <summary>
|
||||
/// 更新Url服务器
|
||||
/// </summary>
|
||||
/// <param name="server"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
public async Task<MessageModel<List<TrojanUrlServers>>> UpdateUrlServers(TrojanUrlServers server)
|
||||
{
|
||||
var data = await _baseServicesUrlServers.Update(server);
|
||||
return MessageModel<List<TrojanUrlServers>>.Success("更新成功");
|
||||
}
|
||||
/// <summary>
|
||||
/// 添加Url服务器
|
||||
/// </summary>
|
||||
/// <param name="server"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<MessageModel<List<TrojanUrlServers>>> AddUrlServers(TrojanUrlServers server)
|
||||
{
|
||||
var data = await _baseServicesUrlServers.Add(server);
|
||||
return MessageModel<List<TrojanUrlServers>>.Success("添加成功");
|
||||
}
|
||||
private string GetSplice(TrojanServers item,string passwordshow)
|
||||
{
|
||||
if ("0".Equals(item.servertype))
|
||||
return $"trojan://{passwordshow}@{item.serveraddress}:{item.serverport}?allowinsecure=0&tfo=0&peer={(string.IsNullOrEmpty(item.serverpeer) ? item.serverpeer : item.serveraddress)}#{item.servername}";
|
||||
else if ("1".Equals(item.servertype))
|
||||
return $"trojan://{passwordshow}@{item.serveraddress}:{item.serverport}?wspath={item.serverpath}&ws=1&peer={(string.IsNullOrEmpty(item.serverpeer) ? item.serverpeer : item.serveraddress)}#{item.servername}";
|
||||
else
|
||||
return $"servertype:({item.servertype})错误";
|
||||
}
|
||||
private List<string> GetSplice(List<TrojanServers> items, string passwordshow)
|
||||
{
|
||||
List<string> ls = new List<string>();
|
||||
foreach (var item in items)
|
||||
{
|
||||
ls.Add(GetSplice(item, passwordshow));
|
||||
}
|
||||
return ls;
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取订阅数据
|
||||
/// </summary>
|
||||
/// <param name="id">链接密码</param>
|
||||
/// <param name="isUseBase64">是否使用base64加密</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
[AllowAnonymous]
|
||||
public async Task<string> RSS(string id,bool isUseBase64=true)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
try
|
||||
{
|
||||
var user = (await _trojanUsersServices.Query(t => t.passwordshow == id)).FirstOrDefault();
|
||||
if (user == null) throw new Exception("用户不存在");
|
||||
var data = await _baseServicesServers.Query(t => (t.userid == user.id || t.userid <= 0) && t.serverenable);
|
||||
if (data != null)
|
||||
{
|
||||
data = data.OrderBy(t => t.servername).ToList();
|
||||
foreach (var item in data)
|
||||
{
|
||||
sb.AppendLine(GetSplice(item, user.passwordshow));
|
||||
}
|
||||
}
|
||||
var cusData = await _baseServicesCusServers.Query(t=> (t.userid == user.id || t.userid <=0) && t.serverenable);
|
||||
if (cusData != null)
|
||||
{
|
||||
cusData = cusData.OrderBy(t => t.servername).ToList();
|
||||
foreach (var item in cusData)
|
||||
{
|
||||
sb.AppendLine(item.serveraddress);
|
||||
}
|
||||
}
|
||||
var urlData = await _baseServicesUrlServers.Query(t => (t.userid == user.id || t.userid <= 0) && t.serverenable);
|
||||
if (urlData != null)
|
||||
{
|
||||
urlData = urlData.OrderBy(t => t.servername).ToList();
|
||||
foreach (var item in urlData)
|
||||
{
|
||||
try
|
||||
{
|
||||
var urlStrObj = await HttpHelper.GetAsync(item.serveraddress);
|
||||
var lines = "";
|
||||
try
|
||||
{
|
||||
lines = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(urlStrObj));
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
lines = urlStrObj;
|
||||
}
|
||||
finally
|
||||
{
|
||||
sb.AppendLine(lines);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
sb.AppendLine($"trojan://xxxxxx@xxxxxx.xx:443?allowinsecure=0&tfo=0#{ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
sb.AppendLine($"trojan://xxxxxx@xxxxxx.xx:443?allowinsecure=0&tfo=0#{ex.Message}");
|
||||
}
|
||||
if (isUseBase64)
|
||||
{
|
||||
return Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(sb.ToString()));
|
||||
}
|
||||
else{
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -82,7 +82,7 @@
|
|||
// *** 多库操作,把 MutiDBEnabled 设为true,其他的从库Enabled也为true **;
|
||||
// 具体配置看视频:https://www.bilibili.com/video/BV1BJ411B7mn?p=6
|
||||
|
||||
"MainDB": "WMBLOG_SQLITE", //当前项目的主库,所对应的连接字符串的Enabled必须为true
|
||||
"MainDB": "WMBLOG_MYSQL_2", //当前项目的主库,所对应的连接字符串的Enabled必须为true
|
||||
"MutiDBEnabled": false, //是否开启多库模式
|
||||
"CQRSEnabled": false, //是否开启读写分离模式,必须是单库模式,且数据库类型一致,比如都是SqlServer
|
||||
"DBS": [
|
||||
|
@ -131,7 +131,7 @@
|
|||
"DBType": 0,
|
||||
"Enabled": true,
|
||||
"HitRate": 20,
|
||||
"Connection": "server=.;Database=blogcore001;Uid=root;Pwd=123456;Port=3096;Allow User Variables=True;"
|
||||
"Connection": "server=localhost;Database=blogcore001;Uid=root;Pwd=root;Port=3306;Allow User Variables=True;"
|
||||
},
|
||||
{
|
||||
"ConnId": "WMBLOG_ORACLE",
|
||||
|
@ -171,7 +171,7 @@
|
|||
"EnableAllIPs": false, //当为true时,开放所有IP均可访问。
|
||||
// 支持多个域名端口,注意端口号后不要带/斜杆:比如localhost:8000/,是错的
|
||||
// 注意,http://127.0.0.1:1818 和 http://localhost:1818 是不一样的
|
||||
"IPs": "http://127.0.0.1:2364,http://localhost:2364"
|
||||
"IPs": "http://127.0.0.1:2364,http://localhost:2364,http://127.0.0.1:6688,http://localhost:6688"
|
||||
},
|
||||
"AppConfigAlert": {
|
||||
"Enabled": true
|
||||
|
@ -291,5 +291,10 @@
|
|||
"FiedValue": "Blog.Core.Api"
|
||||
}
|
||||
]
|
||||
},
|
||||
"trojan": {//科学上网订阅
|
||||
"normalApi": "http://localhost:9291/api/Trojan/RSS?id=",
|
||||
"clashApi": "https://your-sub-service/sub?target=clash&insert=false&url=",
|
||||
"clashApiBackup": "https://pub-api-1.bianyuan.xyz/sub?target=clash&insert=false&url="
|
||||
}
|
||||
}
|
||||
|
|
387
Blog.Core.Common/Extensions/Extention.Expression.cs
Normal file
387
Blog.Core.Common/Extensions/Extention.Expression.cs
Normal file
|
@ -0,0 +1,387 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Reflection;
|
||||
|
||||
namespace Blog.Core.Common.Extensions
|
||||
{
|
||||
public static partial class Extention
|
||||
{
|
||||
#region 拓展BuildExtendSelectExpre方法
|
||||
|
||||
/// <summary>
|
||||
/// 组合继承属性选择表达式树,无拓展参数
|
||||
/// TResult将继承TBase的所有属性
|
||||
/// </summary>
|
||||
/// <typeparam name="TBase">原数据类型</typeparam>
|
||||
/// <typeparam name="TResult">返回类型</typeparam>
|
||||
/// <param name="expression">拓展表达式</param>
|
||||
/// <returns></returns>
|
||||
public static Expression<Func<TBase, TResult>> BuildExtendSelectExpre<TBase, TResult>(this Expression<Func<TBase, TResult>> expression) where TResult : TBase
|
||||
{
|
||||
return GetExtendSelectExpre<TBase, TResult, Func<TBase, TResult>>(expression);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 组合继承属性选择表达式树,1个拓展参数
|
||||
/// TResult将继承TBase的所有属性
|
||||
/// </summary>
|
||||
/// <typeparam name="TBase">原数据类型</typeparam>
|
||||
/// <typeparam name="T1">拓展类型1</typeparam>
|
||||
/// <typeparam name="TResult">返回类型</typeparam>
|
||||
/// <param name="expression">拓展表达式</param>
|
||||
/// <returns></returns>
|
||||
public static Expression<Func<TBase, T1, TResult>> BuildExtendSelectExpre<TBase, T1, TResult>(this Expression<Func<TBase, T1, TResult>> expression) where TResult : TBase
|
||||
{
|
||||
return GetExtendSelectExpre<TBase, TResult, Func<TBase, T1, TResult>>(expression);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 组合继承属性选择表达式树,2个拓展参数
|
||||
/// TResult将继承TBase的所有属性
|
||||
/// </summary>
|
||||
/// <typeparam name="TBase">原数据类型</typeparam>
|
||||
/// <typeparam name="T1">拓展类型1</typeparam>
|
||||
/// <typeparam name="T2">拓展类型2</typeparam>
|
||||
/// <typeparam name="TResult">返回类型</typeparam>
|
||||
/// <param name="expression">拓展表达式</param>
|
||||
/// <returns></returns>
|
||||
public static Expression<Func<TBase, T1, T2, TResult>> BuildExtendSelectExpre<TBase, T1, T2, TResult>(this Expression<Func<TBase, T1, T2, TResult>> expression) where TResult : TBase
|
||||
{
|
||||
return GetExtendSelectExpre<TBase, TResult, Func<TBase, T1, T2, TResult>>(expression);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 组合继承属性选择表达式树,3个拓展参数
|
||||
/// TResult将继承TBase的所有属性
|
||||
/// </summary>
|
||||
/// <typeparam name="TBase">原数据类型</typeparam>
|
||||
/// <typeparam name="T1">拓展类型1</typeparam>
|
||||
/// <typeparam name="T2">拓展类型2</typeparam>
|
||||
/// <typeparam name="T3">拓展类型3</typeparam>
|
||||
/// <typeparam name="TResult">返回类型</typeparam>
|
||||
/// <param name="expression">拓展表达式</param>
|
||||
/// <returns></returns>
|
||||
public static Expression<Func<TBase, T1, T2, T3, TResult>> BuildExtendSelectExpre<TBase, T1, T2, T3, TResult>(this Expression<Func<TBase, T1, T2, T3, TResult>> expression) where TResult : TBase
|
||||
{
|
||||
return GetExtendSelectExpre<TBase, TResult, Func<TBase, T1, T2, T3, TResult>>(expression);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 组合继承属性选择表达式树,4个拓展参数
|
||||
/// TResult将继承TBase的所有属性
|
||||
/// </summary>
|
||||
/// <typeparam name="TBase">原数据类型</typeparam>
|
||||
/// <typeparam name="T1">拓展类型1</typeparam>
|
||||
/// <typeparam name="T2">拓展类型2</typeparam>
|
||||
/// <typeparam name="T3">拓展类型3</typeparam>
|
||||
/// <typeparam name="T4">拓展类型4</typeparam>
|
||||
/// <typeparam name="TResult">返回类型</typeparam>
|
||||
/// <param name="expression">拓展表达式</param>
|
||||
/// <returns></returns>
|
||||
public static Expression<Func<TBase, T1, T2, T3, T4, TResult>> BuildExtendSelectExpre<TBase, T1, T2, T3, T4, TResult>(this Expression<Func<TBase, T1, T2, T3, T4, TResult>> expression) where TResult : TBase
|
||||
{
|
||||
return GetExtendSelectExpre<TBase, TResult, Func<TBase, T1, T2, T3, T4, TResult>>(expression);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 组合继承属性选择表达式树,5个拓展参数
|
||||
/// TResult将继承TBase的所有属性
|
||||
/// </summary>
|
||||
/// <typeparam name="TBase">原数据类型</typeparam>
|
||||
/// <typeparam name="T1">拓展类型1</typeparam>
|
||||
/// <typeparam name="T2">拓展类型2</typeparam>
|
||||
/// <typeparam name="T3">拓展类型3</typeparam>
|
||||
/// <typeparam name="T4">拓展类型4</typeparam>
|
||||
/// <typeparam name="T5">拓展类型5</typeparam>
|
||||
/// <typeparam name="TResult">返回类型</typeparam>
|
||||
/// <param name="expression">拓展表达式</param>
|
||||
/// <returns></returns>
|
||||
public static Expression<Func<TBase, T1, T2, T3, T4, T5, TResult>> BuildExtendSelectExpre<TBase, T1, T2, T3, T4, T5, TResult>(this Expression<Func<TBase, T1, T2, T3, T4, T5, TResult>> expression) where TResult : TBase
|
||||
{
|
||||
return GetExtendSelectExpre<TBase, TResult, Func<TBase, T1, T2, T3, T4, T5, TResult>>(expression);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 组合继承属性选择表达式树,6个拓展参数
|
||||
/// TResult将继承TBase的所有属性
|
||||
/// </summary>
|
||||
/// <typeparam name="TBase">原数据类型</typeparam>
|
||||
/// <typeparam name="T1">拓展类型1</typeparam>
|
||||
/// <typeparam name="T2">拓展类型2</typeparam>
|
||||
/// <typeparam name="T3">拓展类型3</typeparam>
|
||||
/// <typeparam name="T4">拓展类型4</typeparam>
|
||||
/// <typeparam name="T5">拓展类型5</typeparam>
|
||||
/// <typeparam name="T6">拓展类型6</typeparam>
|
||||
/// <typeparam name="TResult">返回类型</typeparam>
|
||||
/// <param name="expression">拓展表达式</param>
|
||||
/// <returns></returns>
|
||||
public static Expression<Func<TBase, T1, T2, T3, T4, T5, T6, TResult>> BuildExtendSelectExpre<TBase, T1, T2, T3, T4, T5, T6, TResult>(this Expression<Func<TBase, T1, T2, T3, T4, T5, T6, TResult>> expression) where TResult : TBase
|
||||
{
|
||||
return GetExtendSelectExpre<TBase, TResult, Func<TBase, T1, T2, T3, T4, T5, T6, TResult>>(expression);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 组合继承属性选择表达式树,7个拓展参数
|
||||
/// TResult将继承TBase的所有属性
|
||||
/// </summary>
|
||||
/// <typeparam name="TBase">原数据类型</typeparam>
|
||||
/// <typeparam name="T1">拓展类型1</typeparam>
|
||||
/// <typeparam name="T2">拓展类型2</typeparam>
|
||||
/// <typeparam name="T3">拓展类型3</typeparam>
|
||||
/// <typeparam name="T4">拓展类型4</typeparam>
|
||||
/// <typeparam name="T5">拓展类型5</typeparam>
|
||||
/// <typeparam name="T6">拓展类型6</typeparam>
|
||||
/// <typeparam name="T7">拓展类型7</typeparam>
|
||||
/// <typeparam name="TResult">返回类型</typeparam>
|
||||
/// <param name="expression">拓展表达式</param>
|
||||
/// <returns></returns>
|
||||
public static Expression<Func<TBase, T1, T2, T3, T4, T5, T6, T7, TResult>> BuildExtendSelectExpre<TBase, T1, T2, T3, T4, T5, T6, T7, TResult>(this Expression<Func<TBase, T1, T2, T3, T4, T5, T6, T7, TResult>> expression) where TResult : TBase
|
||||
{
|
||||
return GetExtendSelectExpre<TBase, TResult, Func<TBase, T1, T2, T3, T4, T5, T6, T7, TResult>>(expression);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 组合继承属性选择表达式树,8个拓展参数
|
||||
/// TResult将继承TBase的所有属性
|
||||
/// </summary>
|
||||
/// <typeparam name="TBase">原数据类型</typeparam>
|
||||
/// <typeparam name="T1">拓展类型1</typeparam>
|
||||
/// <typeparam name="T2">拓展类型2</typeparam>
|
||||
/// <typeparam name="T3">拓展类型3</typeparam>
|
||||
/// <typeparam name="T4">拓展类型4</typeparam>
|
||||
/// <typeparam name="T5">拓展类型5</typeparam>
|
||||
/// <typeparam name="T6">拓展类型6</typeparam>
|
||||
/// <typeparam name="T7">拓展类型7</typeparam>
|
||||
/// <typeparam name="T8">拓展类型8</typeparam>
|
||||
/// <typeparam name="TResult">返回类型</typeparam>
|
||||
/// <param name="expression">拓展表达式</param>
|
||||
/// <returns></returns>
|
||||
public static Expression<Func<TBase, T1, T2, T3, T4, T5, T6, T7, T8, TResult>> BuildExtendSelectExpre<TBase, T1, T2, T3, T4, T5, T6, T7, T8, TResult>(this Expression<Func<TBase, T1, T2, T3, T4, T5, T6, T7, T8, TResult>> expression) where TResult : TBase
|
||||
{
|
||||
return GetExtendSelectExpre<TBase, TResult, Func<TBase, T1, T2, T3, T4, T5, T6, T7, T8, TResult>>(expression);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 组合继承属性选择表达式树,9个拓展参数
|
||||
/// TResult将继承TBase的所有属性
|
||||
/// </summary>
|
||||
/// <typeparam name="TBase">原数据类型</typeparam>
|
||||
/// <typeparam name="T1">拓展类型1</typeparam>
|
||||
/// <typeparam name="T2">拓展类型2</typeparam>
|
||||
/// <typeparam name="T3">拓展类型3</typeparam>
|
||||
/// <typeparam name="T4">拓展类型4</typeparam>
|
||||
/// <typeparam name="T5">拓展类型5</typeparam>
|
||||
/// <typeparam name="T6">拓展类型6</typeparam>
|
||||
/// <typeparam name="T7">拓展类型7</typeparam>
|
||||
/// <typeparam name="T8">拓展类型8</typeparam>
|
||||
/// <typeparam name="T9">拓展类型9</typeparam>
|
||||
/// <typeparam name="TResult">返回类型</typeparam>
|
||||
/// <param name="expression">拓展表达式</param>
|
||||
/// <returns></returns>
|
||||
public static Expression<Func<TBase, T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>> BuildExtendSelectExpre<TBase, T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>(this Expression<Func<TBase, T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>> expression) where TResult : TBase
|
||||
{
|
||||
return GetExtendSelectExpre<TBase, TResult, Func<TBase, T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>>(expression);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 拓展And和Or方法
|
||||
|
||||
/// <summary>
|
||||
/// 连接表达式与运算
|
||||
/// </summary>
|
||||
/// <typeparam name="T">参数</typeparam>
|
||||
/// <param name="one">原表达式</param>
|
||||
/// <param name="another">新的表达式</param>
|
||||
/// <returns></returns>
|
||||
public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> one, Expression<Func<T, bool>> another)
|
||||
{
|
||||
//创建新参数
|
||||
var newParameter = Expression.Parameter(typeof(T), "parameter");
|
||||
|
||||
var parameterReplacer = new ParameterReplaceVisitor(newParameter);
|
||||
var left = parameterReplacer.Visit(one.Body);
|
||||
var right = parameterReplacer.Visit(another.Body);
|
||||
var body = Expression.And(left, right);
|
||||
|
||||
return Expression.Lambda<Func<T, bool>>(body, newParameter);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 连接表达式或运算
|
||||
/// </summary>
|
||||
/// <typeparam name="T">参数</typeparam>
|
||||
/// <param name="one">原表达式</param>
|
||||
/// <param name="another">新表达式</param>
|
||||
/// <returns></returns>
|
||||
public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> one, Expression<Func<T, bool>> another)
|
||||
{
|
||||
//创建新参数
|
||||
var newParameter = Expression.Parameter(typeof(T), "parameter");
|
||||
|
||||
var parameterReplacer = new ParameterReplaceVisitor(newParameter);
|
||||
var left = parameterReplacer.Visit(one.Body);
|
||||
var right = parameterReplacer.Visit(another.Body);
|
||||
var body = Expression.Or(left, right);
|
||||
|
||||
return Expression.Lambda<Func<T, bool>>(body, newParameter);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 拓展Expression的Invoke方法
|
||||
|
||||
public static TResult Invoke<TResult>(this Expression<Func<TResult>> expression)
|
||||
{
|
||||
return expression.Compile().Invoke();
|
||||
}
|
||||
|
||||
public static TResult Invoke<T1, TResult>(this Expression<Func<T1, TResult>> expression, T1 arg1)
|
||||
{
|
||||
return expression.Compile().Invoke(arg1);
|
||||
}
|
||||
|
||||
public static TResult Invoke<T1, T2, TResult>(this Expression<Func<T1, T2, TResult>> expression, T1 arg1, T2 arg2)
|
||||
{
|
||||
return expression.Compile().Invoke(arg1, arg2);
|
||||
}
|
||||
|
||||
public static TResult Invoke<T1, T2, T3, TResult>(this Expression<Func<T1, T2, T3, TResult>> expression, T1 arg1, T2 arg2, T3 arg3)
|
||||
{
|
||||
return expression.Compile().Invoke(arg1, arg2, arg3);
|
||||
}
|
||||
|
||||
public static TResult Invoke<T1, T2, T3, T4, TResult>(this Expression<Func<T1, T2, T3, T4, TResult>> expression, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
|
||||
{
|
||||
return expression.Compile().Invoke(arg1, arg2, arg3, arg4);
|
||||
}
|
||||
|
||||
public static TResult Invoke<T1, T2, T3, T4, T5, TResult>(this Expression<Func<T1, T2, T3, T4, T5, TResult>> expression, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)
|
||||
{
|
||||
return expression.Compile().Invoke(arg1, arg2, arg3, arg4, arg5);
|
||||
}
|
||||
|
||||
public static TResult Invoke<T1, T2, T3, T4, T5, T6, TResult>(this Expression<Func<T1, T2, T3, T4, T5, T6, TResult>> expression, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)
|
||||
{
|
||||
return expression.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6);
|
||||
}
|
||||
|
||||
public static TResult Invoke<T1, T2, T3, T4, T5, T6, T7, TResult>(this Expression<Func<T1, T2, T3, T4, T5, T6, T7, TResult>> expression, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7)
|
||||
{
|
||||
return expression.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7);
|
||||
}
|
||||
|
||||
public static TResult Invoke<T1, T2, T3, T4, T5, T6, T7, T8, TResult>(this Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult>> expression, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8)
|
||||
{
|
||||
return expression.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
|
||||
}
|
||||
|
||||
public static TResult Invoke<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>(this Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>> expression, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9)
|
||||
{
|
||||
return expression.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
|
||||
}
|
||||
|
||||
public static TResult Invoke<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>(this Expression<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>> expression, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10)
|
||||
{
|
||||
return expression.Compile().Invoke(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// 获取表达式中的固定值
|
||||
/// </summary>
|
||||
/// <param name="expression">表达式</param>
|
||||
/// <returns></returns>
|
||||
public static object GetConstantValue(this Expression expression)
|
||||
{
|
||||
var visitor = new GetConstantValueVisitor();
|
||||
visitor.Visit(expression);
|
||||
return visitor.ConstantValue;
|
||||
}
|
||||
|
||||
public static object GetMemberValue(this Expression expression)
|
||||
{
|
||||
var visitor = new GetMemberValueVisitor();
|
||||
visitor.Visit(expression);
|
||||
return visitor.Value;
|
||||
}
|
||||
|
||||
#region 私有成员
|
||||
|
||||
private static Expression<TDelegate> GetExtendSelectExpre<TBase, TResult, TDelegate>(Expression<TDelegate> expression)
|
||||
{
|
||||
NewExpression newBody = Expression.New(typeof(TResult));
|
||||
MemberInitExpression oldExpression = (MemberInitExpression)expression.Body;
|
||||
|
||||
ParameterExpression[] oldParamters = expression.Parameters.ToArray();
|
||||
List<string> existsProperties = new List<string>();
|
||||
foreach (var aBinding in oldExpression.Bindings)
|
||||
{
|
||||
existsProperties.Add(aBinding.Member.Name);
|
||||
}
|
||||
|
||||
List<MemberBinding> newBindings = new List<MemberBinding>();
|
||||
|
||||
var ls = typeof(TResult).GetProperties().Where(x => !existsProperties.Contains(x.Name));
|
||||
foreach (var aProperty in ls)
|
||||
{
|
||||
if (typeof(TBase).GetMembers().Any(x => x.Name == aProperty.Name))
|
||||
{
|
||||
MemberInfo newMember = typeof(TBase).GetMember(aProperty.Name)[0];
|
||||
MemberBinding newMemberBinding = Expression.Bind(newMember, Expression.Property(oldParamters[0], aProperty.Name));
|
||||
newBindings.Add(newMemberBinding);
|
||||
}
|
||||
}
|
||||
newBindings.AddRange(oldExpression.Bindings);
|
||||
|
||||
var body = Expression.MemberInit(newBody, newBindings.ToArray());
|
||||
var resExpression = Expression.Lambda<TDelegate>(body, oldParamters);
|
||||
|
||||
return resExpression;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 继承ExpressionVisitor类,实现参数替换统一
|
||||
/// </summary>
|
||||
class ParameterReplaceVisitor : ExpressionVisitor
|
||||
{
|
||||
public ParameterReplaceVisitor(ParameterExpression paramExpr)
|
||||
{
|
||||
_parameter = paramExpr;
|
||||
}
|
||||
|
||||
//新的表达式参数
|
||||
private ParameterExpression _parameter { get; set; }
|
||||
|
||||
protected override Expression VisitParameter(ParameterExpression p)
|
||||
{
|
||||
if (p.Type == _parameter.Type)
|
||||
return _parameter;
|
||||
else
|
||||
return p;
|
||||
}
|
||||
}
|
||||
|
||||
class GetConstantValueVisitor : ExpressionVisitor
|
||||
{
|
||||
public object ConstantValue { get; set; }
|
||||
protected override Expression VisitConstant(ConstantExpression node)
|
||||
{
|
||||
ConstantValue = node.Value;
|
||||
|
||||
return base.VisitConstant(node);
|
||||
}
|
||||
}
|
||||
|
||||
class GetMemberValueVisitor : ExpressionVisitor
|
||||
{
|
||||
public object Value { get; set; }
|
||||
|
||||
}
|
||||
}
|
1096
Blog.Core.Common/Helper/ShaHelper.cs
Normal file
1096
Blog.Core.Common/Helper/ShaHelper.cs
Normal file
File diff suppressed because it is too large
Load Diff
|
@ -3,8 +3,10 @@ using Autofac.Extras.DynamicProxy;
|
|||
using Blog.Core.AOP;
|
||||
using Blog.Core.Common;
|
||||
using Blog.Core.IRepository.Base;
|
||||
using Blog.Core.IServices.BASE;
|
||||
using Blog.Core.Model;
|
||||
using Blog.Core.Repository.Base;
|
||||
using Blog.Core.Services.BASE;
|
||||
using log4net;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
@ -60,6 +62,7 @@ namespace Blog.Core.Extensions
|
|||
}
|
||||
|
||||
builder.RegisterGeneric(typeof(BaseRepository<>)).As(typeof(IBaseRepository<>)).InstancePerDependency();//注册仓储
|
||||
builder.RegisterGeneric(typeof(BaseServices<>)).As(typeof(IBaseServices<>)).InstancePerDependency();//注册服务
|
||||
|
||||
// 获取 Service.dll 程序集服务,并注册
|
||||
var assemblysServices = Assembly.LoadFrom(servicesDllFile);
|
||||
|
|
14
Blog.Core.IServices/ITrojanUsersServices.cs
Normal file
14
Blog.Core.IServices/ITrojanUsersServices.cs
Normal file
|
@ -0,0 +1,14 @@
|
|||
using Blog.Core.IServices.BASE;
|
||||
using Blog.Core.Model.Models;
|
||||
|
||||
namespace Blog.Core.IServices
|
||||
{
|
||||
/// <summary>
|
||||
/// TrojanUsersServices
|
||||
/// </summary>
|
||||
public interface ITrojanUsersServices : IBaseServices<TrojanUsers>
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
25
Blog.Core.Model/Models/TrojanCusServers.cs
Normal file
25
Blog.Core.Model/Models/TrojanCusServers.cs
Normal file
|
@ -0,0 +1,25 @@
|
|||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Blog.Core.Model.Models
|
||||
{
|
||||
///<summary>
|
||||
///users自定义服务器
|
||||
///</summary>
|
||||
[SugarTable("users_cus", "WMBLOG_MYSQL_2")]
|
||||
public partial class TrojanCusServers
|
||||
{
|
||||
|
||||
[SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)]
|
||||
public int id { set; get; }
|
||||
public int userid { get; set; }
|
||||
public string servername { set; get; }
|
||||
public string serveraddress { set; get; }
|
||||
[SugarColumn(IsNullable = true)]
|
||||
public string serverremark { get; set; }
|
||||
public bool serverenable { get; set; }
|
||||
}
|
||||
}
|
62
Blog.Core.Model/Models/TrojanDetails.cs
Normal file
62
Blog.Core.Model/Models/TrojanDetails.cs
Normal file
|
@ -0,0 +1,62 @@
|
|||
|
||||
//模板自动生成(请勿修改)
|
||||
//作者:胡丁文
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Blog.Core.Model.Models
|
||||
{
|
||||
///<summary>
|
||||
///用户流量每月汇总表
|
||||
///</summary>
|
||||
[SugarTable("users_detail", "WMBLOG_MYSQL_2")]
|
||||
public partial class TrojanDetails
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||
public int id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int userId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public DateTime calDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public ulong download { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public ulong upload { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
[SugarColumn(IsNullable = true)]
|
||||
public int? CreateId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
[SugarColumn(IsNullable = true)]
|
||||
public string CreateBy { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
[SugarColumn(IsNullable = true)]
|
||||
public DateTime? CreateTime { get; set; }
|
||||
}
|
||||
}
|
30
Blog.Core.Model/Models/TrojanServers.cs
Normal file
30
Blog.Core.Model/Models/TrojanServers.cs
Normal file
|
@ -0,0 +1,30 @@
|
|||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Blog.Core.Model.Models
|
||||
{
|
||||
///<summary>
|
||||
///Trojan服务器
|
||||
///</summary>
|
||||
[SugarTable("servers", "WMBLOG_MYSQL_2")]
|
||||
public partial class TrojanServers
|
||||
{
|
||||
|
||||
[SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)]
|
||||
public int id { set; get; }
|
||||
public int userid { get; set; }
|
||||
public string servername { set; get; }
|
||||
public string serveraddress { set; get; }
|
||||
public int serverport { get; set; }
|
||||
[SugarColumn(IsNullable = true)]
|
||||
public string serverremark { get; set; }
|
||||
public bool serverenable { get; set; }
|
||||
public string serverpeer { get; set; }
|
||||
[SugarColumn(IsNullable = true)]
|
||||
public string serverpath { get; set; }
|
||||
public string servertype { get; set; }
|
||||
}
|
||||
}
|
25
Blog.Core.Model/Models/TrojanUrlServers.cs
Normal file
25
Blog.Core.Model/Models/TrojanUrlServers.cs
Normal file
|
@ -0,0 +1,25 @@
|
|||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Blog.Core.Model.Models
|
||||
{
|
||||
///<summary>
|
||||
///users自定义URL服务器
|
||||
///</summary>
|
||||
[SugarTable("users_url", "WMBLOG_MYSQL_2")]
|
||||
public partial class TrojanUrlServers
|
||||
{
|
||||
|
||||
[SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)]
|
||||
public int id { set; get; }
|
||||
public int userid { get; set; }
|
||||
public string servername { set; get; }
|
||||
public string serveraddress { set; get; }
|
||||
[SugarColumn(IsNullable = true)]
|
||||
public string serverremark { get; set; }
|
||||
public bool serverenable { get; set; }
|
||||
}
|
||||
}
|
38
Blog.Core.Model/Models/TrojanUsers.cs
Normal file
38
Blog.Core.Model/Models/TrojanUsers.cs
Normal file
|
@ -0,0 +1,38 @@
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Blog.Core.Model.ViewModels;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Blog.Core.Model.Models
|
||||
{
|
||||
///<summary>
|
||||
///Trojan用户
|
||||
///</summary>
|
||||
[SugarTable("users", "WMBLOG_MYSQL_2")]
|
||||
public partial class TrojanUsers
|
||||
{
|
||||
|
||||
[SugarColumn(IsNullable = false, IsPrimaryKey = true, IsIdentity = true)]
|
||||
public int id { set; get; }
|
||||
public string username { set; get; }
|
||||
public string password { set; get; }
|
||||
public Int64 quota { set; get; }
|
||||
public UInt64 download { set; get; }
|
||||
public UInt64 upload { set; get; }
|
||||
public string passwordshow { set; get; }
|
||||
[SugarColumn(IsNullable = true)]
|
||||
public int CreateId { get; set; }
|
||||
[SugarColumn(IsNullable = true)]
|
||||
public string CreateBy { get; set; }
|
||||
[SugarColumn(IsNullable = true)]
|
||||
public DateTime? CreateTime { get; set; }
|
||||
/// <summary>
|
||||
/// 历史流量记录
|
||||
/// </summary>
|
||||
[SugarColumn(IsIgnore = true)]
|
||||
public List<TrojanUseDetailDto> useList { get; set; }
|
||||
}
|
||||
}
|
23
Blog.Core.Model/ViewModels/TrojanLimitFlowDto.cs
Normal file
23
Blog.Core.Model/ViewModels/TrojanLimitFlowDto.cs
Normal file
|
@ -0,0 +1,23 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Blog.Core.Model.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// 限制流量dto
|
||||
/// 作者:胡丁文
|
||||
/// 时间:2020-4-27 16:57:07
|
||||
/// </summary>
|
||||
public class TrojanLimitFlowDto
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户
|
||||
/// </summary>
|
||||
public int[] users { get; set; }
|
||||
/// <summary>
|
||||
/// 流量(-1为无限,单位为最小单位byte)
|
||||
/// </summary>
|
||||
public Int64 quota { get; set; }
|
||||
}
|
||||
}
|
14
Blog.Core.Model/ViewModels/TrojanServerDto.cs
Normal file
14
Blog.Core.Model/ViewModels/TrojanServerDto.cs
Normal file
|
@ -0,0 +1,14 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Blog.Core.Model.ViewModels
|
||||
{
|
||||
public class TrojanServerDto
|
||||
{
|
||||
public string name { get; set; }
|
||||
public string value { get; set; }
|
||||
}
|
||||
}
|
28
Blog.Core.Model/ViewModels/TrojanServerSpliceDto.cs
Normal file
28
Blog.Core.Model/ViewModels/TrojanServerSpliceDto.cs
Normal file
|
@ -0,0 +1,28 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Blog.Core.Model.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// Trojan服务器拼接服务器和订阅地址
|
||||
/// </summary>
|
||||
public class TrojanServerSpliceDto
|
||||
{
|
||||
/// <summary>
|
||||
/// 普通订阅连接
|
||||
/// </summary>
|
||||
public string normalApi { get; set; }
|
||||
/// <summary>
|
||||
/// clash订阅连接
|
||||
/// </summary>
|
||||
public string clashApi { get; set; }
|
||||
/// <summary>
|
||||
/// 备用clash订阅连接
|
||||
/// </summary>
|
||||
public string clashApiBackup { get; set; }
|
||||
public List<TrojanServerDto> list { get; set; } = new List<TrojanServerDto>();
|
||||
}
|
||||
}
|
35
Blog.Core.Model/ViewModels/TrojanUseDetailDto.cs
Normal file
35
Blog.Core.Model/ViewModels/TrojanUseDetailDto.cs
Normal file
|
@ -0,0 +1,35 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Blog.Core.Model.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// Trojan用户流量统计分组
|
||||
/// </summary>
|
||||
public class TrojanUseDetailDto
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户ID
|
||||
/// </summary>
|
||||
public int userId { get; set; }
|
||||
/// <summary>
|
||||
/// 月度
|
||||
/// </summary>
|
||||
public string moth { get; set; }
|
||||
/// <summary>
|
||||
/// 上传流量
|
||||
/// </summary>
|
||||
public decimal up { get; set; }
|
||||
/// <summary>
|
||||
/// 下载流量
|
||||
/// </summary>
|
||||
public decimal down { get; set; }
|
||||
/// <summary>
|
||||
/// 下载流量
|
||||
/// </summary>
|
||||
public decimal total { get { return up + down; } }
|
||||
}
|
||||
}
|
|
@ -7,12 +7,6 @@ namespace Blog.Core.Services
|
|||
{
|
||||
public partial class AccessTrendLogServices : BaseServices<AccessTrendLog>, IAccessTrendLogServices
|
||||
{
|
||||
IBaseRepository<AccessTrendLog> _dal;
|
||||
public AccessTrendLogServices(IBaseRepository<AccessTrendLog> dal)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,13 +7,6 @@ namespace Blog.Core.Services
|
|||
{
|
||||
public class AdvertisementServices : BaseServices<Advertisement>, IAdvertisementServices
|
||||
{
|
||||
IBaseRepository<Advertisement> _dal;
|
||||
public AdvertisementServices(IBaseRepository<Advertisement> dal)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
}
|
||||
|
||||
public void ReturnExp()
|
||||
{
|
||||
|
||||
|
|
|
@ -13,6 +13,10 @@ namespace Blog.Core.Services.BASE
|
|||
{
|
||||
public class BaseServices<TEntity> : IBaseServices<TEntity> where TEntity : class, new()
|
||||
{
|
||||
public BaseServices(IBaseRepository<TEntity> BaseDal = null)
|
||||
{
|
||||
this.BaseDal = BaseDal;
|
||||
}
|
||||
//public IBaseRepository<TEntity> baseDal = new BaseRepository<TEntity>();
|
||||
public IBaseRepository<TEntity> BaseDal { get; set; }//通过在子类的构造函数中注入,这里是基类,不用构造函数
|
||||
|
||||
|
|
|
@ -13,7 +13,6 @@ namespace Blog.Core.Services
|
|||
{
|
||||
public class BlogArticleServices : BaseServices<BlogArticle>, IBlogArticleServices
|
||||
{
|
||||
public IBaseRepository<BlogArticle> _dal { get; set; }
|
||||
IMapper _mapper;
|
||||
public BlogArticleServices(IMapper mapper)
|
||||
{
|
||||
|
|
|
@ -10,11 +10,6 @@ namespace Blog.Core.Services
|
|||
/// </summary>
|
||||
public class DepartmentServices : BaseServices<Department>, IDepartmentServices
|
||||
{
|
||||
private readonly IBaseRepository<Department> _dal;
|
||||
public DepartmentServices(IBaseRepository<Department> dal)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -12,13 +12,10 @@ namespace Blog.Core.Services
|
|||
{
|
||||
public class GuestbookServices : BaseServices<Guestbook>, IGuestbookServices
|
||||
{
|
||||
private readonly IBaseRepository<Guestbook> _dal;
|
||||
private readonly IUnitOfWork _unitOfWork;
|
||||
private readonly IBaseRepository<PasswordLib> _passwordLibRepository;
|
||||
public GuestbookServices(IUnitOfWork unitOfWork, IBaseRepository<Guestbook> dal, IBaseRepository<PasswordLib> passwordLibRepository)
|
||||
public GuestbookServices(IUnitOfWork unitOfWork, IBaseRepository<PasswordLib> passwordLibRepository)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
_unitOfWork = unitOfWork;
|
||||
_passwordLibRepository = passwordLibRepository;
|
||||
}
|
||||
|
@ -47,7 +44,7 @@ namespace Blog.Core.Services
|
|||
//......
|
||||
|
||||
Console.WriteLine($"");
|
||||
var guestbooks = await _dal.Query();
|
||||
var guestbooks = await BaseDal.Query();
|
||||
Console.WriteLine($"first time : the count of guestbooks is :{guestbooks.Count}");
|
||||
|
||||
int ex = 0;
|
||||
|
@ -55,7 +52,7 @@ namespace Blog.Core.Services
|
|||
int throwEx = 1 / ex;
|
||||
|
||||
Console.WriteLine($"insert a data into the table Guestbook now.");
|
||||
var insertGuestbook = await _dal.Add(new Guestbook()
|
||||
var insertGuestbook = await BaseDal.Add(new Guestbook()
|
||||
{
|
||||
username = "bbb",
|
||||
blogId = 1,
|
||||
|
@ -63,7 +60,7 @@ namespace Blog.Core.Services
|
|||
isshow = true
|
||||
});
|
||||
|
||||
guestbooks = await _dal.Query();
|
||||
guestbooks = await BaseDal.Query();
|
||||
Console.WriteLine($"second time : the count of guestbooks is :{guestbooks.Count}");
|
||||
|
||||
|
||||
|
@ -81,7 +78,7 @@ namespace Blog.Core.Services
|
|||
var passwords = await _passwordLibRepository.Query();
|
||||
Console.WriteLine($"third time : the count of passwords is :{passwords.Count}");
|
||||
|
||||
var guestbooks = await _dal.Query();
|
||||
var guestbooks = await BaseDal.Query();
|
||||
Console.WriteLine($"third time : the count of guestbooks is :{guestbooks.Count}");
|
||||
|
||||
return new MessageModel<string>()
|
||||
|
@ -114,7 +111,7 @@ namespace Blog.Core.Services
|
|||
//......
|
||||
|
||||
Console.WriteLine($"");
|
||||
var guestbooks = await _dal.Query();
|
||||
var guestbooks = await BaseDal.Query();
|
||||
Console.WriteLine($"first time : the count of guestbooks is :{guestbooks.Count}");
|
||||
|
||||
int ex = 0;
|
||||
|
@ -122,7 +119,7 @@ namespace Blog.Core.Services
|
|||
int throwEx = 1 / ex;
|
||||
|
||||
Console.WriteLine($"insert a data into the table Guestbook now.");
|
||||
var insertGuestbook = await _dal.Add(new Guestbook()
|
||||
var insertGuestbook = await BaseDal.Add(new Guestbook()
|
||||
{
|
||||
username = "bbb",
|
||||
blogId = 1,
|
||||
|
@ -130,7 +127,7 @@ namespace Blog.Core.Services
|
|||
isshow = true
|
||||
});
|
||||
|
||||
guestbooks = await _dal.Query();
|
||||
guestbooks = await BaseDal.Query();
|
||||
Console.WriteLine($"second time : the count of guestbooks is :{guestbooks.Count}");
|
||||
|
||||
return true;
|
||||
|
|
|
@ -7,12 +7,5 @@ namespace Blog.Core.IServices
|
|||
public class ApplicationUserServices : BaseServices<ApplicationUser>, IApplicationUserServices
|
||||
{
|
||||
|
||||
IBaseRepository<ApplicationUser> _dal;
|
||||
public ApplicationUserServices(IBaseRepository<ApplicationUser> dal)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -11,12 +11,5 @@ namespace Blog.Core.Services
|
|||
public class ModuleServices : BaseServices<Modules>, IModuleServices
|
||||
{
|
||||
|
||||
IBaseRepository<Modules> _dal;
|
||||
public ModuleServices(IBaseRepository<Modules> dal)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,12 +7,6 @@ namespace Blog.Core.Services
|
|||
{
|
||||
public partial class OperateLogServices : BaseServices<OperateLog>, IOperateLogServices
|
||||
{
|
||||
IBaseRepository<OperateLog> _dal;
|
||||
public OperateLogServices(IBaseRepository<OperateLog> dal)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,12 +7,6 @@ namespace Blog.Core.Services
|
|||
{
|
||||
public partial class PasswordLibServices : BaseServices<PasswordLib>, IPasswordLibServices
|
||||
{
|
||||
IBaseRepository<PasswordLib> _dal;
|
||||
public PasswordLibServices(IBaseRepository<PasswordLib> dal)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,13 +20,10 @@ namespace Blog.Core.Services
|
|||
{
|
||||
public partial class PayServices : BaseServices<RootEntityTkey<int>>, IPayServices
|
||||
{
|
||||
IBaseRepository<RootEntityTkey<int>> _dal;
|
||||
IHttpContextAccessor _httpContextAccessor;
|
||||
ILogger<PayServices> _logger;
|
||||
public PayServices(IBaseRepository<RootEntityTkey<int>> dal, ILogger<PayServices> logger, IHttpContextAccessor httpContextAccessor)
|
||||
public PayServices(ILogger<PayServices> logger, IHttpContextAccessor httpContextAccessor)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
_logger = logger;
|
||||
_httpContextAccessor = httpContextAccessor;
|
||||
}
|
||||
|
|
|
@ -11,12 +11,5 @@ namespace Blog.Core.Services
|
|||
public class PermissionServices : BaseServices<Permission>, IPermissionServices
|
||||
{
|
||||
|
||||
IBaseRepository<Permission> _dal;
|
||||
public PermissionServices(IBaseRepository<Permission> dal)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,6 @@ namespace Blog.Core.Services
|
|||
this._dal = dal;
|
||||
this._moduleRepository = moduleRepository;
|
||||
this._roleRepository = roleRepository;
|
||||
base.BaseDal = dal;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -13,13 +13,6 @@ namespace Blog.Core.Services
|
|||
/// </summary>
|
||||
public class RoleServices : BaseServices<Role>, IRoleServices
|
||||
{
|
||||
|
||||
IBaseRepository<Role> _dal;
|
||||
public RoleServices(IBaseRepository<Role> dal)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
|
|
|
@ -7,12 +7,6 @@ namespace Blog.Core.Services
|
|||
{
|
||||
public partial class TasksQzServices : BaseServices<TasksQz>, ITasksQzServices
|
||||
{
|
||||
IBaseRepository<TasksQz> _dal;
|
||||
public TasksQzServices(IBaseRepository<TasksQz> dal)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,13 +10,6 @@ namespace Blog.Core.Services
|
|||
{
|
||||
public class TopicDetailServices : BaseServices<TopicDetail>, ITopicDetailServices
|
||||
{
|
||||
IBaseRepository<TopicDetail> _dal;
|
||||
public TopicDetailServices(IBaseRepository<TopicDetail> dal)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取开Bug数据(缓存)
|
||||
/// </summary>
|
||||
|
|
|
@ -10,14 +10,6 @@ namespace Blog.Core.Services
|
|||
{
|
||||
public class TopicServices: BaseServices<Topic>, ITopicServices
|
||||
{
|
||||
|
||||
IBaseRepository<Topic> _dal;
|
||||
public TopicServices(IBaseRepository<Topic> dal)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取开Bug专题分类(缓存)
|
||||
/// </summary>
|
||||
|
|
18
Blog.Core.Services/TrojanUsersServices.cs
Normal file
18
Blog.Core.Services/TrojanUsersServices.cs
Normal file
|
@ -0,0 +1,18 @@
|
|||
using Blog.Core.Common;
|
||||
using Blog.Core.IRepository.Base;
|
||||
using Blog.Core.IServices;
|
||||
using Blog.Core.Model.Models;
|
||||
using Blog.Core.Services.BASE;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Blog.Core.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// TrojanUsersServices
|
||||
/// </summary>
|
||||
public class TrojanUsersServices : BaseServices<TrojanUsers>, ITrojanUsersServices
|
||||
{
|
||||
|
||||
}
|
||||
}
|
|
@ -13,13 +13,6 @@ namespace Blog.Core.Services
|
|||
/// </summary>
|
||||
public class UserRoleServices : BaseServices<UserRole>, IUserRoleServices
|
||||
{
|
||||
|
||||
IBaseRepository<UserRole> _dal;
|
||||
public UserRoleServices(IBaseRepository<UserRole> dal)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
|
|
|
@ -19,13 +19,10 @@ namespace Blog.Core.Services
|
|||
/// </summary>
|
||||
public class WeChatCompanyServices : BaseServices<WeChatCompany>, IWeChatCompanyServices
|
||||
{
|
||||
readonly IBaseRepository<WeChatCompany> _dal;
|
||||
readonly IUnitOfWork _unitOfWork;
|
||||
readonly ILogger<WeChatCompanyServices> _logger;
|
||||
public WeChatCompanyServices(IBaseRepository<WeChatCompany> dal,IUnitOfWork unitOfWork, ILogger<WeChatCompanyServices> logger)
|
||||
public WeChatCompanyServices(IUnitOfWork unitOfWork, ILogger<WeChatCompanyServices> logger)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
this._unitOfWork = unitOfWork;
|
||||
this._logger = logger;
|
||||
}
|
||||
|
|
|
@ -19,13 +19,10 @@ namespace Blog.Core.Services
|
|||
/// </summary>
|
||||
public class WeChatConfigServices : BaseServices<WeChatConfig>, IWeChatConfigServices
|
||||
{
|
||||
readonly IBaseRepository<WeChatConfig> _dal;
|
||||
readonly IUnitOfWork _unitOfWork;
|
||||
readonly ILogger<WeChatConfigServices> _logger;
|
||||
public WeChatConfigServices(IBaseRepository<WeChatConfig> dal,IUnitOfWork unitOfWork, ILogger<WeChatConfigServices> logger)
|
||||
public WeChatConfigServices(IUnitOfWork unitOfWork, ILogger<WeChatConfigServices> logger)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
this._unitOfWork = unitOfWork;
|
||||
this._logger = logger;
|
||||
}
|
||||
|
@ -237,13 +234,13 @@ namespace Blog.Core.Services
|
|||
QRticket = data.ticket
|
||||
};
|
||||
data.id = info.userID;
|
||||
await this._dal.Db.Insertable<WeChatQR>(weChatQR).ExecuteCommandAsync();
|
||||
await this.BaseDal.Db.Insertable<WeChatQR>(weChatQR).ExecuteCommandAsync();
|
||||
reData.usersData= data;
|
||||
return MessageModel<WeChatResponseUserInfo>.Success("获取二维码成功", reData);
|
||||
}
|
||||
public async Task<MessageModel<WeChatResponseUserInfo>> PushCardMsg(WeChatCardMsgDataDto msg,string ip)
|
||||
{
|
||||
var bindUser = await _dal.Db.Queryable<WeChatSub>().Where(t => t.SubFromPublicAccount == msg.info.id && t.CompanyID == msg.info.companyCode && t.IsUnBind == false && msg.info.userID.Contains(t.SubJobID)).SingleAsync();
|
||||
var bindUser = await BaseDal.Db.Queryable<WeChatSub>().Where(t => t.SubFromPublicAccount == msg.info.id && t.CompanyID == msg.info.companyCode && t.IsUnBind == false && msg.info.userID.Contains(t.SubJobID)).SingleAsync();
|
||||
if (bindUser == null)
|
||||
return MessageModel<WeChatResponseUserInfo>.Fail("用户不存在或者已经解绑!");
|
||||
var res = await GetToken(msg?.info?.id);
|
||||
|
@ -316,7 +313,7 @@ namespace Blog.Core.Services
|
|||
PushLogTemplateID = msg.cardMsg.template_id,
|
||||
PushLogIP = ip
|
||||
};
|
||||
await _dal.Db.Insertable<WeChatPushLog>(pushLog).ExecuteCommandAsync();
|
||||
await BaseDal.Db.Insertable<WeChatPushLog>(pushLog).ExecuteCommandAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
@ -355,7 +352,7 @@ namespace Blog.Core.Services
|
|||
if (msg.selectOperate.Equals("one"))
|
||||
{
|
||||
//发送单个
|
||||
var usrs = _dal.Db.Queryable<WeChatSub>().Where(t => t.SubFromPublicAccount.Equals(msg.selectWeChat) && t.CompanyID.Equals(msg.selectCompany) && t.SubJobID.Equals(msg.selectUser)).ToList();
|
||||
var usrs = BaseDal.Db.Queryable<WeChatSub>().Where(t => t.SubFromPublicAccount.Equals(msg.selectWeChat) && t.CompanyID.Equals(msg.selectCompany) && t.SubJobID.Equals(msg.selectUser)).ToList();
|
||||
foreach (var item in usrs)
|
||||
{
|
||||
msg.selectUser = item.SubUserOpenID;
|
||||
|
@ -370,7 +367,7 @@ namespace Blog.Core.Services
|
|||
else
|
||||
{
|
||||
//发送所有
|
||||
var usrs = _dal.Db.Queryable<WeChatSub>().Where(t => t.SubFromPublicAccount.Equals(msg.selectWeChat) && t.CompanyID.Equals(msg.selectCompany)).ToList();
|
||||
var usrs = BaseDal.Db.Queryable<WeChatSub>().Where(t => t.SubFromPublicAccount.Equals(msg.selectWeChat) && t.CompanyID.Equals(msg.selectCompany)).ToList();
|
||||
foreach (var item in usrs)
|
||||
{
|
||||
msg.selectUser = item.SubUserOpenID;
|
||||
|
@ -531,7 +528,7 @@ namespace Blog.Core.Services
|
|||
}
|
||||
public async Task<MessageModel<WeChatResponseUserInfo>> GetBindUserInfo(WeChatUserInfo info)
|
||||
{
|
||||
var bindUser = await _dal.Db.Queryable<WeChatSub>().Where(t => t.SubFromPublicAccount == info.id && t.CompanyID == info.companyCode && info.userID.Equals(t.SubJobID) && t.IsUnBind == false ).FirstAsync();
|
||||
var bindUser = await BaseDal.Db.Queryable<WeChatSub>().Where(t => t.SubFromPublicAccount == info.id && t.CompanyID == info.companyCode && info.userID.Equals(t.SubJobID) && t.IsUnBind == false ).FirstAsync();
|
||||
if (bindUser == null) return MessageModel<WeChatResponseUserInfo>.Fail("用户不存在或者已经解绑!");
|
||||
var res = await GetToken(info.id);
|
||||
if(!res.success) return MessageModel<WeChatResponseUserInfo>.Fail(res.msg);
|
||||
|
@ -552,14 +549,14 @@ namespace Blog.Core.Services
|
|||
}
|
||||
public async Task<MessageModel<WeChatResponseUserInfo>> UnBind(WeChatUserInfo info)
|
||||
{
|
||||
var bindUser = await _dal.Db.Queryable<WeChatSub>().Where(t => t.SubFromPublicAccount == info.id && t.CompanyID == info.companyCode && info.userID.Equals(t.SubJobID) && t.IsUnBind == false ).FirstAsync();
|
||||
var bindUser = await BaseDal.Db.Queryable<WeChatSub>().Where(t => t.SubFromPublicAccount == info.id && t.CompanyID == info.companyCode && info.userID.Equals(t.SubJobID) && t.IsUnBind == false ).FirstAsync();
|
||||
if (bindUser == null) return MessageModel<WeChatResponseUserInfo>.Fail("用户不存在或者已经解绑!");
|
||||
WeChatResponseUserInfo reData = new WeChatResponseUserInfo();
|
||||
reData.companyCode = info.companyCode;
|
||||
reData.id = info.id;
|
||||
bindUser.IsUnBind = true;
|
||||
bindUser.SubUserRefTime = DateTime.Now;
|
||||
await _dal.Db.Updateable<WeChatSub>(bindUser).UpdateColumns(t=> new{ t.IsUnBind,t.SubUserRefTime}).ExecuteCommandAsync();
|
||||
await BaseDal.Db.Updateable<WeChatSub>(bindUser).UpdateColumns(t=> new{ t.IsUnBind,t.SubUserRefTime}).ExecuteCommandAsync();
|
||||
return MessageModel<WeChatResponseUserInfo>.Success("用户解绑成功", reData);
|
||||
}
|
||||
|
||||
|
@ -796,12 +793,12 @@ namespace Blog.Core.Services
|
|||
|
||||
private async Task<string> QRBind(WeChatXMLDto weChat)
|
||||
{
|
||||
var ticket = await _dal.Db.Queryable<WeChatQR>().InSingleAsync(weChat.Ticket);
|
||||
var ticket = await BaseDal.Db.Queryable<WeChatQR>().InSingleAsync(weChat.Ticket);
|
||||
if (ticket == null) throw new Exception("ticket未找到");
|
||||
if (ticket.QRisUsed) throw new Exception("ticket已被使用");
|
||||
if (!ticket.QRpublicAccount.Equals(weChat.publicAccount)) throw new Exception($"公众号错误 need:{ticket.QRpublicAccount} but:{weChat.publicAccount}");
|
||||
|
||||
var bindUser = await _dal.Db.Queryable<WeChatSub>().Where(t => t.SubFromPublicAccount == ticket.QRpublicAccount && t.CompanyID == ticket.QRbindCompanyID && t.SubJobID == ticket.QRbindJobID).SingleAsync();
|
||||
var bindUser = await BaseDal.Db.Queryable<WeChatSub>().Where(t => t.SubFromPublicAccount == ticket.QRpublicAccount && t.CompanyID == ticket.QRbindCompanyID && t.SubJobID == ticket.QRbindJobID).SingleAsync();
|
||||
bool isNewBind;
|
||||
if (bindUser == null )
|
||||
{
|
||||
|
@ -835,11 +832,11 @@ namespace Blog.Core.Services
|
|||
try
|
||||
{
|
||||
_unitOfWork.BeginTran();
|
||||
await _dal.Db.Updateable<WeChatQR>(ticket).ExecuteCommandAsync();
|
||||
await BaseDal.Db.Updateable<WeChatQR>(ticket).ExecuteCommandAsync();
|
||||
if (isNewBind)
|
||||
await _dal.Db.Insertable<WeChatSub>(bindUser).ExecuteCommandAsync();
|
||||
await BaseDal.Db.Insertable<WeChatSub>(bindUser).ExecuteCommandAsync();
|
||||
else
|
||||
await _dal.Db.Updateable<WeChatSub>(bindUser).ExecuteCommandAsync();
|
||||
await BaseDal.Db.Updateable<WeChatSub>(bindUser).ExecuteCommandAsync();
|
||||
_unitOfWork.CommitTran();
|
||||
}
|
||||
catch
|
||||
|
|
|
@ -19,16 +19,6 @@ namespace Blog.Core.Services
|
|||
/// </summary>
|
||||
public class WeChatPushLogServices : BaseServices<WeChatPushLog>, IWeChatPushLogServices
|
||||
{
|
||||
readonly IBaseRepository<WeChatPushLog> _dal;
|
||||
readonly IUnitOfWork _unitOfWork;
|
||||
readonly ILogger<WeChatPushLogServices> _logger;
|
||||
public WeChatPushLogServices(IBaseRepository<WeChatPushLog> dal,IUnitOfWork unitOfWork, ILogger<WeChatPushLogServices> logger)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
this._unitOfWork = unitOfWork;
|
||||
this._logger = logger;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -19,16 +19,6 @@ namespace Blog.Core.Services
|
|||
/// </summary>
|
||||
public class WeChatSubServices : BaseServices<WeChatSub>, IWeChatSubServices
|
||||
{
|
||||
readonly IBaseRepository<WeChatSub> _dal;
|
||||
readonly IUnitOfWork _unitOfWork;
|
||||
readonly ILogger<WeChatSubServices> _logger;
|
||||
public WeChatSubServices(IBaseRepository<WeChatSub> dal,IUnitOfWork unitOfWork, ILogger<WeChatSubServices> logger)
|
||||
{
|
||||
this._dal = dal;
|
||||
base.BaseDal = dal;
|
||||
this._unitOfWork = unitOfWork;
|
||||
this._logger = logger;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -12,16 +12,12 @@ namespace Blog.Core.FrameWork.Services
|
|||
/// </summary>
|
||||
public class SysUserInfoServices : BaseServices<SysUserInfo>, ISysUserInfoServices
|
||||
{
|
||||
|
||||
private readonly IBaseRepository<SysUserInfo> _dal;
|
||||
private readonly IBaseRepository<UserRole> _userRoleRepository;
|
||||
private readonly IBaseRepository<Role> _roleRepository;
|
||||
public SysUserInfoServices(IBaseRepository<SysUserInfo> dal, IBaseRepository<UserRole> userRoleRepository, IBaseRepository<Role> roleRepository)
|
||||
public SysUserInfoServices(IBaseRepository<UserRole> userRoleRepository, IBaseRepository<Role> roleRepository)
|
||||
{
|
||||
this._dal = dal;
|
||||
_userRoleRepository = userRoleRepository;
|
||||
_roleRepository = roleRepository;
|
||||
base.BaseDal = dal;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
|
|
Loading…
Reference in New Issue
Block a user