Beispiel #1
0
        /// <summary>
        /// 获取设备统计数据
        /// </summary>
        /// <param name="req">请求参数</param>
        /// <param name="devices">设备编号列表,如果是单个设备,该值为空</param>
        /// <returns>返回设备的统计数据</returns>
        public async Task <BaseResponse> GetDeviceStatisticsAsync(DeviceStatisticsRequestDto req, List <string> devices)
        {
            List <DeviceDiscreteStatisticsDataModel>       data;
            IQueryable <DeviceDiscreteStatisticsDataModel> query;

            if (req.IsDevice)
            {
                query = _dsr.FindWithDevice(a => a.DeviceSn == req.DeviceSn);
            }
            else
            {
                query = _dsr.FindWithDevice(a => devices.Contains(a.DeviceSn));
            }
            data = await query.Where(a => a.Date <= req.EndTime && a.Date >= req.BeginTime).ToListAsync();

            var dtos = _map.Map <List <DeviceStatisticsDto> >(data);

            return(new BResponse <List <DeviceStatisticsDto> > {
                Success = true, Message = "获取数据成功", Data = dtos
            });
        }
        public async Task <ActionResult <BaseResponse> > GetDeviceStatisticsAsync(string GroupId, [FromQuery] DeviceStatisticsRequestDto req)
        {
            if (req.BeginTime > req.EndTime)
            {
                return(new BaseResponse {
                    Success = false, Message = "开始时间不能大于结束时间"
                });
            }
            var GId     = User.Claims.FirstOrDefault(a => a.Type == "GroupId").Value;
            var Account = User.Claims.FirstOrDefault(a => a.Type == "Account").Value;
            var Code    = User.Claims.FirstOrDefault(a => a.Type == "Code").Value;
            var isAdmin = User.Claims.FirstOrDefault(a => a.Type == "IsAdmin").Value.ToLower() == "true" ? true : false;
            var Roles   = User.Claims.FirstOrDefault(a => a.Type == "Role").Value.ToString();
            //验证输入的groupid是否存在
            var ex = await _gs.IsExist(a => a.Id == GroupId);

            if (!ex)
            {
                return(new BaseResponse {
                    Success = false, Message = "输入的组织编号不存在"
                });
            }
            if (GId != GroupId)
            {
                if (!(isAdmin && Code == _config["Group"]))
                {
                    return(new BaseResponse {
                        Success = false, Message = "用户没有权限"
                    });
                }
            }

            if (req.IsDevice)//设备的权限
            {
                if (req.DeviceSn == null || "" == req.DeviceSn.Trim())
                {
                    return(new BaseResponse {
                        Success = false, Message = "设备序列号不能为空"
                    });
                }
                var dev = await _ds.IsExistCheck(a => a.DeviceSn == req.DeviceSn);

                if (!dev.IsExist)
                {
                    return(new BaseResponse {
                        Success = false, Message = "输入的设备序列号不存在"
                    });
                }
                //验证权限
                if (!isAdmin)
                {
                    var auth = await _rps.IsAuth(Roles, dev.PathId, 0);

                    if (!auth)
                    {
                        return(new BaseResponse {
                            Success = false, Message = "用户没有权限查看该设备的统计数据"
                        });
                    }
                }
                //获取设备的统计数据
                return(await _dsd.GetDeviceStatisticsAsync(req, null));
            }
            else
            {
                //获取场站列表
                List <int> sites = null;
                if (req.ProjectId == 0)//全部设备
                {
                    sites = await _ps.GetMySitesIdAsync(GroupId, Roles, isAdmin);
                }
                else
                {
                    var pro = await _ps.GetProjectCheckAsync(req.ProjectId);

                    if (!pro.IsExist)
                    {
                        return(new BaseResponse {
                            Success = false, Message = "输入的项目或场站编号不存在"
                        });
                    }
                    if (!isAdmin)
                    {
                        pro.PathId = $"{pro.PathId}/{req.ProjectId}";
                        var auth = await _rps.IsAuth(Roles, pro.PathId, 0);

                        if (!auth)
                        {
                            return(new BaseResponse {
                                Success = false, Message = "用户没有权限查看该项目下的数据"
                            });
                        }
                    }
                    if (pro.IsSite)
                    {
                        sites = new List <int>()
                        {
                            req.ProjectId
                        };
                    }
                    else
                    {
                        sites = await _ps.GetProjectSitesIdAsync(req.ProjectId);
                    }
                }
                var devices = await _ds.GetDeviceSnBySitesAsync(sites);

                return(await _dsd.GetDeviceStatisticsAsync(req, devices));
            }
        }