您的位置:首页 > 运维架构 > 网站架构

Mvc.Ext.Net项目架构(二)

2015-06-29 15:07 671 查看
  不好意思我的语文是体育老师教的所以.....。

  我每次需要和数据库交互的时候需要先写一个接口在IDAL里面,然后在DAL实现代码并做一些逻辑处理,web层直接调用BLL中的方法来实现数据的持久化操作。整个系统对于某些表的实体映射是有的但是在最主要的档案数据和文件数据中就没有映射,因为这个表的字段是可以通过项目人员来自行配置的也就是说我只需要设置下面这张表

CREATE TABLE [dbo].[Arch_Fields](
[Id] [int] IDENTITY(1,1) NOT NULL,
[FId] [int] NOT NULL,
[FieldName] [nvarchar](50) NOT NULL,
[FieldCName] [nvarchar](80) NOT NULL,
[FieldType] [tinyint] NULL,
[IsMust] [bit] NULL,
[IsPhyFld] [bit] NULL,
[IsSystem] [bit] NULL,
[DisplayOrder] [int] NULL,
[AutoFormula] [ntext] NULL,
[Format] [varchar](50) NULL,
[FieldTop] [int] NULL,
[FieldLeft] [int] NULL,
[FieldHeight] [int] NULL,
[FieldWidth] [int] NULL,
[FieldLength] [int] NULL,
[ListVisible] [bit] NULL,
[ListOrder] [smallint] NULL,
[ListWidth] [smallint] NULL,
[VouchVisible] [bit] NULL,
[RefId] [int] NULL,
[IsModify] [bit] NULL,
[SearchVisible] [bit] NULL,
[SearchOrder] [smallint] NULL,
[SearchIsSection] [bit] NULL,
[SearchIsFuzzy] [bit] NULL,
[IsMultiLine] [bit] NULL,
[ToolTip] [text] NULL,
[FieldMode] [tinyint] NULL,
[IsBatch] [bit] NULL,
[AutoFormulaIndex] [int] NULL,
[CaptionWidth] [int] NULL,
[IsCarryon] [bit] NULL,
[IsImpFormula] [bit] NULL,
[IsAllField] [bit] NULL,
[IsExport] [bit] NULL,
[ExportFormat] [varchar](50) NULL,
[FillColor] [smallint] NULL,
[GroupId] [int] NULL,
[IsImpExcelFormula] [bit] NULL,
[LabelWidth] [int] NULL,
CONSTRAINT [PK_Arch_FieldsDK] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'字段编辑方式0常规1缺省值2固定值' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Arch_Fields', @level2type=N'COLUMN',@level2name=N'FieldMode'
GO

ALTER TABLE [dbo].[Arch_Fields] ADD  CONSTRAINT [DF_Arch_Fields_LabelWidth]  DEFAULT ((0)) FOR [LabelWidth]
GO


我的关键数据都是和目录有关系,所以点击目录的时候会自行去查找项目人员自行配置的列表数据然后显示数据,或者选择数据时增删改数据,下图为一个实例

public ActionResult GetChildNode(string node, string menuName)
{
NodeCollection nodes = new NodeCollection();
try
{
int id = 0;
//获取目录Id信息
if (node.StartsWith("Sys"))
try
{
id = Int32.Parse(node.Substring(4));
}
catch (Exception ex)
{
logs.Error("186行", ex);
}

else if (node.StartsWith("Fol"))
try
{
id = int.Parse(node.Split('_')[1]);
}
catch (Exception ex)
{
logs.Error("196行", ex);
}
else
id = Int32.Parse(node);
switch (menuName)
{
// case "AcceptCenter":
case "PrepareFinishArchiveCenter":
case "ArchivesManageCenter":
case "ArchiveUseCenter":
case "ArchiveTidyCenter":
Arch_FolderService _Arch_FolderService = new Arch_FolderService(Session["SubsName"].ToString());
IList<Sys_Menu> lstMenu = new List<Sys_Menu>();
IList<Arch_Folder> lstData = null;
DataTable dtData = null;
bool isAdmin = true;
string folderAuth = "";
int uId = Convert.ToInt32(CookiesDataService.GetPropertyValueOfSys_User("UId"));
//查询当前目录的自动分类串
Folder_QueryService _Folder_QueryService = new Folder_QueryService(Session["SubsName"].ToString());
IList<Folder_Query> fldQuery = null;
BaseService baseservice = new BaseService(Session["SubsName"].ToString());

//查看当前用户是否有权限访问此目录
try
{
if (!Convert.ToBoolean(CookiesDataService.GetPropertyValueOfSys_User("IsAdmin")))
{
isAdmin = false;
folderAuth = UserAuth.GetOperateAuth("FolderAuth");
}
}
catch (Exception ex)
{
logs.Error("CookiesDataService.GetValue(\"Sys_User\", \"IsAdmin\"),大约210行,cookies超时:", ex);
return RedirectToAction("Login", "Login");
}

//根目录数据
if (id == -1)
{
lstData = _Arch_FolderService.GetFolderDataByFolderCode(menuName, folderAuth, isAdmin).OrderBy(f => f.DisplayOrder).ToList();

foreach (Arch_Folder item in lstData)
{
Sys_Menu _Sys_Menu = new Sys_Menu();
_Sys_Menu.MenuId = item.FId;
_Sys_Menu.MenuText = item.FolderName;
_Sys_Menu.MenuName = "Name" + item.FId.ToString();
//判断当前节点是否有子节点
_Sys_Menu.IsChild = !item.Ischild;   //当前目录是否有子节点
if (_Arch_FolderService.GetFolderDataByParentID(item.FId).Where(f => f.FolderType == (int)FolderType.QueryData && f.UserId == uId).Count() > 0)
_Sys_Menu.IsChild = false;

//当前目录是否有自动分类
fldQuery = _Folder_QueryService.GetFolder_QueryData(item.FId, uId).Where(f => !string.IsNullOrEmpty(f.QueryStr)).ToList();
if (fldQuery != null && fldQuery.Count() > 0)
_Sys_Menu.IsChild = false;

lstMenu.Add(_Sys_Menu);
}
}
else if (node.StartsWith("Sys"))//系统节点数据
{
lstData = _Arch_FolderService.GetFolderDataByParentID(id);
foreach (Arch_Folder item in lstData)
{
Sys_Menu _Sys_Menu = new Sys_Menu();
_Sys_Menu.MenuId = item.FId;
_Sys_Menu.MenuText = item.FolderName;
_Sys_Menu.MenuName = "Name" + item.FId.ToString();
lstMenu.Add(_Sys_Menu);
}
}
else//子节点数据包括自动分类、节点目录、自动分类目录
{

//自动分类数据
try
{
fldQuery = _Folder_QueryService.GetFolder_QueryData(id, Convert.ToInt32(CookiesDataService.GetPropertyValueOfSys_User("UId")));
}
catch (Exception ex)
{
logs.Error("大约cookies超时:大约277行", ex);
}

Folder_Query _Folder_Query = null;
string queryStr = "";//分组字段信息
//当前节点的父节点条件
string currNodeParentWhere = Session["SelectedNodeGroup"].ToString();
//当前节点的自动分类条件
string currNodeWhereStr = node.Split('_')[2];
try
{
_Folder_Query = fldQuery.Where(f => f.IsDefault).ToList()[0];
queryStr = _Folder_Query.QueryStr;
}
catch (Exception ex)
{
logs.Info("获取自定义分类设置数据问题:", ex);
}

if (queryStr != "")
{
string[] aryGroupField = queryStr.Split(',');

DataTable dt = baseservice.Query("Select TableName,Filter,TypeCode From Arch_Folder Where FId=" + id);
string currTableName = dt.Rows[0]["TableName"].ToString();
string filter = dt.Rows[0]["Filter"].ToString();
string typeCode = dt.Rows[0]["TypeCode"].ToString();
//分组数据源
string vSource = @"Select * From " + currTableName + " Where Status=0 And TypeCode Like '%" + typeCode + "%'";
if (filter != "")
vSource += " And " + filter;
//设置只能查看当前个人所属的部门数据
if (!isAdmin)
{
string operateAuth = UserAuth.GetOperateAuth("OperateAuth");
bool deptAuth = AuthSeting("data_OrganizationAuth", operateAuth);
//如果权限中设置了数据受组织结构控制则用户只能查看本部门的数据
if (deptAuth)
vSource += " And DeptCode='" + CookiesDataService.GetPropertyValueOfSys_User("DeptCode") + "'";
}
//当前所选择的分类字段
string currentField = currNodeWhereStr.Split('=')[0];

//当前分组字段的下一个字段
string groupNextField = "";

if (currNodeWhereStr != "")
{
int indexField = Array.IndexOf(aryGroupField, currentField);
if (aryGroupField.Length > indexField)
groupNextField = aryGroupField[indexField + 1];
if (currNodeParentWhere.TrimStart().StartsWith("And"))
vSource += currNodeParentWhere;
else
vSource += " And " + currNodeParentWhere;
}
else
groupNextField = aryGroupField[0];
//获取下一个分组的数据信息
dtData = _Arch_FolderService.InvokingProcedure(vSource, groupNextField, groupNextField, groupNextField);
if (dtData != null)
{
foreach (DataRow item in dtData.Rows)
{
Sys_Menu _Sys_Menu = new Sys_Menu();
_Sys_Menu.MenuId = id;
_Sys_Menu.MenuText = item[groupNextField].ToString() == "" ? "空值" : item[groupNextField].ToString();
_Sys_Menu.MenuName = "Name" + item[groupNextField];
_Sys_Menu.CurrGroupChar = groupNextField + "='" + item[groupNextField] + "'";
_Sys_Menu.GroupChar = queryStr;
if (queryStr.EndsWith(groupNextField))
_Sys_Menu.IsChild = true;
lstMenu.Add(_Sys_Menu);
}
}
}

if (string.IsNullOrEmpty(currNodeWhereStr))
{
//节点目录数据
if (isAdmin)
lstData = _Arch_FolderService.GetFolderDataByParentID(id).OrderBy(o => o.DisplayOrder).ToList();
else
lstData = _Arch_FolderService.GetFolderDataByParentID(id, folderAuth, uId).OrderBy(o => o.DisplayOrder).ToList();

//把当前数据加入节点菜单数据中
foreach (Arch_Folder folder in lstData)
{

Sys_Menu _Sys_Menu = new Sys_Menu();
_Sys_Menu.MenuId = folder.FId;
_Sys_Menu.FolderType = folder.FolderType;
_Sys_Menu.MenuText = folder.FolderName;
// _Sys_Menu.IsChild = false;
//if (_Arch_FolderService.GetFolderDataByParentID(folder.FId).Count() <= 0)
_Sys_Menu.IsChild = !folder.Ischild;
//查询目录没有子节点
if (_Arch_FolderService.GetFolderDataByParentID(folder.FId).Where(f => f.FolderType == (int)FolderType.QueryData && f.UserId == uId).Count() > 0)
_Sys_Menu.IsChild = false;
else
_Sys_Menu.IsChild = true;
//没有自动分类的数据没有子节点
fldQuery = _Folder_QueryService.GetFolder_QueryData(folder.FId, uId);
if (fldQuery != null && fldQuery.Count() > 0)
_Sys_Menu.IsChild = false;
lstMenu.Add(_Sys_Menu);
}
}
}
if (lstMenu != null)
{
foreach (Sys_Menu item in lstMenu)
{
Node asyncNode = new Node();
if (item.FolderType == (int)FolderType.QueryData)
{
asyncNode.Icon = Icon.MagnifierZoomIn;
asyncNode.Text = "<span style='font-size:12px;font-color:blue;'>" + item.MenuText + "</span>";
}
else
asyncNode.Text = "<span style='font-size:12px'>" + item.MenuText + "</span>";
string groupChar = item.CurrGroupChar == "" ? "0" : item.CurrGroupChar;
asyncNode.NodeID = "Fol_" + item.MenuId.ToString() + "_" + groupChar + "_" + Guid.NewGuid().ToString();
asyncNode.Leaf = item.IsChild;
nodes.Add(asyncNode);
}
}
break;
default:
IList<Sys_Menu> lstSys_Menu = _Sys_MenuService.GetMenuByParentID(id, "").ToList();

foreach (Sys_Menu item in lstSys_Menu)
{
IList<Sys_Menu> parentNode = _Sys_MenuService.GetMenuByMenuID(item.ParentId);

Node asyncNode = new Node();
asyncNode.Text = "<span style='font-size:12px'>" + item.MenuText + "</span>";

asyncNode.NodeID = "Sys_" + item.MenuId.ToString();
if (_Sys_MenuService.GetMenuByParentID(item.MenuId, "").ToList().Count() <= 0)
asyncNode.Leaf = true;
nodes.Add(asyncNode);

}
break;
}

}
catch (Exception ex)
{
logs.Error("获取子节点数据错误:" + ex.Message + "," + ex);
}
return this.Store(nodes);
}


View Code
不好意思我的代码太乱,让各位大虾见笑了,如果有好的意见请多多指点。未完待续..求大虾能对我的框架不管是后台和前段都能给我提出宝贵的意见,再次先谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: