public EnterpriseSyncDto GetEnterpriseForSync(string enterpriseId) { using (var db = new BCEnterpriseContext()) { var tempData = (from ep in db.Enterprises where ep.EnterpriseID == enterpriseId join dp in db.Departments on ep.EnterpriseID equals dp.EnterpriseID into tempDP join user in db.FrontUsers on ep.EnterpriseID equals user.EnterpiseID into tempUser join rl in db.RFARoles on ep.EnterpriseID equals rl.OwnerID into tempRL select new { EnterpriseID = ep.EnterpriseID, Departments = ( from tdp in tempDP.DefaultIfEmpty() where !tdp.Deleted select tdp), FrontUsers = ( from tur in tempUser.DefaultIfEmpty() select new { tur.UserID, tur.Name, tur.DepartmentID, tur.Closed } ), UserRoles = ( from tul in tempRL.DefaultIfEmpty() join ur in db.UserRoles on tul.RoleID equals ur.RoleID into tempUR from tur in tempUR.DefaultIfEmpty() where tul.Available && (tur == null || !tur.Deleted) select new { RoleId = tul.RoleID, RoleName = tul.Name, Available = tul.Available, UserID = tur.UserID, Deleted = tur != null && tur.Deleted } ).Union( from tul in db.RFARoles where tul.OwnerID == null join ur in db.UserRoles on tul.RoleID equals ur.RoleID into tempUR from tur in tempUR.DefaultIfEmpty() join user in tempUser on tur.UserID equals user.UserID into tempUser2 from tuser in tempUser2.DefaultIfEmpty() where tul.Available && (tur == null || !tur.Deleted) && tuser != null select new { RoleId = tul.RoleID, RoleName = tul.Name, Available = tul.Available, UserID = tur.UserID, Deleted = tur != null && tur.Deleted } ) }).FirstOrDefault(); if (tempData == null) { return(new EnterpriseSyncDto()); } var result = new EnterpriseSyncDto { EnterpriseID = tempData.EnterpriseID, Departments = tempData.Departments.Select(obj => (DepartmentSyncDto)obj).ToArray(), FrontUsers = tempData.FrontUsers.Select(n => new FrontUserSyncDto { EnterpriseID = tempData.EnterpriseID, UserID = n.UserID, Name = n.Name, Closed = n.Closed, DepartmentID = n.DepartmentID }).ToArray(), UserRoles = tempData.UserRoles.Select(n => new UserRoleSyncDto { EnterpriseID = tempData.EnterpriseID, UserID = n.UserID, RoleID = n.RoleId, RoleName = n.RoleName, Deleted = n.Deleted || !n.Available }).ToArray() }; return(result); } }
public EnterpriseSyncDto GetEnterpriseForSync(string enterpriseID, string userID, string deviceID) { using (var db = new BCEnterpriseContext()) { // 同步表中无此用户和设备ID时,创建此记录并将Organization数据初始化发送给APP if (null == db.SyncStates.FirstOrDefault(o => (o.UserID == userID) && (o.DeviceID == deviceID) && ((o.ActionType == (byte)TypeEnum.User) || (o.ActionType == (byte)TypeEnum.Role) || (o.ActionType == (byte)TypeEnum.Department)))) { var syncDepartment = new SyncState() { ActionType = (byte)TypeEnum.Department, DeviceID = deviceID, UserID = userID }; var syncUser = new SyncState() { ActionType = (byte)TypeEnum.User, DeviceID = deviceID, UserID = userID }; var syncRole = new SyncState() { ActionType = (byte)TypeEnum.Role, DeviceID = deviceID, UserID = userID }; AddSyncState(syncDepartment, syncUser, syncRole); return(GetEnterpriseForSync(enterpriseID)); } var tempData = (from ep in db.Enterprises where ep.EnterpriseID == enterpriseID join dp in db.Departments on ep.EnterpriseID equals dp.EnterpriseID into tempDP join user in db.FrontUsers on ep.EnterpriseID equals user.EnterpiseID into tempUser join rl in db.RFARoles on ep.EnterpriseID equals rl.OwnerID into tempRL select new { EnterpriseID = ep.EnterpriseID, Departments = ( from tdp in tempDP.DefaultIfEmpty() //where !tdp.Deleted from st in db.SyncStates where st.UserID == userID && st.DeviceID == deviceID && st.ActionType == (byte)TypeEnum.Department && st.SyncTime <= tdp.UpdateTime select tdp), FrontUsers = ( from tusr in tempUser.DefaultIfEmpty() from st in db.SyncStates where st.UserID == userID && st.DeviceID == deviceID && st.ActionType == (byte)TypeEnum.User && st.SyncTime <= tusr.UpdateTime select new { tusr.UserID, tusr.Name, tusr.DepartmentID, tusr.Closed, } ), UserRoles = ( from tul in tempRL.DefaultIfEmpty() join ur in db.UserRoles on tul.RoleID equals ur.RoleID into tempUR from tur in tempUR.DefaultIfEmpty() //where tul.Available && (tur == null || !tur.Deleted) from st in db.SyncStates where st.UserID == userID && st.DeviceID == deviceID && st.ActionType == (byte)TypeEnum.Role && (st.SyncTime <= tul.UpdateTime || tur == null || st.SyncTime <= tur.UpdateTime) select new { RoleId = tul.RoleID, RoleName = tul.Name, Available = tul.Available, UserID = tur.UserID, Deleted = tur != null && tur.Deleted } ).Union( from tul in db.RFARoles where tul.OwnerID == null join ur in db.UserRoles on tul.RoleID equals ur.RoleID into tempUR from tur in tempUR.DefaultIfEmpty() join user in tempUser on tur.UserID equals user.UserID into tempUser2 from tuser in tempUser2.DefaultIfEmpty() where tul.Available && (tur == null || !tur.Deleted) && tuser != null from st in db.SyncStates where st.UserID == userID && st.DeviceID == deviceID && st.ActionType == 3 && (st.SyncTime <= tul.UpdateTime || (tur == null || st.SyncTime <= tur.UpdateTime)) select new { RoleId = tul.RoleID, RoleName = tul.Name, Available = tul.Available, UserID = tur.UserID, Deleted = tur != null && tur.Deleted } ) }).FirstOrDefault(); if (tempData == null) { return(new EnterpriseSyncDto()); } var result = new EnterpriseSyncDto { EnterpriseID = tempData.EnterpriseID, Departments = tempData.Departments.Select(obj => (DepartmentSyncDto)obj).ToArray(), FrontUsers = tempData.FrontUsers.Select(n => new FrontUserSyncDto { EnterpriseID = tempData.EnterpriseID, UserID = n.UserID, Name = n.Name, Closed = n.Closed, DepartmentID = n.DepartmentID }).ToArray(), UserRoles = tempData.UserRoles.Select(n => new UserRoleSyncDto { EnterpriseID = tempData.EnterpriseID, UserID = n.UserID, RoleID = n.RoleId, RoleName = n.RoleName, Deleted = n.Deleted || !n.Available }).ToArray() }; return(result); } }