山东雷驰
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

134 lines
4.3 KiB

using Kean.Infrastructure.Database;
using Kean.Infrastructure.Database.Repository.Default;
using Kean.Infrastructure.Database.Repository.Default.Entities;
using System;
using System.Threading.Tasks;
namespace Kean.Infrastructure.Repository
{
/// <summary>
/// 菜单仓库
/// </summary>
public class MenuRepository :
Domain.Order.Repositories.IMenuRepository
{
private const int CUSTOM_MIN = 9901; // 自定义菜单最小 ID
private const int CUSTOM_MAX = 9999; // 自定义菜单最大 ID
private readonly IDefaultDb _database; // 默认数据库
/// <summary>
/// 构造函数
/// </summary>
public MenuRepository(
IDefaultDb database)
{
_database = database;
}
/*
* 实现 Kean.Domain.Order.Repositories.IMenuRepository.Create 方法
*/
public async Task<int> Create(string header, string url, int parent)
{
var last = await _database.From<T_SYS_MENU>()
.Where(m => m.MENU_ID >= CUSTOM_MIN && m.MENU_ID <= CUSTOM_MAX)
.OrderBy(m => m.MENU_ID, Order.Descending)
.Single();
var timestamp = DateTime.Now;
var menu = new T_SYS_MENU
{
MENU_HEADER = header,
MENU_URL = url,
MENU_PARENT_ID = parent,
MENU_FLAG = true,
CREATE_TIME = timestamp,
UPDATE_TIME = timestamp
};
if (last == null)
{
menu.MENU_ID = CUSTOM_MIN;
}
else
{
if ((menu.MENU_ID = last.MENU_ID + 1) > CUSTOM_MAX)
{
throw new OverflowException("菜单长度超出范围");
}
}
await _database.From<T_SYS_MENU>().Add(menu);
return menu.MENU_ID;
}
/*
* 实现 Kean.Domain.Order.Repositories.IMenuRepository.Modify 方法
*/
public async Task Modify(int id, string header, string url, int parent)
{
await _database.From<T_SYS_MENU>()
.Where(m => m.MENU_ID == id)
.Update(new
{
MENU_HEADER = header,
MENU_URL = url,
MENU_PARENT_ID = parent,
UPDATE_TIME = DateTime.Now
});
}
/*
* 实现 Kean.Domain.Order.Repositories.IMenuRepository.Delete 方法
*/
public async Task Delete(int id)
{
await _database.From<T_SYS_MENU>()
.Where(m => m.MENU_ID == id)
.Delete();
}
/*
* 实现 Kean.Domain.Order.Repositories.IMenuRepository.Sort 方法
*/
public async Task Sort(int id, int order)
{
var timestamp = DateTime.Now;
var index = -1;
var flag = false;
var parent = _database.From<T_SYS_MENU>().Where(m => m.MENU_ID == id).Query(m => m.MENU_PARENT_ID);
foreach (var item in await _database.From<T_SYS_MENU>()
.Where(m => parent.Contains(m.MENU_PARENT_ID))
.OrderBy(m => m.MENU_ORDER, Order.Ascending)
.OrderBy(m => m.MENU_ID, Order.Ascending)
.Select())
{
if (++index >= order)
{
int value;
if (!flag)
{
if (item.MENU_ID != id)
{
value = index - order + 2;
}
else
{
value = 1;
flag = true;
}
}
else
{
value = index - order + 1;
}
await _database.From<T_SYS_MENU>()
.Where(m => m.MENU_ID == item.MENU_ID)
.Update(new
{
MENU_ORDER = value,
UPDATE_TIME = timestamp
});
}
}
}
}
}