tangxu
2022-10-08 a36faf95b4bee06626f33a82448f93e364b29ec5
Merge branch 'master' of http://47.103.154.90:83/r/IStation/Service.V4.1
已修改14个文件
已添加7个文件
552 ■■■■■ 文件已修改
Application/IStation.Application.Monitor/monitor_point/_/MonitorPoint_Controller.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Application/IStation.Application.Monitor/monitor_point_mapping/MonitorPointMapping_Controller.cs 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Application/IStation.Application.Run/monitor_kpi/MonitorKpi_Controller.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calculation/IStation.EtaCalculation4Custom/smi/AnalyCalculatorSMI.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calculation/IStation.EtaCalculation4Custom/smi/station/EtaAnalyCalculator4南大路.cs 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calculation/IStation.EtaCalculation4Custom/smi/station/EtaAnalyCalculator4松花江.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calculation/IStation.EtaCalculation4Custom/smi/station/EtaAnalyCalculator4松花江_shys.cs 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataProvider/IStation.DataProvider.SMI/IStation.DataProvider.SMI.csproj 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataProvider/IStation.DataProvider.SMI/data/SrcRecord.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataProvider/IStation.DataProvider.SMI/data_shys/DataJob.cs 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataProvider/IStation.DataProvider.SMI/data_shys/DebugRecord.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataProvider/IStation.DataProvider.SMI/data_shys/JsonData.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataProvider/IStation.DataProvider.SMI/data_shys/JsonStore.cs 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DataProvider/IStation.DataProvider.SMI/data_shys/SrcRecord.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Entry/IStation.WebApi.Entry/Properties/PublishProfiles/FolderProfile.pubxml.user 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.WebApi.sln 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Server/IStation.Server.Eta/analy/job/EtaAnalyCronJob.cs 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Service/IStation.Service.Monitor/monitor_point/monitor_point_mapping/MonitorPointMapping.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TopShelf/IStation.TopShelf.DataProvider4SMI/IStation.TopShelf.DataProvider4SMI.csproj.user 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
TopShelf/IStation.TopShelf.DataProvider4SMI/Properties/PublishProfiles/FolderProfile.pubxml.user 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
TopShelf/IStation.TopShelf.Eta/Properties/PublishProfiles/FolderProfile.pubxml.user 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Application/IStation.Application.Monitor/monitor_point/_/MonitorPoint_Controller.cs
@@ -16,7 +16,7 @@
    /// </summary>
    [Route("Monitor/MonitorPoint")]
    [ApiDescriptionSettings("Monitor", Name = "监测点", Order = 790)]
    public class MonitorPoint_Controller : IDynamicApiController
    public class MonitorPoint_Controller : IDynamicApiController
    {
        private readonly Service.MonitorPoint _service = new Service.MonitorPoint();
@@ -325,7 +325,8 @@
            var signal_rhs_list = new List<Model.Signal>();
            var signal_list = new Service.Signal().GetByIds(input.CorpID, input.SignalList.Select(x => x.ID).ToList());
            signal_list.ForEach(x => {
            signal_list.ForEach(x =>
            {
                var signal_input = input.SignalList.Find(t => t.ID == x.ID);
                var signal_rhs = new Model.Signal(x);
                signal_input.Adapt(signal_rhs);
@@ -358,7 +359,8 @@
                x.Adapt(monitor_rhs);
                var signal_rhs_list = new List<Model.Signal>();
                var signal_list = new Service.Signal().GetByIds(x.CorpID, x.SignalList.Select(x => x.ID).ToList());
                signal_list.ForEach(y => {
                signal_list.ForEach(y =>
                {
                    var signal_input = x.SignalList.Find(t => t.ID == x.ID);
                    var signal_rhs = new Model.Signal(y);
                    signal_input.Adapt(signal_rhs);
@@ -376,7 +378,7 @@
        /// </summary>
        [Route("UpdateGroupID@V1.0")]
        [HttpPut]
        public bool UpdateGroupID([Required] UpdateGroupIDUnderCorpInput input)
        public bool UpdateGroupID([Required] UpdateGroupIDUnderCorpInput input)
        {
            var bol = _service.UpdateGroupID(input.CorpID, input.ID, input.GroupID);
            return bol;
Application/IStation.Application.Monitor/monitor_point_mapping/MonitorPointMapping_Controller.cs
@@ -240,16 +240,21 @@
        [HttpPost]
        public bool SetOfObject([Required] SetObjectMonitorPointMappingInput input)
        {
            var list = input.Items.Select(x => new Model.MonitorPointMapping()
            var list = new List<Model.MonitorPointMapping>();
            if (input.Items != null && input.Items.Count > 0)
            {
                ID = x.ID,
                CorpID = input.CorpID,
                ObjectType = input.ObjectType,
                ObjectID = input.ObjectID,
                MonitorPointID=x.MonitorPointID,
                SortCode = x.SortCode,
                AccordParas = x.AccordParas
            }).ToList();
                list = input.Items.Select(x => new Model.MonitorPointMapping()
                {
                    ID = x.ID,
                    CorpID = input.CorpID,
                    ObjectType = input.ObjectType,
                    ObjectID = input.ObjectID,
                    MonitorPointID = x.MonitorPointID,
                    SortCode = x.SortCode,
                    AccordParas = x.AccordParas
                }).ToList();
            }
            var bol = _service.SetOfObject(input.CorpID, input.ObjectType, input.ObjectID, list);
            return bol;
        }
@@ -269,6 +274,18 @@
            return new DeleteReasonOutput() { Success = bol, Reason = Msg };
        }
        /// <summary>
        /// åˆ é™¤
        /// </summary>
        [Route("DeleteByMonitorPointID@V1.0")]
        [HttpDelete]
        public DeleteReasonOutput DeleteByMonitorPointID([FromQuery][Required] MonitorPointIDUnderCorpInput input)
        {
            var bol = _service.DeleteByMonitorPointID(input.CorpID, input.MonitorPointID, out string Msg);
            return new DeleteReasonOutput() { Success = bol, Reason = Msg };
        }
        #endregion
    }
Application/IStation.Application.Run/monitor_kpi/MonitorKpi_Controller.cs
@@ -86,7 +86,7 @@
                //最后运行状态记录列表
                var monitor_group_list = new Service.MonitorPointGroup().GetByBelongTypeAndBelongID(CorpID, IStation.ObjectType.Station, station.ID);
                if (monitor_group_list != null && monitor_group_list.Count > 0)
                {
                {
                    var monitor_engine_pump_group_list = monitor_group_list.Where
                        (x => x.Flags != null && x.Flags.Contains(LogicFlags.机泵)).OrderBy(x => x.ParentIds == null ? 0 : x.ParentIds.Count).ThenBy(x => x.SortCode).ToList();
                    if (monitor_engine_pump_group_list != null && monitor_engine_pump_group_list.Count > 0)
@@ -125,6 +125,8 @@
            return vm_list;
        }
        /// <summary>
        /// é€šè¿‡ StationID èŽ·å–é¢æ¿ä¿¡æ¯
Calculation/IStation.EtaCalculation4Custom/smi/AnalyCalculatorSMI.cs
@@ -38,8 +38,8 @@
            try
            {
                #region æ³µç«™åˆ†æž
                //16时城投泵站数量
                InitialStationList(context, 9);
                //16时 åŸŽæŠ•泵站数量
                InitialStationList(context, 10);
                if (_allStationContextList == null || _allStationContextList.Count() == 0)
                {
@@ -166,9 +166,14 @@
        private IEtaStationAnalyCalculator CreateCalculater4Station(long StationID)
        {
            if (StationID == 24)
            //if (StationID == 24)
            //{
            //    return new IStation.EtaCalculation.SMI.Station.EtaAnalyCalculator4松花江();
            //}
            if (StationID == 1574926275540291584)
            {
                return new IStation.EtaCalculation.SMI.Station.EtaAnalyCalculator4松花江();
                return new IStation.EtaCalculation.SMI.Station.EtaAnalyCalculator4松花江_shys();
            }
            if (StationID == 25)
@@ -180,7 +185,10 @@
            {
                return new IStation.EtaCalculation.SMI.Station.EtaAnalyCalculator4南市水厂();
            }
            return null;
        }
Calculation/IStation.EtaCalculation4Custom/smi/station/EtaAnalyCalculator4ÄÏ´ó·.cs
@@ -23,19 +23,19 @@
            if (context == null)
            {
                error_info = "上下文参数为空";
                return false ;
                return false;
            }
            this._threshold_flow = 50;//如果此泵开了,  é˜²æ­¢é›¶ç‚¹é£˜æµ, åˆ¤æ–­æµé‡è®¡å€¼æ˜¯å¦æ­£å¸¸
            this._stationID = context.ID;
            _threshold_flow = 50;//如果此泵开了,  é˜²æ­¢é›¶ç‚¹é£˜æµ, åˆ¤æ–­æµé‡è®¡å€¼æ˜¯å¦æ­£å¸¸
            _stationID = context.ID;
            //初始化机泵
            if (!InitialPumpList(context, out error_info))
            {
                return false ;
                return false;
            }
            //核心分析
            return base.CalculateCore(context, out error_info);
            return CalculateCore(context, out error_info);
        }
@@ -47,22 +47,22 @@
        /// <param name="context"></param>
        /// <param name="error_info"></param>
        /// <returns></returns>
        protected override bool InitialPumpList(Model.EtaStationAnalyContextItem context, out string error_info)
        protected override bool InitialPumpList(EtaStationAnalyContextItem context, out string error_info)
        {
            var monitor_id_pump_flow_array = new long[] { 1570993889987399680, 1570993917560754176, 1570993945993940992 };// æµé‡è®¡
            var monitor_id_run_status_array = new long[] { 1570993890029342720, 1570993917602697216, 1570993946023301120 };//运行状态
            var monitor_id_inlet_press_array = new long[] { 1570993889958039552, 1570993917535588352, 1570993945968775168 };//进口压力计
            var monitor_id_outlet_press_array = new long[] { 1570993889974816768, 1570993917548171264, 1570993945981358080 };//出口压力
            var monitor_id_motor_power_array = new long[] { 1570993889890930688, 1570993917468479488, 1570993945901666304 };//瞬间功率
            var monitor_id_motor_frequence_array = new long[] { 1570993889878347776, 1570993917455896576, 1570993945889083392 };//频率
            var monitor_id_motor_zhuansu_array = new long[] { 1570993889945456640, 1570993917523005440, 1570993945956192256 };//转速
            var monitor_id_pump_flow_array = new long[] { 1578564388992978944, 1578564390041554944, 1578564391031410688 };// æµé‡è®¡
            var monitor_id_run_status_array = new long[] { 1578564388930064384, 1578564389982834688, 1578564390972690432 };//运行状态
            var monitor_id_inlet_press_array = new long[] { 1578564388946841600, 1578564389999611904, 1578564390989467648 };//进口压力计
            var monitor_id_outlet_press_array = new long[] { 1578564388963618816, 1578564390012194816, 1578564391002050560 };//出口压力
            var monitor_id_motor_power_array = new long[] { 1578564389034921984, 1578564390083497984, 1578564391073353728 };//瞬间功率
            var monitor_id_motor_frequence_array = new long[] { 1578564389005561856, 1578564390058332160, 1578564391043993600 };//频率
            var monitor_id_motor_zhuansu_array = new long[] { 1578564389022339072, 1578564390070915072, 1578564391060770816 };//转速
            var is液位代替进口压力 = false;
            //初始化机泵
            this._machineCount = 3;
            var machine_id_array = new long[] { 427, 430, 433};
            this._allMachineList = InitialPumpMachineList(
            _machineCount = 3;
            var machine_id_array = new long[] { 427, 430, 433 };
            _allMachineList = InitialPumpMachineList(
                context,
                machine_id_array,//机泵ID 
                monitor_id_run_status_array,//运行状态 
@@ -77,8 +77,8 @@
                out error_info);
            if (_allMachineList == null)
            {
                IStation.LogHelper.Error(error_info);
                return false ;
                LogHelper.Error(error_info);
                return false;
            }
Calculation/IStation.EtaCalculation4Custom/smi/station/EtaAnalyCalculator4ËÉ»¨½­.cs
@@ -13,7 +13,7 @@
    public class EtaAnalyCalculator4松花江 : EtaAnalyCalculator泵站4都是独立流量计_有运行状态, IEtaStationAnalyCalculator
    {
        /// <summary>
        ///
        ///
        /// </summary>
        /// <param name="context"></param>
        /// <param name="error_info"></param>
Calculation/IStation.EtaCalculation4Custom/smi/station/EtaAnalyCalculator4ËÉ»¨½­_shys.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,99 @@
using IStation.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IStation.EtaCalculation.SMI.Station
{
    /// <summary>
    /// æ‰€æœ‰æ³µï¼Œéƒ½æ˜¯å˜é¢‘泵, ä¸”都有独立的流量计 , æœ‰ å‡ºå£åŽ‹åŠ›è®¡, æœ‰å¼€æœºçŠ¶æ€æµ‹ç‚¹ ,有 ç‹¬ç«‹ è¿›å£åŽ‹åŠ›
    /// </summary>
    public class EtaAnalyCalculator4松花江_shys : EtaAnalyCalculator泵站4都是独立流量计_有运行状态, IEtaStationAnalyCalculator
    {
        /// <summary>
        ///
        /// </summary>
        /// <param name="context"></param>
        /// <param name="error_info"></param>
        /// <returns></returns>
        public override bool Calculate(EtaStationAnalyContextItem context, out string error_info)
        {
            if (context == null)
            {
                error_info = "上下文参数为空";
                return false;
            }
            this._threshold_flow = 50;//如果此泵开了,  é˜²æ­¢é›¶ç‚¹é£˜æµ, åˆ¤æ–­æµé‡è®¡å€¼æ˜¯å¦æ­£å¸¸
            this._stationID = context.ID;
            //初始化机泵
            if (!InitialPumpList(context, out error_info))
            {
                return false;
            }
            //核心分析
            return base.CalculateCore(context, out error_info);
        }
        #region  åˆå§‹åŒ–机泵
        /// <summary>
        ///
        /// </summary>
        /// <param name="context"></param>
        /// <param name="error_info"></param>
        /// <returns></returns>
        protected override bool InitialPumpList(Model.EtaStationAnalyContextItem context, out string error_info)
        {
            var monitor_id_pump_flow_array = new long[] { 1574949620377849856, 1574949621795524608, 1574949623238365184, 1574949627050987520, 1574949630179938304, 1574958452210536448 };// æµé‡è®¡
            var monitor_id_run_status_array = new long[] { 1574949620306546688, 1574949621728415744, 1574949623171256320, 1574949626979684352, 1574949630112829440, 1574958452147621888 };//运行状态
            var monitor_id_inlet_press_array = new long[] { 1574949620327518208, 1574949621745192960, 1574949623188033536, 1574949627000655872, 1574949630129606656, 1574958452164399104 };//进口压力计
            var monitor_id_outlet_press_array = new long[] { 1574949620344295424, 1574949621761970176, 1574949623204810752, 1574949627017433088, 1574949630146383872, 1574958452181176320 };//出口压力
            var monitor_id_motor_power_array = new long[] { 1574949620465930240, 1574949621879410688, 1574949623322251264, 1574949627134873600, 1574949630263824384, 1574958452290228224 };//瞬间功率
            var monitor_id_motor_frequence_array = new long[] { 1574949620398821376, 1574949621812301824, 1574949623255142400, 1574949627067764736, 1574949630196715520, 1574958452227313664 };//频率
            var monitor_id_motor_zhuansu_array = new long[] { 1574949620415598592, 1574949621829079040, 1574949623271919616, 1574949627084541952, 1574949630213492736, 1574958452244090880 };//转速
            var is液位代替进口压力 = true;
            //初始化机泵
            this._machineCount = 6;
            var machine_id_array = new long[] { 1574950802215276544, 1574950804064964608, 1574950804903825408, 1574950805696548864, 1574950806522826752, 1574950884763373568 };
            this._allMachineList = InitialPumpMachineList(
                context,
                machine_id_array,//机泵ID
                monitor_id_run_status_array,//运行状态
                monitor_id_pump_flow_array,// æµé‡è®¡
                is液位代替进口压力,
                monitor_id_inlet_press_array,//进口压力计
                monitor_id_outlet_press_array,//出口压力
                monitor_id_motor_power_array,//瞬间功率
                monitor_id_motor_frequence_array,//频率
                monitor_id_motor_zhuansu_array,//转速
                       null,//电流
                out error_info);
            if (_allMachineList == null)
            {
                IStation.LogHelper.Error(error_info);
                return false ;
            }
            error_info = null;
            return true;
        }
        #endregion
    }
}
DataProvider/IStation.DataProvider.SMI/IStation.DataProvider.SMI.csproj
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
@@ -9,6 +9,13 @@
    <RootNamespace>IStation.DataProvider</RootNamespace>
    <GenerateDocumentationFile>True</GenerateDocumentationFile>
  </PropertyGroup>
  <ItemGroup>
    <Compile Remove="data\DebugRecord.cs" />
    <Compile Remove="data\JsonStore.cs" />
    <Compile Remove="data\SrcRecord.cs" />
    <Compile Remove="job\DataJob.cs" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" />
@@ -32,4 +39,8 @@
    </None>
  </ItemGroup>
  <ItemGroup>
    <Folder Include="data\" />
  </ItemGroup>
</Project>
DataProvider/IStation.DataProvider.SMI/data/SrcRecord.cs
@@ -25,5 +25,6 @@
        /// 
        /// </summary>
        public string DataValue { get; set; }
    }
}
DataProvider/IStation.DataProvider.SMI/data_shys/DataJob.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IStation.DataProvider
{
    /// <summary>
    /// æ•°æ®ä»»åŠ¡
    /// </summary>
    [DisallowConcurrentExecution]//此特性标识 å¿…须等待这次任务执行完成后,才能执行下次任务
    public class DataJob : IJob
    {
        /// <summary>
        ///
        /// </summary>
        public async Task Execute(IJobExecutionContext context)
        {
            try
            {
                await Task.Run(() =>
                {
                    var dt_now = DateTime.Now;
                    var records = JsonStore.GetCurrentRecord(dt_now);
                    if (records == null || records.Count < 1)
                        return;
                    var bllScada = new BaseMsSqlDAL<Entity.SMIDATA>();
                    var allHisDatas = bllScada.GetAll()?.ToList();
                    if (allHisDatas == null)
                        allHisDatas = new List<Entity.SMIDATA>();
                    //添加
                    var records_adds = records.Where(x =>
                    {
                        var hisData = allHisDatas.Find(t => t.TagName == x.TagName);
                        return hisData == null;
                    }).ToList();
                    if (records_adds != null && records_adds.Count > 0)
                    {
                        var hisdata_adds = records_adds.Select(x =>
                        {
                            var entity = new Entity.SMIDATA();
                            entity.TagName = x.TagName;
                            entity.DataTime = x.DataTime;
                            entity.DataValue = x.DataValue;
                            entity.InsertTime = dt_now;
                            return entity;
                        }).ToList();
                        bllScada.Inserts(hisdata_adds);
                        LogHelper.Info(string.Format("成功插入{0}条数据!", hisdata_adds.Count));
                    }
                    //更新
                    var records_updates = records.Where(x =>
                    {
                        var hisData = allHisDatas.Find(t => t.TagName == x.TagName);
                        return hisData != null;
                    }).ToList();
                    if (records_updates != null && records_updates.Count > 0)
                    {
                        var hisdata_updates = records_updates.Select(x =>
                        {
                            var entity = allHisDatas.Find(t => t.TagName == x.TagName);
                            entity.InsertTime = dt_now;
                            entity.DataValue = x.DataValue;
                            entity.DataTime = x.DataTime;
                            return entity;
                        }).ToList();
                        bllScada.Updates(hisdata_updates);
                        LogHelper.Info(string.Format("成功更新{0}条数据!", hisdata_updates.Count));
                    }
                });
            }
            catch (Exception ex)
            {
                var e = new JobExecutionException(ex);
                LogHelper.Error("数据任务", ex);
                throw e;
            }
        }
    }
}
DataProvider/IStation.DataProvider.SMI/data_shys/DebugRecord.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IStation.DataProvider
{
    /// <summary>
    ///
    /// </summary>
    public class DebugRecord
    {
        /// <summary>
        ///
        /// </summary>
        public string SignId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string SrcTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string SrcValue { get; set; }
    }
}
DataProvider/IStation.DataProvider.SMI/data_shys/JsonData.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IStation.DataProvider
{
    /// <summary>
    ///
    /// </summary>
    public class JsonData
    {
        /// <summary>
        ///
        /// </summary>
        public JsonData() { }
        /// <summary>
        ///
        /// </summary>
        public JsonData(DateTime time, List<DebugRecord> records)
        {
            this.DebugTime = time;
            this.DebugRecords = records;
        }
        /// <summary>
        ///
        /// </summary>
        public DateTime DebugTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public List<DebugRecord> DebugRecords { get; set; }
    }
}
DataProvider/IStation.DataProvider.SMI/data_shys/JsonStore.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
using IStation.Untity;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IStation.DataProvider
{
    /// <summary>
    /// json仓库
    /// </summary>
    public class JsonStore
    {
        private static DateTime _debugDay=DateTime.MinValue;
        private static List<JsonData> _dayRecordList = null;//数据日缓存
        //获取缓存
        private static List<JsonData> GetDebugCache(DateTime dt)
        {
            var debugDay = dt.Date;
            if (debugDay != _debugDay)
            {
                _debugDay = debugDay;
                _dayRecordList = new List<JsonData>();
                var fullFileName = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ConfigHelper.TestDataFolder, _debugDay.Day.ToString() + ".txt");
                System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
                var allLines = File.ReadAllLines(fullFileName,Encoding.GetEncoding("GB2312"));
                foreach (var line in allLines)
                {
                    if (string.IsNullOrEmpty(line))
                        continue;
                    var timeIndex = line.IndexOf(",");
                    var timeStr = line.Substring(0, timeIndex);
                    var time = DateTime.Parse(timeStr);
                    var jsonIndex = line.IndexOf("|");
                    var jsonStr = line.Substring(jsonIndex + 1);
                    jsonStr = jsonStr.Substring(0, jsonStr.Length - 1);
                    var jsonList = JsonConvert.DeserializeObject<List<DebugRecord>>(jsonStr);
                    _dayRecordList.Add(new JsonData(new DateTime(_debugDay.Year,_debugDay.Month,_debugDay.Day,time.Hour,time.Minute,time.Second), jsonList));
                }
                _dayRecordList = _dayRecordList.OrderBy(x => x.DebugTime).ToList();
            }
            return _dayRecordList;
        }
        /// <summary>
        /// èŽ·å–å½“å‰è®°å½•
        /// </summary>
        public static List<SrcRecord> GetCurrentRecord(DateTime dt)
        {
            var debugList = GetDebugCache(dt);
            if (debugList == null || debugList.Count < 1)
                return default;
            var debugLast = debugList.FindLast(x => x.DebugTime < dt);
            if (debugLast == null)
                return default;
            var srcList = new List<SrcRecord>();
            foreach (var debugRecord in debugLast.DebugRecords)
            {
                if (!string.IsNullOrEmpty(debugRecord.SignId))
                {
                    var srcRecord = new SrcRecord();
                    srcRecord.TagName = debugRecord.SignId;
                    srcRecord.DataTime = debugRecord.SrcTime;
                    srcRecord.DataValue = debugRecord.SrcValue;
                    srcList.Add(srcRecord);
                }
            }
            return srcList;
        }
    }
}
DataProvider/IStation.DataProvider.SMI/data_shys/SrcRecord.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IStation.DataProvider
{
    /// <summary>
    ///
    /// </summary>
    public class SrcRecord
    {
        /// <summary>
        ///
        /// </summary>
        public string TagName { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string DataTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string DataValue { get; set; }
    }
}
Entry/IStation.WebApi.Entry/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -5,6 +5,7 @@
<Project>
  <PropertyGroup>
    <_PublishTargetUrl>D:\WorkData\IStation\IStationV4.1\Core\Service.V4.1\Entry\IStation.WebApi.Entry\bin\Release\net6.0\publish\</_PublishTargetUrl>
    <History>True|2022-09-22T05:35:52.6495568Z;True|2022-09-22T13:19:28.3609130+08:00;True|2022-09-22T09:45:29.7312648+08:00;True|2022-09-21T17:11:30.6881814+08:00;True|2022-09-15T16:32:44.8582766+08:00;True|2022-09-04T14:21:59.9156800+08:00;True|2022-09-03T18:27:37.0001278+08:00;True|2022-08-29T10:26:27.0532192+08:00;True|2022-08-24T13:40:25.0333335+08:00;True|2022-08-23T10:20:23.3347504+08:00;True|2022-08-19T15:24:53.5488496+08:00;False|2022-08-19T15:24:15.4430294+08:00;True|2022-08-19T11:51:17.0556654+08:00;True|2022-08-19T11:45:03.9834334+08:00;True|2022-08-19T10:56:27.1184994+08:00;True|2022-08-18T16:31:26.4673400+08:00;True|2022-08-18T10:37:50.8776926+08:00;True|2022-08-17T17:10:09.3527873+08:00;True|2022-08-17T16:04:30.4487827+08:00;True|2022-08-15T13:35:48.4976973+08:00;True|2022-08-15T13:35:34.4046702+08:00;True|2022-08-15T13:31:44.3380038+08:00;True|2022-08-15T13:07:03.2183172+08:00;True|2022-07-25T15:14:36.3659352+08:00;True|2022-07-25T15:10:01.3426246+08:00;True|2022-07-25T13:20:08.1574461+08:00;True|2022-07-19T10:26:17.1257582+08:00;True|2022-07-14T10:30:13.1942620+08:00;True|2022-07-13T14:35:30.0524912+08:00;True|2022-07-08T14:32:42.4327635+08:00;True|2022-07-05T11:08:07.0982998+08:00;True|2022-07-04T10:33:11.4756479+08:00;True|2022-07-01T22:05:04.4907981+08:00;True|2022-07-01T15:57:41.6399584+08:00;True|2022-06-29T10:33:01.2518877+08:00;True|2022-06-29T09:35:04.8176716+08:00;True|2022-06-22T10:29:08.8189250+08:00;True|2022-06-21T20:20:26.7306581+08:00;True|2022-06-21T09:54:59.2174617+08:00;True|2022-06-20T16:05:34.5414017+08:00;True|2022-06-16T13:17:09.9717924+08:00;True|2022-06-16T09:40:45.1175998+08:00;True|2022-06-15T18:01:54.0267150+08:00;False|2022-06-15T18:00:46.8407587+08:00;True|2022-06-15T15:22:18.3048191+08:00;True|2022-06-15T14:10:37.0479735+08:00;False|2022-06-15T14:08:52.7287625+08:00;True|2022-06-15T11:52:36.3090013+08:00;True|2022-06-15T10:29:17.8467709+08:00;True|2022-06-15T09:53:07.0983926+08:00;False|2022-06-15T09:51:02.1269263+08:00;True|2022-06-14T16:42:04.7964854+08:00;True|2022-06-14T14:08:49.4227432+08:00;True|2022-06-14T14:04:00.9153594+08:00;True|2022-06-13T14:57:09.1986107+08:00;True|2022-06-12T10:12:40.2143903+08:00;True|2022-06-12T09:59:01.3527438+08:00;True|2022-06-09T17:47:54.0302121+08:00;True|2022-06-09T17:30:21.7998171+08:00;True|2022-06-09T13:53:49.3251173+08:00;True|2022-06-09T11:06:42.0691794+08:00;True|2022-06-09T10:24:37.1232972+08:00;True|2022-06-09T10:00:30.4180885+08:00;True|2022-06-08T16:55:14.5816280+08:00;True|2022-06-08T16:02:29.3874857+08:00;True|2022-06-08T13:37:33.4098629+08:00;True|2022-06-08T11:05:09.3848401+08:00;True|2022-06-08T10:21:11.6630897+08:00;True|2022-06-08T09:38:48.6605705+08:00;True|2022-06-08T09:38:12.5509843+08:00;True|2022-06-08T09:37:38.2420697+08:00;True|2022-06-08T09:33:06.1943764+08:00;True|2022-06-07T17:26:45.0216506+08:00;True|2022-06-07T17:15:13.6540984+08:00;True|2022-06-07T13:30:54.6796254+08:00;True|2022-06-06T17:33:50.9010674+08:00;True|2022-06-06T17:32:21.9276179+08:00;True|2022-06-06T15:59:31.7116819+08:00;True|2022-06-06T15:29:18.4459191+08:00;True|2022-06-06T14:17:56.0946686+08:00;True|2022-06-02T09:13:02.9635258+08:00;True|2022-06-01T17:15:47.4170975+08:00;True|2022-06-01T14:06:29.6241464+08:00;True|2022-06-01T13:27:18.8319582+08:00;True|2022-06-01T13:14:07.7862232+08:00;True|2022-06-01T09:48:16.4577267+08:00;True|2022-05-30T09:57:00.6017913+08:00;True|2022-05-28T15:54:16.3134700+08:00;True|2022-05-28T11:46:55.8201686+08:00;True|2022-05-28T00:40:34.8169520+08:00;True|2022-05-27T20:45:57.0931886+08:00;True|2022-05-27T20:45:18.6248676+08:00;True|2022-05-27T14:19:14.0927561+08:00;True|2022-05-26T16:52:59.8936895+08:00;True|2022-05-26T13:53:53.4391535+08:00;True|2022-05-25T14:49:54.5116623+08:00;True|2022-05-25T14:23:38.7752497+08:00;True|2022-05-18T00:26:56.5524482+08:00;True|2022-05-17T12:08:45.5933704+08:00;True|2022-05-17T02:14:04.9500075+08:00;True|2022-05-16T12:01:40.6872993+08:00;True|2022-05-12T10:27:07.2614929+08:00;True|2022-05-11T11:02:55.5830630+08:00;True|2022-05-11T10:00:40.6549316+08:00;True|2022-05-11T09:20:32.0973524+08:00;</History>
    <History>True|2022-10-08T01:23:21.6592006Z;True|2022-10-07T15:35:37.7532304+08:00;True|2022-10-07T15:04:51.9161653+08:00;False|2022-10-07T14:58:32.8816319+08:00;False|2022-10-07T14:54:55.4175944+08:00;False|2022-10-07T14:52:46.7215376+08:00;False|2022-10-07T14:51:14.0508027+08:00;False|2022-10-07T14:49:57.6007572+08:00;False|2022-10-07T14:48:56.6085134+08:00;False|2022-10-07T14:47:54.7931315+08:00;True|2022-09-22T13:35:52.6495568+08:00;True|2022-09-22T13:19:28.3609130+08:00;True|2022-09-22T09:45:29.7312648+08:00;True|2022-09-21T17:11:30.6881814+08:00;True|2022-09-15T16:32:44.8582766+08:00;True|2022-09-04T14:21:59.9156800+08:00;True|2022-09-03T18:27:37.0001278+08:00;True|2022-08-29T10:26:27.0532192+08:00;True|2022-08-24T13:40:25.0333335+08:00;True|2022-08-23T10:20:23.3347504+08:00;True|2022-08-19T15:24:53.5488496+08:00;False|2022-08-19T15:24:15.4430294+08:00;True|2022-08-19T11:51:17.0556654+08:00;True|2022-08-19T11:45:03.9834334+08:00;True|2022-08-19T10:56:27.1184994+08:00;True|2022-08-18T16:31:26.4673400+08:00;True|2022-08-18T10:37:50.8776926+08:00;True|2022-08-17T17:10:09.3527873+08:00;True|2022-08-17T16:04:30.4487827+08:00;True|2022-08-15T13:35:48.4976973+08:00;True|2022-08-15T13:35:34.4046702+08:00;True|2022-08-15T13:31:44.3380038+08:00;True|2022-08-15T13:07:03.2183172+08:00;True|2022-07-25T15:14:36.3659352+08:00;True|2022-07-25T15:10:01.3426246+08:00;True|2022-07-25T13:20:08.1574461+08:00;True|2022-07-19T10:26:17.1257582+08:00;True|2022-07-14T10:30:13.1942620+08:00;True|2022-07-13T14:35:30.0524912+08:00;True|2022-07-08T14:32:42.4327635+08:00;True|2022-07-05T11:08:07.0982998+08:00;True|2022-07-04T10:33:11.4756479+08:00;True|2022-07-01T22:05:04.4907981+08:00;True|2022-07-01T15:57:41.6399584+08:00;True|2022-06-29T10:33:01.2518877+08:00;True|2022-06-29T09:35:04.8176716+08:00;True|2022-06-22T10:29:08.8189250+08:00;True|2022-06-21T20:20:26.7306581+08:00;True|2022-06-21T09:54:59.2174617+08:00;True|2022-06-20T16:05:34.5414017+08:00;True|2022-06-16T13:17:09.9717924+08:00;True|2022-06-16T09:40:45.1175998+08:00;True|2022-06-15T18:01:54.0267150+08:00;False|2022-06-15T18:00:46.8407587+08:00;True|2022-06-15T15:22:18.3048191+08:00;True|2022-06-15T14:10:37.0479735+08:00;False|2022-06-15T14:08:52.7287625+08:00;True|2022-06-15T11:52:36.3090013+08:00;True|2022-06-15T10:29:17.8467709+08:00;True|2022-06-15T09:53:07.0983926+08:00;False|2022-06-15T09:51:02.1269263+08:00;True|2022-06-14T16:42:04.7964854+08:00;True|2022-06-14T14:08:49.4227432+08:00;True|2022-06-14T14:04:00.9153594+08:00;True|2022-06-13T14:57:09.1986107+08:00;True|2022-06-12T10:12:40.2143903+08:00;True|2022-06-12T09:59:01.3527438+08:00;True|2022-06-09T17:47:54.0302121+08:00;True|2022-06-09T17:30:21.7998171+08:00;True|2022-06-09T13:53:49.3251173+08:00;True|2022-06-09T11:06:42.0691794+08:00;True|2022-06-09T10:24:37.1232972+08:00;True|2022-06-09T10:00:30.4180885+08:00;True|2022-06-08T16:55:14.5816280+08:00;True|2022-06-08T16:02:29.3874857+08:00;True|2022-06-08T13:37:33.4098629+08:00;True|2022-06-08T11:05:09.3848401+08:00;True|2022-06-08T10:21:11.6630897+08:00;True|2022-06-08T09:38:48.6605705+08:00;True|2022-06-08T09:38:12.5509843+08:00;True|2022-06-08T09:37:38.2420697+08:00;True|2022-06-08T09:33:06.1943764+08:00;True|2022-06-07T17:26:45.0216506+08:00;True|2022-06-07T17:15:13.6540984+08:00;True|2022-06-07T13:30:54.6796254+08:00;True|2022-06-06T17:33:50.9010674+08:00;True|2022-06-06T17:32:21.9276179+08:00;True|2022-06-06T15:59:31.7116819+08:00;True|2022-06-06T15:29:18.4459191+08:00;True|2022-06-06T14:17:56.0946686+08:00;True|2022-06-02T09:13:02.9635258+08:00;True|2022-06-01T17:15:47.4170975+08:00;True|2022-06-01T14:06:29.6241464+08:00;True|2022-06-01T13:27:18.8319582+08:00;True|2022-06-01T13:14:07.7862232+08:00;True|2022-06-01T09:48:16.4577267+08:00;True|2022-05-30T09:57:00.6017913+08:00;True|2022-05-28T15:54:16.3134700+08:00;True|2022-05-28T11:46:55.8201686+08:00;True|2022-05-28T00:40:34.8169520+08:00;</History>
    <LastFailureDetails />
  </PropertyGroup>
</Project>
IStation.WebApi.sln
@@ -257,6 +257,8 @@
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.LargeScreen", "Application\IStation.Application.LargeScreen\IStation.Application.LargeScreen.csproj", "{902AABE5-E167-444E-B3C7-8077E1E9BBBB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Calculation.Plan", "Calculation\IStation.Calculation.Plan\IStation.Calculation.Plan.csproj", "{E7D995AB-A446-4838-8681-DEC5E2EDB962}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
@@ -723,6 +725,10 @@
        {902AABE5-E167-444E-B3C7-8077E1E9BBBB}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {902AABE5-E167-444E-B3C7-8077E1E9BBBB}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {902AABE5-E167-444E-B3C7-8077E1E9BBBB}.Release|Any CPU.Build.0 = Release|Any CPU
        {E7D995AB-A446-4838-8681-DEC5E2EDB962}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {E7D995AB-A446-4838-8681-DEC5E2EDB962}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {E7D995AB-A446-4838-8681-DEC5E2EDB962}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {E7D995AB-A446-4838-8681-DEC5E2EDB962}.Release|Any CPU.Build.0 = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
@@ -842,6 +848,7 @@
        {6B1F2F73-E16C-4C85-9D3B-B1872E363653} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
        {73065108-246A-4852-A248-1755B3804DF5} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
        {902AABE5-E167-444E-B3C7-8077E1E9BBBB} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
        {E7D995AB-A446-4838-8681-DEC5E2EDB962} = {B1548C2C-C3C2-47C0-8F6E-B265D0603099}
    EndGlobalSection
    GlobalSection(ExtensibilityGlobals) = postSolution
        SolutionGuid = {18D1EA07-81E5-4443-8512-F303BC79DCF4}
Server/IStation.Server.Eta/analy/job/EtaAnalyCronJob.cs
@@ -121,6 +121,10 @@
                                    var station = new Service.Station().GetByID(CorpID, logicTree.LogicID);
                                    if (station == null)
                                        continue;
                                    //if (station.ID==)
                                    //{
                                    //}
                                    //构建泵站上下文
                                    logicTreeContextItem.LogicName = station.Name;
@@ -143,8 +147,7 @@
                                            monitorPointMappingList?.Select(x => x.MonitorPointID).Distinct().ToList(), Model.eMonitorType.General, Model.Monitor.eCronType.Real);
                                        //最近测点记录
                                        //var monitorRecordList = new Service.MonitorRealRecord().GetLastNormalRecord(CorpID,monitorPointList?.Select(x=>x.ID).ToList());
                                        var monitorRecordList = MonitorRealRecordHelper.GetLastNormalRealRecord(CorpID,
                                            monitorPointList?.Select(x => x.ID).ToList());
                                        var monitorRecordList = MonitorRealRecordHelper.GetLastNormalRealRecord(CorpID, monitorPointList?.Select(x => x.ID).ToList());
                                        //遍历管路
                                        foreach (var pipeLine in pipeLineList)
                                        {
@@ -190,9 +193,6 @@
                                                        monitorPointContextItem.DataValue = dataValue;
                                                        pipeLineContextItem.MonitorPointContextItems.Add(monitorPointContextItem);
                                                    }
                                                }
                                            }
@@ -263,7 +263,7 @@
                            if (!bol)
                            {
                                LogHelper.Info($"能效分析任务中,客户标识:{this.CorpID}, ï¼ˆå•)记录保存失败!");
                            }
                            }
                        }
                        if (multiList != null && multiList.Count > 0)
                        {
@@ -281,10 +281,23 @@
                                LogHelper.Info($"能效分析任务中,客户标识:{this.CorpID}, ï¼ˆä¸šåŠ¡ï¼‰è®°å½•ä¿å­˜å¤±è´¥ï¼");
                            }
                        }
                        if (this.CorpID==5)
                        {
                            var singleListJson = JsonHelper.Object2Json(singleList);
                            LogHelper.Debug("singleListJson:" + singleListJson);
                            var multiListJson = JsonHelper.Object2Json(multiList);
                            LogHelper.Debug("multiListJson:" + multiListJson);
                            var logicListJson = JsonHelper.Object2Json(logicList);
                            LogHelper.Debug("logicListJson:" + logicListJson);
                        }
                    });
                    #endregion 
                    LogHelper.Info($"客户标识:{this.CorpID}, ç»“束能效分析!结论:{analyBol.ToString()}");
                    LogHelper.Info($"客户标识:{this.CorpID}, ç»“束能效分析!");
                }
                catch (Exception ex)
                {
Service/IStation.Service.Monitor/monitor_point/monitor_point_mapping/MonitorPointMapping.cs
@@ -346,13 +346,13 @@
        /// <summary>
        /// è®¾ç½®Object测点映射
        /// </summary>
        public bool SetOfObject(long CorpID,string ObjectType,long ObjectID, List<Model.MonitorPointMapping> list)
        public bool SetOfObject(long CorpID, string ObjectType, long ObjectID, List<Model.MonitorPointMapping> list)
        {
            if (list == null || list.Count() < 1)
                return false;
            /*if (list == null || list.Count() < 1)
                return false;*/
            var dal = new DAL.MonitorPointMapping();
            var entity_list = Model2Entities(list.ToList());
            var bol = dal.SetOfObject(CorpID,ObjectType,ObjectID, entity_list);
            var bol = dal.SetOfObject(CorpID, ObjectType, ObjectID, entity_list);
            if (bol)
            {
                UpdateCorpCacheByObjectTypeAndObjectID(CorpID, ObjectType, ObjectID);
TopShelf/IStation.TopShelf.DataProvider4SMI/IStation.TopShelf.DataProvider4SMI.csproj.user
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <_LastSelectedProfileId>D:\WorkData\IStation\V4.0\Code\Core\TopShelf\IStation.TopShelf.DataProvider4SMI\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId>
    <_LastSelectedProfileId>D:\WorkData\IStation\IStationV4.1\Core\Service.V4.1\TopShelf\IStation.TopShelf.DataProvider4SMI\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId>
  </PropertyGroup>
</Project>
TopShelf/IStation.TopShelf.DataProvider4SMI/Properties/PublishProfiles/FolderProfile.pubxml.user
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
  <PropertyGroup>
    <History>True|2022-09-28T05:45:54.8994551Z;</History>
    <LastFailureDetails />
  </PropertyGroup>
</Project>
TopShelf/IStation.TopShelf.Eta/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -4,7 +4,7 @@
-->
<Project>
  <PropertyGroup>
    <History>True|2022-09-26T07:50:09.2992619Z;True|2022-09-26T15:47:20.6418528+08:00;True|2022-09-25T16:30:19.2053341+08:00;True|2022-09-22T17:08:02.6481758+08:00;True|2022-09-22T10:24:35.0635421+08:00;True|2022-09-16T15:41:38.0594228+08:00;True|2022-09-16T15:23:44.1558393+08:00;True|2022-07-01T21:10:56.8914203+08:00;True|2022-07-01T15:16:47.4260591+08:00;True|2022-06-29T09:41:10.5136306+08:00;True|2022-06-08T10:45:13.3564100+08:00;True|2022-06-08T10:41:35.1533091+08:00;True|2022-06-06T14:07:28.9893476+08:00;True|2022-06-01T09:15:01.3097804+08:00;True|2022-05-29T10:18:06.7001434+08:00;</History>
    <History>True|2022-10-08T02:04:57.3573208Z;True|2022-09-28T16:12:17.1471133+08:00;True|2022-09-28T15:11:17.3924597+08:00;True|2022-09-28T15:07:24.1542712+08:00;True|2022-09-28T15:01:05.9450589+08:00;True|2022-09-28T13:14:26.7038834+08:00;True|2022-09-27T16:32:29.0286484+08:00;True|2022-09-27T14:15:56.0426476+08:00;True|2022-09-26T16:16:45.3404775+08:00;True|2022-09-26T15:50:09.2992619+08:00;True|2022-09-26T15:47:20.6418528+08:00;True|2022-09-25T16:30:19.2053341+08:00;True|2022-09-22T17:08:02.6481758+08:00;True|2022-09-22T10:24:35.0635421+08:00;True|2022-09-16T15:41:38.0594228+08:00;True|2022-09-16T15:23:44.1558393+08:00;True|2022-07-01T21:10:56.8914203+08:00;True|2022-07-01T15:16:47.4260591+08:00;True|2022-06-29T09:41:10.5136306+08:00;True|2022-06-08T10:45:13.3564100+08:00;True|2022-06-08T10:41:35.1533091+08:00;True|2022-06-06T14:07:28.9893476+08:00;True|2022-06-01T09:15:01.3097804+08:00;True|2022-05-29T10:18:06.7001434+08:00;</History>
    <LastFailureDetails />
  </PropertyGroup>
</Project>