Infrastructure/OpenAuth.App/BaseApp/SysGroupManager/SysGroupApp.cs

184 lines
6.6 KiB
C#

using Infrastructure;
using Microsoft.Extensions.Configuration;
using NetTaste;
using OpenAuth.App.BaseApp.Base;
using OpenAuth.App.BaseApp.SysGroupManager.Request;
using OpenAuth.App.FormScheme.FormHelpers;
using OpenAuth.App.Interface;
using OpenAuth.App.Request;
using OpenAuth.Repository;
using OpenAuth.Repository.Domain;
using SqlSugar;
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OpenAuth.App.BaseApp.SysGroupManager
{
public class SysGroupApp : SqlSugarBaseApp<SysGroup, SugarDbContext>
{
private readonly IConfiguration _configuration;
private readonly ISqlSugarClient client;
public SysGroupApp(ISugarUnitOfWork<SugarDbContext> unitWork,
ISimpleClient<SysGroup> repository, IAuth auth, ISqlSugarClient sqlSugarClient,
IConfiguration configuration) : base(unitWork, repository, auth)
{
_configuration = configuration;
this.client = sqlSugarClient;
}
/// <summary>
/// 分页获取列表数据
/// </summary>
/// <param name="keyword"></param>
/// <param name="pageindex"></param>
/// <param name="pagesize"></param>
/// <returns></returns>
public async Task<Response<PageInfo<List<SysGroup>>>> LoadGroupList(string keyword, int pageindex, int pagesize)
{
//定义且实例化分页数据
RefAsync<int> totalCount = 0;
//数据查询并返回
var info = await this.Repository.AsQueryable()
.WhereIF(!string.IsNullOrEmpty(keyword), t => t.Name.Contains(keyword))
.OrderBy(t => t.Name)
.ToPageListAsync(pageindex, pagesize, totalCount);
return new Response<PageInfo<List<SysGroup>>>
{
Result = new PageInfo<List<SysGroup>>
{
Items = info,
Total = totalCount
}
};
}
/// <summary>
/// 获取实体
/// </summary>
/// <param name="code">Id</param>
/// <returns></returns>
public Task<SysGroup> GetEntityById(string id)
{
return this.Repository.AsQueryable().FirstAsync(t => t.Id == id);
}
/// <summary>
/// 保存(新增、修改)
/// </summary>
/// <param name="id">主键值</param>
/// <param name="group">数据源实体</param>
/// <returns></returns>
public async Task<Response<bool>> SaveEntity(string id, SysGroup group)
{
var flag = false;
//判断是更新还是添加
if (!string.IsNullOrEmpty(id))
{
using (var uwo = UnitWork.CreateContext())
{
//判断是否名称重复
SysGroup entity = await this.Repository.GetFirstAsync(t => t.Name == group.Name && t.Id != group.Id);
if (entity != null)
{
return new Response<bool>
{
Result = flag,
Message = "分组名称已存在"
};
}
//更新数据
await uwo.SysGroup.UpdateAsync(group);
//将组长添加中间表
SysGroupuser gu = new SysGroupuser();
gu.GroupId = group.Id;
gu.UserId = group.GroupLeaderId;
var guser = client.Queryable<SysGroupuser>().Where(r => r.GroupId == gu.GroupId && r.UserId == gu.UserId).ToList();
if (guser.Count==0)
{
await uwo.SysGroupuser.InsertAsync(gu);
}
flag = uwo.Commit();
}
}
else
{
using (var uwo = UnitWork.CreateContext())
{
//判断名称是否重复
SysGroup entity = await this.Repository.GetFirstAsync(t => t.Name == group.Name);
if (entity != null)
{
return new Response<bool>
{
Result = flag,
Message = "分组名称已存在"
};
}
//添加数据
group.Id = Guid.NewGuid().ToString();
group.CreateTime = DateTime.Now;
await uwo.SysGroup.InsertAsync(group);
//将组长添加中间表
SysGroupuser gu = new SysGroupuser();
gu.GroupId = group.Id;
gu.UserId=group.GroupLeaderId;
var guser=client.Queryable<SysGroupuser>().Where(r=>r.GroupId==gu.GroupId&&r.UserId==gu.UserId).ToList();
if (guser.Count==0)
{
await uwo.SysGroupuser.InsertAsync(gu);
}
flag = uwo.Commit();
}
}
return new Response<bool>
{
Result = flag,
Message = flag == true ? "success" : "error"
};
}
/// <summary>
/// 删除数据源
/// </summary>
/// <param name="id">主键</param>
public async Task<Response<bool>> DeleteEntity(string id)
{
SysGroup entity = new SysGroup()
{
Id = id
};
var flag = await this.Repository.DeleteAsync(entity);
return new Response<bool>
{
Result = flag,
Message = flag == true ? "success" : "error"
};
}
/// <summary>
/// 为分组分配用户
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public async Task<Response<bool>> AssignGroupUser(GroupUserReq model)
{
using (var uwo = UnitWork.CreateContext())
{
await uwo.SysGroupuser.DeleteAsync(a => a.GroupId == model.GroupId);
await uwo.SysGroupuser.InsertRangeAsync(model.UserIds.Select(a => new SysGroupuser { GroupId = model.GroupId, UserId = a }).ToList());
var flag = uwo.Commit();
return new Response<bool>
{
Result = flag,
Message = flag == true ? "success" : "error"
};
}
}
}
}