216 lines
7.5 KiB
C#
216 lines
7.5 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
|
|
namespace StandardScene.Charge
|
|
{
|
|
/// <summary>
|
|
/// 充电策略配置窗体
|
|
/// </summary>
|
|
public partial class ChargeStrategyConfigForm : Form
|
|
{
|
|
private ChargeStrategyConfig config;
|
|
private ChargeStrategyConfigService configService;
|
|
|
|
public ChargeStrategyConfigForm()
|
|
{
|
|
InitializeComponent();
|
|
configService = ChargeStrategyConfigService.Instance;
|
|
InitializeForm();
|
|
}
|
|
|
|
private void InitializeForm()
|
|
{
|
|
this.Text = "充电策略配置";
|
|
this.Size = new Size(800, 700);
|
|
this.StartPosition = FormStartPosition.CenterScreen;
|
|
this.MinimumSize = new Size(700, 600);
|
|
this.FormBorderStyle = FormBorderStyle.FixedDialog;
|
|
this.MaximizeBox = false;
|
|
|
|
// 加载配置
|
|
LoadConfig();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 加载配置到界面
|
|
/// </summary>
|
|
private void LoadConfig(bool isDef = false)
|
|
{
|
|
try
|
|
{
|
|
if (!isDef)
|
|
{
|
|
config = configService.LoadConfig();
|
|
}
|
|
|
|
|
|
// SOC 相关参数
|
|
numMustChargeSoc.Value = (decimal)config.MustChargeSoc;
|
|
numIdleChargeSoc.Value = (decimal)config.IdleChargeSoc;
|
|
numTaskAvailableSoc.Value = (decimal)config.TaskAvailableSoc;
|
|
numFullChargeSoc.Value = (decimal)config.FullChargeSoc;
|
|
numAllowInterruptSoc.Value = (decimal)config.AllowInterruptSoc;
|
|
|
|
// 时间相关参数
|
|
numIdleChargeSeconds.Value = (decimal)config.IdleChargeSeconds;
|
|
numIdleSeconds.Value = (decimal)config.IdleSeconds;
|
|
numMustChargeSeconds.Value = (decimal)config.MustChargeSeconds;
|
|
numTopUpMinutes.Value = (decimal)config.TopUpMinutes;
|
|
|
|
// 任务相关参数
|
|
numMinAllowFreeCarToChargeTaskCnt.Value = config.MinAllowFreeCarToChargeTaskCnt;
|
|
|
|
// 开关参数
|
|
chkAllowInterruptTask.Checked = config.AllowInterruptTask;
|
|
chkUseLowerSocForCharge.Checked = config.UseLowerSocForCharge;
|
|
chkEnableErrorChargeDetection.Checked = config.EnableErrorChargeDetection;
|
|
chkUseChargeSiteFilter.Checked = config.UseChargeSiteFilter;
|
|
|
|
lblStatus.Text = "配置加载成功";
|
|
lblStatus.ForeColor = Color.Green;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show($"加载配置失败: {ex.Message}", "错误",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
lblStatus.Text = "配置加载失败";
|
|
lblStatus.ForeColor = Color.Red;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 从界面保存配置
|
|
/// </summary>
|
|
private void SaveConfig()
|
|
{
|
|
try
|
|
{
|
|
// SOC 相关参数
|
|
config.MustChargeSoc = (double)numMustChargeSoc.Value;
|
|
config.IdleChargeSoc = (double)numIdleChargeSoc.Value;
|
|
config.TaskAvailableSoc = (double)numTaskAvailableSoc.Value;
|
|
config.FullChargeSoc = (double)numFullChargeSoc.Value;
|
|
config.AllowInterruptSoc = (double)numAllowInterruptSoc.Value;
|
|
|
|
// 时间相关参数
|
|
config.IdleChargeSeconds = (double)numIdleChargeSeconds.Value;
|
|
config.IdleSeconds = (double)numIdleSeconds.Value;
|
|
config.MustChargeSeconds = (double)numMustChargeSeconds.Value;
|
|
config.TopUpMinutes = (double)numTopUpMinutes.Value;
|
|
|
|
// 任务相关参数
|
|
config.MinAllowFreeCarToChargeTaskCnt = (int)numMinAllowFreeCarToChargeTaskCnt.Value;
|
|
|
|
// 开关参数
|
|
config.AllowInterruptTask = chkAllowInterruptTask.Checked;
|
|
config.UseLowerSocForCharge = chkUseLowerSocForCharge.Checked;
|
|
config.EnableErrorChargeDetection = chkEnableErrorChargeDetection.Checked;
|
|
config.UseChargeSiteFilter = chkUseChargeSiteFilter.Checked;
|
|
|
|
// 保存到文件
|
|
configService.SaveConfig(config);
|
|
|
|
lblStatus.Text = "配置保存成功";
|
|
lblStatus.ForeColor = Color.Green;
|
|
|
|
MessageBox.Show("充电策略配置保存成功!", "成功",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show($"保存配置失败: {ex.Message}", "错误",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
lblStatus.Text = "配置保存失败";
|
|
lblStatus.ForeColor = Color.Red;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 恢复默认配置
|
|
/// </summary>
|
|
private void RestoreDefaults()
|
|
{
|
|
var result = MessageBox.Show(
|
|
"确定要恢复默认配置吗?当前配置将被覆盖。",
|
|
"确认恢复",
|
|
MessageBoxButtons.YesNo,
|
|
MessageBoxIcon.Question);
|
|
|
|
if (result == DialogResult.Yes)
|
|
{
|
|
config = ChargeStrategyConfig.CreateDefault();
|
|
LoadConfig(true);
|
|
lblStatus.Text = "已恢复默认配置(未保存)";
|
|
lblStatus.ForeColor = Color.Blue;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 验证配置参数
|
|
/// </summary>
|
|
private bool ValidateConfig()
|
|
{
|
|
// 验证 SOC 范围
|
|
if (numMustChargeSoc.Value >= numIdleChargeSoc.Value)
|
|
{
|
|
MessageBox.Show("必充电量必须小于空闲充电电量", "验证失败",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
return false;
|
|
}
|
|
|
|
if (numTaskAvailableSoc.Value <= numMustChargeSoc.Value)
|
|
{
|
|
MessageBox.Show("任务可用电量必须大于必充电量", "验证失败",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
return false;
|
|
}
|
|
|
|
if (numFullChargeSoc.Value < numIdleChargeSoc.Value)
|
|
{
|
|
MessageBox.Show("满电电量必须大于等于空闲充电电量", "验证失败",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
return false;
|
|
}
|
|
|
|
if (numAllowInterruptSoc.Value <= numMustChargeSoc.Value)
|
|
{
|
|
MessageBox.Show("允许中断电量必须大于必充电量", "验证失败",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
// ==================== 事件处理 ====================
|
|
|
|
private void btnSave_Click(object sender, EventArgs e)
|
|
{
|
|
if (ValidateConfig())
|
|
{
|
|
SaveConfig();
|
|
}
|
|
}
|
|
|
|
private void btnCancel_Click(object sender, EventArgs e)
|
|
{
|
|
this.Close();
|
|
}
|
|
|
|
private void btnRestoreDefaults_Click(object sender, EventArgs e)
|
|
{
|
|
RestoreDefaults();
|
|
}
|
|
|
|
private void btnApply_Click(object sender, EventArgs e)
|
|
{
|
|
if (ValidateConfig())
|
|
{
|
|
SaveConfig();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|