public override void DoEdit(bool updateAllFields = false) { if (FC.ContainsKey("Entity.RoleCode")) { FC.Remove("Entity.RoleCode"); } base.DoEdit(updateAllFields); }
public override IOrderedQueryable <ship_pop_sum_View> GetSearchQuery() { if (FC.ContainsKey("Ids[]")) { var query = DC.Set <ship_pop_sum>() .Select(x => new ship_pop_sum_View { ID = x.ID, OrderDate = x.OrderDate, OrderRemark = x.OrderRemark, }); return(query.OrderBy(x => x.OrderDate)); } else { var query = DC.Set <inventoryOut>() .Include("Inv.Location.Area") .Include("sp") .DPWhere(LoginUserInfo?.DataPrivileges, x => x.Inv.Location.Area.DCID) .CheckBetween(Searcher.OrderDate?.GetStartTime(), Searcher.OrderDate?.GetEndTime(), x => x.sp.Ship_Pop_Sum.OrderDate) .CheckEqual(Searcher.Status, x => x.sp.Status) .CheckEqual(Searcher.DCID, x => x.Inv.Location.Area.DCID) .CheckEqual(Searcher.PopID, x => x.sp.PopID) .GroupBy(x => new { x.Inv.Location.Area.DC.Name, x.sp.Ship_Pop_SumID, x.sp.Ship_Pop_Sum.OrderDate, x.sp.Ship_Pop_Sum.OrderRemark, x.Inv.Location.Location, x.sp.Pop.PopName }) .Select(x => new ship_pop_sum_View { ID = x.Key.Ship_Pop_SumID.Value, DCName = x.Key.Name, OrderDate = x.Key.OrderDate, OrderRemark = x.Key.OrderRemark, PopName = x.Key.PopName, Location = x.Key.Location, PickQty = x.Sum(r => r.OutQty) }); return(query.OrderBy(x => x.Location)); } }
public override void DoEdit(bool updateAllFields = false) { if (Entity.IsInside == false) { if (Entity.Url != null && Entity.Url != "") { if (string.IsNullOrEmpty(Entity.Domain) == true) { if (Entity.Url.ToLower().StartsWith("http://") == false && Entity.Url.ToLower().StartsWith("https://") == false && Entity.Url.StartsWith("@") == false) { Entity.Url = "http://" + Entity.Url; } } else { if (Entity.Url.StartsWith("/") == false) { Entity.Url = "/" + Entity.Url; } } } } else { if (string.IsNullOrEmpty(SelectedModule) == false && Entity.FolderOnly == false) { var modules = Wtm.GlobaInfo.AllModule; var ndc = DC.ReCreate(); var actionsInDB = DC.Set <FrameworkMenu>().AsNoTracking().Where(x => x.ParentId == Entity.ID).ToList(); var mo = modules.Where(x => x.FullName == this.SelectedModule && x.IsApi == true).FirstOrDefault(); Entity.ModuleName = mo.ModuleName; Entity.ClassName = mo.FullName; Entity.MethodName = null; var otherActions = mo.Actions; int order = 1; Entity.Children = new List <FrameworkMenu>(); foreach (var action in otherActions) { if (SelectedActionIDs != null && SelectedActionIDs.Contains(action.MethodName)) { Guid aid = action.ID; var adb = actionsInDB.Where(x => x.Url.ToLower() == action.Url.ToLower()).FirstOrDefault(); if (adb != null) { aid = adb.ID; } FrameworkMenu menu = new FrameworkMenu(); menu.FolderOnly = false; menu.IsPublic = false; menu.Parent = Entity; menu.ShowOnMenu = false; menu.DisplayOrder = order++; menu.Privileges = new List <FunctionPrivilege>(); menu.IsInside = true; menu.Domain = Entity.Domain; menu.PageName = action.ActionDes?.Description ?? action.ActionName; menu.ModuleName = action.Module.ModuleName; menu.ActionName = action.ActionDes?.Description ?? action.ActionName; menu.Url = action.Url; menu.ClassName = action.Module.FullName; menu.MethodName = action.MethodName; menu.ID = aid; Entity.Children.Add(menu); } } } else { Entity.Children = null; Entity.Url = null; } } if (FC.ContainsKey("Entity.Children") == false) { FC.Add("Entity.Children", 0); } base.DoEdit(updateAllFields); List <Guid> guids = new List <Guid>(); guids.Add(Entity.ID); if (Entity.Children != null) { guids.AddRange(Entity.Children?.Select(x => x.ID).ToList()); } AddPrivilege(guids); }
public override async Task DoEditAsync(bool updateAllFields = false) { if (FC.ContainsKey("Entity.ITCode")) { FC.Remove("Entity.ITCode"); } using (var trans = DC.BeginTransaction()) { if (SelectedRolesCodes != null) { List <Guid> todelete = new List <Guid>(); todelete.AddRange(DC.Set <FrameworkUserRole>().AsNoTracking().Where(x => x.UserCode == Entity.ITCode).Select(x => x.ID)); foreach (var item in todelete) { DC.DeleteEntity(new FrameworkUserRole { ID = item }); } } if (SelectedGroupCodes != null) { List <Guid> todelete = new List <Guid>(); todelete.AddRange(DC.Set <FrameworkUserGroup>().AsNoTracking().Where(x => x.UserCode == Entity.ITCode).Select(x => x.ID)); foreach (var item in todelete) { DC.DeleteEntity(new FrameworkUserGroup { ID = item }); } } if (SelectedRolesCodes != null) { foreach (var rolecode in SelectedRolesCodes) { FrameworkUserRole r = new FrameworkUserRole { RoleCode = rolecode, UserCode = Entity.ITCode }; DC.AddEntity(r); } } if (SelectedGroupCodes != null) { foreach (var groupcode in SelectedGroupCodes) { FrameworkUserGroup g = new FrameworkUserGroup { GroupCode = groupcode, UserCode = Entity.ITCode }; DC.AddEntity(g); } } await base.DoEditAsync(updateAllFields); if (MSD.IsValid) { trans.Commit(); await Wtm.RemoveUserCache(Entity.ID.ToString()); } else { trans.Rollback(); } } }
private void DoEditPrepare(bool updateAllFields) { if (typeof(TModel).GetTypeInfo().IsSubclassOf(typeof(BasePoco))) { BasePoco ent = Entity as BasePoco; if (ent.UpdateTime == null) { ent.UpdateTime = DateTime.Now; } if (string.IsNullOrEmpty(ent.UpdateBy)) { ent.UpdateBy = LoginUserInfo?.ITCode; } } var pros = typeof(TModel).GetProperties(); #region 更新子表 foreach (var pro in pros) { //找到类型为List<xxx>的字段 if (pro.PropertyType.GenericTypeArguments.Count() > 0) { //获取xxx的类型 var ftype = pro.PropertyType.GenericTypeArguments.First(); //如果xxx继承自TopBasePoco if (ftype.IsSubclassOf(typeof(TopBasePoco))) { //界面传过来的子表数据 if (pro.GetValue(Entity) is IEnumerable <TopBasePoco> list && list.Count() > 0) { //获取外键字段名称 string fkname = DC.GetFKName <TModel>(pro.Name); PropertyInfo[] itemPros = ftype.GetProperties(); bool found = false; foreach (var newitem in list) { var subtype = newitem.GetType(); if (subtype.IsSubclassOf(typeof(BasePoco))) { BasePoco ent = newitem as BasePoco; if (ent.UpdateTime == null) { ent.UpdateTime = DateTime.Now; } if (string.IsNullOrEmpty(ent.UpdateBy)) { ent.UpdateBy = LoginUserInfo?.ITCode; } } //循环页面传过来的子表数据,将关联到TopBasePoco的字段设为null,并且把外键字段的值设定为主表ID foreach (var itempro in itemPros) { if (itempro.PropertyType.IsSubclassOf(typeof(TopBasePoco))) { itempro.SetValue(newitem, null); } if (!string.IsNullOrEmpty(fkname)) { if (itempro.Name.ToLower() == fkname.ToLower()) { itempro.SetValue(newitem, Entity.GetID()); found = true; } } } } //如果没有找到相应的外建字段,则可能是多对多的关系,或者做了特殊的设定,这种情况框架无法支持,直接退出本次循环 if (found == false) { continue; } TModel _entity = null; //打开新的数据库联接,获取数据库中的主表和子表数据 using (var ndc = DC.CreateNew()) { _entity = ndc.Set <TModel>().Include(pro.Name).AsNoTracking().CheckID(Entity.GetID()).FirstOrDefault(); } //比较子表原数据和新数据的区别 IEnumerable <TopBasePoco> toadd = null; IEnumerable <TopBasePoco> toremove = null; IEnumerable <TopBasePoco> data = _entity.GetType().GetProperty(pro.Name).GetValue(_entity) as IEnumerable <TopBasePoco>; Utils.CheckDifference(data, list, out toremove, out toadd); //设定子表应该更新的字段 List <string> setnames = new List <string>(); foreach (var field in FC.Keys) { if (field.StartsWith("Entity." + pro.Name + "[0].")) { string name = field.Replace("Entity." + pro.Name + "[0].", ""); setnames.Add(name); } } //前台传过来的数据 foreach (var newitem in list) { //数据库中的数据 foreach (var item in data) { //需要更新的数据 if (newitem.GetID().ToString() == item.GetID().ToString()) { dynamic i = newitem; var newitemType = item.GetType(); foreach (var itempro in itemPros) { if (!itempro.PropertyType.IsSubclassOf(typeof(TopBasePoco)) && (updateAllFields == true || setnames.Contains(itempro.Name))) { var notmapped = itempro.GetCustomAttribute <NotMappedAttribute>(); if (itempro.Name != "ID" && notmapped == null && itempro.PropertyType.IsList() == false) { DC.UpdateProperty(i, itempro.Name); } } } if (item.GetType().IsSubclassOf(typeof(BasePoco))) { DC.UpdateProperty(i, "UpdateTime"); DC.UpdateProperty(i, "UpdateBy"); } } } } //需要删除的数据 foreach (var item in toremove) { //如果是PersistPoco,则把IsValid设为false,并不进行物理删除 if (ftype.IsSubclassOf(typeof(PersistPoco))) { (item as PersistPoco).IsValid = false; (item as PersistPoco).UpdateTime = DateTime.Now; (item as PersistPoco).UpdateBy = LoginUserInfo?.ITCode; dynamic i = item; DC.UpdateEntity(i); } else { foreach (var itempro in itemPros) { if (itempro.PropertyType.IsSubclassOf(typeof(TopBasePoco))) { itempro.SetValue(item, null); } } dynamic i = item; DC.DeleteEntity(i); } } //需要添加的数据 foreach (var item in toadd) { if (item.GetType().IsSubclassOf(typeof(BasePoco))) { BasePoco ent = item as BasePoco; if (ent.CreateTime == null) { ent.CreateTime = DateTime.Now; } if (string.IsNullOrEmpty(ent.CreateBy)) { ent.CreateBy = LoginUserInfo?.ITCode; } } DC.AddEntity(item); } } else if (FC.Keys.Contains("Entity." + pro.Name + ".DONOTUSECLEAR") || (FC.ContainsKey("Entity." + pro.Name) && pro.GetValue(Entity) is IEnumerable <TopBasePoco> list2 && list2?.Count() == 0)) { PropertyInfo[] itemPros = ftype.GetProperties(); var _entity = DC.Set <TModel>().Include(pro.Name).AsNoTracking().CheckID(Entity.GetID()).FirstOrDefault(); if (_entity != null) { IEnumerable <TopBasePoco> removeData = _entity.GetType().GetProperty(pro.Name).GetValue(_entity) as IEnumerable <TopBasePoco>; //如果是PersistPoco,则把IsValid设为false,并不进行物理删除 if (removeData is IEnumerable <PersistPoco> removePersistPocoData) { foreach (var item in removePersistPocoData) { (item as PersistPoco).IsValid = false; (item as PersistPoco).UpdateTime = DateTime.Now; (item as PersistPoco).UpdateBy = LoginUserInfo?.ITCode; dynamic i = item; DC.UpdateEntity(i); } } else { foreach (var item in removeData) { foreach (var itempro in itemPros) { if (itempro.PropertyType.IsSubclassOf(typeof(TopBasePoco))) { itempro.SetValue(item, null); } } dynamic i = item; DC.DeleteEntity(i); } } } } } } } #endregion if (updateAllFields == false) { foreach (var field in FC.Keys) { if (field.StartsWith("Entity.") && !field.Contains("[")) { string name = field.Replace("Entity.", ""); try { DC.UpdateProperty(Entity, name); } catch (Exception ea) { } } } if (typeof(TModel).GetTypeInfo().IsSubclassOf(typeof(BasePoco))) { try { DC.UpdateProperty(Entity, "UpdateTime"); DC.UpdateProperty(Entity, "UpdateBy"); } catch (Exception) { } } } else { DC.UpdateEntity(Entity); } }
/// <summary> /// 批量修改,默认对Ids中包含的数据进行修改,子类如果有特殊判断应重载本函数 /// </summary> /// <returns>true代表成功,false代表失败</returns> public virtual bool DoBatchEdit() { //获取批量修改VM的所有属性 var pros = LinkedVM.GetType().GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.DeclaredOnly); bool rv = true; List <Guid> idsData = new List <Guid>(Ids); //找到对应的BaseCRUDVM,并初始化 var vmtype = this.GetType().Assembly.GetExportedTypes().Where(x => x.IsSubclassOf(typeof(BaseCRUDVM <TModel>))).FirstOrDefault(); IBaseCRUDVM <TModel> vm = null; if (vmtype != null) { vm = vmtype.GetConstructor(System.Type.EmptyTypes).Invoke(null) as IBaseCRUDVM <TModel>; vm.CopyContext(this); } //循环所有数据 for (int i = 0; i < idsData.Count; i++) { try { //如果找不到对应数据,则输出错误 TModel entity = null; entity = DC.Set <TModel>().Find(idsData[i]); if (vm != null) { vm.SetEntity(entity); } if (entity == null) { ErrorMessage.Add(idsData[i], "数据不存在"); rv = false; break; } //如果能找到,则循环LinkedVM中的属性,给entity中同名属性赋值 foreach (var pro in pros) { var proToSet = entity.GetType().GetProperty(pro.Name); var val = FC.ContainsKey("LinkedVM." + pro.Name) ? FC["LinkedVM." + pro.Name] : null; if (proToSet != null && val != null) { var hasvalue = false; if (val is StringValues sv && StringValues.IsNullOrEmpty(sv) == false) { hasvalue = true; } if (hasvalue) { proToSet.SetValue(entity, pro.GetValue(LinkedVM)); } } } //如果有对应的BaseCRUDVM则使用其进行数据验证 if (vm != null) { vm.Validate(); var errors = vm.MSD; if (errors != null && errors.Count > 0) { var error = ""; foreach (var key in errors.Keys) { if (errors[key].Count > 0) { error += errors[key].Select(x => x.ErrorMessage).ToSpratedString(); } } if (error != "") { ErrorMessage.Add(idsData[i], error); rv = false; break; } } } if (typeof(TModel).IsSubclassOf(typeof(BasePoco))) { BasePoco ent = entity as BasePoco; if (ent.CreateTime == null) { ent.CreateTime = DateTime.Now; } if (string.IsNullOrEmpty(ent.CreateBy)) { ent.CreateBy = LoginUserInfo?.ITCode; } } DC.UpdateEntity(entity); } catch (Exception e) { SetExceptionMessage(e, idsData[i]); rv = false; } } //进行数据库的修改操作 if (rv == true) { try { DC.SaveChanges(); } catch (Exception e) { SetExceptionMessage(e, null); rv = false; } } //如果有错误,输出错误信息 if (rv == false) { if (ErrorMessage.Count > 0) { foreach (var id in idsData) { if (!ErrorMessage.ContainsKey(id)) { ErrorMessage.Add(id, "已回滚"); } } } ListVM.DoSearch(); foreach (var item in ListVM.GetEntityList()) { item.BatchError = ErrorMessage.Where(x => x.Key == item.ID).Select(x => x.Value).FirstOrDefault(); } } return(rv); }
public override void DoEdit(bool updateAllFields = false) { List <Guid> guids = new List <Guid>(); if (Entity.IsInside == false) { if (Entity.Url != null && Entity.Url != "") { if (Entity.DomainId == null) { if (Entity.Url.ToLower().StartsWith("http://") == false && Entity.Url.ToLower().StartsWith("https://") == false && Entity.Url.StartsWith("@") == false) { Entity.Url = "http://" + Entity.Url; } } else { if (Entity.Url.StartsWith("/") == false) { Entity.Url = "/" + Entity.Url; } } } } else { if (string.IsNullOrEmpty(SelectedModule) == true && Entity.FolderOnly == false) { MSD.AddModelError("SelectedModule", Program._localizer["SelectModule"]); return; } if (string.IsNullOrEmpty(SelectedModule) == false && Entity.FolderOnly == false) { var modules = GlobalServices.GetRequiredService <GlobalData>().AllModule; var ndc = DC.ReCreate(); var actionsInDB = DC.Set <FrameworkMenu>().AsNoTracking().Where(x => x.ParentId == Entity.ID).ToList(); var mo = modules.Where(x => x.FullName == this.SelectedModule && x.IsApi == true).FirstOrDefault(); Entity.ModuleName = mo.ModuleName; Entity.ClassName = mo.FullName; Entity.MethodName = null; var otherActions = mo.Actions; int order = 1; Entity.Children = new List <FrameworkMenu>(); foreach (var action in otherActions) { if (SelectedActionIDs != null && SelectedActionIDs.Contains(action.MethodName)) { Guid aid = action.ID; var adb = actionsInDB.Where(x => x.Url.ToLower() == action.Url.ToLower()).FirstOrDefault(); if (adb != null) { aid = adb.ID; } else { guids.Add(aid); } FrameworkMenu menu = new FrameworkMenu(); menu.FolderOnly = false; menu.IsPublic = false; menu.Parent = Entity; menu.ShowOnMenu = false; menu.DisplayOrder = order++; menu.Privileges = new List <FunctionPrivilege>(); menu.CreateBy = LoginUserInfo.ITCode; menu.CreateTime = DateTime.Now; menu.IsInside = true; menu.DomainId = Entity.DomainId; menu.PageName = action.ActionDes?.Description ?? action.ActionName; menu.ModuleName = action.Module.ModuleName; menu.ActionName = action.ActionDes?.Description ?? action.ActionName; menu.Url = action.Url; menu.ClassName = action.Module.FullName; menu.MethodName = action.MethodName; menu.ID = aid; Entity.Children.Add(menu); } } } else { Entity.Children = null; Entity.Url = null; } } if (FC.ContainsKey("Entity.Children") == false) { FC.Add("Entity.Children", 0); } base.DoEdit(updateAllFields); AddPrivilege(guids); }
public override void DoEdit(bool updateAllFields = false) { Entity.Icon = $"{IconFont} {IconFontItem}"; FC.Add("Entity.Icon", " "); if (Entity.IsInside == false) { if (Entity.Url != null && Entity.Url != "" && Entity.Url.StartsWith("/") == false) { if (Entity.Url.ToLower().StartsWith("http://") == false && Entity.Url.ToLower().StartsWith("https://") == false) { Entity.Url = "http://" + Entity.Url; } } } else { if (string.IsNullOrEmpty(SelectedModule) == false && Entity.FolderOnly == false) { var modules = Wtm.GlobaInfo.AllModule; List <SimpleAction> otherActions = null; var mainAction = modules.Where(x => x.FullName == this.SelectedModule).SelectMany(x => x.Actions).Where(x => x.MethodName == "Index").FirstOrDefault(); if (mainAction == null && Entity.ShowOnMenu == true) { MSD.AddModelError("Entity.ModuleId", Localizer["_Admin.NoIndexInModule"]); return; } if (mainAction == null && Entity.ShowOnMenu == false) { var model = modules.Where(x => x.FullName == this.SelectedModule) .FirstOrDefault(); mainAction = new SimpleAction(); mainAction.Module = model; mainAction.MethodName = null; } Entity.Url = mainAction.Url; Entity.ModuleName = mainAction.Module.ModuleName; Entity.ActionName = mainAction.ActionDes?.Description ?? mainAction.ActionName; Entity.ClassName = mainAction.Module.FullName; Entity.MethodName = null; otherActions = modules.Where(x => x.FullName == this.SelectedModule) .SelectMany(x => x.Actions) .Where(x => x.MethodName != "Index") .ToList(); var actionsInDB = DC.Set <FrameworkMenu>().AsNoTracking().Where(x => x.ParentId == Entity.ID).ToList(); int order = 1; Entity.Children = new List <FrameworkMenu>(); foreach (var action in otherActions) { if (SelectedActionIDs != null && SelectedActionIDs.Contains(action.Url)) { Guid aid = action.ID; var adb = actionsInDB.Where(x => x.Url.ToLower() == action.Url.ToLower()).FirstOrDefault(); if (adb != null) { aid = adb.ID; } var menu = new FrameworkMenu(); menu.FolderOnly = false; menu.IsPublic = false; menu.Parent = Entity; menu.ShowOnMenu = false; menu.DisplayOrder = order++; menu.Privileges = new List <FunctionPrivilege>(); menu.IsInside = true; menu.Domain = Entity.Domain; menu.PageName = action.ActionDes?.Description ?? action.ActionName; menu.ModuleName = action.Module.ModuleName; menu.ActionName = action.ActionDes?.Description ?? action.ActionName; menu.ClassName = action.Module.FullName; menu.MethodName = action.MethodName; menu.Url = action.Url; menu.ID = aid; Entity.Children.Add(menu); } } } else { Entity.Children = null; Entity.Url = null; } } if (FC.ContainsKey("Entity.Children") == false) { FC.Add("Entity.Children", 0); } FC.Add("Entity.ModuleName", 0); base.DoEdit(); List <Guid> guids = new List <Guid>(); guids.Add(Entity.ID); if (Entity.Children != null) { guids.AddRange(Entity.Children?.Select(x => x.ID).ToList()); } AddPrivilege(guids); }