tangxu
2024-06-11 6954aa5b4a32aeba903b9532d5ff8e75c1b9548b
WebApi/Controllers/ZyPrjController.cs
@@ -15,9 +15,7 @@
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.Http;
namespace IStation.ZyDto
{
@@ -28,14 +26,18 @@
        public string StartTime { get; set; }
        public string EndTime { get; set; }
        public int? StartOpenCount { get; set; } = -1;
        //public int? StartOpenCount { get; set; } = -1;//已作废
        public string StartReservoirLevel { get; set; }//开始水库水位(可空):单位m
        public List<int> StartOpenPumpIndexArray { get; set; }//开始机泵开机状态(新)
        public string 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; }//计算完,是否推送
        public string IsTemporary { get; set; }//是否是临时算一下(新)
    }
}
@@ -97,7 +99,7 @@
            anaRequest.CalcOptType = (eCalcOptType)IStation.AnaGlobalParas.Setting.OptSortType;
            anaRequest.StartTime = start_timme;
            anaRequest.EndTime = end_timme;
            anaRequest.WaterLevels长江 = GetTide3Day(start_timme);
            anaRequest.WaterLevels长江 = GetTide3Day(_tideSouce, start_timme);
            if (string.IsNullOrEmpty(request.TotalFlowIn))
            {
@@ -128,7 +130,7 @@
            }
            if (!string.IsNullOrEmpty(request.MaxReservoirLevel))
            {
                anaRequest.MaxLimitWaterBoxLevel = Convert.ToDouble(request.MaxReservoirLevel);
                anaRequest.MaxReservoirLevel = Convert.ToDouble(request.MaxReservoirLevel);
                IStation.DAL.WaterPredictRecord dal = new DAL.WaterPredictRecord();
                var water_records = dal.GetByHourRangle(start_timme, end_timme);
                LogHelper.Info(water_records.Count.ToString());
@@ -164,35 +166,53 @@
                }
            }
            if (!string.IsNullOrEmpty(request.MaxReservoirLevelTime))
                anaRequest.MaxLimitWaterBoxTime = request.MaxReservoirLevelTime;
            //
            if (request.StartOpenCount == null)
                anaRequest.MaxReservoirLevelTime = request.MaxReservoirLevelTime;
            //开始时的开机状态
            if (request.StartOpenPumpIndexArray == null)
            {
                anaRequest.StartOpenCount = -1;
                IStation.LogHelper.Info(" 未设置开始时机泵开停状态 (Error: StartOpenPumpIndexArray is null)");
                return new IStation.Dto.ApiResult<string>() { Code = ApiResultCode.Error, Data = "未设置开始时机泵开停状态 (Error: StartOpenPumpIndexArray is null)" };
            }
            else
            {
                anaRequest.StartOpenCount = request.StartOpenCount.Value;
            }
            anaRequest.IsKnownStartOpenPump = true;
            anaRequest.StartOpenPumpIndexArray = request.StartOpenPumpIndexArray;
            //陈行水库水位
            if (!string.IsNullOrEmpty(request.StartReservoirLevel))
            if (string.IsNullOrEmpty(request.StartReservoirLevel))
            {
                anaRequest.CurrentWaterBoxLevel = Convert.ToDouble(request.StartReservoirLevel);
                IStation.LogHelper.Info(" 未设置开始时水库水位 (Error: StartReservoirLevel is null)");
                return new IStation.Dto.ApiResult<string>() { Code = ApiResultCode.Error, Data = "未设置开始时水库水位 (Error: StartReservoirLevel is null) " };
            }
            else
            anaRequest.StartReservoirLevel = Convert.ToDouble(request.StartReservoirLevel);
            if (anaRequest.StartReservoirLevel < 2)
            {
                anaRequest.CurrentWaterBoxLevel = ZyConnectHelper.GetRealReservoirWaterLevel();
                IStation.LogHelper.Info(string.Format("  设置开始时水库水位的数据过小 (Error: StartReservoirLevel is {0}})",
                    anaRequest.StartReservoirLevel));
                return new IStation.Dto.ApiResult<string>()
                {
                    Code = ApiResultCode.Error,
                    Data = string.Format("  设置开始时水库水位的数据过小 (Error: StartReservoirLevel is {0}})",
                    anaRequest.StartReservoirLevel)
                };
            }
            bool isTemp = false;
            if (!string.IsNullOrEmpty(request.IsTemporary))
            {
                isTemp = Convert.ToBoolean(request.IsTemporary);
            }
            var calcHelper = new IStation.CalcPrjHelper();
            AnaPrj defaultPrj = null;
            string error_info = calcHelper.Calc(anaRequest, out defaultPrj);
            LogHelper.Info(error_info);
            if (!string.IsNullOrEmpty(error_info) || defaultPrj == null)
            {
                IStation.LogHelper.Info(string.Format("Zy Prj  Time:{0}-{1} ,  计算错误, 原因是:{2} ,Request:::  ",
                start_timme, end_timme, error_info) + JsonHelper.Object2Json(anaRequest));
                var er = string.Format("Zy Prj  Time:{0}-{1} ,  计算错误, 原因是:{2} ,Request:::  {3}",
                start_timme, end_timme, error_info, JsonHelper.Object2Json(anaRequest));
                IStation.LogHelper.Info(er);
                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "计算错误, 原因是:" + error_info };
            }
            else
@@ -201,7 +221,11 @@
            }
            //保存方案
            var ret = Common.HistoryAnaPrjFileHelper.SavePrj(IStation.AnaGlobalParas.Setting, anaRequest, defaultPrj);
            if (!isTemp)
            {
                var ret = Common.HistoryAnaPrjFileHelper.SavePrj(IStation.AnaGlobalParas.Setting, anaRequest, defaultPrj);
            }
            var dto_prj = ToPrjDto(defaultPrj);
@@ -243,23 +267,27 @@
            dto_prj.Items = new List<ZyDto.SubmitPrjItem>();
            foreach (var bt in defaultPrj.BlockTimes)
            {
                if (bt.OpenPumpCount == 0)
                if (bt.OpenPumpIndexs  == null)
                    continue;
                ZyDto.SubmitPrjItem dto_item = new ZyDto.SubmitPrjItem();
                dto_item.StartTime = bt.StartTime;
                dto_item.EndTime = bt.EndTime;
                dto_item.OpenPumpCount = bt.OpenPumpCount;
                dto_item.OpenPumpIndexs = IStation.AnaGlobalParas.Setting.GetOpenPumpIndexArrays(bt.OpenPumpCount);
                dto_item.OpenPumpCount = bt.OpenPumpIndexs.Count;
                dto_item.OpenPumpIndexs = bt.OpenPumpIndexs;//
                if (bt.PointTimes != null)
                {
                    dto_item.Records = new List<SubmitPrjTime>();
                    foreach (var bt2 in bt.PointTimes)
                    {
                        dto_item.Records.Add(new SubmitPrjTime(bt2));
                    }
                }
                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;
        }
@@ -336,9 +364,12 @@
            IStation.Dto.ZyPrjAnaSetting dto_setting = new ZyPrjAnaSetting();
            dto_setting.MinOpenTimeMinute = model_setting.MinOpenTimeMinute;
            dto_setting.MinSwitchTimeMinute = model_setting.MinSwitchTimeMinute;
            dto_setting.MaxPumpSwitchCount = model_setting.MaxPumpSwitchCountQ;
            dto_setting.MaxPumpSwitchCount = model_setting.MaxPumpSwitchCount;
            dto_setting.OptSortType = model_setting.OptSortType;
            dto_setting.OpenPumpIndexs = model_setting.OpenPumpIndexs;
            dto_setting.OpenPumpIndexSequence = model_setting.OpenPumpIndexSequence;
            dto_setting.ClosePumpIndexSequence = model_setting.ClosePumpIndexSequence;
            dto_setting.SwitchPumpMinuteSpace = model_setting.SwitchPumpMinuteSpace;
            dto_setting.OptimalPumpIndexSequence = model_setting.OptimalPumpIndexSequence;
            if (model_setting.SwitchPumpIgnoreTimes != null)
            {
@@ -417,7 +448,7 @@
            {
                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "最大切泵次数 设置过长" };
            }
            model_setting.MaxPumpSwitchCountQ = dto.MaxPumpSwitchCount;
            model_setting.MaxPumpSwitchCount = dto.MaxPumpSwitchCount;
            if (dto.OptSortType >= 2)
            {
                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "OptSortType 只能设置 0 或者 1,  0代表 用电量最少  1代表 电费最少" };
@@ -510,15 +541,15 @@
                    });
                }
            }
            if (dto.OpenPumpIndexs != null)
            if (dto.OpenPumpIndexSequence != null)
            {
                List<int> penPumpIndexs = new List<int>();
                foreach (var ind in dto.OpenPumpIndexs)
                foreach (var ind in dto.OpenPumpIndexSequence)
                {
                    if (ind < 0 || ind > 5)
                    {
                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "机泵开泵顺序设置参数不合理" };
                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "开泵顺序设置参数不合理" };
                    }
                    else
                    {
@@ -527,16 +558,59 @@
                }
                if (penPumpIndexs.Distinct().Count() != 5)
                {
                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "机泵开泵顺序设置参数不合理" };
                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "开泵顺序设置参数不合理" };
                }
                model_setting.OpenPumpIndexs = penPumpIndexs.ToArray();
                model_setting.OpenPumpIndexSequence = penPumpIndexs.ToArray();
            }
            if (dto.ClosePumpIndexSequence != null)
            {
                List<int> penPumpIndexs = new List<int>();
                foreach (var ind in dto.ClosePumpIndexSequence)
                {
                    if (ind < 0 || ind > 5)
                    {
                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "关泵顺序设置参数不合理" };
                    }
                    else
                    {
                        penPumpIndexs.Add(ind);
                    }
                }
                if (penPumpIndexs.Distinct().Count() != 5)
                {
                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "关泵顺序设置参数不合理" };
                }
                model_setting.ClosePumpIndexSequence = penPumpIndexs.ToArray();
            }
            if (dto.OptimalPumpIndexSequence != null)
            {
                List<int> penPumpIndexs = new List<int>();
                foreach (var ind in dto.OptimalPumpIndexSequence)
                {
                    if (ind < 0 || ind > 5)
                    {
                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "调度泵优先度顺序设置参数不合理" };
                    }
                    else
                    {
                        penPumpIndexs.Add(ind);
                    }
                }
                if (penPumpIndexs.Distinct().Count() != 5)
                {
                    return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "调度泵优先度顺序设置参数不合理" };
                }
                model_setting.OptimalPumpIndexSequence = penPumpIndexs.ToArray();
            }
            return new IStation.Dto.ApiResult<bool>(IStation.Common.AnaSetting.SaveSetting(model_setting));
        }
        private Model.eTideSouce _tideSouce = Model.eTideSouce.Book;
        private List<Model.TimeWaterLevel> GetTide3Day(DateTime calc_day)
        public static List<Model.TimeWaterLevel> GetTide3Day(Model.eTideSouce  tideSouce, DateTime calc_day)
        {
            DateTime _rangDay1, _rangDay2, _rangDay3;
            string error1, error2, error3;
@@ -559,9 +633,9 @@
                _rangDay2 = calc_day;
                _rangDay3 = calc_day.AddDays(1);
            }
            waterLevels长江1 = TideHelper.GetByDay(_tideSouce, _rangDay1, out error1);
            waterLevels长江2 = TideHelper.GetByDay(_tideSouce, _rangDay2, out error2);
            waterLevels长江3 = TideHelper.GetByDay(_tideSouce, _rangDay3, out error3);
            waterLevels长江1 = TideHelper.GetByDay(tideSouce, _rangDay1, out error1);
            waterLevels长江2 = TideHelper.GetByDay(tideSouce, _rangDay2, out error2);
            waterLevels长江3 = TideHelper.GetByDay(tideSouce, _rangDay3, out error3);
            List<Model.TimeWaterLevel> timeValues = new List<Model.TimeWaterLevel>();
            if (waterLevels长江1 != null)