增加日志推送,增加房态变化的时候 断电功能

This commit is contained in:
2026-02-03 08:53:47 +08:00
parent e4610f1ffa
commit 1d77141ffe
21 changed files with 229 additions and 26 deletions

Binary file not shown.

View File

@@ -14,6 +14,7 @@ namespace Common
public string EndPoint { get; set; }
public string CurrentStatus { get; set; }
public DateTime CurrentTime { get; set; }
public long UnixTime { get; set; }
}
}

View File

@@ -77,7 +77,7 @@ namespace Common
Marshal.Copy(bytes, startIndex, structPtr, size);
structObj = Marshal.PtrToStructure(structPtr, type);
}
catch (Exception)
catch (Exception ex)
{
}
finally

View File

@@ -339,7 +339,7 @@ namespace CommonEntity
public string cmd_word { get; set; }
public int frame_id { get; set; }
public string udp_raw { get; set; }
public byte[] udp_raw { get; set; }
public int sys_lock_status { get; set; }
public int report_count { get; set; }

View File

@@ -36,7 +36,7 @@
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DefineConstants>TRACE;DEBUG;AAA;BBB;CCC;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>

View File

@@ -275,7 +275,8 @@ namespace ConsoleApplication2
d1.device_id = hostNumber;
d1.frame_id = zhenhao;
d1.cmd_word = "0F";
d1.udp_raw = Tools.ByteToString(data);
//d1.udp_raw = Tools.ByteToString(data);
d1.udp_raw = data;
d1.direction = "下发";
List<ts_deviceitem> lll1 = new List<ts_deviceitem>();
@@ -300,6 +301,11 @@ namespace ConsoleApplication2
}
static void Main(string[] args)
{
#if AAA
Console.WriteLine("aaaaaaaaaaaaa");
#endif
AAA();
string aaa111 = "233003";
var bj1 = aaa111.Substring(0, 3);

View File

@@ -440,5 +440,9 @@ namespace Domain
///// </summary>
//public virtual string TCLAppSecret { get; set; }
public virtual string ETV_HotelID { get; set; }
public virtual int SwitchRoomStatus_PowerOff2 { get; set; }
public virtual int SwitchRoomStatus_PowerOff4 { get; set; }
public virtual int SwitchRoomStatus_PowerOff8 { get; set; }
public virtual int SwitchRoomStatus_PowerOff16 { get; set; }
}
}

View File

@@ -74,6 +74,10 @@
<property name="IsPushPMSData" column="IsPushPMSData" type="bool" />
<property name="HeTongNumber" column="HeTongNumber" type="string" />
<property name="ETV_HotelID" column="ETV_HotelID" type="string" />
<property name="SwitchRoomStatus_PowerOff2" column="SwitchRoomStatus_PowerOff2" type="int"/>
<property name="SwitchRoomStatus_PowerOff4" column="SwitchRoomStatus_PowerOff4" type="int"/>
<property name="SwitchRoomStatus_PowerOff8" column="SwitchRoomStatus_PowerOff8" type="int"/>
<property name="SwitchRoomStatus_PowerOff16" column="SwitchRoomStatus_PowerOff16" type="int"/>
<!--<property name="TCLAppId" column="TCLAppId" type="string" />
<property name="TCLAppSecret" column="TCLAppSecret" type="string" />-->
</class>

View File

@@ -246,7 +246,7 @@ namespace RCUHost.Implement
d1.device_id = hostNumber;
d1.frame_id = zhenhao;
d1.cmd_word = "0F";
d1.udp_raw = Tools.ByteToString(data);
d1.udp_raw = data;
d1.direction = "下发";
List<ts_controlitem> lll3 = new List<ts_controlitem>();

View File

@@ -406,6 +406,7 @@ namespace RCUHost.Implement
DataTongJi.TotalCount.TryAdd(TotalKey, u);
}
//logger.Error("升级拉取指令:" + Tools.ByteToString(data));
udpClient.Send(data, data.Length, endPoint);
// 使用同一个 Socket 发送回复
//udpClient.SendTo(data, endPoint);
@@ -1247,6 +1248,10 @@ namespace RCUHost.Implement
byte cmdType = context111.SystemHeader.Value.CmdType;
if (cmdType == 0x68)
{
logger.Error("收到升级返回:" + Tools.ByteToString(gga.Data));
}
ushort MyFrameNO = context111.SystemHeader.Value.FrameNo;
byte[] framenolist = BitConverter.GetBytes(MyFrameNO);
@@ -1274,6 +1279,7 @@ namespace RCUHost.Implement
o.CurrentStatus = "on";
o.CurrentTime = DateTime.Now;
o.EndPoint = EndPointStr;
o.UnixTime = Tools.GetUnixTime();
//新来的数据
var n = Newtonsoft.Json.JsonConvert.SerializeObject(o);
@@ -1358,7 +1364,7 @@ namespace RCUHost.Implement
d1.device_id = HostNNN;
d1.frame_id = MyFrameNO;
d1.cmd_word = "0F";
d1.udp_raw = Tools.ByteToString(OriginalByte);
d1.udp_raw = OriginalByte;
d1.direction = "上报";
string sss = Newtonsoft.Json.JsonConvert.SerializeObject(d1);
CSRedisCacheHelper.Publish("redis-0X36-0X0F", sss);
@@ -1857,7 +1863,7 @@ namespace RCUHost.Implement
d1.device_id = HostNNN;
d1.frame_id = MyFrameNO;
d1.cmd_word = "36";
d1.udp_raw = Tools.ByteToString(OriginalByte);
d1.udp_raw = OriginalByte;
d1.direction = "上报";
List<ts_deviceitem> lll1 = new List<ts_deviceitem>();

View File

@@ -827,21 +827,21 @@ namespace RCUHost.Implement
#endregion
case DeviceType.AirConditioner://空调
#region
//status = device.Value.StatusReceiver >> 15;//开关
//int mode = (device.Value.StatusReceiver >> 13) & 0x03;//模式
//int fanSpeed = (device.Value.StatusReceiver >> 11) & 0x03;//风速
//int valve = (device.Value.StatusReceiver >> 10) & 0x01;//阀门
//int temperature = (device.Value.StatusReceiver >> 5) & 0x1F;//设定温度
//int currentTemp = device.Value.StatusReceiver & 0x01F;//当前温度(室内温度)
int StatusReceiver = device.Value.StatusReceiver;
status = StatusReceiver >> 15;//开关
int mode = (StatusReceiver >> 12) & 0x03;//模式
int fanSpeed = (StatusReceiver >> 11) & 0x03;//风速
int valve = (StatusReceiver >> 10) & 0x01;//阀门
int temperature = (StatusReceiver >> 5) & 0x1F;//设定温度
int currentTemp = StatusReceiver & 0x01F;//当前温度(室内温度)
status = device.Value.StatusReceiver >> 15;//开关
int mode = (device.Value.StatusReceiver >> 13) & 0x03;//模式
int fanSpeed = (device.Value.StatusReceiver >> 11) & 0x03;//风速
int valve = (device.Value.StatusReceiver >> 10) & 0x01;//阀门
int temperature = (device.Value.StatusReceiver >> 5) & 0x1F;//设定温度
int currentTemp = device.Value.StatusReceiver & 0x01F;//当前温度(室内温度)
//status = StatusReceiver >> 15;//开关
//int mode = (StatusReceiver >> 12) & 0x03;//模式
//int fanSpeed = (StatusReceiver >> 11) & 0x03;//风速
//int valve = (StatusReceiver >> 10) & 0x01;//阀门
//int temperature = (StatusReceiver >> 5) & 0x1F;//设定温度
//int currentTemp = StatusReceiver & 0x01F;//当前温度(室内温度)
#region
if (status == 1)//设备开
{

View File

@@ -85,6 +85,8 @@ namespace RCUHost.Implement
public override void Process(ReceiverContext context1)
{
int startIndex = StructConverter.SizeOf(context1.SystemHeader);
//var mydata = Tools.ByteToString(context1.Data);
//logger.Error(string.Format("升级返回:{0}", mydata));
UpdateHostPacketReply? reply1 = DecodeUpdateHostPacketReply(context1.Data, startIndex);
var TTT = new Tuple<ReceiverContext, UpdateHostPacketReply?>(context1, reply1);
//logger.Error(string.Format("收到tftp升级回复命令{0}:{1}{2},解析结果:{3}", context.RemoteEndPoint.Address.ToString(), context.RemoteEndPoint.Port, Tools.ByteToString(context.Data), reply.HasValue));
@@ -96,8 +98,8 @@ namespace RCUHost.Implement
var context = NNN.Item1;
var reply = NNN.Item2;
var updateHostWorker = this.updateHostList.FirstOrDefault(r => r.Host.HostNumber == context.SystemHeader.Value.HostNumber.ToString());
var data= Tools.ByteToString( context1.Data);
logger.Error(string.Format("主机{0}升级返回:{1}", context.SystemHeader.Value.HostNumber.ToString(),data));
var data = Tools.ByteToString(context1.Data);
logger.Error(string.Format("主机{0}升级返回:{1}", context.SystemHeader.Value.HostNumber.ToString(), data));
if (updateHostWorker == null)
{
return;
@@ -215,10 +217,10 @@ namespace RCUHost.Implement
/// <param name="updateFileMd5">升级文件MD5值</param>
private void SendUpdateRequest(Host host, string updateFileMd5, ushort blockNum, byte fileType, string fileName)
{
logger.Error("主机升级:"+host.SysHotel.Code+":"+host.RoomNumber+" FileMd5:"+updateFileMd5+" FileName:"+fileName);
logger.Error("主机升级:" + host.SysHotel.Code + ":" + host.RoomNumber + " FileMd5:" + updateFileMd5 + " FileName:" + fileName);
byte[] data = CreateUpdateRequestPacket(updateFileMd5, blockNum, fileType, fileName);
logger.Error("升级HostNumber为"+host.HostNumber);
logger.Error("升级指令为:"+Tools.ByteToString(data));
logger.Error("升级HostNumber为" + host.HostNumber);
logger.Error("升级指令为:" + Tools.ByteToString(data));
Send(data, host.HostNumber, host.MAC);// host.IP, host.Port);
}
/// <summary>

View File

@@ -306,6 +306,10 @@ namespace WebSite.Controllers
sysHotel.IsPushPMSData = entity.IsPushPMSData;
sysHotel.HeTongNumber = entity.HeTongNumber;
sysHotel.ETV_HotelID = entity.ETV_HotelID;
sysHotel.SwitchRoomStatus_PowerOff2 = entity.SwitchRoomStatus_PowerOff2;
sysHotel.SwitchRoomStatus_PowerOff4 = entity.SwitchRoomStatus_PowerOff4;
sysHotel.SwitchRoomStatus_PowerOff8 = entity.SwitchRoomStatus_PowerOff8;
sysHotel.SwitchRoomStatus_PowerOff16 = entity.SwitchRoomStatus_PowerOff16;
//sysHotel.TCLAppId = entity.TCLAppId;
//sysHotel.TCLAppSecret = entity.TCLAppSecret;
SysHotelManager.Update(sysHotel);
@@ -390,6 +394,12 @@ namespace WebSite.Controllers
TakeOut.SysHotel.IsPushPMSData = entity.IsPushPMSData;
TakeOut.SysHotel.HeTongNumber = entity.HeTongNumber;
TakeOut.SysHotel.ETV_HotelID = entity.ETV_HotelID;
TakeOut.SysHotel.SwitchRoomStatus_PowerOff2 = entity.SwitchRoomStatus_PowerOff2;
TakeOut.SysHotel.SwitchRoomStatus_PowerOff4 = entity.SwitchRoomStatus_PowerOff4;
TakeOut.SysHotel.SwitchRoomStatus_PowerOff8 = entity.SwitchRoomStatus_PowerOff8;
TakeOut.SysHotel.SwitchRoomStatus_PowerOff16 = entity.SwitchRoomStatus_PowerOff16;
//TakeOut.SysHotel.TCLAppId = entity.TCLAppId;
//TakeOut.SysHotel.TCLAppSecret = entity.TCLAppSecret;

View File

@@ -47,6 +47,7 @@ namespace WebSite
private IRoomStatusManager RoomStatusManager;
private IDeviceControlReceiver DeviceControlReceiver;
private IOverviewManager OverviewManager { get; set; }
public IHostModalManager HostModalManager { get; set; }
public static IHostServer hostServer { get; set; }
//private IGroupManager GroupManager;
@@ -521,6 +522,7 @@ namespace WebSite
RoomStatusManager = (IRoomStatusManager)cxt.GetObject("Manager.RoomStatus");
DeviceControlReceiver = (IDeviceControlReceiver)cxt.GetObject("RCUHost.DeviceControlReceiver");
OverviewManager = (IOverviewManager)cxt.GetObject("Manager.Overview");
HostModalManager = (IHostModalManager)cxt.GetObject("Manager.HostModal");
_client = new syncstatus.syncstatusSoapClient();
Timer timer2 = new Timer(20000);//每20秒扫描一次
@@ -735,6 +737,19 @@ namespace WebSite
Host host = HostManager.GetByRoomNumber(T1.Item2, T1.Item1);
if (host != null)
{
int status_id2 = host.SysHotel.SwitchRoomStatus_PowerOff2;
int status_id4 = host.SysHotel.SwitchRoomStatus_PowerOff4;
int status_id8 = host.SysHotel.SwitchRoomStatus_PowerOff8;
int status_id16 = host.SysHotel.SwitchRoomStatus_PowerOff16;
if (status_id2 != 0 || status_id4 != 0 || status_id8 != 0 || status_id16 != 0)
{
if (status_id2 == roomStatus.ID||status_id4==roomStatus.ID||status_id8==roomStatus.ID||status_id16==roomStatus.ID)
{
HostModal h1 = new HostModal();
h1.Modal = new RoomTypeModal() { ModalAddress = "004000001", Type = DeviceType.ServiceInfo };
HostModalManager.SetDevice(host, h1, 2, 0, 25, 0, 0, 0);
}
}
HostManager.ChangeRoomStatus(host, T1.Item3);
string Key = CacheKey.SyncRoomStatus + "_" + host.HostNumber;
RoomStatusRequest ddd = new RoomStatusRequest();

View File

@@ -1303,6 +1303,15 @@ namespace WebSite.Resource {
}
}
/// <summary>
/// 查找类似 Apartment for Rent 的本地化字符串。
/// </summary>
internal static string ChuZu {
get {
return ResourceManager.GetString("ChuZu", resourceCulture);
}
}
/// <summary>
/// 查找类似 Circuit 的本地化字符串。
/// </summary>
@@ -1663,6 +1672,15 @@ namespace WebSite.Resource {
}
}
/// <summary>
/// 查找类似 For Rent 的本地化字符串。
/// </summary>
internal static string DaiZu {
get {
return ResourceManager.GetString("DaiZu", resourceCulture);
}
}
/// <summary>
/// 查找类似 Data 的本地化字符串。
/// </summary>
@@ -6028,6 +6046,15 @@ namespace WebSite.Resource {
}
}
/// <summary>
/// 查找类似 Switch RoomStatus To Power Off 的本地化字符串。
/// </summary>
internal static string RoomStatusSwitch {
get {
return ResourceManager.GetString("RoomStatusSwitch", resourceCulture);
}
}
/// <summary>
/// 查找类似 Temp 的本地化字符串。
/// </summary>
@@ -7657,6 +7684,15 @@ namespace WebSite.Resource {
}
}
/// <summary>
/// 查找类似 CheckOut 的本地化字符串。
/// </summary>
internal static string TuiFang {
get {
return ResourceManager.GetString("TuiFang", resourceCulture);
}
}
/// <summary>
/// 查找类似 TV 的本地化字符串。
/// </summary>

View File

@@ -2899,4 +2899,16 @@ Single circuit status</value>
<data name="WelcomeBGM" xml:space="preserve">
<value>WelcomeBGM</value>
</data>
<data name="ChuZu" xml:space="preserve">
<value>Apartment for Rent</value>
</data>
<data name="DaiZu" xml:space="preserve">
<value>For Rent</value>
</data>
<data name="TuiFang" xml:space="preserve">
<value>CheckOut</value>
</data>
<data name="RoomStatusSwitch" xml:space="preserve">
<value>Switch RoomStatus To Power Off</value>
</data>
</root>

View File

@@ -1302,6 +1302,15 @@ namespace WebSite.Resource {
}
}
/// <summary>
/// 查找类似 出租 的本地化字符串。
/// </summary>
internal static string ChuZu {
get {
return ResourceManager.GetString("ChuZu", resourceCulture);
}
}
/// <summary>
/// 查找类似 回路 的本地化字符串。
/// </summary>
@@ -1662,6 +1671,15 @@ namespace WebSite.Resource {
}
}
/// <summary>
/// 查找类似 待租 的本地化字符串。
/// </summary>
internal static string DaiZu {
get {
return ResourceManager.GetString("DaiZu", resourceCulture);
}
}
/// <summary>
/// 查找类似 数据 的本地化字符串。
/// </summary>
@@ -6045,6 +6063,15 @@ namespace WebSite.Resource {
}
}
/// <summary>
/// 查找类似 状态更新断电​ 的本地化字符串。
/// </summary>
internal static string RoomStatusSwitch {
get {
return ResourceManager.GetString("RoomStatusSwitch", resourceCulture);
}
}
/// <summary>
/// 查找类似 客房温度 的本地化字符串。
/// </summary>
@@ -7665,6 +7692,15 @@ namespace WebSite.Resource {
}
}
/// <summary>
/// 查找类似 退房 的本地化字符串。
/// </summary>
internal static string TuiFang {
get {
return ResourceManager.GetString("TuiFang", resourceCulture);
}
}
/// <summary>
/// 查找类似 电视 的本地化字符串。
/// </summary>

View File

@@ -2901,4 +2901,16 @@
<data name="WelcomeBGM" xml:space="preserve">
<value>欢迎背景乐</value>
</data>
<data name="ChuZu" xml:space="preserve">
<value>出租</value>
</data>
<data name="DaiZu" xml:space="preserve">
<value>待租</value>
</data>
<data name="RoomStatusSwitch" xml:space="preserve">
<value>状态更新断电​</value>
</data>
<data name="TuiFang" xml:space="preserve">
<value>退房</value>
</data>
</root>

View File

@@ -1302,6 +1302,15 @@ namespace WebSite.Resource {
}
}
/// <summary>
/// 查找类似 出租 的本地化字符串。
/// </summary>
internal static string ChuZu {
get {
return ResourceManager.GetString("ChuZu", resourceCulture);
}
}
/// <summary>
/// 查找类似 回路 的本地化字符串。
/// </summary>
@@ -1662,6 +1671,15 @@ namespace WebSite.Resource {
}
}
/// <summary>
/// 查找类似 待租 的本地化字符串。
/// </summary>
internal static string DaiZu {
get {
return ResourceManager.GetString("DaiZu", resourceCulture);
}
}
/// <summary>
/// 查找类似 數據 的本地化字符串。
/// </summary>
@@ -6045,6 +6063,15 @@ namespace WebSite.Resource {
}
}
/// <summary>
/// 查找类似 切換狀態即斷電 的本地化字符串。
/// </summary>
internal static string RoomStatusSwitch {
get {
return ResourceManager.GetString("RoomStatusSwitch", resourceCulture);
}
}
/// <summary>
/// 查找类似 客房溫度 的本地化字符串。
/// </summary>
@@ -7667,6 +7694,15 @@ namespace WebSite.Resource {
}
}
/// <summary>
/// 查找类似 退房 的本地化字符串。
/// </summary>
internal static string TuiFang {
get {
return ResourceManager.GetString("TuiFang", resourceCulture);
}
}
/// <summary>
/// 查找类似 電視 的本地化字符串。
/// </summary>

View File

@@ -2903,4 +2903,16 @@
<data name="WelcomeBGM" xml:space="preserve">
<value>歡迎詞背景樂</value>
</data>
<data name="ChuZu" xml:space="preserve">
<value>出租</value>
</data>
<data name="DaiZu" xml:space="preserve">
<value>待租</value>
</data>
<data name="RoomStatusSwitch" xml:space="preserve">
<value>切換狀態即斷電</value>
</data>
<data name="TuiFang" xml:space="preserve">
<value>退房</value>
</data>
</root>

View File

@@ -388,6 +388,17 @@
</div>
</td>
</tr>
<tr>
<th align="right">
<label for="IsPowerOff1"> <%: Html.Language("RoomStatusSwitch")%>: </label>
</th>
<td>
<input id="SwitchRoomStatus_PowerOff2" type="checkbox" name="SwitchRoomStatus_PowerOff2" style="vertical-align: top;" value="2" <%: Model.SwitchRoomStatus_PowerOff2==2 ? "checked='checked'" : "" %> /> <%: Html.Language("ChuZu")%>
<input id="SwitchRoomStatus_PowerOff4" type="checkbox" name="SwitchRoomStatus_PowerOff4" style="vertical-align: top;" value="4" <%: Model.SwitchRoomStatus_PowerOff4==4 ? "checked='checked'" : "" %> /> <%: Html.Language("DaiZu")%>
<input id="SwitchRoomStatus_PowerOff8" type="checkbox" name="SwitchRoomStatus_PowerOff8" style="vertical-align: top;" value="8" <%: Model.SwitchRoomStatus_PowerOff8==8 ? "checked='checked'" : "" %> /> <%: Html.Language("TuiFang")%>
</td>
</tr>
<%-- TCL 功能--%>
<%-- <tr>
<th align="right">