tangxu
2024-05-04 39579aa528747af7ca7b17b04453095e2a27a009
WebApi/Controllers/ZyPrjController.cs
@@ -10,6 +10,7 @@
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Runtime.CompilerServices;
using System.Security.Permissions;
using System.Text;
using System.Threading.Tasks;
@@ -23,13 +24,18 @@
    public class ZyPrjRequest
    {
        public ZyPrjRequest() { }
        public string StartTime { get; set; }
        public string EndTime { get; set; }
        public int StartOpenCount { get; set; } = -1;
        public int? StartOpenCount { get; set; } = -1;
        public double? TotalFlowIn { get; set; }//取水总量 (单位 吨)
    }
        public string StartReservoirLevel { get; set; }//开始水库水位(可空):单位m
        public string MaxReservoirLevel { get; set; }//最高水库水位限制(可空):单位m
        public string MaxReservoirLevelTime { get; set; }//最高水库水位限制时间(可空) 时间格式
        public string IsSubmit { get; set; }//计算完,是否推送
    }
}
namespace IStation.WebApi.Controllers
{
@@ -96,13 +102,44 @@
                start_timme, end_timme, request.StartOpenCount, request.TotalFlowIn));
            IStation.CalcModel.AnaRequest anaRequest = new  AnaRequest();
            anaRequest.CalcOptType = eCalcOptType.电费;
            anaRequest.CalcOptType = (eCalcOptType) IStation.AnaGlobalParas.Setting.OptSortType;
            anaRequest.StartTime = start_timme;
            anaRequest.EndTime = end_timme;
            anaRequest.WaterLevels长江 = GetTide3Day(start_timme);
            anaRequest.StartOpenCount = request.StartOpenCount;
            anaRequest.TotalFlow取水总量 = request.TotalFlowIn;
            if(request.StartOpenCount == null)
            {
                anaRequest.StartOpenCount = -1;
            }
            else
            {
                anaRequest.StartOpenCount = request.StartOpenCount.Value;
            }
            #region 陈行水库水位
            if (!string.IsNullOrEmpty(request.StartReservoirLevel))
            {
                anaRequest.CurrentWaterBoxLevel = Convert.ToDouble(request.StartReservoirLevel);
            }
            else
            {
                var tagDict = new Dictionary<string, string>{ { "_0402010201030103006", "陈行水库水位" }};
                var input = new { search = "real", tablename = "陈行智能调度" };
                var tags = tagDict.Keys.ToList();
                var realScadaRecordList = ZyConnectHelper.GetRealScadaResultAsync(tags, input).GetAwaiter().GetResult();
                if (realScadaRecordList != null && realScadaRecordList.Count() > 0)
                {
                    anaRequest.CurrentWaterBoxLevel = realScadaRecordList.Last().Value;
                }
            }
            #endregion
            if (!string.IsNullOrEmpty(request.MaxReservoirLevel))
                anaRequest.MaxLimitWaterBoxLevel = Convert.ToDouble(request.MaxReservoirLevel);
            if (!string.IsNullOrEmpty(request.MaxReservoirLevelTime))
                anaRequest.MaxLimitWaterBoxTime = request.MaxReservoirLevelTime;
            var calcHelper = new IStation.CalcPrjHelper();
            AnaPrj defaultPrj = null;
            string error_info = calcHelper.Calc(anaRequest, out defaultPrj); 
@@ -111,8 +148,27 @@
                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "计算错误, 原因是:"+ error_info };
            }
            //保存方案
            var ret = Common.HistoryAnaPrjFileHelper.SavePrj(IStation.AnaGlobalParas.Setting, anaRequest, defaultPrj);
            var dto_prj = ToPrjDto(defaultPrj);
            #region 推送
            if (!string.IsNullOrEmpty(request.IsSubmit) && Convert.ToBoolean(request.IsSubmit))
            {
                Task.Run(() => {
                    _ = ZyProjectHelper.SubmitPrj(defaultPrj);
                });
            }
            #endregion
            return new IStation.Dto.ApiResult< IStation.ZyDto.SubmitPrj>(dto_prj) { Code = ApiResultCode.Success };
        }
        #region 换算成DTO
        private IStation.ZyDto.SubmitPrj ToPrjDto(AnaPrj defaultPrj)
        {
            IStation.ZyDto.SubmitPrj dto_prj = new ZyDto.SubmitPrj();
            if (string.IsNullOrEmpty(defaultPrj.ID))
@@ -138,26 +194,80 @@
                dto_item.StartTime = bt.StartTime;
                dto_item.EndTime = bt.EndTime;
                dto_item.OpenPumpCount = bt.OpenPumpCount;
                dto_item.OpenPumpIndexs = CalcPrjHelper.GetOpenPumpIndexs(bt.OpenPumpCount);
                dto_item.OpenPumpIndexs = IStation.AnaGlobalParas.Setting.GetOpenPumpIndexArrays(bt.OpenPumpCount);
                dto_prj.Items.Add(dto_item);
            }
            if(defaultPrj.PointTimes != null)
            {
                dto_prj.Records = new List<SubmitPrjTime>();
                foreach(var  bt in defaultPrj.PointTimes)
                {
                    dto_prj.Records.Add(new SubmitPrjTime(bt));
                }
            }
            return dto_prj;
        }
        #endregion
            //if (request.isSubmit)
            //{
            //    string error = await ZyConnectHelper.SubmitPrj(request.prj);//, (id) => { IStation.LogHelper.Info("SavePrj success id=" + id); }, (info) => { IStation.LogHelper.Info("SavePrj failse info:" + info); });//.Result;
            //    if (!string.IsNullOrEmpty(error))
            //    {
            //        IStation.LogHelper.Info("Submit prj finish (fail) day:" + request.requestBase.StartTime + ",error:" + error);
            //        return new IStation.Dto.ApiResult<string>(error) { Code = ApiResultCode.Error };
            //    }
            //    else
            //    {
            //        IStation.LogHelper.Info("Submit prj finish (success) day:" + request.requestBase.StartTime);
            //    }
            //}
        /// <summary>
        ///  获取某一天,最近一条
        /// </summary>
        /// <param name="day"></param>
        /// <returns></returns>
        [Route("GetHistoryByDay")]
        [HttpGet]
        public IStation.Dto.ApiResult GetHistoryByDay(string day)
        {
            if (string.IsNullOrEmpty(day  ))
            {
                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "入参day 为空" };
            }
            DateTime d;
            if (!DateTime.TryParse(day, out d))
            {
                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "day 格式不正确" };
            }
            IStation.CalcModel.AnaRequestBase requestBase = null;
            var prj = Common.HistoryAnaPrjFileHelper.GetByDay(d, out requestBase);
            if(prj != null)
            {
                var dto_prj = ToPrjDto(prj);
                return new IStation.Dto.ApiResult<IStation.ZyDto.SubmitPrj>(dto_prj) { Code = ApiResultCode.Success };
            }
            else
            {
                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Alert, Message="未找到项目" };
            }
        }
            return new IStation.Dto.ApiResult< IStation.ZyDto.SubmitPrj>(dto_prj) { Code = ApiResultCode.Success };
        /// <summary>
        ///  获取最近一条
        /// </summary>
        /// <param name="day"></param>
        /// <returns></returns>
        [Route("GetLastHistoryRecord")]
        [HttpGet]
        public IStation.Dto.ApiResult GetLastHistoryRecord( )
        {
            var dal = new IStation.DAL.AnaProject();
            var record = dal.GetLastRecord();
            if (record == null)
                return null;
            IStation.CalcModel.AnaRequestBase requestBase = null;
            var prj = Common.HistoryAnaPrjFileHelper.GetByStartTime(record.StartTime, out requestBase);
            if (prj != null)
            {
                var dto_prj = ToPrjDto(prj);
                return new IStation.Dto.ApiResult<IStation.ZyDto.SubmitPrj>(dto_prj) { Code = ApiResultCode.Success };
            }
            else
            {
                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Alert, Message = "未找到项目" };
            }
        }
@@ -175,12 +285,14 @@
            dto_setting.MinSwitchTimeMinute = model_setting.MinSwitchTimeMinute;
            dto_setting.MaxPumpSwitchCount = model_setting.MaxPumpSwitchCountQ;
            dto_setting.OptSortType = model_setting.OptSortType;
            if(model_setting.SwitchPumpIgnoreTimes != null)
            dto_setting.OpenPumpIndexs = model_setting.OpenPumpIndexs;
            if (model_setting.SwitchPumpIgnoreTimes != null)
            {
                dto_setting.SwitchPumpIgnoreTimes = new List<ZyPrjAnaSetting.TimeRange>();
                dto_setting.SwitchPumpIgnoreTimes = new List<ZyPrjAnaSetting.TimeRangeZy>();
                foreach(var m in model_setting.SwitchPumpIgnoreTimes)
                {
                    dto_setting.SwitchPumpIgnoreTimes.Add(new ZyPrjAnaSetting.TimeRange()
                    dto_setting.SwitchPumpIgnoreTimes.Add(new ZyPrjAnaSetting.TimeRangeZy()
                    {
                        IsUse = m.IsUse,
                        StartHour = m.StartHour,
@@ -192,10 +304,10 @@
            }
            if (model_setting.OpenPumpTimes != null)
            {
                dto_setting.OpenPumpTimes = new List<ZyPrjAnaSetting.TimeRange>();
                dto_setting.OpenPumpTimes = new List<ZyPrjAnaSetting.TimeRangeZy>();
                foreach (var m in model_setting.OpenPumpTimes)
                {
                    dto_setting.OpenPumpTimes.Add(new ZyPrjAnaSetting.TimeRange()
                    dto_setting.OpenPumpTimes.Add(new ZyPrjAnaSetting.TimeRangeZy()
                    {
                        IsUse = m.IsUse,
                        StartHour = m.StartHour,
@@ -349,7 +461,24 @@
                    });
                }
            }
            if( dto.OpenPumpIndexs != null && dto.OpenPumpIndexs.Count() == 5)
            {
                List<int> penPumpIndexs = new List<int>();
                foreach(var ind in dto.OpenPumpIndexs)
                {
                    if(ind<0 || ind > 5)
                    {
                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "机泵开泵顺序设置参数不合理"  };
                    }
                }
                if(penPumpIndexs.Distinct().Count() != 5)
                {
                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "机泵开泵顺序设置参数不合理" };
                }
                model_setting.OpenPumpIndexs = penPumpIndexs.ToArray();
            }
            return new IStation.Dto.ApiResult<bool>(IStation.Common.AnaSetting.SaveSetting(model_setting));
        }