Beispiel #1
0
 public FrontUserDto GetFrontUserDtoByID(string frontUserID)
 {
     using (var db = new BCEnterpriseContext())
     {
         var user = db.FrontUsers.Where(o => o.UserID == frontUserID).Select(o => new FrontUserDto()
         {
             UserID      = o.UserID,
             Name        = o.Name,
             Picture     = o.Picture,
             EnterpiseID = o.EnterpiseID
         }).FirstOrDefault();
         if (user != null)
         {
             user.Picture = UriExtensions.GetFullUrl(user.Picture);
         }
         return(user);
     }
 }
Beispiel #2
0
        public ActionResult SetUserPicture(ModelBase model)
        {
            var result = new StandardJsonResult <string>();

            result.Try(() =>
            {
                if (!ModelState.IsValid)
                {
                    throw new KnownException(ModelState.GetFirstError());
                }

                if (Request.Files.Count == 0)
                {
                    throw new KnownException("没有图片上传到服务器!");
                }

                var service  = Ioc.GetService <IEnterpriseAccountService>();
                var tempUser = service.GetById(BCSession.User.UserID);

                var pictureStream = ML.BC.Infrastructure.Utilities.ImageHelper.PressImage(Request.Files[0].InputStream, 200, 200);
                var filePath      = string.Format("/UserAvatar/{0}_{1}.jpg", tempUser.UserID, DateTime.Now.ToString("yyyyMMddHHmmssfff"));
                using (var file = System.IO.File.OpenWrite(Server.MapPath(filePath)))
                {
                    pictureStream.WriteTo(file);
                    file.Flush();
                }
                var userSecurService = Ioc.GetService <IEnterpriseUserManagementService>();
                userSecurService.SetUserAvatar(tempUser.UserID, filePath);

                if (System.IO.File.Exists(Server.MapPath(tempUser.Picture)))
                {
                    try
                    {
                        var file        = new System.IO.FileInfo(Server.MapPath(tempUser.Picture));
                        file.Attributes = System.IO.FileAttributes.Normal;
                        file.Delete();
                    }
                    catch { }
                }
                result.Value = UriExtensions.GetFullUrl(filePath);
            });
            return(result);
        }
Beispiel #3
0
        public Account.Dtos.SessionUserDto GetSessionUser(string userId, string device)
        {
            try
            {
                if (string.IsNullOrEmpty(userId))
                {
                    throw new KnownException("用户名称不能为空!");
                }
                using (var db = new BCEnterpriseContext())
                {
                    ClearUserLoginState(db);

                    var user = (from u in db.FrontUsers
                                where u.UserID == userId
                                join ls in db.UserLoginStates on u.UserID equals ls.UserID
                                where ls.Device == device
                                join ep in db.Enterprises on u.EnterpiseID equals ep.EnterpriseID into tempEP
                                join ur in db.UserRoles on u.UserID equals ur.UserID into tempUR
                                select new
                    {
                        u,
                        ls,
                        ep = tempEP.DefaultIfEmpty().FirstOrDefault(),
                        roles = tempUR.DefaultIfEmpty().Where(n => !n.Deleted).Select(n => n.RoleID),
                        functions = (from tur in tempUR.DefaultIfEmpty()
                                     where tur.Deleted == false
                                     join r in db.RFARoles on tur.RoleID equals r.RoleID
                                     where r.Available
                                     join rf in db.RFAAuthorizations on tur.RoleID equals rf.RoleID into tempRF
                                     from trf in tempRF.DefaultIfEmpty()
                                     where !trf.Deleted
                                     select trf.FunctionID)
                    }).FirstOrDefault();

                    if (user == null)
                    {
                        throw new KnownException("用户名不存在或用户当前登录状态丢失请重新登录。");
                    }

                    #region get functionIds
                    //TODO:get it from the cache
                    var functions   = db.RFAFunctions.ToList();
                    var functionIds = new List <string>();

                    Action <string> recursionFunctions = null;
                    recursionFunctions = (functionId) =>
                    {
                        if (functionIds.Contains(functionId))
                        {
                            return;
                        }
                        functionIds.Add(functionId);

                        var tempParent = (from fun in functions
                                          where fun.FunctionID == functionId
                                          join tfun in functions on fun.ParentID equals tfun.FunctionID
                                          select tfun).FirstOrDefault();
                        if (tempParent != null)
                        {
                            recursionFunctions(tempParent.FunctionID);
                        }
                    };
                    user.functions.ToList().ForEach(recursionFunctions);
                    #endregion

                    var sessionUserDto = new Account.Dtos.SessionUserDto
                    {
                        UserID         = user.u.UserID,
                        UserName       = user.u.Name,
                        LastLoginTime  = user.u.LastDate ?? DateTime.Now,
                        LastIP         = user.u.LastIP,
                        Picture        = UriExtensions.GetFullUrl(user.u.Picture),
                        Device         = user.ls.Device,
                        Token          = user.ls.LoginToken,
                        EnterpriseID   = user.u.EnterpiseID,
                        EnterpriseName = user.ep == null ? string.Empty : user.ep.Name,
                        DepartmentID   = user.u.DepartmentID,
                        RoleIDs        = user.roles.ToArray(),
                        FunctionIDs    = functionIds.ToArray()
                    };
                    return(sessionUserDto);
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
        public List <SceneItemDto> GetSceneItemForSync(string userId, string device)
        {
            lock (GETSCENEITEMFORSYNCLOCK)
            {
                using (var db = new BCEnterpriseContext())
                {
                    List <string> sceneIDs = new List <string>();

                    #region get sceneIDs

                    var userDepartmentID = db.FrontUsers.Where(o => o.UserID == userId).Select(o => o.DepartmentID).FirstOrDefault().ToString();
                    if (!string.IsNullOrEmpty(userDepartmentID))
                    {
                        sceneIDs = (from scene in db.Scenes
                                    join project in db.Projects on scene.ProjectID equals project.ProjectID into tPrj
                                    from prj in tPrj.DefaultIfEmpty()
                                    where prj.Departments.Contains(userDepartmentID)
                                    select scene.SceneID
                                    ).Distinct()
                                   .ToList();
                    }

                    if (!(db.SyncStates.Any(n => n.UserID == userId && n.DeviceID == device && n.ActionType == (int)ML.BC.Infrastructure.MsmqHelper.TypeEnum.SceneData)))
                    {
                        var syncSceneData = new SyncState()
                        {
                            UserID     = userId,
                            DeviceID   = device,
                            ActionType = (int)TypeEnum.SceneData,
                            SyncTime   = DBTimeHelper.DBNowTime(db)
                        };
                        db.SyncStates.Add(syncSceneData);
                        if (0 < db.SaveChanges())
                        {
                            return(new List <SceneItemDto>());
                        }
                        else
                        {
                            var logger = log4net.LogManager.GetLogger(typeof(SceneItemManagementService));
                            logger.Error("第一次写入同步现场数据的状态失败!");
                            return(new List <SceneItemDto>());
                        }
                    }

                    var lastSyncTime = (db.SyncStates.FirstOrDefault(
                                            n =>
                                            n.UserID == userId && n.DeviceID == device &&
                                            n.ActionType == (int)ML.BC.Infrastructure.MsmqHelper.TypeEnum.SceneData)
                                        ?? new SyncState {
                        SyncTime = DateTime.MinValue
                    }).SyncTime;

                    #endregion

                    var mgdb       = new MongoDbProvider <SceneItem>();
                    var sceneItems = mgdb.GetAll(n => (sceneIDs.Contains(n.SceneID)) && (n.UpdateTime >= lastSyncTime));

                    var userIds     = sceneItems.Select(n => n.UserID).ToList();
                    var relateUsers = db.FrontUsers.Where(obj => userIds.Contains(obj.UserID)).Select(o => new
                    {
                        uid     = o.UserID,
                        name    = o.Name,
                        picture = o.Picture
                    }).ToList();

                    var resultList = (from item in sceneItems
                                      join r in relateUsers on item.UserID equals r.uid into tempSU
                                      from t in tempSU.DefaultIfEmpty()
                                      select new SceneItemDto
                    {
                        Id = item.Id,
                        SceneID = item.SceneID,
                        PictureGuid = item.PictureGuid,
                        Count = item.Count,
                        Status = item.Status,
                        UserID = item.UserID,
                        CreateTime = item.CreateTime,
                        UpdateTime = item.UpdateTime,
                        Address = item.Address,
                        GPS = item.GPS,
                        Description = item.Description,
                        Images = item.Images,
                        Relation = item.Relation,
                        IsExamine = item.IsExamine,
                        Comments = item.Comments,
                        Type = item.Type,
                        UserName = t == null ? string.Empty : t.name,
                        UserPicture = t == null ? string.Empty : UriExtensions.GetFullUrl(t.picture)
                    })
                                     .OrderByDescending(o => o.UpdateTime)
                                     .ToList();
                    foreach (var r in resultList)
                    {
                        r.Images = MakeUrlWithPictureName(r.Images);
                    }
                    return(resultList);
                }
            }
        }
        public List <SceneItemDto> GetAllByStatus(string userID, string deviceID, string sceneID, ItemStatus status,
                                                  int pageSize, DateTime time, out int count)
        {
            if (string.IsNullOrEmpty(sceneID))
            {
                throw new ArgumentNullException("sceneID");
            }

            using (var db = new BCEnterpriseContext())
            {
                var iSsync =
                    db.SyncStates.Any(
                        n =>
                        n.UserID == userID && n.DeviceID == deviceID &&
                        n.ActionType == (int)ML.BC.Infrastructure.MsmqHelper.TypeEnum.SceneData);
                if (!iSsync)
                {
                    var syncSceneData = new SyncState()
                    {
                        UserID     = userID,
                        DeviceID   = deviceID,
                        ActionType = (int)TypeEnum.SceneData,
                        SyncTime   = DBTimeHelper.DBNowTime(db)
                    };

                    db.SyncStates.Add(syncSceneData);
                    if (!(0 < db.SaveChanges()))
                    {
                        var logger = log4net.LogManager.GetLogger(typeof(SceneItemManagementService));
                        logger.Error("第一次写入同步现场数据的状态失败!");
                    }
                }
            }

            var mgdb  = new MongoDbProvider <SceneItem>();
            var query = ItemStatus.All == status
                ? mgdb.GetAll(o => (o.SceneID == sceneID) && (o.UpdateTime < time))
                : mgdb.GetAll(o => (o.SceneID == sceneID) && (o.Status == status) && (o.UpdateTime < time));

            count = query.Count();
            if (pageSize < 1)
            {
                pageSize = 10;
            }
            var sceneItems = query
                             .OrderByDescending(obj => obj.CreateTime)
                             .Take(pageSize)
                             .ToList();

            using (var db = new BCEnterpriseContext())
            {
                if (0 == sceneItems.Count)
                {
                    return(new List <SceneItemDto>());
                }
                var userIds    = sceneItems.Select(o => o.UserID).ToList();
                var reUserInfo = db.FrontUsers.Where(obj => userIds.Contains(obj.UserID)).Select(o => new
                {
                    uid     = o.UserID,
                    name    = o.Name,
                    picture = o.Picture
                }).ToList();

                var re = (from item in sceneItems
                          join r in reUserInfo on item.UserID equals r.uid into tempSU
                          from t in tempSU.DefaultIfEmpty()
                          select new SceneItemDto
                {
                    Id = item.Id,
                    SceneID = item.SceneID,
                    PictureGuid = item.PictureGuid,
                    Count = item.Count,
                    Status = item.Status,
                    UserID = item.UserID,
                    CreateTime = item.CreateTime,
                    UpdateTime = item.UpdateTime,
                    Address = item.Address,
                    GPS = item.GPS,
                    Description = item.Description,
                    Images = item.Images,
                    Examines = item.Examines,
                    Comments = item.Comments,
                    Relation = item.Relation,
                    IsExamine = item.IsExamine,
                    Type = item.Type,
                    UserName = t == null ? string.Empty : t.name,
                    UserPicture = t == null ? string.Empty : UriExtensions.GetFullUrl(t.picture)
                })
                         .ToList();
                foreach (var r in re)
                {
                    r.Images = MakeUrlWithPictureName(r.Images);
                }
                return(re);
            }
        }
        public List <SceneItemDto> GetAllByStatus(string sceneID, ItemStatus status, int pageSize, int pageIndex,
                                                  out int count)
        {
            try
            {
                if (string.IsNullOrEmpty(sceneID))
                {
                    throw new ArgumentNullException("sceneID");
                }
                var mgdb = new MongoDbProvider <SceneItem>();

                var query = ItemStatus.All == status
                    ? mgdb.GetAll(o => (o.SceneID == sceneID))
                    : mgdb.GetAll(o => (o.SceneID == sceneID) && (o.Status == status));

                count = query.Count();
                int pageTotal;

                if (pageSize > 0)
                {
                    pageTotal = (count + pageSize - 1) / pageSize;
                }
                else
                {
                    pageSize  = 10;
                    pageTotal = (count + pageSize - 1) / pageSize;
                }

                if (pageIndex > pageTotal)
                {
                    pageIndex = pageTotal;
                }
                if (pageIndex < 1)
                {
                    pageIndex = 1;
                }

                var sceneItems = query
                                 .OrderByDescending(obj => obj.CreateTime)
                                 .Skip(pageSize * (pageIndex - 1))
                                 .Take(pageSize)
                                 .ToList();

                using (var db = new BCEnterpriseContext())
                {
                    if (0 == sceneItems.Count)
                    {
                        return(new List <SceneItemDto>());
                    }
                    var userIds    = sceneItems.Select(o => o.UserID).ToList();
                    var reUserInfo = db.FrontUsers.Where(obj => userIds.Contains(obj.UserID)).Select(o => new
                    {
                        uid     = o.UserID,
                        name    = o.Name,
                        picture = o.Picture
                    }).ToList();

                    var re = (from item in sceneItems
                              join r in reUserInfo on item.UserID equals r.uid into tempSU
                              from t in tempSU.DefaultIfEmpty()
                              select new SceneItemDto
                    {
                        Id = item.Id,
                        SceneID = item.SceneID,
                        PictureGuid = item.PictureGuid,
                        Count = item.Count,
                        Status = item.Status,
                        UserID = item.UserID,
                        CreateTime = item.CreateTime,
                        UpdateTime = item.UpdateTime,
                        Address = item.Address,
                        GPS = item.GPS,
                        Relation = item.Relation,
                        Description = item.Description,
                        Images = item.Images,
                        IsExamine = item.IsExamine,
                        Comments = item.Comments,
                        Type = item.Type,
                        Examines = item.Examines,
                        UserName = t == null ? string.Empty : t.name,
                        UserPicture = t == null ? string.Empty : UriExtensions.GetFullUrl(t.picture)
                    })
                             .ToList();
                    foreach (var r in re)
                    {
                        r.Images = MakeUrlWithPictureName(r.Images);
                    }
                    return(re);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }