using IStation.CalcModel;
|
using IStation.Common;
|
using IStation.Dto;
|
using IStation.Model;
|
using IStation.ZyDto;
|
using System;
|
using System.Collections.Generic;
|
using System.IO;
|
using System.Linq;
|
using System.Net;
|
using System.Net.Http;
|
using System.Security.Permissions;
|
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;
|
|
namespace IStation.ZyDto
|
{
|
public class ZyPrjRequest
|
{
|
public ZyPrjRequest() { }
|
|
public string StartTime { get; set; }
|
public string EndTime { get; set; }
|
public int StartOpenCount { get; set; } = -1;
|
public double? TotalFlowIn { get; set; }//取水总量 (单位 吨)
|
}
|
|
}
|
namespace IStation.WebApi.Controllers
|
{
|
/// <summary>
|
/// 计算配置
|
/// </summary>
|
[RoutePrefix("ZyPrj")]
|
public class ZyPrjController : ApiController
|
{
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
[Route("Calc")]
|
[HttpPost]
|
public IStation.Dto.ApiResult Calc([FromBody] ZyPrjRequest request)
|
{
|
if (request == null )
|
{
|
return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "request is null" };
|
}
|
if (string.IsNullOrEmpty(request.StartTime))
|
{
|
return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "StartTime is null" };
|
}
|
if (string.IsNullOrEmpty(request.EndTime))
|
{
|
return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "EndTime is null" };
|
}
|
|
DateTime start_timme = DateTime.Now;
|
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)
|
{
|
return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "取水总量错误" };
|
}
|
if (request.TotalFlowIn < 10000)
|
{
|
return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "注意取水总量单位是吨,当前参数参数过小" };
|
}
|
|
IStation.CalcModel.AnaRequest anaRequest = new AnaRequest();
|
anaRequest.CalcOptType = eCalcOptType.电费;
|
anaRequest.StartTime = start_timme;
|
anaRequest.EndTime = end_timme;
|
anaRequest.WaterLevels长江 = GetTide3Day(start_timme);
|
anaRequest.StartOpenCount = request.StartOpenCount;
|
anaRequest.TotalFlow取水总量 = request.TotalFlowIn;
|
|
var calcHelper = new IStation.CalcPrjHelper();
|
AnaPrj defaultPrj = null;
|
string error_info = calcHelper.Calc(anaRequest, out defaultPrj);
|
if (!string.IsNullOrEmpty(error_info) || defaultPrj == null)
|
{
|
return new IStation.Dto.ApiResult() { Code = ApiResultCode.Error, Message = "计算错误, 原因是:"+ error_info };
|
}
|
|
var ret = Common.HistoryAnaPrjFileHelper.SavePrj(IStation.AnaGlobalParas.Setting, anaRequest, defaultPrj);
|
|
IStation.ZyDto.SubmitPrj dto_prj = new ZyDto.SubmitPrj();
|
|
if (string.IsNullOrEmpty(defaultPrj.ID))
|
{
|
var time = DateTime.Now;
|
defaultPrj.ID = $"{time.Year}{time.Month}{time.Day}{time.Hour}{time.Minute}{time.Second}";
|
}
|
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.EndTime.ToString("yyyy-MM-dd HH:mm:ss");
|
|
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)
|
{
|
if (bt.OpenPumpCount == 0)
|
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 = CalcPrjHelper.GetOpenPumpIndexs(bt.OpenPumpCount);
|
dto_prj.Items.Add(dto_item);
|
}
|
|
//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);
|
// }
|
//}
|
|
|
return new IStation.Dto.ApiResult< IStation.ZyDto.SubmitPrj>(dto_prj) { Code = ApiResultCode.Success };
|
}
|
|
Model.eTideSouce _tideSouce = Model.eTideSouce.Book;
|
private List<Model.TimeWaterLevel> GetTide3Day(DateTime calc_day )
|
{
|
DateTime _rangDay1, _rangDay2, _rangDay3;
|
string error1, error2, error3;
|
List<Model.TimeWaterLevel> waterLevels长江1, waterLevels长江2, waterLevels长江3;
|
if (calc_day == DateTime.Today)
|
{
|
_rangDay1 = calc_day.AddDays(-1);
|
_rangDay2 = calc_day;
|
_rangDay3 = calc_day.AddDays(1);
|
}
|
else if (calc_day == DateTime.Today.AddDays(1))
|
{
|
_rangDay1 = calc_day.AddDays(-2);
|
_rangDay2 = calc_day.AddDays(-1);
|
_rangDay3 = calc_day;
|
}
|
else
|
{
|
_rangDay1 = calc_day.AddDays(-1);
|
_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);
|
|
|
|
|
List<Model.TimeWaterLevel> timeValues = new List<Model.TimeWaterLevel>();
|
if (waterLevels长江1 != null)
|
{
|
timeValues.AddRange(waterLevels长江1);
|
}
|
|
if (waterLevels长江2 != null)
|
{
|
timeValues.AddRange(waterLevels长江2);
|
}
|
|
if (waterLevels长江3 != null)
|
{
|
timeValues.AddRange(waterLevels长江3);
|
}
|
|
|
|
|
|
return timeValues;
|
}
|
}
|
}
|