using System; using System.Collections.Generic; using System.Linq; using System.Text; using Dao; using Domain; namespace Service.Implement { public class SysHotelGroupManager : GenericManagerBase, ISysHotelGroupManager { public ISysHotelRepository SysHotelRepository { get; set; } public ISysRoleRepository SysRoleRepository { get; set; } public ISysUserRepository SysUserRepository { get; set; } public override object Save(SysHotelGroup entity) { entity.Last_Modified_Time = DateTime.Now;//标识有更新 return base.Save(entity); } public override void Update(SysHotelGroup entity) { entity.Last_Modified_Time = DateTime.Now;//标识有更新 base.Update(entity); } public override void SaveOrUpdate(SysHotelGroup entity) { entity.Last_Modified_Time = DateTime.Now;//标识有更新 base.SaveOrUpdate(entity); } public IList GetGroupList(SysHotelGroup group) { return ((ISysHotelGroupRepository)CurrentRepository).GetGroupList(group); } public override void Delete(object id) { SysHotelGroup group = CurrentRepository.Get(id); if (group != null) { if (SysHotelRepository.GetByGroup(group).Count() > 0) { throw new ApplicationException("分组【" + group.Name + "】已分配有酒店,不能删除!"); } if (SysRoleRepository.LoadAll().Where(r => r.SysHotelGroup == group).ToList().Count > 0) { throw new ApplicationException("分组【" + group.Name + "】已分配有组角色,不能删除!"); } if (SysUserRepository.LoadAll().Where(r => r.SysHotelGroup == group).ToList().Count > 0) { throw new ApplicationException("分组【" + group.Name + "】已分配有组用户,不能删除!"); } } ((ISysHotelGroupRepository)CurrentRepository).Delete(id); } public IList CreateGroupTree(SysHotelGroup group) { IList groupTree = new List(); groupTree.Add(new { id = group.ID, text = group.Name, iconCls = "tree-node-no-icon", children = BuildGroupTree(CurrentRepository.LoadAll().ToList(), group) }); return groupTree; } public object CreateGroupTree2(SysHotelGroup group) { if (group == null) { return null; } var groupMenu = ((ISysHotelGroupRepository)CurrentRepository).GetGroupMenu(group.ID); return BuildGroupTree(groupMenu); } public IList CreateGroupTreeWithHotel(SysHotelGroup group, IList checkedHotels) { var currentSysHotelGroups = CurrentRepository.LoadAll().ToList(); return BuildGroupTreeWithHotel(currentSysHotelGroups, group, checkedHotels); } /// /// 按层级构造分组名称 /// 例如: /// BLW-1栋-1层 /// /// /// public string BuildGroupName(SysHotelGroup group) { string name = ""; while (group != null) { if (name == "") { name = group.Name; } else { name = group.Name + "-" + name; } group = group.Parent; } return name; } #region Private Methods /// /// 构造楼层树,用于 easyui-tree, easyui-combotree /// /// /// /// private IList BuildGroupTree(IList groups, SysHotelGroup parent) { IList groupTree = new List(); IList subGroups = groups.Where(r => r.Parent != null && r.Parent.ID == parent.ID).OrderBy(o => o.Sort).ToList(); foreach (SysHotelGroup group in subGroups) { IList children = BuildGroupTree(groups, group); if (children.Count == 0) { groupTree.Add(new { id = group.ID, text = group.Name, iconCls = "tree-node-no-icon" }); } else { groupTree.Add(new { id = group.ID, text = group.Name, iconCls = "tree-node-no-icon", children = children }); } } return groupTree; } private object BuildGroupTree(GroupMenu groupMenu) { if (groupMenu == null) { return null; } if (groupMenu.SubGroupMenus.Count <= 0) { //return new { id = groupMenu.ID, text = groupMenu.Name, iconCls = "tree-node-no-icon" }; return new { ID = groupMenu.ID, Name = groupMenu.Name, Sort = groupMenu.Sort, iconCls = "tree-node-no-icon" }; } IList children = new List(); foreach (GroupMenu subGroupMenu in groupMenu.SubGroupMenus) { var subGroupTree = BuildGroupTree(subGroupMenu); if (subGroupTree != null) { children.Add(subGroupTree); } } //return new { id = groupMenu.ID, text = groupMenu.Name, iconCls = "tree-node-no-icon", children = children }; return new { ID = groupMenu.ID, Name = groupMenu.Name, Sort = groupMenu.Sort, children = children, iconCls = "tree-node-no-icon" }; } /// /// 构造带房号的 easyui-tree 数据格式的分组树,房号附在其所属的结点之下 /// 如果分支上的房号包含在 checkedHosts 则将其选中 /// /// /// /// /// private IList BuildGroupTreeWithHotel(IList groups, SysHotelGroup parent, IList checkedHotels) { IList groupTree = new List(); IList subGroups = groups.Where(r => r.Parent == parent).OrderBy(o => o.Sort).ToList(); foreach (SysHotelGroup group in subGroups) { IList children = BuildGroupTreeWithHotel(groups, group, checkedHotels); if (children.Count != 0) { groupTree.Add(new { id = group.ID, text = group.Name, iconCls = "tree-node-no-icon", children = children, attributes = new { isHotel = false } }); } else { groupTree.Add(new { id = group.ID, text = group.Name, iconCls = "tree-node-no-icon", attributes = new { isHotel = false } }); } } var hotels = SysHotelRepository.GetByGroup(parent); foreach (SysHotel hotel in hotels) { if (checkedHotels != null && checkedHotels.Contains(hotel)) { groupTree.Add(new { id = hotel.ID, text = hotel.Code + "-" + hotel.Name, iconCls = "tree-node-no-icon", @checked = true, attributes = new { isHotel = true } }); } else { groupTree.Add(new { id = hotel.ID, text = hotel.Code + "-" + hotel.Name, iconCls = "tree-node-no-icon", attributes = new { isHotel = true } }); } } return groupTree; } #endregion } }