From 1cbad0a52a691a53ce4423ba36819f97ff49d575 Mon Sep 17 00:00:00 2001 From: smartwyy <645583145@qq.com> Date: Wed, 29 May 2024 21:32:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=85=85=E7=94=B5=E7=AD=96?= =?UTF-8?q?=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Entity/DbModel/Station/BinInfo.cs | 386 ++++++++++++------------ Service/Charger/Client/ChargerClient.cs | 4 +- Service/Charger/Client/ClientMgr.cs | 60 ++-- Service/Init/StaticStationInfo.cs | 4 +- 4 files changed, 246 insertions(+), 208 deletions(-) diff --git a/Entity/DbModel/Station/BinInfo.cs b/Entity/DbModel/Station/BinInfo.cs index 9d0df00..dbaffd2 100644 --- a/Entity/DbModel/Station/BinInfo.cs +++ b/Entity/DbModel/Station/BinInfo.cs @@ -1,7 +1,4 @@ -using System; -using System.Linq; -using System.Text; -using SqlSugar; +using SqlSugar; namespace Entity.DbModel.Station { @@ -11,185 +8,204 @@ namespace Entity.DbModel.Station [SugarTable("bin_info")] public partial class BinInfo { - public BinInfo(){ - - - } - /// - /// Desc:id - /// Default: - /// Nullable:False - /// - [SugarColumn(IsPrimaryKey=true,IsIdentity=true,ColumnName="id")] - public int Id {get;set;} - - /// - /// Desc:仓位编号 - /// Default: - /// Nullable:True - /// - [SugarColumn(ColumnName="no")] - public string No {get;set;} - - /// - /// Desc:仓位编码 - /// Default: - /// Nullable:True - /// - [SugarColumn(ColumnName="code")] - public string Code {get;set;} - - /// - /// Desc:仓位名称 - /// Default: - /// Nullable:True - /// - [SugarColumn(ColumnName="name")] - public string Name {get;set;} - - /// - /// Desc:电池编号 - /// Default: - /// Nullable:True - /// - [SugarColumn(ColumnName="battery_no")] - public string BatteryNo {get;set;} - - /// - /// Desc:充电机编号 - /// Default: - /// Nullable:True - /// - [SugarColumn(ColumnName="charger_no")] - public string ChargerNo {get;set;} - - /// - /// Desc:充电枪编号 - /// Default: - /// Nullable:True - /// - [SugarColumn(ColumnName="charger_gun_no")] - public string ChargerGunNo {get;set;} - - /// - /// Desc:水冷编号 - /// Default: - /// Nullable:True - /// - [SugarColumn(ColumnName="water_cool_no")] - public string WaterCoolNo {get;set;} - - /// - /// Desc:是否有电插头;0-无电插头;1-有电插头 - /// Default: - /// Nullable:True - /// - [SugarColumn(ColumnName="elec_plugin_flag")] - public int? ElecPluginFlag {get;set;} - - /// - /// Desc:电插头状态;0-未知;1-已经连接;2-未连接 - /// Default: - /// Nullable:True - /// - [SugarColumn(ColumnName="elec_plugin_status")] - public string ElecPluginStatus {get;set;} - - /// - /// Desc:是否有水插头;0-无水插头;1-有水插头 - /// Default: - /// Nullable:False - /// - [SugarColumn(ColumnName="water_plugin_flag")] - public string WaterPluginFlag {get;set;} - - /// - /// Desc:预约锁定;0-未锁定;1-锁定 - /// Default: - /// Nullable:True - /// - [SugarColumn(ColumnName="amt_lock")] - public string AmtLock {get;set;} - - /// - /// Desc:soc - /// Default: - /// Nullable:True - /// - [SugarColumn(ColumnName="soc")] - public decimal? Soc {get;set;} - - /// - /// Desc:soe - /// Default: - /// Nullable:True - /// - [SugarColumn(ColumnName="soe")] - public decimal? Soe {get;set;} - - /// - /// Desc:soh - /// Default: - /// Nullable:True - /// - [SugarColumn(ColumnName="soh")] - public decimal? Soh {get;set;} - - /// - /// Desc:电池入仓顺序 - /// Default: - /// Nullable:True - /// - [SugarColumn(ColumnName="battery_enter_seq")] - public int? BatteryEnterSeq {get;set;} - - /// - /// Desc:充电状态;0-未知;1-正在充电;2-无电池;3-禁用;4-充电停止 - /// Default:0 - /// Nullable:True - /// - [SugarColumn(ColumnName="charge_status")] - public int? ChargeStatus {get;set;} - - /// - /// Desc:仓位状态;0-禁用;1-启用 - /// Default:1 - /// Nullable:True - /// - [SugarColumn(ColumnName="status")] - public int? Status {get;set;} - - /// - /// Desc:创建人 - /// Default: - /// Nullable:True - /// - [SugarColumn(ColumnName="created_by")] - public string CreatedBy {get;set;} - - /// - /// Desc:创建时间 - /// Default:CURRENT_TIMESTAMP - /// Nullable:True - /// - [SugarColumn(ColumnName="created_time")] - public DateTime? CreatedTime {get;set;} - - /// - /// Desc:更新人 - /// Default: - /// Nullable:True - /// - [SugarColumn(ColumnName="updated_by")] - public string UpdatedBy {get;set;} - - /// - /// Desc:更新时间 - /// Default:CURRENT_TIMESTAMP - /// Nullable:True - /// - [SugarColumn(ColumnName="updated_time")] - public DateTime? UpdatedTime {get;set;} - + public BinInfo() + { + } + + /// + /// Desc:id + /// Default: + /// Nullable:False + /// + [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "id")] + public int Id { get; set; } + + /// + /// Desc:仓位编号 + /// Default: + /// Nullable:True + /// + [SugarColumn(ColumnName = "no")] + public string No { get; set; } + + /// + /// Desc:仓位编码 + /// Default: + /// Nullable:True + /// + [SugarColumn(ColumnName = "code")] + public string Code { get; set; } + + /// + /// Desc:仓位名称 + /// Default: + /// Nullable:True + /// + [SugarColumn(ColumnName = "name")] + public string Name { get; set; } + + /// + /// Desc:电池编号 + /// Default: + /// Nullable:True + /// + [SugarColumn(ColumnName = "battery_no")] + public string BatteryNo { get; set; } + + /// + /// Desc:充电机编号 + /// Default: + /// Nullable:True + /// + [SugarColumn(ColumnName = "charger_no")] + public string ChargerNo { get; set; } + + /// + /// Desc:充电枪编号 + /// Default: + /// Nullable:True + /// + [SugarColumn(ColumnName = "charger_gun_no")] + public string ChargerGunNo { get; set; } + + /// + /// Desc:水冷编号 + /// Default: + /// Nullable:True + /// + [SugarColumn(ColumnName = "water_cool_no")] + public string WaterCoolNo { get; set; } + + /// + /// Desc:是否有电插头;0-无电插头;1-有电插头 + /// Default: + /// Nullable:True + /// + [SugarColumn(ColumnName = "elec_plugin_flag")] + public int? ElecPluginFlag { get; set; } + + /// + /// Desc:电插头状态;0-未知;1-已经连接;2-未连接 + /// Default: + /// Nullable:True + /// + [SugarColumn(ColumnName = "elec_plugin_status")] + public string ElecPluginStatus { get; set; } + + /// + /// Desc:是否有水插头;0-无水插头;1-有水插头 + /// Default: + /// Nullable:False + /// + [SugarColumn(ColumnName = "water_plugin_flag")] + public string WaterPluginFlag { get; set; } + + /// + /// Desc:预约锁定;0-未锁定;1-锁定 + /// Default: + /// Nullable:True + /// + [SugarColumn(ColumnName = "amt_lock")] + public string AmtLock { get; set; } + + /// + /// Desc:soc + /// Default: + /// Nullable:True + /// + [SugarColumn(ColumnName = "soc")] + public decimal? Soc { get; set; } + + /// + /// Desc:soe + /// Default: + /// Nullable:True + /// + [SugarColumn(ColumnName = "soe")] + public decimal? Soe { get; set; } + + /// + /// Desc:soh + /// Default: + /// Nullable:True + /// + [SugarColumn(ColumnName = "soh")] + public decimal? Soh { get; set; } + + /// + /// Desc:电池入仓顺序 + /// Default: + /// Nullable:True + /// + [SugarColumn(ColumnName = "battery_enter_seq")] + public int? BatteryEnterSeq { get; set; } + + /// + /// Desc:充电状态;0-未知;1-正在充电;2-无电池;3-禁用;4-充电停止 + /// Default:0 + /// Nullable:True + /// + [SugarColumn(ColumnName = "charge_status")] + public int? ChargeStatus { get; set; } + + /// + /// Desc:仓位状态;0-禁用;1-启用 + /// Default:1 + /// Nullable:True + /// + [SugarColumn(ColumnName = "status")] + public int? Status { get; set; } + + /// + /// Desc:创建人 + /// Default: + /// Nullable:True + /// + [SugarColumn(ColumnName = "created_by")] + public string CreatedBy { get; set; } + + /// + /// Desc:创建时间 + /// Default:CURRENT_TIMESTAMP + /// Nullable:True + /// + [SugarColumn(ColumnName = "created_time")] + public DateTime? CreatedTime { get; set; } + + /// + /// Desc:更新人 + /// Default: + /// Nullable:True + /// + [SugarColumn(ColumnName = "updated_by")] + public string UpdatedBy { get; set; } + + /// + /// Desc:更新时间 + /// Default:CURRENT_TIMESTAMP + /// Nullable:True + /// + [SugarColumn(ColumnName = "updated_time")] + public DateTime? UpdatedTime { get; set; } + + /// + /// 缓存仓标记 0:不是 1:是 + /// + [SugarColumn(ColumnName = "cache_bin_flag")] + public int CacheBinFlag { get; set; } + + + /// + /// 换电禁用标志 0:不可换电 1:可以换电 + /// + [SugarColumn(ColumnName = "can_swap_flag")] + public int CanSwapFlag { get; set; } + + + /// + /// 充电禁用标志 0:不可充电 1:可以充电 + /// + [SugarColumn(ColumnName = "can_charge_flag")] + public int CanChargeFlag { get; set; } } -} +} \ No newline at end of file diff --git a/Service/Charger/Client/ChargerClient.cs b/Service/Charger/Client/ChargerClient.cs index b54bf31..e17726f 100644 --- a/Service/Charger/Client/ChargerClient.cs +++ b/Service/Charger/Client/ChargerClient.cs @@ -238,9 +238,9 @@ public class ChargerClient : TcpClient /// /// SOC限制.百分比 /// 功率调节指令类型.默认1 绝对功率值 - /// 0.1kw/位,默认3600 + /// 1kw/位,默认3600 /// 充电流水号 - public Result SendRemoteStartCharging(byte socLimit, float changePower = 3600, byte changePowerCmdType = 1, + public Result SendRemoteStartCharging(byte socLimit, float changePower = 360, byte changePowerCmdType = 1, string? chargeOrderNo = null) { if (!Connected) diff --git a/Service/Charger/Client/ClientMgr.cs b/Service/Charger/Client/ClientMgr.cs index 0c8b078..4d02615 100644 --- a/Service/Charger/Client/ClientMgr.cs +++ b/Service/Charger/Client/ClientMgr.cs @@ -166,14 +166,6 @@ public static class ClientMgr continue; } - var chargeSoc = StaticStationInfo.ChargeSoc; - List socNeedChargeList = binInfos.Where(t => t.Soc < chargeSoc).ToList(); - if (socNeedChargeList.Count < 0) - { - Log.Info($"lack of binInfos.soc < {chargeSoc}"); - continue; - } - #region 电价模型 @@ -222,27 +214,57 @@ public static class ClientMgr } int needBatteryCount = opModelDetails[0].BatteryCount ?? 8; - if ((binInfos.Count - socNeedChargeList.Count) >= needBatteryCount) + List canSwapList = binInfos.Where(it => it.Soc != null && Convert.ToSingle(it.Soc) >= StaticStationInfo.SwapSoc).ToList(); + if (canSwapList.Count == needBatteryCount) { Log.Info($"lack of needBatteryCount {needBatteryCount}"); continue; } - - #endregion - - - foreach (BinInfo binInfo in socNeedChargeList) + if(canSwapList.Count > needBatteryCount) { - if (Dictionary.TryGetValue(binInfo.ChargerNo, out var client)) + List chargingList = binInfos.Where(it => it.ChargeStatus == 1).ToList(); + + int needStopCount = chargingList.Count - (canSwapList.Count - needBatteryCount); + if (needStopCount > 0) { - Result result = client.StartCharge(); - Log.Info($"start {binInfo.ChargerNo} charge {result.IsSuccess}:{result.Msg}"); + chargingList.Sort((a,b) => (a.Soc??0).CompareTo(b.Soc??0)); + for (int i = 0; i < needStopCount; i++) + { + Log.Info($"auto stop charge {chargingList[i].No}"); + GetBySn(chargingList[i].No)?.SendRemoteStopCharging(); + } } - else + } + else + { + List canChargeList = binInfos.Where(it => it.Soc != null && Convert.ToSingle(it.Soc) < StaticStationInfo.SwapSoc && it.CanChargeFlag == 1).ToList(); + canChargeList.Sort((a,b) => (b.Soc??0).CompareTo(a.Soc??0)); + + byte chargeSoc = StaticStationInfo.ChargeSoc; + float chargePower = StaticStationInfo.ChargePower; + int count = needBatteryCount - canSwapList.Count; + int number = 0; + foreach (var binInfo in canChargeList) { - Log.Info($"can not find {binInfo.ChargerNo} in dict"); + Result? result = GetBySn(binInfo.ChargerNo)?.SendRemoteStartCharging(chargeSoc, chargePower); + if (result is {IsSuccess: true} ) + { + Log.Info($"auto start charge {binInfo.ChargerNo}"); + number++; + } + if (count == number) + { + Log.Info($"auto start charge count {count}"); + break; + } } } + + + + #endregion + + } catch (Exception e) { diff --git a/Service/Init/StaticStationInfo.cs b/Service/Init/StaticStationInfo.cs index ec3f013..ae27002 100644 --- a/Service/Init/StaticStationInfo.cs +++ b/Service/Init/StaticStationInfo.cs @@ -63,9 +63,9 @@ public class StaticStationInfo set => Set(StationParamConst.SwapFinishChargeTime, value); } - public static string SwapSoc + public static float SwapSoc { - get => Resolve(StationParamConst.SwapSoc); + get => float.Parse(Resolve(StationParamConst.SwapSoc)); set => Set(StationParamConst.SwapSoc, value); }