using System; using System.Collections.Generic; using System.Threading.Tasks; using DotNetCore.CAP; using JiShe.CollectBus.Ammeters; using JiShe.CollectBus.Common.Consts; using JiShe.CollectBus.FreeSql; using JiShe.CollectBus.GatherItem; using JiShe.CollectBus.IotSystems.MessageIssueds; using JiShe.CollectBus.IotSystems.MeterReadingRecords; using JiShe.CollectBus.IotSystems.Watermeter; using JiShe.CollectBus.Repository; using JiShe.CollectBus.Repository.MeterReadingRecord; using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.Logging; using Volo.Abp.Domain.Repositories; using Volo.Abp.Uow; namespace JiShe.CollectBus.ScheduledMeterReading { /// /// 能耗系统定时采集服务 /// [AllowAnonymous] //[Route($"/energy/app/scheduled")] public class EnergySystemScheduledMeterReadingService : BasicScheduledMeterReadingService { public EnergySystemScheduledMeterReadingService(ILogger logger, ICapPublisher capBus, IMeterReadingRecordRepository _meterReadingRecordsRepository) :base(logger, capBus, _meterReadingRecordsRepository) { } public sealed override string SystemType => SystemTypeConst.Energy; /// /// 获取采集项列表 /// /// public override async Task> GetGatherItemByDataTypes() { try { string sql = $"SELECT DataType,ItemCode FROM TB_GatherItem(NOLOCK) WHERE [State]=0"; return await SqlProvider.Instance.Change(DbEnum.EnergyDB) .Ado .QueryAsync(sql, null); } catch { return null; } } /// /// 获取电表信息 /// /// 采集端Code /// //[HttpGet] //[Route($"ammeter/list")] public override async Task> GetAmmeterInfoList(string gatherCode = "V4-Gather-8890") { string sql = $@"SELECT C.ID,C.Name,C.FocusID,C.SingleRate,C.MeteringCode,C.Code AS BrandType,C.Baudrate,C.Password,C.MeteringPort,C.[Address] AS AmmerterAddress,C.TypeName,C.Protocol,C.TripState,C.[State],B.[Address],B.AreaCode,B.AutomaticReport,D.DataTypes,B.TimeDensity,A.GatherCode,C.Special,C.[ProjectID],B.AbnormalState,B.LastTime,CONCAT(B.AreaCode, B.[Address]) AS FocusAddress FROM TB_GatherInfo(NOLOCK) AS A INNER JOIN TB_FocusInfo(NOLOCK) AS B ON A.ID = B.GatherInfoID AND B.RemoveState >= 0 AND B.State>=0 INNER JOIN TB_AmmeterInfo(NOLOCK) AS C ON B.ID = C.FocusID AND C.State>= 0 AND C.State<100 INNER JOIN TB_AmmeterGatherItem(NOLOCK) AS D ON C.ID = D.AmmeterID AND D.State>=0 WHERE 1=1 and C.Special = 0 "; //TODO 记得移除特殊表过滤 if (!string.IsNullOrWhiteSpace(gatherCode)) { sql = $@"{sql} AND A.GatherCode = '{gatherCode}'"; } return await SqlProvider.Instance.Change(DbEnum.EnergyDB) .Ado .QueryAsync(sql); } /// /// 获取水表信息 /// /// 采集端Code /// //[HttpGet] //[Route($"ammeter/list")] public override async Task> GetWatermeterInfoList(string gatherCode = "V4-Gather-8890") { string sql = $@"SELECT A.ID, A.Name, A.FocusID, A.MeteringCode, A.Baudrate, A.MeteringPort, A.[Address] AS MeterAddress, A.[Password], A.TypeName, A.Protocol, A.Code, A.LinkType, A.HaveValve, A.MeterType AS MeterTypeName, A.MeterBrand, A.TimesRate, A.TimeDensity, A.TripState, B.[Address], B.AreaCode, B.AutomaticReport, A.[State], C.GatherCode, A.[ProjectID], B.AbnormalState, B.LastTime FROM [dbo].[TB_WatermeterInfo](NOLOCK) AS A INNER JOIN [dbo].[TB_FocusInfo](NOLOCK) AS B ON A.FocusID=B.ID AND B.RemoveState >= 0 AND B.State>=0 INNER JOIN [dbo].[TB_GatherInfo](NOLOCK) AS C ON B.GatherInfoID=C.ID WHERE A.State>=0 AND A.State<100 "; if (!string.IsNullOrWhiteSpace(gatherCode)) { sql = $@"{sql} AND C.GatherCode= '{gatherCode}'"; } return await SqlProvider.Instance.Change(DbEnum.EnergyDB) .Ado .QueryAsync(sql); } } }