示例#1
0
        public StructWarn FindFilteredOrderedAlarmsByStruct([FromUri] int structId, [FromBody] AlarmModel_1 alarm_1)
        {
            try
            {
                // 分解告警等级
                string[]   levels    = alarm_1.FilteredLevel.Split(',');
                var        levelList = levels.Select(s => Convert.ToInt32(s)).ToList();
                AlarmModel alarm     = new AlarmModel
                {
                    FilteredDeviceType = alarm_1.FilteredDeviceType,
                    FilteredStatus     = alarm_1.FilteredStatus,
                    FilteredLevel      = levelList,
                    FilteredStartTime  = alarm_1.FilteredStartTime,
                    FilteredEndTime    = alarm_1.FilteredEndTime,
                    OrderedDevice      = alarm_1.OrderedDevice,
                    OrderedLevel       = alarm_1.OrderedLevel,
                    OrderedTime        = alarm_1.OrderedTime
                };
                int roleId = 5; // 5-"普通用户"角色(Client).
                if (Request.Properties.ContainsKey("AuthorizationInfo"))
                {
                    var info = Request.Properties["AuthorizationInfo"] as AuthorizationInfo;
                    roleId = info != null && info.RoleId != null ? (int)info.RoleId : 5;
                }

                using (SecureCloud_Entities entity = new SecureCloud_Entities())
                {
                    var query = from s in entity.T_DIM_STRUCTURE
                                where s.ID == structId && s.IsDelete == 0
                                select s;
                    var list = query.ToList().Select(s => new StructWarn
                    {
                        structId   = s.ID,
                        structName = s.STRUCTURE_NAME_CN,
                        warnings   = new List <Warning>()
                    }).ToList();

                    var objAlarm  = new Alarm();
                    var condition = objAlarm.GetFilteredOrderedConditionOfAlarm(alarm, roleId);

                    DataTable dt = null;
                    int       start = 0, end = 0;
                    if (this.Request.GetQueryString("amp;startRow") != null && this.Request.GetQueryString("amp;endRow") != null)
                    {
                        start = int.Parse(this.Request.GetQueryString("amp;startRow"));
                        end   = int.Parse(this.Request.GetQueryString("amp;endRow"));
                        dt    = objAlarm.GetPagedFilteredOrderedAlarmsByStruct(structId, condition, start, end);
                    }
                    else
                    {
                        dt = objAlarm.GetFilteredOrderedAlarmsByStruct(structId, condition);
                    }

                    for (int i = 0; i < list.Count; i++)
                    {
                        foreach (var dataRow in dt.AsEnumerable())
                        {
                            if (dataRow.Field <int>("StructId") == list[i].structId)
                            {
                                list[i].warnings.Add(new Warning
                                {
                                    WarningId     = dataRow.Field <int>("Id"),
                                    WarningTypeId = dataRow.Field <string>("WarningTypeId"),
                                    Source        = dataRow.Field <string>("Source"),
                                    Level         = dataRow["WarningLevel"] == DBNull.Value ? 4 : dataRow.Field <byte>("WarningLevel"),
                                    Content       = dataRow.Field <string>("Content"),
                                    Reason        = dataRow.Field <string>("Reason"),
                                    Time          = dataRow.Field <DateTime>("Time"),
                                    DealFlag      = dataRow.Field <int>("DealFlag"),
                                    Confirmor     = dataRow["Confirmor"] == DBNull.Value ? string.Empty : dataRow.Field <string>("Confirmor"),
                                    Suggestion    = dataRow["Suggestion"] == DBNull.Value ? string.Empty : dataRow.Field <string>("Suggestion"),
                                    ConfirmTime   = dataRow["ConfirmTime"] == DBNull.Value ? default(DateTime) : dataRow.Field <DateTime>("ConfirmTime")
                                });
                            }
                        }
                    }
                    return(list.FirstOrDefault());
                }
            }
            catch (Exception e)
            {
                return(new StructWarn());
                //throw e;
            }
        }
示例#2
0
        public object FindFactorStatusByStruct(string structs)
        {
            int[] strcts = structs.Split(',').Select(s => Convert.ToInt32(s)).ToArray();

            using (SecureCloud_Entities entity = new SecureCloud_Entities())
            {
                #region 因子评分产生状态-使用中

                Debug.WriteLine("==========================================");

                // 查询结构物和包含的监测主题
                var query = (from stc in entity.T_DIM_STRUCTURE
                             from sf in entity.T_DIM_STRUCTURE_FACTOR
                             from f in entity.T_DIM_SAFETY_FACTOR_TYPE
                             from f2 in entity.T_DIM_SAFETY_FACTOR_TYPE
                             from orgStc in entity.T_DIM_ORG_STUCTURE
                             where
                             strcts.Contains(stc.ID) && stc.ID == sf.STRUCTURE_ID &&
                             sf.SAFETY_FACTOR_TYPE_ID == f.SAFETY_FACTOR_TYPE_ID &&
                             f.SAFETY_FACTOR_TYPE_PARENT_ID == f2.SAFETY_FACTOR_TYPE_ID &&
                             orgStc.STRUCTURE_ID == stc.ID
                             select
                             new FactorList
                {
                    StructId = stc.ID,
                    OrgStc = orgStc.ORG_STRUC_ID,
                    FactorId = f2.SAFETY_FACTOR_TYPE_ID,
                    FactorName = f2.SAFETY_FACTOR_TYPE_NAME
                }).Distinct();

                var themeScore = from ts in entity.T_FACT_SAFETY_FACTOR_SCORE
                                 from q in query
                                 where ts.ORG_STRUC_ID == q.OrgStc && ts.SAFETY_FACTOR_TYPE_ID == q.FactorId
                                 select
                                 new
                {
                    Id = ts.ID,
                    q.OrgStc,
                    StructId   = q.StructId,
                    FactorId   = q.FactorId,
                    FactorName = q.FactorName,
                    Score      = ts.SAFETY_FACTOR_SCORE,
                    Date       = ts.EVALUATION_DATETIME
                };

                // 查询最后评分ID
                var ids =
                    themeScore.GroupBy(r => new { r.StructId, r.FactorId, r.FactorName })
                    .Select(i => i.Select(s => s.Id).Max())
                    .ToArray();

                var scores = themeScore.Where(r => ids.Contains(r.Id));

                // 查询主题评分
                var rslt = from q in query
                           join w in scores on new { q.OrgStc, q.FactorId } equals
                new { OrgStc = w.OrgStc, FactorId = w.FactorId } into score
                from s in score.DefaultIfEmpty()
                select
                new
                {
                    StructId   = q.StructId,
                    FactorId   = q.FactorId,
                    FactorName = q.FactorName,
                    Score      = s.Score,
                    Date       = s.Date
                };

                // 分数对应的文字
                var scoreWeight =
                    entity.T_FACT_WEIGHT_SCORE.Select(
                        w =>
                        new { Low = w.SCORE_VALUE_LOWER_LIMIT, Up = w.SCORE_VALUE_UPPER_LIMIT, Name = w.DESCRIPTION })
                    .ToList();

                var json =
                    new JArray(
                        rslt.ToList()
                        .GroupBy(g => g.StructId)
                        .Select(
                            s =>
                            new JObject(
                                new JProperty("structId", s.Key),
                                new JProperty(
                                    "entry",
                                    new JArray(
                                        s.GroupBy(e => new { e.FactorId, e.FactorName })
                                        .Select(
                                            e => new JObject(
                                                new JProperty("factorId", e.Key.FactorId),
                                                new JProperty("factorName", e.Key.FactorName),
                                                new JProperty(
                                                    "status",
                                                    scoreWeight.Where(
                                                        w =>
                                                        w.Low
                                                        <= s.Where(
                                                            d => d.Date == e.Max(v => v.Date) && d.FactorId == e.Key.FactorId)
                                                        .Select(d => d.Score)
                                                        .FirstOrDefault() &&
                                                        w.Up
                                                        >= s.Where(
                                                            d => d.Date == e.Max(v => v.Date) && d.FactorId == e.Key.FactorId)
                                                        .Select(d => d.Score)
                                                        .FirstOrDefault()).Select(w => w.Name).FirstOrDefault()))))))));
                return(json);

                #endregion

                #region 告警产生状态-非使用中

                //var query = from sf in entity.T_DIM_STRUCTURE_FACTOR
                //            from f in entity.T_DIM_SAFETY_FACTOR_TYPE
                //            from s in entity.T_DIM_SENSOR
                //            from fp in entity.T_DIM_SAFETY_FACTOR_TYPE
                //            where
                //                strcts.Contains(sf.STRUCTURE_ID) && sf.SAFETY_FACTOR_TYPE_ID == f.SAFETY_FACTOR_TYPE_ID
                //                && s.STRUCT_ID == sf.STRUCTURE_ID && s.SAFETY_FACTOR_TYPE_ID == f.SAFETY_FACTOR_TYPE_ID
                //                && f.SAFETY_FACTOR_TYPE_PARENT_ID == fp.SAFETY_FACTOR_TYPE_ID
                //            select
                //                new
                //                    {
                //                        structId = s.STRUCT_ID,
                //                        factorId = fp.SAFETY_FACTOR_TYPE_ID,
                //                        factorName = fp.SAFETY_FACTOR_TYPE_NAME,
                //                        sensorId = s.SENSOR_ID
                //                    };
                //var device = query.ToList();

                //var sensors = device.Select(d => d.sensorId).ToArray();
                //var warnings = new DAL.Warning().GetWarningsBySensor(
                //    sensors,
                //    DateTime.Now.AddYears(-1),
                //    DateTime.Now,
                //    false);

                //var statusMap = new Dictionary<int, string>() { { 1, "差" }, { 2, "劣" }, { 3, "中" }, { 4, "良" } };

                //var rslt =
                //    device.GroupBy(s => s.structId)
                //        .Select(
                //            s =>
                //            new
                //                {
                //                    structId = s.Key,
                //                    entry =
                //                s.GroupBy(f => new { f.factorId, f.factorName })
                //                .Select(
                //                    f =>
                //                    new
                //                        {
                //                            factorId = f.Key.factorId,
                //                            factorName = f.Key.factorName,
                //                            status =
                //                        (warnings.AsEnumerable()
                //                            .Where(
                //                                w =>
                //                                f.Select(sen => sen.sensorId)
                //                                    .ToArray()
                //                                    .Contains(w.Field<int>("SensorId")))
                //                            .Min(w => w.Field<int?>("Level"))) == null
                //                            ? "优"
                //                            : statusMap[
                //                                (warnings.AsEnumerable()
                //                                  .Where(
                //                                      w =>
                //                                      f.Select(sen => sen.sensorId)
                //                                          .ToArray()
                //                                          .Contains(w.Field<int>("SensorId")))
                //                                  .Min(w => w.Field<int>("Level")))]
                //                        })
                //                });
                //return rslt;

                #endregion
            }
        }
示例#3
0
        public object FindWarningsByStruct(string structs, string status, DateTime startDate, DateTime endDate, int?startRow = null, int?endRow = null)
        {
            int roleId = 5; // 5-"普通用户"角色(Client).

            if (Request.Properties.ContainsKey("AuthorizationInfo"))
            {
                var info = Request.Properties["AuthorizationInfo"] as AuthorizationInfo;
                roleId = info != null && info.RoleId != null ? (int)info.RoleId : 5;
            }

            int?dealFlag = null;

            if (roleId == 5)
            {
                switch (status)
                {
                case "unprocessed":
                    dealFlag = WarningClientUnprocessed;     // unprocessed for Client.
                    break;

                case "processed":
                    dealFlag = WarningClientProcessed;     // processed for Client.
                    break;
                }
            }
            else
            {
                switch (status)
                {
                case "unprocessed":
                    dealFlag = WarningSupportUnprocessed;     // unprocessed for Support.
                    break;

                case "processed":
                    dealFlag = WarningSupportProcessed;     // processed for Support.
                    break;

                case "issued":     // "已下发"告警
                    dealFlag = 5;  // unprocessed and processed for Client.
                    break;
                }
            }

            string[] stcs     = structs.Split(',');
            var      strcNums = stcs.Select(s => Convert.ToInt32(s)).ToArray();

            using (SecureCloud_Entities entity = new SecureCloud_Entities())
            {
                var query = from s in entity.T_DIM_STRUCTURE
                            where strcNums.Contains(s.ID) && s.IsDelete == 0
                            select s;
                var list = query.ToList().Select(s => new
                {
                    structId   = s.ID,
                    structName = s.STRUCTURE_NAME_CN,
                    warnings   = new List <Warning>()
                }).ToList();

                DataTable dt = null;

                if (startRow != null && endRow != null)
                {
                    dt = warningDal.GetPagedWarningsByStruct(strcNums, startDate, endDate, dealFlag, (int)startRow, (int)endRow, roleId);
                }
                else
                {
                    dt = warningDal.GetWarningsByStruct(strcNums, startDate, endDate, dealFlag, roleId);
                }

                for (int i = 0; i < list.Count; i++)
                {
                    foreach (var dataRow in dt.AsEnumerable())
                    {
                        if (dataRow.Field <int>("StructId") == list[i].structId)
                        {
                            list[i].warnings.Add(new Warning
                            {
                                WarningId     = dataRow.Field <int>("Id"),
                                WarningTypeId = dataRow.Field <string>("WarningTypeId"),
                                Source        = dataRow.Field <string>("Source"),
                                Level         = dataRow["WarningLevel"] == DBNull.Value ? 4 : dataRow.Field <byte>("WarningLevel"),
                                Content       = dataRow.Field <string>("Content"),
                                Reason        = dataRow.Field <string>("Reason"),
                                Time          = dataRow.Field <DateTime>("Time"),
                                DealFlag      = dataRow.Field <int>("DealFlag"),
                                Confirmor     = dataRow["Confirmor"] == DBNull.Value ? string.Empty : dataRow.Field <string>("Confirmor"),
                                Suggestion    = dataRow["Suggestion"] == DBNull.Value ? string.Empty : dataRow.Field <string>("Suggestion"),
                                ConfirmTime   = dataRow["ConfirmTime"] == DBNull.Value ? default(DateTime) : dataRow.Field <DateTime>("ConfirmTime")
                            });
                        }
                    }
                }

                return(list);
            }
        }
示例#4
0
        public HttpResponseMessage AddFactorUnit([FromUri] int structId, [FromBody] allData configs)
        {
            using (var db = new SecureCloud_Entities())
            {
                var configAll = configs.Date;
                foreach (var config in configAll)
                {
                    if (config.Unit == null)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest,
                                                      StringHelper.GetMessageString("添加配置信息失败,单位不能为空")));
                    }

                    //修改
                    try
                    {
                        var subId = from sb in db.T_DIM_FACTOR_UNIT_INT

                                    where sb.FACTOR_ID == config.FactorId && sb.VALUE_INDEX == config.ItemId &&
                                    sb.UNIT == config.Unit
                                    select new
                        {
                            id = sb.ID
                        };
                        var idex     = (config.FactorId + config.ItemId).ToString();
                        var unitInfo =
                            db.T_DIM_STRUCT_FACTOR_UNIT.FirstOrDefault(
                                m =>
                                m.STRUCT_ID == structId && m.FACTOR_ID == config.FactorId && m.VALUE_ID == config.ItemId);
                        if (unitInfo != null)
                        {
                            foreach (var s in subId)
                            {
                                unitInfo.SUB_FACTOR_ID = s.id;
                            }
                            unitInfo.STRUCT_ID = config.StructId;
                            unitInfo.FACTOR_ID = config.FactorId;
                            unitInfo.VALUE_ID  = config.ItemId;
                            var unitUp = db.Entry(unitInfo);
                            unitUp.State = EntityState.Modified;
                            db.SaveChanges();
                        }
                        else
                        {
                            //新增配置单位
                            var unitConfig = new T_DIM_STRUCT_FACTOR_UNIT();
                            foreach (var s in subId)
                            {
                                unitConfig.SUB_FACTOR_ID = s.id;
                            }
                            unitConfig.STRUCT_ID = config.StructId;
                            unitConfig.FACTOR_ID = config.FactorId;
                            unitConfig.VALUE_ID  = config.ItemId;

                            var entry = db.Entry(unitConfig);
                            entry.State = EntityState.Added;
                            db.SaveChanges();
                        }
                    }

                    catch
                    (Exception ex)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, StringHelper.GetMessageString("配置失败")));
                    }

                    //#region 日志信息

                    this.Request.Properties["ActionParameter"] = JsonConvert.SerializeObject(config);

                    this.Request.Properties["ActionParameterShow"] = string.Format(
                        "监测因素编号:{0},监测子因素编号:{1},单位:{2},结构物编号:{3}",
                        config.FactorId,
                        config.ItemId,
                        config.Unit,
                        config.StructId
                        );

                    //#endregion
                }
            }

            return(Request.CreateResponse(HttpStatusCode.Accepted, StringHelper.GetMessageString("配置成功")));
        }
示例#5
0
        public HttpResponseMessage ConfigStructFactors([FromUri] int structId, [FromBody] string array)
        {
            int[] factors = array.Split(',').Select(f => Convert.ToInt32(f)).ToArray();

            using (var entity = new SecureCloud_Entities())
            {
                var ori =
                    entity.T_DIM_STRUCTURE_FACTOR.Where(s => s.STRUCTURE_ID == structId)
                    .Select(s => s.SAFETY_FACTOR_TYPE_ID).ToList();

                var arrToAdd = factors.Except(ori);
                var arrToDel = ori.Except(factors);

                var sens =
                    entity.T_DIM_SENSOR.Where(s => s.STRUCT_ID == structId && arrToDel.Contains((int)s.SAFETY_FACTOR_TYPE_ID) && !s.IsDeleted);
                if (sens.Any())
                {
                    return(Request.CreateResponse(
                               System.Net.HttpStatusCode.Conflict,
                               StringHelper.GetMessageString("请先删除该监测因素下的传感器")));
                }

                foreach (int factorId in arrToAdd)
                {
                    var sf = new T_DIM_STRUCTURE_FACTOR();
                    sf.STRUCTURE_ID          = structId;
                    sf.SAFETY_FACTOR_TYPE_ID = factorId;

                    var entry = entity.Entry(sf);
                    entry.State = System.Data.EntityState.Added;
                }

                var queryDelete =
                    entity.T_DIM_STRUCTURE_FACTOR.Where(
                        s => s.STRUCTURE_ID == structId && arrToDel.Contains(s.SAFETY_FACTOR_TYPE_ID));
                foreach (var config in queryDelete)
                {
                    var entry = entity.Entry(config);
                    entry.State = System.Data.EntityState.Deleted;
                }

                #region 日志信息

                var stc =
                    entity.T_DIM_STRUCTURE.Where(s => s.ID == structId)
                    .Select(s => s.STRUCTURE_NAME_CN)
                    .FirstOrDefault();

                var fac =
                    entity.T_DIM_SAFETY_FACTOR_TYPE.Where(f => factors.Contains(f.SAFETY_FACTOR_TYPE_ID))
                    .Select(f => f.SAFETY_FACTOR_TYPE_NAME);

                this.Request.Properties["ActionParameter"]     = JsonConvert.SerializeObject(array);
                this.Request.Properties["ActionParameterShow"] = string.Format(
                    "结构物:{0},监测因素修改为:{1}",
                    stc ?? string.Empty,
                    string.Join(",", fac));
                #endregion

                try
                {
                    entity.Configuration.AutoDetectChangesEnabled = false;
                    entity.Configuration.ValidateOnSaveEnabled    = false;
                    entity.SaveChanges();
                    return(Request.CreateResponse(
                               System.Net.HttpStatusCode.Accepted,
                               StringHelper.GetMessageString("配置成功")));
                }
                catch (Exception)
                {
                    return(Request.CreateResponse(
                               System.Net.HttpStatusCode.Accepted,
                               StringHelper.GetMessageString("配置失败")));
                }
                finally
                {
                    entity.Configuration.AutoDetectChangesEnabled = true;
                    entity.Configuration.ValidateOnSaveEnabled    = true;
                }
            }
        }
        public HttpResponseMessage ConfigSensorThreshold(IList <SensorThreshold> model)
        {
            using (var db = new SecureCloud_Entities())
            {
                try
                {
                    StringBuilder sb = new StringBuilder();
                    foreach (var sensorThreshold in model)
                    {
                        //日志信息
                        var    sensor     = db.T_DIM_SENSOR.FirstOrDefault(s => s.SENSOR_ID == sensorThreshold.SensorId);
                        string sensorName = string.Empty;
                        string itemName   = null;
                        if (sensor != null)
                        {
                            var structId = Config.GetStructId(sensorThreshold.SensorId);
                            sensorName = sensor.SENSOR_LOCATION_DESCRIPTION;
                            var factor =
                                Config.GetConfigByFactors(new[] { Convert.ToInt32(sensor.SAFETY_FACTOR_TYPE_ID) }, structId)
                                .FirstOrDefault();
                            if (factor != null && sensorThreshold.ItemId < factor.Display.Count())
                            {
                                itemName = factor.Display[sensorThreshold.ItemId];
                            }
                        }

                        sb.AppendFormat("传感器:{0}-", sensorName);
                        sb.AppendFormat("监测项:{0}_", itemName ?? sensorThreshold.ItemId.ToString());

                        foreach (var th in sensorThreshold.Threshold)
                        {
                            SensorThreshold threshold = sensorThreshold;
                            ThresholdModel  th1       = th;
                            var             old       =
                                db.T_FACT_SENSOR_THRESHOLD.Where(
                                    st =>
                                    st.SensorId == threshold.SensorId && st.ItemId == threshold.ItemId &&
                                    st.ThresholdLevel == th1.Level);
                            if (old.Any())
                            {
                                List <string> values = new List <string>(old.Count());
                                foreach (var o in old)
                                {
                                    var entry = db.Entry(o);
                                    values.Add(
                                        string.Format(
                                            "({0},{1})",
                                            o.ThresholdDownValue == double.MinValue
                                                ? "-"
                                                : o.ThresholdDownValue.ToString(),
                                            o.ThresholdUpValue == double.MaxValue ? "+" : o.ThresholdUpValue.ToString()));
                                    entry.State = System.Data.EntityState.Deleted;
                                }
                                if (!string.IsNullOrEmpty(th.Value))
                                {
                                    sb.AppendFormat("[{0}级阈值从{1}改为:{2}]", th.Level, string.Join(";", values), th.Value);
                                }
                                else
                                {
                                    sb.AppendFormat("[{0}级阈值从{1}改为空]", th.Level, string.Join(";", values));
                                }
                            }

                            if (String.IsNullOrEmpty(th1.Value))
                            {
                                continue;
                            }

                            foreach (var value in th1.Value.Split(';'))
                            {
                                var t = new T_FACT_SENSOR_THRESHOLD();
                                t.SensorId       = sensorThreshold.SensorId;
                                t.ItemId         = sensorThreshold.ItemId;
                                t.ThresholdLevel = th1.Level;
                                var v = value.Split(new[] { '(', ',', ')' });
                                t.ThresholdDownValue = v[1] == "-" ? double.MinValue : double.Parse(v[1]);
                                t.ThresholdUpValue   = v[2] == "+" ? double.MaxValue : double.Parse(v[2]);
                                var entry = db.Entry(t);
                                entry.State = System.Data.EntityState.Added;
                            }
                        }
                        sb.Append(";");
                    }

                    #region 日志信息
                    this.Request.Properties["ActionParameter"]     = JsonConvert.SerializeObject(model);
                    this.Request.Properties["ActionParameterShow"] = sb.ToString();

                    #endregion

                    db.SaveChanges();
                    return(Request.CreateResponse(HttpStatusCode.Accepted, StringHelper.GetMessageString("配置成功")));
                }
                catch (FormatException)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, StringHelper.GetMessageString("参数无效")));
                }
                catch (Exception)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, StringHelper.GetMessageString("配置保存失败")));
                }
            }
        }
        public HttpResponseMessage ConfigAllSensorThreshold(FactorThreshold model)
        {
            using (var db = new SecureCloud_Entities())
            {
                try
                {
                    // 归属的传感器
                    var sensors =
                        db.T_DIM_SENSOR.Where(
                            s => s.STRUCT_ID == model.StructId && s.SAFETY_FACTOR_TYPE_ID == model.FactorId).ToList();

                    // 监测因素
                    var factors = Config.GetConfigByFactors(
                        sensors.Select(s => s.SAFETY_FACTOR_TYPE_ID == null ? -1 : Convert.ToInt32(s.SAFETY_FACTOR_TYPE_ID))
                        .Distinct()
                        .Where(f => f > 0)
                        .ToArray(), model.StructId);

                    var sensorDetails = from s in sensors
                                        from f in factors
                                        where s.SAFETY_FACTOR_TYPE_ID == f.Id
                                        select
                                        new
                    {
                        sensorId = s.SENSOR_ID,
                        location = s.SENSOR_LOCATION_DESCRIPTION,
                        items    = f.Display
                    };

                    // 传感器监测项
                    var list = new List <SensorThreshold>();
                    foreach (var sensorDetail in sensorDetails)
                    {
                        int i = 1;
                        foreach (var item in sensorDetail.items)
                        {
                            list.Add(
                                new SensorThreshold
                            {
                                SensorId = sensorDetail.sensorId,
                                ItemId   = i
                            });
                            i++;
                        }
                    }

                    foreach (var threshold in model.Threshold) // 遍历所有等级
                    {
                        foreach (var item in list)             // 遍历所有传感器
                        {
                            SensorThreshold i   = item;
                            ThresholdModel  th  = threshold;
                            var             old =
                                db.T_FACT_SENSOR_THRESHOLD.Where(
                                    t =>
                                    t.SensorId == i.SensorId && t.ItemId == i.ItemId && t.ThresholdLevel == th.Level);

                            if (old.Any()) // 已存在配置
                            {
                                foreach (var o in old)
                                {
                                    var entry = db.Entry(o);
                                    entry.State = System.Data.EntityState.Deleted;
                                }
                            }
                            if (!string.IsNullOrEmpty(threshold.Value))           // 该等级阈值不为空
                            {
                                foreach (var value in threshold.Value.Split(';')) // 遍历阈值内容
                                {
                                    var v           = value.Split(new[] { '(', ',', ')' });
                                    var data2Insert = new T_FACT_SENSOR_THRESHOLD();
                                    data2Insert.SensorId           = i.SensorId;
                                    data2Insert.ItemId             = i.ItemId;
                                    data2Insert.ThresholdLevel     = th.Level;
                                    data2Insert.ThresholdDownValue = v[1] == "-" ? double.MinValue : double.Parse(v[1]);
                                    data2Insert.ThresholdUpValue   = v[2] == "+" ? double.MaxValue : double.Parse(v[2]);

                                    var entry2 = db.Entry(data2Insert);
                                    entry2.State = System.Data.EntityState.Added;
                                }
                            }
                        }
                    }

                    #region 日志信息

                    var stc =
                        db.T_DIM_STRUCTURE.Where(s => s.ID == model.StructId)
                        .Select(s => s.STRUCTURE_NAME_CN)
                        .FirstOrDefault();

                    var fac =
                        db.T_DIM_SAFETY_FACTOR_TYPE.Where(f => f.SAFETY_FACTOR_TYPE_ID == model.FactorId)
                        .Select(f => f.SAFETY_FACTOR_TYPE_NAME)
                        .FirstOrDefault();

                    string values = "空";
                    if (model.Threshold != null)
                    {
                        values = string.Join(
                            ";",
                            model.Threshold.Select(
                                t => string.Format("[{0}级:{1}]", t.Level, t.Value ?? "空")));
                    }

                    this.Request.Properties["ActionParameter"]     = JsonConvert.SerializeObject(model);
                    this.Request.Properties["ActionParameterShow"] = string.Format(
                        "结构物:{0},监测因素:{1},阈值设为{2}",
                        stc,
                        fac,
                        values);
                    #endregion

                    db.SaveChanges();
                    return(Request.CreateResponse(HttpStatusCode.Accepted, StringHelper.GetMessageString("配置成功")));
                }
                catch (FormatException ex)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, StringHelper.GetMessageString("参数无效" + ex.StackTrace)));
                }
                catch (Exception)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, StringHelper.GetMessageString("配置保存失败")));
                }
            }
        }
示例#8
0
        public object GetUserRoleMenu(int userId)
        {
            using (SecureCloud_Entities entity = new SecureCloud_Entities())
            {
                var ur = (from r in entity.T_DIM_ROLE
                          from u in entity.T_DIM_USER
                          where u.ROLE_ID == r.ROLE_ID &&
                          u.USER_NO == userId &&
                          u.USER_IS_ENABLED
                          select u.ROLE_ID);

                if (!ur.ToList().Any())
                {
                    return(ur.ToList());
                }
                else
                {
                    if (ur.FirstOrDefault() == 1)
                    {
                        var query = from r in entity.T_DIM_RESOURCE
                                    where r.RESOURCE_MENU != null && r.PARENT_ID == "0"
                                    select new
                        {
                            RESOURCE_ID   = r.RESOURCE_ID,
                            RESOURCE_NAME = r.RESOURCE_NAME,
                            RESOURCE_MENU = r.RESOURCE_MENU,
                            data          = (from cr in entity.T_DIM_RESOURCE
                                             where cr.PARENT_ID == r.RESOURCE_ID && cr.RESOURCE_MENU != null
                                             select new
                            {
                                RESOURCE_ID = cr.RESOURCE_ID,
                                RESOURCE_NAME = cr.RESOURCE_NAME,
                                RESOURCE_MENU = cr.RESOURCE_MENU
                            })
                        };
                        return(query.ToList());
                    }
                    else
                    {
                        var query = from rr in entity.T_DIM_ROLE_RESOURCE
                                    from r in entity.T_DIM_RESOURCE
                                    where r.RESOURCE_MENU != null && r.PARENT_ID == "0" &&
                                    rr.ROLE_ID == ur.FirstOrDefault() &&
                                    rr.RESOURCE_ID == r.RESOURCE_ID
                                    select new
                        {
                            RESOURCE_ID   = r.RESOURCE_ID,
                            RESOURCE_NAME = r.RESOURCE_NAME,
                            RESOURCE_MENU = r.RESOURCE_MENU,
                            data          = (from crr in entity.T_DIM_ROLE_RESOURCE
                                             from cr in entity.T_DIM_RESOURCE
                                             where cr.PARENT_ID == r.RESOURCE_ID && cr.RESOURCE_MENU != null &&
                                             crr.ROLE_ID == ur.FirstOrDefault() &&
                                             crr.RESOURCE_ID == cr.RESOURCE_ID
                                             select new
                            {
                                RESOURCE_ID = cr.RESOURCE_ID,
                                RESOURCE_NAME = cr.RESOURCE_NAME,
                                RESOURCE_MENU = cr.RESOURCE_MENU
                            })
                        };

                        return(query.ToList());
                    }
                }
            }
        }
        public object FindThresholdBySensor(int sensorId)
        {
            using (var db = new SecureCloud_Entities())
            {
                var sq = from s in db.T_DIM_SENSOR
                         from p in db.T_DIM_SENSOR_PRODUCT
                         where s.SENSOR_ID == sensorId && s.IsDeleted == false &&
                         s.PRODUCT_SENSOR_ID == p.PRODUCT_ID && p.PRODUCT_NAME != gps
                         select s;
                // 归属的传感器
                var sensor = sq.FirstOrDefault();

                if (sensor == null)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, StringHelper.GetMessageString("传感器id无效")));
                }
                var structId = Config.GetStructId(sensorId);
                //修改
                // 监测因素
                var factors = Config.GetConfigByFactors(new[] { Convert.ToInt32(sensor.SAFETY_FACTOR_TYPE_ID) }, structId);

                var sensorDetails = from f in factors
                                    where sensor.SAFETY_FACTOR_TYPE_ID == f.Id
                                    select
                                    new
                {
                    sensorId = sensor.SENSOR_ID,
                    location = sensor.SENSOR_LOCATION_DESCRIPTION,
                    items    = f.Display
                };

                var list = new List <SensorThreshold>();
                foreach (var sensorDetail in sensorDetails)
                {
                    int i = 1;
                    foreach (var item in sensorDetail.items)
                    {
                        list.Add(
                            new SensorThreshold
                        {
                            SensorId = sensorDetail.sensorId,
                            Location = sensorDetail.location,
                            ItemId   = i,
                            ItemName = item
                        });
                        i++;
                    }
                }

                // 查询阈值
                var query = from l in list
                            from t in db.T_FACT_SENSOR_THRESHOLD
                            where t.SensorId == l.SensorId && t.ItemId == l.ItemId
                            select
                            new
                {
                    l.SensorId,
                    l.ItemId,
                    t.ThresholdLevel,
                    Value =
                        t.ThresholdDownValue == null || t.ThresholdUpValue == null
                                ? null
                                : "("
                        + (t.ThresholdDownValue == double.MinValue ? "-" : t.ThresholdDownValue.ToString())
                        + ","
                        + (t.ThresholdUpValue == double.MaxValue ? "+" : t.ThresholdUpValue.ToString())
                        + ")"
                };
                var thresholds = query.ToList();

                // 结果
                var rslt =
                    list.GroupBy(l => new { l.SensorId, l.Location, l.ItemId, l.ItemName })
                    .Select(
                        v =>
                        new SensorThreshold
                {
                    SensorId  = v.Key.SensorId,
                    Location  = v.Key.Location,
                    ItemId    = v.Key.ItemId,
                    ItemName  = v.Key.ItemName,
                    Threshold =
                        new[]
                    {
                        new ThresholdModel
                        {
                            Level = 1,
                            Value =
                                String.Join(
                                    ";",
                                    thresholds.Where(
                                        t =>
                                        t.SensorId
                                        == v.Key.SensorId &&
                                        t.ItemId
                                        == v.Key.ItemId &&
                                        t.ThresholdLevel == 1)
                                    .Select(t => t.Value)
                                    .ToArray())
                        },
                        new ThresholdModel
                        {
                            Level = 2,
                            Value =
                                String.Join(
                                    ";",
                                    thresholds.Where(
                                        t =>
                                        t.SensorId
                                        == v.Key.SensorId &&
                                        t.ItemId
                                        == v.Key.ItemId &&
                                        t.ThresholdLevel == 2)
                                    .Select(t => t.Value)
                                    .ToArray())
                        },
                        new ThresholdModel
                        {
                            Level = 3,
                            Value =
                                String.Join(
                                    ";",
                                    thresholds.Where(
                                        t =>
                                        t.SensorId
                                        == v.Key.SensorId &&
                                        t.ItemId
                                        == v.Key.ItemId &&
                                        t.ThresholdLevel == 3)
                                    .Select(t => t.Value)
                                    .ToArray())
                        },
                        new ThresholdModel
                        {
                            Level = 4,
                            Value =
                                String.Join(
                                    ";",
                                    thresholds.Where(
                                        t =>
                                        t.SensorId
                                        == v.Key.SensorId &&
                                        t.ItemId
                                        == v.Key.ItemId &&
                                        t.ThresholdLevel == 4)
                                    .Select(t => t.Value)
                                    .ToArray())
                        }
                    }
                });

                return(rslt);
            }
        }
        public HttpResponseMessage ModifyGroupJinRunXian([FromUri] int groupId, [FromBody] SensorGroupJinRunXian model)
        {
            using (var db = new SecureCloud_Entities())
            {
                try
                {
                    var group = (from s in db.T_DIM_GROUP
                                 where s.GROUP_ID == groupId
                                 select s
                                 ).FirstOrDefault();

                    if (group == null)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, StringHelper.GetMessageString("传感器组不存在")));
                    }

                    var           sensorIds = model.SensorList.Select(s => s.SensorId);
                    var           sensors   = db.T_DIM_SENSOR.Where(s => sensorIds.Contains(s.SENSOR_ID)).ToList();
                    StringBuilder sb        = new StringBuilder();

                    group.GROUP_NAME = model.GroupName;

                    // 修改前的传感器列表
                    var sensorExists = from s in db.T_DIM_SENSOR_GROUP_JINRUNXIAN
                                       where s.GROUP_ID == groupId
                                       select s;
                    // 删除旧的配置
                    foreach (var sensorExist in sensorExists)
                    {
                        db.T_DIM_SENSOR_GROUP_JINRUNXIAN.Remove(sensorExist);
                    }

                    // 修改后的传感器列表
                    var sensorModels = model.SensorList;
                    // 插入新的配置
                    foreach (var sensor in sensorModels)
                    {
                        sb.AppendFormat(
                            "位置-{0}_是否基准点-{1};",
                            sensors.Where(s => s.SENSOR_ID == sensor.SensorId)
                            .Select(s => s.SENSOR_LOCATION_DESCRIPTION)
                            .FirstOrDefault(),
                            sensor.Height);

                        var sensorGroupJinRunXian = new T_DIM_SENSOR_GROUP_JINRUNXIAN();
                        sensorGroupJinRunXian.GROUP_ID  = groupId;
                        sensorGroupJinRunXian.SENSOR_ID = sensor.SensorId;
                        sensorGroupJinRunXian.HEIGHT    = sensor.Height;

                        var entry = db.Entry(sensorGroupJinRunXian);
                        entry.State = System.Data.EntityState.Added;
                    }

                    #region 日志

                    this.Request.Properties["ActionParameter"]     = JsonConvert.SerializeObject(model);
                    this.Request.Properties["ActionParameterShow"] = string.Format("组:{0},传感器:{1}", model.GroupName, sb);
                    #endregion

                    db.SaveChanges();

                    return(Request.CreateResponse(HttpStatusCode.Accepted, StringHelper.GetMessageString("测斜传感器组修改成功")));
                }
                catch (NullReferenceException e)
                {
                    return(Request.CreateResponse(
                               HttpStatusCode.BadRequest,
                               StringHelper.GetMessageString("测斜传感器组修改失败:参数无效")));
                }
                catch (Exception e)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, StringHelper.GetMessageString("测斜传感器组修改失败")));
                }
            }
        }
        public HttpResponseMessage ModifyGroupChenJiang([FromUri] int groupId, [FromBody] SensorGroupChenJiang model)
        {
            using (var db = new SecureCloud_Entities())
            {
                try
                {
                    var group = (from s in db.T_DIM_GROUP
                                 where s.GROUP_ID == groupId
                                 select s
                                 ).FirstOrDefault();

                    if (group == null)
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, StringHelper.GetMessageString("传感器组不存在")));
                    }

                    var           sensorIds = model.SensorList.Select(s => s.SensorId);
                    var           sensors   = db.T_DIM_SENSOR.Where(s => sensorIds.Contains(s.SENSOR_ID)).ToList();
                    StringBuilder sb        = new StringBuilder();

                    group.GROUP_NAME = model.GroupName;

                    // 修改前的传感器列表
                    var sensorExists = from s in db.T_DIM_SENSOR_GROUP_CHENJIANG
                                       where s.GROUP_ID == groupId
                                       select s;
                    // 修改前 组信息
                    var gsexist = (from s in db.T_DIM_SENSOR
                                   from sg in sensorExists
                                   from d in db.T_DIM_REMOTE_DTU
                                   where s.SENSOR_ID == sg.SENSOR_ID && d.ID == s.DTU_ID
                                   select
                                   new SensorGroup
                    {
                        GroupId = groupId,
                        DtuId = s.DTU_ID.Value,
                        DtuCode = d.REMOTE_DTU_NUMBER,
                        DacInterval = d.REMOTE_DTU_GRANULARITY.Value
                    }).Distinct();

                    // 删除旧的配置
                    foreach (var sensorExist in sensorExists)
                    {
                        db.T_DIM_SENSOR_GROUP_CHENJIANG.Remove(sensorExist);
                    }

                    // 修改后的传感器列表
                    var sensorModels = model.SensorList;
                    // 插入新的配置
                    foreach (var sensor in sensorModels)
                    {
                        sb.AppendFormat(
                            "位置-{0}_长度-{2}_是否基准点-{1};",
                            sensors.Where(s => s.SENSOR_ID == sensor.SensorId)
                            .Select(s => s.SENSOR_LOCATION_DESCRIPTION)
                            .FirstOrDefault(),
                            sensor.IsDatum,
                            sensor.Len);

                        var sensorGroupCeXie = new T_DIM_SENSOR_GROUP_CHENJIANG();
                        sensorGroupCeXie.GROUP_ID     = groupId;
                        sensorGroupCeXie.SENSOR_ID    = sensor.SensorId;
                        sensorGroupCeXie.isJIZHUNDIAN = sensor.IsDatum;
                        sensorGroupCeXie.LENGTH       = sensor.Len;

                        var entry = db.Entry(sensorGroupCeXie);
                        entry.State = System.Data.EntityState.Added;
                    }

                    #region 日志

                    this.Request.Properties["ActionParameter"]     = JsonConvert.SerializeObject(model);
                    this.Request.Properties["ActionParameterShow"] = string.Format("组:{0},传感器:{1}", model.GroupName, sb);
                    #endregion

                    db.SaveChanges();
                    // 修改后的组信息
                    var gs = (from s in db.T_DIM_SENSOR
                              from sg in sensorIds
                              from d in db.T_DIM_REMOTE_DTU
                              where s.SENSOR_ID == sg && d.ID == s.DTU_ID
                              select
                              new SensorGroup
                    {
                        GroupId = groupId,
                        DtuId = s.DTU_ID.Value,
                        DtuCode = d.REMOTE_DTU_NUMBER,
                        DacInterval = d.REMOTE_DTU_GRANULARITY.Value
                    }).Distinct();
                    try
                    {
                        SendMsg2ET(gs.ToList(), gsexist.ToList());
                    }
                    catch (Exception ex)
                    {
                        log.Error(ex);
                    }

                    return(Request.CreateResponse(HttpStatusCode.Accepted, StringHelper.GetMessageString("测斜传感器组修改成功")));
                }
                catch (NullReferenceException e)
                {
                    return(Request.CreateResponse(
                               HttpStatusCode.BadRequest,
                               StringHelper.GetMessageString("测斜传感器组修改失败:参数无效")));
                }
                catch (Exception e)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, StringHelper.GetMessageString("测斜传感器组修改失败")));
                }
            }
        }
        public HttpResponseMessage AddGroupsChenJiang([FromBody] SensorGroupChenJiang model)
        {
            using (var db = new SecureCloud_Entities())
            {
                try
                {
                    var group = new T_DIM_GROUP();
                    group.GROUP_NAME    = model.GroupName;
                    group.GROUP_TYPE_ID = 2;

                    var entry = db.Entry(group);
                    entry.State = System.Data.EntityState.Added;

                    var           sensorIds = model.SensorList.Select(s => s.SensorId);
                    var           sensors   = db.T_DIM_SENSOR.Where(s => sensorIds.Contains(s.SENSOR_ID)).ToList();
                    StringBuilder sb        = new StringBuilder();

                    foreach (var p in model.SensorList)
                    {
                        sb.AppendFormat(
                            "位置-{0}_长度-{2}_是否基准点-{1};",
                            sensors.Where(s => s.SENSOR_ID == p.SensorId)
                            .Select(s => s.SENSOR_LOCATION_DESCRIPTION)
                            .FirstOrDefault(),
                            p.IsDatum,
                            p.Len);

                        var sensorGroupChenJiang = new T_DIM_SENSOR_GROUP_CHENJIANG();
                        sensorGroupChenJiang.GROUP_ID     = group.GROUP_ID;
                        sensorGroupChenJiang.SENSOR_ID    = p.SensorId;
                        sensorGroupChenJiang.isJIZHUNDIAN = p.IsDatum;
                        sensorGroupChenJiang.LENGTH       = p.Len;

                        var test = db.Entry(sensorGroupChenJiang);
                        test.State = System.Data.EntityState.Added;
                    }

                    #region 日志

                    this.Request.Properties["ActionParameter"]     = JsonConvert.SerializeObject(model);
                    this.Request.Properties["ActionParameterShow"] = string.Format("组:{0},传感器:{1}", model.GroupName, sb);
                    #endregion

                    db.SaveChanges();
                    int gid = group.GROUP_ID;
                    // 增加的组信息
                    var gs = (from s in db.T_DIM_SENSOR
                              from sg in sensorIds
                              from d in db.T_DIM_REMOTE_DTU
                              where s.SENSOR_ID == sg && d.ID == s.DTU_ID
                              select
                              new SensorGroup
                    {
                        GroupId = gid,
                        DtuId = s.DTU_ID.Value,
                        DtuCode = d.REMOTE_DTU_NUMBER,
                        DacInterval = d.REMOTE_DTU_GRANULARITY.Value
                    })
                             .Distinct();
                    try
                    {
                        SendMsg2ET(gs.ToList());
                    }
                    catch (Exception ex)
                    {
                        log.Error(ex);
                    }


                    return(Request.CreateResponse(HttpStatusCode.Accepted, StringHelper.GetMessageString("测斜传感器组新增成功")));
                }
                catch (NullReferenceException e)
                {
                    return(Request.CreateResponse(
                               HttpStatusCode.BadRequest,
                               StringHelper.GetMessageString("测斜传感器组新增失败:参数无效")));
                }
                catch (Exception e)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, StringHelper.GetMessageString("测斜传感器组新增失败")));
                }
            }
        }
        public HttpResponseMessage RemoveGroup([FromUri] int groupId)
        {
            using (var db = new SecureCloud_Entities())
            {
                var group = (from s in db.T_DIM_GROUP
                             where s.GROUP_ID == groupId
                             select s).FirstOrDefault();
                if (group == null)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, StringHelper.GetMessageString("传感器组不存在")));
                }

                #region 日志

                this.Request.Properties["ActionParameterShow"] = string.Format("组:{0}", group.GROUP_NAME);
                #endregion

                var cexie = from c in db.T_DIM_SENSOR_GROUP_CEXIE
                            where c.GROUP_ID == groupId
                            select c;
                foreach (var c in cexie)
                {
                    db.T_DIM_SENSOR_GROUP_CEXIE.Remove(c);
                }

                var gscexie = (from s in db.T_DIM_SENSOR
                               from sg in cexie
                               from d in db.T_DIM_REMOTE_DTU
                               where s.SENSOR_ID == sg.SENSOR_ID && d.ID == s.DTU_ID
                               select
                               new SensorGroup
                {
                    GroupId = groupId,
                    DtuId = s.DTU_ID.Value,
                    DtuCode = d.REMOTE_DTU_NUMBER,
                    DacInterval = d.REMOTE_DTU_GRANULARITY.Value
                }).Distinct();


                var chenjiang = from j in db.T_DIM_SENSOR_GROUP_CHENJIANG
                                where j.GROUP_ID == groupId
                                select j;

                var gschenjiang = (from s in db.T_DIM_SENSOR
                                   from sg in chenjiang
                                   from d in db.T_DIM_REMOTE_DTU
                                   where s.SENSOR_ID == sg.SENSOR_ID && d.ID == s.DTU_ID
                                   select
                                   new SensorGroup
                {
                    GroupId = groupId,
                    DtuId = s.DTU_ID.Value,
                    DtuCode = d.REMOTE_DTU_NUMBER,
                    DacInterval = d.REMOTE_DTU_GRANULARITY.Value
                }).Distinct();

                foreach (var j in chenjiang)
                {
                    db.T_DIM_SENSOR_GROUP_CHENJIANG.Remove(j);
                }

                var jinrunxian = from r in db.T_DIM_SENSOR_GROUP_JINRUNXIAN
                                 where r.GROUP_ID == groupId
                                 select r;
                foreach (var r in jinrunxian)
                {
                    db.T_DIM_SENSOR_GROUP_JINRUNXIAN.Remove(r);
                }

                db.T_DIM_GROUP.Remove(group);
                try
                {
                    var lstce = gscexie.ToList();
                    var lstcj = gschenjiang.ToList();
                    db.SaveChanges();
                    try
                    {
                        SendMsg2ET(lstce);
                    }
                    catch (Exception ex)
                    {
                        log.Error(ex);
                    }

                    try
                    {
                        SendMsg2ET(lstcj);
                    }
                    catch (Exception ex)
                    {
                        log.Error(ex);
                    }

                    return(Request.CreateResponse(HttpStatusCode.Accepted, StringHelper.GetMessageString("传感器组删除成功")));
                }
                catch (Exception e)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, StringHelper.GetMessageString("传感器组删除失败")));
                }
            }
        }
示例#14
0
        public object GetLastDataByGroup(int groupId, string direct)
        {
            using (var entity = new SecureCloud_Entities())
            {
                var maxDate = (from d in entity.T_THEMES_DEFORMATION_DEEP_DISPLACEMENT
                               from sg in entity.T_DIM_SENSOR_GROUP_CEXIE
                               where
                               d.SENSOR_ID == sg.SENSOR_ID && sg.GROUP_ID == groupId &&
                               d.DEEP_CUMULATIVEDISPLACEMENT_X_VALUE != null &&
                               d.DEEP_CUMULATIVEDISPLACEMENT_Y_VALUE != null
                               select d.ACQUISITION_DATETIME).Max();

                var query = from d in entity.T_THEMES_DEFORMATION_DEEP_DISPLACEMENT
                            from sg in entity.T_DIM_SENSOR_GROUP_CEXIE
                            where
                            d.SENSOR_ID == sg.SENSOR_ID && sg.GROUP_ID == groupId &&
                            d.ACQUISITION_DATETIME == maxDate
                            select
                            new
                {
                    depth          = sg.DEPTH,
                    xvalue         = d.DEEP_CUMULATIVEDISPLACEMENT_X_VALUE,
                    yvalue         = d.DEEP_CUMULATIVEDISPLACEMENT_Y_VALUE,
                    acquistiontime = d.ACQUISITION_DATETIME
                };
                var list = query.ToList();
                if (direct == "x")
                {
                    return(new JArray(list.GroupBy(d => d.acquistiontime).Select(d =>
                                                                                 new JObject(
                                                                                     new JProperty("acquistiontime", d.Key),
                                                                                     new JProperty(
                                                                                         "values",
                                                                                         new JArray(d.OrderBy(v => v.depth).Select(v =>
                                                                                                                                   new JObject(
                                                                                                                                       new JProperty("depth", v.depth),
                                                                                                                                       new JProperty("xvalue", v.xvalue)))))))));
                }

                if (direct == "y")
                {
                    return(new JArray(list.GroupBy(d => d.acquistiontime).Select(d =>
                                                                                 new JObject(
                                                                                     new JProperty("acquistiontime", d.Key),
                                                                                     new JProperty(
                                                                                         "values",
                                                                                         new JArray(d.OrderBy(v => v.depth).Select(v =>
                                                                                                                                   new JObject(
                                                                                                                                       new JProperty("depth", v.depth),
                                                                                                                                       new JProperty("yvalue", v.yvalue)))))))));
                }

                return(new JArray(list.GroupBy(d => d.acquistiontime).Select(d =>
                                                                             new JObject(
                                                                                 new JProperty("acquistiontime", d.Key),
                                                                                 new JProperty(
                                                                                     "values",
                                                                                     new JArray(d.OrderBy(v => v.depth).Select(v =>
                                                                                                                               new JObject(
                                                                                                                                   new JProperty("depth", v.depth),
                                                                                                                                   new JProperty("xvalue", v.xvalue),
                                                                                                                                   new JProperty("yvalue", v.yvalue)))))))));
            }
        }