tangxu
2024-04-22 28e0a3da90b21e00b89cbb25a091e26f9001fd94
WebApi/Controllers/ZyPrjController.cs
@@ -1,4 +1,5 @@
using IStation.CalcModel;
using Antlr.Runtime.Tree;
using IStation.CalcModel;
using IStation.Common;
using IStation.Dto;
using IStation.Model;
@@ -9,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;
@@ -64,18 +66,22 @@
            DateTime end_timme = DateTime.Now;
            if(!DateTime.TryParse(request.StartTime,out start_timme))
            {
                IStation.LogHelper.Error(string.Format("ZyPrjRequest Time:{0}-{1} StartTime is error format", start_timme, end_timme));
                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "StartTime is error format" };
            }
            if (!DateTime.TryParse(request.EndTime, out end_timme))
            {
                IStation.LogHelper.Error(string.Format("ZyPrjRequest Time:{0}-{1} EndTime is error format", start_timme, end_timme));
                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "EndTime is error format" };
            }
            if(end_timme< start_timme.AddMinutes(60))
            {
                IStation.LogHelper.Error(string.Format("ZyPrjRequest Time:{0}-{1} 时间范围错误,间隔过短", start_timme, end_timme));
                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "时间范围错误,间隔过短" };
            }
            if(end_timme > start_timme.AddDays(1))
            {
                IStation.LogHelper.Error(string.Format("ZyPrjRequest Time:{0}-{1} 时间范围错误,不能超过24小时", start_timme, end_timme)) ;
                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "时间范围错误,不能超过24小时" }; 
            }
            if (request.TotalFlowIn == null)
@@ -86,7 +92,10 @@
            {
                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "注意取水总量单位是吨,当前参数参数过小" };
            }
            IStation.LogHelper.Info(string.Format("Zy Prj  Time:{0}-{1} ,StartOpenCount:{2}, TotalFlowIn:{3}",
                start_timme, end_timme, request.StartOpenCount, request.TotalFlowIn));
            IStation.CalcModel.AnaRequest anaRequest = new  AnaRequest();
            anaRequest.CalcOptType = eCalcOptType.电费;
            anaRequest.StartTime = start_timme;
@@ -115,11 +124,11 @@
            dto_prj.schemeID = defaultPrj.ID;
            dto_prj.Day = defaultPrj.StartTime.ToString("yyyy-MM-dd");
            dto_prj.StartTime = defaultPrj.StartTime.ToString("yyyy-MM-dd HH:mm:ss");
            dto_prj.EndTime = defaultPrj.StartTime.ToString("yyyy-MM-dd HH:mm:ss");
            dto_prj.EndTime = defaultPrj.EndTime.ToString("yyyy-MM-dd HH:mm:ss");
            dto_prj.FlowTotal = defaultPrj.SumFlow;
            dto_prj.PowerTotal = defaultPrj.SumPower;
            dto_prj.MoneyTotal = defaultPrj.SumMoney;
            dto_prj.FlowTotal = Math.Round(defaultPrj.SumFlow, 0);
            dto_prj.PowerTotal = Math.Round(defaultPrj.SumPower, 0);
            dto_prj.MoneyTotal = Math.Round(defaultPrj.SumMoney, 0);
            dto_prj.Items = new List<ZyDto.SubmitPrjItem>();
            foreach (var bt in defaultPrj.BlockTimes)
@@ -130,7 +139,7 @@
                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);
            }
@@ -152,6 +161,221 @@
            return new IStation.Dto.ApiResult< IStation.ZyDto.SubmitPrj>(dto_prj) { Code = ApiResultCode.Success };
        }
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        [Route("GetSetting")]
        [HttpGet]
        public IStation.Dto.ApiResult GetSetting()
        {
            var model_setting = IStation.AnaGlobalParas.Setting;
            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.OptSortType = model_setting.OptSortType;
            dto_setting.OpenPumpIndexs = model_setting.OpenPumpIndexs;
            if (model_setting.SwitchPumpIgnoreTimes != null)
            {
                dto_setting.SwitchPumpIgnoreTimes = new List<ZyPrjAnaSetting.TimeRangeZy>();
                foreach(var m in model_setting.SwitchPumpIgnoreTimes)
                {
                    dto_setting.SwitchPumpIgnoreTimes.Add(new ZyPrjAnaSetting.TimeRangeZy()
                    {
                        IsUse = m.IsUse,
                        StartHour = m.StartHour,
                        StartMinute = m.StartMinute,
                        EndHour = m.EndHour,
                        EndMinute = m.EndMinute,
                    });
                }
            }
            if (model_setting.OpenPumpTimes != null)
            {
                dto_setting.OpenPumpTimes = new List<ZyPrjAnaSetting.TimeRangeZy>();
                foreach (var m in model_setting.OpenPumpTimes)
                {
                    dto_setting.OpenPumpTimes.Add(new ZyPrjAnaSetting.TimeRangeZy()
                    {
                        IsUse = m.IsUse,
                        StartHour = m.StartHour,
                        StartMinute = m.StartMinute,
                        EndHour = m.EndHour,
                        EndMinute = m.EndMinute,
                    });
                }
            }
            return new IStation.Dto.ApiResult<IStation.Dto.ZyPrjAnaSetting>(dto_setting);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="ana"></param>
        /// <returns></returns>
        [Route("SaveSetting")]
        [HttpPost]
        public IStation.Dto.ApiResult SaveSetting([FromBody] IStation.Dto.ZyPrjAnaSetting dto)
        {
            if (dto == null)
            {
                return new IStation.Dto.ApiResult<bool>(false);
            }
            var model_setting = IStation.AnaGlobalParas.Setting;
            if (dto.MinOpenTimeMinute < 5)
            {
                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "最少开泵时间 设置过少" };
            }
            if (dto.MinOpenTimeMinute > 120)
            {
                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "最少开泵时间 设置过长" };
            }
            model_setting.MinOpenTimeMinute = dto.MinOpenTimeMinute;
            if (dto.MinSwitchTimeMinute < 5)
            {
                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "最少切泵时间 设置过少" };
            }
            if (dto.MinSwitchTimeMinute > 120)
            {
                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "最少切泵时间 设置过长" };
            }
            model_setting.MinSwitchTimeMinute = dto.MinSwitchTimeMinute;
            if (dto.MaxPumpSwitchCount < 1)
            {
                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "最大切泵次数 设置过少" };
            }
            if (dto.MaxPumpSwitchCount > 10)
            {
                return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "最大切泵次数 设置过长" };
            }
            model_setting.MaxPumpSwitchCountQ = dto.MaxPumpSwitchCount;
            model_setting.OptSortType = dto.OptSortType;
            if (dto.SwitchPumpIgnoreTimes != null)
            {
                model_setting.SwitchPumpIgnoreTimes = new List<CalcModel.AnaSetting.TimeRange>();
                foreach (var m in dto.SwitchPumpIgnoreTimes)
                {
                    if (m.StartHour < 0 || m.StartHour > 24)
                    {
                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "不许切泵时间 时间范围设置不合理" };
                    }
                    if (m.EndHour < 0 || m.EndHour > 24)
                    {
                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "不许切泵时间 时间范围设置不合理" };
                    }
                    if (m.StartMinute < 0 || m.StartMinute > 60)
                    {
                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "不许切泵时间 时间范围设置不合理" };
                    }
                    if (m.EndMinute < 0 || m.EndMinute > 60)
                    {
                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "不许切泵时间 时间范围设置不合理" };
                    }
                    if(m.StartHour > m.EndHour)
                    {
                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "不许切泵时间 时间范围设置不合理" };
                    }
                    if (m.StartHour == m.EndHour)
                    {
                        if (m.StartMinute > m.EndMinute)
                        {
                            return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "不许切泵时间 时间范围设置不合理" };
                        }
                    }
                    model_setting.SwitchPumpIgnoreTimes.Add(new CalcModel.AnaSetting.TimeRange()
                    {
                        IsUse = m.IsUse,
                        StartHour = m.StartHour,
                        StartMinute = m.StartMinute,
                        EndHour = m.EndHour,
                        EndMinute = m.EndMinute,
                    });
                }
            }
            if (dto.OpenPumpTimes != null)
            {
                model_setting.OpenPumpTimes = new List<CalcModel.AnaSetting.TimeRange>();
                foreach (var m in dto.OpenPumpTimes)
                {
                    if (m.StartHour < 0 || m.StartHour > 24)
                    {
                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "开泵时间 时间范围设置不合理" };
                    }
                    if (m.EndHour < 0 || m.EndHour > 24)
                    {
                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "开泵时间 时间范围设置不合理" };
                    }
                    if (m.StartMinute < 0 || m.StartMinute > 60)
                    {
                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "开泵时间 时间范围设置不合理" };
                    }
                    if (m.EndMinute < 0 || m.EndMinute > 60)
                    {
                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "开泵时间 时间范围设置不合理" };
                    }
                    if (m.StartHour > m.EndHour)
                    {
                        return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "开泵时间 时间范围设置不合理" };
                    }
                    if (m.StartHour == m.EndHour)
                    {
                        if (m.StartMinute > m.EndMinute)
                        {
                            return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "开泵时间 时间范围设置不合理" };
                        }
                    }
                    model_setting.OpenPumpTimes.Add(new CalcModel.AnaSetting.TimeRange()
                    {
                        IsUse = m.IsUse,
                        StartHour = m.StartHour,
                        StartMinute = m.StartMinute,
                        EndHour = m.EndHour,
                        EndMinute = m.EndMinute,
                    });
                }
            }
            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));
        }
        Model.eTideSouce _tideSouce = Model.eTideSouce.Book;
        private List<Model.TimeWaterLevel> GetTide3Day(DateTime calc_day )
        {