public OpResult UpdateData() { ProductPublishVer ver = null; try { using (TransactionScope tran = new TransactionScope()) { ver = PublishVerService.UpdatePublish(0, 1, CurrentUser.FullName); if (ver.ProductModuleVer != null) { var menus = new List <SysMenus>(); var limits = new List <SysLimits>(); ver.ProductModuleVer.ProductMenuLimits.Each(o => { switch (o.Type) { case 1: menus.Add(new SysMenus() { MenuId = o.MenuId, PMenuId = o.PMenuId, SortOrder = o.SortOrder, Status = o.Status, Title = o.Title, URL = o.Url }); break; case 3: limits.Add(new SysLimits() { LimitId = o.MenuId, PLimitId = o.PMenuId, SortOrder = o.SortOrder, Status = o.Status, Title = o.Title }); break; default: break; } }); if (menus.Any()) { var list = MenuRepository.GetQuery().ToList(); MenuRepository.RemoveRange(list); MenuRepository.AddRange(menus); } if (limits.Any()) { LimitRepository.RemoveRange(LimitRepository.GetQuery().ToList()); LimitRepository.AddRange(limits); } } if (ver.ProductRoleVer != null) { var roles = new List <SysRoles>(); ver.ProductRoleVer.ProductRoles.Each(o => { var role = new SysRoles(); role.CreateDT = DateTime.Now; role.CreateUID = CurrentUser.UID; role.RoleId = o.RoleId.GetValueOrDefault(); role.Title = o.Title; role.Limitids = o.Limitids; role.Type = 0; role.Status = true; role.UpdateDT = role.CreateDT; role.UpdateUID = role.CreateUID; role.SysRoleDatas = new List <SysRoleData>(); o.ProductRoleDatas.Each(i => { role.SysRoleDatas.Add(new SysRoleData() { HasSelected = i.HasSelected, MenuId = i.MenuId, PMenuId = i.PMenuId, SortOrder = i.SortOrder }); }); roles.Add(role); }); if (roles.Any()) { var list = RoleRepository.GetQuery(o => o.Type == 0).Include(o => o.SysRoleDatas).ToList(); roles.Each(o => { var r = list.FirstOrDefault(i => i.RoleId == o.RoleId); if (r != null) { o.DeptId = r.DeptId; if (!r.Memo.IsNullOrEmpty()) { o.Memo = r.Memo; } o.Status = r.Status; o.CreateDT = r.CreateDT; o.CreateUID = r.CreateUID; } }); RoleDataRepository.RemoveRange(list.SelectMany(o => o.SysRoleDatas).ToList()); RoleRepository.RemoveRange(list); RoleRepository.AddRange(roles); } } if (ver.ProductDictionaryVer != null) { var dicts = new List <SysDataDictionary>(); ver.ProductDictionaryVer.ProductDictionaryDatas.Each(o => { dicts.Add(new SysDataDictionary() { CreateDT = DateTime.Now, CreateUID = CurrentUser.UID, Depth = o.Depth, DicPSN = o.DicPSN, DicSN = o.DicSN, HasChild = o.HasChild, SortOrder = o.SortOrder, Status = Convert.ToBoolean(o.Status), Title = o.Title }); }); if (dicts.Any()) { var list = DictRepository.GetQuery().ToList(); DictRepository.RemoveRange(list); DictRepository.AddRange(dicts); } } var sqls = new Dictionary <int, string>(); var db = new DBFramework.DBHelper(); if (ver.ProductDataVer != null) { ver.ProductDataVer.ProductDataSqls.OrderBy(o => o.RunSort).Each(o => { sqls[o.MenuId] = o.RunSql; }); foreach (var de in sqls) { try { db.ExecuteNonQueryText(de.Value, null); } catch (Exception ex) { throw new Exception("更新初始化数据失败!MenuId:" + de.Key + ";" + LogEngine.ToInnerException(ex).Message); } } sqls.Clear(); } ver.ProductPublishSqls.OrderBy(o => o.RunSort).Each(o => { sqls[o.MenuId] = o.RunSql; }); foreach (var de in sqls) { try { db.ExecuteNonQueryText(de.Value, null); } catch (Exception ex) { throw new Exception("历史数据处理失败!MenuId:" + de.Key + ";" + LogEngine.ToInnerException(ex).Message); } } tran.Complete(); } }catch (Exception e) { LogEngine.WriteError(e); if (ver != null) { PublishVerService.AddUpdateLog(ver.PublishId, 0, false, LogEngine.ToInnerException(e).Message, CurrentUser.FullName); } return(OpResult.Fail()); } return(OpResult.Success()); }