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-21 11:48:31 +08:00
using JiShe.CollectBus.IotSystems.Devices ;
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-20 16:40:27 +08:00
using JiShe.CollectBus.Repository ;
using JiShe.CollectBus.Repository.MeterReadingRecord ;
2025-03-24 20:54:31 +08:00
using MassTransit ;
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-24 20:54:31 +08:00
public EnergySystemScheduledMeterReadingService ( ILogger < EnergySystemScheduledMeterReadingService > logger ,
ICapPublisher capBus , IMeterReadingRecordRepository meterReadingRecordsRepository ) : base ( logger , capBus , meterReadingRecordsRepository )
2025-03-12 16:29:38 +08:00
{
2025-03-24 20:54:31 +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" )
{
2025-03-24 20:54:31 +08:00
List < AmmeterInfo > ammeterInfos = new List < AmmeterInfo > ( ) ;
ammeterInfos . Add ( new AmmeterInfo ( )
2025-03-12 14:57:42 +08:00
{
2025-03-24 20:54:31 +08:00
Baudrate = 2400 ,
FocusAddress = "402440506" ,
Name = "三相电表" ,
FocusID = 1 ,
DatabaseBusiID = 1 ,
MeteringCode = 2 ,
AmmerterAddress = "402410040506" ,
ID = 9980 ,
TypeName = 3 ,
} ) ;
ammeterInfos . Add ( new AmmeterInfo ( )
{
Baudrate = 2400 ,
FocusAddress = "542400504" ,
Name = "单相电表" ,
FocusID = 1 ,
DatabaseBusiID = 1 ,
MeteringCode = 2 ,
AmmerterAddress = "542410000504" ,
ID = 9981 ,
TypeName = 1 ,
} ) ;
return ammeterInfos ;
//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,(select top 1 DatabaseBusiID from TB_Project where ID = B.ProjectID) AS DatabaseBusiID
// 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<AmmeterInfo>(sql);
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 < 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 ,
2025-03-21 11:48:31 +08:00
B . LastTime ,
CONCAT ( B . AreaCode , B . [ Address ] ) AS FocusAddress ,
( select top 1 DatabaseBusiID from TB_Project where ID = b . ProjectID ) AS DatabaseBusiID
2025-03-12 14:57:42 +08:00
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 ) ;
}
}
}