using DapperORMCore.Context.DataContext;
using DapperORMCore.Context.Extend;
using DapperORMCore.Model.BaseModel;
using DapperORMCore.Model.CoreModel;
using DapperORMCore.String.Consts;
using DapperORMCore.String.Enums;
using NXWMS.IService.NXWMS;
using NXWMS.Model.AppModels.Condition;
using System;
using System.Collections.Generic;
using System.Text;
using WestDistance.DapperORM.Repository.Repositorys;
using DapperORMCore.Context;
using NXWMS.Code;
using System.Linq;
using System.Security.Claims;
using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;
using Microsoft.IdentityModel.Logging;
using Microsoft.Extensions.Configuration;
using NXWMS.String.Enums;
using System.Data;
using NXWMS.Code.Converter;
using NXWMS.DataAccess.Entity;
using DapperORMCore.Repository.IRepositorys;
using DapperORMCore.Dapper.BaseModel;
using NXWMS.IService.NXWMS.SysSettings;
using NXWMS.Model.AppModels.Condition.SysSettings;
using NXWMS.Model.AppModels.Result.SysSettings;
using NXWMS.Model.Common;
namespace NXWMS.Service.NXWMS.SysSettings
{
///
/// 菜单服务
///
[AutoInject(typeof(IMenuService), InjectType.Scope)]
public class MenuService : ServiceBase, IMenuService
{
///
/// 系统操作仓储中转
///
private IDataRepositoryContext _dataContext;
///
/// SQL节点仓储
///
private ISQLNodeRepository _iSQLNodeRepository;
///
/// 配置
///
private IConfiguration _configuration;
public MenuService(IDataRepositoryContext dataRepositoryContext, IConfiguration configuration, ISQLNodeRepository iSQLNodeRepository)
{
this._dataContext = dataRepositoryContext;
this._configuration = configuration;
this._iSQLNodeRepository = iSQLNodeRepository;
}
public OperateResultInfo> GetList(MenuSearchCondition info)
{
var sqlAndBuilder = new StringBuilder();
var sqlOrBuilder = new StringBuilder();
var sql = $@"SELECT
MenuPIDName = (SELECT A.MENU_NAME FROM SYS_MENU A WHERE A.MENU_ID=SYS_MENU.MENU_PID),
CreateName = (SELECT USER_NAME FROM SYS_USER A WHERE A.USER_ID=CREATE_BY),
UpdateName = (SELECT USER_NAME FROM SYS_USER B WHERE B.USER_ID=UPDATE_BY),
UsedFlagName = {_iSQLNodeRepository.GetEnumIntCaseString("USED_FLAG")},
{info.ItemSQL} FROM SYS_MENU WHERE 1=1 AND DEL_FLAG = 0 ";
sqlAndBuilder = info.Id != null ?
info.Id > 0 ?
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("MENU_ID", info.Id, DBOperationString._Equal)) :
sqlAndBuilder : sqlAndBuilder;
sqlAndBuilder = info.IsUsed == null ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("USED_FLAG", info.IsUsed, DBOperationString._Equal));
sqlAndBuilder = string.IsNullOrWhiteSpace(info.MenuCode) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("MENU_CODE", info.MenuCode, DBOperationString._ContainIn));
sqlAndBuilder = string.IsNullOrWhiteSpace(info.MenuName) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("MENU_NAME", info.MenuName, DBOperationString._ContainIn));
sql = sql + (sqlAndBuilder.Length > 0 ? _iSQLNodeRepository.GetAndString(sqlAndBuilder, false) : "");
IEnumerable result;
IEnumerable totalResult;
totalResult = new DataRepository(_dataContext).Query(sql);
if (info.PageIndex == 0 || info.PageSize == 0)
{
result = totalResult.ToList();
}
else
{
result = new DataRepository(_dataContext).QueryPage(sql,
"CREATE_TIME", info.PageSize, info.PageIndex, true);
}
return SuccessStatus(new PageQueryResultInfo
{
RowData = result,
PageConditionInfo = info,
TotalCount = totalResult.Count(),
TotalPageCount = (int)Math.Ceiling((double)totalResult.Count() / info.PageSize)
});
}
public OperateResultInfo> GetLevelList(MenuLevelCondition info)
{
var sql = @"
SELECT
MainMenuId = A.MENU_ID,
MainMenuCode = A.MENU_CODE,
MainMenuName = A.MENU_NAME,
MainMenuPid = A.MENU_PID,
MainMenuOrder = A.MENU_ORDER,
MainMenuURL = A.MENU_URL,
MainMenuUsedFlag = A.USED_FLAG,
MenuId = B.MENU_ID,
MenuCode = B.MENU_CODE,
MenuName = B.MENU_NAME,
MenuPid = B.MENU_PID,
MenuOrder = B.MENU_ORDER,
MenuURL = B.MENU_URL,
MenuUsedFlag = B.USED_FLAG,
FunctionId = C.MENU_ID,
FunctionCode = C.MENU_CODE,
FunctionName = C.MENU_NAME,
FunctionPid = C.MENU_PID,
FunctionOrder = C.MENU_ORDER,
FunctionURL = C.MENU_URL,
FunctionUsedFlag = C.USED_FLAG
FROM
SYS_MENU A
LEFT JOIN SYS_MENU B ON A.MENU_PID =- 1
AND B.MENU_PID = A.MENU_ID
AND B.USED_FLAG = 1
AND B.DEL_FLAG = 0
AND A.DEL_FLAG = 0
AND A.USED_FLAG = 1
AND B.MENU_PID !=- 1
LEFT JOIN SYS_MENU C ON C.USED_FLAG = 1
AND C.MENU_PID !=- 1
AND C.MENU_PID = B.MENU_ID
AND C.USED_FLAG = 1
AND C.DEL_FLAG = 0
";
var result = new DataRepository(_dataContext).Query(sql);
return SuccessStatus(result.ToList());
}
public OperateResultInfo Deleted(MenuCondition info)
{
var sqlAndBuilder = new StringBuilder();
sqlAndBuilder = info.MenuId != null ?
info.MenuId > 0 ?
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("MENU_ID", info.MenuId, DBOperationString._Equal)) :
sqlAndBuilder : sqlAndBuilder;
sqlAndBuilder = string.IsNullOrWhiteSpace(info.MenuCode) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("MENU_CODE", info.MenuCode, DBOperationString._Equal));
sqlAndBuilder = string.IsNullOrWhiteSpace(info.MenuIds) ?
sqlAndBuilder :
sqlAndBuilder.Append(_iSQLNodeRepository.GetAddCondition("MENU_ID", info.MenuIds, DBOperationString._In));
if (sqlAndBuilder.Length == 0)
{
return FailMessageStatus("参数错误!");
}
var now = DateTime.Now;
var sql = $@"UPDATE SYS_MENU SET DEL_FLAG=1,UPDATE_BY={info.OperationUserId},UPDATE_TIME='{now}'
WHERE 1=1 {sqlAndBuilder}";
var affectedRows = new DataRepository(_dataContext).Execute(sql);
return SuccessStatus();
}
public OperateResultInfo Remove(MenuCondition info)
{
var whereList = GetFieldKeyList(info);
var result = new DataRepository(_dataContext).Query(whereList).FirstOrDefault();
if (result != null)
{
var affectedRows = 0;
if (info.MenuId != null)
{
affectedRows = new DataRepository(_dataContext).Remove("MENU_ID", info.MenuId.ToString());
}
if (!string.IsNullOrWhiteSpace(info.MenuCode))
{
affectedRows = new DataRepository(_dataContext).Remove("MENU_CODE", info.MenuCode);
}
return GetStatus(affectedRows);
}
return FailMessageStatus("未查找到数据!");
}
public OperateResultInfo Add(MenuCondition info)
{
if (info == null)
{
return FailStatus();
}
//接口中特定错误状态不加了,,既然要简单.
if (new DataRepository(_dataContext).Query().Where(m => m.MENU_CODE == info.MenuCode
&& m.DEL_FLAG == 0 && m.USED_FLAG == 1).Any())
{
return FailMessageStatus("角色编码已经存在,请输入其它编码!");
}
var now = DateTime.Now;
var entity = new SYS_MENU();
entity.CREATE_BY = info.OperationUserId;
entity.CREATE_TIME = now;
entity.UPDATE_BY = info.OperationUserId;
entity.UPDATE_TIME = now;
entity.MENU_CODE = info.MenuCode;
entity.MENU_NAME = info.MenuName;
entity.MENU_ICON = info.IconPath;
entity.MENU_PID = info.MenuPID;
entity.MENU_URL = info.MenuURL;
entity.DESCRIBE = info.Describe;
entity.USED_FLAG = Convert.ToInt32(info.IsUsed);
var affectedRows = new DataRepository(_dataContext).Add(entity, new string[1] { "MENU_ID" });
return GetStatus(affectedRows);
}
public OperateResultInfo Edit(MenuCondition info)
{
if (info.MenuId == null && string.IsNullOrWhiteSpace(info.MenuCode))
{
return FailMessageStatus("参数错误!");
}
var whereList = new List()
.AddFieldKeyInfo(nameof(SYS_MENU.MENU_ID), info.MenuId, EnumCSharpPropertyType.STRING, DBOperationString._Equal,
info.MenuId != null)
.AddFieldKeyInfo(nameof(SYS_MENU.MENU_CODE), info.MenuCode, EnumCSharpPropertyType.STRING, DBOperationString._Equal,
!string.IsNullOrWhiteSpace(info.MenuCode)); ;
var result = new DataRepository(_dataContext).Query(whereList).FirstOrDefault();
if (result != null)
{
var now = DateTime.Now;
result.USED_FLAG = Convert.ToInt32(info.IsUsed);
result.MENU_ID = result.MENU_ID;
result.UPDATE_BY = info.OperationUserId;
result.UPDATE_TIME = now;
result.USED_FLAG = Convert.ToInt32(info.IsUsed);
result.MENU_CODE = info.MenuCode;
result.MENU_NAME = info.MenuName;
result.MENU_ICON = info.IconPath;
result.MENU_PID = info.MenuPID;
result.MENU_URL = info.MenuURL;
result.DESCRIBE = info.Describe;
var affectedRows = new DataRepository(_dataContext).Update(result, "MENU_ID", "NEWID");
return GetStatus(affectedRows);
}
return FailMessageStatus("未查找到数据!");
}
#region Private
///
/// 条件统一下,用统一筛选
///
///
///
private List GetFieldKeyList(MenuCondition info)
{
var whereList = new List()
.AddFieldKeyInfo(nameof(SYS_MENU.MENU_ID), info.MenuId, EnumCSharpPropertyType.STRING, DBOperationString._Equal,
info.MenuId != null)
.AddFieldKeyInfo(nameof(SYS_MENU.MENU_ID), info.MenuIds, EnumCSharpPropertyType.STRING, DBOperationString._In,
string.IsNullOrWhiteSpace(info.MenuIds))
.AddFieldKeyInfo(nameof(SYS_MENU.MENU_CODE), info.MenuCode, EnumCSharpPropertyType.STRING, DBOperationString._Equal,
string.IsNullOrWhiteSpace(info.MenuCode));
return whereList;
}
#endregion
}
}