2025-03-17 14:23:48 +08:00
using System ;
using System.Collections.Generic ;
2025-03-14 14:38:08 +08:00
using System.Threading.Tasks ;
using DotNetCore.CAP ;
2025-03-12 14:57:42 +08:00
using JiShe.CollectBus.Ammeters ;
using JiShe.CollectBus.Common.Consts ;
using JiShe.CollectBus.FreeSql ;
2025-03-14 14:24:38 +08:00
using JiShe.CollectBus.GatherItem ;
2025-03-17 14:23:48 +08:00
using JiShe.CollectBus.IotSystems.MessageIssueds ;
2025-03-18 22:43:24 +08:00
using JiShe.CollectBus.IotSystems.MeterReadingRecords ;
2025-03-14 14:38:08 +08:00
using JiShe.CollectBus.IotSystems.Watermeter ;
2025-03-12 14:57:42 +08:00
using Microsoft.AspNetCore.Authorization ;
2025-03-13 10:51:16 +08:00
using Microsoft.Extensions.Logging ;
2025-03-17 14:23:48 +08:00
using Volo.Abp.Domain.Repositories ;
2025-03-18 13:56:38 +08:00
using Volo.Abp.Uow ;
2025-03-12 14:57:42 +08:00
2025-03-14 14:38:08 +08:00
namespace JiShe.CollectBus.ScheduledMeterReading
2025-03-12 14:57:42 +08:00
{
/// <summary>
/// 能耗系统定时采集服务
/// </summary>
[AllowAnonymous]
//[Route($"/energy/app/scheduled")]
public class EnergySystemScheduledMeterReadingService : BasicScheduledMeterReadingService
{
2025-03-13 10:51:16 +08:00
2025-03-18 13:56:38 +08:00
public EnergySystemScheduledMeterReadingService ( ILogger < EnergySystemScheduledMeterReadingService > logger ,
2025-03-18 22:43:24 +08:00
ICapPublisher capBus ,
IRepository < MeterFifteenMinuteReadingRecords , Guid > fifteenMinuteReadingRecordRepository , IRepository < MeterFiveMinuteReadingRecords , Guid > fiveMinuteReadingRecordRepository , IRepository < MeterOneMinuteReadingRecords , Guid > oneMinuteReadingRecordRepository ) : base ( logger , capBus , fifteenMinuteReadingRecordRepository , fiveMinuteReadingRecordRepository , oneMinuteReadingRecordRepository )
2025-03-12 16:29:38 +08:00
{
2025-03-13 11:55:51 +08:00
2025-03-12 16:29:38 +08:00
}
2025-03-12 14:57:42 +08:00
public sealed override string SystemType = > SystemTypeConst . Energy ;
2025-03-14 14:24:38 +08:00
/// <summary>
/// 获取采集项列表
/// </summary>
/// <returns></returns>
public override async Task < List < GatherItemInfo > > GetGatherItemByDataTypes ( )
{
try
{
string sql = $"SELECT DataType,ItemCode FROM TB_GatherItem(NOLOCK) WHERE [State]=0" ;
return await SqlProvider . Instance . Change ( DbEnum . EnergyDB )
. Ado
. QueryAsync < GatherItemInfo > ( sql , null ) ;
}
catch
{
return null ;
}
}
2025-03-12 14:57:42 +08:00
/// <summary>
/// 获取电表信息
/// </summary>
/// <param name="gatherCode">采集端Code</param>
/// <returns></returns>
//[HttpGet]
//[Route($"ammeter/list")]
public override async Task < List < AmmeterInfo > > 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
2025-03-17 11:34:30 +08:00
WHERE 1 = 1 and C . Special = 0 ";
//TODO 记得移除特殊表过滤
2025-03-12 14:57:42 +08:00
if ( ! string . IsNullOrWhiteSpace ( gatherCode ) )
{
2025-03-17 11:34:30 +08:00
sql = $@"{sql} AND A.GatherCode = '{gatherCode}'" ;
2025-03-12 14:57:42 +08:00
}
return await SqlProvider . Instance . Change ( DbEnum . EnergyDB )
. Ado
. QueryAsync < AmmeterInfo > ( sql ) ;
}
/// <summary>
/// 获取水表信息
/// </summary>
/// <param name="gatherCode">采集端Code</param>
/// <returns></returns>
//[HttpGet]
//[Route($"ammeter/list")]
public override async Task < List < WatermeterInfo > > 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 < WatermeterInfo > ( sql ) ;
}
}
}