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
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
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|