/// <summary> /// 删除用户已获取的主机列表中的数据 /// </summary> /// <param name="cachePageId">当前用户获取的主机列表缓存页主键</param> /// <param name="Ids">准备被删除的主键集合</param> /// <returns></returns> public OperationResult DeleteHosts(Guid[] cachePageId, params Guid[] Ids) { int count = 0; HostRepository.UnitOfWork.BeginTransaction(); foreach (var i in Ids) { if (!cachePageId.Contains(i)) { throw new Exception($"id:主机{i}不存在或你未获取过该数据!"); } count += HostRepository.DeleteDirect(i); // 删除关联该主机的分组信息 var ditem1 = DataItemDetailRepository.Entities.FirstOrDefault(m => m.QueryCoding == "GroupType" && m.Index == 0); var grous = GroupControlRepository.TrackEntities.Where(m => m.DataItemDetail_Id == ditem1.Id && m.ObjectId == i).ToList(); GroupControlRepository.Delete(grous); // 删除主机关联的能耗信息 var ditem2 = DataItemDetailRepository.Entities.FirstOrDefault(m => m.QueryCoding == "ECType" && m.Index == 0); var ect = AnnualElectricityRepository.TrackEntities.Where(m => m.DataItemDetail_Id == ditem2.Id && m.ObjectId == i).ToList(); AnnualElectricityRepository.Delete(ect); } HostRepository.UnitOfWork.Commit(); if (count > 0) { return(new OperationResult(OperationResultType.Success, $"{count}条数据被删除")); } else { return(new OperationResult(OperationResultType.NoChanged, "请求被取消")); } }
/// <summary> /// 添加或更新主机的能耗值 /// </summary> /// <param name="HostId">主机主键</param> /// <param name="OrganizeId">主机所属的组织机构Id</param> /// <param name="value">指定能耗值</param> private void AddEnergyConsumption(Guid HostId, Guid OrganizeId, double value) { try { /*=================================================== * 备注:1、主机上传的能耗信息按月统计,每月清零 * 2、主机上传的能耗值小于记录中的值,代表主机能耗可能被清零或更换 * ===================================================*/ // 获取主机能耗类型主键==‘主机能耗类型’ var ditem = DataItemDetailRepository.Entities.FirstOrDefault(m => m.QueryCoding == "ECType" && m.Index == 0); // 获取查询年能耗的查询仓储 var _AnnualIQ = AnnualElectricityRepository.TrackEntities.Where(m => m.ObjectId == HostId && m.DataItemDetail_Id == ditem.Id); // 获取去年的年能耗记录 var _LastYearEct = _AnnualIQ.FirstOrDefault(m => m.Year == (DateTime.Now.Year - 1)); // 获取今年的能耗记录 var _CurrentYeartEct = _AnnualIQ.FirstOrDefault(m => m.Year == DateTime.Now.Year); if (_CurrentYeartEct == null /*今年的能耗记录不存在,我们需要创建*/) { // 按年统计,每月的能耗 AnnualElectricity annualElectricity = new AnnualElectricity { ObjectId = HostId, DataItemDetail_Id = ditem.Id, Year = DateTime.Now.Year, UpdateTime = DateTime.Now, CreatedTime = DateTime.Now, Organzie_Id = OrganizeId, YearTotal = value, }; annualElectricity.Cumulative = value; if (_LastYearEct != null /*去年能耗存在,则计算历史能耗累计数值*/) { annualElectricity.Cumulative += _LastYearEct.Cumulative; } annualElectricity[DateTime.Now.Month] = value; // 设置当前月的能耗 // 按月统计,每天的能耗 MonthElectricity monthElectricity = new MonthElectricity() { Month = DateTime.Now.Month, CreatedTime = DateTime.Now, AnnualElectricityOne = annualElectricity, MonthTotal = value, UpdateTime = DateTime.Now }; monthElectricity[DateTime.Now.Day] = value; // 按天统计,每时的能耗 DayElectricity dayElectricity = new DayElectricity() { UpdateTime = DateTime.Now, CreatedTime = DateTime.Now, DayTotal = value, MonthElectricityOne = monthElectricity, Today = DateTime.Now.Day }; dayElectricity[DateTime.Now.Hour] = value; // 关联统计 monthElectricity.DayElectricityMany.Add(dayElectricity); annualElectricity.MonthElectricityMany.Add(monthElectricity); AnnualElectricityRepository.Insert(annualElectricity); } else/*今年的能耗记录存在,则直接计算能耗差值*/ { // 获取本月的能耗记录 var _CurrentMonthEct = _CurrentYeartEct.MonthElectricityMany.FirstOrDefault(m => m.Month == DateTime.Now.Month); if (_CurrentMonthEct == null /*当月能耗记录不存在*/) { _CurrentYeartEct.Cumulative += value; // 历史累计能耗计算 _CurrentYeartEct.YearTotal += value; // 年总能耗计算 // 创建当前月的能耗统计 _CurrentMonthEct = new MonthElectricity { UpdateTime = DateTime.Now, CreatedTime = DateTime.Now, MonthTotal = value, AnnualElectricityOne = _CurrentYeartEct, Month = DateTime.Now.Month, }; _CurrentMonthEct[DateTime.Now.Day] = value; // 创建当前天的能耗统计 var _CurrentDayEct = new DayElectricity { UpdateTime = DateTime.Now, CreatedTime = DateTime.Now, DayTotal = value, MonthElectricityOne = _CurrentMonthEct, Today = DateTime.Now.Day }; _CurrentDayEct[DateTime.Now.Hour] = value; // 关联能耗统计记录 _CurrentMonthEct.DayElectricityMany.Add(_CurrentDayEct); _CurrentYeartEct.MonthElectricityMany.Add(_CurrentMonthEct); AnnualElectricityRepository.Update(_CurrentYeartEct); } else/*当月能耗存在*/ { // 获取当天的能耗记录 var _CurrentDayEct = _CurrentMonthEct.DayElectricityMany.FirstOrDefault(m => m.Today == DateTime.Now.Day); // 上传的能耗数据比记录中的小,则主机能耗被清零操作或主机被更换 if (_CurrentYeartEct[DateTime.Now.Month] > value) { double overs = Math.Abs(value - (_CurrentMonthEct.MonthTotal - _CurrentMonthEct.LastTagValue)); if (_CurrentMonthEct.Tag == 0) { _CurrentMonthEct.Tag = DateTime.Now.Day; _CurrentMonthEct.LastTagValue = _CurrentMonthEct.MonthTotal; overs = value; } else { if ((_CurrentMonthEct.MonthTotal - _CurrentMonthEct.LastTagValue) > value) { _CurrentMonthEct.Tag = DateTime.Now.Day; _CurrentMonthEct.LastTagValue = _CurrentMonthEct.MonthTotal; overs = value; } } if (_CurrentDayEct == null) { // 创建当前天的能耗统计 _CurrentDayEct = new DayElectricity { UpdateTime = DateTime.Now, CreatedTime = DateTime.Now, MonthElectricityOne = _CurrentMonthEct, Today = DateTime.Now.Day }; _CurrentMonthEct.DayElectricityMany.Add(_CurrentDayEct); //if (boolRp) { overs = value; } _CurrentMonthEct[DateTime.Now.Day] = overs; _CurrentDayEct[DateTime.Now.Hour] = overs; } else { _CurrentMonthEct[DateTime.Now.Day] += overs; double xc = _CurrentMonthEct[DateTime.Now.Day]; for (int n = 0; n < DateTime.Now.Hour; n++) { xc -= _CurrentDayEct[n]; } _CurrentDayEct[DateTime.Now.Hour] = Math.Abs(xc); } _CurrentDayEct.DayTotal = _CurrentMonthEct[DateTime.Now.Day]; _CurrentMonthEct.MonthTotal += overs; _CurrentYeartEct[DateTime.Now.Month] += overs; _CurrentYeartEct.YearTotal += overs; _CurrentYeartEct.Cumulative += overs; AnnualElectricityRepository.Update(_CurrentYeartEct); } else { _CurrentYeartEct.YearTotal += (value - _CurrentYeartEct[DateTime.Now.Month]); _CurrentYeartEct.Cumulative += (value - _CurrentYeartEct[DateTime.Now.Month]); _CurrentMonthEct.MonthTotal = value; _CurrentYeartEct[DateTime.Now.Month] = value; Double xf = value; for (int n = 1; n < DateTime.Now.Day; n++) { xf -= _CurrentMonthEct[n]; } _CurrentMonthEct[DateTime.Now.Day] = Math.Abs(xf); _CurrentDayEct.DayTotal = Math.Abs(xf); double xc = Math.Abs(xf); for (int n = 0; n < DateTime.Now.Hour; n++) { xc -= _CurrentDayEct[n]; } _CurrentDayEct[DateTime.Now.Hour] = Math.Abs(xc); AnnualElectricityRepository.Update(_CurrentYeartEct); } } } } catch (Exception ex) { // 如果报错,保存错误日志 LogManager.GetLogger("AddEnergyConsumption_Host").Error(ex); } }